안녕하세요, 오늘은 신경망에서 Weight들을 업데이트 시키는 방법에 대해서 배워보도록 하겠습니다.
역전파 (Backpropogation) 알고리즘은 최종 출력물(output)에서 존재하는 오차를 줄이기 위해 뒤에서 부터 앞으로 Weight를 업데이트 하는 방식입니다.
예를 든다면, 위의 그림에서 output layer에서 나온 오차 ε을 줄이기 위해서 우선 hidden layer 2 에서 output layer로 향하는 Weight를 업데이트 하고, 그 후, hiddenlayer 1에서 hidden layer2로 향하는 Weight를 업데이트하고,마지막으로 input layer에서 hidden layer1 으로 향하는 Weight를 업데이트합니다. 즉, output layer에서 input layer 방향으로 Weight를 역순으로 업데이트 하기 때문에 역전파 알고리즘이라고 불리는 것입니다. 실제로 이렇게 역방향으로 업데이트하는것이 효과가 있을까? 라는 의문점이 드는것도 사실이지만, 실제로 이 알고리즘의 결과는 다른 방법보다 월등히 좋기 때문에, 현재까지도 이 알고리즘을 통해 Weight를 업데이트하고 있다고합니다.
그렇다면 이제 역전파 알고리즘이 Weight를 어떠한 방식으로 업데이트하는지에 대해 알아보도록 하겠습니다.
물론 요즘에는 코드로 다 구현이 되어있어서, 자동으로 Weight를 업데이트 해주지만, 원리에 대해서 모르고 쓰는것보다 알고 쓰는것이 더 좋지 않을까요?
Loss function을 MSE로 정의하고, 활성화 함수를 시그모이드 함수로 적용한다고 하자.
우선 Hidden Layer에서 Output Layer로 향하는 Weight (Whj)들에 대한 업데이트는 다음과 같이 진행된다.
다음으로 Input Layer에서 Hidden Layer로 향하는 Weight (Wih)들에 대한 업데이트는 다음과 같이 진행된다.
따라서 Hidden Layer가 L-1개가 있을 때 Input layer에서 첫번째 Hidden Layer로 가는 Weight와 마지막 Hidden Layer에서 Output Layer로 가는 Weight를 업데이트 하는 방법은 다음과 같다.
'데이터 다루기 > 신경망' 카테고리의 다른 글
[신경망] 7. 오토인코더 (AutoEncoder) (1) (0) | 2019.06.03 |
---|---|
[신경망] 6. 활성화 함수 (Activation Function) (0) | 2019.06.03 |
[신경망] 4. 경사하강법 (Gradient Descent) (3) Momentum (0) | 2019.06.01 |
[신경망] 3. 경사하강법 (Gradient Descent) (2) BGD, SGD (0) | 2019.06.01 |
[신경망] 2. 경사하강법 (Gradient Descent) (1) Adaline (0) | 2019.06.01 |