摘要
本文章就关于的百度飞桨的东西理解清楚,并把相关的基础的基础的知识分享。
计算机视觉
池化(Pooling)
池化是使用某一位置的相邻输出的总体统计特征代替网络在该位置的输出,其好处是当输入数据做出少量平移时,经过池化函数后的大多数输出还能保持不变。比如:当识别一张图像是否是人脸时,我们需要知道人脸左边有一只眼睛,右边也有一只眼睛,而不需要知道眼睛的精确位置,这时候通过池化某一片区域的像素点来得到总体统计特征会显得很有用。由于池化之后特征图会变得更小,如果后面连接的是全连接层,能有效的减小神经元的个数,节省存储空间并提高计算效率。 如 图15 所示,将一个2×2的区域池化成一个像素点。通常有两种方法,平均池化和最大池化。
ReLU激活函数
梯度消失现象:
梯度消失的书序逻辑和数学分析?梯度消失带来的影响,靠近输入层的参数几乎不能被更新,靠近输入层的layer预测结果不准确,产生对整个后面的影响,最后无法训练。没有办法是使得模型最后收敛。
梯度消失的解决方式主要有:1)使用其它激活函数,如ReLU等;2)层归一化;3)优化权重初始化方式;4)构建新颖的网络结构,如highway net,而capsule net意图取消BP学习过程,釜底抽薪。
实际上,由于激活函数对于神经网络的影响巨大,对其改进和研究非常多,比如还有Maxout、PReLU等激活函数。
说下对ReLU和sigmoid两者的感悟:
- sigmoid函数在压缩数据“幅度”方面有优势,对于深度网络,使用sigmoid函数可以保证数据幅度不会有问题,幅度稳住后就不会有太大失误
- sigmoid存在梯度消失的问题,在反向传播上有劣势
- ReLU不会对数据做幅度压缩,所以随着深度网络层数加深,数据的幅度会越来越大,最终影响模型的表现
- 但是ReLU在反向传导时,能够将梯度信息“完完全全”地传递到浅层网络
层归一化
也即batch normalization。论文地址:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
主要希望解决的所谓”内部协变量漂移“(internal covariate shift)问题。对于实例集合(X,Y)中的输入值X分布不可以经常发生变化,因为这不符合样本独立同分布(i.i.d)的假设,使得模型无法捕获数据中的分布,稳定地学习规律。对于神经网络这种包含多个隐层的模型,在训练过程中,各层参数不停变化,所以各个隐层都会面对”covariate shift“的问题,这个问题不仅仅会发生在输入层,而是在神经网络内部都会发生,因此是”internal covariate shift“。
Batch normalization的基本思想:深层神经网络在做非线性变换前的输入值在训练过程中,其分布逐渐发生偏移,之所以训练收敛慢,一般是整体分布逐渐往非线性激活函数的两端靠近,这导致了反向传播时浅层神经网络的梯度消失。而batch normalization就是通过一定的规范化手段,将每个隐层输入的分布强行拉回到均值为0方差为1的标准正态分布上去,这使得输入值落回到非线性激活函数”敏感“区域。这使得梯度变大,学习速度加快,大大提高收敛速度。
以sigmoid激活函数为例,说明batch normalization的作用。下图红线所示为均值为0,方差为1的标准正态分布:
这意味着,在1个标准差范围内,x有64%的概率落在[−1,1]范围内,x有95%的概率落在[−2,2]的范围内
上图为sigmoid函数的导数,在[−2,2]的范围内,sigmoid函数的导数很大,而在两端饱和区,导数接近0。这也就意味着,经过batch normalization规范化后,输入值x有较大概率获得大的导数值,远离导数饱和区,从而使得梯度变大,学习速度加快,避免了梯度消失。但是归一化会破坏数据的分布,使网络的表达能力下降。因此论文中加入了两个参数γ,β,对变换后满足均值为0方差为1的输出的分布又进行了“恢复”。注意,新添加的两个参数γ,β是通过训练得到的,意为将标准化的值从标准正态分布左移右移长胖变瘦些,每个实例移动的程度不同,目的在于希望找到一个线性和非线性的平衡点,既得到非线性较强表达能力的好处,又避免太靠近非线性的饱和区域使得收敛速度变慢。
批归一化(Batch Normalization)
问题是的为什么要归一化,怎么设计归一化的东西的。
批归一化方法(Batch Normalization,BatchNorm)是由Ioffe和Szegedy于2015年提出的,已被广泛应用在深度学习中,其目的是对神经网络中间层的输出进行标准化处理,使得中间层的输出更加稳定。
通常我们会对神经网络的数据进行标准化处理,处理后的样本数据集满足均值为0,方差为1的统计分布,这是因为当输入数据的分布比较固定时,有利于算法的稳定和收敛。对于深度神经网络来说,由于参数是不断更新的,即使输入数据已经做过标准化处理,但是对于比较靠后的那些层,其接收到的输入仍然是剧烈变化的,通常会导致数值不稳定,模型很难收敛。BatchNorm能够使神经网络中间层的输出变得更加稳定,并有如下三个优点:
- 使学习快速进行(能够使用较大的学习率)
- 降低模型对初始值的敏感性
- 从一定程度上抑制过拟合
BatchNorm主要思路是在训练时以mini-batch为单位,对神经元的数值进行归一化,使数据的分布满足均值为0,方差为1。具体计算过程如下:
丢弃法(Dropout)(剪枝)
丢弃法(Dropout)是深度学习中一种常用的抑制过拟合的方法,其做法是在神经网络学习过程中,随机删除一部分神经元。训练时,随机选出一部分神经元,将其输出设置为0,这些神经元将不对外传递信号。
图 是Dropout示意图,左边是完整的神经网络,右边是应用了Dropout之后的网络结构。应用Dropout之后,会将标了×\times×的神经元从网络中删除,让它们不向后面的层传递信号。在学习过程中,丢弃哪些神经元是随机决定,因此模型不会过度依赖某些神经元,能一定程度上抑制过拟合。