『RNN 监督序列标注』笔记-第三章 神经网络

『RNN 监督序列标注』笔记-第三章 神经网络

多层感知机(Multilayer Perceptrons)

多层感知机的输出仅仅取决于当前的输入,因此 MLPs 更适用于模式分类而非序列标注任务。仅仅具有单隐含层的 MLPs 就具有了以任意精度逼近任意连续函数的能力,因此也被成为通用函数拟合器(universal function approximators)

前向过程

前向过程可以描述为

ah=i=1Iwihxibh=θh(ah)

激活函数有多种选择。其中有

tanh(x)=e2x1e2x+1σ(x)=11+ex

然而有 tanh(x)=2σ(2x)1 因此他们作为激活函数是等同的,实际使用中可以根据值域的不同来选择。这两种激活函数最大的优点在于:非线性与可微性

输出层

可以用 softmax 进行多类输出函数:

p(Ck|x)=yk=eakk=1Keakp(z|x)=k=1Kyzkk

损失函数

简单起见,先不考虑最大后验估计,只考虑极大似然估计,则直接取负对数即可:

(x,z)=k=1Kzklnyk

反向过程

反向过程的关键在于推导残差反向传播过程。如果从链式法则的角度思考这个过程,能够清晰简单地得到结论,这里Calculus on Computational Graphs: Backpropagation介绍的很清楚。由于

(x,z)yk=zkyk

可以定义
δj=def(x,z)aj

由链式法则
δh=θ(aj)k=1Kδkwhk

最终有
(x,z)wij=(x,z)ajajwij=δjbi

梯度校验

反向过程中一般采用对称差分的方式进行梯度校验:

wij=(wij+ε)(wijε)wij+(ε2)

循环神经网络(Recurrent Neural Networks)

与 MLP 相比,RNN 最大的优势在于其内部状态具有的记忆功能:MLP 只能建立从输入到输出向量的映射,而 RNN 却能够建立从之前整个历史到输出的映射。

前向过程

前向过程可以由公式下式概括:

ath=i=1Iwihxti+h=1Hwhhbt1hbth=θh(ath)

最后一层的分类器,对于序列分类与时间段分类任务,都可以直接使用 MLP 的 Softmax / Logistic;而对于时序分类任务,需要重新设计输出层。

反向过程

反向过程一般采用(backpropagation through time ,BPTT),这种算法在概念和时间复杂度上都更优。

δth=θ(aht)k=1Kδtkwhk+h=1Hδt+1hwhh

其中
δtj=defatj

展开(Unfolding)

标准的 RNN 网络结构如图所示


这里写图片描述

双向神经网络(Bidirectional recurrent neural networks, BRNNs)

如果能够同时使用序列的未来信息和历史信息,将能够更好完成序列标注任务。然而标准的 RNN 只能使用历史信息。最容易想到的解决方式有2种:

  • 加上包含未来信息的时间窗。其缺陷在于:窗口长度固定、不能处理序列畸变。
  • 加上输入序列与输出序列之间的延时。其缺陷在于:延时需要人工确定、每次都要记忆之前的上下文,对网络是一种负担。

正向过程与标准 RNN 类似,但是输入序列以两个相反的方向输入到两个不同的隐含层。整条序列处理完成之后,隐含层参数一起更新。反向过程也是类似。如图所示


这里写图片描述

因果任务(Causal Tasks)

BRNN 违背了因果律,因此难以用于机器人导航、金融预测等等任务。然而如果输入序列是空间序列而非时间序列,那么输入序列的过去和未来就没有区别了,例如蛋白质结构的预测。

  • 某些情况下,BRNN 也可用于时间序列任务,只要输出是在序列结束时才给出,例如语句识别和手写体识别任务。
  • 甚至在线时间序列任务也能够使用 BRNN,只要允许在输入序列之间存在若干停顿,例如在线语音听写任务。

雅克比序列(Sequential Jacobian)

为了衡量输出向量对于输入微小改变的敏感程度,可以使用四维雅克比矩阵 J ,也称为序列雅克比:

Jttki=ytkxti

通过雅克比序列,我们能够评估网络在某个特定时间步的输出下,整个输入序列中每个时间步对此分别的影响。

  • 雅克比序列的绝对幅值并没有意义,其相对幅值能够表示输出被输入影响的程度(敏感度)。
  • 敏感度在那些具有较小方差的时间步会更大,例如固定图片背景的角落。这是因为网络预计那里不会有什么变化,变得非常敏感。造成雅克比序列幅值很大,但并不能说明这个时间步就绝对更重要

如图所示:是在线手写体识别任务的雅克比序列, x y 是笔尖的坐标,由于书写是从横向的,因此 y 的敏感度要高得多,但是并不证明 y 的重要性一定比 x 高。


这里写图片描述

网络训练

梯度下降法

Δwn=αwn

为了缓解陷入局部极值的问题,可以加上动量项:

Δwn=mΔwn1αwn

泛化(Generalisation)

泛化即模型对于没有见过的数据集的预测效果。一般训练集越大,泛化效果越好。使用正则化(regularisers)方法能够改善泛化效果,例如提前停止、输入噪声以及权重噪声。

提前停止(Early Stopping)

提前停止是为了防止过拟合(overfitting)。将训练集抽出一部分作为验证(validation)集。训练刚开始时,三者错误率都持续下降,到一定位置,验证集开始停止下降,选取此时停止,可以作为测试集的最优值。如图所示


这里写图片描述

使用验证集有两个问题:其一,需要牺牲一部分训练集做验证,如果训练集本身就很小,会破坏训练效果。其二,难以确定验证集的大小。

输入噪声

向输入数据加入0均值高斯噪声能够人为增加输入数据的规模,从而最终增强网络的泛化能力。输入噪声的困难一方面在于难以决定噪声的大小,只能在验证集上凭经验选取;更重要的一方面在于,这种添加噪声的方式仅当它们反映了真实数据变化时才能奏效。如图所示


这里写图片描述

这张图片来自于 MNIST,高斯噪声不管怎么加,这张照片都没有本质变化。但图片下方的随机拉伸则不然, 有效扩充了训练集。

  • 每次不要用相同的随机噪声。
  • 测试集不要加噪声。
权重噪声

另一种方案是给网络的权重施加0均值高斯噪声,因为这种方式适用于各种输入数据类型。然而一般来说,权重噪声效果弱于精心设计的输入噪声,并且可能造成收敛很慢的问题。同样地,在测试集上不应当使用权重噪声。

输入表达(Input Representation)

输入表达的目的是让输入数据与输出数据的关系尽可能简单,其要求是数据是完全的(包含了用以预测输出的全部信息)、相当紧凑(避免维数过高影响效果)。
首先是计算均值:

mi=1SxSxi

其次是计算标准差:
σi=1SxS(ximi)2

最终输入数据为:
x̂ i=ximiσi

注意:验证集和测试集要使用训练集所用的均值和标准差。

权重初始化

权重初始化一般要求网络权重初值选取随机、较小。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值