动手学深度学习-卷积神经网络-1从全连接层到卷积

目录

不变性

 多层感知机的限制

平移不变性

局部性 

 卷积

“沃尔多在哪里”回顾 

通道

小结

 


我们之前讨论的多层感知机十分适合处理表格数据,其中行对应样本,列对应特征。 对于表格数据,我们寻找的模式可能涉及特征之间的交互,但是我们不能预先假设任何与特征交互相关的先验结构。 此时,多层感知机可能是最好的选择,然而对于高维感知数据,这种缺少结构的网络可能会变得不实用。

例如,在之前猫狗分类的例子中:假设我们有一个足够充分的照片数据集,数据集中是拥有标注的照片,每张照片具有百万级像素,这意味着网络的每次输入都有一百万个维度。 即使将隐藏层维度降低到1000,这个全连接层也将有106×103=109个参数。 想要训练这个模型将不可实现,因为需要有大量的GPU、分布式优化训练的经验和超乎常人的耐心。

有些读者可能会反对这个观点,认为要求百万像素的分辨率可能不是必要的。 然而,即使分辨率减小为十万像素,使用1000个隐藏单元的隐藏层也可能不足以学习到良好的图像特征,在真实的系统中我们仍然需要数十亿个参数。 此外,拟合如此多的参数还需要收集大量的数据。 然而,如今人类和机器都能很好地区分猫和狗:这是因为图像中本就拥有丰富的结构,而这些结构可以被人类和机器学习模型使用。 卷积神经网络(convolutional neural networks,CNN)是机器学习利用自然图像中一些已知结构的创造性方法。

不变性

想象一下,假设我们想从一张图片中找到某个物体。 合理的假设是:无论哪种方法找到这个物体,都应该和物体的位置无关。 理想情况下,我们的系统应该能够利用常识:猪通常不在天上飞,飞机通常不在水里游泳。 但是,如果一只猪出现在图片顶部,我们还是应该认出它。 我们可以从儿童游戏”沃尔多在哪里”下图中得到灵感: 在这个游戏中包含了许多充斥着活动的混乱场景,而沃尔多通常潜伏在一些不太可能的位置,读者的目标就是找出他。 尽管沃尔多的装扮很有特点,但是在眼花缭乱的场景中找到他也如大海捞针。 然而沃尔多的样子并不取决于他潜藏的地方,因此我们可以使用一个“沃尔多检测器”扫描图像。 该检测器将图像分割成多个区域,并为每个区域包含沃尔多的可能性打分。 卷积神经网络正是将空间不变性(spatial invariance)的这一概念系统化,从而基于这个模型使用较少的参数来学习有用的表示。

现在,我们将上述想法总结一下,从而帮助我们设计适合于计算机视觉的神经网络架构。

  1. 平移不变性(translation invariance):不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应,即为“平移不变性”。

  2. 局部性(locality):神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系,这就是“局部性”原则。最终,可以聚合这些局部特征,以在整个图像级别进行预测。

让我们看看这些原则是如何转化为数学表示的。

 多层感知机的限制

首先,多层感知机的输入是二维图像X,其隐藏表示H在数学上是一个矩阵,在代码中表示为二维张量。 其中X和H具有相同的形状。 为了方便理解,我们可以认为,无论是输入还是隐藏表示都拥有空间结构。

使用[X]i,j和[H]i,j分别表示输入图像和隐藏表示中位置(i,j)处的像素。 为了使每个隐藏神经元都能接收到每个输入像素的信息,我们将参数从权重矩阵(如同我们先前在多层感知机中所做的那样)替换为四阶权重张量W。假设U包含偏置参数,我们可以将全连接层形式化地表示为

其中,从W到V的转换只是形式上的转换,因为在这两个四阶张量的元素之间存在一一对应的关系。 我们只需重新索引下标(k,l),使k=i+a、l=j+b,由此可得[V]i,j,a,b=[W]i,j,i+a,j+b。 索引a和b通过在正偏移和负偏移之间移动覆盖了整个图像。 对于隐藏表示中任意给定位置(i,j)处的像素值[H]i,j,可以通过在x中以(i,j)为中心对像素进行加权求和得到,加权使用的权重为[V]i,j,a,b。

平移不变性

现在引用上述的第一个原则:平移不变性。 这意味着检测对象在输入X中的平移,应该仅导致隐藏表示H中的平移。也就是说,V和U实际上不依赖于(i,j)的值,即[V]i,j,a,b=[V]a,b。并且U是一个常数,比如u。因此,我们可以简化H定义为:

 

这就是卷积(convolution)。我们是在使用系数[V]a,b对位置(i,j)附近的像素(i+a,j+b)进行加权得到[H]i,j。 注意,[V]a,b的系数比[V]i,j,a,b少很多,因为前者不再依赖于图像中的位置。这就是显著的进步!

局部性 

现在引用上述的第二个原则:局部性。如上所述,为了收集用来训练参数[H]i,j的相关信息,我们不应偏离到距(i,j)很远的地方。这意味着在|a|>Δ或|b|>Δ的范围之外,我们可以设置[V]a,b=0。因此,我们可以将[H]i,j重写为

 简而言之, 上面的这个公式是一个卷积层(convolutional layer),而卷积神经网络是包含卷积层的一类特殊的神经网络。 在深度学习研究社区中,V被称为卷积核(convolution kernel)或者滤波器(filter),亦或简单地称之为该卷积层的权重,通常该权重是可学习的参数。 当图像处理的局部区域很小时,卷积神经网络与多层感知机的训练差异可能是巨大的:以前,多层感知机可能需要数十亿个参数来表示网络中的一层,而现在卷积神经网络通常只需要几百个参数,而且不需要改变输入或隐藏表示的维数。 参数大幅减少的代价是,我们的特征现在是平移不变的,并且当确定每个隐藏活性值时,每一层只包含局部的信息。 以上所有的权重学习都将依赖于归纳偏置。当这种偏置与现实相符时,我们就能得到样本有效的模型,并且这些模型能很好地泛化到未知数据中。 但如果这偏置与现实不符时,比如当图像不满足平移不变时,我们的模型可能难以拟合我们的训练数据。

 卷积

在进一步讨论之前,我们先简要回顾一下为什么上面的操作被称为卷积。在数学中,两个函数(比如f,g:Rd→R)之间的“卷积”被定义为 

 

也就是说,卷积是当把一个函数“翻转”并移位x时,测量f和g之间的重叠。 当为离散对象时,积分就变成求和。例如,对于由索引为Z的、平方可和的、无限维向量集合中抽取的向量,我们得到以下定义:

 

 对于二维张量,则为f的索引(a,b)和g的索引(i−a,j−b)上的对应加和:

这看起来类似于 但有一个主要区别:这里不是使用(i+a,j+b),而是使用差值。然而,这种区别是表面的,因为我们总是可以匹配 其和之间的符号。我们在中的原始定义更正确地描述了互相关(cross-correlation),这个问题将在下一节中讨论。 

“沃尔多在哪里”回顾 

 回到上面的“沃尔多在哪里”游戏,让我们看看它到底是什么样子。卷积层根据滤波器V选取给定大小的窗口,并加权处理图片,如 下图中所示。我们的目标是学习一个模型,以便探测出在“沃尔多”最可能出现的地方。

通道

然而这种方法有一个问题:我们忽略了图像一般包含三个通道/三种原色(红色、绿色和蓝色)。 实际上,图像不是二维张量,而是一个由高度、宽度和颜色组成的三维张量,比如包含1024×1024×3个像素。 前两个轴与像素的空间位置有关,而第三个轴可以看作每个像素的多维表示。 因此,我们将X索引为[X]i,j,k。由此卷积相应地调整为[V]a,b,c,而不是[V]a,b。

此外,由于输入图像是三维的,我们的隐藏表示H也最好采用三维张量。 换句话说,对于每一个空间位置,我们想要采用一组而不是一个隐藏表示。这样一组隐藏表示可以想象成一些互相堆叠的二维网格。 因此,我们可以把隐藏表示想象为一系列具有二维张量的通道(channel)。 这些通道有时也被称为特征映射(feature maps),因为每个通道都向后续层提供一组空间化的学习特征。 直观上可以想象在靠近输入的底层,一些通道专门识别边缘,而一些通道专门识别纹理。

为了支持输入X和隐藏表示H中的多个通道,我们可以在V中添加第四个坐标,即[V]a,b,c,d。综上所述,

其中隐藏表示H中的索引d表示输出通道,而随后的输出将继续以三维张量H作为输入进入下一个卷积层。 所以,上面这个公式可以定义具有多个通道的卷积层,而其中V是该卷积层的权重。

然而,仍有许多问题亟待解决。 例如,图像中是否到处都有存在沃尔多的可能?如何有效地计算输出层?如何选择适当的激活函数?为了训练有效的网络,如何做出合理的网络设计选择?我们将在本章的其它部分讨论这些问题。

 

小结

  • 图像的平移不变性使我们以相同的方式处理局部图像,而不在乎它的位置。

  • 局部性意味着计算相应的隐藏表示只需一小部分局部图像像素。

  • 在图像处理中,卷积层通常比全连接层需要更少的参数,但依旧获得高效用的模型。

  • 卷积神经网络(CNN)是一类特殊的神经网络,它可以包含多个卷积层。

  • 多个输入和输出通道使模型在每个空间位置可以获取图像的多方面特征。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【HTML+CSS+JS+VUE】web前端教程-4-标签之段落、换行、水平线

标签之段落 段落是通过<p>标签定义的换行 如果您希望在不生产一个新段落的情况下进行换行&#xff08;新行&#xff09;&#xff0c;请使用<br><br />元素是一个空的HTML元素 <p>这个<br>段落<br>演示了分行的效果</p>水平线 <…

vulnhub靶场【DC系列】之7

前言 靶机&#xff1a;DC-7&#xff0c;IP地址为192.168.10.13 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.2 都采用VMWare&#xff0c;网卡为桥接模式 对于文章中涉及到的靶场以及工具&#xff0c;我放置在网盘中&#xff0c;链接&#xff1a;https://pan.quark…

腾讯云AI代码助手编程挑战赛-图片转换工具

作品简介&#xff1a; 解决了人们学习生活中的图片格式转换问题&#xff0c; 制作该脚本&#xff0c;省去了打开在线编辑器操作的时间&#xff0c; 免费为用户提供图片格式的转换的实用小工具 技术架构 python语言的tk库来完成的GUI页面设计&#xff0c; 引用PIL包转换图…

Linux 文件的特殊权限—ACL项目练习

本文为Ubuntu Linux操作系统- 第二十一期~~ 上期回顾: 【ACL权限控制详解】 更多Linux 相关内容请点击&#x1f449;【Linux专栏】~ 主页&#xff1a;【练小杰的CSDN】 文章目录 项目项目要求具体的设置命令如下问题2问题3第一步&#xff1a;设置默认ACL前&#xff0c;在projec…

系统日志优化---自定义springboot-starter日志组件供各个服务使用

在优化项目时发现各个微服务都有各自的接口调用日志逻辑&#xff0c;比如每个服务都定义一个aop类拦截&#xff0c;十分冗余&#xff0c;其实是可以做成starter被各个服务引用使用&#xff0c;前提要先了解一下springboot自动装配原理 创建springboot工程&#xff0c;如果是jdk…

Matlab贝叶斯估计MCMC分析药物对不同种群生物生理指标数据评估可视化

全文链接&#xff1a;https://tecdat.cn/?p38756 摘要&#xff1a;本文着重探讨了如何利用Matlab实现贝叶斯估计。阐述了具体的实现流程&#xff0c;涵盖数据加载、先验常数设定、马尔可夫链蒙特卡洛&#xff08;MCMC&#xff09;属性指定、模型构建、运行链条以及结果查看等环…

js:日期对象和dom节点

日期对象 事件对象在前端开发里经常用来表示日期&#xff1a; 可以获取当前系统的时间 实例化 使用new关键字来实例化一个对象&#xff1a; const date new Date()console.log(date); 获取当前时间 const date new Date(2008-8-8)console.log(date); 获取指定时间 写得…

Ⅱ.INTRODUCTION TO CUDA C (CUDA C 入门)

前言 上一节环境配置好了&#xff0c;我们开始吧&#xff01; 一、A First Program 1. Hello, World! 我们先写一个C语言的 Hello, World! 作为对比 int main(void){printf("Hello, World!\n");return 0; }大家应该知道这个代码运行在CPU上吧&#xff0c;我们CP…

rsync如何实时同步

一、准备rsyncd服务环境 backup服务器&#xff08;rsync服务端&#xff09; 1、恢复了快照&#xff0c;重新安装rsync服务端 2、快速的部署rsyncd服务端 #!/bin/bash yum install rsync -ycat > /etc/rsyncd.conf << EOF uid www gid www port 873 fake supe…

Python的Matplotlib库应用(超详细教程)

目录 一、环境搭建 1.1 配置matplotlib库 1.2 配置seaborn库 1.3 配置Skimage库 二、二维图像 2.1 曲线&#xff08;直线&#xff09;可视化 2.2 曲线&#xff08;虚线&#xff09;可视化 2.3 直方图 2.4 阶梯图 三、三维图像 3.1 3D曲面图 3.2 3D散点图 3.3 3D散…

vue之element-ui文件上传(二)

一、点击上传&#xff0c;使用默认的action上传&#xff0c;添加校验&#xff0c;上传成功后&#xff0c;去除校验&#xff1a; <el-form-item label"文件md5" prop"fileMd5"><el-uploadv-if"!form.fileMd5"v-model"form.fileMd5&…

java项目之旅游网站的设计与实现(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的旅游网站的设计与实现。 项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于SpringBoot的…

IOS开发如何从入门进阶到高级

针对iOS开发的学习&#xff0c;不同阶段应采取不同的学习方式&#xff0c;以实现高效提升.本文将iOS开发的学习分为入门、实战、进阶三个阶段&#xff0c;下面分别详细介绍. 一、学习社区 iOS开源中国社区 这个社区专注于iOS开发的开源项目分享与协作&#xff0c;汇集了大量开…

ubuntu编译ijkplayer,支持rmvb以及mkv

1. 准备环境 sudo apt-get update apt install gcc yasm cmake python p7zip-full vim pkg-config autoconf automake build-essential dos2unix mercurial cmake-curse-gui -y apt-get -y --force-yes install libass-dev libtheora-dev libtool libva-dev libvdpau-dev libv…

Ardupilot开源无人机之Geek SDK进展2024

Ardupilot开源无人机之Geek SDK进展202501 1. 源由2. 状态3. TODO3.1 跟踪目标框3.2 onnxruntime版本3.3 CUDA 11.8版本3.4 pytorch v2.5.1版本3.5 Inference性能3.6 特定目标集Training 4. 参考资料 1. 源由 前期搭建《Ardupilot开源无人机之Geek SDK》&#xff0c;主要目的是…

《Spring Framework实战》3:概览

欢迎观看《Spring Framework实战》视频教程 Spring Framework 为基于现代 Java 的企业应用程序提供了全面的编程和配置模型 - 在任何类型的部署平台上。 Spring 的一个关键要素是应用程序级别的基础设施支持&#xff1a;Spring 专注于企业应用程序的 “管道”&#xff0c;以便…

Linux初识——基本指令

我们在linux下输入各种指令&#xff0c;其实就相当于在windows中的相关操作&#xff0c;比如双击&#xff0c;新建文件夹等。 以下是相关基本指令基本用法 一.ls&#xff08;显示当前目录下的所有文件和目录&#xff09; 那如何显示当前目录&#xff08;我们所在的位置&…

小程序开发-页面事件之上拉触底实战案例

&#x1f3a5; 作者简介&#xff1a; CSDN\阿里云\腾讯云\华为云开发社区优质创作者&#xff0c;专注分享大数据、Python、数据库、人工智能等领域的优质内容 &#x1f338;个人主页&#xff1a; 长风清留杨的博客 &#x1f343;形式准则&#xff1a; 无论成就大小&#xff0c;…

医疗可视化大屏 UI 设计新风向

智能化交互 借助人工智能与机器学习技术&#xff0c;实现更智能的交互功能。如通过语音指令或手势控制来操作大屏&#xff0c;医护人员无需手动输入&#xff0c;可更便捷地获取和处理信息。同时&#xff0c;系统能根据用户的操作习惯和数据分析&#xff0c;自动推荐相关的医疗…

IT面试求职系列主题-Jenkins

想成功求职&#xff0c;必要的IT技能一样不能少&#xff0c;先说说Jenkins的必会知识吧。 1) 什么是Jenkins Jenkins 是一个用 Java 编写的开源持续集成工具。它跟踪版本控制系统&#xff0c;并在发生更改时启动和监视构建系统。 2&#xff09;Maven、Ant和Jenkins有什么区别…