百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 博客教程 > 正文

理解卷积神经网络?看这篇论文就够了

connygpt 2024-08-28 14:13 8 浏览

南洋理工大学的综述论文《Recent Advances in Convolutional Neural Networks》对卷积神经网络的各个组件以及进展情况进行总结和解读,其中涉及到 CNN 中各种重要层的数学原理以及各种激活函数和损失函数。机器之心技术分析师对该论文进行了解读。

论文地址:https://arxiv.org/abs/1512.07108

引言

近段时间来,深度 CNN 已经在多个深度学习应用领域取得了出色的表现,并且也有很好的泛化的能力。图像分类、目标检测、实例分割和场景理解等大量任务都使用 CNN 实现了当前最佳。这篇论文总结了从最初到现在的 CNN 发展情况,并给出了以下指示:

  • 解释卷积层的数学原理
  • 解释池化层的数学原理
  • 介绍某些常用的激活函数
  • 介绍某些常用的损失函数
  • 简要介绍基于 CNN 的应用

卷积层的数学原理

从数学上看,第 l 层的第 k 个特征图的位置 (i,j) 处的特征值可以写成 z_{i,j,k}^l,可这样计算:

其中 w_k^l 是第 l 层的权重,b_k^l 是第 l 层的偏置。x_{i,j}^l 是第 l 层的 (i,j) 位置的输入图块。一个特征图的权重是共享的。CNN 的最大优势之一就是这种权重共享机制,因为参数更少时,它能显著降低计算复杂度,同时还能让训练和优化更简单。

基于这类基本卷积层的一种最著名的应用是用于 USPS 数字和 MNIST 识别的 LeNet-5,如下图所示:

LeNet-5 由三类层构成,即卷积层、池化层和全连接层。卷积层的目标是学习更能代表输入的特征,池化层则是为了降低空间维度,全连接层则是用于类别预测。具体而言,卷积层由多个卷积核构成,这使其能够得到多个特征图,而且特征图的每个神经元都会连接到之前一层中的临近神经元区域,我们将这个区域称为之前一层中神经元的感受野(receptive field)。

如上图所示,首先通过求输入与一个学习后的卷积核的卷积,可以得到一个新的特征图,然后在卷积得到的结果上逐元素应用非线性激活。在当时,MNIST 或 USPS 数字的分类结果是很好的,即使现在也仍有很多研究者在使用它们来进行简单实验,以解释说明各种各样的算法。一般而言,任何类型的卷积网络都能在这些数据集上轻松实现 97%-98% 的准确度。

近段时间来,研究者还为卷积运算提出了一些新型的架构。其中最著名的一个是扩张卷积(dilated convolution)。扩张型 CNN 是 CNN 的一项近期进展,为卷积层引入了某些额外的超参数。通过在过滤器之间插入零,可以增大网络的感受野,使得网络能够覆盖更多相关信息。从数学上看,使用扩张方法的 1-D 扩张卷积可将信号 F 与大小为 r 的卷积核 k 进行卷积:(F_{*l} k)_t = sum_t (k_t * F_{t?l * t}),其中 *l 表示 l-扩张卷积。通过这种方式,该公式可以直接扩展成 2-D 扩张卷积。

上图展示了三个扩张卷积层,其中扩张因子 l 随每层而指数增大。中间特征图 F2 是由底部特征图 F1 通过应用 1-扩张卷积而得到的,其中 F2 中的每个元素都有一个大小为 3×3 的感受野。F3 是由 F2 通过应用 2-扩张卷积而得到的。特征图 F4 是由 F3 通过应用 4-扩张卷积而得到的。见红色轮廓。

池化层的数学原理

池化层是 CNN 中一个很重要的模块,这类层最重要的目标是降低特征图的大小,具体方式是通过使用某个函数来融合子区域,比如取平均或最大/最小值。池化的工作方式是在输入上滑动一个窗口并将该窗口中的内容送入池化函数。池化的工作方式非常类似于离散卷积,只是用某个其它函数替代了卷积核的线性组合。

描述沿某个方向 j 的池化层的性质的数学公式:

  • i_j:沿方向 j 的输入大小
  • k_j:沿方向 j 的池化窗口大小
  • s_j:沿方向 j 的步幅

所得到的沿方向 j 的输出大小 o_j 可以这样计算:o_j = (i_j - k_j) / s_j + 1,注意池化层通常不会使用零填充。

最大池化和平均池化可以归纳为 Lp 池化,可描述为:

其中 y_{i,j,k} 是池化算子在第 k 个特征图的位置 (i,j) 处的输出,a_{m,n,k} 是第 k 个特征图中的池化区域 R_{ij} 中位置 (m,n) 处的特征值。特别要指出,当 p=1 时,Lp 对应于平均池化,当 p 趋近无穷是,Lp 会变成最大池化。

池化还有一些其它选择,比如混合池化,其公式可写成:

这可被视为最大池化和平均池化的混合版本,其中 λ 是一个 0 到 1 之间的随机值,表明了使用平均池化和最大池化的位置。在实践中,这有望降低过拟合问题,且表现也会比单纯的最大池化或平均池化好一点。

某些常用的激活函数

ReLU

上图是 ReLU 函数。ReLU 激活函数定义如下:

其中 z_{i,j,k} 是第 k 通道中位置 (i,j) 处的激活函数的输入。ReLU 是一个逐元素的函数,会保留正的部分,并将负的部分变成零。相比于 sigmoid 或 tanh,ReLU 中的 max(.) 运算能使其速度更快。ReLU 的缺点是其在 0 处的不连续性,这可能会导致在反向传播中出现梯度消失问题。

Leaky ReLU

为了避免梯度消失问题,研究者提出了一种很重要的 ReLU 变体函数:Leaky ReLU。其数学形式为:

其中 λ 的取值范围是 (0,1)。Leaky ReLU 并不强制负的部分为零,相反它允许有一个较小的非零梯度。

PArametric ReLU

上图是 PReLU 的图示。PReLU 和 Leaky ReLU 的不同之处是参数 λ。首先来看 PReLU 的公式:

其中 λ_k 是第 k 个通道所学习到的参数。这些 λ 不是预定义的,而是通过数据学习到的,而且可学习的参数 λ_k 的数量正是网络中通道的数量。因为用于训练的额外参数很少,所以无需担心过拟合问题。它可以在反向传播过程中与其它参数一起同时优化。另外也还有很多其它有用的非线性激活函数,比如 ELU、Maxout 等。

某些常用的损失函数

hinge 损失

hinge 损失通常用于训练 SVM 及其变体。用于多类 SVM 的 hinge 损失定义如下:

其中 w 是可训练的权重;δ(y(i), j) 是指示函数,如果 y(i) = j,则其输出为 1,否则输出为 0。N 是样本数量,K 是类别数量。如果 p=1,则称为 L1-hinge 损失;如果 p=2,则称为 L2-hinge 损失。

softmax 损失

softmax 损失可以说是分类目标方面最流行的损失,其中 N 是图像数量,K 是类别数量,p_j 是第 j 类的概率,y 是基本真值。1{.} 是一个指示函数,如果 y_i == j,则输出 1,否则输出 0。

softmax 损失是一种泛化的 logistic 损失,能将预测结果转换成范围 (0,1) 之间的非负值并给出在各类别上的概率分布。

对比损失

对比损失常被用于训练用于图像检索或人脸验证的孪生网络。其基本思想是增大不相似配对之间的距离,减小相似配对之间的距离。数学公式可写成:

如果 y=1,则第二项为 0,总损失就来自第一项,这就意味着目标就成了降低相似配对之间的距离。如果 y=0,则第一项为 0,总损失就来自第二项,这就意味着目标就成了增大不相似配对之间的距离。注意,如果不相似配对之间的距离小于余量,则总损失会增大。

三重损失

三重损失是对对比损失的一种聪明的改进。假设我们有三张图像,这个三元组单元 (x_a, x_p, x_n) 包含一个锚图像、正例和负例。

上述公式是三重损失,其中 N 是图像数量,d_{a,p} 是锚图像与其正例图像之间的距离,d_{a,n} 是锚图像与其负例图像之间的距离,m 是余量。其目标是增大 d_{a,n},使得 d_{a,p} 和 d_{a,n} 之差大于余量 m。三重损失的目标是最小化锚图像和正例之间的距离,以及最大化负例和锚图像之间的距离。

常用的损失函数有很多,比如 histogram 损失、lda 损失、KL-散度损失等。就不一一介绍了。

CNN 的应用

图像分类

2012 年,Krizhevsky et al. [1] 提出了 LeNet-5 的一个扩展版 AlexNet,在 ILSVRC 2012 取得了最佳表现。上图即为其架构。由于计算时间限制,他们使用了一种并行结构来进行训练。一个 GPU 运行图中顶部的层部分,另一个 GPU 运行上图底部的层。

目标检测

2014-2017 年,微软和 Facebook 的研究者开发了多种基于 CNN 的目标检测方法,包括但不限于 R-CNN、SPP-Net、fast RCNN、faster RCNN 和 Mask RCNN。上图是基本的 R-CNN [2]。在从原始图像中提取出区域提议之后,它们会被调整为固定尺寸并会被发送给一个预训练的 CNN。然后输出特征会得到优化,以便边界框回归和分类。

图像分割

图像分类可以粗略地分为两部分:形义分割和实例分割。其目标是预测单张图像中每个像素属于哪一类。CNN 可用于从像素层面或图块层面预测类别可能性。Long et al. [3] 为像素级分割提出了一种全卷积网络,如上图所示,该网络类似于一般的网络,只是最后一层不同,这一层被称为去卷积层。这一层的学习目标是上采样标签图的分辨率。其结果可以是一张输出图像,其中包含了密集的像素级预测。

基于 CNN 的方法可用于很多不同的领域,比如图像检索、人脸识别、文本分类、机器翻译、3D 重建、视觉问答或图像绘制等。这里不可能全面覆盖。

分析师简评

尽管 CNN 表现出色而且泛化能力优异,但仍还有些问题仍待进一步研究。CNN 的训练需要大规模数据集和大量计算能力,但人工收集数据的成本很高而且易出错。因此,研究者们也在探索能利用大量无标注数据的弱监督学习和无监督学习。与此同时,为了加速训练过程,也有必要开发高效且可扩展的并行训练算法。最后且最重要的是如何解释网络以及理解网络的内在部分,因为人们如果不知道 CNN 表现优异的原因,人们不会愿意坐在基于 CNN 的自动驾驶汽车中或接受基于 CNN 的医疗技术的治疗。

相关推荐

3分钟让你的项目支持AI问答模块,完全开源!

hello,大家好,我是徐小夕。之前和大家分享了很多可视化,零代码和前端工程化的最佳实践,今天继续分享一下最近开源的Next-Admin的最新更新。最近对这个项目做了一些优化,并集成了大家比较关注...

干货|程序员的副业挂,12个平台分享

1、D2adminD2Admin是一个完全开源免费的企业中后台产品前端集成方案,使用最新的前端技术栈,小于60kb的本地首屏js加载,已经做好大部分项目前期准备工作,并且带有大量示例代码,助...

Github标星超200K,这10个可视化面板你知道几个

在Github上有很多开源免费的后台控制面板可以选择,但是哪些才是最好、最受欢迎的可视化控制面板呢?今天就和大家推荐Github上10个好看又流行的可视化面板:1.AdminLTEAdminLTE是...

开箱即用的炫酷中后台前端开源框架第二篇

#头条创作挑战赛#1、SoybeanAdmin(1)介绍:SoybeanAdmin是一个基于Vue3、Vite3、TypeScript、NaiveUI、Pinia和UnoCSS的清新优...

搭建React+AntDeign的开发环境和框架

搭建React+AntDeign的开发环境和框架随着前端技术的不断发展,React和AntDesign已经成为越来越多Web应用程序的首选开发框架。React是一个用于构建用户界面的JavaScrip...

基于.NET 5实现的开源通用权限管理平台

??大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标!??今天小编推荐一款基于.NE...

StreamPark - 大数据流计算引擎

使用Docker完成StreamPark的部署??1.基于h2和docker-compose进行StreamPark部署wgethttps://raw.githubusercontent.com/a...

教你使用UmiJS框架开发React

1、什么是Umi.js?umi,中文可发音为乌米,是一个可插拔的企业级react应用框架。你可以将它简单地理解为一个专注性能的类next.js前端框架,并通过约定、自动生成和解析代码等方式来辅助...

简单在线流程图工具在用例设计中的运用

敏捷模式下,测试团队的用例逐渐简化以适应快速的发版节奏,大家很早就开始运用思维导图工具比如xmind来编写测试方法、测试点。如今不少已经不少利用开源的思维导图组件(如百度脑图...)来构建测试测试...

【开源分享】神奇的大数据实时平台框架,让Flink&Spark开发更简单

这是一个神奇的框架,让Flink|Spark开发更简单,一站式大数据实时平台!他就是StreamX!什么是StreamX大数据技术如今发展的如火如荼,已经呈现百花齐放欣欣向荣的景象,实时处理流域...

聊聊规则引擎的调研及实现全过程

摘要本期主要以规则引擎业务实现为例,陈述在陌生业务前如何进行业务深入、调研、技术选型、设计及实现全过程分析,如果你对规则引擎不感冒、也可以从中了解一些抽象实现过程。诉求从硬件采集到的数据提供的形式多种...

【开源推荐】Diboot 2.0.5 发布,自动化开发助理

一、前言Diboot2.0.5版本已于近日发布,在此次发布中,我们新增了file-starter组件,完善了iam-starter组件,对core核心进行了相关优化,让devtools也支持对IAM...

微软推出Copilot Actions,使用人工智能自动执行重复性任务

IT之家11月19日消息,微软在今天举办的Ignite大会上宣布了一系列新功能,旨在进一步提升Microsoft365Copilot的智能化水平。其中最引人注目的是Copilot...

Electron 使用Selenium和WebDriver

本节我们来学习如何在Electron下使用Selenium和WebDriver。SeleniumSelenium是ThoughtWorks提供的一个强大的基于浏览器的开源自动化测试工具...

Quick 'n Easy Web Builder 11.1.0设计和构建功能齐全的网页的工具

一个实用而有效的应用程序,能够让您轻松构建、创建和设计个人的HTML网站。Quick'nEasyWebBuilder是一款全面且轻巧的软件,为用户提供了一种简单的方式来创建、编辑...