李宏毅 X 苹果书 自注意力机制 学习笔记上

self  attention

  • 是一种network架构
  • 使用场景:输入一组向量,这组向量的性质:数量有变化,序列长度不一

模型输入

  1. 文字处理:
  • 模型输入:句子(句子的长度,单词都不一样),处理方式:每一个词汇看成一个向量==》模型输入变成vector set
  • 词汇变向量的方法:
  1. One-hot Encoding
    具体操作:开一个很长的向量,这个向量长度和世界上的词汇数一样长,假设是10万词汇,那就开个10万维的向量,每一个维度对应一个词汇。这个向量里面没有任何语义资讯,看不到单词之间的关系,比如:看不出来cat和dog是一类,都是动物,看不出来apple和cat的区别,一个是植物,一个是动物。
  2.  Word Embedding
    给每一个词汇一个向量,这个向量是有语义的;
    把Word Embedding画出来,所有的动物聚在一起,所有的植物聚在一起


 2.声音讯号

模型输入:声音讯号

模型输入处理:把声音当作一排向量,把一段声音讯号取一个范围(这个范围叫window);把这个window里面的信息描述成向量(这个向量叫frame(帧));通常frame长度是:25ms;为了能描述整段声音,通常window会往右移10ms(通常情况)


 3.graph(图)

一个图也是一堆向量

eg:

1.社交网络图

一个节点就可以当作一个向量,这个节点(人)的资讯(他讲过的话,长相之类)就是向量内容

2. 分子图

分子上的每一个原子就是一个向量,可以用One-hot vector表示此处向量,一个分子就是一堆向量


模型输出

1.每一个向量都会输出一个label(标记)(值)(1 produce 1)(Sequence Labeling)

  • label的类型:是数值:就是回归问题;是类别:就是分类问题。
  • 场景举例:
  • 词性标注(Part-Of-Speech tagging,POS tagging):机器会自动决定每一个词汇的词性,判断该词是名词还是动词还是形容词等等。输入是词汇,输出是词性,每一个词汇有其对应的词性。
  • 音标标注:一段声音信号里面有一串向量。每一个向量都要决定它是哪一个音标。
  • 社交网络模型:给定一个社交网络模型要决定每一个节点有什么样的特性,比如某个人会不会买某个商品,这样我们才知道要不要推荐某个商品给他。

2.一整个sequence(序列)只输出一个label (多 produce 1)(多是指多个向量)

  • 场景举例:
  • 情感分析:机器看一段话模型要决定说这段话是积极的(positive)还是消极的(negative)。
  • 语音:机器听一段声音,再决定是谁讲的这个声音。
  • 图:比如给定一个分子,预测该分子的亲水性。

3.sequence输出sequence(我们不知道要输出多少label,由机器决定输出label的数量)(多 produce 多)

  • 场景举例:
  • 翻译:输入输出是不同的语言它们的词汇的数量本来就不会一样多。
  • 真正的语音识别:输入一句话,输出一段文字,其实也是一个序列到序列的任务。 

以1 produce 1(Sequence Labeling) 引入  自注意力的运作原理

给sequence的每一个向量都给一个label:输入:sequence,采用各个击破的方法,把每一个向量输入到fully-connected network,然后fully-connected network就会输出。但是这样做就会有很大的瑕疵:如果是做词性标注的问题:给 i saw a saw ,fully-connected network对这2个saw会非常疑惑,定义不出来或者是弄混。于是,我们就考虑让fully-connected network看看上下文资讯:把向量的前后向量串起来,全部丢进fully-connected network。可以给fully-connected network所有的window,让它考虑上下文的资讯

但是这个方法还是有一定的局限性:如果这个问题需要一次考虑所有的sequence才行 ,当然有人提出开一个足够包含所有sequence的window,需要先统计训练资料里最长的sequence是多长,然后再开一个比最长sequence还有长的window,开个这么大的window意味着fully-connected network需要非常多的参数,还可能会导致overfitting,为了解决这个问题,我们推出了self-attention


 self-attention应用步骤:

  1.  self-attention吃掉整个sequence,有几个输入vector就有几个输出vector,输出的vector是考虑了一整个sequence得到的
  2. 输出vector经过fully-connected network

self-attention可以叠加多次


 self-attention运作原理: 

input:一串的vector:input or a hidden layer

output :每一个输出都是考虑了所有的input

a是输入,b是输出 

以产生b1为例: 

  1. 根据a1找出这个sequence跟a1解决输出问题有关系的向量(因为想要考虑所有的sequence但是又不想把所有的sequence都包入进去);用\alpha表示同a1关联的向量的关联度;self-attention mudule决定2个向量之间的关联度的方法:需要计算2个向量的模组:1.输入:2个向量;2.直接输出\alpha,计算\alpha的方法:Dot-product:输入的2个向量分别乘2个不同的矩阵,得到2个向量值;2个向量值再次相乘得到\alpha

完整的过程:

soft-max可以换 

 

根据{\alpha}'值抽取重要资讯 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值