一、知识梳理

神经网络发展史 神经网络发展历史_神经网络发展史

二、网络历史

1)神经网络历史

  •  1957年Frank Rosenblatt 发明了第一代线性感知机也就是感知算法,输出只的值只有0和1,权重更新方式与反向传播类似。但是此时反向传播算法并未发明。
  • 1960年widerow和hoff发明了adaline和madaline首次尝试多层感知器网络反向传播算法仍然未出现。
  • 1986年rumeelhart提出了反向传播算法,出现了我门熟悉的链式法则,出现了让网络工作的核新算法。 之后的一大阵时期神经网络无人问津,因为算力和数据的限制。
  •  2006年hinton发表了一篇论文表明神经网络不仅可以训练而且可以很高效的训练,此时的神经网络与现在还是有所不同,权重需要使用限制玻尔兹曼机来预训练。
  • 实际上在2012年神经网络才第一次取得了惊人的效果,神经网络狂潮爆发了,第一个被贡献的领域就是声音领域。hinton用神经网络对声音建模和语音识别。然后就是图像领域Alex首次使用卷积神经网络取得了图像分类比赛的惊人成绩。   从此之后神经网络就开始被人们广泛应用。

2)卷积神经网络历史

  • Hubel与wisel在1956-1968年对猫的大脑做实验发现,使用不同的形状让猫看然后测试神经元的反应
  • 1998年 严乐春事使用神经网络识别邮政编码效果极好,被广泛应用在手写体识别上但是没有办法应用在更具有挑战更复杂的数据上。  
  • 2012年alex提出了现在常用的卷积神经网络alexnet,充分发挥了imagenet与gpu的优势从此以后神经网络被用在各个任务上:
  • 图像分类
  • 图像检索:使用NN提取特征然后进行匹配
  • 图像检测
  • 图像分割  人脸识别  姿态识别  游戏中 医疗诊断  星系分类等
  • 图像描述  deepdream

三、卷积与池化

1)卷积核

卷积核可以看成是一种模板,不同的模板代表的特征不同。下图为权重的可视化,可以发现前几层的权重(模板)主要是一些简单的边缘线条,对于后层权重模板表达的更为丰富。第三幅图为激活图,颜色较白的地方为激活效果明显的地方。

神经网络发展史 神经网络发展历史_深度学习_02

神经网络发展史 神经网络发展历史_神经网络_03

补充:Activation map 和Feature map

activation map 是一个filter 滑动卷积后得到的一层输出(depth 维度上的一层slice), 多个filter得到的activation map 在 depth 维度上拼起来称作 feature map.下图为各层输出的展示。

神经网络发展史 神经网络发展历史_深度学习_04

 2)卷积计算(局部连接与权值共享) 

(1)计算过程比较简单,不赘述。注:局部连接是下一层神经元只连接一小块,权值共享是每个小块的权重都一样

神经网络发展史 神经网络发展历史_卷积神经网络_05

(2)问题补充1:关于输出的大小

神经网络发展史 神经网络发展历史_卷积_06

神经网络发展史 神经网络发展历史_卷积神经网络_07

 (3)问题补充3:关于分母无法整除步长的问题

神经网络发展史 神经网络发展历史_神经网络发展史_08

 由上图知加入padding可以使其完成整除,但padding的主要作用是为了得到与输入大小相同的输出(如下图)。

神经网络发展史 神经网络发展历史_卷积神经网络_09

(4)代码中的padding: 

valid:  new_height = new_width =ceil (W – F + 1) / S #结果向上取整

same:  new_height = new_width =ceil[ W / S] #结果向上取整

pad_needed_height = ceil(new_height – 1) × S + F - W          注:因为new_height是向上取整的结果,所以先-1得到W可以完全包裹                                                                                                                  住S的块数,之后乘以S得到这些块数的像素点总和,再加上filer的                                                                                                                  F并减去W。

pad_top = pad_needed_height / 2 #结果取整

pad_bottom = pad_needed_height - pad_top

pad_needed_width = (new_width – 1) × S + F - W

pad_left = pad_needed_width / 2 #结果取整

pad_right = pad_needed_width – pad_left

如果padding=1,那么就会在原来输入层的基础上,上下左右各补一行,如果padding=(1,1)中第一个参数表示在高度上面的padding,第二个参数表示在宽度上面的padding

神经网络发展史 神经网络发展历史_卷积_10

3)参数计算:number=(5*5*3+1)*10      注:每个卷积核只有一个偏执

神经网络发展史 神经网络发展历史_卷积神经网络_11

4)卷积的向量理解形式

神经网络发展史 神经网络发展历史_神经网络发展史_12

5)池化:池化的主要作用是缩减参数,因此没有必要填零 

神经网络发展史 神经网络发展历史_深度学习_13

神经网络发展史 神经网络发展历史_深度学习_14

四、结构设计:

INPUT -> [[CONV -> RELU]*N -> POOL?]*M -> [FC -> RELU]*K -> FC 

补充:为什么有两个(或多个)全连接层?

我们都知道,全连接层之前的作用是提取特征,全理解层的作用是分类。全连接层中一层的一个神经元就可以看成一个多项式,我们用许多神经元去拟合数据分布但是只用一层fully connected layer 有时候没法解决非线性问题,而如果有两层或以上fully connected layer就可以很好地解决非线性问题了。

五、层的尺寸设置规律(参考链接

(1)输入层:

(包含图像的)应该能被2整除很多次。常用数字包括32(比如CIFAR-10),64,96(比如STL-10)或224(比如ImageNet卷积神经网络),384和512。

(2)卷积层:

应该使用小尺寸滤波器(比如3x3或最多5x5)。还有一点非常重要,就是对输入数据进行零填充,这样卷积层就不会改变输入数据在空间维度上的尺寸。

(3)汇聚层:

负责对输入数据的空间维度进行降采样。最常用的设置是用用2x2感受野的最大值汇聚,步长为2。注意这一操作将会把输入数据中75%的激活数据丢弃(因为对宽度和高度都进行了2的降采样,只留了1/4)。另一个不那么常用的设置是使用3x3的感受野,步长为2。最大值汇聚的感受野尺寸很少有超过3的,因为汇聚操作过于激烈,易造成数据信息丢失,这通常会导致算法性能变差。

(4)为什么在卷积层使用1的步长?

在实际应用中,更小的步长效果更好。上文也已经提过,步长为1可以让空间维度的降采样全部由汇聚层负责,卷积层只负责对输入数据体的深度进行变换。

(5)为何使用零填充?

使用零填充除了前面提到的可以让卷积层的输出数据保持和输入数据在空间维度的不变,还可以提高算法性能。如果卷积层值进行卷积而不进行零填充,那么数据体的尺寸就会略微减小,那么图像边缘的信息就会过快地损失掉。

未完待续

六、作业

1. 卷积与全连接的区别

卷积是局部连接并且每个连接的权重共享,全连接层每个的神经元与前一层的神经元都相连。

2. 图像经过卷积尺寸如何计算,卷积层的参数计算公式 224X224X3  filter=5X5  pad=0  strides=2卷积核深度是多少, 使用1个filter卷积得到特征图尺寸,使用10个filter 卷积得到特征图尺寸,并求此时的参数量是多少(不包含偏置)。

卷积核深度:3

1个卷积核的特征图尺寸:110*110

10个卷积核的特征图尺寸:110*110*10

参数:5*5*3*10

3. 1*1卷积的作用有哪些

1)实现跨通道的交互和信息整合。

2)进行卷积核通道数的降维和升维,不改变图片的宽和高。池化可以压缩宽和高。

3)可以在保持feature map尺寸不变(即分辨率不变)的前提下大幅增加非线性特性,把网络做的很深。

4.  网络不同层学到的分别是什么特征(大概)

卷积层:提取图像特征

池化层:选择特征

全连接层:将非线性的特征压缩至线性空间,再进行分类