Neural Network을 학습시키는 전략에 대해서 다루어 보는 2번째 시간이다.
지난 시간에는 활성화 함수와, 데이터의 전처리, 가중치의 초기화, Regularization에 대해서 다루었고
이번 시간에는 Learning rate schedule, hyperparameter optimization과 같은 학습의 요소와 전략들과
모델 앙상블(Model ensemble), 전이 학습(Transfer Learning), 배치 학습(large-batch training)에 대해서 다룬다.
첫번째로 살펴볼 것은 Learning Rate Schedule이다.
constant learning rate schedule은 지금까지 적용해온 learning rate를 그대로인데, 처음 설정한 learning rate를 그대로 계속 사용하는 것이다.
NeuralNet을 빠르게 만들고 실험할 때는 거진 별도의 learning rate schedule을 쓰기보단 constant learing rate를 사용한다.
어떤 NeuralNet이 동작하느냐 마냐는 어떤 learning rate schedule을 쓰느냐와는 크게 상관이 없고, 복잡한 learning rate schedule을 통해 몇퍼센트의 정확도 향상을 이룰 수는 있기 때문에, 특정 task에 대해서 SOTA의 성능을 내고 싶다면 반드시 learning rate schedule을 통해 학습을 섬세하게 조정해야 한다.
또 하나 강조하고 싶은 것은 어떤 옵티마이저를 쓰는가에 따라 Learning rate scheduler를 어느 것을 사용해야 하는가에 대하여 문제가 복잡해질 수 있는데, RMS Prop이나 Adam과 같이 Learning rate가 보정되는 동적인 옵티마이저는 Constant Learning rate를 쓰더라도 잘 작동 (can go further)한다.
또 살펴볼 것은, 학습을 얼마만큼이나 시켜야 되는가에 대한 문제로 바로 early stopping이라는 개념이다.
보이는 세 그래프
checkpoint를 선택하는 것
validation set에 대해서 best인 모델의 파라미터를 저장
정말 유용한 휴리스틱한 방법으로 신경망을 학습시킬 때 꼭 쓰길 권장하는 전략이다.
하이퍼 파라미터를 선택하는 것에 대하서는 많은 의견들이 있다.
사람들이 흔히 시도하는 방법은 Grid Search이다.
예를 들어, Regularization의 strength와 Learning rate를 4
많은 수의 하이퍼 파라미터를 탐색하기 때문에 linear space보다는 log linear space를 탐색한다.
가능할 것 같지 않다
사람들은 대신 grid search보다는 random search
프로시저는 똑같다
range
range내의 random value를 선택하고
튜닝을 해야하는 수 많은 하이퍼 파라미터가 존재한다고 할때, 사실 이들 파라미터 중에는 모델에 있어 매우 중요한 하이퍼 파라미터가 있을 수도있고, 중요성이 상대적으로 적은 하이퍼 파라미터가 있을 수도 있다.
그러나 실제로 학습시켜보기 전까지는, 이러한 경향을 알 수가 없다.
grid search를 사용하게 되면, 좌측의 그림처럼 grid 전부를 탐색하게 되지만,
그림이 의미하는 바는 수평축에 따르는 하이퍼 파라미터가 매우 중요함을 나타내고 있다.
주황색과 초록색은 모델의 성능이다.
수직축의 하이퍼 파라미터에 대한 marginal distribution을 보면, range내의 어떤 하이퍼 파라미터를 선택하든 성능에는 큰 영향이 없음을 나타내고 있다.
수평축에서 모델 성능의 sweet spot이 존재하는 상황이다.
좌측에서는 중요한 하이퍼 파라미터에 대해 단 세개의 값을 탐색하고 있지만, 우측에서는 수직축이나 수평축에 전혀 align되지 않은 모습으로, 다양한 값을 탐색하고 있는 것을 알 수 있다.
따라서 Random Search를 통해 하이퍼 파라미터의 탐색을 극대화 하는 것이 매우 중요하다.
위의 슬라이드는 Random Search와 Grid Search의 개념적인 상황을 묘사하기 위한 그림이었다.
지금 보는 슬라이드는 강의자가 실제로 페이스북에서 수 많은 GPU를 동원해서 진행한 실제 프로젝트인데,
3가지 타입의 모델에 대해서 learning rate와 regularization strength를 달리해서 실험을 진행하였다.
dense한 plot을 보면 정말 많은 실험을 했다는 방증이기도 한데, plot 내의 색깔은 학습이 끝난 모델의 성능을 나타낸다.
이 그래프에서 나타내고자 하는 것은 두 하이퍼 파라미터의 interaction(상호작용)이다.
각ㄱ
outer loop linner loop
learning rate 뿐만아니라 learning set, 즉 최적의 training data에 대해서 학습한다.
하지만 실용적으로 쓰는 방법은 아니다.
매우 매우 매우 computationally expensive하고 그에 비해 풀고자하는 문제는 대단히 작지만, scalable하지도 않다.
빅테크 기업들이야 많은 GPU로 일일이 실험해가면서 할 수 있는 방법이지만,
그렇지 않다면 좀 더 smart한 방법이 필요하다.
너무 낙심하지 않아도 되는게, GPU Cluster가 없이도 좋은 하이퍼 파라미터를 찾는 일이 여전히 가능하다
일단 파이썬 코드를 먼저 작성하고 실행해서 initial loss부터 확인하자.
어떤 loss function을 사용하느냐에 따라서 initial loss가 기대되는 값이 있다는 것을 수차례 배웠고, analytic하게 계산이 가능함을 알고 있다.
random initialization에 대해서 예를 들어 Cross Entropy loss라면 loss값은 -log of number of classes가 될 것이다.
만약 이 값에 문제가 있다면 코드중에 버그가 있는 것이다.
딱 5~10개의 mini batch데이터만을 가지고
이 과정의 목표는 단지 5분정도만을 가지고 overfit시키는 것이다.
짧은 시간으로 어떠한 하이퍼 파라미터가 overfit에 도움 되는지 알 수 있다.
여기서 작은 데이터 배치에 대해서 overfit 시키지 못한다면 training set전체를 피팅시키긴 어려울 것이다.
이 단계에서는 어떠한 generalization도 고려하지 않고, 단지 overfit과 optimization과정에서의 디버깅만 신경쓴다.
그러고 나서 세번째 스텝으로, 모든 traning데이터를 사용해서 loss가 재빠르게 감소하는 learning rate를 찾아보는 것이다.
이 단계에서는 전 단계의 모델의 아키텍쳐가 모든 훈련데이터셋을 피팅시키는 충분한 아키텍쳐라는 가정하에 단지 learning rate만을 바꿔가며 100번에서 1000번의 iteration까지는 지수적으로 감소하는 loss값을 볼 수 있을 것이다. 이 것으 수많은 테스크와 수 많은 신경망 아키텍쳐에 대해 경험적으로 입증된 사실이다.
계속 100번 정도의 iteration을 관찰하면서 loss curve를 확인하고 적절한 learing rate를 찾는 과정이라고 생각하면 된다.
tiny hyper parameter grid에 대해서
1~5 epoch를 돌려본다.
interactive한 과정이 될 수도 있고, 몇날 몇일이 걸릴 수도 있는 과정이다.
curve를 보면 대게는 학습이 올바르게 잘 되고 있는지 알 수 있다.
앞으로 매우 익숙하게 될 몇가지 학습 커브에 대한 예시를 살펴보자.
initialization이 나쁘다
좋은 progress를 보이지만, 곧 평탄한 모습(plateau)을
learning rate decay나 더 낮은 learning rate를 고려해볼 수 있다.
만약 그렇지 않았거나 혹은 learning rate decay를 너무 일찍 걸게된다면, 완전히 평탄한 curve를 그리게 된다.
Training Accuracy와 Validation Accuracy가 적당한 갭으로 진행되고 있는 모양새이다.
학습이 잘 되고 있다는 뜻이며, 계속해서 학습할 필요가 있음을 알리고 있는 커브라고 볼 수 있다.
모델이 계속해서 나아질 것이라는 긍정적인 기대를 할 수 있다.
training set에 대한 Accuracy는 계속해서 증가하는 경향을 띄지만
validation set에대한 Accuracy 혹은 performance metric은 어느정도 까지 올라갔다가, 이후 평탄화되거나 심지어는 떨어지는 경우이다.
training set과 validation set Accuracy Gap이 적당한 것은 매우 정상적인 상황이지만, 오히려 학습하면서 이 갭이 점점 커지는 것은 매우 문제가 있다.
이는 오버피팅의 전형적인해 케이스로, regularization요
아마도 드문 경우로 모델의 사이즈나 capacity를 줄여야될 수도 있다.
그럼 이러한 모습은 어떻게 보이는가?
아마도 오버피팅이 해결된 좋은 그래프라고 보일 수도있지만, 일반적으로 매우 나쁜 sign이다.
일반적으로, trainingset과 validationset의 performance가 동일하다는 것은 underfitting에 해당한다.
이런 경우에는, 모델의 capacity를 키우거나 regularization요소를 줄이고, gap을 키워야한다.
그럼 도대체 얼마만큼의 gap이 좋은 gap인거냐? 라는 질문이 있을 수 있지만,
사실 이러한 질문에 대한 답으로 학술적인 연구가 존재하지는 않고, 사용하는 데이터셋에 따라 다른 양상을 보이는 것이 사실이다.
적당한 gap이 존재한다는 것만이 지금까지의 경험적 사실이다.
더 학습을 돌릴 수 없는 논문 마감일까지 그냥 계속하면 된다.
지금까지 살펴본 모델의 튜닝을 DJ의 튜닝에 비유하고 싶다.
모든 요소들을 잘 튜닝한다면 아주 아름다운 음악이라는 unseendata에 대한 well performance를 보일 수 있을 것이다.
실험의 결과를 javascript라던지...
요즘은 이러한 기능을 tensorboard가 제공해준다.
때로는 가중치의 크기와 가중치가 업데이트 되는 크기를 비교해보는 것이 도움이 될때가 있다.
가중치의 절댓값 크기와 업데이트되는 크기의 비율이 너무 크지는 않아야 한다.
이러한 weight magnitude / wegiht update magnitude ( 가중치 업데이트의 크기 / 가중치의 크기 ) 를 살피는 것은 학습이 잘 되 고있는지를 살피는 또 다른 휴리스틱한 방법이다.
지금까지 소개한 7단계의 학습 과정 아웃라인을 잘 따라가면 거대한 GPU Cluste가 없더라도
모델을 잘 학습시킬 수 있을것이라고 생각한다.
그러면 학습을 모두 마친 후에는 무엇을 해야할까?
averaging의 방법은 풀고자하는 task에 따라 다르긴 하지만
예를 들어, image classification task같은 경우에는, 각 개별 모델의 probability distribution의 평균으로 output을 취하면 된다.
앙상블 이후에는 대게 1~2%정도의 더 좋은 성능을 기대할 수 있다.
때로는 모델 앙상블이 아니라
하나의 모델에 대해서 여러개의 checkpoint를 둬서 이러한 chechpoint에 대해 averaging으로
Large scale generative model
iteration과 iteration간의 variation을 좀더 smoothing해주는 효과가 있다고 한다.
때때로 우리는 단 하나의 훈련된 모델로 여러가지 테스크를 해결하고 싶을 수 있다.
그것이 바로 Transfer Learning에 관한 주제이다.
Deeplearning으로 문제를 해결하려면 매우 많은 데이터가 필요하다는 많은 사람들의 이야기를 들어봤을 것이다.
근데 이 말은 사실상 틀렸다고 생각하고, 강의자는 이러한 근거없는 믿음에 대해 부수고싶다(bust)고 이야기한다.
우리는 전이학습(Transfer Learning)으로 많은 양의 데이터에 접근이 불가능하더라도 많은 task를 진행할 수 있다.
Transfer Learning은 이러한 이유로 컴퓨터 비전의 메인스트림으로 자리잡게 되었다.
첫번째 스텝으로는 매우 많은 양의 데이터인 ImageNet이나 그 외의 다른 데이터셋으로 지금껏 배운 학습 전략들을 통해CNN을 학습시킨다.
그 다음스텝에서는 첫번째 스텝의 ImageNet Classification의 성능을 전혀 신경쓰지 않고 target으로 하는 다른 데이터셋, 혹은 매우 작은 데이터셋에 대한 성능만 고려하게 된다.
Fully Connected Layer를 제거한다.
image에 대하여 feature vector의 representation network로써 활용한다.
'기초 노트 > EECS 498-007 (ComputerVision)' 카테고리의 다른 글
EECS 498-007 Lecture 13 : Attention (0) | 2025.01.11 |
---|---|
EECS 498-007 Lecture 12: Recurrent Neural Networks 정리 (1) | 2025.01.11 |
EECS 498-007 Lecture10: Training Neural Networks Part1 정리 (0) | 2025.01.11 |
EECS 498-007 Lecture9 : Hardware and Software 정리 (0) | 2025.01.11 |
EECS 498-007 Lecture 8: CNN Architectures 정리 (0) | 2024.04.02 |