딥러닝 - 경사하강법 기울기 연산

2021. 6. 14. 13:20AI-딥러닝/딥러닝

경사하강법을 이용한 편향 및 가중치를 수정하는 경우 내부 연산과정을 한번 정리해 볼까 합니다.

 

경사하강법으로 가중치와 편향을 수정하는 경우 w = 가중치, E = 오차, b = 편향이라고 두었을 때,

 

기울기를 구하기 위해서 "편미분"을 이용해 다음과 같은 식으로 나타낼 수 있습니다.

 

위 식을 설명하면, 가중치와, 편향을 수정하기 위해서

가중치에 이전 학습률을 편미분을 통해서 구하여 적용하는 수식을 나타낸 겁니다.

 

η = 학습률을 의미하고, 학습의 속도를 결정하는 상수입니다. 

 

값이 너무 작으면 학습시간이 오래걸리거나, 국소 최적해 빠지는 문제가 발생합니다.  

반대로 학습률이 너무 커져도 속도가 빨라져 오차가 좁혀지지 않는 문제가 발생하기도 합니다. 전역최적해에 도달하기 위해서 학습률을 적절하게 조절하여 학습률을 정해야 합니다.

 

 

예를 들어 설명하기 위해 3층을 가지는 신경망을 예를 들어 설명하겠습니다.

지난 글에서 설명한 역전파와 순전파를 이해하기 쉽게 그림으로 다시 그려봤습니다.

순서대로 다시 설명하면, 

 

1. 출력층에서는 오차를 이용해 가중치와 편향의 기울기를 구합니다. 또한 출력층으로 들어오는 입력값의 기울기도 마찬가지로 오차를 이용해 구합니다.

 

2.  순전파는 각 층의 출력값을 전파시키만, 역전파에서는 입력값 오차의 기울기를 전파시킵니다.

 

3.  은닉층에서는 이 값들을 받아 가중치 기울기와 편향의 기울기, 은닉층으로 들어오는 입력층의 기울기를 구합니다. 

      즉, 입력값의 기울기가 신경망을 거슬러 올라가는 것입니다.

 

 

 

그럼 출력층에서의 기울기를 해보도록하겠습니다.

w_jk를 출력층에서의 가중치, b_k를 편향, u_k를 가중치와 입력값 곱셈의 총합에 편향을 더한 값으로 표시합니다. 가중치는 은닉층의 출력과 관련있기 때문에 j,k 첨자 2개가 필요합니다. 은닉층의 출력은 y_j 라고 표시하면, 출력층 뉴런은 다음 그림과 같이 표현 할 수 있습니다.

v우선 가중치 기울기를 구하여 보겠습니다가중치 기울기는 다음과 같이 표현 가능합니다.

그림과 같이 가중치 기울기 수식을 표현하면 밑에 그림처럼 정리 할 수 있습니다.

정리하면, 위 그림 2에서 오차를 출력층 뉴런의 출력으로 편미분한 것과 그 결과값을 u_k로 편미분한 것의 곱이 됩니다. 

∂E/(∂y_k )는 손실함수를 편미분해서 구할 수 있고 ∂E/(∂y_k )는 활성화 함수를 편미분해서 구할 수 있습니다.

 

이런식으로 연쇄적으로 출력층->은닉층 방향으로 기울기 연산을 계속해서 나아감으로서 오차를 계산할 수 있고, 

경사하강법으로 "전역최적해"에 도달 할 수 있습니다.

 

위그림에서는 출력층으로만 예를 들었지만

출력층 -> 은닉층->은닉층->입력층 각 층에서의 계산은 위와 비슷하거나 동일하게 적용됩니다.

 

하지만 중간중간에서 손실함수의 종류에 따라 미분값이 변경됩니다.