深度学习学习笔记

导语

本文是本人学习深度学习过程中遇到的部分问题,并自己寻找答案,将答案汇总,一是方便自己今后查阅和复习,二是将其分享出来,希望能帮助到需要的同学,共同学习共同进步。

1、卷积神经网络有那些重要技巧(trick),你认为哪个技巧最影响结果?

卷积神经网络(CNN)在图像分类方面展现出了优异的天赋,现已成为图像处理领域的标准规范。针对特定的问题,需要有多种技巧来调整模型,以使模型在测试数据上有好的效果和更强大的泛化能力。CNN在图像方面主要有扩增训练数据、图像预处理、权值初始化、训练技巧、激活函数选择、正则化、训练过程可视化、类数据不平衡等技巧。

1)训练数据扩增

深度学习需要大量的数据,而有时数据量却不够模型的训练,对于卷积神经网络来说,如果训练图像不够,就需要对原始图像进行扩增。常用的扩增方法有对数据进行水平翻转(horizontally flipping),随机裁剪(random crops),颜色抖动(color jittering)等变换方法,生成新的训练图像。

2)图像预处理

常用的图像预处理方法有:

  • 均值0中心化(zero-center),规范化(normalize)

  • PCA白化 (PCA Whitening)

3)权值初始化

权值初始化有:全0初始化、随机初始化、校正方差

全0初始化:即初始化时所有权值为0,这会带来一个问题,在进行参数更新时,由于每个神经元输出都一样,在反向传播时会得到同样的梯度值,使得参数更新一样,整个网络呈现对称性。

随机初始化:可以设置权值为非常接近于0的随机值,会让网络非对称,以便于训练。

校正方差:随机初始化的方法会让输出方差随着输入神经元的个数而变化。把权值除以输入神经元个数的开方就可以让输出神经元方差为1,这样可以让每层输出具有相同方差,能够大大提高收敛速度。在实际的编程实现中,常用如下代码:

w = np.random.randn(n) / sqrt(n)

考虑到ReLU激活函数,推荐的做法是:

w = np.random.randn(n) / sqrt(n/2.0)
4)训练技巧

设定合适的卷积核和pooling size

训练过程,输入图像的大小希望为2的幂次,比如32(cifar-10),64,224(ImageNet),384,或者512。而且采用小的卷积核大小(如3*3)和小的滑动步长(如1)和填充0是比较重要的,不但能减少权值参数、调整输出空间维度而且还能提高整个网络的准确率。

学习率衰减

指数衰减的学习率既可以让模型在训练的前期快速接近较优解,又可以保证模型在训练后期不会有太大的波动,从而更加接近局部最优。

5)激活函数选择

激活函数让深度网络具有非线性表达能力。几种常见的激活函数:sigmoid,tanh,ReLU,leaky ReLU,Parametric ReLU,Randomized ReLU。

sigmoid函数

sigmoid函数表达式如下,把实数压缩在0~1之间。sigmoid函数会在很多地方看到,它很好的模拟了神经元的激活状态,从0到1表示了该神经元的活跃状态。


sigmod函数

但是sigmoid函数有两个主要缺点,现在很少用它。①激活值容易饱和,容易接近0或1,会使梯度为非常接近0的数,无法进行权值更新,同时在初始化权值时很难设置初始值,因为容易使激活值饱和。②激活值是非0中心化的。如果激活值都是正值,则反向传播算w梯度都是正值或负值,这会让在权值更新时出现锯齿变化,但是相比①消极影响是不严重的。

tanh函数

tanh函数把实数压缩在-1~1之间。和sigmoid函数一样激活值容易饱和,容易接近-1或1,会使梯度为非常接近0的数,无法进行权值更新.但是它是0中心化的。在实际应用中,我们更愿意使用tanh(x),而非sigmoid函数。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值