【机器学习】自然语言处理(NLP)领域革命性突破的模型——Transformer

简介: 【机器学习】自然语言处理(NLP)领域革命性突破的模型——Transformer

👀引言

👀在自然语言处理领域,传统的循环神经网络和长短时记忆网络虽然取得了一定的成果,但在处理长序列时会出现梯度消失或梯度爆炸的问题,这限制了它们的性能。

👀为了解决这些问题,谷歌提出了Transformer模型。该模型采用自注意力机制进行信息的交互与传递,具有高效的计算效率和强大的表示能力。

🧠自注意力机制介绍🧠

🧠自注意力机制是一种强大的工具,它允许模型在序列内部的不同位置间直接建立关系,从而提高了模型的性能和灵活性。通过计算注意力权重并生成加权和表示,自注意力机制能够捕捉到序列中的重要长距离依赖关系,并在各种NLP任务中表现出色。

概念

🧠自注意力机制是一种特殊的注意力机制,它通过将序列中的每个位置视为查询(Query),同时作为(Key)和(Value),来计算注意力权重并生成加权和表示。

核心组件

🧠查询(Query)、键(Key)、值(Value):输入序列中的每个元素首先被转换为这三个向量。查询向量用于与键向量进行匹配,值向量则用于生成加权和表示。

🧠注意力权重:通过计算查询向量和键向量的点积(或其他相似度度量),然后经过softmax归一化得到注意力权重。这些权重表示了输入序列中不同位置之间的依赖关系。

生成Query、Key和Value向量

🧠对于序列中的每个嵌入向量,我们会生成对应的Query、Key和Value向量。这通常是通过将嵌入向量与三个不同的权重矩阵(Wq, Wk, Wv)相乘来实现的。这些权重矩阵是随机初始化的,并在训练过程中进行更新。在这个例子中,假设权重矩阵的维度是(64, 512),因此生成的Query、Key和Value向量的维度是64维。生成Query、Key和Value向量

🧠以单词"Games"为例,假设其嵌入向量为X,则:

q = X * Wq

k = X * Wk

v = X * Wv

计算注意力权重

🧠接下来,对于序列中的每个单词(作为Query),我们计算它与序列中其他所有单词(作为Key)之间的相似度。这通常是通过点积(dot product)来实现的,即计算Query向量和Key向量的点积。然后,这些点积值经过softmax函数进行归一化,得到注意力权重。

🧠以单词"Games"为例,当处理它时,我们会计算它与"The"、"2022"、"Beijing"、"Winter"等单词的注意力权重。

加权求和

🧠最后,我们使用注意力权重对Value向量进行加权求和,得到最终的表示向量。这个表示向量将考虑到序列中所有单词与当前单词的相关性。

🧠以单词"Games"为例,其最终的表示向量将是序列中所有单词的Value向量的加权和,其中权重是单词"Games"与这些单词之间的注意力权重。

🧠为了理解自注意力机制,如下是PyTorch框架来编写的一个简单的示例代码

import torch  
import torch.nn as nn  
import torch.nn.functional as F  
  
class SelfAttention(nn.Module):  
    def __init__(self, embed_size, heads):  
        super(SelfAttention, self).__init__()  
        self.embed_size = embed_size  
        self.heads = heads  
        self.head_dim = embed_size // heads  
          
        assert (self.head_dim * heads == embed_size), "Embedding size needs to be divisible by heads"  
          
        self.values = nn.Linear(self.head_dim, self.head_dim, bias=False)  
        self.keys = nn.Linear(self.head_dim, self.head_dim, bias=False)  
        self.queries = nn.Linear(self.head_dim, self.head_dim, bias=False)  
        self.fc_out = nn.Linear(heads * self.head_dim, embed_size)  
          
    def forward(self, values, keys, query, mask):  
        N = query.shape[0]  
        value_len, key_len, query_len = values.shape[1], keys.shape[1], query.shape[1]  
          
        # Split the embedding into self.heads different pieces  
        values = values.reshape(N, value_len, self.heads, self.head_dim)  
        keys = keys.reshape(N, key_len, self.heads, self.head_dim)  
        queries = query.reshape(N, query_len, self.heads, self.head_dim)  
          
        values = self.values(values)   # (N, value_len, heads, head_dim)  
        keys = self.keys(keys)   # (N, key_len, heads, head_dim)  
        queries = self.queries(queries)  # (N, query_len, heads, head_dim)  
          
        # Einsum does matrix multiplication for query, key and then sum the last two dimensions.  
        # query shape: (N, query_len, heads, head_dim), key shape: (N, key_len, heads, head_dim)  
        # output shape: (N, heads, query_len, key_len)  
        energy = torch.einsum("nqhd,nkhd->nhqk", [queries, keys])  
          
        if mask is not None:  
            energy = energy.masked_fill(mask == 0, float("-1e20"))  
          
        attention = torch.softmax(energy / (self.embed_size ** (1/2)), dim=3)  
          
        out = torch.einsum("nhql,nlhd->nqhd", [attention, values]).reshape(N, query_len, self.heads * self.head_dim)  
        out = self.fc_out(out)  
          
        return out  
  
# 示例输入  
# 假设有3个序列,每个序列长度为5,嵌入维度为10,头数为2  
embed_size = 10  
heads = 2  
batch_size = 3  
seq_len = 5  
  
# 随机初始化嵌入向量  
values = torch.randn(batch_size, seq_len, embed_size)  
keys = torch.randn(batch_size, seq_len, embed_size)  
query = torch.randn(batch_size, seq_len, embed_size)  
  
# 假设没有mask(在实际应用中,mask通常用于处理填充token)  
mask = None  
  
# 实例化自注意力层  
attention = SelfAttention(embed_size, heads)  
  
# 前向传播  
output = attention(values, keys, query, mask)  
  
print(output.shape)  # 应该输出 (batch_size, seq_len, embed_size)

🏠模型结构与实现🏠

🏠Transformer模型主要由编码器和解码器两部分组成,它们都是由若干个基本的Transformer Encoder/Decoder Block堆叠而成。

嵌入表示层:对于输入文本序列,首先通过输入嵌入层将每个单词转换为其相对应的向量表示。

🏠由于Transformer中没有任何信息能表示单词间的相对位置关系,故需在词嵌入中加入位置编码。

🏠具体来说,序列中每一个单词所在的位置都对应一个向量,这一向量会与单词表示对应相加并送入到后续模块中做进一步处理。

编码器:编码器由多个相同的层堆叠而成,每个层都包含一个Self-Attention层和一个前馈神经网络。

🏠Self-Attention层通过计算输入序列中每个位置之间的相关性,得到一个注意力权重分布,以便更好地进行信息传递。

🏠前馈神经网络则用于捕捉输入序列中的局部信息。

解码器:解码器同样由多个相同的层堆叠而成,但与编码器相比,解码器在Self-Attention层之后还包含一个Encoder-Decoder Attention层。

🏠这个层允许解码器关注编码器的输出,从而利用源语言序列的信息来生成目标语言序列。

✌在自然语言处理中的应用✌

✌Transformer模型在自然语言处理领域取得了广泛的应用,其中最具代表性的模型包括BERTGPT

✌BERT通过使用Transformer模型进行双向上下文信息的捕捉,在多项NLP任务中取得了显著成果;GPT则通过使用自回归的方式进行语言建模,在文本生成、文本摘要等任务中取得了优异表现。

✌此外,Transformer模型还可以用于文本分类、情感分析、问答系统等各种NLP任务中

相关文章
|
6月前
|
人工智能 自然语言处理 IDE
模型微调不再被代码难住!PAI和Qwen3-Coder加速AI开发新体验
通义千问 AI 编程大模型 Qwen3-Coder 正式开源,阿里云人工智能平台 PAI 支持云上一键部署 Qwen3-Coder 模型,并可在交互式建模环境中使用 Qwen3-Coder 模型。
1149 109
|
7月前
|
人工智能 自然语言处理 运维
【新模型速递】PAI-Model Gallery云上一键部署Kimi K2模型
月之暗面发布开源模型Kimi K2,采用MoE架构,参数达1T,激活参数32B,具备强代码能力及Agent任务处理优势。在编程、工具调用、数学推理测试中表现优异。阿里云PAI-Model Gallery已支持云端部署,提供企业级方案。
464 0
【新模型速递】PAI-Model Gallery云上一键部署Kimi K2模型
|
10月前
|
人工智能 JSON 算法
【解决方案】DistilQwen2.5-DS3-0324蒸馏小模型在PAI-ModelGallery的训练、评测、压缩及部署实践
DistilQwen 系列是阿里云人工智能平台 PAI 推出的蒸馏语言模型系列,包括 DistilQwen2、DistilQwen2.5、DistilQwen2.5-R1 等。本文详细介绍DistilQwen2.5-DS3-0324蒸馏小模型在PAI-ModelGallery的训练、评测、压缩及部署实践。
|
11月前
|
人工智能 运维 API
PAI-Model Gallery云上一键部署阶跃星辰新模型Step1X-Edit
4月27日,阶跃星辰正式发布并开源图像编辑大模型 Step1X-Edit,性能达到开源 SOTA。Step1X-Edit模型总参数量为19B,实现 MLLM 与 DiT 的深度融合,在编辑精度与图像保真度上实现大幅提升,具备语义精准解析、身份一致性保持、高精度区域级控制三项关键能力;支持文字替换、风格迁移等11 类高频图像编辑任务类型。在最新发布的图像编辑基准 GEdit-Bench 中,Step1X-Edit 在语义一致性、图像质量与综合得分三项指标上全面领先现有开源模型,比肩 GPT-4o 与 Gemin。PAI-ModelGallery 支持Step1X-Edit一键部署方案。
|
8月前
|
机器学习/深度学习 算法 安全
差分隐私机器学习:通过添加噪声让模型更安全,也更智能
本文探讨在敏感数据上应用差分隐私(DP)进行机器学习的挑战与实践。通过模拟DP-SGD算法,在模型训练中注入噪声以保护个人隐私。实验表明,该方法在保持71%准确率和0.79 AUC的同时,具备良好泛化能力,但也带来少数类预测精度下降的问题。研究强调差分隐私应作为模型设计的核心考量,而非事后补救,并提出在参数调优、扰动策略选择和隐私预算管理等方面的优化路径。
584 3
差分隐私机器学习:通过添加噪声让模型更安全,也更智能
|
7月前
|
人工智能 自然语言处理 运维
【新模型速递】PAI-Model Gallery云上一键部署gpt-oss系列模型
阿里云 PAI-Model Gallery 已同步接入 gpt-oss 系列模型,提供企业级部署方案。
|
8月前
|
机器学习/深度学习 人工智能 算法
Post-Training on PAI (4):模型微调SFT、DPO、GRPO
阿里云人工智能平台 PAI 提供了完整的模型微调产品能力,支持 监督微调(SFT)、偏好对齐(DPO)、强化学习微调(GRPO) 等业界常用模型微调训练方式。根据客户需求及代码能力层级,分别提供了 PAI-Model Gallery 一键微调、PAI-DSW Notebook 编程微调、PAI-DLC 容器化任务微调的全套产品功能。
|
9月前
|
存储 人工智能 运维
企业级MLOps落地:基于PAI-Studio构建自动化模型迭代流水线
本文深入解析MLOps落地的核心挑战与解决方案,涵盖技术断层分析、PAI-Studio平台选型、自动化流水线设计及实战构建,全面提升模型迭代效率与稳定性。
426 6
|
9月前
|
存储 机器学习/深度学习 自然语言处理
避坑指南:PAI-DLC分布式训练BERT模型的3大性能优化策略
本文基于电商搜索场景下的BERT-Large模型训练优化实践,针对数据供给、通信效率与计算资源利用率三大瓶颈,提出异步IO流水线、梯度压缩+拓扑感知、算子融合+混合精度等策略。实测在128卡V100集群上训练速度提升3.2倍,GPU利用率提升至89.3%,训练成本降低70%。适用于大规模分布式深度学习任务的性能调优。
468 3

热门文章

最新文章