본문 바로가기

Tech

(556)
[Git] 버전 관리 시스템, git 🔊 해당 포스팅은 모두의 리눅스 서적 내용 중 19장에 해당하는 내용을 읽고 개인적인 정리 목적 하에 작성된 글입니다. 포스팅 내용은 해당 서적에 기반하였으며 포스팅에서 사용된 자료는 모두 직접 재구성하였음을 알립니다. 이번 포스팅에서는 버전 관리 시스템 즉, 파일 변경 이력을 관리하는 도구인 git에 대해 알아보려고 한다. 먼저 버전 관리 시스템이 무엇인지 부터 살펴보자. 리눅스 뿐만 아니라 맥, 윈도우를 사용하다 보면 특정 텍스트 파일이나 소스코드 또는 셸 스크립트 파일을 계속해서 추가하거나 변경하는 것이 일반적이다. 하지만 파일 내용을 변경할 때마다 매번 새로운 파일을 만들게 되면 이전 버전의 파일 상태로 돌아가기도 힘들고 파일 수가 계속 많아져 디스크를 차지하는 용량도 점진적으로 커질 것이다. 이..
[Linux] 아카이브와 압축, 그리고 yum, apt 소프트웨어 패키지 🔊 해당 포스팅은 모두의 리눅스 서적의 내용을 읽고 개인적인 정리 목적 하에 작성된 글임을 알립니다. 포스팅 내용의 기반 내용은 해당 서적에 기반하였으며 내용 자체는 제가 직접 재구성했음을 알립니다. 이번 포스팅에서는 리눅스로 파일을 아카이브하고 압축하는 방법, 그리고 apt나 yum과 같은 소프트웨어 패키지를 관리하는 명령어에 대해 알아보자. 1. 아카이브와 압축 우선 아카이브와 압축에 대한 개념 구분부터 지어보자. 아카이브란 파일을 모으는 행위이고 압축은 아카이브로 모은 파일들을 작게 만드는 행위이다. 윈도우나 맥에서는 주로 zip을 활용해서 파일을 압축하는데, 이 때 zip은 파일을 아카이브하고 압축하는 것을 한 번에 실행한다. 즉, zip 이라는 명령어에서 아카이브와 압축을 구분하지는 않는다. 하..
[Linux] 셸 스크립트 기초와 활용하기 🔊 해당 포스팅은 모두의 리눅스 서적의 내용을 읽고 개인적인 정리 목적 하에 작성된 글임을 알립니다. 포스팅 내용의 기반 내용은 해당 서적에 기반하였으며 내용 자체는 제가 직접 재구성했음을 알립니다. 이번 포스팅에서는 셸 스크립트란 무엇이고, 셸 스크립트의 기초와 더불어 기초를 쌓은 뒤 잘 활용할 수 있는 방법에 대해서 알아보도록 하자. 가장 먼저 셸 스크립트가 무엇인지 개념적으로 배워보도록 하자. 1. 여러 개의 명령어를 하나의 파일로 실행하자, 셸 스크립트! 셸 스크립트란, 셸에서 실행될 하나 또는 그 이상의 커맨드 라인을 입력해 놓은 파일이다. 단순히 명령어를 여러개 나열하는 것을 넘어서서 조건 분기, 반복과 같은 복잡한 제어구조도 수행할 수 있다. 마치 Python 이나 Java 같은 프로그래밍 ..
[Linux] 정규표현식과 텍스트 고도화 처리가 가능한 sed, awk 명령어 🔊 해당 포스팅은 모두의 리눅스 서적의 내용을 읽고 개인적인 정리 목적 하에 작성된 글임을 알립니다. 포스팅 내용의 기반 내용은 해당 서적에 기반하였으며 내용 자체는 제가 직접 재구성했음을 알립니다. 이번 포스팅에서는 텍스트 처리를 고도화하는 데 핵심이라고 할 수 있는 정규표현식, 그리고 이를 활용해 리눅스에서 텍스트를 고도화해서 처리하는 방법에 대해 알아본다. 1. 정규 표현식 리눅스에서는 수많은 것들이 텍스트 파일로 되어 있기 때문에 특정 문자열 패턴을 검색하는 기능이 필수적이다. 리눅스에서는 grep 이라는 명령어로 문자열을 검색하며 또 정규표현식까지 같이 활용하면 여러가지 복잡한 패턴의 문자열도 필터링할 수 있다. 먼저 grep 명령어의 활용 방식은 아래와 같다. 인자로 지정한 파일 속에서 [검색..
[Linux] 프로세스와 잡, 표준 입/출력, 그리고 기본 텍스트 처리 🔊 해당 포스팅은 모두의 리눅스 서적의 내용을 읽고 개인적인 정리 목적 하에 작성된 글임을 알립니다. 포스팅 내용의 기반 내용은 해당 서적에 기반하였으며 내용 자체는 제가 직접 재구성했음을 알립니다. 이번 포스팅에서는 리눅스에서의 프로세스와 잡에 대한 설명, 표준 입출력과 파이프라인, 그리고 리눅스를 이용해 기본적으로 할 수 있는 텍스트 처리에 대해 알아보자. 가장 먼저 리눅스의 프로세스와 잡이다. 1. 프로세스와 잡 먼저 프로세스가 무엇인지 알아보고, 우리가 현재 사용하고 있는 리눅스에서 실제 어떤 프로세스가 돌아가고 있는지도 확인하는 명령어를 배워보자. 앞서서 우리가 그동안 배워온 여러가지 명령어(cat, less, man 등등..)들의 실체는 디스크에 있는 '파일'임을 알 수 있었다. 그러면 셸에서..
[Linux] 리눅스로 파일과 디렉터리를 내 맘대로 조작하기 🔊 해당 포스팅은 모두의 리눅스 서적의 내용을 읽고 개인적인 정리 목적 하에 작성된 글임을 알립니다. 포스팅 내용의 기반 내용은 해당 서적에 기반하였으며 내용 자체는 제가 직접 재구성했음을 알립니다. 이번 포스팅에서는 리눅스를 활용해서 파일과 디렉토리를 내맘대로 조작해보는 방법에 대해 배워보자. 먼저 리눅스는 파일로 구성되어 있다고 할 수 있다. 그리고 리눅스를 처음에 깔게되면 주요 디렉터리 구조가 존재하는데, 각 디렉터리가 대략 어떤 역할을 하는지를 알아보도록 하자. 먼저 아래 그림은 리눅스의 주요 디렉터리만 표시한 구조이다. 여기서 윈도우 OS와 리눅스 간에 명확한 디렉터리 구조 차이점이 있다. 윈도우는 물리 디스크가 2개 있다면 위와 같은 디렉터리 구조가 시스템 전체에 2개 존재한다. 하지만 리눅스..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 더 큰 도전으로(2) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 이번 포스팅에서는 그동안 만들어온 Dezero라는 딥러닝 프레임워크가 더 복잡한 모델인 CNN, RNN도 구현할 수 있도록 기능을 고도화해볼 것이다. 그리고 난 후 대표적인 CNN, RNN 계열 모델인 VGG16, LSTM 모델을 Dezero만을 활용해 빌딩해보도록 하자. 드디어 책의 마지막 챕터이다. 이제 그 끝을 향해 달려나가보도록 하자! 1. CNN 메커니즘 - 2차원일 경우 CNN을 코드로 구현하기 위해서는 CNN에 대한 개념 이해가 선행되어야 ..
[Linux] 리눅스의 개념과 셸 다루기 🔊 해당 포스팅은 모두의 리눅스 서적의 내용을 읽고 개인적인 정리 목적 하에 작성된 글임을 알립니다. 포스팅 내용의 기반 내용은 해당 서적에 기반하였으며 내용 자체는 제가 직접 재구성했음을 알립니다. 이번에 회사를 다니면서 팀 내에 뛰어난 동료 분께서 리눅스 공부를 해보는게 어떤지 제안해주셨다. 덕분에 해볼 공부거리가 생겼다! 어떻게 보면 이전부터 했었어야 할 공부 주제인데 마냥 내가 잘 모르는 쪽이다보니 무의식적으로 회피해오던 게 아닌가 싶었다. 공부거리를 제공해주신 동료 분께 깊은 감사 인사 드립니다! 이번에 공부해볼 분야는 바로 리눅스이다. 이번 포스팅에서는 리눅스라는 개념자체가 무엇인지, 그리고 리눅스와 사용자를 연결하는 도구인 셸(Shell)이 무엇이고 사용하는 방법에 대해서도 배워보도록 하자...
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 더 큰 도전으로(1) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 어느덧 책의 마지막 챕터에 도달했다. 이번 포스팅에서는 그동안 만들어온 Dezero라는 나만의 딥러닝 프레임워크를 더 큰 도전을 향해 나아가도록 발전시켜본다. 학습시킨 모델의 파라미터를 저장하거나 로드하는 기능 뿐만 아니라 더 효율적인 학습을 위한 기법인 드롭아웃 같은 기능을 추가해본다. 다음 포스팅에서는 지금까지는 Fully Connected Layer 로만 구성된 DNN 딥러닝 모델을 구현했지만, 더 복잡한 모델인 CNN, RNN의 계층도 구현해볼 ..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 신경망 만들기(2) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 이번 포스팅에서는 드디어 우리가 흔히 아는 오픈소스 딥러닝 프레임워크, 예를 들어 Tensorflow, Pytorch, Chainer를 사용하면서 접했던 API 형태로 Dezero를 추상화시켜볼 예정이다. 매개변수를 한데 모아주는 계층, Linear 계층같은 것들도 한데 모아주는 계층, 더 나아가 Optimizer, Dataset, DataLoader 까지 만들어볼 예정이다. 아마 딥러닝 프레임워크를 많이 사용해본 분들이라면 해당 이름의 API들이 어떤..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 신경망 만들기(1) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 이번 포스팅에서는 드디어 Dezero 프레임워크를 활용해서 신경망을 만들 수 있도록 기능을 추가할 예정이다. 신경망을 만들기 위해서는 추가적으로 다양한 함수의 기능들이 추가되어야 하는데 이번에는 이러한 함수들을 추가하는 포스팅이 주요 내용이 될 예정이다. 또한 이전까지는 우리가 만들어온 Dezero는 주로 입력이 스칼라인 형태를 다루어왔지만, 현실에서 가장 빈번하게 다루어지는 텐서의 입력 형태도 처리될 수 있도록 확장할 예정이다. 1. 우리가 만들어온 ..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 고차 미분 계산(2) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 저번 포스팅에서는 고차 미분 계산을 수학적으로 어떻게 구현해낼 수 있는지, 또 미분을 사용하는 이유는 목적함수를 최적화하는 것인데, 최적화 하는 방법론으로서 경사 하강법(Gradient Descent)과 뉴턴 방법(Newton's Method)의 개념이 무엇이고 차이점이 무엇인지도 알아보았다. 이번 포스팅에서는 뉴턴 방법 최적화 기법의 근간이 되는 고차 미분을 우리의 Dezero 프레임워크에 어떻게 녹여낼지에 대해서 배워보도록 하자. 그리고 고차미분이 ..
[CS] 네트워크의 OSI 7계층에 대해 알아보자 🔊 해당 포스팅은 로스카츠의 AI 머신러닝 네트워크 목차 블로그 내용을 공부하면서 배운 내용을 저만의 방식으로 재정리하고자 하는 목적 하에 작성되는 포스팅입니다. 사용되는 모든 자료는 원본 블로그의 내용을 참고하되 제가 직접 재구성했음을 알립니다. 이번 포스팅에서는 CS 지식 중 네트워크, 그 중에서도 서로 다른 컴퓨터 간에 통신할 때 사용되는 OSI 7계층에 대해 알아보고 각 계층이 어떤 역할을 수행하는지에 대해 알아보려고 한다. 네트워크, OSI 계층같은 개념이 자리잡지 않았던 시절, 서로 다른 컴퓨터 간에 통신을 한다는 것은 상상하기 힘든 일이었다고 한다. 즉, 예를 들어 같은 브랜드의 컴퓨터끼리만 통신이 가능하고 서로 다른 브랜드의 컴퓨터 간에는 통신을 할 수 없었던 시절이 있었다(상상이 안 된다..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 고차 미분 계산(1) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 저번 포스팅까지 우리가 만들어온 Dezero라는 프레임워크가 미분 계산을 자동화할 수 있어 역전파 시 미분 계산을 자연스레 할 수 있도록 만들었다. 하지만 더 어려운 작업을 자동화시켜야 해야 하는데, 그 작업이 바로 고차 미분 계산이다. 고차 미분이란, 1차 미분에서 미분을 $N$번 더 수행하는 2차 미분, 3차 미분, ... 을 의미한다. 이렇게 고차 미분을 수행해야 하는 이유는 함수를 최적화하는 것과 관련이 있다. 함수 최적화가 필요한 이유는 뭘까?..
[Git] confilct 와 결부되는 cherry-pick, rebase, revert 알아보기 해당 포스팅은 얼마 전 업로드된 이고잉님의 오픈튜토리얼스 Git 강의를 보고 개인적으로 정리하는 목적 하에 작성되는 포스팅입니다. 아래 포스팅 내용의 모든 출처는 원본 영상임을 밝힙니다. 이번 포스팅에서는 Git을 어느정도 알고 나면 더 알고싶어 지는(?) 기능들인 cherry-pick, rebase, revert 기능에 대해 알아보고 실습도 해보려고 한다. 우선 해당 기능들은 이전 포스팅에서 배운 Git 에서의 conflict를 마주하고 해결하는 방법에 대해 알고 있어야 학습이 수월하다는 점 참고해두자. 물론 여기서 배울 3가지 기능들이 무조건적으로 conflict 와 결부되는 것은 아니지만, 해당 기능들을 사용하다 보면 conflict가 자주 발생할 수 있기 때문에 conflict가 무엇인지, 또 어..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 더 복잡한 미분 자동 계산(2) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 저번 포스팅까지 해서 일직선의 계산 그래프 형태만이 아닌 더 복잡한 계산 그래프 형태도 자동미분할 수 있도록 여러가지 클래스들을 개선했었다. 하지만 직전까지 만든 코드들에 대해서도 개선사항들이 존재한다. 먼저 메모리를 절약할 수 있다는 점과 변수 사용성 개선, 연산자 오버로드 등이 있다. 그러면 이제 하나씩 개선시켜보도록 하자. 그 첫번째 내용으로는 메모리를 관리하는 것이다. 1. Python은 메모리를 어떻게 관리하고 있을까? 먼저 해당 목차에서 소개..
[CS] OS(운영체제)의 메모리 관리에 대해 파헤쳐보자 이번 포스팅은 CS 스터디를 하기 위해 진행해오고 있던 '한 권으로 읽는 컴퓨터 구조와 프로그래밍' 의 메모리 파트를 읽다가 도저히(?) 이해가 안 가서.. 개별적으로 설명이 매우 잘 된 블로그를 통해서 얻게 된 내용을 나만의 방법으로 정리해 포스팅하려고 한다. 본문 내용의 출처는 이 블로그임을 밝힌다. 1. 운영체제(OS)의 역할 본론으로 메모리 관리라는 개념에 들어가기에 앞서 우리는 운영체제 즉, OS의 역할을 먼저 짚고 넘어가야 한다. 운영체제의 역할은 다음과 같이 정의할 수 있다. CPU, 메모리, I/O 장치 등 복잡한 컴퓨터 하드웨어를 잘 몰라도 사람이 쉽게 프로그램(또는 어플리에키션)을 만들 수 있게끔 일련의 '공통' 기능을 지원한다. 그래서 운영체제의 기능을 크게 3가지로 분류하면 CPU ..
[회고] 978일이라는 작은 도전의 끝을 맺으며 978일 전, 나에게 있어서 작지만 거대하다고 느껴지는 하나의 도전을 시작했다. 그리고 오늘이 되는 시점에 그 하나의 도전을 하면서 들어왔던 작은 터널을 이제야 빠져나왔다. 결론부터 말하자. 오늘 부로 나의 정규 커리어가 시작되었다. 카카오 모빌리티라는 회사에서 머신러닝 엔지니어로서의 정규 커리어 첫 발을 내딛기 시작했다. 지금의 자리까지 오는 데 힘들었던 것 같기도 하다. 가끔 고생도 한 것 같고, 무엇인가를 쟁취할 것 같다가도 인생이 내 맘 대로 되지 않아 실망한 적도 있었던 것 같다. 그 때마다 포기하지 않았던 이유는 지금의 이런 순간이 올 생각 때문에 버틴 것이 아닐까싶다. 사실 이번에 회고록을 작성하는 이유는 그동안 나름대로 열심히 준비를 하면서 내가 가장 중요하게 생각했던 가치관과 그리고 더불..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 더 복잡한 미분 자동 계산(1) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 저번 포스팅까지 걸쳐서 순수하게 Python, Numpy 만을 활용해서 미분을 자동으로 계산하는 방법에 대해 알아보고 코드로 구현까지 했다. 하지만 지금까지 배운 방법은 약간의 제약성이 존재한다. 바로 입력 또는 출력 변수가 여러개가 되는 경우에는 대응하지를 못한다. 이번 포스팅에서는 가변적인 길이의 입력, 출력 변수에도 대응이 가능하고 더 나아가 일직선 계산 그래프 형태가 아닌 분기, 결합이 추가된 복잡한 계산 그래프 형태에 대해서도 미분을 자동적으로..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 미분 자동 계산(2) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 저번 포스팅에서는 나만의 딥러닝 프레임워크를 만드는 첫 단계로서 수치 미분을 통해 미분을 자동으로 계산하는 방법에 대해 알아보았다. 하지만 앞서 배운 수치 미분이라는 방법은 계산 비용과 정확도 측면에서 단점이 존재한다. 그래서 이에 대한 대안책으로 오차역전파라는 방법이 등장한다. 오차역전파를 이용하면 미분 계산도 효율적으로 빠르게 할 수 있으며 결과값의 오차도 작아진다. 책에서는 역전파 이론에 대해서도 어느 정도 분량을 담아 기술하고 역전파 구현하는 단..