DL基准模型训练伪代码
minGPT author: karpathy Andrej ✅ 解决问题 生成式文本任务,比如写文章、对话、续写句子。目标是给定前文,预测下一个词。 🛠️ 具体措施 输入一句话,例如:"我 爱 自然" → 转成数字编号 [23, 45, 67]。 构造训练样本: 输入 X = [X1, X2, X3, Y1, Y2] 标签 Y = [-1, -1, Y1, Y2, Y3](-1表示忽略不计算损失) 模型结构: 首层:词嵌入 + 位置编码 骨干:多层的 单向自注意力(只能看前面的词) + 前馈网络 尾层:分类头输出每个位置的词概率分布 训练时一次性并行预测多个词(只看前面上下文) 推理时串行生成:每生成一个词,就加到输入里继续生成下一个。 💥 损失函数 就像做 完形填空: 给前面几个字,猜后面是什么字。 猜错一个字就扣分,扣分规则是 交叉熵(预测概率分布和真实答案差多远)。 -1的位置不扣分(相当于没让你填)。 💼 工作流程 1String: ['X1', 'X2', ..., 'Xn'] =[dictionary]=> [k1, k2, ..., kn] # word2index 2 3# Train: 4X = [X1, X2, X3, Y1, Y2], Y = [-1, -1, Y1, Y2, Y3] 5Model = {(WordEmbed+PosEmbed) => (CausalSelfAttention+FFN)xN => (ClassHead)} 6# attn = A B C 7# A √ × × uni-directional 8# B √ √ × 9# C √ √ √ 10 11Z = Model(X) => [Z1, Z2, Z3, Z4, Z5] 12Y = [-1, -1, Y1, Y2, Y3] 13# Equal to Parallel Train 14(X1,X2,X3) =predict=> Y1 15(X1,X2,X3,Y1) =predict=> Y2 16(X1,X2,X3,Y1,Y2) =predict=> Y3 17 18loss = crossentropy(Z, Y, ignore=-1) # Zi => {P1,...,Pclass} multi-class task 19 20# Test: Serial generation 21give inp = [X1, X2, X3] 22Step 1: 23 Z = Model(inp) = [Z1,Z2,Z3] 24 Y = [-1,-1,Y1] 25 inp = inp + Y[-1] = [Z1,Z2,Z3,Y1] 26Step 2: 27 Z = Model(inp) = [Z1,Z2,Z3,Z4] 28 Y = [-1,-1,-1,Y2] 29 inp = inp + Y[-1] = [Z1,Z2,Z3,Y1,Y2] 30Step 3: 31 Z = Model(inp) = [Z1,Z2,Z3,Z4,Z5] 32 Y = [-1,-1,-1,-1,Y3] 33 inp = inp + Y[-1] = [Z1,Z2,Z3,Y1,Y2,Y3] 34 35out: [Z1,Z2,Z3,Y1,Y2,Y3] minBert ✅ 解决问题 理解类任务:比如问答、文本分类、句子关系判断(如是否上下句)、填补缺失词。 ...