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

从零开始设计Transformer模型(1/2)——剥离RNN,保留Attention

声明:

       本文基于哔站博主【Shusenwang】的视频课程【RNN模型及NLP应用】,结合自身的理解所作,旨在帮助大家了解学习NLP自然语言处理基础知识。配合着视频课程学习效果更佳。

材料来源:【Shusenwang】的视频课程【RNN模型及NLP应用】

视频链接:Transformer模型(1/2): 剥离RNN,保留Attention_哔哩哔哩_bilibili


一、学习目标

1.本节课我们来学习剥离RNN的Attention和Self-Attention

2.掌握Attention和Self-Attention的基本原理

3.熟悉并掌握Attention和Self-Attention的底层逻辑


 Transformer模型基本框架:

 Transformer的效果非常惊人,可以完爆所有的RNN+Attention

二、剥离RNN,用Attention打一个深度神经网络

(1)搭建Attention层(for Seq2Seq Model)

【前言】

之前的课程里我们用Attention来改进Sequence to Sequence模型,Sequence to Sequence有一个Encoder层和一个Decoder层。

Encoder的输入是m个向量,Encoder将这些信息压缩到状态向量h中,最后一个hm是对所有信息的概括。

Decoder是一个文本生成器,依次生成状态S,然后根据状态S生成新的单词X',新的单词X‘将作为下一个输入用来生成新的状态向量h。

如果用Attention的话还需要计算contect vector(C),要计算Attention的话需要先计算每一个S对应的权重α。就是计算出每个状态S向量与所有的h向量的相关性。

我们具体来看一下权重α是怎么计算出来的:

α计算过程如下:

这里引入三个向量:

图中的q为Query,用来匹配key值

图中的k为key,用来被Query匹配

图中的Value,是用来被进行加权平均的

这一步我们知道α就是K与Q的匹配程度,匹配程度越高则权重越大。

Wq、Wk、Wv这三个参数矩阵都需要从训练数据中学习

 接下来我们整合一下刚刚讲述的计算过程:

①将Decoder第j个状态向量Sj与Wq相乘得到Query向量qj.

②将Encoder中全部的状态向量h与Wk相乘得到key,也就是将h映射到Key向量上

③将Encoder中全部的状态向量h与Wv相乘得到Value,每一个Value对应一个h

④用softmax函数对比K矩阵和Qj计算权重α

⑤计算加权平均Cj:将每一个α与v相乘求和得到Cj

【提示】这种α和C的计算方法就是Transformer里面用的

(1)搭一个Aentioin层用于Seq2Seq模型

【第一步】计算K、q、V

【第二步】计算权重α

将计算q1与每一个key值的相关性得到α:1(意思是第一个α矩阵,不是第一个α值

然后计算contect vector(C)


以此类推:

......

......

可以用同样的方法计算出contect vector(C)。每一个C对应一个X'。

输出矩阵C=[C:1,C:2,C:3......Ct]

以下是对Attention的总结: 

①我们将Attention层记作Attn()函数

②Encoder的输入记作矩阵X=[X1,X2,X3...Xm]

③Decoder的输入记作矩阵X'=[X1',X2',X3'...Xt']

【注意】参数Wq、Wk、Wv这是三个参数矩阵需要从训练数据中获得

④计算出来的每一个contect vector (C)对应一个X'。


(2)搭一个Self-Attention层

①也可以用Attn()函数来表示Self-Attention,这个函数与上以一个Attention中的函数一模一样。

【注意】只不过要注意的是这时Attn两个输入都是X即Attn(X,X)。

②RNN只有一个输入X=[X1,X2,X3...Xm]

③同样有三个参数矩阵Wq、Wk、Wv需要从训练数据中获得

【注意】输出C矩阵中每一个C不光依赖它所对应的X,也依赖于其他输入X

以下是Self-Attention的具体计算过程,计算方法与Attention一致: 

先计算Query、Key、Value

再计算权重矩阵α

依次计算出所有权重矩阵

最后计算contect  vector(C)

【特别注意】每一个contect vector(C)不只是依赖于它所对应的X,它同样依赖于其他X。如果你改变任何一个X,C都会随之改变。


三、总结

Attention层:

①Attn()函数的输入是X矩阵和X'矩阵

     q为Query,用来匹配key值

     k为key,用来被Query匹配

     v为Value,是用来被进行加权平均的

③Attn()函数的输出是contect vector矩阵

Self-Attention层:

Self-Attention层只有点与Attention层不同,就是他的输入是两个一样的X矩阵

相关文章:

从零开始设计Transformer模型(1/2)——剥离RNN,保留Attention

声明: 本文基于哔站博主【Shusenwang】的视频课程【RNN模型及NLP应用】,结合自身的理解所作,旨在帮助大家了解学习NLP自然语言处理基础知识。配合着视频课程学习效果更佳。 材料来源:【Shusenwang】的视频课程【RNN模型及NLP应用…...

Uniapp 持续出现 Invalid Host/Origin header 解决方法

目录 前言1. 问题所示2. 原理分析前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn 1. 问题所示 执行代码的时候,源源不断,一直持续出现这个 Invalid Host/Origin header [WDS]...

【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的缓存技术:使用 Redis 提升性能

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开篇整…...

音视频 YUV格式详解

前言 本文介绍YUV色彩模型,YUV的分类和常见格式。 RGB色彩模型 在RGB颜色空间中,任意色光F都可以使用R、G、B三色不同的分量混合相加而成即: F = R + G + B.。即我们熟悉的三原色模型。 RGB色彩空间根据每个分量在计算机中占用的存储字节数可以分为以下几种类型,字节数…...

华为配置篇-BGP实验

BGP 一、简述二、常用命令总结三、实验 一、简述 IBGP 水平分割&#xff1a;从一个 IBGP 对等体学到的路由&#xff0c;不会再通告给其他的 IBGP 对等体。在一个 AS 内部&#xff0c;路由器之间通过 IBGP 交换路由信息。如果没有水平分割机制&#xff0c;当多个路由器之间形成…...

一个服务器算分布式吗,分布式需要几个服务器

一个服务器不构成分布式系统。分布式系统的核心在于多台独立的计算机&#xff08;服务器&#xff09;协同工作&#xff0c;通过通信网络共享资源、共同完成任务。以下是对问题的详细分析&#xff1a; 1. 单台服务器 ≠ 分布式 单台服务器的架构是集中式的&#xff0c;所有功能…...

vue element-ui 工程创建

vue element-ui 工程创建 按照步骤 &#xff1a; https://blog.csdn.net/wowocpp/article/details/146590400 创建工程 vue create demo3 cd demo3 npm run serve 在demo3 目录里面 执行如下命令 npm install element-ui -S 然后查看 package.json main.js 添加代码&…...

unity点击button后不松开通过拖拽显示模型松开后模型实例化

using System.Collections; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;[RequireComponent(typeof(Button))] // 确保脚本挂在Button上 public class DragButtonSpawner : MonoBehaviour, IPointerDownHandler, IDragHandler, IPointerUpHandle…...

arco design框架中的树形表格使用中的缓存问题

目录 1.问题 2.解决方案 1.问题 arco design框架中的树形表格使用中的缓存问题&#xff0c;使用了树形表格的load-more懒加载 点击展开按钮后&#xff0c;点击关闭&#xff0c;再次点击展开按钮时&#xff0c;没有调用查询接口&#xff0c;而是使用了缓存的数据。 2.解决方…...

《AI大模型应知应会100篇》第2篇:大模型核心术语解析:参数、Token、推理与训练

第2篇&#xff1a;大模型核心术语解析&#xff1a;参数、Token、推理与训练 摘要 本文将用通俗易懂的语言拆解大模型领域的四大核心概念&#xff1a;参数、Token、训练与推理。通过案例对比、代码实战和成本计算&#xff0c;帮助读者快速掌握这些术语的底层逻辑与实际应用价值…...

【28BYJ-48】STM32同时驱动4个步进电机,支持调速与正反转

资料下载&#xff1a;待更新。。。。 先驱动起来再说&#xff0c;干中学&#xff01;&#xff01;&#xff01; 1、实现功能 STM32同时驱动4个步进电机&#xff0c;支持单独调速与正反转控制 需要资源&#xff1a;16个任意IO口1ms定时器中断 目录 资料下载&#xff1a;待更…...

手动实现一个迷你Llama:使用SentencePiece实现自己的tokenizer

自己训练一个tokenizertokenizer需要的模块SentencePiece 库tokenizer类中的初始化函数tokenizer类中的encode函数tokenizer类中的decode函数完整代码训练函数数据分片临时文件SentencePiece 训练参数 自己训练一个tokenizer tokenizer需要的模块 encode: 将句子转换为tokend…...

【超详细】讲解Ubuntu上如何配置分区方案

Ubuntu 的分区方案 一、通用分区方案&#xff08;200G为例&#xff09; EFI系统分区&#xff08;仅UEFI启动模式需要&#xff0c;&#xff09; 大小&#xff1a;512MB–1GB类型&#xff1a;主分区&#xff08;FAT32格式&#xff09;挂载点&#xff1a;/boot/efi说明&#xff1…...

Gradle-基础

一.安装 1. 2.配置环境变量 GRADLE_HOME D:\gradle\gradle-5.6.4 GRADLE_USER_HOME D:\gradle\localRepository 3.下载源配置 安装目录下的init.d文件夹里创建一个init.gradle文件&#xff0c;下载顺序从上到下&#xff0c;内容&#xff1…...

Anolis系统下安装Jenkins

1.安装java、maven yum install -y java-17-openjdk-devel maven git wget 2.配置环境变量 1.查看java和maven所在目录 [rootlocalhost ~]# which java /usr/bin/java [rootlocalhost bin]# ll /usr/bin/java lrwxrwxrwx 1 root root 22 4月 1 17:20 /usr/bin/java ->…...

Python网络爬虫:从入门到实践

目录 什么是网络爬虫&#xff1f; 网络爬虫的工作原理 常用Python爬虫库 编写爬虫的步骤 实战示例 注意事项与道德规范 未来趋势 1. 什么是网络爬虫&#xff1f; 网络爬虫&#xff08;Web Crawler&#xff09;是一种自动化程序&#xff0c;通过模拟人类浏览行为&#x…...

LabVIEW 调用 Python 函数

此程序是 LabVIEW 调用 Python 函数实现双精度数相加的典型示例。通过 LabVIEW 搭建交互框架&#xff0c;借助 “Open Python Session” 创建 Python 代码运行环境&#xff0c;定位 Python 模块路径后调用 “Add” 函数&#xff0c;最终实现数据处理并关闭会话。整个流程展现了…...

视频分析设备平台EasyCVR视频结构化AI智能分析:筑牢校园阳光考场远程监控网

一、背景分析​ 近年来&#xff0c;学校考试的舞弊现象屡禁不止&#xff0c;严重破坏考试的公平性&#xff0c;不仅损害广大考生的切身利益&#xff0c;也在社会上造成恶劣的影响。为有效制止舞弊行为&#xff0c;收集确凿的舞弊证据&#xff0c;在考场部署一套可靠的视频监控…...

AWS用Glue读取S3文件上传数据到Redshift,再导出到Quicksight完整版,含VPC配置

1. 项目背景 AWS的官方文档&#xff0c;关于Glue和Vpc配置部分已经比较旧了&#xff0c;按照官方文档配置的流程始终跑不通&#xff0c;花了一番时间和波折后&#xff0c;才终于完整的跑通了。 在数据分析和商业智能&#xff08;BI&#xff09;领域&#xff0c;我们常需要将存…...

Qt WebSockets使用

Qt WebSockets 是 Qt 官方提供的 WebSocket 协议 实现库,支持全双工通信(客户端/服务端),适用于实时交互应用(如聊天、游戏、实时数据监控)。 1. 核心功能 完整的 WebSocket 协议支持 符合 RFC 6455 标准,支持 ws:// 和 wss://(加密)。 自动处理握手、帧拆分、Ping/…...

Docker学习--容器生命周期管理相关命令--start/stop/restart命令

docker start 命令作用&#xff1a; 启动一个或多个已经创建的容器。 语法&#xff1a; docker start [参数] CONTAINER [CONTAINER…]&#xff08;要操作的容器的名称&#xff0c;可以同时操作多个&#xff09; 参数解释&#xff1a; -a&#xff1a;附加到容器的标准输入输出…...

dom操作笔记、xml和document等

文章目录 mybatis dom部分 dom(Document Object Model文档对象模型)。 xml和html都属于dom&#xff0c;每天都会用到&#xff0c;一直以为很简单&#xff0c;直到有一天&#xff0c;操作mybatis的xml时候惨不忍睹&#xff0c;被上了一课&#xff0c;做个笔记整理下吧。 xml和ht…...

Python爬虫第3节-会话、Cookies及代理的基本原理

目录 一、会话和Cookies 1.1 静态网页和动态网页 1.2 无状态HTTP 1.3 常见误区 二、代理的基本原理 2.1 基本原理 2.2 代理的作用 2.3 爬虫代理 2.4 代理分类 2.5 常见代理设置 一、会话和Cookies 大家在浏览网站过程中&#xff0c;肯定经常遇到需要登录的场景。有些…...

OkHttpHttpClient

学习链接 okhttp github okhttp官方使用文档 SpringBoot 整合okHttp okhttp3用法 Java中常用的HTTP客户端库&#xff1a;OkHttp和HttpClient&#xff08;包含请求示例代码&#xff09; 深入浅出 OkHttp 源码解析及应用实践 httpcomponents-client github apache httpclie…...

android设备出厂前 按键测试 快速实现-屏蔽Home,Power等键

android整机测试&#xff0c;需要测试按键。 一般的键好按&#xff0c;好测试。如&#xff1a;音量加 &#xff0c;音量- 。 但是&#xff0c;有些按键就不好测了。譬如&#xff1a;电源键&#xff08;Power&#xff09;&#xff0c;Home键&#xff0c;Menu键&#xff0c;Bac…...

Spring Boot3使用Spring AI通过Ollama集成deepseek

文章目录 项目地址版本信息集成步骤 项目地址 DeepSeekSpringAI实战AI家庭医生应用 版本信息 版本Spring Boot3.4.4JDK21spring-ai1.0.0-M6ollama0.6.3LLMdeepseek:14b 集成步骤 引入依赖 <dependency><groupId>org.springframework.ai</groupId><a…...

c++柔性数组、友元、类模版

目录 1、柔性数组&#xff1a; 2、友元函数&#xff1a; 3、静态成员 注意事项 面试题&#xff1a;c/c static的作用? C语言&#xff1a; C: 为什么可以创建出 objx 4、对象与对象之间的关系 5、类模版 1、柔性数组&#xff1a; #define _CRT_SECURE_NO_WARNINGS #…...

win10 快速搭建 lnmp+swoole 环境 ,部署laravel6 与 swoole框架laravel-s项目1

参考文献 1.dnmp环境 https://github.com/yeszao/dnmp 2.laravel6.0文档 https://learnku.com/docs/laravel/6.x 3.laravels 文档 https://github.com/hhxsv5/laravel-s/blob/master/README-CN.md 安装前准备 1.确认已经安装且配置好docker&#xff0c;能在cmd 中运行 docker …...

【Kafka基础】基础概念解析与消息队列对比

1 Kafka 是什么&#xff1f; Kafka是一个 分布式流处理平台&#xff0c;主要用于 高吞吐量、低延迟的实时数据流处理&#xff0c;最初由LinkedIn开发。 核心特点&#xff1a; 高吞吐量&#xff1a;支持每秒百万级消息处理持久化存储&#xff1a;消息可持久化到磁盘&#xff0c;…...

vue将组件中template转为js

在 Vue 中&#xff0c;组件的 template 需要被转换为 JavaScript 渲染函数&#xff08;Render Function&#xff09;才能在浏览器中运行。Vue 2 和 Vue 3 的转换机制有所不同&#xff0c;主要体现在编译时机、编译工具和输出结果上。 1. Vue 2 的 Template 转换 转换方式 Vue…...