(早期)神经网络通常使用随机初始化和标准的梯度下降法来训练,但是效果不好,这是由于非线性激活层饱和(虽然有时能够自己走出饱和区域)。
目前已经通过良好的初始化和一些训练策略取得了较好的训练效果。
尤其是无监督的预训练(目前来看已经是标准的初始化操作),可能的原因是由于无监督的预训练相当于正则化矩阵,将参数设为更加容易收敛的状态。
但是目前我们致力于分析是什么样的原因使得训练多层深度网络变差。
无限数据集训练,(怎样制作数据集暂时省略)。
训练细节,设置网络层数为1-5层,代价函数为似然对数函数,-log(y,x),x是输入图片,y是目标类别。通过随机梯度下降法训练,mini-batch = 10,设置初始偏执为0,每一层的权重为服从如下的分布:n为前一层w的列数。
设置不同的激活函数:
1、sigmod:最佳深度为四层,下图为激活层输出。
从图中可以看出最后一层从开始训练立即进入饱和状态,虽然在a点会逐渐跳出饱和,但是其他的层开始进入饱和.
但是如果通过无监督的预训练,不会出现饱和的情况,这是由于随机初始化对于图像的分类并没有任何作用。
而为何会进入饱和区域呢?对于输出softmax(b+wh)可能更多依赖于b,因为b的学习地更快,因此误差梯度可能会将wh更多地置为0。
2、tanh
从图中可以看出第一层隐藏层首先进入饱和,然后是第二层。。。
3、softsign
多层同时进入饱和,第一层进入饱和比较快。
代价函数的影响:
对数代价函数+softmax 优于最小二乘+softmax
提出新的初始化方法,详情可见《权重初始化》