<수강한 강의>
[#11.Lec] How to Parameterize DL Code - 딥러닝 홀로서기
[#12.Lab] Run Pytorch on GPU - 딥러닝 홀로서기
[#13.Lec] Overfitting, Regularization - 딥러닝 홀로서기
[#14.Lec] Hyperparameter Tuning Guide - 딥러닝 홀로서기
수강 날짜 : 220814-
<내용 정리>
[#11.Lec] How to Parameterize DL Code - 딥러닝 홀로서기
- How to parameterize Entire code
설정해야 하는 하이퍼파라미터들이 많다. 이걸 어떻게 관리할 것인지? => args로 한 곳에 모아 관리
- 왜 변수화를 해야 하는가?
- 다양한 변수를 한곳에서 관리하기 위해서
- 세이프 코딩을 위한 목적(코드 안에 상수로 남아있는 값이 있으면 하이퍼파라미터를 바꿨어도 별 변화없는 것으로 아고 넘어가버릴 수 있어서)
- Re-usability(재사용), Readability(가독성)
- hyperparameter의 optimizer를 사용할 수도 있다.
- hyperparameter란? non-trainable하다.
<Hyper-parameter 구성요소>
- 모델을 결정하는 하이퍼 파라미터(layer수, unit 수 등)
- optimizer를 결정하는 하이퍼 파라미터(예. adam)
- training/evaluation process related(epoch을 몇 번 돌릴 건지, batch_size, 데이터 양이 많다면 언제마다 evaluate할 건지)
- device(gpu, cpu)
- saving exp result(실험결과, 모델 이름)
<Argparse>
import argparse
parser = argparse.ArgumentParser()
args = parser.parse_args("")
print(args)
args.batch_size = 100
print(args.batch_size)
args.in_dim = 256
args.in_dim = 128
- python 내장 라이브러리
- dictionary type으로 정리를 하면 되는데, 그중에서 간편하게 쓰기 위해 argparse를 쓰는 것.
- 만약 args를 dictionary로 바꾸고 싶다면? vars(args) 이렇게 해주면 된다.
[#12.Lab] Run Pytorch on GPU - 딥러닝 홀로서기
- CPU와 GPU를 사용하는 것의 차이 : cpu의 경우 for문을 돌린다면, gpu는 병렬적으로 처리가 가능.
- 그러면 pytorch에서 어떻게 GPU를 사용할 수 있을까?
model = MLPModel(784,10,[1000])
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
model.to(device)
device에서 cpu냐 cuda:0(GPU)이냐를 적어주면 된다. 이 때, 데이터들에도 적용시켜주도록 한다.
input_X = input_X.to(device)
true_y = true_y.to(device)
print(torch.couda.is_available()) -> 이걸 이용해서 if문으로 gpu나 cpu 사용을 표현할 수도 있다.
=> device = 'cuda:0' if torch.cuda.is_available() else 'cpu'
그리고 데이터를 다룰 때도 마찬가지로 input_X = input_X.to(device)와 같은 식으로 넣어주어야 한다. true_y = true_y.to(device)
그 이후에는 numpy도 cpu 관련 코드로 바꿔주어야 한다.
[#13.Lec] Overfitting, Regularization - 딥러닝 홀로서기
<MLP에서의 Overfitting>
- Model Capacity : 파라미터를 늘릴 수록 capacity가 커지고, 그러면 복잡한 현상을 예측할 수 있다.
그렇지만 막 capacity를 늘리면 overfitting 문제(일반적인 경우에서는 적용되지 않는)가 발생한다.
- True Risk vs Empirical Risk : overfitting이 되면 empirical risk는 줄어들고, true risk는 늘어난다.
=> 즉, training loss(empirical risk)와 validation loss(approximated true risk)를 잘 비교해봐야 함.
(16:46)
<Regularizations L2 Regularization and Dropout>
- L2 Regularization
(예) Loss = MSE + R(람다)
강제로 overfitting을 방지.
- Dropout
각각의 노드들을 꺼버린다. -> 모델 capacity(파라미터의 개수)를 줄여준다.
그렇게 하면 각각의 뉴런을 보다 효율적으로 사용할 수 있게 된다.
어떤 식으로 꺼버리는가에 따라 모델이 달라지기 때문에 복잡한 하나의 모델 보다는 간단한 여러개의 모델을 종합하여 결과를 얻을 수 있다.(앙상블 기법의 일종)
이 때, training을 할 때만 dropout을 적용하고, test를 할 때에는 dropout 없이 진행한다.
(27:24)
<Problems of MLP Gradient Vanishing>
- Gradient Vanishing
: 한번 0에 가까운 값이 되어 버리면 gradient가 0 가까이에서 거의 바뀌지 않는다.
=> ReLU Activation function을 이용해 해결
(34:28)
<Xavier Initialization and Batch Normalization>
- Xavier Initialization
: weight 초기화 방법 중 하나.
- Batch Normalization
[#14.Lec] Hyperparameter Tuning Guide - 딥러닝 홀로서기
- Hyperparameter Tuning의 목적은? 모델의 true risk를 줄이기 위해서(=validation set의 loss를 줄이는 것)
- 접근법은?
1) Model Related
: hidden layer, hidden unit의 개수, activation function
2) Optimization Related
: optimizer의 종류(SGD, Adam), Learning rate, L2 coef, Dropout Rate, Batch Size, Epoch
* 모델을 정하고 -> 학습 관련 요소들을 정하는 것을 추천
- Batch size를 일단 최대한 키우고(학습 시간이 빨라진다), 그 후에 batch_size를 줄여본다.
- hyper parameter를 찾는 방법
1) grid search
2) Random
3) 직접 해보기
4) Bayesian Optimization
+) AutoML
'✨ 공부 기록 > 딥러닝' 카테고리의 다른 글
[홀로서기 6] 딥러닝 홀로서기 강의 정리(chap 20, 21, 22) (0) | 2022.08.31 |
---|---|
[홀로서기 5] 딥러닝 홀로서기 강의 정리(chap 15, 16, 17, 18, 19) (0) | 2022.08.23 |
[홀로서기 3] 딥러닝 홀로서기 강의 정리(9.Lab-10.Lec) (0) | 2022.08.09 |
[홀로서기 2] 딥러닝 홀로서기 강의 정리(4.Lab-8.Lec) (0) | 2022.08.01 |
[홀로서기 1] 딥러닝 홀로서기 강의 정리(-3.Lec) (0) | 2022.07.20 |