深层神经网络难拟合与Batch Normalization问题

主要总结两个问题:

  1. 为什么传统的深层神经网络,随着层数的增加会越来越难拟合训练?
  2. 问题1的常见对策(Batch_Normalization)的介绍

一、为什么传统的深层神经网络,随着层数的增加会越来越难拟合训练?

众所周知,传统的深层神经网络,随着层数的加深,模型会变得很难训练,很难拟合,这个很多人都知道,但是为什么呢,怎么样解释清楚?

首先机器学习领域有一个很重要的假设:即独立同分布假设,就是假设训练数据与测试数据是满足相同分布,这是通过训练数据获得的模型能够在测试集上获得好的效果的一个基本保障。

传统的深层神经网络,随着层数加深,很难拟合:

究其原因是因为深层神经网络不同层之间会进行非线性变换,目的是通过非线性变换使得网络能够得到更强的表征能力,多层的线性叠加是没有意义的。

多层的这种非线性变换带来的结果就会使得模型的训练数据的分布会发生偏移或者变动,这个现象叫做Internal Covariate Shift,之所以会训练收敛很慢,是因为数据的整体分布逐渐往非线性函数取值区间的上下限两端靠近,而在这个区间的梯度是很小的,可以说接近0,如下图以sigmoid激活函数为例:

sigmoid函数如图:

深层神经网络难拟合与Batch Normalization问题_第1张图片

 

如箭头指示,随着多层神经网络的非线性变换,数据分布有可能往非线性函数取值区间的上下限两端靠近。

其梯度(导数)分布如图:

深层神经网络难拟合与Batch Normalization问题_第2张图片

此时在反向传播时,传播至低层神经网络的梯度就会容易发生梯度消失。

这就是深层神经网络随着层数加深,收敛越来越慢的本质原因。

 

  • 至于怎么解决这个问题?

 

以Batch Normalization(BN)为例,简单讲述一下这个方法是如何纠正上面存在的问题:
对于网络中的每层中的神经元,既然经过多层的非线性变换之后,会出现上述的Internal Covariate Shift现象,也就是数据分布发生了偏移。

那么BN的本质思想就是:将逐渐向非线性函数映射后向梯度消失区间的输入分布强行拉回到近似均值为0方差为1的正态分布,使得非线性变换函数的输入值落入对输入比较敏感的区域,避免发生梯度消失,拟合困难的问题。

比如原来经过非线性函数的映射后,输入数据分布发生偏移,偏移至均值为-2,方差为0.5.

而BN的工作就是把这个映射后的输入数据分布强行拉回近似均值为0方差为1的正态分布。

该操作的物理意义体现在:输入数据分布决定输入数据的取值范围,我们通过BN把输入数据拉回近似均值为0,方差为1的正态分布,如图所示。

深层神经网络难拟合与Batch Normalization问题_第3张图片

均值为0,方差为1的正态分布,数值[-2,2]占比95%,也就是说,当我们通过BN把输入数据拉回后,我们的95%数据分布在[-2,2].

对应下图sigmoid函数[-2,2]区间我们可以看出,在该区间内,梯度很大。从而加速拟合,提升拟合效果。

以上为BN的主要思想。

 

实际上,BN在将输入数据分布拉回近似均值为0方差为1的正态分布后,会对数据进行放缩以及加偏移,目的是为了同时保持网络的非线性学习能力!因为本质上,BN在强行改变输入数据的分布,避免了输入数据分布往非线性激活函数往梯度消失区域扩散的同时,它是在约束抵消非线性激活函数的非线性表达能力的,例如上图在[-2,2]区间内的曲线,是接近线性的!

所以BN过程中另外增加了scale以及shift两个参数,可以理解为:在强行拉回至近似均值为0,方差为1的正态分布之后,BN继续对输入数据分布动了动,把数据分布又往非线性区“靠了靠”,在前后起到一个trade offs的策略。即享受非线性的表达能力,同时避免输入数据的分布往非线性激活函数的梯度消失区过于靠近。

写在后面:

针对这种随着层数增加后,深度神经网络难拟合还有一种策略是:resnet.

这种方法与BN不同,resnet是调整模型结构去适应这个问题,而BN是针对数据进行处理。resnet具体还详细了解,有机会详细看后再总结!

本文参考内容:

https://www.cnblogs.com/guoyaohua/p/8724433.html

你可能感兴趣的:(机器学习读书笔记)