본문 바로가기

Programmer Jinyo/Machine Learning

머신러닝,딥러닝 초보를 위한 튜토리얼 강의 2 ( Cost Function , Gradient Descent )


투명한 기부를 하고싶다면 이 링크로 와보세요! 🥰 (클릭!)

바이낸스(₿) 수수료 평생 20% 할인받는 링크로 가입하기! 🔥 (클릭!)

2018/06/27 - [Programmer Jinyo/Machine Learning] - 머신러닝,딥러닝 초보를 위한 튜토리얼 강의 1 ( 머신러닝이란? )

2018/06/28 - [Programmer Jinyo/Machine Learning] - 머신러닝,딥러닝 초보를 위한 튜토리얼 강의 3 ( Supervised Unsupervised Learning , Classification , Regression )


저번 글에서 우리는 머신러닝이라는게 대략 뭔지에 대해서 알아봤다.


그리고 어떤 것을 학습시키는 것인지에 대해서도 알아볼 수 있었다.


리마인드 하자면


-> 목적을 가진 식을 설계하고

-> 그 식의 파라미터를 학습한다.


그렇다면 이제 '어떻게' 가 남아있는데, 이 방법을 우리는 Cost Function 이라는 것을 정의해서 해결하려고 한다.


Cost Function 이란 -


우리가 결과로 뱉어낸 값을 평가하는 함수로서, 


보통 Cost Function에 우리가 생각하는 오류를 넣고, Cost function의 값을 줄이는 쪽으로 학습을 진행한다. ( Loss function이라고도 한다. )


이전 글에서 예시로 든



식으로 Cost Function을 만들 경우 


진짜로 관측된 내일 온도우리가 예측한 내일 온도 를 비교해서


그 차이를 적당히 표현할 수 있는 함수를 Cost Function이라고 표현하게 될 것이다.


예를 들어, 우리가 오늘 온도와 어제 온도를 가지고 내일 온도를 예측하는 함수 



를 만들었다고 생각 해 보자.


( 저 위에 있는 식을 그냥 고상하게 문자로 표현했을 뿐이다. 식 자체가 가지는 의미를 한번 곱씹어 보자. )


그렇다면 Cost는 


이라거나  등으로써 정의할 수 있을 것이다.


( 머신러닝에서 중요한 것 중 하나인데,  수식을 보고 쫄지 말고 그 수식이 왜 저런 의미를 가졌는지에 대해서 곰곰히 생각해보면 더욱 풍부한 이해를 하는 것에 도움이 된다. )



그럼 우리는 저 Cost function을 줄이는 방향으로 a와 b를 조절하면 되겠다.


그렇다면 a와 b의 값을 조절하는 것은 또 어떻게 하느냐 !


-> 미분을 통해서 ( ... ) 가능하다.


워후 ! 지금 글을 닫으려고 하는 사람들이 몇명 보였는데 기분탓인가..


어려운게 아니다.


진짜 코딩을 할 때, low level에서는 수학적으로 물론 진짜 미분을 하겠지만


우리는 간단히 생각해보자.


a를 조금!!!! 올렸을 때 cost가 떨어진다면 a를 조금 올리고, cost가 올라간다면 a를 조금 내리면 된다.


마찬가지로 b도 조금!!! 올렸을 때 cost가 떨어진다면 b를 올리고, 아니라면 b를 내려주면 된다.


다만 이렇게 쉽게 이해하는것도 좋지만, 미분이기 때문에, a를 조금 변화시켰을 때,


cost가 1 떨어질때와 2 떨어질때를 비교하면 두배의 변화폭을 보인다는 것은 염두해두자.



이렇게 쭉쭉 cost function을 줄이는 쪽으로 파라미터들을 슬금슬금 이동시킨다고 해서 이 방법을 gradient descent (경사 하강법) 라고 한다.





멋찐 그림으로 보자면 이런 느낌일 것이다.




결과적으로 머신러닝은 다 이런식으로 파라미터를 조절하면서 이뤄지고, 중요한건


모델 자체를 어떤 수식으로 표현하느냐,

Cost Function을 어떤 수식으로 표현하느냐가 판가름한다고 보면 얼추 맞을것이다.


^오^ 내 생각 정리도 좀 되는 느낌이다 좋구만