Skip to content

Commit

Permalink
修复了数学公式中的一些错误和格式问题。更新了图片文件的引用。修正了一些拼写错误。
Browse files Browse the repository at this point in the history
  • Loading branch information
luhengshiwo committed Sep 29, 2024
1 parent 55fbd7d commit fc499e1
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 14 deletions.
4 changes: 2 additions & 2 deletions 01-第一章-预训练/最美的数学公式-欧拉公式.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@ $$
- 虚数单位 $\sqrt {-1}$ 的记法 $i$;
- 圆周率的记法 $\pi$ ;
- 求和符号 $\Sigma$ ;
- 差分符号 $\Delta$
- 差分符号 $\Delta$ ;
- 用小写字母表示三角形的边和用大写字母表示三角形的角等;
- 给出了自然对数的底数$e$定义,其也称为欧拉数Euler's number;
- 给出了自然对数的底数$e$定义,其也称为欧拉数(Euler's number)
- 此外,他还在力学、流体动力学、光学、天文学和乐理领域有突出的贡献。

欧拉是18世纪杰出的数学家,同时也是有史以来最伟大的数学家之一。他也是一位多产作者,其学术著作有60-80册。
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,19 +55,19 @@ Gut-feeling:我们的目标是计算O,一般来说,我们需要获取所
## Safe Softmax
对于softmax,公式如下:

![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/5.PNG)
![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/5.png)

x_i 可能会非常大,那e^x_i会溢出:float16最大65536,那x_i大于12时,e^x就超过有效数字了。所以事实上的公式是safe-softmax:

![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/6.PNG)
![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/6.png)

其中:

![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/7.PNG)
![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/7.png)

基于此,我们可以总结下safe-softmax的计算步骤,称之为3步算法

![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/8.PNG)
![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/8.png)

这就是传统的self-attention算法,需要我们从1到N迭代3次。{x_i}是由QK计算出来的pre-softmax,这意味着我们需要读取Q,K三次,有很大的I/O开销。

Expand All @@ -78,39 +78,39 @@ x_i 可能会非常大,那e^x_i会溢出:float16最大65536,那x_i大于12

为了移除对N的依赖,我们可以创建另一个序列作为原始序列的替代。即找到一个等比数列(递归形式),去除N的依赖。

![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/9.PNG)
![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/9.png)

这个递归形式只依赖于m_i 和 m_i-1,我们可以在同一个循环中同时计算 m_j 和 d'_j.

![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/10.PNG)
![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/10.png)

这是 Online Softmax 论文中提出的算法。但是,它仍然需要两次传递才能完成 softmax 计算,我们能否将传递次数减少到 1 次以最小化全局 I/O?

## FlashAttention

不幸的是,对于 softmax 来说,答案是不行,但在 Self-Attention 中,我们的最终目标不是注意力得分矩阵 A,而是等于 A V 的 O 矩阵。我们能找到 O 的一次递归形式吗?将 Self-Attention 计算的第 k 行(所有行的计算都是独立的,为了简单起见,我们只解释一行的计算)公式化为递归算法:

![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/11.PNG)
![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/11.png)

我们将公式 12 中的 a_i替换为公式 11 中的定义:

![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/12.PNG)
![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/12.png)

这仍然取决于 m_N 和 d_N,这两个值在前一个循环完成之前无法确定。但我们可以再次使用Online softmax节中的替代技巧,即创建替代序列 o'

![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/13.PNG)
![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/13.png)

我们可以找到 o_i 和 o_i-1 之间的递归关系

![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/14.PNG)
![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/14.png)

我们可以将 Self-Attention 中的所有计算融合到一个loop中:

![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/15.PNG)
![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/15.png)

此时,所有的数据都非常小并且可以加载到GPU的SRAM里面,由于该算法中的所有操作都是关联的,因此它与平铺兼容。如果我们逐个平铺地计算状态,则该算法可以表示如下:

![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/16.PNG)
![alt text](assest/看懂FlashAttention需要的数学储备是?高考数学最后一道大题!/16.png)

## 总结
FlashAttention最核心的部分是构造出一个递归(等比数列),让部分结果可以累计到全局,这样就不用一下子加载所有值并分步计算了。
Expand Down

0 comments on commit fc499e1

Please sign in to comment.