什么是Attention机制?
Attention机制的本质来自于人类视觉注意力机制。人们在看东西的时候一般不会从到头看到尾全部都看,往往只会根据需求观察注意特定的一部分。
简单来说,就是一种权重参数的分配机制,目标是协助模型捕捉重要信息。具体一点就是,给定一组<key,value>,以及一个目标(查询)向量query,attention机制就是通过计算query与每一组key的相似性,得到每个key的权重系数,再通过对value加权求和,得到最终attention数值。
优缺点:
优点:
- 一步到位获取全局与局部的联系,不会像RNN网络那样对长期依赖的捕捉会收到序列长度的限制。
- 每步的结果不依赖于上一步,可以做成并行的模式
- 相比CNN与RNN,参数少,模型复杂度低。(根据attention实现方式不同,复杂度不一)
缺点:
- 没法捕捉位置信息,即没法学习序列中的顺序关系。这点可以通过加入位置信息,如通过位置向量来改善,具体可以参考最近大火的BERT模型。
应用领域:
在这主要介绍几篇论文或经典文档。
自然语言处理:
- BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
- Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation
- Generating Wikipedia by Summarizing Long Sequences
- Universal Transformers
计算机视觉:
- Image Transformer
- Show, Attend and Tell: Neural Image Caption Generation with Visual Attention
推荐系统:
- Deep Interest Network for Click-Through Rate Prediction
- Deep Interest Evolution Network for Click-Through Rate Prediction
- Learning Tree-based Deep Model for Recommender Systems
Attention常见实现方法
- 多层感知机:
该方法主要是将Q,K拼接,然后一起通过一个激活函数为tanh的全连接层,再跟权重矩阵做乘积,在数据量够大的情况下,该方法一般来说效果都不错。
2.Dot Product / scaled-dot Product:
该方法适用于query与key维度相同情景,通过q转置后与k点积。在权重值过大的情况下,可以将数据标准化,即scaled-dot Product。
3.Bilinear:
通过一个权重矩阵直接建立query与key的关系,权重矩阵可以随机初始化也可以使用预设的。
4.cosine
即计算两个向量的cosine相似度。
self-attention
该方法即Q,K,V都来自于同一个输入,其余计算过程,基本同上常用方法。
Multi-Head Attention
该方法可以理解成attention版本的ensemble,不同head学习不同的子空间语义。权值计算也同上常用方法。
推荐系统中的attention机制
现在推荐系统的趋势基本是朝着海量数据+复杂模型的方向发展,相信将来会取代人工精细特征+简单模型的方式。
这里主要介绍阿里的din模型:
模型的主要思想在于用户的兴趣是无序的,比如在电商场景下,用户A的历史行为序列包含游泳用品,牛奶,女装。而当前展示的广告是女装,它便只能激活女装的这个兴趣,即在当前展示广告面前,用户的兴趣是多峰的。
基于此,通过target广告与用户行为序列key做attention,捕获当前最可能被激活的那个峰。
具体算法实现便是通过target与行为序列做attention,再将输出与其他特征拼接之后通过全连接层得到最终输出。
相似的应用场景还有TDM模型,DIEN模型等。
小弟在此抛砖引玉,希望各位看官多多指点