본문 바로가기
인공지능/ML-DL 기초

Regularization(모델의 규제, 정칙화)에 대한 이해

by 3n952 2023. 12. 23.
이번 포스팅에서는 모델의 overfitting을 해결하기 위해 사용할 수 있는 기법 중 하나인,
Regularizaion에 대해 알아보자.

regularization은 앞서 언급한 대로, 딥러닝 모델의 overfitting 양상을 억제하는 기법 중 하나이다.

그렇다면 model이 overfitting 하다는 것은 무엇을 의미할까?

(이에 대한 자세한 내용은 추후에 따로 포스팅할 예정이니 간단한 예를 들어 설명을 하겠다.)

 

오버피팅은 한국어로 과적합이라고 하며, train set은 매우 잘 맞히지만, validation/test set은 맞히지 못하는 현상을 말한다.

비유하자면 overfitting은 기출문제는 외워서 잘 맞히지만 새로운 응용문제로 시험을 볼 때는 잘 풀지 못하는 경우라고 할 수 있다.

더 좋은 결과를 얻기 위해서는 새로운 시험, 즉 test set에서도 잘 맞힐 필요가 있다.

이때 regularization과 같은 overvitting 억제 기법을 사용하는 것이다.

regularization이 overfitting을 억제하는 것은 train loss를 증가시킴으로써 가능하게 된다.

반면, validation / test loss를 감소시켜 새로운 시험에 대한 점수를 높이는 것을 목표로 한다.

딥러닝에서 위에 대한 경우를 일반화 성능을 높였다라고 표현한다.(= generalization)

 

regularization의 목표를 알았으니 이제 어떠한 regularization이 있는지 확인해 보자.

이번 포스팅에서는 총 3가지 regularizaion 기법을 소개한다.

1. L1 /L2 regularization

2. dropout

3. batch normalization

 

1. L1 / L2 regularization 

L1 / L2 regularizaion은 둘 다 norm을 이용하여 기존의 loss에 더하는 방식으로 전체 loss를 구성하는 것이다.

 

(norm에 대한 간단한 이해는 다음 링크에서 해보자!)

https://bskyvision.com/entry/%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98%ED%95%99-%EB%86%88norm%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

 

[선형대수학] 놈(norm)이란 무엇인가?

오늘은 놈(norm)에 대해 설명을 드리고자 합니다. 놈은 노름으로 발음하기도 하는데 둘다 어감이 좀 그렇죠? 선형대수학에서 놈은 벡터의 크기(magnitude) 또는 길이(length)를 측정하는 방법을 의미합

bskyvision.com

 

 

- L1 regularization

 

L1 regularization

 

 

L1 regularization은 기존의 loss(cost function)에 L1 norm을 더한 것을 의미한다.

여기서 n은 case에 따라 정해지는 값이므로 크게 상관할 것은 없다.

중요한 점은 L1 norm이 추가되었다는 점이다.

또한 𝛌 역시 error(loss)에 L1 norm이 얼마나 영향을 미칠지 정하는 하이퍼 파라미터의 계수이다.

이를 크게 적용할수록 가중치에 대한 규제가 더 커진다는 것을 의미한다. 

 

 

 

- L2 regularization

L2 regularization

 

L1 regularization과 마찬가지로 기존의 loss(cost function)에 L2 norm을 더한 것을 의미한다.

다만 차이점은 L2 norm을 더했다는 것이다. 이는 보다 outlier에 민감하게 반응한다는 것을 의미한다.

즉, 어떠한 outlier 가중치에 대해 더 크게 규제를 가하겠다는 의미이다.


 

결론적으로는 regression의 loss에 L1, L2 norm(가중치 W에 대하여)을 더해주는 꼴이다.

이는 무엇을 의미할까?

전체 loss에 대하여 w에 대한 절댓값, 제곱값을 추가로 더한다는 것은 무엇을 의미할지 생각해 보면 된다.

우선, 큰 틀에서 loss에 w에 대한 값을 더해준다는 것은 기존의 loss가 작아지더라도 w가 크면 전체 loss가 커지게 유지한다는 것이다.

즉, loss가 작더라도 w가 크면 최적의 total loss로 수렴되지 않으므로, w의 값도 작아지는 방향으로 total loss를 계산한다는 것이다.

이는 local noise에 대해 영향을 적게 받겠다는 의미이다(= outlier의 영향을 억제하겠다)

이 아이디어가 train loss를 높이는 원인이 되지만 결과적으로 overfitting을 억제하는 역할을 한다.

 

다만 다른 점은 절댓값을 더해주냐, 제곱의 값을 더해주냐에 차이가 있으므로, L2가 outlier에 보다 민감하게 반응하고,

L1은 보다 robust 하게 모델에 적용된다는 점이다.

 

2. Dropout  

dropout기법은 2014년도에 나온

'Dropout: A Simple Way to Prevent Neural Networks from Overfitting'에서 처음으로 소개되었다.

https://jmlr.org/papers/v15/srivastava14a.html

 

Dropout: A Simple Way to Prevent Neural Networks from Overfitting

Dropout: A Simple Way to Prevent Neural Networks from Overfitting Nitish Srivastava, Geoffrey Hinton, Alex Krizhevsky, Ilya Sutskever, Ruslan Salakhutdinov; 15(56):1929−1958, 2014. Abstract Deep neural nets with a large number of parameters are very powe

jmlr.org

 

dropout이 나오기 전의 신경망은 fully connected architecture로 모든 뉴런들이 연결되어 있었다.

dropout이란 확률적으로 랜덤 하게 몇 가지의 뉴런만 선택하여 정보를 전달하는 과정을 의미하는데,

이름 그대로 몇 가지의 값들을 모든 뉴런에 전달하는 것이 아닌, 확률적으로 버리면서 전달하는 기법이다.

 

드롭아웃은 오버피팅을 막는 regularization layer 중 하나로 확률을 너무 높이면 (비활성화된 뉴런의 비중을 높이면)

모델 안에서 값들이 제대로 전달되지 않으므로 학습이 잘 되지 않고,

확률을 너무 낮추는 경우에는 fully connected layer와 같이 동작한다.

따라서 fully connected layer에서 오버피팅이 생기는 경우에 주로 dropout layer를 추가하여 regularization을 수행한다.

 

dropout 예시

3. Batch normalization

Batch Normalization 기법은 2015년 나온

'Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift'에서 처음 소개되었다.
(논문 pdf 링크: https://arxiv.org/pdf/1502.03167.pdf

 

내용을 요약하면 다음과 같다.

딥러닝에서 경사 하강법(gradient descent)으로 모델의 가중치를 업데이트할 때, 데이터셋 전체를 본 다음 업데이트하는

'Batch Gradient Descent'와 데이터 하나를 관찰할 때마다 업데이트하는 'Stochastic Gradient Descent' 방법이 있다.

 

이 둘의 절충안이 바로 데이터셋을 여러 개의 mini-batch로 쪼갠 다음 하나의 batch를 처리할 때마다 가중치를 업데이트하는

'Mini-batch Gradient Descent'인데, 데이터셋을 mini-batch로 쪼개는 방법은 학습 속도와 안정성 모두를 잡았지만,

딥러닝 모델 안에서 데이터가 처리되면서 여러 개의 mini-batch들 사이에 데이터 분포의 차이가 생길 수 있다는 문제가 있었다.

( internal covariate shift)

 

데이터 분포의 차이가 존재한다면 gradient 값의 차이도 있을 것이고,

같은 learning rate 값을 가지고 있더라도 gradient vanishing이나 gradient explode 문제가 생길 수 있다.

따라서 batch normalization 기법은 각 mini-batch마다 평균과 분산을 계산하여 정규화(normalization)를 수행하고,

scale and shift 변환을 적용하여 mini-batch들이 비슷한 데이터 분포를 가지도록 하는 것을 의미한다.

 

해당 논문에서 설명한 알고리즘은 다음과 같다.

batch normalization algorithm

 

위 수식을 풀어서 설명해 보면, batch normalization은 mini-batch의 평균()과 분산(𝛔B²)을 구해서

입력 데이터를 정규화(normalize)하고, 이 값에 scale()과 shift()를 추가한 것이다.

결국 입력 데이터(X)는 batch normalization을 거쳐 Y(=  + )가 된다.

 

 


References
[1] L1/ L2 norm: https://bskyvision.com/entry/%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98%ED%95%99-%EB%86%88norm%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

[2] L1 / L2 reguralization: https://light-tree.tistory.com/125

[3] batch normalization: https://towardsdatascience.com/batch-norm-explained-visually-how-it-works-and-why-neural-networks-need-it-b18919692739

[4] Ioffe, Sergey, and Christian Szegedy. "Batch normalization: Accelerating deep network training by reducing internal covariate shift." International conference on machine learning. pmlr, 2015

[5] Srivastava, Nitish, et al. "Dropout: a simple way to prevent neural networks from overfitting." The journal of machine learning research 15.1 (2014): 1929-1958.