从零开始学人工智能(8)--Python · 神经网络(七)· CNN

浏览: 2104

作者:射命丸咲    Python 与 机器学习 爱好者

知乎专栏:https://zhuanlan.zhihu.com/carefree0910-pyml 

个人网站:http://www.carefree0910.com 

往期阅读:

从零开始学人工智能(6)--Python · 神经网络(五)· Cost & Optimizer

从零开始学人工智能(7)--Python · 神经网络(六)· 拓展

最终成品的 GitHub 地址:

https://github.com/carefree0910/MachineLearning/tree/master/NN

终于要开 CNN(卷积神经网络)这个神坑了。不过之所以说它神坑,是因为这里面牵扯到的数学概念相当相当多、导致如果只用 Numpy、从头来实现的话会非常繁琐。然而,如果只是理解它的直观并且单纯地实现它的话,由于有伟大的 tensorflow 框架、CNN 被极大地简化成了一个平凡的东西

我打算在不带星号的章节中说明如何运用 tensorflow 框架将 CNN 整合进我们之前实现的神经网络框架中、并在带星号的章节中说明如何使用纯 Numpy 从头实现一个 CNN 框架。CNN 坑就坑在带星号的章节,所以观众老爷们大可带着轻松愉悦的心情食用不带星号的章节 ( σ'ω')σ

这一章主要讲 CNN 的一些非常基本的概念。首先我想指出的是:从结构上来说,朴素的 CNN 和朴素的 NN 没有任何区别(当然,复杂的 CNN 会和 NN 有着比较大的区别)。这意味着朴素的 CNN 包含且只包含下列两个东西:

  • 单独的层级结构 Layer

  • 将 Layer 整合在一起的网络结构

所以在实现算法时我们要做的、无非就是把之前实现的 NN 相应的部分进行分情况讨论

知道了结构后,我们就要来看 CNN 的思想了。总的来说可以把它概括成以下两点:

  • 局部连接(Sparse Connectivity)

  • 权值共享(Shared Weights)

它们有很好直观。举个栗子,我们平时四处看风景时,都是“一块一块”来看的、信息也都是“一块一块”地接收的(所谓的【局部感受野】)。在这个过程中,我们的思想在看的过程中通常是不怎么变的、而在看完后可能会发出“啊这风景好美”的感慨、然后可能会根据这个感慨来调整我们的思想。在这个栗子中,那“一块一块”的风景就是局部连接,我们的思想就是权值。我们在看风景时用的都是自己的思想,这就是权值共享的生物学意义(注:这个栗子是我开脑洞开出来的、完全不能保证其学术严谨性、还请各位观众老爷们带着批判的眼光去看待它……如果有这方面专长的观众老爷发现我完全就在瞎扯淡、还望不吝指出 ( σ'ω')σ)

光用文字叙述可能还是有些懵懂,我来画张图(参考了一张被引用烂了的图;但由于原图有一定的误导性、所以还是打算自己画一个)(虽然很丑):

这张图比较了 NN 和 CNN 的思想差别。左图为 NN,可以看到它在处理输入时是全连接的、亦即它采用的是全局感受野,同时各个神经元又是相对独立的、这直接导致它难以将原数据样本翻译成一个“视野”。而正如上面所说,CNN 采用的是局部感受野 + 共享权值,这在右图中的表现为它的神经元可以看成是“一整块”的“视野”,这块视野的每一个组成部分都是共享的权值(右图中那些又粗又长的绿线)在原数据样本的某一个局部上“看到”的东西

接下来就粗略地讲讲怎么实现这种思想、亦即如何实现 CNN 里面的前传算法。具体的定义会在数学系列里面进行说明,这里就只放代码核心了(Again,tensorflow 大法好!)

def _conv(self, x, w):
   return tf.nn.conv2d(x, w,
       strides=[self._stride] * 4, padding=self._pad_flag)def _activate(self, x, w, bias, predict):
   res = self._conv(x, w) + bias
   return layer._activate(self, res, predict)

这里面涉及到一些以后会说明的东西,但如果知道概念的话、代码应该还是相当可读的

下一章开始会一步步地讲 CNN 的详细实现,所以即使上面这 6 行代码看不懂也没什么问题、因为下一章就会再次讲到。具体而言,我们会说明:

  • 如何定义 CNN 里面的 Layer、亦即所谓的卷积层(ConvLayer)

  • 如何将 ConvLayer 整合进我们的神经网络框架中

  • 如何处理全连接层(FC Layer)的相关事宜 

希望观众老爷们能够喜欢~

公众号后台回复关键词学习

回复 人工智能          揭开人工智能的神秘面纱

回复 贝叶斯算法      贝叶斯算法与新闻分类

回复 机器学习          R&Python机器学习

回复 阿里数据          阿里数据系列课程

回复 Python             Python机器学习案例实战

回复 Spark               征服Spark第一季

回复 kaggle             机器学习kaggle案例

回复 大数据             大数据系列视频

回复 数据分析          数据分析人员的转型

回复 数据挖掘          数据挖掘与人工智能

回复 机器学习          R&Python机器学习

回复 阿里数据          阿里数据系列课程

回复 R                      R&Python机器学习入门

推荐 5
本文由 人工智能爱好者社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册