首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

前馈神经网络如何转入应用

梯度消失问题

在神经网络中误差反向传播的迭代公式为

其中需要用到激活函数 fl 的导数。 误差从输出层反向传播时,在每一层都要乘以该层的激活函数的导数。 当我们使用 sigmoid 型函数:logistic 函数 σ(x) 或 tanh 函数时,其导数为

我们可以看到,sigmoid 型函数导数的值域都小于 1。并且由于 sigmoid 型 函数的饱和性,饱和区的导数更是接近于 0。这样,误差经过每一层传递都会不 断衰减。当网络层数很深时,梯度就会不停的衰减,甚至消失,使得整个网络 很难训练。这就是所谓的梯度消失问题(Vanishing Gradient Problem),也叫 梯度弥散问题。梯度消失问题在过去的二三十年里一直没有有效地解决,是阻 碍神经网络发展的重要原因之一。

在深层神经网络中,减轻梯度消失问题的一个方法就是使用导数比较大的 激活函数,比如 ReLU(rectifier 函数)。这样误差可以很好地传播,训练速度得到了很大的提高。

训练方法

随机梯度下降 对于大规模数据,很难使用批量梯度下降。随机梯度下降(Stochas- tic Gradient Descent,SGD)

随机梯度下降:每次迭代(随机)选择一个样本计算梯度,并更新参数。

Mini-batch 随机梯度下降 Mini-batch 随机梯度下降:批量梯度下降和随机梯 度下降的折中。

−4 −2 0 2 4 6 (b) tanh函数的导数

每次迭代选取m(1 ≤ m ≤ N)个样本进行参数更新。

经验

因为深度神经网络的表达能力很强,所以很容易产生过拟合。另外,大量 的参数会导致训练比较慢。在训练深度神经网络时,同时也需要掌握一定的技 巧。目前,人们在大量的实践中总结了一些经验技巧,可以从以下几个方面来提高学习效率并得到一个好的网络模型:1)数据增强;2)数据预处理;3)网 络参数初始化;4)正则化;5)超参数优化等。

数据增强 深层神经网络一般都需要大量的训练数据才能获得比较理想的结果。

数据预处理

一般而言,原始的训练数据中,每一维特征的来源以及度量单位不同,会 造成这些特征值的分布范围往往差异很大。当我们计算不同样本之间的欧式距 离时,取值范围大的特征会起到主导作用。这样,对于基于相似度比较的机器 学习方法(比如最近邻分类器),必须先对样本进行预处理,将各个维度的特征 归一化到同一个取值区间,并且消除不同特征之间的相关性,才能获得比较理 想的结果。虽然神经网络可以通过参数的调整来适应不同特征的取值范围,但 是会导致训练效率比较低。

假设一个只有一层的网络 y = tanh(w1 x1 + w2 x2 + b),其中 x1 ∈ [0, 10], x2 ∈ [0,1]。之前我们提到tanh()的导数在区间[−2,2]上是敏感的,其余的导数 接近于0。因此,如果w1x1 + w2x2 + b过大或过小,都会导致梯度过小,难以 训练。为了提高训练效率,我们需要使w1x1 +w2x2 +b在[−2,2]区间,我们需 要将 w1 设得小一点,比如在 [−0.1, 0.1] 之间。可以想象,如果数据维数很多时, 我们很难这样精心去选择每一个参数。因此,如果每一个特征的取值范围都在 相似的区间,比如 [0, 1] 或者 [−1, 1],我们就不太需要区别对待每一个参数,减少人工干预。

除了参数初始化之外,不同特征取值范围差异比较大时还会梯度下降法的 搜索效率。图5.10给出了数据归一化对梯度的影响。其中,图5.10a为未归一化 数据的等高线图。取值范围不同会造成在大多数位置上的梯度方向并不是最优 的搜索方向。当使用梯度下降法寻求最优解时,会导致需要很多次迭代才能收 敛。如果我们把数据归一化为取值范围相同,如图5.10b所示,大部分位置的梯 度方向近似于最优搜索方向。这样,在梯度下降求解时,每一步梯度的方向都 基本指向最小值,训练效率会大大提高。

归一化的方法有很多种,比如之前我们介绍的 sigmoid 型函数等都可以将 不同取值范围的特征挤压到一个比较受限的区间。这里,我们介绍几种在神经网络中经常使用的归一化方法。

标准归一化 标准归一化也叫 z-score 归一化,来源于统计上的标准分数。将每 一个维特征都处理为符合标准正态分布(均值为 0,标准差为 1)。假设有 N 个 样本 , i = 1, · · · , N ,对于每一维特征 x,我们先计算它的均值和标准差:

然后,将特征 x(i) 减去均值,并除以标准差,得到新的特征值 xˆ(i)。

这里,σ 不能为 0。如果标准差为 0,说明这一维特征没有任务区分性,可以直接删掉。

在标准归一化之后,每一维特征都服从标准正态分布。

缩放归一化 另外一种非常简单的归一化是通过缩放将特征取值范围归一到 [0,1]或[−1,1]之间:

其中,min(x) 和 max(x) 分别为这一维特征在所有样本上的最小值和最大值。

PCA 使用 PCA (Principal Component Analysis) 方法可以去除掉各个成分之间的相关性。

批量归一化

在传统机器学习中,一个常见的问题的协变量偏移(Covariate Shift)。协 变量是一个统计学概念,是可能影响预测结果的变量。在机器学习中,协变量 可以看作是输入变量。一般的机器学习算法都要求输入变量在训练集和测试集 上的分布是相似的。如果不满足这个要求,这些学习算法在测试集的表现会比较差。

在多层的神经网络中,中间某一层的输入是其前面网络的输出。因为前面网络的参数在每次迭代时也会被更新,而一旦这些参数变化会造成这一个中间 层的输入也发生变化,其分布往往会和参数更新之前差异比较大。换句话说,从 这一个中间层开始,之后的网络参数白学了,需要重新学习。这个中间层的深度 很大时,这种现象就越明显。这种现象叫做内部协变量偏移(Internal Covariate Shift)。

为了解决这个问题,通过对每一层的输入进行归一化使其分布保存稳定。这 种方法称为批量归一化方法(Batch Normalization)[Ioffe and Szegedy, 2015]。

归一化方法可以采用第5.7.2节中介绍的几种归一化方法。因为每一层都要 进行归一化,所以要求归一化方法的速度要快。这样,PCA 白化的归一化方法 就不太合适。为了提高归一化效率,这里使用标准归一化,对每一维特征都归 一到标准正态分布。相当于每一层都进行一次数据预处理,从而加速收敛速度。

因为标准归一化会使得输入的取值集中的 0 附近,如果使用 sigmoid 型激活 函数时,这个取值区间刚好是接近线性变换的区间,减弱的神经网络的非线性 性质。因此,为了使得归一化不对网络的表示能力造成负面影响,我们可以通 过一个附加的缩放和平移变换改变取值区间。从最保守的角度考虑,可以通过 来标准归一化的逆变换来使得归一化后的变量可以被还原为原来的值。

作者:邱锡鹏 犀语科技首席科学家复旦大学计算机学院,副教授

主要研究方向:深度学习、自然语言处理、自动问答系统以及表示学习。在ACL、EMNLP、IJCAI等计算机学会A类期刊、会议上发表40余篇学术论文。开源自然语言处理工具FudanNLP项目负责人,主要开发者。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171215G03KCS00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券