코딩일기

[Deep Learning] 5. 딥러닝 하이퍼파라미터 튜닝 본문

Code/딥러닝(NL)

[Deep Learning] 5. 딥러닝 하이퍼파라미터 튜닝

daje 2021. 5. 4. 00:54
728x90
반응형

 

 

 

안녕하십니까 다제입니다. 

 

오늘은 딥러닝에서 하이퍼파라미터 튜닝에 대해서 알아보고자 합니다. 

 

본 글을 작성하기 앞에 해당 글은 아래 블로그를 참고하여 작성되었음을 사전에 안내드립니다. ( 참조블로그 )

 

 

 


 

1. 하이퍼파라미터 튜닝기법

종류 설명 적용 시 고려사항
학습률
(Learning Rate)
gradient의 방향으로 얼마나 빠르게 이동할 것인지 결정하는 변수 – 너무 작으면 학습의 속도가 늦고, 너무 크면 학습 불가
손실 함수
(Cost Function)
입력에 따른 기대 값과 실제 값의 차이를 계산하는 함수 – 평균 제곱 오차
– 교차 엔트로피 오차
정규화 파라미터
(Regularization parameter)
L1 또는 L2 정규화 방법 사용 – 사용하는 일반화 변수도 하이퍼 파라미터로 분류
미니 배치 크기
(Mini-batch Size)
배치셋 수행을 위해 전체 학습 데이터를 등분하는(나누는) 크기 – 가용 메모리 크기와 epoch 수행 성능을 고려
최소 사이즈 : 32 /
 * 참조논문( arxiv.org/abs/1804.07612)
배치 크기는 GPU의 물리적인 구조로 인해 항상 2의 제곱으로 설정
훈련 조기 종료
(Early Stopping)
학습의 조기 종료를 결정하는 변수 – 학습 효율이 떨어지는 시점을 적절히 판단
은닉층의 뉴런 개수
(Hidden Unit)
훈련 데이터에 대한 학습 최적화 결정 변수 – 첫 Hidden Layer의 뉴런 수가 Input Layer 보다 큰 것이 효과적
가중치 초기화
(Weight Initialization)
학습 성능에 대한 결정 변수 – 모든 초기값이 0일 경우 모든 뉴런이 동일한 결과
  • 이 외에도 momentum, activation functions, dropout regularization 등이 있음 
  • 그러나, 중요한 것은 각각의 특성을 알지못한다면 튜닝을 할 수 없으니 꼭 개별 개념에 대한 학습 필요 

 


 

2. 하이퍼파라미터 튜닝 기법 적용 시 주요 활동

 

튜닝  기법주요  활동적용 방안
Manual
Search
휴리스틱 조합 – 사용자의 직관과 경험 기반 탐색
탐색의 단순성 적용 – 사용자 도출 조합 중 최적 조합 적용
Grid
Search
모든 조합 탐색 – 하이퍼파라미터 적용값 전체 탐색
시행 횟수 한계 파악 – 하이퍼파라미터 증가로 인해 전수 탐색 한계
Random
Search
랜덤 샘플링 – 범위 내 무작위 값 반복 추출
탐색 범위 부여 – 하이퍼파라미터 최소/최대값부여
Bayesian
Optimization 
관측 데이터 기반 F(x) 추정 – 베이즈 정리 확용, 가우시안 프로세스
함수 생성 – 확률 추정 결과 기반 입력값 후보 추천 함수

 


 

 

3. 실습코드

def model_builder(hp):
  model = keras.Sequential()
  model.add(Flatten(input_shape=(28, 28)))
  
  # 첫 번째 Dense layer에서 노드 수를 조정(32-512)합니다.
  hp_units = hp.Int('units', min_value = 32, max_value = 512, step = 32)
  model.add(Dense(units = hp_units, activation = 'relu'))
  model.add(Dense(10))

  # Optimizer의 학습률(learning rate)을 조정[0.01, 0.001, 0.0001]합니다. 
  hp_learning_rate = hp.Choice('learning_rate', values = [1e-2, 1e-3, 1e-4]) 
  
  model.compile(optimizer = keras.optimizers.Adam(learning_rate = hp_learning_rate),
                loss = keras.losses.SparseCategoricalCrossentropy(from_logits = True), 
                metrics = ['accuracy'])
  
  return model
tuner = kt.Hyperband(model_builder,
                     objective = 'val_accuracy', 
                     max_epochs = 10,
                     factor = 3,
                     directory = 'my_dir',
                     project_name = 'intro_to_kt')

 

 


 

지금까지 하이퍼파라미터 튜닝에 대해서 학습해 보았습니다. 

 

정말 하나하나 코드를 실행해보지 않으며, 와닿지 않더라구요

 

꼭 여러분께서도 하나하나 실행해보면서 어떤 역할을 하는지 언제 사용해야할지 생각해보시면 성능을 올리실 때 훨씬 도움이 되실거라 생각합니다. 

 

도움이 되셨다면 좋아요! 버튼 부탁드립니다. 

 

오늘도 글을 읽어주셔서 너무나도 감사드립니다. 

 

 

 

 

728x90
반응형
Comments