详细内容或原文请订阅后点击阅览
一次学习一个 Triton 内核:Softmax
关于快速、可读且支持 PyTorch 的 softmax 内核,您需要了解的所有信息这篇文章《一次学习 Triton 一个内核:Softmax》首先出现在《走向数据科学》上。
来源:走向数据科学在本系列的上一篇文章中,计算机科学各个领域的运算:矩阵乘法。它在神经网络中大量用于计算线性层的激活。然而,激活本身很难解释,因为它们的值和统计数据(平均值、方差、最小-最大幅度)在层与层之间可能有很大差异。这是我们使用激活函数的原因之一,例如逻辑函数(又名 sigmoid),它可以投影 [0; 中的任何实数; 1]范围。
上一篇文章[0; 1]
softmax函数,也称为归一化指数函数,是sigmoid的多维推广。它将原始分数 (logits) 向量转换为 M 个类别的概率分布。我们可以将其解释为加权平均值,其表现为平滑函数并且可以方便地微分。它是点积注意力、语言建模和多项逻辑回归的重要组成部分。
概率分布 中号 加权平均值 平滑函数 差异化在本文中,我们将介绍:
- 在 Triton 中实现高效的 softmax 内核。实现向后传递 (autograd)。优化:缓存修改器和自动调整。
自动分级
如果你还不熟悉 Triton,请参阅之前的文章!
免责声明:除特别说明外,所有插图和动画均由作者制作。
定义
softmax 定义如下:
归一化确保向量总和为 1,以便可以将其解释为有效的概率分布。
1 数值溢出 float16 65 504 exp(11)exp(z_i)
溢出
缓解此问题的常见技巧是从每个元素中减去输入向量的最大值,这样新的最大值在求幂之前为 0,在求幂之后为 1。
0简单的实现
两次归约操作 最大 总和在线 Softmax
2x
