티스토리 뷰

[Paper]Deep learning

Deep learning의 발전 과정과 큰 줄기에 대해 궁금하다면 이 논문을 읽어보길 추천합니다.

아래 글은 해당 논문의 번역과 함께 약간의 필자의 첨언이 들어가있습니다 :)

 

 

Deep learning

Yann LeCun, Yoshua Bengio & Geoffrey Hinton (27 May 2015)

Nature volume 521, pages436–444(2015)

원문 Paper

 

 

abstract

딥러닝은 다중 처리 계층으로 구성된 계산모델이 여러 추상화 단계의 데이터 표현을 배울 수 있도록합니다. (복잡한 데이터 표현을 배우게 한다는 말입니다.) 이 방법은 최신의 음성인식, 시각 물체 인식, 물체 탐지 그리고 약, 유전체학 등과 같은 영역에서 많은 발전을 이루었습니다. 딥러닝은 역전파 기법을 이용하여 큰 데이터셋의 복잡한 구조를 다룹니다. 역전파 기법은 머신이 내부 파라미터를 어떻게 바꾸는지에 대해 설명합니다. 이 때 내부 파라미터는 이전 레이어의 표현으로부터 각 레이어의 표현을 계산하는데 사용됩니다. Deep convolutional nets(심층 합성곱)은 이미지,비디오, 스피치, 오디오 처리에 획기적인 발전을 가져왔으며, Recurrent nets(순환신경망)은 텍스트나 음성과 같은 순차데이터에 발전을 가져왔습니다.

 

 

Machine Learning and Deep Learning

첫 번째 섹션입니다. 딥러닝 논문인데 머신러닝이 먼저 나오죠. 인공지능을 가장 큰 하나의 범주로 본다면 그 안에 머신러닝 그리고 그 안에 딥러닝이 있습니다. 그러니 머신러닝부터 먼저 간단하게 설명해주는거죠. 머신러닝의 장점과 단점을 간단히 설명합니다. 그리고 그 단점이 딥러닝의 장점이 되죠 :)

전통적인 머신러닝기법들은 데이터를 자기들에 맞게 바꿔줘야하는 단점이 있습니다. 그래서 우리가 좋은 피처를 뽑기위해 여러 테스트를 하고 이를 보통 feature engineering이라 부릅니다. 세상 귀찮죠..

Representation learning(표현학습)은 탐지나 분류에 필요한 표현을 자동으로 발견하는 일련의 기법을 뜻합니다. 힘든 feature engineering 작업을 자동으로 해준다니 너무 좋죠. 말그대로 특징적인 표현을 뽑아낸다는 의미로 해석하면됩니다.

Deep learning(딥러닝)은 표현학습을 여러 레벨로 쌓은 것입니다. 이 때 각 레벨은 단순하지만 비선형적인 모듈로 입력 데이터를 더 높은, 즉 추상적인 표현으로 바꿉니다. 예를 들자면, 분류에서 higher layers 는 분류에서 중요한 부분은 증폭하고 분류와 상관없는 부분은 억누른다는 의미입니다. 딥러닝에서 중요한 포인트는 레이어들의 피처를 사람이 직접 구하지 않는다는 점입니다. 데이터로부터 스스로 학습하죠!

딥러닝은 수년간 빛을 보지 못 했지만, 이미지 인식, 음성 인식, 자연어 처리 부분에서 다른 머신 러닝 기법들보다 우수한 성과를 거두면서 인정받게 되었습니다.

 

 

Supervised learning

딥러닝에서 실제 모델이 훈련하는 방식에 대해 설명합니다. 머신러닝과 딥러닝에 대해 전혀 모른다면 이해하기 어려울 수 있습니다. 기존에 이미 익숙하신 분이라면 무리가 없으실겁니다. 이해하기 쉽도록 부연설명을 달아놓았습니다.

가장 일반적인 형태의 머신러닝은 지도학습입니다. 만약 이미지 데이터를 훈련하고 분류하는 모델을 만든다고 가정합시다.집, 자동차, 사람, 애완동물 이미지를 훈련하고 예측 시 모두 잘 예측되면 좋겠지만 실제로 그건 쉽지않죠. 실제와 어느정도 오차가 발생할 것입니다. 그럼 이 error(오차)를 줄여야겠죠. 이를 위해 error (or distance)를 측정하는 objective function(목적 함수)를 계산합니다. 그러면 머신이 측정된 에러를 줄이기위해 (=목적함수값을 줄이기위해) 파라미터, 즉 weights(가중치)를 조정합니다. 딥러닝 시스템에선 이런 weights가 보통 수억개에 달합니다.

가중치 벡터를 적절하게 조정하기 위해, 학습 알고리즘은 각 가중치에 대해 gradient vector(기울기 벡터)를 계산합니다. 기울기 벡터는 가중치의 변화 양에 따라 오류가 어느 정도 증가 또는 감소 하는지를 나타냅니다. 가중치 벡터는 기울기 벡터의 반대방향으로 조정됩니다.

목적함수는 가중치 값들의 고차원 공간에 있는 언덕의 풍경처럼 보일 수 있습니다. 음의 기울기 벡터는 minimum으로 향하는 가파른 기울기 방향을 나타냅니다. minimum이란 output error가 평균적으로 작은 곳입니다.

보통 stochastic gradient descent(SGD)를 많이 쓰는데요. 인풋 벡터에서 아웃풋 벡터와 오차를 계산하고, 평균 기울기를 계산하고, 가중치를 조절합니다. 이는 목적함수의 평균값이 감소하기 전까지 계속 반복됩니다. 여기서 'stochatic' 확률적이라고 불리는 이유는, 평균 기울기의 노이즈 추정치를 제공하기 때문입니다. 이 간단한 절차는 놀랍게도 빠르게 좋은 가중치들을 찾습니다. 훈련 뒤에는 테스트 셋으로 평가합니다.

(그림: 위키피디아)

기울기 벡터에 대해 약간의 설명을 더하자면, 고등학교 수학시간에 배웠던 도함수, 즉 미분을 생각하면 이해가 쉽습니다. 위 그림, 익숙하죠? 검은색 그래프를 목적함수, 그래프 위 점을 가중치 벡터, 선형으로 그은 빨간 선을 기울기 벡터라고 생각해봅시다. 그림에서 기울기 벡터는 음수이고 이 때 점 x가 양수로 방향으로 이동하면 목적함수, 그래프 값이 감소하겠죠. 그래서 "가중치 벡터는 기울기 벡터의 반대방향으로 조정된다" 는 말이 나온겁니다.

 

1960년대 이래로 선형 분류기는 input 공간을 아주 단순한 영역으로만 분류했습니다. 이런 shallow classifier 의 문제는 이미지인식, 음성인식등의 문제를 해결하기 어렵다는 것입니다. selectivity-invariance 딜레마가 발생하는데 이미지 분류를 예로 들자면, 개와 늑대가 있을 때 이 두 객체를 명확히 구분할 수는 있으면서, 포즈나 배경같은 객체 구분에 상관없는 특징은 포함하지 않아야합니다. 분류기를 더 강하게 만들기위해, 커널기법같은 비선형 피처를 사용할수있으나 일반화가 어렵습니다. 전문가들의 도메인을 이용해서 좋은 피처를 뽑을 수도 있습니다. 그렇지만, 좋은 피처를 자동으로 뽑을 수 있다면 그러지 않아도 됩니다.

딥러닝은 단순한 모듈(레이어)들을 다층으로 쌓은 구조입니다. 각 모듈에서 input을 selectivity와 invariance를 모두 증가시키는 표현으로 변환합니다. 시스템은 미세한 디테일에 민감하면서도 동시에 포즈,배경,빛 등 관련없는 사항에는 민감하지 않은 복잡한 함수를 실행할 수 있습니다.

왜 딜레마가 머신러닝에서만 발생할까요? 딥러닝은 어떻게 selectivity 와 invariance를 동시에 증가시킴에도 딜레마에 빠지지않고 해를 찾는 걸까요? 이는 바로 딥러닝의 구조적 특징 때문입니다. 딥러닝의 가장 큰 특징 두 가지는 1. 층을 지날수록 점진적으로 복잡한 표현으로 바뀐다 2. 모든 층을 동시에 공동으로 학습한다 입니다. 2번의 의미가 여기선 중요한데, 예를 들어 피처가 100개가 있다고 가정합시다. 그럼 첫 번째 피처에 대해 학습하면서 가중치를 조정할 때 나머지 99개가 고정되어있는게 아니라 같이 조정됩니다. 가중치가 조정된다는 건 타겟에 맞도록 조정한다는 의미이며 여기서 자동적으로 sensitive하게 반응할 피처와 그렇지 않은 피처에 대해 학습하게 되는거죠.

 

 

Backpropagation to train multilayer architectures

신경망의 핵심인 역전파 알고리즘에 대해 설명합니다.

다층 구조는 간단한 SGD로 학습할 수 있습니다. 모듈의 input과 weights가 미분가능한 함수라면 backpropagation(역전파) 절차 통해 기울기를 계산할 수 있습니다. 역전파 알고리즘의 효과는 이미 70,80년대에 입증되었습니다.

(forward pass in a neural net and backward pass in neural net)

역전파는 The chain rule for derivatives(미분의 연쇄 법칙)을 사용하여 objective function의 gradient를 계산합니다. 핵심은 인풋의 기울기를 아웃풋의 기울기로 계산 할 수 있다는 것입니다. 많은 딥러닝은 feedforward neural network를 사용합니다. 한 레이어에서 다음 레이어로 순차적으로 향하는 네트워크를 말합니다. 현재 가장 유명한 비선형 함수는 ReLU 입니다. . 과거에는 tanh같은 더 매끄러운 비선형 함수를 썼으나 ReLU가 더 빠른 속도를 냅니다.

인풋과 아웃풋 층을 제외한 중간층을 hidden layers(은닉층)이라고 합니다. 은닉층은 인풋을 비선형적인 방식으로 왜곡하여 마지막 레이어에서 선형적으로 분리가능하도록 만듭니다.

90년대 후반, 신경망은 머신러닝 커뮤니티에서 무시당했었습니다. 특히, 기울기 하강법이 local minima에 빠질거란 우려가 있었습니다. 그렇지만 초기값과 관계없이 거의 항상 유사한 값의 해에 도달합니다. 최근의 여러 이론과 경험적인 결과에서도 local minina는 큰 문제가 아니라는것이 드러났습니다. 대신, 공간에 매우 많은 saddle points(안장점)이 있습니다. 그러나 대부분의 saddle points가 매우 유사한 값을 지니기때문에 어떤 곳에 빠져도 큰 문제가 되지않습니다.

바로 위 섹션에서 그래디언트를 이용해 가중치를 조절하는 방법에 대해서 설명했습니다. 그럼 이 방식을 어떻게 많은 신경망 층에 적용할 수 있을까요? 이게 바로 위에서 설명한 미분의 연쇄 법칙입니다. 말이 어렵지 보시면 다들 아~ 하실겁니다. 위키피디아에서 정의를 가져왔습니다.

미적분학에서, 연쇄 법칙(連鎖法則, 영어: chain rule)은 함수의 합성도함수에 대한 공식이다.

함수 에서 미분 가능하며, 함수 에서 미분 가능하다고 하자. 그렇다면, 에서 미분 가능하며, 그 미분은 다음과 같다.

고등학교 수학시간에 배웠던 기억나시죠? 신경망은 텐서의 연산으로 이루어져있습니다. 이 텐서들은 단순한 연산으로 이루어져있으므로 이들은 미분이 가능하죠. 따라서 output의 값을 알고 그 도함수를 안다는 것을 이용해 미분의 연쇄 법칙을 사용하는 겁니다. 생각보다 간단하죠?

다음에 나오는 feedforward network의 더 구체적인 정의는 다음과 같습니다.

순방향 신경망(順方向神經網, feedforward neural network)은 노드 간의 연결이 순환을 형성하지 "않는" 인공 신경망이다.[1] 즉, 이는 순환 신경망과 차이가 있다.

순방향 신경망은 고안된 인공 신경망의 최초의 가장 단순한 형태였다.[2] 이러한 네트워크에서 정보는 입력 노드로부터 출력 노드 방향으로 한 방향, 전방향으로만 움직이며, 숨겨진 노드가 있는 경우 이를 경유한다. 네트워크 안에서 순환이나 루프는 존재하지 않는다.[1]

 

다시 논문으로 돌아가서,

feedforward network는 2006년 Canadian Institute for Advanced Research에의해 다시 관심의 대상이 되었습니다. 라벨링데이터없이 피처 detector층을 만드는 비지도학습 절차를 도입했기 때문입니다. 각 피처검출기층의 학습목표는 아래층의 피처검출기를 재구성하는 것입니다. 이렇게 각 레이어를 'pre-training'(사전훈련)함으로써 딥 네트워크의 가중치를 적절한 값으로 초기화 할 수 있습니다. 그 후, 최종 출력 레이어를 네트워크 상단에 추가해 역전파기법을 통하여 전체 딥 네트워크를 조정할 수 있습니다. 이는 특히 라벨링 데이터가 적을 때 유용합니다.

사전 훈련방식은 음성인식에서 처음으로 제대로 쓰였습니다. GPU덕분에 가능해졌습니다. In 2009, the approach was used to map short temporal windows of coefficients extracted from a sound wave to a set of probabilities for the various fragments of speech that might be represented by the frame in the centre of the window. It achieved record-breaking results on a standard speech recognition benchmark that used a small vocabulary and was quickly developed to give record-breaking results on a large vocabulary task. (대충 음성인식분야에서 뛰어난 성능을 보였다~) 작은 데이터 셋에서, 비지도 사전 훈련은 라벨링 데이터가 적을 때, 오버피팅 방지와 더 좋은 일반화 성능을 보입니다.

그러나, fullly connected network보다 더 쉽게 훈련하고 일반화 할 수 있는 feedforward network가 있습니다. 바로 Convolutional neural network(ConvNet), 합성곱신경망입니다. 많은 컴퓨터 비전에 널리 쓰이고있습니다.

일반적으로 레이어에서 처음 weights 를 생성 시에는 random하게합니다. 그런데 굵은 줄을 보면 사전훈련으로 가중치를 설정한다고 되어있죠. 이는 처음 랜덤하게 뽑은 가중치가 좋은 성능을 내지 못 했기때문에, 랜덤한 가중치가 아닌 informative한 가중치를 넣는다는 의미입니다. 이 때 사전 훈련시 비지도학습의 절차를 사용했다는 것이죠. 주로 AutoEncoder를 많이 씁니다. AutoEncoder에 대해 잠깐 설명하자면, 은닉층에서 인풋의 유용한 표현을 추출해 (인코더) 다시 아웃풋으로 복원(디코더)합니다. 인풋과 아웃풋은 동일하죠. 여기서 학습된 가중치를 쓰는 것을 pre-training이라고 표현하며 더 좋은 성능을 낸다고 합니다. 하지만 훈련샘플과 리소스가 충분하다면 굳이 사전훈련을 하지않아도됩니다.

 

 

여기까지.. 절반오셨습니다. 나머지 절반은 다음 시간에 🛩

 

 

'데이터 분석 > DL' 카테고리의 다른 글

LSTM으로 시계열 예측하기: 절차  (3) 2019.07.23
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함