손실함수

Younghwan Cha·2022년 9월 29일
0

ML

목록 보기
12/18

기계 학습

기계는 주어진 데이터를 온전히 학습하고, 주어진 문제의 패턴을 발견하려 시도한다.
그리고 기계 학습은

  • 훈련 데이터( training Data )
  • 시험 데이터( test Data )
    로 나누어 학습과 시험을 수행하는 것이 일반적이다.

우선 훈련 데이터를 통해서 학습하며 최적의 매개변수를 찾고,
시험 데이터를 통해서 학습한 모델의 실력을 평가 하는 것이다.
이렇게 데이터를 둘로 나누는 것은 모델의 범용 능력을 제대로 평가하기 위함이다.
여기서 범용 능력이란, 훈련 데이터에 포함되지 않은, 즉 처음 보는 데이터로도 올바르게
문제를 해결해 낼 수 있는 능력을 말한다. 만약 손글씨를 인식하는 프로그램을 훈련시켰는 데
특정 몇몇 사람의 손글씨만을 인식 할 수 있다면 좋은 모델이라고 평가 받지 못할 것이다.

참고로, 이처럼 특정 데이터셋에만 지나치게 최적화된 상태를 오버피팅 이라고 한다.

손실 함수의 필요성

신경망 학습에서는 현재의 상태를 '하나의 지표'로써 표현하게 된다.
그리고 그 지표를 가장 좋게 만들어주는 가중치 매개변수의 값을 탐색하는 것이다.
여기서 그 '지표'로 사용되는 것이 바로 이 글의 주제인 손실 함수 이다.
기본적으로 손실 함수는 신경망의 성능이 '얼마나 나쁜지' 를 나타내는 지표로 사용된다.
이는 오류가 클 수록 큰 값이 나오고 반대로 오류가 작을 수록 작은 값이 나온다.

MSE

Mean Squared Error, MSE 는 가장 많이 사용되는 손실 함수로, 평균 제곱 오차로 해석된다.
정답 레이블과 출력값과의 차이인 오차(error)를 제곱한 것을 모두 더해 평균을 내는 손실 함수로, 회귀에서 자주 사용되는 손실 함수이다.

여기서 tk 는 정답 레이블, yk 는 신경망에서의 출력값을 나타낸다.

예를 들어, 정답 레이블인 Y 와 softmax 를 통해 정규화된 값인 T 가 다음 두 경우와 같다고 해보자.

T1 = [0, 0, 1, 0]
Y1 = [0.1, 0.05, 0.65, 0.2]
T2 = [0, 0, 1, 0]
Y2 = [0.1, 0.05, 0.45, 0.4]

이는, Y1 과 Y2 에서 index 2 에 해당하는 객체를 분류해 내는 모델이 될 것이다.
여기서 MSE 를 구해보면

mse1 = ((0.1-0)**2 + (0.05-0)**2 + (0.65-1)**2 + (0.2-0)**2) / 2 = 0.0875
mse2 = ((0.1-0)**2 + (0.05-0)**2 + (0.45-1)**2 + (0.4-0)**2) / 2 = 0.2375

이와 같이 Y2 의 손실 함수가 더 큰 것으로 보아 Y1 보다 Y2 의 index 2 객체를 분류해 내는
능력이 떨어진 다는 것을 보여주는 지표가 된다.

CEE

Cross Entropy Error, 교차 엔트로피 오차 또한 자주 사용되는 손실 함수이다.

여기서 tk 는 정답 레이블, yk 는 신경망에서의 출력값을 나타낸다.
또, tk 는 정답에 해당하는 인덱스의 원소만 1이고 나머지는 0인 원-핫 인코딩이다.
이는 결국 손실 함수의 값이 정답에 해당하는 출력값에 따라 정해지게 되는 자연로그 그래프를 따르게 된다.

마찬가지로 위와 같은 예시를 들어서 CEE 를 계산해보자.

T1 = [0, 0, 1, 0]
Y1 = [0.1, 0.05, 0.65, 0.2]
T2 = [0, 0, 1, 0]
Y2 = [0.1, 0.05, 0.45, 0.4]

cee1 = -log0.65 = 0.4307829160924542
cee2 = -log0.45 = 0.7985076962177716

위와 같이 MSE와 동일하게 2번째 예시의 손실 함수 값이 더 높게 나오는 것을 볼 수 있다.

MAE

MSE 와 비슷하게 Mean Absolute Error, MAE 가 있다. 이는 회귀평가를 위한 지표로 주로 사용된다.

backpropagation

https://eungbean.github.io/2018/08/26/udacity-107-MLP-Reminder/

[ref]
https://heytech.tistory.com/362

profile
개발 기록

0개의 댓글