【CS231n】Lecture 5:Training Network,Part I

CS231n系列课程笔记:作为本人的笔记记录,并无商用用途
CS231n:http://cs231n.stanford.edu/


关于训练神经网络的误解:

1.ConvNets needs a lot of data to train!实际做法:利用Image data训练网络,利用本地数据微调网络
2.Infinite compute.实际:有限的计算能力

当前进度:Mini-Batch SGD(训练步骤如下)

1.随机取样
2.前向传播(forward prop),得到损失函数(loss function)
3.反向传播(back prop),求偏导计算梯度(gradient)
4.更新参数


激活函数(Activation Function)

sigmoid
优点:可微
缺点:1.当参数达到饱和状态(比如w较大或w较小时,w的剃度很小,更新很慢很慢,“kill” gradient)
2.sigmoid函数的输出是在零到一之间,没有小于零的值(not zero centered),一定程度上限制了神经网络的拟合能力
3.exp()运算占用较多计算能力(相较于线性函数的计算)
这里写图片描述


tanh
优点:1.可微
2.输出是zero centered数据
缺点:1.当参数达到饱和状态(比如w较大或w较小时,w的剃度很小,更新很慢很慢,“kill” gradient)
2.tanh运算相较于线性运算,占用了较多计算力
这里写图片描述


ReLU(Rectified Linear Units)
优点:1.w>0时可微,并且导数是常数
2.线性计算占用的计算力小
3.没有饱和状态,只要存在损失,可以一直更新参数(相同的梯度,梯度没有变化)
4.收敛的更快(例如:6x的导数和sigmoid的导数)
缺点:1.w一旦小于零,相应的节点永远不会被激活(kill node)
2.输出数据not zero centered
这里写图片描述


Leaky ReLU
所有ReLU的优点,同时1.不会kill node2.输出数据zero centered
这里写图片描述


maxout
优点:同Leaky ReLU
缺点:使神经网络中参数的数量翻倍
这里写图片描述


ELU(Exponential Linear Units)
优点:同Leaky ReLU
缺点:exp()计算占用较多的计算力
这里写图片描述


激活函数的总结:

  1. 使用ReLU作为激活函数,但是学习率初始化不能太大(过大的学习率会使部分神经元死亡,永远不会再被激活)
  2. 不要使用sigmoid作为激活函数
  3. 可以尝试ELULeaky ReLUMaxout
  4. tanh的效果可能不如以上三者,但是可以尝试

数据预处理(Data Preprocessing)
1.原始数据处理(只针对图片,mean centered data)

  • 提取所有通道(例如RGB三个通道)的均值,方差(e.g. AlexNet)
  • 提取单个通道的均值,方差(e.g. VGGNet)

2.参数初始化(Weights Initialization)

  • 高斯分布(均值为0,方差为较小值(例如:0.01))
    问题:对于层数较少的神经网络作用很好,一旦层数增大,输出的激活值接近0,并且在BackProp过程中更新缓慢
  • Xavier initialization 使得网络中信息流动更充分,解决上面的问题
    表达式:这里写图片描述

3.批量正则化(Batch Normalization)
步骤如下:

  1. 分别计算不同维度的均值,方差
  2. 正则化,表达式如下:
    这里写图片描述

经验法则:Batch Normalization Layer通常在非线性激活(nonlinearity)函数层之前,例如tanh

4.记录观察学习过程
训练建议:在本地训练时,最好对train dataset的准确率能够达到100%准确,尽量对本地数据做到过拟合,这样分类器反而在实际中能够有更好的表现

关于学习率的技巧:
1.如果loss一直不下降,学习率过小了
2.如果loss增大,学习率过大了

5.超参数优化(Hyperparameter Optimization)
粗调参数时,训练代数设置小一点,做到既可以观察loss趋势,又可以节省时间

猜你喜欢

转载自blog.csdn.net/qq_29340857/article/details/71083070