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

就会报错:

相关推荐
liulanba1 天前
大模型训练参数调优完整指南
人工智能·深度学习
TonyLee0171 天前
pytorch深度学习训练随机种子设置
人工智能·pytorch·深度学习
生信碱移1 天前
神经网络单细胞预后分析:这个方法直接把 TCGA 预后模型那一套迁移到单细胞与空转数据上了!竟然还能做模拟敲除与预后靶点筛选?!
人工智能·深度学习·神经网络·算法·机器学习·数据挖掘·数据分析
SmartBrain1 天前
解读:《华为变革法:打造可持续进步的组织》
大数据·人工智能·华为·语言模型
renhongxia11 天前
一个多智能体Text2SQL框架,使用小语言模型和执行反馈
人工智能·语言模型·自然语言处理
Kakaxiii1 天前
【2025.6 Nature】Large language models for disease diagnosis: a scoping review
人工智能·语言模型·自然语言处理
拉姆哥的小屋1 天前
从零到一:基于深度学习的波纹壳结构多目标优化系统(NSGA-II + 神经网络代理模型)
人工智能·深度学习·神经网络
STLearner1 天前
2025时空数据研究工作总结
大数据·人工智能·python·深度学习·学习·机器学习·智慧城市
极客BIM工作室1 天前
AI导读AI论文: FinGPT: Open-Source Financial Large Language Models
人工智能·语言模型·自然语言处理
Coding茶水间1 天前
基于深度学习的轮船分类检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
深度学习·yolo·分类