循环神经网络学习01——transformer:输入部分-嵌入层位置编码

一、介绍

1、核心思想

利用自注意力机制来捕获输入序列中各元素之间的全局依赖关系,无论这些元素之间的实际距离有多远。

  • 自注意力机制:允许模型在处理序列的每个元素时,考虑到序列中的所有其他元素,从而捕捉它们之间的关系和依赖,这对于理解上下文和语言的复杂性至关重要。

  • 多头注意力:通过并行地使用多个注意力机制(称为“头”),Transformer能够在不同的表示子空间中捕捉到序列的不同特征。

  • 位置编码:由于Transformer本身不具备处理序列顺序的能力,通过添加位置编码到输入序列,模型能够利用序列中元素的位置信息。

2、优点

  • 高效的并行计算:与传统的循环神经网络不同,Transformer可以处理整个序列的所有元素而无需顺序迭代,这使得其特别适合于现代并行计算硬件。

  • 长距离依赖捕捉能力:自注意力机制使得Transformer能够有效地处理长距离依赖问题,这在处理长文本或复杂序列关系时尤为重要。

  • 灵活性和广泛的适用性:Transformer架构可以被应用于多种序列处理任务,包括但不限于语言理解、文本生成、机器翻译等。

3、应用

  • 自然语言处理:如机器翻译、文本摘要、情感分析、问答系统等。

  • 语音和音频处理:如语音识别、音乐生成等。

  • 图像处理和计算机视觉:通过将图像切割成序列化的片段,Transformer也被应用于图像分类、物体检测等任务。

  • 跨模态任务:如图像字幕生成、视觉问答等,Transformer可以处理来自不同模态(如文本和图像)的数据。

二、Transformer架构

 

1、输入部分

Transformer模型的输入模块主要由两部分组成:嵌入层(Embedding Layer)位置编码(Positional Encoding)

这两部分共同作用,将原始的输入序列转换为模型能够处理的形式,同时保留序列中的单词信息和单词的位置信息。

1.1 嵌入层(Embedding Layer)

嵌入层的主要任务是将输入序列中的每个单词或标记(token)转换为固定维度的向量。

在Transformer模型中,嵌入层的主要任务是将每个单词或标记转换为一个高维空间中的向量。这个过程可以理解为将单词从稀疏的、通常是一维的、基于索引的表示(比如单词在词典中的索引)转换为稠密的、多维的表示。

工作原理

假设一个微型词汇表:“King”, “Queen”, “Man”, “Woman”。对应地,我们为每个单词分配一个唯一的索引:King=0, Queen=1, Man=2, Woman=3。在未使用嵌入层之前,可能会使用独热编码(One-Hot Encoding)来表示这些单词,即:

  • King = [1, 0, 0, 0]

  • Queen = [0, 1, 0, 0]

  • Man = [0, 0, 1, 0]

  • Woman = [0, 0, 0, 1]

引入嵌入层后,会初始化一个嵌入矩阵,其大小为词汇量 x 嵌入维度。假设我们选择的嵌入维度为2(实际应用中通常远大于2,例如128、256、512等),那么对于上述的四个单词,我们可能会初始化如下的嵌入矩阵:

[ [ 0.2,  0.8],    # King[-0.5,  0.4],    # Queen[ 0.1, -0.3],    # Man[-0.1, -0.7] ]   # Woman

在这个矩阵中,每一行代表一个单词的嵌入向量。例如,“King”的嵌入向量是[0.2, 0.8]。

当输入一个单词时,嵌入层会根据这个单词的索引在嵌入矩阵中查找对应的嵌入向量。比如,如果输入的单词是“King”,索引为0,嵌入层就会输出[0.2, 0.8]作为这个单词的表示。

意义

嵌入层通常作为神经网络的第一层出现,其嵌入向量会随着模型的训练不断更新和优化,以更好地捕捉和表示单词之间的复杂关系和语义信息。这种密集且富含语义的表示方式,为深度学习模型处理自然语言提供了强大的基础。

2、位置编码

 由于Transformer模型使用的是自注意力机制,没有像循环神经网络(RNN)那样的递归结构,所以它本身并不能理解序列中元素的顺序,因此Transformer模型本身不具有处理序列顺序的能力(这是因为其使用的自注意力机制会同时考虑序列中所有元素的关系,而不关注元素的顺序),这就需要通过位置编码来向模型提供位置信息。

位置编码通过为序列中每个单词的嵌入向量添加一个与其位置相关的向量来实现。这个位置向量与单词的嵌入向量具有相同的维度,使得两者可以通过加法或其他方式结合起来。

计算公式

对于序列中的每个位置pos,和每个维度 i ,位置编码 ( pos , i ) 是这样计算的:

PE_{pos,2i}=sin(pos/10000^{2i/d_{model}})\\ PE_{pos,2i+1}=cos(pos/10000^{2i/d_{model}}

其中,pos 是位置,i 是维度索引(${d}{model}$/2){d}{model} 是嵌入向量的维度,PE代表整个词的数组

通过这种方式,对于每个位置,我们计算一对正弦和余弦值,每对对应嵌入向量中的两个维度。

假设嵌入向量的维度d_{model}是4,要为位置0和位置1编码:

  • 对于位置0,其位置编码是:

    • PE_{(0,0)} = sin(0 / 10000^{0/4}) = sin(0) = 0

      PE_{(0,1)} = cos(0 / 10000^{0/4}) = cos(0) = 1

    • $PE_{(0,2)} = sin(0 / 10000^{2/4}) = sin(0) = 0

    • PE_{(0,3)} = cos(0 / 10000^{2/4}) = cos(0) = 1

    • 所以,位置0的位置编码向量是 [0, 1, 0, 1]

  • 对于位置1,其位置编码是:

    • PE_{(1,0)} = sin(1 / 10000^{0/4}) = sin(1/10000^0) = sin(1)

    • PE_{(1,1)} = cos(1 / 10000^{0/4}) = cos(1/10000^0) = cos(1)

    • PE_{(1,2)} = sin(1 / 10000^{2/4}) = sin(1/10000^{0.5}) = sin(1/100)

    • PE_{(1,3)} = cos(1 / 10000^{2/4}) = cos(1/10000^{0.5}) = cos(1/100)

    • 所以,位置1的位置编码向量是 [sin(1), cos(1), sin(1/100), cos(1/100)]

import numpy as npseq_len = 4
d = 4
n = 10000# 初始化矩阵
PE = np.zeros((seq_len, d))for pos in range(seq_len):# 防止索引超出dfor i in np.arange(int(d/2)):den = np.power(10000, (2 * i) / d)PE[pos, 2*i] = np.sin(pos / den)PE[pos, 2*i + 1] = np.cos(pos / den)print(PE)

说明

位置编码的值完全由单词或标记在序列中的位置决定,而且这种决定关系是预先定义好的,不会随训练而改变

这意味着,与嵌入向量不同,位置编码并不是模型训练过程中学习得到的参数。它们是根据每个位置的索引,通过预定义的数学公式计算得到的,然后加到对应位置的嵌入向量上,以此来提供序列中各位置的相对和绝对位置信息。

这样做使得Transformer模型能够理解序列中不同元素的顺序,即使模型的自注意力机制本身并不关注输入元素的顺序。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git rebase 和 git merge的区别

Rebase 可使提交树变得很干净, 所有的提交都在一条线上。 Merge 则是包含所有的调试记录,合并之后,父级的所有信息都会合并在一起 Rebase 修改了提交树的历史 比如, 提交 C1 可以被 rebase 到 C3 之后。这看起来 C1 中的工作是在 C3 之后进行的&#xf…

上马传奇新手起号攻略 上马传奇云手机开荒玩法

在上马传奇这款游戏中,我们可以选择合适的职业,参与各类玩法快速起号,今天就给大家一些攻略。 一、职业 1.游戏中的战士、法师、道士分别有三个分支,一共九个职业可以选择,选择之后不能转职,所以前期要慎重…

Redis 集群(Cluster)和基础的操作 部署实操篇

三主三从 集群概念 Redis 的哨兵模式,提高了系统的可用性,但是正在用来存储数据的还是 master 和 slave 节点,所有的数据都需要存储在单个 master 和 salve 节点中。 如果数据量很大,接近超出了 master / slave 所在机器的物理内…

【JavaScript】this 指向由入门到精通

this 的概念 this 在JavaScript 及其其他面向对象的编程语言中,存在的目的是为了提供一种在对象方法中引用当前对象的方式。 它为方法提供了对当前实例的引用,使得方法能够访问或者修改实例的成员变量。 注意点: this 的绑定和定位的位置…

C++ STL容器之vector的使用及复现

vector 1. 序列式容器 vector、list、deque、forward_list(C11)等STL容器,其底层为线性序列的数据结构,里面存储的是元素本身,这样的容器被统称为序列式容器。 2. vector容器 vector使用模板作为参数,所以在使用的时候必须将模…

算法15(力扣347)——前k个高频元素

1、问题 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 2、示例 (1) 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2] (2) 输入: nums [1], k 1 输出: [1…

项目质量管理体系及保证措施

项目质量管理体系的核心是建立标准化流程、强化全员参与意识、实施动态监控机制。其中,标准化流程是质量管理的基石。例如,某全球500强企业通过引入ISO 9001体系,将项目缺陷率降低了37%。标准化流程不仅能明确各环节的质量要求,还…

2025web寒假作业二

一、整体功能概述 该代码构建了一个简单的后台管理系统界面,主要包含左侧导航栏和右侧内容区域。左侧导航栏有 logo、管理员头像、导航菜单和安全退出按钮;右侧内容区域包括页头、用户信息管理内容(含搜索框和用户数据表格)以及页…

服务器ip被反垃圾列为黑名单

查询 BarracudaCentral.org - Technical Insight for Security Pros https://multirbl.valli.org/lookup/ 大概写:我不知道这个IP在我使用之前已被列入Barracuda信誉阻止列表(BRBL)。我不知道它之前列出的原因,但服务器现在有了…

2025影视泛目录站群程序设计_源码二次开发新版本无缓存刷新不变实现原理

1. 引言 本设站群程序计书旨在详细阐述苹果CMS泛目录的创新设计与实现,介绍无缓存刷新技术、数据统一化、局部URL控制及性能优化等核心功能,以提升网站访问速度和用户体验。 2. 技术概述 2.1 无缓存刷新技术 功能特点: 内容不变性&#x…

激活函数 05 ——Swish

Swish背景 发展阶段典型函数主要特性局限性早期阶段Sigmoid/Tanh平滑可导,输出有界梯度消失问题现代阶段ReLU计算高效,缓解梯度消失神经元死亡现象改进阶段LeakyReLU改善负区间响应参数敏感性新星阶段Swish/GELU自适应非线性计算复杂度略高 Swish激活函…

Tria Technologies RFSoC 平台 - 入门指南

Tria Technologies RFSoC 平台 - 入门指南 适用于 RFSoC Gen-3 的宽带毫米波无线电开发平台 该平台将 Otava 和 Avnet 联合开发的 Otava DTRX2 双收发器毫米波无线电卡与 AMD Xilinx Zynq UltraScale ™ RFSoC ZCU208 评估套件相结合。 5G 毫米波相控阵天线模块开发平台 …

Win11下搭建Kafka环境

目录 一、环境准备 二、安装JDK 1、下载JDK 2、配置环境变量 3、验证 三、安装zookeeper 1、下载Zookeeper安装包 2、配置环境变量 3、修改配置文件zoo.cfg 4、启动Zookeeper服务 4.1 启动Zookeeper客户端验证 4.2 启动客户端 四、安装Kafka 1、下载Kafka安装包…

白嫖RTX 4090?Stable Diffusion:如何给线稿人物快速上色?

大家都知道,在设计的初期,我们通常会先绘制草图,然后再进行上色处理,最终才开始进行最终的设计工作。在这个上色的过程中,配色是至关重要的一环。这不仅方便了内部同事的评审,也让产品方和客户可以直观地了…

从大规模恶意攻击 DeepSeek 事件看 AI 创新隐忧:安全可观测体系建设刻不容缓

作者:羿莉(萧羿) 全球出圈的中国大模型 DeepSeek 作为一款革命性的大型语言模型,以其卓越的自然语言处理能力和创新性成本控制引领行业前沿。该模型不仅在性能上媲美 OpenAI-o1,而且在推理模型的成本优化上实现了突破…

AMD 8845HS 780M核显部署本地deepseek大模型的性能

测试了一下笔记本电脑AMD 8845HS的780M核显是否能本地部署deepseek大模型。 测试软件环境:LM Studio 0.3.9 、Windows 11 24H2 硬件:荣耀X16笔记本 CPU:AMD 8845HS 显卡:780M核显,显存为共享内存自动分配模式&…

利用二分法进行 SQL 盲注

什么是sql注入? SQL 注入(SQL Injection)是一种常见的 Web 安全漏洞,攻击者可以通过构造恶意 SQL 语句来访问数据库中的敏感信息。在某些情况下,服务器不会直接返回查询结果,而是通过布尔值(Tr…

《深度学习》——pytorch框架及项目

文章目录 pytorch特点基本概念 项目项目实现导入所需库下载训练数据和测试数据对训练和测试样本进行分批次展示手写图片判断pytorch是否支持GPU定义神经网络模型定义训练函数定义测试函数创建交叉熵损失函数和优化器通过多轮训练降低损失值得到最终结果注意 pytorch PyTorch 是…

【批量获取图片信息】批量获取图片尺寸、海拔、分辨率、GPS经纬度、面积、位深度、等图片属性里的详细信息,提取出来后导出表格,基于WPF的详细解决方案

摄影工作室通常会有大量的图片素材,在进行图片整理和分类时,需要知道每张图片的尺寸、分辨率、GPS 经纬度(如果拍摄时记录了)等信息,以便更好地管理图片资源,比如根据图片尺寸和分辨率决定哪些图片适合用于…

windows生成SSL的PFX格式证书

生成crt证书: 安装openssl winget install -e --id FireDaemon.OpenSSL 生成cert openssl req -x509 -newkey rsa:2048 -keyout private.key -out certificate.crt -days 365 -nodes -subj "/CN=localhost" 转换pfx openssl pkcs12 -export -out certificate.pfx…