티스토리 뷰

반응형


이전 까지의 내용 

  • 이전 글에서는 MLP 가 수많은 parameter 들을 학습하기 위해 어떤 것들이 (Activation Function, Learning Rate, Cost Function, 학습 식) 필요한지에 대해서 알아보았습니다. 이번 글에서는 이 개념들을 통해 실제로 학습하는 과정인 역전파 알고리즘에 대해 살펴보겠습니다.

  • 전체 내용은 SlideShare 에서 한번에 보실 수 있으며 youtube 로도 볼 수 있습니다.



역전파 알고리즘 

  • 이전 글에서 자유투 연습 동영상과 MLP 의 학습이 비슷하다고 말한 적이 있습니다. 자유투를 던지는 과정은 순전파 과정 (Feed Forward) 라고 할 수 있고 던진 공이 어느 지점에 도착했는지를 확인하고 던질 위치를 수정하는 과정을 역전파 과정 (Backpropagation) 이라고 할 수 있을 것 같습니다.

  • 간단한 문제들 같은 경우 역전파 알고리즘을 사용하지 않고 Normal Equation 이나 Cost Function 의 해를 바로 구하는 방식으로 풀어낼 수 있지만 복잡하고 어려운 문제들은 역전파 알고리즘을 사용하는 것이 더 효율적입니다.



예제 : 순전파 


  • 쉬운 설명을 위해 예제 신경망을 구성해보았습니다. Input 값은 1개이고 Output 값은 2개, Hidden Layer 수는 2개인 작은 신경망입니다. 각 노드의 Activation Function 은 Sigmoid Function 을 사용했으며 Bias 는 제외하였습니다.

  • 초록색 값들은 처음 주어진 값들이고 파란색 값들은 초기값을 바탕으로 계산한 값입니다. 처음 x_1 의 값은 0.5 이고 w_10 은 0.15 이기 때문에 둘을 곱한 0.075가 계산값으로 나온 것을 알 수 있습니다.

  • 결과적으로 계산한 y_1 값은 0.609 이지만 실제값은 0.3 이어야 하고 계산한 y_2 값은 0.644 이지만 실제 y_2 값은 0.9 인 것을 알 수 있습니다. y_1 쪽은 줄이는 방향으로 개선해야하고 y_2 쪽은 증가하는 방향으로 parameter 들을 변경해야 한다는 것을 알 수 있습니다.



  • Error 측정방식은 MSE 방식을 사용했고, 학습 전 전체 Error 는 0.087 인 것을 알 수 있습니다.



예제 : 역전파 01 

  • 역전파 알고리즘을 적용할 때 신경망의 weight 들은 두 분류로 구분할 수 있습니다. Output 으로부터 첫 번째 층에 위치한 weight 들과 그 외의 weight 들. 먼저 Output 으로부터 첫 번째 층에 위치한 weight 들의 역전파 부터 살펴보겠습니다.



  • 먼저 w_10^(1) 부터 학습시켜 보겠습니다.  w_10^(1) 가 전체 Error 에 미치는 영향을 식으로 풀어보면 다음과 같습니다. 순서대로 총 3개의 편미분 식으로 나타낼 수 있고 저것들만 계산하면 학습 식에 넣어서 얼마나 변경해야 할 지 구할 수 있습니다.



  • 첫 번째 a_20 이 전체 Error 에 미치는 영향을 살펴보면 다음과 같습니다. target_y1 은 실제 y_1 값인 0.3 을 의미하고 a_20 은 우리가 이미 갖고 있는 0.609 값을 의미합니다.




  • a_20 은 z_20 을 Sigmoid Function 에 넣어서 나온 결과물 입니다. Sigmoid Function 의 미분 식은 다음과 같고 우리가 이미 알고 있는 z_20 값인 0.207 을 대입하면 쉽게 구할 수 있습니다.




  • z_20 을 우리가 처음에 목표한 w_10^(1) 로 미분하면 a_10 이 나온 다는 것을 알 수 있고 a_10 값은 0.518 입니다. 이 세 식의 값을 조합하면 w_10^(1) 이 얼마나 E_tot 에 영향을 미치는 지 계산할 수 있습니다.



  • 계산 결과 w_10^(1) 가 E_tot 에 미치는 영향은 0.0381 이라는 것을 알 수 있습니다. 이 값을 학습식에 넣으면 우리가 원하는 학습된 w_10^(1) 값을 구할 수 있습니다. 

  • 일반적으로 Learning Rate 의 값은 0.1 이나 더 작은 값으로 초기화 합니다만 이번 예제에서는 0.5 를 사용하였습니다.





예제 : 역전파 02 

  • 역전파 02 과정에서 식에는 문제가 없으나 세부 수치에서 오타가 있음을 발견하였습니다. 읽으시는 과정에서 세부 숫자에 연연하지 마시고 흐름따라 읽어주시면 감사하겠습니다. 빠른 시간내로 오타 수정하겠습니다. 오타 있음을 알려주신 "궁금합니다" 님 감사합니다.

  • 이번엔 Output Layer 로 부터 첫 번째 층에 위치하지 않은 weight 들의 역전파 알고리즘을 살펴보겠습니다. 이 두 종류가 다른 이유는 첫 번째 층에 위치한 weight 들은 하나의 Output 값에만 영향을 미치지만 그 외의 것들은 더 많은 Output 값에 영향을 미치기 때문입니다. 그림으로 살펴보겠습니다.


  • 이 전체 Error 에 미치는 영향에 관한 식과 전체 Error 가 어떻게 구성되는지를 나타낸 식입니다. 이전 단계에서 학습값을 구했던 것처럼 동일한 과정으로 진행하면 됩니다.


  • 먼저 E_1 에 대해 미치는 영향부터 계산해보면 0.0294 가 나오는 것을 알 수 있습니다.


  • 마찬가지로 E_2 에 미치는 영향을 살펴보면 -0.0328 이라는 것을 알 수 있습니다. 마지막으로 E_1 과 E_2 에 미치는 영향을 종합해서 E_tot 에 w_10^(0) 이 미치는 영향을 계산해보면 다음과 같습니다.



  • w_10^(0) 은 E_tot 에 -0.00042 만큼 영향을 미친다는 것을 알 수 있고 이를 통해 w_10^(0) 을 학습시켜 보면 다음과 같습니다.


  • 학습률을 0.5 로 지정하고 계산하면 새로운 w_10^(0) 의 값은 0.1502 라는 것을 알 수 있습니다. 이제 다른 모든 weight 들을 학습시켜서 얼마나 Error 가 줄어들었는지 살펴보겠습니다.


학습 전 신경망 - y_1 : 0.609, y_2 : 0.633


학습 후 신경망 - y_1 : 0.581, y_2 : 0.638


  • 1회 학습하고 난 뒤 전체 오차는 0.087 에서 0.069 로 0.017 만큼 감소한 것을 알 수 있습니다. 
  • 과정을 따라오셨다면 아시겠지만 학습을 순전파 방향이 아닌 역방향으로 하는 이유는 뒤에서 계산한 편미분 값들이 앞쪽으로 진행되면서 다시 사용되기 때문입니다. 


2차원 선형 회귀 역전파


3차원 선형 회귀 역전파


  • 위 2 개의 이미지는 진행한 역전파 예제와 관련없습니다만, 학습이 반복되면 어떻게 되는지 나타내는 그림 입니다.
  • 학습이 반복될 수록 전체 오차 loss 가 줄고 data 에 적합한 모델을 찾아나가는 것을 알 수 있습니다. 


Deep Learning 

  • 이제 학습과정이 어떻게 되는지 제대로 알았으니 더 어렵고 더 복잡한 문제를 풀 수 있을 것 같습니다. 수가 많아져봤자 같은 알고리즘으로 동일하게 계산하면 되니까요.


  • 하지만 더 깊고 더 넓은 망을 학습시키는 과정에서 Output 값과 멀어질 수록 학습이 잘 안되는 현상들이 발생합니다. 이 현상을 Vanishing Gradient 라고 부르는데, 이 현상 때문에 다시 인공신경망 연구에는 침체기가 도래 합니다.



  • 다음 글에선 이 Vanishing Gradient 현상을 어떻게 극복하는지에 대해 살펴보겠습니다.






부족한 블로그에 방문해 주셔서 감사합니다.

잘못된 부분이나 질문이 있으시면 

댓글로 말씀해주세요.


금방 확인하고 피드백 드리겠습니다.


좋은 하루 되세요. ^^



반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함