ML 🐼/딥러닝 🔫

[딥러닝]규제 Regularization

Dobby98 2023. 1. 5. 17:31

 

1. Regularization?

딥러닝 모델을 구성하다 보면 우리가 만든 모델이 실제 데이터에 잘 맞지않는

(과적합 or 과소적합) 결과를 마주치게 될것이다.

이이럴때 우리는 '규제' Regularization를 활용해서 이러한 현상을 피할 수 있는데

쉽게 설명하자면 모델에 조건들을 추가해서 어느 선을 넘지 않은 이상한 모델이 만들어 지지 않게 만드는 것이다.

 

그렇다면 왜 이러한 규제들을 사용할까?

앞에서 설명했듯이 과적합이나 과소적합 (Overfitting, Underfitting)을 피하기 위해서 이다.

 

과적합과 과소적합을 피하기 위해서 우리가 할 수 있는 방법은 크게 2가지이다.

1. DataSet의 Size를 증가한다 

하지만 이러한 방법은 실제 데이터를 수집하는 환경에 제약이 있다.

또한 캐글이나 데이콘 같이 데이터 대회에서 제공되는 데이터는 한계를 가질 수밖에 없다. 

따라서 우리는 2. Regularization을 활용해야한다.

 

아래에서 이러한 규제들의 종류들을 자세히 살펴보도록 하자.

 


2. Regularization의 종류

2-1. Early Stopping

Early stopping : 말 그대로 모델의 학습을 '조기 종료'하는 것이다.

위 그래프를 살펴보자 

파란색 선은 우리의 데이터 셋이 학습 되면서 Loss (손실값)이 줄어 들고 있는 것으로 보여진다.

하지만 Validation 데이터 셋은 다른 양상을 보이는데

어느 특정 학습 지점을 지나면서 loss값이 증가하기 시작했다.

따라서 저 지점 이상으로 학습하는것은 trainging dataset에 과적합 되는 것으로 해석할 수있다.

 

결국, validataion의 loss값이 증가하는 지점이나 이전에 모델의 학습을 조기 종료하는 것이 과적합을 피할 수 있을 것이다.


2-2. Parameter Norm Penalty (L1, L2 규제) 

Parameter Norm Penalty는 쉽게 L1, L2규제로 불린다.

이 방법은 모델의 가중치 W를 규제하는 방법이다.

 

쉽게 표현하자면 모델의 가중치 W가 갑자기 커지지 않게 제한하는 방법이라고 할 수 있다.

이러한 규제는 딥러닝 뿐만 아니라 (물론 early stopping도) 머신 러닝에서도 활용되는 방법이다.

L2 규제 (왼) L1 규제(오른) 수식

쉽게 말하자면 가중치를 업데이트해줄때 (경사하강법) loss값에 Norm L1과 Norm L2를 각각 추가해주는 것이다.

Norm L1, L2는 나중에 선형대수학을 다룰때 다시한번 설명해보도록 하겠다.

 

이렇게 추가된 L1, L2는 아래의 결과를 만들어낸다.

L2 : 크기가 큰 가중치에 대한 규제는 강하제, 작은 가중치에게는 규제를 약하게 주어 모델을 형성
L1 : 크기가 작은 가중치들을 0으로 수렴하게 만들어 설명력 높은 가중치만 생성

그렇다면 언제 L1를 사용하고 언제 L2를 사용해야할까?

이는 모델을 만드는 연구자 주관이 포함된다.

L1의 경우 가중치가 작은 것들을 0으로 수렴하게 만들기 때문에

(sparse해진다) 가중치의 수를 줄이고 싶다면 L1을 활용하고

L2의 경우 모든 가중치를 고르게 만들기 때문에 일반화를 높게 내고 싶다면 (일반적으로 L2가 더 좋은 성능을 가짐)

L2를 활용하는 것이 좋다

 

참고자료 : 👇

 

L1,L2 Regularization

gaussian37's blog

gaussian37.github.io


2-3. DropOut

앞에서 살펴본 규제들은 비교적 '전통적'인 방법이다.

딥러닝 이전부터 머신러닝에 적용되어 오던 규제 방법들이다.

 

하지만 지금 부터 살펴볼 규제방법들은 본격적으로 딥러닝에서 적용되는 규제라고할 수 있다.

그중 첫번째가 DropOut이다.

dropout

DropOut은 그냥 꺼버리는 것이다.

뭘? 

바로 layer에서 0~1의 확률로 (랜덤) 뉴런을 제거하는 것이다.

위 사진에서 확인할 수 있듯이 모델을 좀더 간단하게 만들어 버리는것이다.

 

layer의 뉴런이 많아 질수록 설명력은 올라가지만 이는 training dataset에대한 설명력이면 

따라서 다른 데이터셋에 일반화기 어려운 과적합에 빠지게된다.

따라서 모델이 깊어질수록 뉴런의 갯수를 줄여줌으로써 과적합을 피하는 방버이라고 할 수 있다.

 

DropOut을 했을때 왜 좋아지는지에 대한 수학적 설명은 부재하다.

딥러닝 모델같은경우 대표적은 블랙박스모델이기 때문에 안에서 일어나는 결과의 과정을 설명할 수 있는 방법이 부재하기 때문이다.

따라서 이러한 DropOut의 성능은 경험적인 실험을 통해서 증명할 수 밖에 없다.

 

 


2-4. Batch Normalization

Batch Normalization 같은 경우 이번 글로만 설명하기에는 많은 내용을 갖고 있기 때문에

추후에 다른 글로 상세하게 설명하기로 하고 오늘은 큰 개념만 잡기로 하겠다.

 

Batch Normalization의 경우

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

논문으로 제시된 개념이다

그만큼 수학적으로 수식적으로 많은 내용을 설명해야한다.

 

하지만 쉽게말하자면 뉴런의 비선형 함수를 지나서 나온 값들의 분포를 조정해주는 것이다.

 

딥러닝은 보통 Batch 단위로 학습이 진행되는데

이러한 과정에서 Internal Covariant Shift문제 즉, 학습과정에서 계층별로 입력의 데이터 분포가 달라지는(평균과 분산) 현상이 발생하게 되는것이다. (위 사진에서 확인)

 

이렇게 되면 각 Batch 단위간의 데이터의 분포가 차이가 발생하게되고 결국 모델의 일반화의 한계를 가지게 된다.

따라서 이문제를 해결하기 위해서 제안된 것이 활성화함수 (위 사진에서 ReLU)를 지나서 나온 값들을 Batch Normalization하여 데이터 분포를 고르게 만들어 주는 것이다. (평균 0 표준편차 1로 데이터 분포를 조정)

여기서 발전해서 아래의 Group Normalization 같은 방법들이 제시되고 있다.

https://arxiv.org/pdf/1803.08494.pdf - 논문


2-5. Data Augmentation

지금 살펴볼 방법들을 특히 , CNN의 기법에서 활용되는 방법이다.

Data Augmentation은 데이터를 증강시키는 방법으로 

아래의 사진을 보면 바로 이해할 수 있을 것이다.

 

하나의 고양 사진을 이용해서 돌리고 뒤집고 크롭하고  RGB값을 조정하고 해서 새로운 데이터들을 만들어 내는 것이다.

따라서 이렇게 데이터의 양을 증가시키면 그만큼 모델이 다양한 상황을 학습할 수 있고

모델의 일반화도 가능해지는 것이다.

특히 데이터의 수가 한정적일 때 위 방법을 활용하면 매우 효과적이다.

 

 

이러한 규제는 사실 경험적인 실험을 통해서 모델에 적용해보고

각 모델들을 비교함으로써 무엇이 좋은 모델인지 결정하는 것이 가장 좋은 방법이다.

즉, 모델의 진리는 없기 때문에 다양한 경험적 실험이 필요하다.