作者:James Le编译:ronghuaiyang导读这10个算法(方法)可以说是目前深度学习中非常基础和出镜率非常高的算法和方法,关键是非常的有效,一起来看看吧!过去十年,人们对机器学习的兴趣激增。你几乎每天都能在计算机科学项目、行业会议和华尔街日报上看到机器学习。在所有关于机器学习的讨论中,许多人把它能做什么与希望它能做什么混为一谈。从根本上说,机器学习是利用算法从原始数据中提取信息,并用某种模型表示出来。我们使用这个模型来推断关于尚未建模的其他数据的信息。
神经网络是机器学习的一种模型,它们已经存在至少50年了。神经网络的基本单位是节点,它是模仿哺乳动物大脑中的生物神经元。神经元之间的连接也以生物大脑为模型,这些连接随着时间的推移而发展(通过“训练”)。
在20世纪80年代中期和90年代早期,神经网络在架构上取得了许多重要的进步。然而,获得良好结果所需的时间和数据减少了实用的速度,从而降低了人们对它的兴趣。在21世纪初,计算能力呈指数级增长,业界见证了计算技术的“寒武纪大爆发”,这在此之前是不可能的。深度学习(Deep learning)在那十年爆炸式的计算增长中脱颖而出,成为该领域的有力竞争者,赢得了许多重要的机器学习竞赛。截至2017年,投资者的兴趣并未降温,今天,我们在机器学习的每个角落都可以看到深度学习。
人工智能的领域很广,已经存在很长时间了。深度学习是机器学习领域的一个子集,机器学习是人工智能的一个子领域。深度学习网络与“古典的”前馈多层网络的区别在于:
- 比之前的网络更多的神经元
- 连接层的更复杂方法
- 有“寒武纪大爆炸”式的计算能力来进行训练
- 自动特征提取
当我说“更多的神经元”时,我的意思是神经元的数量在过去的几年里一直在上升,可以表达更复杂的模型。层也从多层网络中完全连接的每一层发展到卷积神经网络中各层之间神经元的局部连接块,再到循环神经网络中同一神经元的循环连接(除了前一层的连接)。
那么深度学习可以定义为以下四种基本网络架构之一的具有大量参数和层次的神经网络:
- 无监督预先训练网络
- 卷积神经网络
- 循环神经网络
- 递归神经网络
在这篇文章中,我主要对后3个架构感兴趣。卷积神经网络基本上是一个标准的神经网络,它使用共享的权值进行了跨空间的扩展。CNN的设计是通过内部的卷积来识别图像,卷积可以看到图像上识别的物体的边缘。循环神经网络基本上是一种标准的神经网络,它将输出送到下一个时间步而不是下一层。RNN用于识别序列,例如语音信号或文本。它内部有循环,这意味着网络中存在短时记忆。递归神经网络更像是一个层次网络,其中输入序列实际上没有时间的概念,但输入必须以树的方式分层处理。下面的10个方法可以应用于所有这些体系结构。
1 —反向传播反向传播只是计算函数的偏导数(或梯度)的一种方法,它的形式是函数的复合形式(如神经网络)。当你使用基于梯度的方法解决优化问题时(梯度下降只是其中之一),你需要在每次迭代中计算函数梯度。
对于神经网络,目标函数具有组合形式。如何计算梯度?有两种常见的方法:(i) 解析微分。你知道函数的形式。你只要用链式法则(基本微积分)计算导数就行了。(ii) 近似微分利用有限差分。这种方法的计算代价很高,因为函数求值的个数是O(N),其中N是参数的个数。与解析微分相比,这个计算代价是非常大的。然而,有限差分通常用于调试时验证反向传播的实现是不是正确。
2 — 随机梯度下降一种直观的方法来考虑梯度下降是想象一条河流的路径起源于山顶。坡度下降的目标正是这条河努力要达到的目标,即从山上爬下来,到达山脚的最低处。
现在,如果山的地形是这样形成的,在到达最终目的地(山脚的最低点)之前,河流不会在任何地方完全停止流动,那么这就是我们想要的理想情况。在机器学习中,这相当于说,我们已经从初始点(山顶)开始找到了解决方案的全局最小(或最优)。然而,有可能是地形的原因导致了河流的流经路径上有几个坑,这可能会使得河流的流动陷入困境并停滞不前。在机器学习术语中,这种凹坑被称为局部极小解,这是不可取的。有很多方法可以解决这个问题(我没有讨论这个问题)。
3 — 学习率下降
在随机梯度下降优化过程调整学习率可以提高性能并减少训练时间。有时这被称为“学习率退火”或“自适应学习率”。在训练过程中,对学习率的最简单、也许也是最常用的调整是随着时间的推移降低学习率的技术。当使用较大的学习率值时,这些方法可以在训练过程的开始时进行较大的更改,并降低学习率,从而在训练过程的后期对权重进行较小的更新,从而减少更新的次数。这样做的效果是,及早快速学习良好的权重,然后对其进行微调。
两种常用且易于使用的学习率衰减方案如下:
4 — Dropout
- 根据时间逐步降低学习速度。
- 在特定时间点对学习率进行大幅的下降。
具有大量参数的深度神经网络是非常强大的机器学习系统。然而,在这样的网络中,过拟合是一个严重的问题。大型的网络用起来往往很慢,这样的话,想通过对多个大型神经网络组合的方式来解决过拟合问题就非常困难了。Dropout是解决这个问题的一种技术。
其关键思想是,在训练过程中随机地从神经网络中删除单元(以及它们的连接)。这就避免了神经元之间的过度协作。在训练过程中,从指数数量的不同的“稀疏”网络对神经元进行dropout。在测试时,简单地使用具有较小权重的单个网络,就可以很容易地近似所有这些稀疏网络的预测平均值的效果。这大大减少了过拟合,与其他正则化方法相比有了很大的改进。Dropout在视觉、语音识别、文档分类和计算生物学等方面改善了神经网络在监督学习任务中的性能,在许多基准数据集上获得了最先进的结果。
5 — 最大池化Max池是一个基于采样的离散化过程。目标是对输入表示(图像、隐藏层输出矩阵等)进行下采样,降低其维数,并允许对被包含的特征的子区域做出估计。
这样做的部分原因是,通过提供一种抽象的表示形式来帮助减少过拟合。此外,它还通过减少要学习的参数的数量来降低计算成本,并为内部表示提供基本的平移不变性。最大池化是通过对通常是不重叠的子区域使用最大化滤波器来实现的。
6 — Batch Normalization神经网络包括深度网络都需要对权值初始化和学习参数进行仔细的调试,Batch Normalization可以使得对初始化和学习的要求放松一点。
权重问题:
无论初始化的权重是随机的还是经验选择的,它们都与学习的权重相差甚远。考虑一个mini batch,在初始阶段,在所需的特征激活方面会有许多异常值。
深度神经网络本身是不适定的,即初始层的一个小扰动会导致后一层的大变化。
在反向传播过程中,这些现象会对梯度造成干扰,这意味着在学习权重以产生所需输出之前,梯度必须对异常值进行补偿。这就需要额外的时间来收敛。
Batch normalization将这些梯度从分散的离群值变成归一化的值,并在mini batch的范围内让它们向共同的目标流动(通过对它们进行归一化)。
学习率问题:一般情况下,学习率保持在较小的范围内,只有很小一部分梯度可以修正权重,原因是异常激活的梯度不应该影响学习到的激活。通过Batch normalization,这些异常激活被减少,因此可以使用较高的学习率来加速学习过程。
7 — 长短时记忆Long Short-Term Memory:LSTM网络与递归神经网络中常见的神经元有以下三个不同之处:
- 它可以控制输入什么时候进入神经元
- 它可以控制何时记住上一个时间步骤中计算的内容
- 它可以控制何时将输出传递到下一个时间步
LSTM的美妙之处在于,它根据当前输入本身来决定这一切。
当前时间戳处的输入信号x(t)决定了以上3个点。输入门为点1做一个决定,忘记门在点2上做决定,输出门在点3上做决定。仅凭输入就能做出这三个决定。它的灵感来自于我们的大脑如何工作,以及如何处理基于输入的突然的上下文切换。
8 — Skip-gram:词嵌入模型的目标是学习每个词的高维的密集的表示,其中嵌入向量之间的相似性表示对应单词之间的语义或语法的相似性。Skip-gram是一种学习词嵌入算法的模型。
skip-gram模型(以及许多其他词嵌入模型)背后的主要思想如下:如果两个词共享相似的上下文,那么这两个词是相似的。
换句话说,假设你有一句话,像“猫是哺乳动物”。如果你用“狗”代替“猫”,这个句子仍然是一个有意义的句子。因此,在这个例子中,“狗”和“猫”可以共享相同的上下文(即“哺乳动物”)。
基于上述假设,你可以考虑一个上下文窗口(包含k个连续项的窗口)。然后你应该跳过其中一个单词,试着学习一个神经网络,它能得到所有的词,除了被跳过的那个,并预测被跳过的那个。因此,如果两个词在一个大型语料库中重复地共享相似的上下文,那么这些词的嵌入向量将具有相近的向量。
9 — 连续词袋模型:在自然语言处理问题中,我们希望将文档中的每个单词表示为一个数字向量,这样在类似上下文中出现的单词的向量就会非常接近。在连续词袋模型中,目标是能够使用特定单词周围的上下文并预测特定的单词。
我们通过在一个大语料库中使用很多很多的句子来做到这一点,每次我们看到一个单词,我们就使用周围的单词。然后我们将上下文单词输入神经网络,并预测该上下文中心的单词。
当我们有数千个这样的上下文单词和中心单词时,我们就有了神经网络数据集的一个实例。我们对神经网络进行训练,最后编码后的隐含层输出表示特定单词的嵌入。当我们对大量的句子进行训练时,在相似语境下的单词会得到相似的向量。
10 — 迁移学习:让我们考虑一下图像是如何通过卷积神经网络的。假设你有一个图像,你对它进行卷积,你得到像素的组合作为输出。假设它们是边缘。现在再次应用卷积,现在你的输出是边缘或者线的组合。现在再次应用卷积,你的输出是线的组合,等等。你可以把它想象成每一层都在寻找一个特定的模式。神经网络的最后一层会变得非常特殊。如果你在ImageNet上训练,你的网络的最后一层会寻找孩子、狗、飞机或其他东西。在后面几层,你可能会看到网络在寻找眼睛、耳朵、嘴巴或轮子。
深度CNN中的每一层都在逐步构建越来越高级的特征表示。最后两层往往专门处理你输入模型的随便什么数据。另一方面,早期的层更加通用,在更大的图片类中有很多简单的模式。
迁移学习就是说,你在一个数据集上训练CNN,去掉最后一层,然后在另一个数据集上重新训练模型的最后一层。直观地说,你是在对模型进行再训练,以识别不同的高级特征。因此,当你没有足够的数据或者训练需要太多的资源时,迁移学习是一个有用的工具。
深度学习非常注重技术。对于每一个新想法都没有太多具体的解释,大多数新想法的提出都附有实验结果,以证明它们是可行的。深度学习就像玩乐高。掌握乐高积木和其他艺术一样具有挑战性,但更容易入门。
英文原文:https://medium.com/cracking-the-data-science-interview/the-10-deep-learning-methods-ai-practitioners-need-to-apply-885259f402c1
更多文章,请关注AI公园
,