A perda de treinamento diminui e aumenta novamente. O que está acontecendo?

26

Minha perda de treinamento diminui e depois sobe novamente. Isso é muito estranho. A perda de validação cruzada rastreia a perda de treinamento. O que está acontecendo?

Eu tenho dois LSTMS empilhados da seguinte maneira (no Keras):

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')

Treino para 100 épocas:

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

Treine em 127803 amostras, valide em 31951 amostras

E é assim que a perda se parece: Gráfico de Perda

patapouf_ai
fonte
2
Seu aprendizado pode ser muito grande após a 25ª época. Tente configurar-lo menor e verificar a sua perda de novo
itdxer
Mas como o treinamento extra poderia aumentar a perda de dados de treinamento?
patapouf_ai
3
Desculpe, quero dizer taxa de aprendizagem.
itdxer
Obrigado itdxer. Eu acho que o que você disse deve estar no caminho certo. Tentei usar "adam" em vez de "adadelta" e isso resolveu o problema, embora eu esteja supondo que reduzir a taxa de aprendizado de "adadelta" provavelmente também funcionou. Se você quiser escrever uma resposta completa, eu a aceito.
patapouf_ai

Respostas:

19

Sua taxa de aprendizado pode ser muito grande após a 25ª época. Esse problema é fácil de identificar. Você só precisa configurar um valor menor para sua taxa de aprendizado. Se o problema relacionado à sua taxa de aprendizado for NN, deverá ocorrer um erro menor, apesar de aumentar novamente após um tempo. O ponto principal é que a taxa de erro será menor em algum momento.

Se você observar esse comportamento, poderá usar duas soluções simples. O primeiro é o mais simples. Configure um passo muito pequeno e treine-o. O segundo é diminuir monotonicamente sua taxa de aprendizado. Aqui está uma fórmula simples:

α(t+1 1)=α(0 0)1 1+tm

umatmtm

itdxer
fonte
7
Como o OP estava usando o Keras, outra opção para fazer atualizações ligeiramente mais sofisticadas da taxa de aprendizado seria usar um retorno de chamada como o ReduceLROnPlateau , que reduz a taxa de aprendizado quando a perda de validação não melhora em um determinado número de épocas.
N1k31t4