zoukankan      html  css  js  c++  java
  • 深度学习听课 | 卷积神经网络 | 04

    卷积神经网络简介

    多层的线性网络和单层的线性网络没有区别,而且线性模型能够解决的问题是有限的。

    比如A Neural Network playground 中,第四张图形,是无法画一条直线分开的。
    也就是,如果Activation只选择Linear的话,那么多层和单层的效果是一致的。

    更复杂抽象的数据

    一个单隐藏层含有更多的神经元,就能捕捉更多的特征。

    有更多的隐藏层,意味着能从数据集中提取更多复杂的结构。

    更多神经元+更深的网络=更复杂的抽象。

    在这里插入图片描述

    激活函数的选择

    涉及网络优化的时候,会有不同的激活函数选择。

    神经网络的隐藏层和输出单元用什么激活函数是一个重要的问题。

    之前我们都是选用sigmod函数,但有时候其他的激活函数效果好得多。

    在这里插入图片描述

    这里主要介绍

    sigmod
    tanh
    ReLu
    Leaky ReLu
    

    tanh和sigmod非常相似,可以理解为tanh为sigmod向下平移了0.5。

    tanh函数的效果比sigmod好,因为函数输出介于-1和1之间。

    注意: tanh函数存在和sigmod函数一样的缺点,就是当z趋近无穷大(或无穷小),函数的梯度(即函数的斜率)就趋于0,这使得梯度算法的速度会减慢。

    一般效果不错的的ReLu。

    当z>0时,梯度始终为1,从而提高神经网络基于梯度算法的运算速度,收敛速度远大于sigmod和tanh。

    然而当z<0时,梯度一直为0,但是在实际的运用中,该缺陷的影响不是很大。(比如像素值输入为[0,255])

    Leaky ReLU 保证在 z < 0 的时候,梯度仍然不为 0。理论上来说,Leaky ReLU 有 ReLU 的所有优点,但在实际操作中没有证明总是好于 ReLU,因此不常用。

    为什么需要非线性的激活函数

    使用线性的激活函数 == 不使用激活函数 == 直接使用logistic回归
    无论线性组合叠加多少层,最终都可以归结为一个线性组合 =》 相当于没有隐藏层,就成了最原始的感知机。

    在这里插入图片描述

    为什么需要卷积神经网络

    图像特征数量对神经网络压力太大

    假设下图是一图片大小为28 * 28 的黑白图片时候,每一个像素点只有一个值(单通道)。那么总的数值个数为 784个特征。

    在这里插入图片描述

    那现在这张图片是彩色的,那么彩色图片由RGB三通道组成,也就意味着总的数值有28 ×28×3 = 2352个值。

    在这里插入图片描述

    每个像素点有R、G、B三个特征,28×28个像素点就有28×28×3个特征。当然,通常这样的特征包含大量的冗余。

    (这里先不纠结如何计算图像的特征数量)

    从上面我们得到一张图片的输入是2352个特征值,即神经网路当中与若干个神经元连接,假设第一个隐层是10个神经元,那么也就是23520个权重参数。

    如果图片再大一些呢,假设图片为1000 ×1000× 3,那么总共有3百万数值,同样接入10个神经元,那么就是3千万个权重参数。这样的参数大小,神经网络参数更新需要大量的计算不说,也很难达到更好的效果,大家就不倾向于使用多层神经网络了。

    使用卷积神经网络: 减少网络的参数数量,达到更好的效果。

    感受野

    在这里插入图片描述

    边缘检测

    为了能够用更少的参数,检测出更多的信息,基于上面的感受野思想,通常神经网络需要检测出物体最明显的垂直和水平边缘来区分物体,比如

    在这里插入图片描述

    看一个列子,一个 6×6的图像卷积与一个3×3的过滤器(Filter or kenel)进行卷积运算

    在这里插入图片描述

    随着深度学习的发展,我们需要检测更复杂的图像中的边缘,与其使用由人工设置的过滤器,还可以将过滤器中的数值作为参数,通过反向传播来学习得到

    算法可以根据实际数据来选择合适的检测目标,无论是检测水平边缘,垂直边缘还是其他角度的边缘,并习得图像的低层特征。

    卷精神经网络发展历史

    在这里插入图片描述

    卷积神经网络原理

    卷积神经网络的组成

    卷积神经网络由一个或多个卷积层,池化层以及全连接层等组成

    卷积神经网络的特点在于隐藏层分为卷积层和池化层(pooling layer,又叫下采样层)

    卷积层:通过在原始图像上通过平移来提取特征,每一个特征就是一个特征映射。

    池化层:通过特征后稀疏参数来减少学习的参数,降低网络的复杂度(最大池化和平均池化)。

    与其他深度学习结构相比,卷积神经网络在图像等方面能够给出更好的结果。

    相比其他浅层或深度神经网络,卷积神经网络需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。

    在这里插入图片描述

    其中包含了几个主要结构

    • 卷积层(Convolutions)
    • 池化层(Subsampling)
    • 全连接称(Full connection)
    • 激活函数

    卷积层

    目的: 卷积运算的目的是提取输入的不同特征,某些卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代出提取出复杂的特征。

    参数

    size: 卷积核/过滤器大小,选择有1×1,3×3,5×5
    padding: 零填充,Valid与Same
    stride: 步长,通常默认为1
    

    计算公式

    在这里插入图片描述

    卷积运算过程

    在这里插入图片描述

    我们会发现进行卷积之后的图片变小了。

    那么卷积层数是越多越好? 得到映射矩阵是越抽象越好吗?

    如果我们换一个卷积核大小或者加入很多层卷积之后,图像可能最后就变成了1×1大小,这不是我们希望看到的结果。并且对原始图片中当中的边缘像素来说,只计算了一遍,二对于中间的像素会有很多次过滤器与之计算,这样就导致边缘信息的缺失。

    缺点:

    • 图像变小

    • 边缘信息消失

    padding-零填充

    零填充: 在图片像素的最外层加上若干层0值,若一层,记作p=1。

    为什么增加的是0?

    因为0在权重乘积和运算中对最终结果不造成影响,也就避免了图片增加了额外的干扰信息。

    在这里插入图片描述

    这张图中,还是移动一个像素,并且外面增加了一层0。

    那么最终计算结果我们可以这样用公式来计算: 5+2∗p−3+1=5

    P为1,那么最终特征结果为5。实际上我们可以填充更多的像素,假设为2层,则 5+2∗2−3+1=7,这样得到的观察特征大小比之前图片大小还大。所以我们对于零填充会有一些选择,该填充多少?

    Valid and Same卷积

    有两种形式,说了避免得到的矩阵比原始的图片还大的情况,一般都是使用Same这种填充卷积计算方式。

    • Valid: 不填充
    • Same: 输出大小与原图大小一致,那么N变成N+2P

    那就意味着,之间大小与之后的大小一样,得出下面的等式

    (N+2P-F+1)=N =》 P=(F-1)/2

    所以知道了卷积核的大小之后,就可得出要填充多少层像素。

    奇数维度的过滤器

    结论:所有的卷积过滤器都是奇数的,比如1×1,3×3...

    原因:

    (1) P=(F-1)/2,如果F不是奇数而是偶数,那么最终计算结果不是一个整数,造成0.5,1.5...这种情况

    (2) 奇数维度的过滤器有中心,便于指出过滤器的位置

    当然这个都是一些假设的原因,最终原因还是在F对于计算结果的影响。所以通常选择奇数维度的过滤器,是大家约定成俗的结果,可能也是基于大量实验奇数能得出更好的结果。

    stride-步长

    以上例子中我们看到的都是每次移动一个像素步长的结果,如果将这个步长修改为2,3,那结果如何?

    在这里插入图片描述

    如果Padding选择Same,那么 (N+2P-F)/S+1=N, P=?

    多通道卷积

    当输入有多个通道(channel)时(例如图片可以有RGB三个通道),卷积核需要拥有相同的channel数,每个卷积核channel与输入层的对应channel进行卷积,将每个channel的卷积结果按位置相加最终得到 Feature Map。

    (也就是最终多个通道也只是得到一张 Feature Map)

    在这里插入图片描述

    多卷积核(多个Filter)

    当有多个卷积核时,可以学习到多种不同的特征,对应产生包含多个channel的Feature Map,例如上图有两个filter,所以output有两个channel。 这里的多少个卷积核也可以理解为多少个神经元。

    在这里插入图片描述

    相当于我们把多个功能的卷积核的计算结果放在一起,能够检测到图片中不同的特征(边缘检测)。

    池化层(Pooling)

    卷积层充当特征提取的角色,但是并没有减少图片的特征,在最后的全连接层依然面临大量的参数,所以需要池化层进行特征数量的减少。

    池化层主要对卷积层学习到的特征图进行亚采样(subsampling)处理,主要有两种:

    • 最大池化: Max Pooling,取窗口内的最大值作为输出
    • 平均池化: Avg Pooling,取窗口内的所有值的均值作为输出

    池化层的意义在于:

    • 降低了后续网络层的输入维度,缩减模型大小,提高计算速度
    • 提高了Feature Map的鲁棒性,防止过拟合。(换句话说,就是防止卷积观察的太仔细)

    池化超参数特点: 不需要进行学习,不像卷积通过梯度下降进行更新。

    池化后得到的Feature Map的大小和卷积后Feature Map大小的计算公式是一致的 (N+2P-F)/S+1

    通过的池化窗口大小和步长为:2×2,2

    在这里插入图片描述

    在这里插入图片描述

    全连接层

    卷积层+激活层+池化层可以看层是CNN的特征学习/特征提取层,而学习到的特征(Feature Map)最终应用于模型任务(分类,回归)。

    • 先对所有Feature Map进行扁平化(flatten,即reshape成1×N向量)
    • 再接一个或者多个全连接层,进行模型学习。

    在这里插入图片描述

    小结

    1. 多层的线性网络和单层的线性网络没有区别,而且线性模型能够解决问题有限。
    比如A Neural Network playground 中,第四张图形,是无法画一条直线分开的。
    也就是,如果Activation只选择Linear的话,那么多层和单层的效果是一致的。
    
    2. 如何理解神经网络的单层神经元个数和层数?
    一个单层隐藏层有更多的神经元,就能捕捉更多的特征
    有更多的隐藏层,就能更加抽象的提取特征
    更多神经元+更深的网络=更复杂的抽象。
    
    3. 说一下几种常见的激活函数,画图,优缺点
    sigmod,tanh,ReLu
    sigmod,tanh归为一类,缺点就是x趋于无穷大或无穷小时,函数的梯度趋于0,导致梯度下降过慢
    在靠近x=0的地方,梯度下降最快
    ReLu可以保证x>0的时候,梯度始终为1。 
    但是x<0,梯度直接为0,但是这个缺陷在实际使用中影响并不大。
    
    4. 为什么需要非线性的激活函数? 
    使用线性的激活函数 == 不使用激活函数 == 直接使用logistic回归
    无论线性组合叠加多少层,最终都可以归结为一个线性组合 =》 相当于没有隐藏层,就成了最原始的感知机。
    
    5. 为什么需要卷积神经网络? 
    图像对传统神经网络的压力太大,特征数量太多
    卷积神经网络可以很好的处理图像
    
    6. 什么是边缘检测? 
    就是一个窗口,这个窗口是有权重参数的,通过窗口中的权重,我们可以感知图片的边缘信息(比如垂直,水平的边缘信息)
    窗口: 过滤器 =》 就是通过窗口的权重来过滤图片的边缘信息
    而且窗口的数值,之前是人工设置的,现在也可以作为参数,然后通过反向传播来更新,这样算法就可以根据实际的数据,来学习需要学习的边缘信息。
    
    7. 卷积神经网络由什么组成? 
    卷积层+池化层+全连接层
    
    卷积层: 通过在原始图片上,通过窗口平移来提取特征,每一个特征都是特征映射
    池化层: 去除不重要的参数,来减少网络复杂度
    
    8. 卷积层的作用? 也就是卷积计算的作用? 
    卷积层的作用,就是使用卷积核(窗口)来提取不同的特征(不同的窗口可以提取不同的特征)
    卷积计算就是特征的一个提取,也就是特征的一个映射。
    
    9. 有关卷积层的计算公式? 
    
    10. 进行卷积操作的直观现象是什么? 
    直观线性就是卷积操作之后,计算得到的特征矩阵表小了(相当于进行了一次抽象,提取了边缘等特征)
    但是卷积层不是越多越好,因为这样会导致边缘信息消失。
    注意:一般卷积只是充当特征提取的角色,一般padding为same,不会减少输入量
    
    11. 什么是padding零填充?为什么是填充零? 
    零填充就是在外围包围一层0,包围n层,p=n
    填0的话不会影响后面的权重乘积和运算
    
    12. padding的填充方式? 以及应该填充多上层?
    valid: 不填充
    same: 输出大小与原图一致
    (N+2P−F+1)=N => P=(F-1)/2
    还需要考虑步长 ((N+2P−F)/S+1)=N => P=...
    
    13. 为什么过滤器都是选择奇数个? 
    (1) P=(F-1)/2, 为了避免出现0.5层这种情况
    (2) 奇数维度的过滤器有中心,便于指出过滤器的位置
    
    14. 如何理解多通道卷积和多卷积核?
    多通道卷积:就是一个Filter多层(但是还是一个),一层对应一个channel,最终得到只有一个Feature Map
    多卷积核: 有多个卷积核,不同的卷积核可以观察不同的特征,得到一个 Feature Map的集合。
    
    
    15. 池化层的作用? 
    池化层的作用就是为了减少参数的维度
    意义:
    (1) 降低后续网络层的输入维度,缩减模型大小,提高计算速度
    (2) 提高Feature Map的鲁棒性,防止过拟合(换句话说,就是放置卷积观察的太仔细)
    
    16. 全连接层的作用?
    前面的卷积层+激活层+池化层可以看成是CNN的特征学习/特征提取层,然后学习到的特征最终还是要输入到全连接层。 
    最终还是要输入到全连接层,最终还是回归为分类任务。
    
    
  • 相关阅读:
    Counting Stars hdu
    Color it hdu
    steins;Gate
    原根
    3-idiots
    Tree
    洛谷P1352 没有上司的舞会
    洛谷P1131 时态同步
    洛谷P3177 树上染色
    Codeforces Round #617 (Div. 3)
  • 原文地址:https://www.cnblogs.com/Rowry/p/15009791.html
Copyright © 2011-2022 走看看