RNN解决的很多问题,是文本相关的问题。
循环神经网络:
注意到的是,在左侧的图中有一个反馈回路,反馈回路把上一个时刻输出的信息,作为下一个时刻的输入,来进行处理。
右侧实际上是对左侧图的展开。按照时间序列展开。
Xt是时刻t的输入
St是时间t处的“记忆”,St=f(UXt+WSt-1),f可以是tanh等
Ot是时间t处的输出,比如是预测下个词的情况下,可能是softmax输出的属于每个候选词的概率
U是权重矩阵
针对输入的xt-1,以及之前的t-2时刻的t-2时刻的st-2信息,共同运算得到输出Ot-1更新当前的记忆单元st--1为下一时刻做准备
RNN存在的问题,之前的传播,随着时间的推进,信号不断的衰减。
为了解决这种情况,出现了lstm,LSTM是RNN的一种,RNN和lstm在tensorflow里都实现了,但是在工业应用中,对于一些参数,要进行调整。
LSTM解决的问题,是长时间的信息依赖的问题。区别于RNN的是,记忆细胞被改造过。
下面是RNN和LSTM的区别:
对上面这个图进行拆解:
neural network layer:对于非线性的信息进行转换
pointwise operation:点对点的运算,点乘
vector transfer:信息的传输
concatenate:汇聚
copy:对一个数据源进行分支传送
关键是上图所示的,Ct-1到Ct的传送。
通过这个“门”,来控制细胞的信息状态。这其中的sigmoid神经网络层, 就是actviation的激励层做的事情,是一个非线性的映射。pointwise的乘法,意思传递过来的信息和sigmoid激励的输出进行向量点乘得到结果。
sigmoid函数的最大的作用,就是将一个连续值压缩到0到1之间的一个概率值,来描述每个部分,0代表不允许任何信息量通过,1代表允许所有的量通过。
在lstm内部有几个块,分别负责不同的功能。
①最左侧的部分,输入是xt和ht-1,这一步处理的是要从细胞中丢弃什么信息,忘记一些信息。
Wf是一个矩阵,传统上的wx+b,w不变,x由Ht-1和xt组成,b是一个bias项,用sigmoid函数进行激励后得到的向量应该是一个0到1之间的数值的概率向量,这个概率向量和前面的Ct-1作用后确定忘掉的信息
②这一步决定将留下什么“新”的信息,这部分根据输入的xt决定放什么信息,到信息状态下。也就是说确定什么样的值进行更新,到这里是记上和上面的形式是一样的,通过sigmoid决定什么样的值进行更新,运算是一样的,但是权重不一样。tanh创建一个新的向量。
③对细胞状态进行更新。根据旧的状态和新的状态的结合,对当前状态进行更新。
④根据更新了的记忆体的Ct,通过sigmoid运算确定输出的部分,通过tanh处理细胞状态。
ht在这里被认为是当前状态的输出。ot是一个概率向量,用来确定细胞状态的哪一部分输出。
下面是另一种表述形式,和上面的表述,本质上是相同的,只不过这里对输出门,输入门,忘记门,做了更清楚的标注。
这就是对RNN的中几个比较经典的图解的说明,对于具体应用将持续更新。