记忆网络RNN、LSTM与GRU

一般的神经网络输入和输出的维度大小都是固定的,针对序列类型(尤其是变长的序列)的输入或输出数据束手无策。RNN通过采用具有记忆的隐含层单元解决了序列数据的训练问题。LSTM、GRU属于RNN的改进,解决了RNN中梯度消失爆炸的问题,属于序列数据训练的常用方案。

RNN

结构

传统的神经网络的输入和输出都是确定的,RNN的输入和输出都是不确定的sequence数据。其结构如下:

具体地,RNN有隐含层,隐含层也是记忆层,其状态(权值)会传递到下一个状态中。

htyt=σ(xtWxh+ht−1Whh)=σ(htWhy)

\begin{split} h^t &= \sigma(x^tW_{xh} + h^{t-1}W_{hh}) \\ y^t &= \sigma(h^tW_{hy}) \end{split}

训练

训练步骤如下:

  1. 构建损失函数
  2. 求损失函数对权值的梯度
  3. 采用梯度下降法更新权值参数

关于损失函数,根据需要选择构建即可,下面提供两种常见的损失函数:

CC=12∑n=1N||yn−ŷ n||2=12∑n=1N−logynrn

\begin{split} C &= \frac{1}{2}\sum_{n=1}^N ||y^n-{\hat{y}}^n||^2 \\ C &= \frac{1}{2}\sum_{n=1}^N -\log y_{r^n}^n \end{split}

关于梯度下降,采用BPTT(Backpropagation through time)算法,该算法的核心是对每一个时间戳,计算该时间戳中权重的梯度,然后更新权重。需要注意的是,不同时间戳同样权重的梯度可能是不一样的,如下图所示都减去,相当于更新同一块内存区域中的权重。

应用

  • 多对多:词性标注pos tagging、语音识别、name entity recognition(区分poeple、organizations、places、information extration(区分place of departure、destination、time of departure、time of arrival, other)、机器翻译
  • 多对一:情感分析
  • 一对多:caption generation

RNN Variants

RNN的变种大致包含下面3个思路:

  • 增加隐含层的输入参数:例如除了ht−1,xth^{t-1}, x^t,还可以包含yt−1y^{t-1}作为输入。
  • 增加隐含层的深度
  • 双向RNN

LSTM

结构

  • 单个时间戳,RNN输入1个x,输出1个y
  • 单个时间戳,LSTM输入4个x,输出1个y

相比RNN,LSTM的输入多了3个x,对应3个gate,这3个gate分别是:

  • input gate:控制输入
  • forget gate:控制cell
  • output gate:控制输出

涉及到的激活函数共5个,其中3个控制gate的(通常用sigmoid函数,模拟gate的开闭状态),1个作用于输入上,一个作用于cell的输出上。

LSTM单个时间戳的具体执行如下:

  • 输入:4个输入xx,1个cell的状态cc
  • 输出:1个输出aa,1个更新的cell状态c′c'

c′a=g(z)f(zi)+cf(zf)=h(c′)f(zo)

\begin{split} c' &= g(z)f(z_i) + cf(z_f) \\ a &= h(c')f(z_o) \end{split}

梯度消失及梯度爆炸

首先,要明白RNN中梯度消失与梯度爆炸的原因:在时间戳的更新中,cell的状态不断乘以WhhW_{hh}。简单起见,视WhhW_{hh}为scalar值ww,那么y=xwny=xw^n,∂y∂w=nxwn−1\frac{\partial{y}}{\partial{w}}=nxw^{n-1}。根据ww的值与1的大小关系,梯度会消失或者爆炸。

接下来,要明白LSTM如何解决RNN中梯度消失与爆炸的问题。

针对梯度消失,RNN中当获取c′c'的梯度后,因为c′=cwc' = cw,为了backward获得cc的梯度,要将c′c'的梯度乘以ww;LSTM中存在梯度的快速通道,获取c′c'的梯度后,因为c′=g(z)f(zi)+cf(zf)c' = g(z)f(z_i)+cf(z_f),当forget gate打开时,c′=g(z)f(zi)+cc' = g(z)f(z_i)+c。c′c'的梯度可以直接传递给cc。 总结来说,LSTM相比RNN,将c,c′c,c'的更新关系从乘法变成了加法,因此不用乘以权值系数ww,c′c'的梯度可以直接传递给cc,解决了梯度消失的问题。

针对梯度爆炸,即使将c,c′c,c'的关系由乘法变成了加法,仍然解决不了梯度爆炸。原因便是梯度的路径不止一条,如下图所示,红色的块仍然可能造成梯度爆炸。LSTM解决这个问题的方法是clip,也就是设置梯度最大值,超过最大值的按最大值计。

GRU

结构

GRU相比LSTM的3个gate,只用了两个gate:

  • update gate:ztz_t
  • reset gate:rtr_t

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习算法与Python学习

主流机器学习算法优缺点总结,先从基础玩起!

决策树分类方法,采用基于最小距离的基尼指数估计函数,用来决定由该子数据集生成的决策树的拓展形。决策树回归方法,采用切分点与切分变量来计算的损失来估计函数。如果目...

882
来自专栏张俊红

一些算法的小结

总第54篇 算法目的:分类、预测 算法分类:监督型、非监督型 算法的核心:你有什么数据、你要解决什么问题 ---- 01|线性回归: 1、什么是回归 回归,指...

3094
来自专栏老秦求学

【手把手系列之一】手写实现单层神经网络

训练集: \(X = [x^{(1)},x^{(2)},...,x^{(i)},....,x^{(m)}]\) ;对应标签:\(Y=[y^{(1)},y^{(2...

572
来自专栏杂七杂八

线性分类器损失函数与最优化(下)

损失函数可以量化某个具体权重集W的质量。而最优化的目标就是找到能够最小化损失函数值的W 。

1064
来自专栏https://www.cnblogs.com/L

【机器学习】--线性回归中L1正则和L2正则

经验值 MSE前系数为1 ,L1 , L2正则前面系数一般为0.4~0.5 更看重的是准确性。

781
来自专栏jeremy的技术点滴

机器学习课程_笔记06

2704
来自专栏ACM算法日常

第三篇:机器学习之代价函数和梯度下降

从隐层开始每个神经元是上一层逻辑回归的结果并且作为下一层的输入,篇幅限制,我们将在下一篇将详细介绍逻辑回归的公式与代码

642
来自专栏https://www.cnblogs.com/L

【机器学习】--主成分分析PCA降维从初识到应用

主成分分析(Principal Component Analysis,PCA), 是一种统计方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变...

912
来自专栏null的专栏

优化算法——梯度下降法

一、优化算法概述     优化算法所要求解的是一个问题的最优解或者近似最优解。现实生活中有很多的最优化问题,如最短路径问题,如组合优化问题等等,同样,也存在很多...

3576
来自专栏机器学习原理

梯度下降算法

最优化算法的一种,解决无约束优化问题,用递归来逼近最小偏差的模型。 关于梯度的概念可参见以前的文章: 从方向导数到梯度 梯度下降法迭代公式为: ...

31311

扫码关注云+社区