你要的答案或许都在这里:小鹏的博客目录
开篇废话:
很感谢谭哥的开篇废话这四个字,让我把一些废话说出来了,是时候还给谭哥了。因为废话太多会让人感觉,没有能力净废话。
今天我开始从头学习CNN,上一篇MachineLN之深度学习入门坑太多了,需要慢慢的填起来。那么我的问题是:
(1)为什么要提出cnn?
(2)cnn的结构是怎么样子的?
(3)cnn中各层的含义是什么?
看到这里你的答案是什么? 那么下面是我的答案,欢迎批评指正。
(1)为什么要提出cnn?
嫌字太多直接看图,或者简单总结为cnn参数少好学习。
卷积神经网络是在神经网络的理论基础上形成的深度学习网络,它是一种特殊的多层神经网络。而传统的神经网络是一个全连接的网络结构(后面会提到),它上一层的每一个神经元与下一层的每一个神经元均有连接。这种结构有以下缺点:
1、在处理声音和图像数据的时候,由于声音和图像的输入维度较高,包含数百个以上的变量,例如,输入图像的像素是100×100,假设隐含层要学习100维的特征 (即隐含层有 100 个神经元),那么全连接网络就要学100×100×100个参数,即100万个权重参数,这样的网络结构在使用BP算法训练的时候,不但训练速度慢,而且需要的训练样本的数量也越多,若训练样本数量不足,会产生过拟合现象,学习得到的模型没有实用性。
2、传统神经网络的结构对输入数据的特点的考虑不足,以图像识别为例,将同一幅图像做很小的位移,传统神经网络对其会很敏感,会当成是不同的图像,无法根据训练过程对该类数据特征进行优化处理。
3、传统神经网络因为与输入数据是全连接的,无法识别训练数据中的局部区域特征,可是卷积神经网络可以单独学习识别该局部区域特征。
==>看一下图(借用大神的图)吧: 主要看第一个(10的12次幂)和第四个(10k)图的参数数量相差10的8次幂倍,已经到了亿级别了。(local conv意思是每个卷积核是不同的,也就是后面提到的它不是权值共享)
(2)cnn的结构是怎么样子的?
下面是最经典的cnn结构,如果你关注cnn发展过程,是这样子的:LeNet5->AlexNet->VGG->Inception_v1(v2,v3)->resnet->Inception_v4->xception->resnet_v2->Inception_resnet等等,还有一些移动端的小模型(mobilenet、shuffleNet)。
- 1. 学过数字图像处理的应该学过卷积,像sobel算子等一些边缘检测,像一些均值滤波、中值滤波等等,只是这个卷积核我们称为fliters;但是和卷积神经网络中是不一样的,cnn中的卷积核往往是很多个,并且卷积中的卷积核值是通过学习得到的。卷积的流程:以一个很简单的图示展示卷积的流程:(下面只是一个简单的演示,真实情况下一般都是m个输入n个输出,对应[m,n,kernel_size,kernel_size])
- 2. 池化流程,在一个给定的区域内,譬如2*2的区域取最大值(最大池化)、平均值(平均池化),(还有随机池化等)然后设置步长一般为2(就是下一步3*3的区域走到哪里),这样遍历完后,图像大小则会变为原来的二分之一。下面是最大池化和平均池化。
(3)cnn中各层的含义是什么?
卷积层的作用:
- 1. 权值共享,减少训练参数;一个卷积核与 输入map的不同区域做卷积时,它的参数是固定不变的。在CNN里,这叫做权值更享,那么为什么说减少训练参数呢? 没有对比不能说少了或者多了,在上面的为什么提出cnn中已经解释了。
- 2. 不同的卷积核可以提取不同的特征;
池化层的作用:
减少参数。通过对卷积后的特征图降维,有效减少后续层需要的参数,但是下面的才是内涵所在:
- 1. 使构建更深层次的网络变得可行;
- 2. 使得filters获得更多的全局和contextual(上下文)信息;
- 3. 使训练可行,也可以说使得训练变得更高效,主要是针对深层次的网络结构来说;
- 4. 使得 特征map大小和数量进行更好的选择(权衡)。例如,就用输入到全连接层的前一层conv来说,特征map太大的话,特征数量就不易太多,通过pooling,使得特征map变小,特征map数量就可以更多。
(那么为什么要特征map更多呢?好处在哪里?)
- 答:因为每个特征map对应一个filters,特征map越多对应更多的filters,而不同的filters提取的是图像中不同方面的特征,也就是说filters越多对图像不同特征的提取越多。
- 5. 还有局部旋转不变性哦,其中像素在邻域发生微小位移时,池化层的输出是不变的。这就使网络的鲁棒性增强了,有一定抗扰动的作用。
最后层:全连结层(FC)
这个简单提一下,水太深;
- 1. FC在整个卷积神经网络中起到“分类器”的作用;
- 2. 目前由于全连接层参数冗余(仅全连接层参数就可占整个网络参数80%左右),像ResNet和GoogLeNet等均用全局平均池化(GAP)取代FC来融合学到的深度特征,最后用softmax等损失函数作为网络目标函数训练模型。
- 3. FC越来越不被看好。
说明:我只是根据自己的理解写了下来,我又不是大牛、大神,只是一个小罗罗,希望大家能给给予批评指正,另外挖的坑太多,欢迎投稿,救救我。
展望:
接下来请关注手撕cnn;
接下来请关注cnn实现;
接下来请关注:但之后dl将告一段落,补习传统机器学习的理论知识 到 实践;
后面再开始进入dl:搭建通用分类模型框架(vgg,resnet,inception等);人脸检测系列;人脸识别系列;验证码识别系列;通用OCR系列;年龄性别识别;rnn预测;强化学习;一起走进无人驾驶;之间还会插入数据结构和算法;
目前自己在瓶颈期,真的掉坑里了,整理总结前行,一直在路上。
machinelp与你一年之约,你准备好了吗?
推荐阅读:
1. 机器学习-1:MachineLN之三要素
2. 机器学习-2:MachineLN之模型评估
3. 机器学习-3:MachineLN之dl
4. 机器学习-4:DeepLN之CNN解析
5. 机器学习-5:DeepLN之CNN权重更新(笔记)
6. 机器学习-6:DeepLN之CNN源码
7. 机器学习-7:MachineLN之激活函数
8. 机器学习-8:DeepLN之BN
9. 机器学习-9:MachineLN之数据归一化
10. 机器学习-10:MachineLN之样本不均衡
11. 机器学习-11:MachineLN之过拟合
12. 机器学习-12:MachineLN之优化算法
13. 机器学习-13:MachineLN之kNN
14. 机器学习-14:MachineLN之kNN源码
15. 机器学习-15:MachineLN之感知机
16. 机器学习-16:MachineLN之感知机源码
17. 机器学习-17:MachineLN之逻辑回归
18. 机器学习-18:MachineLN之逻辑回归源码