훈련 손실이 점점 줄어 듭니다. 무슨 일이야?


26

훈련 손실이 줄어들었다가 다시 증가합니다. 매우 이상합니다. 교차 검증 손실은 훈련 손실을 추적합니다. 무슨 일이야?

Keras에서 다음과 같이 두 개의 스택 LSTMS가 있습니다.

model = Sequential()
model.add(LSTM(512, return_sequences=True, input_shape=(len(X[0]), len(nd.char_indices))))
model.add(Dropout(0.2))
model.add(LSTM(512, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(len(nd.categories)))
model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='adadelta')

나는 100 Epochs를 위해 그것을 훈련시킵니다.

model.fit(X_train, np.array(y_train), batch_size=1024, nb_epoch=100, validation_split=0.2)

127803 샘플 훈련, 31951 샘플 검증

그리고 그 손실은 다음과 같습니다. 손실 그래프


2
25 시대 이후에 당신의 학습은 크게 될 수 있습니다. 작게 설정하고 손실을 다시 확인하십시오
itdxer

그러나 추가 교육을 통해 어떻게 교육 데이터 손실을 더 크게 만들 수 있습니까?
patapouf_ai

3
죄송합니다. 학습률을 의미합니다.
itdxer

itdxer 감사합니다. 당신이 한 말이 올바른 길에 있어야한다고 생각합니다. 나는 "adadelta"대신 "adam"을 사용하려고 시도하여 문제를 해결했지만 "adadelta"의 학습률을 낮추면 아마 효과가있을 것으로 생각합니다. 전체 답변을 작성하려면 동의합니다.
patapouf_ai

답변:


19

25 세기 이후에는 학습률이 높아질 수 있습니다. 이 문제는 쉽게 식별 할 수 있습니다. 학습률에 더 작은 값을 설정하면됩니다. NN보다 학습률과 관련된 문제가 잠시 후에 다시 올라갈지라도 오류가 더 낮아야합니다. 요점은 오류율이 특정 시점에서 더 낮아질 것이라는 것입니다.

이 동작을 관찰하면 두 가지 간단한 솔루션을 사용할 수 있습니다. 첫 번째는 가장 간단한 것입니다. 아주 작은 단계를 설정하고 훈련 시키십시오. 두 번째는 학습 속도를 단조롭게 줄이는 것입니다. 간단한 공식은 다음과 같습니다.

α(+1)=α(0)1+

어디 학습 속도는, 당신의 반복 수이고 식별이 속도 감소 속도를 학습하는 계수이다. 가 과 같을 때 걸음 수는 2 배로 최소화됩니다 .t m t m에이


7
OP가 Keras 를 사용하고 있었기 때문에 약간 더 정교한 학습 속도 업데이트를 수행하는 또 다른 옵션은 ReduceLROnPlateau 와 같은 콜백을 사용하는 것 입니다 . 이는 Reduced Loss가 주어진 수의 에포크에 대해 개선되지 않으면 학습 속도를 감소시킵니다.
n1k31t4
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.