타임트리

Problems of MLP 본문

Deep Learning/Tips

Problems of MLP

sean_j 2022. 6. 13. 00:50

이번 게시물에서는 MLP를 사용할 때 발생하는 문제점을 알아보고, 이러한 문제점을 해결하기 위한 방법에 대해서도 함께 다룬다.

1. Problems of MLP: Overfitting

(1) Model Capacitiy(Complexity)

 Regression 문제를 가정해보자. Real vlaue의 분포가 3차 함수와 유사할 때, 두 가지 모델을 파라미터 관점에서 생각해보자.

 

 

$H(x)$는 2개의 파라미터를 갖고 있는 데 반해, $H_2(x)$는 4개로 더 많은 파라미터를 갖고 있다. 이처럼 모델의 파라미터 개수가 증가할수록 즉, 모델이 복잡해질수록 더 복잡한 함수를 근사할 수 있다.

 

 복잡한 현상을 예측하기 위해 MLP의 Model Capacitiy를 크게 만드는 방법은 두 가지가 있다.

(1) Layer를 늘린다.

(2) Layer 내의 hidden unit을 증가시킨다.

 

그럼 파라미터를 늘릴수록 더 복잡한 현상을 예측할 수 있다면, 무작정 capacity를 크게하는 것이 좋을까?

 

(2) Overfitting

 이번에는 O, X 두 가지 클래스가 존재하는 binary classification 문제를 생각해보자.

 

left: Train set,  right: Test set

 

 왼쪽 그림은 Train set이라고 할 때, 빨간색으로 표현한 일종의 outlier에 해당하는 sample point가 존재한다고 하자. Model capacity가 높아질수록 Decision boundary(결정 경계)는 초록색 직선에서 파란색 선으로 변한다. Train set에 대해서는 복잡한 파란선이 샘플을 완벽하게 분류하고 있다.

 그런데 오른쪽의 Test set을 보면,  오히려 model capacity가 더 높은 파란 곡선이 Test set에 대해서는 잘 예측하지 못하는 것을 볼 수 있다. 이처럼 Train set에 대해 과도하게 fitting되어서 일반화되지 못하는 경우를 overfitting(과적합)이라고 한다.

 

  •  True Risk와 Empirical Risk

 

 True Risk란 모든 데이터에 대해 계산한 오차, Empirical Risk는 샘플에 대해 계산한 오차를 의미한다. 통계학 관점에서 바라보자면, True Risk는 population, Empirical Risk는 population에서 추출한 sample에 대응되는 오차라고 볼 수 있다. 마찬가지로, 우리는 True Risk를 현실적으로 구할 수 없다. 따라서, True Risk를 잘 대변한다는 가정 하에 Empirical Risk를 줄여나감으로써 모델을 훈련을 진행한다.

 

 앞서 설명한 Overfitting은 Empirical Risk가 True Risk를 잘 대변하지 못할 때 발생한다. 아래의 그림은 그 예시를 보여준다. 즉, 왼쪽의 그림이 True 분포일 때, 오른쪽 그림은 예측값의 분포를 나타낸다. 만약 다른 True sample이 들어오면, 예측이 안좋을 것이라 예상할 수 있다. 즉, 이 경우 Empirical Risk는 낮지만, True Risk는 매우 큰 현상이 발생한다. 

 

 

Overfitting이란, 모델이 복잡할 경우 모델이 train 데이터를 외워버려서 test set에 일반화할 수 없는 경우를 말한다. 다시 말해, model capacity가 증가하면 복잡한 시스템을 예측할 수 있지만, 동시에 train set을 외워버릴 수 있다는 단점이 생긴다. 

 

(3) Regularizations

 Regularization은 모델 복잡도에 대한 패널티를 뜻하며, Overfitting을 방지하고 일반화 성능을 높이는 데 도움을 준다. 많은 방법 중 여기서는 L2 Regularization과 Dropout에 대해 알아보자.


  • L2 Regularization

 L2 Regularization은 간단히 말해 파라미터의 값이 너무 커지지 않도록 제약을 주는 방법이다. 

$$Cost = \frac{1}{n}\sum_{i=1}^{n}{\{L(y_i,\hat{y}_i) + \frac{\lambda}{2}|w|^2\}}$$

 

왼쪽: Loss function만의 contour plot, 오른쪽: L2 regularization term을 추가한 contour plot

 

 위 그림은 Loss function contour plot과 규제항을 추가한 contour plot을 나타낸다. 왼쪽 그림을 보면, Loss function의 global minimum은 파란점이다. 그런데, 이 점은 특정 train set에만 해당하는 global minimum이므로 만약 train set이 달라진다면, global minimum도 달라진다. 따라서, 다른 데이터셋이 들어온다면 일반화에 문제가 생길 소지가 있다.

 우측 그림의 초록색은 규제항을 나타낸다. 따라서, 규제항을 추가하여 train set의 global minimum으로 수렴하지 않고, 손실함수와 규제항을 동시에 고려한 minimum으로 수렴하게 유도한다.


  • Dropout

 Dropout은 model capacity를 강제로 줄이는 방법이다. 즉, 사용자가 정의한 확률 $p$만큼 랜덤하게 선택된 node의 weight를 0으로 만들어 아무 기여를 하지 못하게 만든다. 

 

 

Dropout은 다음과 같은 장점을 가지고 있다.

  • 강제로 파라미터의 수를 줄임으로써 general한 예측을 가능하게 한다.
  • 특정 node가 꺼지면서 상대적으로 잘 훈련되지 않은 다른 node가 잘 훈련되도록 한다.
    • 특정 노드의 영향력이 크다면 이를 제외한 다른 노드는 어떤 값을 갖든 결과에 영향을 주지 못하기 때문에 최적화가 잘 이루어지지 않는 문제가 생긴다. Droupout은 이러한 노드를 끄게함으로써 나머지 노드가 잘 학습될 수 있도록 할 수 있다.
  • 선택되는 노드에 따라 다른 model로 볼 수 있으므로 앙상블 효과가 나타난다.

 

2. Problems of MLP: Gradient Vanishing

 Graident Vanishing(기울기 소실)이란, 역전파 과정에서 입력층으로 올라갈수록 gradient가 점차적으로 작아지는 현상을 말한다. gradient가 매우 작은 값을 갖게 되면 깊은 층에 있는 파라미터는 업데이트가 거의 일어나지 않는 문제가 발생한다.

 

 예를 들어, 하나의 은닉층에서 활성화 함수가 sigmoid인 경우를 생각해보자. 그리고 input의 절대값이 크다면 sigmoid의 결과는 0 또는 1에 수렴하게 되면서 기울기가 0에 가까워진다. 이러한 경우, 역전파 과정에서 전파시킬 기울기가 점차 0에 가까워지며(사라지며) 입력층으로 올라갈수록 제대로 업데이트가 일어나지 않는 문제가 생긴다.

 

 Gradient vanishing 문제를 해결하는 가장 간단한 문제는 활성화 함수로 sigmoid 함수를 사용하지 않는 것이다. 특히 최근에는 ReLU 계열의 함수를 주로 사용한다. ReLU 함수의 형태는 다음과 같다.

 

  • Rectified Linear Unit Activation Function

$$ReLU(x) = max(0,x)$$

 

 

 단, ReLU는 0보다 작은 input의 경우 아예 전달을 하지 않기 때문에, 이를 해결하고자 Leaky ReLU, ELU 등 다양한 변형을 사용한다.

 

3. Other Techniques: Xavier Initialization and Batch Normalization

(1) Parameter Initialization

 모델을 만들 때, 파라미터를 업데이트하며 최적화하기 위해서는 파라미터를 0이 아닌 값으로 초기화해야 한다. 따라서 파라미터를 임의의 값으로 초기화하고 훈련을 진행하는데, 가중치를 어떻게 초기화하느냐에 따라 모델 성능이 달라질 수 있다. 

 예를 들어, 활성화 함수로 Tanh 함수를 사용한다고 해보자. Tanh는 (-1,1)의 범위를 갖는 함수이며 수식과 그래프는 다음과 같다.

$$tanh(x) = \frac{2}{1-e^{-2x}}-1$$

 

만약, 표준정규분포에서 추출한 값에 임의의 $k$를 곱한 값으로 파라미터를 초기화한 뒤 tanh를 활성화 함수로 사용한다면 어떻게 될까? 다음과 같이 2가지 경우를 생각해볼 수 있다.

  • $k$가 작은 경우: tanh를 통과할수록 0으로 수렴
  • $k$가 큰 경우: tanh를 통과할수록 -1과 1로 수렴

이처럼 파라미터를 초기화하는 방법에 따라 모델의 성능이 영향을 받는다. 따라서, 좋은 성능을 가질 수 있도록 파라미터를 초기화하는 것이 좋다.

 

Xavier Initialization, He Initialization 등의 방법이 있으며 이러한 방법을 사용할 필요가 있다.

 

 

(2) Batch Normalization

 Batch normalization은 mini-batch가 이전 layer의 output이 다음 layer로 전달될 때, 이 값들을 평균을 0, 표준편차 1을 갖도록 정규화해주는 것을 말한다.  

 

$$BN(X) = \frac{X-\mu_b}{\sigma_{b}}$$

 

어떠한 이유로 batch normalization이 효과가 있는지는 아직 의견이 분분하지만, 확실한 사실은 Batch Normalization을 사용하는 것이 더 좋은 성능을 낸다는 것이다.