Vision Transformer(二):位置嵌入向量

news/2024/7/19 9:22:48 标签: transformer, 深度学习, 人工智能

1. 什么是位置嵌入向量

位置嵌入向量是Transformer兴起时就引入的一个概念。早期在处理文本信息时,词语之间是相关联的,只有具有一定位置关系的词语组合才能够表达一些正确的意思。

2. 在Transformer中是如何实现的?

在Transformer的训练过程中,我们将图片划分为一个patch序列作为输入。在开始阶段,Position Embedding作为一个可训练参数与patch embedding进行求和引入到网络中(实际上Transformer已经不能再称为网络)。

3. 什么是位置嵌入

Transformer 模型中的位置嵌入(position embedding)是一种机制,用来给模型提供关于序列中各个元素位置的信息。在原始的 Transformer 模型中,这是必要的,因为模型的主要构建块(如自注意力层)本身并不具备处理序列中元素位置关系的能力。

位置嵌入通常是以向量形式实现的,这些向量有与序列中的每个元素(例如,单词或者图像的patches)相同的维度。模型在处理输入之前,会将这些位置向量加到对应元素的嵌入(embedding)上。这样做的目的是让模型不仅能够学习输入元素的特征,还能学习元素在序列中的相对或绝对位置。

4. 举例

在很多网络资源中,已经就“为什么position embedding与sequences of image patches以求和的方式引入”做了很多详解。本处并不准备进行大量的公式推导,而是举一个简单的例子讲解“位置嵌入”的意义。

如图1所示,为一张训练图片,图像中是一辆车。假设我们在训练时,仅将该图像划分为三个patch进行输入,如图2所示。

在训练过程中,从简化的角度看,位置嵌入就是表征车头在车身左边,车尾在车身右侧,经过学习所得到的就是这种位置关系,具有这种位置关系的才会被检测为汽车。从另一方面,如图3和图4的位置关系,因为违反了这种位置关系,就不会被认作是一辆汽车。

当然,Transformer 通过位置嵌入学习的不仅仅是简单的“车头在车身前端,车尾在后端”的物理布局。它更倾向于学习如何在视觉上将各个图像块整合成一个有意义的整体(在这个例子中是一辆车)。这包括理解各个图像块之间的相对位置和视觉特征,以及如何将这些块组合起来构成一个连贯的对象。

图1 典型的训练数据(汽车)

图2 正确的位置关系(汽车)

图3 不正确的位置关系(非汽车)

图4 不正确的位置关系(非汽车类)


http://www.niftyadmin.cn/n/5367024.html

相关文章

libgflags.a(gflags.cc.o): relocation R_AARCH64_ADR_PREL_PG_HI21

这个问题的解决废了好大功夫,最后google很多论坛才找到方法,特此记录,给大家节省时间 完整版本报错: /usr/bin/ld: /usr/local/lib/libgflags.a(gflags.cc.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol _ZN22gfla…

打包 iOS 的 IPA 文件

目录 摘要 引言 准备 选择证书类型 创建应用程序 设置应用程序标识和证书 配置构建设置 构建应用程序 导出IPA 签名和导出 代码案例演示 完成 总结 参考资料 摘要 本篇博客将为您介绍如何打包iOS的IPA文件。从APP提交、创建应用程序、设置应用程序标识和证书、配…

git 网络问题, git代理设置,git clone 速度限制, 以及 vmware环境网络问题

博客原文 文章目录 前言Git 代理问题分析:v-two-ray 演示:设置 git 代理取消 git 代理 前言 相信计算机专业的同学在学习 linux 时, 一定会被无法获取网络资源而困惑, 本文带你打通 git clone 的速度限制 Git 代理 问题分析: 本机已经打开代理但是 git clone 依然很慢git pus…

电力负荷预测 | 基于ARIMA的电力负荷预测(Python)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 电力负荷预测 | 基于ARIMA的电力负荷预测(Python) 源码设计 #------------

C#,河豚算法(Blowfish Algorithm)的加密、解密源代码

Bruce Schneier 1 河豚算法(Blowfish Algorithm) 河豚算法(Blowfish Algorithm)是1993年11月由Bruce Schneier设计的一个完全开源的算法。 Blowfish算法是一个分组长度为64位、密钥长度可变的对称分组密码算法。 Blowfish算法具…

DockerUI如何部署结合内网穿透实现公网环境管理本地docker容器

文章目录 前言1. 安装部署DockerUI2. 安装cpolar内网穿透3. 配置DockerUI公网访问地址4. 公网远程访问DockerUI5. 固定DockerUI公网地址 前言 DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基…

编程笔记 html5cssjs 081 JavaScript 异常处理语句

编程笔记 html5&css&js 081 JavaScript 异常处理语句 一、结构和语法:二、示例:总结 在JavaScript中,异常处理主要通过 try...catch...finally 语句实现。这个结构允许你捕获并处理程序运行时可能出现的错误(即异常&…

71.Spring和SpringMVC为什么需要父子容器?

71.Spring和SpringMVC为什么需要父子容器? 就功能性来说不用子父容器也可以完成(参考:SpringBoot就没用子父容器) 1、所以父子容器的主要作用应该是划分框架边界。有点单一职责的味道。service、dao层我们一般使用spring框架 来…