AI从业者需要应用的10种深度学习方法(上)
摘要: 想要了解人工智能,不知道这十种深度学习方法怎么能行?
在过去十年中,人们对机器学习的兴趣激增。几乎每天,我们都可以在各种各样的计算机科学课程、行业会议、华尔街日报等等看到有关机器学习的讨论。在所有关于机器学习的讨论中,许多人把机器学习能做的事情和他们希望机器学习做的事情混为一谈。从根本上讲,机器学习是使用算法从原始数据中提取信息,并在某种类型的模型中表示这些信息。我们使用这个模型来推断还没有建模的其他数据。
神经网络是机器学习的一种模型,它们至少有50年历史了。神经网络的基本单元是节点(node),基本上是受哺乳动物大脑中的生物神经元启发。神经元之间的连接也以生物的大脑为模型,这些连接随着时间的推移而发展的方式是为“训练”。
在20世纪80年代中期和90年代初期,许多重要的模型架构进步都是在神经网络中进行的。然而,为了获得良好性能所需的时间和数据越来越多,这极大的降低了研究人员的兴趣。在21世纪初期,计算能力呈指数级增长,研究人员看到了计算机技术的“寒武纪爆发”。作为该领域的一个重要竞争者——深度学习,因为计算能力的爆炸式增长,赢得了许多重要的机器学习竞赛。截至目前,这种趋势仍然没有减退;今天,我们看到机器学习的每个角落都提到了深度学习。
为了让自己赶上潮流,我参加了Udacity的“深度学习”的课程,这个课程很好的介绍了深度学习的动机以及如何从TensorFlow中学习对大规模数据集学习的智能系统设计介绍。在课堂上,我开发了用于图像识别的卷积神经网络、用于自然语言处理的嵌入式神经网络,以及使用循环神经网络/长短期记忆网络的字符级文本生成。你们可以在Jupiter Notebook适用代码,所有代码都能在这个GitHub存储库中找到。
最近,我又开始阅读有关该深度学习的学术论文。根据我的研究,以下是一些对该领域的发展产生巨大影响的出版物:
· 纽约大学基于梯度的学习应用于文档识别(1998),它将卷积神经网络引入机器学习世界。
· 多伦多大学的Deep Boltzmann Machines(2009),它为Boltzmann机器提供了一种新的学习算法,包含许多隐藏变量层。
· 斯坦福和谷歌使用大规模无监督学习构建高级功能(2012),解决了仅使用未标记数据构建高级,类特定功能检测器的问题。
· Berkeley的DeCAF-一种用于通用视觉识别的深度卷积激活功能(2013),它发布了DeCAF,这是一种深度卷积激活功能的开源实现,以及所有相关的网络参数,使视觉研究人员能够进行深度实验跨越一系列视觉概念学习范例的表示。
· DeepMind使用Deep Reinforcement Learning(2016)播放Atari,它提供了第一个深度学习模型,可以使用强化学习直接从高维感觉输入成功学习控制策略。
通过研究和学习论文,我学到了很多关于深度学习的丰富知识。在这里,我想分享AI工程师可以应用于机器学习问题的10种强大的深度学习方法。但首先,让我们来定义深度学习是什么。深度学习对于许多人来说是一个挑战,因为它的形式在过去十年中逐渐发生了改变。为了向各位更好的说明深层学习的地位,下图说明了人工智能,机器学习和深度学习之间关系的概念。
人工智能领域很广泛,并且已经存在了很长时间。深度学习是机器学习领域的一个子集,而机器学习只是人工智能的一个子领域。将深度学习网络与之前的前馈多层网络进行区分:
• 深度学习比以前的网络更多的神经元;
• 深度学习中有更复杂的连接层的方式;
• “寒武纪爆炸”的提供的计算能力;
• 深度学习可以自动进行特征提取。
当我说到“更多神经元”时,是指近年来神经元的数量不断增加,深度学习就可以表示更为复杂的模型。层也从多层网络中每一层的完全连接,进化成卷积神经网络中神经元片段的局部连接,以及与递归神经网络中的同一神经元的循环连接(与前一层的连接除外)。
深度学习可以被定义为具有大量参数和层数的神经网络:
• 无人监督的预训练网络;
• 卷积神经网络;
• 循环神经网络;
• 递归神经网络。
在这篇文章中,我主要对后三种网络进行讲解。卷积神经网络(CNN)基本上式已经跨越使用共享权重的空间延伸的标准神经网络。CNN旨在通过在内部的卷积来识别图像,该卷积看到图像上识别对象的边缘。递归神经网络基本上是一个使用时间延伸扩展空间的标准神经网络,它提取进入下一时间步的边沿,而不是在同一时间进入下一层。RNN进行序列识别,例如语音或文本信号,因其内部具有循环,意味着在RNN网络中存在短时记忆。递归神经网络更类似于分层网络,其中输入序列实际上与时间无关,但输入必须以树状方式分层处理。下面的10种方法可以应用于所有这些架构。
1-反向传播
Back-prop反向传播只是一种简单计算函数的偏导数的方法,它具有函数组合的形式(如神经网络中)。当你使用基于梯度的方法解决最优化问题(梯度下降只是其中之一)时,你希望在每次迭代时计算函数渐变,这个时候它便可以发挥作用。
对于神经网络,其目标函数具有组合的形式。你如何计算梯度?有两种常见的方法可以做到:(i)分析微分法。如果你知道函数的形式,你只需使用链式规则(基本微积分)计算导数。(ii)有限差分的近似微分。该方法在计算上是昂贵的,因为评估函数的数量是O(N),其中N是参数的数量。与解析微分相比,这种方法的计算成本是昂贵的。在调试时,通常使用有限差分验证反向传播的执行效果。
2-随机梯度下降
想象梯度下降的直观方式是想象一条源自山顶的河流的路径。梯度下降的目标正是河流努力实现的目标,即从山顶流到最低点。
现在,如果山的地形形状使得河流在到达其最终目的地之前不必完全停在任何地方,这是我们想要的理想情况。在机器学习中,这相当于说,我们已经从初始点(山顶)开始找到解决方案的全局最小值(或最优值)。然而,可能由于地形性质,导致河流路径出现若干的坑洼,会迫使河流困住和停滞。在机器学习方面,这种坑洼被称为局部最优解,这是我们不想要的情况。当然有很多方法可以解决局部最优解问题,这里我不打算进一步讨论。
因此,梯度下降倾向于陷入局部最小值,这取决于地形的性质(或ML术语中的函数)。但是,当你有一种特殊的山地形状(形状像一个碗,用ML术语称为凸函数)时,算法始终能够找到最优值。你可以想象将这条河流可视化。在机器学习中,这些特殊的地形(也称为凸函数)总是需要优化的。另外,你从山顶开始(即函数的初始值)的位置不同,最终你到达山底的路径也完全不同。同样,根据河流的流淌速度(即梯度下降算法的学习速率或步长),你可能会以不同的方式到达目的地。你是否会陷入或避免一个坑(局部最小),都会被这两个标准影响。
3-学习速率衰减
调整随机梯度下降优化程序的学习速率可以提高性能并缩短训练时间。有时这也被称为学习率退火或自适应学习率。在训练期间最简单且最常用的学习率调整是随时间降低学习率的技术。在训练初期使用较大的学习速率值,可以对学习速率进行大幅调整;在训练后期,降低学习速率,使模型以一个较小的速率进行权重的更新。这种技术在早期可以快速学习获得一些较好的权重,并在后期对权重进行微调。
两种流行且易于使用的学习率衰减如下:
• 在每个环节逐渐降低学习率。
• 在特定时期使用大幅下降来降低学习速率。
4-Dropout
具有大量参数的深度神经网络是非常强大的机器学习系统。然而,过度拟合是这种网络中的严重问题。大型网络使用起来也很慢,因此在测试时将许多不同的大型神经网络的预测结合起来很难处理过度拟合。Dropout就是一种解决此问题的技术。
关键思想是在训练期间从神经网络中随机删除单元及其连接,这可以防止单元间的过度适应。在训练期间,从指数数量的不同“稀疏”网络中抽取样本。在测试时,通过简单地使用具有较小权重的单解开网络(untwinednetwork),很容易近似平均所有这些稀疏网络以达到预测的效果。这显着减少了过度拟合,并且比其他正则化方法表现的更好。Dropout已被证明可以改善神经网络在计算机视觉,语音识别,文档分类和计算生物学等领域的监督学习任务的性能,并在许多基准数据集上获得最先进的结果。
5-最大池化
最大池化是基于样本的离散化过程。目的是对输入表示(图像、隐藏层输出矩阵等)进行下采样,通过降低其维数并允许对包含在子区域中的特征进行合并。
通过提供表征的抽象形式,这种方法在某种程度上有助于解决过拟合。同样,它也通过减少学习参数的数量和提供基本的内部表征的转换不变性来减少计算量。最大池化是通过将最大过滤器应用于通常不重叠的初始表征子区域来完成的。
下期我们将介绍另外五种,敬请期待!
本文作者:【方向】
本文为云栖社区原创内容,未经允许不得转载。