손실 함수의 중요성
문제 상황
문장 분류
과제를 해결하던 도중, 더 좋은 성과를 내기 위해 많은 방법을 고민했습니다. 이때, 제가 접근한 방법과 도전한 시도들, 그리고 최종적으로 어떤 결과를 얻었는 지 소개합니다.
방법론에 관한 깊은 이해는 아래에 상세히 설명되어 있습니다.
초기 방법
문장 분류는 자연어 처리
문제이므로, 언어 모델을 사용하는 것이 적합합니다. 언어 모델은 다양하지만 문장 분류를 위해서라면 인코더 기반 모델이 적합하다고 생각했습니다. 보통 인코더 기반 모델은 언어 이해, 디코더 기반 모델은 언어 생성에 적합합니다. 분류와 같은 문장 자체의 깊은 이해를 요하는 과제는 인코더 모델이 더 좋은 성능을 냅니다.
이를 근거로 저는 koBERT
모델을 선택했고, BERT + FeedForward 모델을 선언하여 fine tuning(미세 조정) 하였습니다. 분류이므로 당연히 Cross Entropy 손실 함수를 선택했고요.
여기서 성능 향상을 위해 제가 시도할 수 있었던 방법은 바로 모델을 변경하는 것이었습니다. Huggingface 특성상, 사전학습된 BERT 모델을 쉽게 불러와 사용할 수 있었기 때문에 이는 어렵지 않았습니다. 결과적으로 분류에서 훌륭한 성능을 보여준다는 것으로 알려진 Electra기반 KcELECTRA
모델을 선택하였고 약간의 성능 향상이 있었습니다.
깊은 고찰
단순한 분류 과제였다면 당연하게도 여기서 더 시도해볼 아이디어가 없었을지도 모르겠습니다. 그러나, 이 문제는 조금 특별한 분류였습니다. 분류를 하는 대상, 즉 레이블이 등급을 나타내었습니다. 등급은 대게 순차적인 특성을 갖죠.
저는 순차적인 분류에서 단순히 Cross Entropy를 사용하는 것은 조금 다른 방향으로 학습하는게 아닌가? 라고 생각했습니다. 등급 분류는 오히려 Regression
특성을 지니는 레이블이기 때문이죠. 나이 예측을 할때, 보통 Mean Square Error Loss로 Regression을 하는 것처럼, 이 문제도 Regression처럼 다가가는게 좋을 것입니다.
그러나, 저의 문제는 레이블이 4개, 5개에 해당하는 과제였습니다. Mean Square Error Loss를 적용하기에는 무리가 있었죠. 분류의 특성과 Regression 특성을 동시에 갖는게 중요했습니다.
거리 손실 함수(Distance Loss)
저는 분류와 동시에 Regression 특성을 동시에 지닐 수 있는 Distance Loss를 고안했습니다. Distance Loss란, 레이블의 거리가 멀 수록 더 큰 Loss를 부여하여 순차적 분류
(Ordinal Classification)에서 보다 좋은 성능을 발휘할 수 있는 방법입니다.
이때, 저는 Mean Square Error를 기반으로 가중치를 가하는 Weighted Mean Square Error를 사용하였는데, 그 이유로 Cross Entropy에 가중치를 가하는 것은 정보 이론 기반 손실 함수의 기능이 상실될 것을 우려한 것이었습니다. 오히려 가중치를 가하기에 적합한 손실 함수는 Mean Square라고 생각한 것이죠. 분류에 Mean Square를 사용하는 경우는 흔하지는 않지만 Cross Entropy와 비교했을 때, 큰 차이가 존재하지 않다는 연구 결과도 존재합니다. 이러한 결과를 인지한 후 Weighted Mean Square에서 레이블 거리와 예측값에 따라 가중치를 설정해주는 Distance Loss
를 고안했습니다.
Loss Function은 문제 해결 전략의 핵심이다
잘 디자인된 Loss Function의 역할은 대단합니다. 데이터 증강이나 모델 구조를 변형하지 않고도 기존보다 능가하는 성능을 얻을 수 있습니다.
딥러닝을 가르칠때 과하게 모델 디자인에 편향되어 있다고 느낍니다. 그 이유는 저는 모델 학습 방식이 우선이고 그 학습에 맞게 모델을 디자인하는 순서가 적합하다고 생각하기 때문입니다.
과제에서 목표하는 바가 어떤 것인지를 알고 이를 더 깊게 고민하면 분명 효율적인 문제 해결 전략을 수립할 수 있을 것입니다. 모델 구조보다 학습의 중요성을 잃지 맙시다.