CS231n学习记录Lec7 Training训练神经网络(上)
Lec7 训练神经网络(上)
1. Activation Functions**函数
sigmod function
最原始的**函数之一,不太建议使用。
饱和时候梯度消失。输入值很大的时候梯度为o。(*)
sigmod存在的问题:(**)tanh function
- ReLU function
relu的计算更接近于生物神经元放电特性,计算更简单,收敛速度更快。
不再以零为中心是一个问题。负半轴梯度消失。
经查被使用到。 - Leaky Relu function
- ELU
- Maxout“neuron”
-
2. Data Preprocessing
- 零均值化、归一化(一般更愿意只做零均值化而不做归一化,归一化损失掉数据的特征 )
- 均值减法是常用的预处理形式, 它对数据中每个独立特征减去平均值,从几何上可以理解为在每个维度上都将数据云的中心都迁移到原点(减去整个数据集的相应特征均值)。而对于图像,更常用的是对所有像素都减去一个值,也可以在3个颜色通道上分别操作。
- 零均值化和归一化增加鲁棒性的说明:
如下图中的点和分离曲线,右侧中分离曲线(相当于我们的参数)稍微偏离一下也能够比左侧更容易分离开红蓝点来。
3. Weight Initialization
-
全零初始化
一开始全部初始化为0的话会使所有神经元做同样的事情,同样的输出,同样的反向传播 。没有打破参数对称性。 - small random numbers
在小型网络中有作用,但是深层网络时候存在问题。 - Xavier初始化方法
(*****) - MSRA初始化方法
(*****)
4. Batch Normalization
BN操作的位置在非线性操作之前:
批量归一化做的是将数据转换为单位高斯数据传入**函数中。在标准的深度卷积神经网络中人们发现BN能够使训练变得容易,鲁棒性更好。BN的流程思想:
5. Babysitting the Learning Processing
- 完整性检查sanity check
先从小量数据开始,去掉正则化项,能否将损失训练至0,能则开始将整个所有数据加入训练。
过程中损失不能够下降:可能是学习率设置太低了;损失溢出(暴增 爆炸):可能是学习率设置过大。一般设在1e-3到1e-5之间。
6. Hyperparameter Optimization
- 有哪些超参数
网络结构
学习率、参数更新类型
正则化
通常不要同时优化超过两个或三个以上的超参数。超参数里面最重要和最先确定下来的应该是学习率,先找到学习率的一个合适区间。 - Cross-validation strategy 交叉验证策略
指在训练集上进行训练,在测试集上进行测试,观察这些超参数的实验效果。
先coarse,一开始用相对分散的值进行试验,然后根据效果选择再fine。观察效果可以通过观察损失值,如果比初始的大三倍以上或大出很多判断出不是一个正确的调整方向。 - 学习率
学习率调整的时候更愿意使用10的整数次幂(或其他背书)为间隔而不是均匀采样。
较好的学习率下损失函数的变化趋势如下红色曲线:
下图所示的情况是因为一开始参数初始化不对,导致一开始没有学习到什么东西,慢慢的再开始步入正轨。 - 对超参数的采样搜索,随机可能比网格采样有效、真实。绿色函数图线示例。