1. 학습률 (Learning Rate)

    1. 매 가중치에 대해 구해진 기울기 값을 얼마나 경사하강법에 적용할 지 ? 보폭

    2. 하이퍼파라미터

    3. 학습률이 너무 크거나 작으면?

      68747470733a2f2f692e696d6775722e636f6d2f52664246674b732e706e67.png

    4. 경사하강법과의 관계 :하강법 - 산길을 내려가는 과정, 학습률- 보폭

    5. 관련 기법들

      1. 학습률 감소 (Learning Rate Decay)

        1. Optimizer 를 변경하여 학습률 감소 정도를 변화시킬 수 있음
        2. Adagrad, RMSprop, Adam 등
          1. Adagrad - 각각 파라미터에 대한 학습률 조절
          2. RMSProp - Adagrad와 흡사. 이전 기울기 변화의 맥락에 따라 보폭을 줄일 수 있음
          3. 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)

        1. Warm-Up Step을 주고 그 다음에 감소

        68747470733a2f2f692e696d6775722e636f6d2f4964613342486c2e706e67.png

        first_decay_steps= 1000
        initial_learning_rate= 0.01
        lr_decayed_fn= (
          tf.keras.**experimental.CosineDecayRestarts**(
              initial_learning_rate,
              first_decay_steps))
        
  2. 가중치 초기화 (Weight Initialization)

    1. 신경망에서 중요한 요소

    2. 문제

      1. 가중치를 정규분포로 초기화? 각 층의 활성화 값 분포
        1. 활성값의 대부분이 0과 1사이에 위치 → 제대로된 학습 X

      68747470733a2f2f692e696d6775722e636f6d2f5a64364f734a542e706e67.png

    3. 종류 (수식을 외울 필요는 없음. 어떤 방법이 있고 언제 어떻게 사용되는지 기억하고 넘어가면 된다)

      1. Xavier 초기화

        1. 활성화 함수가 Sigmoid 일 때 잘 동작 ; ReLU 일 때는 활성 값이 고르지 않음
        2. 이전 층의 노드가 n 개일 때, 현재 층의 가중치를 표준편차가 1/sqrt(n) 인 정규분포로 초기화
        3. 케라스에서는 이전 층의 노드 수 n, 현재층이 m 개 일 때, 현재 층의 가중치를 표준편차 2/sqrt(n+m)

        68747470733a2f2f692e696d6775722e636f6d2f4e587a694954322e706e67.png

      2. He 초기화

        1. 활성화 함수가 ReLU 일 때 잘 동작
        2. 이전 층의 노드 수 n개 일때, 현재 층의 가중치를 표준편차가 2/sqrt(n) 인 정규분포로 초기화

        68747470733a2f2f692e696d6775722e636f6d2f675a52644c694d2e706e67.png

    4. 그 외

      1. init_mode **=** ['uniform', 'lecun_uniform', 'normal', 'zero', 'glorot_normal', 'glorot_uniform', 'he_normal', 'he_uniform']
  3. 과적합

    68747470733a2f2f692e696d6775722e636f6d2f314d4d724253352e706e67.png

    1. 과적합 방지를 위한 방법들

      1. 가중치 감소 (Weight Decay)

        1. 과적합은 언제 발생? → 가중치의 값이 클 때 발생
          1. 가중치 값이 너무 커지지 않는 조건을 추가
        2. 손실함수에 가중치와 관련된 항을 추가
        3. L1 (Lasso)/ L2 (Ridge)

        스크린샷 2022-03-03 오후 7.53.59.png

      2. 드롭아웃 (Dropout)

        1. Iteration 마다 노드 중 일부를 사용하지 않으면서 학습을 진행
        2. 매번 다른 노드의 학습 → 과적합 방지
        3. 0~1 사이의 실수를 입력 받음 ; Ex. Dropout(0.1) → 10%를 끈다

        스크린샷 2022-03-03 오후 7.55.21.png

        # 이 층에 어떤 레귤러라이제이션, 드롭아웃을 적용할지 #기본적인 신경망을 만드는 코드# 
        model= Sequential([
            Flatten(input_shape=(28, 28)),
            Dense(64,#덴스층에 64를 추가..kernel_regularizer=regularizers.l2(0.01),
                  activity_regularizer=regularizers.l1(0.01)),
            Dropout(0.5),
            Dense(10, activation='softmax')#출력층 10개, 활성화함수는 소프트맥스])
        
      3. 조기종료 (Early Stopping)

        1. 검증(Validation) 데이터셋에 대한 손실이 증가한다면 학습을 종료하도록 설정

      68747470733a2f2f692e696d6775722e636f6d2f6754644d4975442e706e67.png

# 파라미터 저장 경로를 설정하는 코드입니다. #어떤 모델을 어디에 저장할지?checkpoint_filepath= "FMbest.hdf5"

early_stop= keras.callbacks.EarlyStopping(**monitor='val_loss'**, min_delta=0, **patience=10**, verbose=1)

#Val_loss 모니터링 
#Patience=10, 연속적으로 9번까지 Val_loss 값이 나아지지 않으면, 10번째에 조기 종료(Early Stop) 

스크린샷 2022-03-03 오후 8.05.36.png