深度学习——递归神经网络RNN

RNN

深度学习——递归神经网络RNN
传统神经网络和卷积神经网络只适用于预先设定的大小(固定大小的输入产生固定大小的输出)。RNN的输入输出长度都是可变的。
可以用来做机器翻译,情绪分析等。

RNNs的工作原理是迭代更新一个隐藏状态h,它是一可以有任意维度的向量。
深度学习——递归神经网络RNN
对于任意的一个ht:
1、由对应的输入xt与上一个隐藏层ht-1来计算
2、输出yt是由ht计算出的结果。
这样,前一次的输出结果,就会带到下一次的隐藏层中,跟着一起训练。

每一个步骤都是采用的相同的权重,通常来讲,一个典型的RNN通常只需3组权重去完成它的计算。
Wxh for all xt ->ht links
Whh for all ht-1 ->ht links
Why for all ht -> yt links
两个偏差
bh 添加在计算ht时
by 添加在计算yt时

方程为:
ht = tanh(Wxtxt + Whhht-1 + bh) (**函数蚕蛹双曲线函数)
yt = Why*ht + by
权重W为矩阵,其他变量均为向量。

损失函数为:
交叉熵损失与Softmax联合计算
L = -ln(pc)

参数优化方法: 梯度下降法(计算损失函数对参数的导数,每个输出都对参数有影响)

RNN的反向传播

反向计算:Backpropagation Through Time BPTT
深度学习——递归神经网络RNN
链式法则
Δs3 = dE3/ds3
t3时刻:dE3/dw = ds3/dw * Δs3
t2: dE3/dw = ds3/ds2 * ds2/dw * Δs3
t1: dE3/dw = ds3/ds2 * ds2/ds1 * ds1/dw * Δs3

dE3/dw = Σ (ds3/dsk) * dsk/dw * Δs3
深度学习——递归神经网络RNN
对U求导(U是不同时刻中间状态之间变化关系)
E3生成过程中U参与3次,对U求导为三次之和
dE3/dU = Σ ds3/dsk* dsk/dU * Δs3

梯度消失问题

dE3/dw = Σ (ds3/dsk) * dsk/dw * Δs3
在这个过程中: Σ (ds3/dsk) —> Jacobian Matrix
U*Si-1 = Si
U最大特征值大于1,梯度爆炸
U小于1,梯度消失

较长的记忆无法产生作用
解决:

  1. 非线性激励更换
  2. LSTM长短记忆单元

LSTM Long Short-Term Memory

LSTM参考
RNN局限: 无法记住长距离依赖(梯度消失)
深度学习——递归神经网络RNN
解决方案:
设计Gate,保存重要记忆
gate定义:gate 实际上就是一层全连接层,输入是一个向量,输出是一个 0到1 之间的实数向量。深度学习——递归神经网络RNN
用门的输出向量按元素乘以我们需要控制的那个向量
原理:门的输出是 0到1 之间的实数向量,
当门输出为 0 时,任何向量与之相乘都会得到 0 向量,这就相当于什么都不能通过;
输出为 1 时,任何向量与之相乘都不会有任何改变,这就相当于什么都可以通过。
深度学习——递归神经网络RNN
第一步:新输入xt前状态ht-1决定C哪些信息可以舍弃
深度学习——递归神经网络RNN
第二步:新输入xt前状态ht-1告诉C哪些新信息想要保存
it: 新信息添加时的系数,Ct^单独新数据形成的控制参数,用于对Ct进行更新
深度学习——递归神经网络RNN
第三步:根据旧的控制参数和上一步新的控制参数组合生成最终控制参数
深度学习——递归神经网络RNN
第四步:根据控制参数Ct产生此刻新的LSTM输出
深度学习——递归神经网络RNN
LSTM核心:Ct
信息流控制的关键,参数决定了ht传递过程中,哪些被保存或舍弃。参数被Gate影响。
怎样实现Gate对Ct影响?
Sigmoid函数系数决定Ct参数的变化,而sigmoid取决于输入

Peephole Connection

深度学习——递归神经网络RNN

另一个讲解

设计长时记忆单元为C
c(t) = c(t-1) ; 这样计算出来的梯度恒为1,可以无损耗向前传递

将新信息写入C
C的定义:前时刻的外部输入x(t)与前一时刻的网络输出(即反馈单元)y(t-1)联合得到网络
深度学习——递归神经网络RNN
新信息的选择记忆:乘法操作
作为一种对信息进行某种控制的操作(比如任意数与0相乘后直接消失,相当于关闭操作;任意数与大于1的数相乘后会被放大规模等)
深度学习——递归神经网络RNN
gin 为输入门,取值0.0-1.0,因此使用sigmoid作为控制门的**函数。每个长时记忆单元都有它专属的输入门,符号表示这个按位相乘的操作,用大写字母C来表示长时记忆单元集合。即:深度学习——递归神经网络RNN
当C变得很大时,**函数的输出就完全饱和了,增加遗忘门
深度学习——递归神经网络RNN
添加输出阀门使其中一部分跟当前任务当前时刻相关的脑细胞输出
深度学习——递归神经网络RNN
peephole:把长时记忆单元接入各个门,即把上一时刻的长时记忆c(t-1)接入遗忘门和输入门,把当前时刻的长时记忆c(t)接入输出门(当信息流动到输出门的时候,当前时刻的长时记忆已经被计算完成了)。即
深度学习——递归神经网络RNN
直接用隐藏层单元h来代替最终输出y
深度学习——递归神经网络RNN
h可能发生梯度消失,而梯度消失的时候就意味着记忆消失了,即h为短时记忆单元。
梯度只从c走的时候,存在一条无连环相乘的路径,可以避免梯度消失。又有遗忘门避免**函数和梯度饱和,因此c为长时记忆单元。

**函数

gate 的**函数定义为 sigmoid 函数,输出的**函数为 tanh 函数
深度学习——递归神经网络RNN

Word2Vec

利用上下文进行学习,两个词的上下文类似,生成的vector会接近。

  1. 每个词生成One-Hot向量
  2. 根据文本训练数据构建映射关系用以训练
  3. 构建简易三层神经网络:各层神经元个数:N-m-N
    深度学习——递归神经网络RNN
  4. 生成每个词word to word 的映射,中间层特征提取