1. Learning rate
이전 포스팅에서 optimize방식에 대해서 다루어보았다. 모든 방식은 learning rate를 하이퍼 파라미터로써 갖음을 확인하였는데, 어떤 형태의 하이퍼 파라미터가 가장 좋은것이고, 어떻게 이 값을 결정할까?
우리의 최종 목표는 빨간 선의 경향을 갖는 learning rate를 찾아야 한다. 이를 찾기 위해서는 다양한 learning rate를 실험해야 하는데, 범위를 좁히는 방법으로는 step decay, expotential decay, 1/t decay가 있다. 학습을 진행시킴에 따라 더이상 Loss가 줄어 들지 않고 수렴하는 형태를 띌ㄹ 때 위와 같은 방식으로 learning rate를 업데이트 해준다.
이러한 방식을 learning rate decay라고 한다.
하지만 이는 어디까지나 차선책일 뿐, 우선은 learing rate decay 없이 다양한 범위의 learning rate를 시험해보고, 올바른 learning rate구간을 찾은 이후에서나 사용하라고 하더라
2. 가중치 업데이트 (2차 근사)
gradient descent를 이용하여 가중치를 업데이트 할 때 지금까지 1차원 미분을 이용하여 다음과 같이 linear approximation하였다.
다른 방법으로는 미분 값 뿐만 아니라, 2차 미분값의 행렬인 Hessian을 사용하여 2차 근사를 하는 방법이 존재한다.
이에 대한 구현 방식을 확인해보자.
이 방식에 장점으로는 learning rate를 포함한 하이퍼 파라미터가 없기 때문이다. 왜 learning rate가 없나고 하니, linear approximation에서는 그 방향으로 얼마나 가야 optimal인지 알 수 없었기 때문에 learning rate가 필요하였지만 quadratic approximation은 Hessian을 활용하여 minima으로 가기 때문이다.
// 근데 2차 근사도 learning rate 필요한거 아냐? weight update해서 optimal을 지나칠 수도 있지 않나?
하지만 이 방식에도 단점은 존재하는데 Hessian이 O(N^2)의 메모리를 필요하고, 파라미터 업데이트 과정에서 이 Hessian의 역행렬을 구할 때 O(N^3)이라는 시간이 걸린다는 것이다. 실제 구현에서는 파라미터의 수가 매우 많기 때문에 실질적으로 이를 사용하기에는 어려움이 존재한다. 그래서 Hessian의 역행렬을 직접 구하는 것이 아닌, Hessian의 역행렬의 근사값을 O(N^2)의 복잡도로 구하는 방식이 나타났다. 이에 대한 예시로는 BGFS가 유명한데, Hessian의 역행렬을 형성하지도, 저장하지도 않는다. full batch이고, deterministic mode상황에서 잘 작동하지만 min-batch에서는 좋지 않은 결과를 나타내지 않아(활발히 연구중이긴 함) 실질적으로 별로 사용하진 않는다더라~
3. Regularization
1. Model Ensembles
학습을 하면서 Loss는 쉽게 줄어들지만, 오버피팅 되면서 train time에서의 accuracy와 test time에서의 accuracy의 간극이 벌어지게 된다. 이는 일반화가 잘 되지 않음을 의미하는데 이를 위해 사용되는 것이 Model Ensembles이다.
이 방법은 다양한 모델을 트레이닝하고, 마지막에 결과를 평균내는 단순한 방식인데, overfitting을 방지해주고, 2%정도의 추가 퍼포먼스 효과를 갖는다.(일정 accuracy에 수렴하면 2%를 올리기는 매우 어려운데 이는 꽤 효과적인 수치이다.)
앞으로 서술할 것들은 어떻게 다양한 모델을 구할 것인가에 대한 것이다.
첫번째 방법으로는 하나의 모델을 학습하면서 만든 snapshots을 이용하는 것이다.
두번째 방식으로, 다양한 local minima를 갖는 모델의 snap shot을 활용하는 것이다. learning rate를 크게 하면 Loss가 튀어서 다른 minima로 가던 것을 기억할 수 있다. 이 learning rate의 크기를 조정함으로써 다양한 minima point를 갖는 모델의 snap shot을 얻을 수 있고, 이를 이용하여 ensemble하는 방식이다.
세번째 방식으로는 Polyak averaging이 있다 // 더 공부해보기
2. regularization term
성능을 높이는 다른 방법으로는 Regularization이 있다. 여러가지 방법으로 모델을 overfit하지 않게 하고 일반화 하고자 하는 방식이다. 가장 쉬운 방법으로는 loss에 regularization term을 추가하는 것이다.
하지만 이 방식은 NN에서는 자주 사용되지 않는다고 한다.
// 왜 잘 사용하지 않는지, 그럼 어떤 문제에서 잘 사용되는지
3. Dropout
세번째 방법으로는 Dropout이다. 네트워크에 뉴런이 있을 때 이 중 일부를 일정 퍼센티지 만큼 죽이는 것이다. 다양한 경우에 수가 나타날 텐데, 각 경우는 서로 다른 모델처럼 표현되기 때문에, 나중에 합칠 때 앙상블 효과가 나타나는 것이다. 어떻게 이게 Regularization효과를 나타낼까?
dropout하면 분류할 때 마다 다른 feature를 확인하여 결정해야하는데, 이렇게 됨으로써 특정 feature간의 상호작용보다는 다양한 feature를 종합적으로 보며 분류하게 되므로, 일반화 성능이 올라가게 된다.
어떻게 다양한 dropout의 경우의 수를 test time에 하나로 합칠까? test-time에서도 랜덤성을 average out 하고 싶으므로 다음과 같이 표현할 수 있다.
하지만 적분 연산이 너무 어렵기 때문에 적분의 근사치를 찾는다.
test time와 training time의 값을 맞춰주기 위해서 test time 시에는 dropout 확률인 p를 곱해줘야 한다. 또한 test time test time에서는 모든 뉴런이 언제나 활성화 되어있기 때문에 activation을 scacle(p로 곱하여 크기를 일치시켜줌)하여 test time의 output과 training time에서의 예측된 output의 결과를 갖게 해야한다.
이를 코드로 표현하면 다음과 같다.
test time에 scale하지 않고 train time에 scale을 해주는 inverted dropout도 있다.
이와 같이 Regularization은 Training time에 랜덤성을 추가하며 학습하고, Test time에 그 랜덤성을 평균화 함을 통해 이루어진다. 그 관점에서 보았을 때 Batch Normalization도 하나의 Regulraization 방식이다. 그렇기 때문에 실제론 BN과 Dropout을 함께 쓰지 않고 BN만을 주로 사용한다고 한다.
4. Data Augmentation
또 다른 방법으로는 데이터를 확대하는 것이다
하나의 데이터에 대해서, Flip하거나, 랜덤으로 Crop하거나, 색을 변형하는 등 Train time에 노이즈를 추가하여, Test time에 노이즈를 설명하게 하여 일반화 성능을 올리는 방법이 있다.
이외에도 Regularization을 위해 DropConnect, Fracional Max Pooling, Stochastic Depth 등을 활용할 수 있다.
4. Transfer Learning (전이 학습)
일반적으로 CNN을 활용하여 학습하려면 많은 데이터가 필요하다. (ImageNet : 14 million개의 이미지) 하지만 전이 학습을 이용한다면 훨씬 적은 데이터로도 학습을 시킬 수 있다. 기본적으로 전이 학습의 원리는 이미 학습된 모델에서 일부만 재학습 시키는 것이다. 예시로 다음 사진을 보자.
1000개의 클래스를 갖는 분류기가 있다고 하였을 때, 가장 마지막의 linear classifier만 필요한 데이터로 재학습한다면 우리는 원하는 원하는 효과적인 모델을 만들 수 있다. 어떤 레이어를, 얼마나 변경할지는 미리 학습된 모델과 재학습할 데이터에 따라 다르다. 밑의 표는 그 예시를 일반화 한 표이다.
이러한 CNN의 전이 학습은 꽤 많은 곳에 만연해있다. 다음은 그 예시들이다.
ImageNet으로 학습한 모델을 일부 개조하여 새로운 모델을 만들어 냈다. 여기서 새로 붙인 레이어들은 또 다른 학습된 모델을 조정한 것일 수 있다.
만약 이미지 데이터가 백만개보다 작다면, 유사한 데이터셋을 찾거나, 이러한 전이학습을 해야한다. 실질적으로 전자는 난이도가 너무 높기 때문에 후자를 선택하는 경우가 많다. 이를 잘 사용하기 위해서 Model Zoo에는 이미 학습된 모델이 제공된다.
'ML' 카테고리의 다른 글
Recurrent Neural Network (RNN) (0) | 2021.07.10 |
---|---|
CNN 구조 (0) | 2021.07.06 |
다양한 Gradient descent optimization (0) | 2021.07.05 |
인공 신경망 학습 (0) | 2021.07.05 |
합성곱 신경망 (0) | 2021.07.01 |