机器学习理论篇之CNN 卷积神经网络

CNN 卷积神经网络

一.定义

卷积神经网络(ConvolutionalNeural Network,CNN)是一种前馈神经网络,对于大型图像处理有出色表现。[1] 它包括卷积层(convolutionallayer)和池化层(poolinglayer)。由于该网络避免了对图像的复杂前期预处理,可以直接输入原始图像,因而得到了更为广泛的应用。

CNN的基本结构包括两层,其一为特征提取层,每个神经元的输入与前一层的局部接受域相连,并提取该局部的特征。一旦该局部特征被提取后,它与其它特征间的位置关系也随之确定下来;其二是特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射是一个平面,平面上所有神经元的权值相等。特征映射结构采用影响函数核小的sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性。

二.与全连接网络区别:
全连接神经网络:

结构:每两层间所有节点都有连接
输入输出:输入特征,输出预测
参数个数:求和(前层神经元个数×后层神经元个数+后层(偏置))
缺点:参数个数如果过多,会导致计算慢且易发生过拟合。

卷积神经网络:

结构:每两层间节点部分连接,为了展示每一层神经节点的维度,一般会将每一层卷积层的节点组织成一个三维矩阵。前几层中每一个节点只和上一层中部分的节点相连。
输入输出:输入特征,输出预测
参数个数:卷积核体积+卷积核个数(长×宽×高+个数)
目的:借助卷积核提取特征点的过程。
作用:高层次抽象特征,精简特征点。

全连接到卷积网络:二维到三维的过程,灰度值到RGB的操作。

三.卷积神经网络的五大组成部分:
1.输入层:
输入图片的像素矩阵,三维,有深度,代表RGB
2.卷积层:每一个节点的输入是上一层神经网络的一小块,这个小块大小有3×3或者5×5.卷积层试图将神经网络中的每一小块进行更加深入地分析,从而抽象程度更高的特征。
3.池化层:池化层不改变三维矩阵的深度,但是它可以缩小矩阵的大小。池化操作可以认为是将一张分辨率较高的图片转化为分辨率较低的图片。
4.全连接层:经过几轮卷积层和池化层处理之后,在卷积神经网络的最后一般会是1到2个全连接层来给出最后的分类结果。
5.Softmax层:用于分类问题,给出不同分类的概率情况。

四.两个核心结构:
1.卷积核(过滤器):
卷积操作:有深度概念,深度为3的卷积核,就是一个3×3×3的立方体。每次优化的是一个小方格。
卷积层前向传播:就是拿卷积核中的参数,和像素点进行乘积,然后求和。左上,左下,右上,右下的顺序。


卷积核的深度由样本决定。

我们可以改变卷积核的个数,大小(长和宽),步长,还要padding(要不要填0)。。

大小:卷积核的长×宽,常用的有3×3, 5×5.
Padding:当过滤器大小不为1×1是,卷积层前向传播得到的矩阵尺寸要小于当前层矩阵的尺寸。

为了避免尺寸的变化,我们可以在当前矩阵的边界上加入全0填充(zero-padding),这样可以使得卷积层的前向传播结果矩阵大小和当前矩阵保持一致。

步长:分为在长度和高度上的移动长度,即每一次卷积核移动的长度,这也会改变结果矩阵的大小。


结果矩阵大小公式:

全0填充下:
结果矩阵长度=(输入长度/长度方向步长)向上取整
结果矩阵宽度=(输入宽度/宽度方向步长)向上取整


不使用全0填充下:

结果矩阵长度=((输入长度-卷积核长度+1)/步长)向上取整
结果矩阵宽度=((输入宽度-卷积核宽度+1)/步长)向上取整

性质:(共享权值)每一个卷积层中使用的过滤器(卷积核)中的参数都是一样的。因为共享过滤器的参数可以使得图像上的内容不受位置影响。而且共享每一个卷积层中过滤器的参数可以巨幅减少神经网络中的参数。

2.池化层:
在卷积层之间往往加上一个池化层,池化层可以非常有效地缩小矩阵的尺寸,从而减小最后全连接层中的参数,使用池化层既可以加快计算速度也有防过拟合问题的作用。
池化层前向传播也是移动类似与过滤器的结构来完成的。不过池化层中过滤器结果不是计算加权和。而是采取更加简单的求最大值或平均值的方法,因此这里就分为 最大池化层和平均池化层。
还有个 区别就是卷积层上的过滤器是横跨整个深度的,而池化层使用的过滤器是只影响一个深度上的节点.。所以池化层的过滤器除了在长和宽两个维度上移动之外,它还需要在深度这个维度上移动。
池化层主要用于减少矩阵的长和宽。虽然池化层也可以减少矩阵的深度,但是矩阵中一般不这么做。

五.工作原理

链接:https://www.zhihu.com/question/39022858

机器之心那篇文章好好看看很有启发,不过有点长。

下面是我摘录的第一个回答,感觉也是挺不错的,如果不想点链接的话,就看看这个。


也就相当于对原矩阵,按照顺序将各区域元素与W矩阵相乘,

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 学习卷积神经网络需要以下步骤: 1. 了解基本概念:首先你需要了解神经网络、卷积、池化、前馈网络等基本概念。 2. 学习数学知识:学习卷积神经网络需要对线性代数、微积分等数学知识有扎实的基础。 3. 研究论文:阅读和理解相关的论文是学习卷积神经网络的重要组成部分。 4. 实践:最好的学习方法就是实践,在计算机上使用深度学习框架(如 Tensorflow、PyTorch)实现自己的卷积神经网络。 5. 参加课程或培训:学习卷积神经网络的有用的方法之一是参加专业的课程或培训。 6. 社区参与:加入相关的社区,与其他专家和爱好者交流,可以获得更多的知识和技巧。 ### 回答2: 学习卷积神经网络可以遵循以下步骤: 1. 理解基本概念:卷积神经网络CNN)是一种用于图像识别和分类的深度学习模型。了解卷积层、池化层、激活函数和全连接层等基本概念是学习CNN的第一步。 2. 学习数学基础:掌握线性代数和微积分是理解CNN的重要前提。学习卷积运算、梯度下降、反向传播等数学概念对于深入理解CNN的工作原理非常有帮助。 3. 研究经典模型:CNN领域有很多经典模型,如LeNet-5、AlexNet、VGGNet和ResNet等。通过研究这些模型的网络结构、参数设置和最佳实践,可以更好地了解CNN的应用和创新点。 4. 探索开源库:TensorFlow、PyTorch、Keras等开源深度学习库都提供了丰富的CNN模型和相关教程。通过使用这些库,可以加深对CNN的理解,并从实践中学习如何构建和训练CNN模型。 5. 实际项目的实践:在学习理论知识的同时,通过参与实际项目,如图像分类、目标检测和人脸识别等任务,可以将所学知识应用到实际中,并不断调整和改进CNN模型。 6. 与他人交流和合作:参与学术论坛、社群和与其他学习者的讨论,可以共享经验和资源,并从其他人的反馈中不断提高。 总之,学习卷积神经网络需要一定的数学基础,理解经典模型,并通过实践和与他人的交流来巩固所学的知识。不断学习和实践,掌握CNN的原理和应用,可以为深度学习方向的研究和实践提供坚实的基础。 ### 回答3: 学习卷积神经网络可以采取以下步骤。 首先,了解卷积神经网络的基本概念和原理。卷积神经网络是一种深度学习模型,具有通过卷积运算提取图像特征的能力。了解卷积运算的定义、作用和实现方式,以及卷积神经网络的层次结构和参数设置,是学习的基础。 其次,学习卷积神经网络的常见模型和算法。如LeNet、AlexNet、VGGNet、GoogLeNet和ResNet等。深入了解这些模型的结构、特点和应用场景,可以通过阅读相关的研究论文和教程来学习。 第三,进行实践和编程。选择合适的开发环境和工具,如Python和深度学习库TensorFlow或PyTorch等,实践编写卷积神经网络的代码。可以从简单的图像分类任务开始,逐步提高难度,理解和实现不同模型的训练过程。同时要注意调试和优化,以提高模型效果。 第四,参与相关的竞赛或项目。参加Kaggle等机器学习竞赛,或者加入开源社区共同开发项目,可以和其他学习者交流和分享经验,提高自己的卷积神经网络技能。 最后,不断学习和探索。深度学习领域发展迅速,新的卷积神经网络模型和算法不断涌现。要保持对最新研究和技术的关注,阅读论文、参加学术会议和研讨会,不断扩展自己的知识和技能。此外,通过复现经典模型和开展自己的研究项目,可以加深对卷积神经网络的理解和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值