시작하기무료로 시작하기

드롭아웃으로 과적합 줄이기

신경망에서 흔히 발생하는 문제는 학습 데이터에 과적합되기 쉽다는 점입니다. 즉, R$^2$나 accuracy 같은 평가지표가 학습 세트에서는 높지만 테스트나 검증 세트에서는 낮아지고, 모델이 학습 데이터의 노이즈에까지 맞춰 버리는 현상입니다.

드롭아웃을 사용하면 과적합을 줄일 수 있어요. 드롭아웃은 학습 단계에서 일부 뉴런을 무작위로 비활성화하여, 네트워크가 학습 데이터의 노이즈에 맞추는 것을 방지합니다. keras에는 이를 위한 Dropout 레이어가 있습니다. 여기서 드롭아웃 비율, 즉 학습 중에 끊을 연결의 비율을 설정해야 하며, Dropout() 레이어에서 0과 1 사이의 소수로 지정합니다.

이번 모델에서는 손실 함수를 평균제곱오차(mean squared error)로 다시 설정하겠습니다.

이 연습은 강의의 일부입니다

Python으로 배우는 금융 분야 Machine Learning

강의 보기

연습 안내

  • 모델의 첫 번째 Dense 레이어 다음에 드롭아웃 레이어(Dropout())를 추가하고, 드롭아웃 비율을 20%(0.2)로 설정하세요.
  • .compile()에서 옵티마이저는 adam, 손실 함수는 mse를 사용하세요.
  • scaled_train_featurestrain_targets로 모델을 25 epoch 동안 학습(fit)하세요.

실습형 인터랙티브 연습

이 예제를 이 샘플 코드를 완성하여 풀어보세요.

from keras.layers import Dropout

# Create model with dropout
model_3 = Sequential()
model_3.add(Dense(100, input_dim=scaled_train_features.shape[1], activation='relu'))
model_3.add(____)
model_3.add(Dense(20, activation='relu'))
model_3.add(Dense(1, activation='linear'))

# Fit model with mean squared error loss function
model_3.compile(optimizer=____, loss=____)
history = model_3.fit(____, ____, epochs=____)
plt.plot(history.history['loss'])
plt.title('loss:' + str(round(history.history['loss'][-1], 6)))
plt.show()
코드 편집 및 실행