심층 학습

From Hidden Wiki
(Redirected from 딮 러닝)
Jump to navigation Jump to search

[include(틀:상위 문서3, top1=인공지능, top2=기계학습, top3=인공신경망)] [include(틀:프로젝트 문서, 프로젝트=나무위키 인공지능 프로젝트)]

[목차]

개요

입력과 출력 사이에 있는 인공 뉴런들을 여러개 층층이 쌓고 연결한 인공 신경망 기법을 주로 다루는 연구이다. 인공신경망을 여러 개 쌓으면 Deep learning, RNN을 여러 계층으로 쌓으면 Deep RNN, ... 같은 식이다.

인공신경망 자체는 꽤 오랫동안 존재해 왔고, CNN이나 RNN과 같은 신경망 모델도 80년대에 활발히 연구되었던 주제다. 하지만 당시 컴퓨터로는 사실상 쓸만한 모델구현이 불가능했고, 십수 년동안 이론적인 방법으로만 여겨졌다. 그리고 2000년대에 들어서야, 그 이론들이 현실로 다가온 것! 물론 20년동안 컴퓨터만 발달했던 것은 아니다. 하지만 한동안 학계에서 "인공신경망"이란 단어가 논문에 들어가면 퇴짜맞는다는 소문이 있었을 정도로 학계가 무관심을 넘어서 혐오했었고, 소수의 소신있는 연구자들만 인공신경망 연구를 진행해 왔다. 이런 기조가 달라진 것은 2006년 DBN이 발표되면서부터이다. 2009년 엄청난 신드롬을 일으킨 이후 인공지능 분야의 구세주로 추앙받고 있다. 예를 들면, 페이스북의 심층학습 기반 얼굴인식 모델인 deepface는 인식률 97%를 돌파하며 인간과 거의 성능차이가 없을 정도이며, 물체인식 대회에서 딮 러닝의 일종인 CNN(Convolution Neural Network)는 그간 이어져오던 물체 인식알고리즘을 모두 순위권 밖으로 몰아내며(…) 랭킹 줄세우기를 하였으며, 음성인식 분야에서는 아무것도 모르고 그냥 가져다 박기만 했는데 인식률이 20%가 넘게 향상되었다는 소문이 들리고 있으며, 구글은 아예 이를 이용하여 게임하는 방법을 스스로 학습하는 인공지능을 만들거나 검색결과를 이용해 고양이의 개념과 생김새를 학습하는 머신을 만들어낼 정도이다. 네이버와 카카오와 같은 국내 기업도 딮러닝을 적극적으로 연구중에 있다.

딥러닝의 가장 큰 특징은 모델의 부피를 키우고, 데이터를 쏟아부으면 무조건적으로 그만큼의 성능향상을 보인다는 점이다.[* 다만, 거대한 딥러닝 모델을 만들고 최적화하는 것은 절대 쉬운일이 아니므로 쉽게 생각해서는 안된다. 또한 쏟아 붓기에 적절한 데이터를 확보하는 것도 절대 쉬운 것이 아니다. 그리고 이 많은 데이터를 그 큰 모델에 넣으려면 그만큼 많은 연산서버가 필요하다. 즉 돈이 필요하다. 비좁은 방 안에서 내는 것과 큰 기업이 연구한 결과물 사이의 격차는 크다. 알맞은 조건에서 대부분의 노동력을 대체할 수 있다는 파급력과 엮여 괜히 자본가가 시장공급을 독점하고 많은 사람을 빈민으로 내몰 거라는 예상이 나도는 게 아니다. ~~실현되면 자본 독점으로 망한 나라가 하나 둘씩 생기고 나서야 나아지겠지…~~] 네이버의 Deview2013에서 딥러닝에 대한 세션이 있었는데 딥러닝 이전과 이후를 각각 청동기 시대와 철기 시대에 비유할정도로 딥러닝을 높게 평가했다.

다만, 어떤 사람들은 딥러닝을 다른 기계학습과 동떨어진, 마법의 기술처럼 착각하는 경향이 있는데, 사실 많은 기계 학습 알고리즘이 딥러닝의 한 종류라고 볼 수 있다. 예를 들어 딥러닝 이전에 가장 유행했던 SVM도 결국 activation 없는 (linear) single layer perceptron에다 hinge loss function + Frobenius norm regularization 을 사용한 것이다. Logistic regression 은 말할 것도 없고. 또, 한번 언급되었지만, 인공신경망류 기법들은 통계학적으로 보면 아주 크고 복잡한 혼합 회귀 모델의 일종이라고 볼 수 있다.

딥 러닝이 일반적인 MLP에 비해 가장 문제가 되는 것 중 하나는 다수의 hidden layer을 사용한다는 거다. 이 때문에 기울기 소멸 문제가 심각하다. 크게 다음과 같은 해결책이 있다.

* 사전학습 (pretraining): 가중치를 무작위로 초기화하지 말고, 데이터를 사용하여 비지도학습에 의해 초기 가중치를 결정한다.
* 층(layer)간 노드 연결 수를 제한한다. 직전 층의 모든 노드와 연결하지 말고 일부 지역적 노드와 연결한다.
* 같은 층의 여러 노드가 동일한 가중치를 공유해서 사용한다. 
* 전달 함수 변경: 인공신경망은 결과값(y,,o,,)에 추론값(y*)을 대입시켜서 나오는 오차(y,,o,,-y*)를 다시 히든레이어라는 행렬값(x,,1,, ~ x,,n,,)에 되먹임(Feedback)하는 역전사알고리즘(Back-Propagation)을 기반으로 한다. 여기서 그냥 오차를 되먹임(빼주는 것)을 하는것은 변동성을 심하게 주게 되어 변동성에 쿠션역할을 할 수 있는 함수를 사용하게 된다. 오래 전 나왔던 것으로는 시그모이드(Sigmoid) 함수가 있는데 (sigmoid 함수의 구조는 오차가 작아질 수록 급하게 0에 수렴하는 함수이다.) sigmoid 함수는 gradient 값이 0에 가까워져서 기울기 소멸 문제를 촉진할 수 있으므로 ReLU 등 부분적으로 선형적인 함수를 사용해본다.
* 부분적 가중치 학습(Dropout): 각 학습 단계에서 모든 가중치를 조정하지 말고, 무작위로 선택한 일부 가중치만 조절한다.

실체를 모르는 높으신 분들에게 뭐든지 다 할 수 있는 마법의 기술처럼 취급되는 경향이 있다.

설명

만약 노이즈가 제거된 정제한 데이터를 머신러닝에 사용하면 레이어 수에 상관없이 일정한 값에 쉽게 수렴을 한다. 또한 그 예측력도 일반적으로 사용되고 있는 회귀모델에 비해서 결코 우수하지 않다.

그러나 고전적인 회귀모델을 쓰지 않고 행렬방식의 인공지능을 쓰는 가장 큰 이유는, 첫째, 데이터 노이즈를 귀납적인 행렬연산에 의해으로 필터링할 수있고, 둘째, 고정된 수학적인 모델값이 아니라 데이터 변화에 대한 학습을 통해 예측모델을 진화시킬 수 있다는 점이다.

일반적인 경우, 딥러닝과 일반 머신러닝과의 차이를 히든레이어의 수로 설명하는 사례가 많은데 틀린 말은 아니나, 정확한 설명은 아니다. 히든 레이어의 개수가 머신러닝으로 최적해를 찾는 것을 도와주는 것이 아니라, 정제되지 않는 방대한 데이터의 노이즈를 해소하고 빠르게 예측된 해를 찾게 해 주는 것이다.

예컨대, 히든레이어(Hidden Layer)가 많으면, 피드백 회수가 적더라도 수학적으로 빠른 수렴(최적의 해)을 할 수 있고, 데이터 노이즈에 별 영향을 받지 않고 최적 예측값을 구현할 수 있다.

히든레이어의 역할은 빠른 수렴력과 데이터 노이즈 영향을 어느정도 회피할 수 있다. 이는 노를 젓는 사람이 많으면 물살에 영향을 극복하여, 빠른 속도로 배를 움직이게 하는 원리와 같다.

이 말은 바꾸어 말하면 아무리 히든레이어가 많다고 해도, Garbage in Garbage out (나쁜 데이터는 나쁜 결과가 나온다) 이다. 혹은 과잉수렴(Overfitting)을 하게 되어 나쁜결과를 예측할 수도 있다.

최근 나오는 인공지능 프로그램들은 과잉수렴을 막기 위해 데이터 세트(Set)를 해석(Test)과 검증(Validation) 데이터로 나누고, 해석 데이터로 예측모델을 만들어 검증용 데이터로 다시 예측모델을 평가하는 방법을 쓴다.

결론적으로 딥러닝과 일반 머신러닝의 가장 큰 차이는 히든 레이어(Hidden Layer) 수가 아니다.

머신러닝과 딥러닝의 가장 큰 차이는 자가학습(Auto Self Learning)이다. 여기서 자가학습의 구성로직은 데이터 특성이 가지고 있는 물리학적, 수학적 혹은 경험적이지만 논리적인 함수에 기반으로 하고 있다.

예를 들어보자, 어느 특정한 아이스크림 판매량과 기온과의 상관관계를 이용하여 일기예보를 통해 아이스크림 수요를 예측하는 인공지능 예측 시스템을 구현한다고 하자.

일반적인 머신러닝 기법을 사용하여 알고리즘을 만든다면, 기상청에서 온도이력 데이터 수집하고, 과거 아이스크림 일 판매량 데이터를 매칭시켜

28도일 때 → 100개 판매 30도일 때 → 120개 판매라는 예측모델을 만들 수 있을 것이다.

그러나 딥러닝적 방법은 여기서 논리적인 사고 학습을 하게끔 모델링을 시키는 것이다. 즉, 습도와 날씨 조건을 온도라는 학습데이터에 선택적으로 학습을 하여 예측하는 프로세스를 적용한다.

if 비가 올 때 → 학습 1 if 비가 안 올 때 → 학습 2 if 습도가 높을 때 → 학습 3 if 습도가 낮을 때 → 학습 4

이렇게 논리적으로 자가 분기를 시켜 학습하는 것이 딥러닝과 일반 머신러닝의 가장 큰 차이점이다.

알파고는 바둑승률에 대한 역대 기보 데이터를 찾아 학습하고, 바둑의 행렬위치 (가로 세로 19 * 19) 별 다양한 기보속에서 학습한 결과에 대한 승률을 계산하여 승률이 가장 높은 위치 값에 바둑알을 놓은 방식을 구현한 것이다. 말은 이렇게 쉽게 했지만, 그 구현 방식은 매우 어려웠을 것이다.

자율주행 자동차의 딥러닝 학습은 이미지 학습에 의한 사물인지와, 사물속도(위치변화/시간), 주행차량 속도 3가지 큰 영역으로 나누고 1초 뒤 , 5초 뒤를 선 예측한 후, 가장 안정적인 방법으로 사물회피를 통해 안정적 주행을 위한 핸들링, 속도제어를 하는 것이다.

크게 보면 이미지 학습과 인지 쪽에 인공지능이 많이 연계되어 있고, 나머지 주행영역은 예측제어 영역이다.

DBN

2006년 개발된 인공신경망 알고리즘. 훈련 데이터가 적을 때 유용하다. 층별로 사전학습을 통해 사라지는 경사 문제에 대한 해결 가능성을 보이기 시작하였다.