卷积神经网络使用固定大小的矩阵作为输入(比如一张图片),然后输出一个固定大小的向量(比如不同分类的概率),适合于图像分类,目标检测,图像分割等。但是除了图像外,还有非常多的信息是非固定长度或者大小的,比如视频,语音,此时更加适合用来处理这些时序信号的网络就是一些时间序列模型。
常见的时间序列模型包括RNN,LSTM等,今天简单说一说。
作者 | 言有三
编辑 | 言有三
01
RNN
我们通常所说的RNN实际上有两种,一种是Recurrent Neural Networks,即循环神经网络,一种是Recursive Neural Networks,即递归神经网络。
循环神经网络是首先被提出的,它是一种时间上进行线性递归的神经网络,也就是我们通常所说的RNN。
递归神经网络(recursive neural network)被视为循环神经网络(recurrent neural network)的推广,这是一种在结构上进行递归的神经网络,常用于自然语言处理中的序列学习,它的输入数据本质不一定是时序的,但结构却往往更加复杂,我们这里只说循环神经网络。
一个RNN的结构如下:
左侧就是模型的基本结构,右侧就是它在时间上进行展开的示意图。xt是时刻t的输入,相应的ht,ot分别是对应时刻t的隐藏层和输出层。
上面我们可以看出,一个RNN的输入包括了两个:一个是当前时刻输入xt,用于实时更新状态,另一个是上一时刻隐藏层的状态ht-1,用于记忆状态,而不同时刻的网络共用的是同一套参数。
RNN中常用的激活函数是tanh,所以上面的式子写成公式,就是:
w就是要学习的权重,用几句代码表示RNN就是。
class RNN:
def step(self, x):
self.h = np.tanh(np.dot(self.W_hh, self.h) + np.dot(self.W_xh, x)) #更新隐藏层
y = np.dot(self.W_hy, self.h) #得到输出
return y
普通卷积神经网络的优化使用的是反向传播,那么RNN使用的是什么呢?最常见的还是反向传播,不过是带时序的版本,即BPFT(backpropagation through time),它与BP的原理是完全一样的,只不过计算过程与时间有关。
与普通的反向传播算法一样,它重复地使用链式法则,区别在于损失函数不仅依赖于当前时刻的输出层,也依赖于下一时刻。所以参数W在更新梯度时,必须考虑当前时刻的梯度和下一时刻的梯度,传播示意图如下;
具体的公式我们就不编辑了,大家可以找书看,之所以有后续的LSTM等,就是因为RNN有大问题:因为t时刻的导数会传播到t-1,t-2,... ,1时刻,这样就有了连乘的系数。
连乘一直带来了两个问题:梯度爆炸和消失。而且,在前向过程中,开始时刻的输入对后面时刻的影响越来越小,这就是长距离依赖问题。这样一来,就失去了“记忆”的能力,要知道生物的神经元拥有对过去时序状态很强的记忆能力。
02
LSTM
前面说的RNN有两个问题,长短期记忆(Long short-term memory, LSTM)就是要解决这两个问题,通过引入若干门来解决,相比RNN多了一个状态cell state。
这个cell state承载着之前所有状态的信息,每到新的时刻,就有相应的操作来决定舍弃什么旧的信息以及添加什么新的信息。这个状态与隐藏层状态h不同,在更新过程中,它的更新是缓慢的,而隐藏层状态h的更新是迅速的。
LSTM的网络结构图如下,输入包括ht-1,xt,输出ht,状态为ct-1,ct。
2.1 遗忘门与遗忘阶段
遗忘门决定了要从上一个状态中舍弃什么信息,它输入上一状态的输出ht-1、当前状态输入信息xt到一个Sigmoid函数中,产生一个介于0到1之间的数值,与上一个时刻的状态ct-1相乘之后来确定舍弃(保留)多少信息。0 表示“完全舍弃”,1 表示“完全保留”,这个阶段完成了对上一个节点cell state进行选择性忘记,遗忘门和它的输出公式如下:
2.2 输入门与选择记忆阶段
选择记忆阶段,也就是对输入有选择性地进行“记忆”,重要的记录下来,不重要的少记一些,它决定了要往当前状态中保存什么新的信息。它输入上一状态的输出ht-1、当前输入信息xt到一个Sigmoid函数中,产生一个介于0到1之间的数值it来确定需要保留多少的新信息。
“候选新信息”则通过输入上一状态的输出、当前状态输入信息和一个tanh激活函数生成。有了遗忘门和输入门之后,就得到了完整的下一时刻的状态Ct,它将用于产生下一状态的隐藏层ht,也就是当前单元的输出。
2.3 输出门与输出阶段
输出门决定了要从cell state中输出什么信息。与之前类似,会先有一个Sigmoid函数产生一个介于0到1之间的数值Ot来确定我们需要输出多少cell state中的信息。cell state的信息在与Ot相乘时首先会经过一个tanh层进行“激活”,得到的就是这个LSTM block的输出信息ht。
以上就是LSTM的基本原理,它通过门控状态来对信息进行选择性的记忆,满足了需要长时间记忆信息和遗忘信息的需求。
当然,随之而来的就是大量的参数,因此后续就有了GRU。另外,RNN和LSTM不止有单向的,还有双向的,这些就留给读者自己去学习了。
总结
时序模型在语音,视频以及自然语言处理等领域有不可替代的作用,虽然相比普通的CNN,模型的复杂度和训练难度都增加了不少,但是在进阶之路上也是需要好好掌握的。