Transformer 大语言模型(LLM)基石 - Transformer架构详解 - 输入嵌入层(Input Embeddings)详解以及算法实现

锋哥原创的Transformer 大语言模型(LLM)基石视频教程:

https://www.bilibili.com/video/BV1X92pBqEhV

课程介绍

本课程主要讲解Transformer简介,Transformer架构介绍,Transformer架构详解,包括输入层,位置编码,多头注意力机制,前馈神经网络,编码器层,解码器层,输出层,以及Transformer Pytorch2内置实现,Transformer基于PyTorch2手写实现等知识。

Transformer 大语言模型(LLM)基石 - Transformer架构详解 - 输入嵌入层(Input Embeddings)详解以及算法实现

前面我们说过输入嵌入层的作用是将原始的词语表示(通常是单词或子词)转换为高维的密集向量。每个单词或子词通过词嵌入(Embedding)转化为向量,模型之后将处理这些向量。

  • 功能:将输入的离散单词映射为连续的高维空间向量,便于后续的处理。

  • 结构:该层的输出是一个序列的嵌入矩阵,矩阵的维度为batch_size, seq_len, embedding_dim。

比如我们有一组数据集:

仅仅包含三个句子

N 表示总数,最后的结果是去重之后的词汇量

注意点:这里举例比较简单,是英文,我们直接空格分词就行。如果是中文的话,我们一般用jieba分词。分词结果去重后,就是总的词汇量。

如何将这些词在计算机中表示,以及进行运算。

我们这里介绍先对词进行编码,然后向量化。

首先是Encoding 编码

为每个单独的单词分配一个唯一的数字。

然后就是计算 Embeding

然后我们设计好每个词的词嵌入维度,比如是6,相当于每个词有6个特征。

原始论文使用 512 维向量,这里使用嵌入向量的维度为 6,上面是原始数据,下面是解析之后的数据。

我们新建一个Python项目,终端安装下PyTorch

复制代码
pip install torch==2.9.1 torchvision==0.24.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

代码实现:

复制代码
import math
​
import torch
from torch import nn
​
​
# 输入嵌入层类
class Embeddings(nn.Module):
    def __init__(self, vocab_size, embedding_dim):  # vocab_size:词表大小 embedding_dim:词嵌入维度的大小
        super().__init__()
        self.embedding_dim = embedding_dim
        self.embedding = nn.Embedding(vocab_size, embedding_dim)
​
    def forward(self, x):
        embed = self.embedding(x)
        # 缩放词嵌入(原始Transformer论文中的关键细节) 防止向量初始值过大,稳定训练
        return embed * math.sqrt(self.embedding_dim)
​
​
if __name__ == '__main__':
    vocab_size = 2000  # 词表大小
    embedding_dim = 512  # 词嵌入维度的大小
    embeddings = Embeddings(vocab_size, embedding_dim)
    embed_result = embeddings(torch.tensor([[1999, 2, 99, 4, 5], [66, 2, 3, 22, 5], [66, 2, 3, 4, 5]]))
    print(embed_result.shape)
    print(embed_result)

运行结果:

复制代码
torch.Size([3, 5, 512])
tensor([[[ -6.6145,   0.7250, -25.3896,  ...,   1.6865, -12.6732,  -5.5132],
         [ 19.5802,  -1.6906, -36.3070,  ...,  -5.9230,   9.9505,  49.2125],
         [  7.9797,  11.9496, -15.4930,  ...,  72.7194,  10.6238, -19.9825],
         [ 16.5478,  16.9025,  33.3123,  ..., -14.4243,  12.2261,  53.3915],
         [  5.8041,   7.9344,  -8.1885,  ..., -45.0107,  30.0579,  21.0987]],
​
        [[-24.4609,  12.4930, -24.3712,  ...,  13.3388, -16.3208, -23.2783],
         [ 19.5802,  -1.6906, -36.3070,  ...,  -5.9230,   9.9505,  49.2125],
         [ 58.9308,   2.7596,   2.6795,  ...,   0.6120,  10.8724,  12.0722],
         [  0.4406, -24.8641, -19.6754,  ..., -21.1263, -13.1530,  35.8521],
         [  5.8041,   7.9344,  -8.1885,  ..., -45.0107,  30.0579,  21.0987]],
​
        [[-24.4609,  12.4930, -24.3712,  ...,  13.3388, -16.3208, -23.2783],
         [ 19.5802,  -1.6906, -36.3070,  ...,  -5.9230,   9.9505,  49.2125],
         [ 58.9308,   2.7596,   2.6795,  ...,   0.6120,  10.8724,  12.0722],
         [ 16.5478,  16.9025,  33.3123,  ..., -14.4243,  12.2261,  53.3915],
         [  5.8041,   7.9344,  -8.1885,  ..., -45.0107,  30.0579,  21.0987]]],
       grad_fn=<MulBackward0>)

注意点:传入的词向量数值大小不能大于等于定义的vocab_size词表大小。否则越界报错

比如 改成2000

就会报错:

相关推荐
Dawson Zhu43 分钟前
【LLM推理与Serving⑪】MoE推理与MLA:DeepSeek-V3架构下的显存与通信权衡
人工智能·语言模型·架构·aigc·agi
伞伞悦读2 小时前
【第81期】特征缩放怎么选:标准化、MinMax 与 Robust 的原理、泄漏对照和完整实验
人工智能·python·深度学习·机器学习
jay神4 小时前
基于深度学习的交通流量预测系统(Web 版)
前端·人工智能·深度学习·yolo·计算机毕业设计
Alluxio5 小时前
Alluxio + OCI:为 AI 工作负载实现亚毫秒访问延迟与可扩展吞吐
运维·数据库·人工智能·分布式·缓存·ai·语言模型
硅谷秋水5 小时前
扩展机器人智能体的在线探索能力
人工智能·语言模型·机器人
硅谷秋水7 小时前
PhysicalWords:一种用于构建机器人操作中潜推理过程的词汇体系
人工智能·机器学习·计算机视觉·语言模型·机器人
武子康9 小时前
H3-World 的 11.3 小时训练数据,是怎样对齐成动作监督的?
大数据·人工智能·深度学习
花月mmc10 小时前
【FPGA】神经网络内容简介预告
嵌入式硬件·深度学习·神经网络·fpga开发
在所不辞兄10 小时前
为什么在标签噪声场景下,识别双重下降拐点有助于防止模型记忆异常数据?
人工智能·深度学习·神经网络·机器学习
一起学安全技术10 小时前
拆大模型 03|注意力的一句话版本:不用论文讲清 Attention
深度学习·算法·语言模型·transformer