卷积神经网络(CNN)学习笔记 ——李宏毅

卷积神经网:与影像有关

Image Classification(目标是分类)

输入:   图片   (如果图片的大小不一致,先将所有图片rescale成大小一致的)

输出:各种类别

卷积神经网络(CNN)学习笔记 ——李宏毅_第1张图片

 \widehat{y}是我们设置的分类目标  改向量的长度就是可以辨识多少种类别

卷积神经网络(CNN)学习笔记 ——李宏毅_第2张图片

 图片通过model后通过softmax输出y'   我们希望y' 与\widehat{y}之间的 cross entropy(交叉熵) 越小越好

 

如何把一张图片当作一个模型的输入呢?

对于电脑来说 一张图片是一个三维的tensor  (即维度大于二的矩阵)

这三维分别是图片的长、宽和channel的个数

一张彩色的图片是由RGB三种颜色组成

三个channel就分别代表R、G、B三种颜色

长、宽表示图片的解析度  图片总共有多少个像素点

将三维的图片拉直成一个巨大的向量(就可以作为一个输入)

向量中每一个数值代表的是某种颜色在该像素点的颜色强度

卷积神经网络(CNN)学习笔记 ——李宏毅_第3张图片

把代表图片的向量作为输入

如果是全连接的网络

输入总共有100*100*3个

假设有1000个neuron 每一个输入对每个neuron都会产生一个weight

那么就会有3*10^{7}个weight

卷积神经网络(CNN)学习笔记 ——李宏毅_第4张图片

随着参数的增加  模型的弹性和能力可以增加  但是同时会增加过拟合的风险

 为了减少参数 我们可以不使用全连接网络  根据观察图像的特性 设计其他的网络结构

卷积神经网络(CNN)学习笔记 ——李宏毅_第5张图片

一张小鸟的图片  通过模型如何得出它是一只鸟? 如果辨识到某些重要的特征 就可以得出它是一只鸟

卷积神经网络(CNN)学习笔记 ——李宏毅_第6张图片 

 

比如 某一个neuron 看到的是鸟嘴  有一个neuron看到了眼睛  另一个neuron看到了鸟爪  当这些重要的特征组合在一起 我们就可以判断是一只鸟

判断的时候要抓某些重要的特征 因此我们并不需要每一个neuron 都去观察一整张图片

即不需要把整张图片当作一个neuron的输入  只需要将图片的一部分当作neuron的输入即可   这样我们就可以做简化

CNN中是这样做的

为每一个neuron 设定receptive field (感受野) 每个neuron 只用负责receptive field 的部分

 卷积神经网络(CNN)学习笔记 ——李宏毅_第7张图片

比如对于这个蓝色的neuron 只需要将这27个数值作为输入 产生27个weight 加上一个bias 得到的输出作为下一层的neuron的输入

Receptive field的范围是自己定义的 ,每个neuronReceptive field 是可以重叠的

并且不同的neuron可以负责相同的Receptive field

Receptive field 的大小也可以根据自己的需求定义,并且每个neuronReceptive field

也可以是有大有小的

 卷积神经网络(CNN)学习笔记 ——李宏毅_第8张图片

经典的Receptive field的安排方式

(1)默认所有的channel

(2)因此在表示大小时,只需要表示长和宽的范围,这个范围叫做kernel size,一般kernel size 不会很大,常用3*3

(3)同一个Receptive field一般有很多neuron负责

(4)设置stride 相当于步长 (一般设置为1或2),使得receptive field 相互重叠。

(5)当范围超出了图像的边界,要设置padding,可以补0,把超出的范围的值设为零。

也可以补上均值。

 卷积神经网络(CNN)学习笔记 ——李宏毅_第9张图片

对于不同的图片来说,某些重要的特征出现的位置是不一样的 

卷积神经网络(CNN)学习笔记 ——李宏毅_第10张图片 

例如 两个图片的鸟嘴的位置 一个在图片的正上方,一个在图片的中间,对于这两个不同的区域都有一组neuron 负责,每一组neuron中都有一个neuron是辨识鸟嘴的功能。那么对于不同的receptive field 辨识鸟嘴的neuron的功能是一样的,因此我们需要每个区域都弄一个辨识鸟嘴的neuron吗?

他们所做的事情都是重复的,这两个neuron的参数(weight)是一模一样的,因此我们只需要让不同的receptive field 共享参数即可。虽然共享了参数,但是不同的图片他们的输出是不一样的,因为输入不同 。

 卷积神经网络(CNN)学习笔记 ——李宏毅_第11张图片

如何共享参数?这个是自己定义的

常见的共享参数的方法

 如图有两个 receptive field ,他们分别由64 个neuron 负责,其中相同颜色的neuron共享一组参数,这组参数被常称为filter。

卷积神经网络(CNN)学习笔记 ——李宏毅_第12张图片

总结 

卷积神经网络(CNN)学习笔记 ——李宏毅_第13张图片 

 

全连接网络的弹性最强 功能最丰富 但是无法在特定的任务上有很好的表现

加入 receptive field 限制之后   观察的范围固定 并且减小  弹性减弱 但是参数自由

加入 参数共享之后 参数固定  弹性就更低

这样的 叫做convolutional layer  

使用到 convolutional layer的network 就叫做CNN

 

你可能感兴趣的:(笔记,cnn,学习,深度学习)