zoukankan      html  css  js  c++  java
  • 【笔记】机器学习

    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。

  • 相关阅读:
    mp4的视频打开可以播放在页面上无法打开
    滚动到特定位置菜单固定的效果
    第一次作业
    第一次上机作业
    第一次作业
    第二次作业
    第一次练习作业
    第一次作业
    第三周作业
    第一次JAVA上机练习
  • 原文地址:https://www.cnblogs.com/yanqiang/p/11400517.html
Copyright © 2011-2022 走看看