文章目录

  • pattern
    • filter pattern
    • neuron pattern
    • output pattern
  • Application
    • Deep Dream
    • Deep Style
    • Playing Go
    • Speech
    • Text

pattern

filter pattern

这里希望了解filter能够识别pattern究竟是什么,首先定义filter的激活程度。

Degree of the activation of filter
A = ∑ i = 1 n ∑ j = 1 n a i j A=\sum\limits^{n}_{i=1}\sum\limits^{n}_{j=1} a_{ij} A=i=1nj=1naij

  • a i j a_{ij} aij:filter对image卷积后的矩阵元素

也就是把filter对image进行卷积后输出的矩阵元素全部加和,当作该filter被激活的程度。这个数值越大,filter被激活程度越大,则image与filter的pattern越相符,那么如果找到最能够激活filter的image,那这个image也就是filter的pattern。

gradient ascend:
x ∗ = arg ⁡ max ⁡ x A x^*=\arg \max\limits_x A x=argxmaxA

  • x x x代表被卷图片

寻找filter的pattern的问题,最终转变为寻找图片的能够最大程度激活filter,以被卷图片 x x x为自变量,使用梯度上升,寻找使 A A A数值最大的图片。

部分结果:


这些是能够是各自filter的激活程度达到最大的输入图片,都代表某种texture,这里为这这些filter专为识别图像中的texture。


neuron pattern

这里希望了解DNN中neuron能够识别pattern,寻找图片能够最大化neuron输出,方法依然是gradient ascend。

gradient ascend:
x ∗ = arg ⁡ max ⁡ x a x^*=\arg \max\limits_x a x=argxmaxa

  • a a a表示neuron的输出
  • x x x代表输入图片

部分结果

与filter所观察到的情形非常不一样,filter所在意的是texture,而neuron在意的地方似乎难以理解,直观上讲,filter是对一个regin进行识别,而neuron则是对整个图像,neuron所识别的pattern更加抽象。


output pattern

这里希望了解network输出的每个类别的pattern,寻找图片能够最大化network某个维度的输出,network就认为这张图片是相应类别最标准的图片。

gradient ascend:
x ∗ = arg ⁡ max ⁡ x y i x^*=\arg \max_x y^i x=argxmaxyi

  • y i y^i yi表示network某一维度的输出
  • x x x代表输入图片

在手写数字识别上的结果

原本认为这个方法就可以让network自动它认为的标准数字图像,但实际的结果也是相当抽象,和我们的认知不太一致。

进一步处理

image里的每一个pixel都用 x i j x_{ij} xij表示,把所有pixel值取绝对值并求和 ∑ i , j ∣ x i j ∣ \sum\limits_{i,j}|x_{ij}| i,jxij,用 y i y^i yi减去这一项:
x ∗ = arg ⁡ max ⁡ x ( y i − ∑ i , j ∣ x i j ∣ ) x^*=\arg \max\limits_x (y^i-\sum\limits_{i,j} |x_{ij}|) x=argxmax(yii,jxij)

  • 这一项相当于在我们的目标函数中加上L1 regularization

此时目标函数希望找到input,使 y i y^i yi最大的同时, ∑ i , j ∣ x i j ∣ \sum\limits_{i,j} |x_{ij}| i,jxij越小越好,也就意味着,我们希望找出来的图像,既是network认为理想的图像,同时又是涂有颜色区域相对少的图像。

before
after

对比之下,处理后的结果可以看出些数字的迹象了。


Application

Deep Dream

Deep Dream就是给machine一张image,它会在这张image里加上它看到的东西。

先找一张image,然后将这张image丢到CNN中,把它的某一个hidden layer拿出来(vector),把这个vector的postitive dimension值调大,negative dimension值调小。然后把这个调节之后的vector当做新的image的目标,然后找一张image(modify image)用GD方法,让它在同一个hidden layer上的output是之前设下的target。这样做使得filter的激活程度变大,能够让CNN夸大化它所看到的东西。

Deep Style

input两张image,让machine去修该一张图,模仿另外一张图的风格 (风格迁移)。

image content:filter output的value,代表一张image中的content

image style:filter和filter的output之间的correlation,代表了一张image的style

首先将两张图丢进CNN中分别得到目标image content和image style。CNN去找一张image,这张image的filter output与image content吻合;image的filter output之间的correlation与目标style吻合。方法依然是使用gradient descent找到一张image,同时最大化包含image content和image style的目标函数。

Playing Go

对于下围棋这件事,也就是找一个function,它的input是棋盘当前局势,output是你下一步应该落子的位置,这样其实就可以让machine学会下围棋了,所以用fully connected的feedforward network也可以做到让machine下围棋这件事情。

DNN
使用DNN的话,将一个 19 × 19 19×19 19×19的棋盘flatten成一个vector,vector的每一个dimension对应到棋盘上的某一个位置(1代表黑子,-1代表白子,0代表空白),丢到一个fully connected的feedforward network里,output也是 19 × 19 19×19 19×19个dimension ,每一个dimension对应到棋盘上的一个位置。

CNN
使用CNN的话,直接将一个 19 × 19 19×19 19×19的棋盘直接表示成matrix作为input,output下一步要落子的位置。

在围棋中有一些特性和图像处理很相似,对于整个棋局的局势,通常聚焦于某个局部,不需要看整个棋盘,那么以一个小范围的pattern可以解决问题。在AlphaGo里面,它第一个layer的convolution是 5 × 5 5×5 5×5的filter,设计人认为围棋上最基本的pattern可能都是在 5 × 5 5×5 5×5的范围内就可以被检测出来;同样的pattern可能会出现在不同的region,可以用同一个detector,来处理这些在不同位置的同样的pattern。

max pooling in playing go
max pooling基于对一个image做subsampling,你拿掉奇数行、偶数列的pixel,对图像的理解没有太大偏差的事实,但是,对围棋来说,并不是这样,比如说,你对一个棋盘丢掉奇数行和偶数列,那它还和原来就相当不同。所以无法使用max pooling。

Speech

把一段声音表示成spectrogram,spectrogram的横轴是时间,纵轴则是这一段时间里声音的频率,在语音上,只考虑在frequency(频率)方向上移动的filter,宽和image的宽是一样的,并且filter只在Frequency即纵坐标的方向上移动,而不在时间的序列上移动

Text

目的是input一个word sequence,让machine侦测这个word sequence是positive的还是negative的。

这个word sequence里面的每一个word都用一个vector来表示,vector代表的这个word本身的semantic ,那如果两个word本身含义越接近的话,它们的vector在高维的空间上就越接近,这个东西就叫做word embedding

把一个sentence里面所有word的vector排在一起,它就变成了一张image,丢到CNN里面,filter只按照word sequence的顺序移动,而不在这个embedding的dimension上移动;因为在embedding里面,不同dimension是独立的

CNN Application相关推荐

  1. 第五节 Convolutional Neural Network (CNN)

    第五节 Convolutional Neural Network (CNN) 1. image classification 图像分类 首先假设输入模型的所有图片的大小都是固定的.如果图像不一样就线r ...

  2. 卷积神经网络CNN(8)—— Pix2Pix Application -- Aerialmap Lane Line Detection (Pix2Pix应用:航拍图车道线检测)

    卷积神经网络CNN(8)-- Pix2Pix Application -- Aerialmap Lane Line Detection (Pix2Pix应用:航拍图车道线检测)

  3. Complex-Valued CNN and Its Application in Polarimetric SAR Image Classification

    这里写目录标题 Abstract Method Results Note Abstract Following the great success of deep convolutional neur ...

  4. 吴恩达深度学习CNN作业:Convolutional Neural Networks: Application

  5. Winograd,GEMM算法综述(CNN中高效卷积实现)(上)

                           高效卷积实现算法和应用综述(上) 在下一篇文章会介绍Winograd算法的应用,在ICLR,CVPR,FPGA,FCCM等机器学习和FPGA领域的定会上的 ...

  6. CNN网络中的 1 x 1 卷积是什么?

    上面是一个 1x1 卷积核的输出示意图, 如果是 K 个1x1 卷积核,那么 结果就是 将通道数由 D 变为 K 降维或升维 特征通道数变化: 256 -> 64 -> 256 http: ...

  7. 深度学习~卷积神经网络(CNN)概述

    目录​​​​​​​ 1. 卷积神经网络的形成和演变 1.1 卷积神经网络结构 1.2 卷积神经网络的应用和影响 1.3 卷积神经网络的缺陷和视图 1.3.1 缺陷:可能错分 1.3.2 解决方法:视图 ...

  8. DL之CNN:利用CNN(keras, CTC loss, {image_ocr})算法实现OCR光学字符识别

    DL之CNN:利用CNN(keras, CTC loss)算法实现OCR光学字符识别 目录 输出结果 实现的全部代码 输出结果 更新-- 实现的全部代码 部分代码源自:GitHub https://r ...

  9. dropout层_DNN,CNN和RNN的12种主要dropout方法的数学和视觉解释

    深入研究DNN,CNN和RNNDropout方法以进行正则化,蒙特卡洛不确定性和模型压缩 动机 在(深度)机器学习中训练模型时的主要挑战之一是协同适应. 这意味着神经元彼此非常依赖. 它们彼此之间影响 ...

最新文章

  1. [原创]使用 NodeJS, MarkdownJS, PrettifyJS 打造个人博客写作平台 - 整体思路
  2. ASP.NET三层数据操作与GridView互动
  3. 设计模式复习-单例模式
  4. 创建一个 Django 项目
  5. 关于卡巴斯基6.0自动升级时报错后自动退出的情况
  6. mysql打开无法控制_MySQL不能启动和停止 MySQL各种解决方法教程
  7. hdu5468 Puzzled Elena
  8. js中startsWith 函数不能在任何浏览器兼容的问题
  9. 老照片的复活,焕发生机与跃然纸上!这篇CVPR2020的论文彻底火了
  10. [Angularjs]angular ng-repeat与js特效加载先后导致的问题
  11. python的namedtuple
  12. 性能测试--jmeter中参数化【14】
  13. 联想y7000笔记如何安装matlab,联想y7000p安装配置ubuntu笔记
  14. 全球与中国多模连续光纤激光器市场现状及未来发展趋势
  15. 利用Python处理辅助明细账并计算账龄
  16. 2022-2028全球与中国品牌许可市场现状及未来发展趋势
  17. AI在实时音视频互动中应用的 n 种姿势
  18. 【SVN】教你如何替换主干代码
  19. 在AD中创建子域和域树
  20. #71 go-ini 配置库评析 by 无闻(unknwon)【 Go 夜读 】

热门文章

  1. 使用pandas处理excel,并使用Openpyxl修改单元格格式
  2. 国内数藏造富只是个例,散户见好就收
  3. python 如何判断当天为周几?判断当天是否为工作日?
  4. 在现有oracle服务器上新建一个oracle实例
  5. vivado基本开发流程
  6. 一分钟了解蒙特卡洛方法
  7. Coursera | Andrew Ng (02-week-1-1.7)—理解 Dropout
  8. python的ppt报告_Python学习报告.ppt
  9. Linux计划任务介绍
  10. java中print()和println()的区别