递归神经网络(RNN)随记

597 阅读3分钟

基本概念

想法:在之后的输入要把之前的信息利用起来。W3就相当于对中间信息进行一个保留。

X和U组合成一个特征图,A表示一个记忆单元。

V矩阵相当于对St进行一个全连接的操作。最终的输出需要通过softmax将向量转化成概率的形式。RNN最适合做自然语言处理。图像处理上没有要求前后关联。

求梯度,每一步都会对前面所有的都进行更新。

递归神经网络的问题

RNN的问题:如果输入的句子非常长例如:200个字,那他会把所有的字记忆下来。那么离的比较远的,它的信息价值是不是没那么高!会不会造成一些影响。过长的情况下也会有梯度消失的问题。如果某一步的梯度约等于0,那么前面与它相连的都会约等于0。

LSTM(长短神经网络)

Ct是指细胞状态,我们需要永远更新下去。当前门是遗忘门,决定哪些信息是需要遗忘的。
当前门是计算要保留的信息。
Ct是不断迭代不断更新的。

LSTM单元里的隐藏单元个数是hidden_size,上图中Cell有四个黄色的框,每个框的输入是h(t−1)和x(t) ,将它们concat到一起(直白的说就是把二者直接拼起来,比如 x是28位的向量,h(t-1)是128位的,那么拼起来就是156位的向量),维度为(hidden_size+wordvec_size),所以LSTM里的每个黄框的参数矩阵的维度为:

[hidden_size+wordvec_size,hidden_size]

需要注意的是,num_steps个时刻的LSTM都是共享一套参数的,说是有num_steps个LSTM单元,其实只有一个,只不过是对这个单元执行num_steps次。(图片上有三个绿色的大框,代表三个 cell 对吧,但是实际上,它只是代表了一个 cell 在不同时序时候的状态,所有的数据只会通过一个 cell,然后不断更新它的权重)。

那么一层的 LSTM 的参数有多少个?参数的数量是由 cell 的数量决定的,这里只有一个 cell,所以参数的数量就是这个 cell 里面用到的参数个数。假设 num_units(hidden_size) 是128,输入是28位的,那么四个小黄框的参数一共有 (128+28)*(128*4),也就是156 * 512,可以看看 TensorFlow 的最简单的 LSTM 的案例,中间层的参数就是这样,不过还要加上输出的时候的激活函数的参数,假设是10个类的话,就是128*10的 W 参数和10个bias 参数。

cell 最上面的一条线的状态即 C(t) 代表了长时记忆,而下面的 h(t)则代表了工作记忆或短时记忆。

参考

LSTM神经元的个数:blog.csdn.net/m0_37870649…

LSTM的结构与cell中的参数:blog.csdn.net/wjc11825113…