手写LLM(2): 模型训练及代码详解
文章目录
-
- 1. 模型原理
- 2. 分词器tokernizer的训练
- 3. 利用tokernizer对语料分词
- 4. LLM 代码详解
-
- 4. 1 模型效果说明
- 4. 2 模型代码
- 4. 3 训练代码
- 4. 4 推理代码
在上文中,主要介绍了tokenizer的实现。我们将text 拆分成token,每个token会映射为一个id。实现将自然语音映射数字id,这些数字id最终输入到模型中,通过embedding进行词向量化。
在本文中,主要是介绍基于transformer的llm模型的原理, 以及准备训练的语料。
1. 模型原理
Transformer模型最早是google发明的,模型主要分为两部分:Encoder (编码器)和Decoder(解码器), Encoder 负责将输入(语言序列),编码为隐藏层。然后Decoder把隐藏层映射为语言序列。
这种Encoder-Decoder结构,比较适合做一些翻译或者QA相关的问题。比如左边输入的是问题,右边对应生成答案。这种结构要求,对训练数据进行标注,将语料准备为问题+答案的方式,让模型来训练,数据准备不太容易实现。虽然它也具备生成的能力,但他还是依赖于encoder模块对问题的编码。
openai在发明chatgpt的时候,它将encoder层去掉了,只保留了右边decode