机器学习深度学习——从全连接层到卷积

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er
🌌上期文章:机器学习&&深度学习——非NVIDIA显卡怎么做深度学习(坑点排查)
📚订阅专栏:机器学习&&深度学习
希望文章对你们有所帮助

我们之前讨论的多层感知机十分适合处理表格数据,其中行对应样本,列对应特征。对于表格数据,我们寻找的模式可能涉及特征之间的交互,但是我们不能预先假设任何与特征交互相关的先验结构。

之前猫狗分类的例子中:假设我们有一个足够充分的照片数据集,数据集中是拥有标注的照片,每张照片具有百万级像素,这意味着网络的每次输入都有一百万个维度。如果我们将隐藏层的维度降低到1000,也会有109个参数,用多层感知机训练这玩意,这还不如直接记忆得了。
现如今的卷积神经网络可以帮助实现这个问题,是机器学习利用自然图像中一些已知结构的创造性方法。

从全连接层到卷积

  • 不变性
  • 多层感知机的限制
    • 平移不变性
    • 局部性
  • 卷积
  • 沃尔多在哪里
    • 通道

不变性

假设我们想从一张图片中找到某个物体,无论哪种方法找到这个物体,都应该和物体的位置无关。
我们可以从儿童游戏”沃尔多在哪里”得到灵感:尽管沃尔多的装扮很有特点,但是在混乱场景中找到他也不容易。然而沃尔多的样子并不取决于他潜藏的地方,因此我们可以使用一个“沃尔多检测器”扫描图像。该检测器将图像分割成多个区域,并为每个区域包含沃尔多的可能性打分,卷积神经网络就是将空间不变性的这一概念系统化。
总结一下两个原则:
1、平移不变性:不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应。
2、局部性:神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系。

多层感知机的限制

首先,多层感知机的输入是二维图像X,隐藏表示H(也就是第一层的输出)在数学上是一个矩阵,在代码中表示为二维张量。
使用X(i,h)和H(i,j)分别表示输入图像和隐藏表示中位置(i,j)的像素。为了使每个隐藏神经元都能接收到每个输入像素的信息,我们将参数从权重矩阵替换为四阶权重张量W。假设U包含偏置参数,我们可以将全连接层表示为:
[ H ] i , j = [ U ] i , j + ∑ k ∑ l [ W ] i , j , k , l [ X ] k , l = [ U ] i , j + ∑ a ∑ b [ W ] i , j , a , b [ X ] i + a , j + b [H]_{i,j}=[U]_{i,j}+\sum_k\sum_l[W]_{i,j,k,l}[X]_{k,l}\\ =[U]_{i,j}+\sum_a\sum_b[W]_{i,j,a,b}[X]_{i+a,j+b} [H]i,j=[U]i,j+kl[W]i,j,k,l[X]k,l=[U]i,j+ab[W]i,j,a,b[X]i+a,j+b
其中,从W到V是希望索引a和b通过在正偏移和负偏移之间移动覆盖了整个图像,只是形式上的转换。

平移不变性

检测对象在输入X中的平移,仅导致隐藏表示H中的平移。也就是说V和U实际上不依赖于(i,j)的值(这当然也是我们的目的),即:
[ V ] i , j , a , b = [ V ] a , b [V]_{i,j,a,b}=[V]_{a,b} [V]i,j,a,b=[V]a,b
因此我们可以简化H为:
[ H ] i , j = u + ∑ a ∑ b [ V ] a , b [ X ] i + a , j + b [H]_{i,j}=u+\sum_a\sum_b[V]_{a,b}[X]_{i+a,j+b} [H]i,j=u+ab[V]a,b[X]i+a,j+b
这就是卷积了,使用系数V(a,b)对位置(i,j)附近的像素(i+a,j+b)进行加权得到H(i,j)。注意:V(a,b)的系数比V(i,j,a,b)少很多,前者不再依赖于图像的位置了。

局部性

我们为了收集训练参数H(i,j)的相关信息,不应该偏离他很远。因此我们做个限制:令|a|>△和|b|>△的范围的V都置0,这样就可以把偏离它很远的地方都去掉了。所以我们可以把H重写为:
[ H ] i , j = u + ∑ a = − △ △ ∑ b = − △ △ [ V ] a , b [ X ] i + a , j + b [H]_{i,j}=u+\sum_{a=-△}^△\sum_{b=-△}^△[V]_{a,b}[X]_{i+a,j+b} [H]i,j=u+a=b=[V]a,b[X]i+a,j+b
上式就是一个卷积层,而卷积神经网络是包含卷积层的一类特殊神经网络,V被称为卷积核。

卷积

为啥上面操作被称为卷积,从数学中的卷积说起,两个函数f,g的卷积被定义为:
( f ∗ g ) ( x ) = ∫ f ( z ) g ( x − z ) d z (f*g)(x)=∫f(z)g(x-z)dz (fg)(x)=f(z)g(xz)dz
对于二维张量,则为:
( f ∗ g ) ( i , j ) = ∑ a ∑ b f ( a , b ) g ( i − a , j − b ) (f*g)(i,j)=\sum_a\sum_bf(a,b)g(i-a,j-b) (fg)(i,j)=abf(a,b)g(ia,jb)
和之前写的i+a、j+b其实一个意思的。

沃尔多在哪里

在这里插入图片描述
如图所示,卷积层根据滤波器V选取给定大小的窗口,并加权处理图片。

通道

这个方法有一个问题,我们忽略了一个图像一般包含三个通道(R、G、B)。实际上,图像不是二维的,而是一个由高度、宽度和颜色组成的三维张量,前两个轴与像素的空间位置有关,而第三个轴可以看作每个像素的多维表示。因此我们将X索引为X(i,j,k),由此卷积相应地调整为V(a,b,c)。
由于输入图像是三维的,我们的隐藏表示H也最好采用三维张量(对于每一个空间位置,我们想要采用一组而不是一个隐藏表示)。这样一组隐藏表示可以想象成一些互相堆叠的二维网格。我们可以把隐藏表示想象为一系列具有二维张量的通道。这些通道有时被称为特征映射(因为每个通道都向后续层提供一组空间化的学习特征)。
为支持输入X和隐藏表示H中的多个通道,我们可以在V中添加第四个坐标即V(a,b,c,d),则:
[ H ] i , j , d = ∑ a = − △ △ ∑ b = − △ △ ∑ c [ V ] a , b , c , d [ X ] i + a , j + b , c [H]_{i,j,d}=\sum_{a=-△}^△\sum{b=-△}^△\sum_c[V]_{a,b,c,d}[X]_{i+a,j+b,c} [H]i,j,d=a=b=c[V]a,b,c,d[X]i+a,j+b,c
其中H中的索引d表示输出通道,随后的输出将继续以三维张量H作为输入进入下一个卷积层。

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

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

相关文章

Python测试框架pytest:测试用例、查找子集、参数化、跳过

Pytest是一个基于python的测试框架,用于编写和执行测试代码。pytest主要用于API测试,可以编写代码来测试API、数据库、UI等。 pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个优点: 简单灵活,容易上手。…

react搭建在线编辑html的站点——引入grapes实现在线拖拉拽编辑html

文章目录 ⭐前言⭐搭建react ts项目⭐引入grapes 插件⭐结束 ⭐前言 大家好,我是yma16,本文分享关于react搭建在线编辑html的站点。 react 发展历史 React是由Facebook开发的一种JavaScript库,用于构建用户界面。React最初发布于2013年&…

没有配置redis但是报错连接redis失败

问题 没有配置redis但是报错连接redis失败 检查maven配置是否引入了redis依赖(可能是传递依赖,最好检查引进来的公共工程 解决办法 只需要在该工程application.yml文件中配置一下 redis就好,或者移除redis依赖 spring:redis:password: hos…

一文了解 Android Auto 车载开发~

作者:牛蛙点点申请出战 背景 我的的产品作为一个海外音乐播放器,在车载场景听歌是一个很普遍的需求。在用户反馈中,也有很多用户提到希望能在车上播放音乐。同时车载音乐也可以作为提升用户消费时长一个抓手。 出海产品,主要服务…

【Vue】Parsing error: No Babel config file detected for ... vue

报错 Parsing error: No Babel config file detected for E:\Study\Vue网站\实现防篡改的水印\demo02\src\App.vue. Either disable config file checking with requireConfigFile: false, or configure Babel so that it can find the config files.             …

玩机搞机---安卓新机型payload.bin刷写救砖 无需专用线刷包

目前的新机型官方卡刷包解包后都是payload.bin分区格式的卡刷固件。而有个别一些机型没有线刷包,当这些机型出现系统问题的时候有以下几种方法参考救砖。遇到类似故障的朋友可以借鉴参考下. 其中的不足和相关的资源可以参考这两个博文。任何教程的目的只是拓展你的…

反射调用private方法的坑

使用反射调用私有方法时,发现空指针异常,无法直接注入导致空指针异常 加入如下代码后,恢复正常 if (AopUtils.isCglibProxy(marketSmsTaskService)) {// 如果是cglib代理对象,则转为原始对象marketSmsTaskService (MarketSmsTas…

SpringBoot3基础用法

技术和工具「!喜新厌旧」 一、背景 最近在一个轻量级的服务中,尝试了最新的技术和工具选型; 即SpringBoot3,JDK17,IDEA2023,Navicat16,虽然新的技术和工具都更加强大和高效,但是适应采坑的过程…

React安装ant design组件库,并使用

ant design是一个很棒的组件库,官方地址:快速上手 - Ant Design 但是如何在React里面用起来,好像并不是很顺畅,没有像Vue里面那么友好,因为我踩过这个坑,虽然安装很简单,但是想要出样式&#x…

地球人口承载力估计 解析和C++代码

Description 假设地球上的新生资源按恒定速度增长。照此测算,地球上现有资源加上新生资源可供x亿人生活a年,或供y亿人生活b年。 为了能够实现可持续发展,避免资源枯竭,地球最多能够养活多少亿人? Input 一行&#xf…

[数据分析与可视化] Python绘制数据地图4-MovingPandas入门指北

MovingPandas是一个基于Python和GeoPandas的开源地理时空数据处理库,用于处理移动物体的轨迹数据。它提供了一组强大的工具,可以轻松地加载、分析和可视化移动物体的轨迹。通过使用MovingPandas,用户可以轻松地处理和分析移动对象数据&#x…

C语言假期作业 DAY 15

一、选择题 1、有如下代码,则 *(p[0]1) 所代表的数组元素是( ) int a[3][2] {1, 2, 3, 4, 5, 6}, *p[3]; p[0] a[1]; A: a[0][1] B: a[1][0] C: a[1][1] D: a[1][2] 答案解析 正确答案: C p 是一个指针数组, p[0] a…

mysql 数据库引擎介绍

一、数据库引擎 数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求。 使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库。这包括创建用于存储…

MQTT协议详解「概念、特性、版本及作用」

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是ISO标准下基于发布/订阅方式的轻量级消息协议。MQTT通常使用TCP / IP(传输控制协议/Internet协议)作为其传输,但也可以使用其他双向传输。MQ…

elementUi el-radio神奇的:label与label不能设置默认值

问题:最近项目遇到一个奇葩的问题:红框中列表的单选按钮无法根据需求设置默认选中,但是同样是设置开启状态的单选框可以设置默认状态 原因:开始同样是和开启/关闭状态一样也把红框中列表的默认值设置为数字模式,但是由…

《golang设计模式》第一部分·创建型模式-04-工厂方法模式(Factory Method)

文章目录 1 概述2.1 角色2.2 类图 2 代码示例2. 1 设计2.2 代码2.3 类图 3. 简单工厂3.1 角色3.2 类图3.3 代码示例3.3.1 设计3.3.2 代码3.3.3 类图 1 概述 工厂方法类定义产品对象创建接口,但由子类实现具体产品对象的创建。 2.1 角色 Product(抽象产…

IDEA强大的VisualGC插件

前言 开发阶段实时监测,自己的JVM信息,实时可视化 Hotspot JVM 垃圾回收监控工具, 支持查看本地和远程JVM进程, 支持G1 and ZGC算法。 插件安装 在线安装 IntelliJ IDEA 可通过在线安装的方式,安装插件 JDK VisualGC,安装步骤: …

SpringBoot运行流程源码分析------阶段二(run方法核心流程)

run方法核心流程 在分析和学习整个run方法之前,我们可以通过以下流程图来看下SpringApplication调用的run方法处理的核心操作包含哪些。 从上面的流程图中可以看出,SpringApplication在run方法中重点做了以下几步操作 获取监听器和参数配置打印banner…

【C语言学习——————预处理3000字讲解】

欢迎阅读新一期的c语言学习模块————预处理 ✒️个人主页:-_Joker_- 🏷️专栏:C语言 📜代码仓库:c_code 🌹🌹欢迎大佬们的阅读和三连关注,顺着评论回访🌹&#x1f339…

防火墙第二次作业

一、什么是防火墙? 百度给出个一个定义:防火墙技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。 通俗的来讲&#…
最新文章