250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 선형회귀
- 기초통계
- 리뷰
- 빅데이터
- 독서
- 코드스테이츠
- 딥러닝
- 매일매일
- SQL
- 성실히
- bootcamp
- 부트캠프
- selenium
- JavaScript
- MYSQL
- 주간보고
- 파이썬
- yolo
- python
- pandas
- leetcode
- 노마드코더
- Codestates
- 코딩테스트
- 재미져
- Ai
- 꾸준히
- 자료구조
- 열심히
- 2021
Archives
- Today
- Total
코딩일기
[Deep Learning] 5. 딥러닝 하이퍼파라미터 튜닝 본문
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
반응형
'Code > 딥러닝(NL)' 카테고리의 다른 글
YOLO4 (0) | 2021.06.03 |
---|---|
[Deep Learning] 6. Convolutional Neural Network(feat. CNN) (0) | 2021.05.05 |
[Deep Learning] 4. 딥러닝에서 과적합을 방지하는 방법(feat. 학습 규제 전략 (Regularization Strategies)) (0) | 2021.05.03 |
[Deep Learning] 3. 역전파와 경사하강법 (0) | 2021.05.03 |
[Deep Learning] 1. 딥러닝 개념, 개요, 구성, 활성화함수 (0) | 2021.05.03 |