1. 자기정보 (self- information): i(A)
A : 사건
i(A)=logb(1P(A))=−logbP(A)
확률이 높은 사건:
정보가 많지 않음
예) 도둑과 개
개가 안짓을 확률>>>??
정보가 많이 필요함
정보의 단위
b = 2: bits
b = e: nats
b = 10: hartleys
그냥 단위 많다
특성
i(AB)=logb(1P(A)P(B))=logb(1P(A))+logb(1P(B)) = i(A) + i(B)
P(H)=18,P(T)=78
i(H)=3비트, i(T)=0.193 비트
왜인지 모르겟다
엔트로피는 자기 정보의 평균
H(X)=∑jP(Aj)i(Aj)=−∑jP(Aj)log2P(Aj)
특성
0≤H(X)≤log2K
K: 사건의 수
솔찍히 뭔말인지 모르는중
엔트로피 (entropy)
활용
평균 비트수를 표현
데이터 압축에 사용 가능
4가지 벙보를 표현 하는데 필요한 비트수
일반적으로 2비트
X | P(X) | i(X) | code |
A | 12 | 1 | 0 |
B | 14 | 2 | 10 |
C | 18 | 3 | 110 |
D | 18 | 3 | 111 |
i(X)를 활용하는 경우
평균 비트수
1×12+2×14+3×18+3×18=148=74비트
데이터를 표현하기위한 필요한 평균개수?
확률분포 P와 Q
S=Aj
P(Aj) : 확률분포 P에서 사건 Aj 가 발생할 확률
Q(Aj) : 확률분포 Q에서 사건 Aj가 발생할 확률
i(Aj) : 확률분포 Q에서 사건 Aj의 자기정보
i(Aj)=−log2Q(Aj)
자기 정보는 Aj를 표현하는 비트수
잘못된 확률분포 Q를 사용하게 되면, 실제 최적의 비트수를 사용하지 못하게 됨
2. 교차 엔트로피
1.H(P,Q)
집합 S상에서 확률분포 P에 대한 확률분포 Q의 교차 엔트로피
확률분포 P에서 i(Aj)의 평균
H(P,Q)=∑jP(Aj)i(Aj)=−∑jlog2Q(Aj)=−∑x∈XP(x)log2P(x)=H(P)
따라서 이값은 P 와 Q가 얼마나 비슷한지를 표현
같으면 H(P,Q) = H(P)
다르면 H(P,Q) > H(P)
X | P(X) | i(X) | P(X) | i(X) | code |
A | 12 | 1 | 18 | 3 | 000 |
B | 14 | 2 | 18 | 3 | 001 |
C | 18 | 3 | 14 | 2 | 01 |
D | 18 | 3 | 12 | 1 | 1 |
위와같이 다른 값들을 봤을때 같을까 다를까 하는 문제를 알아맞추는 것같다
분류문제에서의 손실함수
분류문제
주어진 대상이 A인지 아닌지를 판단
주어진 대상이 A,B,C ...중 어느 것인지를 판단
기계학습에서는 주어진 대상니 각 그룹에 속할 확률을 제공
예
[0.8 ,0.2] : A일 확률 0.8 아닐 확률 0.2
이값이 정답인[1.0, 0.0] 과 얼마나 다른지 측정 필요
각 각에 확률들을 비교할 방법은 제곱을 해서 하는방법인
제곱합
∑(pi−qi)\^2
제곱을 해서 차이를 본다
하지만 학습속도가 느리다
교차 엔트로피 H(P,Q):
확률이 다를수록 큰 값을 가짐
학습 속도가 빠르다
분류 문제에서 주로 교차 엔트로피를 사용한다
분류 문제에서의 손실함수
참고 : 분류 문제에서의 원하는 답
P = [p_1,p_2, ... ,p_n]
pi중 하나만 1이고, 나머지는 다 0임
엔트로피는 0 즉 H(P) = 0
pk = 1.0 이라고하면 , qk의 값이 최대한 커지는 방향으로 학습을 실행
뭔말인가??
S = {A,B}
실제 상활
P = [1,0]
P(A) = 1, P(B) = 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 \times log_2 0.8 = 0.3219
[0.5, 0.5] : Q(A) = 0.5, Q(B) = 0.5
H(P,Q) = - \sum{x \in X} P(x)log_2 Q(x) = -1 \times log_2 0.5 = 1
[0.2, 0.8] : Q(A) = 0.2, Q(B) = 0.8
H(P,Q) = - \sum{x \in X} P(x)log_2 Q(x) = -1 \times log_2 0.2 = 2.32
음.........
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]
Q = [0.8,0.2]
print(crossentropy(P,Q))
Q = [0.5,0.5]
print(crossentropy(P,Q))
Q = [0.2,0.8]
print(crossentropy(P,Q))
colab.research.google.com/drive/134cSgQ7VIQxE5CLVG0dmkOo2qPMwHlUE?usp=sharing
[Programmer][Weak3] 교차엔트로피.ipynb
Colaboratory notebook
colab.research.google.com
'Programmers > 데브코스 인공지능' 카테고리의 다른 글
[프로그래머스 스쿨 AI] Weak 3 numpy (0) | 2021.05.04 |
---|---|
[프로그래머스 스쿨 AI] Weak 3 깃 사용 (0) | 2021.05.03 |
[프로그래머스 스쿨 AI] Weak 3 검정 (0) | 2021.05.03 |
[프로그래머스 스쿨 AI] Weak 3 추정 (0) | 2021.05.03 |
[프로그래머스 스쿨 AI] Weak 3 표본분포 (0) | 2021.05.03 |