The Building Blocks of Transformers
Transformer完全改变了2017年后NLP领域的模型方向, 从某种意义上说,Bert,GPT等模型都是Transformer模型的变体, 虽然模型结构有各种改变, 但是其中的一些基本计算单元则变化较小.
Transformer几乎就是为了改善计算性能而专门设计的模型.
- 完全没有RNN之类的循环计算需求, 这就极大降低了计算过程中的顺序依赖, 可以极大提高并行性.
- 大量使用矩阵乘, 不使用卷积这种计算强度不够大的算子
正是由于Transformer使用到的基本计算单元非常简单, 几乎就只有 gemm, +-*/, layernorm, softmax, 也没有奇怪的计算流程, 所以原文的作者将其称为一个"简单"的模型是很有道理的.
本文就是简单记录Transfomer中使用到的基本计算单元.
Basics
… Read MoreA note for cmake
A Note for CMake
CMake可以说是目前C++项目的标准构建系统, 尽管它有很多不足, 但是它已经成功的替换掉了autoconf这一代的构建工具. 除非有足够的理由, 在选择构建系统时, CMake总是应当第一优先考虑.
我熟悉的构建系统只有CMake和Bazel, 事实上, 如果能满足若干客观条件的话, 我更愿意使用Bazel, 不过这篇主要记录的是CMake, 所以还是以CMake为主. 在我看来, CMake主要的优缺点如下:
Pros:
- Imperative:
A Strory of Mixin
Mixin
Mixin是一种设计思想, 主要内容是: Mix some MixinClass into a CoreClass, so the CoreClass can get some new feature, or get enhanced.… Read More
Tablegen Language Tutorial
Lit and FileCheck
Lit And FileCheck
Lit
和 FileCheck
是 LLVM 测试中常用的工具, 尽管二者功能上是完全独立的,但是搭配起来使用会显得更加方便.
Lit
Lit
总的来说仅仅是一个 test-launcher, 它的主要功能就是发现测试,执行测试,收集结果.
"发现测试"主要依赖于lit.cfg
(或lit.site.cfg
)文件标记来实现. … Read More
比较运算符, Min, Max, Sort 和 Order
惭愧,突然发现又是没有blog的一年。这一年不断在尝试搞大新闻,写点大东西,到现在也没憋出来。倒是又在学习新东西的过程中看到了一些零碎的小知识,很有意思.
很巧,这个也是和比较运算符相关的,和一年前的blog竟然有所重合。
还是先上结论: 当需要为类型T定义比较运算符时,所有运算符最好保证语义整体一致
* 一般来说,这很容易达到,我们只需要实现operator<(lhs,rhs)
,即可引申定义出其余几个比较运算符.
* 定义operator<=
为 !(rhs < lhs)
* 定义operator>
为 rhs
… Read More
IEEE 754 的 inf 比较问题
首先上结论: 当涉及浮点数比较时,一定要考虑比较符号两侧都是inf的情况.
原因: inf==inf,inf<=inf,inf=inf 这三个比较都为真(-inf同理),而这种结果可能与我们的期望不符.
解决方法:
1. 如果为真是可以接受的,那么直接使用比较运算符,例如a<=b
2. 如果为真是不可以接受的,那么应当使用作差,例如(a-b)<=0
, 这种情况下,当a和b都为inf时,inf之间的运算会输出NaN,从而导致比较结果为false
例如,我有这样一个应用场景:
有射线R和两个平面S0及S1,我们需要求射线R与平面S0的交点p0,以及射线R与平面S1的交点P1. 且要求p0不能比p1离射线起点更远(可以重合)
假如我们用直线的参数方程来描述交点,显然,上面的目标很容易用 t0<=t1 … Read More
CUDA 学习分享
KD树与SKD树
KD树与SKD树
首先给出两个搜到的有点内容的KD树文章,论述的比我说的更完整(更冗长),可以先看,也可以看完本文再看.
* https://www.zybuluo.com/l1ll5/note/967681
* http://www.whudj.cn/?p=920
主体思想
- KD树和SKD树都使用坐标轴对齐的最小包围盒来描述空间.
- 例如,平面内,一堆点的点集对应的空间可以用点
A
=(min(all_x),min(all_y))
,B
=(max(all_x),max(all_y))
对应的矩形空间来描述. 当点的个数变为1时,这个矩形空间也会自然地退化为一个点.
- 例如,平面内,一堆点的点集对应的空间可以用点
- 构建时的主要思想: 每个节点