Regularization에 대해 꼭 생각해봐야하는 점(L2 regularization, dropout의 단점, early stopping의 단점, data augmentation의 단점)

모델이 validation set에 성능을 내지 못할때, training data에 overfitting이 되었을때

 

데이터를 더 많이 얻는 것은 좋은 방법이지만 항상 그럴 수는 없다.

 

그럴때 시도하면 좋은 것이 regularization

 

 

 

L2 regularization은 가중치 W의 L2 norm, L1 regularization은 가중치 W의 L1 norm을 더해주는데...

 

1. 여기서 하나 bias도 parameter인데 왜 가중치 W 항만 더해주는것인가?

 

모델의 거의 모든 parameter가 W에 집중되어 있기 때문에 bias를 더할수도 있지만 계산비용 대비 거의 차이가 없다고 한다

 

 

2. L2 regularization을 일반적으로 많이 사용한다.

 

L1 regularization을 사용하면 가중치 w가 sparse해진다.

 

sparse하다는 것은 w의 값에 0이 많다는 것

 

이렇게하면 w의 값에 0이 많아 메모리가 적어져서 모델을 압축하는데 도움이 된다고 말하지만, 크게 도움 되는 부분은 아니다.

 

그래서 L2 regularization을 많이 사용한다.

 

3. regularization term은 validation set으로 검증하여 가장 좋은 성능을 내는 hyperparameter를 찾는다.

 

다양한 값을 시도해보고 가장 좋은 성능을 내는 값을 찾는 노력이 많이 필요함

 

 

 

 

neural network에서는 L2 norm부분을 W 행렬 원소들의 제곱합으로 구성되는데 이를 특별히 Frobenius norm이라고 부른다.

 

L2 norm은 보통 벡터에서 각 원소들의 제곱합을 나타내는데, Frobenius norm은 벡터의 L2 norm을 일반화시켜 고차원의 행렬에서 말하는 것

 

 

4. weight decay는 L2 regularization의 또 다른 이름이다.

 

다음과 같이 L2 regularization이 적용된 cost function에서 backpropagation을 수행할 때

 

weight가 점점 줄어들면서 업데이트 되기 때문이다.

 

 

 

 

5. regularization은 왜 overfitting을 줄여주는가?

 

regularization term의 parameter를 매우 크게하면, 가중치 W는 자연스럽게 0에 가까워진다.

 

 

 

 

 

가중치의 원소들을 0으로 만드는 것은 일부 hidden unit을 제거하는 것과 마찬가지다.

 

완전히 제거한다는 것은 아니고, 일부 hidden unit의 영향력을 줄이는것과 마찬가지

 

그러다보니 원래 복잡한 신경망이 단순한 신경망으로 된다.

 

 

 

그래서 원래 복잡한 신경망이 가지는 오른쪽 분포에서 단순한 신경망이 가지는 왼쪽 분포로 이동시키는 효과가 있다.

 

validation set으로 여러 hyperparameter 탐색으로 중간으로 만드는 hyperparameter lambda를 찾는다면, 효과가 제일 좋을 것이다.

 

 

 

 

 

 

 

비슷한 직관으로 z = wx + b에서 w가 매우 크면 z값도 커질 것이고, w가 0에 가까우면 z도 0 주변에 있을 것인데

 

activation function을 그려보면 예를 들어 tanh를 사용할 때 z값이 0 주변에 분포한다면

 

activation function이 거의 선형에 가까워진다.

 

그래서 신경망이 linear activation을 사용하는 것과 비슷한 효과를 가지고, 이는 단순한 신경망으로 바뀌는 것과 마찬가지다.

 

그러다보니 복잡도가 줄어서 overfitting이 줄어드는 효과가 있다.

 

 

 

 

 

 

6. inverted dropout

 

dropout은 기본적으로 각 노드별로 확률에 따라 제거하거나 살리면 오른쪽과 같이 더 단순한 신경망으로 바뀌는데,

 

이 신경망을 training하는 기법이다.

 

 

 

 

 

보통 inverted dropout이라고 불리는 기법으로 구현할 수 있는데...

 

U(0,1)로 값을 생성하고, 어떤 특정 확률 keep_prob보다 작으면 살리고 크면 지워버리는데(랜덤을 구현하는 기본적인 방법)

 

# LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SIGMOID
Z1 = np.dot(W1, X) + b1
A1 = relu(Z1)
### START CODE HERE ### (approx. 4 lines)         # Steps 1-4 below correspond to the Steps 1-4 described above. 
D1 = np.random.rand(A1.shape[0], A1.shape[1])     # Step 1: initialize matrix D1 = np.random.rand(..., ...)
D1 = (D1 < keep_prob).astype(int)                 # Step 2: convert entries of D1 to 0 or 1 (using keep_prob as the threshold)
A1 = A1*D1                                        # Step 3: shut down some neurons of A1
A1 = A1/keep_prob                                 # Step 4: scale the value of neurons that haven't been shut down
### END CODE HERE ###
Z2 = np.dot(W2, A1) + b2

 

 

keep_prob만큼 살리면 D1 = (D1 < keep_prob).astype(int)는 0 아니면 1로 구성되어있다

 

여기에 A1을 곱해주면, A1은 D1이 1로 된 부분은 살아있고 0으로 된 부분은 지워져있는 것이다.

 

D1이 mask행렬이라는 말

 

여기서 핵심은 마지막에 A1을 rescaling하는건데

 

A1 = A1/keep_prob                                 # Step 4: scale the value of neurons that haven't been shut down

 

 

dropout을 하면 일부 값들이 지워지므로 점점 값이 작아진다고 할 수 있는데, 0과 1 사이의 keep_prob를 나눠주면서

 

activation의 기댓값이 dropout을 하지 않을 때의 activation 값과 동일하게 맞춰주는 효과가 있다고 한다

 

또한 이렇게 하면 test time에서 따로 scaling하지 않아도 되어서 test time을 간단하게 할 수 있다고도 하는데..(이거는 dropout layer만 쓰다보니 잘 안와닿나보네..)

 

test time과정에서는 dropout을 사용하지 않고, 원래 상태 그대로에서 prediction을 진행함

 

dropout을 사용하고 prediction을 하면 임의의 값이 산출되므로 오히려 noise가 더해짐

 

이론적으로는 dropout을 사용해서 prediction을 여러번해서 평균을 내는데.. 계산이 비효율적이고 하지 않아도 된다는 것이 알려져있다

 

https://luvimperfection.tistory.com/105

 

Dropout 논문 정리/번역

Dropout: A Simple Way to Prevent Neural Networks from Overfitting 문단 별 번역/요약Introduction1.1 (p.1) DNN의 문제 중 overfitting을 해결하기 위해, validation accuracy가 증가하지 않을 때까지 학습시키기, regularization, soft

luvimperfection.tistory.com

 

 

test시에는 weight를 확률 p로 scaling한 것을 사용하는 것과 dropout을 사용한 prediction을 k번해서 평균냈을때 비교해보면..

 

k가 클수록 서로 수렴한다는 것

 

 

 

 

7. dropout은 L2 regularization과 비슷하다

 

dropout을 하면 어느 한 unit에 집중되는 것보다 여러 unit에 weight가 분산되어서 Frobenius norm이 줄어드는 효과가 있다

 

실제로 dropout은 L2 regularization의 조정된 형태로 나타낼 수 있다는 것이 알려져있다

 

 

8. dropout의 probability는 layer마다 다르게 적용할 수 있다.

 

물론 그 최적의 확률인 hyperparameter가 더 많아진다는 단점이 있다

 

overfitting이 예상되는 weight가 큰 layer에는 높은 probability를 사용한다면 좋겠지

 

특히 input layer에서도 dropout을 쓸수는 있지만 굳이 잘 쓰지는 않는다.

 

 

9. 컴퓨터비전에서 dropout이 자주 사용된다.

 

이미지 데이터가 복잡한 형태이고, 이미지 데이터는 보통 부족하므로 사용했을때 보통 효과가 좋았다

 

다른 분야에서는 dropout이 오히려 효과가 없을 수 있다.

 

 

10. dropout network는 train하는데 시간이 오래걸린다.

 

매 iteration마다 hidden unit이 random하게 제거되기 때문에 계산되는 cost function이

 

제거되는 unit에 영향을 받기 때문에 매끄럽게 내려가지 않는다.

 

Although dropout is a potent tool, it has certain downsides. A dropout network may take 2-3 times longer to train than a normal network. Finding a regularizer virtually comparable to a dropout layer is one method to reap the benefits of dropout without slowing down training. This regularizer is a modified variant of L2 regularisation for linear regression. An analogous regularizer for more complex models has yet to be discovered until that time when doubt drops out.

 

 

11. computer vision의 image data augmentation은 매우 좋은 방법이 아니다.

 

overfitting이 된다면 training data를 많이 모으면 좋지만 모으는 비용이 비싸서 수집하기 어려울 수 있다.

 

computer vision에서 다음과 같이 image 하나가 있다면, 이를 좌우반전하거나 일부 crop하거나.. 같은 방법으로 data의 개수를 늘릴 수 있다.

 

하지만, 동일한 이미지를 조금만 변형시킨것을 추가한 것뿐이므로, 

 

완전히 새로운 독립적인 이미지를 추가한 것보다 데이터가 주는 정보력이 더 좋은 것은 아니다.

 

데이터 수집 시간 대비 데이터 양을 빠르게 늘릴 수 있다는 점에서 의미가 있다

 

 

 

 

여기서 또 하나 생각해야하는 건, 고양이 사진을 가로로 뒤집는건 의미있지만 위아래로 뒤집는건 경우에 따라 의미없다

 

고양이가 거꾸로 있는 사진은 보통 좋은 사진이 아니다.

 

 

12. early stopping은 생각해봐야할 단점이 있다.

 

training error를 그려보고, validation error를 그려본 다음,

 

다음과 같이 validation error가 올라가는 시점까지 epoch으로 사용해서 training하는 전략이 early stopping

 

초기에는 매우 작은 0에 가까운 w로 되어있다가 training하면서 w가 점점 커진다.

 

early stopping은 L2 regularization처럼 w의 중간 값을 찾아가는 과정

 

 

 

 

생각해봐야할 치명적인 단점이 있는데 먼저 머신러닝은 2가지 일을 하는 것이다.

 

1) cost function을 최적화하는 것

 

cost function을 최소로 하는 parameter를 찾는 것이다.

 

>> gradient descent로 수행

 

2) overfitting되지 않고 generalization을 잘 하는 것

 

>> regularization으로 수행

 

두 업무는 별개의 업무이다. gradient descent는 cost function을 최소로하는 것 외에 overfitting 여부는 관여하지 않는다.

 

early stopping은 cost function을 줄이다가, 중간 단계에서 그만 두는 과정인데.. 그러면서 동시에 overfitting도 막고자하는 것이다.

 

이렇게 2가지를 동시에 할려고하다보니 오히려 학습 후 generalization을 위해 해야할 일들이 복잡해지는 경향이 있다.

 

early stopping을 사용하는 대신에, L2 regularization을 사용해서 더 오랜 시간 training하는 방법이 있다.

 

이 방법이 오히려 전체 hyperparameter를 search 범위를 좁히는데 더 유리할 수 있다.

 

하지만 L2 regularization의 최적 hyperparameter 하나를 찾는데 오래 걸릴 수 있다.

 

early stopping은 gradient descent를 한번만 해봐도, 적당히 작은 epoch, 중간 epoch, 큰 epoch이 쉽게 보인다는 거

TAGS.

Comments