2024. 11. 24. 16:17ㆍ스터디/24-2 스터디 _ 밑바닥부터 시작하는 딥러닝
하이퍼파라미터 값 설정
-> 모델의 성능 결정
-> 효율적인 하이퍼파라미터 값 탐색의 중요성
6.5.1 검증 데이터
1. 데이터셋
- 훈련 데이터 : 학습
- 시험 데이터 : 범용 성능 평가
- 검증 데이터
- 하이퍼파라미터의 성능 평가
- 하이퍼파라미터 '전용' 확인 데이터
2. 하이퍼파라미터의 성능을 평가할 때 시험 데이터를 사용하면 안된다.
-> 이유 :
시험 데이터를 사용하여 하이퍼파라미터를 조정하고
또 시험 데이터를 사용하여 성능을 평가하게 되면,
하이퍼파라미터의 값이 시험 데이터에만 적합하도록 조정되는 '오버피팅'이 발생한다.
(-> 모델의 범용 성능은 떨어진다.)
3. 검증 데이터 얻기
: 훈련 데이터, 검증 데이터, 시험 데이터 로 미리 분리된 데이터셋도 있음.
: 그렇지 않다면 따로 분리해줘야함.
-훈련 데이터 중 20% 정도를 검증 데이터로 먼저 분리하기
(x_train, t_train), (x_test, t_test) = load_mnist()
# 훈련 데이터를 뒤섞는다.
x_train, t_train = shuffle_dataset(x_train, t_train)
# 20%를 검증 데이터로 분할
validation_rate = 0.20
validation_num = int(x_train.shape[0] * validation_rate)
x_val = x_train[:validation_num] # x_train에서 앞부분을 검증 데이터로 할당
t_val = t_train[:validation_num] # t_train에서 앞부분을 검증 데이터로 할당
x_train = x_train[validation_num:] # 나머지 x_train을 훈련 데이터로 할당
t_train = t_train[validation_num:] # 나머지 t_train을 훈련 데이터로 할당
- 훈련 데이터를 분리하기 전에 입력 데이터와 정답 레이블 뒤섞음. (데이터셋 안에서도 데이터가 치우쳐 있을 수 있기 때문임)
- 훈련 데이터에서 처음의 (validation_num)개를 검증 데이터로 빼서 분리한 뒤, 나머지 데이터를 훈련 데이터로 분리해서 다시 할당함.
- x_train, t_train : 훈련 데이터에 대한 특성, 훈련 데이터에 대한 레이블
- x_val, t_val : 검증 데이터에 대한 특성, 검증 데이터에 대한 레이블
- validation_num : 검증 데이터로 사용할 샘플의 개수
x_val = x_train[:validation_num]
t_val = t_train[:validation_num]
앞에서부터 (validation_num)개만큼의 데이터를 분리하여 검증 데이터로 할당함
x_train = x_train[validation_num:]
t_train = t_train[validation_num:]
(validation_num)번째 이후의 남은 데이터들을 가져와서 다시 훈련 데이터로 할당함
6.5.2 하이퍼파라미터 최적화
-하이퍼파라미터 최적화 과정
0단계) 하이퍼파라미터의 값 범위 설정하기
- '대략적으로', '로그 스케일'(=10의 거듭제곱 단위) 로 지정
1단계) 범위 내에서, 하이퍼파라미터의 값을 무작위로 추출하기
- 무작위로 하이퍼파라미터 값을 골라 샘플링
- 하이퍼파라미터 최적화에서는 규칙적인 탐색보다 무작위 샘플링 탐색이 더 좋은 결과 (최적값 찾는 속도 빠름+더나은 모델의 성능)낼 수 있음
- 이유
최종 정확도에 미치는 영향과 최적 값이 각 하이퍼파라미터마다 다르므로
모든 데이터를 동일한 간격으로 탐색(규칙적 탐색)하는 것보다 상대적으로,
중요한 파라미터에 대해 더 많은 탐색을 할 수 있음.
규칙적인 탐색은 일정한 간격으로 탐색하기 때문에
하이퍼파라미터에 따른 정확도 차이를 반영하기 어려움.
2단계) 학습 -> 정확도 평가
- 샘플링한 하이퍼파라미터 값을 사용하여 학습
- 검증 데이터로 정확도 평가
-학습할 때 주의할 점
하이퍼파라미터를 최적화할 때는 딥러닝 학습에는 오랜 시간이 걸리므로
1. 나쁠 듯한 값은 일찍 포기해야함
2. 학습 시, epoch은 작게 설정하여 1회 평가에 걸리는 시간을 단축해야함
3단계) 1단계와 2단계를 반복 -> 정확도의 결과를 반영하여 하이퍼파라미터의 범위 좁히기
4단계) 압축된(좁아진) 범위 내에서 값 하나를 고르기
: 최적의 하이퍼파라미터 값 찾았음!!!
-또 다른 하이퍼파라미터 최적화 방법 : 베이즈 최적화
6.5.3 하이퍼파라미터 최적화 구현하기
학습률과 가중치 감소의 세기를 조절하는 계수(가중치 감소 계수)를
탐색하는 문제를 풀어보쟈.
-하이퍼파라미터의 무작위 추출코드
weight_decay = 10 ** np.random.uniform(-8, -4)
lr = 10 ** np.random.uniform(-6, -2)
무작위로 값 추출 -> 학습
-> 여러 차례 다양한 하이퍼파라미터 값으로 학습 반복
-> 최적의 하이퍼파라미터 값 찾기
- np.random.uniform(a, b) : uniform distribution에 따라 a와 b 사이의 값을 무작위로 생성하는 함수. a, b 사이의 균등한 확률로 값을 샘플링함.
- a : 생성될 값의 최솟값
- b : 생성될 값의 최댓값
-결과 : 검증 데이터의 학습 추이를 정확도가 높은 순으로 나열
- 학습률 범위 : 10^-6 ~ 10^-2
- 가중치 감소 계수 범위 : 10^-8 ~ 10^-4
-Best-1 ~ Best-5 까지가 학습이 잘 진행됨
이때의
학습률 : 0.001~0.01
가중치 감소 계수 : 10^-8~10^-6
-잘될 것 같은 값의 범위 관찰 -> 범위 좁혀나가기
-> 반복
-> 하이퍼파라미터 값(최적이라고 생각되는 값) 하나 선택하기
'스터디 > 24-2 스터디 _ 밑바닥부터 시작하는 딥러닝' 카테고리의 다른 글
8.1 더 깊게 (0) | 2024.12.08 |
---|---|
6.3 배치 정규화 (0) | 2024.11.24 |
5.6 Affine/Softmax 계층 구현하기 + 5.7 오차역전파법 구현하기 (0) | 2024.11.17 |
5.5 활성화 함수 계층 구현하기 (0) | 2024.11.17 |
4.6 정리 (0) | 2024.11.10 |