卷积神经网络 - 动机(Motivation)篇

news2024/11/23 2:42:14

序言

在深度学习的浩瀚星空中,卷积神经网络( Convolutional Neural Networks, CNNs \text{Convolutional Neural Networks, CNNs} Convolutional Neural Networks, CNNs)无疑是最为璀璨的一颗星,其诞生与崛起深刻改变了图像识别、视频处理乃至自然语言处理等多个领域的面貌。 CNN \text{CNN} CNN的动机源于对生物视觉系统的深刻洞察与计算机视觉任务的迫切需求。自然界中,生物视觉系统通过层次化的信息处理方式,从简单的边缘检测到复杂的物体识别,展现出惊人的效率与准确性。受此启发,研究者们设计出了卷积神经网络,旨在模拟这一过程,以自动学习并提取图像中的层级特征,从而实现高效的图像识别与理解。

动机

  • 卷积运算通过三个重要的思想来帮助改进机器学习系统:稀疏交互 ( sparse interactions \text{sparse interactions} sparse interactions)、参数共享 ( parameter sharing \text{parameter sharing} parameter sharing)、等变表示 ( equivariant representations \text{equivariant representations} equivariant representations)。

  • 另外,卷积提供了一种处理大小可变的输入的方法。我们下面依次介绍这些思想。

  • 传统的神经网络使用矩阵乘法来建立输入与输出的连接关系。其中,参数矩阵的每一个独立的参数都描述了每一个输入单元与每一个输出单元间的交互。这意味着每一个输出单元与每一个输入单元都产生交互。

  • 然而,卷积神经网络具有稀疏交互 ( sparse interactions \text{sparse interactions} sparse interactions)(也叫做稀疏连接 ( sparse connectivity \text{sparse connectivity} sparse connectivity) 或者稀疏权重 ( sparse weights \text{sparse weights} sparse weights))的特征。这通过使得核的规模远小于输入的规模来实现。

  • 举个例子,当进行图像处理时,输入的图像可能包含百万个像素点,但是我们可以通过只占用几十到上百个像素点的核来探测一些小的有意义的特征,例如图像的边缘。这意味着我们需要存储的参数更少,不仅减少了模型的存储需求,而且提高了它的统计效率。这也意味着为了得到输出我们只需要更少的计算量。这些效率上的提高往往是很显著的。如果有 m m m个输入和 n n n个输出,那么矩阵乘法需要 m × n m × n m×n个参数并且相应算法的时间复杂度为 O ( m × n ) \Omicron(m\times n) O(m×n)对于每一个例子)。如果我们限制每一个输出拥有的连接数为 k k k,那么稀疏的连接方法只需要 k × n k × n k×n个参数以及 O ( k × n ) \Omicron(k\times n) O(k×n)的运行时间。在很多应用方面,只需保持 k k k的数量级远小于 m m m,就能在机器学习的任务中取得好的表现。

  • 稀疏连接的图形化解释如图例1和图例2所示。

  • 在深度卷积网络中,处在深层的单元可能不直接地与绝大部分输入连接,如图例3所示。这允许网络可以通过只描述稀疏交互的基石来高效地描述多个变量的复杂交互。

  • 参数共享 ( parameter sharing \text{parameter sharing} parameter sharing) 是指在一个模型的多个函数中使用相同的参数。

    • 在传统的神经网络中,当计算一层的输出时,权值矩阵的每一个元素只使用一次,当它乘以输入的一个元素后就再也不会用到了。
    • 作为参数共享的同义词,我们可以说一个网络含有绑定的权值 ( tied weights \text{tied weights} tied weights),因为用于一个输入的权值也会被绑定在其他的权值上。
    • 在卷积神经网络中,核的每一个元素都作用在输入的每一位置上(除了一些可能的边界像素,取决于对于边界的决策设计)。
    • 卷积运算中的参数共享保证了我们只需要学习一个参数集合,而不是对于每一位置都需要学习一个单独的参数集合。这虽然没有改变前向传播的时间(仍然是 O ( k × n ) \Omicron(k\times n) O(k×n)),但它显著地把模型的存储需求降低至 k k k个参数,并且 k k k通常是远小于 m m m的数量级。因为 m m m n n n通常规模很接近, k k k在实际中相对于 m × n m × n m×n是很小的。
    • 因此,卷积在存储需求和统计效率方面极大地优于稠密矩阵的乘法运算。图例4演示了参数共享是如何实现的。
  • 作为前两条原则的一个实际例子,图例5说明了稀疏连接和参数共享是如何显著地提高用于图像边缘检测的线性函数的效率的。

  • 对于卷积,参数共享的特殊形式使得神经网络层具有对平移等变 ( equivariance \text{equivariance} equivariance) 的性质。

    • 如果一个函数满足输入改变,输出也以同样的方式改变这一性质,我们就说它是等变 ( equivariant \text{equivariant} equivariant) 的。
    • 特别地,如果函数 f ( x ) f(x) f(x) g ( x ) g(x) g(x)满足 f ( g ( x ) ) = g ( f ( x ) ) f(g(x)) = g(f(x)) f(g(x))=g(f(x)),我们就说 f ( x ) f(x) f(x)对于变换 g g g具有等变性。
    • 对于卷积来说,如果令 g g g是输入的任意平移函数,那么卷积函数对于 g g g具有等变性。
    • 举个例子,令 I I I表示图像的明亮度函数(取值为整数), g g g表示图像函数的变换函数(把一个图像函数映射到另一个图像函数的函数)使得 I ′ = g ( I ) I′ = g(I) I=g(I),其中 I ′ ( x , y ) = I ( x − 1 , y ) I′(x,y) = I(x − 1,y) I(x,y)=I(x1,y)
    • 这个函数把 I I I中的每个像素向右移动一格。
    • 如果我们先对 I I I进行这种变换然后进行卷积操作所得到的结果,与先对 I I I进行卷积然后再对输出使用平移函数 g g g得到的结果是一样的 2 2 2
    • 当处理时间序列数据时,卷积产生一条用来表明输入中出现不同特征的某种时间轴。如果我们把输入中的一个事件向后延时,在输出中也会有完全相同的表示,只是时间延时了。
    • 图像与之类似,卷积产生了一个 2 2 2维映射来表明某种属性在输入的什么位置出现了。
    • 如果我们移动输入中的对象,它的表示也会在输出中移动同样的量。
    • 当处理多个输入位置时,一些作用在邻居像素的函数是很有用的。例如在处理图像时,在卷积神经网络的第一层进行图像的边缘检测是很有用的。
    • 相同的边缘或多或少地散落在图像的各处,所以应当对整个图像进行参数共享。但在某些情况下,我们并不希望对整幅图进行参数共享。
    • 例如当我们在处理人脸图像(图像已经被剪裁成人脸在中心)时,我们可能会希望在不同的部位探测出不同的特征(处理人脸上部的网络需要去搜寻眉毛,处理人脸下部的网络就需要去搜寻下巴了)。
  • 卷积对其他的一些变换并不是天然等变的,例如对于图像尺度或者角度的变换,需要其他的一些机制来处理这些变换。

  • 最后,一些不能被传统的由(固定大小的)矩阵乘法定义的神经网络处理的特殊数据,可能通过卷积神经网络来处理,我们将在篇章:卷积神经网络 - 数据类型中进行讨论。


  • 图例1:稀疏连接,对每幅图从下往上看。

    • 稀疏连接,对每幅图从下往上看
      在这里插入图片描述

    • 说明:

      • 稀疏连接,对每幅图从下往上看。我们强调了一个输入单元 x 3 x_3 x3以及在 s \boldsymbol{s} s中受该单元影响的输出单元。
      • (上图) 当 s \boldsymbol{s} s是由核宽度为 3 3 3的卷积产生时,只有三个输出受到 x \boldsymbol{x} x的影响。
      • (下图) 当 s \boldsymbol{s} s是由矩阵乘法产生时,连接不再是稀疏的,所以所有的输出都会受到 x 3 x_3 x3的影响。
  • 图例2:稀疏连接,对每幅图从上往下看。

    • 稀疏连接,对每幅图从上往下看
      在这里插入图片描述

    • 说明:

      • 对每幅图从上往下看。我们强调了一个输出单元 s 3 s_3 s3以及 x \boldsymbol{x} x中影响该单元的输入单元。这些单元被称为 s 3 s_3 s3的接受域。
      • (上图) 当 s \boldsymbol{s} s是由核宽度为 3 3 3的卷积产生时,只有三个输入影响 s 3 s_3 s3
      • (下图) 当 s \boldsymbol{s} s是由矩阵乘法产生时,连接不再是稀疏的,所以所有的输入都会影响 s 3 s_3 s3
  • 图例3:处于卷积网络更深的层中的单元,它们的接受域要比处在浅层的单元的接受域更大。

    • 处于卷积网络更深的层中的单元,它们的接受域要比处在浅层的单元的接受域更大
      在这里插入图片描述

    • 说明:

      • 如果网络还包含类似步幅卷积或者池化之类的结构特征,这种效应会加强。
      • 这意味着在卷积网络中即使是直接连接都是很稀疏的,处在更深的层中的单元可以间接地连接到全部或者大部分输入图像。
  • 图例4:参数共享。

    • 参数共享
      在这里插入图片描述

    • 说明:

      • 黑色箭头表示在两个不同的模型中使用了特殊参数的连接。
      • (上图) 黑色箭头表示在卷积模型中 3 3 3元素核的中间元素的使用。因为参数共享,这单个参数被用于所有的输入位置。
      • (下图) 这单个黑色箭头表示在全连接模型中权重矩阵的中间元素的使用。这个模型没有使用参数共享,所以参数只使用了一次。
  • 图例5:边缘检测的效率。

    • 边缘检测的效率
      在这里插入图片描述
    • 说明:
      • 右边的图像是通过获得原始图像中的每个像素并减去左边相邻像素的值而形成的。
      • 这给出了输入图像中所有垂直方向上的边缘的强度,这对目标检测是有用的操作。
      • 两个图像都是 280 280 280像素的高度。输入图像宽 320 320 320像素,而输出图像宽 319 319 319像素。这个变换可以通过包含两个元素的卷积核来描述,并且需要 319 × 280 × 3 = 267 , 960 319 × 280 × 3 = 267,960 319×280×3=267,960个浮点运算(每个输出像素需要两次乘法和一次加法)。
      • 为了用矩阵乘法描述相同的变换,需要 320 × 280 × 319 × 280 320 × 280 × 319 × 280 320×280×319×280个或者说超过 80 80 80亿个元素的矩阵,这使得卷积对于表示这种变换更有效 40 40 40亿倍。直接运行矩阵乘法的算法将执行超过 160 160 160亿个浮点运算,这使得卷积在计算上大约有 60 , 000 60,000 60,000倍的效率。
      • 当然,矩阵的大多数元素将为零。如果我们只存储矩阵的非零元,则矩阵乘法和卷积都需要相同数量的浮点运算来计算。矩阵仍然需要包含 2 × 319 × 280 = 178 , 640 2 × 319 × 280 = 178,640 2×319×280=178,640个元素。
      • 将小的局部区域上的相同线性变换应用到整个输入上,卷积是描述这种变换的极其有效的方法。照片来源: Paula Goodfellow \text{Paula Goodfellow} Paula Goodfellow

总结

卷积神经网络以其独特的卷积层、池化层等结构,巧妙地解决了传统图像处理中特征提取复杂、计算量大等问题。通过局部连接、权值共享和池化操作, CNN \text{CNN} CNN不仅减少了模型参数,提高了计算效率,还增强了模型的泛化能力,使得其在处理大规模图像数据时展现出卓越的性能。从手写数字识别到复杂场景下的物体检测与分割, CNN \text{CNN} CNN的应用不断拓宽,成为深度学习领域不可或缺的一部分。展望未来,随着算法的不断优化与硬件性能的提升,卷积神经网络有望在更多领域发挥更大的作用,推动人工智能技术的进一步发展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1970125.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

线程池的优势与应用

线程池的优势与应用 1、线程池的优势2、应用场景 💖The Begin💖点点关注,收藏不迷路💖 1、线程池的优势 资源复用:减少线程创建和销毁的开销,通过重用已存在的线程来提高效率。控制并发:有效管…

Solana公链

Solana 链的优势 Solana之所以能够实现高性能,主要是因为它采用了多种创新的技术和设计决策。下面是Solana能够达到高吞吐量、低延迟和低成本的一些关键因素: 1. 历史证明 (Proof of History, PoH): Solana引入了一种独特的共识机制&#…

【C++题解】1022. 百钱百鸡问题

欢迎关注本专栏《C从零基础到信奥赛入门级(CSP-J)》 问题:1022. 百钱百鸡问题 类型:嵌套穷举 题目描述: 用 100 元钱买 100 只鸡,公鸡,母鸡,小鸡都要有。 公鸡 5 元 1 只&#x…

【Kubernetes】kubeadmu快速部署k8s集群

目录 一.组件部署 二.环境初始化 三.所有节点部署docker,以及指定版本的kubeadm 四.所有节点安装kubeadm,kubelet和kubectl 五.高可用配置 六.部署K8S集群 1.master01 节点操作 2.master02、master03节点 3.master01 节点 4.master02、master…

酒店管理小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,酒店管理员管理,房间类型管理,房间信息管理,订单信息管理,系统管理 微信端账号功能包括:系统首页,房间信息…

29-《夹竹桃》

夹竹桃 夹竹桃(学名:Nerium indicum Mill.)夹竹桃族夹竹桃属常绿直立大灌木,高可达5米,枝条灰绿色,嫩枝条具棱,被微毛,老时毛脱落。叶3-4枚轮生,叶面深绿,叶背…

Python可视化开发全面教程

Python是一种功能强大且易于学习的编程语言,它还提供了丰富的可视化库,如Matplotlib、Seaborn、Plotly和Bokeh。这些库使得数据可视化变得简单而直观。在本教程中,我们将介绍如何使用Python进行数据可视化,从基础知识到高级技巧。…

AI Agents(智能代理)教程:如何创建信息检索聊天机器人

AI 代理教程:如何创建信息检索聊天机器人 介绍 在本教程中,我们将指导您使用 AI 代理创建用于信息检索的复杂聊天机器人的过程。探索如何利用 AI 的强大功能构建能够高效地从各种来源检索数据的聊天机器人。 设置环境 我们的计划是使用 AI 代理&…

智慧教室建设方案

智慧教室建设方案摘要: 智慧教室发展和现状 智慧教室是教育现代化的重要体现,它经历了传统教学、多媒体教学、信息化教学等阶段。智慧教室利用先进的技术和理念,实现了教学环境的升级,包括本地和网络中控、远程管理、常态录播监控…

[渗透测试学习] PermX-HackTheBox

文章目录 PermX-HackTheBox信息搜集漏洞利用权限提升参考文章PermX-HackTheBox 信息搜集 nmap扫描一下端口 nmap -sC -v 10.10.11.23扫描结果如下 PORT STATE SERVICE 22/tcp open ssh | ssh-hostkey: | 256 e2:5c:5d:8c:47:3e:d8:72:f7:b4:80:03:49:86:6d:ef (ECDSA…

【系统架构设计师】二十二、嵌入式系统架构设计理论与实践③

目录 一、鸿蒙操作系统架构案例分析 1.1 鸿蒙操作系统定义 1.2 鸿蒙的层次化分析 1.2.1 内核层 1.2.2 系统服务层 1.2.3 框架层 1.2.4 应用层 1.3 鸿蒙操作系统的架构分析 1.3.1 鸿蒙操作系统架构具有4个技术特性 1.3.2 分布式架构所带来的优势 1.3.3 HarmonyOS 架构…

康耐视VisionPro GigE相机设置两种方法详细步骤

VisionPro GigE 相机设置方法一 1:关闭防火墙 2:打开 GigE Vision Configuration Tool 2.1:设置网卡巨型帧或者叫大型数据包 2.2:设置网卡 IP、掩码 2.3:设置相机 IP、掩码 VisionPro GigE 相机设置方法二 1:关闭防火墙 2:设置网卡 IP 跟掩码

每日一题~EC168 A+B+C+D

A 题意: 字符串 每一个字符的花费是2,如果ai-1 ai ,那么ai 的花费是1. 现在可以插入一个字符,得到最大花费。输出插入字符之后的字符串。 分析:只需要在相同的连续字符中间插入一个不同的字符就可以了。如果没有连续的相同字符&am…

C++基础知识:构造函数的分类和调用,有参构造和无参构造,有参构造和无参构造,三种调用方式:括号法,显示法,隐式转换法,以及相关代码演示和注意事项

1.构造函数的分类及调用: 2.两种分类方式: 按参数分为: 有参构造和无参构造 按类型分为:有参构造和无参构造 3.三种调用方式: 括号法 显示法 隐式转换法 2.调用方法代码演示 1.括号法代码演示&#xff1a; #include<iostream>using namespace std;//1.构造函数的分类和…

tensorflow2(快速入门)

版本问题 导包 import tensorflow as tf 加载数据 加载并准备 MNIST 数据集。将样本数据从整数转换为浮点数&#xff1a; mnist tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) mnist.load_data() x_train, x_test x_train / 255.0, x_test / 255.0 搭…

【Cloud Native】数据库新纪元:驾驭关系型与NoSQL的力量

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《未来已来&#xff1a;云原生之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、云原生概述 2、数据库在云原生时代的重要性 二、云…

详细分析Flask中的蓝图Blueprint(附Demo)

目录 前言1. 基本知识2. Demo 前言 对于Java的基本知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD的功能整理&#xff08;持续更新&#xff09; 1. 基本知识 蓝图&#xff08;Bluepri…

yolo数据集从一种文件夹格式转话成另外一种

1、转化前yolo格式数据集路径结构 2、转化后yolo格式数据集路径结构 3、转化脚本&#xff08;可以直接复制使用&#xff09; import os import argparse import shutil def makdirs(opt,tests_flag):images_train os.path.join(opt.save_root_path, images/train)images_val …

编程入门:大学新生的指南与策略

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

SSH访问控制:精确管理你的服务器门户

“ 在数字世界中&#xff0c;服务器的安全性是任何网络管理员的首要任务。特别是对于远程登录协议如SSH&#xff0c;确保只有授权用户可以访问是至关重要的。 今天&#xff0c;记录两种有效的方法来控制用户对特定服务器的访问&#xff1a;通过sshd_config实现黑/白名单机制和利…