Day-24 一定会见面,Convolutional Neural Network (CNN)

  • 我们在历经了各种风霜之後,总算走到了这里,在深度学习的路上的必修课,也就是 Convolutional Neural Network(卷积神经网络),也简称 CNN
  • CNN 可以说是所有可以找到的深度学习教材中都一定会提到的神经网络,那为何 CNN 是必说教材呢?因为 CNN 可以说是影像辨识中威力强大的发明,且後续很多新的辨识网络都是基於 CNN 架构做延伸的,因此可以说他是深度学习中影像辨识的始祖都不为过,且由於他也是前几个基於人类辨识图像概念去做设计的神经网络,因此可以说它的意义非凡
  • 当然,除了意义非凡,理解 CNN 的神经网络架构能够更好的辅助我们去理解其他深度学习模型,因此 CNN 确实在深度学习的路上有不可抹灭的重要性
  • 那就让我们好好认识它吧~

Convolutional Neural Network(CNN)

  • Convolutional Neural Network(CNN) 被称为卷积神经网络,是一个深度学习的算法,此算法会在输入的图像中切割图像,并对每个切割的影像分配重要性(也就是调整 weight & bias),并於过程中去学习那些图像区块对於图片分类有重要影响
  • 那虽然说 CNN 属於前馈神经网络的一种,但是他却有比一般前馈网路更好的资料特徵判断状况,视为什麽呢?最主要原因在於图片属於二维资料,而在一般的神经网络中,我们都会将资料摊平(二维 to 一维),那图像中的资料关系会因为摊平的行为被稀释掉,这样会大大影响我们对於资料特徵的学习,而卷积神经网络则用另外的方式解决了这个问题,我们後面会提到
  • 卷积神经网络参考了人类大脑视觉组织的概念建立的,因此可以说是一个非常贴近神经网络概念设计的神经网络,也正因为如此,後续很多图像辨识的模型都有参考 CNN 的设计理念
  • 那我们废话不多说,我们来解释 CNN 到底长怎样吧~

CNN 的结构


image from: A Comprehensive Guide to Convolutional Neural Networks — the ELI5 way

  • 上图是一张对於手写数字进行分类的 CNN 结构图,在这个结构中我们可以发现他做了两次一样的结构,也就是 Convalution, Pooling, Fully Connected, 因此让我们理解他们分别在做什麽,就可以理解 CNN 了

Convolution Layer 卷积层

  • 卷积层运算是将原始图片与特定的 Feature Detector(Filter) 去做卷积运算,那卷积运算的意思是将对应矩阵做镶成後在相加,我们拿下面这张图片作为举例

  • 我们有一个特徵撷取区块,这个区块会遍历资料,然後做计算,这个计算以上图做举例会长成 https://chart.googleapis.com/chart?cht=tx&chl=%241%20*%200%20%2B%200%20*%201%20%2B%201%20*%200%20%2B%200%20*%201%20%2B%201%20*%200%20%2B%201%20*%200%20%2B%201%20*%201%20%2B%200%20*%201%20%2B%201%20*%201%20%3D%202%24 ,也就是我现在这个区块积於现在特徵选取是 2 的意思,那假设我们每次为一是一格,我们会有下面这张图

  • 所以当我们依序做完整张图片会得到一张特徵表如下图

  • 那产生 Feature Map 的 Feature Detector 可以是任意排列组合,那假设我们产生 9 种不同的排列组合,并生成九种不同的 Feature Map,就类似我们对於物体产生了九种不同的特徵判断,这个过程就很像我们人在过滤判断一张图片的特徵有哪些的过程,因为 Feature Detector 一定会保留某些资讯,因此这些被保留的资讯就可以视为一个个特徵
  • 所以我们可以发现 Convalution Layer 在做的事情就是特徵提取,而这些特徵就包含图片的边缘、颜色、梯度方向等等

Pooling Layer 池化层

  • 其实 Pooling Layer 的操作跟 Convolution Layer 近似,池化层最主要的工作是负责减少卷积特徵的空间大小
  • 这是为了利用降维来降低处理数据所需要的计算能力,且这个过程有助於提取旋转、位置不变等等主导特徵,来保持模型有效的训练过程
  • Pooling 有分成两种,一种是 Max Pooling 而另一种则是 Average Pooling,
    • Max Pooling 顾名思义就是回传区域内最大值
    • Average Pooling 则是回传区域内平均值
  • 那大家会听到 Max Pooling 的效果比 Average Pooling 的状况好,主要原因在於 Max Pooling 能降低 Noise(噪音,也就是所谓影响判断的资料/特徵)的影响,是一个分常好的噪音抑制器
  • 到这里我们已经有被提取和整理之後的特徵了,接下来我们就要把资料摊平然後送进神经网络中做分类啦~

Fully Connected Layer 全连接层

  • 既然我们有特别整理过的资料了,那当然要好好地使用他们,使用的方式就是送到我们的 NN 中啦~
  • Fully Connected Layer 就是将前面的结果平坦化後接到基本的神经网络中,就这样,没错,非常单纯

整体结构

每日小结

  • CNN 在深度学习里面有非常重要的地位,它利用了卷积层和池化层解决了图片特徵学习关系被平坦化影响的问题,也利用了一个全新的思路去模仿人类学习资料特徵的方式,可以说是图像辨识的重大突破
  • CNN 在图像辨识上有非常好的效果,明天就让我们来看看如何实做出一个 CNN Network

<<:  [Day25] Flutter GetX API AnimatedSwitcher

>>:  Day24-TypeScript(TS)函式(Function)的预设参数(Default Parameter)

Day16-Redux 篇-认识 Redux Toolkit

在这篇文章中,我们要来认识一个函式库: Redux Toolkit。 Redux Toolkit 官...

[DAY20] 用 Azure Machine Learning SDK 建立 Dataset

DAY20 用 Azure Machine Learning SDK 建立 Dataset 大家还记...

Day 11 Arbitrary attributes

目前MyButton有3个[Parameter],如果再增加的话,又要再定义新的[Parameter...

Day14 用python写UI-聊聊Scale

今天迈入第14天了,耶~~~今天的内容我也是很喜欢,尤其是自己调整背景颜色的实作,真的觉得非常有趣~...

Day 11-Atlantis 做 Terraform Remote Plan & Remote Apply

使用 atlantis 做 terraform automation,Terraform Remot...