일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 자바스크립트
- 조합론
- 너비 우선 탐색
- DP
- tensorflow
- lazy propagation
- dropout
- back propagation
- 이분 탐색
- 가끔은_말로
- 알고리즘
- 우선 순위 큐
- 다익스트라
- 분할 정복
- 가끔은 말로
- 2023
- pytorch
- 회고록
- 미래는_현재와_과거로
- 백트래킹
- NEXT
- 문자열
- 플로이드 와샬
- c++
- 크루스칼
- 세그먼트 트리
- BFS
- Overfitting
- dfs
- object detection
- Today
- Total
Doby's Lab
Batch Normalization이란? (Basic) 본문
Batch Normalization
Batch Normalization는 모델이 복잡할 때, 정확히는 Layer가 깊어지면서 가지는 복잡도가 높을 때 일어나는 Overfitting을 해결하기 위한 기법입니다.
Batch Normalization이 어떻게 작동되는지 알기보다 왜 Batch Normalization이 나왔는지 먼저 알아야 합니다.
Internal Covariate Shift
아래 그림과 같이 Input Data의 분포가 Layer를 거치면서 분포가 달라지는 현상을 Covariate Shift라고 합니다.
Covariate란 공변량으로 연속성을 가지는 독립변수라는 의미이기 때문에 이러한 의미를 알면 이해하기 쉬울 것입니다.
Shift는 말 그대로 옮겨갔다는 뜻으로 '데이터의 분포가 달라졌다'라는 직관적 의미로 와닿아집니다.
Covariate Shift 현상이 DNN의 구조에 따라 Layer가 깊어지면 깊어질수록 분포가 상이하게 변하기 때문에 이러한 현상을 Internal Covariate Shift라고 합니다.
Why
train data의 분포에 따른 weight들은 train data에 대해 학습한 것이기 때문에 test data의 분포와는 다릅니다.
데이터 간의 분포 차이 때문에 Overfitting이 나는 것입니다.
Covariate Shift로 인해 달라진 분포를 train, test 둘 다 균일하게 맞추기 위해 Normalization을 하는 것입니다.
조금 더 자세히 다루자면 Normalization이 필요한 이유는 데이터의 분포에 따른 weight의 반응 때문입니다.
정규화되지 않은 분포의 데이터를 학습하는 것은 Optimizer에 따라 weight의 변동 또한 제각각으로 달라짐을 알고 있습니다.
즉, Train set에 과하게 적합되어 Gradient의 편차가 제각각으로 되고, 크다면 Exploding, 작다면 Vanishing 같은 현상이 일어나서 Overfitting이 날 수 있습니다.
$$ W := W - \alpha \frac{\partial}{\partial W}cost(W) $$
그래서 분포를 정규화시켜서 학습을 시키면 Overfitting을 줄여가면서 Gradient Descent에 따른 반응이 같기 때문에 Learning rate(alpha) 선정에 있어서 어려워질 필요가 없습니다.
그리고, Test set을 추론하는 과정에서도 정규화를 시키면서 Batch Normalization으로 인해 적절하게 만들어진 weight를 통과하며 좋은 결과를 얻게 됩니다.
Work
작동 방식은 Layer 바로 직후에 Batch Normalization Layer를 연결하는 방식입니다.
각 Batch마다 평균과 분산을 이용해 정규화(Standarization인데 왜 Normalization인지 모르겠음) 과정을 거치고, Beta와 Gamma를 통해 BN(X)를 구하여 다음 Layer로 넘어갑니다.
$$ BN(X) = \beta (\frac{X-\mu_{batch}}{\sigma_{batch}}) + \gamma $$
$$ \mu_{batch} = \frac{1}{B}\sum_{i=1}{x_i} $$
$$ \sigma_{batch} = \sqrt{\frac{1}{B}\sum_{i=1}({x_i-\mu_{batch}})^2} $$
이러한 Beta와 Gamma 값은 모델이 데이터를 학습하면서 다른 weight들과 같이 적절한 값을 찾아갑니다.
하지만, Batch Normalization 후에 Activation Function으로 'ReLU'가 적용되어 있다면 정규 분포에 따라 1/2는 0이 되어 반이나 의미가 없어집니다. 그래서 BN(X)는 Beta와 Gamma가 기존의 음수 부분이 모두 0이 되지 않도록 학습을 합니다.
여기까지가 학습 과정이고, 추론 과정은 살짝 다릅니다.
추론 과정에서 쓰이는 평균과 분산은 Batch에서 쓰인 평균과 분산을 2가지 방법으로 가져옵니다.
Moving Average
: 일정한 부분 집합의 평균값, 전반적인 추세 파악 -> 몇 개의 평균과 분산을 가져와서 평균을 구하여 사용
Exponential Average
: 전 데이터와 현 데이터의 영향력이 비슷해지는 것을 고려하여 아래와 같은 식으로 평균을 구함
$$ V_t = \beta V_{t-1} + (1-\beta)\theta_t $$
V_t는 현재의 평균, Theta_t는 현재의 데이터 값으로 Beta의 값에 따라 전 데이터들이 얼마나 영향을 끼칠지 고려하여 평균을 구합니다. -> 전체적인 평균과 분산을 가져오되 영향력의 분배가 다름
Code in Keras
model.add(keras.layers.Conv2D(32, kernel_size=3, activation='relu',
padding = 'same', input_shape=(224, 224, 1),
kernel_regularizer=keras.regularizers.l2(0.001)))
model.add(keras.layers.BatchNormalization())
이러한 Batch Normalization도 Keras에 제공하기 때문에 위와 같이 코드로 작성할 수 있습니다.
(진행 중인 프로젝트의 코드인데 conv2D Layer의 Activation function이 Batch Norm보다 선행으로 수행되는가?)
+ Alpha
Batch Normalization이 필요한 이유를 간단히 정리해봤는데 아직 100%로 이해했다는 느낌은 들지 않습니다.
이유는
1) 원인이 포스팅마다 100% 겹치는 부분이 없음.
2) Batch Normalization이 Internal Covariate Shift를 해결해서
Overfitting이 해결되는 게 아니라 다른 이유가 있음.
3) 어떤 Layer(Conv, Dense)에 따라 Normalization 방법이 다름
4) BN(X), Activation Function의 선후 관계에 대해 왜 BN(X)가 먼저 오는 게 좋은가
3번은 더 공부해봐야 할 부분이고, 1번과 2번은 나중에 논문을 읽어봐야 알 거 같습니다. 나중에 공부하게 되면 포스팅으로 다루도록 하겠습니다.
Reference
https://gaussian37.github.io/dl-concept-batchnorm/
배치 정규화(Batch Normalization)
gaussian37's blog
gaussian37.github.io
https://89douner.tistory.com/44
10. Batch Normalization (배치 정규화)
안녕하세요~ 이번글에서도 역시 overfitting을 피하는 방법에 대해서 설명해보려고해요. Overfitting을 피하는 방향성에 대해서 잠깐 요약해드리면 아래와 같아요. DNN(Deep Neural Network)가 학습할 때 train
89douner.tistory.com
https://eehoeskrap.tistory.com/430
[Deep Learning] Batch Normalization (배치 정규화)
사람은 역시 기본에 충실해야 하므로 ... 딥러닝의 기본중 기본인 배치 정규화(Batch Normalization)에 대해서 정리하고자 한다. 배치 정규화 (Batch Normalization) 란? 배치 정규화는 2015년 arXiv에 발표된 후
eehoeskrap.tistory.com
https://deep-learning-study.tistory.com/421
[논문 리뷰] 배치 정규화, Batch Normalization(2015)
안녕하세요! 이번에 리뷰할 논문은 'Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift' 입니다! 배치 정규화는 2015년에 제안된 방법입니다. 배치 정규화는 많은 사람들이 사
deep-learning-study.tistory.com
Dropout, Batch Normalization 뭐가 더 먼저 와야 하는가?
https://whoishoo.tistory.com/426
[Keras] Batch Normalization
Batch Normalization 포스트 난이도: HOO_Senior [Notice] 포스트 난이도에 대한 설명 안녕하세요, HOOAI의 Henry입니다. Bro들의 질문에 대한 내용을 우선적으로 포스팅이 되다 보니 각각의 포스트에 대한 난이
whoishoo.tistory.com
'AI > Concepts' 카테고리의 다른 글
Gradient Vanishing / Exploding에 대하여 (1) | 2023.01.17 |
---|---|
Back-Propagation(역전파)에 대하여 (1) | 2023.01.16 |
Dropout에 대하여 (1) | 2022.12.31 |
L1, L2 Regularization에 대하여 (0) | 2022.12.31 |
Image Augmentation이란? (2) | 2022.12.29 |