当前位置: 首页 > news >正文

Transformer+vit原理分析

目录

一、Transformer的核心思想

1. 自注意力机制(Self-Attention)

2. 多头注意力(Multi-Head Attention)

二、Transformer的架构

1. 整体结构

2. 编码器层(Encoder Layer)

3. 解码器层(Decoder Layer)

三、关键技术与细节

1. 位置编码(Positional Encoding)

2. 掩码机制(Masking)

3. 前馈神经网络(FFN)

四、训练与优化

1. 损失函数

2. 优化技巧

五、Transformer的应用与变体

1. 经典应用

2. 变体模型

六、Transformer的优势与局限

1. 优势

2. 局限

七、vision transformer

1.Vision Transformer的核心思想

2.ViT架构的关键组件

(1) 图像分块与嵌入(Patch Embedding)

(2) 位置编码(Positional Encoding)

(3) Transformer Encoder

(4) 分类头(Classification Head)

3. 数据处理与训练流程

4. MindSpore实现特点

5. ViT与传统CNN的对比

6.关键代码片段(简化版)


Transformer 模型是2017年由Google提出的一种革命性的深度学习架构(但不是一种AI框架,区别于Tensorflow,可以理解为一种算法),主要用于序列到序列(Seq2Seq)任务(如机器翻译、文本生成等)。它的核心创新在于完全摒弃了传统的循环神经网络(RNN)和卷积神经网络(CNN),转而依赖自注意力机制(Self-Attention)捕捉序列中元素之间的全局依赖关系。Transformer通过自注意力机制彻底改变了序列建模方式,成为现代NLP的基石。其设计启发了BERT、GPT等划时代模型,并扩展到了计算机视觉、语音处理等领域。

一、Transformer的核心思想

1. 自注意力机制(Self-Attention)
  • 目标:为序列中的每个位置(如单词)分配不同的权重,表示该位置对其他位置的依赖程度。
  • 输入:三个向量(Query, Key, Value),均来自同一输入序列的线性变换。
  • 计算步骤

1. 相似度计算:通过Query和Key的点积计算每对位置之间的相关性。

2. 缩放(Scaling):除以根号下维度(),防止点积值过大导致梯度消失。

3. Softmax归一化:得到权重矩阵(注意力分数)。

4. 加权求和:用权重矩阵对Value向量加权求和,得到最终输出。

公式

2. 多头注意力(Multi-Head Attention)
  • 动机:单次注意力可能只关注局部信息,多头机制允许模型同时关注不同子空间的信息。
  • 实现:将Q、K、V分别拆分到多个头(如8个头),每个头独立计算注意力,最后拼接结果并通过线性层融合。

二、Transformer的架构

1. 整体结构
  • 编码器(Encoder):由N个相同层堆叠而成(原论文N=6)。

解码器(Decoder):同样由N个层堆叠,每个层比编码器多一个交叉注意力(Cross-Attention)模块。

2. 编码器层(Encoder Layer)

每层包含两个子模块:

1. 多头自注意力(Multi-Head Self-Attention):处理输入序列的内部依赖。

2. 前馈神经网络(Feed-Forward Network, FFN):两层全连接层(中间用ReLU激活)。

残差连接(Residual Connection)层归一化(Layer Normalization)应用于每个子模块后。

3. 解码器层(Decoder Layer)

每层包含三个子模块:

1. 掩码多头自注意力(Masked Multi-Head Self-Attention):防止解码时看到未来信息。

2. 交叉注意力(Cross-Attention):将解码器的Query与编码器的Key、Value交互。

3. 前馈神经网络(FFN)

  • 同样使用残差连接和层归一化。

三、关键技术与细节

1. 位置编码(Positional Encoding)
  • 问题:Transformer没有RNN/CNN的顺序处理能力,需显式注入位置信息。
  • 方法:使用正弦和余弦函数生成位置编码,与输入向量相加。

2. 掩码机制(Masking)
  • 解码器自注意力掩码:掩盖未来位置,确保预测第t步时只能看到前t-1步的信息。
  • 填充掩码(Padding Mask):忽略无效的填充位置(如补齐序列的0)。

3. 前馈神经网络(FFN)
  • 结构:两层全连接,中间维度扩大(如输入维度512 → 中间2048 → 输出512)。

公式:

四、训练与优化

1. 损失函数
  • 交叉熵损失(Cross-Entropy Loss),用于分类任务(如预测下一个词)。

2. 优化技巧
  • 学习率预热(Learning Rate Warmup):逐步增加学习率,避免初始阶段不稳定。
  • 标签平滑(Label Smoothing):防止模型对标签过于自信,提升泛化能力。

五、Transformer的应用与变体

1. 经典应用
  • 机器翻译(原始论文任务)。
  • BERT:仅用编码器,通过掩码语言模型预训练。
  • GPT系列:仅用解码器,自回归生成文本。

2. 变体模型
  • Vision Transformer(ViT):将图像分块后输入Transformer。
  • Longformer:改进注意力机制,处理长序列。
  • T5:统一的文本到文本框架。

六、Transformer的优势与局限

1. 优势
  • 并行计算效率高(相比RNN)。
  • 长距离依赖捕捉能力强。
  • 灵活适应多种任务(如文本、图像、语音)。

2. 局限
  • 计算复杂度与序列长度平方成正比(O(n²))。
  • 对位置编码的依赖较强,可能影响泛化。

七、vision transformer

1.Vision Transformer的核心思想

ViT将图像处理任务转化为类似自然语言处理(NLP)的序列建模问题,通过Transformer Encoder结构替代传统的卷积神经网络(CNN)。核心思想如下:

  • 图像分块(Patch Embedding):将输入图像分割为固定大小的图像块(如16x16像素),每个块被展平为一个向量,作为Transformer的输入序列。
  • 位置编码(Positional Encoding):由于Transformer本身不具备空间位置感知能力,需为每个图像块添加位置编码,以保留图像的空间信息。
  • 类标记(Class Token):在输入序列前添加一个可学习的类标记(Class Token),用于最终分类任务。

2.ViT架构的关键组件

(1) 图像分块与嵌入(Patch Embedding)
  • 输入图像(如224x224)被划分为多个固定大小的块(如16x16),每个块展平为向量(如16x16x3=768维)。
  • 通过线性投影(`nn.Dense`)将每个块映射到嵌入空间,生成Patch Embeddings
  • 示例操作:
  # MindSpore中的分块与嵌入实现
  self.patch_embedding = nn.Conv2d(in_channels, embed_dim, kernel_size=patch_size, stride=patch_size, has_bias=True)

(2) 位置编码(Positional Encoding)
  • 为每个图像块添加位置编码,编码方式可以是可学习的参数(`nn.Embedding`)或预定义的固定编码。
  • 位置编码与Patch Embeddings相加,形成最终的输入序列。

(3) Transformer Encoder
  • 由多个Multi-Head Self-Attention层和Feed-Forward Network(FFN)堆叠而成。
  • Self-Attention:通过计算序列内各元素间的相关性,捕捉全局依赖关系。
  • Layer NormalizationLN -- 层标准化)残差连接:确保训练稳定性和梯度流动。
  • MindSpore中可以使用`nn.TransformerEncoderLayer`实现单层Transformer。

(4) 分类头(Classification Head)
  • 取类标记对应的输出向量,通过多层感知机(MLP)进行分类。
  self.classifier = nn.Dense(embed_dim, num_classes)

3. 数据处理与训练流程
  • 图像预处理:标准化(如ImageNet均值/方差)、调整大小、分块。
  • 数据增强:随机裁剪、翻转、颜色扰动等(使用MindSpore的`transforms`模块)。
  • 训练优化:使用交叉熵损失函数、AdamW优化器,支持分布式训练和混合精度加速。

4. MindSpore实现特点
  • 动态图模式(PyNative):灵活调试模型结构。
  • 混合精度训练:通过`model.train`的`amp_level`参数加速训练。
  • 分布式训练支持:结合`set_auto_parallel_context`实现多卡并行。

5. ViT与传统CNN的对比

6.关键代码片段(简化版)

VisionTransformer模块实现

import mindspore.nn as nnclass VisionTransformer(nn.Cell):def __init__(self, image_size=224, patch_size=16, num_classes=1000, embed_dim=768, depth=12):super().__init__()
        num_patches = (image_size // patch_size) ** 2
        self.patch_embedding = nn.Conv2d(3, embed_dim, kernel_size=patch_size, stride=patch_size, has_bias=True)
        self.cls_token = Parameter(initializer('normal', (1, 1, embed_dim)))
        self.pos_embed = Parameter(initializer('normal', (1, num_patches + 1, embed_dim)))
        self.transformer = nn.TransformerEncoder(depth, embed_dim, num_heads=12)
        self.classifier = nn.Dense(embed_dim, num_classes)def construct(self, x):
        x = self.patch_embedding(x)  # 分块嵌入
        x = x.flatten(2).transpose(0, 2, 1)
        cls_token = self.cls_token.tile((x.shape[0], 1, 1))
        x = ops.concat((cls_token, x), axis=1)  # 添加类标记
        x += self.pos_embed  # 位置编码
        x = self.transformer(x)  # Transformer编码
        x = x[:, 0]  # 提取类标记输出
        x = self.classifier(x)return x

参考文档Vision Transformer图像分类 — MindSpore master 文档

相关文章:

Transformer+vit原理分析

目录 一、Transformer的核心思想 1. 自注意力机制(Self-Attention) 2. 多头注意力(Multi-Head Attention) 二、Transformer的架构 1. 整体结构 2. 编码器层(Encoder Layer) 3. 解码器层(Decoder…...

「AI学习笔记」深度学习的起源与发展:从神经网络到大数据(二)

深度学习(DL)是现代人工智能(AI)的核心之一,但它并不是一夜之间出现的技术。从最初的理论提出到如今的广泛应用,深度学习经历了几乎一个世纪的不断探索与发展。今天,我们一起回顾深度学习的历史…...

【漫话机器学习系列】069.哈达马乘积(Hadamard Product)

哈达马乘积(Hadamard Product) 哈达马乘积(Hadamard Product)是两个矩阵之间的一种元素级操作,也称为逐元素乘积(Element-wise Product)。它以矩阵的对应元素相乘为规则,生成一个新…...

2025一区新风口:小波变换+KAN!速占!

今天给大家分享一个能让审稿人眼前一亮,好发一区的idea:小波变换KAN! 一方面:KAN刚中稿ICLR25,正是风口上,与小波变换的结合还处于起步阶段,正是红利期,创新空间广阔。 另一方面&a…...

相同的树及延伸题型(C语言详解版)

从LeetCode 100和101看二叉树的比较与对称性判断 今天要讲的是leetcode100.相同的树,并且本文章还会讲到延伸题型leetcode101.对称二叉树。本文章编写用的是C语言,大家主要是学习思路,学习过后可以自己点击链接测试,并且做一些对…...

【Redis】 String 类型的介绍和常用命令

1. 介绍 Redis 中的 key 都是字符串类型Redis 中存储字符串是完全按照二进制流的形式保存的,所以 Redis 是不处理字符集编码的问题,客户端传入的命令中使用的是什么编码就采用什么编码,使得 Redis 能够处理各种类型的数据,包括文…...

LLM - 大模型 ScallingLaws 的设计 100B 预训练方案(PLM) 教程(5)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/145356022 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Scaling Laws (缩放法则) 是大模型领域中,用于描述 模型性能(Loss) 与…...

Docker/K8S

文章目录 项目地址一、Docker1.1 创建一个Node服务image1.2 volume1.3 网络1.4 docker compose 二、K8S2.1 集群组成2.2 Pod1. 如何使用Pod(1) 运行一个pod(2) 运行多个pod 2.3 pod的生命周期2.4 pod中的容器1. 容器的生命周期2. 生命周期的回调3. 容器重启策略4. 自定义容器启…...

32、【OS】【Nuttx】OSTest分析(1):stdio测试(二)

背景 接上篇wiki 31、【OS】【Nuttx】OSTest分析(1):stdio测试(一) 继续stdio测试的分析,上篇讲到标准IO端口初始化,单从测试内容来说其实很简单,没啥可分析的,但这几篇…...

git push到远程仓库时无法推送大文件

一、错误 remote: Error: Deny by project hooks setting ‘default’: size of the file ‘scientific_calculator’, is 164 MiB, which has exceeded the limited size (100 MiB) in commit ‘4c91b7e3a04b8034892414d649860bf12416b614’. 二、原因 本地提交过大文件&am…...

Vue.js路由管理与自定义指令深度剖析

Vue.js 是一个强大的前端框架,提供了丰富的功能来帮助开发者构建复杂的单页应用(SPA)。本文将详细介绍 Vue.js 中的自定义指令和路由管理及导航守卫。通过这些功能,你可以更好地控制视图行为和应用导航,从而提升用户体验和开发效率。 1 自定义指令详解 1.1 什么是自定义…...

NVIDIA GPU介绍:概念、序列、核心、A100、H100

概述 入职一家大模型领域创业公司,恶补相关知识。 概念 一些概念: HPC:High Performance Computing,高性能计算SoC:System on Chip,单片系统FLOPS:Floating Point Operations Per Second&am…...

【PyTorch】6.张量运算函数:一键开启!PyTorch 张量函数的宝藏工厂

目录 1. 常见运算函数 个人主页:Icomi 专栏地址:PyTorch入门 在深度学习蓬勃发展的当下,PyTorch 是不可或缺的工具。它作为强大的深度学习框架,为构建和训练神经网络提供了高效且灵活的平台。神经网络作为人工智能的核心技术&…...

C语言练习(31)

有5个学生,每个学生有3门课程的成绩,从键盘输入以上数据(包括学号、姓名、3门课程成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud中。 设5名学生的学号、姓名和3门课程成绩如下&am…...

什么是长短期记忆网络?

一、概念 长短期记忆网络(Long Short-Term Memory, LSTM)是一种特殊的循环神经网络(RNN),旨在解决标准RNN在处理长序列时的梯度消失和梯度爆炸问题。LSTM通过引入三个门(输入门、遗忘门和输出门&#xff09…...

git中有关old mode 100644、new mode 10075的问题解决小结

在 Git 版本控制系统中,文件权限变更是一种常见情况。当你看到类似 old mode 100644 和 new mode 100755 的信息时,这通常表示文件的权限发生了变化。本文将详细解析这种情况,并提供解决方法和注意事项。 问题背景 在 Git 中,文…...

Jenkins上生成的allure report打不开怎么处理

目录 问题背景: 原因: 解决方案: Jenkins上修改配置 通过Groovy脚本在Script Console中设置和修改系统属性 步骤 验证是否清空成功 进一步的定制 也可以使用Nginx去解决 使用逆向代理服务器Nginx: 通过合理调整CSP配置&a…...

JSR303校验教学

1、什么是JSR303校验 JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。…...

使用DeepSeek技巧:提升内容创作效率与质量

一、引言 在当今快节奏的数字时代,内容创作的需求不断增加,无论是企业营销、个人博客还是学术研究,高效且高质量的内容生成变得至关重要。DeepSeek作为一款先进的人工智能写作助手,凭借其强大的语言生成能力,为创作者…...

【第六天】零基础入门刷题Python-算法篇-数据结构与算法的介绍-一种常见的贪心算法(持续更新)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Python数据结构与算法的详细介绍1.Python中的常用的贪心算法2.贪心算法3.详细的贪心代码1)一种常见的贪心算法 总结 前言 提示:这里…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

网络编程(UDP编程)

思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

JVM 内存结构 详解

内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: ​ 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

Spring Security 认证流程——补充

一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...

SpringAI实战:ChatModel智能对话全解

一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM&#xff0…...