一、绪论
1.卷积神经网络的应用
基本应用:(基本都是计算机视觉领域):分类,检索(给简笔画,选与给定图画最像的图片),检测,分割(像素级别划分),人脸识别,人脸表情识别,图像生成(GAN),自动驾驶
2.传统神经网络vs卷积神经网络
神经网络做的就是给定一些数据提取特征的过程,也就是对图片做一个表示,然后选择合适的损失函数计算与真实图片的差异
交叉熵损失中$y_i$是真实类别,$y_i^p$是预测的类别,hinge loss中y是真实类别,f(x)是预测的类别
和前面的神经元都有连接,就表示全连接的(如上图红色手画的图所示)
传统的神经网路可以应用到计算机视觉中,但是全连接网络存在以上的问题
参数共享是指卷积核在一次特征提取过程中参数是不变的(用一个5*5的卷积核 只有25个参数,再加一个偏置项,就是26个参数,参数量从1000 * 1000减少到26)
二、基本组成结构
2.1 卷积
W是卷积核的参数,X是进行卷积的区域,b偏置项
橘色区域是卷积核对应的感受野
对于一个彩色图像,有三个channel(RGB),所以也需要3*3的卷积核有3个,分别求出每个channel第一个位置的值,三个数相加,再加上一个偏置项,就得到了output中的第一个数,因为有两个卷积层,所以最后得到两个特征图
深度也就是channel的个数是和卷积核的个数是一致的
输出32x32x10,其中10是因为10个卷积核堆积起来
2.2 池化
就类似在做一个缩放的过程
分类的任务中更多的用最大值池化
2.3 全连接
2.4 小结
三、卷积神经网络典型结构
3.1 AlexNet
激活函数的对比:
Dropout:
数据增强:
AlexNet分层解析
3.2 ZFNet
3.3 VGG
3.4 GoogleNet
Inception模块:
GoogleNet:
3.5 ResNet
四、总结感想
卷积神经网络主要在计算机视觉领域应用,包括分类,检索(给简笔画,选与给定图画最像的图片),检测,分割(像素级别划分),人脸识别,人脸表情识别,图像生成(GAN),自动驾驶等。传统的神经网络也可以应用到计算机视觉中,但是它处理图像时参数太多,容易过拟合,而卷积神经网络通过卷积核与图像进行局部关联,如采用5x5的卷积核只有5x5+1个参数,大大降低了参数量,同时卷积核中的参数在一次特征提取过程中是不变的(即参数共享)。
典型的卷积神经网络是由卷积层、池化层,、全连接层交叉堆叠而成,卷积的基本概念包括卷积核、步长stride、feature map特征图等,对于一个彩色图像,可以认为它有三个channel(RGB),因此需要3x3x3的卷积核,最后一个3即对应前一个输入的通道数,如果有n个这样的卷积核,得到的feature map的深度就是n(也就是输出channel个数是n个);如果没加padding,则输出特征图大小为(N-F)/stride+1,有padding时为(N+padding*2-F)/stride+1。
池化就类似在做一个缩放的过程,在分类的任务中更多的采用最大值池化,池化在保留主要特征的同时减少了参数量和计算量,一般处于卷积层与卷积层之间、全连接层与全连接层之间,池化的输出不会改变输入的channel数目。
视频还介绍了几种典型的卷积神经网络,AlexNet的特色在于采用了ReLu激活函数(解决了正区间梯度消失的问题,收敛速度远快于sigmoid),为防止过拟合采用了随机丢弃drop out(训练时随即关闭部分神经元,测试时整合所有神经元)以及数据增强(对图片进行平移、反转、对称、随机crop等,从而增加了训练数据),AlexNet参数量很多,主要集中在最后的全连接层。
ZFNet网络结构与AlexNet相同,只是在一些地方更改了卷积核的大小及步长、滤波器的个数。
著名的VGG是一个更深的网络,它的训练思路是先训练好一些层,然后固定这些层的参数,再训练后面更深层的网络,它的参数也集中在全连接层。
GoogleNet引入了inception模块,初衷是使用多卷积核来增加特征多样性,通过padding保证使用每个卷积核的输出feature map在长宽是一致的,然后在深度方向上进行串联,在原始的inception模块中输出的feature map的深度会越来越深,因为模块中用到了池化,池化是不会改变深度的,因此在深度层面上不断进行串联会导致深度不断增加,从而使计算复杂度过高,inception V2的解决思路是插入1*1的卷积核进行降维,Inception V3的思路是选用小的卷积核替代大的卷积核,认为一次5x5得到的感受野大小和两个3x3得到的是类似的,采用两个小卷积核可以降低参数量,同时也能增加非线性激活函数,让网络的表征能力更强。Google Net除了最后的类别输出层,没有额外的全连接层。
最后介绍了残差学习网络ResNet,它可以达到的训练深度更深,做法是每一层输出后再加上输入x再传入到下一层,这样可以突出微小的变化,如果一层输出几乎为0,传入下一层的将会是x,相当于这一层的网络没有用,从而赋予模型自主学习选择网路深度的能力,因此可以被用来训练非常深的网络。