딥러닝 손실함수 Cross Entropy Error 정리 (구 블로그 글 복구)

2025. 4. 10. 19:35·Study/Data Science

- MSE 와 CEE는 대표적인 딥러닝 손실함수입니다.
(분류문제, 즉 범주형 데이터 예측 문제에는 CEE를 사용하는 것이 좋고, 회귀문제인 수치형 데이터 예측문제에는 MSE를 사용하는게 좋다고들 하죠.)

딥러닝 손실함수는 무엇일까요?
너무 기초적인 내용이니, 자세한 내용은 딥러닝 알고리즘 기초 정리글들을 확인하시고, 요약하자면,
'예측값이 정답값에 얼마나 멀리 떨어져있는가'에 대한 것을 알아내는 함수입니다.

이 함수의 값이 결국 머신러닝 학습의 기준이 되고,
이 손실함수 값이 최소가 되는 방향으로, 내부 수식들의 파라미터를 갱신하는 것이 학습입니다.

즉, 손실함수라고 칭해진다면, '예측값이 정답값과 동일하면 작은 값을, 예측값이 정답값과 다를수록 큰 값을 출력하는 함수'라는 것이고, 각 손실함수별 종류가 나눠진 것은, '같다' '다르다'라는 것의 기준이 서로 다르기 때문입니다.

MSE는,
가장 대표적이고 간단한 손실함수로,
Mean Squared error라는 이름에 걸맞게,

정답값과 예측값의 차이를 제곱하고 평균을 내주는 것입니다.

예를들어 10개가 1배치인 학습 데이터가 있다고 하면, 그 10개의 데이터들을 해당 모델로 전부 predict를 하고, 그 값들과 주어진 정답값의 차이를 하나하나 구하고, 그 값을 제곱하여 모두 더한 후, 더한 개수만큼 나눠주는 것입니다.

즉, 한 배치당 평균적인 손실율을 구하는 것이죠.

여기서 제곱을 한 이유는, 그냥 간단하게 부호를 없애고 거리를 구한다고 생각하세요.(더 자세한 설명이 존재하긴 한데, 그냥 미분을 해서 손실값을 줄이는 기준이 되는 함수를 구축하기 위해 가장 간단하고 쉬운 방식이라 생각하시면 됩니다.)

이는 정답값과 예측값의 차이를 '거리'라는 개념으로 바라봤을 때의 손실함수라고도 할수 있습니다.

- 분류에 대해 알아봅시다.
CEE는 분류에 대해 이해를 해야합니다.
입력값으로, 고양이 사진이 들어갔다고 합시다.
딥러닝으로 이를 판단하는 모델을 만들었다고 하고,
내부에서 CNN 계층이나 히든레이어들을 지나서, 마지막으로 나타나는 것이,

[0,1,0,0,0,0]

과 같은 one hot encoding이라 가정합시다.

이는, 입력 데이터가 어느 클래스에 속하는지를 나타내는 가장 단순한 형태로,
위의 벡터를 보면,
각각 강아지, 고양이, 거북이, 새... 이런식으로 뜻이 존재한다고 설정할수 있습니다.
그러니까,

[1,0,0,0,0,0]은 강아지, [0,0,1,0,0,0]은 거북이죠.

신경망 출력을 soft max로 했다고 했을 때,
예측결과는,

[0.2, 0.75, 0, 0.05 ]

이런식으로, 확률이 나타날수 있습니다.

고양이 사진을 모델이 받아들였을 때, 이 사진이 강아지일 확률은 0.2퍼센트, 고양이일 확률은 0.75퍼센트...

이런식으로 되고, 당연히 우리가 모델을 만들고 학습시킬 때에는 고양이 사진이 들어가면 고양이일 확률이 100퍼센트인 1이 나오도록 하는 것이죠.

(사실 1이 나오는 것이 무조건 좋은것이 아닙니다. 사람도 고양이 사진을 얻었을 때, 그것이 100퍼센트 고양이다! 라고 아는것 보다는, 해당 데이터가 내포하는 특징들이 고양이일 확률이 높아보인다... 라고 판단하는 것이고, 오히려 그런 애매한 사진을 고양이의 기준으로 삼으면, 다른 사진들을 보편적으로 판단할 능력을 상실합니다. 오버피팅에 대한 내용인데, 여기선 중요한 것은 아닙니다.)

간단한 내용인데,
중요한 것은, 분류라는 것이, 입력 데이터가 존재할 때, 그것이 각 클래스에 속할 확률을 구하는 것이라고 할수 있습니다.

- 엔트로피 관련해서 간략히 설명하자면,
엔트로피는,

sum(p(y) * log2 1/(p(y)))

로, [0.2, 0.75, 0, 0.05 ]과 같은 확률 분포의 불확실성을 나타내는 지표입니다.
확률이 예를들어 [1,0,0,0]과 같이 확실하다면, 엔트로피의 값이 작고,
[0.5,0.5]와 같이 균등하면, 어느것이 선택될지 모르니 엔트로피 값이 커지죠.

- 엔트로피를 구하는 공식인 sum(p(y) * log2 1/(p(y)))에서
log2 1/p(y)는, 해당 확률의 데이터를 표현하기 위해 몇번의 질문을 해야하는지에 대한 값입니다.
공식을 보시면 아시듯, 확률별로 다른 값이 나오기에, 서로 다른 확률분포를 대조하기에 좋은 기준이 되죠.

크로스 엔트로피는,

D(y,t) = sum(p(t) * log2 1/p(y))

입니다.(D(y,t) != D(t,y)라는 것을 명심하세요.)

한번 봅시다.

y = [0.5, 0.25, 0.25, 0]
t = [1, 0, 0, 0]

이라고 했을 때,
y만의 엔트로피를 구해보자면 1.5입니다.

만일 [0.25, 0.25, 0.25, 0.25]라면, 엔트로피가 더 증가하여,
2가 되죠.

하지만 무조건 엔트로피가 크다고 틀렸다고 할수 없는게,
결국 결과값은 전체 확률의 퍼짐 정도를 사용하는 것이니,

예를들어

x = [0,1,0,0]

과 같이, 매우 확신에 찬 오답을 말한다면, 정답 레이블과 동일하게 엔트로피가 낮아집니다.

우리가 원하는 것은,
모델의 예측값, 여기서는 분류 문제 중에서도 one hot encoding vector를 반환하는 결과값이 얼마나 정답 레이블과 틀리느냐 하는 지표를 나타내는 손실함수를 만드는 것인데,

단순히 한 수를 반환하는 회귀문제에서 사용하는 MSE와는 다르게,
각 클래스에 속할 확률을 반환하는 활률분포가 나온 상황에서, 효율적인 loss값을 cross entropy로 둔 것입니다.

y = [0.5, 0.25, 0.25, 0]
t = [1, 0, 0, 0]
를 D(y,t) = sum(p(t) * log2 1/p(y))에 따라 계산해보면,

1*1 + 0*2 + 0*2 + 0 = 1
이 됩니다.

만일,

y = [0.8, 0.2, 0, 0]
t = [1, 0, 0, 0]

이라면,
1*0.3219.... + 0+0+0 = 0.3219

가 되는 것으로,
즉, 정답이 되는 클래스 쪽의 확률이 올라갈수록 cross entropy가 낮아지면서 loss값이 낮아지는 현상을 확인할수 있습니다.

- 누가 물었을 때를 대비해서, 위와 같은 장황한 대답 대신 간편하게 설명하자면,

D(y,t) = sum(p(t) * log2 1/p(y)) = - sum(p(t) * log2 p(y))

위와 같은 수식으로 나타내며,
신뢰도나 정확도 같은 확률적인 문제의 정답의 차이를 구하기 위해,
앞의 p(t)로, 정답 레이블의 확률값을, 뒤의 log2p(y)로 예측값의 정보량을 사용하여, 서로 곱해주고, log의 역수로써 앞에 부호 -를 붙임으로써, 이상적인 엔트로피 상태와 현재 예측간의 차이를 알아보는 것입니다.

원 핫 벡터같은 확실한 정답은 엔트로피가 0이 되고, 즉, 이와 동일한 예측을 했다면 크로스 엔트로피도 0이 된다는 것...
그리고 예측이 틀리다면 정보량이 상승해서 차이가 심화된다고 설명하면 됩니다.

저작자표시 비영리 변경금지 (새창열림)

'Study > Data Science' 카테고리의 다른 글

텐서의 차원(shape) 읽는 법과 축(axis) 쉽게 이해하기 (구 블로그 글 복구)  (0) 2025.04.10
KL Divergence 정리  (0) 2025.04.10
고차원 데이터에서 차원의 저주란? (딥러닝 학습시 데이터 특징을 제한하는 이유와 빅데이터 기술의 중요성) (구 블로그 글 복구)  (0) 2025.04.10
정보이론 기초 정리(정보량 + 정보 엔트로피) (구 블로그 글 복구)  (0) 2025.04.09
딥러닝 Optimizer 종류 정리  (1) 2025.04.09
'Study/Data Science' 카테고리의 다른 글
  • 텐서의 차원(shape) 읽는 법과 축(axis) 쉽게 이해하기 (구 블로그 글 복구)
  • KL Divergence 정리
  • 고차원 데이터에서 차원의 저주란? (딥러닝 학습시 데이터 특징을 제한하는 이유와 빅데이터 기술의 중요성) (구 블로그 글 복구)
  • 정보이론 기초 정리(정보량 + 정보 엔트로피) (구 블로그 글 복구)
Railly Linker
Railly Linker
IT 지식 정리 및 공유 블로그
  • Railly Linker
    Railly`s IT 정리노트
    Railly Linker
  • 전체
    오늘
    어제
  • 공지사항

    • 분류 전체보기 (106)
      • Programming (33)
        • BackEnd (18)
        • FrontEnd (2)
        • DBMS (1)
        • ETC (12)
      • Study (72)
        • Computer Science (20)
        • Data Science (17)
        • Computer Vision (16)
        • NLP (15)
        • ETC (4)
      • Error Note (1)
      • ETC (0)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 태그

    list
    kotlin mutablelist
    kotlin linkedlist
    단축키
    springboot 배포
    MacOS
    kotlin arraylist
    docker 배포
    docker compose
    논리적 삭제
    network_mode: "host"
    jvm 메모리 누수
    Kotlin
    localhost
    unique
    지리 정보
    데이터베이스 제약
  • 링크

    • RaillyLinker Github
  • hELLO· Designed By정상우.v4.10.0
Railly Linker
딥러닝 손실함수 Cross Entropy Error 정리 (구 블로그 글 복구)
상단으로

티스토리툴바