深度学习模型训练技巧 Tips for Deep Learning
一、深度学习建模与调试流程
先看训练集上的结果怎么样(有些机器学习模型没必要这么做,比如决策树、KNN、Adaboost 啥的,理论上在训练集上一定能做到完全正确,没啥好检查的)
Deep Learning 里面过拟合并不是首要的问题,或者说想要把神经网络训练得好,至少先在训练集上结果非常好,再考虑那些改善过拟合的技术(BN,Dropout 之类的)。否则的话回去检查三个 step 哪里有问题。

Deep Learning 中的方法为了解决两个主要问题而提出:1.训练集做得不好;2.训练集做得好,测试集做得不好
实际应用的时候搞清楚自己面对的问题,选择对应的技巧。
二、激活函数
1. sigmoid
梯度消失:网络很深的时候,靠近输入的 hidden layers 的梯度对损失函数影响很小, 参数更新的就很慢;靠近输出的情况反之。前面几层的参数都还没怎么更新的时候就收敛了。
原因也比较简单,反向传播的时候每经过一层,都会乘上小于 1 的数(sigmoid 函数 会把输入压到 0~1 之间),结果就越来越衰减。
早期用 RBM ,先训练好前面几层。
2. ReLU

3. maxout network
每个神经元的激活函数的具体形式,是可以学习来的(不一定非得像 ReLU 那样在原点分段):

哪些神经元要被 group 起来是事先决定的(比如随机2个或者3个一组之类的,几个一组也可以作为一个参数来学习)。

ReLU 就是特殊情况下的 maxout ;但 maxout 可以实现更多可能的激活函数(具体是什么样的函数,根本上是由参数 w 决定的)。
三、梯度下降的改进
1. Adagrad
在梯度下降中已经总结过,在不同方向上需要不同的学习率。
学习率时间衰减 + 从开始到当前时刻的梯度平方和求平均来估计二阶微分的大小趋势

2. RMSProp
error surface 非常复杂,即使在同一个方向上,学习率也需要不断调整。进阶版 Adagrad,动态调整学习率。

在 decaying 累计的先前梯度,通过调整alpha的大小,来选择是考虑先前的梯度(t 时刻之前的累积)多一些,还是当前的梯度(t时刻的)多一些
3. Momentum
解决一点 local minima 和 plateau 的问题

4. Adam
RMSProp + Momentum,利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。

其中,在迭代初始阶段,mt 和 vt 有一个向初值的偏移(过多的偏向了 0),因此可以对一阶和二阶动量做偏置校正 (bias correction),这样每次迭代学习率都有一个确定的范围,参数更新比较平稳。
四、正则化
1. Early Stopping
机器学习中比较常见的技巧

2. Dropout
神经网络中才会用
随机 kill 掉一定比例的神经元。测试的时候不做,而且还要补偿参数。

深度学习模型训练技巧 Tips for Deep Learning的更多相关文章
- 深度学习模型调优方法(Deep Learning学习记录)
深度学习模型的调优,首先需要对各方面进行评估,主要包括定义函数.模型在训练集和测试集拟合效果.交叉验证.激活函数和优化算法的选择等. 那如何对我们自己的模型进行判断呢?——通过模型训练跑代码,我们可以 ...
- AI佳作解读系列(一)——深度学习模型训练痛点及解决方法
1 模型训练基本步骤 进入了AI领域,学习了手写字识别等几个demo后,就会发现深度学习模型训练是十分关键和有挑战性的.选定了网络结构后,深度学习训练过程基本大同小异,一般分为如下几个步骤 定义算法公 ...
- 深度学习与计算机视觉(11)_基于deep learning的快速图像检索系统
深度学习与计算机视觉(11)_基于deep learning的快速图像检索系统 作者:寒小阳 时间:2016年3月. 出处:http://blog.csdn.net/han_xiaoyang/arti ...
- TensorFlow和深度学习入门教程(TensorFlow and deep learning without a PhD)【转】
本文转载自:https://blog.csdn.net/xummgg/article/details/69214366 前言 上月导师在组会上交我们用tensorflow写深度学习和卷积神经网络,并把 ...
- TensorFlow和深度学习新手教程(TensorFlow and deep learning without a PhD)
前言 上月导师在组会上交我们用tensorflow写深度学习和卷积神经网络.并把其PPT的參考学习资料给了我们, 这是codelabs上的教程:<TensorFlow and deep lear ...
- 深度学习FPGA实现基础知识10(Deep Learning(深度学习)卷积神经网络(Convolutional Neural Network,CNN))
需求说明:深度学习FPGA实现知识储备 来自:http://blog.csdn.net/stdcoutzyx/article/details/41596663 说明:图文并茂,言简意赅. 自今年七月份 ...
- 用 Java 训练深度学习模型,原来可以这么简单!
本文适合有 Java 基础的人群 作者:DJL-Keerthan&Lanking HelloGitHub 推出的<讲解开源项目> 系列.这一期是由亚马逊工程师:Keerthan V ...
- 利用 TFLearn 快速搭建经典深度学习模型
利用 TFLearn 快速搭建经典深度学习模型 使用 TensorFlow 一个最大的好处是可以用各种运算符(Ops)灵活构建计算图,同时可以支持自定义运算符(见本公众号早期文章<Tenso ...
- 在NLP中深度学习模型何时需要树形结构?
在NLP中深度学习模型何时需要树形结构? 前段时间阅读了Jiwei Li等人[1]在EMNLP2015上发表的论文<When Are Tree Structures Necessary for ...
随机推荐
- 玲珑OJ 1082:XJT Loves Boggle(爆搜)
http://www.ifrog.cc/acm/problem/1082 题意:给出的单词要在3*3矩阵里面相邻连续(相邻包括对角),如果不行就输出0,如果可行就输出对应长度的分数. 思路:爆搜,但是 ...
- java打印1000内的质数并用表格输出
<table width='500' border='1'><% int c=1; for(int i=2;i<=1000;i++){ int n=0; for(int j=2 ...
- scrapy基础知识之 Logging:
修改配置文件settings.py,任意位置添加 LOG_FILE = "XxSpider.log" LOG_LEVEL = "INFO" Log levels ...
- [深度学习]TensorFlow安装
virtualenv 可以用来建立一个专属于项目的python环境,保持一个干净的环境.只需要通过命令创建一个虚拟环境,不用的时候通过命令退出,删除.实践证明用虚拟环境能避免很多糟心的事. 下面介绍一 ...
- 17.Linux命令
1.网络配置 setup 配置 ifup eth0 启动网卡 文件保存在 /etc/sysconfig/network-scripts/ifcfg-eth0,修改ifcfg-eth0配 ...
- Java底层技术系列文章-总揽
对于工作中经常用到的东西,还是多看看实现原理,这样用着才能放心. 源码思想学习计划: 1.java基础库 HashCode深入理解 java线程框架窥探 2.集合类 java枚举类使用 递归 ...
- Leetcode多线程题库练习(新功能尝鲜)& 个人感悟
大家好, 我是方子龙.很久没有自己写文章了. 一面是因为工作上的需求开发任务比较重,下班回家基本上就躺床玩几把王者,度过闲暇时光. 二面是一有点时间就自己主动地去看书和学习,知道自己还缺少很多知识,由 ...
- centos7 linux下增加swap虚拟内存分区大小
此方法不限于centos,linux均适用 最近在服务器上部署了一个java项目,java进程经常性莫名被自动Kill,首先java程序是没有报错的,那么我想可能是内存不足的原因,因为4G内存的服务上 ...
- HashMap源码__tableSizeFor方法解析
tableSizeFor(int cap)方法返回不小于指定参数cap的最小2的整数次幂,具体是怎么实现的呢?看源码! /** * Returns a power of two size for th ...
- Java EE.JavaBean
JavaBean是一组可移植.可重用.并可以组装到应用程序中的Java类.一个Model类(属性+构造函数).