在过去十年中,人们对机器学习的兴趣激增。几乎天天,咱们均可以在各类各样的计算机科学课程、行业会议、华尔街日报等等看到有关机器学习的讨论。在全部关于机器学习的讨论中,许多人把机器学习能作的事情和他们但愿机器学习作的事情混为一谈。从根本上讲,机器学习是使用算法从原始数据中提取信息,并在某种类型的模型中表示这些信息。咱们使用这个模型来推断尚未建模的其余数据。html
神经网络是机器学习的一种模型,它们至少有50年历史了。神经网络的基本单元是节点(node),基本上是受哺乳动物大脑中的生物神经元启发。神经元之间的链接也以生物的大脑为模型,这些链接随着时间的推移而发展的方式是为“训练”。node
在20世纪80年代中期和90年代初期,许多重要的模型架构进步都是在神经网络中进行的。然而,为了得到良好性能所需的时间和数据愈来愈多,这极大的下降了研究人员的兴趣。在21世纪初期,计算能力呈指数级增加,研究人员看到了计算机技术的“寒武纪爆发”。做为该领域的一个重要竞争者——深度学习,由于计算能力的爆炸式增加,赢得了许多重要的机器学习竞赛。截至目前,这种趋势仍然没有减退;今天,咱们看到机器学习的每一个角落都提到了深度学习。git
最近,我开始阅读有关该深度学习的学术论文。根据个人研究,如下是一些对该领域的发展产生巨大影响的出版物:github
经过研究和学习论文,我学到了不少关于深度学习的丰富知识。在这里,我想分享AI工程师能够应用于机器学习问题的10种强大的深度学习方法。但首先,让咱们来定义深度学习是什么。深度学习对于许多人来讲是一个挑战,由于它的形式在过去十年中逐渐发生了改变。为了向各位更好的说明深层学习的地位,下图说明了人工智能,机器学习和深度学习之间关系的概念。算法
人工智能领域很普遍,而且已经存在了很长时间。深度学习是机器学习领域的一个子集,而机器学习只是人工智能的一个子领域。将深度学习网络与以前的前馈多层网络进行区分:数组
当我说到“更多神经元”时,是指近年来神经元的数量不断增长,深度学习就能够表示更为复杂的模型。层也从多层网络中每一层的彻底链接,进化成卷积神经网络中神经元片断的局部链接,以及与递归神经网络中的同一神经元的循环链接(与前一层的链接除外)。网络
深度学习能够被定义为具备大量参数和层数的神经网络:架构
在这篇文章中,我主要对后三种网络进行讲解。卷积神经网络(CNN)基本上式已经跨越使用共享权重的空间延伸的标准神经网络。CNN旨在经过在内部的卷积来识别图像,该卷积看到图像上识别对象的边缘。递归神经网络基本上是一个使用时间延伸扩展空间的标准神经网络,它提取进入下一时间步的边沿,而不是在同一时间进入下一层。RNN进行序列识别,例如语音或文本信号,因其内部具备循环,意味着在RNN网络中存在短时记忆。递归神经网络更相似于分层网络,其中输入序列实际上与时间无关,但输入必须以树状方式分层处理。下面的10种方法能够应用于全部这些架构。app
Back-prop反向传播只是一种简单计算函数的偏导数的方法,它具备函数组合的形式(如神经网络中)。当你使用基于梯度的方法解决最优化问题(梯度降低只是其中之一)时,你但愿在每次迭代时计算函数渐变,这个时候它即可以发挥做用。机器学习
对于神经网络,其目标函数具备组合的形式。你如何计算梯度?有两种常见的方法能够作到:
想象梯度降低的直观方式是想象一条源自山顶的河流的路径。梯度降低的目标正是河流努力实现的目标,即从山顶流到最低点。
如今,若是山的地形形状使得河流在到达其最终目的地以前没必要彻底停在任何地方,这是咱们想要的理想状况。在机器学习中,这至关于说,咱们已经从初始点(山顶)开始找到解决方案的全局最小值(或最优值)。然而,可能因为地形性质,致使河流路径出现若干的坑洼,会迫使河流困住和停滞。在机器学习方面,这种坑洼被称为局部最优解,这是咱们不想要的状况。固然有不少方法能够解决局部最优解问题,这里我不打算进一步讨论。
所以,梯度降低倾向于陷入局部最小值,这取决于地形的性质(或ML术语中的函数)。可是,当你有一种特殊的山地形状(形状像一个碗,用ML术语称为凸函数)时,算法始终可以找到最优值。你能够想象将这条河流可视化。在机器学习中,这些特殊的地形(也称为凸函数)老是须要优化的。另外,你从山顶开始(即函数的初始值)的位置不一样,最终你到达山底的路径也彻底不一样。一样,根据河流的流淌速度(即梯度降低算法的学习速率或步长),你可能会以不一样的方式到达目的地。你是否会陷入或避免一个坑(局部最小),都会被这两个标准影响。
调整随机梯度降低优化程序的学习速率能够提升性能并缩短训练时间。有时这也被称为学习率退火或自适应学习率。在训练期间最简单且最经常使用的学习率调整是随时间下降学习率的技术。在训练初期使用较大的学习速率值,能够对学习速率进行大幅调整;在训练后期,下降学习速率,使模型以一个较小的速率进行权重的更新。这种技术在早期能够快速学习得到一些较好的权重,并在后期对权重进行微调。
两种流行且易于使用的学习率衰减以下:
具备大量参数的深度神经网络是很是强大的机器学习系统。然而,过分拟合是这种网络中的严重问题。大型网络使用起来也很慢,所以在测试时将许多不一样的大型神经网络的预测结合起来很难处理过分拟合。Dropout就是一种解决此问题的技术。
关键思想是在训练期间从神经网络中随机删除单元及其链接,这能够防止单元间的过分适应。在训练期间,从指数数量的不一样“稀疏”网络中抽取样本。在测试时,经过简单地使用具备较小权重的单解开网络(untwinednetwork),很容易近似平均全部这些稀疏网络以达到预测的效果。这显着减小了过分拟合,而且比其余正则化方法表现的更好。Dropout已被证实能够改善神经网络在计算机视觉,语音识别,文档分类和计算生物学等领域的监督学习任务的性能,并在许多基准数据集上得到最早进的结果。
最大池化是基于样本的离散化过程。目的是对输入表示(图像、隐藏层输出矩阵等)进行下采样,经过下降其维数并容许对包含在子区域中的特征进行合并。
经过提供表征的抽象形式,这种方法在某种程度上有助于解决过拟合。一样,它也经过减小学习参数的数量和提供基本的内部表征的转换不变性来减小计算量。最大池化是经过将最大过滤器应用于一般不重叠的初始表征子区域来完成的。
固然,包括深度网络在内的神经网络须要仔细调整权重初始化和学习参数。批量归一化有助于让中国过程更简单一点。
在反向传播期间,这些现象会致使梯度偏移,这意味着在学习权重以产生所需输出以前,梯度必须补偿异常值。这也将致使须要额外的时间来收敛。
批量归一化将这些梯度从离散规则化为正常值,并在小批量的范围内朝向共同目标(经过归一化它们)流动。
一般,学习率保持较小,使得只有一小部分的梯度用来校订权重,缘由是异常激活的梯度不该该影响已经学习好的权重。经过批量归一化,这些异常值被激活的可能性就会减小,所以可使用更高的学习率来加速学习过程。
LSTM网络具备如下三个方面,使其与递归神经网络中的常规神经元区分开来:
LSTM的优势在于它根据当前输入自己决定全部这些,以下图所示:
当前时间戳处的输入信号x(t)决定全部上述3个点。输入门决定点1.遗忘门在点2上作出决定,输出门在点3上作出决定。输入门能单独可以作出这三个决定。这受到了咱们的大脑是如何工做的启发,而且能够处理忽然的上下文切换。
词嵌入模型的目标是为了每一个词汇学习一个高维密集表征,其中嵌入向量之间的类似性显示了相应单词之间的语义或句法类似性。Skip-gram是学习词嵌入算法的模型。
skip-gram模型(以及许多其余词嵌入模型)背后的主要思想以下:若是两个词汇有类似的上下文,则它们是类似的。
换句话说,假设你有一句话,好比“猫是哺乳动物”。若是你使用术语“狗”而不是“猫”,句子仍然是一个有意义的句子。所以在该示例中,“狗”和“猫”能够共享相同的背景(即“是哺乳动物”)。
基于上述假设,你能够考虑一个上下文窗口(一个包含k个连续术语的窗口)。而后你应该跳过其中一个单词,并尝试学习除了跳过的一个术语以外的全部术语并预测跳过的术语的神经网络。所以若是两个单词在大型语料库中重复地共享类似的上下文,那些这些术语的嵌入向量将具备类似的向量。
在天然语言处理问题中,咱们但愿学习将文档中的每一个单词表示为数字向量,使得出如今类似上下文中的单词具备彼此接近的向量。在连续词袋模型中,目标是可以使用围绕特定单词的上下文并预测特定单词。
咱们经过在一个大型语料库中抽取大量句子来作到这一点,每次看到一个单词时,咱们都会使用其上下文单词。而后咱们将上下文单词输入到一个神经网络中,并预测该上下文中心的单词。
当咱们有数千个这样的上下文单词和中心单词时,咱们就有一个神经网络数据集的实例。咱们训练神经网络,在通过编码的隐藏层的输出表示特定单词的嵌入。碰巧的是,当咱们在大量句子上训练时,相似上下文中的单词会获得相似的向量。
考虑下图像是如何经过卷积神经网络的。假设你有一个图像,你应用卷积,你获得像素组合做为输出。若是碰到了边缘,则再次应用卷积,因此如今输出是边或线的组合。而后再次应用卷积,此时的输出将是线的组合,依此类推。你能够将其视为每一个层寻找特定模式。神经网络的最后一层每每变得很是专业。若是你正在使用ImageNet,那么你的网络最后一层将寻找儿童或狗或飞机或其余什么。再后退几层你可能会看到网络正在寻找眼睛或耳朵或嘴或轮子。
深度CNN中的每一个层逐渐创建了更高和更高级别的特征表征。最后几层每每专一于你输入模型的任何数据。另外一方面,早期的图层更通用,是在更大类的图片中找到不少简单的模式。
迁移学习是指你在一个数据集上训练CNN,切断最后一层,在其余不一样的数据集上从新训练模型的最后一层。直观地说,你正在从新训练模型以识别不一样的更高级别的功能。所以,模型训练的时间会大大减小,所以当你没有足够的数据或者训练所需的太多资源时,迁移学习是一种有用的工具。
本文仅显示这些方法的通常概述。我建议阅读如下文章以得到更详细的解释:
Andrew Beam的“深度学习101”;
资源连接: http://beamandrew.github.io/deeplearning/2017/02/23/deep_learning_101_part1.html
安德烈库林科夫的“神经网络与深度学习简史”;
资源连接: http://www.andreykurenkov.com/writing/a-brief-history-of-neural-nets-and-deep-learning/
Adit Deshpande的“理解卷积神经网络的初学者指南”;
克里斯奥拉的“理解LSTM网络”;
资源连接: http://colah.github.io/posts/2015-08-Understanding-LSTMs/
Algobean的“人工神经网络”;
Andrej Karpathy的“回归神经网络的不合理有效性”;
资源连接: http://karpathy.github.io/2015/05/21/rnn-effectiveness/
深度学习是很是注重技术实践的。本文中的每一个新想法都没有太多具体的解释。对于大多数新想法都附带了实验结果来证实它们可以运做。深度学习就像玩乐高,掌握乐高与任何其余艺术同样具备挑战性,但相比之下入门乐高是容易的。
以上为译文。