一文读懂卷积神经网络CNN

时间:2022-04-22
本文章向大家介绍一文读懂卷积神经网络CNN,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

来源:机器学习算法与自然语言处理

作者:白雪峰

本文为图文结合,建议阅读10分钟。

本文为大家解读如何简单明了的解释卷积,并且分享了学习中的一些方法案例。

首先文章的提纲为:

CNN栗子镇楼

What is CNN

什么是卷积

什么是池化

Why CNN

对CNN的其他一些理解

CNN实现(接口)

1、CNN栗子(A Beginning Glimpse of CNN)

Modern CNN since Yann LeCun

2.

上面是最经典和开始的两篇CNN的结构图

2、What is CNN?

神经网络?卷积?

2.1 什么是卷积?

卷积的定义

其连续的定义为:

特点:

2.2 离散卷积的栗子:

丢骰子时加起来要等于4的概率是多少?

二维离散的卷积

计算的动图如下

2.3 用到二维图像上:

关于卷积中常用到的一些概念:神经网络的卷积是对应位相乘,现在是信号相乘。

上面移动的小矩阵有两种叫法,一种叫做滤波器filter,一种加法叫做卷积核Kernel,是相同的东西只是不同的叫法。

2.4、用到神经网络中

我们其实需要学习的就是里面的线上面对应的权值,比如上面绿色的代表3*1的卷积核大小,只是这里用神经网络的结构表示出来了。

2.5、卷积的细节

filter/Kernel size,number

假设神经网络的输入是6*6的image,

其中每一个卷积核代表提取不同的特征,多个卷积核提取的特征然后进行组合(这样更强大),一同送入到后续的结构。

下面来一个更通俗的解释:

每个人代表一个卷积核来进行提取不同的特征,一个人是弱小的,但是一组人就强大了,他们有着不同的知识(权重),这样类比来理解,就会好理解很多。

Stride

The step size you take the filter to sweep the image

Zero-padding

A way not to ignore pattern on border

New image is smaller than the original image

Channel

2.6池化(pooling)

Max pooling例子:

Pooling isunsensitive to local translation.(局部不变性)

"If we translation the input by a small amount ,the values of mosts of the pooled outputs do not change."

图像往左或者往右移动,pooling 的结果是不变的

2.7flatten

2. 8 Convolution v.s. Fuly Connected

2.9 The whole CNN

So as the whole,CNN is conposed of

Convolution

Nonlinearity:e.g.ReLU

Pooling

FC Layers

3. Why CNN

Some patterns are much smaller whole image.

The same patterns appear in different regions

Subsampling the pixels will not change the object

4. 对CNN的其他一些理解

4.1 关于接受域(receptive field)

称在底层中影响上层输出单元s的单元合集为s的接受域(receptive field)。

处于卷积网络更深的层中的单元,它们的接受域要比处在浅层的单元的接受的域更大。如果网络还包含类似步幅卷积或者池化之类的结构特征,这种效应会加强。这意味着在卷积网络中尽管直接连接都是很稀疏的,但处在更深的层中的单元可以间接地链接到全部或者大部分输入图像。(表现性能)

4.2 卷积与池化作为一种无限强的先验

首先,弱先验具有较高的熵值,因此自由性较强,强先验具有较低的熵值,这样的先验在决定参数最终取值时可以起着非常积极的作用。

把卷积网络类比成全连接网络,但对于网络的权重具有无限强的先验。

所有隐藏单元的权重是共享的。

除了一些连续的小单元的权重外,其他的权重都是0.

池化也是一个无限强的先验:每个单元都具有对少量平移的不变性。

卷积和池化可能导致欠拟合!任何其他先验类似,卷积和池化只有当先验的夹着合理且正确时才有用。如果一项任务依赖于保存精确的空间信息,那么在所有的特征上使用池化将会增大训练误差。

根据实际需求选取先验

5.CNN in Pytorch

pytorch的相关接口

LeNet in PyTorch

参考:

如何通俗易懂得解释卷积(马同学知乎答案)

李宏毅老师slides