人工智能AI 全栈体系(四)

第一章 神经网络是如何实现的

除了全连接神经网络外,还有其他形式的神经网络。
此节将讲述神经网络的另一种形式:卷积神经网络。

四、卷积神经网络

  • 首先我们看看全连接神经网络有什么不足。正如其名字一样,全连接神经网络,两个相邻层的神经元都有连接,当神经元个数比较多时,连接权重会非常多,一方面会影响神经网络的训练速度,另一方面,在使用神经网络时也会影响计算速度。实际上,在有些情况下,神经元是可以共享的。

请添加图片描述

1. 提取局部模式

  • 一个神经元可以看作是一个模式,模式体现在权重上,通过运算,可以抽取出相应的模式。神经元的输出可以看作是与指定模式匹配的程度或者概率。在一个图像的局部是否有某个模式,概率有多大,用一个小粒度的模式,在一个局部范围内匹配就可以了。

请添加图片描述

  • 比如,假设 k = [ − 1 , 0 , 1 − 1 , 0 , 1 − 1 , 0 , 1 ] k= \begin{bmatrix} -1,&0,&1\\ -1,&0,&1\\ -1,&0,&1\end{bmatrix} k= 1,1,1,0,0,0,111
    表示了一个3×3的模式,我们先不管这个模式代表了什么,我们想知道在一个更大的图像中,比如5×5大小的图像上是否具有这种模式,由于图像比模式大,具有多个3×3的区域,每个区域上都可能具有这个模式,这样的话,我们就需要用k在每个区域上做匹配得到一个匹配值,匹配值的大小反应了这个区域与模式的匹配程度。下图给出了左上角3×3区域与模式k的匹配结果,如果我们先按行、再按列,每次移动一个位置进行匹配,就得到了下图中的输出结果。
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述

2. 全连接、卷积神经网络对比

请添加图片描述

2.1 卷积神经网络
  • 卷积神经网络:两层之间的神经元不是全部有连接的,比如输出层左上角的神经元只与输入层左上角区域的 9 个神经元有连接,而输出层右下角的神经元只与输入层右下角区域的 9 个神经元有连接,其他神经元虽然没有画出来,也是一样的。
2.2 局部连接
  • 这就是所谓的局部连接。因为我们只是查看一个局部范围内是否有这种模式,所以只需要局部连接就可以了,既减少了连接数量,又达到了局部匹配的目的。这样就减少了连接权重,可以加快计算速度。
2.3 权值共享
  • 如图所示,无论是与图像的左上角匹配,还是与做左中角匹配,我们都是与同一个模式进行匹配,因此图中红色的连接权重,和绿色的连接权重应该是一样的,这样才可能匹配的是同一个模式。不同区域的权重是一样的。
  • 在这种情况下,权重一共就 9 个,再加上神经元的偏置项 b,一共也就 10 个参数。而且与输入层有多少个神经元无关,这就是所谓的权值共享。
2.4 参数
  • 如果是全连接神经网络需要多少个参数?
    • 输入是 5×5 共 25 个输入,输出是 3×3 共 9 个神经元,如果是全连接的话,则需要 25*9=225 个权重参数,再加上每个神经元有一个偏置项 b,则总的参数量为 225+9=234 个。
  • 如果是全连接神经网络需要 234 个参数,而采用这种局部连接、权值共享的神经网络则只需要 10 个参数,大大地减少了参数量。
2.5 卷积神经网络特点
  • 这样的神经网络,称为卷积神经网络,其中的模式 k 称作卷积核。其特点就是局部连接、权值共享。
  • 卷积核可以根据需要设置不同的大小,卷积核越小,所表示的模式粒度就越小。由于卷积核相当于抽取具有某种模式的特征,所以又被称作过滤器。

3. 例子:边缘提取

  • 下图左边是“口”字的图像,我们想提取图像中“横”模式的特征,可以使用如图右边中卷积核对其进行匹配,卷积结果如中间所示。
    请添加图片描述
  • 绿色部分反应了“口”字上下两个“横”的上边缘信息,除了两端的匹配结果为 3 外,其余均为 4,匹配值都比较大。而黄色部分反应的是“口”字上下两个“横”的下边缘信息,除了两端匹配值为-3 外,其余均为-4,匹配值的绝对值也都比较大。“口”字中间部分如图所示的中间蓝色部分是没有笔画的,可以认为是一个没有笔画的“横”,其上边缘反应在图中的粉色部分,匹配值为-3 或-4,而下边缘对应图中的灰色部分,匹配值为 3 或者 4。对于“口”字的其他与“横”没有关系的部分,匹配值基本为 0,少数几个与“横”连接的位置匹配是 1 或者-1。由此可见,只要是与“横”有关的,匹配值的绝对值都比较大,大多为 4,少数位置为 3,而与“横”无关的部分,匹配值的绝对值都比较小,大多为 0,少数地方为 1。
  • 同前面介绍过的数字识别的例子一样,也可以在卷积神经元中加上一个 sigmoid 函数,表示是不是“横”的概率,对匹配值取了绝对值后再使用 sigmoid 函数的结果如下图所示,从图中可以看出,与“横”有关的位置概率值基本为 1,而其他位置基本为 0.5,说明结果不确定。所以,图示的卷积核就起到了提取“横”模式特征的作用。同样的,我们也可以用类似的方法提取“竖”模式特征。

请添加图片描述
在这里插入图片描述

4. 卷积核的大小(一)

  • 上述例子可以很好地体现出卷积神经网络提取局部模式特征的作用。
  • 但是如何设计卷积核呢?

请添加图片描述

  • 同全连接神经网络一样,卷积核也就是权重,也是可以通过 BP 算法训练出来的,不需要人工设计。只是对于卷积神经网络来说,由于有局部连接和权值共享等,需要重新推导具体的 BP 算法,其算法思想是完全一样的。
  • 卷积神经网络不是只有一个输入层和一个输出层,在一层卷积之后,还可以再添加卷积层,可以有很多层。
  • 输入层有 5×5 个神经元,经过一个 3×3 的卷积操作后,下一层就只有 3×3 个神经元了,这样一层层做下去后面的神经元数是不是就越来越少了?

5. 填充

  • 这样一层层加上卷积层后,每层的神经元确实会越来越少。如果想保持经过一个卷积层后神经元个数不变,可以通过在前一层神经元四周填充 0 的办法解决。比如图例,我们可以在输入层填充一圈 0,由原来的 5×5 变为 7×7,这样卷积层的输出就还是保持 5×5 的大小了。究竟需要补充几圈 0,与卷积核的大小有关,对于 3×3 的卷积核需要补充一圈 0,而对于 5×5 的卷积核,则需要补充两圈 0,才能使得输出的神经元数与输入保持一致。事实上,上述的“口”字的例子时,为了保持输出的神经元个数与输入一致,已经进行了填充操作。
    请添加图片描述
    请添加图片描述
    请添加图片描述
  • 同一个输入可以有多个不同的卷积,每个卷积得到一个输出,称作通道,有多少个卷积核,就得到多少个通道,不同的通道并列起来作为输出。如图所示,具有两个卷积核,得到两个通道的输出。

6. 步长

请添加图片描述

7. 多卷积核

请添加图片描述

  • 输出得到两个通道,如果在后面再接一个卷积层,由于输入变成了两个通道,这时卷积如何计算呢?

8. 多通道输入时的卷积

  • 多通道卷积问题。这时的卷积核可以看成是“立体”的,除了高和宽以外,又多了一个“厚度”,厚度的大小与输入的通道数一样。
    请添加图片描述
    请添加图片描述
  • 在图中,输入由三个通道组成,所以卷积核的厚度与通道数一致也为 3。这样卷积核的参数共有 3×3×3+1=28 个。前面的 3×3 是卷积核的大小,最后一个 3 对应 3 个通道。计算时与单通道时一样,也是从左上角开始,按照先行后列的方式,依次从输入中取 3×3×3 的区域,与卷积核对应位置的权重相乘,再求和,得到一个输出值。值得注意的是,无论有几个输入通道,如果只有一个卷积核,那么输出的通道数也只有一个。如果有多个卷积核,则输出的的通道数就有多个,与卷积核数一致。下图给出了一个输入具有两个通道的卷积计算示例。

9. 多通道卷积举例

请添加图片描述

  • 最左边是输入的两个通道,中间是与两个通道相对应的厚度为 2 的卷积核,最右边是卷积的结果,由于只有一个卷积核,结果也只有一个通道。同样可以通过多个卷积核得到多个通道的输出。
  • 由于卷积核的厚度总是与输入的通道数是一致的,所以平时说卷积核时,往往会省略其厚度,只说卷积核的高和宽,比如上例中的卷积核为 3×3,不用说具体的厚度是多少,默认厚度就是输入的通道数。

10. 卷积核的大小(二)

请添加图片描述

  • 卷积核越小,关注的“视野”范围也越小,提取的特征粒度也就越小。反之卷积核越大,其视野范围也大,提取的特征粒度也就越大。但是这些都是相对于同样的输入情况下来说的。由于多个卷积层可以串联起来,同样大小的卷积核在不同的层次上,其提取的特征粒度也是不一样的。
  • 不同层的卷积其输入是不同的。以图像处理为例,如果输入是原始图像,则输入都是一个个的像素,卷积核只能在像素级提取特征。如果是下一个卷积层,输入是已经抽取的特征,是在特征级的水平上再次抽取特征,所以这两种情况下,即便卷积核大小是相同的,其抽取的特征粒度也是不同的,越是上层(靠近输出层),提取到的特征粒度越大。
  • 上图给出了一个简单的卷积核大小为 3 的例子。中间一层神经元(可以认为是一个卷积核)每个只能感受到下面 3 个输入的信息,最上边的神经元,虽然卷积核也是 3,但是通过中间层的 3 个神经元,可以感受到输入层的 5 个输入信息,相当于视野被扩大了,提取的特征粒度也就变大了。
  • 卷积核的作用相当于提取具有某种模式的特征,有些特征比较明显,取值就比较大,有些特征不明显,甚至没有这种特征,取值就会比较小。是否可以只把取值大的特征保留下来,突出这些特征呢?

11. 池化

  • 在卷积层之后,可以加入一个被称作“池化”的层进行一次特征的筛选,将明显的特征保留下来,去掉那些不明显的特征。

请添加图片描述

12. 最大池化

  • 下图是一个窗口为 2×2、步长为 2 的最大池化示意图。池化窗口先行后列进行移动,每次移动一个步长的位置,在这个例子中就是两个位置,然后取窗口内的最大值作为池化的输出,这就是最大池化方法。窗口和步长的大小是可以设置的,最常用的是窗口为 2×2、步长为 2 池化。经过这种最大池化之后,保留了每个窗口内最大的模式特征,同时使得神经元的的个数减少到原来的四分之一,起到了数据压缩的作用。

请添加图片描述

  • 除了最大池化方法外,还有平均池化方法,取窗口内的平均值作为输出。最大池化体现的是一个局部区域内的主要特征,平均池化体现的是一个局部区域内特征的平均值。
  • 需要强调的是,池化方法是作用在每个通道上的,池化前后的通道数是一样多的。

13. 神经网络应用举例

13.1 LeNet 神经网络
  • 这是一个数字识别的实际例子,该例子通过联合应用全连接神经网络和卷积神经网络实现手写数字的识别。
    请添加图片描述
  • 这是一个比较早期的用于手写数字识别的神经网络 LeNet,输入是 32×32 的灰度数字图像,第一个卷积层采用 6 个无填充、步长为 1 的 5×5 卷积核,这样就得到了 6 个通道,每个通道为 28×28 个输出。然后使用一个 2×2 的步长为 2 的最大池化,得到 6 个 14×14 的通道。第二个卷积层采用 16 个无填充、步长为 1 的 5×5 卷积核,得到 16 个通道、每个通道为 10×10 的输出。再使用一个 2×2 步长为 2 的最大池化,进一步压缩为 16 个通道、每个通道为 5×5 的输出。接下来连接两个全连接的隐含层,神经元个数分别为 120 和 84,最后一层是 10 个输出,分别对应 10 个数字的识别结果。每个卷积核或者神经元均带有激活函数,早期激活函数大多采用 sigmoid 函数,现在一般在输出层用 softmax 激活函数,其他地方用 ReLU 激活函数。
  • 第一个卷积层是 5×5 的卷积核,输入是单通道,每个卷积核 25 个参数,共 6 个卷积核,所以参数个数为 5×5×6=150;第二个卷积层的卷积核还是 5×5 的,但是通道数为 6,所以每个卷积核参数个数为 5×5×6 个参数,共有 16 个卷积核,所以参数个数为 5×5×6×16=2400;第一个全连接输入是 16 个 5×5 的通道,所以共有 5×5×16 个神经元,这些神经元与其下一层的 120 个神经元一一相连,所以有 5×5×16×120=48000 个参数,该 120 个神经元又与下一层的 84 个神经元全连接,所以有 120×84=10080 个参数;这层的 84 个神经元与输出层的 10 个神经元全连接,有 84×10=840 个参数。所以这个神经网络的全部参数个数为上述参数个数之和,即 150+2400+48000+10080+840=61470 个参数。
  • 但是偏置 b 也应该是一个参数。对于卷积核来说,由于共享参数,所以一个卷积核有一个 b,而对于全连接部分来说,每个神经元有一个 b。这样的话,第一个卷积层有 6 个卷积核,所以有 6 个 b,第二个卷积层有 16 个卷积核,所以有 16 个 b,而后面的全连接层分别有 120、84 和 10 个神经元,所以偏置的数量分别是 120、84 和 10。这样算的话,在前面参数的基础上,应该再加上 6+16+120+84+10=236 个参数,所以全部参数是 61470+236=61706 个。
  • 这里 16 个 5×5 的通道,如何和下一层的 120 个神经元全连接呢?16 个 5×5 通道共有 400 个神经元,把它们展开成一长串就可以了。相当于 400 个神经元与 120 个神经元全连接。
13.2 VGG-16 神经网络
  • 该神经网络曾经参加 ImageNet 比赛,以微弱差距获得第二名。ImageNet 是一个图像识别的比赛,有 1000 个类别的输出,该项比赛有力地促进了图像识别研究的发展。
    请添加图片描述
  • 该神经网络非常规整,像一个塔一样,我们从输入到输出分块介绍其组成。

(1)由于处理的是彩色图像,所以输入是由红、绿、蓝三色组成的三个通道,大小为 224×224×3,这里的 3 是指 3 个通道。

(2)连续 2 层带填充的 3×3 卷积层(即边缘补充 0),每层都有 64 个卷积核,输出是 64 个通道,每个通道为 224×224。每个卷积核均附加 ReLU 激活函数。后面的卷积核均附加了 ReLU 激活函数,如果没有特殊情况,就不再单独说明了。

(3)2×2 步长为 2 的最大池化,还是 64 个通道,每个通道被压缩到 112×112。

(4)连续 2 层带填充的 3×3 卷积层,每层都有 128 个卷积核,输出是 128 个通道,每个通道为 112×112。

(5)2×2 步长为 2 的最大池化,输出是 128 个通道,每个通道被压缩到 56×56。

(6) 连续 3 层带填充的 3×3 卷积层,每层都有 256 个卷积核,输出是 256 个通道,每个通道为 56×56。

(7)2×2 步长为 2 的最大池化,输出是 256 个通道,每个通道被压缩到 28×28。

(8)连续 3 层带填充的 3×3 卷积层,每层都有 512 个卷积核,输出是 512 个通道,每个通道为 28×28。

(9)2×2 步长为 2 的最大池化,输出是 512 个通道,每个通道被压缩到 14×14。

(10)连续 3 层带填充的 3×3 卷积层,每层都有 512 个卷积核,输出是 512 个通道,每个通道为 14×14。

(11)2×2 步长为 2 的最大池化,输出是 512 个通道,每个通道被压缩到 7×7。

(12)连续 2 层全连接层,每层 4096 个神经元,均附带 ReLU 激活函数。

(13)由于输出是 1000 个类别,所以输出层有 1000 个神经元。

  • 最后加一个 softmax 激活函数,将输出转化为概率。

14. 总结

请添加图片描述

  • 卷积神经网络的特点是局部连接、参数共享,通过这种方式有效地减少了神经网络的参数量。
  • 卷积神经网络通过卷积核提取局部特征,由于其局部连接、参数共享的特点,可以提取输入图像在不同位置具有相似属性的特征模式。卷积核的大小决定了提取的特征粒度,卷积核越小,提取的特征粒度越小,卷积核越大,提取的特征粒度越大。当多个卷积层串联在一起时,越是在上层(靠近输出层)的卷积层,体现的视野越大,提取的特征粒度也越大,即便卷积核大小是一样的,由于输入的粒度大小不一样,其提取的特征粒度也是不一样的。
  • 在图像处理中,卷积核的大小一般是 k×k 的方形矩阵,按照给定的步长对输入图像先行后列地进行“扫描”,获取图像中不同位置的相似特征。当输入为多个通道时,卷积核变成了一个长方体,其“厚度”与输入的通道数一致,所以通常在说卷积核大小时并不包含其厚度,厚度默认为输入的通道数。
  • 一个卷积核构成一个输出通道,而不论其输入包含多少个通道。在同一个输入下可以使用多个卷积核,获得多个输出通道,输出通道数与卷积核的数量一致。
  • 如果希望卷积层的输出大小与输入大小一致,可以通过在输入图像四周填充 0 的方式实现,具体需要填充多少圈 0,与卷积核的大小和步长有关。比如同是在步长为 1 的情况下,如果卷积核的大小是 3×3,则需要在输入图像四周填充一圈 0,如果卷积核的大小是 5×5,则需要填充两圈 0。
  • 在卷积神经网络中,通常还包含池化层,起到特征压缩的目的。在图像处理中,池化窗口一般是方形的,依据取窗口内的最大值或者平均值,池化分为最大池化和平均池化两种。同卷积操作一样,池化也是依据给定的步长对输入进行先行后列的扫描。所不同的是,池化窗口并没有厚度,只作用在一个通道上,输入有多少个通道,输出还是多少个通道,并不改变通道的个数。
  • 通常卷积神经网络是和全连接神经网络混合在一起使用的,前面几层是卷积层,用于提取特征,后面几层是全连接层,通过对特征的综合实现分类等操作。LeNet 网络和 VGG-16 网络是两个典型的应用。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柠檬小帽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值