卷积神经网络相当于人类的视觉,但是它并没有记忆能力,只能处理一种特定的视觉任务,没有办法根据以前的记忆来处理新的任务。
循环网络的提出便是基于记忆模型的想法,期望网络能够记住前面出现的特征,并依据特征推断后面的结果,而且整体的网络结构不断循环,因而得名循环神经网络。
19-RNN(Recurrent Neural Network).pdf
RNN
循环神经网络的引子 — slot filling
句子里有一些信息需要填充,比如订票系统的destination,time of arrival
用feedforward的神经网络求解
把词汇表示为一个vector
output是一个probability distribution,属于每一个slot的几率
Taipei可能是出发地,也可能是目的地
希望我们的neural network是有记忆力的,根据上下文参数不同的输出
循环神经网络的基本结构
循环神经网络的基本结构特别简单,就是将网络的输出保存在一个记忆单元中,这个记忆单元和下一次的输入一起进入神经网络中。
每次hidden layer产生output的时候,都存到memory里面去
(网络在输入的时候会联合记忆单元一起输入,网络不仅输出结果,还会将结果保存到记忆单元中)
这个input sequence在考虑它的时候并不是independent
(输入序列的顺序改变,会改变网络的输出结果,这是因为记忆单元的存在,使得两个序列在顺序改变之后记忆单元中的元素也改变了,所以会影响最终的输出结果)
每一个单词作为input输入到network里
同一个network,在3个不同的时间点被运用了三次
(整个序列中的每个数据点依次传入网络)
上图中的每一个网络是不是都是独立的权重?
如果是不同的序列,上图中格子的数目就是不同的,对于一个网络结构,不太可能出现这种参数数目变化的情况。
实际上,这里用到了参数共享的概念,三个格子其实是同一个格子,网络的输出依赖于输入和记忆单元
下图左边是循环神经网络实际的网络流,右边是将其展开的结果。
网络本身是一个序列结构
RNN存在的问题
记忆的最大问题在于它有遗忘性,我们总是更加清楚地记得最近发生的事情而遗忘很久之前发生的事情。
Long short-term Memory
李宏毅老师课程内容
长的短时记忆网络
遗忘门、输入门、输出门
输入门控制网络的输入
遗忘门控制记忆单元
输出门控制网络的输出
input gate 被打开的时候才能输入到memory里面
output gate 决定外面的神经元能否读取这个输出
forget gate 决定什么时候把memory cell里面的东西忘掉
forget打开的时候是直的,关闭的时候是被遗忘掉
f(zf) = 1, 之前存的值直接通过,
f(zf) = 0, 过去存在memory里的值会清0
original network
input乘上不同的weight,当作不neuron的input
每一个neuron都是一个function
lstm的memory cell想成一个neuron
x1,x2乘上不同的weight当作lstm不同的输入
lstm有4个input和1个output
4倍的参数量
一整排的lstm,每个lstm的cell里都存了一个scalar
把所有的scaler接起来变成vector
时间点t input一个vector xt, 经过一个linear transform,变成z
z这个vector的每一个dimension代表每一个lstm的输入
经过一个linear transform,变成zi
4个vector来操控memory cell的运作
Understand lstm blog
https://www.yuque.com/duzh929/szyxim/nc1cpu
遗忘门和输入门
Ct-1作为上一步t-1时刻网络中的记忆单元,传入t时刻的网络之后,第一步决定的是它的遗忘程度。
记忆的衰减系数(遗忘门) — 采用多少上一时刻的记忆状态
将t-1时刻网络的输出ht-1和这一时刻的网络输入xt结合起来,然后作用线性变换Wf·(ht-1,xt)+bf , 再经过sigmoid激活函数,将结果映射到0~1作为记忆的衰减系数,记作ft。
可以看到网络具体要保留多少记忆是由前一时刻的输出和这一时刻的输入共同决定的
输入门
对当前学到的记忆,存在一个衰减系数,这个系数应用和上面的方式相同,再使用线性变换,然后使用sigmoid函数映射到0-1之间,这个结果作为当前学习到记忆的衰减系数,记作it,
当前学到的记忆是通过线性变换
和tanh激活函数得到的
当前的记忆状态
t时刻下的记忆状态C**t = 将t-1时刻的衰减系数f**t × t-1时刻的记忆C**t-1 + 时刻t下学到的记忆 × 对应的衰减系数 it**
输出门
使用类似于计算记忆衰减系数的方法计算得到输出门的系数ot , 这个系数决定了输出的多少,最后网络的输出由
ht = ot × tanh(Ct) 得到,这就是输出门如何控制网络输出的原理