diff --git "a/Textbook/\347\254\2544\347\253\240-\347\237\251\351\230\265\350\277\220\347\256\227\344\270\216\350\256\241\347\256\227\346\234\272\344\275\223\347\263\273\347\273\223\346\236\204/4.1-\346\267\261\345\272\246\345\255\246\344\271\240\347\232\204\350\256\241\347\256\227\346\250\241\345\274\217.md" "b/Textbook/\347\254\2544\347\253\240-\347\237\251\351\230\265\350\277\220\347\256\227\344\270\216\350\256\241\347\256\227\346\234\272\344\275\223\347\263\273\347\273\223\346\236\204/4.1-\346\267\261\345\272\246\345\255\246\344\271\240\347\232\204\350\256\241\347\256\227\346\250\241\345\274\217.md" index 16f710ba..cc3eda6e 100644 --- "a/Textbook/\347\254\2544\347\253\240-\347\237\251\351\230\265\350\277\220\347\256\227\344\270\216\350\256\241\347\256\227\346\234\272\344\275\223\347\263\273\347\273\223\346\236\204/4.1-\346\267\261\345\272\246\345\255\246\344\271\240\347\232\204\350\256\241\347\256\227\346\250\241\345\274\217.md" +++ "b/Textbook/\347\254\2544\347\253\240-\347\237\251\351\230\265\350\277\220\347\256\227\344\270\216\350\256\241\347\256\227\346\234\272\344\275\223\347\263\273\347\273\223\346\236\204/4.1-\346\267\261\345\272\246\345\255\246\344\271\240\347\232\204\350\256\241\347\256\227\346\250\241\345\274\217.md" @@ -50,7 +50,7 @@ $. 为了高效的计算上述过程,卷积层的计算可以通过对输入矩阵的重组而等价变化成一个矩阵相乘的形式,即通过将滤波器滑动窗口对应的每一个输入子矩阵作为新的矩阵的一列,也就是img2col的方法。图4-1-2的右图所示就是对应左图的卷积层通过对输入矩阵重组后的矩阵乘的形式。通过这样的变化,卷积层的计算就可以高效的利用到不同硬件平台上的矩阵加速库了。值得注意的是,这样的矩阵实现在实际中并不一定是最高效的,因为重组的输入矩阵的元素个数比原始矩阵变多了,也就意味着计算过程中要读取更多的数据,同时重组的过程也会引入一次内存复制的开销。为了优化后者,一种隐式矩阵乘法的实现就是在计算过程中在高级存储层中重组矩阵,从而减少对低级内存的访问量。 ``` -思考:请计算一下通过将卷积算子变化成矩阵乘法后,需要要读取的数据量和卷积算子的形状之前的关系,并思考一下,隐式矩阵乘法是如何减少数据访问量的。 +思考:请计算一下通过将卷积算子变化成矩阵乘法后,需要读取的数据量和卷积算子的形状之前的关系,并思考一下,隐式矩阵乘法是如何减少数据访问量的。 ``` @@ -65,7 +65,7 @@ $.
图4-1-4. 注意力机制层的示意图
## 4.1.5 小结与讨论 -通过上述小节对不同的主流模型结构的分类分析,我们发现一个深度学习模型的共同特点,就是大部分模型结构的核心计算模式都可以直接或间接的表示为矩阵乘法。这样的结果虽然有些巧合,但其背后却蕴含着深度学习模型的发展和支持其计算的软硬件发展之间相辅相成的关系。一方面,能够被广泛应用的模型结构必然要能够在现有体系结构中得到比较好的支持,矩阵乘作为经典计算已经被不同平台良好的支持,因此模型的设计者会倾向于尽可能利用这样的软硬件优势。另一方面,模型一旦取得比较好的结果,新的体系结构也会超着能更好的支持主流模型的方向上发展,这也进一步强化了现有硬件在支持诸如矩阵乘法上的力度,如近年来在GPU上出现的用来加速矩阵乘法的张量核(Tensor Core)就是一个这样的例子。当然,这也不能完全成为深度学习甚至更广泛的机器学习的唯一发展方向,针对其它计算模式的模型设计和体系结构支持都是非常有必要的。为了简单起见,本章节后续内容会以矩阵乘在不同体系结构中的实现和优化作为例子来分析体系结构的变化趋势。 +通过上述小节对不同的主流模型结构的分类分析,我们发现一个深度学习模型的共同特点,就是大部分模型结构的核心计算模式都可以直接或间接的表示为矩阵乘法。这样的结果虽然有些巧合,但其背后却蕴含着深度学习模型的发展和支持其计算的软硬件发展之间相辅相成的关系。一方面,能够被广泛应用的模型结构必然要能够在现有体系结构中得到比较好的支持,矩阵乘作为经典计算已经被不同平台良好的支持,因此模型的设计者会倾向于尽可能利用这样的软硬件优势。另一方面,模型一旦取得比较好的结果,新的体系结构也会朝着能更好的支持主流模型的方向上发展,这也进一步强化了现有硬件在支持诸如矩阵乘法上的力度,如近年来在GPU上出现的用来加速矩阵乘法的张量核(Tensor Core)就是一个这样的例子。当然,这也不能完全成为深度学习甚至更广泛的机器学习的唯一发展方向,针对其它计算模式的模型设计和体系结构支持都是非常有必要的。为了简单起见,本章节后续内容会以矩阵乘在不同体系结构中的实现和优化作为例子来分析体系结构的变化趋势。 请读者思考,除了矩阵乘法之外,还有哪些你认为深度学习模型中常用到的计算模式或算子呢? 这些算子在不同的硬件平台上是否有较好的软件库支持呢? @@ -83,4 +83,4 @@ $. 6. [BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding](https://arxiv.org/abs/1810.04805) -7. [Attention Is All You Need](https://arxiv.org/abs/1706.03762) \ No newline at end of file +7. [Attention Is All You Need](https://arxiv.org/abs/1706.03762)