操控机器的“记忆”
上回说到RNN受“状态转移矩阵
仔细想想,这不是既要求“时不时忆起从前”,又要求“珍惜眼前”吗?那么“记忆”在这个过程中就显得尤为重要。而今天的主角长短时记忆(Long-Short Term Memory,LSTM)网络,顾名思义,就是又有“长时记忆”,又有“短时记忆”的神经网络。
既然确定了有一个缓存,那么我们需要在结构上创造这个缓存。
平行的记忆与状态观测器
记忆理应也会更新,所以自然而然地,是一个动力学系统,而且是一个形如
的动力学系统,考虑到之前神经网络如何处理非线性,显然这个
先不管每一项叫什么,这里先回忆(或者我介绍)控制里一个重要的概念:状态观测器。
在研究动力学系统的时候,不一定所有的系统状态都完全可以测量。比如火箭发动机燃烧室的温度,燃料燃烧的温度太高了以至于没有温度计能受得了。但是这个温度可以通过其他的测量值,比如燃料消耗速率、推进加速度等等侧面反映。
为了做到这一点,需要对系统进行建模,给未知的状态量一个初值,然后和已知量一起打包成
不考虑系统输入
这简直就是记忆动力学!所以其实“记忆”在观测系统的隐藏状态!
实际上在我看来,这个“隐藏状态”是一个抽象的“信息对象”的状态,而神经网络本身就是在无限挖掘“信息动力学”的“信息”
是上一时刻对“真实状态”的估计
好比是猜的燃烧室温度
是根据当前输入 和上一刻隐藏状态 算出来的 innovation
好比是测到的燃料消耗速率、加速度等
- 搞学习的叫
遗忘门,决定记住多少“旧记忆”;叫 输入门,决定接受多少“新信息”
这就好比是对“之前猜测”的信任和对“当前观测”的信任,这其实是卡尔曼滤波了(没错,卡尔曼滤波就是最优状态观测器)!
记忆系统的自适应卡尔曼滤波
既然说到卡尔曼滤波,那就把它完整写出来
很明显,之前构建的记忆系统实际上只是卡尔曼滤波的一半(预测和更新),另一半是测量
把这些合起来再看,就会发现LSTM的“门”,作用在神经网络上,结合一个“隐藏状态的观测器”,最终构成了对“记忆系统”本身的卡尔曼滤波。
卡尔曼滤波里,这些
梯度不消失了
还记得最开始要解决的问题吗?梯度消失或者梯度爆炸?之前分析过这本质上是由于状态转移矩阵
回忆一下RNN的梯度,也就是状态转移矩阵
那经过上面一系列记忆啊门控啊的操作,LSTM的梯度变成了什么?
只剩
还记得系统矩阵
让
更进一步,这个“拆开”的设计还有另一个好处:梯度回传时,不同时间步的遗忘门是独立可调的。这意味着网络可以自己决定哪些时间段的记忆需要保留、哪些需要丢弃。这不是一个全局的、被动的衰减,而是一个局部的、主动的决策。从这个意义上说,LSTM学会的不只是“记忆什么”,还有“记忆多久”。
当然,这并不是说LSTM就完全解决了梯度问题。遗忘门本身也是由权重和输入决定的,如果长期学不到有效的 f(t)f(t) 策略,梯度依然可能衰减。但关键是,LSTM把“梯度是否消失”从一个结构性的数学必然,变成了一个可以通过学习来优化的策略问题。这是一个质的改变。
一路走来,可以看到各种神经网络的结构,是不断进化的过程,从最开始的“最小二乘结构”到现在的“自适应卡尔曼滤波”,这已经是从纯粹“解方程”变成了研究“动力学系统的演化”,那么下一步,我们不禁要问:
卡尔曼滤波已经“最优”了,再优化还能怎么优化呢?
实际上,卡尔曼滤波的“最优”,是建立在一系列严格假设之上的:系统是线性的,噪声是高斯的,模型是精确已知的。当这些条件不满足的时候,又可以对基本的卡尔曼有很多的改进。比如扩展卡尔曼滤波(Extended Kalman Filter,EKF)是明确地把系统线性化,然后再处理局部最优;比如无迹卡尔曼滤波(Unscented Kalman Filter,UKF)是近似系统为分布,尤其是二阶统计量(从这个角度来看,EKF做到的是一阶统计量),然后再处理二阶下的局部最优。
上述的方法在神经网络上都有对应,确实有人也研究了UKF对应的神经网络结构。
但这始终绕不开一个问题,想知道下一步,先要算上一步,信息要一步一步输入网络,没有办法同时算两个时间步。这意味着我们引入了“时间”,现在又被“时间”束缚了。
重新捋一下,从MLP的“猜参数”,到RNN和LSTM的“猜状态”,似乎整个神经网络的发展在越来越逼近一个非常宏大的东西,猜谁的参数?猜谁的状态?我想答案是“信息”。当我们把信息作为研究对象和一个系统研究的时候,它自然而然有了“参数”和“状态”。而再回到系统的视角,似乎到这一步,已经是离散动力系统的极限了:正是因为状态的离散,才需要额外构建状态的连续关系!那么如果状态本身是连续的呢?这不正是无穷维或算子的思想吗?
是的,下一步,“信息”要从“离散状态”,变为“连续状态”了。
