심층학습
1. 개요
Deep Learning. 영어 그대로 '''딥 러닝'''으로 잘 알려져 있다.
쉽게 말하자면 함수관계에 있는 x와 y는 있지만, x로부터 y를 예측할 수 있는 모델이 없을 때 대안으로 쓸 수 있는 방법이다.
쉽게 이해할 수 있는 개념인 회귀분석의 상위호환격 방법이라고 생각하면 된다.
입력과 출력 사이에 있는 인공 뉴런들을 여러개 '''층층이''' 쌓고 연결한 인공신경망 기법을 주로 다루는 연구이다. 인공신경망을 여러 개 쌓으면 Deep learning, RNN을 여러 계층으로 쌓으면 Deep RNN, ... 같은 식이다.
인공신경망 자체는 꽤 오랫동안 존재해 왔고, CNN이나 RNN과 같은 신경망 모델도 80년대에 활발히 연구되었던 주제다. 하지만 당시 컴퓨터의 연산성능으로는 사실상 쓸만한 모델구현이 불가능했고, 십수 년동안 이론적인 방법으로만 여겨졌다. 그리고 2000년대에 들어서야, 그 이론들이 현실로 다가온 것. 물론 20년 동안 컴퓨터만 발달했던 것은 아니다. 하지만 한동안 학계에서 "인공신경망"이란 단어가 논문에 들어가면 퇴짜맞는다는 소문이 있었을 정도로 학계가 무관심을 넘어서 혐오했었고[1] , 소수의 소신있는 연구자들만 인공신경망 연구를 진행해 왔다. 이런 기조가 달라진 것은 2006년 DBN이 발표되면서부터이다. 2009년 엄청난 신드롬을 일으킨 이후 인공지능 분야의 구세주로 추앙받고 있다. 예를 들면, 페이스북의 딥러닝 기반 얼굴인식 모델인 deepface는 인식률 97%를 돌파하며 인간과 거의 성능차이가 없을 정도이며, 물체인식 대회에서 딥러닝의 일종인 CNN(Convolution Neural Network)은 그간 이어져오던 물체 인식 알고리즘을 모두 순위권 밖으로 몰아내며 랭킹 줄세우기를 하였으며, 음성인식 분야에서는 아무것도 모르고 그냥 가져다 박기만 했는데 인식률이 20%가 넘게 향상되었다는 소문이 들리고 있고, 구글은 아예 이를 이용하여 게임하는 방법을 스스로 학습하는 인공지능을 만들거나 검색결과를 이용해 고양이의 개념과 생김새를 학습하는 머신을 만들어낼 정도이다. 네이버와 카카오와 같은 국내 기업도 딥러닝을 적극적으로 연구중에 있다.
딥러닝의 가장 큰 특징은 모델의 부피를 키우고, 데이터를 쏟아부으면 무조건적으로 그만큼의 성능향상을 보인다는 점이다.[2] 네이버의 Deview2013에서 딥러닝에 대한 세션이 있었는데 딥러닝 이전과 이후를 각각 청동기 시대와 철기 시대에 비유할 정도로 딥러닝을 높게 평가했다.
다만 어떤 사람들은 딥러닝을 다른 기계학습과 동떨어진, 마법의 기술처럼 착각하는 경향이 있는데, 사실 딥러닝은 기계학습 알고리즘의 한 종류라고 볼 수 있다. 즉, 딥러닝 ⊂ 기계학습이다. 예를 들어 딥러닝 이전에 가장 유행했던 SVM도 결국 activation 없는 (linear) single layer perceptron에다 hinge loss function + Frobenius norm regularization 을 사용한 것이다. Logistic regression 은 말할 것도 없고. 또, 한번 언급되었지만, 인공신경망류 기법들은 통계학적으로 보면 아주 크고 복잡한 혼합 회귀 모델의 일종이라고 볼 수 있다.
딥러닝이 일반적인 MLP에 비해 가장 문제가 되는 것 중 하나는 다수의 hidden layer을 사용한다는 거다. 이게 무슨 뜻인지 간단하게 설명하자면, 매 층을 지날 때마다 정답을 낼 수 있는 공식의 교정과정이 일어난다고 보면 된다. 다만 그 교정과정이 1부터 0까지의 숫자를 계속 곱하여 수정하는 방식이기 때문에 깊은 히든 레이어인 경우 차츰 공식의 기울기가 0에 가까워지는 문제가 존재한다.[3] 이 때문에 기울기 소멸 문제는 한때 인공신경망 학계를 고사시킨 전례가 있는데, 다행히도 현재는 크게 다음과 같은 해결책이 있다. 현재 기준으로 자주 쓰이는 방식에는 볼드 처리를 했다.
- 사전학습 (pretraining): 가중치를 무작위로 초기화하지 말고, 데이터를 사용하여 비지도학습에 의해 초기 가중치를 결정한다.
- 부분적 가중치 학습(Dropout): 각 학습 단계에서 모든 가중치를 조정하지 말고, 무작위로 선택한 일부 가중치만 조절한다. 단, Test 단계에서는 Dropout이 해제된다.
- 같은 층의 여러 노드가 동일한 가중치를 공유해서 사용한다.
- 배치 정규화 (Batch Normalization): 값(feature)를 -1 에서 1 사이로 정규화 시킨 다음에 ax+b (a와 b는 변수)를 수행한다. 원래는 기울기를 흐르게 하는 목적으로 고안되었지만 학습을 빠르게 하고, 약간의 일반화 효과도 있다.
- 전달 함수 변경: 인공신경망은 결과값(yo)에 추론값(y*)을 대입시켜서 나오는 오차(yo-y*)를 다시 히든레이어라는 행렬값(x1 ~ xn)에 되먹임(Feedback)하는 오류 역전파알고리즘(Error BackPropagation)을 기반으로 한다. 여기서 그냥 오차를 되먹임(빼주는 것)을 하는것은 변동성을 심하게 주게 되어 변동성에 쿠션역할을 할 수 있는 함수를 사용하게 된다. 오래 전 나왔던 것으로는 시그모이드(Sigmoid) 함수가 있는데 (sigmoid 함수의 구조는 오차가 작아질 수록 급하게 0에 수렴하는 함수이다.) sigmoid 함수는 앞서 말한 것처럼 0에 수렴하는 함수이기 때문에, 깊은 레이어를 가지고 있을수록 gradient 값이 0에 가까워져서 기울기 소멸 문제를 촉진할 수 있다. 현재 가장 많이 사용되는 ReLU[4] 같은 등 부분적으로 선형적인 함수를 사용하여 해결할 수 있다.
- 층(layer)를 건너뛰는 연결(skip connection): 몇몇 레이어를 건너뛰는 계산을 넣으면 그쪽 길을 따라서 기울기가 흐를 수 있다. 이때 많이 쓰는 연결함수 중 하나는 덧셈. 말 그대로 f'(x) = f(x) + x 꼴로 만드는 것이다. 덧셈은 기울기를 그대로 흘려보내기 때문에 가능한 것이라고 한다. 게다가 기울기를 흐르게 하는 역할 외에, 모델이 값 자체가 아니라 값의 오차(residual)을 배우게 해서 수렴 속도가 빨라지는 부가 효과도 있다. 이 방식을 사용해서 ResNet은 레이어를 150개 씩이나 쌓기도 했다. concat, add가 자주 쓰인다.
- sigmoid 이외의 활성화 함수: 기존에는 딥러닝 모델에 요구되는 비선형 활성화 함수로 sigmoid 함수를 사용했기에 기울이가 0과 1 사이에 갇히는 문제가 있었지만, ReLU를 비롯한 비선형 함수의 도입으로 해결되었다. ReLU는 값이 0보다 작을 때 값을 무시해버리기에 단점 극복을 위해 최근에는 PReLU, LeakyReLU 등이 쓰인다. Swish, 그리고 모바일의 경우 연산량을 줄이기 위해 ReLU6도 존재한다.
2. 설명
만약 노이즈가 제거된 정제한 데이터를 머신러닝에 사용하면 레이어 수에 상관없이 일정한 값에 쉽게 수렴을 한다. 또한 그 예측력도 일반적으로 사용되고 있는 회귀모델에 비해서 결코 우수하지 않다.[7]
그러나 고전적인 회귀모델을 쓰지 않고 행렬방식의 인공지능을 쓰는 가장 큰 이유는, 첫째, 데이터 노이즈를 귀납적인 행렬연산으로 필터링할 수있고, 둘째, 고정된 수학적인 모델값이 아니라 데이터 변화에 대한 학습을 통해 예측모델을 진화시킬 수 있다는 점이다.일반적인 경우, 딥러닝과 일반 머신러닝과의 차이를 히든레이어의 수로 설명하는 사례가 많은데 틀린 말은 아니나, 정확한 설명은 아니다.히든 레이어의 개수가 머신러닝으로 최적해를 찾는 것을 도와주는 것이 아니라, 정제되지 않는 방대한 데이터의 노이즈를 해소하고 빠르게 예측된 해를 찾게 해 주는 것이다.
예컨대, 히든레이어(Hidden Layer)가 많으면, 피드백 회수가 적더라도 수학적으로 빠른 수렴(최적의 해)을 할 수 있고, 데이터 노이즈에 별 영향을 받지 않고 최적 예측값을 구현할 수 있다. 히든레이어의 역할은 빠른 수렴력과 데이터 노이즈 영향을 어느정도 회피할 수 있다. 이는 노를 젓는 사람이 많으면 물살에 영향을 극복하여, 빠른 속도로 배를 움직이게 하는 원리와 같다. 바꾸어 말하면 아무리 히든레이어가 많다고 해도, Garbage in Garbage out (나쁜 데이터는 나쁜 결과가 나온다) 이다. 혹은 과잉수렴(Overfitting)을 하게 되어 나쁜결과를 예측할 수도 있다.
최근 나오는 인공지능 프로그램들은 과잉수렴을 막기 위해 데이터 세트(Set)를 해석(Test)과 검증(Validation) 데이터로 나누고, 해석 데이터로 예측모델을 만들어 검증용 데이터로 다시 예측모델을 평가하는 방법을 쓴다. 결론적으로 딥러닝과 일반 머신러닝의 가장 큰 차이는 히든 레이어(Hidden Layer) 수가 아니다. 머신러닝과 딥러닝의 가장 큰 차이는 비지도학습(Unsupervised Learning)이다. 여기서 비지도학습의 구성로직은 데이터 특성이 가지고 있는 물리학적, 수학적 혹은 경험적이지만 논리적인 함수에 기반으로 하고 있다.
예를 들어보자, 어느 특정한 아이스크림 판매량과 기온과의 상관관계를 이용하여 일기예보를 통해 아이스크림 수요를 예측하는 인공지능 예측 시스템을 구현한다고 하자. 일반적인 머신러닝 기법을 사용하여 알고리즘을 만든다면, 기상청에서 온도이력 데이터 수집하고, 과거 아이스크림 일 판매량 데이터를 매칭시켜
28도일 때 → 100개 판매
30도일 때 → 120개 판매라는 예측모델을 만들 수 있을 것이다.
그러나 딥러닝적 방법은 여기서 논리적인 사고 학습을 하게끔 모델링을 시키는 것이다. 즉, 습도와 날씨 조건을 온도라는 학습데이터에 선택적으로 학습을 하여 예측하는 프로세스를 적용한다.
if 비가 올 때 → 학습 1
if 비가 안 올 때 → 학습 2
if 습도가 높을 때 → 학습 3
if 습도가 낮을 때 → 학습 4
이렇게 논리적으로 자가 분기를 시켜 학습하는 것이 딥러닝과 일반 머신러닝의 가장 큰 차이점이다.
알파고는 바둑승률에 대한 역대 기보 데이터를 찾아 학습하고, 바둑의 행렬위치 (가로 세로 19 * 19) 별 다양한 기보속에서 학습한 결과에 대한 승률을 계산하여 승률이 가장 높은 위치 값에 바둑알을 놓은 방식을 구현한 것이다.[8] 말은 이렇게 쉽게 했지만, 그 구현 방식은 매우 어려웠을 것이다. 실제 알고리즘도 알고리즘이지만, 딥러닝의 핵심 작업인 기보 데이터의 전처리 과정만 생각해봐도 굉장히 고난이도의 준비작업이었을 것이다.
자율주행 자동차의 딥러닝 학습은 이미지 학습에 의한 사물인지와, 사물속도(위치변화/시간), 주행차량 속도 3가지 큰 영역으로 나누고 1초 뒤 , 5초 뒤를 선 예측한 후, 가장 안정적인 방법으로 사물회피를 통해 안정적 주행을 위한 핸들링, 속도제어를 하는 것이다.
크게 보면 이미지 학습과 인지 쪽에 인공지능이 많이 연계되어 있고, 나머지 주행영역은 예측제어 영역이다.
3. Deep Belief Network
2006년 개발된 인공신경망 알고리즘. 훈련 데이터가 적을 때 유용하다. 층별로 사전학습을 통해 사라지는 경사 문제에 대한 해결 가능성을 보이기 시작하였다. Restricted Boltzmann Machine을 쌓은 형태로 되어 있으며, 현재는 값을 잘 초기화 하기만 하면 된다는 사실 (Xavier initialization) 을 알게 되어 쓰이지 않는다.
[1] 인공지능 학계에서는 이 시기를 AI 겨울(AI winter)라 한다.[2] 다만, 거대한 딥러닝 모델을 만들고 최적화하는 것은 절대 쉬운일이 아니므로 쉽게 생각해서는 안된다. 또한 쏟아 붓기에 적절한 데이터를 확보하는 것도 절대 쉬운 것이 아니다. 그리고 이 많은 데이터를 그 큰 모델에 넣으려면 그만큼 많은 연산서버가 필요하다. 즉 돈이 필요하다. 비좁은 방 안에서 내는 것과 큰 기업이 연구한 결과물 사이의 격차는 크다. 알맞은 조건에서 대부분의 노동력을 대체할 수 있다는 파급력과 엮여 괜히 자본가가 시장공급을 독점하고 많은 사람을 빈민으로 내몰 거라는 예상이 나도는 게 아니다. [3] 예를 들어 0과 1사이의 소수 0.9를 계속 곱하다 보면 결국 0에 가까운 값이 되어버린다.[4] rectified linear unit: 음수인 경우 0에 수렴하고 양수인 경우는 x = y를 그대로 사용하여 기울기 소멸 문제를 방지한다.[5] 다만 실제 업계에서는 사용하기 가장 꺼려지는 방법 중 하나이다. 실제 현장에서 일하는 사람들은 '''왜''' 그렇게 나오는지가 중요한데, 딥러닝의 가장 큰 단점이자 장점은 설명이 힘든 블랙박스형 알고리즘이기 때문. [6] 딥러닝 책에 나오는 퍼셉트론 개념을 생각하면 이 말이 제일 정확한 표현이다. 전공자가 아닌 사람을 위해 설명하자면 참과 거짓을 가르는 경계값이라고 말하면 얼추 맞는다.[7] 물론 기존 기계학습의 끝판왕으로 알려졌었던 SVM 과 같은 회귀모델의 경우 딥러닝의 기본인 퍼셉트론과 유사한 모델이기도 하고.[8] 실제로는 행렬보다는 기보의 이미지를 보고 학습했다. 즉 바둑판의 '형태'를 이미지화하여 학습용 데이터로 활용했다는 것.