정규화

공부하고 있는 내용을 정리한 거라 정확하지 않을 수 있습니다.

 

1. 정규화

1.1. 오버피팅(Overfitting)

  • 학습 데이터에 대한 오차는 낮지만, 새로운 데이터에 대한 성능이 떨어지는 현상
  • 모델이 학습 데이터의 불필요한 편향이나 노이즈까지 학습함으로써 모델의 일반화 성능이 떨어지는 상황을 말함
  • 모델이 학습 데이터의 특정 패턴이나 노이즈에 지나치게 적합되어 새로운 데이터에 대한 예측 성능이 저하되는 문제

 

1.2. 정규화란?

정규화(Regularization)는 오버피팅을 방지하고 모델이 학습 데이터에서 유용한 패턴을 학습하고 불필요한 노이즈를 억제하여 일반화 성능을 향상시키는 기법입니다.

 

1.3. 정규화 방식의 종류들

 

2. 데이터 증강

  • 데이터 증강(Data Augmentation) 기법은 데이터의 핵심 특징은 간직한 채 기존 데이터의 변형을 통해 데이터를 확장하는 방법
  • 확장된 데이터 세트가 기본 숨겨진 분포를 더 잘 나타낼 것이라는 것을 전제로 인위적으로 더 많은 데이터를 만드는 것
  • 이미지 같은 경우 하얀색 점들을 임의로 흩뿌리는 소금 기법이나 검은색 점들을 임의로 흩뿌리는 후추 기법과 회전, 이동, 뒤집기 등의 이미지 변형을 수행함으로써 데이터의 증강을 수행. 또는 생성 모델(Generative Model) - GAN, Autoencoder 등의 데이터셋의 샘플과 유사한 샘플들을 생성해낼 수 있는 모델을 통해서도 가능
  • 텍스트 증강은 일정 확률로 임의의 단어를 생략하거나 단어를 교환 또는 이동을 통해 데이터 증강 작업이 수행

 

2.1. 데이터 증강의 한계

  • 데이터 증강은 신경망의 구조나 학습 기법의 수정 없이 정규화를 적용할 수 있다는 장점도 있지만 한계도 명확
  • 특정 도메인에 적합하지 않은 경우 성능 향상이 제한될 수 있음
  • 따라서 데이터 증강은 새로운 지식을 배우는 것이 아니라 최적화를 수월하게 수행할 수 있도록 도와주는 측면이 강함

 

3. 가중치 감쇠(Weight Decay)

  • 손실함수를 수정하는 방법
  • norm은 벡터의 크기나 길이를 측정하는 방법중 하나
  • 가중치 파라미터의 L2 norm을 구하고 기존의 손실함수와 함께 이 노름을 같이 최소화하도록 함으로써 모델의 학습을 방해하는 형태로 동작

 

3.1. 작동 원리

  • 가중치 감쇠는 손실 함수에 가중치의 제곱합을 추가하여 가중치가 너무 커지는 것을 방지
  • 수식으로는 다음과 같이 표현

 

여기서 L(

 

  • 앞서 말했듯이, 가중치 감쇠는 학습 과정에서 손실 함수에 가중치의 제곱합을 더하는 방식으로 이루어짐
  • 가중치가 커질수록 손실 값이 증가하기 때문에, 네트워크는 가중치 파라미터의 L2 노름과 기존의 손실 값을 동시에 최소화 하도록 학습하게 됨
  • 이 손실 함수 때문에 가중치 파라미터가 학습 과정에서 점점 원점으로부터 멀어지는 것을 방지하는 효과가 발생

출처: https://towardsdatascience.com/types-of-regularization-in-machine-learning-eb5ce5f9bf50

  • 그림으로 표현하면 L2 정규화는 L2 원(녹색원) 내부에 있는 기존의 최적화 함수(파란색)에서 손실이 최소인 지점을 찾는 것을 의미

 

3.2. L1 정규화

L1 정규화는 L2 norm 대신 L1 norm을 사용한 가중치 감쇠입니다. L1 정규화의 수식은 다음과 같습니다

 

 

출처: https://towardsdatascience.com/types-of-regularization-in-machine-learning-eb5ce5f9bf50

L1 노름을 활용한 가중치 감쇠는 녹색 다이아몬드 내부에 있는 손실 함수(파란색)의 손실이 최소인 지점을 찾는 것을 의미합니다. 이는 L2 노름과 다르게 가중치 파라미터들의 값이 희소(Sparse)하도록 제한된다는 의미입니다. 벡터가 희소(Sparse)하다는 의미는 많은 가중치 값이 0이 되도록 유도한다는 의미이고, 모델이 중요한 특징만을 선택하고 나머지 특징을 무시하도록 도와준다는 의미입니다. 따라서, L1 정규화는 가중치를 희소하게 만들어 모델의 해석성을 높일 수 있습니다.

 

3.3. 가중치 감쇠의 구현

가중치 감쇠는 파이토치 옵티마이저를 생성할 때 설정을 통해 구현할 수 있습니다. weight_decay의 기본 값은 0으로 되어 있으므로 가중치 감쇠가 기본적으로 적용되지 않으므로 활성화하려면 weight_decay 값을 지정해야 합니다

# 옵티마이저 정의 (SGD 옵티마이저를 사용하고 weight_decay 파라미터를 추가)
optimizer = optim.SGD(model.parameters(), lr=0.01, weight_decay=0.001)

 

3.4. 가중치 감쇠의 단점

보통의 정규화 기법들은 학습을 방해하는 형태를 취함으로써 오버피팅을 최소화하는 목적을 달성합니다. 그중에서도 가중치 감쇠는 다른 정규화 기법에 비해 학습을 방해하는 성격이 강합니다. 이로 인해 모델 성능이 저하될 수 있습니다.

 

4. 드롭아웃

4.1. 드롭아웃의 동작 방식

  • 드롭아웃은 임의의 노드를 일정 확률로 생략하여 학습에 참여하지 않도록 하는 방법
  • 데이터를 신경망에 통과시키는 과정에서 노드가 생략되므로 역전파에서도 제외됨
  • 드롭되는 노드는 매 미니배치마다 이항분포를 활용하여 랜덤으로 설정
  • 노드의 드롭 확률은 하이퍼파라미터 p로 사용자가 최적의 설정값을 찾아 주어야 함
  • 드롭아웃은 학습에서만 적용되고 추론에서는 드롭되는 노드 없이 모든 노드가 항상 추론에 참여

 

4.2. 드롭아웃의 구현

보통 드롭아웃이 구현되는 위치는 활성 함수와 다음 계층의 사이입니다. 파이토치에서는 미리 구현된 드롭아웃 계층을 제공하고 있으므로 이를 활용하면 됩니다. 참고로, 신경망의 입력 계층 이전과 출력 계층 이후에는 드롭아웃이 적용되지 않습니다. 하이퍼파라미터 p는 보통 0.1에서 0.5사이의 0.1 단위 값으로 튜닝한다고 합니다.

# 드롭아웃 확률 정의
p = 0.5

# 모델 정의
model = nn.Sequential(
    nn.Linear(10, 100),
    nn.ReLU(),
    nn.Dropout(p),
    nn.Linear(100, 50),
    nn.ReLU(),
    nn.Dropout(p),
    nn.Linear(50, 20),
    nn.ReLU(),
    nn.Dropout(p),
    nn.Linear(20, 1)
)

 

또한, 파이토치의 nn.Module을 상속받은 클래스는 train()과 eval() 메서드를 제공하여 모델의 학습 모드와 추론 모드를 변경할 수 있습니다.

# 학습 모드
model.train()

# 추론 모드
model.eval()

 

4.3. 드롭아웃의 한계

  • 드롭아웃은 임의의 노드를 학습에서 생략하여 학습을 방해하는 방식으로 동작
  • 드롭아웃이 적용되면 일반화 성능이 개선될 수는 있으나, 수렴 속도가 저하될 수 있고 학습 오차가 증가할 수 있음
  • 또한, 하이퍼파라미터가 추가됨으로써 사용자의 추가적인 튜닝을 요구

 

5. 배치 정규화

  • 배치 정규화(batch normalization)가장 널리 사용되는 정규화 기법으로, 드롭아웃과 유사하게 신경망 계층으로 구현되어 작동할 수 있는 정규화 기법
  • 기존의 정규화 기법은 학습을 방해하는 형태로 작용하기 때문에 학습 및 수렴 속도가 느려지게 되는 단점도 존재
  • 그러나, 배치정규화 기법은 학습 속도를 비약적으로 향상시키고, 일반화 성능까지 개선할 수 있는 방법
  • 드롭아웃과 마찬가지로 학습과 추론에서의 동작 방식에 차이가 있음

 

5.1. 공변량 변화 문제

  • 공변량 변화 문제(Covariate Shift)는 학습 데이터와 테스트 데이터의 분포가 다를 때 발생
  • 학습 데이터를 이용해 모델을 학습시켰지만, 테스트 데이터의 분포가 학습 데이터와 다를 때 모델의 성능이 저하되는 것을 말함
  • 내부 공변량 변화 문제는 신경망의 각 레이어에서 입력 데이터의 분포가 변화하는 현상을 말함

 

5.2. 배치 정규화의 작동 원리

  • 배치 정규화는 미니배치 분포를 정규화하여 내부 공변량 변화 문제를 해결하기 위해 제안됨
  • 미니배치를 평균 0, 분산 1인 정규분포로 변환하는 방식
  • 이를 통해, 각 레이어의 입력 데이터를 정규화

 

5.3. 배치정규화의 구현

  • 배치정규화 기법은 신경망 내부에 계층으로 구현
  • 파이토치에서는 배치 정규화 계층을 제공
  • 원래는 선형 계층과 활성 함수 사이에 넣는 것이 논문의 제안이였으나, 현재는 많은 사람들이 활성 함수와 다음 선형 계층 사이에 넣는 것을 선호함
# 모델 정의
model = nn.Sequential(
    nn.Linear(10, 100),
    nn.BatchNorm1d(100),  # 배치 정규화 추가
    nn.ReLU(),
    nn.Linear(100, 50),
    nn.BatchNorm1d(50),  # 배치 정규화 추가
    nn.ReLU(),
    nn.Linear(50, 20),
    nn.BatchNorm1d(20),  # 배치 정규화 추가
    nn.ReLU(),
    nn.Linear(20, 1)
)

 

5.4. 배치정규화의 장점과 단점

  • 튜닝이 필요한 하이퍼파라미터가 없음
  • 일반화 성능 개선과 학습, 수렴 속도가 빨라짐
  • 순환신경망이나 트랜스포머와 같은 시퀀셜 데이터를 다루는 환경에서는 사용할 수 없음

 

참조

https://towardsdatascience.com/types-of-regularization-in-machine-learning-eb5ce5f9bf50

 

Types of Regularization in Machine Learning

A beginner's guide to regularization in machine learning.

towardsdatascience.com

 

https://ko.d2l.ai/chapter_deep-learning-basics/environment.html

 

3.16. 환경 — Dive into Deep Learning documentation

 

ko.d2l.ai