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

news/2025/2/15 23:49:28/

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研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.ppmy.cn/news/1002144.html

相关文章

高性能远程通信框架grpc基本使用

文章目录 一、了解grpc二、关于protobuf三、试玩grpc3.1整个工程目录3.2 proto文件编写3.3 使用maven protobuf插件转换.proto文件3.4 Grpc服务端业务实现类3.5 pom参考3.6 grpc client调用 一、了解grpc 谷歌开源远程进程调用框架,支持多语言系统间通信&#xff0…

MongoDB文档-基础使用-在客户端(dos窗口)/可视化工具中使用MongoDB基础语句

阿丹: 本文章将描述以及研究mongodb在客户端的基础应用以及在spring-boot中整合使用mongodb来完成基本的数据增删改查。 先放官方的文章 MongoDB CRUD操作 - MongoDB-CN-Manual 本文章分为: 在客户端(dos窗口)/可视化工具中使用…

Docker Compose构建lnmp

目录 Compose的优点 编排和部署 Compose原理 Compose应用案例 安装docker-ce 阿里云镜像加速器 安装docker-compose docker-compose用法 Yaml简介 验证LNMP环境 Compose的优点 先来了解一下我们平时是怎么样使用docker的?把它进行拆分一下: 1…

ebpf开发问题汇总

不同Programs之间通信 用bpf_obj_get来获取MAP的描述符,然后用bpf_map_reuse_fd函数来在不同program之间复用 kernel 与 user space之间 需要pin the BPF MAP to the BPF Virtual File System (VFS),来持久化存储,否则如果map用不到会被destory 引用…

Django学习笔记-默认的用户认证系统(auth)

一、Django默认的用户认证系统 Django 自带一个用户验证系统。它负责处理用户账号、组、权限和基于cookie的用户会话。 Django 验证系统处理验证和授权。简单来说,验证检验用户是否是他们的用户,授权决定已验证用户能做什么。这里的术语验证用于指代这…

股票量价关系分析

量增价平 量增价平是指成交量增加,股价保持相对平稳的量价关系模型,量的增加可以是资金大量流入引起,也可以是资金大量流出引起,因此这种关系模型需要根据股价所处的位置来具体分析。1、股价处于低位 当股价处于低位,此…

ElementUI el-table 鼠标滚动失灵的问题及解决办法

Bug:ElementUI el-table 鼠标滚轮下滑动失灵的情况 我测出来的这个问题条件很苛刻,需要达到以下几个条件才会触发: 1.element plus(其他版本没试) 2.el-table-column组件有fixed属性时 3.template标签中有el-butto…

Redis的缓存穿透、缓存击穿和缓存雪崩

目录 一、解释说明 二、缓存穿透 1. 什么是缓存穿透? 2. 常见的两种解决方案 (1)缓存空对象 (2)布隆过滤 3. 编码解决商品查询的缓存穿透问题 三、缓存雪崩 1. 什么是缓存雪崩? 2. 缓存雪崩解决方…