深度学习报告(上)

深度学习是机器学习领域的一个分支,正因为深度学习的蓬勃发展才引发人工智能革命。在前几篇文章的概述中,我介绍了机器学习,对深度学习没有过多涉及。因为在我看来深度学习是机器学习里面比较重要的一个分支领域,需要单独列出来进行介绍。不过两个领域是一个包含和被包含的关系,所以在介绍机器学习的时候,里面的很多知识在深度学习中也都会用到,比如梯度下降算法,阶跃函数Sigmoid函数,算法欠拟合和过拟合的处理方法,正则化,二范式等等。不过深度学习与机器学习不同的是引入神经网络等概念,因为神经网络的存在使得深度学习能够做很多机器学习原先所不能做的事情,比如说图片识别,自然语言理解等等,这也是它和机器学习不同之处。在介绍深度学习之前,我们会简单介绍一下人类大脑的工作机理,并与机器的神经网络结构进行比较,从而能够更好的让我们理解深度学习。接下来会介绍神经网络的感知机和它的基本结构单元:Sigmoid神经元。最后会介绍深度学习中神经网络的分类,比如最近很流行的CNN,RNN,GAN等神经网络的原理结构,在第三篇文章的结尾会补充神经网络是如何训练的以及它们的优化。
深度学习里面的神经网络的构筑理念是受到生物(人或其他动物)神经网络功能的运作启发而产生的。人工神经网络通常是通过一个基于数学统计学类型的学习方法(Learning Method)得以优化,所以也是数学统计学方法的一种实际应用,通过统计学的标准数学方法我们能够得到大量的可以用函数来表达的局部结构空间,另一方面在人工智能学的人工感知领域,我们通过数学统计学的应用可以来做人工感知方面的决定问题(也就是说通过统计学的方法,人工神经网络能够类似人一样具有简单的决定能力和简单的判断能力),这种方法比起正式的逻辑学推理演算更具有优势。

使用神经网络识别手写数字

举个人类运用神经网络工作的实际例子,人类的视觉系统是世上的一个奇迹。考虑以下这串手写的数字:
深度学习报告(上)_第1张图片
数字图片

大部分人都能轻易地识别出图上的数字是504192。这个看似简单的过程的背后,实际上很复杂。在我们大脑的每个脑半球中,有一个叫做初级视皮层(primary visual cortex)的部分,也被称作V1。它拥有1亿4千万个神经元,包含了上百亿的神经元连接。然而,人类的视觉系统不仅仅依赖于V1,还依赖于整套视皮层——V2、V3、V4和V5的协同工作,来实现复杂的图像处理任务。我们的大脑就像一台超级计算机,经过了上亿年的进化,才得以能够出色地理解视觉的世界。识别手写数字不是一个简单的任务,但是,人类极其擅长理解眼睛所看到的东西,并且几乎所有这些工作都是在无意识的情况下完成的,所以我们通常不会意识到我们的视觉系统解决了的任务有多么困难。

当你企图实现一个用来识别类似上图数字的计算机程序时,你就会逐渐意识到视觉模式识别的难度。一个本来对于人类看似很简单的事情,突然就变得极其困难。「数字9的上部有一个圆圈,右下部有一笔竖线」这种人类识别形状的直觉,在算法上却很难表示。当你试图定义明确的识别规则时,你会很快地被一大堆特例所困扰。这似乎毫无解决的希望。

机器神经网络使用一种不同的思路解决这个问题。它的思想是利用大量的手写数字,亦被称为训练样例,
深度学习报告(上)_第2张图片
训练样例

从这些训练样例学习并建立一个系统。换一种说法,神经网络使用这些样例,从中能够自动地学习到识别手写数字的规则。而且,随着训练样例的增加,神经网络可以从中学习到更多信息,从而提高它的准确度。所以,尽管我上面只给出了100个训练数字,也许我们可以使用上千、上万、上亿的训练样例来构建一个更好的手写识别器。

感知机

讲完神经网络的实际应用例子,接下来开始重点讲解什么是神经网络?在回答这个问题之前,我会先解释一种叫做感知机(perceptron)的人工神经元。感知机由科学家Frank Rosenblatt发明于1950至1960年代,他受到了来自Warren McCulloch 和Walter Pitts的更早工作的启发。现如今,我们通常使用其它种类的人工神经元模型——在许多关于神经网络的最新介绍中,主要使用的是一种叫做sigmoid神经元(sigmoid neuron)的神经元模型。我们会在稍后学习sigmoid神经元。为了理解sigmoid神经元,我们首先需要花一点时间来理解感知机,这是非常有价值的。

感知机的工作原理

那么,感知机是怎么工作的呢?感知机的输入是几个二进制,,输出是一位单独的二进制:

深度学习报告(上)_第3张图片
感知机

上图展示了给定三个输入 x_1、x_2 和 x_3 以及一个可以计算输出值的神经元的感知机算法。Rosenblatt 通过引入权重的概念介绍这一简单的规则,用于生成输出值。权重通常是表示输入对应于输出的重要性的实数。上图中的神经元将会得到两个可能的结果,0 或 1,是由每个输入的加权和 ∑wjxj 决定的大于或小于阈值的结果。因此,感知机的主要思想就是去学到一些可以决定神经元兴奋还是抑制的与输入特征相乘的权重 w。我们可以写出一个如下的数学表达式:
深度学习报告(上)_第4张图片
数学表达式

我们现在可以做两件事来修改上述公式:第一,我们把权重相加操作转变成两个向量的点乘。

w (权重) 和 x (输入), 其中 w⋅x ≡ ∑wjxj。接下来,我们可以把阈值移到不等式的另一端并取个新变量名为偏置 b,b 恒等于阈值的负数。通过这些改动,感知机公式重写如下:
感知机公式

现在我们把这些公式套进我们的感知机架构,这样就有了如下所示的完整的单层感知机架构:
深度学习报告(上)_第5张图片
单层感知机架构

通常情况下,单层感知机模型都会使用阶跃函数作为激活函数将结果转化成 0 或 1,因此将输入归到 0 或 1 类。如图 4 所示,负数的输出为 0,正数的输出为 1。
深度学习报告(上)_第6张图片
阶跃函数的图示

对于输入数据线性可分的分类任务,阶跃函数十分有用。但是,由于我们的目的是找到一个用于分离非线性数据的分类器,单层感知机与阶跃函数就毫无意义了。所以这个时候我们会引入激励函数

激励函数是神经网络的一个重要组成部分。一般来说,我们最少有三个需要激励函数的理由:

  • 它帮助神经元学习和理解一些非常复杂的东西。

  • 它们为网络引入非线性属性

  • 我们希望对权重或偏差上作一个小的改变,以便在网络输出中只产生一个相对小的变化。

我们在每一层感知神经元叠加以后, 加一个激励函数, 这样输出的就是一个非线性函数,而不再仅仅是一个线性函数。以下是常见的几种激励函数:

激励函数

sigmoid 函数

sigmoid 函数也即 logistic 函数,对于任意输入,它的输出范围都是 (0,1)。公式如下:

深度学习报告(上)_第7张图片
logistic 函数

sigmoid 的数学公式

深度学习报告(上)_第8张图片
sigmoid 函数图

如你所见,它很像平滑版的阶跃函数。但是,sigmoid 有很多好处,例如:

  1. 它是非线性的

  2. 不同于二值化输出,sigmoid 可以输入 0 到 1 之间的任意值。对,跟你猜的一样,这可以用来表示概率值。

  3. 与 2 相关,sigmoid 的输出值在一个范围内,这意味着它不会输出无穷大的数。

但是,sigmoid 激活函数并不完美:

容易梯度消失。如上图所示,当输入值 z 趋近负无穷时,sigmoid 函数的输出几乎为 0 . 相反,当输入 z 趋近正无穷时,输出值几乎为 1 . 那么这意味着什么?

在这两个极端情况下,对应的梯度很小,甚至消失了。梯度消失在深度学习中是一个十分重要的问题,我们在深度网络中加了很多层这样的非线性激活函数,这样的话,即使第一层的参数有很大的变化,也不会对输出有太大的影响。换句话讲,就是网络不再学习了,通常训练模型的过程会变得越来越慢,尤其是使用梯度下降算法时。

sigmoid 的另一个弊端就是实际运用中指数运算开销太大。尽管有人说,与矩阵乘法或卷积相比,激活函数在深度网络的计算是非常小的一部分,所以这可能不会成为一个大问题。不过,我认为这值得一提。

Tanh 函数

Tanh 或双曲正切是另一个深度神经网络中常用的激活函数。类似于 sigmoid 函数,它也将输入转化到良好的输出范围内。具体点说就是对于任意输入,tanh 将会产生一个介于 -1 与 1 之间的值。

深度学习报告(上)_第9张图片
Tanh 函数的数学公式
深度学习报告(上)_第10张图片
tanh 函数图

如前面提及的,tanh 激活函数有点像 sigmoid 函数。非线性且输出在某一范围,此处为 (-1, 1)。不必意外,它也有跟 sigmoid 一样的缺点。从数学表达式就可以看出来,它也有梯度消失的问题,以及也需要进行开销巨大的指数运算。

神经网络模型

所谓神经网络就是将许多个单一“神经元”联结在一起,这样,一个“神经元”的输出就可以是另

一个“神经元”的输入。例如,下图就是一个前馈神经网络的结构示意图:
深度学习报告(上)_第11张图片
图1. 神经网络结构示意图

⽹络中最左边的称为输⼊层(Input Layer),其中的神经元称为输⼊神经元;最右边的是输出层(Output Layer)包含有输出神经元;中间层的神经元既不是输⼊也不是输出,则被称为隐藏层(Hidden Layer)。上⾯的⽹络有多个隐藏层,但有些⽹络仅有⼀个隐藏层。

由于历史原因,这些多层网络有时又被称为多层感知机,这多少有些混淆,因为这些网络都是由sigmoid神经元构成的,而非感知机。

相对于输入输出层设计的直观,隐层的设计就是一门艺术了。特别的,单纯地把一些简单规则结合到一起来作为隐层的设计是不对的。事实上,神经网络的研究者们已经总结了很多针对隐层的启发式设计规则,这些规则能够用来使网络变得符合预期。举例来说,一些启发式规则可以用来帮助我们在隐层层数和训练网络所需的时间开销这二者间找到平衡。

上面所讲的只是深度学习比较简单的前馈神经网络(feedforward neural networks),即把上一层的输出作为下层输入的神经网络。这种网络是不存在环的——信息总是向前传播,从不反向回馈。如果我们要制造一个环,那么我们将会得到一个使函数输入依赖于其输出的网络。这很难去理解,所以我们并不允许存在这样的环路。

但是,我们也有一些存在回馈环路可能性的人工神经网络模型。这种模型被称为递归神经网络,在下面的神经网络分类我们会针对各个网络结构来进行重点讲解。

深度学习网络分类

如前所述,深度学习指的是一类广泛的机器学习技术和架构,其特点是采用多层的非线性信息处理方法,这种方法在本质上是分层的。根据这些结构和技术不同的应用领域,如合成/生成或识别/分类,我们可以大致把这些结构分为三类:

无监督的或生成式学习的深度网络:针对模式分析和合成任务,用于在没有目标类标签信息的情况下捕捉观测到的或可见数据的高阶相关性。各种文献中的无监督特征或表达学习指的就是这一类深度网络。当用于生成模式时,它也可以用来描述可见数据和其相关分类的联合分布概率,此时它具有可以利用的类别标签,而且这些类别标签被看做是可见数据的一部分。在后一种情况中,利用贝叶斯准则可以把生成学习网络转换为判别式学习网络。
有监督学习的深度网络:直接提供用于模式分类目的的判别能力,它的特点是描述了可见数据条件下的后验分布(条件概率分布)。这种有监督的学习,目标类别标签总是以直接或间接形式给出,所以它们也被称作判别式深度网络。
混合深度网络:目标是判别式模型,往往以生成式或无监督深度网络的结果作为重要辅助,可以通过更好地优化和正则化上个类别中的深度网络来实现,也可以通过对第一个类别所述的深度生成式或无监督深度网络的参数进行估计时,使用判别式准则来实现。

在其他文献里,一般将深度机器学习技术分为深度判别式模型(深度神经网络DNN、递归神经网络RNN、卷积神经网络CNN等)和生成式/无监督模型(受限玻尔兹曼机RBM、深度信念网络DBN、深度玻尔兹曼机DBM、正则化的自编码器等),然而这种二元分类方法忽略了通过深度学习研究所获得的重要观点,即生成式和无监督学习如何通过更好地进行正则化与优化,来大幅提高DNN和其他深度判别式和监督学习模型的训练效果。同时,无监督学习的深度网络并不一定必须是概率模型,也不一定能从模型中得到有意义的采样。深度有监督的学习模型适合复杂系统的端到端学习;而深度无监督学习模型,尤其是概率生成模型,更容易理解,更容易嵌入领域知识,更容易组合,对不确定性进行处理。
下面先只讲无监督和生成式学习深度网络。
无监督学习是指在学习过程中不使用特定任务的监督信息(如目标类别标签)。这一类深度网络大多可以通过从网络中采样来有效生成样本,因此是生成式模型,例如RBM、DBN、DBM和广义除噪自编码器。然而这一类别中的有些网络采样并不容易,因而本质上并不是生成式的,例如稀疏编码网络和原始形式的深度自编码器。
生成式或无监督深度网络有多个子类:
一类是各种自编码器及其堆叠形式,具体的说,在除噪自编码器中,输入向量首先被『破坏』,例如,随机选择一定比例的输入并把它们设为零,或加入高斯噪声,然后调整参数,使隐层编码结点重构出原始的、未损坏的输入数据,调整参数所使用的准则包括原始输入与重建输入的最小均方误差和KL散度准则。将未损坏数据进行转换,获得编码表示,并将其作为下一层堆叠自编码器的输入。
另一类有生成能力的深度无监督模型是深度玻尔兹曼机(DBM),DBM包含很多隐变量层,并且同一层变量之间没有连接。DBM是玻尔兹曼机(BM)的一个特例。当DBM的隐层数为1时,我们就得到了受限玻尔兹曼机(RBM),RBM与DBM一样,没有隐层到隐层和显层到显层的连接。RBM的主要优点是,通过组合许多RBM,把上一层RBM的特征激励作为下一层的训练数据,可以高效的对隐层进行学习,这样组合也即得到了深度信念网络(DBN)。
还有两类,一种是和积网络(SPN),另一种是无监督学习模式下的RNN。

上述网络的分类可以用下图来进行一个简单的区分:
深度学习报告(上)_第12张图片
网络分类图

1. 有监督的神经网络

卷积神经网络(CNN)

在前面的文章中,我们介绍了前馈神经网络,以及它的训练和使用。我们用它来识别了手写数字,然而,这种结构的网络对于图像识别任务来说并不是很合适。本文将要介绍一种更适合图像、语音识别任务的神经网络结构——卷积神经网络(Convolutional Neural Network, CNN)。说卷积神经网络是最重要的一种神经网络也不为过,它在最近几年大放异彩,几乎所有图像、语音识别领域的重要突破都是卷积神经网络取得的,比如谷歌的GoogleNet、微软的ResNet等,打败李世石的AlphaGo也用到了这种网络。

首先,我们先获取一个感性认识,下图是一个卷积神经网络的示意图:


深度学习报告(上)_第13张图片
图1

网络架构
如图1所示,一个卷积神经网络由若干卷积层、Pooling层、全连接层组成。你可以构建各种不同的卷积神经网络,它的常用架构模式为:

INPUT -> [[CONV]N -> POOL?]M -> [FC]*K

也就是N个卷积层叠加,然后(可选)叠加一个Pooling层,重复这个结构M次,最后叠加K个全连接层。

对于图1展示的卷积神经网络:

INPUT -> CONV -> POOL -> CONV -> POOL -> FC -> FC

按照上述模式可以表示为:

INPUT -> [[CONV]1 -> POOL]2 -> [FC]*2

也就是:N=1, M=2, K=2。

三维的层结构

从图1我们可以发现卷积神经网络的层结构和全连接神经网络的层结构有很大不同。全连接神经网络每层的神经元是按照一维排列的,也就是排成一条线的样子;而卷积神经网络每层的神经元是按照三维排列的,也就是排成一个长方体的样子,有宽度、高度和深度。

对于图1展示的神经网络,我们看到输入层的宽度和高度对应于输入图像的宽度和高度,而它的深度为1。接着,第一个卷积层对这幅图像进行了卷积操作(后面我们会讲如何计算卷积),得到了三个Feature Map。这里的"3"可能是让很多初学者迷惑的地方,实际上,就是这个卷积层包含三个Filter,也就是三套参数,每个Filter都可以把原始输入图像卷积得到一个Feature Map,三个Filter就可以得到三个Feature Map。至于一个卷积层可以有多少个Filter,那是可以自由设定的。也就是说,卷积层的Filter个数也是一个超参数。我们可以把Feature Map可以看做是通过卷积变换提取到的图像特征,三个Filter就对原始图像提取出三组不同的特征,也就是得到了三个Feature Map,也称做三个通道(channel)。

继续观察图1,在第一个卷积层之后,Pooling层对三个Feature Map做了下采样(后面我们会讲如何计算下采样),得到了三个更小的Feature Map。接着,是第二个卷积层,它有5个Filter。每个Fitler都把前面下采样之后的3个Feature Map卷积在一起,得到一个新的Feature Map。这样,5个Filter就得到了5个Feature Map。接着,是第二个Pooling,继续对5个Feature Map进行下采样,得到了5个更小的Feature Map。

图1所示网络的最后两层是全连接层。第一个全连接层的每个神经元,和上一层5个Feature Map中的每个神经元相连,第二个全连接层(也就是输出层)的每个神经元,则和第一个全连接层的每个神经元相连,这样得到了整个网络的输出。

至此,我们对卷积神经网络有了最基本的感性认识。接下来,我们将介绍卷积神经网络中各种层的计算和训练。

三维的层结构

从图1我们可以发现卷积神经网络的层结构和全连接神经网络的层结构有很大不同。全连接神经网络每层的神经元是按照一维排列的,也就是排成一条线的样子;而卷积神经网络每层的神经元是按照三维排列的,也就是排成一个长方体的样子,有宽度、高度和深度。

对于图1展示的神经网络,我们看到输入层的宽度和高度对应于输入图像的宽度和高度,而它的深度为1。接着,第一个卷积层对这幅图像进行了卷积操作(后面我们会讲如何计算卷积),得到了三个Feature Map。这里的"3"可能是让很多初学者迷惑的地方,实际上,就是这个卷积层包含三个Filter,也就是三套参数,每个Filter都可以把原始输入图像卷积得到一个Feature Map,三个Filter就可以得到三个Feature Map。至于一个卷积层可以有多少个Filter,那是可以自由设定的。也就是说,卷积层的Filter个数也是一个超参数。我们可以把Feature Map可以看做是通过卷积变换提取到的图像特征,三个Filter就对原始图像提取出三组不同的特征,也就是得到了三个Feature Map,也称做三个通道(channel)。

继续观察图1,在第一个卷积层之后,Pooling层对三个Feature Map做了下采样(后面我们会讲如何计算下采样),得到了三个更小的Feature Map。接着,是第二个卷积层,它有5个Filter。每个Fitler都把前面下采样之后的3个Feature Map卷积在一起,得到一个新的Feature Map。这样,5个Filter就得到了5个Feature Map。接着,是第二个Pooling,继续对5个Feature Map进行下采样,得到了5个更小的Feature Map。

图1所示网络的最后两层是全连接层。第一个全连接层的每个神经元,和上一层5个Feature Map中的每个神经元相连,第二个全连接层(也就是输出层)的每个神经元,则和第一个全连接层的每个神经元相连,这样得到了整个网络的输出。

至此,我们对卷积神经网络有了最基本的感性认识。接下来,我们将介绍卷积神经网络中各种层的计算和训练。

卷积神经网络输出值的计算

卷积层输出值的计算

我们用一个简单的例子来讲述如何计算卷积,然后,我们抽象出卷积层的一些重要概念和计算方法。

假设有一个55的图像,使用一个33的filter进行卷积,想得到一个3*3的Feature Map,如下所示:

深度学习报告(上)_第14张图片

为了清楚的描述卷积计算过程,我们首先对图像的每个像素进行编号,用
表示图像的第
行第
列元素;对filter的每个权重进行编号,用
表示第
行第
列权重,用
表示filter的偏置项;对Feature Map的每个元素进行编号,用
表示Feature Map的第
行第
列元素;用f表示激活函数(这个例子选择relu函数作为激活函数)。然后,使用下列公式计算卷积:
深度学习报告(上)_第15张图片

例如,对于Feature Map左上角元素来说,其卷积计算方法为:
深度学习报告(上)_第16张图片

计算结果如下图所示:
深度学习报告(上)_第17张图片

接下来,Feature Map
的元素的卷积计算方法为:
深度学习报告(上)_第18张图片

计算结果如下图所示:

深度学习报告(上)_第19张图片

可以依次计算出Feature Map中所有元素的值。下面的动画显示了整个Feature Map的计算过程:


卷积计算

上面的计算过程中,步幅(stride)为1。步幅可以设为大于1的数。例如,当步幅为2时,Feature Map计算如下:

深度学习报告(上)_第20张图片

深度学习报告(上)_第21张图片
深度学习报告(上)_第22张图片
深度学习报告(上)_第23张图片

我们注意到,当步幅设置为2的时候,Feature Map就变成2*2了。这说明图像大小、步幅和卷积后的Feature Map大小是有关系的。事实上,它们满足下面的关系:


在上面两个公式中,是卷积后Feature Map的宽度;是卷积前图像的宽度;是filter的宽度;是Zero Padding数量,Zero Padding是指在原始图像周围补几圈0,如果的值是1,那么就补1圈0;是步幅;是卷积后Feature Map的高度;是卷积前图像的宽度。两个式子本质上是一样的。
以前面的例子来说,图像宽度,filter宽度,Zero Padding,步幅,则

深度学习报告(上)_第24张图片

说明Feature Map宽度是2。同样,我们也可以计算出Feature Map高度也是2。

前面我们已经讲了深度为1的卷积层的计算方法,如果深度大于1怎么计算呢?其实也是类似的。如果卷积前的图像深度为D,那么相应的filter的深度也必须为D。我们扩展一下式1,得到了深度大于1的卷积计算公式:

深度学习报告(上)_第25张图片

在式4中,D是深度;F是filter的大小(宽度或高度,两者相同);
表示filter的第
层第
行第
列权重;
表示图像的第
层第
行第
列像素;其它的符号含义和式1是相同的,不再赘述。

我们前面还曾提到,每个卷积层可以有多个filter。每个filter和原始图像进行卷积后,都可以得到一个Feature Map。因此,卷积后Feature Map的深度(个数)和卷积层的filter个数是相同的。

下面的动画显示了包含两个filter的卷积层的计算。我们可以看到773输入,经过两个333filter的卷积(步幅为2),得到了332的输出。另外我们也会看到下图的Zero padding是1,也就是在输入元素的周围补了一圈0。Zero padding对于图像边缘部分的特征提取是很有帮助的。


以上就是卷积层的计算方法。这里面体现了局部连接和权值共享:每层神经元只和上一层部分神经元相连(卷积计算规则),且filter的权值对于上一层所有神经元都是一样的。对于包含两个3 33的fitler的卷积层来说,其参数数量仅有(3 33+1)*2=56个,且参数数量与上一层神经元个数无关。与全连接神经网络相比,其参数数量大大减少了。

用卷积公式来表达卷积层计算

式4的表达很是繁冗,最好能简化一下。就像利用矩阵可以简化表达全连接神经网络的计算一样,我们利用卷积公式可以简化卷积神经网络的表达。

下面我们介绍二维卷积公式。
设矩阵,,其行、列数分别为、、、,则二维卷积公式如下:

深度学习报告(上)_第26张图片

如果我们按照式5来计算卷积,我们可以发现矩阵A实际上是filter,而矩阵B是待卷积的输入,位置关系也有所不同:
深度学习报告(上)_第27张图片

从上图可以看到,A左上角的值
与B对应区块中右下角
的值相乘,而不是与左上角的
相乘。因此,数学中的卷积和卷积神经网络中的『卷积』还是有区别的,为了避免混淆,我们把卷积神经网络中的『卷积』操作叫做互相关(cross-correlation)操作。

卷积和互相关操作是可以转化的。首先,我们把矩阵A翻转180度,然后再交换A和B的位置(即把B放在左边而把A放在右边。卷积满足交换率,这个操作不会导致结果变化),那么卷积就变成了互相关。

如果我们不去考虑两者这么一点点的区别,我们可以把式5代入到式4:
深度学习报告(上)_第28张图片

其中,A是卷积层输出的feature map。同式4相比,式6就简单多了。然而,这种简洁写法只适合步长为1的情况。

Pooling层输出值的计算

Pooling层主要的作用是下采样,通过去掉Feature Map中不重要的样本,进一步减少参数数量。Pooling的方法很多,最常用的是Max PoolingMax Pooling实际上就是在nn的样本中取最大值,作为采样后的样本值。下图是22 max pooling:

深度学习报告(上)_第29张图片
image

除了Max Pooing之外,常用的还有Mean Pooling——取各样本的平均值。

对于深度为D的Feature Map,各层独立做Pooling,因此Pooling后的深度仍然为D。

全连接层

全连接层和前面讲到的前馈神经网络的原理差不多,在此就不多讲了。

以上就是卷积神经网络的原理,下一篇我会介绍其他相关的神经网络,比如RNN,GAN等等,在介绍完神经网络之后,还会讲到神经网络反向传播算法以及神经网络优化等方法。

你可能感兴趣的:(深度学习报告(上))