共计 20640 个字符,预计需要花费 52 分钟才能阅读完成。
- 作者:韩信子 @ShowMeAI
- 教程地址:http://www.showmeai.tech/tutorials/37
- 本文地址:http://www.showmeai.tech/article-detail/264
- 申明:版权所有,转载请分割平台与作者并注明出处
- 珍藏 ShowMeAI 查看更多精彩内容
本系列为 斯坦福 CS231n《深度学习与计算机视觉 (Deep Learning for Computer Vision)》的全套学习笔记,对应的课程视频能够在 这里 查看。更多材料获取形式见文末。
引言
上篇 深度学习与 CV 教程 (4) | 神经网络与反向流传 提到的神经网络是线性分类器的重叠,只不过在两头退出非线性函数,对中间层产生的模板加权后失去最终的得分。计算机视觉中用到更多的神经网络构造是 卷积神经网络(Convolutional Neural Networks),它与后面提到的前馈神经网络的构想是统一的,只是蕴含卷积层等非凡构建的神经网络层次结构。本篇 ShowMeAI 给大家具体开展介绍卷积神经网络。
对于卷积神经网络的具体常识也能够参考 ShowMeAI 的 深度学习教程 | 吴恩达专项课程 · 全套笔记解读 中的文章 卷积神经网络解读
本篇重点
- 卷积神经网络的历史
- 卷积神经网络与惯例神经网络的比照;卷积层、池化层、ReLU 层、全连贯层;部分连贯、参数共享、最大池化、步长、零填充、数据体尺寸等概念
- 卷积神经网络层的法则与尺寸设置
- 卷积神经网络经典案例
1. 卷积神经网络的历史
1957 年,Frank Rosenblatt 创造了第一代感知器,第一次实现感知器算法。感知器算法和神经网络很类似,都有 \(w\)、\(x\)、\(b\) 等参数,也有参数更新规定。然而感知器只能输入 \(0\)、\(1\) 两个数,参数更新规定也不是反向流传。
$$
f(x)=
\begin{cases}
0 & if \space\space w\cdot z+b<0 \\
1 & otherwise
\end{cases}
$$
更新规定:
$$
w_i(t+1)=w_i(t)+\alpha(d_j-y_j(t))x_{j,i}
$$
1960 年,Widrow 和 Hoff 的 Adaline/Madaline,首次尝试把线性层叠加,整合成多层感知器网络,与古代神经网络层的构造比拟相似,然而依然没有反向流传或其余训练方法。
1986 年 Rumelhart 才首次提出反向流传算法,而后咱们相熟的链式法则、更新规定等才逐步呈现。至此有了神经网络外围的训练方法,然而依然无奈训练大型的神经网络。
2006 年,Hinton 和 Salakhutdinov 的论文表明神经网络不仅能够训练并且能够高效的训练,然而须要审慎的初始化,能力反向流传。他们先事后训练失去隐层的参数,再训练整个网络。
直到 2012 年,深度神经网络才失去大规模的利用。首先是 Geoffrey Hinton 等将 CNN 用于语音辨认,而后其同实验室的 Alex Acero 等发表了里程碑式的论文,将 CNN 用于 Image net 大赛极大进步识别率,成为图像分类的标杆办法。
1.1 卷积网络的产生过程
从 1959 年开始,Hubel & Wiesel 做了一些列试验,试图弄明确神经元如何在视觉皮层上工作。他们把电极放进猫的脑袋中,而后给猫不同的视觉刺激,比方不同的边缘方向、不同的形态等,而后测量神经元的应激响应。
他们得出一些重要的论断:一是大脑皮层上的细胞与视觉中的区域相关联,有映射关系。二是神经元间存在分层关系。高级档次的细胞对光的方向产生反馈,简单一点的会对光的挪动有反馈,超简单的能够反馈端点,辨认形态。
1980 年,Fukushima 的感知神经器首次将这种简略细胞与简单细胞的概念造成实例,一种简略细胞与简单细胞交替层构造。简略细胞会有一些可调参数,简单细胞对简略细胞执行池化操作。
1998 年,LeCun, Bottou, Bengio, Haffner 等人首次展现一个实例,利用反向流传和基于梯度的学习办法来训练卷积神经网络,用于邮政编码辨认,效果显著。然而有局限性,不能用到更简单的数据中。
2012 年,Alex 等人提出一种现代化的卷积神经网络,称为 AlexNet。与 LeCun 的很类似,只是更大更深,能够充分利用大量图片数据比方 Image net 和 GPU 并行计算能力。
明天,CNN 曾经被广泛应用到图像分类、指标检测、图像宰割等。这些技术被宽泛用于主动驾驶畛域,应用 GPU 驱动,将高性能的 GPU 置于嵌入式零碎。利用到其余畛域,比方人脸识别、视频分类、姿态辨认、医学影像剖析、星系分类、路标辨认,也利用到游戏中,比方 AlfaGo。除了分类辨认等工作,还可用于图像形容、艺术创作(Deep Dream,神经图像格调迁徙)。
2. 卷积神经网络详述
2.1 卷积神经网络和惯例神经网络比照
卷积神经网络(CNN / ConvNet) 和惯例神经网络十分类似:
- 都是由神经元组成,神经元中有具备学习能力的权重和偏置项。每个神经元都失去一些输出数据,进行内积运算后再进行激活函数运算;
- 整个网络仍旧是一个可导的评分函数,该函数的输出是原始的图像像素,输入是不同类别的评分;
- 在最初一层(往往是全连贯层),网络仍旧有一个损失函数(比方 SVM 或 Softmax),并且在神经网络中咱们实现的各种技巧和要点仍旧实用于卷积神经网络。
卷积神经网络的构造基于输出数据是图像,向构造中增加了一些特有的性质,使得前向流传函数实现起来更高效,并且大幅度降低了网络中参数的数量。
2.2 惯例神经网络
惯例神经网络的输出是一个向量,比方把一张 \(32 \times 32 \times 3\) 的图片延展成 \(3072 \times 1\) 的列向量 \(x\),而后在一系列的隐层中对它做变换。
每个隐层都是由若干的神经元组成,每个神经元都与前一层中的所有神经元连贯(这就是全连贯的概念)。然而在一个隐层中,神经元互相独立不进行任何连贯。
最初的全连贯层被称为「输入层」,在分类问题中,它输入的值被看做是不同类别的评分值。比方线性分类 \(Wx\),\(w\) 是 \(10 \times 3072\) 的权重矩阵,即 \(w\) 有 10 个行向量,最终输入是一个 \(10 \times 1\) 的得分向量,其中的每一个值是 \(w\) 的某一个行向量和 \(x\) 的点积后果,也就是一个神经元的输入。
最终会有 \(10\) 个神经元输入 \(10\) 个值(\(W_0x, W_1x, \cdots, W_9x\)),\(x\) 和每一个神经元相连,因而是全连贯的。
毛病与限度
然而全连贯神经网络在解决大的图片数据时参数会急速减少,同时成果也不尽如人意。
- 比方在 CIFAR-10 中,图像的尺寸是 \(32 \times 32 \times 3\),对应网络的第一个隐层中,每一个独自的全连贯神经元的参数个数即 \(w\) 的一个行向量就有 \(32 \times 32 \times 3=3072\) 个。
- 若是一个尺寸为 \(200 \times 200 \times 3\) 的图像,会让神经元蕴含 \(200 \times 200 \times 3=120,000\) 个权重值。而网络中必定不止一个神经元,那么参数的量就会疾速减少!
全连贯形式效率不高,且参数量大,可能会导致网络过拟合。
2.3 卷积神经网络
对于卷积层的动图解说也能够参考 ShowMeAI 的的 深度学习教程 | 吴恩达专项课程 · 全套笔记解读 中的文章 卷积神经网络解读
与惯例神经网络不同,卷积神经网络的各层中的神经元都是 3 维的:宽度、高度和深度(这里的深度指的是激活数据体的第三个维度,而不是整个网络的深度,整个网络的深度指的是网络的层数)。
- 以第一层卷积层为例,输出数据依然是 \(32 \times 32 \times 3\)(宽度 \(\times\) 高度 \(\times\)深度)的,并不会将其延展成一个列向量,这样能够放弃图像的 空间结构(spatial structure)。
- 与输出相连的神经元权重不再是 \(w\) 的一个行向量(\(3072\)个参数),而是与输出数据有同样深度的 滤波器 (filter,也称作 卷积核),比方是 \(5 \times 5 \times 3\) 的滤波器 \(w\)。
- 这时的神经元(卷积核)不再与输出图像 \(x\) 是全连贯的,而是 部分连贯(local connectivity),只和 \(x\) 中一个 \(5 \times 5 \times 3\) 的小区域进行全连贯(惯例神经网络中每个神经元都和整个 \(x\) 全连贯),滤波器和这个区域计算一个点积 \(wx\)(计算的时候会展成两个向量进行点积),而后加一个偏置项 \(b\),就失去一个输入数据(\(wx+b\))。这样的一个神经元共有 \(5 \times 5 \times 3+1=76\) 个参数。
- 这个滤波器会在 \(x\) 上按肯定的 步长 (stride)顺次滑动,比方步长为 \(1\) 时,最终会失去一个 \(28 \times 28 \times 1\) 的输入数据,称作 激活映射(activation map) 或 特色映射(feature map),对应 \(28 \times 28\) 个神经元的输入。
对于用来分类 CIFAR-10 中图像的卷积网络,其最初的输入层的维度是 \(1 \times 1 \times 10\),因为在卷积神经网络构造的最初局部将会把全尺寸的图像压缩为蕴含分类评分的一个向量,向量是在深度方向排列的。
上图右边是惯例神经网络,每个神经元和下层的神经元都是全连贯的;右图是卷积神经网络,每个神经元都有三个维度,网络每一层都将 3D 的输出数据变动为神经元 3D 的激活数据并输入。
在这个例子中,红色的输出层装的是图像,所以它的宽度和高度就是图像的宽度和高度,它的深度是 3(代表了 R / 红、G/ 绿、B/ 蓝 3 个色彩通道)。
蓝色的局部是第一层卷积层的输入,这里的深度显然不为 1,表明有多种滤波器。如果咱们有 \(6\) 个 \(5 \times 5\) 的滤波器,每个卷积核代表从输出捕获某些信息的滤波器,那它们顺次滑过整张图片,失去第一个卷积层的输入后果是 \(28 \times 28 \times 6\) 的。如下图所示:
3. 卷积神经网络的构造
一个简略的卷积神经网络是由各种层依照顺序排列组成,卷积神经网络次要由三种类型的层形成:卷积层,池化(Pooling)层和全连贯层(全连贯层和惯例神经网络中的一样)。通过将这些层叠加起来,就能够构建一个残缺的卷积神经网络。
一个用于 CIFAR-10 图像数据分类的卷积神经网络的构造能够是「输出层 - 卷积层 -ReLU 层 - 池化层 - 全连贯层」,这四个层也是目前卷积神经网络比拟罕用的层。
- 输出层是 \([32 \times 32 \times 3]\) 存有图像的原始像素,本例中图像宽高均为 32,有 3 个色彩通道。
- 卷积层中,神经元与输出层中的一个部分区域相连,每个神经元都计算输出层上与本人相连的区域与本人权重的内积。卷积层会计算所有神经元的输入。如果应用 12 个滤波器(也叫作卷积核),失去的输入数据体的维度就是 \([32 \times 32 \times 12]\)。
- ReLU 层将会一一元素地进行激活函数操作,比方应用以 \(0\) 为阈值的 ReLU 函数 \(max(0,-)\) 作为激活函数。该层对数据尺寸没有扭转,还是 \([32 \times 32 \times 12]\)。
- 池化层在空间维度(宽度和高度)上进行 降采样(downsampling)操作,假如数据尺寸变为 \([16 \times 16 \times 12]\)。
- 全连贯层将会计算分类评分,数据尺寸变为 \([1 \times 1 \times 10]\),其中 10 个数字对应的就是 CIFAR-10 中 10 个类别的分类评分值。全连贯层与惯例神经网络一样,其中每个神经元都与前一层中所有神经元相连接。
卷积神经网络一层一层地将图像从原始像素值变换成最终的分类评分值。
- 卷积层和全连贯层(CONV/FC)对输出执行变换操作的时候,不仅会用到激活函数,还会用到很多参数(神经元的权值和偏置项)
- ReLU 层和池化层进行一个固定的函数操作。
- 卷积层、全连贯层和池化层有超参数,ReLU 层没有。卷积层和全连贯层中的参数利用梯度降落训练。
理论利用的时候,卷积网络是由多个卷积层顺次重叠组成的序列,而后应用激活函数(比方 ReLU 函数)对其进行逐个解决。而后这些卷积层、激活层、池化层会顺次重叠,上一层的输入作为下一层的输出。每一层都会应用多个卷积核,每个卷积核查用一个激活映射。
3.1 卷积核可视化
卷积网络这些卷积层的所有卷积核实现训练后,会发现:
- 后面几个卷积层的卷积核捕获和匹配的是一些比较简单的特色,比方边缘;
- 两头几层的卷积核代表的特色变得复杂一些,比方一些边角和斑点;
- 最初几层的特色就会变得特地丰盛和简单。
这些卷积核是从简略到简单的特色序列。这实际上和 Hubel & Wiesel 的试验后果比拟类似,即便在咱们并没有明确的让网络去学习这些从简略到简单的特色,然而给它这种层次结构并通过反向流传训练后,这些类型的卷积核最终也能学到。
3.2 激活映射与卷积核可视化分割
咱们有 32 个曾经在卷积网络中训练好的 \(5 \times 5\) 卷积核,每一个卷积核滑过原始图像失去一张激活映射,将它们可视化,咱们能够看出卷积核在原图像匹配和寻找什么。
比方下图上方红框中的第一个卷积核对应失去红框的激活映射,卷积核看起来像是一个定向边缘的模板,所以当其滑过图像,在那些有定向边缘的中央会失去较高的值。
之所以称作卷积,只是计算模式上就是卷积,滤波器和信号(图像)的元素相乘后求和。
3.3 整个卷积网络的构造
右边的输出层存有原始图像,左边的输入层失去各类别评分。
图像通过一系列卷积层、RELU 层、池化层,最初通过全连贯层失去针对不同类别的分类得分,这里只显示了得分最高的 5 个评分值和对应的类别。
整个网络包含输出层、输入层共有 17 层,架构是 [conv-relu-conv-relu-pool] x3-fc-softmax,共有 7000 个参数,应用 \(3 \times 3\) 卷积和 \(2 \times 2\) 池化区域。斯坦福大学 课程主页 上展现的就是这个 CNN 网络。
上面具体介绍卷积层、池化层等档次及其工作原理。
4. 卷积网络各层具体介绍
4.1 卷积层(Convolutional Layer,Conv layer)
卷积层是构建卷积神经网络的核心层,网络中大部分的计算量都由它产生。
对于卷积层的动图解说也能够参考 ShowMeAI 的的 深度学习教程 | 吴恩达专项课程 · 全套笔记解读 中的文章 卷积神经网络解读
1) 概述
卷积层的参数是由一些可学习的 滤波器(filter) 汇合形成的。每个滤波器在宽度和高度上都比拟小,然而深度和输出数据统一。
比方卷积神经网络第一层的一个典型的滤波器的尺寸能够是 \(5 \times 5 \times 3\)(宽高都是 \(5\) 像素,深度是 \(3\) 是因为图像应为色彩通道,所以有 3 的深度)。
在前向流传的时候,让每个滤波器都在输出数据的宽度和高度上滑动(更准确地说是做卷积),而后计算这个滤波器和输出数据对应每一个区域的内积,最终会生成一个 2 维的 激活映射(也叫激活图)(activation map),激活图给出了在每个空间地位处滤波器的反馈。
直观地来说,网络会让滤波器学习,后果是当它看到某些类型的视觉特色时就激活,具体的视觉特色可能是某些方位上的边界,或者在第一层上某些色彩的斑点,甚至能够是网络更高层上的蜂巢状或者车轮状图案。
在每个卷积层上,个别有多个滤波器组成汇合(比方 12 个),每个都会生成一个不同的二维激活映射。将这些激活映射在深度方向上层叠起来就生成了这个卷积层的输入 3D 数据。
这个 3D 数据的每一个激活图,都是由一些参数雷同的神经元在原图像的不同地位做内积失去的输入数据组成的。每张激活图对应的所有神经元参数都雷同(因为实际上就是同一个滤波器在图像上不同地位滑动的后果,每到一个地位就是一个神经元),称为 参数共享。
2) 部分连贯
卷积层每个神经元和原图像只在一个小区域进行全连贯,称为 部分连贯。因为在解决图像这样的高维度输出时,让每个神经元都与前一层中的所有神经元进行全连贯是不事实的。
部分连贯的空间大小叫做神经元的 感触野(receptive field),它的尺寸(其实就是滤波器的空间尺寸)是一个超参数。在深度方向上,这个连贯的大小总是和输入量的深度相等。即连贯在空间(宽高)上是部分的,然而在深度上总是和输出数据的深度统一。
反复一下之前的例子,一张 \(32 \times 32 \times 3\) 的图片,滤波器大小为 \(5 \times 5 \times 3\)。此时感触野尺寸是 \(5 \times 5\),滤波器的深度须要和原图像深度统一,为 \(3\)。那么神经元的权重个数为 \(5 \times 5 \times 3=75\) 个,再加一个偏置项,共 \(76\) 个。神经元和原图像一个同样大小的区域是全连贯的,共有 \(75\) 个连贯,然而与整个图像是部分连贯的(只在 \(5 \times 5\) 的空间上连贯),如果是全连贯则须要有 \(3072\) 个连贯。
- 右边:红色的是输出数据体(比方 CIFAR-10 中的图像),蓝色的局部是第一个卷积层中的所有神经元。卷积层中的每个神经元都只是与输出数据体的一个部分空间相连,然而与输出数据体的所有深度维度全副相连(所有色彩通道)。在深度方向上有多个神经元(本例中 5 个),它们都承受输出数据的同一块区域(感触野雷同)。深度方向上的神经元参数是不同的。
- 左边:神经元外部计算还和以前一样,还是计算权重和输出的内积,而后进行激活函数运算,只是它们的连贯被限度在一个部分空间,即输出数据只是原图像的一部分。
3) 神经元排列与输入数据尺寸
卷积层的所有神经元与原始图像卷积后,输入数据体的尺寸由三个超参数管制:深度(depth),步长(stride) 和 零填充(zero-padding)。
① 深度 :卷积层中应用的滤波器往往有多个, 深度就是滤波器的数量。
- 每个滤波器在输出数据中匹配计算不同的模式。
- 比方第一个卷积层的输出是原始图像,那么在深度维度上的不同神经元将可能被原图像上不同方向的边界,或者是色彩斑点激活。将这些沿着深度方向排列、感触野雷同的神经元汇合称为 深度列 (depth column),或者 纤维(fibre)。
② 步长:步长就是滤波器每次挪动逾越的像素数量。
- 当步长为 1,滤波器每次挪动 1 个像素。当步长为 2(理论中很少应用比 2 大的步长),滤波器滑动时每次挪动 2 个像素。这个操作会让输入数据体在空间上变小。
③ 零填充:在图像的边界外填充零像素点。
- 滑动时会使输入数据体在空间上变小,比方 \(32 \times 32\) 的图像通过一个卷积层输入数据在空间上可能是 \(28 \times 28\) 的,通过多层后会迅速收敛。咱们不心愿这样,于是引入了零填充,零填充有一个良好性质,能够 管制输入数据体的空间尺寸(最罕用的是用来放弃输出数据体在空间上的尺寸,这样输出和输入的宽高都相等)。
比方有一个 \(7 \times 7\) 的原始图片,滤波器的尺寸是 \(3 \times 3\),步长为 \(1\) 时的输入是 \(5 \times 5\);步长为 \(2\) 时输入是 \(3 \times 3\),但步长是 \(3\) 的时候尺寸不再适宜。
假如图片的尺寸是 \(N \times N\),滤波器尺寸是 \(F \times F\),步长为 \(S\),则输入数据的尺寸为:\((N-F)/S +1\)。所以当 \(N=7\),\(F=3\):
- \(S=1\) 时,输入为 \(5\)
- \(S=2\) 时,输入为 \(3\)
- \(S=3\) 时,输入为 \(2.333\),显然不合理
所以步长的设置不合理会导致网络的异样,引入零填充可肯定水平解决这个问题。
上面思考退出零填充的情景。在 \(7 \times 7\) 的图像里面退出一圈零像素,滤波器尺寸仍为 \(3 \times 3\),步长为 \(1\),此时的输入尺寸应该是多少?答案是 \(7 \times 7\),因为此时的原图像相当于变成 \(9 \times 9\)。此时的输入数据空间尺寸和输出的雷同。
综上,可得输入数据尺寸的计算公式:
如果输出数据体尺寸 \(W \times W\),卷积层中神经元的感触野尺寸 \(F \times F\),步长 \(S\) 和零填充的数量 \(P\),则输入数据体的空间尺寸为 \((W+2P-F)/S+1\)。
- 比方下面输出是 \(7 \times 7\),滤波器是 \(3 \times 3\),步长为 \(1\),填充为 \(1\),那么就能失去一个 \(7 \times 7\)的输入。
一般来说,当步长 \(S=1\) 时,为保障输出尺寸和输入尺寸雷同,零填充的数量为:\(P=(F-1)/2\)。
- 思考最后的问题,一张 \(32 \times 32 \times 3\) 的图像,通过有 10 个 \(5 \times 5 \times 3\) 滤波器的卷积层,步长为 \(1\),零填充数量为 \(2\),则输入的尺寸为?显然是 \(32 \times 32 \times 10\)。这是因为滤波器尺寸 \(5\) 步长 \(1\) 填充 \(2\) 能够放弃空间尺寸,滤波器的数量又决定了输入的深度。
那么这个卷积层有多少个参数呢?
- 10 个滤波器每个有 \(5 \times 5 \times 3+1=76\) 个参数,所以共有 \(760\) 个参数。
那么这个卷积层一共有多少个神经元呢?
- 答案是 \(32 \times 32 \times 10\),因为输入数据的每个数据点,都由一个神经元产生。也就是说 输入数据体的尺寸,就代表着神经元的排列形式。
然而,既然有 \(32 \times 32 \times 10\) 个神经元,每个神经元的参数为 76,那为什么只有 760 个参数呢?大家能够在前面的 参数共享 局部能够找到答案。
AlexNet 神经网络架构,博得了 2012 年的 ImageNet 挑战,它的构造中:
- 输出图像的尺寸是 \([227 \times 227 \times 3]\)
- 在第一个卷积层,神经元应用的感触野尺寸 \(F=11\),步长 \(S=4\),不应用零填充 \(P=0\)。因为 \((227-11)/4+1=55\),卷积层的深度 \(K=96\),则卷积层的输入数据体尺寸为 \([55 \times 55 \times 96]\)。\(55 \times 55 \times 96\) 个神经元中,每个都和输出数据体中一个尺寸为 \([11 \times 11 \times 3]\) 的区域全连贯。在深度列上的 96 个神经元都是与输出数据体中同一个 \([11 \times 11 \times 3]\) 区域连贯,然而权重不同。
4) 参数共享机制
在卷积层中应用参数共享是用来控制参数的数量。
就用下面的实在案例,在第一个卷积层就有 \(55 \times 55 \times 96=290,400\) 个神经元(假如神经元都是独立的)
- 因为一个滤波器每滑到一个地位,就对应一个神经元,失去一个神经元输入。滑过所有地位后的输入数据空间尺寸为 \(55 \times 55\),对应着有 \(55 \times 55\) 个神经元。再加上一共有 96 个滤波器,所以为 \(55 \times 55 \times 96\)。
- 每个神经元有 \(11 \times 11 \times 3+1=364\) 个参数。将这些合起来就是 \(290400 \times 364=105,705,600\) 个参数。单单第一层就有这么多参数,显然这个数目是十分大的。
作一个正当的假如:如果一个特色在计算某个空间地位 \((x,y)\)的时候有用,那么它在计算另一个不同地位 \((x_2,y_2)\)的时候也有用。
- 参数共享的假如是有情理的:如果在图像某些中央探测到一个程度的边界是很重要的,那么在其余一些中央也会同样是有用的,这是因为图像构造具备平移不变性。
基于这个假如,能够显著地缩小参数数量。也是基于这个假如,滤波器能够在原图片上滑动。
如果咱们将深度维度上一个独自的 2 维切片看做 深度切片(depth slice),比方这个尺寸为 \([55 \times 55 \times 96]\) 的输入数据体就有 96 个深度切片,每个尺寸为 \([55 \times 55]\)。在每个深度切片上的神经元都应用同样的权重和偏置项。
在这样的参数共享下,例子中的第一个卷积层就只有 96 个不同的参数集了,一个参数集对应一个深度切片,共有 \(96 \times (11 \times 11 \times 3+1)=34,944\) 个不同的参数(包含偏置项)。
在每个深度切片中的 \(55 \times 55\) 个权重应用的都是同样的参数。
在反向流传的时候,须要计算每个神经元对它的权重的梯度,所以须要把同一个深度切片上的所有神经元对权重的梯度进行累加,这样就失去了对这个共享权重的梯度。这样,每个切片只更新一个权重集。
补充解释 :正是因为参数共享,卷积层的前向流传在每个深度切片中能够看做是在计算神经元权重和输出数据体的 卷积 (这就是「卷积层」名字由来)。这也是为什么总是将这些权重汇合称为 滤波器(filter)(或 卷积核(kernel)),因为它们和输出进行了卷积。
有时候参数共享假如可能没有意义,特地是当卷积神经网络的输出图像是一些明确的核心构造时候。这时候咱们就应该冀望在图片的不同地位学习到齐全不同的特色。一个具体的例子就是输出图像是人脸,人脸个别都处于图片核心。你可能冀望不同的特色,比方眼睛特色或者头发特色可能(也应该)会在图片的不同地位被学习。在这个例子中,通常就放松参数共享的限度,将层称为 部分连贯层(Locally-Connected Layer)。
5) 卷积层演示
上面是一个卷积层的运行演示。因为 3D 数据难以可视化,所以所有的数据(输出数据体是蓝色,权重数据体是红色,输入数据体是绿色)都进行深度切片而后排成一列来展示。
- 输出数据体的尺寸是 \(W_1 = 5\),\(H_1 = 5\),\(D_1 = 3\)。
- 卷积层的参数是 \(K = 2\),\(F = 3\),\(S = 2\),\(P = 1\)。也就是说,有 2 个滤波器,滤波器的尺寸是 \(3 \times 3\),步长是 \(2\)。
- 因而,输入数据体的空间尺寸是 \((5-3+2)/2+1=3\)。
留神输出数据体应用了零填充 \(P=1\),所以输出数据体外边缘一圈都是 \(0\)。上面的例子在绿色的输入激活图上循环演示,展现了其中每个元素都是蓝色的输出数据和红色的滤波器逐元素相乘,而后求其总和,最初加上偏置项得来。高清版展现,倡议拜访 课程官网。
6) 用矩阵乘法实现卷积
卷积运算实质上就是在滤波器和输出数据的部分区域做点积。卷积层的罕用实现形式就是利用这一点,将卷积层的前向流传变成一个微小的矩阵乘法:
- 输出图像的部分区域被
im2col
操作拉伸为列。比方,如果输出是 \([227 \times 227 \times 3]\),要与尺寸为 \(11 \times 11 \times 3\) 的滤波器以步长为 \(4\) 进行卷积,就取输出中的 \([11 \times 11 \times 3]\) 数据块,而后将其拉伸为长度为 \(11 \times 11 \times 3=363\) 的列向量。反复进行这一过程,因为步长为 \(4\),所以输入的宽高为 \((227-11)/4+1=55\),即须要 55 \times 55=3025 个这样的列向量与滤波器做点积。所以输出数据 \(x\) 通过 im2col 操作后的输入矩阵X_col
的尺寸是 \([363 \times 3025]\),其中每列是 \(x\) 上拉伸的感触野,共有 \(55 \times 55=3,025\) 个。留神因为感触野之间有重叠,所以输出数据体中的数字在不同的列中可能有反复。 - 卷积层的权重也同样被拉伸成行。举例,如果有 96 个尺寸为 \([11 \times 11 \times 3]\) 的滤波器,就生成一个矩阵
W_row
,尺寸为 \([96 \times 363]\)。 - 当初卷积的后果和进行一个大矩阵乘法
np.dot(W_row, X_col)
是等价的了,能失去每个滤波器和每个感触野间的点积。在这个例子中,这个操作的输入是 \([96 \times 3025]\),给出了每个滤波器在每个地位的点积输入。 - 后果最初必须被从新变为正当的输入尺寸 \([55 \times 55 \times 96]\)。
这个办法的毛病就是占用内存太多,因为在输出数据体中的某些值在 X_col
中被复制了屡次。然而,其长处是有十分多高效的矩阵乘法实现形式供咱们能够应用,比方罕用的 BLAS API。同样,im2col
思路能够用在汇聚操作中。
反向流传:卷积操作的反向流传(同时对于数据和权重)还是一个卷积(然而是在空间上翻转的滤波器)。应用一个 1 维的例子比拟容易演示(这里不再开展)。
7) 其它卷积形式
① 1×1 卷积
一些网络结构中会应用 \(1 \times 1\) 的卷积,这个办法最早是在论文 Network in Network 中呈现。在起初的很多模型构造中,应用它次要是起到升降维的作用。
② 扩张卷积
大家也会看到扩张卷积(空洞卷积)这样的非凡构造。咱们之前看过的卷积层滤波器是间断的,但让滤波器中元素之间有间隙也是正当的设计,这就叫做扩张。这种非凡的卷积能够帮忙 CNN 无效扩充感触野。
如下图为一般卷积和空洞卷积的动图比照:
4.2 池化层(Pooling Layer,POOL Layer)
1) 概述
通常,在间断的卷积层之间会周期性地插入一个 池化层 。它的 作用是逐步升高数据体的空间(宽、高)尺寸,这样的话就能缩小网络中参数的数量,使得计算资源消耗变少,也能无效管制过拟合。
池化层最罕用的是 MAX 操作,对输出数据体的每一个深度切片独立进行操作,扭转它的空间尺寸。最常见的模式是应用尺寸 \(2 \times 2\) 的滤波器,以步长为 \(2\) 来对每个深度切片进行 降采样 ,将其中 B\(75\%\) 的激活信息都丢掉。每个 MAX 操作是从 \(4\) 个数字中取最大值(也就是在深度切片中某个 \(2 \times 2\) 的区域)。 深度方向放弃不变,不进行降采样。
池化层也不必零填充,并且池化滤波器间个别没有重叠,步长等于滤波器尺寸。
2) 池化层的性质
- 输出数据体尺寸:\(W_1 \times H_1 \times D_1\)
- 有两个超参数:池化尺寸 \(F\),个别为 \(2\)、\(3\);步长 \(S\),个别为 \(2\)。实际上 \(max\) 池化层个别只有两种超参数设置形式:\(F = 3\),\(S = 2\),叫做重叠汇聚(overlapping pooling);另一种更罕用的是 \(F = 2\),\(S = 2\)
-
输入数据体尺寸:\(W_2 \times H_2 \times D_2\),其中:
- \(W_2 = (W_1 – F)/S + 1\)
- \(H_2 = (H_1 – F)/S + 1\)
- \(D_2 = D_1\)
- 因为对输出进行的是固定函数计算,所以没有引入参数。此外,在池化层中很少应用零填充。
3) 池化形式
除了最大池化,池化单元还能够应用其余的函数,比方均匀池化(average pooling)或 L2 范式池化(L2-norm pooling)。均匀池化历史上比拟罕用,然而当初曾经很少应用了。
池化层在输出数据体的每个深度切片上,独立地对其进行空间上(高度、宽度)的降采样。
- 图片 右边:本例中,输出数据体尺寸 \([224 \times 224 \times 64]\) 被降采样到了 \([112 \times 112 \times 64]\),采取的滤波器尺寸是 \(2\),步长为 \(2\),而深度不变。
- 图片 左边:最罕用的降采样操作是取最大值,也就是最大池化,这里步长为 \(2\),每个取最大值操作是从 \(4\) 个数字中选取(即 \(2 \times 2\) 的方块区域中)。
反向流传
- \(max(x,y)\) 函数的反向流传能够简略了解为将梯度只沿最大的数回传。
- 在前向流传通过池化层的时候,通常会把池中最大元素的索引记录下来(有时这个也叫作 道岔switches),这样在反向流传的时候梯度路由就很高效。
一些争议
- 很多人认为能够不应用池化层。比方在 Striving for Simplicity: The All Convolutional Net 一文中,提出应用一种只有反复的卷积层组成的构造,不再应用池化层,通过在卷积层中应用更大的步长来升高数据体的尺寸。
- 有发现认为,在训练一个良好的生成模型时,弃用池化层也是很重要的。比方变动自编码器(VAEs:variational autoencoders)和生成性反抗网络(GANs:generative adversarial networks)。当初看来,将来的卷积网络结构中,可能会很少应用甚至不应用池化层。
4.3 归一化层(Normalization Layer)
在卷积神经网络的构造中,提出了一些归一化层的概念,想法是为了实现在生物大脑中观测到的克制机制。然而这些层慢慢都不再风行,因为实践证明它们的成果即便存在,也是极其无限的。
对于不同类型的归一化层,能够看看 nAlex Krizhevskyn 的对于 cuda-convnet library API) 的探讨。
4.4 全连贯层(Fully-connected Layer,FC Layer)
全连贯层,顾名思义,神经元对于前一层中的所有激活数据是全连贯的,这个和惯例神经网络中一样,通常会把前一层数组拉成一个向量,与 \(w\) 的每个行向量进行点积,失去每一类的分数。
最初一个池化层输入的后果是数据通过整个网络累计失去的,前几个卷积层可能检测一些比较简单的特色比方边缘,失去边缘图后输出到下一个卷积层,而后进行更简单的检测,这样层层下来,最初一层的后果能够看成是一组合乎模板的激活状况,比拟大的值表明之前的所有检测后果都比拟大,激活水平高,这样就汇聚了大量的信息。
尽管输入的数据比较简单,但却是非常复杂的滤波器(或特色)激活后的状况,特色在卷积核中体现。
- 第一层卷积网络输入的后果比较复杂,因为第一层的卷积核比较简单,很容易就激活了;
- 最初一层的卷积核非常复杂,所以输入的激活图看起来就会很简略,因为激活比拟艰难。然而这个激活图却能阐明简单特色的激活水平,用来评分是十分正当的。
1) 全连贯层转化为卷积层
全连贯层和卷积层之间惟一的不同就是卷积层中的神经元只与输出数据中的一个部分区域连贯,并且在同一个深度切片上的神经元共享参数。然而在两类层中,神经元都是计算点积,所以它们的函数模式是一样的。因而,将此两者互相转化是可能的:
① 对于任一个卷积层,都存在一个能实现和它一样的前向流传函数的全连贯层。
- 权重矩阵是一个微小的矩阵,除了某些特定块(这是因为有部分连贯),其余部分都是零。而在其中大部分块中,元素都是相等的(因为参数共享)。
② 反过来,任何全连贯层都能够被转化为卷积层。
- 比方,一个 \(K = 4096\)(即有 \(4096\) 个类别,\(w\) 有 \(4096\) 个列向量)的全连贯层,输出数据体的尺寸是 \(7 \times 7 \times 512\),那么 \(W\) 的每个列向量长度为 \(7 \times 7 \times 512\),全连贯之后的输入为 \(1 \times 4096\)。
- 这个全连贯层能够被等效地看做一个 \(F=7\),\(P=0\),\(S=1\),\(K=4096\) 的卷积层。换句话说,就是将滤波器的尺寸设置为和输出数据体的尺寸统一也是 \(7 \times 7 \times 512\),这样两者卷积的后果就是一个实数。又因为有 \(4096\) 个滤波器,所以输入将变成 \(1 \times 1 \times 4096\),这个后果就和应用初始的那个全连贯层一样了。
两种转换的示意图如下图所示:
上述两种转换中,全连贯层转化为卷积层在理论使用中更加有用。
假如一个卷积神经网络的输出是 \(224 \times 224 \times 3\) 的图像,一系列的卷积层和池化层将图像数据变为尺寸为 \(7 \times 7 \times 512\) 的激活数据体(在 AlexNet 中就是这样,通过应用 5 个池化层来对输出数据进行空间上的降采样,每次尺寸降落一半,所以最终空间尺寸为 224/2/2/2/2/2=7)。
全连贯层中,AlexNet 先应用了两个尺寸为 \(4096\) 的全连贯层,而后又应用了一个有 1000 个神经元的全连贯层用于计算分类评分。
咱们能够将这 3 个全连贯层中的任意一个转化为卷积层:
- 针对第一个连贯区域是 \([7 \times 7 \times 512]\) 的全连贯层,令其滤波器尺寸为 \(7 \times 7 \times 512\),\(K=4096\),这样输入数据体就为 \([1 \times 1 \times 4096]\) 了;
- 针对第二个全连贯层,令其滤波器尺寸为 \(1 \times 1 \times 4096\),\(K=4096\),这样输入数据体仍为 \([1 \times 1 \times 4096]\);
- 对最初一个全连贯层也做相似的,令其滤波器尺寸为 \(1 \times 1 \times 4096\),\(K=1000\),最终输入为 \([1 \times 1 \times 1000]\)。
咱们留神到,每次相似的变换,都须要把全连贯层的权重 \(w\) 重塑成卷积层中和输出数据尺寸雷同的滤波器。这个转化最大的意义是让一些计算更高效:
- 让卷积网络在一张更大的输出图片上滑动(即把一张更大的图片的不同区域都别离带入到卷积网络,失去每个区域的得分),失去多个输入,这样的转化能够让咱们在单个前向流传的过程中实现上述的操作。
咱们来看看这个例子:
- 将 \(224 \times 224 \times 3\) 的图片通过卷积网络(不包含最初三个全连贯层)后失去 \(7 \times 7 \times 512\) 的激活数据体(降采样 5 次,除 32)。而后通过第一个全连贯层,该全连贯层的神经元须要 \(7 \times 7 \times 512\) 个参数。
-
如果换成一张 \(384 \times 384\) 的大图片通过同样的网络(不包含最初三个全连贯层)等效输入尺寸为 \(12 \times 12 \times 512\)(\(384/32 = 12\)),如果间接用来通过全连贯层,因为尺寸不同,会无奈通过。
- 这时就须要把 \(384 \times 384\) 的图片切成 \(6 \times 6\) 个 \(224 \times 224\) 的小图像顺次通过卷积网络,这样全连贯层之前的输入为 36 个 \(7 \times 7 \times 512\) 的激活数据体,远远大于 \(12 \times 12 \times 512\),所以因为全连贯层的存在,导致大量的反复运算。
- 然而如果将 3 个全连贯层转化来的 3 个卷积层,就不会存在尺寸的问题,\(384 \times 384\( 的图片能够间接通过转化后的卷积网络,最终失去 \(6 \times 6 \times 1000\) 的输入(因为 \((12 – 7)/1 + 1 = 6\) 或 \((384-224)/32+1 = 6\))。这样咱们能够在 \(384 \times 384\) 图像上一次失去 \(6 \times 6\) 个分类得分数组,而不是独立的失去 36 个大小为 \([1 \times 1 \times 1000]\) 的得分数组,大大节俭计算量。
5. 卷积神经网络层的排列与尺寸设置
5.1 层的排列法则
卷积神经网络通常是由三种层形成:卷积层,池化层和全连贯层(简称 FC)。ReLU 激活函数也应该算是一层,它逐元素地进行激活函数操作。
卷积神经网络最常见的模式就是将一些卷积层和 ReLU 层放在一起,其后紧跟池化层,而后反复如此直到图像在空间上被放大到一个足够小的尺寸,在某个中央过渡成成全连贯层也较为常见。最初的全连贯层失去输入,比方分类评分等。
换句话说,最常见的卷积神经网络构造如下:
INPUT → [[CONV → RELU]*N → POOL?]*M → [FC → RELU]*K → FC
其中 *
指的是反复次数,POOL?
指的是一个可选的池化层。其中 \(N >=0\)(通常 \(N<=3\)),\(M>=0\),\(K>=0\)(通常 \(K<3\))。
例如,上面是一些常见的网络结构法则:
- INPUT → FC,实现一个线性分类器,此处 \(N = M = K = 0\);
- INPUT → CONV → RELU → FC;
- INPUT → [CONV → RELU → POOL]*2 → FC → RELU → FC,此时在每个池化层前只有一个卷积层;
- INPUT → [CONV → RELU → CONV → RELU → POOL]3 → [FC → RELU]2 → FC,此时每个池化层前有两个卷积层,这个思路实用于更大更深的网络,因为在执行具备破坏性的池化操作前,多重的卷积层能够从输出数据中学习到更多的简单特色。
教训 : 几个小滤波器卷积层的组合比一个大滤波器卷积层好。
假如你一层一层地重叠了 \(3\) 个 \(3 \times 3\) 的卷积层(层与层之间有非线性激活函数)。
- 第一个卷积层中的每个神经元都对输出数据体有一个 \(3 \times 3\) 的感触野
- 第二个卷积层上的神经元对第一个卷积层有一个 \(3 \times 3\) 的感触野,也就是对输出数据体有 \(5 \times 5\) 的感触野(32-30-28)。
- 在第三个卷积层上的神经元对第二个卷积层有 \(3 \times 3\) 的感触野,也就是对输出数据体有 \(7 \times 7\) 的感触野。
下图是第 1 层和第 2 层卷积层的重叠感触野示意图
假如不采纳这 3 个 \(3 \times 3\) 的卷积层,而是应用一个独自的有 \(7 \times 7\) 的感触野的卷积层,那么所有神经元的感触野也是 \(7 \times 7\),然而就有一些毛病:
- ① 多个卷积层与非线性的激活层交替的构造,比繁多卷积层的构造更能提取出深层的更好的特色。
- ② 假如所有的数据有 \(C\) 个通道,即输入输出数据深度均为 \(C\),那么独自的 \(7 \times 7\) 卷积层将会蕴含 \(C \times (7 \times 7 \times C) = 49 C^2\) 个参数,而 3 个 \(3 \times 3\) 的卷积层的组合仅有 \(3 \times (C \times (3 \times 3 \times C)) = 27 C^2\) 个参数。
直观说来,最好抉择带有小滤波器的卷积层组合,而不是用一个带有大的滤波器的卷积层。前者能够表白出输出数据中更多个强力特色,应用的参数也更少。
惟一的有余是,在进行反向流传时,两头的卷积层可能会导致占用更多的内存。
5.2 层的尺寸设置法则
1) 输出层
原始输出图像,常常设置为 \(2^N\) 模式。罕用数字包含 32(比方 CIFAR-10),64,96(比方 STL-10)或 224(比方 ImageNet 卷积神经网络)、384 和 512。
2) 卷积层
- 应该应用小尺寸滤波器(比方 \(3 \times 3\) 或最多 \(5 \times 5\)),应用步长 \(S=1\)。
-
要对输出数据进行零填充,这样卷积层就不会扭转输出数据在空间维度上的尺寸。比方
- 当 \(F=3\),那就应用 \(P=1\) 来放弃输出尺寸;
- 当 \(F=5\),那就应用 \(P=2\) 来放弃输出尺寸。
- 个别对于任意 \(F\),当 \(P=(F-1)/2\) 的时候能放弃输出尺寸。
- 如果必须应用更大的滤波器尺寸(比方 \(7 \times 7\) 之类),通常只用在第一个输出原始图像的卷积层上。
3) 池化层
- 负责对输出数据的空间维度进行降采样。
- 最罕用的设置是用用 \(2 \times 2\) 感触野(即 \(F=2\))的最大值汇聚,步长为 \(2\)(\(S=2\))。留神这一操作将会把输出数据中 75% 的激活数据抛弃(因为对宽度和高度都进行了 2 的降采样)。
- 另一个不那么罕用的设置是应用 \(3 \times 3\) 的感触野,步长为 2。最大值汇聚的感触野尺寸很少有超过 3 的,因为汇聚操作过于强烈,易造成数据信息失落,这通常会导致算法性能变差。
在某些案例(尤其是晚期的卷积神经网络构造)中,基于后面的各种规定,内存的使用量迅速飙升。
- 例如,应用 64 个尺寸为 \(3 \times 3\) 的滤波器对 \(224 \times 224 \times 3\) 的图像进行卷积,零填充为 1,失去的激活数据体尺寸是 \([224 \times 224 \times 64]\)。这个数量就是一千万的激活数据,或者就是 72MB 的内存(每张图就是这么多,激活函数和梯度都是)。
因为 GPU 通常因为内存导致性能瓶颈,所以做出一些斗争是必须的。在实践中,人们偏向于在网络的第一个卷积层做出斗争。
- 例如,能够斗争可能是在第一个卷积层应用步长为 \(2\),尺寸为 \(7 \times 7\) 的滤波器(比方在 ZFnet 中)。在 AlexNet 中,滤波器的尺寸的 \(11 \times 11\),步长为 \(4\)。
6. 卷积神经网络经典案例
这些网络的具体构造会在后续再开展介绍。
对于具体的下述网络结构解说也能够浏览 ShowMeAI 的的 深度学习教程 | 吴恩达专项课程 · 全套笔记解读 中的文章 经典 CNN 网络实例详解
6.1 LeNet
第一个胜利的卷积神经网络应用,是 Yann LeCun 在上世纪 90 年代实现的。当然,最驰名还是被利用在辨认数字和邮政编码等的 LeNet 构造。
6.2 AlexNet
AlexNet 卷积神经网络由 Alex Krizhevsky,Ilya Sutskever 和 Geoff Hinton 实现。AlexNet 在 2012 年的 ImageNet ILSVRC 比赛 中夺冠,性能远远超出第二名(16% 的 top5 错误率,第二名是 26% 的 top5 错误率)。这个网络的构造和 LeNet 十分相似,然而更深更大,并且应用了层叠的卷积层来获取特色。
6.3 ZF Net
Matthew Zeiler 和 Rob Fergus 创造的网络在 2013 年 ILSVRC 较量中夺冠,它被称为 ZFNet(Zeiler & Fergus Net 的简称)。它通过批改构造中的超参数来实现对 AlexNet 的改进,具体说来就是减少了两头卷积层的尺寸,让第一层的步长和滤波器尺寸更小。
6.4 GoogLeNet
2014 年 ILSVRC 的胜利者是谷歌的 Szeged 等 实现的卷积神经网络。它次要的奉献就是实现了一个 奠基模块,它可能显著地缩小网络中参数的数量(AlexNet 中有 60M,该网络中只有 4M)。以及,GoogLeNet 没有在卷积神经网络的最初应用全连贯层,而是应用了一个均匀池化,把大量不是很重要的参数都去除掉了。GooLeNet 还有几种改良的版本,最新的一个是 Inception-v4。
6.5 VGGNet
VGGNet 是 Karen Simonyan 和 Andrew Zisserman 实现的卷积神经网络,在 2014 年 ILSVRC 获得第二名的问题。它次要的奉献是展现出网络的深度是算法低劣性能的要害局部。他们最好的网络蕴含了 16 个卷积 / 全连贯层。网络的构造十分统一,从头到尾全副应用的是 \(3 \times 3\) 的卷积和 \(2 \times 2\) 的池化。
6.6 ResNet
残差网络(Residual Network)是 2015 年 ILSVRC 的胜利者,由何恺明等实现。它应用了非凡的 跳跃链接,大量应用了 批量归一化(batch normalization)。这个构造同样在最初没有应用全连贯层。
6.7 计算上的考量
在构建卷积神经网络构造时,最大的瓶颈是内存瓶颈。大部分古代 GPU 的内存都不太大。要留神三种内存占用起源:
1) 来自 两头数据体 尺寸
卷积神经网络中的每一层中都有激活数据体的原始数值,以及损失函数对它们的梯度(和激活数据体尺寸统一)。通常,大部分激活数据都是在网络中靠前的层中(比方第一个卷积层)。
- 在训练时,这些数据须要放在内存中,因为反向流传的时候还会用到。
- 在测试时能够优化:让网络在测试运行时候每层都只存储以后的激活数据,而后抛弃后面层的激活数据,这样就能缩小微小的激活数据量。
2) 来自 参数 尺寸
- 即整个网络的参数的数量、反向流传时它们的梯度值,以及应用 momentum、Adagrad 或 RMSProp 等办法进行最优化时的每一步计算缓存。
- 因而,存储参数向量的内存通常须要在参数向量的容量根底上乘以 3 或者更多。
3) 卷积神经网络实现还有各种零散的内存占用,比方成批的训练数据,裁减的数据等
一旦对于所有这些数值的数量有了一个大略预计(蕴含激活数据,梯度和各种杂项),把这个值乘以 4,失去原始的字节数(因为每个浮点数占用 4 个字节,如果是双精度浮点数那就是占用 8 个字节),而后屡次除以 1024 别离失去占用内存的 KB、MB,最初是 GB 计量。如果你的网络有内存问题,一个罕用的办法是升高批尺寸(batch size),因为绝大多数的内存都是被激活数据消耗掉了。
6.8 拓展参考
ConvNetJS CIFAR-10 demo 能够在服务器上实时地调试卷积神经网络的构造,察看计算结果。
7. 拓展学习
能够点击 B 站 查看视频的【双语字幕】版本
- 【课程学习指南】斯坦福 CS231n | 深度学习与计算机视觉
- 【字幕 + 材料下载】斯坦福 CS231n | 深度学习与计算机视觉 (2017·全 16 讲)
- 【CS231n 进阶课】密歇根 EECS498 | 深度学习与计算机视觉
- 【深度学习教程】吴恩达专项课程 · 全套笔记解读
- 【Stanford 官网】CS231n: Deep Learning for Computer Vision
8. 要点总结
- 卷积神经网络的历史
- 卷积神经网络与惯例神经网络的比照;
- CNN 卷积层、池化层、ReLU 层、全连贯层;
- CNN 部分连贯、参数共享、最大池化、步长、零填充、数据体尺寸
- CNN 层的法则与尺寸设置
- CNN 经典案例
斯坦福 CS231n 全套解读
- 深度学习与 CV 教程(1) | CV 引言与根底
- 深度学习与 CV 教程(2) | 图像分类与机器学习根底
- 深度学习与 CV 教程(3) | 损失函数与最优化
- 深度学习与 CV 教程(4) | 神经网络与反向流传
- 深度学习与 CV 教程(5) | 卷积神经网络
- 深度学习与 CV 教程(6) | 神经网络训练技巧 (上)
- 深度学习与 CV 教程(7) | 神经网络训练技巧 (下)
- 深度学习与 CV 教程(8) | 常见深度学习框架介绍
- 深度学习与 CV 教程(9) | 典型 CNN 架构 (Alexnet, VGG, Googlenet, Restnet 等)
- 深度学习与 CV 教程(10) | 轻量化 CNN 架构 (SqueezeNet, ShuffleNet, MobileNet 等)
- 深度学习与 CV 教程(11) | 循环神经网络及视觉利用
- 深度学习与 CV 教程(12) | 指标检测 (两阶段, R-CNN 系列)
- 深度学习与 CV 教程(13) | 指标检测 (SSD, YOLO 系列)
- 深度学习与 CV 教程(14) | 图像宰割 (FCN, SegNet, U-Net, PSPNet, DeepLab, RefineNet)
- 深度学习与 CV 教程(15) | 视觉模型可视化与可解释性
- 深度学习与 CV 教程(16) | 生成模型 (PixelRNN, PixelCNN, VAE, GAN)
- 深度学习与 CV 教程(17) | 深度强化学习 (马尔可夫决策过程, Q-Learning, DQN)
- 深度学习与 CV 教程(18) | 深度强化学习 (梯度策略, Actor-Critic, DDPG, A3C)
ShowMeAI 系列教程举荐
- 大厂技术实现:举荐与广告计算解决方案
- 大厂技术实现:计算机视觉解决方案
- 大厂技术实现:自然语言解决行业解决方案
- 图解 Python 编程:从入门到精通系列教程
- 图解数据分析:从入门到精通系列教程
- 图解 AI 数学根底:从入门到精通系列教程
- 图解大数据技术:从入门到精通系列教程
- 图解机器学习算法:从入门到精通系列教程
- 机器学习实战:手把手教你玩转机器学习系列
- 深度学习教程:吴恩达专项课程 · 全套笔记解读
- 自然语言解决教程:斯坦福 CS224n 课程 · 课程带学与全套笔记解读
- 深度学习与计算机视觉教程:斯坦福 CS231n · 全套笔记解读