1.CNN
1.1 原理
Tips:
1.每个卷积层由K个卷积模板生成,例如:第一层一般为边缘检测的卷积模板。
2.为了使卷积前后的数据维度一致,可以将原始数据进行边拓展,拓展的数量为P。
1.2.CNN流程
Tips:
1.每个卷积层后会有Relu操作,起将矩阵稀疏化的作用。
2.若干个卷积层后会有POOL操作,其实就是降采样,一般取采样区域中的最大值为采样结果。
3.最后是FC(full connected)layers(第三章所讲的神经网络),对数据进行分类识别,计算样本在各分类下的分值,最后使用softmax激活函数。
2. Training Neural Networks 1
2.1 Activation Functions
Tips:
Sigmoid激活函数的导数大于0,如果输入数据全是正或全是负,那么dL/dw符号始终不变,这意味着w的更新方向均相同,这必然对寻找合适的w参数不利,这也是为什么一般要求数据关于0对称的原因,也解释了问题2。
![](https://img-blog.csdn.net/20170918095000584?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjU1NDA5Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
Tips:
当输入x小于0时,Relu的输出为0,导数也为0,这使得所在的神经元权重w始终得不到更新,因此称此神经元为dead ReLU。
ReLU的改进:
总结与建议:
2.2 Date Preprocessing
Tips:
Whitening的目的是去掉数据之间的相关联度,是很多算法进行预处理的步骤。比如说当训练图片数据时,由于图片中相邻像素值有一定的关联,所以很多信息是冗余的。这时候去相关的操作就可以采用白化操作。数据的whitening必须满足两个条件:一是不同特征间相关性最小,接近0;二是所有特征的方差相等(不一定为1)。常见的白化操作有PCA whitening和ZCA whitening。
PCA whitening是指将数据x经过PCA降维为z后,可以看出z中每一维是独立的,满足whitening白化的第一个条件,这是只需要将z中的每一维都除以标准差就得到了每一维的方差为1,也就是说方差相等。公式为:
ZCA whitening是指数据x先经过PCA变换为z,但是并不降维,因为这里是把所有的成分都选进去了。这是也同样满足whtienning的第一个条件,特征间相互独立。然后同样进行方差为1的操作,最后将得到的矩阵左乘一个特征向量矩阵U即可。
ZCA whitening公式为:
![](https://img-blog.csdn.net/20170918102237937?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjU1NDA5Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20170923173136443?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjU1NDA5Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20170918102340856?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjU1NDA5Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
2.3 Weight Initialiation
当参数w初始化为0时:
很多神经元的输出可能趋于一致,梯度值也一致,因此w的更新也一致,这并不是我们希望看到的!
当参数初始化为一个小数:
图片依次为:
每层网络的输出均值,输出方差,输出数据直方图
当初始化为1附近的值时:
目前比较理想的初始化算法:
Tips:
1. fan_in与fan_out指的是输入与输出的数据的数量。
2.以上神经网络采用的激活函数为tanh,当采用ReLU时,初始化公式应变为:
因为一般数据是关于0中心化,而ReLU对小于0的数据设为0,所以要除以2!
2.4 Bath Normalization
Tips:
在训练阶段,β与γ是需要进行训练的参数,而μ与σ是根据训练数据计算得到,两者值不一样!
2.5 Baby Setting the Learning Process
2.6 Hyperparameter Optimzation
Tips:
learning rate与regularization系数以log形式搜索,而不是直接按值搜索,这是因为它们更新权重时时乘数!
Tips:
这是因为所选的参数搜索范围太小!
3. Training Neural Networks 2
3.1 Fancier optimization
初始的SGD算法容易出现锯齿状反复计算的情况,收敛太慢,容易收敛到局部极小值和鞍点(高维出现几率比局部极小值更加频繁),抗噪声能力差!
Momentum,即动量,可以理解为保留之前的梯度方向和强度作为此次迭代更新的依据!因此,可以有效的避免锯齿状反复计算的情况!
Nesterov动量法,相比于动量法,可以矫正之前的梯度对当前参数更新的影响!
RMSprop相对于AdaGrad而言,减少了之前梯度对当前参数更新的影响!
Adam,融合了RMSprop和动量法!
在神经网络的超参数中,学习率最为重要,其次为学习衰减率,因为训练阶段越到后面搜索步长理应越小!右图中的拐点及学习率衰减时出现的情况。
注:一阶优化和二阶优化的区别示意图
二阶牛顿优化法具有没有学习率等超参数等优点,但是要求Hession矩阵的逆矩阵,应用于大型网络计算量太大,一般使用其改进版本:L-BFGS!
总结:
1. Adam是不错的默认参数优化算法!
2. If you can afford to do full batch updates then try out L-BFGS(do not forget to disable all sources of noise).
3.2 Regularization
3.2.1 Dropout
多模型融合的通用框架
3.2.2 训练数据增强
DropConnect: 随机的让某些神经元的参数w为0
Fractional Max Pooling: 在CNN中的Pooling阶段,随机的对图像中的某些小块进行下采样
Stochastic Depth: 对神经网络中的某些神经元添加直接跳转到几级之后的神经元的路径,训练时中间的神经元可能不进行训练,但测试时全部神经元均参加!
3.3 Transfer Learning
通常情况,我们可以利用已经经过大量样本(如ImageNet)训练过的部分网络(如CNN层)作为我们的训练网络一部分,在此基础上根据需求进行特化,这就是所谓的迁移学习!