본 글은 학교 '머신러닝' 수업을 들으며 공부한 내용을, 저의 말로 바꿔서 남에게 설명해주듯이 쓰는 글입니다.
다시 한번 복습하는 과정에서 Coursera Andrew Ng 교수님의 강의를 일부 수강하였고, 인터넷 검색 등을 통해 내용을 보충하였습니다.
너무 쉬운 개념들은 따로 정리하지 않았습니다. 따라서 해당 글에는 적히지 않은 개념들이 일부 있을 수 있습니다.
본 글은 Andrew Ng 교수님의 'machine learning' 수업 강의 노트를 일부 사용하였습니다.
본 글에 사용된 강의노트 사진들 대부분의 저작권은 'DeepLearning.AI'에 귀속되어 있음을 밝히며,
본 글은 'DeepLearning.AI'의 'Copyright rights'에 따라 수익 창출을 하지 않고,
또한 해당 정책에 따라 '개인 공부 및 정보 전달'이라는 교육적 목적으로 글을 작성함을 밝힙니다.
@@@
이번 챕터는 강의만으로 이해하기 너무 어려워서
외부 자료들을 많이 읽고 참고하여 정리했습니다.
저도 아직 역전파를 100% 이해하고 쓴 내용들은 아니라(체감상 70~80%정도 이해한듯...)
다소 오류가 있을 수 있습니다. 댓글로 적극 지적해주시면 감사합니다.
여러분들은 부디 역전파를 정복할 수 있기를...
@@@
Cost function
저번 챕터에서 "가중치가 정해졌을 때 신경망에서 특정 입력을 받으면 어떤 예측 결과를 내뱉는지" 살펴보는 순전파 과정을 다뤘음.
근데, 순전파 과정에서 구한 "내 신경망이 출력한 예측 결과"와
"실제 정답" 사이에는 차이, 즉 error가 있을 수 있음.
예를 들어, 지금 우리는 신경망을 통한 분류 문제를 다루고 있으니까, 내가 어떤 픽셀들로 이루어진 사진을 입력으로 받아서, 이 사진이 고양이 사진인지 아닌지 분류하고자 신경망을 설계했음.
은닉층도 만들고 가중치도 부여하고 ... 해서 잘 설계를 한다음 고양이 사진을 입력함.
그 결과 출력층의 활성화 함수(즉, 시그모이드 함수) 결과가 0.63이 나왔음.
이 때, 실제 정답은 1(고양이 사진)이고, 내 모델은 63% 확률로 이게 고양이 사진일 거라고 예측한 거임.
즉, 예측이 틀렸음. error(에러)가 발생한 것임.
근데, 이 error을 누가 만들어 낸걸까??
누가 출력층에서 0.63이 출력되도록 만든 걸까??
당연히 가중치(쎄타)임.
내가 초기에 세팅한 가중치들이 이 입력값들에 영향을 미치고 미쳐서 최종적으로 0.63을 만들어낸 거임.
즉, 우리는 "가중치를 잘 수정해서" "이 사진을 입력받았을 때 error가 더 적은 값이 출력되도록" 만들 수 있을것임.
그래서, 이 error에 대해 (binary classification의 경우는) cost function J를 이렇게 정의할 수 있음.
(참고로, 기존에 로지스틱 회귀에서 썼던 비용 함수 J는 이진 크로스 엔트로피(Binary Cross Entropy) 함수라고 함.)
근데, 좀 더 일반화해서 K개의 class를 classificaation하는 문제로 바꿔보자.
즉 아래와 같은 구조로 일반화해보자.
이 경우 비용함수는 아래와 같음.
이제, 이 J를 최소화하도록 가중치를 수정해나갈것임.
으잉?? J값을 가지고 가중치를 수정한다고?? 어케함??
그게 오늘 다룰 "역전파" 기법이다.
Backpropagation algorithm(역전파 알고리즘)
자... 시작해보자.
우선, 선형회귀때 우리가 파라미터를 어떻게 수정했는지 복습해보자.
우리는 "각 파라미터가 비용 함수 J에 얼마나 영향을 미치는지" 를 알고 싶었다.
그리고 그게 바로 "델J / 델theta" 였다.
즉, J를 각 파라미터로 편미분해주면 그 파라미터가 J에 미치는 영향을 알 수 있었다.
따라서 저 편미분 값이 양수라는 것은
이 파라미터가 J를 크게 만드는 쪽에 가있다, 또는 J가 최소인 위치가 아직 아니다, 즉 파라미터를 줄여야 한다는 것을 의미했다.
그렇기에, 저 편미분 값이 양수면 파라미터에서 특정 비율만큼을 빼주면 J를 줄일 수 있었다.
신경망의 경우는, 우리가 수정해야할 가중치는 굉장히 많고, 여러 layer을 통해 정의돼있다.
그러나 선형 회귀때와 똑같이 각 가중치가 J에 미치는 영향을 알고, 그만큼 가중치를 줄이거나 더해가면서 update하면 J를 줄일 수 있을 것이다.
따라서, 우리는 델J / 델theta 인 편미분값을 똑같이 구할 것이다.
우선, 우리가 다룰 예제로 위 기호들을 잘 기억하자.
공식 유도 내용은 손필기로 정리함.
https://cuffyluv.tistory.com/67
참고.
이후 내용은 현타가 와서 나중에...
'AI > ML - Coursera Andrew Ng' 카테고리의 다른 글
[ML] chain rule을 이용한 back propagation 공식 유도 손정리 (0) | 2024.10.18 |
---|---|
[ML] #8 머신러닝 실사용 꿀팁들(Advice for applying machine learning) (0) | 2024.10.15 |
[ML] #6 신경망(Neural Networks) (0) | 2024.10.15 |
[ML] #5 정규화(Regularization) (0) | 2024.10.15 |
[ML] #4 로지스틱 회귀(Logistic Regression) (0) | 2024.10.14 |