深度学习之卷积神经网络总结

深度学习之卷积神经网络总结

深度神经网络是普通神经网络的深度化,普通神经网络的结构类似人脑皮层,因为其结构的优越性曾经引起研究的热潮,并成功提出BP算法。

神经网络的强大表征能力依靠其深度,深度越深,表征能力越强,同时训练难度也会越大。传统的BP算法在模型深度加深时会遇到局部最优和梯度扩散等难题,导致其深度模型的研究被搁置。

浅层神经网络表达能力不足,深层网络难以训练,导致神经网络逐渐受到冷落,直到Hinton于2006年使用逐层初始化和全局调优的方法解决了深度网络难以训练的难题,深度网络才重新受到重视。

早在1998年,Lecun就用深度卷积神经网络做手写数字识别,并取得了很好的效果。卷积神经网络因为其权值共享的特点,没有梯度扩散的问题,(也许局部极值点的情况也不严重),可以直接使用BP算法。但是这时候的卷积神经网络只适合做小图片的识别,大图片识别的效果并不好。(为什么?我认为原因是,该网络结构的广度和深度不够,对大图片的表达能力有限。而且,受限于当时的计算能力和数据量大小,无法进一步扩展网络结构。)

2012年,Hinton和他的两个学生使用扩展了广度和深度的卷积神经网络在ImageNet上达到了当时最佳的分类效果,并远远领先第二名,使得卷积神经网络越来越受重视。

2014年,汤小欧团队使用卷积神经网络做人脸特征点检测和人脸识别,达到了比人还高的识别准确率;另外,据说使用卷积神经网络,车型识别的准确度能提高6个百分点。

下面对这几天卷积神经网络的学习做一些总结。

  1. 深度模型是数据驱动的,随着深度的加深,训练所需的样本也急剧增加。深度模型表征能力很强,如果训练样本不足,模型会出现过拟合的问题。Hinton使用人工制造样本(水平平移和镜像、PCA)和dropout方法防止模型过拟合。他们用了多少样本?原始集是160万256*256大小的图片,然后每个样本通过水平平移和镜像做了2048张224*224大小的样本,又通过PCA做了若干张。
  2. 为了提高训练速度,必须使用GPU加速。GPU的强大之处在于其并行计算能力,目前最好的GPU是K80,很贵,其次是GTX Titan,价格在一万到两万之间,再次是GTX 980,4000多,是我目前使用的。经过测试,使用caffe训练CaffeNet,batchzise=256时,需要3.2G显存,使用GTX 980,每20轮迭代大概需要15秒。
  3. 神经元使用ReLU函数一是能避免sigmoid函数饱和(在sigmoid接近1的平缓区域,梯度下降很慢)的问题,提高训练速度,二是能避免梯度扩散(因为sigmoid在残差传播时,前一层最多只能保留后一层的四分之一,导致越往前传播,残差越小,对前几层的权值和偏置的修正能力越弱,而使用ReLU就没有这个问题)。人脸特征点检测那两篇论文使用的都是绝对值修正的双曲正切函数,论文中说这种函数比较好,好像没讲原因,需要验证。
  4. caffe c++和Hinton的convnet是目前所知的两种开源卷积神经网络工具。caffe c++扩展性更好,使用也更加方便,convnet对应着ImageNet那篇论文。
  5. CNN可以使用逐层初始化和全局调优的方法训练,也可以直接使用BP算法进行训练,看的这几篇论文都是直接使用BP,看了Matlab使用BP的CNN实现。BP通过高层偏置的变化对输出误差的影响(即敏感度)向低层的传播来修正权值和偏置,然后使用修正的权值和偏置对新样本前向传播计算新的偏差,继续使用此偏差后向传播,修正权值和偏置,依次迭代,直至收敛或近似收敛。

caffe调参经验

  1. batchsize增加,可以用更大的base_lr,收敛速度会加快。
  2. 开始时应使用较大的base_lr,提高收敛速度,等到该lr不能进一步提高test accurancy时,将该lr缩小10倍,继续迭代。
  3. fine-tune已经收敛的模型,能提高收敛速度。fine-tune的步骤是:改最后一层的参数(名字、输出数目,增大lr的倍率),降低base_lr,开始fine-tune。

你可能感兴趣的:(机器学习,机器学习,CNN,深度学习,算法,神经网络)