一、基础概念
1.1 卷积(filter) 、CNN使用卷积的思想和意义
改变全连接为局部连接,这是由于图片的特殊性造成的(图像的一部分的统计特性与其他部分是一样的),通过局部连接和参数共享,大范围的减少参数值。可以通过使用多个filter来提取图像的不同特征(多卷积核)。
卷积的尺寸选择:通常尺寸多为奇数(1,3,5,7)
二、模型构建
一个CNN网络一般都是卷积、激活、池化、卷积、激活、池化....全连接的模式
一个stage的一个CNN,通常由三种映射空间组成:
输入映射空间(input maps):指输入图像,对于多通道图像输入图像实际上是由高度、宽度、深度三种信息构成,这里的深度,在RGB中就是3,在灰度图像中,就是1。
特征映射空间(feature maps):
基础CNN的卷积是一种2-D卷积,只能在x,y上滑动位移,不能进行深度(跨通道)位移。对于RGB图像,这个kernel的维度是X*Y*3。在基础CNN的不同stage中,kernel的深度都应当一致,等于输入图像的通道数。CNN的卷积是在一个2-Dkernel和输入的2-D input map之间,RGB中各图像通道分别完成。
输出尺寸的计算公式
输出尺寸 = (N - F + padding*2)/stride + 1
池化映射空间(pooled maps):是一种降采样(subsampling)操作,主要目标是降低feature maps的特征空间,或者可以认为是降低feature map的分辨率。
全连接网络:
出现在CNN中的全连接网络主要目的是为了分类,目前CNNs多数会采用多层全连接层,这样的结构可以被认为是网络。
全连接网络每一层的所有单元与上一层完全连接。
三、CNN的特点
局部连接
参数共享
四、常见的几个模型,最好能记住模型大致的尺寸参数。
AlexNet:(结构见下图)
采用了dropout技术;
首次使用Relu作为激活函数;
2GPU并行计算模型;
模型一共分为8层,5个卷积(3个包含最大池化)+ 3个全连接,每个卷积层中包含了激活函数Relu以及局部响应归一化处理(LRN),然后最大降采样(maxpooling);
Vggnet:更深的结构
VGG在加深网络层数的同时,为了避免参数过多,在所有层都采用3*3的小卷积核,卷积层步长被设置为1。
根据卷积层+全连接层数据不同,可以从VGG11~VGG19,最少的VGG11有8个卷积层与3个全连接层,最多的VGG19有16个卷积层+3个全连接层。
1*1卷积核:可以增加非线性
3*3卷积核:多个卷积核叠加,增加空间感受野的同时,减少参数量
2个3*3的卷积核可以看做一层5*5的卷积层;视野域2个3*3 = 1个5*5; 2层比1层多一次非线性变化,参数降低28%;
而3个3*3的卷积层可以看做1个7*7的卷积层;
VGG相比AlexNet的改进之处在于:
采用连续几个3*3的卷积核代替AlexNet中的较大卷积核(11*11, 5*5)
采用1*1和3*3的卷积核以及2*2的最大池化使得层数变得更深
优势:对于给定的视野域,采用堆积的小卷积核优于大的卷积核,因为多层非线性层可以增加网络深度保证学习更复杂的模式,而且参数更少。
ResNet:随着网络加深,准确率不下降
InceptionNet(又称GoogleNet):
创新点:网络的参数量很小但是层数很深,
1)采用分支网络堆叠在一起产生比较大的通道;
2)提出并采用了著名的BatchNormalization(BN)。BN是一种有效的正则化方法,可以让卷积网络的训练速度加快很多,同时收敛后的分类准确率也提高很多。BN就是在训练的时候对每个Batch数据的内部进行标准化,使输出规范化到N(0,1)的正态分布。BN在某种程度上还起到正则的作用,所以可以减小或者取消Dropout,优化网络结构。
3)InceptionNet将一个较大的卷积网络拆分成两个小的卷积网络。比如将7*7网络拆分成1*7和7*1的卷积网络,这样可以节约大量参数,加速运算,同时增加了一层非线性变换拓展了模型的表达能力。
MobileNet:??
六、需要做哪些预处理操作(比如归一化)
七、调参技巧,学习过程中有什么问题,如何调整(过拟合、欠拟合)
八、模型优缺点及使用场景
面试题:
1. Sigmoid函数的应用有哪些,为什么?
1)对于神经网络,中间的隐层输出必须有一个激活函数。否则多个隐层的作用和没有隐层一样。这个激活函数不一定是sigmoid,常见的有tanh、relu等。
2)对于二分类问题,输出层是sigmoid函数。这是因为sigmoid函数可以把实数域光滑的隐射到[0,1]区间。函数值恰好可以解释为属性正类的概率(概率的取值范围是0~1)。另外,sigmoid函数单调递增,连续可导,导数形式非常简单,是一个比较合适的函数;
3)对于多分类问题,输出层就必须是softmax函数了。它是sigmoid函数的推广。
2. 损失函数是什么
损失函数采用交叉熵损失函数,因为有sigmoid的激活函数,对其进行求导时,如果采用MSE的损失函数,导数不是一个凸函数,将不是一个凸优化问题。
3. 初始化参数如何选择?
4. 如何实现卷积层权值共享
权值共享这个词说全了就是整张图片在使用同一个卷积核内的参数,比如一个3*3*1的卷积核,这个卷积核内9个参数被整张图共享,而不会因为图像内位置的不同而改变卷积核内的权系数。说白了,就是用一个卷积核不改变其内部权系数的情况下,卷积处理整张图片。
权值共享解决了参数量过大的问题,无论图像的尺寸是多大,都可以选择固定尺寸的卷积核,卷积操作保证了每一个像素都有一个权系数,只是这些系数是被整个图片共享的。此外,卷积操作利用了图片空间上的局部相关性,这也就是CNN与传统神经网络或机器学习的一个最大的不同点,特征的自动提取。
5. 为什么使用batch normalization?
机器学习有个很重要的假设:训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。
BN的基本思想:因为深层神经网络在做非线性变换前的激活输入值随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,之所有收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近,所以这导致反向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因。
而BN就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布,其实就是把越来越偏的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数较大的变化,意思是:这样让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度。
其实就是一句话:对于每个隐层神经元,把逐渐向非线性函数映射后向取值区间极限饱和区靠拢的输入分布强制拉回到均值为0,方差为1的标准正态分布,使得非线性变换函数的输入值落入对输入比较敏感的区域,以此避免梯度消失问题。
6. CNN的三个优点:
sparse interaction(稀疏的交互),
parameter sharing(参数共享),
局部连接
equivalent respresentation(等价表示)
AlexNet结构: