딥러닝 3일차 - 학습률
더 나은 신경망 학습 위해
- 학습률
- 가중치 초기화
- 정규화
1. 학습률 감소/ 계획법
학습률 (lr) - 얼마나 이동할 지 조정하는 하이퍼 파라미터
가중치에 대해 구해진 기울기 값을 얼마나 경사에 적용할 지 결정하는 하이퍼파라미터
학습률니 너무 낮으면 : 최적점에 이르기까지 너무 오래 걸림/ 주어진 Iteration내에서 최적점에 도달하는데 실패
학습률이 너무 높으면 : 경사하강과정에서 발산하면서 모델이 최적값을 찾을 수 없게 되어버림
1. 학습률 감소
.compile내에 있는 optimizer= 에 adam 등 옵티마이저 적용 후 내부 하이퍼파라미터 변경해 학습률 감소
# optimizer 내 lr 인자 통해 학습률 설정
# beta_1 : 학습률 감소율 설정 , adam 내 수식의 변수를 그대로 사용
model.compile(optimizer=tf.keras.optimizers.Adam(lr=0.001, beta_1 = 0.89)
, loss='sparse_categorical_crossentropy'
, metrics=['accuracy'])
2. 학습률 계획법 learning rate scheduling
# .experimental 내부 함수 사용해 설계
first_decay_steps = 1000 #step= iteration
initial_learning_rate = 0.01 #초기 학습률
lr_decayed_fn={
tf.keras.experimental.CosineDecayRestarts(
#코사인 값 이용- 증감 나타내는 매서드
initial_learning_rate,
first_dexay_steps)
)
# 앞서 설정한 학습률 계획을 optimizer 내 lr 인자로 사용
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=lr_decayed_fn)
, loss='sparse_categorical_crossentropy'
, metrics=['accuracy'])
2. 가중치 초기화 ( xavier 초기화, he 초기화)
<1> 표준편차를 1인 정규분포로 가중치 초기화 할 때, 각 층의 활성화 값 분포
표준편차를 일정한 정규분포로 가중치 초기화 하면 활성화 값이 0과 1에 일치
활성값 고르지 않으면 학습 제대로 이루어지지 않음
<2> xavier 초기화 할때 호라성화 값 분포
가중치를 표준편차가 고정값이 정규분포로 초기화했을때 문제해결하기 위해 등장
xavier 초기화는 이전 층의 노드가 n개일때, 현재 층의 가중치를 표준편차가 1/ n^-2인 정규분포로 초기화
<3> he 초기화 해주었을 때 활성화 값 분포
xavier 초기화= 활성화 함수가 시그모이드인 신경망에서는 잘 동작
relu일때는 층이 지날수록 활성값이 고르지 못함
he초기화는 이전층의 노드가 n개일때, 현재층의 가중치를 표준편차가 2/n^2인 정규분포로 초기화
<정리>
activation function 초기값 추천
1. sigmoid - xavier 초기화 사용하는 것이 유리
2. relu - he 초기화 사용하는 것이 유리
init_mode=['uniform', 'lecun_uniform', 'normal', 'zero', 'glorot_normal', 'glorot_uniform', 'he_normal','he_uniform']
케라스의 dense layer에서는 defalut로 'glrot_uniform' 설정
# 모델 내 추가하는 dense layer 내 kernal_initializer 인자통해 가중치 초기화 설정
Dense(32, activation='relu', kernel_initializer='he_uniform')