loss 함수란?
손실 함수는 값을 예측하려할 때 데이터에대한 예측값과 실제의 값을 비교하는 함수로 모델을 훈련시킬 때 오류를 최소화 시키기 위해 사용되며, 주로 회귀(regression)에서 사용한다.
모델의 성능을 올리기 위해 loss함수를 임의적으로 변형할 수 있다.
예시
model.compile(loss='mean_squared_error', optimizer='sgd')
손실함수의 종류
Mean_Squared_error
예측한 값과 실제 값 사이의 평균 제곱 오차를 정의한다. 공식이 매우 간단하며, 차가 커질수록 제곱 연산으로 인해서 값이 더욱 뚜렷해진다. 그리고 제곱으로 인해서 오차가 양수이든 음수이든 누적 값을 증가시킨다.
RMSE(Root Mean Squared Error)
MSE에 루트(√)를 씌운 것으로 MSE와 기본적으로 동일하다. MSE 값은 오류의 제곱을 구하기 때문에 실제 오류 평균보다 더 커지는 특성이 있어 MSE에 루트를 씌운 RMSE 은 값의 왜곡을 줄여준다.
Binary Crossentropy
실제 레이블과 예측 레이블 간의 교차 엔트로피 손실을 계산한다. 레이블 클래스(0, 1로 가정)가 2개만 존재할 때
Binary Crossentropy를 사용하면 좋다.
Categorical Crossentropy
다중 분류 손실함수로 출력값이 one-hot encoding 된 결과로 나오고 실측 결과와의 비교시에도 실측 결과는
one-hot encoding 형태로 구성된다.
예를 들면 출력 실측값이 아래와 같은 형태(one-hot encoding)로 만들어 줘야 하는 과정을 거쳐야 한다.
[[0 0 1]
[0 1 0]
[1 0 0]] (배치 사이즈 3개인 경우)
네트웍 레이어 구성시 마지막에 Dense(3, activation='softmax') 로 3개의 클래스 각각 별로 positive 확률값이 나오게 된다.
[0.2, 0.3, 0.5]
위 네트웍 출력값과 실측값의 오차값을 계산한다.
Sparse_Categorical_Crossentropy
'categorical_entropy'처럼 다중 분류 손실함수이지만, 샘플 값은 정수형 자료이다. 예를 들어, 샘플 값이 아래와 같은 형태일 수 있다. (배치 사이즈 3개)
[0, 1, 2]
네트웍 구성은 동일하게 Dense(3, activation='softmax')로 하고 출력값도 3개가 나오게 된다.
즉, 샘플 값을 입력하는 부분에서 별도 원핫 인코딩을 하지 않고 정수값 그대로 줄 수 있다. 이런 자료를 사용할 때, 컴파일 단계에서 손실 함수만 'sparse_categorical_crossentropy'로 바꿔주면 된다.
그 외
mean_absolute_error / mean_absolute_percentage_error
mean_squared_logarithmic_error / cosine_proximity
squared_hinge / hinge / categorical_hinge
logcosh / kullback_leibler_divergence / poisson
- 참고자료
'Tensorflow' 카테고리의 다른 글
판다스 Date Time Index #일자 / 시간 데이터 처리법 (0) | 2021.03.04 |
---|---|
타임시리즈 데이터 분석을 위한 Prophet (0) | 2021.03.04 |
이미지 데이터 제너레이터가 하는 역할과 코드 (0) | 2021.03.03 |
callback 함수 (0) | 2021.03.02 |
Learning Curve // 학습곡선 (0) | 2021.03.02 |