AI

深度学习分享

2017-12-18  本文已影响8人  北铭

1.什么是智能

为什么生命需要智能,智能的作用是什么?

生存游戏 抽象后的游戏模型

假设宇宙还没有产生生命,我们来想象一个生存游戏。 这个生存游戏和右上角的小游戏差不多,也就是躲避危险从而生存下来。

需要注意的是,你要清空你大脑当中的所有先验知识。 你并不知道这个游戏怎么玩,所有的规则都是随机的,并不是说碰到绿柱子就会死。

稍微抽象一下就可以得到左边的这个模型。 ABCD表示不同的环境,个体在接收到环境的刺激后会产生靠近或远离的行为,结果就是死亡或者存活。

这时,环境就是输入x,个体是关联f(可以叫它function,mapping,我在随后都把它叫做关联),行为是输出y。

游戏规则是:

  1. 假设环境B和C都是危险的,靠近就会死亡。也可能是A和D是危险的,这是随机的。
  2. 同时个体的关联f都是大自然随机生成的。

如果你是大自然的造物主,你要怎么在上述条件下,设计出可以一直自我延续下去的生命?

直接暴力的方式就是:不断的随机生成,总有一个个体会满足条件。
比如说这个映射就可以,用01表示B,10表示C,1代表远离,0代表靠近,当出现B和C时,我们希望个体f会产生1这个数值。

但这时我们追加另一个规则,环境会变。就像这个小游戏,如果规则变成没碰到柱子就会死呢?
应该有人玩过“猫里奥”,你会用你以前玩马里奥的方式去玩,就是各种死。所以当环境变成A和D是危险的时候,这个个体就会死亡。 所以,即便个体非常幸运的产生了能够满足生存的关联f,也会在下一次环境改变之际化为无机物。如果还用随机生成的方式,生命永远只能在最初始的阶段停留片刻,无法进入下一个阶段。 因此生命想要延续,就需要一种能力,可以适应变化的能力。这也是霍金对于智能的描述:Intelligence is the ability to adapt to change. 于是大自然是利用大量的个体不断繁殖,并且该繁殖过程并非完美复制,而是会产生变异,变异的个体就有机会适应变化后的环境而存活下来,无法适应环境的个体会被筛选掉。 筛选下来的个体继续大量繁殖,产生差异性,迎接下一次环境的筛选。筛选后的结果便是进化。进化出适合当前环境的关联。 用这种繁殖,变异,筛选的动态循环,就可以形成能相对稳定存在的生命。
游戏的关键在于,关联的更新速度>环境的变化速度。 所以自然界的很多生物大量繁殖这一行为并不浪费,它增大可供筛选的样本数量,防止环境变化后,个体全部被筛选掉。

智能的更新过程

进化的对象不是个体,也不是基因,而是智能关联。个体的生死对种群只是起到了一次更新作用。而基因相当于硬盘,存储在上面的智能关联才是核心。进化的过程就 是关联被不断筛选的过程。筛选出符合当前环境的关联。寻找关联f的过程也就是学习。自然选择的动态过程就是一种以种群为单位的学习方式。

智能是适应变化的能力,智能的核心部分有:

你会发现这根你所认识的智能不一样啊,这也太low了吧。不要着急,我们上边所描述的智能仅仅是停留在蛋白质层面上的低等智能阶段,靠这种方式生存的生命是病毒,仅有保护性蛋白质外壳和DNA或者RNA,可以进行自我复制。

进化有增加差异性的趋势,但是通过自我复制产生的个体变异程度低,产生的差异性较小,当环境变化时,能够适应新环境的概率就小。为了增加差异性,有性繁殖就成为了进化的方向,有性繁殖大大增加了子代个体之间的差异性,有性繁殖产生以后就面临着一个问题,如果生命不可以移动,个体只能与附近的个体进行交配,这一区域就始终都是那几种智能关联,有性繁殖的差异性能力被限制,为了增加差异性,移动能力就成了必然需求,生命的移动带来了新的问题,环境会随着移动而变化,个体在上一环境中通过自然学习所学习到的关联,在下一个环境并不适用。比如你将热带植物放在沙漠中,环境的不同会杀死它。

因为增加了移动,感官等能力,个体的生长周期变长。设想一下,花了好几个月生下来的小动物,错走一步掉坑里摔死了。那么几个回合,这个物种就灭绝了。他们承担不起自然选择这种试错学习方式所带来的代价。

于是对于大范围可移动生物而言,他们需要原有智能的基础上增加了另一项能力:预测。 关联f不再是简单的应激反应,不再是从环境到行为的关联。 而是从过去事件到未来事件的关联。生物会利用意识在大脑中模拟自己与环境的关系,通过预测下一步,甚至下几步会发生什 么,从而进行决策。这就和下棋一样。

需要新的学习方式

• 生长周期:无法自然选择试错
• 大脑模拟:预测未来事件
• 神经网络:寻找过去事件到未来

神经元

神经元细胞内部大量的蛋白质可以控制电离子的进出,进而有了控制电的能力。
它们用不同的频率来表示不同的状态,大脑中的神经网络就有了模拟环境的状态与变化的能力。可以允许生命以个体为单位学习任意两个空间的关联。不再是自然选择这种以种群为单位的学习方式。

神经元

神经元有接受、整合和传递信息的功能。一般就长轴突神经元而言,树突和胞体接受从其他神经元传来的信息,并进行整合,然后通过轴突将信息传递给另一些神经元或效应器。

生物神经网络

神经元细胞内部大量的蛋白质可以控制电离子的进出,进而有了控制电的能力。它们用不同的频率来表示不同的状态,大脑中的神经网络就有了模拟环境的状态与变化的能力。可以允许生命以个体为单位学习任意两个空间的关联。不再是自然选择这种以种群为单位的学习方式。

预测和决策需要依据,就需要生命有感知能力,感知周围的信息。我们以深度学习擅长的画面识别为例,我们来看看它到底在做什么,同时也来进一步理解“建立两个空间的关联”这一概念。

生物的视觉感知

因为蛇的猎物一般是夜间行动,所以它就进化出了一种可以在夜间也能很好观察的感知系统。感热。
任何视觉系统都是将反光与“脑中”所看到的概念进行关联。
相同的反光,经过不同的视觉系统会得到不同的感知。 所以画面识别实际上并不是识别这个东西本身是什么,而是学找人类的视觉关联方式,并再次应用。如果我们不是人类,而是 蛇类,那么画面识别所寻找的f就和现在的不一样。



当x代表的是画面,而y代表的是画面在大脑中的概念时,神经网络所完成的就是画面识别。当x代表说过的话,而y代表将要说 的话,那么神经网络所完成的就是语言模型,当x代表英语,而y代表中文,神经网络所完成的就是机器翻译。

神经网络的就是从很多输入到输出的例子中,寻找解释这两个空间的关联。

智能的内容在于关联,核心在于学习,但意识还负责

• 何时搜集数据:双向传递
• 何时调整关联:如何说服人
• 应用哪种关联:意识无法并行

而代表着高等智能的意识允许我们在脑中预先模拟接下来会发生什么?从而决定下一步的行动。 一个人的一生就是在不断建立自己所处环境中各式各样的预测模型。形成一个世界模型。你可以叫它世界观。 茶杯坠落会发生什么,如果有枪声会怎样。人站在高处,会预测自己坠落的后果,所以害怕。 随着环境的变化,所建立的预测模型需要跟着更新。 比如我们现在生存的环境就和古人不同,有投资项目,未来几个月的股票、房价、汇率的变化等。 所以你就可以看见,我们作为一个生命体,始终都在适应着这个时刻变化的世界。 智能的内容是关联,核心在于学习。但却不仅限于此,它还有围绕关联和学习的其他能力。
智能除了建立关联外还有何时搜集数据,因为我们是从历史经验中学习。

还有何时更新已建立的模型,何时使用哪个模型。这些都属于智能。
比如说人脑的预测实际上是双向的,会时时刻刻预测即将发生的事情,并将实际发生的事情与自己的预测进行比较。通常这一过程不会得到你的意识的注意。 只有那些与自己预测不符合的事件才会得到注意。 例如你不会注意你每天都走的楼梯,但是当某个阶梯突然高出3厘米时,你却很容易察觉。这种与自己所建立的模型冲突的事件会更容易被记住并且作为训练数据搜集起来,用于以后 的学习,为了让你更好的预测,更好的生存。所以思考的目的就是在于预测。

而人的一生始终都需要学习,因为世界不断变化。并不存在小孩子比成人学习能力强这么一说。之所以造成这种现象的原因是人们依赖自己的世界模型。

孩子并没有构造出完整世界模型,所以DNA中进化出的本性让我们小时候充满好奇心,会什么都好奇,什么都学习。 而成人已经建立的较为完善的世界模型,需要有一种保护机制,防止被人忽悠。 如果你还是像小孩子一样,什么都学习,什么都更新,那么你就很容易被洗脑。

但成人也会更新已建立的模型。比如说服一个成人,较好的做法是描述一个事件,这时他会不由自主的预测结果。但当你告诉他,他的预测是错误的时候,他就得到了“原来自己已有 的模型并不可靠的信号”,关闭抵制学习的保护机制来更新已有模型。

智能始终都是并行执行的,唯独意识不可以同一时间出现在两个地方,原因之一在于意识必须要在某个时刻决定应用哪个关联。我们的四肢有各种各样的关联,有骑车的,有跑步的, 意识会起到调控作用。 我们现在的人工智能还没有达到意识的层面,仅仅是建立两个空间的关联,所以画面识别,语音识别都可以完成的很好。但我们会在这个基础上逐步的迈向意识。

2.什么是人工智能

人工智能,也称为机器智能,是指由人工制造出来的系统所表现的智能,所谓的智能,即指可以观察周围环境并据此做出行动以达到目的。

举例:人脸识别,文字识别,语音识别,智能驾驶

人工智能的概念很宽泛,现在根据人工智能的实力将分成3大类。
弱人工智能 — 下棋
强人工智能 — 类似人类级别的人工智能
超人工智能 —— 在所有领域都比最聪明的人类大脑都聪明很多,包括科学创新 和社交技能,超人工智能也可以个方面比人类强万亿倍。

3.KNN分类器

本部分,我们将通过图像分类问题,来讲解。所谓图像分类问题,就是已有固定的分类标签集合,然后对于输入的图像,从分类标签集合中找出一个分类标签,最后把分类标签分配给该输入图像。虽然看起来挺简单的,但这可是计算机视觉领域的核心问题之一,并且有着各种各样的实际应用。我们可以看到计算机视觉领域中很多看似不同的问题(比如物体检测和分割),都可以被归结为图像分类问题。


以上图为例,图像分类模型读取该图片,并生成该图片属于集合 {cat, dog, hat, mug}中各个标签的概率。需要注意的是,对于计算机来说,图像是一个由数字组成的巨大的3维数组。在这个例子中,猫的图像大小是宽248像素,高400像素,有3个颜色通道,分别是红、绿和蓝(简称RGB)。如此,该图像就包含了248X400X3=297600个数字,每个数字都是在范围0-255之间的整型,其中0表示全黑,255表示全白。我们的任务就是把这些上百万的数字变成一个简单的标签,比如“猫”。

图像分类的任务,就是对于一个给定的图像,预测它属于的那个分类标签(或者给出属于一系列不同标签的可能性)。图像是3维数组,数组元素是取值范围从0到255的整数。数组的尺寸是宽度x高度x3,其中这个3代表的是红、绿和蓝3个颜色通道。

图像分类就是输入一个元素为像素值的数组,然后给它分配一个分类标签。完整流程如下:

输入:输入是包含N个图像的集合,每个图像的标签是K种分类标签中的一种。这个集合称为训练集。
学习:这一步的任务是使用训练集来学习每个类到底长什么样。一般该步骤叫做训练分类器或者学习一个模型。
评价:让分类器来预测它未曾见过的图像的分类标签,并以此来评价分类器的质量。我们会把分类器预测的标签和图像真正的分类标签对比。毫无疑问,分类器预测的分类标签和图像真正的分类标签如果一致,那就是好事,这样的情况越多越好。

那么具体如何比较两张图片呢?。最简单的方法就是逐个像素比较,最后将差异值全部加起来。换句话说,就是将两张图片先转化为两个向量

这里的求和是针对所有的像素。下面是整个比较流程的图例:


以图片中的一个颜色通道为例来进行说明。两张图片使用L1距离来进行比较。逐个像素求差值,然后将所有差值加起来得到一个数值。如果两张图片一模一样,那么L1距离为0,但是如果两张图片很是不同,那L1值将会非常大。

你可能注意到了,为什么只用最相似的1张图片的标签来作为测试图像的标签呢?这不是很奇怪吗!是的,使用k-Nearest Neighbor分类器就能做得更好。它的思想很简单:与其只找最相近的那1个图片的标签,我们找最相似的k个图片的标签,然后让他们针对测试图片进行投票,最后把票数最高的标签作为对测试图片的预测。所以当k=1的时候,k-Nearest Neighbor分类器就是Nearest Neighbor分类器。从直观感受上就可以看到,更高的k值可以让分类的效果更平滑,使得分类器对于异常值更有抵抗力。

上面示例展示了Nearest Neighbor分类器和5-Nearest Neighbor分类器的区别。例子使用了2维的点来表示,分成3类(红、蓝和绿)。不同颜色区域代表的是使用L2距离的分类器的决策边界。白色的区域是分类模糊的例子(即图像与两个以上的分类标签绑定)。需要注意的是,在NN分类器中,异常的数据点(比如:在蓝色区域中的绿点)制造出一个不正确预测的孤岛。5-NN分类器将这些不规则都平滑了,使得它针对测试数据的泛化(generalization)能力更好(例子中未展示)。注意,5-NN中也存在一些灰色区域,这些区域是因为近邻标签的最高票数相同导致的(比如:2个邻居是红色,2个邻居是蓝色,还有1个是绿色)。

在实际中,大多使用k-NN分类器。但是k值如何确定呢?

要想选取好的超参数不是一件轻而易举的事。
选取超参数的正确方法是:将原始训练集分为训练集和验证集,我们在验证集上尝试不同的超参数,最后保留表现最好那个。
如果训练数据量不够,使用交叉验证方法,它能帮助我们在选取最优超参数的时候减少噪音。

4.所需掌握的数学知识

 1.线性代数 (主要是矩阵的运算和操作)
 2.高等数学(主要是求导)
导数的数值求法 初等函数的导数公式 复合函数的求导法则
 3.概率论

5.线性分类器

前面我们介绍了图像分类问题。图像分类的任务,就是从已有的固定分类标签集合中选择一个并分配给一张图像。我们还介绍了k-Nearest Neighbor (k-NN)分类器,该分类器的基本思想是通过将测试图像与训练集带标签的图像进行比较,来给测试图像打上分类标签。k-Nearest Neighbor分类器存在以下不足:

分类器必须记住所有训练数据并将其存储起来,以便于未来测试数据用于比较。这在存储空间上是低效的,数据集的大小很容易就以GB计。
对一个测试图像进行分类需要和所有训练图像作比较,算法计算资源耗费高。

概述:我们将要实现一种更强大的方法来解决图像分类问题,该方法可以自然地延伸到神经网络和卷积神经网络上。这种方法主要有两部分组成:一个是评分函数(score function),它是原始图像数据到类别分值的映射。另一个是损失函数(loss function),它是用来量化预测分类标签的得分与真实标签之间一致性的。该方法可转化为一个最优化问题,在最优化过程中,将通过更新评分函数的参数来最小化损失函数值。

线性分类器:在本模型中,我们从最简单的概率函数开始,一个线性映射:

将图像看做高维度的点:既然图像被伸展成为了一个高维度的列向量,那么我们可以把图像看做这个高维度空间中的一个点(假设图片大小为32*32的彩色图即每张图像是32*32*3 = 3072维空间中的一个点)。整个数据集就是一个点的集合,每个点都带有1个分类标签。

既然定义每个分类类别的分值是权重和图像的矩阵乘,那么每个分类类别的分数就是这个空间中的一个线性函数的函数值。我们没办法可视化3072维空间中的线性函数,但假设把这些维度挤压到二维,那么就可以看看这些分类器在做什么了:


图像空间的示意图。其中每个图像是一个点,有3个分类器。以红色的汽车分类器为例,红线表示空间中汽车分类分数为0的点的集合,红色的箭头表示分值上升的方向。所有红线右边的点的分数值均为正,且线性升高。红线左边的点分值为负,且线性降低。从上面可以看到,W的每一行都是一个分类类别的分类器。对于这些数字的几何解释是:如果改变其中一行的数字,会看见分类器在空间中对应的直线开始向着不同方向旋转。而偏差b,则允许分类器对应的直线平移。需要注意的是,如果没有偏差,无论权重如何,在

时分类分值始终为0。这样所有分类器的线都不得不穿过原点。

将线性分类器看做模板匹配:关于权重W的另一个解释是它的每一行对应着一个分类的模板(有时候也叫作原型)。一张图像对应不同分类的得分,是通过使用内积(也叫点积)来比较图像和模板,然后找到和哪个模板最相似。从这个角度来看,线性分类器就是在利用学习到的模板,针对图像做模板匹配。从另一个角度来看,可以认为还是在高效地使用k-NN,不同的是我们没有使用所有的训练集的图像来比较,而是每个类别只用了一张图片(这张图片是我们学习到的,而不是训练集中的某一张),而且我们会使用(负)内积来计算向量间的距离,而不是使用L1或者L2距离。


这里展示的是以CIFAR-10为训练集,学习结束后的权重的例子。注意,船的模板如期望的那样有很多蓝色像素。如果图像是一艘船行驶在大海上,那么这个模板利用内积计算图像将给出很高的分数。

可以看到马的模板看起来似乎是两个头的马,这是因为训练集中的马的图像中马头朝向各有左右造成的。线性分类器将这两种情况融合到一起了。类似的,汽车的模板看起来也是将几个不同的模型融合到了一个模板中,并以此来分辨不同方向不同颜色的汽车。这个模板上的车是红色的,这是因为CIFAR-10中训练集的车大多是红色的。线性分类器对于不同颜色的车的分类能力是很弱的,但是后面可以看到神经网络是可以完成这一任务的。神经网络可以在它的隐藏层中实现中间神经元来探测不同种类的车(比如绿色车头向左,蓝色车头向前等)。而下一层的神经元通过计算不同的汽车探测器的权重和,将这些合并为一个更精确的汽车分类分值。

回到之前那张猫的图像分类例子,它有针对“猫”,“狗”,“船”三个类别的分数。我们看到例子中权重值非常差,因为猫分类的得分非常低(-96.8),而狗(437.9)和船(61.95)比较高。我们将使用损失函数(Loss Function)(有时也叫代价函数Cost Function或目标函数Objective)来衡量我们对结果的不满意程度。直观地讲,当评分函数输出结果与真实结果之间差异越大,损失函数输出越大,反之越小。

SVM和Softmax损失函数

损失函数可以量化某个具体权重集W的质量。而最优化的目标就是找到能够最小化损失函数值的W 。我们现在就朝着这个目标前进,实现一个能够最优化损失函数的方法。

最优化的目标是什么?如何使损失值最小
采用什么方法:梯度下降法
梯度下降法的关健步骤:求出W和b的梯度
使用什么方法:反向传播


以下边的函数为例

将公式分成两部分:





链式求导过程

反向传播计算出梯度后,下一步就是沿着梯度的反方向进行参数更新。

我们可以将损失函数比作了一个高维度的最优化地形,并尝试到达它的最底部。最优化的工作过程可以看做一个蒙着眼睛的徒步者希望摸索着走到山的底部。
参数更新需要有技巧地设置步长。也叫学习率。如果步长太小,进度稳定但是缓慢,如果步长太大,进度快但是可能有风险。

6.前馈神经网络

在线性分类中我们使用 s = Wx + b 来计算不同图像类别的评分,神经网络算法则不同它的计算公式是s = W2max(0,W1x+b1) + b2,这里W1的它可以是一个[100x3072]的矩阵,其作用是将图像转化为一个100维的过渡向量。函数max(0,-)是非线性的,它会作用到每个元素。这个非线性函数有多种选择,后续将会学到。但这个形式是一个最常用的选择,它就是简单地设置阈值,将所有小于0的值变成0。最终,矩阵W1的尺寸是[10x100],因此将得到10个数字,这10个数字可以解释为是分类的评分。注意非线性函数在计算上是至关重要的,如果略去这一步,那么两个矩阵将会合二为一,对于分类的评分计算将重新变成关于输入的线性函数。这个非线性函数就是改变的关键点。参数W1,W2,b1,b2将通过随机梯度下降来学习到,他们的梯度在反向传播过程中,通过链式法则来求导计算得出。

一个三层的神经网络可以类比地看做s = W3max(0,W2max(0,W1x+b1) + b2,)+b3),其中W1,W2,W3,b1,b2,b3是需要进行学习的参数

每个神经元都从它的树突获得输入信号,然后沿着它唯一的轴突(axon)产生输出信号。轴突在末端会逐渐分枝,通过突触和其他神经元的树突相连。

将神经网络算法以神经元的形式图形化。神经网络被建模成神经元的集合,神经元之间以无环图的形式进行连接。也就是说,一些神经元的输出是另一些神经元的输入。在网络中是不允许循环的,因为这样会导致前向传播的无限循环。通常神经网络模型中神经元是分层的,而不是像生物神经元一样聚合成大小不一的团状。对于普通神经网络,最普通的层的类型是全连接层(fully-connected layer)。全连接层中的神经元与其前后两层的神经元是完全成对连接的,但是在同一个全连接层内的神经元之间没有连接。下面是两个神经网络的图例,都使用的全连接层:

理解具有全连接层的神经网络的一个方式是:可以认为它们定义了一个由一系列函数组成的函数族,网络的权重就是每个函数的参数。如此产生的问题是:该函数族的表达能力如何?存在不能被神经网络表达的函数吗?

论文pproximation by Superpositions of Sigmoidal Function中证明了拥有至少一个隐层的神经网络是一个通用的近似器

既然一个隐层就能近似任何函数,那为什么还要构建更多层来将网络做得更深?

虽然在理论上深层网络(使用了多个隐层)和单层网络的表达能力是一样的,但是就实践经验而言,深度网络效果比单层网络好。

7.卷积神经网络

卷积神经网络和常规神经网络非常相似:都由神经元组成,神经元中有具有学习能力的权重和偏差。每个神经元都得到一些输入数据,进行内积运算后再进行激活函数运算。整个网络依旧是一个可导的评分函数:该函数的输入是原始的图像像素,输出是不同类别的评分。在最后一层(往往是全连接层),网络依旧有一个损失函数(比如SVM或Softmax),并且在神经网络中我们实现的各种技巧和要点依旧适用于卷积神经网络。

那么有哪些地方变化了呢?卷积神经网络的结构基于一个假设,即输入数据是图像,基于该假设,我们就向结构中添加了一些特有的性质。这些特有属性使得前向传播函数实现起来更高效,并且大幅度降低了网络中参数的数量。

在常规的神经网络中,神经网络的输入是一个向量,然后通过一系列的隐层进行变换操作,每个隐层都由若干个神经元构成,每个神经元都与前一层的所有神经元连接,同一层的神经元间不进行连接。最后的全连接层称为“输出层”,在分类问题中,它输出的值可以被看成在不同类别上的评分值。

但是常规的神经网络在处理大图片的时候效果不尽如人意,举例说来,一个尺寸为200x200x3的图像,会让神经元包含200x200x3=120,000个权重值,而网络中肯定不止一个神经元,那么参数的量就会快速增加!显而易见,这种全连接方式效率低下,大量的参数也很快会导致网络过拟合。

此外因为常规的神经网络中图片被拉成了一个向量失去了空间结构。方便起见,我们用depth只有1的灰度图来举例。 想要完成的任务是:在宽长为4x4的图片中识别是否有下图所示的“横折”。 图中,黄色圆点表示值为0的像素,深色圆点表示值为1的像素。 我们知道不管这个横折在图片中的什么位置,都会被认为是相同的横折。

若训练前馈神经网络来完成该任务,那么表达图像的三维张量将会被摊平成一个向量,作为网络的输入,即(width, height, depth)为(4, 4, 1)的图片会被展成维度为16的向量作为网络的输入层。再经过几层不同节点个数的隐藏层,最终输出两个节点,分别表示“有横折的概率”和“没有横折的概率”,如下图所示。


下面我们用数字(16进制)对图片中的每一个像素点(pixel)进行编号。 当使用右侧那种物体位于中间的训练数据来训练网络时,网络就只会对编号为5,6,9,a的节点的权重进行调节。 若让该网络识别位于右下角的“横折”时,则无法识别。

解决办法是用大量物体位于不同位置的数据训练,同时增加网络的隐藏层个数从而扩大网络学习这些变体的能力。

然而这样做十分不效率,因为我们知道在左侧的“横折”也好,还是在右侧的“横折”也罢,大家都是“横折”。 为什么相同的东西在位置变了之后要重新学习?有没有什么方法可以将中间所学到的规律也运用在其他的位置? 换句话说,也就是让不同位置用相同的权重。

与常规神经网络不同,卷积神经网络的各层中的神经元是3维排列的:宽度、高度和深度(这里的深度指的是激活数据体的第三个维度,而不是整个网络的深度,整个网络的深度指的是网络的层数)。举个例子,CIFAR-10中的图像是作为卷积神经网络的输入,该数据体的维度是32x32x3(宽度,高度和深度)。我们将看到,层中的神经元将只与前一层中的一小块区域连接,而不是采取全连接方式。对于用来分类CIFAR-10中的图像的卷积网络,其最后的输出层的维度是1x1x10,因为在卷积神经网络结构的最后部分将会把全尺寸的图像压缩为包含分类评分的一个向量,向量是在深度方向排列的。下面是例子:


左边是一个3层的神经网络。右边是一个卷积神经网络,图例中网络将它的神经元都排列成3个维度(宽、高和深度)。卷积神经网络的每一层都将3D的输入数据变化为神经元3D的激活数据并输出。在这个例子中,红色的输入层装的是图像,所以它的宽度和高度就是图像的宽度和高度,它的深度是3(代表了红、绿、蓝3种颜色通道)。

卷积神经网络是由层组成的。每一层都有一个简单的API:用一些含或者不含参数的可导的函数,将输入的3D数据变换为3D的输出数据。

在卷积神经网络中,我们先选择一个局部区域,用这个局部区域去扫描整张图片。 局部区域所圈起来的所有节点会被连接到下一层的一个节点上。

我们选择的这些局部区域被称为卷积核或者滤波器.不同的滤波器能够提取图片中的不同特征。

3D卷积核卷积过程

8.循环神经网络

在此之前,我们已经学习了前馈网络的两种结构——多层感知器和卷积神经网络,这两种结构有一个特点,就是假设输入是一个独立的没有上下文联系的单位,比如输入是一张图片,网络识别是狗还是猫。但是对于一些有明显的上下文特征的序列化输入,比如预测视频中下一帧的播放内容,那么很明显这样的输出必须依赖以前的输入, 也就是说网络必须拥有一定的”记忆能力”。为了赋予网络这样的记忆力,一种特殊结构的神经网络——递归神经网络(Recurrent Neural Network)便应运而生了。

上图左侧是递归神经网络的原始结构,如果先抛弃中间那个令人生畏的闭环,那其实就是简单”输入层=>隐藏层=>输出层”的三层结构,我们在多层感知器的介绍中已经非常熟悉,然而多了一个非常陌生的闭环,也就是说输入到隐藏层之后,隐藏层还会给自己也来一发,环环相扣,晕乱复杂。我们知道,一旦有了环,就会陷入“先有蛋还是先有鸡”的逻辑困境,为了跳出困境我们必须人为定义一个起始点,按照一定的时间序列规定好计算顺序,做到有条不紊,于是实际上我们会将这样带环的结构展开成一个序列网络,也就是上图右侧被展开之后的结构:

本文为公司内部技术交流所写

参考文章:
https://zhuanlan.zhihu.com/p/21930884?refer=intelligentunit
http://vision.stanford.edu/teaching/cs231n/index.html
https://zhuanlan.zhihu.com/p/27642620
https://yjango.gitbooks.io/superorganism/content/shen_jing_yuan_ben_zhi.html
https://zhuanlan.zhihu.com/p/26647094?utm_medium=social&utm_source=weibo

上一篇下一篇

猜你喜欢

热点阅读