如何求导 洛必达法则如何求导

雷锋网按:本文作者章华燕,金桥智慧科技算法工程师,原文载于作者,雷锋网已获授权 。
本文将主要介绍 8 种深度神经网络实现细节的技巧或tricks,包括:数据增广、图像预处理、网络初始化、训练过程中的技巧、激活函数的选择、不同正则化方法、来自于数据的洞察、集成多个深度网络的方法等 。
1. 数据增广
在不改变图像类别的情况下,增加数据量,能提高模型的泛化能力 。
自然图像的数据增广方式包括很多,如常用的水平翻转(horizontally flipping),一定程度的位移或者裁剪和颜色抖动(color jittering) 。此外还可以尝试多种操作的组合, 例如同时做旋转和随机尺度变换,此外还可以把每个patch中所有像素在HSV颜色空间中的饱和度和明度提升0.25-4次幂方,乘以0.7-1.4之间的一个因子,再加一个-0.1-0.1之间的值 。同样你可以在色调通道(H)对每张图片或patch的所有像素增加一个-0.1~0.1之间的值 。
2. 预处理2.1 较简单的预处理方法:
零均值化
标准化
2.1.1 为什么要零均值化
数据有过大的均值可能导致参数的梯度过大,如果有后续的处理,可能要求数据零均值,比如PCA 。零均值化并没有消除像素之间的相对差异,人们对图像信息的摄取通常来自于像素之间的相对色差,而不是像素值的高低 。
2.1.2 为什么要归一化
归一化是为了让不同维度的数据具有相同的分布 。假如二维数据(X1,X2)两个维度都服从均值为零的正态分布,但是X1方差为100,X2方差为1 。那么对(X1,X2)进行随机采样在二维坐标系中绘制的图像,应该是狭长的椭圆形 。
对这些数据做特征提取会用到以下形式的表达式:
S = w1*x1 + w2*x2 + b;
那么参数W1,W2的梯度为:
dS / dw1 = x1 ; dS / dw2 = x2
由于x1与x2在分布规模上的巨大差异,w1与w2的导数也会差异巨大 。此时绘制目标函数(不是S)的曲面图,就像一个深邃的峡谷,沿着峡谷方向变化的是w2,坡度很小;在峡谷垂直方向变化的是w1,坡度非常陡峭,如图1,而我们期望的目标函数是图2这样的 。
目标函数是非常难以优化的,因为w1和w2的梯度差异太大,所以在两个维度上需要不同的迭代方案 。但在实际操作中,为了方便,我们通常为所有维度设置相同的步长,随着迭代的进行,步长的缩减在不同维度也是同步的 。这就要求w不同纬度的分布规模大致相同,而这一切都始于数据的归一化 。
展开全文
2.1.3 实现代码
X-=numpy.mean(X,axis=0) # 即X的每一列都减去该列的均值

如何求导 洛必达法则如何求导

文章插图
X-=numpy.mean(X,axis=0) # 即X的每一列都减去该列的均值
注:对于灰度图像,零均值化也可以减去整张图片的均值:X-=numpy.mean(X)
X/=numpy.std(X,axis=0) # 数据归一化 。
X/=numpy.std(X,axis=0) # 数据归一化 。
X是输入数据,(图片数目X图片维度) 。另一种标准化(normalize)方式是标准化每个维度,保证每个维度的较大值和较小值是-1和1 。这种预处理的方式只在输入的各个特征的尺度或者单位不同时才有意义 。以图片像素作为输入为例子,所有像素值尺度都在0-255这个尺度之间,所以没必要严格的执行这种预处理操作 。在自然图像上进行训练时,可以不进行归一化操作,因为理论上图像任一部分的统计性质都应该和其他部分相同,图像的这种特性被称作平稳性(stationarity)
2.2 白化(Whitening)
白化相当于在零均值化和归一化操作之间插入一个旋转操作,将数据投影到主轴上 。一张图片经过白化后,可以认为每个像素之间是统计独立的 。然而白化很少在卷积神经网络中使用,可能原因是图像信息本来就是依靠像素之间的相对差异来体现的,白化让像素间去相关,让这种差异变得不确定,损失了信息 。