‘壹’ 怎样理解深度优先算法和广度优先算法
胡说八道.... 深度优先:前序遍历 广度优先:按层遍历
‘贰’ 常见的深度学习算法主要有哪些
深度学习常见的3种算法有:卷积神经网络、循环神经网络、生成对抗网络。
卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习的代表算法之一。
循环神经网络(Recurrent Neural Network, RNN)是一类以序列数据为输入,在序列的演进方向进行递归且所有节点(循环单元)按链式连接的递归神经网络。
生成对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型,是最近两年十分热门的一种无监督学习算法。
‘叁’ 什么是深度学习
随着阿尔法狗、无人驾驶、智能翻译的横空出世,“人工智能”这个已经存在60多年的词语,仿佛一夜之间重新成为热词。同时被科技圈和企业界广泛提及的还有“机器学习”“深度学习”“神经网络”…… 但事实是,如此喧嚣热烈的气氛之下,大部分人对这一领域仍是一知半解。
如果要说谁有资格谈论目前正在进行的“人工智能革命”,特伦斯·谢诺夫斯基(Terry Sejnowski)必然是其中一个。
在智能翻译、无人驾驶、阿尔法狗、微软小冰还被认为是远在天边的愿景时,谢诺夫斯基就已经在为深度学习领域奠定基础了。
《深度学习:智能时代的核心驱动力量》
中信出版集团 2019.2
Q:首先,我想问一下定义。人们几乎可以互换地使用“人工智能”,“神经网络”,“深度学习”和“机器学习”等词语。 但这些是不同的东西。你能解释一下吗?
人工智能可以追溯到1956年的美国,那时工程师们决定编写一个试图仿效智能的计算机程序。
在人工智能中,一个新领域成长起来,称为机器学习。不是编写一个按部就班的程序来做某事——这是人工智能中的传统方法——而是你收集了大量关于你试图理解的事物的数据。例如,设想您正在尝试识别对象,因此您可以收集大量它们的图像。然后,通过机器学习,这是一个可以剖析各种特征的自动化过程,就可以确定一个物体是汽车,而另一个是订书机。
机器学习是一个非常大的领域,其历史可以追溯到更久远的时期。最初,人们称之为“模式识别”。后来算法在数学上变得更加广泛和复杂。
在机器学习中有受大脑启发的神经网络,然后是深度学习。深度学习算法具有特定的体系结构,其中有许多层数据流经的网络。
基本上,深度学习是机器学习的一部分,机器学习是人工智能的一部分。
Q: 有什么“深度学习”能做而其他程序不能做的吗?
编写程序非常耗费人力。在过去,计算机是如此之慢,内存非常昂贵,以至于人们采用逻辑,也就是计算机的工作原理,来编写程序。他们通过基础机器语言来操纵信息。计算机太慢了,计算太贵了。
但现在,计算力越来越便宜,劳动力也越来越昂贵。而且计算力变得如此便宜,以至于慢慢地,让计算机学习会比让人类编写程序更有效。在那时,深度学习会开始解决以前没有人编写过程序的问题,比如在计算机视觉和翻译等领域。
机器学习是计算密集型的,但你只需编写一个程序,通过给它不同的数据集,你可以解决不同的问题。并且你不需要是领域专家。因此,对于存在大量数据的任何事物,都有对应的大量应用程序。
Q:“深度学习”现在似乎无处不在。 它是如何变得如此主导潮流?
我可以在历史上精确地找到这一特定时刻:2012年12月在NIPS会议(这是最大的AI会议)上。在那里,计算机科学家Geoff Hinton和他的两个研究生表明你可以使用一个名为ImageNet的非常大的数据集,包含10,000个类别和1000万个图像,并使用深度学习将分类错误减少20%。
通常,在该数据集上,错误在一年内减少不到1%。 在一年内,20年的研究被跨越了。
这真的打开了潮水的闸门。
Q:深度学习的灵感来自大脑。那么计算机科学和神经科学这些领域如何协同工作呢?
深度学习的灵感来自神经科学。最成功的深度学习网络是由Yann LeCun开发的卷积神经网络(CNN)。
如果你看一下CNN的架构,它不仅仅是很多单元,它们以一种基本上镜像大脑的方式连接起来。大脑中被研究的最好的一部分在视觉系统,在对视觉皮层的基础研究工作中,表明那里存在简单和复杂细胞。如果你看一下CNN架构,会发现有简单细胞和复杂细胞的等价物,这直接来自我们对视觉系统的理解。
Yann没有盲目地试图复制皮质。他尝试了许多不同的变种,但他最终收敛到的方式和那些自然收敛到的方式相同。这是一个重要的观察。自然与人工智能的趋同可以教给我们很多东西,而且还有更多的东西要去探索。
Q:我们对计算机科学的理解有多少取决于我们对大脑的理解程度?
我们现在的大部分AI都是基于我们对大脑在60年代的了解。 我们现在知道的更多,并且更多的知识被融入到架构中。
AlphaGo,这个击败围棋冠军的程序不仅包括皮质模型,还包括大脑的一部分被称为“基底神经节”的模型,这对于制定一系列决策来实现目标非常重要。 有一种称为时间差分的算法,由Richard Sutton在80年代开发,当与深度学习相结合时,能够进行人类以前从未见过的非常复杂的玩法。
当我们了解大脑的结构,并且当我们开始了解如何将它们集成到人工系统中时,它将提供越来越多的功能,超越我们现在所拥有的。
Q:人工智能也会影响神经科学吗?
它们是并行的工作。创新神经技术已经取得了巨大的进步,从一次记录一个神经元到同时记录数千个神经元,并且同时涉及大脑的许多部分,这完全开辟了一个全新的世界。
我说人工智能与人类智能之间存在着一种趋同。随着我们越来越多地了解大脑如何工作,这些认识将反映到AI中。 但与此同时,他们实际上创造了一整套学习理论,可用于理解大脑,让我们分析成千上万的神经元以及他们的活动是如何产生的。 所以神经科学和人工智能之间存在这种反馈循环,我认为这更令人兴奋和重要。
Q:你的书讨论了许多不同的深度学习应用,从自动驾驶汽车到金融交易。你觉得哪个特定领域最有趣?
我完全被震撼到的一个应用是生成对抗网络,或称GANS。使用传统的神经网络,你给出一个输入,你得到一个输出。 GAN能够在没有输入的情况下开展活动 - 产生输出。
是的,我在这些网络创建假视频的故事背景下听说过这个。他们真的会产生看似真实的新事物,对吧?
从某种意义上说,它们会产生内部活动。事实证明这是大脑运作的方式。你可以看某处并看到一些东西,然后你可以闭上眼睛,你可以开始想象出那里没有的东西。你有一个视觉想象,当周围安静时,你闹钟声会浮现想法。那是因为你的大脑是生成性的。现在,这种新型网络可以生成从未存在过的新模式。所以你可以给它,例如,数百张汽车图像,它会创建一个内部结构,可以生成从未存在的汽车的新图像,并且它们看起来完全像汽车。
Q:另一方面,您认为哪些想法可能是过度炒作?
没有人可以预测或想象这种新技术的引入会对未来的事物组织方式产生什么影响。当然这其中有炒作。我们还没有解决真正困难的问题。我们还没有通用智能,就有人说机器人将不久后会取代我们,其实机器人远远落后于人工智能,因为复制身体被发现比复制大脑更复杂。
让我们看一下这一种技术进步:激光。它是在大约50年前发明的,当时占据了整个房间。从占据整个房间到我现在演讲时使用的激光笔需要50年的技术商业化。它必须被推进到体积足够小并可以用五美元购买它的程度。同样的事情将发生在像自动驾驶汽车这样的被炒作的技术上。它并不被期望在明年或者未来10年,就变得无处不在。这过程可能需要花费50年,但重点是,在此过程中会有逐步推进,使它越来越灵活,更安全,更兼容我们组织运输网络的方式。炒作的错误在于人们的时标设定错了。他们期待太多事情太快发生,其实事物只在适当的时候。
关于深度学习的问题可以看下这个网页的视频讲解:AI深度学习---中科院公开课。
‘肆’ 深度学习主要是学习哪些算法
深度学习(也称为深度结构化学习或分层学习)是基于人工神经网络的更广泛的机器学习方法族的一部分。学习可以是有监督的、半监督的或无监督的。
深度学习架构,例如深度神经网络、深度信念网络、循环神经网络和卷积神经网络,已经被应用于包括计算机视觉、语音识别、自然语言处理、音频识别、社交网络过滤、机器翻译、生物信息学、药物设计、医学图像分析、材料检查和棋盘游戏程序在内的领域,在这些领域中,它们的成果可与人类专家媲美,并且在某些情况下胜过人类专家。
神经网络受到生物系统中信息处理和分布式通信节点的启发。人工神经网络与生物大脑有各种不同。具体而言,神经网络往往是静态和象征性的,而大多数生物的大脑是动态(可塑)和模拟的。
定义
深度学习是一类机器学习算法: 使用多个层逐步从原始输入中逐步提取更高级别的特征。例如,在图像处理中,较低层可以识别边缘,而较高层可以识别对人类有意义的部分,例如数字/字母或面部。
‘伍’ 深度优先算法 和 宽度优先算法 的优缺点
1、深度优先算法占内存少但速度较慢,广度优先算法占内存多但速度较快,在距离和深度成正比的情况下能较快地求出最优解。
2、深度优先与广度优先的控制结构和产生系统很相似,唯一的区别在于对扩展节点选取上。由于其保留了所有的前继节点,所以在产生后继节点时可以去掉一部分重复的节点,从而提高了搜索效率。
3、这两种算法每次都扩展一个节点的所有子节点,而不同的是,深度优先下一次扩展的是本次扩展出来的子节点中的一个,而广度优先扩展的则是本次扩展的节点的兄弟点。在具体实现上为了提高效率,所以采用了不同的数据结构。
‘陆’ 求解深度学习算法是怎么实现的
现在深度学习在机器学习领域是一个很热的概念,不过经过各种媒体的转载播报,这个概念也逐渐变得有些神话的感觉:例如,人们可能认为,深度学习是一种能够模拟出人脑的神经结构的机器学习方式,从而能够让计算机具有人一样的智慧;而这样一种技术在将来无疑是前景无限的。那么深度学习本质上又是一种什么样的技术呢?
深度学习是什么
深度学习是机器学习领域中对模式(声音、图像等等)进行建模的一种方法,它也是一种基于统计的概率模型。在对各种模式进行建模之后,便可以对各种模式进行识别了,例如待建模的模式是声音的话,那么这种识别便可以理解为语音识别。而类比来理解,如果说将机器学习算法类比为排序算法,那么深度学习算法便是众多排序算法当中的一种(例如冒泡排序),这种算法在某些应用场景中,会具有一定的优势。
深度学习的“深度”体现在哪里
论及深度学习中的“深度”一词,人们从感性上可能会认为,深度学习相对于传统的机器学习算法,能够做更多的事情,是一种更为“高深”的算法。而事实可能并非我们想象的那样,因为从算法输入输出的角度考虑,深度学习算法与传统的有监督机器学习算法的输入输出都是类似的,无论是最简单的Logistic Regression,还是到后来的SVM、boosting等算法,它们能够做的事情都是类似的。正如无论使用什么样的排序算法,它们的输入和预期的输出都是类似的,区别在于各种算法在不同环境下的性能不同。
那么深度学习的“深度”本质上又指的是什么呢?深度学习的学名又叫深层神经网络(Deep Neural Networks ),是从很久以前的人工神经网络(Artificial Neural Networks)模型发展而来。这种模型一般采用计算机科学中的图模型来直观的表达,而深度学习的“深度”便指的是图模型的层数以及每一层的节点数量,相对于之前的神经网络而言,有了很大程度的提升。
深度学习也有许多种不同的实现形式,根据解决问题、应用领域甚至论文作者取名创意的不同,它也有不同的名字:例如卷积神经网络(Convolutional Neural Networks)、深度置信网络(Deep Belief Networks)、受限玻尔兹曼机(Restricted Boltzmann Machines)、深度玻尔兹曼机(Deep Boltzmann Machines)、递归自动编码
‘柒’ 深度优先法(DFS)算法
深度优先法:O(n+e)是指在图形中,如果以顶点v作为起始开始查找,我们从顶点v的邻接列表选择一个未查找过的顶点w,由定点w继续进行深度优先法的查找,没查找一个顶点,便把该顶点存放在堆栈。知道查找到已经没有任何邻接未遍历的顶点u,此时回到取出堆栈中的顶点,回到上一层顶点继续查找未遍历的顶点,知道所有的顶点皆查找过为止。over~!
‘捌’ 深度优先算法的定义
深度优先搜索算法(Depth-First-Search),是搜索算法的一种。是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。属于盲目搜索。
深度优先搜索是图论中的经典算法,利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相关的图论问题,如最大路径问题等等。
因发明“深度优先搜索算法”,霍普克洛夫特与陶尔扬共同获得计算机领域的最高奖:图灵奖.
‘玖’ 二叉树的深度算法怎么算啊
二叉树的深度算法:
一、递归实现基本思想:
为了求得树的深度,可以先求左右子树的深度,取二者较大者加1即是树的深度,递归返回的条件是若节点为空,返回0
算法:
1
int
FindTreeDeep(BinTree
BT){
2
int
deep=0;
3
if(BT){
4
int
lchilddeep=FindTreeDeep(BT->lchild);
5
int
rchilddeep=FindTreeDeep(BT->rchild);
6
deep=lchilddeep>=rchilddeep?lchilddeep+1:rchilddeep+1;
7
}
8
return
deep;
9
}
二、非递归实现基本思想:
受后续遍历二叉树思想的启发,想到可以利用后续遍历的方法来求二叉树的深度,在每一次输出的地方替换成算栈S的大小,遍历结束后最大的栈S长度即是栈的深度。
算法的执行步骤如下:
(1)当树非空时,将指针p指向根节点,p为当前节点指针。
(2)将p压入栈S中,0压入栈tag中,并令p执行其左孩子。
(3)重复步骤(2),直到p为空。
(4)如果tag栈中的栈顶元素为1,跳至步骤(6)。从右子树返回
(5)如果tag栈中的栈顶元素为0,跳至步骤(7)。从左子树返回
(6)比较treedeep与栈的深度,取较大的赋给treedeep,对栈S和栈tag出栈操作,p指向NULL,并跳至步骤(8)。
(7)将p指向栈S栈顶元素的右孩子,弹出栈tag,并把1压入栈tag。(另外一种方法,直接修改栈tag栈顶的值为1也可以)
(8)循环(2)~(7),直到栈为空并且p为空
(9)返回treedeep,结束遍历
1
int
TreeDeep(BinTree
BT
){
2
int
treedeep=0;
3
stack
S;
4
stack
tag;
5
BinTree
p=BT;
6
while(p!=NULL||!isEmpty(S)){
7
while(p!=NULL){
8
push(S,p);
9
push(tag,0);
10
p=p->lchild;
11
}
12
if(Top(tag)==1){
13
deeptree=deeptree>S.length?deeptree:S.length;
14
pop(S);
15
pop(tag);
16
p=NULL;
17
}else{
18
p=Top(S);
19
p=p->rchild;
20
pop(tag);
21
push(tag,1);
22
}
23
}
24
return
deeptree;
25
}