티스토리 뷰
이전 까지의 내용
이전 글에서는 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 현상을 어떻게 극복하는지에 대해 살펴보겠습니다.
부족한 블로그에 방문해 주셔서 감사합니다.
잘못된 부분이나 질문이 있으시면
댓글로 말씀해주세요.
금방 확인하고 피드백 드리겠습니다.
좋은 하루 되세요. ^^
'머신러닝' 카테고리의 다른 글
[딥러닝] 뉴럴 네트워크 Part. 6 - 가중치 초기화 (2) | 2018.03.27 |
---|---|
[딥러닝] 뉴럴 네트워크 Part. 5 - 새로운 활성화 함수 (4) | 2018.03.25 |
[딥러닝] 뉴럴 네트워크 Part. 3 - MLP 학습과정 (4) | 2018.03.20 |
[딥러닝] 뉴럴 네트워크 Part. 2 - 멀티 레이어 퍼셉트론 (3) | 2018.03.19 |
[딥러닝] 뉴럴 네트워크 Part. 1 - 새로운 머신러닝 (4) | 2018.03.18 |
- Total
- Today
- Yesterday
- 카카오
- 가족캠핑
- 캠핑장추천
- 강원도여행
- 파이썬
- python
- 가평여행
- 머신러닝
- 서울근교캠핑
- bukhansannationalpark
- 글램핑
- SeoulTravel
- 계곡캠핑
- 여름휴가
- 반려견캠핑
- 자연힐링
- 캠핑초보
- 영월여행
- 강원도캠핑
- 알고리즘
- 여름휴가추천
- 커플여행
- 가평캠핑
- 백준
- 가족여행
- 여름캠핑
- 영월캠핑
- sql
- Oracle
- Koreancuisine
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |