Convolutional Neural Network CNN 卷积神经网络

1. 为什么要用CNN?

CNN一般都是用来做图像识别的,当然其他的神经网络也可以做,也就是输入一张图的像素数组(pixel vector),最后输出n个分类(dimension)。
但是为什么不用Fully Connected Network呢,主要原因还是因为前后各层涉及到的参数太多了。
所以CNN主要就是简化神经网络的架构,使其比一般的DNN都要简单。这是第一点原因。

网络中的每一个神经元都可以看做是一个Classifier,都有自己特定的“视觉”功能,侦测某一种pattern,然后逐层深入,每一层看到的特性更加的复杂和抽象。
一个神经元并不需要能够“看到”整个图片才能判断是否具有pattern,只需要看图片的一个小区域内既可。这样所需的参数也少了很多,而去掉这些参数可以依靠领域知识

如下图示例,只看鸟嘴的神经元情况。

第二点是,在不同位置的pattern并不需要做不同的Classifier去检测。通用性更好。

比如鸟嘴在其他位置也可以检测。

第三点是可以做SubSampling,一张图可以通过去掉一些行列的像素压缩,并不影响图像识别,可以用这种概念把图片缩小。

2. CNN的架构解析

直观看:

整个CNN的结构就是,通过很多层事先定好的Convolution,Max Pooling,
然后Flatten之后,丢到全连接神经网络中,然后得到图像识别的结果。

CNN特性的体现:

前面讲为什么用CNN时讲了CNN的三个CNN的特性,在下图中有所展示。
一个是只需要看局部,第二是忽略位置不同,第三是可以抽掉一些像素(subsample)。

2.1 Convolution

比如黑白图匹配如下:
将Filter在图像上移动匹配(移动匹配的步伐为1,即stride=1),并计算九组值的内积,最后得到一个4x4的矩阵结果。结果表明在左下和左上检测到了pattern。
(这个Filter,即这个matrix,里面的parameter值,是学习出来的,不是人工设定的)

此外,因为有很多的filter,所以最后得到的是很多个4x4的矩阵,他们一起构成了feature map。

彩色图就是加个高为3的高度,变成立方体,也是一样的移动匹配操作。不过不用分开算,是不分Channel的,一个filter就考虑了不同颜色代表的Channel。

CNN和Fully-connected对比

CNN和全连接网络类似,只是删掉了一些连接,做了简化。
如图,把input的矩阵拉直,可以看到,CNN的一个神经元只连接了9个,不必全连接。

share weight:
此外,在同一个filter移动stride=1后得到的新神经元和之前的神经元的weight也是一样的,这样的话,用的参数更少了。也就是图中相同颜色的连线。

2.2 Max Pooling

max pooling做的事情非常简单,就是将filter得到的output分组后取一个平均值或者最大值既可,这样就可以缩小图像了。

最后得到的image更小,深度就是filter的数量,一个filter就代表一个channel。

这里有个需要解释的问题,是不是经过几层叠加之后,深度会越来越大,其实不是的。
因为对于每个filter,是自动忽略input的深度的,并不把每个channel分开考虑,而是全部考虑。所以output的深度就是这层的filter数量。

2.3 flatten

flatten就是把feature map拉直,拉直后就丢到Fully Connected Network中。

3. Keras演示
其中的 225 = 3 * 3 * 25,虽然每一个filter还是3 * 3,但是input channel是25,所以它的参数是225,(全部考虑所有的channel)。

4. CNN学到了什么

深度学习方法就像一个黑盒子,如何来分析CNN呢?

第一层detect的东西很容易知道,检测的都是比较直观的特性,第二层的话,我们可以如下分析。
第二个convolution layer里面的50个filter,每一个filter的output就是一个matrix(11*11的matrix)。
如果把第k个filter的output拿出来如图,定义一个"Degree of the activation of the k-th filter",指现在的input跟第k个filter有多match。
这时候如果输入一张图片X,可以通过gradient ascent(求max),这样找出最合适的X,就可以将这个第k个filter直观感受了。

之前是input固定,调model的参数,现在是model的参数固定,调input,找这个图片X。看起来像是条纹一样的东西。

然后我们看看flatten之后的输出,这时候每个neural看到的是整张图。可以发现,机器学到的东西和人很不一样。根本看不到数字的形状。
如果使用L1-regularization,也就是在使得\(y^i\)最大的同时,使\(x_{ij}\)的和最小。

5. 一些好玩的应用

Deep Dream
将CNN看到的特性做一些夸大处理,得到这样的效果。

Deep Style
同时将从两张图上看到的特性都计算Convolution,求得maximum,使得最后得到的图有左图的content,也有右图的style。

AlphaGo
一般的神经网络都可以做这个事情,但CNN会得到更好的performance。
因为有一些围棋的特性不需要看完整张图。比如“气”,而且这个特性会出现在围棋棋盘的很多位置。

但是AlphaGo用的技术中,max pooling是怎么实现的呢?
AlphaGo在围棋的每一个位置,用了48个值来描述,这里包含了很多的领域知识。
AlphaGo没有用Max pooling,所以网络结构的设计其实是很灵活的。

音频和文本
比如根据音频的频率,判断说的是哪个词。
比如根据word sequence,判断是positive还是negative。

【笔记】机器学习 - 李宏毅 - 12 - CNN的更多相关文章

  1. 深度学习课程笔记(一)CNN 卷积神经网络

    深度学习课程笔记(一)CNN 解析篇 相关资料来自:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17_2.html 首先提到 Why CNN for I ...

  2. Andrew Ng机器学习课程12

    Andrew Ng机器学习课程12 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 引言:主要讲述了batch learning和online learnin ...

  3. 机器学习笔记P1(李宏毅2019)

    该博客将介绍机器学习课程by李宏毅的前两个章节:概述和回归. 视屏链接1-Introduction 视屏链接2-Regression 该课程将要介绍的内容如下所示: 从最左上角开始看: Regress ...

  4. 神经网络与机器学习 笔记—卷积神经网络(CNN)

    卷积神经网络 之前的一些都是考虑多层感知器算法设计相关的问题,这次是说一个多层感知器结构布局相关的问题.来总结卷积神经网络.对于模式分类非常合适.网络的提出所隐含的思想收到了神经生物学的启发. 第一个 ...

  5. 【笔记】机器学习 - 李宏毅 - 10 - Tips for Training DNN

    神经网络的表现 在Training Set上表现不好 ----> 可能陷入局部最优 在Testing Set上表现不好 -----> Overfitting 过拟合 虽然在机器学习中,很容 ...

  6. 【笔记】机器学习 - 李宏毅 - 9 - Keras Demo

    3.1 configuration 3.2 寻找最优网络参数 代码示例: # 1.Step 1 model = Sequential() model.add(Dense(input_dim=28*28 ...

  7. 【笔记】机器学习 - 李宏毅 - 7 - Deep Learning

    深度学习发展历史: 感知机和逻辑回归很像,只是没有\(sigmoid\)激活函数. 深度学习训练的三个步骤: Step1:神经网络(Neural network) Step2:模型评估(Goodnes ...

  8. 【笔记】机器学习 - 李宏毅 - 5 - Classification

    Classification: Probabilistic Generative Model 分类:概率生成模型 如果说对于分类问题用回归的方法硬解,也就是说,将其连续化.比如 \(Class 1\) ...

  9. 【笔记】机器学习 - 李宏毅 - 2 - Regression + Demo

    Regression 回归 应用领域包括:Stock Market Forecast, Self-driving car, Recommondation,... Step 1: Model 对于宝可梦 ...

随机推荐

  1. printf的用法进阶

    今天来好好总结一下C语言中关于printf的常用用法 基础部分 printf("%d\n", numInt); printf("%f\n", numFloat) ...

  2. num11---桥接模式

    比如手机类,有各种类型,比如翻盖.平板等,每一类下又有各个品牌,比如华为,如果新增一个类型,比如折叠屏,或者新增一个手机品牌,苹果,那么会导致 扩展性问题. 这种情况下,应该使用桥接模式. 代码: 创 ...

  3. postman之下载文件

    前言 小伙伴们在实际的测试工作中是否遇到过下载的接口呢,例如网盘的项目就涉及到上传和下载的接口了,那么我们如何利用postman对下载接口进行测试呢?下面我们一起来学习吧! 练习案例:下载接口:htt ...

  4. vuejs之vue和springboot后端进行通信

    一.新建一个vue项目,建立好后的相关文件 查看一下新建好的vue项目的结构: 当前各个文件中的内容: App.vue:主入口 <template> <div id="ap ...

  5. 《自拍教程17》Python调用命令

    他山之石 何为他山之石,就是借助外界工具,来实现自己想要的功能. 命令行界面软件, 即各种命令,我们也叫命令行工具, 此类工具也是测试人员或者开发人员常用的工具的一种. 测试人员可以借助这类工具,快速 ...

  6. ISC BIND DNS

    win10,安装BIND9.15.5.x64 安装完成后,计算机服务里启动,总是报无法登陆,但服务属性登陆里设置了密码了啊,就是named,但就是一直报错.后来用下面方法避开了该问题. 安装完成后,服 ...

  7. kakfa+zookeeper集群搭建

    1:下载对应安装包 zookeeper-3.4.14.tar.gz:链接:https://pan.baidu.com/s/19_eYsv5r9bg0AKv3TzjpZQ    提取码:ik8a kaf ...

  8. Mysql 5.7 主从复制的多线程复制配置方式

    数据库复制的主要性能问题就是数据延时 为了优化复制性能,Mysql 5.6 引入了 “多线程复制” 这个新功能 但 5.6 中的每个线程只能处理一个数据库,所以如果只有一个数据库,或者绝大多数写操作都 ...

  9. 浅谈Linux与unix系统的来历

    在今天的UNIX是商业化的,UNIX系统大多是与硬件配套的,也就是说,大多数UNIX系统如AIX.HP-UX等是无法安装在 x86 服务器和个人计算机上的,UNIX系统是一个分时系统,而UNIX是至关 ...

  10. vue-cli项目传到服务器后打不开的问题

    1.vue-cli项目执行dev可以打开网站,直接点击文件或发布后却打不开的问题   webpack.prod.conf.js: output: { ....... publicPath:'./'  ...