딥러닝의 학습과정에서 우리는 많은 Loss를 사용한다. Cross-Entropy와 MSE 가 대표적인 손실이며 이미지의 고차원적 의미를 담기 위한 perceptual loss 등을 사용하기도 한다. 이렇게 로스를 가져다가 쓸 때, 대부분 파이토치에서 이미 구현해놓은 로스를 사용하기 때문에 그 수학적 의미를 대충 이해만 하고 넘기는 경우가 많았다.
(아, 회귀때 mse 쓰고 분류때 cross entropy 쓰는데 회귀때도 cross entropy 쓸 수도 있구나. 근데 그건 로그값이 0에 가까울 수록 엄청 기울기가 커서 그렇구나- 의 정도)
이번에 과제를 진행하며 numpy의 저수준에서 모델의 학습을 짜볼 기회가 생겨 얻었던 인사이트를 기록하려고 한다.
Softmax Loss란?
우리가 흔하게 알고 있는 활성화 함수인 Softmax를 태운 뒤 나오는 확률을, 정답값과 비교해서 Cross-Entropy 손실을 구한 것을 우리는 Softmax Loss라고 한다.(물론 레이블 값이 0,1과 같은 원핫이 아닌 확률 분포의 경우 MSE를 사용할 수도 있지만 주로 사용하지는 않는다.) 수식은 다음과 같다.
위의 수식을 보면 Cross-entropy의 경우 정답 레이블에 해당하는 확률 값을 로그를 씌운 뒤, 모든 데이터들에 대해 평균을 구한뒤 -를 붙이는 모습을 확인할 수 있다.
즉, 이렇게 "평균"을 냄으로 인해 데이터 A는 정답에 근접한 확률값을 아웃풋으로 내었음에도 불구하고, 데이터 B가 매우 큰 손실을 보여주었기 때문에 전체의 로스는 커질 수 있다.
다시 말해, 지금의 cross-entropy 와 MSE(또한 평균을 낸다.) 는 모든 데이터의 가중치를 같이 보는데, 이러한 손실 setting이 마음에 들지 않을경우( 누구 마음대로 그냥 1/n을 해!! ) "가중 손실"을 적용할 수 있다.
이러한 가중 손실은 주로 클래스 불균형 데이터셋이 존재할 때 사용되는데, 클래스가 적은 데이터의 경우 가중치를 높게 주어 학습에 신경 쓰도록 할 수 있고, 더불어 이러한 가중 손실의 가중치 또한 모델이 학습하도록 진행할 수 있다. 대표적으로 잘못 샘플링한 데이터셋에 조금 더 큰 가중치를 부여하고 학습하도록 하는 Focal Loss등이 존재한다.
'TIL' 카테고리의 다른 글
백엔드 엔지니어? 프론트엔드 엔지니어? 호스팅 ? 라우팅 ? 배포 ? [개념 정리] (0) | 2024.02.11 |
---|---|
[자바스크립트] 비동기 처리(Ajax, Pjax)와 Promise, Async/Await문법과 axios와 fetch 개념들 핥아먹기 (0) | 2024.02.11 |
Next.js - 노마드 코더[CSR,SSR / SPA / DOM] (1) | 2024.02.11 |
타입스크립트 공부 내용 정리본 [기본] (노마드 코더 - 타입스크립트로 블록체인 만들기) (1) | 2024.01.31 |