前言
最近读到一篇论文《Non-local Neural Networks》,作者在论文中提到了 “embedding” 这个词。
A selfattention module computes the response at a position in a sequence (e.g., a sentence) by attending to all positions and taking their weighted average in an embedding space.
一开始我直接按照单词翻译,但是后文中反复出现这个词,我才意识到这个单词远远不是想的那么简单。
这里参考了知乎上几位大佬的说法:
简单点说,找到目的空间的嵌入向量。
那尝试通俗易懂的去理解embedding。
例如现在站在你面前的Alice,你要怎么去描述她呢?
假如从长相去描述Alice,最重要的几个特征是什么?
[白不白,五官正不正,牙齿齐不齐]
你可以用离散的变量0,1去表示条件成立与否:
[ 1 , 1 , 1 ]==[皮肤白,五官正,牙齿齐]
当然你也可以去给这几个特征打个分,到底有多白,多正,多齐,比如10分制:
[ 6 , 8 , 10]==[普通白,比较正,非常齐]
这样的话,你就得到了欧几里得某个三维空间上对Alice长相的描述了!
回到第一句,这里的目的空间是什么呢?当然就是Alice的长相描述空间了,嵌入向量就是上面两个评分了。
当然你也可以去从成绩描述Alice:
[数学,语文,地理,生物,化学,英语,物理]=[125,120,90,80,70,120,60]
这里你找到了成绩空间去得到了Alice的embedding。
凡事都要问个为什么,为什么需要这些embedding呢?
如果Alice和Bob去比谁长相更好,肯定不是两个人对着嚷嚷就能比出来的,如果得到两个人长相空间的embedding,综合分一加不就得出结果了?
所以第一,是为了针对某个目的更好的优化计算过程。
第二,还有很多结构并不是欧几里得空间,比如图。要处理这些数据,更加需要去学习到embedding。
Embedding在数学上表示一个maping:
也就是一个function。其中该函数满足两个性质:
- injective(单射的):就是我们所说的单射函数,每个X只有唯一的Y对应;
- structure-preserving(结构保存):比如在X所属的空间上 x1 ≤ x2,那么映射后在Y所属空间上同理 y1 ≤ y2;
那么对于word embedding, 就是找到一个映射(函数)将单词(word)映射到另外一个空间(其中这个映射具有injective和structure-preserving的特点),生成在一个新的空间上的表达,该表达就是word representation.