讲到AI不得不讲深度学习,而讲到深度学习,又不能不讲卷积神经网络。如果把深度学习比作中国的互联网界,那卷积神经网络和循环神经网络就是腾讯和阿里级别的地位。今天我们主要讨论的卷积神经网络,到底卷积神经网络能解决什么问题,它的结构是怎样的?是怎么学习的?应用在哪些具体的产品上?本文将为大家一一解答。

如果对深度学习还不了解的同学,建议你先看下之前的文章《深度学习到底有多深?》,对深度学习有一定的认知,对接来了的讨论可能会更容易理解。

以下是本文讨论内容的大纲:

下文的卷积神经网络,我们用简称CNN表示。

01 为什么需要用到CNN?

1. 普通的神经网络会遇到什么问题?

假设我们要做图像识别,把一张图片丢到机器,机器能理解的就是每个像素点的值,如下图:

我们在搭建好神经网络模型之后,需要做的就是用数据训练,最终需要确定的是每一个神经元参数w和b,这样我们就可以确定模型了。

假设我们输入的是50*50像素的图片(图片已经很小了),这依然有2500个像素点,而我们生活中基本都是RGB彩色图像,有三个通道,那么加起来就有2500*3=7500个像素点。

如果用普通的全连接,深度比较深时,那需要确认的参数太多了,对于计算机的计算能力,和训练模型来说都是比较困难一件事。

因此,普通神经网络的问题是:需要确认的参数太多。

那CNN是怎么解决这个问题的呢?请接着往下看。

2. CNN是怎么解决这个问题的?

第一步:局部监测

假设我们要看一张图片中有没有猫耳朵,也许我们不需要看整张图片,只需要看一个局部就行了。因此看是否是一只猫,只需要看是否有猫尾、是否有猫嘴、是否有猫眼,如果都有,那机器就预测说这张图片是一只猫。

因为这种方法看的是图片的局部,而不是全部,也就是说神经元连接的是部分的特征变量,而不是全部的特征变量,因此参数比较少。(如果这里看不懂没关系,我们后面会详细解释)。

看到这里你可能会疑问,我怎么知道取哪个局部,我怎么知道猫耳在图片的哪个部位?不着急,后面会讲到。

第二步:抽样,缩小图片

假设我们要识别一张50*50像素的猫相片,如果我们把图片缩小到25*25个像素点,那其实还是能看出这是一只猫的照片。

因此,如果把图片缩小了,就相当于输入的特征变量变少了,这样也能减少参数的量。

卷积神经网络就是用上面这两步的思想来减少参数,那具体CNN的架构是怎样的?又是怎么运行的?我们接下来详细讨论。

02 CNN的架构

CNN的架构流程图:

第一步:卷积,即局部监测。

第二步:特征抽样,即缩小图片。

然后重复第一、第二步(具体重复多少次,人为决定)。

第三步:全连接,把第一、二步的结果,输入到全连接的神经网络中,最后输出结果。

1. 卷积(Convolution)

首先,把图片转化成机器可以识别的样子,把每一个像素点的色值用矩阵来表示。这里为了方便说明,我们就简化,用6*6像素来表示,且取只RGB图片一层。

然后,我们用一些过滤器跟输入的图片的矩阵做卷积。(如果不知道卷积怎么运行的话,可以去问下百度)

那过滤器是什么呢?

——过滤器就是用来检测图片是否有某个特征,卷积的值越大,说明这个特征越明显。

说到这里,我们回顾一下前面提到的问题:我怎么知道取哪个局部,我怎么知道猫耳在图片的哪个部位?

用的办法就是:移动窗口卷积。

同一个过滤器,会在原图片矩阵上不断的移动,每移动一步,就会做一次卷积。(每一移动的距离是人为决定的)

因此移动完之后,就相当于一个过滤器就会检测完整张图片,哪里有相似的特征。

卷积跟神经元是什么样的关系呢?

上图所示有3点需要说明:

1)每移动一下,其实就是相当于接了一个神经元。

2)每个神经元,连接的不是所有的输入,只需要连接部分输出。

说到这里可能你又会有疑问了,移动一下就是一神经元,这样不就会有很多神经元了吗?那不得又有很多参数了吗?

确实可能有很多神经元,但是同一个过滤器移动时,参数是强行一致的,公用参数的。

3)所以同一个过滤器移动产生的神经元可能有很多个,但是他们的参数是公用的,因此参数不会增加。

跟不同过滤器卷积:

同一层可能不止是跟一个过滤器卷积,可能是多个。

不同的过滤器识别不同的特征,因此不同的过滤器,参数不一样。但相同的过滤器,参数是一样的。

因此卷积的特点是:

  • 局部检测
  • 同一个过滤器,共享参数

3. 池化(Max pooling)

先卷积,再池化,流程图:

用过滤器1卷积完后,得到了一个4*4的矩阵,假设我们按每4个元素为一组(具体多少个为一组是人为决定的),从每组中选出最大的值为代表,组成一个新的矩阵,得到的就是一个2*2的矩阵。这个过程就是池化。

因此池化后,特征变量就缩小了,因而需要确定的参数也会变少。

4. 全连接

经过多次的卷积和池化之后,把最后池化的结果,输入到全连接的神经网络(层数可能不需要很深了),最后就可以输出预测结果了。

那到这里,我们把CNN的工作流程就讲完了,但是每一步具体的意义是什么,怎么理解?

可能你还不太理的顺,接下来我们会用一些可视化的方式帮助大家理解。

03 CNN是怎样学习的?

我们以AlexNet为例,给大家展示下CNN大致的可视化过程。

AlexNet是Alex Krizhevsky等人于2012年的ImageNet比赛中提出了新型卷积神经网络,并获得了图像分类问题的最好成绩(Top-5错误率为15.3%)。

AlexNet的网络架构:

其实AlexNet的结构很简单,输入是一个224×224的图像,经过5个卷积层,3个全连接层(包含一个分类层),达到了最后的标签空间。

AlexNet学习出来的特征是什么样子的?

  • 第一层:都是一些填充的块状物和边界等特征。
  • 中间层:学习一些纹理特征。
  • 更高层:接近于分类器的层级,可以明显的看到物体的形状特征。
  • 最后一层:分类层,完全是物体的不同的姿态,根据不同的物体展现出不同姿态的特征了。

所以,它的学习过程都是:边缘→部分→整体。

关于卷积神经网络的可视化,大家想了解更多的话,可以参考文章。

04 AlphaGo

前面我们提到了AlphaGo有用到CNN,那具体是怎么应用的呢,这里简答给大家科普下:

我们把围棋看成是一个19*19像素的图片,,每个像素点的取值:有黑子是1、有白子是-1,空为0。

因此,输入棋盘就是所有像素点的矩阵值,输出是下一步落子的位置。

那这个跟CNN有什么关系?

我们知道CNN擅长做的事情就是检测局部特征,那也可以把这项技能运用到下围棋上。

比如说上图这种特征,检测盘面上有没有这样的特征,如果有的话,通常下一步的落子是怎样。就好比玩剪刀石头布,检测到对方出剪刀,那机器的应对策略就是出石头。

同样可能有很多不同的特征,因此需要用不同的过滤器去检测。

而且,同一个特征可能会出现在不同的位置,因此也可以用过滤器移动的方法去检测。

AlphaGo 有没有池化?

讲到这里你会不会好奇,AlphaGo到底有没有用到CNN的池化。因为池化是把图片缩小的,围棋是19*19个点,如果缩成10*10个点,能行吗?

实际上AlphaGo是没有用到池化这一步的,所以说CNN也未见得一定要使用池化,还是需要实际问题实际解决,灵活应用。

好了,到这里就介绍完了CNN,后续我会写一篇文章介绍深度学习的另一大门派:循环神经网络RNN,感兴趣的同学记得关注哦。

本文由 @Jimmy 原创发布于人人都是产品经理。未经许可,禁止转载。

题图来自Unsplash,基于CC0协议。

搭建卷积神经网络怎么确定参数_AI入门:卷积神经网络相关推荐

  1. 卷积神经网络(conv2d参数含义、卷积层、池化层)

    本文转载自 罗翌新:中科大数学博士,深度学习医学应用专家: 廖星宇:中科大硕士,计算机视觉专家,Face++资深工程师,<深度学习之Pytorch>作者: 的深度学习理论与实战(基于Ten ...

  2. 卷积神经网络中的参数共享/权重复制

    参数共享或权重复制是深度学习中经常被忽略的领域.但是了解这个简单的概念有助于更广泛地理解卷积神经网络的内部.卷积神经网络(cnn)能够使那些通过网络馈送的图像在进行仿射变换时具有不变性. 这个特点提供 ...

  3. 卷积神经网络学习路线(五)| 卷积神经网络参数设置,提高泛化能力?

    前言 这是卷积神经网络学习路线的第五篇文章,主要为大家介绍一下卷积神经网络的参数设置,调参技巧以及被广泛应用在了哪些领域,希望可以帮助到大家. 卷积神经网络的参数设置 这个举个例子来说是最好的,因为直 ...

  4. 卷积神经网络(CNN)的参数优化方法

    积神经网络的参数优化方法--调整网络结构是关键!!!你只需不停增加层,直到测试误差不再减少. 著名: 本文是从 Michael Nielsen的电子书Neural Network and Deep L ...

  5. 机器学习|卷积神经网络(CNN) 手写体识别 (MNIST)入门

    人工智能,机器学习,监督学习,神经网络,无论哪一个都是非常大的话题,都覆盖到可能就成一本书了,所以这篇文档只会包含在 RT-Thread 物联网操作系统,上面加载 MNIST 手写体识别模型相关的部分 ...

  6. 卷积神经网络参数计算及卷积层输出尺寸计算

    一.卷积神经网络参数计算 CNN一个牛逼的地方就在于通过感受野和权值共享减少了神经网络需要训练的参数的个数,所谓权值共享就是同一个Feature Map中神经元权值共享,该Feature Map中的所 ...

  7. 深度学习——02、深度学习入门——卷积神经网络

    神经网络框架 卷积层详解 卷积神经网络组成 1.输入层(INPUT) 2.卷积层(CONV) 3.激活函数(RELU) 4.池化层(POOL) 5.全连接层(FC) 卷积计算流程 将image划分为一 ...

  8. matlab训练参数,设置参数并训练卷积神经网络

    设置参数并训练卷积神经网络 按照指定卷积神经网络的层中所述定义神经网络的层后,下一步是为网络设置训练选项.使用 trainingOptions 函数定义全局训练参数.要训练网络,请使用 trainin ...

  9. tensorflow没有这个参数_TensorFlow入门笔记(五) : 神经网络参数与TensorFlow变量

    神经网络参数简介 在TensorFlow中,变量(tf.Variable)的作用就是保存和更新神经网络中的参数.和其他编程语言类似,在TensorFlow中的变量也需要初始值.因为在TensorFlo ...

最新文章

  1. java在jsp中判断td的值是1还是2_Snap7,Eel与S71200简单组态1
  2. 【Java Web开发指南】云服务器部署项目供外网访问(Tomcat)
  3. 实现磁贴的效果的一种方法
  4. Acwing第 11 场周赛【未完结】
  5. 对于SAP的月结相关流程介绍
  6. 棍子节快乐~ 顺便转一篇weka源码分析解析~【转自weka中文网】
  7. pythonif语句如何循环播放_python – 循环播放文本,一次3个字符
  8. Linux 下的驱动开发最简单例子
  9. GridView自带的分页功能的实现
  10. Firefly是什么?有什么特点?
  11. 微信飞机大战游戏开发
  12. 解决Firefox火狐打不开Axure原型图
  13. 《matlab图像处理入门》总结
  14. git 添加远程仓库并将第一次本地库的已有所有内容推送到远程库上遇到的一个错误...
  15. 小木虫 高光谱遥感图像处理_高光谱图像变化检测
  16. 浏览器被万恶的hao123锁定主页
  17. 算法 - n个数字形成的圆圈中循环删除第m个数字(C++)
  18. java71-GUL边界布局管理器
  19. Linux图形子系统之GEM内存管理
  20. 运用JAVA实现猜骰子游戏

热门文章

  1. Bug人生---超越bug杀手
  2. js高级技巧之柯里化
  3. 前端编程之jQuery
  4. CENTOS7 Python3.7安装pip模块以及pip使用
  5. 使用kotlin遇到的问题
  6. 安装VS2013的离线MSDN帮助文档
  7. 当INPUT 连续输入是连续触发
  8. CecOS v1.4 中文企业云操作系统 管理员及用户指南发布
  9. OCP读书笔记(9) - 诊断数据库
  10. FFMPEG源码分析(二)