【深度学习研究系列】之漫谈RNN(二)

推送第二日,量化投资与机器学习公众号将为大家带来一个系列的 Deep Learning 原创研究。本次深度学习系列的撰稿人为 张泽旺 ,DM-Master,目前在研究自动语音识别系统。希望大家有所收获,共同进步!

漫谈RNN之训练方法

RNN的训练因其递归性而变得复杂,现在深度学习大多系统中通常采用的是Back-propagation Through Time算法,本文不打算运用公式来讲解,而是将公式转化成易懂的文字来描述这些算法。

历史文章:(点击阅读)

【深度学习研究系列】之漫谈RNN(一)

RNN是一个循环递归网络,因此在t时刻,网络的输出误差不仅与t时刻的隐含状态有关,也与t时刻之前的所有时刻的隐含状态有关。这一特点,正表明RNN相比传统的隐马尔科夫模型的优势是它充分考虑了历史所有时刻的状态。

当我们构建好了一个RNN模型之后,最大的难点就在于训练这个模型,这里说的训练实际上就是数学上的优化过程。在训练神经网络的时候,后向传播算法是最流行的训练算法,而BPTT则是基于它的一个变形。那么什么是后向传播算法呢?

考虑一个多层感知器(MLP),假设它有K个隐含层,考虑输入层和输出层的话一共有K+2个隐含层,输入层的神经元个数为M,输出层的神经元个数为N,并且每一个隐含层的神经元个数为H_k。后向传播算法的步骤通常如下:

  1. 初始化神经元的所有参数,包括输入层与隐含层之间的权重、隐含层与隐含层之间的权重以及隐含层和输出层之间的权重(这里的权重包括连接权重和神经元偏置),权重初始化的方法通常有产生高斯随机数、线性均匀随机分布、赋予常数0等等。设定参数更新的步长,即学习率的大小。
  2. 利用MLP的前向计算公式,将输入值代入MLP网络得输入层神经元中,计算出每一个隐含层的神经元激活值以及输出层每个神经元的值。
  3. 计算出输出层每个神经元的误差,这里的误差表达式可以有很多种类型,例如常见的有平方差形式、交叉熵形式等等。训练网络的目标就是要使得输出层神经元的总误差E达到最小。
  4. 根据第K+1层与第K+2层之间的数量关系,计算出E对第K+1层上每个神经元的偏导数,由此偏导数即可计算出E对第K+1层与第K+2层之间权重的偏导数,于是第K+1层与第K+2层之间权重即可更新。
  5. 以此类推,一直计算到第1层神经网络上的所有神经元的偏导数,这样即可更新输入层与第一层之间的权重。这就是误差的后向传播。
  6. 完成以上即为一个Epoch,而训练的目标就是不断重复这样的Epoch,直到总误差E收敛到某个规定的阈值为止。

以上说的是用于训练MLP的后向传播算法,由于权重的更新是通过不断减去它的一阶偏导慢慢实现的,因此我们称这种算法为梯度下降法。虽然梯度下降算法在误差平面上只能找到局部最优值,但是这个缺点可以被一些错误得以很好避免,例如在训练的时候可以增加一些噪声、可以按照Epoch的增大而动态改变学习率的大小、采取不同的初始化方法、采取预训练的权重等等。

对于RNN来说,传统的后向算法已经无法适用了,这个时候我们需要把RNN网络在时间维度上展开,这个时候我们采用的是基于时间的后向传播算法(BPTT)。

BPTT算法的计算步骤如下:

  1. 初始化、前馈计算,跟后向传播算法的流程一样
  2. 计算每一时刻输出层K的误差,总误差就是我们要优化的变量。
  3. 计算T时刻隐含层K-1层的误差、第k-1层历史时刻的误差、第K-2层T时刻的误差。
  4. 更新K-1层T时刻的权重。
  5. 依次类推,直到第一层t=1时刻的权重被更新,即完成一个训练Epoch。
  6. 持续迭代,直到总误差收敛为某个阈值为止,停止训练

BPTT算法的计算复杂度相比于传统的BP算法要复杂N倍,N是整个网络的连接个数。而BPTT另外一个计算上的缺点则是它考虑了所有的历史信息,于是有人提出了使用truncated-BPP,即只考虑固定长度的历史,超过此时间的历史信息不用纳入BPTT中计算。这在一定程度上会影响RNN的记忆性,不过就算运用完整的BPTT算法,RNN的记忆性也无法长期保留,一个研究观点表明RNN最多只能记忆10~20个时间点。

通常训练一个RNN需要很多个Epoch,花费几个小时甚至几天都有可能,并且,训练RNN也没有训练MLP那么稳定,通常可以采取的措施有使用Dropout、使用批归一化等技巧,而对于网络超参的设置需要因数据规模而定,甚至有时候需要在实践中得出经验甚至是要靠直觉来判断。

近期文章预告:

《漫谈RNN之梯度消失及梯度爆炸》

《漫谈RNN之长短期记忆模型LSTM》

《漫谈RNN之序列建模(机器翻译篇)》

原文发布于微信公众号 - 量化投资与机器学习(ZXL_LHTZ_JQXX)

原文发表时间:2016-12-08

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术翻译

如何在Python中从0到1构建自己的神经网络

大多数关于神经网络的介绍性文章在描述它们时都会提到大脑类比。在不深入研究大脑类比的情况下,我发现简单地将神经网络描述为将给定的输入映射到期望的输出的数学函数就更...

38500
来自专栏新智元

机器学习:你需要多少训练数据?

? 从谷歌的机器学习代码中得知,目前需要一万亿个训练样本 训练数据的特性和数量是决定一个模型性能好坏的最主要因素。一旦你对一个模型输入比较全面的训练数据,通...

42670
来自专栏生信小驿站

黑箱方法-神经网络①人工神经网络

今天,主要使用人工神经网络的进行建模分析,涉及的R包是neuralnet和nnet两个包,函数名和包名是一样的。

11830
来自专栏SimpleAI

【DL笔记1】Logistic Regression:最基础的神经网络

从【DL笔记1】到【DL笔记N】,是我学习深度学习一路上的点点滴滴的记录,是从Coursera网课、各大博客、论文的学习以及自己的实践中总结而来。从基本的概念、...

8020
来自专栏IT派

深度学习入门必看秘籍

导语:本文是日本东京 TensorFlow 聚会联合组织者 Hin Khor 所写的 TensorFlow 系列介绍文章,自称给出了关于 TensorFlow ...

35060
来自专栏Spark学习技巧

【深度学习】笔记第一弹--神经网络

1. 神经网络前言 1.1 背景 在进入神经网络之前,先讲述两个略带血腥的实验。 第一个实验是科学家将耳朵到大脑听觉区的神经给切断了,然后将眼睛到大脑听觉区的...

32780
来自专栏决胜机器学习

机器学习(二十) ——PCA实现样本特征降维

机器学习(二十)——PCA实现样本特征降维 (原创内容,转载请注明来源,谢谢) 一、概述 所谓降维(dimensionalityreduction),即降低...

50960
来自专栏Duncan's Blog

记录几个经典模型

2.1 gbdt 的算法的流程? gbdt通过多轮迭代,每轮迭代生成一个弱分类器,每个分类器在上一轮分类器的残差基础上进行训练.(弱分类器一般会选择CART T...

18320
来自专栏派树AI

Machine Learning笔记——单变量线性回归

在机器学习中,样本一般分成独立的三部分训练集(train set),验证集(validation set)和测试集(test set)。其中,训练集用于建立模型...

12400
来自专栏IT派

最全的DNN概述论文:详解前馈、卷积和循环神经网络技术

本论文技术性地介绍了三种最常见的神经网络:前馈神经网络、卷积神经网络和循环神经网络。且该文详细介绍了每一种网络的基本构建块,其包括了基本架构、传播方式、连接方式...

38240

扫码关注云+社区

领取腾讯云代金券