【大模型学习】Transformer(学习笔记)

news2024/12/24 2:54:04

Transformer介绍

在这里插入图片描述

word2vec

Word2Vec是一种用于将词语映射到连续向量空间的技术,它是由Google的Tomas Mikolov等人开发的。Word2Vec模型通过学习大量文本数据中的词语上下文信息,将每个词语表示为高维空间中的向量。在这个向量空间中,具有相似语境的词语通常被映射到彼此附近的位置,从而使得词语之间的语义关系得以保留。

Word2Vec有两种主要的模型结构:连续词袋模型(CBOW)和Skip-gram模型。CBOW模型试图根据上下文词语预测目标词语,而Skip-gram模型则相反,它试图根据目标词语预测上下文词语。这两种模型都使用了神经网络结构,通常是浅层的前馈神经网络。

通过Word2Vec技术,可以实现词语之间的语义相似度计算、词语之间的关系推断、词语的聚类和分类等任务,是自然语言处理领域中一个重要的基础工具。

RNN不足

在这里插入图片描述
串行,无法并行,不能加速
在这里插入图片描述

词向量的建模

Transformer是一种基于注意力机制的模型,最初用于机器翻译任务,但后来被证明在各种自然语言处理任务中都取得了巨大成功。在Transformer模型中,词向量的建模是通过自注意力机制(Self-Attention Mechanism)来实现的。

在Transformer中,输入的词语首先被转换成词向量(Word Embeddings),然后这些词向量被传递到多个Transformer层中进行处理。在每个Transformer层中,自注意力机制被用来捕捉输入序列中词语之间的关系。通过自注意力机制,模型可以计算每个词语在上下文中的重要性,并将这些重要性作为权重,对每个词语的表示进行加权求和,从而得到更丰富的上下文表示。

在自注意力机制中,每个词语的表示都会考虑到整个输入序列中的所有词语,这使得模型能够在不同位置之间进行信息交互,从而更好地捕捉上下文信息。通过多个Transformer层的堆叠,模型可以逐层地提炼和组织输入序列中的信息,最终得到更具有丰富语义信息的词向量表示。

总的来说,Transformer通过自注意力机制实现了对输入序列中词语的建模,使得模型能够更好地理解和处理自然语言文本。

Transformer网络架构

在这里插入图片描述
基本组件:seq2seq网络
核心架构是中间的网络设计

输入如何编码?

输出结果是什么?

self-attention

自注意力机制进行并行计算,输入和输入都相同。

计算方法

attention是什么?
让计算机关注到有价值的信息。
在这里插入图片描述
self-attention是什么?
关注到与自身相关的信息,融入上下文语境。
在这里插入图片描述
本质就是提取特征。(获取权重值)
在这里插入图片描述
用内积计算两个向量的关系。内积的结果为相关度分数。内积越大,相关度越高。
在这里插入图片描述
softmax用于归一化求概率。

multi-headed

多头,提取多个特征。
通过不同的head得到多个特征表达。
将所有特征拼接在一起。
通过一层全连接来降维。
在这里插入图片描述

位置信息表达

position encoding
加入位置编码

以下结果针对分类任务,其他任务需要而外考虑。
在这里插入图片描述

层归一化和残差连接

层归一化加速模型收敛,使得训练更稳定。
残差网络使得网络可以深层叠加。不同特征的融合(浅层特征和深层特征),防止模型退化。
在这里插入图片描述

mask机制

解决训练和测试的信息不对称。
在这里插入图片描述

softmax 和 linear

在这里插入图片描述

模型梳理

在这里插入图片描述

BERT

在这里插入图片描述

Transformer发家史

在这里插入图片描述

ViT(Vision Transformer)

在这里插入图片描述

对图像数据构建patch序列

图像有空间位置信息,需要添加位置信息。
patch + position embedding

CNN缺陷

为了获得更大的感受野(获取全局信息),需要堆叠很深的卷积核(不断的卷积+池化)。

Transformer

对于训练数据要求很高(数据量大)。
在这里插入图片描述

TNT

在这里插入图片描述

Swin Transformer

在这里插入图片描述

解决问题

在这里插入图片描述

Transformer Blocks

在这里插入图片描述

整体网络架构

在这里插入图片描述

窗口和滑动窗口

W-MSA(Window Multi-head Self Attention)
学习窗口内部的信息

SW-MSA(Shift Window Multi-head Self Attention)
学习窗口之间的信息

Patch Merging

下采样,类似但不同于池化。
把不同维度进行间隔采样后拼接在一起。

DETR

DETR(DEtection TRansformer)是一种基于Transformer架构的目标检测模型,它将目标检测任务转换为一个端到端的Transformer网络。这种方法消除了传统目标检测模型中需要使用特定的子网络(如R-CNN系列中的区域建议网络)的需求,取得了很好的性能。

以往的目标检测算法

Faster R-CNN

Faster R-CNN是一种流行的目标检测算法,它基于区域建议网络(RPN)生成区域建议,并对这些建议中的对象进行分类。它以在图像中检测对象的准确性和效率而闻名。
"proposal"的中文意思是“建议”或者“提议”,在Faster R-CNN中,指的是由Region Proposal Network (RPN) 生成的候选目标区域。

YOLO

YOLO(You Only Look Once)是一种流行的实时目标检测算法,它将目标检测任务视为一个回归问题,通过在单个神经网络中同时预测边界框和类别概率来实现目标检测。与传统的目标检测方法相比,YOLO具有更快的处理速度,因为它只需要在图像上运行一次网络,而不需要使用滑动窗口或区域提议。这使得它非常适合需要实时检测的应用场景,如视频分析和自动驾驶。
“Anchor”(锚点)在目标检测中通常指的是一种预定义的边界框形状和尺寸,在训练过程中用来作为参考,用于生成候选区域或者预测目标边界框的偏移量。在一些目标检测算法中,比如Faster R-CNN和YOLO,锚点被用来定义可能包含目标的区域。这些锚点可以根据数据集和目标的大小进行调整,以提高模型的准确性。

NMS

NMS是非极大值抑制(Non-Maximum Suppression)的缩写,它是一种常用的技术,在目标检测和边界框回归中用于过滤重叠的边界框。该技术通过保留具有最高置信度的边界框,并消除与其高度重叠的其他边界框来优化结果。这样可以确保在输出中每个检测到的目标只有一个边界框与之对应,从而提高检测结果的准确性和可靠性。

DETR基本思想

在这里插入图片描述

整体网络架构

在这里插入图片描述

object queries

decoder中的查询是平行的,同时进行。
在这里插入图片描述
初始化 object queries :0 + 位置编码

输出的匹配

在这里插入图片描述

匈牙利匹配

匈牙利匹配是一个图论中的算法,用于解决二部图的最大匹配问题。在二部图中,顶点集合可以分为两个互不相交的子集,使得图中的每条边的一个端点属于一个子集,另一个端点属于另一个子集。

匈牙利匹配算法旨在找到一个最大的匹配,即图中能够相互连接的边的最大数量。它采用了增广路径的方法,在图中不断寻找增广路径并将其添加到匹配中,直到无法找到增广路径为止。增广路径是一条交替包含未匹配顶点和已匹配顶点的路径,通过不断寻找增广路径,可以不断增加匹配的边数,直到找到最大匹配。

匈牙利匹配算法的时间复杂度为 O(V^3),其中 V 是图中的顶点数量。尽管时间复杂度相对较高,但匈牙利匹配算法在实际应用中被广泛使用,例如在任务分配、资源分配等领域。

参考链接

太…完整了!同济大佬唐宇迪博士终于把【Transformer】入门到精通全套课程分享出来了,最新前沿方向均有涉猎!-人工智能/深度学习

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】学习笔记——string_2

文章目录 六、string类2. 反向迭代器const迭代器 string类对象的容量操作(补)size() 3. string类的元素访问4. string类的修改 未完待续 结合文档食用~ 六、string类 2. 反向迭代器 一般来说,迭代器都是正向的遍历容器,虽然可以…

LuaJIT源码分析(三)字符串

LuaJIT源码分析(三)字符串 要表示一个字符串,核心就是需要知道字符串的长度,以及存放字符串具体数据的地址。lua的字符串是内化不可变的,也就是lua字符串变量存放的不是字符串的拷贝,而是字符串的引用。那么…

C语言⼆级指针如何操作字符串数组(指针数组)?

一、问题 对于字符串数组该如何操作(⽽且是使⽤指针数组存储)? 二、解答 使⽤指针的指针实现对字符串数组中字符串的输出。指向指针的指针即是指向指针数据的指针变量。这⾥创建⼀个指针数组 strings,它的每个数组元素相当于⼀个…

springcloud自定义全局异常

自行创建一个实体类 /*** 全局异常处理类**/ ControllerAdvice public class GlobalExceptionHandler {ExceptionHandler(Exception.class) ResponseBody public Result error(Exception e){e.printStackTrace(); return Result.fail();}/*** 自定义异常处理方法* param e * re…

神奇的Vue3 - 组件探索

神奇的Vue3 第一章 神奇的Vue3—基础篇 第二章 神奇的Vue3—Pinia 文章目录 神奇的Vue3了解组件一、注册组件1. 全局注册​2. 局部注册3. 组件命名 二、属性详解1. Props(1)基础使用方法(2)数据流向:单项绑定原则&…

深入图像分类:使用美国手语数据集训练定制化神经网络

引言 在前一篇博客中,我们探讨了如何使用MNIST数据集训练一个基础的神经网络来进行手写数字识别。在本文中,我们将更进一步,使用美国手语字母表(ASL)数据集来构建一个定制化的图像分类模型。通过这个过程,…

YOLOv9/YOLOv8算法改进【NO.128】 使用ICCV2023超轻量级且高效的动态上采样器( DySample)改进yolov8中的上采样

前 言 YOLO算法改进系列出到这,很多朋友问改进如何选择是最佳的,下面我就根据个人多年的写作发文章以及指导发文章的经验来看,按照优先顺序进行排序讲解YOLO算法改进方法的顺序选择。具体有需求的同学可以私信我沟通: 首推…

静态库、动态库回顾

回顾一下库相关的知识点&#xff0c;总结备忘一下。在某种情况下&#xff0c;你有了如下的代码&#xff0c;结构如下 //pra.h #include <stdio.h> void test_01(); //pra.c #include "pra.h" void test_01() {printf("xxxxxxx----->%s %s()\n",…

Docker 安装部署 postgres

Docker 安装部署 postgres 1、拉取 postgres 镜像文件 [rootiZbp19a67kznq0h0rgosuxZ ~]# docker pull postgres:latest latest: Pulling from library/postgres b0a0cf830b12: Pull complete dda3d8fbd5ed: Pull complete 283a477db7bb: Pull complete 91d2729fa4d5: Pul…

C#知识|汇总方法重载与静态方法应用技巧

哈喽&#xff0c;你好&#xff0c;我是雷工&#xff01; 今天学习C#方法重载与静态方法应用技巧的相关内容。 01 方法重载有什么好处&#xff1f; 1.1、可以有效的减少类的对外接口&#xff08;只显示一个方法比较简洁&#xff09;&#xff0c;从而降低类的复杂度。 1.2、方便…

ubuntu开启message文件

环境&#xff1a;ubuntu 20.04 1、首先需要修改 /etc/rsyslog.d/50-default.conf 文件&#xff1b;源文件中message被注释&#xff0c;如下图&#xff1a; 2、打开注释&#xff1a; 3、重启服务 systemctl restart rsyslog.service 如此即可&#xff01;

freeRTOS事件标志组(1-16)

def&#xff1a;事件标志组简介 事件标志位&#xff1a;用一个为来表示事件是否发生 事件标志组是事件标志位的集合可以简单的理解事件标志组&#xff0c;就是一个整数 事件标志组的特点: 1&#xff1a;它的每一个位表示一个事件&#xff08;高8位不算&#xff09; 2&#…

分布式与一致性协议之Raft算法与一致哈希算法(一)

Raft算法 Raft与一致性 有很多人把Raft算法当成一致性算法&#xff0c;其实它不是一致性算法而是共识算法&#xff0c;是一个Multi-Paxos算法&#xff0c;实现的是如何就一系列值达成共识。并且&#xff0c;Raft算法能容忍少数节点的故障。虽然Raft算法能实现强一致性&#x…

打印机-STM32版本 硬件部分

最终PCB EDA工程: 一、确定芯片型号 根据项目需求&#xff0c;梳理需要用到的功能&#xff0c; 电量检测&#xff1a;ADC 按键&#xff1a;IO input外部中断 LED&#xff1a;IO output 温度检测&#xff1a;ADC 电机控制&#xff1a;IO output 打印通讯&#xff1a;SPI …

HarmaonyOS鸿蒙应用科普课

一、什么是鸿蒙OS&#xff1f; 1.概念&#xff1a; 先给大家讲讲今天讲课的主题&#xff0c;鸿蒙OS是什么&#xff1f;鸿蒙系统大家都知道&#xff0c;就是一个操作系统&#xff0c;我们未来是为的成为鸿蒙程序员。所以我们不要将鸿蒙os完全等同于手机操作系统&#xff0c;太…

笔记:编写程序,绘制一个展示支付宝月账单报告的饼图,

文章目录 前言一、饼图是什么&#xff1f;二、分析题目三、编写代码总结 前言 编写程序&#xff0c;绘制一个展示支付宝月账单报告的饼图&#xff0c;实现过程如下&#xff1a; &#xff08;1&#xff09; 导入 matplotlib.pyplot 模块&#xff1b; &#xff08;2&#xff09;…

前端业务开发中使用原生js和elementui两种方式实现头像裁切上传的功能

日常业务开发中&#xff0c;无论是后台管理系统还是前台界面&#xff0c;都会遇到图片裁剪的业务需求&#xff0c;选择合适的尺寸或者图片的关键部分&#xff0c;满足我们的功能需求&#xff01;&#xff01; 效果预览 效果一&#xff1a; 效果二: 实现过程 1.原生js实现方…

全栈开发之路——前端篇(2)文件、组件与setup引入

全栈开发一条龙——前端篇 第一篇&#xff1a;框架确定、ide设置与项目创建 本文系该系列第二篇&#xff0c;主要将介绍各个文件的意义、组件结构与导入以及setup的引入。 目录 一、src外文件介绍.gitignore为git忽略文件env.d.ts用于识别其他文件index.htmljson文件vite.confi…

七、Google Protobuf

这里写自定义目录标题 一、编码和解码二、Netty本身的编码解码机制和存在的问三、Protobuf四、Protobuf示例1五、ProtoBuffer传输多种数据类型 一、编码和解码 二、Netty本身的编码解码机制和存在的问 netty提供的编码器 netty提供的解码器 存在的问题 无法跨语言序列化后…

【C语言】动态内存分配(一)

目录 1.为什么要有动态内存分配 2.malloc和free 2.1malloc 2.2free 1.为什么要有动态内存分配 我们已经掌握的内存开辟方式有: 但是上述的开辟空间的方式有两个特点: ⭐空间开辟大小是固定的。 ⭐数组在申明的时候&#xff0c;必须指定数组的长度&#xff0c;数组空间一旦…