深度学习预训练

1 非线性激励函数

  • sigmoid:
    11+ex11+e−x
  • tanh:
    tanhtanh
  • softplus:
    log(1+ex)log(1+ex)
  • Relu:
    max(x,0)max(x,0)

     

1.1 作用

对于无非线性激励函数情况,每一层网络输出都为线性函数,可验证无论神经网络层数多少,输出都是输入的线性组合,意味着单层网络也可实现,这也是最原始的感知机。 
引入非线性激励函数,使得深层神经网络变得有意义,也能模拟更复杂的模型。

1.2 Relu vs (sigmoid tanh)

  • 使用sigmoid tanh作激活函数时,计算量大,反向传播求误差梯度时,求导计算量也很大。
  • sigmoid tanh函数容易饱和,出现梯度消失情况,即在接近收敛时,变换太缓慢,造成信息丢失。
  • Relu会使部分神经元输出为0,造成稀疏性,不仅缓解了过拟合,也更接近真实的神经元激活模型。
  • 缩小与做预训练的差距

2 关于深度学习中的预训练

2.1 为什么预训练

深度网络存在以下缺点:

  • 网络越深,需要的训练样本数越多。若用监督则需大量标注样本,不然小规模样本容易造成过拟合。(深层网络意味着特征比较多,机器学习里面临多特征:1、多样本 2、规则化 3、特征选择)
  • 多层神经网络参数优化是个高阶非凸优化问题,常收敛较差的局部解
  • 梯度扩散问题。BP算法计算出的梯度随着深度向前而显著下降,导致前面网络参数贡献很小,更新速度慢。

解决方法:逐层贪婪训练。无监督预训练(unsupervised pre-training)即训练网络的第一个隐藏层,再训练第二个…最后用这些训练好的网络参数值作为整体网络参数的初始值。无监督学习参数初始值;监督学习fine-tuning,即训练有标注样本。经过预训练最终能得到比较好的局部最优解。

2.2 常用预训练方法

  • Stacked RBM
  • Stacked sparse-autoencoder
  • Stacked denoise-autoencoder

2.3 Why does unsupervised pre-training help deep learning?

(该部分内容整理自D Erhan等人的论文http://machinelearning.wustl.edu/mlpapers/paper_files/AISTATS2010_ErhanCBV10.pdf

2.3.1预训练的效果

1.测试误差即泛化能力(多次随机选取初始点后的统计结果)

有预训练无预训练
误差小误差大
深度增大时,鲁棒性更好,方差更小深度增大时,鲁棒性差,得到差的局部最优解概率增大

2.特征角度 
fine-tuning对神经网络权值改变很小,似乎权值被困在某个局部区域。而且第一层改变最少,第二层次之…最后一层最大。这说明浅层的权值参数似乎是把参数整体限制在某个范围,即浅层权值对结果影响比较大,然而BP算法会出现梯度消失,即不容易改变浅层的权值参数。

3.模型轨迹 

(权值基于ISOMAP映射算法,迭代次数增加,深蓝转为青色) 
局部最优解有很多。无预训练不同初始值收敛到不同局部点,收敛点的扩散性;预训练会更偏向某些点,收敛点的收敛性。

2.3.2 预训练在深层次网络学习中的角色

假设1:预训练使得权值参数在最优参数的周边范围(与预训练相同统计特征的参数进行fine-tuning,发现结果并不如预训练) 
假设2:预训练使得最优化过程更有效(计算training error,事实上随着迭代进行,该值无训练更小) 
假设3:预训练类似于规则化权值(从测试误差来说,预训练对于多节点数和深层网络效果更加!) 


但是预训练规则化又不同于经典的规则化(L1/L2),训练数目越多,预训练结果越好。 
该论文也说明了基于pre-training的深度学习网络,当满足大数据、深层次、多节点网络,效果更优。

参考资料

http://blog.sina.com.cn/s/blog_628b77f80102v41z.html 
http://machinelearning.wustl.edu/mlpapers/paper_files/AISTATS2010_ErhanCBV10.pdf 
https://www.researchgate.net/publication/259399568_Why_does_the_unsupervised_pretraining_encourage_moderate-sparseness

没有更多推荐了,返回首页