Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon 变压器中的注意机制如何改善代码生成


变压器中的注意机制如何改善代码生成


变压器中的注意力机制从根本上可以通过使模型在产生每个输出令牌的同时选择性地关注输入序列的不同部分,从而改善了代码的生成。这会导致更多的上下文感知和连贯的代码生成。注意机制有助于捕获源代码中的远程依赖性,结构模式和语义细微差别,这对于生成句法正确和逻辑上一致的程序至关重要。它的多面功能比依赖固定长度上下文表示的传统序列模型具有显着优势。

###变形金刚中关注的基本概念

在变压器中,注意力是一种将一组输出向量计算为输入值向量加权总和的技术。权重是根据查询(表示生成输出的当前位置)和一组密钥向量(表示输入序列中的所有位置)之间的兼容得分动态计算的。这使模型可以在生成每个令牌时“参加”或关注输入的相关部分,而不是统一处理整个序列或将其压缩到固定尺寸的矢量中。

缩放点产生关注的核心公式是:

$$
\ text {注意}(q,k,v)= \ text {softmax} \ left(\ frac {qk^t} {\ sqrt {d_k>} \ right)v
$$

其中$$ q $$,$$ k $$和$$ v $$分别是查询,密钥和值的矩阵,而$$ d_k $$是用于缩放尺寸的密钥的维度。 SoftMax函数将查询和键之间的DOT产品得分转换为概率分布,然后将其用于加权值。

###捕获代码中的上下文和依赖关系

编程代码固有地具有长期依赖性;在函数开头声明的变量可以在许多地方使用。诸如RNN或CNN之类的传统模型由于其顺序或局部接受性而努力维持如此长期的上下文关系。相比之下,变形金刚中的自我发项机制可以直接将每个令牌与其他所有令牌联系起来,而不管它们在序列中的距离如何。

自我注意力使每个令牌位置能够同时从输入序列中的所有其他位置收集信息。例如,在生成闭合括号时,该模型可以参与其相应的打开括号,这可能是较早的几行。这种完整的连接允许模型更有效地编码句法和语义结构,这对于生成无错误的代码至关重要。

###多头关注不同的环境

变形金刚采用多头注意力,其中在输入嵌入的不同线性投影上进行了多个平行注意操作(头部)。每个头部都学会着眼于输入的不同方面,例如变量名称,控制流构建体或功能边界。这种多头设置提供了几个好处:

- 它允许模型共同参与来自不同表示子空间的信息。
- 它结合了输入序列的多种观点,扩大了模型可以学习的范围。
- 它通过不依赖单个注意力表示来提高鲁棒性。

这些多个头的输出是连接的,并线性转换以形成用于生成输出令牌的最终表示形式。

###编码器decoder注意来源目标对齐

在代码生成中,变形金刚通常采用编码器架构架构,其中编码器将输入描述(例如自然语言问题规范)处理为上下文表示,而解码器则生成相应的代码序列。解码器使用编码器折线(交叉注意)在每个解码步骤中选择性地关注编码输入的相关部分。输入和输出之间的这种对齐有助于模型生成相关和精确的代码段,这些代码段与输入提示符中表示的意图非常匹配。

###因果关系和蒙面的关注,以进行自回归产生

在生成代码令牌时,解码器会使用因果(蒙版)自我注意力来确保对位置的预测$$ i $$仅取决于以前的令牌$$