神经网络训练技巧

本文详细探讨了神经网络训练中的关键技巧,包括数据增强、预处理、参数初始化、学习率调整、网络结构优化、正则化、优化器选择、损失函数选择等。强调了数据预处理中的标准化和归一化重要性,以及如何通过调整学习率、mini-batch大小和epoch数来优化训练。此外,还讨论了激活函数、正则化方法如L1和L2正则化,以及dropout技术在防止过拟合中的作用。最后,介绍了评估指标和集成学习策略以提升模型性能。
摘要由CSDN通过智能技术生成

目录

Part I: Image processing

1. Data Augmentation

2. Preprocessing

3. shuffle=True

Part II: Initialization

1. 参数初始化

Part III: Adjusting Parameters

1. 学习率

2. mini-batch的大小

3 epoch

Part IV: Net Structure

1. 激活函数

2. Regularizations

3. Optimizer

4. Loss函数选择

Part V: Evaluation

Part VI: Ensembling


Part I: Image processing

1. Data Augmentation

 在不改变图像类别的情况下,增加数据量,能提高模型的泛化能力。

自然图像的数据增广方式包括很多,如常用的水平翻转(horizontally flipping),一定程度的位移或者裁剪和颜色抖动(color jittering)。此外还可以尝试多种操作的组合, 例如同时做旋转和随机尺度变换,此外还可以把每个patch中所有像素在HSV颜色空间中的饱和度和明度提升0.25-4次幂方,乘以0.7-1.4之间的一个因子,再加一个-0.1-0.1之间的值。同样你可以在色调通道(H)对每张图片或patch的所有像素增加一个-0.1~0.1之间的值

image augmentation
image augmentation

2. Preprocessing

2.1 最简单的预处理方法: 标准化

什么是标准化

在机器学习领域中,标准化(standardization)是预处理(preprocessing)的常见步骤之一。其操作为减均值除方差,生成的分布均值为0方差为1,其公式为: 

其中x_i表示输入x的第i维,x_i^j表示训练集中第j个样本的第i维的值,训练集中总共有N个样本,\mu_i, \delta_i为训练集预估的第i维的均值和方差。

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)

X/=numpy.std(X,axis=0) # 数据归一化。

X是输入数据,(图片数目X图片维度)。另一种标准化(normalize)方式是标准化每个维度,保证每个维度的最大值和最小值是-1和1。这种预处理的方式只在输入的各个特征的尺度或者单位不同时才有意义。以图片像素作为输入为例子,所有像素值尺度都在0-255这个尺度之间,所以没必要严格的执行这种预处理操作。在自然图像上进行训练时,可以不进行归一化操作,因为理论上图像任一部分的统计性质都应该和其他部分相同,图像的这种特性被称作平稳性(stationarity)

3. shuffle=True

随机读取数据,一般在训练网络时使用,对于小数据集来说效果惊人

 

Part II: Initialization

1. 参数初始化

最简单的方法:让W和b服从N(0, 1 / sqrt(n_in) ),n_in:输入神经元的个数,设置合适的W和b可以加快学习的速率,在极个别的神经网络中,W和b甚至可以影响最后训练的准确度。

1.1 不要将参数全部初始化为零
几乎所有的CNN网络都是堆成结构,将参数零初始化会导致流过网络的数据也是对称的(都是零),并且没有办法在不受扰动的情况下打破这种数据对称,从而导致网络无法学习。

参数零初始化时,无论输入是什么,中间神经元的激活值都是相同的(任意一个神经元的激活值a=f(WTX),当权重W是零向量时,WTX也是零向量,因此经过激活函数后激活值都相同),反向传播过程中计算的梯度也是相同,每个权重参数的更新因此也是相同的,网络因此失去了不对称性。

1.2 用小的随机数初始化
初始化参数应该非常接近于零(但不全等于零),来打破网络的对称性。初始参数应该是随机且独立的来保证每个参数更新过程是不同的。给每个参数随机赋予一个接近零的值:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值