[인공지능 수학 - 통계학]18강 : 교차엔트로피
엔트로피
자기정보(Self-information): i(A)
- A : 사건
- $i(A) = log_b({1 \above 1pt P(A)}) = -log_bP(A)$
- 확률이 높은 사건:
- 정보가 많지 않음(확률이 낮은 사건일수록 정보가 많음)
- 예) 도둑이 들었는데 개가 짖는 경우보다 도둑이 들었는데 개가 안 짖는 경우가 더 많은 정보를 포함함
- 정보의 단위
- $b = 2$ : bits
- $b = e$ : nats
- $b = 10$ : hartleys
- 특성
- $i(AB) = log_b({1 \above 1pt P(A)P(B)}) = log_b({1 \above 1pt P(A)}) + log_b({1 \above 1pt P(B)}) = i(A) + i(B)$
- $P(H) = {1 \above 1pt 8}$, $P(T) = {7 \above 1pt 8}$
- $i(H) = 3$비트, $i(T) = 0.193$비트
H는 head의 약자, T는 tail의 약자
- $i(H) = 3$비트, $i(T) = 0.193$비트
H는 head의 약자, T는 tail의 약자
엔트로피(entropy)
- 자기 정보의 평균
- $H(X) = \sum_j P(A_j)i(A_j) = - \sum_j P(A_j) log_2 P(A_j)$
- 특성
- $0 \leq H(X) \leq log_2K$,
- $K$ : 사건의 수
확률($P(A_j)$)가 $1/K$일 때(균등한 값을 가질 때) 엔트로피가 가장 큰 값을 가진다.
- $K$ : 사건의 수
확률($P(A_j)$)가 $1/K$일 때(균등한 값을 가질 때) 엔트로피가 가장 큰 값을 가진다.
- $0 \leq H(X) \leq log_2K$,
- 엔트로피의 활용
- 평균비트수를 표현
- 데이터 압축에 사용
- 4가지 정보를 압축하는데 필요한 비트수
- 일반적으로 2비트
교차엔트로피
확률분포 P와 Q
- $S = {A_j}$
- $P(A_j)$ : 확률분포 P에서 사건 $A_j$가 발생할 확률
- $Q(A_j)$ : 확률분포 Q에서 사건 $A_j$가 발생할 확률
- $i(A_j)$ : 확률분포 Q에서 사건 $A_j$의 자기정보
- $i(A_j) = -log_2 Q(A_j)$
- 자기 정보는 $A_j$를 표현하는 비트수
- 잘못된 확률분포 Q를 사용하게 되면, 실제 최적의 비트수를 사용하지 못하게 됨
$H(P, Q)$ : 교차엔트로피
- 집합 S상에서 확률분포 P에 대한 확률분포 Q의 교차 엔트로피
- 확률분포 P에서 $i(A_j)$의 평균
- $H(P, Q) = \sum_j P(A_j)i(A_j) = - \sum_j P(A_j) log_2 Q(A_j) = - \sum_{x \in X} P(X) log_2 Q(x)$
- 이 값은 정확한 확률분포 P를 사용했을 때의 비트수보다 크게 됨
- $H(P, Q) = - \sum_{x \in X} P(X) log_2 Q(x) \geq - \sum_{x \in X} P(X) log_2 P(x) = H(P)$
- 따라서 이 값은 P와 Q가 얼마나 비슷한지를 표현
- 같으면 $H(P, Q) = H(P)$
- 다르면 $H(P, Q) > H(P)$
교차엔트로피를 사용하면 P라는 확률분포와 Q라는 확률분포가 얼마나 비슷한지 알 수 있다.
손실함수
- 분류 문제에서의 손실함수
- 분류문제
- 주어진 대상이 A인지 아닌지를 판단
- 주어진 대상이 A, B, C, …중 어느 것인지를 판단
- 기계학습에서는 주어진 대상이 각 그룹에 속할 확률을 제공
- 예)
- 이 값이 정답인 [1.0, 0.0]과 얼마나 다른지 측정 필요 -> 이것을 측정하는 것이 손실함수!
- 예)
- 원하는답 P, 제시된 답 Q가 있을 때 P와 Q가 얼마나 다른지에 대한 척도 필요
- 분류문제
- 제곱합
- $\sum (p_i - q_i)^2$
- $(1.0 - 0.8)^2 + (0.0 - 0.2)^2$
- 확률이 다를수록 큰 값을 가짐
- 하지만 학습 속도 느림
- $\sum (p_i - q_i)^2$
- 교차 엔트로피 $H(P, Q)$:
- 확률이 다를수록 큰 값을 가짐
- 학습 속도 빠름
- 분류 문제에서 주로 교차 엔트로피 사용
- 참고 : 분류 문제에서의 원하는 답
- $P = [p_1, p_2, …, p_n]$
- $p_i$중 하나만 1이고 나머지는 다 0임
- 엔트로피는 0, 즉 $H(P) = 0$
- $p_k = 1.0$이라고 하면, $q_k$의 값이 최대한 커지는 방향으로 학습 진행
- $p_i$중 하나만 1이고 나머지는 다 0임
- S = {A, B}
- 실제상황
- P = [1, 0]
- P(A) = 1, P(B) = 0
- P = [1, 0]
- 예측 Q(X)
- 0.8, 0.2 : Q(A) = 0.8, Q(B) = 0.2
- $H(P, Q) = - \sum_{x \in X} P(x) log_2 Q(x) = -1 * log_2 0.8 = 0.3219$
- [0.2, 0.8] : Q(A) = 0.8, Q(B) = 0.2
- $H(P, Q) = - \sum_{x \in X} P(x) log_2 Q(x) = -1 * log_2 0.2 = 2.32$
내가 원하는 값과 다른 값이 나오면 교차엔트로피 값이 커진다.(확률이 다를수록 큰 값을 가짐)
위와 같이 두가지 문제(경우) 뿐만 아니라 4가지 문제 등 다양한 경우에서 사용 가능하다. 바로 아래처럼!import numpy as np def crossentropy(P,Q): return sum([-P[i]*np.log2(Q[i]) for i in range(len(P))]) P = [1, 0, 0, 0] Q = [0.7, 0.1, 0.1, 0.1] print(crossentropy(P,Q))
교차엔트로피를 인공지능, 기계학습에서 손실함수로 주로 사용한다.
- $H(P, Q) = - \sum_{x \in X} P(x) log_2 Q(x) = -1 * log_2 0.2 = 2.32$
내가 원하는 값과 다른 값이 나오면 교차엔트로피 값이 커진다.(확률이 다를수록 큰 값을 가짐)
- 0.8, 0.2 : Q(A) = 0.8, Q(B) = 0.2
- 실제상황