深度神经网络tricks and tips

1)data augmentation

(augment 增加,aug:to increase 词根,同August(奥古斯特即凯撒大帝,自认为最伟大的帝王,他出生在八月,他以自己的名字命名这个月)同根词有auct, auction(拍卖,不停的增价), auth,author(使书一段一段长起来,作者);authority -ity 表特性,权利;authorize (-ize 使有)作者使有,授权)

在深度学习中就是人工增加训练集的大小,通过平移、翻转加噪等从已有数据中创造新数据。原因是深度网络需要大量的数据来训练。

  • 旋转 | 反射变换(Rotation/reflection): 随机旋转图像一定角度; 改变图像内容的朝向;
  • 翻转变换(flip): 沿着水平或者垂直方向翻转图像;
  • 缩放变换(zoom): 按照一定的比例放大或者缩小图像;
  • 平移变换(shift): 在图像平面上对图像以一定方式进行平移;可以采用随机或人为定义的方式指定平移范围和平移步长, 沿水平或竖直方向进行平移. 改变图像内容的位置;
  • 尺度变换(scale): 对图像按照指定的尺度因子, 进行放大或缩小; 或者参照SIFT特征提取思想, 利用指定的尺度因子对图像滤波构造尺度空间. 改变图像内容的大小或模糊程度;
  • 对比度变换(contrast): 在图像的HSV颜色空间,改变饱和度S和V亮度分量,保持色调H不变. 对每个像素的S和V分量进行指数运算(指数因子在0.25到4之间), 增加光照变化;
  • 噪声扰动(noise): 对图像的每个像素RGB进行随机扰动, 常用的噪声模式是椒盐噪声和高斯噪声;
  • 颜色变换(color): 在训练集像素值的RGB颜色空间进行PCA。

不同的任务背景下, 我们可以通过图像的几何变换, 使用以下一种或多种组合数据增强变换来增加输入数据的量。 几何变换不改变像素值, 而是改变像素所在的位置。 通过Data Augmentation方法扩张了数据集的范围, 作为输入时, 以期待网络学习到更多的图像不变性特征。

2)预处理

  • zero-center  X-=np.mean(X,axis=0)
  • normalize    X/=np.std(X,axis=0)
  • PCA whitening

3)初始化

  • all zero(if every neuron output the same value, then they will have same gradients using back-propagation.and have the same updates. there will have no asymmetry between neurons)
  • small random numbers: what the parameters to close to 0, but not 0.然而这是有弊端的,一旦随机分布选择不当,就会导致网络优化陷入困境。随着层数的增加,我们看到输出值迅速向0靠拢,在后几层中,几乎所有的输出值 x 都很接近0!回忆优化神经网络的back propagation算法,根据链式法则,gradient等于当前函数的gradient乘以后一层的gradient,这意味着输出值 x 是计算gradient中的乘法因子,直接导致gradient很小,使得参数难以被更新!
  • Xavier Initialization其初始化方式也并不复杂。Xavier初始化的基本思想是保持输入和输出的方差一致,这样就避免了所有输出值都趋向于0
  • He Initialization在ReLU activation function中推荐使用,:在ReLU网络中,假定每一层有一半的神经元被激活,另一半为0,所以,要保持variance不变,只需要在Xavier的基础上再除以2:

4)training

  • filter and pool size(power of 2)pooling 2*2;
  • learning rate: 跟mini-batch size 有关,如果在validation set上不进步了,学习率/2;
  • fine-tune onpre-trained model:small dataset and similar task。 数据的大小和相关性来考虑fine-tuning layer的多少

5)激活函数:

见博文

sigmods:kill gradients, not zero-centered, the gradient updates either all be positive or all be negitive, so this will produce undesirable zig-zagging dynamics in the gradient updates.

tanh

ReLU: 简单阈值,不会梯度消减,加快计算,但是可能造成训练停止,小于0的为0。

leaky ReLU:

parametric ReLU

Randomized ReLU

6) regularization(正则化)

L2 regularization:+  到损失函数, where  is the regularization strength. It is common to see the factor of  in front because then the gradient of this term with respect to the parameter  is simply  instead of .

L1 regularization:+,   (this is called Elastic net regularization)

Max norm regularization: 

Dropout:effective, 相当于对神经元的采样

7)从输出的training过程上观察 insights from figure

learning rate is sensitive,高的学习率可能造成不稳定,低的学习率可能loss降低很慢。一般都是,开始快,后来慢

要防止overfitting

时间: 2024-10-24 16:25:38

深度神经网络tricks and tips的相关文章

深度神经网络可视化工具集锦

深度神经网络可视化工具集锦 雷锋网按:原文作者zhwhong,载于作者的个人博客,雷锋网(公众号:雷锋网)经授权发布.  TensorBoard:TensorFlow集成可视化工具 GitHub官方项目:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tensorboard TensorBoard 涉及到的运算,通常是在训练庞大的深度神经网络中出现的复杂而又难以理解的运算. 为了更方便 TensorFlow 程序的理

从图像到知识:深度神经网络实现图像理解的原理解析

摘要:本文将详细解析深度神经网络识别图形图像的基本原理.针对卷积神经网络,本文将详细探讨网络中每一层在图像识别中的原理和作用,例如卷积层(convolutional layer),采样层(pooling layer),全连接层(hidden layer),输出层(softmax output layer).针对递归神经网络,本文将解释它在在序列数据上表现出的强大能力.针对通用的深度神经网络模型,本文也将详细探讨网络的前馈和学习过程.卷积神经网络和递归神经网络的结合形成的深度学习模型甚至可以自动生

深度学习实践系列(2)- 搭建notMNIST的深度神经网络

如果你希望系统性的了解神经网络,请参考零基础入门深度学习系列,下面我会粗略的介绍一下本文中实现神经网络需要了解的知识. 什么是深度神经网络? 神经网络包含三层:输入层(X).隐藏层和输出层:f(x) 每层之间每个节点都是完全连接的,其中包含权重(W).每层都存在一个偏移值(b). 每一层节点的计算方式如下: 其中g()代表激活函数,o()代表softmax输出函数. 使用Flow Graph的方式来表达如何正向推导神经网络,可以表达如下: x: 输入值 a(x):表示每个隐藏层的pre-acti

深度神经网络DNN的多GPU数据并行框架 及其在语音识别的应用

深度神经网络(Deep Neural Networks, 简称DNN)是近年来机器学习领域中的研究热点,产生了广泛的应用.DNN具有深层结构.数千万参数需要学习,导致训练非常耗时.GPU有强大的计算能力,适合于加速深度神经网络训练.DNN的单机多GPU数据并行框架是腾讯深度学习平台的一部分,腾讯深度学习平台技术团队实现了数据并行技术加速DNN训练,提供公用算法简化实验过程.对微信语音识别应用,在模型收敛速度和模型性能上都取得了有效提升--相比单GPU 4.6倍加速比,数十亿样本的训练数天收敛,测

深度神经网络在量化交易里的应用 之二 -- 用深度网络(LSTM)预测5日收盘价格

    距离上一篇文章,正好两个星期. 这边文章9月15日 16:30 开始写. 可能几个小时后就写完了.用一句粗俗的话说, "当你怀孕的时候,别人都知道你怀孕了, 但不知道你被日了多少回 " ,纪念这两周的熬夜,熬夜.  因为某些原因,文章发布的有点仓促,本来应该再整理实验和代码比较合适.文章都是两个主要作用: 对自己的工作总结, 方便自己回顾和分享给有兴趣的朋友. 不说废话了, 进入正题. 本次的课题很简单, 深度神经网络(AI)来预测5日和22日后的走势. (22日尚未整理, 不

"如何用70行Java代码实现深度神经网络算法" 的delphi版本

http://blog.csdn.net/hustjoyboy/article/details/50721535 "如何用70行Java代码实现深度神经网络算法" 的delphi版本 2016-02-23 10:58 225人阅读 评论(0) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载. =====ann.pas源程序=================================== { by 阿甘 2016.2.23 参考自此篇文档如何用70行Java代码实现

debugging Auto Layout:Debugging Tricks and Tips

Debugging Tricks and Tips调试技巧和技巧 The following topics describe techniques for gathering and organizing information about your layout, as well as descriptions of some surprising behaviors you may encounter. You may not need to use these techniques on

10 Interesting Linux Command Line Tricks and Tips Worth Knowing

I passionately enjoy working with commands as they offer more control over a Linux system than GUIs(Graphical User Interfaces) applications, therefore am always on the look out to discover or figure out interesting ways and ideas to make Linux so eas

深度神经网络识别图形图像的基本原理(转)

摘要:本文将详细解析深度神经网络识别图形图像的基本原理.针对卷积神经网络,本文将详细探讨网络中每一层在图像识别中的原理和作用,例如卷积层(convolutional layer),采样层(pooling layer),全连接层(hidden layer),输出层(softmax output layer).针对递归神经网络,本文将解释它在在序列数据上表现出的强大能力.针对通用的深度神经网络模型,本文也将详细探讨网络的前馈和学习过程.卷积神经网络和递归神经网络的结合形成的深度学习模型甚至可以自动生