J'ai du mal à conceptualiser la différence entre les LSTM avec état et sans état dans Keras. Ma compréhension est qu'à la fin de chaque lot, "l'état du réseau est réinitialisé" dans le cas sans état, alors que dans le cas avec état, l'état du réseau est préservé pour chaque lot, et doit ensuite être réinitialisé manuellement au fin de chaque époque.
Mes questions sont les suivantes: 1. Dans le cas des apatrides, comment le réseau apprend-il si l'état n'est pas conservé entre les lots? 2. Quand utiliserait-on les modes sans état vs avec état d'un LSTM?
Je vous recommande d'abord d'apprendre les concepts de BPTT (Back Propagation Through Time) et de mini-batch SGD (Stochastic Gradient Descent), puis vous aurez une meilleure compréhension de la procédure de formation du LSTM.
Pour vos questions,
Q1. Dans les cas sans état, LSTM met à jour les paramètres du lot 1, puis initie les états masqués et les états de cellule (généralement tous des zéros) pour le lot 2, tandis que dans les cas avec état, il utilise les derniers états masqués de sortie du lot 1 et les états de cellule comme états initiaux pour le lot 2.
Q2. Comme vous pouvez le voir ci-dessus, lorsque deux séquences en deux lots ont des connexions (par exemple, les prix d'un stock), vous feriez mieux d'utiliser le mode avec état, sinon (par exemple, une séquence représente une phrase complète), vous devez utiliser le mode sans état.
BTW, @ vu.pham a dit if we use stateful RNN, then in production, the network is forced to deal with infinite long sequences
. Cela ne semble pas correct, en fait, comme vous pouvez le voir dans Q1, LSTM WON'T apprendre sur la séquence entière, il apprend d'abord la séquence dans le lot1, met à jour les paramètres, puis apprend la séquence sur le lot2.
Le réseau apprend toujours la connexion de l'élément i et de l'élément i + 1 dans chaque lot. Donc, si vous décidez d'aller avec un RNN sans état, vous diviserez très souvent votre série en plusieurs segments, chaque segment de longueur N. Si vous alimentez ces segments dans le réseau, il apprendra toujours à prédire l'élément suivant étant donné sa connaissance de tous les précédents. éléments.
Je crois que la plupart des gens utilisent RNN sans état dans la pratique, parce que si nous utilisons RNN avec état, alors en production, le réseau est obligé de traiter de longues séquences infinies, et cela pourrait être lourd à gérer.