■ Key words
ㆍParameter와 Hyperparameter
ㆍExperiment Tracking Framework(ETF)
ㆍRandomSearch
■ 주요내용
ㆍParameter와 Hyperparameter
- Parameter : 좋은 예측(모델의 성능)을 위해 업데이트가(학습이) 돼야 하는 변수(i. e. 가중치 등)
- Hyperparameter : 좋은 예측을 위해 사전에 지정하는 값(iteration, batch, epoch 수 등)
ㆍ입력 데이터 정규화(Normalizing) : 신경망이 적절한 가중치를 학습할 수 있지만, 학습을 빠르게 해주고,
극소값(local optimum)에 빠질 위험을 줄여줌.
ㆍkeras 모델 자동 검증 기능 : validation_data 이용 시 test set 일부를 자동으로 validation에 사용
ㆍHyperparameter Tuning method
- Baby sitting A.K.A "Grad Student Descent" : 사람이 직접 tuning하는 것
- Grid Search : 모든 조합을 자동으로 돌리는 방법 / 범위를 과다하게 잡으면 반복학습이 멈추지 않게 됨 /
hyperparameter 조합을 찾기 보다는 하나의 hyperparameter 최적값을 찾는데 사용 권고 /
모든 parameter의 중요도가 동등하다고 전제
- Random Search : 지정된 범위에서 무작위로 선정한 조건으로 모델 학습 / Grid 대비 시간절약 가능
상대적으로 중요한 parameter를 더 탐색(학습), 덜 중요한 parameter는 실험 ↓
- Bayesian Methods : 실험 결과를 추후 탐색에 반영하여 이후 tuning의 성능을 올리는 방법
ㆍHyperparameter Tuning Option
- batch_size : 학습 후 가중치 업데이트 시 한 번에 몇 개의 관측치를 보는지 결정하는 hyperparameter
· batch size가 너무 크면 병렬 계산이기 때문에 RAM에 무리가 무리가 갈 수 있음 / 한 번에 많은 데이터의 loss를 계산해야 함 / 주어진 epoch 안에 충분히 가중치를 update 할 만큼의 iteration이 안 나올 수 있음
· batch size가 너무 작으면 학습횟수가 너무 많아 시간이 오래 걸리고, 추정값에 noise 발생 가능
→ 작은 batch_size를 고르면 generalization이 잘 되나 batch norm의 효과를 볼 수 없음
→ 32(2^5) ~ 512(2^9)의 2의 제곱수로 정함
- training epochs
- optimization algorithms : ADAM이 일반적으로 가장 좋은 결과 제공 / adamW 등도 많이 사용
· optimizer 종류에 따라 hyperparameter의 종류와 값이 변경됨; 내부 hyperparameter tuning 필요
- learning rate : 한 번의 학습을 parameter에 반영하는 정도 / 경사하강법 기반의 optimizer 선택을 위한 hyperparameter / default는 0.01
· 너무 높게 잡으면 발산(jumping하다가 최소점을 지나쳐버림) / 0.5 초과는 지양
· 너무 낮으면 극소점에 갇혀 모델 수렴에 실패할 수 있음
⇒ 범위를 점점 줄여나가며 최적값을 찾아보기([0.001, 0.01, 0.1, 0.2, 0.3, 0.5] → [0.05, 0.08, 0.1, 0.13])
충분한 iteration 확보를 위해 학습률 tuning 시 epoch tuning을 하는 것도 좋음.
- momentum : optimizer가 관성을 갖고 최소값을 overshooting하게 하는 속성. 극소점(Local minima)에서 벗어나기 위함)
* 확률적 경사하강법(Stochastic Gradient Descent) : optimizer 중 하나. gradient descent에 mini-batch를 사용하여 계산이 빠름
- activation functions : step / sigmoid / ReLU / softmax / leaky ReLU / tanh 등
- dropout regularization & weight constraint : 어느 layer에 적용하는 지에 따라 성능이 매우 달라짐
- hidden layer의 neuron 갯수
- Network Weight Initialization : 학습을 시작할 때, 가중치의 초기점이 모델의 성능에도 영향을 미치므로,
각 layer의 가중치의 초기점이 균일한 확률로 지정될 수 있도록 조정해주는 기능
· sigmoid : Xavier initializer 사용이 유리
· ReLU : He initializer 사용이 유리
init_mode = ['uniform', 'lecun_uniform', 'normal', 'zero', 'glorot_normal', 'glorot_uniform',
'he_normal', 'he_uniform']
ㆍKeras Tuner를 사용한 Hyperparameter Tuning : tensorflow 모델에 대한 최적의 hyperparameter 선택에 도움
* Hyperparameter(Hyper) Tuning: Machine Learning model에 적함한 hyperparameter set을 선택하는 process
* Hyperparameter의 종류 : 모델(layer 및 node 수) 관련 / 학습 알고리즘의 속도와 품질 관련
- model 구조 제작 : hyper tuning model 작성 시 model architecture, hyperparameter 검색 공간 정의 가능
⇒ model builder function을 사용 / Keras Tuner API의 HyperModel 클래스를 하위 분류기를 사용
- 튜너를 인스턴스화하고 하이퍼 튜닝을 수행
- Call back 정의 : 학습단계가 끝날 때마다 학습 출력을 지우도록 call back 정의
ㆍ실험 기록 Framework : 각 (hyper)parameter에 따른 가중치와 편향을 기록, 저장
■ Session note
ㅁ 오전 session
ㆍ모델 내에서 정규화를 할 수도 있지만, 입력데이터를 사전에 정규화할 수도 있음
ㆍhyperparameter를 동시에 여러 개 tuning하게 되면 어떤 hyperparameter로 인해 결과가 개선됐는지 명확하지 않음
ㆍNetwork Weight Initialization : 가중치는 처음에 랜덤하게 정하지만, 그 수치로 인해 모델의 성능이 달라질 수 있음
ㆍgrid search cv의 경우 개인의 직관이 들어가는데, 타인에게 설득력이 있는가?\
- 실험 기록 결과를 같이 보여주기
ㆍwandb의 ML에 적용 : 해봐야 함
ㆍbatch size :
- 너무 클 때 : 데이터 병렬처리로 과부화
- 너무 작을 때 : 학습 횟수가 증가하여 학습 시간이 오래 걸림
ㆍ : Learning Rate
- 너무 클 때 : 발산(최저점을 건너뛸 수 있음)
- 너무 작을 때 : 최저점 도달 불가(극소값에 갇힐 수 있음)
ㆍMomentum : 극소점에 빠질 수 있는 위험을 관성을 더해 최소점으로 경사하강할 수 있도록 도와줌
ㆍweight initializer : 학습의 시작점에 따라 모델의 성능이 달라질 수 있으므로(momentum이 적어 극소점에 갇힐 수 있거나 운이 좋아 최저점에 바로 시작할 수도 있음), 시작점을 random하게 잡아줌
ㆍ각 hyperparameter가 상호의존적이어서, 한 parameter가 변경되면 다른 parameter의 최적값도 변경되지 않는가 : 한 개씩, 순서에 맞춰서 돌려보기(random cv)
ㆍClearTrainingOutput : callbacks에 넣어서 print에 깔끔하게 나오게끔 적
ㆍlearning rate : 1 iteration 당 학습하는 정도
ㅁ 오후 session
ㆍ순전파 : 입력값에 가중치와 편향을 더해 예측값을 산출해내는 과정
ㆍ역전파 : 오차(실제값-예측값)를 가지고 편미분과 chain rule을 이용해 가중치와 편향을 구하는 과정
ㆍ가중치 : 입력값을 전달할 때 얼마나 전달할 지 나타내는 수
ㆍ편향 : 노드의 활성화를 조정하는 상수
ㆍ뉴런(노드) : 두 개 이상의 입력값을 받아 하나의 결과값을 연산하는 단위
ㆍ입력층 : 신호를 받아들임 / 연산 미수행 / feature 수만큼 있음
ㆍ출력층 : 클래스(타겟) 수에 맞춰 최종 결과 출력(이진분류/회귀의 node는 1, sigmoid 및 일반 활성화 함수 사용)
ㆍhidden layer : 입력층과 출력층 사이에 숨어 연산을 수행하는 층 / 그 구조는 사람이 짜기 나름
ㆍ퍼셉트론 : 신경망의 최소 단위 / 여러 개의 입력 - 하나의 결과
ㆍ학습률 : 1 iteration에서 학습한 것을 반영하는 비율 / 크면 발산 / 작으면 극소점에서 학습 종료 가능
ㆍbatch : 1회 학습하는 데 사용되는 데이터의 수 / 크면 병렬 처리방식이라 컴퓨터가 부담스러워 함 / 작으면 학습 시간이 오래 걸림
ㆍepoch : 전체 데이터가 학습되는 횟수 / 크면 과적합과 학습 시간이 오래 걸림 - early stopping으로 과적합 피할 수 있음 / 적으면 과소적합
ㆍ손실함수 : 오차합. 모델 학습에 사용
ㆍmetric : 모델의 성능 평가 지표
ㆍ과적합 피하기 위한 방법
- weight decay : 손실함수에 가중치*조정값의 합을 더해 구함 / L1(절대값, 0에 수렴), L2(제곱, 작은 가중치도 반영)
- weight constraint : 가중치의 범위 지정
- drop out : 성능향상을 위해 랜덤으로 노드를 배제하고 학습 / 검정 및 테스트에선 모든 노드가 반영됨
- early stopping : 학습 시 오차함수가 어느 정도 감소하지 않으면 학습을 일찍 멈추는 것
ㆍ활성화함수 : 입력값에 가중치와 보정을 적용하요 출력값을 내보내는 함
ㆍCross Validation : 과적합 방지 / hyperparameter 최적값 찾기 / 데이터가 적도라도 train/test로 구분하여 학습 가능
ㆍtrain/test를 분리하여 학습하는 이유 : data leakage로 인해 학습과 평가가 제대로 이뤄지지 않음
ㆍ실무에서도 GridSearch CV를 사용하는가? : 사람마다 다름 / randomize search로 공간을 줄인 후 grid search 사용; random으로 범위를 줄인 후 grid로 해당 범위 세부 searching
■ 주요함수
ㆍ
■ Reference
ㆍHyperparameter Tuning : https://youtu.be/wKkcBPp3F1Y
ㆍparameter와 hyperparameter의 차이 : https://youtu.be/Kh06wgGbi78
ㆍGradient Descent with Momentum : https://youtu.be/yWQZcdJ4k8s
ㆍbatch size : https://youtu.be/U4WB9p6ODjM
ㆍGrid Search : https://huidea.tistory.com/32
[Machine learning] 쉽게 설명하는 Grid search - 모델 성능을 최고로 만드는 hyper parameter를 찾아서 (200727)
index 1. Grid search 의 정의 2. 코드 구현 및 결과 3. 유사한 다른 방법들 1. Grid search 란 무엇인가? 0) 컨셉 : 모델에게 가장 적합한 하이퍼 파라미터를 찾기 Grid search (격자 탐색) 은 모델 하이퍼 파라..
huidea.tistory.com
ㆍpandas to_numeric : https://pandas.pydata.org/docs/reference/api/pandas.to_numeric.html
pandas.to_numeric — pandas 1.3.1 documentation
If not None, and if the data has been successfully cast to a numerical dtype (or if the data was numeric to begin with), downcast that resulting data to the smallest numerical dtype possible according to the following rules: ‘integer’ or ‘signed’:
pandas.pydata.org
ㆍ확률적 경사하강법(Stochastic Gradient Descent) : https://mangkyu.tistory.com/62
Stochastic Gradient Descent(SGD)란?
1. Stochastic Gradient Descent(SGD)란? [ Stochastic Gradient Descent ] Neural Network의 Weight를 조정하는 과정에는 보통 Gradient Descent라는 방법을 사용한다. 이는 네트워크의 Parameter들을 $$ 라고 했..
mangkyu.tistory.com
ㆍOptimization : https://sacko.tistory.com/42
문과생도 이해하는 딥러닝 (8) - 신경망 학습 최적화
2017/09/27 - 문과생도 이해하는 딥러닝 (1) - 퍼셉트론 Perceptron 2017/10/18 - 문과생도 이해하는 딥러닝 (2) - 신경망 Neural Network 2017/10/25 - 문과생도 이해하는 딥러닝 (3) - 오차 역전파, 경사하강..
sacko.tistory.com
'Data Science > 4. 딥러닝' 카테고리의 다른 글
[n422]Distributed Representation (0) | 2021.08.18 |
---|---|
[n421]Count-based Representation (0) | 2021.08.17 |
[n413]Neural Training Options (0) | 2021.08.11 |
[n412]경사하강법과 역전파 알고리즘 (0) | 2021.08.10 |
[n411]Neural Network(NN) Foundation (0) | 2021.08.09 |