您现在的位置是:恒山凌易网 > 时尚
Llama也中招,混合精度下位置编码竟有大坑,百川智能给出修复妄想
恒山凌易网2024-11-05 17:19:00【时尚】6人已围观
简介位置编码技术是一种可能让神经收集建模句子中 Token 位信托息的技术。在 Transformer 大行其道的时期,由于 Attention 妄想无奈建模每一个 token 的位信托息,位置编码Pos
位置编码技术是中招置编一种可能让神经收集建模句子中 Token 位信托息的技术 。在 Transformer 大行其道的混合时期,由于 Attention 妄想无奈建模每一个 token 的精度位信托息,位置编码(Position embedding) 成为 Transformer 颇为紧张的下位想一个组件 。钻研职员也提出了林林总总的码竟位置编码妄想来让收集建模位信托息 ,Rope 以及 Alibi 是坑百当初最被普遍接管的两种位置编码妄想。
可是川智出修最近来自百川智能的钻研发现 ,Rope 以及 alibi 位置编码的复妄主流实如今低精度(特意是 bfloat16) 下存在位置编码碰撞的 bug, 这可能会影响模子的磨炼以及推理 。而且当初大部份主流开源模子的中招置编实现都存在该下场,连 llama 民间代码也中招了。混合
还患上从位置编码算法提及
为了弄清晰这个下场 ,精度患上先从位置编码的下位想算法道理提及 ,在 Transformer 妄想中 ,码竟所有 Attention Block 的坑百输入都市先经由位置编码,再输入收集妨碍后续处置 。川智出修隧道的 Attention 妄想是无奈精确感知到每一个 token 的位信托息的 ,而对于语言的良多使命来说,语句的挨次对于语义信息的影响黑白常大的 ,为了建模 token 之间的位置关连,Transfomer 原始论文中引入地位编码来建模位信托息 。
为了让模子更好地建模句子的位信托息,钻研职员提出了多种位置编码妄想,meta 开源的 llama [4] 模子接管了 Rope [5] 妄想,使患上 Rope 成为在开源社区被普遍接管的一种位置编码妄想 。而 Alibi 编码因其精采的外推性也被普遍运用 。
清晰低精度下的位置编码碰撞以前,先往返忆一下相关算法道理。
Sinusoidal 位置编码
这是 Transformer 原始论文中提出的位置编码措施。它经由运用差距频率的正弦以及余弦函数来为每一个位置发生一个配合的编码。抉择三角函数来天生位置编码有两个精采的性子 :
1)编码相对于位信托息 ,数学上可能证实 PE (pos+k) 可能被 PE (pos) 线性展现, 这象征着位置编码中搜罗了相对于位信托息。
2)短途衰减 :差距位置的 position encoding 点乘服从会随着相对于位置的削减而递减 [1] 。
Rope
Rope 是当初开源社区运用最普遍的一种位置编码妄想 , 经由相对于位置编码的方式实现相对于位置编码,在引入相对于位信托息的同时坚持了相对于位置编码的优势(不需要像相对于位置编码同样去操作 attention matrix)。令 f_q, f_k 为 位置编码的函数,m 展现位置 ,x_m 展现该位置 token 对于应的 embedding,咱们愿望经由位置编码后的 embedding 点积仅以及相对于位置无关 ,则可能有公式 :
下面公式中 g 是某个函数 ,展现内积的服从只以及 x_m 以及 x_n 的值 ,以及两者位置的相对于关连 (m-n) 无关在 2 维的情景下可能推导出(详细推导历程可参考原论文):
由于矩阵乘法线性累加的性子,可能拓展到多维的情景可患上 :
为了引入短途衰减的特色 ,Rope 中 \theta 的选取抉择了 Transformer 原始论文中 sinusoidal 公式。
Alibi
Alibi 是google宣告在 ICLR2022 的一篇使命 ,Alibi 主要处置了位置编码外推下场差的痛点 ,算法脑子颇为的重大 ,而且颇为直不雅 。与直接加在 embedding 上的相对于位置编码差距,Alibi 的脑子是在 attention matrix 上施加一个与距离成正比的表彰偏置,表彰偏置随着相对于距离的削减而削减。在详细实现时,对于每一个 head 会有一个超参 m 来操作表彰偏置随着相对于距离削减的幅度(斜率) 。
论文服从展现 Alibi 极大的提升了模子的外推功能,16k token 的输入依然可能很好的反对于 。
混合精度下位置编码的 bug
从下面的算法道理中,不论是 rope 的 cos (m\theta) 仍是 alibi 的 i-1(m, i 代表 postion id), 需要为每一个位置天生一个整型的 position_id, 在高下文窗口比力大的时候,百川智能发现当初主流的位置编码实如今混合精度下都存在由于低精度(float16/bfloat16) 浮点数展现精度缺少导致位置编码碰撞的下场 。特意当模子磨炼(推理)时高下文长度越来越长