본문 바로가기
  • 기술을 이야기하지만 사람을 생각합니다.
20. 인공지능과 딥러닝

[딥러닝개념] 딥러닝 효과적으로 학습하기(2) (ft. regularization)

by WE DONE IT. 2019. 1. 13.


이 글은 최성준 박사님의 <논문으로 짚어보는 딥러닝의 맥>의 'Overfitting을 막는 regularization' 강의에서 소개한 Ian Goodfellow의 Deep Learning 책에서 Regularization 챕터에서 나온 기법들을 소개합니다. 잘못된 부분이 있다면 알려주세요!


이전글 <[딥러닝개념] 딥러닝 효과적으로 학습하기(1) (ft. regularization)> 보기




Regularization for Deep Learning

Ian Goodfellow의 <Deep Learning> 책의 Chp7. Regularization for deep learning에서 나온 기법들에 대해서 소개합니다.



머신러닝에서 주요 문제는 '학습셋뿐만 아니라 새로운 데이터(new input) 또한 어떻게 잘 맞추는가'이다. 이 문제에 답하기 위해서는 오버피팅을 해결해야 하며, 가장 효과적인 해결책은 정규화이다. 다양한 정규화 방법 중 하나는 모델의 복잡도가 높아질 수록 불이익(패널티)을 주는 것이다.


이 책에서 정규화(regularization)는 training error를 줄이는 게 아닌, generalization error(일반적으로 train error - test error)를 감소시키기 위한 것이라고 정의했다.


We defined regularization as “any modification we make to alearning algorithm that is intended to reduce its generalization error but not its training error.”


1. Parameter Norm Penalties

비용함수에 제곱을 더하거나(L2) 절댓값을 더해서(L1) 웨이트의 크기에 제한을 준다.
  • L2 weight decay (제곱값)
    > L2 파라미터는 ridge 회귀분석 또는 tikhonov 정규화로도 알려져 있음
  • L1 weight decay (절댓값)
    > LASSO는 선형모델의 L1 패널티와 최소제곱법(LSM)을 합친 모델

2. Dataset Augmentation

머신러닝에서 가장 효과적인 정규화 방법은 학습셋의 크기를 늘리는 것이다. 

물론 우리가 가지고 있는 데이터의 수는 제한적이기 때문에, 학습셋에 가짜 데이터(fake data)를 포함할 수 있다. 

Augmentation 하는 방법

  • 이미지 반전
  • 이미지 밝기 조절
  • 서브샘플링(subsampling)
  • 노이지(noise) 넣기

Augmentation 주의사항

학습셋 크기를 늘리기 위해 데이터를 변환할 때, 데이터의 특징을 고려해야 한다. 
예를 들어, b와 d, 6과 9처럼 180도를 뒤집은 것과 같은 데이터의 경우에는 좌우 반전하여 데이터를 늘리는 것은 적절하지 않는 방법이다. 

3. Noise Robustness

머신러닝에서 Robust란?

머신러닝에서 일반화(generalization)는 일부 특정 데이터만 잘 설명하는(=overfitting) 것이 아니라 범용적인 데이터도 적합한 모델을 의미한다. 즉, 잘 일반화하기 위해서는 이상치나 노이즈가 들어와도 크게 흔들리지 않아야(=robust) 한다.

Rubust한 모델을 방법

노이즈나 이상치(outlier) 같은 엉뚱한 데이터가 들어와도 흔들리지 않는 모델을 만들기 위한 방법으로 일부러 노이즈를 주는 방법이 있다. (바이러스를 일부러 몸에 노출시켜 항체를 만드는 예방접종과 비슷한 원리라고 볼 수 있다.)


레이어 중간에 노이즈를 추가(noise injection)하는 게 파라미터를 줄이는 것(L2 weight decay)보다 강력할 수 있다. 

  • 웨이트(weight)에도 노이즈를 넣어준다. (히든 레이어를 드롭아웃 하는 것 보다 덜 엄격한 느낌이 든다)
  • classification 할 경우 라벨을 부드럽게(label-smoothing) 한다. (예: 1,0,0 -> 0.8,0.1,0.1)

4. Semi-Supervised Learning

비지도 학습과 지도 학습을 합친 것으로, 딥러닝에서는 representation을 찾는 과정이다. CNN을 생각해보면, 컨볼루션과 서브샘플링이 반복되는 과정인 특징선택(feature extraction)이 일종의 representation을 찾는 과정이다. 컨볼루션 레이어를 정의할 때 사전학습(pre-training)을 하면 비지도 학습에 적합한(=라벨링 되지 않은) representation을 한다. (AutoEncoder가 적합한 방법)

5. Multi-Task Learning

한번에 여러 문제를 푸는 모델이다. (예: 얼굴을 통해서 나이/성별을 분류하는 모델, 한번에 수학/과학 문제를 푸는 과정) 


Muti-task learning[그림] 같은 input이지만 목적에 따라 나누어지는 구조

Shared 구조를 덕분에 representation를 잘 찾아준다. 서로 다른 문제(task) 속에서 몇 가지 공통된 중요한 요인(factor)이 뽑히며, shared 구조를 통해서 representation을 찾을 수 있다. 모델의 앞단에 있는 shared 구조 덕분에, 각각의 요인을 학습시킬 때보다 더 좋은 성능을 낸다. 

(최근에 Google의 NLP에서는 감정분석/번역 등 굉장히 다양한 멀티태스크러닝을 통해서 모델 성능이 좋아진다는 연구를 발표하기도 함)


딥러닝 관점에서 multi-task learning을 하기 위해서는 모델의 학습셋으로 사용되는 변수는 연관된 다른 모델의 변수와 두 개 이상 공유한다는 가정이 전제되어야 한다.

From the point of view of deep learning, the underlying prior belief is the following: among the factors that explain the variations observed in the data associated with the different tasks, some are shared across two or more tasks.

6. Early Stopping


Early Stopping[그림] Early stopping(조기 종료)가 필요한 경우


학습셋 오류는 줄어들지만 검증셋 오류는 올라가면 멈추는 것을 의미한다. 간단하고 효과적이여서 정규화 방법으로 많이 활용된다.


이전 글에서도 early stopping에 대한 개념을 간략하게 설명하였다.


2. Early Stopping (조기 종료)

Epoch 수(학습 반복 횟수)가 늘어날수록 학습셋에 대한 오차는 줄어들지만, 검증셋의 오차가 증가하며 오버피팅이 발생할 수 있다. 따라서, 이전 에폭과 비교해서 오차가 증가하면 오버피팅이 발생하기 전에 학습을 멈추는 것을 'early stopping'이라고 한다.

7. Parameter Typing and Parameter Sharing

여러 파라미터(예: CNN)가 있을 때 몇 개의 파라미터를 공유하는 역할을 한다. 어느 레이어의 파라미터를 공유하거나, 웨이트를 비슷하게 함으로써 각각의 네트워크에 파라미터 수를 줄어드는 효과가 있다. 파라미터 수가 줄어들면, 일반적인 퍼포먼스가 증가하는 효과가 있어서 모델의 성능이 좋아지는 데 도움이 된다.

  • Parameter Typing (파라미터 수를 줄이는 역할)
    : 입력이 다른데 비슷한 작업(task)을 하는 경우 (예: MNIST, SVHN 데이터셋) 특정 레이어를 공유하거나 두 개의 웨이트를 비슷하게 만든다.
  • Parameter Sharing
    : 같은 컨볼루션 필터가 전체 이미지를 모두 돌아다니면서 찍기 때문에 대표적인 예를 CNN이 있다.

8. Sparse Representations

어떤 아웃풋의 대부분 ‘0’이 되길 원하는 것이다. 히든 레이어가 나오면 히든 레이어의 값을 줄이는 패널티를 추가하면 일종의 Sparse representation 찾는 데 도움이 될 수 있다. 

  • Sparse weights (L1 decay)
    : 앞단의 행렬(네트워크의 웨이트)에 0이 많은 것
  • Sparse activations 
    : 뒷단의 행렬에 0이 많은 것으로 더 중요하게 여김
    • ReLU
      • 0 보다 작은 activation은 0으로 바꿈
      • 아웃풋에 0이 많아지면 sparse activation 할 수 있으므로, 성능이 좋아짐 

9. Bagging and Other Ensemble Methods

앙상블 방법이라고 알려진 model averaging이 정규화에 효과적인 이유는 각각의 모델들은 학습셋에서 같은 오류를 만들지 않기 때문이다.
  • Variance: 어떤 예측을 할 때 결과가 다양하게 나오는 것
  • Bias: 평균에서 멀어졌으므로, 그냥 틀린 것...
  • Bagging: 나온 결과값들을 평균
    > 전체 학습셋의 일부를 학습시켜 여러 개의 모델을 만든 뒤, 그 모델에서 도출된 결과값의 평균을 도출하는 것
  • Boosting: sequential하게 weak learner 결과값의 차이를 계산하여 학습 모델을 하나씩 더해가는 과정 (AdaBoost)

10. Dropout



이전 글에서도 dropout에 대한 개념을 간략하게 설명하였다.

4. Dropping Out (드롭 아웃)

Dropout은 오버피팅 문제를 해결하고자, 일반화(generalization) 성능을 향상시키기 위한 방법이다.


학습할 때 뉴런의 일부를 네트워크 상에 존재하지 않는 것처럼 랜덤으로 '0'으로 만든다(= 비활성화). 드롭아웃의 확률은 일반적으로 p=0.5를 사용하며, 학습할 때만 드롭아웃을 하며 테스트할 때는 모든 뉴런을 사용한다.

Q. 드롭아웃을 하면 왜 일반화 성능이 향상될까?

하나의 모델로 학습하면 오버피팅이 발생할 수 있지만, 드롭아웃을 통해 앙상블 학습(ensemble learning)처럼 마치 여러 모델을 학습시킨 것과 같은 효과를 주어 오버피팅 문제를 해결할 수 있다. (드롭아웃은 딥러닝계의 '집단지성'으로도 볼 수 있다.)

11. Adversarial Training

Adversarial Training[그림] GoogleNet에서 adversarial training을 활용한 예시



사람이 관측할 수 없을 정도의 작은 노이지를 넣으면, 완전 다른 클래스가 나온다. 입력은 아주 조금 바꼈으나, 출력이 매우 달라지며, 그때의 기울기가 매우 가파르다. (파라미터가 조금 변해도 결과값이 달라진다, overfitting) 오버피팅인데도 성능이 좋은 이유는 엄청나게 많은 모델에 오버피팅을 시켜서 성능이 잘 나온다(???.. 약간 어패가 있는 말)


Adversarial Training 관련 아티클




References

1. Goodfellow, I., Bengio, Y., Courville, A., & Bengio, Y. (2016). Deep learning (Vol. 1). Cambridge: MIT press.



댓글