LLM学习笔记

Q1:SFT时,计算LOSS

​ LLM是自回归生成模型,每次只会生成一个 token,难道 SFT 时,对于一个 (L, D) 的数据,要调用 L 次LLM去计算loss?

A1:

​ 在每个前向传播过程,模型一次性生成整个序列的概率分布,而不是逐个生成令牌。对于一个(L, D)的输入,那么Attention后,我们还是会得到一个(L, D)输出。只不过(i, D)这个向量中存着1~i中间所有的信息,那么用它就可以生成第 i + 1 个位置的内容。这也是为什么generate函数中每次会取 logits[:, -1] 去生成新的内容。

Q2: SFT时,数据为什么prompt+input+output

​ LLM是自回归生成模型,在训练时候为什么不是用 prompt + input 作为输入,然后得到 output 再去与真实的 label 计算 loss 更新参数呢?

A2:

​ 首先,如果要是像问题中这种策略去训练,一来每次要调用 l e n g t h o u t p u t length_{output} lengthoutput 次模型,二来模型生成的内容和 label 长度不一定一样,计算 loss 会出问题。其中这主要是因为我们在计算loss时,pytorch中要求loss_function(input, label)中的 input, label 的shape要一致。然后为了加速收敛,这里其实是一种teacher force 的策略,就在第i个位置,我们会得到一个hidden_state,然后第i+1个位置的token应该由这个hidden_state去生成,但是我们强制让第i+1个位置的tokenlabel中这个位置的token一样,也就是在相对正确的环境下再去生成生成第i+1个位置的hidden_state

Q3:SFT时,构造lable

​ SFT时,构造的lable为什么要把prompt+input部分mask掉。

A3:

​ 像Q1中那样,我们生成的时候是一次性把整个序列的概率分布拿到。然后我们其实不想模型去学会对齐prompt+input这部分的能力(因为没用),所以把prompt+input mask 掉,只计算output部分的loss。

相关推荐
WIN赢1 小时前
【数据结构与算法_学习精华】
学习
黎宇幻生5 小时前
Java全栈学习笔记39
java·笔记·学习
诸葛悠闲7 小时前
XCP协议在以太网上实现的配置
学习
遇印记8 小时前
大二java学习笔记:二维数组
java·笔记·学习
爱吃甜品的糯米团子9 小时前
Linux 学习笔记之进程管理、网络基础与常用软件安装
linux·网络·学习
bnsarocket10 小时前
Verilog和FPGA的自学笔记6——计数器(D触发器同步+异步方案)
笔记·fpga开发·verilog·自学·硬件编程
Purple Coder10 小时前
面试-上海电力大学研一的学习经验
学习
LK_0711 小时前
【Open3D】Ch.3:顶点法向量估计 | Python
开发语言·笔记·python
饮浊酒11 小时前
Python学习-----小游戏之人生重开模拟器(普通版)
python·学习·游戏程序
li星野11 小时前
打工人日报#20251011
笔记·程序人生·fpga开发·学习方法