2017-05-27 17:17:31 lx530467 阅读数 4947
  • 深度学习框架Tensorflow案例实战视频课程

    深度学习框架Tensorflow案例实战视频培训课程概况: Tensorflow是谷歌开源的深度学习(包括机器学习)框架,伴随着人工智能业的兴盛其大名早已响彻云霄。本课程从Tensorflow安装开始讲起,从基本计算结构到深度学习各大神经网络,全程案例代码实战,一步步带大家入门如何使用深度学习框架Tensorflow,玩转Tensorflow模型训练、等所有知识点。

    30512 人正在学习 去看看 唐宇迪


什么是深度学习

深度学习是机器学习中的一个分支,是当今AI领域最热门最前沿的研究内容。它考虑的是用non-linear multiple processing layers来学习数据的multiple levels features的抽象表征用反向传播BP算法对计算模型训练,通过supervisedweakly supervised的特征学习和分层特征提取代替手工获取特征。

深度学习的应用

深度学习由于其不需要人工提取特征,只需要大量labelled data进行训练,从而在image, video, speech, text, audio等领域大放异彩。应用包含定位、识别、匹配、语音转文本、电商中的商品推荐等。当然还有GoogleAlphaGo

深度学习的框架

现在深度学习的框架已经有很多,如深度神经网络DNN、卷积神经网络CNN、深度置信网络DBN、递归神经网络RNN和生成对抗网络GAN等。其中以CNNGAN受关注度最高,前者不但可以通过得到候选区域来实现定位,而且可以通过减少参数加快训练速度;后者则是可以通过输入label得到输出数据(如image),从某种意义上相当于其它常用深度学习框架的逆过程。

CNN

卷积神经网络(Convolutional Neural Network)是目前应用最广泛的深度学习框架,其经典网络模型包括LeNet, AlexNet [1], GoogleNet [2], VGG [3], ResNet [4]
下面的四张图就可以清楚的描述CNN的结构:(取自[5]
这里写图片描述

这里写图片描述
Convolution中,可以看到一个batchNfeature maps输入,每张feature mapssize是宽为W、高为H、通道数为C。对于每一个batch的数据,使用的都是相同的共MC通道的卷积核filtersfilter sizeR x S。将每一组对应通道的filterfeature map卷积并相加得到E x F的一个通道的输出feature mapMfilters就可以得到一个M通道的feature mapsN张输入就可以得到NM通道的输出。卷积细节还有边缘补零padding, 步长stride等
这里写图片描述

这里写图片描述
BP算法需要与最优化optimize算法结合使用才能根据error对网络中的parameters进行update,目前效果比较好的最优化算法有Adagrad [6], AdagradDA [6] , Adadelta [7]Adam [8]


[1]: Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[C]. Advances in neural information processing systems. 2012: 1097-1105.
[2]: Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[C]. Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2015: 1-9.
[3]: Simonyan K, Zisserman A. Very deep convolutional networks for large-scale image recognition[J]. arXiv preprint arXiv:1409.1556, 2014.
[4]: He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]. Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016: 770-778.
[5]: Sze V, Chen Y H, Yang T J, et al. Efficient processing of deep neural networks: A tutorial and survey[J]. arXiv preprint arXiv:1703.09039, 2017.
[6]: Duchi J, Hazan E, Singer Y. Adaptive subgradient methods for online learning and stochastic optimization[J]. Journal of Machine Learning Research, 2011, 12(Jul): 2121-2159.
[7]: Zeiler M D. ADADELTA: an adaptive learning rate method[J]. arXiv preprint arXiv:1212.5701, 2012.
[8]: Kingma D, Ba J. Adam: A method for stochastic optimization[J]. arXiv preprint arXiv:1412.6980, 2014.

2019-04-07 10:36:43 qq_42025376 阅读数 149
  • 深度学习框架Tensorflow案例实战视频课程

    深度学习框架Tensorflow案例实战视频培训课程概况: Tensorflow是谷歌开源的深度学习(包括机器学习)框架,伴随着人工智能业的兴盛其大名早已响彻云霄。本课程从Tensorflow安装开始讲起,从基本计算结构到深度学习各大神经网络,全程案例代码实战,一步步带大家入门如何使用深度学习框架Tensorflow,玩转Tensorflow模型训练、等所有知识点。

    30512 人正在学习 去看看 唐宇迪

此篇仅为本人记录,以便后续查看,如有错误,请大神指正。

1、何时收敛
看accuracy和loss曲线,最后平了,就是收敛了;
若不收敛,降不下去,升高也不大,振荡,也可以认为收敛了;
收敛了,可以降低学习率。

2019-02-18 14:41:55 LLyj_ 阅读数 848
  • 深度学习框架Tensorflow案例实战视频课程

    深度学习框架Tensorflow案例实战视频培训课程概况: Tensorflow是谷歌开源的深度学习(包括机器学习)框架,伴随着人工智能业的兴盛其大名早已响彻云霄。本课程从Tensorflow安装开始讲起,从基本计算结构到深度学习各大神经网络,全程案例代码实战,一步步带大家入门如何使用深度学习框架Tensorflow,玩转Tensorflow模型训练、等所有知识点。

    30512 人正在学习 去看看 唐宇迪

深度学习——训练时碰到的超参数

一、前言​

在训练深度神经网络时,会碰到一些超参数,通过观察在训练过程中的监测指标如损失loss和准确率来判断当前模型处于什么样的训练状态,及时调整超参数以更科学地训练模型能够提高资源利用率。

总而言之,这里对深度学习中比较重要的或者常见的超参数做一个整理,我们可以根据实际情况修改超参数已达到最好的训练效果。

二、一些常见的超参数

  1. 学习率(Learning rate)

    学习率是控制模型的学习进度。从梯度下降算法的角度来说,通过选择合适的学习率,可以使梯度下降法得到更好的性能。学习率,即参数到达最优值过程的速度快慢。

    举个栗子:

    假如你从山峰的最高点根据梯度下降法寻找最优值,当你学习率过大,即下降的快,步子大,那么你很可能会在某一步跨过最优值;当你学习率过小时,每次下降一厘米,这将走到何年何月呀,用术语来说就是,长时间无法收敛。因此,学习率直接决定着学习算法的性能表现。

    学习率的设置:

    学习率 大 学习率 小
    学习速度
    使用时间点 刚开始训练时 一定轮数过后
    副作用 1.易损失值爆炸;2.易振荡。 1.易过拟合;2.收敛速度慢。

    在训练过程中,一般根据训练轮数设置动态变化的学习率。

    • 刚开始训练时:学习率以 0.01 ~ 0.001 为宜。
    • 一定轮数过后:逐渐减缓。
    • 接近训练结束:学习速率的衰减应该在100倍以上。

    理想情况下曲线应该是滑梯式下降 [红线]

    1. 曲线 初始时上扬 [黄线]
      Solution:初始学习率过大导致振荡,应减小学习率,并从头开始训练 。
    2. 曲线初始时强势下降没多久归水平 [绿线]
      Solution:后期学习率过大导致无法拟合,应减小学习率,并重新训练后几轮 。
    3. 曲线全程缓慢 [蓝线]
      Solution:初始学习率过小 导致 收敛慢,应增大学习率,并从头 开始训练 。
  2. 迭代次数(iteration)

    迭代是重复反馈的动作,神经网络中我们希望通过迭代进行多次的训练以达到所需的目标或结果。每一次迭代得到的结果都会被作为下一次迭代的初始值。 一次迭代=一个正向传播+一个反向传播。每一次迭代得到的结果都会被作为下一次迭代的初始值。 我们可以查看loss曲线,来判断迭代次数够不够,如果loss从曲线上看已经收敛了,那么说明训练差不多了,再增加迭代也没什么用了,如果迭代结束了,但loss曲线并没有收敛的趋势,那么说明迭代设置的太小了。

  3. batchsize

    批大小。在深度学习中,一般采用随机梯度下降法(SGD)训练,即每次训练在训练集中取batchsize个样本训练(不是一次就把所有数据集扔进去训练,每次只取batchsize)。相对于正常数据集,如果batchsize过小,训练数据就会非常难收敛,从而导致欠拟合;增大batchsize,相对处理速度加快,所需内存容量也会增加。因此我们需要寻找最好的batchsize。再次重申:batchsize的正确选择是为了在内存效率和内存容量之间寻找最佳平衡,batchsize过大可能会导致内存不够用或程序内核崩溃。1次iteration等于使用batchsize个样本训练一次;batchsize通常取值为[16,32,64,128,256], 网络较小时选用256,较大时选用64。

  4. epoch

    通俗的讲epoch的值就是整个数据集被轮了几次。一个epoch=所有训练样本的一个正向传播和一个反向传播,也就是等于使用训练集中的全部样本训练一次。在神经网络中传递完整的数据集一次是不够的,所以我们需要将完整的数据集在同样的神经网络中传递多次。

三、例子

假设训练集有1000个样本,batchsize=10,那么训练完整个样本集需要:100次iteration,1次epoch。

名词 定义
epoch 使用训练集的全部数据对模型进行一次完整的训练,被称之为"一代训练"
batch 每次训练使用数据集的一小部分(batchsize)对模型进行一次的训练,被称之为"一批训练"
iteration s使用一个batchsize大小的数据对模型进行一次参数更新的过程,被称之为"一次训练"

四、References

2018-02-02 19:02:31 Quincuntial 阅读数 4836
  • 深度学习框架Tensorflow案例实战视频课程

    深度学习框架Tensorflow案例实战视频培训课程概况: Tensorflow是谷歌开源的深度学习(包括机器学习)框架,伴随着人工智能业的兴盛其大名早已响彻云霄。本课程从Tensorflow安装开始讲起,从基本计算结构到深度学习各大神经网络,全程案例代码实战,一步步带大家入门如何使用深度学习框架Tensorflow,玩转Tensorflow模型训练、等所有知识点。

    30512 人正在学习 去看看 唐宇迪

文章作者:Tyan
博客:noahsnail.com  |  CSDN  |  简书

工作中训练了很多的深度学习模型,目前到了上升到方法论的角度来看了。日常工作中有的人可能已经在遵循方法论做事,可能自己没有注意,有的人可能没有遵循方法论在做事,虽然可能最后的结果差不多,但花费的时间和精力应该会差别很大,当然这是我自己的感受。我们不必完全按照方法论来做,但基本流程跟方法论应该一致。

下面的具体步骤以图像分类,识别图像中的猫为例。

1. 问题定义

问题定义,“what,how,why”中的what,首先要弄清楚自己要干什么,然后调研相关的技术,确定解决方案。例如这一步中我的工作是进行图像分类,问题定义是图像分类——识别猫,相关的技术包括各种分类模型,各种深度学习框架。我选择的是BN-Inception + Caffe。

2. 确定评估标准

根据问题定义,确定了相关技术之后,不要着急动手去做,先确定评估标准,怎么评价模型的好坏,例如分类猫可以通过准确率(Precision)、召回率(Recall)、F1、ROC曲线、AUC面积等。确定了评估标准之后,评估数据集也要准备好。

3. 确定Baseline和Target

  • Baseline

有了评估标准后,需要确定一个Baseline,例如可以简单快速的训练一个模型或已经有一个Pretrained Model,在评估数据集上进行评估,得到一个指标作为Baseline,然后在Baseline的基础上进行提高,确定Baseline类似于敏捷开发中的快速原型开发。

  • Target

有了Baseline之后,可以确定一个目标,但这个目标不能是拍脑袋出来的,如果你的业务与别人的业务类似,例如色情识别,可以使用大厂(BAT)的模型先在评估数据集上得出一个结果,目标定为达到他们的水平或超过他们的水平。如果不跟别人的业务类似,那么需要根据具体的业务需求确定一个目标。目标还是要有的,起码确定一个方向。

4. 模型训练

模型训练这部分就没太多说的了,深度学习工程师的基本功。

5. 模型评估

将训练的模型在评估数据集上进行评估,分析评估结果,与上一次的模型结果以及Target进行对比。将错误的数据取出来,分析存在的问题,讨论调整的方向,记录实验结果。

6. 模型再训练

重复步骤4、5,直至达到目标。如果模型还不错,可以将模型放到Beta环境测试,分析线上的结果,重复步骤4、5。

7. 服务部署

如果模型在Beta环境也不错,则可以进行线上测试,继续重复步骤4、5,因为有的模型需要不断的进行迭代更新。

参考资料

https://towardsdatascience.com/machine-learning-in-practice-what-are-the-steps-a4b15ee18546

2016-11-20 11:27:29 fangqingan_java 阅读数 8093
  • 深度学习框架Tensorflow案例实战视频课程

    深度学习框架Tensorflow案例实战视频培训课程概况: Tensorflow是谷歌开源的深度学习(包括机器学习)框架,伴随着人工智能业的兴盛其大名早已响彻云霄。本课程从Tensorflow安装开始讲起,从基本计算结构到深度学习各大神经网络,全程案例代码实战,一步步带大家入门如何使用深度学习框架Tensorflow,玩转Tensorflow模型训练、等所有知识点。

    30512 人正在学习 去看看 唐宇迪

概述

机器学习应用包括模型构建、求解和评估,对于深度模型而言也是类似,根据之前的介绍可以构建自己的深度神经网络结构。相对于一般的优化问题,深度模型更难优化,本节主要介绍深度学习模型优化挑战、优化算法以及优化策略等。

  1. 深度学习模型优化挑战
  2. 深度学习优化算法
  3. 深度学习中的特殊策略

另外,关于更多数值优化技术可以参考。数值优化技术

深度学习优化挑战

机器学习优化问题

深度学习模型是机器学习模型中一类一种,而一般机器学习优化问题相对于纯优化问题,主要有以下不同:

经验风险最小化

机器学习中优化的终极目标是模型参数能够拟合全部数据,即

min  J(θ)=E(x,y) p(data)L(f(x;θ),y)
然而在大多数情况下,无法获取全部的训练数据或者不知道样本x的分布,因此

机器学习优化问题转化为优化问题采用最简单的思路就是,让模型去更好拟合训练数据。

min  J(θ)=E(x,y) p˜(data)L(f(x;θ),y)
该过程也称之为 经验风险最小化。

替代损失函数

有时为了更好的进行模型优化,常常不直接对损失建模,而是采用更容易优化的目标函数进行替代,例如对于0-1损失问题,不是直接采用最小化0-1损失,而是采用sigmoid函数。

minibatch优化算法

minibatch算法是指在优化J(θ)的过程中,每次随机选择m个训练样本进行优化,直到达到最优。
该方法在机器学习模型优化中常常被采用,主要原因有:

  1. 采用批量或者全量样本进行优化,能够得到准确的梯度,但不是线性关系。例如每次训练时喂入10000个样本和每次100个样本,虽然有100倍关系,但是准确度只能提升大概10倍左右。
  2. 采用minibatch方法可以更方便并行,处理更大的样本集合。
  3. 能够起到正则化的左右

另外需要注意的是:minibatch算法最好要求每次喂入算法的样本都是随机选择的。

深度学习模型的挑战

病态条件数

Ill-Conditioning 主要指训练过程中,目标函数值发生抖动,而不是一直下降。通过将目标函数进行二次泰勒展开可以看到学习率对梯度的影响,即每次梯度更新受以下因素影响

12ϵ2gTHgϵgTg

虽然可以通过牛顿法进行避免,但是对于深度学习模型而言牛顿方法实施起来比较复杂。

局部最小值

对于非凸优化问题,使用梯度类方法进行优化时常常会导致目标函数常常陷入局部最优解,此时该点的梯度为0,模型参数无法进行自我修正。

鞍点

相对于局部最优问题,鞍点问题在高维优化问题中经常遇到的。鞍点的Hession矩阵既有正的特征值也有负的特征值,此时目标函数值既有可能是最大或者最小值。

梯度爆炸

梯度爆炸是指在某一时刻梯度非常大,可能会导致模型参数变化非常大,好像一个悬崖变化非常剧烈。
这里写图片描述

  1. 该情形在RNN中会经常遇到,特别是设计多个因子相乘的情形。
  2. 可以通过启发式策略避免,梯度裁剪策略(Gradient Clipping),是指遇到该情况时,常常忽略最优步长,在最优方向极小的区域内搜索结果。

Long-Term依赖问题

长依赖问题常常会因为多次模型参数相乘,从而导致梯度爆炸或者弥散。

梯度不精确

有些优化目标梯度不存在或者计算复杂度非常高,很多近似梯度计算策略采用,从而导致梯度计算不精确,影响优化精度。

常常通过替代优化目标避免。

深度学习优化算法

基本算法

SGD

随机梯度下降法或者在线优化算法,是优化深度学习模型最常用的技术,伪代码如下:
这里写图片描述

  1. 算法思路非常简单,每次选取m个样本进行计算梯度,进行模型参数优化。
  2. 算法中ϵ是学习率参数,在实际应用中,学习率更新常常采用如下公式ϵk=(1α)ϵ0+αϵτα=kτ,即每一轮循环中学习率都衰减,直到第τ轮,通常ϵτ=1%ϵ0
  3. 通常采用过度误差(Excess error)度量算法收敛速度,J(θ)minJ(θ),即当前步骤离最优解的距离,SGD的收敛速率为O(1k)

Momentum 算法

Momentum 算法在一定情形下能够有效加速学习过程,例如高曲率梯度、一致小的梯度或者带有噪声的梯度,即梯度变化有一定随机的情况。

Momentum算法的主要思路是搜索方向保持一定惯性,累加上之前所有梯度的加权值,模型参数迭代步骤为

v=αvϵ1mL(f(x;θ),y)θ=θ+v

这里写图片描述

  1. α是一个超参数,实际中常常选择为0.5 0.9 0.99
  2. 相比于SGD算法,效果如下,能够一定程度下约束模型参数变化,减少目标值变化范围。这里写图片描述
  3. Momentum算法是如何加速呢?假设每次参数都是沿着梯度-g进行更新,则vk=(αk+αk1+...+α1)ϵg,ϵg1α,如果超参数选择为0.9则相当于加速10倍。

Nesterov Momentum

相比于标准Momentum算法,他的主要改变在于梯度何时被估计,Nesterov在模型参数v在应用之后在更新模型。公式如下

v=αvϵ1mL(f(x;θ+αv),y)θ=θ+v

参数初始化策略

深度学习模型优化中,模型初始值对结果影响很大,很多情况下需要小心处理。

另外参数初始化还有另外一个重要作用就是避免对称性。

常选择的模型初始方法有:
对于m个输入n个输出的网络结构:U(1m,1m)U(6m+n,6m+n)

自适应学习率优化算法

自适应学习率顾名思义:每次迭代,每个模型参数都自适应的改变学习率,而不是所有模型参数都同步修改。

AdaGrad

模型参数的学习率同比例于历史所有梯度的平方和的开方,即更新公式为ϵi=kgigi,则优化算法为:
这里写图片描述

AdaGrad 很多情况下表现较好,并且可以用于其他机器学习算法。

RMSProp

RMSProp算法相比于AdaGrad优势在于处理非凸优化问题,梯度采用指数式方式累加,好处在于更快的遗忘历史梯度影响。更新公式

r=ρr+(1ρ)gg

这里写图片描述

RMSProp对超参数的噪声也能保持较好的鲁棒性。

优化算法选择

对于大多数问题,采用如下方法即能达到较好的效果,SGD SGD+Momentum、RMSProp、RMSProp+Momentum

高级算法

基础算法主要考虑一阶梯度的影响,对于高级更优的算法会考虑二阶梯度对于目标函数的影响。
常见的算法包括:牛顿法、共轭梯度方法、(L)BFGS等,其主要推导可以参考推荐阅读材料

深度学习优化策略

批量正则化

深度学习模型由于涉及有多个隐藏层,由于梯度爆炸或者弥散问题导致优化难度非常大。另外由于参数量纲不一致,有的特征变化范围比较小,有的特征变化范围比较大,各个维度参数优化效率不一致。
Batch Normalization提供一个优雅的方式对参数重组织,有效解决上述问题。

该思路可以应用于输入或者任何中间层,更新思路如下,H表示输入矩阵,每一行都是一个输入或者隐藏特征。

H=Hμσμ=Hiσ=δ+1m(Hiμ)2

通过上述公式对输入进行归一化操作,从而使得参数更新都在统一量纲上。

在测试阶段μ,σ可以取训练阶段的均值。

其他策略

还有一些相对比较常用的方法包括
1. 坐标下降方法
2. Polyak Averaging
3. 预训练
4. 模型设计:一个方便优化的模型比使用更大强大的优化算法要好
5. 一些连续方法

总结

通过该小结的学习,可以了解深度学习模型优化的难点,以及常用的优化算法,包括基础算法SGD、Momentum和一些自适应学习算法。另外一些优化策略,特别是Batch Normatization思路。

另外:天下没有免费的午餐,任何强大表达能力更强的算法,都需要小心的进行参数优化;此时不如选择一个更容易优化的模型。这正是奥卡姆剃刀定律的精髓所在。

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