卷积神经网络相当于人类的视觉,但是它并没有记忆能力,只能处理一种特定的视觉任务,没有办法根据以前的记忆来处理新的任务。
循环网络的提出便是基于记忆模型的想法,期望网络能够记住前面出现的特征,并依据特征推断后面的结果,而且整体的网络结构不断循环,因而得名循环神经网络。
19-RNN(Recurrent Neural Network).pdf

RNN

循环神经网络的引子 — slot filling

句子里有一些信息需要填充,比如订票系统的destination,time of arrival

用feedforward的神经网络求解
image.png
把词汇表示为一个vector
output是一个probability distribution,属于每一个slot的几率
image.png
Taipei可能是出发地,也可能是目的地
希望我们的neural network是有记忆力的,根据上下文参数不同的输出

循环神经网络的基本结构

循环神经网络的基本结构特别简单,就是将网络的输出保存在一个记忆单元中,这个记忆单元和下一次的输入一起进入神经网络中。

每次hidden layer产生output的时候,都存到memory里面去
(网络在输入的时候会联合记忆单元一起输入,网络不仅输出结果,还会将结果保存到记忆单元中)
image.png

这个input sequence在考虑它的时候并不是independent
(输入序列的顺序改变,会改变网络的输出结果,这是因为记忆单元的存在,使得两个序列在顺序改变之后记忆单元中的元素也改变了,所以会影响最终的输出结果)
image.png
每一个单词作为input输入到network里
同一个network,在3个不同的时间点被运用了三次
(整个序列中的每个数据点依次传入网络)

image.png
上图中的每一个网络是不是都是独立的权重?
如果是不同的序列,上图中格子的数目就是不同的,对于一个网络结构,不太可能出现这种参数数目变化的情况。
实际上,这里用到了参数共享的概念,三个格子其实是同一个格子,网络的输出依赖于输入和记忆单元

下图左边是循环神经网络实际的网络流,右边是将其展开的结果。
网络本身是一个序列结构
image.png

image.png

RNN存在的问题

记忆的最大问题在于它有遗忘性,我们总是更加清楚地记得最近发生的事情而遗忘很久之前发生的事情。

Long short-term Memory

李宏毅老师课程内容

长的短时记忆网络

遗忘门、输入门、输出门
输入门控制网络的输入
遗忘门控制记忆单元
输出门控制网络的输出
image.png
input gate 被打开的时候才能输入到memory里面
output gate 决定外面的神经元能否读取这个输出
forget gate 决定什么时候把memory cell里面的东西忘掉

image.png
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
image.png
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

LSTM内部结构示意图
image.png

遗忘门和输入门

Ct-1作为上一步t-1时刻网络中的记忆单元,传入t时刻的网络之后,第一步决定的是它的遗忘程度。
image.png

记忆的衰减系数(遗忘门) — 采用多少上一时刻的记忆状态

将t-1时刻网络的输出ht-1和这一时刻的网络输入xt结合起来,然后作用线性变换Wf·(ht-1,xt)+bf , 再经过sigmoid激活函数,将结果映射到0~1作为记忆的衰减系数,记作ft。
可以看到网络具体要保留多少记忆是由前一时刻的输出和这一时刻的输入共同决定的
image.png

输入门

对当前学到的记忆,存在一个衰减系数,这个系数应用和上面的方式相同,再使用线性变换,然后使用sigmoid函数映射到0-1之间,这个结果作为当前学习到记忆的衰减系数,记作it,
当前学到的记忆2018 RNN - 图14是通过线性变换 2018 RNN - 图15 和tanh激活函数得到的

image.png

当前的记忆状态

t时刻下的记忆状态C**t = 将t-1时刻的衰减系数f**t × t-1时刻的记忆C**t-1 时刻t下学到的记忆2018 RNN - 图17 × 对应的衰减系数 it**

image.png

输出门

使用类似于计算记忆衰减系数的方法计算得到输出门的系数ot , 这个系数决定了输出的多少,最后网络的输出由
ht = ot × tanh(Ct) 得到,这就是输出门如何控制网络输出的原理
image.png