序列问题预测回归——循环神经网络(Recurrent Neural Network)

@(Aaron)[机器学习 | 循环神经网络]

主要内容包括:

  • 基于循环神经网络的语言模型,提供了从零开始的实现与简洁实现
  • 代码实践

循环神经网络的构造

  循环神经网络(Recurrent Neural Network)是一类用于处理序列数据的神经网络。序列数据的特点是后面的数据跟前面的数据有关系。基础的神经网络只在层与层之间建立了权连接,而循环神经网络在层内的神经元之间也建立的权连接。具体来说就是循环神经网络的每一个神经元除了当前的输入信息之外还包含之前网络的输出信息。这样做相当于赋予网络记忆,使得当前的输出依赖于当前的输入和记忆。基础的循环神经网络如图1所示有两种表示方法,每张图片左边是RNN的结构,右边是按时间轴展开后的情况。

在这里插入图片描述

  这是一个标准的RNN结构图,图中每个箭头代表做一次变换,也就是说箭头连接带有权值。损失L衡量每个 o o o 与相应的训练目标 y y y 的距离。当使用 s o f t m a x softmax softmax输出时,我们假设 o o o是未归一化的对数概率。损失L内部计算 y ^ = s o f t m a x ( o ) \hat{y} =softmax(o) y^=softmax(o),并将其与目标 y y y 比较。RNN输入到隐藏的连接由权重矩阵 U U U参数化,隐藏到隐藏的循环连接由权重矩阵 W W W参数化以及隐藏到输出的连接由权重矩阵 $V $参数化。式(1-4)定义了该模型中的前向传播。

a ( t ) = b + W h ( t − 1 ) + U x ( t ) \mathrm{a}^{(t)}=b+W h^{(t-1)}+U x^{(t)} a(t)=b+Wh(t1)+Ux(t)

h ( t ) = tanh ⁡ ( a ( t ) ) \mathrm{h}^{(t)}=\tanh \left(a^{(t)}\right) h(t)=tanh(a(t))

o ( t ) = c + V h ( t ) \mathrm{o}^{(t)}=c+V h^{(t)} o(t)=c+Vh(t)
y ^ ( t ) = softmax ⁡ ( o ( t ) ) \hat{y}^{(t)}=\operatorname{softmax}\left(o^{(t)}\right) y^(t)=softmax(o(t))

  基础的循环神经网络一直受到长期依赖和短时记忆的困扰。当一条序列足够长时,由于结构的加深,使得网络很难学习到从较早时间步传递过来的信息。因此,如果你正在尝试处理一段文本的预测,循环神经网络很可能遗忘开始的重要信息。在反向传播期间,循环神经网络会面临梯度消失(大部分情况下)或梯度爆炸(很少,但对优化过程影响很大)的问题。梯度用于更新网络权重,当梯度随着网络的加深而变得非常小甚至接近于零时,网络就会停止学习,梯度爆炸的问题相反。为了解决这个问题,又出现了一些改进的循环神经网络LSTM和GRU是其中最具代表性并且应用最广泛的。

裁剪梯度

  循环神经网络中较容易出现梯度衰减或梯度爆炸,这会导致网络几乎无法训练。裁剪梯度(clip gradient)是一种应对梯度爆炸的方法。假设我们把所有模型参数的梯度拼接成一个向量 ,并设裁剪的阈值是。裁剪后的梯度

min ⁡ ( θ ∥ y ∥ , 1 ) g \min \left(\frac{\theta}{\|\boldsymbol{y}\|}, 1\right) \boldsymbol{g} min(yθ,1)g

L 2 L_{2} L2范数不超过 θ \theta θ

代码实践

参考:https://github.com/Sandy1230/Dive-into-DL-PyTorch-master

  • 时间序列预测
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值