大家好~本课程为“深度学习基础班”的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序
线上课程资料:
本节课录像回放1
加QQ群,获得ppt等资料,与群主交流讨论:106047770
本系列文章为线上课程的复盘,每上完一节课就会同步发布对应的文章
本课程系列文章可进入索引查看:
深度学习基础课系列文章索引
回顾相关课程内容
-
如何使用全连接神经网络识别手写数字?
- 网络结构是什么?
为什么要学习本课
-
全连接神经网络用于图像识别任务有什么问题?
-
卷积神经网络是怎样解决这些问题的?
-
Relu激活函数是什么?
-
如何推导卷积层的前向传播?
主问题:卷积神经网络是什么?
为什么引入卷积神经网络?
- 全连接神经网络用于图像识别任务有什么问题?
答:
1、参数数量太多
考虑一个输入10001000像素的图片,输入层有10001000=100万节点。假设第一个隐藏层有100个节点,那么仅这一层就有(10001000+1)100=1亿参数!
而且图像只扩大一点,参数数量就会多很多,因此它的扩展性很差。
2、没有利用像素之间的位置信息
对于图像识别任务来说,每个像素和其周围像素的联系是比较紧密的,和离得很远的像素的联系可能就很小了。如果一个神经元和上一层所有神经元相连,那么就相当于对于一个像素来说,把图像的所有像素都等同看待,这不符合前面的假设。当我们完成每个连接权重的学习之后,最终可能会发现,有大量的权重,它们的值都是很小的(也就是这些连接其实无关紧要)。努力学习大量并不重要的权重,这样的学习必将是非常低效的。
3、网络层数限制
我们知道网络层数越多其表达能力越强,但是通过梯度下降方法训练深度全连接神经网络很困难,因为全连接神经网络的梯度很难传递超过3层。因此,我们不可能得到一个很深的全连接神经网络,也就限制了它的能力。
- 卷积神经网络是怎样解决这些问题的?
答:
1、局部连接
这个是最容易想到的,每个神经元不再和上一层的所有神经元相连,而只和一小部分神经元相连。这样就减少了很多参数。
2、权值共享
一组连接可以共享同一个权重,而不是每个连接有一个不同的权重,这样又减少了很多参数。
3、下采样
可以使用池化(Pooling)来减少每层的样本数,进一步减少参数数量,同时还可以提升模型的鲁棒性。
主问题:卷积神经网络是什么?
-
如图1所示,一个卷积神经网络由若干卷积层、池化层、全连接层组成
-
常用架构模式为:INPUT -> [[CONV]N -> POOL?]M -> [FC]*K
-
也就是N个卷积层叠加,然后(可选)叠加一个池化层,重复这个结构M次,最后叠加K个全连接层
-
图1的N、M、K为多少?
答:N=1, M=2, K=2 -
与全连接神经网络相比,卷积神经网络有什么不同?
全连接神经网络:
-
什么是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)\)
-
与Sigmoid相比,Relu有什么优势?
答:
1、速度快
2、减轻梯度消失问题
全连接隐藏层的误差项公式如下,它会乘以激活函数的导数:
而Sigmoid激活函数的导数的图形如下所示:
可知它的导数的最大值为\(\frac{1}{4}\),所以第一个全连接隐藏层的误差项会至少衰减为原来的\(\frac{1}{4}\),上一个全连接隐藏层的误差项则至少衰减为原来的\(\frac{1}{16}\),以此类推,导致层数越多越容易出现梯度消失的问题
而Relu的导数为1,所以不会导致误差项的衰减
3、稀疏性
通过对大脑的研究发现,大脑在工作的时候只有大约5%的神经元是激活的。有论文声称人工神经网络在15%-30%的激活率时是比较理想的。因为relu函数在输入小于0时是完全不激活的,因此可以获得一个更低的激活率。
任务:实现Relu激活函数
- 请实现Relu激活函数
答:待实现的代码为:ReluActivator,实现后的代码为:ReluActivator_answer
主问题:如何推导卷积层的前向传播?
-
假设有一个55的图像,使用一个33的filter进行卷积,想得到一个3*3的Feature Map,如下图所示:
-
使用下列公式计算卷积:
-
\(a_{0,0}=?\)
答:
-
\(a_{0,1}=?\)
答:
-
可以依次计算出Feature Map中所有元素的值。下面的动画显示了整个Feature Map的计算过程: