Model이 overfit되면 학습 데이터를 외워버리기 때문에 학습되지 않은 데이터에 대해서 예측력이 떨어지게 된다. 이를 방지하고 model을 일반화하기 위한 방법으로 L1 regularization, L2 regularization, dropout, batch normalization 등의 방법이 있다.
1. L1 regularization
L1 regularization은 mean squared error에 weight의 L1 norm, 즉 weight의 절댓값의 합을 추가하는 것이다.
$$J(\theta)=\sum_{i=1}^{n}(y_i-\theta^Tx_i)^2+\lambda\sum_{i=1}^d\begin{vmatrix}\theta_i\end{vmatrix}$$
위 식을 최소화하는 것을 다음과 같이 쓸 수 있다.
$$\begin{matrix}
\text{argmin} \\ \theta
\end{matrix}\sum_{i=1}^{n}(y_i-\theta^Tx_i)^2 \text{ with } \sum_{i=1}^d\begin{vmatrix}\theta_i\end{vmatrix}\leq s$$
2차원 데이터라면 이를 다음과 같은 그래프로 나타낼 수 있다.
빨간색 타원은 MSE의 level curve를 나타낸 것이고, MSE값이 커지면 빨간색 타원도 커진다. 초록색 정사각형으로 표현된 영역이 바로 weight의 절댓값이 특정 값보다 작아야 한다는 조건을 의미한다. 따라서 빨간색 타원이 커지다가 초록색 영역과 맞닿는 지점에 해당하는 weight가 그 조건을 만족하는 가장 작은 MSE를 갖게끔 하는 weight이다. 그래프에서 확인할 수 있듯이 이렇게 하면 몇몇 계수들은 0에 수렴하게 되기 때문에 중요한 계수들만 남길 수 있어 L1 regularization은 feature selection에 이용될 수 있다. 이렇게 하면 parameter의 수가 줄어들어 overfit을 방지하는 효과가 있다.
2. L2 regularization
L2 regularization은 mean squared error에 weight의 제곱의 합을 추가하는 것이다.
$$J(\theta)=\sum_{i=1}^{n}(y_i-\theta^Tx_i)^2+\lambda^2\sum_{i=1}^d\theta_i^2$$
이를 최소화하는 것은 다음과 같다.
$$\begin{matrix}
\text{argmin} \\ \theta
\end{matrix}\sum_{i=1}^{n}(y_i-\theta^Tx_i)^2 \text{ with } \sum_{i=1}^d\theta_i^2\leq s$$
2차원 데이터에 대해 이를 그래프로 나타내면 다음과 같다.
즉 이 경우에는 초록색 원과 빨간색 타원이 만나는 지점, 즉 weight의 제곱의 합이 특정 값보다 작아야 한다는 조건을 만족하는 가장 작은 MSE를 갖게끔 하는 지점의 weight들이 0이 되는 것은 아니지만 크기가 줄어드므로 overfitting을 방지할 수 있다.
3. Dropout
Fully connected neural network는 모든 노드들이 연결되어 있다. 이렇게 되면 parameter의 수가 많아지므로 overfit이 발생할 가능성이 크다. 따라서 몇 개의 노드를 확률적으로 누락시키면 parameter의 수를 줄일 수 있으므로 overfitting을 방지할 수 있다. 물론 train할 때만 적용되고 evaluation 시에는 모든 node가 참여한다. Pytorch에서는 model.train()과 model.eval()을 통해 이것을 설정할 수 있다.
4. Batch normalization
Gradient가 매우 커지거나 작아지면 학습을 효과적으로 할 수 없게 된다. 이를 막기 위해 sigmoid나 tanh함수가 아닌 ReLU를 사용하거나, learning rate를 조절하는 방법 등이 있다. 그런데 이러한 학습의 불안정성의 원인으로 internal covariate shift가 제기되었는데, 이는 data가 layer를 반복적으로 통과하다 보면, 앞쪽 layer의 weight가 업데이트됨에 따라 뒤쪽에 있는 layer의 입력 데이터 분포가 달라지는 현상을 말한다. 이때 각 레이어마다 batch normalization을 하면 이를 해결할 수 있다.
Mini batch 안에서 평균과 분산을 계산한 다음, input data에 대해 normalization을 한다. 그리고 학습 가능한 scale factor($\gamma$)와 shift factor($\beta$)를 추가한다. 이는 데이터를 normalization하면서 activation function을 통과시켰을 때 비선형성을 잃어버릴 가능성을 방지하고 최적의 데이터 분포를 학습하기 위함이다.
Validation이나 test에서는 training set의 평균과 분산을 사용하는데, train 단계에서 구한 mini batch의 평균과 분산을 이용해 다음과 같이 moving mean 및 moving standard deviation을 업데이트하는 방식으로 training set의 평균과 분산을 얻는다. Pytorch에서는 dropout과 마찬가지로 model.train()과 model.eval()로 이것을 설정할 수 있다.
$$\begin{cases}
\mu\leftarrow\alpha\hat\mu+(1-\alpha)\mu_B^{(i)} & \text{moving mean}\\
\sigma\leftarrow\alpha\hat\sigma+(1-\alpha)\sigma_B^{(i)} & \text{moving stddev}
\end{cases}$$
참고:
https://eehoeskrap.tistory.com/430
[Deep Learning] Batch Normalization (배치 정규화)
사람은 역시 기본에 충실해야 하므로 ... 딥러닝의 기본중 기본인 배치 정규화(Batch Normalization)에 대해서 정리하고자 한다. 배치 정규화 (Batch Normalization) 란? 배치 정규화는 2015년 arXiv에 발표된 후
eehoeskrap.tistory.com
[개념 정리] Batch Normalization in Deep Learning - part 1.
딥러닝을 공부하다 보면 자주 접하는 이론적인 내용이자 실제 구현에서도 라이브러리를 이용하여 쉽게 Layer로 추가하여 사용하는 Batch Normalization에 대해 알아보자. 개요 ICML 2015에 한 논문이 등
cvml.tistory.com
'머신러닝' 카테고리의 다른 글
Feature Selection (0) | 2022.04.24 |
---|---|
Principal Component Analysis (PCA) (0) | 2022.04.24 |
Bias & Variance (0) | 2022.04.24 |
Cross Validation (0) | 2022.04.24 |
Representations of Materials for Machine Learning (0) | 2022.04.24 |