notion으로 보면 더 편합니다.

www.notion.so/Batch-Normalization-0649da054353471397e97296d6564298

 

Batch Normalization

Summary

www.notion.so

목차 

  • Summary
  • Introduction
  • Background
    • Normalization
    • Covariate Shift
  • Batch Normalization
    • Algorithm
    • Learnable Parameter gamma, beta
    • Inference with Batch Normalization
      • 모집단 추정방식
      • Moving average 방식
  • Undertstanding Batch Normalization
    • BN이 ICS를 제거하는가?
    • 왜 성능이 좋은가?
      • Optimization Landscape
      • Lipschitz
  • 사족들
  • Reference

 

Summary

  • 역할
    • 각 레이어의 입력 feature의 분포를 re-centering & re-scaling
  • 장점 → 경험적으로 높은 성능을 낸다고 널리 알려져 있음 & 이유에 대해서는 아직도 연구 진행중
    • Faster training (learning rate 를 더 높게 설정할 수 있음)
    • Stable training (less vanishing & exploding gradients)
    • Regularization (less overfitting, more generalized)
  • 단점
    • 큰 mini-batch size 필요 → Mini-batch가 전체 dataset과 비슷한 분포를 가져야함.
    • RNN에서 사용 불가능
  • 잘 동작하는 이유
    1. 아마도 Internal covariate shift를 제거했기 때문이다.
      • 2018 논문: ICS때문은 아니다! 실험적, 수학적으로 증명
    2. Objective function의 solution space를 smoothing 했기 때문이다.
      • ㄱㄱ

Introduction

머신러닝에서 Batch Normalization은 빼놓을 수 없는 주제 중 하나이다. 많은 네트워크들이 관습적으로 Batch Normalization을 자신들의 연구에 끼얹어 보고는 하는데 오늘은 이 Batch Normalization에 대해서 알아보고, 그와 관련된 개념들을 정리해보고자 한다.

Batch Normalization (BN)은 처음 2015년도에 네트워크상의 Internal covariate shift(ICS)를 제거하기 위한 목적으로 제안되었다. 거의 대부분의 네트워크에 BN을 추가했을 때, 추가하지않았을 때보다 굉장히 빠른속도로, 안정적이게 학습을 수행할수 있다는 사실이 실험적으로 밝혀졌었다. 하지만 2018년도에 그 이유가 ICS를 제거했기 때문이 아니라 그저 solution space를 smoothing 했기 때문이라는 주장이 제안되었고, 실험적, 수학적으로 이것이 사실이라고 밝혀졌다.

BN은 크게 3가지 장점이 있다.

  • 네트워크를 vashing & exploding gradient를 감소시키고 안정적으로 학습시킬 수 있도록 도와준다.
  • 또한, overfitting을 감소시키며 네트워크가 더 쉽게 generalize 할수 있다. 즉, Reglarization 효과를 가진다.
  • 이 덕분에 높은 learning rate로 학습을 시킬 수 있으며, 이는 학습을 빠르게 convergence에 이를 수 있게 만들어준다.
  • 하지만, 이러한 BN에도 몇가지 단점들이 있다.
  • 일반적으로 머신러닝을 수행할 때, 한꺼번에 데이터셋 전체를 학습 시킬 수 없어서 작은 mini-batch단위로 학습을 시킨다. BN은 mini-batch 단위로 Normalization을 수행하기 때문에 mini-batch size가 성능에 영향을 준다. 구체적으로는 큰 mini-batch ize를 필요로 한다. 그 이유는 Mini-batch가 전체 dataset와 비슷한 분포를 가져야 하기 때문이다. (어쨌든 mini-batch도 전체 데이터셋에서 sampling 하는 것이니까 mini-batch에도 먹힌다.)
  • 몇가지 네트워크에서는 BN을 사용하기 어렵다. 대표적인 예로 RNN와 같은 sequental 데이터를 처리하는 경우를 들 수 있다.

Background

Normalization

Batch Normalization은 이름에서부터 그렇듯 학습을 수행할 때 Normalization을 수행하는 방식이다. 때문에 이러한 Normalization과 관련된 내용을 알아보고자 한다.

데이터 전처리 중 Normalization의 목적은 모든 Feature들이 동일한 scale을 가지도록 하는 것을 말한다. 여기서 여러가지 Normalization 방식들이 있지만, 가장 유명한 Normalization 방식은 Min-MaxStandardization이다.

여기서 머신러닝에서 주로 사용되는 Normalization 개념은 Standardization이다.

Standardization

Standardization의 경우, 처리하고자하는 데이터상의 mean과 standard deviation을 구하고, 각 feature data에서 mean을 빼고, standard deviation을 나눠주는 방식으로 shift and scaling을 수행한다.

참고로 머신러닝상에서는 일반적으로 mean와 standard deviation 함수는 각각 $\mu$, $\sigma$로 주로 표현되면, 따라서 새로운 데이터 $x'$는 아래의 식으로 구해진다.

$$x' = \frac{x-\mu(x)}{\sigma(x)}$$

Standardization을 왜 shift and scaling이라고 하는가?

아래의 그림을 보면 직관적으로 알 수 있다. 원본의 데이터 분포가 아래와 같다고 했을 때, $\mu(x)$를 각 데이터에 대해서 빼주었을 때, 아래의 그림의 zero-centered data가 되는데 그 모습이 데이터 전체가 mean을 중심으로 하도록 이동시킨것과 같기 때문에 shift 라고 말한다. scaling은 이 데이터에 대해서 표준 편차로 나눠주게 되는데, 이를 통해서 전체의 퍼져있는 정도를 각 feature (가로, 세로)마다 유사하도록 맞춰주기 때문이다.

Whitening

이러한 Standardization 방식보다 더 좋다고 알려진것이 whitening이다. whiteing은 아래의 두가지를 만족시키도록 데이터를 변환시켜준다.

  • PCA를 통해서 각 feature들을 재가공한다. 이를 통해서 Feature간의 correlation을 감소시킨다. 즉, 중복(redundant)되는 정보를 제거한다.
    • Decorrelated data
  • 모든 Feature들이 동일한 scale을 가지도록 한다. (Standadization와 같다)
    • whitened data

PCA는 주성분분석이라고해서 각 성분을 분석해서 성분간 중복을 제거해줄 수있는 기술이다. 그리고 이러한 주성분분석은 굉장히 많은 연산량을 요구하는데, 그 때문에 높은 차원, 그리고 많은양의 데이터에 대해서 이러한 주성분 분석을 수행하기에 많은 어려움이 따른다.

그개념을 여기서 설명하기에는 너무 길기 때문에 언젠가 시간이나면 포스팅하도록 하겠다.

PCA는 데이터의 경향성을 찾아서, 새로운 축을 만들어주는 것과 같이 동작하는데, 중간의 그래프가 어떻게 변하는지 위의 standardization과 비교해서 보면 그 차이점을 볼 수 있을 것이다.

 

Whitening은 여러 논문에서 중간중간에 한번씩 끼얹어보는 방식으로 쓰이는걸 많이 보았다. 머신러닝의 성능향상에 영향을 미친다는 증거로 볼 수 있는데, 여기에 대해서는 완벽히 하는 것이 아니라 다음에 더 조사해보고 추가 포스팅을 하겠다.

Covariate Shift

Corvariate Shift는 대표적으로 어떤 데이터셋을 뽑았을 때, Train 데이터의 분포와 Test 데이터의 분포가 달라서 발생하는 문제이다.

 

이 그래프를 보자. 실제 데이터의 분포가 빨간색그래프인 True function을 따른다. 그런데 만약 우리가 Train Dataset을 sampling 할 때 파란색 점처럼 샘플링을 했다고 해보자. 그러면 네트워크를 녹색의 Learned function처럼 학습을 수행할 것이다. 즉, 실제는 빨간색 그래프인데, 학습된 모델은 녹색그래프처럼 나와서 검은색 데이터, Test Dataset을 제대로 예측하지 못하게 된다. 이를 다르게 말하자면 Train Dataset과 Test Dataset의 분포가 서로 달랐기 때문에 발생한 문제이다.

  • When the distribution of the inputs used as predictors (독립변수, 예측변수, covariates) changes between training and production stages

Internal Covariate Shift(ICS)는 이러한 Covariate Shift가 Multi layers network에서 각 internal layer들 사이에서도 발생한다는 것이다. 다시말해보자면, 각 layer에서 받아들이는 input의 분포가 학습 과정중 계속 변함으로 input으로 이전과 전혀다른 분포가 들어왔을 때, 잘 학습을 못하게 만들 수 있다는 것이다.

 

layer 1의 output은 layer2의 인풋이 된다. layer2의 아웃풋은 layer3의 인풋이 된다. multi layers network의 경우 위와같이 한 레이어들의 output들이 다른 레이어의 인풋으로 들어가게 된다. 이 때, 학습 과정에서 layer2의 분포가 갑자기 이전과 다른 형태의 분포로 변한다면 layer3는 전혀 다른 분포가 들어왔기 때문에 마치 covariate shift의 결과처럼 네트워크가 정확한 True Function을 예측하는데 방해가 될 것이라고 생각한 것이다.

Purposed Method (Batch Normalization)

이러한 ICS를 제거하기 위해서 각 레이어를 거칠 때마다 데이터의 분포를 standardization 시켜주는 Batch Normalization을 제안했다.

Algorithm

 

저 파랑색 화살표가 바로 Batch Normalization이다. 이러한 Batch Normalization은 Activation 을 거치기 전에 적용되게 되는데, 논문에서는 아래와 같은 알고리즘으로 기술되어 있다.

 

간단히 알고리즘을 풀어보잠녀 어떤 mini-batch의 사이즈가 m인 데이터 $x$들을 받았을 때,

mini-batch의 mean을 구하고,

$$\mu_{\mathcal{B}} \leftarrow \frac{1}{m} \sum_{i=1}^{m} x_{i}$$

variance를 구해서

$$\sigma_{\mathcal{B}}^{2} \leftarrow \frac{1}{m} \sum_{i=1}^{m}\left(x_{i}-\mu_{\mathcal{B}}\right)^{2}$$

normalization 해준다.

$$\widehat{x}_{i} \leftarrow \frac{x_{i}-\mu_{\mathcal{B}}}{\sqrt{\sigma_{\mathcal{B}}^{2}+\epsilon}}$$

그런데 저기 이상한게 들어가 있다. 바로 $\epsilon$이거 . 이건 그냥 아주 작은 값을 가지는 상수라고 보면 된다. 왜냐면 표준편차가 0이 되면 무한대로가버리기 떄문에 이를 방지하기 위해서 저렇게 입실론을 더해주는 방식으로 구현한다.

그런데 그다음에 이상한 게 하나 더있다. 바로 learned parameter $\gamma, \beta$

Learnable parameter $\gamma, \beta$

BN은 Activation Layer 이전에 위치한다. 때문에 Normalization을 수행함으로서 Activation Layer의 non-linearity를 감소시킬 수 있다는 우려가 있다.

 

Normalizaation을 거치고 그대로 Actication layer (tanh)의 input으로 사용할 경우, 정의역이 대부분 빨간색 점선 박스 쪽으로 이동할 것이다. 그리고 그래프에서 보면 알겠지만 해당 정의역에서의 Activation Function Graph의 모양이 매우 linear한 성질을 띄는데 이럴 경우 non-linearity가 떨어진다는 문제가 발생하는 것이다. (이게 왜문제인지 모른다면? ⇒ activation 파트를 다시 공부하고 오자. 이것도 곧 포스팅할 예정...)

따라서 Non-linearity를 높이기 위해서 데이터의 분포를 적절하게 scale & shift를 시킨다.

$$y_{i} \leftarrow \gamma \widehat{x}_{i}+\beta \equiv \mathrm{B} \mathrm{N}_{\gamma, \beta}\left(x_{i}\right)$$

scale 해주는 것이 $\gamma$이고, shifting 해주는 것이 $\beta$다.

Inference with Batch Normalization

이제 학습을 완료했다. 그런데 문제가 하나가 있는게, 학습이 끝난 시점, 즉 production 시점에서 더이상 mini-batch의 mean & standard deviation 을 쓸 수 없다는 것이다. (학습할 때 무엇으로 평균을 쓸 것인가?...)

따라서 mini-batch의 mean & standard deviation을 대체할 방법이 필요한데 이 때 크게 2가지 방식이 있는데, 둘 모두 Training set의 mean & standard deviation을 사용해서 유도한다.

모집단 추정방식

고등학생때 한번쯤 해봤을 것이다! 신승범 선생님께서 (m-1)이 그냥 좋다고 했던 기억이 있다...

$$E\left[x^{(k)}\right]=E_{B}\left[\mu_{B}^{(k)}\right]$$

$$\operatorname{Var}\left[x^{(k)}\right]=\frac{m}{m-1} E_{B}\left[\sigma_{B}^{(k)^{2}}\right]$$

Moving average 방식

$$\begin{array}{l}\hat{\mu} \leftarrow \alpha \hat{\mu}+(1-\alpha) \mu_{\mathcal{B}}^{(i)} \\hat{\sigma} \leftarrow \alpha \hat{\sigma}+(1-\alpha) \sigma_{\mathcal{B}}^{(i)}\end{array}$$

디테일한 설명은 생략하겠다. 모집단 추정방식은 학습 시에 평균과 분산들을 모두 기억하고 있어야 하기 때문에 비효율적이고, 주로 Moving average 방식으로 구현된다고 한다.

시간이 나면 한번 다뤄보도록하겠다. 그런데 날지모르겠네...

Understanding Batch Normalization

이 이후부터는 How Does Batch Normalization Help Optimization 논문의 내용이다.

일단 확실히 BN이 성능하나는 훌륭하다. 하지만 여전히 BN paper의 ICS가 제거되었는지 명확한 실험 및 수학적 설명이 부족하다는 것이다. 그리고 아래와 같은 결론을 내었다.

  • BN은 ICS를 제거하지 않는다.
  • ICS가 있다고 하더라도 학습에 나쁜영향을 주지 않는다.
  • BN이 성능이 좋은 이유는 solution space를 smoothing 했기 때문이고, 이는 다른 방식으로도 같은 효과를 얻을 수 있다.
    • 대표적인 다른방식에는 dropout과 같은 방법들이 있으며, regluarization 등도 이에 해당될 것이다.

BN이 ICS를 제거하는가?

저자는 VGG네트워크를 VGG without BN , VGG + BN , VGG + BN + Noise 로 나누어 실험을 수행한다.

 

그래프가 난해하다. depth 축은 학습의 진행도(step? 명시안되어있는 것 같다 time이라고 써져있던데)이고, 하나의 슬라이스가 분포도를 나타내는 것으로 보인다. 여기서 주목할만한 것은 BN을 적용시킨 것이 더 ICS가 높다는 것이다. (각 스텝별로 데이터의 분포가 확실히 다르다. 즉 ICS가 발생한 것이다) 그럼에도 불구하고 아래와 같은 실험 결과가 나왔다.

 

VGG를 그냥 사용한 것이 가장 성능이 안좋았으며, VGG+BN+Noise가 그다음으로 좋았고, 역시 VGG+BN을 사용한것이 가장 좋았다. 주목할만한 것은 Noise를 추가해서 ICS를 추가적으로 일으켰음에도 불구하고, BN없이 사용한 VGG보다 성능이 좋았으며, 이는 ICS가 학습의 성능에 큰영향을 주지 못한다는 반증이다.

그렇다면 왜 성능이 좋은가?

Optimization landscape

바로 solution space를 smoothing 하기 때문이라는 것이다.

BN은 Loss function의 Lipschitzness를 impove하는데, 이는 Gradient가 stable하게 감소할수 있도록 만들어 준다. 즉 high learning rate에서도 stsable하게 learning하도록 만들어준다. 즉 soulution space를 아래와 같이 smoothing한다!

 

Lipschitz

Lipschitz 함수란 두 점 사이의 거리가 일정비 이상으로 증가하지 않음. 즉 미분 계수가 상수 K를 넘지 않는 함수다.

인데, Lipschitness를 개선했다는 것은 gradient가 급격히 커지는 것을 방지할수 있다는 것이다.

$$\left|\frac{f(x)-f(y)}{x-y}\right|<=K$$

 

위 처럼 loss가 안정적으로 줄어들고, Gradient predictiveness또한 좋아졌다. (gradient의 방향성? 정도? 그런의미인듯 정확히는 모르겟따)

수학수학한건 다루지 않는다.

 

사족들

일반적으로 tensorflow의 shape은 BHWC, pytorch는 BCHW다. B는 배치 C는 채널 HW는 Height와 Width다. 이를 수식으로 명식적으로 나타내면

$$\mu_{c}(x)=\frac{1}{N H W} \sum_{n=1}^{N} \sum_{h=1}^{H} \sum_{w=1}^{W} x_{n c h w}$$

$$\sigma_{c}(x)=\sqrt{\frac{1}{N H W} \sum_{n=1}^{N} \sum_{h=1}^{H} \sum_{w=1}^{W}\left(x_{n c h w}-\mu_{c}(x)\right)^{2}+\epsilon}$$

 

$$\mathrm{BN}(x)=\gamma\left(\frac{x-\mu(x)}{\sigma(x)}\right)+\beta$$

이렇게 될 것이다. 보면 group-by C인것을 알수있다. 왜 group by C인가? 에대해서 한번쯤 생각해보는 시간이 있었는데, 사실좀만 생각해보면 당연한 것이다.

우리가 채널이라고 부르는 것은 사실 서로다른 feature들이다. 매우 일반적인 경우 0번 채널(feature)는 키, 1번 채널(feature)는 몸무게다. 그럼 당연히 normalization을 수행할 때, 키는 키끼리, 몸무게는 몸무게 끼리 normalization을 수행해야한다. 당연히 채널로 묶어서 normalization을 수행해야하는것이고, BN도 channel로 묶어서 normalization을 수행하는 것이다.

진짜 끝 

Reference

Andrew Ng님의 강의자료

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

How Does Batch Normalization Help Optimization?

'ML > 기초 이론' 카테고리의 다른 글

Entropy, Cross Entropy, KL-Divergence에 대해 알아보자  (5) 2021.02.06

 

Entropy

엔트로피는 머신러닝에서 정보량을 나타내는 방법으로 사용된다. 정보의 량이라는게 되게 추상적으로 들리는데, 생각해보면 되게 간단한 개념이다.

ML상에서 굉장히 많이 사용되는 개념인데, 이해하지않고, 아 그냥 쓰면되지 하고 넘어가기에는 너무 찜찜해서 정리하기로 한다.

정보량의 예

다음과 같은 예를 들어보자.

A:커피 내기를 했는데,모자를 쓴 친구가커피를 샀어!

B:커피 내기를 했는데,옷을 입은 친구가커피를 샀어!

Question: 어떤사람이 커피를 샀는가?

A, B 라는 두 문장이 있었을 때 당신은어떤사람이 커피를 샀는지알고싶다면, 두 정보 중에 어떤 것이 더 값어치가 있다고 생각하는가?

단순하게 생각해보면,모자를 쓴 사람 보다 아무옷을 입은 사람이 더 많다. 이말인 즉슨모자를 쓴 사람에 대한 정보로누가 커피를 샀는지특정하기 쉽다는 것이다. 그러므로 우리는,A 정보가 당신에게 더 값어치가 있다. 이 값어치가 바로 정보량이다.

  • 여기서 알수 있는 사실은 더 특정하기 쉬운 정보들이 바로 더 정보로서의 값어치가 높다고 볼 수 있다.
  • 이를 다시 생각해본다면, 정보가 흔할수록 정보량이 적고, 정보가 흔하지 않을 수록 정보량이 크다.
  • 즉, 정보량과 흔한 정도가 반비례 관계라고 생각할 수 있다.

이를 조금더 구체적인 수치로 나타내서 측정할 수 있다면?

정보량의 계산

정보량을 어떻게 정량적으로 나타낼 수 있을까?

위의 예를 조금 변형해서 아래와 같이 바꿔보자.

A:커피 내기를 했는데,빨간 옷을 입은 친구가 커피를 샀어! $P(red)$

B:커피 내기를 했는데,파란 옷을 입은 사람이 커피를 샀어! $P(blue)$

라고 했을 때, 손쉽게 확률로 표현할 수 있다. 다음과 같이 정의해보자.

$P(red) = \frac{people_{red}}{people_{all}}$; 커피 내기를 한 사람들($people_{all}$) 중,빨간 옷($people_{red}$)을 입은 사람을 고를 확률.

$P(blue) = \frac{people_{blue}}{people_{all}}$;커피 내기를 한 사람들($people_{all}$) 중,파란 옷($people_{blue}$)을 입은 사람을 고를 확률.

직접 숫자로 표현해본다면, 전체 커피 내기를 한 사람들의 숫자가 10명이라고 했을 때, 빨간 옷을 입은 사람이 3명, 파란 옷을 입은 사람이 7명이라고 한다면,

$$P(red) = \frac{3}{10}=0.3 \ P(blue) = \frac{7}{10} = 0.7$$

와같이 계산이 될 수 있을 것이다. 그렇다면, 빨간 옷을 입었다는 정보와 파란옷을 입었다는 정보 중 어떤 것이 더 정보로서 가치가 있을까? 직관적으로 생각했을 때, 내가 누가 내기에 걸렸는지를 알기 원한다면 더 사람을 특정하기 쉬운, 즉 빨간 옷을 입은 사람에 대한 정보가 더 가치가 있다. 이를 통해서, 정보량은 그 사건(색)이 발생할 확률에 반비례한다는 사실을 알 수 있다.

이 때,어떤 변수 $x$가 나올 확률 $P(x)$에 대하여 정보량 $I(x)$을아래와 같이 정의 할 수 있다.

$$I\left( x \right) =-\log { P(x) }$$

여기서 $-log(x)$함수는 아래와 같은 그래프를 가지는데, 확률은 0과 1사이의 값을 가지므로, 정확히 반비례하는 관계를 나타내는데 사용할 수 있음을 알 수 있다.

위의 예제를 이 식을 통해서 계산해보면,

$$I(red) =-log \frac{people_{red}}{people_{all}} = -log \frac{3}{10}=1.203...$$

$$I(blue) =-log \frac{people_{blue}}{people_{all}} = -log\frac{7}{10} = 0.356...$$

따라서 1.203 > 0.356 반비례하는 관계를 잘 표현하는것을 수치적으로 볼 수 있다. 어찌 됐든, 이식은 정보량에 대한 개념을 수학적으로 잘 모델링 할 수 있다고 볼 수 있는 것이다.

Entropy의 정의

예제를 바꿔보자. 우리는 이제 빨주노초 바지를 입고있는 10명이서 가위바위보를 했다는 사실을 알았다고 하자. 그리고 빨4명 주3명 노2명 초1명 라는 사실을 알고 있다고 하자. 자 그러면 이 정보를 누군가에게 전달하고자 할 때, 어떻게 할 수있을까? 인간의 언어로는...1번사원은 빨간색, 2번사원은 주황색, 3번사원은 또 빨간색 ....

오마이갓 너무 길어진다. 우리는 컴퓨터를 사용할 수 있으므로, 이 정보를 이진화해서 보내보면 더 효율적으로 보낼 수 있지 않을까? 즉, 빨: 00 주: 01 노: 10 초: 11 로 정하고, 1번 사람부터 10번 사람까지 000100... 로 인코딩해서 보내는 방식이 있을 것이다. 이렇게 할 경우는 총 2바이트 * 10명 해서 총 20바이트면 이 바지 색에 대한 정보를 동료에게 전할 수 있을 것이다.

하지만, 여기서 더 줄일수는 없는 걸까? 사전 확률을 알고 있을 때, 어떻게 하면 이 정보들을 최소한의 비트를 사용해서 이 정보를 전송할 수 있을까? 이 때, 섀넌이라는 아저씨가 이 방식으로 인코딩할 비트수를 정하면 제일 효율적이다! 라고 증명한 방식이 바로 Entropy다.Entropy형태로 인코딩을 하는 것보다 효율적인 방식은 있을 수 없다!

섀넌은 특정 확률분포 $P(X)$를 따르는 확률 변수$X$가 있을 때, 확률 변수 $X$의 사건 $x$를 $p(x)I(x)$의 길이로 인코딩 하는 것이 기대값을 최소로 만들 수 있음을 보였다. (고한다) 이 때의 확률 변수 $X$의 기대값을엔트로피라고한다.

이 경우에는 그렇게 인코딩해야 최적의 길이(가장 짧은 길이의 바이트로)로 정보를 전달할 수 있다는 것이고, 그 길이가엔트로피다.

여기서 기대값 $\mathbb{E}[X]$ 란, 위키피디아의 힘을 빌어서

확률론에서, 확률 변수의 기댓값(期待값, 영어: expected value)은 각 사건이 벌어졌을 때의 이득과 그 사건이 벌어질 확률을 곱한 것을 전체 사건에 대해 합한 값이다. 이것은 어떤 확률적 사건에 대한 평균의 의미로 생각할 수 있다.

$$\mathbb{E}[X] =\sum_i x_iP(x_i)$$

로 나타낼 수 있다. 기대값에 대한 식은위키피디아에 가면 계산하는 방식을 찾아볼 수 있다.

즉, 각 사건의 벌어졌을 때의 이득($x_i$)은? 바로 정보량($I\left( x \right)$)이다. 그럼 바로 정의가 나와버리지.

어떤 확률 변수 $X$가 특정 확률 분포 $P(X)$를 따를 때,엔트로피$H(P)$는

$$ H(P)=H(x) =\mathbb{E}_{X \sim P}[I(x)] =\mathbb{E}_{X\sim P}[-logP(x)]=-\sum_xP(x)logP(x) $$

자 어려운 용어들이 많이 나왔는데, 위의 예에서 일일히 대입해보자면,

확률 변수 $X$ = 바지의 색(빨R,주O,노Y,초G)

확률 분포$P(X)$는 아래와 같다.

$$P(x) = \begin{cases} 0.4 & \quad \text{if } x \text{ is } R\\ 0.3 & \quad \text{if } x \text{ is } O\\ 0.2 & \quad \text{if } x \text{ is } Y\\ 0.1 & \quad \text{if } x \text{ is } G \end{cases}$$

조금더 설명하면, 여기서 어떤 사건이 발생할 확률은 $P(R)$와 같이 나타날 것이고, 빨간색의 옷에 해당하는 값, 즉 정보량은 $I(R)=-log(P(R))$가 될 것이다.

따라서, 우리의 엔트로피는 아래와 같다.

$$H(x) = -(P(R)logP(R)+ P(O)logP(O)+ P(Y)logP(Y)+ P(G)logP(G))$$

중요한점은 어떤 확률 분포가 있을 때, $H(P)$ 보다낮은 기대값을 가질 수 없다는 점이다!즉 머신러닝 관점에서 확률 분포 $P$를 알고 있다고 했을 때, $H(P)$ 는global minimum이다.

참고로 이 엔트로피는 재밌는 성질을 가지는데, 바로, 확률 분포가 균등할 때 최대값을 가진다는 것이다. 반대로, 확률 분포가 균등하지 않는다면 최소값을 가지게 된다.

확률분포가 균등할 경우 특정 확률 변수중에서 뭐가 나타날지 결정하기 어렵다. 즉불확실성이 높다. 반면에 특정 사건들이 높은 확률로 등장할 수 있다면 그 사건들로 결정될 확률이 높다. 즉결정적이므로 불확실성이 낮다. 이러한 특징 때문에 엔트로피는 불확실성에 대한 측정이 가능하다.

특정 확률변수가 어떤 확률 분포를 따를 때, 그것의 정보량의 총량을 나타내 줄 수 있으면서 동시에 불확실성에 대한 측정이 가능한 것이다. 그런데, 이 특징은 (내가 생각하기에) 정보이론적인 관점인거 같고 머신러닝에서는 중요하지 않다.

정리

정보가 발생할 수 있는 어떤 사건들의 확률 변수를 $X$라고 하고, 이 확률 변수에 따른 확률 분포를 $P(X)$라고 하자.

정보량

정보량은 어떤 정보가 가지는 가치를 정량화한 값이다.

확률 변수 $X$의 특정 사건 $x$의 정보량 $I\left( x \right)$ 는 아래와같이 계산될 수 있다.

$$I\left( x \right) = -\log { P(x) }$$

이 정보량은 아래와 같은 특징을 가진다.

  • 정보가 흔할수록 정보량이 적고, 정보가 적을수록 정보량이 크다.
  • 덜 자주 발생하는 사건은 더 높은 정보량을 가진다.

Entropy

엔트로피는 정보를 표현하는데 필요한 (평균) 최소 자원량(0 or 1의 개수)을 의미한다.

엔트로피는 모든 사건 정보량의 기대값으로 계산된다.

따라서 다음의 식으로 계산이 가능하다.

$$ H(P)=H(x) =\mathbb{E}_{X \sim P}[I(x)] =\mathbb{E}_{X\sim P}[-logP(x)]=-\sum_xP(x)logP(x) $$

이 엔트로피는 다음과 같은 특징을 가진다.

  • 엔트로피는 사건의 분포가 결정되기 쉬운 확률분포를 따를 경우 엔트로피는 낮다.
  • 엔트로피는 사건의 분포가 균등한 확률분포를 따를 경우 엔트로피가 높다.
  • 만약 이 엔트로피가 연속일 경우, 확률이 가우시안 분포를 따를때 앤트로피가 가장 높다.
  • 중요한점은 어떤 확률 분포가 있을 때, $H(P)$ 보다낮은 기대값을 가질 수 없다는 점이다!즉 머신러닝 관점에서 확률 분포 $P$를 알고 있다고 했을 때, $H(P)$ 는global minimum이다.

feat. 엔트로피는 불확실성의 양을 나타낼 수 있다.

Cross Entropy

의미와 정의

자, 이제 조금더 어려운 문제를 풀어보자. 일반적으로 실제 확률 분포 $P$는 알기 쉽지 않다. 당장 오늘 커피를 먹고싶다가도 먹기싫다가도 갑자기 내기를 하고 있는 우리들은 미리 이 확률 분포를 미리 아는 것은 쉽지 않을 것이다. 하물며, 머신러닝에서 매우 복잡한 문제를 모델링하는 것은 더더덛더ㅓ욱 이 확률분포 $P$를 알기 쉽지 않을 것이다.

그래서, 대충 우리가 아무렇게나 추정을 해보자. 그럼 내가 생각한 확률 분포를 $Q(x)$라고 했을 때,

$$Q(x) = \begin{cases} 0.25 & \quad \text{if } x \text{ is } R\\ 0.25 & \quad \text{if } x \text{ is } O\\ 0.25 & \quad \text{if } x \text{ is } Y\\ 0.25 & \quad \text{if } x \text{ is } G \end{cases}$$

라고 생각해본다. 정확한 정보량은 $-\log { P(x) }$이겠지만, 나는 $Q(x)$라고 잘 못 예측했다. 하지만 이런 방식으로 예측했기 때문에 이 확률분포에 대한 정보량은 어쨌든$-\log { Q(x) }$일 것이다.

다시말해, 실제확률분포가 $P(x)$일 때, $Q(x)$라고 잘못 예측한다면 정보량이 $-\log { Q(x) }$라고 측정되었을 것이므로 잘못 예측한 엔트로피는 실제 확률과 우리가 추정한 값(정보량)의 곱의 합으로 나타나게 된다.

실제 엔트로피는 $E(P)$로, 우리가 실제확률분포가 $P(x)$일 때, $Q(x)$라고 잘못 예측한 엔트로피를 $CE(P, Q)$로 나타낼 때,

$$E[P] =-\sum_xP(x)logP(x)$$

$$CE(P, Q) =-\sum_xP(x)logQ(x) $$

로 계산되게 된다.

Binary Cross Entropy

어 내가 보던 Binary Cross Entropy랑은 조금 다른데요?

CE에서 두 분포가 확률 변수를 단 두개만 가진다고 하자. 예를들면 동전의 앞면과 뒷면.

앞면이 나올 확률이 $P(x)$ 라고 한다면 뒷면이 나올 확률은 $1-P(x)$가 된다.

반면, 앞면이 나올 것으로 예측한 확률 $Q(x)$라고 한다면 뒷면이 나올 것이라고 예측한 확률은 $1-Q(x)$가 된다.

이걸 정리해보자면

$$CE(P, Q) =-\sum_xP(x)logQ(x) $$

$$BCE(P, Q) = -(P(x)logQ(x)+(1-P(x))log(1-Q(x)))$$ 

 

 

KL-divergence

의미와 정의

자꾸 KLKL 거리는데 KL 머길래?... 라고 했을때 되게 심플하다. 일단 divergence는 차이라는 의미로 해석하면 되는데, 주로 두 분포의 차이를 계산할 때 주로 사용된다.

아까 위에서 설명했드시, 실제 확률분포 $P$를 알고 있을 때, 엔트로피 $E(P)$는 이보다 더 좋아질 수 없는global minimum이다. 일반적으로 머신러닝에서 찾고 싶은 것은 바로 우리가만든 모델의 분포 $Q(x)$를 실제 분포 $P(x)$에 근사하게 만드는 것이다. 따라서,

$$\begin{aligned}E(P) &= -\sum_xP(x)logP(x) \\ CE(P,Q) &= -\sum_xP(x)logQ(x) \end{aligned}$$

일 때, 내가 생각한 확률분포와 실제 확률분포와의 차이를 나타내기 위해서 간단하게 $ CE(P,Q)  - E(P)$를 구해주면 된다. 그리고 이를 KL-divergence라고 부르며, $KL(P \parallel Q)$ 로 표기한다.

$$\begin{aligned} KL(P \parallel Q) & = CE(P,Q)  - E(P) \\ & = -\sum_xP(x)logQ(x)  -(- \sum_xP(x)logP(x)) \\ & = \sum_xP(x)logP(x) - \sum_xP(x)logQ(x) \\ & = \sum_xP(x)(logP(x)-logQ(x)) \\ & = \sum_xP(x)log\frac{P(x)}{Q(x)} \end{aligned}$$

정리한 식에서 만약 Q(x)가 P(x)의 분포를 알아냈을 때, 즉, Q(x)와 P(x)가 완전히 같아졌을 때, log 안쪽 식이 1이 되면서 $KL(P \parallel Q)$ 값이 0이 되고, 이것이 바로 최소가 된다.

사족

그런데 잘 생각해보면, binary classification에서 KL-divergence를 쓰지 않고 CE에 대해서만 최적화 해주는 것을 볼 수 있다. 그건 왜그러할까?

사실 쉬운 문젠데, 우리가 최적화하고 싶은 값은 바로 $Q(x)$이다. 즉 $Q$입장에서 보면 $P$는 상수다. 따라서 $CE$에 대해서만 최적화해주면 되기때문에 $CE$를 쓰는것이다

참고로, KL-divergence는차이일 수는 있지만,거리는 아니다. 왜냐하면 A에서부터 B까지 의 거리를 잰다고했을 때, A부터 B까지의 거리는 B부터 A까지와의 거리와 같아야하는데, KLD는 그렇지 않다. 딱봐도...

$$KL(P \parallel Q)=  \sum_xP(x)log\frac{P(x)}{Q(x)} \neq \sum_xQ(x)log\frac{Q(x)}{P(x)} = KL(Q \parallel P)$$

KL과 유사한데, 대칭성이 있어 거리로 사용할 수 있는 Divergence가 있는데, 그게 바로 JSD이다. 이건 추후 포스팅에서 다루겠다.

Reference

#4.0. 정보량을 나타내는 엔트로피 (Entropy)

엔트로피(Entropy)와 크로스 엔트로피(Cross-Entropy)의 쉬운 개념 설명

정보 엔트로피

정보이론 기초

왜 크로스 엔트로피를 쓸까?

Wolfram|Alpha: Making the world's knowledge computable

가장 쉬운 KL Divergence 완전정복!

[딥 러닝] 4강. 정보이론 기초, Cross-entropy와 KL-divergence

notion은 tistory와 연동이 안된다 ㅠㅠ

망했다. 연동이 제대로안되네. 수정하기도 함들고

https://www.notion.so/Cross-Entropy-5f028e1291744e50b8b91644105807be

실제 수정이나, 변경사항은 여기에 남기도록 하겠습니다.

 

수정 내역

  • (2021-03-30) KLD 수식 전개 과정에서 P(x) Q(x)를 바꿔쓴 것 수정
  • (2021-04-03) BCE 섹션추가
  • (2024-03-17) KLD 수식 전개 과정에서 CE-E를 E-CE로 풀이한 것을 수정

 

'ML > 기초 이론' 카테고리의 다른 글

Batch Normalization을 제대로 이해해보자  (0) 2021.03.13

+ Recent posts