신경망 하이퍼파라미터 튜닝하기
GridSearchCV, RandomizeSearchCV 를 사용
하이퍼파라미터 최적화에 사용할 수 있는 파이썬 라이브러리
Hyperopt
학습률과 같은 실수와 층의 개수 같은 이산적인 값을 포함
모든 종류의 복잡한 탐색 공간을 최적화
Hyperas, kopt, Talos
케라스 모델을 위한 하이퍼파라미터 최적화 라이브러리
Keras Tuner
사용하기 쉬움
구글 제작
시간화와 분석을 포함한 클라우드 서비스로도 제공 예정
Scikit-Optimize
범용 최적화 라이브러리
BayesSearchCV는 GridSearachCV와 비슷한 인터페이스
Spearmint
베이즈 최적화
Hyperband
리샤 리의 최근 논문을 기반으로 구축된 빠른 하이퍼파라미터 튜닝 라이브러리
Sklear-Deap
GridSearachCV와 비슷한 인터페이스 가진 진화 알고리즘 기반
10.3.1 은닉층 개수
은닝층이 하나인 다층 퍼셉트론이더라도 뉴런 개수가 충분 -> 복잡한 함수 모델링 가능
하지만 복잡한 함수 문제에서 심층 신경망이 얕은 신경망보다 파라미터 효율성이 훨씬 좋음
-> 심층신경만은 얕은 신경망보다 훨씬 적은 수의 뉴런을 사용 -> 따라서 더 높은 성능
계층 구조
좋은 솔루션으로 빨리 수렴됨
+ 새로운 데이터에 일반화되는 능력 향상
ex) 사진에서 얼굴을 인식하는 모델을 훈련 후 헤어스타일 인식
이 때 신경망 새로 훈련
-> 첫 번째 네트워크의 하위 층을 재사용
즉, 새로운 신경망에서 처음 몇 개 층의 가중치와 편향을 난수로 초기화 x
-> 첫 번째 신경망 층에 있는 가중치, 편향으로 초기화
-> 헤어스타일 같은 구조만 학습하면 됨!
이를 전이 학습이라고 함
10.3.2 은닉층의 뉴런 개수
입력층과 출력층의 뉴런 개수는 해당 작업에 필요한 입력과 출력 형태에 따라 결정됨
ex) 주식가격 예측
입력층 : 주식의 기술데이터인 시가, 고가, 저가, 종가, 거래량
출력층 : 예측 주가
은닝층 구성 방식
: 각 층의 뉴런을 점점 줄여서 깔때기처럼 구성
but 요즘은 모든 은닉층에 같은 크기를 사용해도 동일하거나 더 나은 성능 냄
튜닝할 하이퍼파라미터가 층마다 한 개씩이 아니라 전체 통틀어 한 개가 됨
-> 첫 번째 은닉층을 크게 하는 것이 좋음
실전에서는 필요한 것보다 더 많은 층과 뉴런을 가진 모델을 선택
-> 과대적합을 방지하기 위해 조기 종료 or 규제 기법 사용하는 것이 간단하고 효과적
tip : 층의 뉴런 수 보다 층 수를 늘리는 쪽이 더 성능이 개선됨
10.3.3 그외 하이퍼파라미터
1. 학습률
경사하강법 알고리즘은 기울기에 학습률 또는 보폭이라 불리는 스칼라를 곱해 다음 지점을 결정
Local minimum 에 효율적으로 도달하도록 적절한 학습률 세팅 중요
학습률이 큰 경우 : 데이터가 무질서하게 이탈, 최저점 수렴 x
학습률이 작은 경우 : 학습시간에 매우 오래 걸림, 최저점 도달 x
가장 중요한 하이퍼파라미터
최적의 학습률 : 최대 학습률의 절반임
이를 찾는 방법 : 매우 낮은 학습률에서 시작해 점진적으로 매우 큰 학습률까지 수백 번 반복해 모델 훈련
이를 반복적 학습률 조정이라고 함
모델이 잘 학습이 되고 있는지?
학습곡선 그리기
loss : cost function
epoch : 반복수
low : 손실 감소가 선형의 형태로 천천히 학습
high : 지수적인 형태(exponential) 형태로 구간에 따라 빠른 학습 혹은 정체가 보임
very high : 매우 높은 학습률은 손실을 증가시킴
good : 적절한 학습 곡선의 형태로 learning rate 조절하면서 찾아내기
2. 옵티마이저
확률적 경사 하강법(Stochastic Gradient Descent, SGD): 가장 기본적인 옵티마이저로, 각 배치에 대한 그래디언트를 계산하여 가중치를 업데이트합니다. 학습률(learning rate)이라는 하이퍼파라미터를 조정하여 옵티마이저의 수렴 속도와 안정성을 제어할 수 있습니다. SGD는 계산이 간단하고, 일반적인 딥러닝 모델에서도 잘 동작하는 경향
모멘텀(Momentum): SGD에 모멘텀을 추가한 옵티마이저로, 이전 업데이트에서의 그래디언트에 따른 속도 정보를 사용하여 업데이트를 수행합니다. 이를 통해 SGD보다 더 빠르게 수렴하고, 지역 최적점에 빠지지 않는 장점
아다그라드(Adagrad): 학습률을 파라미터별로 조정하여 업데이트하는 옵티마이저입니다. 이전 그래디언트들의 제곱값의 누적 합을 사용하여 학습률을 조정함으로써, 많이 업데이트된 파라미터는 작은 학습률로 조정되고, 드물게 업데이트된 파라미터는 큰 학습률로 조정됩니다. 따라서 데이터의 희소성에 대응하는데 효과
엠에스프롭(RMSprop): 아다그라드의 단점을 보완하기 위해 제안된 옵티마이저입니다. 아다그라드의 누적 제곱값을 지수 이동 평균으로 근사하여 사용하여, 이전 그래디언트들의 크기가 지나치게 커지는 문제를 완화
아담(Adam): 모멘텀과 RMSprop의 아이디어를 결합한 옵티마이저로, 학습률을 자동으로 조정하고, 모멘텀을 활용하여 업데이트를 수행합니다. Adam은 일반적으로 다양한 딥러닝 모델에서 좋은 성능을 보이며, 많이 사용되는 옵티마이저
3. 배치 크기
Batch : 학습을 할 때 모델에 한 번에 들어가게 되는 데이터 집합
학습할 때 준비한 Train 데이터 전체를 모델에 입력으로 넣을 수 없음
-> 나눈 것을 Batch
이 때 이 Batch에 포함된 데이터의 개수를 Batch Size
epoch은 Train 데이터 전체를 한 번 보는 기준
모델 성능과 훈련 시간에 큰 영향
큰 배치 크기 사용 시 장점
GPU같은 하드웨어 가속기를 효율적으로 활용
훈련 알고리즘이 초당 더 많은 샘플을 처리함
-> GPU 램에 맞는 가장 큰 배치 크기 사용을 권장
하지만 훈련이 불안정하거나 최종 성능이 낮으면 작은 배치 사용하기
4. 활성화 함수
ReLU 활성화 함수가 모든 은닉층에 좋은 기본값
활성화 함수는 수행하는 작업에 따라 달라짐
시그모이드(Sigmoid) 함수:
이 함수는 입력값을 0과 1 사이의 값으로 압축합니다. 이전에 주로 사용되었으며, 이진 분류 문제에서 출력층에 많이 사용됩니다. 그러나 큰 단점 중 하나는 그래디언트 소실(vanishing gradient) 문제가 발생
하이퍼볼릭 탄젠트(Hyperbolic tangent, tanh) 함수: 이 함수는 입력값을 -1과 1 사이의 값으로 압축합니다. 시그모이드 함수와 비슷하지만, 출력 범위가 더 넓고 0을 중심으로 대칭적입니다. tanh 함수는 이진 분류나 다중 분류 문제에서 은닉층에서 주로 사용됩니다.
렐루(Rectified Linear Unit, ReLU)
입력값이 양수인 경우에는 입력값을 그대로 출력하고, 음수인 경우에는 0을 출력합니다. ReLU 함수는 특히 딥 러닝에서 인기가 있으며, 계산이 간단하고 그래디언트 소실 문제를 완화시킬 수 있는 장점이 있습니다.
리키 렐루(Leaky ReLU) 함수
ReLU 함수의 변형으로, 입력값이 음수인 경우에도 작은 기울기를 가지게 됩니다. 이를 통해 음수 영역에서도 정보의 흐름을 유지할 수 있습니다.
소프트맥스(Softmax) 함수
다중 클래스 분류 문제에서 출력층에 사용됩니다. 소프트맥스 함수는 입력값을 확률 분포로 변환하여 각 클래스에 속할 확률을 출력합니다.
5. 반복 횟수
대부분 훈련 반복횟수는 튜닝할 필요 없음
대신 조기 종료 사용함
의문 : 반복횟수가 가장 사용하기 편리한 하이퍼파라미터 튜닝인 거 같은데 왜 대부분 훈련 반복횟수는 튜닝할 필요 없는지?
조기 종료 : 훈련을 반복하는 동안 검증 세트의 성능을 모니터링하고, 성능이 더 이상 향상되지 않거나 감소하는 지점에서 훈련을 조기에 중단하는 방법
-> 반복 횟수를 미리 정하지 않고, 모델이 훈련 데이터를 충분히 학습할 수 있도록 허용 + 과적합을 피함
-> 조기 종료를 사용하여 반복 횟수를 자동으로 결정하고 튜닝하는 것이 더 효과적입니다.
레퍼런스
'Machine Learning & Deep Learning > 핸즈온' 카테고리의 다른 글
ch17. 오토인코더와 GAN ~ 17.1 효율적인 데이터 표현 (0) | 2023.11.28 |
---|---|
핸즈온 ch.4 모델 훈련(선형회귀, 경사 하강법) - 미완 (0) | 2023.08.29 |
핸즈온 ch15. RNN과 CNN을 사용해 시퀀스 처리하기 (0) | 2023.08.29 |
핸즈온 퍼셉트론 Perceptron - 공부 아직 다 안함 ㅋㅋ (0) | 2023.08.29 |
LeNet-5, AlexNet, GoogLeNet, ResNet (0) | 2023.08.17 |