一文彻底搞懂Transformer的输入(附代码)

添加图片注释,不超过 140 字(可选)

本系列文章致力于用最简单的语言讲解Transformer架构,帮助朋友们理解它的强大,本文是第五篇:Transformer输入详解。

接下来,我们将逐层剖析Transformer如何接收并处理输入数据,从定义数据集到计算位置编码,每一步都至关重要;通过本文,朋友们将深刻理解Transformer输入处理流程,并学会如何准备数据以供模型学习;我们将使用一个简化的数据集来直观展示数值计算过程,帮助朋友们更好地理解这一复杂但强大的架构。

01 定义数据集

ChatGPT创建时使用的数据集大小大概是570GB的资料,为了能简单直观地讲解,今天我们将使用一个非常小的数据集来进行数值计算的可视化。

添加图片注释,不超过 140 字(可选)

02 定义词汇表

词汇量指的是数据集中唯一分词(Token)的总数,它可以使用以下公式计算,其中N表示数据集中的Token总数。

本文之后都把这里的唯一分词表述为Token。

添加图片注释,不超过 140 字(可选)

为了能找到N,我们需要将数据集拆分为Token,也就是我们本系列文章第三篇Tokenization

添加图片注释,不超过 140 字(可选)

在获取到N后,我们进行一个集合操作来去除重复的单词,然后就可以统计唯一Token的数量,确定词汇量的大小。

添加图片注释,不超过 140 字(可选)

因此,词汇量大小为16,即数据集中有16个唯一Token。

03 分词编码

现在,我们需要为每个唯一的Token分配一个唯一的数字。

添加图片注释,不超过 140 字(可选)

简单来说,我们将一个Token视为一个单词,并为其分配一个数字,而ChatGPT不一定是一个单词一个Token,有可能单词的一部分视为一个Token,比如,本文数据集中的讲,神,架三个字都是被分成了2个Token;在ChatGPT中,平均大概1Token = 0.75个单词。

代码实现

import tiktoken

def num_tokens_from_string(string: str, encoding_name: str) -> int:

 """Returns the number of tokens in a text string."""
 
 encoding = tiktoken.get_encoding(encoding_name)
 
 num_tokens = len(encoding.encode(string))
 
 return num_tokens

input_str ="用简单语言讲解Transformer神经网络架构"
print(f"input_str: {input_str}")
# input_str: 用简单语言讲解Transformer神经网络架构

encoding = tiktoken.encoding_for_model("gpt-3.5-turbo")
tokens = encoding.encode(input_str)
print(f"tokens: {tokens}")
# tokens: [11883, 99337, 24946, 73981, 78244, 10414, 110, 50338, 47458, 55228, 252, 54493, 72456, 20119, 114, 78935]

num_tokens = num_tokens_from_string("用简单语言讲解Transformer神经网络架构", "cl100k_base")
print(f"num_tokens: {num_tokens}")
# num_tokens: 16

decode_input_str = encoding.decode(tokens)
print(f"decode_input_str: {decode_input_str}")
# decode_input_str: 用简单语言讲解Trans
### 深入理解 Transformer 模型 Transformer 是一种基于注意力机制的神经网络架构,最初由 Vaswani 等人在 2017 年提出的论文《Attention is All You Need》中引入[^2]。该模型彻底改变了自然语言处理 (NLP) 领域的传统方法,并成为许多现代大型语言模型的核心基础。 #### Transformer 的基本结构 Transformer 主要由两个部分组成:编码器(Encoder)和解码器(Decoder)。 - **编码器**负责接收输入序列并将其转化为上下文表示向量。这一过程依赖于多头自注意力机制来捕捉全局关系。 - **解码器**则利用编码器生成的上下文信息逐步生成目标序列。它同样采用自注意力机制以及交叉注意力机制来融合源端和目标端的信息。 以下是 Transformer 架构的关键组件: 1. **自注意力机制(Self-Attention Mechanism)**: 自注意力允许模型关注输入序列的不同位置,从而捕获长期依赖关系。这种特性使得 Transformer 能够有效处理长距离依赖问题。 2. **前馈神经网络(Feed-Forward Neural Networks)**: 每个子层之后都连接了一个全连接前馈网络,用于进一步变换特征空间。 3. **残差连接与归一化(Residual Connections and Normalization)**: 这些技术有助于缓解梯度消失问题并加速收敛[^5]。 #### 实现 Transformer 的在线编程教程 为了更好地理解和实现 Transformer,可以参考以下资源: 1. **官方 PyTorch 教程** 官方文档提供了详细的 Transformer 实现示例,适合初学者快速上手。以下是一个简单的代码片段展示如何定义一个基础的 Transformer 编码器模块: ```python import torch.nn as nn class TransformerModel(nn.Module): def __init__(self, input_dim, output_dim, num_heads=8, num_layers=6): super(TransformerModel, self).__init__() encoder_layer = nn.TransformerEncoderLayer(d_model=input_dim, nhead=num_heads) self.transformer_encoder = nn.TransformerEncoder(encoder_layer, num_layers=num_layers) self.fc_out = nn.Linear(input_dim, output_dim) def forward(self, src): out = self.transformer_encoder(src) out = self.fc_out(out) return out ``` 2. **Hugging Face Transformers 库** Hugging Face 提供了一套强大的工具包,支持多种预训练模型及其微调功能。对于希望直接使用成熟解决方案的研究者来说,这是一个理想的选择。 #### 学习建议 针对想要深入了解 Transformer 的学习者,《精通Transformer:从零开始构建最先进的 NLP 模型》是一本不可错过的书籍[^3]。书中不仅涵盖了理论基础知识,还包含了丰富的实战项目指导,能够帮助读者全面掌握 Transformer 技术栈。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值