当前位置: 首页 > java >正文

工程师转型算法工程师 深入浅出理解transformer-手搓板

以下部分引用台湾大学李宏毅教授的ppt 自己理解解释一遍(在youtobe 上可以搜索李宏毅即可)

首先先来看transformer的架构图

Embedding

我们先从Imput Embedding 跟 OutPutEmbedding 开始,让我们用 bert 模型来做一个解释

从huggingface上下载的bert-base-chinese模型中 有一个vocab.txt 放的是这个模型所有能认识的字;

在config.json 中可以看到这个模型最大做事的vocab 是21128 

让我们来写个py测试类来验证编码的过程

from transformers import AutoTokenizer, BertTokenizer#加载字典和分词器
token = BertTokenizer.from_pretrained("bert-base-chinese")
# print(token)sents = ["价格在这个地段属于适中, 附近有早餐店,小饭店, 比较方便,无早也无所"]#批量编码句子
out = token.batch_encode_plus(batch_text_or_text_pairs=[sents[0]],add_special_tokens=True,#当句子长度大于max_length时,截断truncation=True,max_length=50,#一律补0到max_length长度padding="max_length",#可取值为tf,pt,np,默认为listreturn_tensors=None,#返回attention_maskreturn_attention_mask=True,return_token_type_ids=True,return_special_tokens_mask=True,#返回length长度return_length=True
)
#input_ids 就是编码后的词
#token_type_ids第一个句子和特殊符号的位置是0,第二个句子的位置1()只针对于上下文编码
#special_tokens_mask 特殊符号的位置是1,其他位置是0
print(out)
for k,v in out.items():print(k,";",v)#解码文本数据
# print(token.decode(out["input_ids"][0]),token.decode(out["input_ids"][1]))

我们可以看到第一字价是字典的817的位置,第一张图已经展示了;整个流程简单的说明了transfomer的Embedding 过程,就是把文字变成 Token的过程

当然后面的GPT3 这些其他的transfomer 都把这个词典vocab.txt 给隐藏起来了;

多头注意力机制

第一步 embding完后把相近的token 放到一个多维矩阵里面了;这样相近的词就靠的更近了

需要加入位置编码,这样矩阵才能感知句子的词的前后顺序

自注意力计算过程:

  • 对每个输入token,GPT计算三个向量:查询(Q)、键(K)和值(V)
  • 这些向量通过输入与学习到的权重矩阵相乘得到
  • 然后计算Q与K的点积来确定注意力分数
  • 最后将注意力分数用于对V进行加权求和

 这块其实理解的不是很好

Feed Forward

前向传播是模型预测/推理的过程,如图右侧所示。它的步骤非常直观:

  1. 将数据输入到神经网络
  2. 数据在网络内部经过一系列数学计算
  3. 网络输出预测结果

这就像人类的思考过程:接收信息 → 思考处理 → 得出结论。

输出线性层与Softmax

        将解码器输出转换为概率分布

完整流程:

在完整的处理流程中:

  1. 输入经过嵌入层、位置编码和多层 Transformer 块处理
  2. 最终的隐藏状态通过一个线性层(通常是与输入嵌入共享权重的)
  3. 线性层输出经过 softmax 函数转换为概率分布
  4. 这个概率分布就是最终的输出,表示下一个 token 可能是词表中每个词的概率

对于像 GPT 这样的自回归模型,在每个位置上模型输出的是词表中所有可能 token 的概率分布,最高概率的 token 通常被选为该位置的预测结果。

这些概率是模型对"下一个 token 应该是什么"的预测,是用于实际生成文本或计算损失函数的关键输出。 注意GPT 只使用transformer 中的解码器部分

更多神经网络相关的学习笔记见我的github: https://github.com/caicongyang/ML2LLM/blob/main/LLM/neural_network_fundamentals_simplified.md

http://www.xdnf.cn/news/4568.html

相关文章:

  • zst-2001 历年真题 知识产权
  • 端口安全配置
  • Docker+Kubernetes落地指南:从单机到集群的平滑迁移
  • 【大模型系列篇】Qwen3思考预算及思考模式切换实现原理探索
  • Qt 中基于 spdlog 的高效日志管理方案
  • nginx 上传文件,413 request entity too large
  • 计划评审技术PERT
  • Yii2.0 模型规则(rules)详解
  • STM32 CAN总线
  • Linux网络编程day6 下午去健身
  • MATLAB导出和导入Excel文件表格数据并处理
  • 大模型范式转移:解码深度学习新纪元
  • 【Day 21】HarmonyOS实战:从智慧医疗到工业物联网
  • 【FreeRTOS-消息队列】
  • PyQt5 实现自定义滑块,效果还不错
  • grpc到底是啥! ! !!
  • shell操作文件上传
  • 第3章 模拟法
  • SDC命令详解:使用get_ports命令进行查询
  • 浅谈广告投放从业者底层思维逻辑
  • C语言 指针(8)
  • 第七章 模板制作工具
  • ubuntu 挂载硬盘
  • 当“信任”遇上“安全”:如何用Curtain Logtrace记录文件操作活动 守护团队与数据的双重底线?
  • 2398.预算内的最多机器人数目 滑动窗口+单调队列
  • springboot集成langchain4j记忆对话
  • 通道注意力-senet
  • HDMI布局布线
  • Loly: 1靶场渗透
  • 大模型 Function Calling 学习路线图