深度优先搜索的算法,深度优先搜索算法思想
在过去的十年里,人们对机器学习的兴趣经历了爆炸式的增长。我们几乎每天都能在计算机程序、行业会议和媒体上看到机器学习。很多关于机器学习的讨论把“机器学习能做什么”和“人类希望机器学习做什么”混为一谈。机器学习从根本上来说,就是用算法从原始数据中提取信息,用某一类模型表示出来,然后用模型推断出一些其他没有被模型表示过的数据。
神经网络是机器学习的各种模型之一,它已经存在了至少50年。神经网络的基本单元是节点,其思想大致来源于哺乳动物大脑中的生物神经元。大脑中神经元之间的链接是随着时间不断进化的,神经网络中神经元的链接也从这一点学习,并将继续进化(通过“训练”)。
神经网络的许多重要框架的建立和完善是在20世纪80年代中期和90年代初完成的。但是,要得到一个好的结果,需要大量的时间和数据。当时由于计算机能力有限,一定程度上阻碍了神经网络的发展,人们的关注度也随之下降。21世纪初,计算机的计算能力成倍增长,业界见证了计算机技术发展的“寒武纪大爆发”,这在以前是不可想象的。深度学习作为一个竞争者出现,在计算能力爆炸式增长的十年中脱颖而出,赢得了许多重要的机器学习比赛。2017年其热度依然不减。如今,在机器学习出现的地方,随处可见深度学习的身影。
这是我自己做的一个小例子,词向量的t-SNE投影,按相似度聚类。
最近开始看深度学习的学术论文。根据我个人的研究,以下文章对这个领域的发展产生了很大的影响:
1998年,NYU的文章《基于梯度学习的文档识别》(基于梯度的学习应用于文档识别)介绍了卷积神经网络在机器学习中的应用。
Toronto在2009年的文章《深度传统的戒指器》(Deep Boltzmann Machines)提出了一种新的传统环的学习算法,这种环包含许多隐藏层。
斯坦福和Google 2012联合发表的文章《使用大规模非监督学习构建高层特征》(使用大规模无服务学习构建高级特征)解决了仅使用未标记数据构建高级、特殊类特征检测器的问题。
Berkeley 2013文章《用于一般视觉识别的深层卷积激活特征》 (DeCAF ——A通用视觉识别的深度卷积激活特性)发表了一个名为DeCAF的算法,它是深度卷积激活特性的开源实现。利用相关网络参数,视觉研究者可以利用一系列视觉概念学习实例进行深入实验。
DeepMind 2016文章《用深度强化学习玩Atari》(用深度强化学习玩雅达利)提出了第一个深度学习模型,可以通过强化学习成功地直接从高维的感觉输入中学习控制策略。
整理出人工智能工程师解决机器学习问题的十种强有力的深度学习方法。但是,我们首先需要定义什么是深度学习。
如何定义深度学习对很多人来说都是一个挑战,因为它的形式在过去十年里变化很慢。下图直观地展示了人工智能、机器学习和深度学习之间的关系。
人工智能的领域很广,也存在很久了。深度学习是机器学习的子集,而机器学习是人工智能的子集。一般的深度学习网络和“典型的”前馈多层网络从以下几个方面进行区分:
深度学习网络比前馈网络具有更多的神经元,并且深度学习网络的层间方式更加复杂。深度学习网络需要寒武纪大爆发一样的计算能力进行训练,深度学习网络可以自动提取特征。上面所说的“神经元更多”是指近年来神经元的数量一直在增加,因此可以用更复杂的模型来表示。各层也从多层网络中的每一层完全连接,发展到卷积神经网络中神经元段的局部连接,循环连接递归神经网络中的同一神经元(除了与上一层的连接)。
因此,深度学习可以定义为在以下四个基本网络框架中具有大量参数和层数的神经网络:
无监督预训练网络卷积神经网络递归神经网络
在本文中,我主要讨论三个框架:
卷积神经网络基本上是一个标准的神经网络,它在空间中以共享的权重扩展。卷积神经网络主要通过内部卷积来识别图片,可以看到图像上被识别物体的边缘。
递归神经网络基本上是随时间扩展的标准神经网络。它提取下一个时间步长的边缘,而不是同时进入下一层。递归神经网络主要用于识别序列,例如语音信号或文本。它的内循环意味着网络中存在短时记忆。
递归神经网络更类似于分层网络,其输入序列没有实时平面,但必须以树状方式进行分层处理。以下10种方法可以适用于这些框架。
1.反向传播反向传播是一种计算函数偏导数(或梯度)的简单方法。其形式是函数组合(如神经网络)。用基于梯度的方法求解优化问题时(梯度下降只是其中之一),每次迭代都需要计算泛函梯度。
对于一个神经网络,它的目标函数是一个组合形式。那么梯度应该怎么算呢?有两种通用方法:
(1)微分分析法。当函数的形式已知时,只需要链式法则(基础微积分)来计算导数。
(2)有限差分法近似微分。这种方法是计算密集型的,因为函数求值的数量级是O(N),其中N是参数的数量。与微分分析法相比,这种方法需要更多的计算量,但在调试时,通常用有限差分来验证反向传播的效果。
2.随机梯度下降对梯度下降的直观理解是想象一条河流从山顶流下。河水会顺着山的方向流到山麓的最低点,这就是梯度下降法的目标。
我们所期望的理想情况是,河水在到达最终目的地(最低点)之前不会停止。在机器学习中,这相当于我们找到了从初始点(山顶)行走的全局最小值(或最优值)。但是,由于地形的原因,河流的路径可能会有许多坑洼,从而使河流停滞不前。在机器学习术语中,这种坑坑洼洼被称为局部最优解,而这并不是我们想要的结果。有许多方法可以解决局部优化问题。
因此,由于地形(即函数性质)的限制,梯度下降算法容易陷入局部极小。但是,如果我们能找到一个特殊的山形(比如一个碗,术语是凸函数),那么算法总能找到最佳的优势。在优化的时候,遇到这些特殊地形(凸函数)自然是最好的。另外,山顶的初始位置(也就是函数的初值)不同,到山下的路径也完全不同。同样,不同的流量(即梯度下降算法的学习速率或步长)也会导致到达目的地的方式不同。你是否会掉进或避开一个坑洞(局部最小值)会受到这两个因素的影响。
3.学习率衰减调整随机梯度下降优化算法的学习率,以提高性能和减少训练时间。这被称为学习率退火或自适应学习率。训练中最简单也是最常用的学习率自适应方法就是逐渐降低学习率。在训练初期使用较大的学习率,可以大大调整学习率;训练后期,降低学习率,以较小的速率更新权重。这种方法可以在前期快速学习得到更好的权重,后期对权重进行微调。
两种流行且简单的学习率衰减方法如下:
逐步线性降低学习率,在特定时间大幅降低学习率。4.具有大量辍学参数的深度神经网络是一个非常强大的机器学习系统。然而,在这样的网络中,过拟合是一个严重的问题。而且大规模网络的运行速度很慢,很难在测试阶段通过组合多个不同大规模神经网络的预测来解决过拟合问题。退学法可以解决这个问题。
主要思想是在训练过程中从神经网络中随机删除单元(和相应的连接),以防止单元之间的过度适应。在训练过程中,样本从具有指数不同的“稀疏度”的网络中移除。在测试阶段,通过使用单个权重较小的未缠绕网络,对这些稀疏网络的预测结果进行平均,就可以很容易地进行近似。该方法能有效避免过拟合,与其他正则化方法相比,能提高性能。在计算机视觉、语音识别、文本分类和计算生物学等领域,Dropout技术已被证明可以提高神经网络在监督学习任务中的性能,并在多个基准数据集上取得最佳结果。
5.最大池最大池是一种基于样本的离散化方法。目标是对输入表示(图像、隐藏层输出矩阵等)进行下采样。),减少维度并允许关于子区域中的特征的假设。
通过提供一种抽象表示,该方法可以在一定程度上解决过拟合问题。类似地,它还通过减少学习参数的数量和提供内部表示变换的基本不变性来减少计算量。最大池是通过将最大值滤波器应用于初始特征化子区域来实现的,这些子区域通常不重叠。
6.批量标准化。当然,包括深度网络在内的神经网络需要仔细调整初始权值和学习参数。批量标准化可以使这个过程变得更容易。
重量问题:
无论如何设置初始权值,如随机选择或经验选择,初始权值和学习后的权值都有很大的不同。考虑到少量的权重,在开始时,对于所需的特征激活,可能存在许多异常值。
深度神经网络本身就是病态的,即初始层的小变化会导致后面一层的大变化。
在反向传播的过程中,这些现象会导致梯度的偏差,这意味着梯度必须先补偿异常值,然后学习权值才能产生所需的输出。这将导致额外的收敛时间。
批量标准化将这些梯度从异常值调整到正常值,并使其在小批量范围内收敛到一个共同的目标(通过标准化)。
学习率问题:
一般来说,学习速率相对较低,以至于只有一小部分梯度用于校正权重,因为异常激活的梯度不应该影响已经学习的权重。
通过批量标准化,这些异常激活的可能性会降低,可以用更高的学习率来加快学习过程。
7.长期和短期记忆LSTM和其他循环神经网络中的神经元有以下三个不同之处:
它可以决定何时让输入进入神经元。
它可以决定何时记住上一时间步中计算的内容。
LSTM可以决定何时将输出传递给下一个时间戳,它的强大之处在于,它可以仅根据当前输入来决定上述所有内容。请看下面的图表:
当前时间戳的输入信号x(t)决定了上述三点。
输入门确定第一点,遗忘门确定第二点,输出门确定第三点。这三个决定只能通过输入来做出。这是受大脑工作机制的启发,大脑可以根据输入处理突然的上下文切换。8.Skip-gram单词嵌入模型的目的是为每个单词学习一个高维稠密表示,其中嵌入向量之间的相似度表示对应单词之间的语义或句法相似度。Skip-gram是学习单词嵌入算法的模型。skip-gram模型(包括许多其他单词嵌入模型)背后的主要思想是,如果两个词汇项具有相似的上下文,则它们是相似的。
换句话说,假设有一句话,比如“猫是哺乳动物”。如果用“狗”代替“猫”,句子还是有道理的。因此,在这个例子中,“狗”和“猫”具有相似的上下文(即,“是母亲”)。
基于上述假设,我们可以考虑一个上下文窗口(包含k个连续项)。然后跳过其中一个单词,尝试学习一个神经网络,它可以得到除跳过的单词之外的所有单词,并预测跳过的单词。因此,如果两个词在大型语料库中多次出现相似的上下文,那么这些词的嵌入向量就会相似。
9.连续词袋模型在自然语言处理中,我们要把文档中的每一个词都表示成一个数值向量,使出现在相似上下文中的词有相似或相近的向量表示。在连续单词袋模型中,我们的目标是使用特定单词的上下文来预测该单词。
首先,从一个大的语料库中抽取大量的句子,抽取你看到的每个单词的上下文。然后,我们将上下文单词输入到神经网络中,并预测位于该上下文中心的单词。
当我们有数千个这样的上下文词和中心词时,我们得到了一个神经网络数据集的例子。然后我们对这个神经网络进行训练,在编码隐层的最终输出中,得到特定单词的嵌入表达。当我们对大量的句子进行训练的时候,也可以发现相似上下文中的单词可以得到相似的向量。
10.迁移学习让我们考虑卷积神经网络如何处理图像。假设有一个图像,对其应用卷积,得到像素的组合作为输出。假设这些输出是边,并且再次应用卷积,则当前输出将是边或线的组合。然后再次应用卷积,此时的输出将是线条的组合,以此类推。把它想象成在每一层寻找一个特定的模式。神经网络的最后一层通常会变得非常特殊。
如果训练是基于ImageNet,那么最后一层神经网络可能在寻找孩子、狗或飞机的完整图像。再往回走几层,你可能会看到神经网络在寻找眼睛、耳朵、嘴巴或轮子等组件。
深度卷积神经网络的每一层逐渐建立越来越高水平的特征表示,并且最后一层通常专用于输入数据。另一方面,前面一层比较通用,主要用于在一大类图片中寻找很多简单的图案。
学习就是在一个数据集上训练卷积神经网络时,去掉最后一层,在不同的数据集上重新训练模型的最后一层。直观来说就是重新训练模型来识别不同的高级特性。所以训练时间会减少很多,所以在没有足够数据或者需要太多资源的情况下,迁移学习是一个非常有用的工具。
总结:深度学习非常注重技术实践,所谓“眼见为实”。当然,这里说的还是很肤浅的。如果能引起朋友们对深度学习的兴趣,我会觉得很开心。
结尾给大家推荐一个非常好的学习教程,希望对你学习Python有帮助!
Python基础入门教程推荐:更多Python视频教程——关注哔哩哔哩:Python学习者
【python教程】全网最易懂的1000集Python系统学习教程(最后四期问答,满满干货)
Python案例教程推荐:更多Python视频教程——关注哔哩哔哩:Python学习者
2021 Python最新最全的100个爬虫完整案例教程,数据分析,数据可视化,记得收藏!
如何在CSS中设置div滚动条的样式
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。