etc/구글 머신러닝 부트캠프

[DSL] Neural Networks and Deep Learning Week 2 : Neural Networks Basics

uyt8989 2022. 6. 29. 01:23

드디어 머신러닝 기초 강의를 듣기 시작했다. 지금까지는 머신 러닝에 대한 지식이 필요하면 생존형으로 필요한 부분만 어찌어찌 공부했었는데 이 기회에 기초를 탄탄히 하고 싶다. 사실 이미 1주 차도 있었지만, 딱히 정리까지 필요해 보이지는 않아서 생략했다.

 

우선은 머신 러닝에 쓰이는 notation들부터 정리했다. 용어 정의가 헷갈리기 시작하면 답도 없기 때문에 다른 주차는 정리를 안 해도 이번 주차는 정리하고 넘어가는 게 좋다고 생각했다. 지금까지 그냥 대충 그렇겠거니 하면서 넘어온 애들이라서 확실히 해두는 게 나중에 안 헷갈린다.

그리고 이진 분류 문제를 해결하기 위해서 Logistic 회귀 문제에 대해 배웠다. Logistic 회귀는 이전에 계량경제학 수업을 들으면서도 잠깐 배웠기 때문에 어느 정도 익숙했다. 하지만 정확한 회귀 분석법은 안 배우고 넘어갔기에 새로운 내용도 많았다. 우선 여기서 사용하는 용어부터 제대로 짚자. 

가장 놀란 건 Loss function과 Cost function의 차이다. 사실 둘이 비슷한 줄만 알고 있었는데, Loss function은 train set 1개의 오차고 Cost function은 모든 Loss function의 평균이다. 

 

그리고 Gradient Descent. 대충 Optimal을 찾는 알고리즘이라는 것만 알고 있었는데, 이번 기회에 어떤 방법으로 Optimal에 다가가는지 확실히 알게 되었다. 요새는 그냥 평범한 Gradient Descent는 잘 안 쓰는 모양이지만, 그래도 뭐든지 근본이 제일 중요하다. 그림 없이 그냥 말로 대충 설명하자면 가중치의 값에 기울기를 빼서 기울기를 갱신하는 방법이다. 기울기가 양수라면 가중치는 더 작아지고, 기울기가 음수라면 가중치는 더 커진다. 단순히 이차함수만 생각해도 금방 감이 잡힌다.

 

다음은 Gradient Descent를 적용하기 위해서 dw 값을 찾아야 한다. 이를 위해서 Chain rule을 사용한다. 진짜 오랜만에 몇 년 만에 듣는 말인지 모르겠네...  위의 Loss function을 사용하면 밑의 방법으로 dw 값을 찾을 수 있다. dz 구하는 부분은 시그모이드 함수의 특징을 사용한다고 인지해두자. 직접 손으로 구해보긴 했는데, 앞으로 다시 구할 일이 있을까...ㅋㅋㅋ 

전체적인 과정을 벡터를 사용해서 최적화했다. 강의에서 단순히 for문을 벡터로 바꾸기만 해도 시간이 엄청 빨라지더라. 그래서 numpy의 내부 구현이 궁금해서 조금 찾아봤는데, 시원한 설명을 찾지 못했다. 

for문으로 힘들게 구현한 내용을 벡터를 사용해서 깔끔하게 해결할 수 있다. dw나 db 같은 경우에는 한 번에 평균까지 내버릴 수 있기 때문에 화살표로 매칭 시킨 게 정확히 같진 않다. 그런데 문제는 선형대수학을 들은 지가 하도 오래돼서 식을 본다고 바로 벡터가 상상이 되지 않는다... 최근에 연구 프로젝트 진행할 때도 그러더만, 아직도 안 익숙해졌네...

 

이번 강의를 들으면서 이걸 처음 고안한 사람은 진짜 뭐하는 사람일까하는 생각이 들었다. 지금까진 거의 마법으로 느껴졌던 머신 러닝의 원리를 조금이나마 알게되니까 재밌다. 이게 Research고 Science, Mathematics지...

 

* Courera의 Deep Learning Sepcialization 강의를 수강하는데 도움이 되고자 작성한 요약문입니다. 틀린 내용 있다면 정정해주시면 감사하겠습니다.