하이퍼 파라미터 튜닝 | [딥러닝Ii] 10강. 하이퍼파라미터 튜닝 모든 답변

당신은 주제를 찾고 있습니까 “하이퍼 파라미터 튜닝 – [딥러닝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: 10/1/2021

View: 275

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

하이퍼 파라미터와 하이퍼 파라미터 튜닝이란? 머신러닝에서 하이퍼 파라미터란 쉽게 생각해서 사용자의 입력값, 혹은 설정 가능한 옵션이라고 볼 수 있다 …

+ 여기에 보기

Source: gils-lab.tistory.com

Date Published: 9/18/2021

View: 3022

Tensorflow-1.4. 기초(5)-하이퍼 파라미터 튜닝

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

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

Source: gooopy.tistory.com

Date Published: 6/13/2022

View: 2524

하이퍼파라미터 튜닝을 쉽고 빠르게 하는 방법 – DACON

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

+ 여기에 표시

Source: dacon.io

Date Published: 3/17/2021

View: 6536

하이퍼 파라미터 튜닝 (1) – 분석벌레의 공부방

하이퍼 파라미터 튜닝 (1) … 논문 : Yu, T., & Zhu, H. (2020). Hyper-parameter optimization: A review of algorithms and applications. arXiv …

+ 여기에 자세히 보기

Source: analysisbugs.tistory.com

Date Published: 2/18/2022

View: 7291

모델(v2)을 튜닝하는 하이퍼 매개 변수 – Azure Machine Learning

Azure Machine Learning을 사용하면 하이퍼 매개 변수 튜닝을 자동화하고 병렬 … Call sweep() on your command job to sweep over your parameter …

+ 여기를 클릭

Source: learn.microsoft.com

Date Published: 6/11/2021

View: 8576

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

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

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

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

Date Published: 7/30/2021

View: 2636

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

3장. 크로스밸리데이션과 하이퍼파라미터 튜닝. 대부분의 머신러닝 알고리즘에는 연구자나 기술자들이 지정해야 할 설정들이 많습니다. 이런 튜닝 옵션을 …

+ 여기에 표시

Source: you.maxfit.vn

Date Published: 8/19/2022

View: 8839

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

주제와 관련된 더 많은 사진을 참조하십시오 [딥러닝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

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

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

Tensorflow-1.4. 기초(5)-하이퍼 파라미터 튜닝

728×90

반응형

이전 포스트에서 데이터 셋을 표준 정규분포로 만들어 더 쉽게 데이터셋을 모델에 학습시켜보았다. 그러나, 패턴의 단순함에 비해 여전히 정확도(Accuracy)가 원하는 수준까지 나오질 않는다. 대체 왜 그럴까?

이번 포스트에서는 경험적 하이퍼 파라미터 튜닝 방법을 사용하여, 하이퍼 파라미터를 튜닝해보도록 하겠다. 제대로 된 하이퍼 파라미터 튜닝은 추후 자세히 다루도록 하겠다.

하이퍼 파라미터 튜닝 (HyperParameter Tuning)

머신러닝을 공부하다 보면 하이퍼 파라미터라는 단어와 파라미터라는 단어가 반복해서 등장하는 것을 볼 수 있다.

파라미터(Parmeter)라는 단어는 코딩을 하다 보면 자주 보이는, 수정할 수 있는 값인데, 갑자기 왜 하이퍼 파라미터라는 값이 등장할까? 또, 왜 파라미터는 수정할 수 없는 값이라고 할까?

머신러닝에서의 파라미터는 가중치(Weight), 편향(Bias) 같은 학습 과정에서 모델이 자동으로 업그레이드하며 갱신하는 값을 가리킨다.

파라미터는 학습 도중 머신이 알아서 바꿔가는 것이므로, 연구자가 손 델 수 있는 값이 아니다.

머신러닝에서 하이퍼 파라미터는 그 외 연구자가 수정할 수 있는 값으로, 학습률, Optimizer, 활성화 함수, 손실 함수 등 다양한 인자들을 가리킨다.

이 값들을 손보는 이유는 모델이 학습에 사용한 데이터 셋의 형태를 정확히 알지 못하고, 데이터 셋의 형태에 따라 이들을 사용하는 방법이 바뀌기 때문이다.

1. 하이퍼 파라미터 튜닝을 해보자.

우리는 이미 우리가 만들어낸 데이터 셋의 형태를 알고 있다.

우리가 만들어낸 데이터셋은 선형 데이터셋인데, 우리는 활성화 함수로 은닉층에서 ReLU를 사용하였다.

이번엔 모든 활성화 함수를 linear로 만들어 학습시켜보자.

# 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

# 학습 >>> model.fit(X_train_std, y_train_std, epochs = 100) Epoch 1/100 4/4 [==============================] – 0s 2ms/step – loss: 2.5920 Epoch 2/100 4/4 [==============================] – 0s 997us/step – loss: 1.5766 Epoch 3/100 4/4 [==============================] – 0s 2ms/step – loss: 0.7499 Epoch 4/100 4/4 [==============================] – 0s 2ms/step – loss: 0.3371 Epoch 5/100 4/4 [==============================] – 0s 2ms/step – loss: 0.0817 Epoch 6/100 4/4 [==============================] – 0s 2ms/step – loss: 0.0059 … Epoch 95/100 4/4 [==============================] – 0s 1ms/step – loss: 6.0676e-15 Epoch 96/100 4/4 [==============================] – 0s 1ms/step – loss: 6.2039e-15 Epoch 97/100 4/4 [==============================] – 0s 2ms/step – loss: 6.4773e-15 Epoch 98/100 4/4 [==============================] – 0s 2ms/step – loss: 5.6185e-15 Epoch 99/100 4/4 [==============================] – 0s 1ms/step – loss: 6.5939e-15 Epoch 100/100 4/4 [==============================] – 0s 1ms/step – loss: 6.7939e-15

# label과 test set을 비교해보자. pred = model.predict(X_test_std.reshape(X_test_std.shape[0])) pred_restore = pred * std_key + mean_key predict_DF = pd.DataFrame({“predict”:pred_restore.reshape(pred_restore.shape[0]), “label”:y_test.reshape(y_test.shape[0])}) predict_DF[“gap”] = predict_DF[“predict”] – predict_DF[“label”] predict_DF

# 정확도(Accuracy)를 보자 >>> print(“Accuracy:”, np.sqrt(np.mean((pred_restore – y_test)**2))) Accuracy: 1.0789593218788873e-05

고작, 은닉층의 활성화 함수만 바꿨을 뿐인데, 이전보다 훨씬 좋은 결과가 나왔다.

패턴을 거의 완벽하게 찾아내었으며, 정확도(Accuracy) 역시 0.000010789(e-05는 $10^{-5}$을 하라는 소리다.)로 거의 0에 근사하게 나왔다.

2. 정리

위 결과를 보면, 아무리 단순한 패턴이라 할지라도, 그 데이터 셋의 형태를 반영하지 못한다면, 정확히 그 결과를 찾아내지 못할 수 있다는 것을 알 수 있다.

인공지능은 흔히들 생각하는 빅데이터를 넣으면, 그 안에 숨어 있는 패턴이 자동으로 나오는 마법의 상자가 아니라, 연구자가 그 데이터에 대한 이해를 가지고 여러 시도를 해, 제대로 된 설계를 해야만 내가 원하는 제대로 된 패턴을 찾아낼 수 있는 도구다.

그러나, 실전에서는 지금처럼 우리가 이미 패턴을 알고 있는 경우는 없기 때문에 다양한 도구를 이용해서, 데이터를 파악하고, 적절한 하이퍼 파라미터를 찾아낸다.

넣을 수 있는 모든 하이퍼 파라미터를 다 넣어보는 “그리드 서치(Greed search)” 나 랜덤 한 값을 넣어보고 지정한 횟수만큼 평가하는 “랜덤 서치(Random Search)” , 순차적으로 값을 넣어보고, 더 좋은 해들의 조합에 대해서 찾아가는 “베이지안 옵티마이제이션(Bayesian Optimization)” 등 다양한 방법이 있다.

나 랜덤 한 값을 넣어보고 지정한 횟수만큼 평가하는 , 순차적으로 값을 넣어보고, 더 좋은 해들의 조합에 대해서 찾아가는 등 다양한 방법이 있다. 같은 알고리즘이라 할지라도, 데이터를 어떻게 전처리하느냐, 어떤 활성화 함수를 쓰느냐, 손실 함수를 무엇을 쓰느냐 등과 같은 다양한 요인으로 인해 다른 결과가 나올 수 있으므로, 경험을 많이 쌓아보자.

728×90

반응형

하이퍼파라미터 튜닝을 쉽고 빠르게 하는 방법

대회 막바지라 다들 하이퍼파라미터 튜닝 작업을 많이 하실 것 같습니다.

하이퍼파라미터 튜닝 중에서 도움이 되는 라이브러리가 있어서 소개해드리고자 합니다.

Optuna라는 라이브러리 인데요. Kaggle Competition에 많은 유저들이 사용하고 있습니다.

이 노트북을 보시고 도움이 되셨다면 upvoting 부탁드려요 ㅎㅎ

노트북은 Kaggle노트북 환경에서 작성하였습니다.

하이퍼 파라미터 튜닝 (1)

논문 : 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

모델(v2)을 튜닝하는 하이퍼 매개 변수 – Azure Machine Learning

목차

모델(v2)을 튜닝하는 하이퍼 매개 변수

아티클

06/06/2022

읽는 데 28분 걸림

기여자 17명

이 문서의 내용

적용 대상: Azure CLI ml 확장 v2(현재)

SweepJob 형식을 통해 Azure Machine Learning SDK v2 및 CLI v2를 사용하여 효율적인 하이퍼 매개 변수 튜닝을 자동화합니다.

평가판에 대한 매개 변수 검색 공간 정의 비우기 작업에 대한 샘플링 알고리즘 지정 최적화 목표 지정 낮은 성능 작업에 대한 조기 종료 정책 지정 비우기 작업에 대한 제한 정의 정의된 구성을 사용하여 실험 시작 학습 작업 시각화 모델에 최상의 구성 선택

하이퍼 매개 변수 튜닝이란?

하이퍼 매개 변수는 모델 학습 프로세스를 제어할 수 있게 하는 조정 가능한 매개 변수입니다. 예를 들어 신경망을 사용하여 숨겨진 레이어 수와 각 레이어의 노드 수를 결정합니다. 모델 성능은 하이퍼 매개 변수에 따라 크게 달라집니다.

하이퍼 매개 변수 최적화라고도 하는 하이퍼 매개 변수 튜닝은 최상의 성능을 발휘하는 하이퍼 매개 변수 구성을 찾는 프로세스입니다. 프로세스는 일반적으로 계산 비용이 많이 들고 수동입니다.

Azure Machine Learning을 사용하면 하이퍼 매개 변수 튜닝을 자동화하고 병렬로 실험을 실행하여 하이퍼 매개 변수를 효율적으로 최적화할 수 있습니다.

검색 공간 정의

하이퍼 매개 변수마다 정의된 값의 범위를 탐색하여 하이퍼 매개 변수를 튜닝합니다.

하이퍼 매개 변수는 불연속 또는 연속일 수 있으며 매개 변수 식에서 설명하는 값의 분포를 가집니다.

개별 하이퍼 매개 변수

개별 하이퍼 매개 변수는 불연속 값 중 Choice 로 지정됩니다. Choice 는 다음이 될 수 있습니다.

하나 이상의 쉼표로 구분된 값

range 개체

개체 임의의 list 개체

from azure.ai.ml.sweep import Choice command_job_for_sweep = command_job( batch_size=Choice(values=[16, 32, 64, 128]), number_of_hidden_layers=Choice(values=range(1,5)), )

이 사례에서 batch_size 는 [16, 32, 64, 128] 값 중 하나를, number_of_hidden_layers 는 [1, 2, 3, 4] 값 중 하나를 사용합니다.

배포를 사용하여 다음과 같은 고급 불연속 하이퍼 매개 변수도 지정할 수 있습니다.

QUniform(min_value, max_value, q) – round(Uniform(min_value, max_value) / q) * q와 같은 값을 반환합니다.

– round(Uniform(min_value, max_value) / q) * q와 같은 값을 반환합니다. QLogUniform(min_value, max_value, q) – round(exp(Uniform(min_value, max_value)) / q) * q와 같은 값을 반환합니다.

– round(exp(Uniform(min_value, max_value)) / q) * q와 같은 값을 반환합니다. QNormal(mu, sigma, q) – round(Normal(mu, sigma) / q) * q와 같은 값을 반환합니다.

– round(Normal(mu, sigma) / q) * q와 같은 값을 반환합니다. QLogNormal(mu, sigma, q) – round(exp(Normal(mu, sigma)) / q) * q와 같은 값을 반환합니다.

연속 하이퍼 매개 변수

연속 하이퍼 매개 변수는 연속 값의 범위에 대한 배포로 지정됩니다.

Uniform(min_value, max_value) – min_value와 max_value 간에 균일하게 분산된 값을 반환합니다.

– min_value와 max_value 간에 균일하게 분산된 값을 반환합니다. LogUniform(min_value, max_value) – 반환 값의 로그가 균일하게 분산되도록 exp(Uniform(min_value, max_value))에 따라 도출된 값을 반환합니다.

– 반환 값의 로그가 균일하게 분산되도록 exp(Uniform(min_value, max_value))에 따라 도출된 값을 반환합니다. Normal(mu, sigma) – 평균 mu 및 표준 편차 sigma를 사용하여 일반적으로 배포되는 실제 값 반환

– 평균 mu 및 표준 편차 sigma를 사용하여 일반적으로 배포되는 실제 값 반환 LogNormal(mu, sigma) – 반환 값의 로그가 정규 분포되도록 exp(Normal(mu, sigma))에 따라 도출된 값을 반환합니다.

매개 변수 공간 정의의 예제는 다음과 같습니다.

from azure.ai.ml.sweep import Normal, Uniform command_job_for_sweep = command_job( learning_rate=Normal(mu=10, sigma=3), keep_probability=Uniform(min_value=0.05, max_value=0.1), )

이 코드는 learning_rate 및 keep_probability 라는 두 개의 매개 변수를 사용하여 검색 공간을 정의합니다. learning_rate 는 평균 값 10과 표준 편차 3이 있는 정규 분포를 갖게 됩니다. keep_probability 는 최솟값 0.05 및 최댓값 0.1이 있는 균일한 분포를 갖게 됩니다.

CLI의 경우 비우기 작업 YAML 스키마를 사용하여 YAML에서 검색 공간을 정의할 수 있습니다.

search_space: conv_size: type: choice values: [2, 5, 7] dropout_rate: type: uniform min_value: 0.1 max_value: 0.2

하이퍼 매개 변수 공간 샘플링

하이퍼 매개 변수 공간을 통해 사용하도록 매개 변수 샘플링 방법을 지정합니다. Azure Machine Learning에서는 다음 방법을 지원합니다.

무작위 샘플링

그리드 샘플링

Bayesian 샘플링

무작위 샘플링

무작위 샘플링은 불연속 및 연속 하이퍼 매개 변수를 지원합니다. 낮은 성능 작업의 조기 종료를 지원합니다. 일부 사용자는 무작위 샘플링을 사용하여 초기 검색을 수행한 다음, 검색 공간을 상세 검색하여 결과를 향상시킵니다.

무작위 샘플링에서 하이퍼 매개 변수 값은 정의된 검색 공간에서 임의로 선택됩니다. 명령 작업이 만들어지면 비우기 매개 변수를 사용하여 샘플링 알고리즘을 정의할 수 있습니다.

from azure.ai.ml.sweep import Normal, Uniform, RandomParameterSampling command_job_for_sweep = command_job( learning_rate=Normal(mu=10, sigma=3), keep_probability=Uniform(min_value=0.05, max_value=0.1), batch_size=Choice(values=[16, 32, 64, 128]), ) sweep_job = command_job_for_sweep.sweep( compute=”cpu-cluster”, sampling_algorithm = “random”, … )

sobol

sobol은 비우기 작업 유형에서 지원하는 무작위 샘플링의 한 유형입니다. sobol을 사용하면 시드를 사용하여 결과를 재현하고 검색 공간 분포를 더 균일하게 처리할 수 있습니다.

sobol을 사용하려면 아래 예제와 같이 RandomParameterSampling 클래스를 사용하여 시드 및 규칙을 추가합니다.

from azure.ai.ml.sweep import RandomParameterSampling sweep_job = command_job_for_sweep.sweep( compute=”cpu-cluster”, sampling_algorithm = RandomParameterSampling(seed=123, rule=”sobol”), … )

그리드 샘플링

그리드 샘플링은 불연속 하이퍼 매개 변수를 지원합니다. 검색 공간을 철저히 검색하도록 예산을 편성할 수 있는 경우에는 그리드 샘플링을 사용합니다. 낮은 성능 작업의 조기 종료를 지원합니다.

그리드 샘플링은 가능한 모든 값에 간단한 그리드 검색을 수행합니다. choice 하이퍼 매개 변수에서만 그리드 샘플링을 사용할 수 있습니다. 예를 들어 다음 공간에는 샘플이 6개 있습니다.

from azure.ai.ml.sweep import Choice command_job_for_sweep = command_job( batch_size=Choice(values=[16, 32]), number_of_hidden_layers=Choice(values=[1,2,3]), ) sweep_job = command_job_for_sweep.sweep( compute=”cpu-cluster”, sampling_algorithm = “grid”, … )

Bayesian 샘플링

Bayesian 샘플링은 Bayesian 최적화 알고리즘을 기반으로 합니다. 이전 샘플에서 수행한 방식을 기반으로 샘플을 선택하여 새 샘플이 기본 메트릭을 향상시킵니다.

하이퍼 매개 변수 공간을 탐색하는 데 예산이 충분한 경우에는 Bayesian 샘플링을 사용하는 것이 좋습니다. 최상의 결과를 얻으려면 튜닝되는 하이퍼 매개 변수 수의 20배 이상의 최대 작업 수를 권장합니다.

동시 작업의 수는 튜닝 프로세스의 효율성에 영향을 줍니다. 병렬 처리 수준이 낮을수록 이전에 완료된 작업의 혜택을 받는 작업 수가 증가하므로 동시 작업 수가 적을수록 샘플링 수렴이 향상될 수 있습니다.

Bayesian 샘플링은 검색 공간을 통해 choice , uniform 및 quniform 배포만 지원합니다.

from azure.ai.ml.sweep import Uniform, Choice command_job_for_sweep = command_job( learning_rate=Uniform(min_value=0.05, max_value=0.1), batch_size=Choice(values=[16, 32, 64, 128]), ) sweep_job = command_job_for_sweep.sweep( compute=”cpu-cluster”, sampling_algorithm = “bayesian”, … )

비우기 목표 지정

하이퍼 매개 변수 튜닝을 최적화하려는 기본 메트릭과 목표를 지정하여 비우기 작업의 목표를 정의합니다. 각 학습 작업은 기본 메트릭에 대해 평가됩니다. 조기 종료 정책은 기본 메트릭을 사용하여 성능이 낮은 작업을 식별합니다.

primary_metric : 기본 메트릭 이름은 학습 스크립트에서 로그한 메트릭의 이름과 정확하게 일치해야 합니다.

: 기본 메트릭 이름은 학습 스크립트에서 로그한 메트릭의 이름과 정확하게 일치해야 합니다. goal : Maximize 또는 Minimize 일 수 있으며, 작업을 평가할 때 기본 메트릭을 최대화할지 아니면 최소화할지 여부를 결정합니다.

from azure.ai.ml.sweep import Uniform, Choice command_job_for_sweep = command_job( learning_rate=Uniform(min_value=0.05, max_value=0.1), batch_size=Choice(values=[16, 32, 64, 128]), ) sweep_job = command_job_for_sweep.sweep( compute=”cpu-cluster”, sampling_algorithm = “bayesian”, primary_metric=”accuracy”, goal=”Maximize”, )

이 샘플에서는 “정확도”를 극대화합니다.

하이퍼 매개 변수 튜닝에 대한 메트릭 기록

모델에 대한 학습 스크립트는 SweepJob에서 하이퍼 매개 변수 튜닝을 위해 액세스할 수 있도록 동일한 해당 메트릭 이름을 사용하여 모델 학습 중에 기본 메트릭을 로그해야 합니다.

다음 샘플 코드 조각을 사용하여 학습 스크립트에 기본 메트릭을 로그합니다.

import mlflow mlflow.log_metric(“accuracy”, float(val_accuracy))

학습 스크립트는 val_accuracy 를 계산하고 기본 메트릭 “정확도”로 로그합니다. 메트릭이 로그될 때마다 하이퍼 매개 변수 튜닝 서비스에 의해 수신됩니다. 사용자는 보고 빈도를 결정해야 합니다.

학습 작업의 로깅 값에 대한 자세한 내용은 Azure ML 학습 작업에서 로깅 사용을 참조하세요.

초기 종료 정책 지정

조기 종료 정책을 사용하여 성능이 낮은 작업을 자동으로 종료합니다. 초기 종료는 계산 효율성을 향상시킵니다.

정책이 적용되는 시기를 제어하는 매개 변수를 다음과 같이 구성할 수 있습니다.

evaluation_interval : 정책 적용 빈도입니다. 학습 스크립트에서 기본 메트릭을 기록할 때마다 한 번의 간격으로 계산됩니다. 따라서 1의 evaluation_interval 은 학습 스크립트에서 기본 메트릭을 보고할 때마다 정책을 적용합니다. 2의 evaluation_interval 은 다른 모든 시간에 정책을 적용합니다. 지정되지 않는 경우 evaluation_interval 은 기본적으로 0으로 설정됩니다.

: 정책 적용 빈도입니다. 학습 스크립트에서 기본 메트릭을 기록할 때마다 한 번의 간격으로 계산됩니다. 따라서 1의 은 학습 스크립트에서 기본 메트릭을 보고할 때마다 정책을 적용합니다. 2의 은 다른 모든 시간에 정책을 적용합니다. 지정되지 않는 경우 은 기본적으로 0으로 설정됩니다. delay_evaluation : 지정된 간격 동안 첫 번째 정책 평가를 지연합니다. 이는 모든 구성이 최소 간격 동안 실행되도록 허용하여 학습 작업의 조기 종료를 방지하는 선택적 매개 변수입니다. 지정된 경우 정책은 delay_evaluation보다 크거나 같은 evaluation_interval의 모든 배수마다 적용됩니다. 지정되지 않는 경우 delay_evaluation 은 기본적으로 0으로 설정됩니다.

Azure Machine Learning은 다음 초기 종료 정책을 지원합니다.

산적 정책

산적 정책은 slack 요소/slack 양 및 평가 간격을 기반으로 합니다. 기본 메트릭이 가장 성공적인 작업의 지정된 slack 요소/slack 양 내에 있지 않으면 산적 정책에서 해당 작업을 종료합니다.

참고 Bayesian 샘플링은 초기 종료를 지원하지 않습니다. Bayesian 샘플링을 사용할 경우 early_termination_policy = None 을 설정합니다.

다음 구성 매개 변수를 지정합니다.

slack_factor 또는 slack_amount : 가장 효율적으로 수행되는 학습 작업과 관련하여 허용되는 slack입니다. slack_factor 는 비율로 허용되는 slack을 지정합니다. slack_amount 는 비율 대신에 절대 양으로 허용되는 slack을 지정합니다. 예를 들어 간격 10에 적용되는 산적 정책을 사용하는 것이 좋습니다. 기본 메트릭을 보고한 10 간격에서 가장 효율적으로 수행되는 작업이 0.8이고 기본 메트릭을 최대화하는 것을 목표로 한다고 가정합니다. 정책에서 slack_factor 를 0.2로 지정하면 10 간격에서 최상의 메트릭이 0.66(0.8/(1+ slack_factor )) 미만인 모든 학습 작업이 종료됩니다.

evaluation_interval : (선택 사항) 정책 적용 빈도입니다.

delay_evaluation : (선택 사항) 지정된 간격 동안 첫 번째 정책 평가를 지연합니다.

from azure.ai.ml.sweep import BanditPolicy sweep_job.early_termination = BanditPolicy(slack_factor = 0.1, delay_evaluation = 5, evaluation_interval = 1)

이 예제에서는 평가 간격 5에서 시작하여 메트릭이 보고될 때 모든 간격에서 초기 종료 정책이 적용됩니다. 최상의 메트릭이 (1/(1+0.1) 또는 가장 효율적으로 수행되는 작업의 91% 미만인 모든 작업이 종료됩니다.

중앙값 중지 정책

중앙값 중지는 작업에서 보고하는 기본 메트릭의 실행 평균을 기반으로 하는 초기 종료 정책입니다. 이 정책은 모든 학습 작업에서 실행 평균을 계산하고, 기본 메트릭 값이 평균의 중앙값보다 낮은 작업을 중지합니다.

이 정책은 다음 구성 매개 변수를 사용합니다.

evaluation_interval : 정책 적용에 대한 빈도입니다(선택적 매개 변수).

: 정책 적용에 대한 빈도입니다(선택적 매개 변수). delay_evaluation : 지정된 간격 동안 첫 번째 정책 평가를 지연합니다(선택적 매개 변수).

from azure.ai.ml.sweep import MedianStoppingPolicy sweep_job.early_termination = MedianStoppingPolicy(delay_evaluation = 5, evaluation_interval = 1)

이 예제에서는 평가 간격 5에서 시작하여 모든 간격에서 초기 종료 정책이 적용됩니다. 최상의 기본 메트릭이 모든 학습 작업에서 1:5 간격에 걸쳐 실행 평균의 중앙값보다 낮은 경우 작업은 5 간격에서 중지됩니다.

잘림 선택 영역 정책

잘림 선택 영역은 각 평가 간격에서 성능이 가장 낮은 작업의 백분율을 취소합니다. 작업은 기본 메트릭을 사용하여 비교됩니다.

이 정책은 다음 구성 매개 변수를 사용합니다.

truncation_percentage : 각 평가 간격에서 종료할 성능이 가장 낮은 작업의 백분율입니다. 1~99 사이의 정수 값입니다.

: 각 평가 간격에서 종료할 성능이 가장 낮은 작업의 백분율입니다. 1~99 사이의 정수 값입니다. evaluation_interval : (선택 사항) 정책 적용 빈도입니다.

: (선택 사항) 정책 적용 빈도입니다. delay_evaluation : (선택 사항) 지정된 간격 동안 첫 번째 정책 평가를 지연합니다.

: (선택 사항) 지정된 간격 동안 첫 번째 정책 평가를 지연합니다. exclude_finished_jobs : 정책을 적용할 때 완료된 작업을 제외할지 여부를 지정합니다.

from azure.ai.ml.sweep import TruncationSelectionPolicy sweep_job.early_termination = TruncationSelectionPolicy(evaluation_interval=1, truncation_percentage=20, delay_evaluation=5, exclude_finished_jobs=true)

이 예제에서는 평가 간격 5에서 시작하여 모든 간격에서 초기 종료 정책이 적용됩니다. 5 간격의 성능이 5 간격의 모든 작업 중에서 가장 낮은 20% 성능인 경우 작업은 5 간격에서 종료되고 정책을 적용할 때 완료된 작업은 제외됩니다.

종료 정책 없음(기본값)

지정된 정책이 없으면 하이퍼 매개 변수 튜닝 서비스에서 모든 학습 작업이 완료될 때까지 실행되도록 합니다.

sweep_job.early_termination = None

초기 종료 정책 선택

가능성이 높은 작업을 종료하지 않고 비용 절약을 제공하는 보수적인 정책을 원하는 경우 evaluation_interval 1 및 delay_evaluation 5의 중앙값 중지 정책을 사용하는 것이 좋습니다. 이는 일반적인 설정이며, 기본 메트릭에서 손실 없이 약 25%-35% 절감을 제공할 수 있습니다(계산 데이터에 따라).

1 및 5의 중앙값 중지 정책을 사용하는 것이 좋습니다. 이는 일반적인 설정이며, 기본 메트릭에서 손실 없이 약 25%-35% 절감을 제공할 수 있습니다(계산 데이터에 따라). 더욱 적극적으로 절약하려면 허용 가능한 slack이 더 작은 산적 정책이나 잘림 비율이 더 큰 잘림 선택 정책을 사용합니다.

비우기 작업에 대한 제한 설정

비우기 작업에 대한 제한을 설정하여 리소스 예산을 제어합니다.

max_total_trials : 최대 시험 작업 수입니다. 1~1000 사이의 정수여야 합니다.

: 최대 시험 작업 수입니다. 1~1000 사이의 정수여야 합니다. max_concurrent_trials : (선택 사항) 동시에 실행할 수 있는 최대 시험 작업 수입니다. 지정하지 않으면 모든 작업이 병렬로 시작됩니다. 지정한 경우 1~100 사이의 정수여야 합니다.

: (선택 사항) 동시에 실행할 수 있는 최대 시험 작업 수입니다. 지정하지 않으면 모든 작업이 병렬로 시작됩니다. 지정한 경우 1~100 사이의 정수여야 합니다. timeout : 전체 비우기 작업을 실행할 수 있는 최대 시간(분)입니다. 이 한도에 도달하면 시스템은 모든 평가판을 포함하여 스윕 작업을 취소합니다.

: 전체 비우기 작업을 실행할 수 있는 최대 시간(분)입니다. 이 한도에 도달하면 시스템은 모든 평가판을 포함하여 스윕 작업을 취소합니다. trial_timeout : 각 시험 작업을 실행할 수 있는 최대 시간(초)입니다. 이 한도에 도달하면 시스템은 평가판을 취소합니다.

참고 max_total_trials 및 max_concurrent_trials가 모두 지정되는 경우 이러한 두 임계값 중 첫 번째 임계값에 도달하면 하이퍼 매개 변수 튜닝 실험이 종료됩니다.

참고 동시 시험 작업 수는 지정된 컴퓨팅 대상에서 사용할 수 있는 리소스에서 제어됩니다. 원하는 동시성에 사용할 수 있는 리소스가 컴퓨팅 대상에 있는지 확인합니다.

sweep_job.set_limits(max_total_trials=20, max_concurrent_trials=4, timeout=120)

이 코드는 최대 20개의 총 시험 작업을 사용하도록 하이퍼 매개 변수 튜닝 실험을 구성하고, 전체 비우기 작업에 대한 시간 제한이 120분인 4개의 시험 작업을 한 번에 실행합니다.

하이퍼 매개 변수 튜닝 실험 구성

하이퍼 매개 변수 튜닝 실험을 구성하려면 다음을 제공합니다.

정의된 하이퍼 매개 변수 검색 공간

샘플링 알고리즘

초기 종료 정책 지정

목표

리소스 한계

CommandJob 또는 CommandComponent

SweepJob

SweepJob은 명령 또는 명령 구성 요소에서 하이퍼 매개 변수 비우기를 실행할 수 있습니다.

참고 sweep_job 에서 사용되는 컴퓨팅 대상에는 동시성 수준을 만족할 수 있는 충분한 리소스가 있어야 합니다. 컴퓨팅 대상에 대한 자세한 내용은 컴퓨팅 대상을 참조하세요.

하이퍼 매개 변수 조정 실험 구성

from azure.ai.ml import MLClient from azure.ai.ml import command, Input from azure.ai.ml.sweep import Choice, Uniform, MedianStoppingPolicy from azure.identity import DefaultAzureCredential # Create your base command job command_job = command( code=”./src”, command=”python main.py –iris-csv ${{inputs.iris_csv}} –learning-rate ${{inputs.learning_rate}} –boosting ${{inputs.boosting}}”, environment=”AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu@latest”, inputs={ “iris_csv”: Input( type=”uri_file”, path=”https://azuremlexamples.blob.core.windows.net/datasets/iris.csv”, ), “learning_rate”: 0.9, “boosting”: “gbdt”, }, compute=”cpu-cluster”, ) # Override your inputs with parameter expressions command_job_for_sweep = command_job( learning_rate=Uniform(min_value=0.01, max_value=0.9), boosting=Choice(values=[“gbdt”, “dart”]), ) # Call sweep() on your command job to sweep over your parameter expressions sweep_job = command_job_for_sweep.sweep( compute=”cpu-cluster”, sampling_algorithm=”random”, primary_metric=”test-multi_logloss”, goal=”Minimize”, ) # Specify your experiment details sweep_job.display_name = “lightgbm-iris-sweep-example” sweep_job.experiment_name = “lightgbm-iris-sweep-example” sweep_job.description = “Run a hyperparameter sweep job for LightGBM on Iris dataset.” # Define the limits for this sweep sweep_job.set_limits(max_total_trials=20, max_concurrent_trials=10, timeout=7200) # Set early stopping on this one sweep_job.early_termination = MedianStoppingPolicy( delay_evaluation=5, evaluation_interval=2 )

command_job 은 매개 변수 식을 비우기 입력에 적용할 수 있도록 함수로 호출됩니다. 그러면 sweep 함수가 trial , sampling-algorithm , objective , limits 및 compute 로 구성됩니다. 위의 코드 조각은 명령 또는 CommandComponent에서 하이퍼 매개 변수 비우기 실행 샘플 Notebook에서 가져온 것입니다. 이 샘플에서는 learning_rate 및 boosting 매개 변수가 튜닝됩니다. 작업의 조기 중지는 MedianStoppingPolicy 에 따라 결정되며, 기본 메트릭 값이 모든 학습 작업의 평균 중앙값보다 낮은 작업을 중지합니다(MedianStoppingPolicy 클래스 참조 참조).

매개 변수 값을 받고, 구문 분석하고, 튜닝되는 학습 스크립트에 전달하는 방법을 알아보려면 이 코드 샘플을 참조하세요.

중요 모든 하이퍼 매개 변수 비우기 작업은 모델 및 모든 데이터 로더 다시 빌드를 포함하여 학습을 처음부터 다시 시작합니다. Azure Machine Learning 파이프라인 또는 수동 프로세스를 사용하여 학습 작업 이전에 최대한 많은 데이터 준비를 수행하면 이 비용을 최소화할 수 있습니다.

하이퍼 매개 변수 튜닝 실험 제출

하이퍼 매개 변수 튜닝 구성을 정의하면 다음과 같이 실험을 제출합니다.

# submit the sweep returned_sweep_job = ml_client.create_or_update(sweep_job) # get a URL for the status of the job returned_sweep_job.services[“Studio”].endpoint

하이퍼 매개 변수 튜닝 작업 시각화

Azure Machine Learning 스튜디오에서 모든 하이퍼 매개 변수 튜닝 작업을 시각화할 수 있습니다. 포털에서 실험을 보는 방법에 대한 자세한 내용은 스튜디오에서 작업 레코드 보기를 참조하세요.

메트릭 차트 : 이 시각화는 하이퍼 매개 변수 튜닝 기간 동안 각 HyperDrive 자식 작업에 대해 로그된 메트릭을 추적합니다. 각 줄은 자식 작업을 나타내고, 각 지점은 해당 런타임 반복에서 기본 메트릭 값을 측정합니다.

병렬 좌표 차트 : 이 시각화에서는 기본 메트릭 성능과 개별 하이퍼 매개변수 값 간의 상관 관계를 보여줍니다. 차트는 축을 이동(클릭하여 축 레이블에 따라 끌기)하고 단일 축에서 값을 강조 표시하는(클릭하여 단일 축을 따라 세로 방향으로 끌어 원하는 값 범위 강조 표시) 대화형 차트입니다. 병렬 좌표 차트의 가장 오른쪽에는 해당 작업 인스턴스에 대해 설정된 하이퍼 매개 변수에 해당하는 최상의 메트릭 값을 그리는 축이 포함됩니다. 이 축은 차트 그라데이션 범례를 보다 읽기 쉬운 방식으로 데이터에 투영하기 위해 제공됩니다.

2차원 분산형 차트 : 이 시각화에서는 개별 하이퍼 매개 변수 2개와 연결된 기본 메트릭 값 간의 상관 관계를 보여줍니다.

3차원 분산형 차트: 이 시각화는 2D와 동일하지만 기본 메트릭 값과의 상관 관계에 대한 하이퍼 매개 변수 차원 3개를 허용합니다. 3D 공간에서 다른 상관 관계를 보려면 클릭하고 끌어 차트 방향을 바꾸면 됩니다.

최상의 시험 작업 찾기

모든 하이퍼 매개 변수 튜닝 작업이 완료되면 최상의 시험 출력을 검색합니다.

# Download best trial model output ml_client.jobs.download(returned_sweep_job.name, output_name=”model”)

CLI를 사용하여 최상의 시험 작업에 대한 모든 기본 및 명명된 출력과 비우기 작업의 로그를 다운로드할 수 있습니다.

az ml job download –name –all

필요에 따라 최상의 시험 출력만 다운로드합니다.

az ml job download –name –output-name model

참고 문헌

다음 단계

[머신러닝] 하이퍼 파라미터 튜닝, 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학기 기계학습 이론과 실습

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

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

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

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

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


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

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

See also  Cruceros Diciembre 2021 Desde Barcelona | Msc Seaview Crucero Salida Desde Barcelona Cataluña España 최근 답변 279개

Leave a Comment