Backpropagation 계산

안드레이 카파시는 Yes you should understand backprop라는 글에서 역전파backpropagation 코드를 직접 구현해보라고 한다. 뉴럴넷을 잘 만들려면 직접 정방향, 역방향 코드를 만들어볼 수 있어야 하며 역전파를 구현해보면 잘못된 값으로 기울기가 0이 되는 문제도 찾아낼 수 있기 때문. 실제로 역전파는 뉴럴넷을 이해하는데도 큰 도움이 되며, 역전파는 뉴럴넷의 핵심을 이룬다.

2018년 5월 24일 편집
2018년 2월 11일 초안 작성

본문

Yes you should understand backprop

역전파 코드를 직접 만들어 봐야할 이유가 지적 호기심이나 더 나은 역전파 알고리즘을 만들기 위해서가 아니라 역전파를 알아야 뉴럴 네트워크를 만들 때 오류를 범하지 않고 디버깅을 하는데 도움을 주기 때문입니다.
역전파, 직접 짜봐야 하나요?

역전파backpropagation 계산

에 대한 에러 함수error function의 미분은 아래와 같다. (신경망 첫걸음, 2016)

미분의 연쇄 법칙chain rule을 적용한다.

이므로 아래와 같이 정리한다.

는 노드 의 결과 값으로 입력 신호의 가중치 합에 시그모이드sigmoid를 적용한 것이다.

연쇄 법칙chain rule

시그모이드의 미분은 분수 함수의 연쇄 법칙에 따라 아래와 같이 정리된다.

이를 로 정리하면 아래와 같이 깔끔하게 정리된다.

시그모이드의 미분 결과 식은 매우 간단하며, 활성화 함수로 인기 있는 이유 중 하나다. 이제 이 결과를 적용하면 식은 아래와 같다.

미분의 연쇄 법칙에 따라 를 미분하면 가 된다. 시그모이드 함수내의 표현식도 한 번 더 미분되어야 하며, 노드 의 결과 는 오직 이와 연결되는 가중치 에 의해서만 영향을 받으므로 합 기호를 뗄 수 있고, 미분을 취하면 만 남는다.

아래와 같이 정리된다.

상수항 2를 을 취해 제거한다. 이렇게 미분 계산을 쉽게 하기 위해 일반적으로 SSE에 를 취한 형태를 에러 함수로 사용한다.

이제 최종 수식은 아래와 같다.

델타 룰delta rule

학습률learning rate을 포함한 의 수식을 단순화한 최종 형태는 아래와 같다. (신경망 첫걸음, 2016) 델타 룰이라 부른다.

주피터 노트북

주피터로 미분 계산을 검증했다.

히든 레이어의 역전파

히든 레이어의 경우 이전 레이어의 미분을 모두 적용해야 하므로 좀 더 복잡하다. 행렬 연산이 반드시 필요한 이유이기도 한다. 행렬의 전치transpose로 미분 계산을 한다.

그래디언트 체킹gradient checking이 가능하려면 를 정확히 계산해주어야 하는데, 계산을 간편히 한다는 이유로 생략하면 수치 미분과 해석적 미분 값이 동일하지 않아 검증이 어려운 문제가 있다.

역전파 계산을 알기쉽게 정리한 글을 보면 를 산출하면서 간단히 정리해버려 마치 미분 없이 그대로 넘기면 되는걸로 혼동하게 되는데, 출력 레이어에 활성화activation 함수를 적용 했다면 계산시 에러에 대한 출력 레이어 편미분이 필요하므로 활성화, 이 경우 시그모이드 미분이 필요하다. 위 수식에서 부분이 활성화에 대한 미분이고 이 각각 가중치 , 이 된다.

무엇보다 직접 계산하면서 값을 맞춰 보는게 가장 좋다. 연쇄 법칙을 정리해보니 활성화, 여기서는 시그모이드 미분이 필요함을 알 수 있다. 시그모이드의 미분인 에 포함해야 되며, 기존 에러 편미분과 함께 가중치를 곱해서 이전 레이어로 역전파해야 그래디언트 체킹이 성공하게 된다.

초기에 코드를 구현하면서 누락했는데 따라서 출력 레이어 활성화의 미분이 적용되지 않았으나 그래도 계산 결과만 다를뿐 비율은 행 별로 동일했으며, 재밌게도 학습도 제대로 됐다. 따라서 논문에서 실수로 수식을 생략해도 알아차리기 어려우며 대부분의 논문, 문서에선 의도적으로 생략하는 경우도 잦으므로 주의가 필요하다.

주피터 노트북

주피터로 역전파 그래디언트 체킹을 계산했다.

계산이 정확한데도 cs231n의 그래디언트 체킹 기준을 맞추지 못한 점은 아쉬운 부분이다.

is a collection of Papers I have written.
© 2000 - Sang-Kil Park Except where otherwise noted, content on this site is licensed under a CC BY-NC 4.0.
This site design was brought from Distill.