24.卷积原理

目录

1  神经网络

2  卷积神经网络应用场景

3  卷积神经网络介绍

4  卷积

4.1  卷积计算方式

4.2  权重一致

5  池化


1  神经网络

我们先来看神经网络,大致分为下面几个过程

  • 有一批数据
  • 网络前向传播,获取损失函数
  • 之后反向传播,计算梯度(权重对损失函数的影响)
  • 最后使用梯度更新参数

神经网络就是通过前面四个步骤不停的循环,这个就是训练的过程

2  卷积神经网络应用场景

卷积神经网络有下面几个应用场景

  • 第一个是Classification,这个是分类任务,检测出那个图像是猫,那个图像是够
  • 第二个是Retrieval,这个是检索,功能类似于以图搜图
  • 第三个是Detection,这个是检测,与分类任务有关系,它包含两个过程分类和回归
  • 第四个是Segmentaion,这个是分割,我们把图中的元素分离出来

目标检测常见于自动驾驶领域

我们在人工智能领域更多的是使用GPU,如果条件不允许CPU也行,GPU的运算速度要高于CPU,GPU中有一个参数叫显存,显存越大我们同时运行的模型就可以越多,一次传入的数据(batch)就可以越多

卷积神经网络可以提取特征,下面这个图是人脸检测

下面这个图是姿态检测

手写文字识别

计算机描述图像,这个单独CNN就完不成了,这个是CNN+LSTM(记忆神经网络)

画风迁移

3  卷积神经网络介绍

我们用神经网络与卷积神经网络做个对比,左侧是神经网络,右侧的卷积神经网络

我们可以看出来,左边是平面的,右边是立体的,卷积神经网络中有深度(depth)这个概念

4  卷积

卷积的作用是特征提取,我们下图这个粉色的板子是要提取的图像,蓝色的板子是卷积核,卷积核的深度一定要与提取的图像深度一致,现在它们都是3,这个3不一定是图的通道数,也可以是其他整形数值

卷积核提取图像特征后的结果我们称它为特征图像,我们一个图像可以使用多个卷积核来提取图像,下面这个图就是使用两个卷积核提取图像,得到了两个特征图像,特征图像也是我们卷积层的输出结果,这个28是在32这个图像中提取出来的大小,一会儿说一下怎么算的

我们在得到的特征图像中还可以进行卷积操作,处理方式与在原图中处理方式相同

在下面这个图中第一层我们用了6个卷积核,第二层我们用了10个卷积核

我们拿一张实际的图像看一下效果,我们每一次卷积就会使特征更加明晰,直到卷积的最后一层,我们利用特征图像进行分类(或者回归任务等)

4.1  卷积计算方式

下面是卷积的计算,我们输入图像大小为7*7*3,对应我们左侧蓝色的三张图,这这三张图分别的三个通道

我们使用了两个卷积核(Filter),分别是W0与W1,大小都为3*3*3

  • 在神经网络训练的过程中卷积核中的值是与偏置(b)不断更新的

改变卷积核这个是反向传播时的事儿,前向传播时不变,我们先计算一次卷积,卷积是卷积核矩阵与相应的图像矩阵做乘法,我们首先算图中左上角的3*3矩阵

  • 第一层

图像

卷积核

0*1 + 0*1 + 0*1 +0*-1 + 1*-1 + 1*0 + 0*-1 +1*1 +1*0 = 0

  • 第二层

图像

卷积核

0*-1 + 0*-1 +0*1 + 0*-1 +0*1 + 1*0 + 0*-1 + 2*1 +2*0 = 2

  • 第三层

图像

卷积核

0*-1 + 0*0 + 0*-1 + 0*0 + 2*0 + 2*0 + 0*-1 + 0*-1 +0*-1 = 0

现在我们得出了三个w,分别是w0=0.w1=2.w2=0,此时卷积的结果还需要加上偏置(b)

也就是说,我们现在的结果是3

计算完第一个值之后我们的窗口需要进行滑动,卷积滑动的步长是人为设置的,这个根据图像的需要应人为做出调整,我们当前卷积滑动的步长为2,步长选择的越大,我们最终得到的结果就越小,我们选择步长是越小越好,但是步长越小带来的问题是运算量加大,我们考虑到效率问题一般不让步长为1

计算的方式与上面的计算方式相同

计算完之后继续进行滑动

再往后就该换行了,这样处理,先红框,再橘黄,之后黄框,浅绿框,绿框,青框,这样第一个卷积核的卷积结果就出来了

我们注意到这里有pad的标志

我们先看下面这张图,我们下面这张图中有1和2两个像素点,像素点1的值在我们卷积的过程中只使用过一次,像素点2的值在我们卷积的过程中使用过两次,这样就使2的值对结果的影响要更大些,现在我们想减弱这种影响,所以我们引入pad(填充周边)

我们现在pad=1,所以我们在周围填上一圈0,填充的值我是不管它影响的,下面这个图蓝色背景的实际上是原本图像的值,周围一圈灰色背景的0是被填充的值

加0的原因是可以让机器不对该值进行学习,因为0乘任何数还是0

上面就是卷积运算的过程,我们可以通过下面公式算出卷积结果的大小

  • 结果的高

  • Ho 结果的高
  • Hi 输入图像的高
  • Hf 卷积核的高
  • P 填充的大小(pad)
  • S 步长
  • 结果的宽

  • Wo 结果的宽
  • Wi 输入图像的宽
  • Wf 卷积核的宽
  • P 填充的大小(pad)
  • S 步长

我们举个例子,我们的图像大小为(32,32),卷积核为(5,5),P = 0,S = 1,我们得到的卷积结果为(28,28)

这里注意一点,我们的每一层选用的卷积核的宽高需要保持一致,不能我在相同的一层,第一个卷积核是(3,3)的,第二个是(5,5)的

上面这个图的6是卷积核的个数,与其他值没有关系


4.2  权重一致

全连接:就是全都连接上了,下面这个图就是全连接

如果我们少了其中的一条线就不叫全连接了

我们做的卷积就是第二列的其中的一个神经元,我们的第二列就是卷积层

我们上面这个图的红的举例,比如说这一层的卷积核是5*5*3,那么它在反向转播的过程中有可能更改5*5*3+1个参数

因为每一层的值都得改,还有偏置(这个是最后加的那个1)

上面这个一个的,我们算出来一个神经元的参数是76个,我们这一行用了三个卷积核,那么就是76*3,228个

这个是要更改的参数,之后我们再看运算次数,比如我传入(32,32,3)大小的图像,使用(5,5,3)的10个卷积核进行卷积,那么运算次数为32*32*3*(5*5*3+1)*10=2334720次,这里我们仅仅使用了(32,32)大小的图像,一般来讲我们都会使用(500,500)这种大小的图像,这样运算次数需要再乘400倍左右,这样就会导致运算过于漫长

这里我们就使用到了卷积神经网络的权重共享,输入图像的所有像素点在同一卷积层权重一致,如果权重一致的话,我们只需要运算(5*5*3+1)*10=760次,这样就极大的提高了运算的效率


5  池化

卷积神经网络除了卷积层还有池化层

池化是特征浓缩的过程,有两种池化方式,一种是mean方式,一种是max方式,我们先说max池化

池化有一个池化核,这个只表示范围,没有参数

我们用(3,3)的池化核池化下面这个矩阵

我们得到了2这个值来代替原来的矩阵,也就是原来是一个矩阵,现在是一个数了

再说mean方式,这个就是取矩阵中的均值代替矩阵中的所有值,那我们再以这个图举例

它得到了4/9这个数

下面这个图是一个卷积神经网络,RELU是激活函数,一般来讲每次卷积之后都会加上激活函数

  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suyuoa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值