首页 > 其他分享 >深度学习基础课:卷积神经网络与卷积层的前向传播推导

深度学习基础课:卷积神经网络与卷积层的前向传播推导

时间:2022-12-04 07:11:13浏览次数:76  
标签:Map 卷积 Feature 像素 神经网络 基础课 连接

大家好~本课程为“深度学习基础班”的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序

线上课程资料:
本节课录像回放1

加QQ群,获得ppt等资料,与群主交流讨论:106047770

本系列文章为线上课程的复盘,每上完一节课就会同步发布对应的文章

本课程系列文章可进入索引查看:
深度学习基础课系列文章索引

目录

回顾相关课程内容

  • 如何使用全连接神经网络识别手写数字?
    image

    • 网络结构是什么?

为什么要学习本课

  • 全连接神经网络用于图像识别任务有什么问题?
    image

  • 卷积神经网络是怎样解决这些问题的?

  • Relu激活函数是什么?

  • 如何推导卷积层的前向传播?

主问题:卷积神经网络是什么?

为什么引入卷积神经网络?

  • 全连接神经网络用于图像识别任务有什么问题?

答:

1、参数数量太多

考虑一个输入10001000像素的图片,输入层有10001000=100万节点。假设第一个隐藏层有100个节点,那么仅这一层就有(10001000+1)100=1亿参数!
而且图像只扩大一点,参数数量就会多很多,因此它的扩展性很差。

2、没有利用像素之间的位置信息

对于图像识别任务来说,每个像素和其周围像素的联系是比较紧密的,和离得很远的像素的联系可能就很小了。如果一个神经元和上一层所有神经元相连,那么就相当于对于一个像素来说,把图像的所有像素都等同看待,这不符合前面的假设。当我们完成每个连接权重的学习之后,最终可能会发现,有大量的权重,它们的值都是很小的(也就是这些连接其实无关紧要)。努力学习大量并不重要的权重,这样的学习必将是非常低效的。

3、网络层数限制

我们知道网络层数越多其表达能力越强,但是通过梯度下降方法训练深度全连接神经网络很困难,因为全连接神经网络的梯度很难传递超过3层。因此,我们不可能得到一个很深的全连接神经网络,也就限制了它的能力。

  • 卷积神经网络是怎样解决这些问题的?

答:

1、局部连接

这个是最容易想到的,每个神经元不再和上一层的所有神经元相连,而只和一小部分神经元相连。这样就减少了很多参数。

2、权值共享

一组连接可以共享同一个权重,而不是每个连接有一个不同的权重,这样又减少了很多参数。

3、下采样

可以使用池化(Pooling)来减少每层的样本数,进一步减少参数数量,同时还可以提升模型的鲁棒性。

主问题:卷积神经网络是什么?

图1

图1
  • 如图1所示,一个卷积神经网络由若干卷积层、池化层、全连接层组成

  • 常用架构模式为:INPUT -> [[CONV]N -> POOL?]M -> [FC]*K

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

  • 图1的N、M、K为多少?
    答:N=1, M=2, K=2

  • 与全连接神经网络相比,卷积神经网络有什么不同?
    全连接神经网络:
    image

  • 什么是Filter?Filter与卷积层是什么关系?
    答:Filter是卷积核,是一组参数,用来提取特征到Feature Map中。Filter的宽度和高度一般是相等的。
    卷积层包含多个Filter

  • Filter的数量与Feature Map的数量有什么关系?
    答:卷积层包含的Filter的数量和卷积层输出的Feature Map的数量是相等的,一一对应的

  • 如何理解Feature Map?
    答:Feature Map保存了Filter提取的特征。如一个Filter为提取图像边缘的卷积核,那么对应的Feature Map就保存了图像边缘的特征

  • 池化层在做什么?
    答:下采样,即将Feature Map缩小

  • 全连接层跟Feature Maps如何连接?
    答:全连接层的神经元跟所有的Feature Map的像素一一对应,如Feature Maps有5个,每个有30个像素数据,那么与其连接的全连接层就有150个神经元

  • 请整体描述图1卷积神经网络的前向传播过程?

主问题:Relu激活函数是什么?

  • Relu的定义是什么?
    答:\(f(x)=max(0,x)\)
    image

  • 与Sigmoid相比,Relu有什么优势?
    答:

1、速度快

2、减轻梯度消失问题

全连接隐藏层的误差项公式如下,它会乘以激活函数的导数:
image

而Sigmoid激活函数的导数的图形如下所示:
image

可知它的导数的最大值为\(\frac{1}{4}\),所以第一个全连接隐藏层的误差项会至少衰减为原来的\(\frac{1}{4}\),上一个全连接隐藏层的误差项则至少衰减为原来的\(\frac{1}{16}\),以此类推,导致层数越多越容易出现梯度消失的问题

而Relu的导数为1,所以不会导致误差项的衰减

3、稀疏性

通过对大脑的研究发现,大脑在工作的时候只有大约5%的神经元是激活的。有论文声称人工神经网络在15%-30%的激活率时是比较理想的。因为relu函数在输入小于0时是完全不激活的,因此可以获得一个更低的激活率。

任务:实现Relu激活函数

主问题:如何推导卷积层的前向传播?

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

  • 使用下列公式计算卷积:

\[a_{i,j} = f(\sum_{m=0}^2 \sum_{n=0}^2 w_{m,n}x_{i+m,j+n} + w_b) \]

\[对图像的每个像素进行编号,用x_{i,j}表示图像的第i行第j列元素;\\ 对filter的每个权重进行编号,用w_{m,n}来表示第m行第n列权重,用w_b表示filter的偏置项; \\ 对Feature Map的每个元素进行编号,用a_{i,j}表示Feature Map的第i行第j列元素; \\ 用f表示激活函数 \]

  • \(a_{0,0}=?\)
    答:image
    image

  • \(a_{0,1}=?\)
    答:image
    image

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

标签:Map,卷积,Feature,像素,神经网络,基础课,连接
From: https://www.cnblogs.com/chaogex/p/16949351.html

相关文章

  • 神经网络模型量化基础
    1,模型量化概述1.1,模型量化优点1.2,模型量化的方案1.2.1,PTQ理解1.3,量化的分类1.3.1,线性量化概述2,量化算术2.1,定点和浮点2.2,量化浮点2.2,量化算术3,量......
  • 【身份证识别】基于BP神经网络实现身份证识别附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进。......
  • 训练神经网络挑主要特征
    因为我每次初始化不同的模型表现不同,我猜测可能是过拟合,于是我决定根据第一层神经网络的权重来选择特征。代码:importmatplotlib.pyplotaspltimportnumpyasnpimp......
  • 深度神经网络
    network=nn.Sequential(nn.Linear(36,2),nn.Sigmoid(),nn.Linear(2,2),nn.Sigmoid(),nn.Linear(2,1),nn.Sigmoid())network=nn.Sequential(nn.Linear(36,4),nn.Sigmoid(),......
  • 深度学习基础课:使用小批量随机梯度下降
    大家好~本课程为“深度学习基础班”的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序线上课程资料:本节课录像回放加QQ群,获得......
  • 对深度学习中全连接层、卷积层的一些理解
    1、全连接层卷积层和全连接层构成了构成了特征提取器,而全连接层构成了分类器,全连接层将特征提取得到的特征图映射成一维特征向量,该特征向量包含所有特征信息,可以转化为分......
  • Matlab RBF神经网络及其实例
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • QuTrunk与MindSpore量子神经网络初探
    1、概述QuTrunk是启科量子开发和已经开源的一款量子编程框架软件产品,关于QuTrunk的详细介绍,用户可以访问启科的开发者社区站点详细了解,也可以进入github上此项目下进行查......
  • 机器学习之深度学习-卷积
    人工智能、机器学习和深度学习三者的联系与区别人工智能(Artificialintelligence)简称AI。人工智能是计算机科学的一个分支,它企图了解智能的本质,并生产出一种新的能以人......
  • 用神经网络做运动时序序列。
    代码importmatplotlib.pyplotaspltimportnumpyasnpimportpandasaspddf=pd.read_csv('train.csv')df=df.drop(['ID'],axis=1)nmp=df.to_numpy()feature=......