LLM 学习 - 1

@ShiKaiWi

基本流程

文本
→ Tokenizer(BPE分词)
→ Token ID 整数序列 [seq_len]
→ Embedding层查表
→ 语义向量 [seq_len, d_model]
→ 叠加位置编码(同形状逐元素相加)
→ 融合位置的输入向量 [seq_len, d_model]
→ Decoder层(自注意力 + 前馈网络)
→ 上下文特征向量 [seq_len, d_model]
→ 输出层映射 + Softmax
→ 下一个Token概率分布

细节理解

  • tokenizer:本质上是将 文字转换成数字,这一点通过 词表 来达到效果的,而词表是通过实现训练过来的,训练的过程实际上就是构建一个 token => id 这个映射的流程,此外 token 并非一个字母、一个单词、一个中文汉字,而是几个 utf8 的字节串,也是这样可以实现跨语言(任何语言都可以通过 utf8 来达到效果),训练出来的不仅仅是词表,还有分词的规则(实际上就是判断连续的 utf8 字节是否应该被划分成一个 token),因此词表也是最先确定的,确定了之后,才会进行模型的训练,不同模型的词表也不一样
  • Embedding:将用户的文字变成了一个一个整数序列后,可以根据 Embedding 表,维度是 [vocab_size, d_model],行数就是所有的 token 种类,d_model_input 就是后续模型的输入维度,需要注意的是 Embedding 是和训练一起生成的
  • 位置编码:为每一个位置的语义向量,加上一个不同的向量,这个向量是可以叫做位置向量,存在好几种位置向量:
    • 正弦位置编码:固定算法,不用训练
    • 可学习 PE:需要训练
    • 现在主流 RoPE:数学规则为主,带一点学习
  • 进入 Decoder 层进行推理,得到推理出来的向量,维度也是 [seq_len, d_model]
  • 输出层映射是 Embedding 的转置,将 [seq_len, d_model] 变形成 [seq_len, vocab_size]
  • 再进行一次 softmax 的转换,可以就可以通过将最大概率的下标对应的 词表中的 token 取出来即可

这其中的最神奇的应该就是 Decoder 层了,后面再学习理解一下。

Comments 0

No comments yet. Be the first!