输入 Embedding 与 LM Head 为什么常共享权重?
先用自己的话答,再看参考说法
60 秒是练习上限,不是必须凑满。原理题讲清因果,设计题讲清约束,项目题只讲真实证据。
别照着背。参考说法只用于对照;直接回答问题,简单题说清楚就收尾。项目题只用自己的经历和数字。
参考内容当前已显示;开始口述后会暂时隐藏。
面试时怎么答
直接写出输入矩阵 \(E\) 与输出 \(E^\top\) 的关系:输入端查表得到 Token 向量,输出端用隐藏状态与同一矩阵计算词表 Logit。共享能减少一个 \(V\times d\) 参数矩阵,也把输入与输出词义空间联系起来。追问限制时,说明角色被绑定、维度必须兼容,不同维时需投影。
可以这样答:
输入 Embedding 用矩阵 \(E\) 把 Token id 映射到隐藏向量,LM Head 则用隐藏状态乘 \(E^\top\) 得到词表 Logit。Weight Tying 让这两处共享同一个矩阵,减少约 \(V\times d\) 个参数,也让“表示一个词”和“预测一个词”使用相关几何空间。它要求输入、输出维度兼容;若结构角色差异很大,强行共享也可能限制表达。
核心回答
设词表大小为 \(V\)、隐藏维度为 \(d\),输入嵌入矩阵可写成 \(E\in\mathbb{R}^{V\times d}\)。模型读取 token \(x\) 时取出 \(E[x]\);输出层则把末层隐藏状态 \(h\in\mathbb{R}^d\) 投影成词表 logits。若共享权重,输出计算为 \(z=Eh+b\),不再训练独立的 \(W_{\mathrm{out}}\in\mathbb{R}^{V\times d}\)。在常见 Linear(d,V) 的存储约定中 LM Head 权重就是同一个 \(V\times d\) Parameter;只有把词向量按列写成 \(d\times V\) 时,公式才记为 \(E^\top h\),不能混用两套约定。
这样通常能少用约 \(Vd\) 个参数,并让同一组词向量同时受到“作为输入如何表示”和“作为输出如何被预测”两条训练信号约束。它是一种有效的参数共享与归纳偏置,但不是任何架构都必须采用:输入、输出词表不同,或隐藏维度与嵌入维度不一致时,需要独立矩阵或额外投影。
展开说明
不共享时,可写为 \(e_x=E_{\mathrm{in}}[x]\)、\(z=W_{\mathrm{out}}h+b\),两张大矩阵分别包含 \(Vd\) 个参数;共享后令 \(W_{\mathrm{out}}=E_{\mathrm{in}}\),参数从约 \(2Vd\) 降为 \(Vd\),偏置不受影响。由于交叉熵会对所有词表 logits 产生梯度,共享矩阵既接收输入端被查表位置的梯度,也接收输出分类器方向的梯度。
共享并不意味着输入语义与输出决策完全相同。Transformer 中间层仍可把输入表示变换到适合预测的空间,LM Head 前也可增加归一化或投影。若模型使用 factorized embedding、不同的源/目标词表、多模态新增 token,能否直接共享取决于维度和 token 对齐关系。
工程实践
实现时应检查框架是真正引用同一 Parameter,还是仅在初始化时复制了数值;保存、加载、量化和 LoRA 注入后也要复查别名关系。扩词表时输入 Embedding 和 LM Head 必须同步扩展;若二者共享,通常只需初始化同一批新行。比较方案时同时记录参数量、验证损失和下游表现,不应只因节省显存就断言共享一定更好。
常见追问
- 共享权重能少多少参数? 若原本输入矩阵和输出矩阵都为 \(V\times d\),共享后少一张矩阵,即约 \(Vd\) 个参数;输出 bias 通常仍独立保留。
- 两条梯度会不会互相冲突? 可能存在取舍,但共同优化也构成有用的正则化。是否获益依赖数据、模型容量和任务,应该通过消融确认。
- 隐藏维度和 Embedding 维度不同还能共享吗? 不能直接相等共享,可先用一个投影把隐藏状态映射到嵌入维度,或保留独立 LM Head。
一句话复习
Weight Tying 用同一张 \(V\times d\) 矩阵完成 token 查表和词表预测,节省约 \(Vd\) 参数,并耦合输入表示与输出分类器的学习。
参考资料
评论与补充
评论会直接显示在这道题下面。可以写自己的答法、继续追问或指出错误,不需要 GitHub 账号,也不会跳转到 Issue;内容会公开,请勿填写个人隐私、公司机密或受保密约束的材料。
正在连接站内评论服务…
正在加载评论…
还没有评论,你可以先写下自己的理解或追问。