RNN与LSTM 3D演示
这篇文章的内容来自B站UP主“梗直哥丶 ”的视频
-
《【循环神经网络】5分钟搞懂RNN,3D动画深入浅出: https://www.bilibili.com/video/BV1z5411f7Bm
-
《【LSTM长短期记忆网络】3D模型一目了然: https://www.bilibili.com/video/BV1Z34y1k7mc/
RNN
简单的神经网络一般这样,输入层x进入隐藏层神经元s,再经过输出产生最后的结果y,通过调整权重\(W_{in}\)和\(W_{out}\)就可以实现学习的效果。
通常情况下,深度神经网络都是水平方向延伸的,比如卷积神经网络CNN,隐藏层数量多了,但是没有考虑单个隐层在时间上时序变化。
RNN则不同,它关注隐层每个神经元在时间维度上的不断成长与进步。体现在图上,变换一下3D的视角,网络结构不变,没有添加新的神经元,但是沿着时间轴recurrent,也就是重复,建立时序上的关联,这里的层级扩展并非神经元数量的真实增加,而是表示隐层在不同时刻的状态。
根据问题的需要,隐层的时间关联既可以是全连接式的,所有线都相连。
但也可以是自己对自己
假如用\(W_S\)来表示层级间的权重矩阵,RNN通常会假定不同的层,其实也就是不同的时刻共享一个\(W_S\),这样可以有效地减少训练参数。
对神经元模型,如果隐藏层输出\(S_i = f(\sum_{n}^N(w_{in}^i·x_n^i + b_i))\)
写成矩阵形式就是\(S = f(W_{in}·X + b)\)
对RNN而言输出就变成了\(S_t = f(W_{in}X + W_sS_{t-1} + b)\)
多了一项\(W_sS_{t-1}\)
这样就建立了隐层在不同时刻,t-1时刻和t时刻他们之间的一种迭代关系。换言之,就是让神经网络有了某种记忆的能力。
RNN本质上就是用这样一种看似是级联,但实际上却是沿着时序,反复迭代的网络结构,实现了对序列数据的学习
LSTM
传统的RNN对时间序列的预测捉襟见肘,它虽然建立了不同时刻隐藏层之间的联系,实现了记忆效果,但只是基于前一时刻,是一种short-memory。
与RNN相比,LSTM增加了一条新的时间链,记录long-term memory,用C来表示,同时它增加了两条链间的关联关系。新增加的链条就相当于记事的日记本。
以t时刻为例,和RNN相比,计算隐层状态\(S_t\)时,除了输入和前一时刻,还要包含当前时刻的日记信息\(C_t\)。
放大\(S_t\)和\(C_t\)间的关联,一条线拆成了三条线,其中包含两步更加细致的操作,删除旧日记,增添新日记。
首先,函数f1就像是一块橡皮擦,根据昨天的记忆\(s_{t-1}\)和今天的输入\(x_t\),决定要修改日记中的那些记录,数学语言描述就是:
\(f_1 = sigmoid (w_1 \begin{bmatrix} s_{t-1} \\ x_t \end{bmatrix}+ b_1)\)
其中sigmoid函数取值在0-1之间,矩阵元素相乘时,会抹掉那些取值为零的元素,相当于选择性遗忘部分记忆,因此也常常被称为forget gate。
然后,函数f2就像是一支铅笔,再次根据昨天的记忆和今天的输入,决定要在日记本上增加那些记录,数学语言没描述就是:
\(f_2 = sigmoid (w_2 \begin{bmatrix} s_{t-1} \\ x_t \end{bmatrix}+ b_2) * tanh(\tilde{w_2}\begin{bmatrix} s_{t-1} \\ x_t \end{bmatrix}+\tilde{b_2})\)
其中sigmoid函数再次对内容进行了选择,tanh函数取值在-1到1之间,这步操作不是遗忘,而是相当于把这两天的事情进行梳理和归纳,因此也常常被称为input gate。
先用橡皮在日记本上删减,再用铅笔在日记本上增加记录,两步操作合起来,用公式表示就是
\(c_t = f_1 * c_{t-1} + f_2\)
这样就得到了新的日记\(c_t\),它除了会继续往下传递,同时会被用作更新当前短期记忆\(s_t\),最后就可以计算输出得到的\(y_t\),同时保持短期网络记忆链\(s_t\)和长期记忆链\(c_t\),并且相互更新。
把3D模型旋转90度,拉伸变形,然后把长期记忆链C投影到平面上,再扩展长短期记忆链间的关联,就对应上经典LSTM示图了。
这个图之所以难懂,主要是因为它用二维视角看三维信息,产生了重叠,而且一下子摆上了太多的细节,极大地增加了初学者的理解难度。
和RNN相比,LSTM引入了更多的参数矩阵,因此训练起来麻烦一些,但依然可以用梯度下降算法进行。
由于深度发觉了数据时序上的有趣关联,LSTM在某种程度上模拟了大脑,关注重要片段,而忽略无关信息,这极大拓展了人工智能的领域。