Loss functions
딥러닝 하다보면 그냥 사용했던 Loss Function
들에 대해서 한번 다뤄 본다.
Entropy
정보를 최적으로 인코딩하기 위해 필요한 bit
의 수
$$\log_{2}^{}{N}$$
요일 예시 (Uniform)
만약 요일에 대한 정보를 메시지에 실어서 보내야 한다면 가장 최소의 bit를 사용한다면 얼마나 될까?Yes
/No
수준이라면 그냥 1 bit만으로 충분하다.
그렇다면 econding을 day of the week을 해야한다고하면, 7 values를 encode 해야한다.
결국 $\log_{2}^{}{7}$월화수..일
7가지를 bit로 전송하기 위해선 3bit
필요 하게 된다.
- bits (000 – Monday, 001 – Tuesday, …, 110 – Sunday, 111- unused).
bit의 발생 빈도가 uniform 하다는 가정에 의해서 발생
Speech of a sequence of words (skewness)
만약 영어 단어를 말하는것을 encode 하는 것을 생각해 보자.
그냥 단순히 uniform하다고 가정하면 $$\log_{2}^{}{40} = 5.3$$ 이다.
하지만 4개의 Tag
값들이 90%
가 발생한다면 좀 더 효율적인 bit encode
를 만들어 낼 수 있다.
40개의 문자가 있고 상위 4개가 90%로 발생한다.
ART
,P
,N
,V
아이디어는 첫 번째 bit
를 단순히 위 네개의 TAG를 구분하는데 사용 한다.
- YES 이면 추가로
2bit
를 더 필요로 해서 구분하게 된다. - NO 이면
6bit
를 더 필요로 한다.40-4 = 36
이고, $$\log_{2}^{}{36}=5.16$$
정리하면 아래 표와 같다.
이것을 생각한 방식으로 계산하면 아래와 같다.
필요한 bit수 계산 = $$0.9 \times 3 + 0.1 \times 7 = 3.4$$
원래 아이디어 보다 bit
수가 더 줄어 들었다. 거의 반만큼.
여기서 더 최적화 할 수 있을까?
Information theory provides an answer.
As mentioned before,
Entropy
is a measure of randomness in a probability distribution.
A central theorem of information theory states that the entropy ofp
specifies the minimum number of bits needed to encode the values of a random variableX
with probability functionp
.
Definition of Entropy
X
를 random variable
이라고 하면 p
는 probability function이다.
$$ p(x_{i}) = P(X=x_{i}) $$
이라고 한다 (보통 algebra variable과 혼동하지 않기 위해서 capital로 표기하지만 여기선 간소화를 위해서 assumption을 만들고 시작).
Entropy of X (or p)의 정의는 아래와같다.
$$H(X) = H(p) = - \sum_{i}{p(x_i) \times \log{p(x_i)} }$$,
where
$$x_{i}$$ ranges over the vocabulary of
$$X$$
위 식으로 다시 계산해보면 TAG random variable
에 대해서 actual probability distribution을 표1에서와 같이 알기 때문에 TAG의 entropy는 아래와 같이 계산된다.
$$ H(TAG) = -(4 \times (.225 \times \log_{2}{.225}) + 36 \times (.0028 \times \log_{2}{.0028})) = -(-1.04 + -.82 + -.85) = 2.72 $$
결과 값을 통해서 그냥 단순하게 coding 했던것 보다 좋았던 3.4
보다 더 낮은 2.72
가 optimal 이라는것을 알게 되었다.
하지만, entropy
의 문제는 이게 가장 best한 conding 디자인이 아니라는것만 알려주지 실제로 그래서 어떻게 coding 해야 optimal에 도달하는지를 알려주지 않는다. 더 나아가 physically이게 가능한 것인지도 알 수 없다.
Data science에서 보는 값에 따른 해석
High Entropy
는 x가 uniform한 distribution을 가지게 된다. 즉 boring하다고 해석할수도 있고 diversity가 높다고 할수도 있다. Active Learning에서 그래서 이러한 Entropy를 이용해서 smapling을 할지 말지를 고려할 수도 있다.Low Entropy
는 skewness가 높다고 할 수 있다. 결국 varied distribution이라 할 수 있고peak
나valley
가 많다고 할 수 있다.
R Shannon Entropy 계산
setosa_subset <- iris[iris$Species=="setosa",]
#compute Shannon entropy
entropy <- function(target) {
freq <- table(target)/length(target)
# vectorize
vec <- as.data.frame(freq)[,2]
#drop 0 to avoid NaN resulting from log2
vec<-vec[vec>0]
#compute entropy
-sum(vec * log2(vec))
}
entropy(setosa_subset$Species)
참조: Entropy, Information Gain, and Data Exploration in R
Cross-Entropy
두개의 probability function을 비교하는것이 cross entropy이다.
p
와q
로 구분한다.
이러한Cross Entropy
는 symmetric하지 않기 때문에 그 역은 성립하지 않는다.p
를 보통 target으로q
를 estimated one으로 설정한다.
그렇게 비교해서 얼마나 서로 가까운지를 알아내서 그것을 최적화하는 방법으로 학습에 사용한다.
$$ H(p,q)= -\sum { i }{ p(x{ i }) } \log { q(x_{ i }) } $$
$$p_{y=1} = y$$
이고
$$p_{y=0} = 1-y$$
라면,
$$p \in (y, 1-y), q \in (\hat{y} ,1-\hat{y})$$
$$H(p,q)= -\sum { i }{ p(x{ i }) } \log { q(x_{ i }) } = -y\ln{\hat{y}} + (1-y)\ln(1-\hat{y})$$
MSE의 문제점
$$MSE = C = \frac{{(y-a)^2}}{2}$$
$$a = \sigma(z)$$
$$z = wx+b$$
위의 것을 미분하면,
$$ \frac{\partial C}{\partial w} = (a-y)\sigma^{\prime} {(z)} x $$
$\sigma^{\prime} {(z)}$ 값이 최대 0.25
가 나오고 대부분 0이기 때문에 vanishing gradient가 생기는건 잘알려진 사실이다.
cross entropy 미분
$$ C= -\frac{1}{n} \sum_{x}^{}{y\ln{a} + (1-y)\ln(1-a)} $$
$$ \frac { \partial C }{ \partial w_{ j } } =-\frac { 1 }{ n } \sum { x }{ (\frac { y }{ \sigma (z) } -\frac { (1-y) }{ 1-\sigma (z) } ) } \frac { \partial \sigma }{ \partial w{ j } } \ =-\frac { 1 }{ n } \sum { x }{ (\frac { y }{ \sigma (z) } -\frac { (1-y) }{ 1-\sigma (z) } ) } \sigma ^{ \prime }(z)x{ j }\ =\frac { 1 }{ n } \sum { x }{ \frac { \sigma ^{ \prime }(z)x{ j } }{ \sigma (z)(1-\sigma (z)) } } \sigma ^{ \prime }(z)-y $$
최종적으로 아래식 처럼 $\sigma(z)$가 살아있기 때문에 vanishing 문제를 적게 발생 시키는 좋은 폼을 형성한다.
$$ \frac{\partial C}{\partial w_{j}} = \frac{1}{n} \sum_{x}^{}{x_{j}(\sigma(z)-y) } $$
KL-divergence
두 분포 차이를 줄이기 위해서는 KL-Divergence
를 사용한다.
$$ D_{KL}(P \parallel Q) = -\sum_{x}^{}{p(x) \log{q(x)}} + \sum_{x}^{}{p(x) \log{p(x)}} $$
$$ = H(P,Q) - H(P) $$
정의
P라는 확률 분포로 부터 발생한 데이터를 Q라는 확률 분포에서 나왔다고 가정했을 경우 이로 인해 발생되는 추가 정보량을 KL-divergence라고 한다.
즉, 두 분포 P와 Q가 같으면 KL 값은 0. 서로 다르면 KL 값은 0보다 크다. 클수록 차이가 크다.
단순 면접이나, 거리 개념은 아니고 entropy개념이 들어가거 높은 확률을 가지는 지점을 잘 근사해야 KL값이 작아지는 특성을 가진다.
참고자료
Lecture6: Using Entropy for Evaluating and Comparing Probability Distributions
'AI > Theory' 카테고리의 다른 글
Fast Convolution (3) | 2020.02.13 |
---|---|
Feature (Attribute) Selection (0) | 2015.09.15 |
Ensemble Method (0) | 2015.09.15 |
Active Learning (0) | 2015.08.19 |
기계학습을 구현하기 위해서 어떤 언어가 좋은가? (0) | 2015.07.11 |