深度学习系列2:卷积神经网络

本文讲的是深度学习系列2:卷积神经网络,


深度学习系列2:卷积神经网络

CNN 是怎么学习的?学习了什么?

这篇文章是深度学习系列的一部分。你可以在这里查看第一部分,以及在这里查看第三部分。



这一周,我们将探索卷积神经网络(CNN)的内部工作原理。你可能会问:在网络内部究竟发生了什么?它们是怎样学习的?

这门课程遵循自上而下的学习方法与理念。因此一般来说,我们在开始学习的时候就能立即玩到所有的模型,然后我们会逐渐深入其内部的工作原理。因此,本系列也将会逐渐深入探索神经网络的内部工作原理。现在仅仅是第二周,让我们朝着最终的目标迈进吧!

在上周,我在猫狗图像集上训练了 Vgg 16 模型。我想先聊一下为什么说使用预先训练好的模型是一种很好的方法。为了使用这些模型,首先你得要弄清楚这些模型到底学习的是什么。从本质上说,CNN 学习的是过滤器,并将学习到的过滤器应用于图像。当然,这些“过滤器”和你在 Instagram 里用的滤镜(英文也为“filter”)并不是一种东西,但它们其实有一些相同之处。CNN 会使用一个小方块遍历整张图片,通常将这个小方块称为“窗口”。接下来,网络会在图片中查找与过滤器匹配的图片内容。在第一层,网络可能只学习到了一些简单的事物(例如对角线)。在之后的每一层中,网络都将结合前面找到的特征,持续学习更加复杂的概念。单单听这些概念可能会让人比较迷糊,让我们直接来看一些例子。Zeiler and Fergus (2013) 为可视化 CNN 学习过程做出了一项很棒的工作。下图是他们在论文中用的 CNN 模型,赢得 Imagenet 竞赛的 Vgg16 模型就是基于这个模型做出来的。



CNN,作者:Zeiler & Fergus (2013)

可能你现在会觉得这个图片很难懂,请不要慌!让我们先从我们可以在图中看到的东西说起吧。首先,输入图像是正方形,大小为 224x224 像素。我之前说的过滤器大小是 7x7 像素大小。该模型有一个输入层,7 个隐藏层以及一个输出层。输出层的“C”指的是模型的预测分类数量。现在让我们来了解 CNN 中最有趣的部分:这个神经网络在每一层中都学到了什么!



上图为 CNN 的第二层。左边的图像代表了 CNN 的这层网络在右边的真实图片中学习到的内容。
在 CNN 的第二层中,你可以发现这个模型已经不仅仅是去提取对角线了,它找到了一些更有意思的形状特征。例如在第二排第二列的方块中,你可以看到模型正在提取圆形;还有,最后一个方块表明模型正在专注于识别图中的一个直角作为特征。



上图为 CNN 的第三层。
在第三层中,我们可以看到模型已经开始学习一些更具体的东西。第一个方块中的图像表明模型已经能够识别出一些地理特征;第二排第二列的方块表明模型正在识别车轮;倒数第二个方块表明模型正在识别人类。



CNN 的第四层与第五层

在最后,第四层与第五层保持前面模型越来越具体的趋势。第五层找到了对解决我们的猫狗问题非常有帮助的特征。与此同时,它还识别出了独轮车,以及鸟类、爬行动物的眼睛。请注意,这些图像仅仅展示了每一层学习到的东西的极小一部分。

希望上面的文字已经告诉了你为什么使用预先训练好的模型是很有用的。如果你想更多的了解这块领域的研究,你可以搜索“迁移学习”(transfer learning)的相关内容。虽然我们的猫狗问题训练集仅仅只有 25000 张图片,一个新的模型可能还无法从这些图片中学习到所有的特征,但我们的 Vgg16 模型已经相当“了解”怎么去识别猫和狗了。最后,通过“微调”(Finetuning) Vgg16 模型的最后一层,让其不再输出 1000 多种分类的概率,而是直接输出二分类 —— 猫和狗。

如果你对深度学习背后的数学知识感兴趣,Stanford’s CNN pages 是很好的参考材料。他们首次以“数学之美”解释了浅层神经网络。


微调及线性层(全连接层)

上周,我用这个预先训练好的 Vgg16 模型不能很自然的区分猫和狗这两个分类下的图片,而是提出了 1000 余种分类。此外,这个模型并不会直接输出“猫”和“狗”的分类,而是输出猫和狗的一些特定品种。那我们如何修改这个模型,让它能够有效地对猫和狗进行分类呢?

有种可选方案:手动将这些品种分到猫和狗中去,然后计算其概率之和。但是,这种做法会丢弃一些关键信息。例如,如果图片中只有一根骨头,但它很可能是一张属于狗的照片。如果我们仅查看这些品种分为猫狗的概率,前面提到的这种信息很可能会丢失。因此在模型的最后,我们加入一个线性层(全连接层),它将仅输出两种分类。实际上,Vgg16 模型的最后有 3 层全连接层。我们可以微调这些层,通过反向传播来训练它们。反向传播算法常常被人看成是一种抽象的魔法,但其实它只是简单应用链式求导法则。你可以暂时忽略这些数学上的细节,TensorFlow、Theano 和其它深度学习库已经帮你做好了这些工作。

如果你正在运行 Fast AI 课程 lesson 2 的 notebook,我建议你最好先只使用 notebook 的样例图片。如果你运行 p2 的实例,可能会由于保存、加载 numpy 数组将内存耗尽。


激活函数

前面我们讨论了网络最后的线性层(全连接层)。然而,神经网络的所有层都不是线性的。在神经网络计算出每个神经元的参数之后,我们需要将它们的计算结果作为参数输入到激活函数中。人工神经网络基本上由矩阵乘法组成,如果我们只使用线性计算的话,我们只能将它们一个个叠加在一起,并不能做成一个很深的网络。因此,我们会经常在网络的各层使用非线性的激活函数。通过将重重线性与非线性函数叠加在一起,理论上我们可以对任何事物进行建模。下面是三种最受欢迎的非线性激活函数:

  • Sigmoid (将值转换到 0,1 间)
  • TanH (将值转换到 -1,1 间)
  • ReLu (如果值为负则输出 0,否则输出原值)



上图为最常用的激活函数:Sigmoid、Tanh 和 ReLu(又名修正线性单元)
目前,ReLu 是使用的最多的非线性激活函数,主要原因是它可以减少梯度消失的可能性,以及保持稀疏特征。稍后会讨论这方面的更多详情。因为我们希望模型最后能够输出确定的内容,因此模型的最后一层通常使用一种另外的激活函数 —— softmax。softmax 函数是一种非常受欢迎的分类器。

在微调完 Vgg16 模型的最后一层之后,它总共有 138357544 个参数。谢天谢地,我们不需要手动计算各种梯度 XD。下一周我们将更深入地了解 CNN 的工作原理,讨论主题为欠拟合和过拟合。

如果你喜欢这篇文章,请将它推荐给其他人吧!你也可以关注此系列文章,跟上 Fast AI 课程的进度。下篇文章再会!





原文发布时间为:2017年8月09日


本文来自合作伙伴掘金,了解相关信息可以关注掘金网站。

时间: 2024-12-03 20:07:51

深度学习系列2:卷积神经网络的相关文章

零基础入门深度学习(三):卷积神经网络

投稿:Intelligent Software Development 团队介绍:团队成员来自一线互联网公司,工作在架构设计与优化.工程方法研究与实践的最前线,曾参与搜索.互联网广告.共有云/私有云等大型产品的设计.开发和技术优化工作.目前主要专注在机器学习.微服务架构设计.虚拟化/容器化.持续交付/DevOps等领域,希望通过先进技术和工程方法最大化提升软件和服务的竞争力.   在前面的文章中,我们介绍了全连接神经网络,以及它的训练和使用.我们用它来识别了手写数字,然而,这种结构的网络对于图像

零基础入门深度学习(六):递归神经网络

递归神经网络是啥    因为神经网络的输入层单元个数是固定的,因此必须用循环或者递归的方式来处理长度可变的输入.循环神经网络实现了前者,通过将长度不定的输入分割为等长度的小块,然后再依次输入到网络中,从而实现了神经网络对变长输入的处理.   一个典型的例子是,当我们处理一句话时,我们可以把一句话看作是词组成的序列,然后,每次向循环神经网络输入一个词,如此循环直至整句话输入完毕,循环神经网络将产生对应的输出.如此,我们就能处理任意长度的句子了.如下图所示:     然而,有时候把句子看做是词的序列

[译] 深度学习系列 4: 为什么你需要使用嵌入层

本文讲的是[译] 深度学习系列 4: 为什么你需要使用嵌入层, 原文地址:Deep Learning 4: Why You Need to Start Using Embedding Layers 原文作者:Rutger Ruizendaal 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:Tobias Lee 校对者:LJ147.changkun 深度学习系列4: 为什么你需要使用嵌入层 除了词嵌入以外还有很多 这是深度学习系列的其中一篇,其他文章地

[译] 深度学习系列1:设置 AWS & 图像识别

本文讲的是[译] 深度学习系列1:设置 AWS & 图像识别, 原文地址:Deep Learning #1: Setting up AWS & Image Recognition 原文作者:Rutger Ruizendaal 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:TobiasLee 校对者:Tina92 sqrthree 这篇文章是深度学习系列的第一部分.你可以在这里查看第二部分,以及这里查看第三部分. 本周的任务:对猫和狗的图像进行分

使用腾讯云 GPU 学习深度学习系列之二:Tensorflow 简明原理【转】

转自:https://www.qcloud.com/community/article/598765?fromSource=gwzcw.117333.117333.117333 这是<使用腾讯云 GPU 学习深度学习>系列文章的第二篇,主要介绍了 Tensorflow 的原理,以及如何用最简单的Python代码进行功能实现.本系列文章主要介绍如何使用 腾讯云GPU服务器 进行深度学习运算,前面主要介绍原理部分,后期则以实践为主. 往期内容: 使用腾讯云 GPU 学习深度学习系列之一:传统机器学

一名工程师对于深度学习的理解-神经网络基础ANN

序 读书期间对于深度学习也有涉及,不过只是皮毛,在这个数据和算法的时代,也需要更加贴近算法.于是从一名工程师角度出发,希望通过几篇文章,将深度学习基础记录下来,同时也是对于自己学习的总结和积累.总体思路是ANN-CNN-DNN,中间想起来有什么忘记的,也会加番. 神经网络概述 这是一张典型的人工神经网络的图,图中的节点称为神经元,图共分为三层,第一层为输入层,第二层为隐藏层,第三层为输出层.输入层接受外部世界的输入,具像化为图像的像素值,实体的特征值等,输出层概率预测结果,具像化为该图像是人像,

CMU论文:一部深度学习发展史,看神经网络兴衰更替

以古为鉴,可知兴替.今天为大家带来一篇来自CMU的最新论文:On the Origin of Deep Learning,为读者回顾和解析深度学习的发展历史. 论文地址:https://128.84.21.199/abs/1702.07800 提要 本文回顾了深度学习模型的演化历史.作者从神经网络的滥觞--联想主义心理学出发,讲到引领了过去10年研究方向的深度学习模型,比如卷积神经网络.深度置信网络.递归神经网络,一直延伸至最近流行的一些模型,如变分自编码器.作为对这些模型回顾的补充,本文特别关

深度学习的难点:神经网络越深,优化问题越难

深度学习的核心问题就是一个非常难的优化问题.所以在神经网络引入后的几十年间,深度神经网络的优化问题的困难性是阻碍它们成为主流的一个重要因素.并导致了它们在20世纪90年代到21世纪初期间的衰落.不过现在已经基本解决了这个问题.在本篇博文中,我会探讨优化神经网络的"困难性",以及理论上是怎么解释这个问题的.简而言之:神经网络变得越深,优化问题就会变得越难. 最简单的神经网络是单节点感知器,其优化问题是凸问题.凸优化问题的好处是所有的局部最小值也是全局最小值.存在各种各样的优化算法来解决凸

深度学习必备手册(上)

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 请收下这份关于人工智能的根目录--博客整理系列(一) 关于数据科学的那些事--博客整理系列(二) 机器学习必备手册--博客整理系列(三) 扩展眼界的都在这--博客整理系列(四) 深度学习必备手册--博客整理系列(六) 深度学习的概念源于人工神经网络的研究,如果追溯深度学习的概念还是要回到2006年Hinton那篇论文,基于深信度网(DNB)提出非监督贪心逐层训练算法,未解决深层结构相关的优化难题出现的论文.