代码修改版

RNN 与 LSTM · 代码修改

直接改代码里的记忆系数与阀门数值,运行后看整段序列的记忆轨迹。

目标实验目标

对照两段实现:RNN 的 tanh(alpha·h + x) 与 LSTM 的 f·C + i·g。黄色虚线处可改,改完点「运行代码」。

重点把 RNN 的 alpha 从 0.6 改成 0.99,看末步记忆从近乎 0 回升到多少——再想:真实 RNN 为什么学不到这么大的 alpha?

代码可编辑源码

虚线处可直接点击修改。

memory.js — 点击黄色数字可编辑

输入序列设置

结果记忆轨迹

监视变量监视

模型 = -
序列长度 = -
峰值记忆 = -
末步记忆 = -
残留比例 = -
半衰步数 = -

日志执行日志

点击「运行代码」开始执行…

挑战实验课挑战

挑战 1 · α 的极限
把 alpha 改成 1.0,发生了什么?模型还能正常算下去吗?
挑战 2 · 阀门替换
把 LSTM 的 f_irrelevant 设为 1.0,此时 LSTM 和「α=1 的 RNN」有什么区别?
挑战 3 · 梯度连乘
在日志里,让 alpha 连乘 n 次(模拟梯度回传)。n=20、alpha=0.6 时还剩多少?
挑战 4 · 加一个阀门
代码里 LSTM 有 forget / input 两个阀门。输出阀门 o 该加在哪一行?它控制什么?