본문 바로가기

ML

[ML] 딥러닝 1 - 6강 손실함수

※ 본 글은 한경훈 교수님의 머신러닝 강의를 정리, 보충한 글입니다. ※

(5) [딥러닝 I] 6강. 손실 함수 - YouTube

 


Rule-based vs Data-driven

딥러닝 이전 시대의 모델들은 인간이 설정한 규칙을 따라 데이터를 구분하였다.

예를 들어, 고양이를 판별하기 위해 고양이의 귀, 수염, 코의 정보를 얻는 알고리즘을 만들고

각각의 정보가 미리 설정한 규칙에 부합하는지로 고양이를 판별하였다.

이를 규칙 기반 방법 (Rule-based approach)이라 한다.

 

하지만 이러한 방법은 모든 고양이를 포괄할 규칙을 만들기 어려우며, 세부적인 규칙을 매번 설정해야 한다는 문제가 있다.

이러한 문제를 해결하기 위해 제시된 것이 데이터 기반 방법 (Data-driven approach)이다.

이름에서 알 수 있듯, 데이터 기반 방법은 수많은 데이터가 있는 데이터셋을 통해 모델을 학습시키는 방법이다.

이때, 모델을 학습시키는 것을 머신 러닝 (Machine Learning)이라고 한다.

이렇게 학습된 머신러닝 모델은 새로운 데이터를 인풋으로 받아 그 데이터의 레이블을 예측 (prediction or test) 한다.

 

이미지 출처 & 많이 참고가 되었던 링크 :  https://3months.tistory.com/512  

 


머신러닝의 원리

🤔 기계가 학습하는 게 좋다는 건 알겠는데.. 이게 어떻게 가능한 걸까?

라면을 처음 먹는 사람이 라면에 들어갈 물을 조절한다고 생각해보자.

처음에는 다다익선이라 생각해 물 1L를 콸콸 넣었다가, 굉장히 맛이 없는 라면을 먹게 되었다.

다음 시도에서는 물을 900ml 넣어봤고, 뭔가 먹을만해졌다.

그렇게 800ml, 700ml, ..., 300ml까지 넣어보다가 550ml에서 가장 맛있다는 걸 발견하게 될 것이다.

이렇듯 경험 -> 피드백 -> 경험 -> 피드백을 통해 인간은 학습을 하게 된다. 

 

기계 또한 인간과 같은 방식으로 학습한다.

원리는 간단히 "정답에 가까운 방향으로 수정하는 것을 반복" 하는 것이다.

 

우선 데이터를 입력받고 가중치와 편향에 따라 출력을 계산한다.

출력된 값을 실제 값(라벨)과 비교하여 오차를 계산한다.

이후 오차를 최소화하는 방향으로 가중치와 편향을 수정하고 이 과정을 반복한다.

위 과정을 이해하기 위해 6-10강에 걸쳐 '오차를 계산하는 손실 함수'와

'오차를 최소화하는 방법인 경사하강법'을 배워보고자 한다.

 


손실 함수 (loss function)

손실 함수는 실제값과 예측값의 차이( = 오차)를 수치화해주는 함수이다.

오차가 클수록 손실 함수의 값이 크고, 오차가 작을수록 손실 함수의 값이 작아진다.

머신러닝은 데이터를 통해 손실 함수의 값을 최소화 하는 W(가중치), b(편향)를 찾아가는 과정이다.

회귀 모델(연속형 데이터)의 경우 손실 함수로 주로 평균 제곱 오차 MSE를,

분류 모델(범주형 데이터)은 손실 함수로 주로 교차 엔트로피 오차를 사용한다.

 


평균 제곱 오차 MSE

참고(더보기 클릭) - 오차 제곱합 SEE

더보기

앞에서 말했듯이, 손실 함수는 실제값과 예측값의 차이를 수치화해주는 함수이다.

이를 위해 통계학에서의 오차(실제값 - 예측값) 개념을 사용한다.

전체 오차의 총합은 0이므로, 오차의 합 대신 오차 제곱의 합을 이용해 차이를 수치화한다.

 

기본적인 오차 제곱 합의 공식은 위와 같지만,

머신러닝에서는 경사 하강법의 오류를 최소화하기 위해 원래 오차 제곱합에 1/2를 곱한 값을 오차 제곱합으로 사용한다. 이를 델타 규칙이라 한다. (델타 규칙이 뭔지는 나도 잘 모른다.. 그냥 믿습니다 하고 넘어갈 뿐 ㅠ)

 

cf. 그리고 1/2을 곱하는 이유가 인터넷에 나와있는 델타 규칙 때문인지, 경훈 교수님이 설명하신 미분의 편의성을 위해서인지는 잘 모르겠다. 경사 하강법의 깊은 영역까지 가봐야 알 수 있을 것 같다..😅

단순히 오차의 제곱합이었던 SSE를 데이터의 크기로 나눠 평균을 구한 게 바로 평균 제곱 오차(MSE)라고 한다.

오차 제곱합에서는 델타 규칙에 의해 1/2을 곱해줬지만, 평균 제곱 오차에서는 1/n을 곱해주므로 굳이 1/2을 곱할 필요가 없다. 따라서 평균 제곱 오차의 공식은 아래와 같다.

cf. 자료들이 평균에서 얼마나 떨어져 있는지를 나타내기 위해 분산(자료-평균 제곱의 평균)을 이용한 것과 비슷한 원리이다.

 

🤔 머신러닝에서 오차 제곱합(SSE) 대신 평균 제곱 오차(MSE)를 사용하는 이유는..?

오차 제곱합은 정확도와 상관없이 데이터의 크기가 늘어남에 따라 커질 수 있으므로

결과 값이 큰 이유가 정확도가 떨어져서인지, 데이터 크기가 많아서인지를 구분하기 힘들기 때문이다.

반면 평균 제곱 오차는 오차 제곱합에 데이터의 크기만큼을 나눠주므로, 데이터의 크기와 상관없이 오차를 수치화할 수 있다.