← Tous les exercices
Un pas de LSTM en six étapes
Partie 4 · ★★★
Le LSTM garde une mémoire c en plus de l'état h. Une porte est un nombre entre 0 et 1 (une sigmoïde) qui multiplie ce qu'elle règle : 0 bloque, 1 laisse passer. Les 6 étapes : (1) porte d'oubli f, (2) porte d'entrée i, (3) information candidate g, (4) nouvelle mémoire c = f·c_ancienne + i·g, (5) porte de sortie o, (6) nouvel état h = o·tanh(c).
Version à un seul nombre par porte (poids choisis, biais d'oubli de 2 pour garder la mémoire au départ). Complète les trois trous : qui multiplie quoi aux étapes 4 et 6 ? Si f vaut 1, l'ancienne mémoire est gardée entière : c'est ce qui empêche le début du texte de s'effacer.
def sig(z): return 1 / (1 + math.exp(-z)) Wf, Uf, bf = 1.0, 0.5, 2.0 # porte d'oubli Wi, Ui = 0.5, 0.5 # porte d'entrée Wg, Ug = 1.0, 1.0 # candidate Wo, Uo = 0.5, 1.0 # porte de sortie def lstm(x, h, c): f = sig(Wf * x + Uf * h + bf) # 1. oubli i = sig(Wi * x + Ui * h) # 2. entrée g = math.tanh(Wg * x + Ug * h) # 3. candidate c_new = ___ * c + ___ * g # 4. nouvelle mémoire o = sig(Wo * x + Uo * h) # 5. sortie h_new = ___ * math.tanh(c_new) # 6. nouvel état return h_new, c_new
Ctrl/⌘+Entrée