[[컴퓨터공학|컴퓨터 과학 & 공학
Computer Science & Engineering
]]- [ 펼치기 · 접기 ]
- ||<tablebgcolor=#fff,#1c1d1f><tablecolor=#373a3c,#ddd><colbgcolor=#0066DC><colcolor=white> 기반 학문 || 수학( 해석학 · 이산수학 · 수리논리학 · 선형대수학 · 미적분학 · 미분방정식 · 대수학( 환론 · 범주론) · 정수론) · 이론 컴퓨터 과학 · 암호학 · 전자공학 · 언어학( 형태론 · 통사론 · 의미론 · 화용론 · 음운론) · 인지과학 ||
하드웨어 구성 SoC · CPU · GPU( 그래픽 카드 · GPGPU) · ROM · RAM · SSD · HDD · 참조: 틀:컴퓨터 부품 기술 기계어 · 어셈블리어 · C/ C++ · C# · Java · Python · BIOS · 절차적 프로그래밍 · 객체 지향 프로그래밍 · 해킹 · ROT13 · 일회용 비밀번호 · 사물인터넷 · 와이파이 · GPS · 임베디드 · 인공신경망 · OpenGL · EXIF · 마이크로아키텍처 · ACPI · UEFI · NERF · gRPC · 리버스 엔지니어링 · HCI · UI · UX · 대역폭 · DBMS · NoSQL · 해시( SHA · 브루트 포스 · 레인보우 테이블 · salt · 암호화폐) · RSA 암호화 · 하드웨어 가속 연구
및
기타논리 회로( 보수기 · 가산기 · 논리 연산 · 불 대수 · 플립플롭) · 정보이론 · 임베디드 시스템 · 운영 체제 · 데이터베이스 · 프로그래밍 언어{ 컴파일러( 어셈블러 · JIT) · 인터프리터 · 유형 이론 · 파싱 · 링커 · 난해한 프로그래밍 언어} · 메타데이터 · 기계학습 · 빅데이터 · 폰노이만 구조 · 양자컴퓨터 · 행위자 모델 · 인코딩( 유니코드 · MBCS) · 네트워크 · 컴퓨터 보안 · OCR · 슈퍼컴퓨터 · 튜링 머신 · FPGA · 딥러닝 · 컴퓨터 구조론 · 컴퓨터 비전 · 컴퓨터 그래픽스 · 인공지능 · 시간 복잡도( 최적화) · 소프트웨어 개발 방법론 · 디자인 패턴 · 정보처리이론 · 재귀 이론 · 자연어 처리( 기계 번역 · 음성인식) · 버전 ( 버전 관리 시스템 · Git · GitHub)
학습 | |||||||||
행동학습 | 인지학습 | 기계학습 ⊃ 심층학습 | |||||||
비연합학습 | 연합학습 | 사회학습 | 잠재학습 | 통찰학습 | 지도학습 | 비지도학습 | 강화학습 | ||
습관화 | 민감화 | 고전적 조건형성 | 도구적 조건형성 |
1. 개요
deep learning기계학습 종류 중 하나인 인공신경망 방법론 중 하나이다. 퍼셉트론들로 구성된 은닉층을 다층으로 쌓고 각 층을 서로 연결한 기법을 뜻한다.
현대 인공지능 기술의 핵심이자 앞으로 더더욱 각광받게 될 기술이다. 과거엔 연산 장치들의 성능이 낮고 메모리 용량이 적어 논문 및 이론상으로만 존재하고 구현 불가능한 기술이었다. 하지만 현대에 들어 반도체의 성능이 향상됨에 따라 더 복잡한 모델을 설계하고 학습할 수 있게 되었다.[1]
2. 설명
회귀 분석의 상위 호환이라고 생각하면 된다. 수학적으로 함수 관계를 갖는 x와 y는 있지만, x로부터 y를 예측할 수 있는 모델이 없을 때 쓰는 방법이다. 이해하기 쉽게 설명하자면, 1차 함수 식 y = ax + b가 존재한다고 가정하자. 일반적으로 우리가 배워 온 방식은 a, b가 주어진 상태에서 x, y의 해를 찾는 방식이다. 하지만, 회귀 분석의 경우 이와 반대로 무수히 많은 x, y값이 존재할 때, 그 수많은 x, y쌍의 분포 형태를 가장 잘 표현하는 a, b값을 찾는 과정이다. 이때 x는 독립 변수, y는 종속 변수라 하며 독립 변수가 많은 경우를 다중 회귀라고 부른다.입력층과 출력층 사이에 있는 은닉층의 인공 뉴런인 퍼셉트론을 여러 층 쌓고 연결한 인공신경망 기법을 주로 다룬다. 인공신경망을 구성할 때 대개 입력층을 제외하고 출력층을 포함한 은닉층을 3층 이상 쌓으면 심층학습이라 부른다. RNN 자체도 심층학습의 종류이지만 RNN을 여러 층으로 쌓으면 deep RNN으로 불리는 식이다.
인공신경망을 학습시키는 방법은 사실 매우 간단하다. 수학적 설명을 하자면 미적분을 통해 로스펑션의 에러값을 구해 각 가중치의 그래디언트 값을 구하고, 가중치를 그래디언트 나누기 그래디언트 진도의 제곱 값만큼 줄이면 된다. 하지만 이딴 수학적 설명은 아무 의미 없다. 왜냐하면 인공신경망의 근본이 되는 신경학습의 원리만 알면 되기 때문이다.
신경이 학습을 하는 원리는 이러하다. 신경은 어떤 사건이 일어났을 때 그에 대한 반응으로 행동을 하게 되어있다. 그런데 만약 그 행동이 안 좋은 결과를 일으킨다면, 그 행동을 일으킨 모든 신경세포를 덜 활성화하게 만든다. 반대로, 그 행동이 좋은 결과로 이어졌을 경우 그 행동을 일으킨 모든 신경세포가 더 쉽게 활성화하게 만든다. 간단한 예시로 강아지 훈련을 생각해보자. 강아지가 잘못을 저지를 때 혼내고 잘했을 때 간식을 주면 나중엔 벌을 주거나 간식을 주지 않아도 알아서 학습된 행동을 하게 되는 것과 같다.
때문에 인공신경망의 학습을 구현하기 위해 필요한 기법 역시 복잡할 필요성이 없다. 일단 어떤 한 신경 세포(노드)가 다음 세포(노드)에 보내는 값이 플러스인지 마이너스인지 아니면 제로인지 판단한다. 그리고 그 세포에서 값을 받은 신경세포가 활성화 되었을 때, 좋은 결과일 시 플러스, 나쁜 결과일 시 마이너스로 판단한다. 이제 첫번째 세포의 출력값 방향과 두번째 세포의 결과값의 방향을 알고 있다. 이 두 값의 방향을 곱한다. 예를 들면, 플러스 곱 플러스는 플러스, 플러스 곱 마이너스는 마이너스 이런 식으로 말이다. 마지막으로, 첫번째 세포가 두번째 세포에 끼치는 영향력(가중치)을 그 방향으로 아주 조금씩 변화 시킨다. 이러한 방식으로 인공신경망의 학습방식을 구현할 수 있다.
인공신경망 자체는 꽤 오랫동안 존재해 왔고, CNN이나 RNN과 같은 신경망 모델도 1980년대에 활발히 연구되었던 주제다. 하지만 당시 반도체의 연산 성능으로는 사실상 쓸만한 모델구현이 불가능했고, 십수 년동안 이론적인 방법으로만 여겨졌다. 그리고 2000년대에 들어서야, 그 이론들이 현실로 다가온 것. 물론 20년 동안 컴퓨터만 발달했던 것은 아니다. 하지만 한동안 학계에서 "인공신경망"이란 단어가 논문에 들어가면 퇴짜맞는다는 소문이 있었을 정도로 학계가 무관심을 넘어서 혐오했었고[2], 소수의 소신있는 연구자들만 인공신경망 연구를 진행해 왔다. 이런 기조가 달라진 것은 2006년에 제프리 힌튼이 DBN을 발표하면서부터이다. 2009년 엄청난 신드롬을 일으킨 이후 인공지능 분야의 구세주로 추앙받고 있다. 예를 들면, 페이스북의 심층학습 기반 얼굴인식 모델인 deepface는 인식률 97%를 돌파하며 인간과 거의 성능차이가 없을 정도이며, 물체인식 대회에서 심층학습의 일종인 CNN(convolution neural network)은 그간 이어져오던 물체 인식 알고리즘을 모두 순위권 밖으로 몰아내며 랭킹 줄세우기를 하였으며, 음성인식 분야에서는 아무것도 모르고 그냥 가져다 박기만 했는데 인식률이 20%가 넘게 향상되었다는 소문이 들리고 있고, 구글은 아예 이를 이용하여 게임하는 방법을 스스로 학습하는 인공지능을 만들거나 검색결과를 이용해 고양이의 개념과 생김새를 학습하는 기계를 만들어낼 정도이다. 네이버와 카카오와 같은 국내 기업도 심층학습을 적극적으로 연구중에 있다.
심층학습의 가장 큰 특징은 모델의 부피를 키우고, 데이터를 쏟아부으면 무조건적으로 그만큼의 성능향상을 보인다는 점이다.[3] 네이버의 Deview2013에서 심층학습에 대한 세션이 있었는데 심층학습 이전과 이후를 각각 청동기 시대와 철기 시대에 비유할 정도로 심층학습을 높게 평가했다.
다만 어떤 사람들은 심층학습을 다른 기계학습과 동떨어진, 마법의 기술처럼 착각하는 경향이 있는데, 사실 심층학습은 기계학습 알고리즘의 한 종류라고 볼 수 있다. 즉, 심층학습 ⊂ 기계학습이다. 예를 들어 심층학습 이전에 가장 유행했던 SVM도 결국 activation 없는 (linear) single layer perceptron에다 hinge loss function + Frobenius norm regularization 을 사용한 것이다. Logistic regression 은 말할 것도 없고. 또, 한번 언급되었지만, 인공신경망류 기법들은 통계학적으로 보면 아주 크고 복잡한 혼합 회귀 모델의 일종이라고 볼 수 있다.
심층학습이 일반적인 MLP에 비해 가장 문제가 되는 것 중 하나는 다수의 은닉층을 사용한다는 거다. 이게 무슨 뜻인지 간단하게 설명하자면, 매 층을 지날 때마다 정답을 낼 수 있는 공식의 교정과정이 일어난다고 보면 된다. 다만 그 교정과정이 1부터 0까지의 숫자를 계속 곱하여 수정하는 방식이기 때문에 깊은 은닉층인 경우 차츰 공식의 기울기가 0에 가까워지는 문제가 존재한다.[4] [5] 이 때문에 기울기 소멸 문제는 한때 인공신경망 학계를 고사시킨 전례가 있는데, 다행히도 현재는 크게 다음과 같은 해결책이 있다. 현재 기준으로 자주 쓰이는 방식에는 굵은 체로 표기했다.
- 가중치 초기화: 초기 가중치를 Xavier 초기화 방식이나 He 초기화 방식을 이용해 설정한다.
- 사전학습(pretraining): 가중치를 무작위로 초기화하지 말고, 데이터를 사용하여 비지도학습에 의해 초기 가중치를 결정한다.
- 부분적 가중치 학습(dropout): 각 학습 단계에서 모든 가중치를 조정하지 말고, 무작위로 선택한 일부 가중치만 조절한다. dropout라는 단어 뜻 그대로 일부 뉴런을 비활성화한 상태로 학습을 하는 것이다. 단, test 단계에서는 dropout이 해제된다.
- 같은 층의 여러 노드가 동일한 가중치를 공유해서 사용한다.
- 배치 정규화 (batch normalization): 값(feature)를 -1 에서 1 사이로 정규화 시킨 다음에 ax+b (a와 b는 변수)를 수행한다. 원래는 기울기를 흐르게 하는 목적으로 고안되었지만 학습을 빠르게 하고, 약간의 일반화 효과도 있다.
- 전달 함수 변경: 인공신경망은 결과값(yo)에 추론값(y*)을 대입시켜서 나오는 오차(yo-y*)를 다시 은닉층이라는 행렬값(x1 ~ xn)에 되먹임(feedback)하는 오류 역전파알고리즘(error back-propagation)을 기반으로 한다. 여기서 그냥 오차를 되먹임(빼주는 것)을 하는것은 변동성을 심하게 주게 되어 변동성에 쿠션역할을 할 수 있는 함수를 사용하게 된다. 오래 전 나왔던 것으로는 시그모이드(sigmoid) 함수가 있는데 (sigmoid 함수의 구조는 오차가 작아질 수록 급하게 0에 수렴하는 함수이다.) sigmoid 함수는 앞서 말한 것처럼 0에 수렴하는 함수이기 때문에, 깊은 레이어를 가지고 있을수록 gradient 값이 0에 가까워져서 기울기 소멸 문제를 촉진할 수 있다. 현재 가장 많이 사용되는 ReLU[6], leakly ReLU[7], PReLU[8], ELU[9]같은 등 부분적으로 선형적인 함수를 사용하여 해결할 수 있다. [10]
- 층(layer)를 건너뛰는 연결(skip connection): 레이어를 계속해서 쌓음과 동시에 상위 레이어와 하위 레이어 중간을 건너뛰어 연결하는 계산을 넣으면 (말 그대로 skip connection), 이러한 계산을 따라서 기울기가 흐를 수 있다. 이때 많이 쓰는 연결함수 중 하나는 덧셈. 말 그대로 f'(x) = f(x) + x 꼴로 만드는 것이다. 덧셈은 기울기를 그대로 흘려보내기 때문에 가능하다. 게다가 기울기를 흐르게 하는 역할 외에, 모델이 값 자체가 아니라 값의 오차(residual)을 배우게 해서 수렴 속도가 빨라지는 부가 효과도 있다. 이 방식을 사용해서 ResNet은 레이어를 152개 씩이나 쌓기도 했다.이를 위해 concat[11]이나 add[12]와 같은 연산이 주로 사용된다.
실체를 모르는 높으신 분들에게 뭐든지 다 할 수 있는 마법의 기술처럼 취급되는 경향이 있다.[13] 그러면 그냥 기계학습으로 여러 개의 모아둔 값에서 가장 많은 것을 또 오차계산해서 역계산, 조금씩 수정해서 정확한 윤곽을 만드는 기술[14]이라고 말을 할 수 있다. 기계학습으로 학습한 가장 빈도수가 많은 값에 오차 보정 알고리즘을 더했다고 보면 된다. 수학적으로 왜 학습된 모델의 파라미터 값이 작동하는지는 설명할 수 없지만[15] kernel trick 으로써 이해하면 된다. 심층학습 모델은 그 구조상 특징을 추출하는 feature extractor와, 이를 통해 추출된 feature map을 통해 실질적인 작업을 진행하는 linear layer의 조합으로 주로 이루어져 있는데, GAP 등의 FCN 모델 등을 제외하면 linear seperability를 갖게하는 feature map을 kernel regression으로 우회해서 학습하는 것이 아닌, 고차원으로의 feature map을 즉각적으로 학습하는 기술이다. 즉 비선형 데이터의 집합에 선형성을 부여해주는 projection matrix를 배우는 방법인 것이다.
만약 노이즈가 제거된 정제한 데이터를 기계학습에 사용하면 레이어 수에 상관없이 일정한 값에 쉽게 수렴을 한다. 또한 그 예측력도 일반적으로 사용되고 있는 회귀모델에 비해서 결코 우수하지 않다.[16]
그러나 고전적인 회귀모델을 쓰지 않고 행렬방식의 인공지능을 쓰는 가장 큰 이유는, 첫째, 데이터 노이즈를 귀납적인 행렬연산으로 필터링할 수있고, 둘째, 고정된 수학적인 모델값이 아니라 데이터 변화에 대한 학습을 통해 예측모델을 진화시킬 수 있다는 점이다.일반적인 경우, 심층학습과 일반 기계학습과의 차이를 은닉층의 수로 설명하는 사례가 많은데 틀린 말은 아니나, 정확한 설명은 아니다.은닉층의 개수가 기계학습으로 최적해를 찾는 것을 도와주는 것이 아니라, 정제되지 않는 방대한 데이터의 노이즈를 해소하고 빠르게 예측된 해를 찾게 해 주는 것이다.
예컨대, 은닉층(hidden layer)이 많으면, 피드백 회수가 적더라도 수학적으로 빠른 수렴(최적의 해)을 할 수 있고, 데이터 노이즈에 별 영향을 받지 않고 최적 예측값을 구현할 수 있다. 은닉층의 역할은 복잡한 문제를 간단한 문제로 바꾸어 빠른 수렴을 가능하게 하는 것과 데이터 노이즈 영향을 어느정도 회피할 수 있게 만드는 것이다. 이는 노를 젓는 사람이 많으면 물살에 영향을 극복하여, 빠른 속도로 배를 움직이게 하는 원리와 같다. 바꾸어 말하면 아무리 은닉층이 많다고 해도, garbage in garbage out (나쁜 데이터는 나쁜 결과가 나온다) 이다. 혹은 과잉수렴(overfitting)을 하게 되어 나쁜 결과를 예측할 수도 있다. 인공지능 프로그램들은 그러한 과잉수렴을 막기 위해 데이터 세트(set)를 해석(test)과 검증(validation) 데이터로 나누고, 해석 데이터로 예측모델을 만들어 검증용 데이터로 다시 예측모델을 평가하는 방법을 쓴다.
MLP는 기계학습의 한 종류이며 이때 은닉층의 수가 1개인 경우 ANN, 다수인 경우 DNN이라 구분한다. 심층학습의 '심층(deep)'이란 단어는 어떤 깊은 통찰을 얻을 수 있다는 것을 의미하는 것이 아니며, 은닉층의 수가 많다는 의미이다. MLP는 지도학습으로 분류되며, 심층학습 또한 지도학습이다.
예를 들어보자, 어느 특정한 아이스크림 판매량과 기온과의 상관관계를 이용하여 일기예보를 통해 아이스크림 수요를 예측하는 인공지능 예측 시스템을 구현한다고 하자.
28도일 때 → 100개 판매
30도일 때 → 120개 판매라는 예측모델을 만들 수 있을 것이다.
if 비가 올 때 → 학습 1
if 비가 안 올 때 → 학습 2
if 습도가 높을 때 → 학습 3
if 습도가 낮을 때 → 학습 4
앞서 언급한 비지도학습[19]의 경우 최근 몇년 사이 심층학습에서 크게 발전한 분야라고 볼 수 있다. 지도학습에서 문제가 되는 것은 매번 레이블(label)이 필요하다는 점인데, 이를 일일이 사람손으로 달아주는 것은 매우 어렵고 시간 낭비가 크다고 할 수 있다. 따라서 데이터의 특징 자체를 배우고, 레이블 정보가 필요없는 비지도학습이 크게 유행하게 되었다. 자연어처리의 연구동향을 살펴보면 대부분이 언어 모형(language model)에 힘을 쏟는 것을 볼 수 있는데, 이 또한 비슷한 맥락이다. 레이블 데이터를 직접적으로 이용하는 것보다, 언어 자체를 이해하는데 많은 노력을 가하고있다 [20]. 이는 ULMFIT, ELMo, BERT로 이어지는 언어 모형의 차이를 보면 쉽게 이해가 가능하다. 또한, 이의 장점은 지도학습에 대한 fine-tuning시 수렴이 매우 빠르다는 점이다 [21]. BERT의 경우 아예 비지도학습을 통한 문장 수준의 임베딩부터 fine-tuning까지 하나의 구조로 이를 가능케함은 물론, 모든 자연어처리 task에서 최고 수준의 성능을 내기까지 했다. 그러나, 비지도학습이 심층학습과 기계학습을 나누는 근간이라고 보기는 어렵다.
앞서 말한 것처럼 분기가 심층학습과 기계학습의 가장 큰 차이라고 가정해보자. 그렇다면 tree계열의 기계학습과 그외 방법론의 차이는 무엇인가? Tree 분기가 MSE를 낮추거나 엔트로피를 낮추는 것과 별반 다를 것이 없어진다.
심층학습과 기계학습의 가장 큰 차이는 representation learning이라 불리는 것으로, 기계학습의 경우 명시적인 feature engineering 과정을 거치지만, 심층학습은 레이어와 비선형함수의 조합으로 이를 해결한다. 컴퓨터 비젼에서 backbone 혹은 feature extractor를 통해 object detection, video understanding 등의 task나, 자연어처리에서 tf-idf, LSA, LDA 등의 embedding 과정을 거치지 않고, look up table을 통해 embedding layer로 표현하는 것이 이러한 representation learning의 예시라고 할 수 있다. [22]
알파고는 바둑승률에 대한 역대 기보 데이터를 찾아 학습하고, 바둑의 행렬위치 (가로 세로 19 * 19) 별 다양한 기보속에서 학습한 결과에 대한 승률을 계산하여 승률이 가장 높은 위치 값에 바둑알을 놓은 방식을 구현한 것이다.[23] 말은 이렇게 쉽게 했지만,
자율주행 자동차의 심층 이미지 학습에 의한 사물인지와, 사물속도(위치변화/시간), 주행차량 속도 3가지 큰 영역으로 나누고 1초 뒤 , 5초 뒤를 선 예측한 후, 가장 안정적인 방법으로 사물회피를 통해 안정적 주행을 위한 핸들링, 속도제어를 하는 것이다.[24]
크게 보면 이미지 학습과 인지 쪽에 인공지능이 많이 연계되어 있고, 나머지 주행영역은 예측제어 영역이다.
3. 딥러닝 공부하는 법
3.1. 딥러닝 이해하기 위한 기본기
-
자료구조 및
알고리즘
기본적인 자료구조와 알고리즘에 관한 내용을 알고 있는 것이 좋다. 심층학습도 결국은 알고리즘으로 구현되기 때문이다. 전공자 수준으로 깊게 알고 있다면 물론 좋지만, 비전공자나 일반인, 10대 입장에서는 전반적으로 자료구조와 알고리즘의 의미가 무엇인지 정도만 알고 넘어가도 상관없다. 관련 강좌로는 네이버 부스트코스 사이트에서 CS50 강좌를 검색하자. 하버드에서 만든 모두를 위한 컴퓨터 과학 교양 강좌로 이 강좌의 내용을 이해할 수 있다면 충분하다.
-
선형대수학
미분과 편미분 개념을 필수로 알아야 한다. 심층학습의 핵심인 경사하강법, 오차 역전파를 무리 없이 이해할 수 있다. 그 다음은 선형대수학을 공부해야 한다. 행렬은 당연히 필수로 알아야 한다. 수많은 데이터를 행렬 형태로 표시한다는 점과 심층학습 알고리즘의 기본이자 시초격인 회귀 분석은 선형법으로 푼다는 점에서 이 과목의 개념을 모르면 심층학습에 대한 이해 자체가 불가능하다.
* 확률과 통계
균등분포, 정규분포 등 심층학습 알고리즘을 모델링하기 전 데이터를 처리하는 과정에서 다양한 확률 분포가 쓰이고, 회귀 분석에는 조건부 확률 개념도 쓰인다. 그러니 기본적인 확률 개념, 조건부 확률, 여러가지 확률 분포, 확률 추정 등의 개념은 반드시 알고 있어야 한다. 관련 교재로는 패턴 인식과 기계학습(Pattern Recognition and Machine Learning)이라는 유명한 명저가 있다. 기계학습 및 심층학습을 하는 데 있어 통계적 개념을 더 보고 싶다면 추천.
회귀 분석을 공부하는 것 또한 중요하다. 현대의 인공지능은 주로 예측, 분류, 생성 등의 문제를 해결하는 데 특화되어 있고 이는 기계학습의 하위 분야인 심층학습도 예외가 아니다. 회귀 분석에서 배우는 선형 회귀, 로지스틱 회귀, 다중 회귀, 소프트맥스 회귀 등은 예로부터 예측과 분석 문제를 수학적으로 모델링해서 풀어 내는데 유용하게 쓰였으며, 현대 인공신경망의 기술적 원리이기도 하다. 참고로 대부분의 심층학습 라이브러리는 기본적인 데이터 셋을 가지고 있으니 이것을 통해 연습해보면 더 좋다. 정말 간단하게 공부하고 넘어가고 싶다면 선형 회귀, 로지스틱 회귀, 소프트맥스 회귀의 개념만 알고 넘어가도 좋다.
선형대수학, 확률 등 모든 개념들은 대학교 1학년 전공 기초 또는 교양 수준의 난이도이다. 강의로 공부하고 싶다면 역시 부스트코스의 확률론 기초, 모두를 위한 선형대수학을 추천한다. 진짜 본인이 수포자여서 수학을 공부하기가 겁난다 싶다면 서점에 가서 인공지능을 위한 수학류의 책을 하나씩 살펴보고, 가장 쉬운 책을 골라서 그거라도 공부하자.
혹여 기계학습, 심층학습에 있어 집중적으로 수학을 더 공부하고 싶다면, "Marc Peter Deisenroth, A. Aldo Faisal, Cheng Soon Ong" 공저의 "Mathematics for Machine Learning"이라는 원서를 추천한다.
3.2. 딥러닝 관련 사이트
* Teachable Machine( https://teachablemachine.withgoogle.com/): 구글에서 만든 누구나 머신러닝 모델을 쉽고 빠르고 간단하게 만들 수 있도록 제작된 웹 기반 도구이다.3.3. 딥러닝 관련 책, 강의자료
3.3.1. 책
밑바닥부터 시작하는 딥러닝 시리즈 - 일본인이 쓴 책으로 심층학습의 교과서 급의 책. 심층학습에 대해서 제일 쉽게 풀이해놓고 내용도 알차다는 높은 평가를 받는다. 쉽다고 해서 내용이 얕은 것도 아니니 입문자라면 이 책을 사서 공부해보자. 다만 파이썬에 대한 기초 지식은 이 책에서 가르쳐주지 않는다. 현재 5편까지 나온 상태이며 1편은 딥러닝 기초와 CNN, 2편은 자연어 처리, 3편은 딥러닝 프레임워크의 구조, 4편은 강화 학습, 5편은 생성 모델에 대해 다룬다.케라스 창시자에게 배우는 딥러닝 (Deep Learning with Python) - 프랑소와 숄레[25] 지음. 파이썬 프로그래밍 경험이 있는 사람을 대상으로 하며 머신 러닝, 심층학습을 시작하려는 입문자를 위한 책이다. 파이썬 경험이 있다면 이 책 또한 추천해볼만한 좋은 책이다.
3.3.2. 강의
- 스탠퍼드 대학교 앤드류 응 강좌 # : 코세라와 유튜브, 부스트코스에서 만나볼 수 있는 심층학습의 고전 강좌. 심층학습 강좌의 본좌로 불리고 있으며 심층학습 하면 대표적으로 떠오르는 유명한 강좌이다. 3.2 문단에 적힌 기초를 익힌 사람이라면 누구나 부담 없이 들을 수 있다. 다만 코세라와 유튜브의 경우 언어적 장벽이라는 단점이 존재. 요즘은 한글 자막 또한 잘 달려 있다. 코세라의 경우 청강 옵션을 선택한다면 무료로 들을 수 있다.
- 스탠포드 CS231n 강좌 #: 위 강의와 마찬가지로 유튜브에 강의가 공개된 2017년 버전은 현재까지도 심층학습 입문 강좌중 고전으로 취급받는다. 한글 자막도 잘 있는 편이다. 배운 내용을 코드로 실습하는 과제도 있으니 이 강의로 공부한다면 꼭 과제까지 찾아서 풀자. 2017년 이후로는 공개되지 않아서 내용이 상대적으로 컴퓨터 비전에 치우친 점과, 강의 영상에 트랜스포머에 대한 내용이 없다는 것이 흠이다.
- 미시간 대학교 컴퓨터 비전 강좌 # : 상술한 CS231n 2017년 강의 조교였던 저스틴 존슨이 미시간 대학교에 임용된 후 트랜스포머를 비롯한 좀 더 최신 내용도 다루는 강의를 공개했다. 이 강의는 아직 한글 자막이 잘 제공되지는 않는 편이다.
-
MIT 심층학습 입문 강좌
#: 매년 업데이트된 강의 영상과 자료를 무료로 배포한다.
- 네이버 부스트코스 강좌
- 모두를 위한 딥러닝 : 현재 업스테이지의 대표이사를 맡고 있는 김성훈 홍콩과기대 교수의 강의이다. 심층학습에 대한 기초를 배우는 데에 아주 유용하다. 유튜브에 공개되어 있으므로 무료로 볼 수 있다는 것 또한, 장점이다.
4. 관련 인물
5. 관련 문서
[1]
연산 장치의 성능이 좋을수록 복잡한 모델을 구현할 수 있어 모델의 성능에 영향을 미치지만 데이터 역시 많을수록 딥러닝 모델의 정확도가 높아진다.
[2]
인공지능 학계에서는 이 시기를 AI 겨울(AI winter)라 한다.
[3]
다만, 거대한 심층학습 모델을 만들고 최적화하는 것은 절대 쉬운일이 아니므로 쉽게 생각해서는 안된다. 또한 쏟아 붓기에 적절한 데이터를 확보하는 것도 절대 쉬운 것이 아니다. 그리고 이 많은 데이터를 그 큰 모델에 넣으려면 그만큼 많은 연산서버가 필요하다. 즉 돈이 필요하다. 비좁은 방 안에서 내는 것과 큰 기업이 연구한 결과물 사이의 격차는 크다. 알맞은 조건에서 대부분의 노동력을 대체할 수 있다는 파급력과 엮여 괜히 자본가가 시장공급을 독점하고 많은 사람을 빈민으로 내몰 거라는 예상이 나도는 게 아니다. 실현되면 자본 독점으로 망한 나라가 하나 둘씩 생기고 나서야 나아지겠지…
[4]
예를 들어 0과 1사이의 소수 0.9를 계속 곱하다 보면 결국 0에 가까운 값이 되어버린다.
[5]
후술하겠지만 이는 심층학습 자체의 문제라기보단, 레이어를 수정할 때 sigmoid 함수를 통해 수정하기 때문에 벌어지는 일이다. sigmoid함수는 모든 데이터를 0과 1사이의 값으로만 표현하기 때문이다.
[6]
rectified linear unit: 음수인 경우 0에 수렴하고 양수인 경우는 x = y를 그대로 사용하여 기울기 소멸 문제를 방지한다.
[7]
ReLU함수가 max(0, x)라면 leakly ReLU는 max(ax, x), a는 작은 수. 예를 들어 0.01
[8]
leakly ReLU는 max(ax, x)의 a를 bias와 같은 파라미터로 두는 것.
[9]
x>0 일때는 x, x<0 일때는 α(e^x-1)
[10]
reconstruction이나 DE solver 에 활용되는 implicit neural network 에서는 sin 함수도 사용한다
[11]
DenseNet이 대표적인 예
[12]
ResNet이 대표적인 예
[13]
다만 실제 업계에서는 사용하기 가장 꺼려지는 방법 중 하나이다. 실제 현장에서 일하는 사람들은 왜 그렇게 나오는지가 중요한데, 심층학습의 가장 큰 단점이자 장점은 설명이 힘든 블랙박스형 알고리즘이기 때문.심층학습하니까 나왔어요/아 그렇구나 로 끝나는 경우가 없다는 이야기
[14]
심층학습 책에 나오는 퍼셉트론 개념을 생각하면 이 말이 제일 정확한 표현이다. 전공자가 아닌 사람을 위해 설명하자면 참과 거짓을 가르는 경계값이라고 말하면 얼추 맞는다.
[15]
그 이유는 백터와 행렬을 하나의 식으로 표현했기 때문이다. 그것도 최소 수만 개가 넘는 데이터들을 모두 백터와 행렬로 표현한 것이다. 이 말을 뒤집어보면 최소 수만개의 계산이 이루어진다는 것이고 당연히 수학적으로 설명이 불가능하다.
[16]
물론 기존 기계학습의 끝판왕으로 알려졌었던
SVM 과 같은 회귀모델의 경우 심층학습의 기본인 퍼셉트론과 유사한 모델이기도 하고.
[17]
온도 데이터를 독립변수로 사용하고 판매량을 독립변수로 사용하도록 지정해 주는 것은 심층학습도 동일하다.
[18]
심층학습 뿐 아니라 일반적인 지도학습에 해당하는 내용이다.
[19]
얀 르쿤의 경우 이를 비지도 학습이라 부르기보단 자기지도학습(self-supervised learning)으로 부르는 것을 선호하는 듯 하다.
https://www.facebook.com/722677142/posts/10155934004262143/
[20]
언어 모형이 하는 일은 이전 단어들을 통해 다음 단어를 예측하는 것이다. 즉, input 데이터 자체가 label이 된다.
[21]
사람으로 생각하면 각 언어를 매번 새롭게 배우는 것과 언어학에 대한 이해도를 높혀 언어를 익히는 것과 동일하다. 후자가 빠른 것은 두말하면 잔소리
[22]
위키피디아만 봐도 deep learning (also known as deep structured learning) is part of a broader family of machine learning methods based on artificial neural networks with representation learning.이라고 표현하고 있다. 즉, 심층학습의 근간은 뉴럴네트워크와 representation learning에서 오는 것이다.
[23]
실제로는 행렬보다는 기보의 이미지를 보고 학습했다. 즉 바둑판의 '형태'를 이미지화하여 학습용 데이터로 활용했다는 것.
[24]
이런 방법으로 인해 레이더, 라이더 센서 등 거리를 측정하는 센서가 따로 없이 오직 카메라 센서만으로 자율주행 구현이 가능하다. 이론상이 아니라 아직은 반자율주행 레벨이지만 실제 일부 양산차에 적용된다. 물론 주위 장애물의 위치를 초당 수천번 읽어내는 초고성능 라이더 센서에 비할 바는 아니지만 그런 센서들의 정신나간 가격을 생각해 보면 심층학습으로 탁월한 단가 절약을 이루어낸 것.
[25]
심층학습 프레임워크인 케라스의 창시자이다.