精华内容
参与话题
问答
  • )柳猫一直没有更新自己的手记,现在,就让柳猫来讲讲十个常用的深度学习算法。 过去十年里,人们对机器学习的兴趣经历了爆炸式的整长。我们几乎每天都可以在计算机程序、行业会议和媒体上看到机器学习的身影。很多...

    十分抱歉,由于项目太忙(我会说自己懒吗?)柳猫一直没有更新自己的手记,现在,就让柳猫来讲讲十个常用的深度学习算法。

            过去十年里,人们对机器学习的兴趣经历了爆炸式的整长。我们几乎每天都可以在计算机程序、行业会议和媒体上看到机器学习的身影。很多关于机器学习的讨论都混淆了“机器学习能做什么”和“人类希望机器学习能做什么”。从根本上讲,机器学习是运用算法从原始数据中提取信息,并用某种类型的模型进行表示,然后使用该模型对一些尚未用模型表示的其他数据来进行推断。

            神经网络就是机器学习各类模型中的其中一类,并且已经存在了至少50年。神经网络的基本单位是节点,它的想法大致来源于哺乳动物大脑中的生物神经元。生物大脑中的神经元节点之间的链接是随着时间推移不断演化的,而神经网络中的神经元节点链接也借鉴了这一点,会不断演化(通过“训练”的方式)。

            神经网络中很多重要框架的建立和改进都完成于二十世纪八十年代中期和九十年代初期。然而,要想获得较好结果需要大量的时间和数据,由于当时计算机的能力有限,神经网络的发展受到了一定的阻碍,人们的关注度也随之下降。二十一世纪初期,计算机的运算能力呈指数级增长,业界也见证了计算机技术发展的“寒武纪爆炸”——这在之前都是无法想象的。深度学习以一个竞争者的姿态出现,在计算能力爆炸式增长的十年里脱颖而出,并且赢得了许多重要的机器学习竞赛。其热度在2017年仍然不减。如今,在机器学习的出现的地方我们都能看到深度学习的身影。

            这是柳猫自己做的一个小例子,词向量的 t-SNE 投影,通过相似性进行聚类。

    https://img4.mukewang.com/5c06355e0001943706900664.jpg

            最近,我开始阅读关于深度学习的学术论文。根据我的个人研究,以下文章对这个领域的发展产生了巨大的影响:

    • 1998年NYU的文章《基于梯度学习的文档识别》(Gradient-Based Learning Applied to Document Recognition) 介绍了卷积神经网络在机器学习中的应用。

    • Toronto 2009年的文章《深度波兹曼机器》(Deep Boltzmann Machines) 针对波兹曼机提出了一种新的学习算法,其中包含许多隐藏层。

    • Stanford 和 Google 2012年联合发表的文章《使用大规模非监督学习构建高层特征》(Building High-Level Features Using Large-Scale Unsupervised Learning) 解决了仅利用未标记的数据构建高级、特定类的特征检测器的问题。

    • Berkeley 2013年的文章《用于一般视觉识别的深层卷积激活特征》(DeCAF——A Deep Convolutional Activation Feature for Generic Visual Recognition) 发布了名为 DeCAF 的算法,这是深度卷积激活特征的一个开源实现,使用相关的网络参数,视觉研究人员能够利用一系列视觉概念学习范例进行深入实验。

    • DeepMind 2016年的文章《用深度强化学习玩Atari》(Playing Atari with Deep Reinforcement Learning) 提出了第一个可以成功地通过强化学习从高维感官输入中直接学习控制策略的深度学习模型。

            柳猫整理了人工智能工程师 10 个用于解决机器学习问题的强大的深度学习方法。但是,我们首先需要定义什么是深度学习。

            如何定义深度学习是很多人面临的一个挑战,因为它的形式在过去的十年中已经慢慢地发生了改变。下图直观地展示了人工智能,机器学习和深度学习之间的关系。

    https://img3.mukewang.com/5c0635b3000135f406900699.jpg

            人工智能领域广泛,存在时间较长。深度学习是机器学习领域的一个子集,而机器学习是人工智能领域的一个子集。一般将深度学习网络与“典型”前馈多层网络从如下方面进行区分:

    • 深度学习网络具有比前馈网络更多的神经元

    • 深度学习网络连接层之间的方式更复杂

    • 深度学习网络需要有像“寒武纪大爆发”式的计算能力进行训练

    • 深度学习网络能够自动提取特征

            上文提到的“更多的神经元”是指近年来神经元的数量不断增加,就可以用更复杂的模型来表示。层也从多层网络中每一层完全连接,发展到卷积神经网络中神经元片段的局部连接,以及与递归神经网络中的同一神经元的循环连接(与前一层的连接除外)。

            因此,深度学习可以被定义为以下四个基本网络框架中具有大量参数和层数的神经网络:

    • 无监督预训练网络

    • 卷积神经网络

    • 循环神经网络

    • 递归神经网络

            在这篇文章中,我主要讨论三个框架:

    • 卷积神经网络(Convolutional Neural Network)基本上就是用共享权重在空间中进行扩展的标准神经网络。卷积神经网络主要是通过内部卷积来识别图片,内部卷积可以看到图像上识别对象的边缘。

    • 循环神经网络(Recurrent Neural Network)基本上就是在时间上进行扩展的标准神经网络,它提取进入下一时间步的边沿,而不是在同一时间进入下一层。循环神经网络主要是为了识别序列,例如语音信号或者文本。其内部的循环意味着网络中存在短期记忆。

    • 递归神经网络(Recursive Neural Network)更类似于分层网络,其中输入序列没有真正的时间面,但是必须以树状方式分层处理。以下10种方法均可应用于这些框架。

    1、反向传播

            反向传播是一种计算函数偏导数(或梯度)的简单方法,它的形式是函数组合(如神经网络)。在使用基于梯度的方法求解最优化问题(梯度下降只是其中之一)时,需要在每次迭代中计算函数梯度。

    https://img3.mukewang.com/5c0635da00011eee06000460.jpg

            对于一个神经网络,其目标函数是组合形式。那么应该如何计算梯度呢?有2种常规方法:

    • (1)微分解析法。函数形式已知的情况下,只需要用链式法则(基础微积分)计算导数。

    • (2)有限差分法近似微分。这种方法运算量很大,因为函数评估的数量级是 O(N),其中 N 是参数的个数。与微分解析法相比,这种方法运算量更大,但是在调试时,通常会使用有限差分验证反向传播的效果。

    2、随机梯度下降

            梯度下降的一个直观理解就是想象一条源自山顶的河流。这条河流会沿着山势的方向流向山麓的最低点,而这也正是梯度下降法的目标。

            我们所期望的最理想的情况就是河流在到达最终目的地(最低点)之前不会停下。在机器学习中,这等价于我们已经找到了从初始点(山顶)开始行走的全局最小值(或最优值)。然而,可能由于地形原因,河流的路径中会出现很多坑洼,而这会使得河流停滞不前。在机器学习术语中,这种坑洼称为局部最优解,而这不是我们想要的结果。有很多方法可以解决局部最优问题。

    https://img2.mukewang.com/5c06362a00014d8706900512.jpg

            因此,由于地形(即函数性质)的限制,梯度下降算法很容易卡在局部最小值。但是,如果能够找到一个特殊的山地形状(比如碗状,术语称作凸函数),那么算法总是能够找到最优点。在进行最优化时,遇到这些特殊的地形(凸函数)自然是最好的。另外,山顶初始位置(即函数的初始值)不同,最终到达山底的路径也完全不同。同样,不同的流速(即梯度下降算法的学习速率或步长)也会导致到达目的地的方式有差异。是否会陷入或避开一个坑洼(局部最小值),都会受到这两个因素的影响。

    3、学习率衰减

            调整随机梯度下降优化算法的学习速率可以提升性能并减少训练时间。这被称作学习率退火或自适应学习率。训练中最简单也最常用的学习率自适应方法就是逐渐降低学习率。在训练初期使用较大的学习率,可以对学习率进行大幅调整;在训练后期,降低学习率,以一个较小的速率更新权重。这种方法在早期可以快速学习获得较好的权重,并在后期对权重进行微调。 

    https://img1.mukewang.com/5c0636580001f7f106000337.jpg

            两个流行而简单的学习率衰减方法如下: 

    • 线性地逐步降低学习率 

    • 在特定时点大幅降低学习率

    4、Dropout

            拥有大量参数的深度神经网络是非常强大的机器学习系统。然而,在这样的网络中,过拟合是一个很严重的问题。而且大型网络的运行速度很慢,这就使得在测试阶段通过结合多个不同的大型神经网络的预测来解决过拟合问题是很困难的。Dropout 方法可以解决这个问题。

    https://img3.mukewang.com/5c0636700001b21806140328.jpg

            其主要思想是,在训练过程中随机地从神经网络中删除单元(以及相应的连接),这样可以防止单元间的过度适应。训练过程中,在指数级不同“稀疏度”的网络中剔除样本。在测试阶段,很容易通过使用具有较小权重的单解开网络(single untwined network),将这些稀疏网络的预测结果求平均来进行近似。这能有效地避免过拟合,并且相对于其他正则化方法能得到更大的性能提升。Dropout 技术已经被证明在计算机视觉、语音识别、文本分类和计算生物学等领域的有监督学习任务中能提升神经网络的性能,并在多个基准数据集中达到最优秀的效果。

    5、最大池

            最大池是一种基于样本的离散化方法。目标是对输入表征(图像、隐藏层输出矩阵等)进行下采样,降低维度并且允许对子区域中的特征进行假设。

    https://img2.mukewang.com/5c0636870001512e05140406.jpg

            通过提供表征的抽象形式,这种方法可以在某种程度上解决过拟合问题。同样,它也通过减少学习参数的数目以及提供基本的内部表征转换不变性来减少计算量。最大池是通过将最大过滤器应用于通常不重叠的初始表征子区域来完成的。

    6、批量标准化

            当然,包括深度网络在内的神经网络需要仔细调整权重初始值和学习参数。批量标准化能够使这个过程更加简单。 

            权重问题: 

    • 无论怎么设置权重初始值,比如随机或按经验选择,初始权重和学习后的权重差别都很大。考虑一小批权重,在最初时,对于所需的特征激活可能会有很多异常值。

    •  深度神经网络本身就具有病态性,即初始层的微小变化就会导致后一层的巨大变化。

            在反向传播过程中,这些现象会导致梯度的偏移,这就意味着在学习权重以产生所需要的输出之前,梯度必须补偿异常值。而这将导致需要额外的时间才能收敛。

    https://img1.mukewang.com/5c06371e0001d81f06900497.jpg

            批量标准化将这些梯度从异常值调整为正常值,并在小批量范围内(通过标准化)使其向共同的目标收敛。 

            学习率问题:

    • 通常来说,学习率都比较小,这样只有一小部分的梯度用来校正权重,因为异常激活的梯度不应该影响已经学习好的权重。

    • 通过批量标准化,这些异常激活的可能性会被降低,就可以使用更大的学习率加速学习过程。电动叉车轮胎

    7、长短期记忆

            长短期记忆网络(LSTM)和其他递归神经网络中的神经元有以下三个不同点:

    • 它可以决定何时让输入进入神经元

    • 它可以决定何时记住上一个时间步中计算的内容

    • 它可以决定何时让输出传递到下一个时间戳 LSTM的强大之处在于它可以只基于当前的输入就决定上述所有。请看下方的图表:

    https://img3.mukewang.com/5c0637380001003806900394.jpg

            当前时间戳的输入信号 x(t) 决定了上述三点。

    • 输入门(input gate)决定了第一点,

    • 遗忘门(forget gate)决定了第二点,

    • 输出门(output gate)决定了第三点。 只依赖输入就可以完成这三项决定。这是受到大脑工作机制的启发,大脑可以基于输入来处理突然的上下文语境切换。

    8、Skip-gram

            词嵌入模型的目的是针对每个词学习一个高维密集表征,其中嵌入向量之间的相似性显示了相应词语之间语义或句法的相似性。Skip-gram 是一种学习词嵌入算法的模型。 skip-gram 模型(包括很多其它词嵌入模型)背后的主要思想是:如果两个词汇项有相似的上下文,则它们是相似的。

    https://img3.mukewang.com/5c0638020001fcc905950404.jpg

            换句话说,假设有一个句子,比如“cats are mammals”,如果用“dogs”替换“cats”,该句子仍然是有意义的。因此在这个例子中,“dogs”和“cats”有相似的上下文(即“are mammals”)。

            基于以上假设,我们可以考虑一个上下文窗口(包含 K 个连续项)。然后跳过其中一个词,试着学习一个可以得到除了跳过的这个词以外所有词项,并且可以预测跳过的词的神经网络。因此,如果两个词在一个大语料库中多次具有相似的上下文,那么这些词的嵌入向量将会是相似的。

    9、连续词袋模型

            在自然语言处理中,我们希望将文档中的每一个单词表示为一个数值向量,使得出现在相似上下文中的单词具有相似或相近的向量表示。在连续词袋模型中,我们的目标是利用一个特定单词的上下文,预测该词。

    https://img2.mukewang.com/5c06377e000156f406000337.jpg

            首先在一个大的语料库中抽取大量的句子,每看到一个单词,同时抽取它的上下文。然后我们将上下文单词输入到一个神经网络,并预测在这个上下文中心的单词。

            当我们有成千上万个这样的上下文词汇和中心词时,我们就得到了一个神经网络数据集的实例。然后训练这个神经网络,在经过编码的隐藏层的最终输出中,我们得到了特定单词的嵌入式表达。当我们对大量的句子进行训练时也能发现,类似上下文中的单词都可以得到相似的向量。

    10、迁移学习

            我们来考虑一下卷积神经网络是如何处理图像的。假设有一张图像,对其应用卷积,并得到像素的组合作为输出。假设这些输出是边缘,再次应用卷积,那么现在的输出将是边缘或线的组合。然后再次应用卷积,此时的输出将是线的组合,以此类推。可以把它想象成是在每一层寻找一个特定的模式。神经网络的最后一层通常会变得非常特别。

            如果基于 ImageNet 进行训练,那么神经网络的最后一层或许就是在寻找儿童、狗或者飞机之类的完整图像。再往后倒退几层,可能会看到神经网络在寻找眼睛、耳朵、嘴巴或者轮子等组成部分。

    https://img1.mukewang.com/5c0637ac0001ca1306380359.jpg

            深度卷积神经网络中的每一层逐步建立起越来越高层次的特征表征,最后几层通常是专门针对输入数据。另一方面,前面的层则更为通用,主要用来在一大类图片中有找到许多简单的模式。

            迁移学习就是在一个数据集上训练卷积神经网络时,去掉最后一层,在不同的数据集上重新训练模型的最后一层。直观来讲,就是重新训练模型以识别不同的高级特征。因此,训练时间会减少很多,所以在没有足够的数据或者需要太多的资源时,迁移学习是一个很有用的工具。

    总结:

            深度学习是非常注重技术实践,所谓的百看不如一练。当然柳猫这里讲的还是非常肤浅,如果能够引起小伙伴们对深度学习的兴趣,柳猫就觉得很开心了。

    转载于:https://www.cnblogs.com/xyou/p/10112156.html

    展开全文
  • 深度学习(Deep Learning)算法简介

    千次阅读 2018-07-21 18:59:53
    Comments from Xinwei: 最近的一个课题发展到与深度学习有联系,因此在高老师的建议下,我仔细看了下深度学习的基本概念,这篇综述翻译自http://deeplearning.net,与
    原文地址为:深度学习(Deep Learning)算法简介

    Comments from Xinwei: 最近的一个课题发展到与深度学习有联系,因此在高老师的建议下,我仔细看了下深度学习的基本概念,这篇综述翻译自http://deeplearning.net,与大家分享,有翻译不妥之处,烦请各位指正。

     

     

    查看最新论文

    Yoshua Bengio, Learning Deep Architectures for AI, Foundations and Trends in Machine Learning, 2(1), 2009

     

    深度(Depth)

    从一个输入中产生一个输出所涉及的计算可以通过一个流向图(flow graph)来表示:流向图是一种能够表示计算的图,在这种图中每一个节点表示一个基本的计算并且一个计算的值(计算的结果被应用到这个节点的孩子节点的值)。考虑这样一个计算集合,它可以被允许在每一个节点和可能的图结构中,并定义了一个函数族。输入节点没有孩子,输出节点没有父亲。

     

    对于表达1 的流向图,可以通过一个有两个输入节点23 的图表示,其中一个节点通过使用23 作为输入(例如作为孩子)来表示4 ;一个节点仅使用2 作为输入来表示平方;一个节点使用67 作为输入来表示加法项(其值为5 );最后一个输出节点利用一个单独的来自于加法节点的输入计算SIN。

     

    这种流向图的一个特别属性是深度(depth):从一个输入到一个输出的最长路径的长度。

     

    传统的前馈神经网络能够被看做拥有等于层数的深度(比如对于输出层为隐层数加1)。SVMs有深度2(一个对应于核输出或者特征空间,另一个对应于所产生输出的线性混合)。

     

    深度架构的动机

    学习基于深度架构的学习算法的主要动机是:

    不充分的深度是有害的;

    大脑有一个深度架构;

    认知过程是深度的;

     

    不充分的深度是有害的

    在许多情形中深度2就足够(比如logical gates, formal [threshold] neurons, sigmoid-neurons, Radial Basis Function [RBF] units like in SVMs)表示任何一个带有给定目标精度的函数。但是其代价是:图中所需要的节点数(比如计算和参数数量)可能变的非常大。理论结果证实那些事实上所需要的节点数随着输入的大小指数增长的函数族是存在的。这一点已经在logical gates, formal [threshold] neurons 和rbf单元中得到证实。在后者中Hastad说明了但深度是d时,函数族可以被有效地(紧地)使用O(n)个节点(对于n个输入)来表示,但是如果深度被限制为d-1,则需要指数数量的节点数O(2^n)。

     

    我们可以将深度架构看做一种因子分解。大部分随机选择的函数不能被有效地表示,无论是用深地或者浅的架构。但是许多能够有效地被深度架构表示的却不能被用浅的架构高效表示(see the polynomials example in the Bengio survey paper)。一个紧的和深度的表示的存在意味着在潜在的可被表示的函数中存在某种结构。如果不存在任何结构,那将不可能很好地泛化。

     

    大脑有一个深度架构

    例如,视觉皮质得到了很好的研究,并显示出一系列的区域,在每一个这种区域中包含一个输入的表示和从一个到另一个的信号流(这里忽略了在一些层次并行路径上的关联,因此更复杂)。这个特征层次的每一层表示在一个不同的抽象层上的输入,并在层次的更上层有着更多的抽象特征,他们根据低层特征定义。

     

    需要注意的是大脑中的表示是在中间紧密分布并且纯局部:他们是稀疏的:1%的神经元是同时活动的。给定大量的神经元,任然有一个非常高效地(指数级高效)表示。

     

    认知过程看起来是深度的
    • 人类层次化地组织思想和概念;
    • 人类首先学习简单的概念,然后用他们去表示更抽象的;
    • 工程师将任务分解成多个抽象层次去处理;

    学习/发现这些概念(知识工程由于没有反省而失败?)是很美好的。对语言可表达的概念的反省也建议我们一个稀疏的表示:仅所有可能单词/概念中的一个小的部分是可被应用到一个特别的输入(一个视觉场景)。

     

    学习深度架构的突破

     

    2006年前,尝试训练深度架构都失败了:训练一个深度有监督前馈神经网络趋向于产生坏的结果(同时在训练和测试误差中),然后将其变浅为1(1或者2个隐层)。

     

    2006年的3篇论文改变了这种状况,由Hinton的革命性的在深度信念网(Deep Belief Networks, DBNs)上的工作所引领:

    在这三篇论文中以下主要原理被发现:

    • 表示的无监督学习被用于(预)训练每一层;
    • 在一个时间里的一个层次的无监督训练,接着之前训练的层次。在每一层学习到的表示作为下一层的输入;
    • 用无监督训练来调整所有层(加上一个或者更多的用于产生预测的附加层);

    DBNs在每一层中利用用于表示的无监督学习RBMs。Bengio et al paper 探讨和对比了RBMs和auto-encoders(通过一个表示的瓶颈内在层预测输入的神经网络)。Ranzato et al paper在一个convolutional架构的上下文中使用稀疏auto-encoders(类似于稀疏编码)。Auto-encoders和convolutional架构将在以后的课程中讲解。

     

    从2006年以来,大量的关于深度学习的论文被发表,一些探讨了其他原理来引导中间表示的训练,查看Learning Deep Architectures for AI

     

     

    本文英文版出处http://www.iro.umontreal.ca/~pift6266/H10/notes/deepintro.html


    转载请注明本文地址:深度学习(Deep Learning)算法简介
    展开全文
  • 深度学习常见算法的介绍和比较

    万次阅读 多人点赞 2018-02-08 22:00:06
    很多人都有误解,以为深度...关于深度学习的理论推导,太大太复杂,一些常见的深度学习算法本人也是模模糊糊的,看过好多次的,隔断时间就会忘记,现在对其系统的整理一下(从历史,致命问题出发,再看具体算法的思想,

    很多人都有误解,以为深度学习比机器学习先进。其实深度学习是机器学习的一个分支。可以理解为具有多层结构的模型。具体的话,深度学习是机器学习中的具有深层结构的神经网络算法,即机器学习>神经网络算法>深度神经网络(深度学习)。
    关于深度学习的理论推导,太大太复杂,一些常见的深度学习算法本人也是模模糊糊的,看过好多次的,隔断时间就会忘记,现在对其系统的整理一下(从历史,致命问题出发,再看具体算法的思想,框架,优缺点和改进的方向,又总结了CNN和RNN的比较)。

    一、历史:多层感知机到神经网络,再到深度学习

    神经网络技术起源于上世纪五、六十年代,当时叫感知机(perceptron),拥有输入层、输出层和一个隐含层。输入的特征向量通过隐含层变换达到输出层,在输出层得到分类结果。(扯一个不相关的:由于计算技术的落后,当时感知器传输函数是用线拉动变阻器改变电阻的方法机械实现的,脑补一下科学家们扯着密密麻麻的导线的样子…)
    心理学家Rosenblatt提出的单层感知机有一个严重得不能再严重的问题,即它对稍复杂一些的函数都无能为力(比如最为典型的“异或”操作)。
    这个缺点直到上世纪八十年代才被Rumelhart、Williams、Hinton、LeCun等人发明的多层感知机解决,多层感知机解决了之前无法模拟异或逻辑的缺陷,同时更多的层数也让网络更能够刻画现实世界中的复杂情形。
    多层感知机可以摆脱早期离散传输函数的束缚,使用sigmoid或tanh等连续函数模拟神经元对激励的响应,在训练算法上则使用Werbos发明的反向传播BP算法。这就是我们现在所说的【神经网络】,BP算法也叫BP神经网络具体过程可参见我转载的文章(http://blog.csdn.net/abc200941410128/article/details/78708319)。
    但是BP神经网络(多层感知机)面临在致命问题(见下节)。随着神经网络层数的加深,有两个重大问题:一是优化函数越来越容易陷入局部最优解,并且这个“陷阱”越来越偏离真正的全局最优。利用有限数据训练的深层网络,性能还不如较浅层网络。同时,另一个不可忽略的问题是“梯度消失”现象更加严重。
    2006年,Hinton利用预训练方法缓解了局部最优解问题,将隐含层推动到了7层,神经网络真正意义上有了“深度”,由此揭开了深度学习的热潮,随后的DBN、CNN、RNN、LSTM等才逐渐出现。
    这里的“深度”并没有固定的定义——在语音识别中4层网络就能够被认为是“较深的”,而在图像识别中20层以上的网络屡见不鲜。
    为了克服梯度消失,ReLU、maxout等传输函数代替了sigmoid,形成了如今DNN的基本形式。单从结构上来说,全链接的多层感知机是没有任何区别的。

    二、深度神经网络的致命问题

    随着神经网络层数的加深,有三个重大问题:一是非凸优化问题,即优化函数越来越容易陷入局部最优解;二是(Gradient Vanish)梯度消失问题;三是过拟合问题。

    2.1 非凸优化问题

    线性回归,本质是一个多元一次函数的优化问题,设f(x,y)=x+y
    多层神经网络,本质是一个多元K次函数优化问题,设f(x,y)=xy
    在线性回归当中,从任意一个点出发搜索,最终必然是下降到全局最小值附近的。所以置0也无妨(这也是为什么我们往往解线性回归方程时初值为0)。
    而在多层神经网络中,从不同点出发,可能最终困在局部最小值。局部最小值是神经网络结构带来的挥之不去的阴影,随着隐层层数的增加,非凸的目标函数越来越复杂,局部最小值点成倍增长,利用有限数据训练的深层网络,性能还不如较浅层网络。。避免的方法一般是权值初始化。为了统一初始化方案,通常将输入缩放到[−1,1],但是仍然无法保证能够达到全局最优,其实这也是科学家们一直在研究而未解决的问题。
    所以,从本质上来看,深度结构带来的非凸优化仍然不能解决(包括现在的各类深度学习算法和其他非凸优化问题都是如此),这限制着深度结构的发展。

    2.2 (Gradient Vanish)梯度消失问题

    这个问题实际上是由激活函数不当引起的,多层使用Sigmoid系函数,会使得误差从输出层开始呈指数衰减。在数学上,激活函数的作用就是将输入数据映射到0到1上(tanh是映射-1到+1上)。至于映射的原因,除了对数据进行正则化外,大概是控制数据,使其只在一定的范围内。当然也有另外细节作用,例如Sigmoid(tanh)中,能在激活的时候,更关注数据在零(或中心点)前后的细小变化,而忽略数据在极端时的变化,例如ReLU还有避免梯度消失的作用。通常,Sigmoid(tanh)多用于全连接层,而ReLU多用于卷积层。
    Sigmoid
    Sigmoid
    ReLU
    ReLU
    “梯度消失”现象具体来说,我们常常使用sigmoid作为神经元的输入输出函数。对于幅度为1的信号,在BP反向传播梯度时,每传递一层,梯度衰减为原来的0.25。层数一多,梯度指数衰减后低层基本上接受不到有效的训练信号。
    幸运的是,这个问题已经被Hinton在2006年提出的逐层贪心预训练权值矩阵变向减轻,最近提出的ReLu则从根本上提出了解决方案。
    2012年,Hinton组的Alex Krizhevsky率先将受到Gradient Vanish影响较小的CNN中大规模使用新提出的ReLu函数。
    2014年,Google研究员贾扬清则利用ReLu这个神器,成功将CNN扩展到了22层巨型深度网络,见知乎。
    对于深受Gradient Vanish困扰的RNN,其变种LSTM也克服了这个问题。

    2.3 过拟合问题

    这就是神经网络的最后一个致命问题:过拟合,庞大的结构和参数使得,尽管训练error降的很低,但是test error却高的离谱。
    过拟合还可以和Gradient Vanish、局部最小值混合三打,具体玩法是这样的:
    由于Gradient Vanish,导致深度结构的较低层几乎无法训练,而较高层却非常容易训练。
    较低层由于无法训练,很容易把原始输入信息,没有经过任何非线性变换,或者错误变换推到高层去,使得高层解离特征压力太大。
    如果特征无法解离,强制性的误差监督训练就会使得模型对输入数据直接做拟合。
    其结果就是,A Good Optimation But a Poor Generalization,这也是SVM、决策树等浅层结构的毛病。
    Bengio指出,这些利用局部数据做优化的浅层结构基于先验知识(Prior): Smoothness
    即,给定样本(xi,yi),尽可能从数值上做优化,使得训练出来的模型,对于近似的x,输出近似的y。
    然而一旦输入值做了泛型迁移,比如两种不同的鸟,鸟的颜色有别,且在图像中的比例不一,那么SVM、决策树几乎毫无用处。
    因为,对输入数据简单地做数值化学习,而不是解离出特征,对于高维数据(如图像、声音、文本),是毫无意义的。
    然后就是最后的事了,由于低层学不动,高层在乱学,所以很快就掉进了吸引盆中,完成神经网络三杀。

    三、深度学习里面的基本模型

    深度学习里面的基本模型大致分为了3类:多层感知机模型;深度神经网络模型和递归神经网络模型。其代表分别是DBN(Deep belief network) 深度信念网络、CNN(Convolution Neural Networks)卷积神经网络、RNN(Recurrent neural network) 递归神经网络。

    3.1 DBN(Deep belief network) 深度信念网络

    2006年,Geoffrey Hinton提出深度信念网络(DBN)及其高效的学习算法,即Pre-training+Fine tuning,并发表于《Science》上,成为其后深度学习算法的主要框架。DBN是一种生成模型,通过训练其神经元间的权重,我们可以让整个神经网络按照最大概率来生成训练数据。所以,我们不仅可以使用DBN识别特征、分类数据,还可以用它来生成数据。

    3.1.1 网络结构

    深度信念网络(DBN)由若干层受限玻尔兹曼机(RBM)堆叠而成,上一层RBM的隐层作为下一层RBM的可见层。
    (1) RBM
    这里写图片描述
    一个普通的RBM网络结构如上图所示,是一个双层模型,由m个可见层单元及n个隐层单元组成,其中,层内神经元无连接,层间神经元全连接,也就是说:在给定可见层状态时,隐层的激活状态条件独立,反之,当给定隐层状态时,可见层的激活状态条件独立。这保证了层内神经元之间的条件独立性,降低概率分布计算及训练的复杂度。RBM可以被视为一个无向图模型,可见层神经元与隐层神经元之间的连接权重是双向的,即可见层到隐层的连接权重为W,则隐层到可见层的连接权重为W’。除以上提及的参数外,RBM的参数还包括可见层偏置b及隐层偏置c。RBM可见层和隐层单元所定义的分布可根据实际需要更换,包括:Binary单元、Gaussian单元、Rectified Linear单元等,这些不同单元的主要区别在于其激活函数不同
    (2) DBN
    这里写图片描述
    DBN模型由若干层RBM堆叠而成,如果在训练集中有标签数据,那么最后一层RBM的可见层中既包含前一层RBM的隐层单元,也包含标签层单元。假设顶层RBM的可见层有500个神经元,训练数据的分类一共分成了10类,那么顶层RBM的可见层有510个显性神经元,对每一训练数据,相应的标签神经元被打开设为1,而其他的则被关闭设为0

    3.1.2 训练过程和优缺点

    DBN的训练包括Pre-training和Fine tuning两步,其中Pre-training过程相当于逐层训练每一个RBM,经过Pre-training的DBN已经可用于模拟训练数据,而为了进一步提高网络的判别性能, Fine tuning过程利用标签数据通过BP算法对网络参数进行微调。
    对DBN优缺点的总结主要集中在生成模型与判别模型的优缺点总结上。
    1、优点:

    • 生成模型学习联合概率密度分布,所以就可以从统计的角度表示数据的分布情况,能够反映同类数据本身的相似度;
    • 生成模型可以还原出条件概率分布,此时相当于判别模型,而判别模型无法得到联合分布,所以不能当成生成模型使用。

    2、缺点:
    - 生成模型不关心不同类别之间的最优分类面到底在哪儿,所以用于分类问题时,分类精度可能没有判别模型高;
    - 由于生成模型学习的是数据的联合分布,因此在某种程度上学习问题的复杂性更高。
    - 要求输入数据具有平移不变性。

    关于 判别模型与生成模型可以参看(http://blog.csdn.net/erlib/article/details/53585134)

    3.1.3 改进模型

    DBN的变体比较多,它的改进主要集中于其组成“零件”RBM的改进,有卷积DBN(CDBN)和条件RBM(Conditional RBM)等。
    DBN并没有考虑到图像的二维结构信息,因为输入是简单的将一个图像矩阵转换为一维向量。而CDBN利用邻域像素的空域关系,通过一个称为卷积RBM(CRBM)的模型达到生成模型的变换不变性,而且可以容易得变换到高维图像。
    DBN并没有明确地处理对观察变量的时间联系的学习上,Conditional RBM通过考虑前一时刻的可见层单元变量作为附加的条件输入,以模拟序列数据,这种变体在语音信号处理领域应用较多。

    3.2 CNN(Convolution Neural Networks)卷积神经网络

    卷积神经网络是人工神经网络的一种,已成为当前语音分析和图像识别领域的研究热点。它的权值共享网络结构使之更类似于生物神经网络,降低了网络模型的复杂度,减少了权值的数量。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。
    全链接DNN的结构里下层神经元和所有上层神经元都能够形成连接,带来了参数数量的膨胀问题。例如,1000*1000的像素图像,光这一层就有10^12个权重需要训练。此时我们可以用卷积神经网络CNN,对于CNN来说,并不是所有上下层神经元都能直接相连,而是通过“卷积核”作为中介。同一个卷积核在所有图像内是共享的,图像通过卷积操作后仍然保留原先的位置关系。图像输入层到隐含层的参数瞬间降低到了100*100*100=10^6个
    卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者共他形式的变形具有高度不变性。

    3.2.1 网络结构

    卷积神经网络是一个多层的神经网络,其基本运算单元包括:卷积运算、池化运算、全连接运算和识别运算。
    这里写图片描述

    • 卷积运算:前一层的特征图与一个可学习的卷积核进行卷积运算,卷积的结果经过激活函数后的输出形成这一层的神经元,从而构成该层特征图,也称特征提取层,每个神经元的输入与前一层的局部感受野相连接,并提取该局部的特征,一旦该局部特征被提取,它与其它特征之间的位置关系就被确定。l
    • 池化运算:能很好的聚合特征、降维来减少运算量。它把输入信号分割成不重叠的区域,对于每个区域通过池化(下采样)运算来降低网络的空间分辨率,比如最大值池化是选择区域内的最大值,均值池化是计算区域内的平均值。通过该运算来消除信号的偏移和扭曲。
    • 全连接运算:输入信号经过多次卷积核池化运算后,输出为多组信号,经过全连接运算,将多组信号依次组合为一组信号。
      识别运算:上述运算过程为特征学习运算,需在上述运算基础上根据业务需求(分类或回归问题)增加一层网络用于分类或回归计算。

    3.2.2 训练过程和优缺点

    卷积网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具有输入输出对之间的映射能力。卷积网络执行的是有监督训练,所以其样本集是由形如:(输入信号,标签值)的向量对构成的。

    1、优点:
    - 权重共享策略减少了需要训练的参数,相同的权重可以让滤波器不受信号位置的影响来检测信号的特性,使得训练出来的模型的泛化能力更强;
    - 池化运算可以降低网络的空间分辨率,从而消除信号的微小偏移和扭曲,从而对输入数据的平移不变性要求不高。

    2、缺点:
    - 深度模型容易出现梯度消散问题。

    3.2.3 改进模型

    卷积神经网络因为其在各个领域中取得了好的效果,是近几年来研究和应用最为广泛的深度神经网络。比较有名的卷积神经网络模型主要包括1986年Lenet,2012年的Alexnet,2014年的GoogleNet,2014年的VGG,2015年的Deep Residual Learning。这些卷积神经网络的改进版本或者模型的深度,或者模型的组织结构有一定的差异,但是组成模型的机构构建是相同的,基本都包含了卷积运算、池化运算、全连接运算和识别运算。

    3.3 RNN(Recurrent neural network) 递归神经网络

    全连接的DNN除了以上问题以外还存在着另一个问题——无法对时间序列上的变化进行建模。然而,样本出现的时间顺序对于自然语言处理、语音识别、手写体识别等应用非常重要。对了适应这种需求,就出现了题主所说的另一种神经网络结构——循环神经网络RNN(不知道为什么很多叫循环的。计算机术语里循环一般是同一层次的,Recurrent 其实是时间递归,所以本文叫他递归神经网络)。
    在普通的全连接网络或CNN中,每层神经元的信号只能向上一层传播,样本的处理在各个时刻独立,因此又被成为前向神经网络(Feed-forward Neural Networks)。而在RNN中,神经元的输出可以在下一个时间戳直接作用到自身。
    即:(t+1)时刻网络的最终结果O(t+1)是该时刻输入和所有历史共同作用的结果。RNN可以看成一个在时间上传递的神经网络,它的深度是时间的长度!正如我们上面所说,“梯度消失”现象又要出现了,只不过这次发生在时间轴上
    为了解决时间上的梯度消失,机器学习领域发展出了长短时记忆单元(LSTM),通过门的开关实现时间上记忆功能,并防止梯度消失。

    3.3.1 网络结构

    这里写图片描述
    左侧是递归神经网络的原始结构,如果先抛弃中间那个令人生畏的闭环,那其实就是简单“输入层=>隐藏层=>输出层”的三层结构,但是图中多了一个非常陌生的闭环,也就是说输入到隐藏层之后,隐藏层还会输入给自己,使得该网络可以拥有记忆能力。我们说递归神经网络拥有记忆能力,而这种能力就是通过W将以往的输入状态进行总结,而作为下次输入的辅助。可以这样理解隐藏状态:h=f(现有的输入+过去记忆总结)

    3.3.2 训练过程和优缺点

    递归神经网络中由于输入时叠加了之前的信号,所以反向传导时不同于传统的神经网络,因为对于时刻t的输入层,其残差不仅来自于输出,还来自于之后的隐层。通过反向传递算法,利用输出层的误差,求解各个权重的梯度,然后利用梯度下降法更新各个权重。
    1、优点:

    • 模型是时间维度上的深度模型,可以对序列内容建模。

    2、缺点:
    - 需要训练的参数较多,容易出现梯度消散或梯度爆炸问题;
    - 不具有特征学习能力。

    3.3.3 改进模型

    递归神经网络模型可以用来处理序列数据,递归神经网络包含了大量参数,且难于训练(时间维度的梯度消散或梯度爆炸),所以出现一系列对RNN优化,比如网络结构、求解算法与并行化。
    近年来bidirectional RNN (BRNN)与 LSTM在image captioning, language translation, and handwriting recognition这几个方向上有了突破性进展 。

    3.4 混合结构

    除了以上三种网络,和我之前提到的深度残差学习、LSTM外,深度学习还有许多其他的结构。举个例子,RNN既然能继承历史信息,是不是也能吸收点未来的信息呢?因为在序列信号分析中,如果我能预知未来,对识别一定也是有所帮助的。因此就有了双向RNN、双向LSTM,同时利用历史和未来的信息。双向RNN、双向LSTM,同时利用历史和未来的信息。
    事实上,不论是那种网络,他们在实际应用中常常都混合着使用,比如CNN和RNN在上层输出之前往往会接上全连接层,很难说某个网络到底属于哪个类别。
    不难想象随着深度学习热度的延续,更灵活的组合方式、更多的网络结构将被发展出来。尽管看起来千变万化,但研究者们的出发点肯定都是为了解决特定的问题。如果想进行这方面的研究,不妨仔细分析一下这些结构各自的特点以及它们达成目标的手段。

    3.5 CNN和RNN的比较

    RNN的重要特性是可以处理不定长的输入,得到一定的输出。当你的输入可长可短, 比如训练翻译模型的时候, 你的句子长度都不固定,你是无法像一个训练固定像素的图像那样用CNN搞定的。而利用RNN的循环特性可以轻松搞定。
    在序列信号的应用上,CNN是只响应预先设定的信号长度(输入向量的长度),RNN的响应长度是学习出来的。

    CNN对特征的响应是线性的,RNN在这个递进方向上是非线性响应的。这也带来了很大的差别。

    CNN 专门解决图像问题的,可用把它看作特征提取层,放在输入层上,最后用MLP 做分类。
    RNN 专门解决时间序列问题的,用来提取时间序列信息,放在特征提取层(如CNN)之后。

    RNN,递归型网络,用于序列数据,并且有了一定的记忆效应,辅之以lstm。
    CNN应该侧重空间映射,图像数据尤为贴合此场景。

    CNN 卷积擅长从局部特征逼近整体特征,
    RNN 擅长对付时间序列。

    四、一些基本概念和知识

    4.1 线性回归、线性神经网络、Logistic/Softmax回归

    这个参考http://blog.csdn.net/erlib/article/details/53585134
    或者其他资料。

    4.2 关于卷积、池化、激活函数等

    入门参考:http://blog.csdn.net/u010859498/article/details/78794405
    详细了解可自己谷歌百度

    4.3 推荐一个比较好的入门资料

    台大电机系李宏毅教授的讲义《一天搞懂深度学习》
    有人做简略的翻译过
    https://www.jianshu.com/p/c30f7c944b66

    参考资料:
    http://blog.csdn.net/erlib/article/details/53585134
    https://www.zhihu.com/question/34681168/answer/156552873
    http://blog.csdn.net/u010859498/article/details/78794405

    展开全文
  • 深度学习总结(一)各种优化算法

    万次阅读 多人点赞 2018-07-03 20:04:15
    参考博文: 码农王小呆:...深度学习最全优化方法总结: https://blog.csdn.net/u012759136/article/details/52302426 超级详细每个算法的讲解,可参考: https://blog.csdn.net/tsyccnh/articl...

    参考博文:
    码农王小呆:https://blog.csdn.net/manong_wxd/article/details/78735439
    深度学习最全优化方法总结:
    https://blog.csdn.net/u012759136/article/details/52302426
    超级详细每个算法的讲解,可参考:
    https://blog.csdn.net/tsyccnh/article/details/76673073

    一.优化算法介绍

    1.批量梯度下降(Batch gradient descent,BGD)

    θ=θ−η⋅∇θJ(θ)
    每迭代一步,都要用到训练集的所有数据,每次计算出来的梯度求平均
    η代表学习率LR

    2.随机梯度下降(Stochastic Gradient Descent,SGD)

    θ=θ−η⋅∇θJ(θ;x(i);y(i))
    通过每个样本来迭代更新一次,以损失很小的一部分精确度和增加一定数量的迭代次数为代价,换取了总体的优化效率的提升。增加的迭代次数远远小于样本的数量。

    缺点:

    对于参数比较敏感,需要注意参数的初始化
    容易陷入局部极小值
    当数据较多时,训练时间长
    每迭代一步,都要用到训练集所有的数据。

    3. 小批量梯度下降(Mini Batch Gradient Descent,MBGD)

    θ=θ−η⋅∇θJ(θ;x(i:i+n);y(i:i+n))
    为了避免SGD和标准梯度下降中存在的问题,对每个批次中的n个训练样本,这种方法只执行一次更新。【每次更新全部梯度的平均值】

    4.指数加权平均的概念

    这里写图片描述
    这里写图片描述
    从这里我们就可已看出指数加权平均的名称由来,第100个数据其实是前99个数据加权和,而前面每一个数的权重呈现指数衰减,即越靠前的数据对当前结果的影响较小
    这里写图片描述

    缺点:存在开始数据的过低问题,可以通过偏差修正,但是在深度学习的优化算法中一般会忽略这个问题
    这里写图片描述
    当t不断增大时,分母逐渐接近1,影响就会逐渐减小了

    优点:【相较于滑动窗口平均】
    1.占用内存小,每次覆盖即可
    2.运算简单

    5.Momentum(动量梯度下降法)

    momentum是模拟物理里动量的概念,积累之前的动量来替代真正的梯度。公式如下:
    这里写图片描述
    然而网上更多的是另外一种版本,即去掉(1-β)
    这里写图片描述
    相当于上一版本上本次梯度的影响权值*1/(1-β)
    两者效果相当,只不过会影响一些最优学习率的选取
    优点

    • 下降初期时,使用上一次参数更新,下降方向一致,乘上较大的μ能够进行很好的加速
    • 下降中后期时,在局部最小值来回震荡的时候,gradient→0,β得更新幅度增大,跳出陷阱
    • 在梯度改变方向的时候,μ能够减少更新

    即在正确梯度方向上加速,并且抑制波动方向张的波动大小,在后期本次计算出来的梯度会很小,以至于无法跳出局部极值,Momentum方法也可以帮助跳出局部极值
    参数设置
    β的常用值为0.9,即可以一定意义上理解为平均了前10/9次的梯度。
    至于LR学习率的设置,后面所有方法一起总结吧

    6.Nesterov accelerated gradient (NAG)

    Momentum图解
    NAG图解
    这里写图片描述
    优点:
    这种基于预测的更新方法,使我们避免过快地前进,并提高了算法地响应能力,大大改进了 RNN 在一些任务上的表现【为什么对RNN好呢,不懂啊】
    没有对比就没有伤害,NAG方法收敛速度明显加快。波动也小了很多。实际上NAG方法用到了二阶信息,所以才会有这么好的结果。先按照原来的梯度走一步的时候已经求了一次梯度,后面再修正的时候又求了一次梯度,所以是二阶信息。
    参数设置:
    同Momentum

    其实,momentum项和nesterov项都是为了使梯度更新更加灵活,对不同情况有针对性。但是,人工设置一些学习率总还是有些生硬,接下来介绍几种自适应学习率的方法

    7.Adagrad

    前面的一系列优化算法有一个共同的特点,就是对于每一个参数都用相同的学习率进行更新。但是在实际应用中各个参数的重要性肯定是不一样的,所以我们对于不同的参数要动态的采取不同的学习率,让目标函数更快的收敛。
    adagrad方法是将每一个参数的每一次迭代的梯度取平方累加再开方,用基础学习率除以这个数,来做学习率的动态更新。【这样每一个参数的学习率就与他们的梯度有关系了,那么每一个参数的学习率就不一样了!也就是所谓的自适应学习率
    这里写图片描述

    优点:

    • 前期Gt较小的时候, regularizer较大,能够放大梯度
    • 后期Gt较大的时候,regularizer较小,能够约束梯度
    • 适合处理稀疏梯度:相当于为每一维参数设定了不同的学习率:压制常常变化的参数,突出稀缺的更新。能够更有效地利用少量有意义样本

    参数设置:
    只需要设置初始学习率,后面学习率会自我调整,越来越小

    缺点:
    Adagrad的一大优势时可以避免手动调节学习率,比如设置初始的缺省学习率为0.01,然后就不管它,另其在学习的过程中自己变化。当然它也有缺点,就是它计算时要在分母上计算梯度平方的和,由于所有的参数平方【上述公式推导中并没有写出来是梯度的平方,感觉应该是上文的公式推导忘了写】必为正数,这样就造成在训练的过程中,分母累积的和会越来越大。这样学习到后来的阶段,网络的更新能力会越来越弱,能学到的更多知识的能力也越来越弱,因为学习率会变得极其小【就会提前停止学习】,为了解决这样的问题又提出了Adadelta算法。

    8.Adadelta

    Adagrad会累加之前所有的梯度平方,而Adadelta只累加固定大小的项【其实就是相当于指数滑动平均,只用了前多少步的梯度平方平均值】,并且也不直接存储这些项,仅仅是近似计算对应的平均值【这也就是指数滑动平均的优点】
    这里写图片描述
    优点:
    不用依赖于全局学习率了
    训练初中期,加速效果不错,很快
    避免参数更新时两边单位不统一的问题
    缺点:
    训练后期,反复在局部最小值附近抖动

    9.RMSprop

    这里写图片描述
    特点:

    • 其实RMSprop依然依赖于全局学习率
    • RMSprop算是Adagrad的一种发展,和Adadelta的变体,效果趋于二者之间
    • 适合处理非平稳目标(也就是与时间有关的)
    • 对于RNN效果很好,因为RMSprop的更新只依赖于上一时刻的更新,所以适合。???

    10.Adam

    Adam = Adaptive + Momentum,顾名思义Adam集成了SGD的一阶动量和RMSProp的二阶动量。
    这里写图片描述
    特点:

    • 结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点
    • 对内存需求较小
    • 为不同的参数计算不同的自适应学习率
    • 也适用于大多非凸优化
    • 适用于大数据集和高维空间

    11.Adamax

    这里写图片描述

    12.Nadam

    这里写图片描述

    13.总结

    提速可以归纳为以下几个方面:
    - 使用momentum来保持前进方向(velocity);
    - 为每一维参数设定不同的学习率:在梯度连续性强的方向上加速前进;
    - 用历史迭代的平均值归一化学习率:突出稀有的梯度;

    Keras中的默认参数

    optimizers.SGD(lr=0.001,momentum=0.9)
    
    optimizers.Adagrad(lr=0.01,epsilon=1e-8)
    
    optimizers.Adadelta(lr=0.01,rho=0.95,epsilon=1e-8)
    
    optimizers.RMSprop(lr=0.001,rho=0.9,epsilon=1e-8)
    
    optimizers.Adam(lr=0.001,beta_1=0.9,beta_2=0.999,epsilon=1e-8)

    14.牛顿法——二阶优化方法【待补充】

    二.相关注意问题

    1.关于批量梯度下降的batch_size选择问题

    训练集较小【<2000】:直接使用batch梯度下降,每次用全部的样本进行梯度更新
    训练集较大:batch_size一般设定为[64,512]之间,设置为2的n次方更符合电脑内存设置,代码会运行快一些
    此外还要考虑GPU和CPU的存储空间和训练过程的波动问题
    这里写图片描述
    batch_size越小,梯度的波动越大,正则化的效果也越强,自然训练速度也会变慢,实验时应该多选择几个batch_size进行实验,以挑选出最优的模型。

    2.关于批量梯度下降的weight_decay【似乎与L2正则有关系,待补充】

    3.关于优化算法选择的经验之谈

    1. Adam在实际应用中效果良好,超过了其他的自适应技术。
    2. 如果输入数据集比较稀疏,SGD、NAG和动量项等方法可能效果不好。因此对于稀疏数据集,应该使用某种自适应学习率的方法,且另一好处为不需要人为调整学习率,使用默认参数就可能获得最优值。
    3. 如果想使训练深层网络模型快速收敛或所构建的神经网络较为复杂,则应该使用Adam或其他自适应学习速率的方法,因为这些方法的实际效果更优。
    4. SGD通常训练时间更长,但是在好的初始化和学习率调度方案的情况下,结果更可靠。
    5. Adadelta,RMSprop,Adam是比较相近的算法,在相似的情况下表现差不多。在想使用带动量的RMSprop,或者Adam的地方,大多可以使用Nadam取得更好的效果

    4.训练优化器的目的

    加速收敛 2. 防止过拟合 3. 防止局部最优

    5.选用优化器的目的

    在构建神经网络模型时,选择出最佳的优化器,以便快速收敛并正确学习,同时调整内部参数,最大程度地最小化损失函数。

    6.为什么神经网络的训练不采用二阶优化方法 (如Newton, Quasi Newton)?

    这里写图片描述

    7. 优化SGD的其他手段

    这里写图片描述
    这里写图片描述
    这里写图片描述

    附录

    这里写图片描述

    展开全文
  • 深度学习算法总结

    千次阅读 2019-04-13 20:17:34
    LeNet(1998):现在一般指LeNet5,(输入层、卷积、池化...AlexNet(2012):普遍认为深度学习的开端是2006年,但是广泛关注从2012开始。(输入层、5个卷积(其中3个卷积进行最大池化)、3个全连接、输出层共8层)...
  • 深度学习算法之-SSD(一)

    千次阅读 2019-05-16 19:51:13
    版权声明:本文为博主原创文章,转载需注明出处。 https://blog.csdn.net/qianqing13579/article/details/82106664 </div> <link rel="stylesheet" href="https://csdnimg.cn/relea...
  • 原文地址:《一文看懂深度学习(白话解释+8个优缺点+4个典型算法)》 深度学习有很好的表现,引领了第三次人工智能的浪潮。目前大部分表现优异的应用都用到了深度学习,大红大紫的 AlphaGo 就使用到了深度学习。 ...
  • 成长总结Author:louwill 公众号又十来天没有更新了,首先依然是感谢关注我公众号的12000多位朋友们一直以来的支持。最近我换了工作,刚刚搬到...
  • 3种深度学习算法

    2020-09-11 10:54:29
    如果您认为机器学习是您无聊的暗恋,深度学习是您暗恋的父亲!由于硬件的空前发展以及研究人员对更好和更大模型的需求,深度学习正日益变得令人生畏和难以捉摸。每天进行的研究越多,对您应该具备的基本知识的掌握...
  • 深度学习算法及其应用

    万次阅读 2018-03-25 23:01:25
    1、了解深度学习的基本原理,能够解释深度学习原理; 2、能够使用深度学习开源工具tensorflow识别图像中的数字,对实验性能进行分析; 3、了解图像识别的基本原理。 二、实验的硬件、软件平台 硬件:计算机 ...
  • 十个常用深度学习算法

    千次阅读 2019-06-14 15:59:54
    过去十年里,人们对...从根本上讲,机器学习是运用算法从原始数据中提取信息,并用某种类型的模型进行表示,然后使用该模型对一些尚未用模型表示的其他数据来进行推断。 神经网络就是机器学习各类模型中的其中一...
  • AI必知的十大深度学习算法

    万次阅读 多人点赞 2018-03-17 15:24:53
    首先先让我们来定义一下什么是“深度学习”。对很多人来说,给“深度学习”下一个定义确实很有挑战,因为在过去的十年中,它的形式已经慢慢地发生了很大的变化。先来在视觉上感受一下“深度学习”的地位。下图是AI、...
  • 尤其是在就业一年比一年难的情况下,经历过好多次心态崩裂,也问过很多人,来总结一下如果想成为一个【深度学习 CV 算法工程师】需要什么学习能力和知识储备。 这个文章应该会是一个【记录】的文章,看看自己这一路...
  • 机器学习&深度学习算法及代码实现

    万次阅读 2017-04-05 20:38:50
    最近在学机器学习,学习过程中收获颇多,在此留下学习记录,希望与同道中人相互学习交流机器学习简介1、机器学习运用学习算法,利用所给的数据进训练,生成相应的模型。在面对新情况时,根据模型,给出正确的判断。2...
  • 机器学习算法已经基本学习完了,在这一系列,佛爷将开始着手学习深度学习的各种算法和应用,由于本身难度偏大,我会不定期的更新,基本清楚和更加深入的研究深度学习。代码方面我基本会使用Tensorflow框架去写,原生...
  • 机器学习/深度学习算法学习心得

    千次阅读 2018-07-29 00:00:51
    本文的写作目的一方面是总结下自己的学习心得,另一方面是给那些想学习并且想从事算法工程师一点小小的参考,欢迎大家多多交流! 基础学习心得 想要入门机器学习,至少需要提前掌握以下两种技能 必要的数学...
  • 深度学习算法面试题总结

    万次阅读 多人点赞 2018-07-08 22:02:52
    1. 什么是凸集、凸函数、凸学习问题? 凸集:若对集合C中任意两点u和v,连接他们的线段仍在集合C中,那么集合C是凸集。 公式表示为:αu+(1-α)v∈C α∈[0, 1] 凸函数:凸集上的函数是凸函数。凸函数的每一个...
  • 人脸检测技术——深度学习算法原理人脸检测技术——深度学习算法原理1. 通用目标检测网络1.1 faster-rcnn检测算法的基本原理1.2 faster-rcnn应用于人脸检测2. 专门应用于人脸检测的卷积神经网络2.1 专门用于人脸检测...
  • 深度前馈神经网络(Deep Feedforward Neural Network),简称为前馈神经网络(Feedforward Neural Network),指的是具有前馈特征的神经网络模型。
  • 深度学习算法预测未来股票走势

    千次阅读 2020-03-02 10:53:06
    最近研究了一下用深度学习算法来预测股票未来的走势,看了网上不少别人分享的案例,也实际进行了测试,感觉用 LSTM 算法比较适用。长短期记忆网络(LSTM,Long Short-Term Memory)是一种时间循环神经网络,是为了...
  • 一年一度的校园招聘已经开始了,为了帮助参加校园招聘、社招的同学更好的准备面试,SIGAI整理出了一些常见的机器学习、深度学习面试题。理解它们,对你通过技术面试非常有帮助,当然,我们不能只限于会做这些题目,...
  • 1、背景LSTM(Long Short-Term Memory)算法作为深度学习方法的一种,在介绍LSTM算法之前,有必要介绍一下深度学习(Deep Learning)的一些基本背景。目前在机器学习领域,最大的热点毫无疑问是深度学习,从谷歌大脑...
  • 十种深度学习算法要点及代码解析

    万次阅读 多人点赞 2017-05-25 11:47:34
    谷歌董事长施密特曾说过:虽然谷歌的无人驾驶汽车和机器人受到了许多媒体关注,但是这家公司真正的未来在于机器学习,一种让计算机更聪明、更个性化的技术。 也许我们生活在人类历史上最关键的时期:从使用大型...
  • 利用高性能计算加速深度学习算法

    千次阅读 2018-02-07 16:09:42
    1. 深度学习  深度学习是机器学习研究中的一个新...(由于本人不是深度学习专业人士,对深度学习理论知识不多介绍,说多了就班门弄斧了,后面主要介绍下这些深度学习算法如何进行并行化设计和优化) 2. CPU+GP
  • 运用学习算法,利用所给的数据进训练,生成相应的模型。在面对新情况时,根据模型,给出正确的判断。 2、学习的定义 针对经验E (experience) 和一系列的任务 T (tasks) 和一定表现的衡量 P,如果随之经验E的积累...
  • 深度学习算法归类

    千次阅读 2017-03-02 20:57:01
    深度学习算法
  • tensorflow中的计算过程可以表示为一个计算图(Computation Graph)或有向图(Direction Graph)。计算图中每一个运算操作视为一个节点(Node),每个节点可以有任意个输入和任意个输出。如果一个运算的输入取值自另一个...
  • 前言 面的公司不多,基本都是提前批(找工作主要还是依靠提前批,坑多人少)。大多数时间都是在问简历相关的问题,基础知识和编程也涉及到一些,简单总结一下,也算回顾面试过程了。 面试题 ...
  • 公众号推荐推荐人/文文俗话说,一个人走得快,但一群人可以走的远。在数据科学和机器学习的道路上,相信每个人都不是闭门造车的人。技术学习除了在个人努力外,交流和分享也是很重要...
  • 深度学习算法评估指标

    千次阅读 2017-08-03 08:07:47
    一、精度: 检测到真实目标:检测到所有目标 二、召回率: 检测到真实目标:所有目标 三、精度-召回率曲线 四、平均精度: 精度-召回率曲线下的归一化面积 ...五、检测时间

空空如也

1 2 3 4 5 ... 20
收藏数 592,595
精华内容 237,038
关键字:

深度学习算法