Gradient Descent (기울기 하강)

오류가 발생하는 경우에 따라 가중치를 조정하는 데 일반적으로 사용되는 최적화 함수를 "기울기 하강"이라고 부른다.

기울기는 "slope(경사)"의 다른 말이며, 특정 기간 동안 늘어난 비율, 시간 변화에 따른 자금의 변화 등과 같이 일반적인 x-y 그래프의 형태에서는 2개의 변수가 서로 어떻게 연관되어 있는지를 나타낸다. 이와 같이 특별한 경우에, 기울기는 네트워크의 오류와 단일 가중치 사이의 관계를 설명하기도 한다. 예를 들면, 가중치가 조정됨에 따라 오류가 어떻게 변화되는지를 설명할 수 있다.

더 좋은 점을 찍기 위해서, 어느 가중치가 가장 적은 오류를 만드는가? 어느 것이 입력 데이터에 포함되어 있는 신호를 정확하게 설명하고, 올바른 Classification(분류)로 변환하는가? 어느 것이 입력 이미지에서 "코"를 듣고, 프라이팬이 아닌 얼굴로 표시되어야 함을 알 수 있는가?

신경 네트워크(Neural Network)는 학습할 때, 천천히 많은 가중치를 조정하여 신호를 의미하는 바에 정확하게 맵핑할 수 있다. 네트워크 오류와 그 각각의 가중치 사이의 관계는 가중치의 미세한 변화가 오류의 미세한 변화를 야기시키는 정도를 측정하는 미분값(dE/dw)이다.

각 가중치는 많은 변형을 내포하고 있는 심층 네트워크(deep network)의 한가지 요소일 뿐이다. 가중치의 신호는 활성화를 거쳐서 여러 레이어로 합쳐진다. 따라서 미적분학의 Chain Rule(연쇄법칙)을 사용하여 네트워크의 활성화와 출력값들을 되짚어 계산하고, 결과적으로 문제에 맞는 가중치와 전체적인 오류에 대한 관계에 도달한다.

미적분학에서 Chain Rule(연쇄법칙)은 다음과 같다.

사용자 삽입 이미지




전방향 네트워크에서, 네트워크의 오류와 단일 가중치 사이의 관계는 다음과 같이 보일 것이다.

사용자 삽입 이미지






즉, 어느 가중치가 전달되느냐에 따라 세번째 변수(활성화:activation)에 의해 영향을 받는 두 변수(오류:Error, 가중치:weight)가 주어지면 활성화의 변화가 오류에 얼마나 영향을 미치는지를 먼저 계산하여 가중치의 변화가 오류의 변화에 얼마나 영향을 미치는지를 계산할 수 있고, 가중치의 변화가 활성화의 변화에 얼마나 영향을 미치는지를 계산할 수 있다.

Deep Learning에서 학습의 본질은 더 이상 오류를 줄일 수 없을 때까지 오류를 만들어내는 응답에 있는 모델의 가중치를 조절하는 것에 불과하다.

Updaters
(Model의 weight(parameter)를 update할 때 사용하는 Gradient Descent 방법의 알고리즘)

DL4J에서는 다음과 같은 Updater를 지원한다.
- ADADELTA
- ADAGRAD
- ADAM
- NESTEROVS
- NONE
- RMSPROP
- SGD
- CONJUGATE GRADIENT
- HESSIAN FREE
- LBFGS
- LINE GRADIENT DESCENT

Updaters에 대한 JavaDoc는 DeepLearning4J JavaDoc의 일부로 https://deeplearning4j.org/doc/org/deeplearning4j/nn/conf/Updater.html 에서 이용할 수 있다.

Trackback

Trackback Address :: http://www.yongbi.net/trackback/791

Comments

What's on your mind?

댓글 입력 폼
[로그인][오픈아이디란?]
오픈아이디로만 댓글을 남길 수 있습니다