딥 러닝 하이퍼 파라미터 튜닝 | [딥러닝Ii] 10강. 하이퍼파라미터 튜닝 366 개의 새로운 답변이 업데이트되었습니다.

당신은 주제를 찾고 있습니까 “딥 러닝 하이퍼 파라미터 튜닝 – [딥러닝II] 10강. 하이퍼파라미터 튜닝“? 다음 카테고리의 웹사이트 th.taphoamini.com 에서 귀하의 모든 질문에 답변해 드립니다: th.taphoamini.com/wiki. 바로 아래에서 답을 찾을 수 있습니다. 작성자 한경훈 이(가) 작성한 기사에는 조회수 2,339회 및 좋아요 30개 개의 좋아요가 있습니다.

Table of Contents

딥 러닝 하이퍼 파라미터 튜닝 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 [딥러닝II] 10강. 하이퍼파라미터 튜닝 – 딥 러닝 하이퍼 파라미터 튜닝 주제에 대한 세부정보를 참조하세요

교재 : 밑바닥부터 시작하는 딥러닝 (저자 : 사이토 고키 / 번역 : 이복연 / 출판사 : 한빛미디어)
https://www.hanbit.co.kr/store/books/look.php?p_code=B8475831198
코드 : https://github.com/WegraLee/deep-learning-from-scratch
강좌 홈페이지 : https://sites.google.com/site/kyunghoonhan/deep-learning-ii
PPT 이미지 출처
p.31 : https://www.brainstobytes.com/test-training-and-validation-sets/
p.32 : https://www.andreaperlato.com/aipost/hyperparameters-tuning-in-ai/

딥 러닝 하이퍼 파라미터 튜닝 주제에 대한 자세한 내용은 여기를 참조하세요.

[Deep Learning] 5. 딥러닝 하이퍼파라미터 튜닝 – 코딩일기

오늘은 딥러닝에서 하이퍼파라미터 튜닝에 대해서 알아보고자 합니다. 본 글을 작성하기 앞에 해당 글은 아래 블로그를 참고하여 작성되었음을 사전에 …

+ 더 읽기

Source: daje0601.tistory.com

Date Published: 7/13/2021

View: 992

[딥러닝Ii] 10강. 하이퍼파라미터 튜닝 상위 111개 답변

[Deep Learning] 5. 딥러닝 하이퍼파라미터 튜닝 – 코딩일기. 오늘은 딥러닝에서 하이퍼파라미터 튜닝에 대해서 알아보고자 합니다. 본 글을 작성 …

+ 여기를 클릭

Source: ppa.giarevietnam.vn

Date Published: 9/26/2022

View: 2448

[딥러닝Ii] 10강. 하이퍼파라미터 튜닝 374 개의 새로운 답변이 …

딥 러닝 하이퍼 파라미터 튜닝 주제에 대한 자세한 내용은 여기를 참조하세요. [Deep Learning] 5. 딥러닝 하이퍼파라미터 튜닝 – 코딩일기; 신경망 : [ …

+ 여기에 보기

Source: you.1111.com.vn

Date Published: 4/25/2021

View: 7587

신경망 : [하이퍼 파라미터 튜닝,ETF, Keras Tuner] – velog

나는 현재 ai 부트캠프를 하고 있고, 현재 딥러닝 부분을 하고 있다 그래서 강의 내용에 대해 기록을 해볼 것이고, 여태껏 notion에 적은 기록들도 …

+ 여기에 표시

Source: velog.io

Date Published: 10/23/2022

View: 7843

[머신러닝] 하이퍼 파라미터 튜닝, Cross validation

하이퍼 파라미터 튜닝 시, test set을 사용해서는 안된다. Test set은 모델의 최종 성능 평가를 위해서 사용되므로 모델의 학습 과정에서는 절대 사용 …

+ 여기에 더 보기

Source: yeong-jin-data-blog.tistory.com

Date Published: 12/22/2021

View: 6348

머신러닝 하이퍼파라미터 튜닝 | [딥러닝Ii] 10강 … – MAXFIT

크로스밸리데이션과 하이퍼파라미터 튜닝; 모델 성능 향상을 위한 하이퍼 파라미터 튜닝 – GIL’s LAB; [Deep Learning] 5. 딥러닝 하이퍼파라미터 …

+ 여기에 보기

Source: you.maxfit.vn

Date Published: 8/2/2021

View: 3758

모델 성능 향상을 위한 하이퍼 파라미터 튜닝 – GIL’s LAB

머신러닝에서 하이퍼 파라미터란 쉽게 생각해서 사용자의 입력값, 혹은 설정 가능한 옵션이라고 볼 수 있다. 모든 데이터와 문제에 대해 가장 좋은 하이퍼 …

+ 여기에 보기

Source: gils-lab.tistory.com

Date Published: 10/2/2021

View: 6122

하이퍼 파라미터 튜닝 – 블로그 – Quish

기본적으로 최적화될 수 있다고 의심되는 모든 하이퍼 매개변수에 대해 그렇게 … #hyperparameter-tuning #hyperband #hyper-parameter-tuning #머신러닝 #딥러닝 …

+ 여기에 자세히 보기

Source: ko.quish.tv

Date Published: 7/8/2022

View: 2900

[10] Deep Learning – Hyper Parameter Tuning – 디디지지 블로그

[9] Deep Learning – Hyper Parameter Tuning Hyper Parameter 모델을 만들고 학습시킬 때 , 다양한 부분에서 hyper parameter를 선택해야 한다.

+ 여기에 보기

Source: ddggblog.tistory.com

Date Published: 2/15/2022

View: 4413

튜닝 프로세스 – 하이퍼파라미터 튜닝, 배치 정규화 및 …

… 개선: 하이퍼파라미터 튜닝, 정규화 및 최적화”. 신경망을 빠르고 쉽게 구축한 다음 TensorFlow 데이터세트에서 신경망을 훈련할 수 있는 딥 러닝 …

+ 더 읽기

Source: www.coursera.org

Date Published: 12/8/2022

View: 9466

주제와 관련된 이미지 딥 러닝 하이퍼 파라미터 튜닝

주제와 관련된 더 많은 사진을 참조하십시오 [딥러닝II] 10강. 하이퍼파라미터 튜닝. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

[딥러닝II] 10강. 하이퍼파라미터 튜닝
[딥러닝II] 10강. 하이퍼파라미터 튜닝

주제에 대한 기사 평가 딥 러닝 하이퍼 파라미터 튜닝

  • Author: 한경훈
  • Views: 조회수 2,339회
  • Likes: 좋아요 30개
  • Date Published: 2020. 10. 22.
  • Video Url link: https://www.youtube.com/watch?v=iVI51L0h3LQ

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

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

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

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

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’)

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

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

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

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

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

728×90

딥 러닝 하이퍼 파라미터 튜닝 | [딥러닝Ii] 10강. 하이퍼파라미터 튜닝 상위 111개 답변

당신은 주제를 찾고 있습니까 “딥 러닝 하이퍼 파라미터 튜닝 – [딥러닝II] 10강. 하이퍼파라미터 튜닝“? 다음 카테고리의 웹사이트 ppa.giarevietnam.vn 에서 귀하의 모든 질문에 답변해 드립니다: ppa.giarevietnam.vn/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 한경훈 이(가) 작성한 기사에는 조회수 2,319회 및 좋아요 30개 개의 좋아요가 있습니다.

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

교재 : 밑바닥부터 시작하는 딥러닝 (저자 : 사이토 고키 / 번역 : 이복연 / 출판사 : 한빛미디어)

https://www.hanbit.co.kr/store/books/look.php?p_code=B8475831198

코드 : https://github.com/WegraLee/deep-learning-from-scratch

강좌 홈페이지 : https://sites.google.com/site/kyunghoonhan/deep-learning-ii

PPT 이미지 출처

p.31 : https://www.brainstobytes.com/test-training-and-validation-sets/

p.32 : https://www.andreaperlato.com/aipost/hyperparameters-tuning-in-ai/

오늘은 딥러닝에서 하이퍼파라미터 튜닝에 대해서 알아보고자 합니다. 본 글을 작성하기 앞에 해당 글은 아래 블로그를 참고하여 작성되었음을 사전에 …

+ 여기에 표시

Source: daje0601.tistory.com

Date Published: 11/25/2022

View: 8141

제대로 된 하이퍼 파라미터 튜닝은 추후 자세히 다루도록 하겠다. 하이퍼 파라미터 튜닝(HyperParameter Tuning). 머신러닝을 공부하다 보면 하이퍼 …

+ 자세한 내용은 여기를 클릭하십시오

Source: gooopy.tistory.com

Date Published: 2/29/2021

View: 3853

머신러닝에서 하이퍼 파라미터란 쉽게 생각해서 사용자의 입력값, 혹은 설정 가능한 옵션이라고 볼 수 있다. 모든 데이터와 문제에 대해 가장 좋은 하이퍼 …

+ 여기에 자세히 보기

Source: gils-lab.tistory.com

Date Published: 3/8/2022

View: 8567

이 글은 edwith 딥러닝 2단계 강의 목록 중 ‘하이퍼파라미터 튜닝’을 수강하고 정리하였습니다. 수식, 그래프 이미지의 출처는 강의 필기 캡처본 …

+ 여기에 보기

Source: sy-programmingstudy.tistory.com

Date Published: 6/21/2022

View: 2232

하이퍼 파라미터 튜닝 시, test set을 사용해서는 안된다. Test set은 모델의 최종 성능 평가를 위해서 사용되므로 모델의 학습 과정에서는 절대 사용 …

+ 여기를 클릭

Source: yeong-jin-data-blog.tistory.com

Date Published: 5/10/2022

View: 1067

이 외에도 다양한 하이퍼파라미터가 존재하고 최적의 딥러닝 모델 생성을 위해 하이퍼파라미터 튜닝 … 하이퍼파라미터 튜닝 기법 적용 시 주요 활동 …

+ 자세한 내용은 여기를 클릭하십시오

Source: blog.skby.net

Date Published: 5/3/2021

View: 3013

주제와 관련된 더 많은 사진을 참조하십시오 [딥러닝II] 10강. 하이퍼파라미터 튜닝. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

# Import Module import pandas as pd import numpy as np from tensorflow import keras from tensorflow.keras.layers import Dense # Dataset Setting def f(x): return x + 10 # Data set 생성 np.random.seed(1234) # 동일한 난수가 나오도록 Seed를 고정한다. X_train = np.random.randint(0, 100, (100, 1)) X_test = np.random.randint(100, 200, (20, 1)) # Label 생성 y_train = f(X_train) y_test = f(X_test) # Model Setting model = keras.Sequential() model.add(Dense(16, activation=’linear’)) model.add(Dense(1, activation=’linear’)) # Compile: 학습 셋팅 opt = keras.optimizers.Adam(learning_rate=0.01) model.compile(optimizer=opt, loss = ‘mse’) # 특성 스케일 조정 mean_key = np.mean(X_train) std_key = np.std(X_train) X_train_std = (X_train – mean_key)/std_key y_train_std = (y_train – mean_key)/std_key X_test_std = (X_test – mean_key)/std_key

# 하이퍼 파라미터 튜닝 best_score = -1 # 현재까지 찾은 가장 높은 f1_score (f1 score는 절대 0보다 작을수 없기에, -1로 설정해도 무방) from sklearn.metrics import f1_score for model_func in [KNN, SVC]: for param in param_grid[model_func]: model = model_func(**param).fit(Train_X, Train_Y) pred_Y = model.predict(Test_X) score = f1_score(Test_Y, pred_Y, average = ‘micro’) if score > best_score: # 현재 점수가 지금까지 찾은 최고 점수보다 좋으면, 최고 모델, 파라미터, 점수 업데이트 best_model_func = model_func best_score = score best_param = param # best_model = model

# 모델 불러오기 from sklearn.neighbors import KNeighborsClassifier as KNN from sklearn.svm import SVC

Babysittine one model Training many models in parallel 팬더와 같다. (팬더는 한 번에 한 마리씩만 아이를 갖는다) 그리고 아기 팬더가 살아남을 수 있도록 정말 많은 노력을 기울인다. 말 그대로 모델이나 아기 팬더를 ‘돌보기’하는 것이다. – 포유류의 번식 과정 캐비어 전략이라고도 한다. (물고기랑 비슷하기 때문) 한 철에 1억개의 알을 품는 물고기가 있다. 물고기가 번식하는 과정은 하나에 많은 집중을 쏟기보다 하나 또는 그 이상이 더 잘 살아남기를 그지 지켜본다. – 어류, 파충류의 번식 과정

📚 Hyperparameter란

일반적으로 모델에서 학습을 통해서 값이 결정되는 값을 파라미터라고 한다. 이 중에서 사용자가 값을 결정할 수 있는 파라미터를 하이퍼 파라미터라고 부른다. 하이퍼파라미터는 여러 가지 값을 대입해 보면서 최적의 값을 선택해야 한다. 이렇게 파라미터 값을 변경하면서 최적 값을 찾는 과정을 “모델 튜닝” 이라고 부른다.

📌주의점!

하이퍼 파라미터 튜닝 시, test set을 사용해서는 안된다. Test set은 모델의 최종 성능 평가를 위해서 사용되므로 모델의 학습 과정에서는 절대 사용되어서는 안된다. 따라서 validation set을 추가하여 사용해야 한다.

📚 K-fold crossvalidation

Cross validation은 모델 과적합을 감소시키고 모형의 일반화 가능성을 높이기 위해서 사용한다.

학습 데이터를 K개의 데이터셋으로 나누고 번갈아 가면서 학습/테스트를 진행함. 일반적으로 k는 5~10 사이의 값을 사용한다.

그리고 각 split마다 산출되는 평가 수치(accuracy, F1 score 등)의 평균값으로 최적의 파라미터를 선정한다.

k-fold로 최적의 파라미터 값을 선정한 후에는, 해당 파라미터로 다시 전체 train set으로 학습하고 test set으로 평가를 진행한다.

📚 Grid Search

파라미터 값으로 입력할 수 있는 후보가 많을 때, 하나씩 값을 입력해보면서 최적의 파라미터 값을 구하는 방법.

Grid-search is used to find the optimal hyperparameters of a model which results in the most ‘accurate’ predictions

✅ Example

import pandas as pd import numpy as np from sklearn.linear_model import LogisticRegression iris = pd.read_csv(‘iris_data.csv’) iris_np = iris.values #독립/종속변수 선택 iris_features = iris_np[:,:-1] iris_labels = iris_np[:,-1] #기본 전처리 from sklearn import preprocessing le = preprocessing.LabelEncoder() # categorical 변수의 값을 숫자로 변환 input_classes =[‘versicolor’,’virginica’] le.fit(input_classes) iris_labels = le.transform(iris_labels #train/test 분리 from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(iris_features, iris_labels, test_size = 0.3, random_state=0)

iris 데이터를 불러오고 전처리, 학습데이터 분리 등을 진행한다.

lr_model = LogisticRegression(max_iter=10000) from sklearn.model_selection import GridSearchCV LR_params = { ‘penalty’ : [‘l1’, ‘l2’], # ‘none’ 포함 가능 ‘C’: [0.01, 0.05, 0.1, 0.5, 1, 5, 10], ‘solver’:[‘saga’] } grid_search = GridSearchCV(lr_model, param_grid=LR_params, cv=5) grid_search.fit(X_train, y_train)

penalty = none인 경우에는 자동으로 C 값을 무시하고 그리드서치를 진행한다.

#최적 파라미터 값 출력 grid_search.best_params_

#최적 파라미터로 trainset 다시 학습 best_model2 = LogisticRegression(C=0.1, penalty=’l1′, solver=’saga’, max_iter=2000) best_model2.fit(X_train, y_train) y_preds = best_model2.predict(X_test) accuracy_score(y_test, y_preds)

최적의 파라미터로 다시 전체 trainset에 대해서 학습을 진행하고, test set에 대해서 평가를 진행한다.

trainset으로 다시 학습하지 않고 그냥 Grid search의 결과를 그대로 사용하고자 하는 경우 위와 같이 적용 가능

📚 Reference

이상엽, 연세대학교 언론홍보영상학부 부교수, 22-1학기 기계학습 이론과 실습

딥 러닝 하이퍼 파라미터 튜닝 | [딥러닝Ii] 10강. 하이퍼파라미터 튜닝 374 개의 새로운 답변이 업데이트되었습니다.

당신은 주제를 찾고 있습니까 “딥 러닝 하이퍼 파라미터 튜닝 – [딥러닝II] 10강. 하이퍼파라미터 튜닝“? 다음 카테고리의 웹사이트 https://you.1111.com.vn 에서 귀하의 모든 질문에 답변해 드립니다: https://you.1111.com.vn/blog/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 한경훈 이(가) 작성한 기사에는 조회수 2,298회 및 좋아요 30개 개의 좋아요가 있습니다.

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

교재 : 밑바닥부터 시작하는 딥러닝 (저자 : 사이토 고키 / 번역 : 이복연 / 출판사 : 한빛미디어)

https://www.hanbit.co.kr/store/books/look.php?p_code=B8475831198

코드 : https://github.com/WegraLee/deep-learning-from-scratch

강좌 홈페이지 : https://sites.google.com/site/kyunghoonhan/deep-learning-ii

PPT 이미지 출처

p.31 : https://www.brainstobytes.com/test-training-and-validation-sets/

p.32 : https://www.andreaperlato.com/aipost/hyperparameters-tuning-in-ai/

오늘은 딥러닝에서 하이퍼파라미터 튜닝에 대해서 알아보고자 합니다. 본 글을 작성하기 앞에 해당 글은 아래 블로그를 참고하여 작성되었음을 사전에 …

+ 여기에 보기

Source: daje0601.tistory.com

Date Published: 5/25/2022

View: 6948

나는 현재 ai 부트캠프를 하고 있고, 현재 딥러닝 부분을 하고 있다 … 하이퍼 파라미터 튜닝은 간단하게 모델에 존재하는 많은 파라미터(사용자 …

+ 여기에 더 보기

Source: velog.io

Date Published: 10/19/2022

View: 4664

이 글은 edwith 딥러닝 2단계 강의 목록 중 ‘하이퍼파라미터 튜닝’을 수강하고 정리하였습니다. 수식, 그래프 이미지의 출처는 강의 필기 캡처본 …

+ 자세한 내용은 여기를 클릭하십시오

Source: sy-programmingstudy.tistory.com

Date Published: 5/1/2022

View: 492

제대로 된 하이퍼 파라미터 튜닝은 추후 자세히 다루도록 하겠다. 하이퍼 파라미터 튜닝(HyperParameter Tuning). 머신러닝을 공부하다 보면 하이퍼 …

+ 자세한 내용은 여기를 클릭하십시오

Source: gooopy.tistory.com

Date Published: 10/13/2021

View: 323

Deep learning 모델에서는 최적의 LR을 유동적으로 찾기 위해서, 여러가지 technique을 사용한다. 가장 대표적인 방법으로, 모델의 학습 Process 도중에 …

+ 더 읽기

Source: analysisbugs.tistory.com

Date Published: 2/18/2021

View: 9656

이 외에도 다양한 하이퍼파라미터가 존재하고 최적의 딥러닝 모델 생성을 위해 하이퍼파라미터 튜닝 … 하이퍼파라미터 튜닝 기법 적용 시 주요 활동 …

+ 여기를 클릭

Source: blog.skby.net

Date Published: 12/23/2021

View: 9886

하이퍼파라미터 튜닝 중에서 도움이 되는 라이브러리가 있어서 소개해드리고자 합니다. Optuna라는 라이브러리 인데요. Kaggle Competition에 많은 유저들이 사용하고 …

+ 여기에 자세히 보기

Source: dacon.io

Date Published: 12/24/2022

View: 9551

머신러닝에서 하이퍼 파라미터란 쉽게 생각해서 사용자의 입력값, 혹은 설정 가능한 옵션이라고 볼 수 있다. 모든 데이터와 문제에 대해 가장 좋은 하이퍼 …

+ 여기에 표시

Source: gils-lab.tistory.com

Date Published: 4/27/2022

View: 9883

주제와 관련된 더 많은 사진을 참조하십시오 [딥러닝II] 10강. 하이퍼파라미터 튜닝. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

!pip install wandb from wandb . keras import WandbCallback wandb_project = “review” wandb_group = “” wandb . login !git clone http : // github . com / wandb / tutorial !cd tutorial ; pip install – – upgrade – r requirements . txt ; !wandb login [ key ] !python – c “import keras; print(keras.__version__)” url = “https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv” data = pd . read_csv ( url , header = None ) . values X = data [ : , 0 : 8 ] y = data [ : , 8 ] from tensorflow . keras . models import Sequential wandb . init ( project = wandb_project ) inputs = X . shape [ 1 ] wandb . config . epochs = 50 wandb . config . batch_Size = 20 model = Sequential ( ) model . add ( Dense ( 100 , input_dim = 8 , activation = ‘relu’ ) ) model . add ( Dense ( 1 , activation = ‘sigmoid’ ) ) model . compile ( loss = ‘binary_crossentropy’ , optimizer = ‘adam’ , metrics = [ ‘accuracy’ ] ) model . fit ( X , y , validation_split = 0.3 , epochs = wandb . config . epochs , batch_size = wandb . config . batch_Size , callbacks = [ WandbCallback ( ) ] )

import numpy as np import pandas as pd import os from sklearn . model_selection import KFold , StratifiedKFold import tensorflow as tf from tensorflow . keras . preprocessing . image import ImageDataGenerator ( x_train , y_train ) , ( x_test , y_test ) = boston_housing . load_data ( ) kf = KFold ( n_splits = 5 ) skf = StratifiedKFold ( n_splits = 5 , random_state = 42 , shuffle = True ) from tensorflow . keras . models import Sequential from tensorflow . keras . layers import Dense x_train = pd . DataFrame ( x_train ) y_train = pd . DataFrame ( y_train ) for train_index , val_index in kf . split ( np . zeros ( x_train . shape [ 0 ] ) , y_train ) : train_data = x_train . iloc [ train_index , : ] val_data = x_train . iloc [ val_index , : ] train_target = y_train . iloc [ train_index ] val_target = y_train . iloc [ val_index ] model = Sequential ( ) model . add ( Dense ( 64 , activation = ‘relu’ ) ) model . add ( Dense ( 64 , activation = ‘relu’ ) ) model . add ( Dense ( 1 ) ) model . compile ( loss = ‘mean_squared_error’ , optimizer = ‘adam’ ) model . fit ( train_data , train_target , epochs = 10 , batch_size = 30 , validation_data = ( val_data , val_target ) ) result = model . evaluate ( x_test , y_test , batch_size = 128 ) print ( “mse or loss:” , result )

# Import Module import pandas as pd import numpy as np from tensorflow import keras from tensorflow.keras.layers import Dense # Dataset Setting def f(x): return x + 10 # Data set 생성 np.random.seed(1234) # 동일한 난수가 나오도록 Seed를 고정한다. X_train = np.random.randint(0, 100, (100, 1)) X_test = np.random.randint(100, 200, (20, 1)) # Label 생성 y_train = f(X_train) y_test = f(X_test) # Model Setting model = keras.Sequential() model.add(Dense(16, activation=’linear’)) model.add(Dense(1, activation=’linear’)) # Compile: 학습 셋팅 opt = keras.optimizers.Adam(learning_rate=0.01) model.compile(optimizer=opt, loss = ‘mse’) # 특성 스케일 조정 mean_key = np.mean(X_train) std_key = np.std(X_train) X_train_std = (X_train – mean_key)/std_key y_train_std = (y_train – mean_key)/std_key X_test_std = (X_test – mean_key)/std_key

논문 : Yu, T., & Zhu, H. (2020). Hyper-parameter optimization: A review of algorithms and applications. arXiv preprint arXiv:2003.05689.

1. Contribution

– Hyper-parameters are systematically categorized into structure-related and training-related. The discussion of their importance and empirical strategies are helpful to determine which hyper-parameters are involved in HPO.

– HPO algorithms are analyzed and compared in detail, according to their accuracy, efficiency and scope of application. The analysis on previous studies is not only committed to include state-of-the-art algorithms, but also to clarify limitations on certain scenarios.

– By comparing HPO toolkits, this study gives insights of the design of close-sourced libraries and open-sourced services, and clarifies the targeted users for each of them.

– The potential research direction regarding to existing problems are suggested on algorithms, applications and techniques.

2. Major Hyper-Parameters and Search Space

위 논문에서 얘기하는 바로, 하이퍼 파라미터는 크게 두 종류로 정의될 수 있다.

하나는 Training-related parameter로 모델 학습 과정에 관련된 하이퍼파라미터이다.

본 섹션에서 소개될 대표적인 예로, LR (learning rate)와 Optimizer 가 존재한다.

두 번째는 structure-related parameter로 모델의 구조에 관련된 하이퍼파라미터이다.

본 섹션에서 소개될 대표적인 예로, 히든 레이어의 개수, 각 레이어에 사용되는 뉴런의 개수 등이 존재한다.

(1) Training-related parameter

(A) LR

신경망 : [하이퍼 파라미터 튜닝,ETF, Keras Tuner]

첫 게시글 🎉

비공개로 노션에다가 기록을 남기다가 이렇게 공유를 하는 블로그는 처음인 것 같다

노션에서 벨로그로 오게된 이유는..

노션은 블로그의 내용이 길어지면 렉이 너무 심했다 ㅠㅠ

색깔도 넣고 이쁘게 블록도 마음대로 옮길 수 있어서

꾸미기에 참 좋은 노트이자 블로그였으나

포트폴리오 만드는 용도로 써야할 것 같다 😂

나는 현재 ai 부트캠프를 하고 있고, 현재 딥러닝 부분을 하고 있다

그래서 강의 내용에 대해 기록을 해볼 것이고,

여태껏 notion에 적은 기록들도 앞으로 천천히 복습차 옮겨올 생각이다.

교육을 받는 입장이므로 틀린 내용이 있을 수 있으니 검색해서 들어왔다면, 이 글 이 외에도 여러 글을 서치해보길 ..

(혹시 보다가 틀린게 있다면, 댓글로 부탁해요 😎)

👩🏻 신경망과 하이퍼파라미터 튜닝

하이퍼 파라미터 튜닝은 간단하게 모델에 존재하는 많은 파라미터(사용자 지정 변수)에 대해 최적의 값을 찾아 모델의 성능을 높이는 과정이다

더 자세한 뜻을 알고 싶으면 검색이 답!(개념 설명 목적이 아니므로 총총.. )

하이퍼파라미터가 신경망에서 중요한 이유? 다른 모델의 경우 몇몇 파라미터만 손보면 되지만, 신경망에는 다른 모델에 비해 매우 많은 파라미터가 있다.(은닉층의 수, 노드의 수, optimizer, loss 등)

하이퍼 파라미터 튜닝이 모델의 정확도에 엄청난 영향을 주므로 시간이 많이 소요되더라도 최적의 파라미터 값을 찾아야 한다.

하이퍼파라미터를 튜닝한 모델의 실제 예측정확도(성능)를 아는 방법은?

답변) cv(교차검증)을 통해 정확도를 구해 최종 정확도가 실제 정확도와 비슷하도록 만들 수 있음

교차검증에 대해 잠시 알고 넘어가보자 !

🔥 교차검증(cross validation = CV)

: 데이터가 제한적일 때, 데이터 세트를 train, validation 세트로 바꿔가며 학습과 검증을 하는 방법

교차검증의 장점? 하는이유?

-> 데이터가 제한적일 때 검증할데이터 데이터를 train, validation 데이터로 교차로 써가면서 데이터를 효율적으로 쓸 수 있기 때문이다.

1. K-Fold 교차검증

: k개로 데이터를 나눈 후 k번 만큼 학습과 검증을 세트를 수행하는 것

(위 사진은 그럼 5-fold 교차검증이 된다)

<한계>

레이블이 0,1,2로 존재한다고 가정해보면, 우연히 훈련데이터 레이블에 0,1의 값만 들어가게 될 수 있다. 그럴 때 2라는 답을 도출할 수 없다는 문제가 있다.

<코드 예시>

import numpy as np import pandas as pd import os from sklearn . model_selection import KFold , StratifiedKFold import tensorflow as tf from tensorflow . keras . preprocessing . image import ImageDataGenerator ( x_train , y_train ) , ( x_test , y_test ) = boston_housing . load_data ( ) kf = KFold ( n_splits = 5 ) skf = StratifiedKFold ( n_splits = 5 , random_state = 42 , shuffle = True ) from tensorflow . keras . models import Sequential from tensorflow . keras . layers import Dense x_train = pd . DataFrame ( x_train ) y_train = pd . DataFrame ( y_train ) for train_index , val_index in kf . split ( np . zeros ( x_train . shape [ 0 ] ) , y_train ) : train_data = x_train . iloc [ train_index , : ] val_data = x_train . iloc [ val_index , : ] train_target = y_train . iloc [ train_index ] val_target = y_train . iloc [ val_index ] model = Sequential ( ) model . add ( Dense ( 64 , activation = ‘relu’ ) ) model . add ( Dense ( 64 , activation = ‘relu’ ) ) model . add ( Dense ( 1 ) ) model . compile ( loss = ‘mean_squared_error’ , optimizer = ‘adam’ ) model . fit ( train_data , train_target , epochs = 10 , batch_size = 30 , validation_data = ( val_data , val_target ) ) result = model . evaluate ( x_test , y_test , batch_size = 128 ) print ( “mse or loss:” , result )

from sklearn . model_selection import KFold , StratifiedKFold for train_index , val_index in kf . split ( np . zeros ( x_train . shape [ 0 ] ) , y_train ) : train_data = x_train . iloc [ train_index , : ] val_data = x_train . iloc [ val_index , : ] train_target = y_train . iloc [ train_index ] val_target = y_train . iloc [ val_index ]

🔥 하이퍼파라미터 튜닝 방식

1) Grad Student Descent

: 100 % 수동으로 직접 하나하나 하이퍼파라미터를 구하는 방식

2) Grid Search

: 하이퍼 파라미터 값을 직접 지정해 리스트 형태로 param_grid에 설정해 두면 그 값들의 조합을 적용해 모델의 성능을 평가해주는 방식

여러 조합보다는 하나의 조합을 찾는데 활용하는게 한다

모델을 위한 하이퍼파라미터만 제대로 튜닝한다면 원하는 성능의 90-95%는 채울 수 있다.

3) Random Search

: 탐색하는 수들을 크게크게 건너 띄어 최적의 파라미터를 탐색는 방식

grid search 보다 효율적

상대적으로 중요한 파라미터에 대한 탐색을 더한다

크게 건너띄므로 완벽한 파라미터는 찾을 수 없다

4) bayesian method

: 이전 탐색에서 얻을 결과를 추후 탐색에 반영하는 방식

케라스 튜너로 사용가능

🔥 하이퍼파라미터 튜닝 가능한 옵션

1) batch_size

: 데이터 학습 시 한번 에 몇 개의 데이터를 다루는지 결정하는 파라미터

너무 클 경우 , 가중치업데이트 시 모든 데이터의 loss를 계산해야 하는 문제점과 메모리 문제

, 가중치업데이트 시 모든 데이터의 loss를 계산해야 하는 문제점과 메모리 문제 너무 작은 경우, 데이터가 잘게 쪼개져 학습하는데 오랜시간이 걸리며 노이즈도 많이 생김

데이터가 잘게 쪼개져 학습하는데 오랜시간이 걸리며 노이즈도 많이 생김 보통 batch size는 32-512까지 2의 제곱수로 많이 정함(gpu 관련)

batchnorm(배치정규화)

: re-centering 및 re-scailing 등의 방법으로 레이어 입력의 정규화를 통해 인공신경망을 더 빠르고 안정적으로 만드는데 사용되는 방법

keras.layers.BatchNormalization()

2) optimizer(최적화도구)

loss함수의 최소값을 찾기 위한 옵션

adam이 보통 제일 좋은 결과를 냄(요즘은 adamW도 많이 사용)

옵티마이저에 따라 learning rate와 momentum도 조절

참고하기 : https://keras.io/ko/optimizers/

3) learnig rate(학습률)

: gradient의 방향으로 얼마나 빠르게 이동할 것인지 결정하는 변수

: 가중치 업데이트 시 한 스텝을 가는 보폭

기본값 .01

너무 높은 경우 , 발산

, 발산 너무 낮은 경우 , 학습속도 느리며 최저점 찾는데 실패할 수 있음

, 학습속도 느리며 최저점 찾는데 실패할 수 있음 optimizer 내부 옵션으로 사용

<코드 예시>

def model_bulider ( hp ) : model = keras . Sequential ( ) model . add ( Flatten ( input_shape = ( 28 , 28 ) ) ) hp_unit = hp . Int ( ‘units’ , min_value = 32 , max_value = 512 , step = 32 ) model . add ( Dense ( units = hp_unit , activation = ‘relu’ ) ) model . add ( Dense ( 10 , activation = ‘softmax’ ) ) 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

4) momentum(모멘텀)

optimizer에서 sgd와 함께 사용하는 옵션 — 밑에 코드 예시 보기

sgd만으로는 최적의 값을 도출하기 어려움(대부분 adam 보다 낮은 성능)

모멘텀의 역할은 경사 하강법에서 옵티마이저가 지역최소값에 빠졌을 때 탈출하도록 도와줌 지역 최소값 : 한 범위 내의 최소값, 손실함수 전체 범위에서 최소값을 찾아야 하므로 한 구역의 최소값이 최소값으로 인식되면 안됨

오목한 밥그릇에서 공을 굴릴 경우 관성으로 최저점을 지나쳐가는 원리

<코드 예시>

sgd = optimizers . SGD ( lr = 0.01 , decay = 1e – 6 , momentum = 0.9 , nesterov = True ) model . compile ( loss = ‘mean_squared_error’ , optimizer = sgd )

또는

model . compile ( loss = ‘categorical_crossentropy’ , optimizer = SGD ( lr = 0.01 , momentum = 0.9 ) , metrics = [ ‘accuracy’ ] )

5) Network weight initailize(네트워크 가중치 초기화)

: 가중치 초기화(시작점 찾기)에 따라 성능에 큰 영향을 줌

초기화 모두는 다양(정규분포, X-vier, He 등.. )

초기 정확도가 적은 epoch를 최적의 값을 찾기도 함

🔑가중치 초기화 별 활성화 값

1) 정규분포 초기화 : 표준편차를 1로 가중치를 초기화했을 때 활성화 값 분포

2) Xavier 초기화 : 가중치들의 편차를 1/sqrt(n)(=제곱근 n) 으로 초기화했을 때 활성화 값의 분포

3) He 초기화 : 가중치 표준편차를 sqrt(2/n)으로 초기화했을 때 활성화 값의 분포 — 고르게 분포

<활성화 함수에 따라 가중치 초기값 추천>

sigmoid 함수 일 때 , Xavier 초기화 — 표준편차 : 1/sqrt(n)

, Xavier 초기화 — 표준편차 : 1/sqrt(n) Relu 함수일 때, He 초기화 — 표준편차 : 1/sqrt(2/n)

6) Activation Fuction(활성화 함수)

보통 은닉층에서 Relu사용, 출력층에는 sigmoid나 softmax를 사용

하지만, 모델에 따라 tahn등 의 다른 활성함수들도 시도해보는 것 추천

6) 드롭아웃, Weight Constraint, weight decay

드롭 아웃 : 학습 중 무작위로 비활성화 하고 싶은 뉴런 비율

: 학습 중 무작위로 비활성화 하고 싶은 뉴런 비율 가중치 규제(wieght constraint) : 물리적으로 Weight의 크기를 제한해서 값이 커지면 다른 값으로 변경해버리는 기술

: 물리적으로 Weight의 크기를 제한해서 값이 커지면 다른 값으로 변경해버리는 기술 가중치 감소(wieght decay) : 과적합 방지를 위해 학습 규제 전략의 하나로 말 그대로 가중치를 감소시키는 기술

: 과적합 방지를 위해 학습 규제 전략의 하나로 말 그대로 가중치를 감소시키는 기술 과적합이나 일반화 문제가 없다면 굳이 쓸 필요 없음

from keras import regularizers model2 = models . Sequential ( ) model2 . add ( layers . Dense ( 16 , kernel_regularizer = regularizers . l2 ( 0.001 ) , activation = ‘relu’ , input_shape = ( 10000 , ) ) ) model_dropout . add ( layers . Dropout ( 0.5 ) ) model2 . add ( layers . Dense ( 16 , kernel_regularizer = regularizers . l2 ( 0.001 ) , activation = ‘relu’ ) ) model2 . add ( layers . Dense ( 1 , activation = ‘sigmoid’ ) )

from tensorflow . keras . constraints import max_norm model . add ( Dense ( 64 , kernel_constraint = max_norm ( 2 . ) ) )

7) 은닉층의 수, 뉴런(노드)의 수

하나의 은닉층으로 이루어진 퍼셉트론일 경우 선형적 분리가 가능한 데이터셋만

학습이 가능

학습이 가능 layer를 추가하여 비선형 데이터도 학습 가능해짐

layer가 너무 많아질 경우 과적합이나, 학습시간의 문제가 있음

신경망이 커질수록 드롭아웃 규제나 다른 규제방법으로 과적합을 해결해아 함

보통 layer의 수가 노드의 수 보다 중요

👩🏻 실험 추적 프레임워크 (ETF)

🔥 Wandb 이용

!pip install wandb from wandb . keras import WandbCallback wandb_project = “review” wandb_group = “” wandb . login !git clone http : // github . com / wandb / tutorial !cd tutorial ; pip install – – upgrade – r requirements . txt ; !wandb login [ key ] !python – c “import keras; print(keras.__version__)” url = “https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv” data = pd . read_csv ( url , header = None ) . values X = data [ : , 0 : 8 ] y = data [ : , 8 ] from tensorflow . keras . models import Sequential wandb . init ( project = wandb_project ) inputs = X . shape [ 1 ] wandb . config . epochs = 50 wandb . config . batch_Size = 20 model = Sequential ( ) model . add ( Dense ( 100 , input_dim = 8 , activation = ‘relu’ ) ) model . add ( Dense ( 1 , activation = ‘sigmoid’ ) ) model . compile ( loss = ‘binary_crossentropy’ , optimizer = ‘adam’ , metrics = [ ‘accuracy’ ] ) model . fit ( X , y , validation_split = 0.3 , epochs = wandb . config . epochs , batch_size = wandb . config . batch_Size , callbacks = [ WandbCallback ( ) ] )

< 출력화면 >

출력된 링크로 들어가보면 세부사항들을 기록들을 볼 수 있다

👩🏻 Keras Tuner

Keras Tuner

: TensorFlow 프로그램의 최적 파라미터 선택에 도움을 주는 라이브러리

🔥 이미지 분류 코드 예시

[머신러닝] 하이퍼 파라미터 튜닝, Cross validation

📚 Hyperparameter란

일반적으로 모델에서 학습을 통해서 값이 결정되는 값을 파라미터라고 한다. 이 중에서 사용자가 값을 결정할 수 있는 파라미터를 하이퍼 파라미터라고 부른다. 하이퍼파라미터는 여러 가지 값을 대입해 보면서 최적의 값을 선택해야 한다. 이렇게 파라미터 값을 변경하면서 최적 값을 찾는 과정을 “모델 튜닝” 이라고 부른다.

📌주의점!

하이퍼 파라미터 튜닝 시, test set을 사용해서는 안된다. Test set은 모델의 최종 성능 평가를 위해서 사용되므로 모델의 학습 과정에서는 절대 사용되어서는 안된다. 따라서 validation set을 추가하여 사용해야 한다.

📚 K-fold crossvalidation

Cross validation은 모델 과적합을 감소시키고 모형의 일반화 가능성을 높이기 위해서 사용한다.

학습 데이터를 K개의 데이터셋으로 나누고 번갈아 가면서 학습/테스트를 진행함. 일반적으로 k는 5~10 사이의 값을 사용한다.

그리고 각 split마다 산출되는 평가 수치(accuracy, F1 score 등)의 평균값으로 최적의 파라미터를 선정한다.

k-fold로 최적의 파라미터 값을 선정한 후에는, 해당 파라미터로 다시 전체 train set으로 학습하고 test set으로 평가를 진행한다.

📚 Grid Search

파라미터 값으로 입력할 수 있는 후보가 많을 때, 하나씩 값을 입력해보면서 최적의 파라미터 값을 구하는 방법.

Grid-search is used to find the optimal hyperparameters of a model which results in the most ‘accurate’ predictions

✅ Example

import pandas as pd import numpy as np from sklearn.linear_model import LogisticRegression iris = pd.read_csv(‘iris_data.csv’) iris_np = iris.values #독립/종속변수 선택 iris_features = iris_np[:,:-1] iris_labels = iris_np[:,-1] #기본 전처리 from sklearn import preprocessing le = preprocessing.LabelEncoder() # categorical 변수의 값을 숫자로 변환 input_classes =[‘versicolor’,’virginica’] le.fit(input_classes) iris_labels = le.transform(iris_labels #train/test 분리 from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(iris_features, iris_labels, test_size = 0.3, random_state=0)

iris 데이터를 불러오고 전처리, 학습데이터 분리 등을 진행한다.

lr_model = LogisticRegression(max_iter=10000) from sklearn.model_selection import GridSearchCV LR_params = { ‘penalty’ : [‘l1’, ‘l2’], # ‘none’ 포함 가능 ‘C’: [0.01, 0.05, 0.1, 0.5, 1, 5, 10], ‘solver’:[‘saga’] } grid_search = GridSearchCV(lr_model, param_grid=LR_params, cv=5) grid_search.fit(X_train, y_train)

penalty = none인 경우에는 자동으로 C 값을 무시하고 그리드서치를 진행한다.

#최적 파라미터 값 출력 grid_search.best_params_

#최적 파라미터로 trainset 다시 학습 best_model2 = LogisticRegression(C=0.1, penalty=’l1′, solver=’saga’, max_iter=2000) best_model2.fit(X_train, y_train) y_preds = best_model2.predict(X_test) accuracy_score(y_test, y_preds)

최적의 파라미터로 다시 전체 trainset에 대해서 학습을 진행하고, test set에 대해서 평가를 진행한다.

trainset으로 다시 학습하지 않고 그냥 Grid search의 결과를 그대로 사용하고자 하는 경우 위와 같이 적용 가능

📚 Reference

이상엽, 연세대학교 언론홍보영상학부 부교수, 22-1학기 기계학습 이론과 실습

모델 성능 향상을 위한 하이퍼 파라미터 튜닝

728×90

이번 포스팅에서는 지도 학습 모델을 만들때 필수적인 단계인 하이퍼 파라미터 튜닝에 대해 소개한다.

하이퍼 파라미터와 하이퍼 파라미터 튜닝이란?

머신러닝에서 하이퍼 파라미터란 쉽게 생각해서 사용자의 입력값, 혹은 설정 가능한 옵션이라고 볼 수 있다. 모든 데이터와 문제에 대해 가장 좋은 하이퍼 파라미터 값이 있으면 좋겠지만, 아래 그림과 같이 데이터에 따라 좋은 하이퍼 파라미터라는 것이 다르다.

데이터에 따라 좋은 모델과 하이퍼파라미터가 다르다.

그래서 데이터마다 좋은 입력값을 설정해주는 노가다 작업이 필요한데, 이를 하이퍼 파라미터 튜닝이라고 한다. 예를 들어서, k-최근접 이웃에서 k를 3으로도 해보고, 5로도 해보고, 10으로도 해 본 다음 그 가운데 가장 좋은 k를 찾는 과정이다. 하이퍼 파라미터 튜닝을 노가다라고 표현한 이유는 해보기 전까진 3이 좋을지, 5가 좋을지, 10이 좋을지 알 수 없기 때문이다 (실제로 2000년대 초반에는 최적의 k를 찾는 연구가 수행되었지만, 결론은 data by data라고 났다).

그리드 서치(grid search)

하이퍼 파라미터 그리드는 한 모델의 하이퍼 파라미터 조합을 나타내며, 그리드 서치란 하이퍼 파라미터 그리드에 속한 모든 파라미터 조합을 비교 평가하는 방법을 의미한다.

예를 들어, 아래 그림에서는 k-최근접 이웃의 하이퍼파라미터인 이웃수(n_neighbors)와 거리 척도 (metric)에 대한 하이퍼 파라미터 그리드를 보여준다. 이 그리드에서 이웃 수는 {3, 5, 7}의 범위에서, 거리 척도는 {Manhattan, Euclidean}의 범위에서 튜닝되며, 그 결과로 총 3 x 2 = 6개의 파라미터 조합이 생성되었다. 이제 이 모든 조합을 비교하여 최적의 파라미터를 찾으면 된다. 물론 전역 최적이 아니라, 지역 최적일 가능성이 매우매우 높겠지만 말이다.

그리드 서치 구현

sklearn에는 GridSearchCV라는 함수가 있지만, 전처리 과정 등을 효과적으로 반영하기 어렵기에 필자는 잘 사용하지 않는다 (물론 사용은 매우 간편하긴 하다). 그 대신에 여기에서는 sklearn.model_selection.ParameterGrid이라는 함수를 소개한다.

이 함수는 이름 그대로 파라미터 그리드를 만들어주는 함수이며, 입력으로는 아래 구조와 같은 사전을 받는다.

위 예시에서는 n_neighbors라는 파라미터는 {3, 5, 7}이라는 범위에서, metric이라는 파라미터는 {“Manhattan”, “Euclidean”}이라는 범위에서 튜닝할 것이라는 뜻을 내포한 파라미터 그리드를 정의한 것이다. 물론, n_neighbors와 metric은 어떤 함수의 키워드이며, {3, 5, 7}과 {“Manhattan”, “Euclidean”}는 해당 키워드에 대해 입력 가능한 값이다. 그렇지 않다면 당연히 정상적으로 작동할 수 없다.

이제 파라미터 그리드 함수가 어떻게 작동하는지 보자. 아래 사진에서 보듯이, 사전을 파라미터 그리드 함수의 입력으로 넣게 되면, 파라미터 그리드에 있는 각 셀 (하나의 파라미터 조합)을 리턴하는 제너레이터를 반환한다.

이 함수의 출력값을 효과적으로 사용하기 위해서는 아래 두 가지 개념을 알고 있어야 한다.

먼저 어떤 함수의 입력으로 사전을 사용하고 싶다면, 사전 앞에 **를 붙여야 한다.

그렇게 되면, 사전의 key와 일치하는 함수의 키워드에 value가 아래 그림과 같이 입력되게 된다.

두 번째 필요한 개념은 최소값 혹은 최대값 찾기 알고리즘이다. 알고리즘이라고 해서 거창해보이지만, 사실 누구나 이해할 수 있는 매우 간단한 개념이다. 물론 max 함수를 사용하면 손쉽겠지만, 각 값을 순회하면서 최대값을 업데이트해야 하는 상황에서는 max 함수를 사용하기 어렵다 (빈 리스트에 값들을 추가해서 max 함수를 쓰면 되지 않느냐라고 반문할 수 있겠지만, 하이퍼 파리미터 튜닝에서는 메모리 낭비로 이어질 가능성이 매우 높다).

[10, 20, 30, 10, 20]이라는 리스트 L이 있고, 이 리스트에서 최대값을 찾는다고 하자.

그러면 아래와 같은 절차로 탐색할 수 있다.

(0번째 이터레이션) 우리가 찾을 최대값인 Max_value를 매우 작은 값으로 설정

(1번째 이터레이션) 0번째 요소와 Max_value를 비교 ==> 0번째 요소가 더 크므로 Max_value를 0번째 요소로 업데이트

(2번째 이터레이션) 1번째 요소와 Max_value를 비교 ==> 1번째 요소가 더 크므로 1번째 요소로 Max_value를 업데이트

(3번째 이터레이션) 2번째 요소와 Max_value를 비교 ==> 2번째 요소가 더 크므로 2번째 요소로 Max_value를 업데이트

2번째 요소와 Max_value를 비교 ==> 2번째 요소가 더 크므로 2번째 요소로 Max_value를 업데이트 (4번째 이터레이션) 3번째 요소와 Max_value를 비교 ==> Max_value가 더 크므로 pass~

3번째 요소와 Max_value를 비교 ==> Max_value가 더 크므로 pass~ (5번째 이터레이션) 2번째 요소와 Max_value를 비교 ==> Max_value가 더 크므로 pass~

실습 코드

이제 실제 코드를 가지고 어떻게 튜닝을 할 수 있는지 더 자세히 살펴보자.

먼저, sklearn.datasets에 있는 iris 데이터를 가져온다.

# 예제 데이터 불러오기 from sklearn.datasets import load_iris X = load_iris()[‘data’] # feature Y = load_iris()[‘target’] # label

그리고 학습 데이터와 평가 데이터로 분리한다.

# 학습 데이터와 평가 데이터 분할 from sklearn.model_selection import train_test_split Train_X, Test_X, Train_Y, Test_Y = train_test_split(X, Y)

모델은 KNN과 SVM을 사용하자.

# 모델 불러오기 from sklearn.neighbors import KNeighborsClassifier as KNN from sklearn.svm import SVC

이제 모델별 파라미터 그리드를 설계한다.

param_grid_for_knn에는 KNN의 파라미터 그리드를, param_grid_for_svm에는 SVM의 파라미터 그리드를 정의한다.

그리고 이 값들을 param_grid라는 사전에 추가한다. 이는 모델이 여러 개 있을 때 파라미터 튜닝을 쉽게 하는 팁이다.

# 파라미터 그리드 생성 param_grid = dict() # 입력: 모델 함수, 출력: 모델의 하이퍼 파라미터 그리드 # 모델별 파라미터 그리드 생성 param_grid_for_knn = ParameterGrid({“n_neighbors”: [3, 5, 7], “metric”:[‘euclidean’, ‘manhattan’]}) param_grid_for_svm = ParameterGrid({“C”: [0.1, 1, 10], “kernel”:[‘rbf’, ‘linear’]}) # 모델 – 하이퍼 파라미터 그리드를 param_grid에 추가 param_grid[KNN] = param_grid_for_knn param_grid[SVC] = param_grid_for_svm

이제 튜닝을 시작하자.

먼저, 현재까지 찾은 가장 높은 f1_score를 초기화한다.

f1_score가 가장 큰 모델과 파라미터를 찾는 것이기에, 매우 작은 값으로 설정해야 하지만, 이 값은 0보다 작을 수 없기에 0이하로 설정해도 무방하다.

그리고 model_func으로 KNN과 SVC 함수를 순회하고, 앞서 정의한 param_grid 사전을 이용하여 각 모델의 파라미터를 param으로 받는다. 모델별 파라미터 그리드를 포함하는 param_grid를 정의한 것이 이렇게 라인 수를 줄여주는데 효과적이다. 이제 param으로 각 파라미터를 돌면서, model_func에 param을 입력하여 모델을 학습하고 f1_score를 계산한다. 이 score가 best_score보다 크다면, 최고 점수와 모델, 파라미터를 업데이트한다. 이 과정에서 best_score를 업데이트하지않게 되면, 튜닝하는 효과가 전혀 없으므로 주의해야 한다.

# 하이퍼 파라미터 튜닝 best_score = -1 # 현재까지 찾은 가장 높은 f1_score (f1 score는 절대 0보다 작을수 없기에, -1로 설정해도 무방) from sklearn.metrics import f1_score for model_func in [KNN, SVC]: for param in param_grid[model_func]: model = model_func(**param).fit(Train_X, Train_Y) pred_Y = model.predict(Test_X) score = f1_score(Test_Y, pred_Y, average = ‘micro’) if score > best_score: # 현재 점수가 지금까지 찾은 최고 점수보다 좋으면, 최고 모델, 파라미터, 점수 업데이트 best_model_func = model_func best_score = score best_param = param # best_model = model

이제 튜닝된 결과를 확인하자.

print(“모델:”, best_model_func) print(“점수:”, best_score) print(“파라미터:”, best_param)

(Tip) 튜닝 코드에서 기껏 모델을 학습해놓고 best_model을 주석 처리한 이유는 최종 모델을 학습할 때는 아래와 같이 전체 데이터를 사용하는 경우가 종종 있기 때문에 그렇다.

# 최종 모델 학습: 전체 X와 전체 Y에 대해. final_model = best_model_func(**best_param).fit(X, Y)

728×90

하이퍼 파라미터 튜닝

그리드 검색 이면의 아이디어는 매우 직관적입니다. 다른 하나는 고정된 상태에서 하나의 하이퍼 매개변수를 점진적으로 이동하고 결과를 기록합니다. 기본적으로 최적화될 수 있다고 의심되는 모든 하이퍼 매개변수에 대해 그렇게 하십시오. 이것은 하이퍼 매개변수를 최적화하고 조정하는 매우 비싸고 번거로운 방법이며 오늘날에는 하이퍼 매개변수 검색을 수행하는 덜 효율적인 방법 중 하나로 간주됩니다. 더 잘할 수 있는 방법을 알아보겠습니다.

무작위 검색

로부터 랜덤 검색 페이퍼

처음에는 생각하지 않을 수 있지만 모든 하이퍼 매개변수의 값을 무작위로 선택하는 것이 실제로 하이퍼 매개변수 조정에 대한 훨씬 더 효율적인 접근 방식입니다. 이 시나리오에서는 모든 하이퍼 매개변수를 일정하게 유지하고 반복적인 방식으로 하나를 조정하는 대신 모든 시도에서 모든 하이퍼 매개변수 값을 무작위로 초기화합니다. 결과적으로 일부 하이퍼 매개 변수가 다른 것보다 최적화에 더 중요하기 때문에 이것이 더 좋습니다. 중요한 하이퍼 매개 변수와 중요하지 않은 하이퍼 매개 변수를 구별할 수 없는 경우 우리가 할 수 있는 차선책은 무작위로 선택하는 것입니다. 각 시도에서 모든 하이퍼 매개변수 값. 그러면 중요한 하이퍼 매개변수에 대해 더 높은 샘플링 속도가 허용되므로 최적화가 더 효율적입니다. 랜덤 검색과 그리드 검색의 이점은 다음에서 살펴봅니다. 이것 종이.

베이지안 최적화

로부터 베이지안 최적화 저장소

실제로 높은 수준의 개념은 매우 간단합니다. 우리는 ML에서 항상 시도하는 것과 동일한 작업을 베이지안 최적화로 수행하려고 합니다. 즉, 추정 함수, 공식화하기에는 너무 복잡한 함수입니다. 그러나 이제 우리가 근사하려고 하는 함수는 ML 알고리즘입니다. 이 경우 우리는 딥 러닝이나 다른 무거운 형태의 ML을 사용할 수 있으며 하이퍼 매개변수의 다양한 조합을 테스트하기 위해 제한된 수의 시도만 실행할 수 있습니다. 다음 하이퍼 매개변수 구성을 선택하기 전에 ML 알고리즘의 결과를 지능적으로 근사할 수 있다면 잠재적으로 많은 시간과 비용을 절약할 수 있습니다.

로부터 TPE 종이

몇 가지 베이지안 최적화 기능이 있지만 핵심 아이디어는 베이지안 접근 방식을 사용하여 이전 구성 세트와 그 결과를 감안할 때 하이퍼 매개변수의 더 나은 구성을 추정하는 것입니다. 위의 이미지에서 우리는 이라는 알고리즘을 사용합니다. TPE , 기본 개념은 성능에 따라 두 그룹, 즉 더 나은 결과를 얻은 그룹과 더 나쁜 결과를 얻은 그룹으로 시도를 분리하는 것입니다. 그런 다음 나쁜 분포와 반대되는 좋은 분포에 속할 확률을 기반으로 다음 하이퍼 매개변수 세트를 선택합니다.

#hyperparameter-tuning #hyperband #hyper-parameter-tuning #머신러닝 #딥러닝

로데이터사이언스닷컴

하이퍼 파라미터 튜닝

코드나 수학을 사용하지 않고 하이퍼 매개변수 조정 방법에 대한 간단한 상위 수준 개요입니다. 그리드 검색 이면의 아이디어는 매우 직관적입니다. 다른 하나는 고정된 상태에서 하나의 하이퍼 매개변수를 점진적으로 이동하고 결과를 기록합니다. 기본적으로 최적화될 수 있다고 의심되는 모든 하이퍼 매개변수에 대해 그렇게 하십시오.

[10] Deep Learning – Hyper Parameter Tuning

반응형

[9] Deep Learning – Hyper Parameter Tuning

Hyper Parameter

모델을 만들고 학습시킬 때 , 다양한 부분에서 hyper parameter를 선택해야 한다. hyper parameter 들의 예시로는 뉴런의 개수 , hidden layer의 개수 , 학습률 등 다양하게 존재한다.

이러한 hyper parameter들의 조합의 가짓수는 선택해야 할 parameter가 추가될 때마다 빠른 속도로 커질 것이다. 최적의 hyper parameter 조합을 찾는다는 것은 hyper parameter들로 이루어진 공간을 탐색해야 한다는 것과 같다. 이러한 부분에 있어서 최적화 기법을 사용할 수 있고 hyper parameter를 tuning 할 수 있다.

다음은 hyper parameter들에 대한 몇가지 예시와 설명이다.

Batch size (배치 크기) : 한번에 연산할 데이터의 크기 , 1 batch size = mini batch

학습률 (lr) : 경사 방향으로 얼마나 빠르고 느리게 이동할지 결정하는 값

layer 개수 : hidden layer의 개수

뉴런 개수 : 한 층에 존재하는 뉴런의 개수

사용할 optimizer , activation function 종류 등등…

최적의 hyper parameter 조합을 찾기 위해서 가장 좋은 방법은 모든 조합을 다 해보고 경우를 비교해보는 것이다. 이러한 아이디어에 기반해 모든 hyper parameter 조합에 대해 시도해 결과를 내보내고 Cross validation을 통해 어떤 경우가 가장 좋은 점수를 내는지 확인해보는 방법을 사용할 수 있다.

위의 최적의 hyper parameter 조합을 찾는 방법에 대해서는 아래의 코드에 좀 더 자세히 나와있다.

관련 코드

ref. “Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition”

반응형

키워드에 대한 정보 딥 러닝 하이퍼 파라미터 튜닝

다음은 Bing에서 딥 러닝 하이퍼 파라미터 튜닝 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 [딥러닝II] 10강. 하이퍼파라미터 튜닝

  • 밑바닥부터 시작하는 딥러닝
  • 딥러닝
  • 인공지능
  • 인공신경망
  • 한경훈
  • 수원대
  • 하이퍼파라미터
  • hyperparameter
[딥러닝II] #10강. #하이퍼파라미터 #튜닝


YouTube에서 딥 러닝 하이퍼 파라미터 튜닝 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 [딥러닝II] 10강. 하이퍼파라미터 튜닝 | 딥 러닝 하이퍼 파라미터 튜닝, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  어쌔신 크리드 오디세이 스핑크스 | 어쌔신크리드 오디세이 - 스핑크스 수수께끼 공략 12문제 및 답안지 230 개의 베스트 답변

Leave a Comment