손실함수 분류 문제
손실 함수에서 분류 문제의 대표인 교차 엔트로피에 대해 알아본다.
이전 포스팅에서 회귀 문제에 대해 알아봤다.
과거의 정보를 활용해서 결과를 예측하는 방식이 회귀다.
과거 정보(입력값)에 따라 결과가 결정(종속적)된다.
쉽게 풀어 쓴 딥러닝 손실함수 1 : 회귀 문제에서 오차제곱합(SSE), 평균제곱오차(MSE) 코딩하기.
딥러닝(Deeplearning)에서 손실 함수란?딥러닝 스터디 중 손실 함수(loss function)를 알게 되었다.머신러닝, 딥러닝에서 해당 모델의 성능을 평가할 사용하는 함수다.모델이 예측, 인식한 값과 실제 값
tiboy.tistory.com
분류 문제
회귀가 정보를 입력받고 예측(주가, 집값 등)하는 문제라면,
분류는 고체나 액체 같은 종류, 개와 고양이 같은 문제다.
분류 문제에 사용하는 대표적인 손실 함수가 교차 엔트로피다. (cross entropy loss)
교차 엔트로피는 다양한 식을 가지고 있다.
예측한 값과 실제 값의 오차를 수치로 결과를 보여준다.
손실 함수는 결국 이 오차를 최소화하기 위해 사용되는 함수다.
이진 교차 엔트로피(Binary Cross Entropy, BCE)
둘 중 하나로 분류하는 경우 사용한다.
예를 들어,
합격과 불합격, 정상과 실패 등으로 시그모이드 활성화 함수를 사용하면 0과 1로 결과가 나오게 된다.
엄청 복잡한 식이 나타났다.
딥러닝 공부 중 이런 식 때문에 어려움을 겪을 수 있을 거라 생각한다.
분리해서 같이 하나씩 살펴보면 별거 아니다. 걱정은 이제 그만!
∑는 밑의 i=1부터 N까지 1씩 증가해서 옆의 식에 대입 후 합산한다는 SUM을 의미한다.
아래 예제를 보면 i는 1부터 3까지 순서대로 시그마 옆 i에 대입하고 더한다.
시그마는 주어진 범위의 값을 하나씩 넣고 그 모든 값을 SUM 한다.
이제 시그마 뒤의 식을 보자.
y는 정답(0 또는 1)이 들어온다.
y가 0이면 앞의 식은 0이 되고 뒤의 식은 살아남고,
y가 1이면 뒤의 식은 0이 되고 앞의 식은 살아남는다. (0 × log() = 0 이므로)
log는 계산기 또는 파이썬 넘파이(numpy)에서 계산하면 된다.
만약 y에 1(정답)이 들어오면 0이 되고 log와 곱하면 0이 되고 식은 사라진다.
y가 0(오답) 일 때 log 식 내 꺽쇠 y값(0~1 사이값)으로 계산된다.
샘플 데이터로 계산해 보자.
정답값 y = [0, 1]
신경망 출력 y(꺽쇠) = [0.2, 0.8]
위 값을 대입해서 직접 풀어봤다.
손실 함수 교차 엔트로피 결과는 0.22314가 나왔다.
신경망 출력 y(꺽쇠) = [0.3, 0.7]라면?
1일 확률이 앞 식보다 0.1 작은 0.7로 설정했다.
신경망 결과 1일 확률이 더 낮게 나오면 식의 결과 값은 더 크게 나온다.
1일 확률이 0.8일 때 0.22314가 나왔는데 0.7로 낮아지면 0.35667이 나왔다.
즉, 정답일 확률이 높을수록 교차 엔트로피 식의 값은 작아진다.
이제 이 식을 파이썬으로 구현해서 딥러닝에서 활용해 보자.
import numpy as np
def cross_entropy_error(y, k):
dt = 1e-8 # log(0)은 무한이다. 이를 방지하기 위해 필요
return -np.sum(k * np.log(y + dt))
k = [0, 1] #정답
y = [0.2, 0.8] #신경망 결과
print(cross_entropy_error(np.array(y), np.array(k)))
#결과 : 0.2231435388142097
y = [0.3, 0.7]
print(cross_entropy_error(np.array(y), np.array(k)))
#결과 : 0.35667492965301817
값의 범위가 0~1인데 dt(1e-8)는 log(0)이 안되게 하기 위해 넣었다.
log(0)은 무한대로 계산 오류가 나기 때문이다.
파이썬 코드도 손으로 푼 결과와 같다.
정리
신경망 학습 중 손실함수에 대해 알아봤다.
딥러닝 개발자로 공부하다 보면 나타나는 복잡한 식으로 당황할 수 있다.
이 포스팅을 보고 계산에 도움이 되길 바란다.
인공지능 개발자를 위해~
끝.
'인공지능(AI) > 딥러닝(DeepLearning)' 카테고리의 다른 글
쉽게 풀어 쓴 딥러닝 손실함수 1, 회귀 문제에서 오차제곱합(SSE), 평균제곱오차(MSE) 코딩하기. (0) | 2025.05.14 |
---|---|
[딥러닝]신경망 구현의 필수, 넘파이(Numpy)로 다차원배열(행렬) 활용하자. 왜? 어떻게? 사용 방법, 파이썬(Python)으로... (0) | 2025.04.11 |
[딥러닝]신경망과 활성화 함수(계단 함수, 시그모이드 함수, ReLU 함수) 계산 방법. 초보용 핵심 정리. (0) | 2025.03.21 |
[딥러닝] XOR 게이트와 다층 퍼셉트론으로 파이썬 코드 작성하는 방법 (0) | 2025.01.08 |
[딥러닝]NAND, OR 게이트와 퍼셉트론 활용한 파이썬 코드 작성하는 방법, 인공지능 AI 초보 개발자 (0) | 2024.12.17 |