Attention(注意力)機(jī)制其實(shí)來源于人類的認(rèn)識(shí)認(rèn)知能力鞋囊。比如當(dāng)人們觀察一個(gè)場(chǎng)景或處理一件事情時(shí)疾捍,人們往往會(huì)關(guān)注場(chǎng)景的顯著性物體指郁,處理事情時(shí)則希望抓住主要矛盾挂脑。注意力機(jī)制使得人類能夠關(guān)注事物的重要部分,忽略次要部分景醇,更高效的處理所面臨的各種事情臀稚。
注意力機(jī)制在NLP中的應(yīng)用
注意力機(jī)制在NLP領(lǐng)域被真正的發(fā)揚(yáng)光大,其具有參數(shù)少三痰、速度快吧寺、效果好的特點(diǎn),如2018年的BERT散劫、GPT 領(lǐng)跑各項(xiàng) NLP 任務(wù)效果稚机。由此在此領(lǐng)域,transformer和attention結(jié)構(gòu)受到了極大的重視获搏。
第二步:使用權(quán)重對(duì)Value進(jìn)行加權(quán)求和從而得到Attention Value纬乍。
從不同的計(jì)算區(qū)域碱茁、所用信息和結(jié)構(gòu)可以對(duì)attention的使用形式進(jìn)行分類:
計(jì)算區(qū)域:
- Soft Attention,這是比較常見的Attention方式仿贬,對(duì)所有key求權(quán)重概率早芭,每個(gè)key都有一個(gè)對(duì)應(yīng)的權(quán)重,是一種全局的計(jì)算方式(也可以叫Global Attention)诅蝶。這種方式比較理性,參考了所有key的內(nèi)容募壕,再進(jìn)行加權(quán)调炬。但是計(jì)算量可能會(huì)比較大一些。
- Hard Attention舱馅,這種方式是直接精準(zhǔn)定位到某個(gè)key缰泡,其余key就都不管了,相當(dāng)于這個(gè)key的概率是1代嗤,其余key的概率全部是0棘钞。因此這種對(duì)齊方式要求很高,要求一步到位干毅,如果沒有正確對(duì)齊宜猜,會(huì)帶來很大的影響。另一方面硝逢,因?yàn)椴豢蓪?dǎo)姨拥,一般需要用強(qiáng)化學(xué)習(xí)的方法進(jìn)行訓(xùn)練。(或者使用gumbel softmax之類的)
- Local Attention渠鸽,這種方式其實(shí)是以上兩種方式的一個(gè)折中叫乌,對(duì)一個(gè)窗口區(qū)域進(jìn)行計(jì)算。先用Hard方式定位到某個(gè)地方徽缚,以這個(gè)點(diǎn)為中心可以得到一個(gè)窗口區(qū)域憨奸,在這個(gè)小區(qū)域內(nèi)用Soft方式來算Attention。
所用信息:
- General Attention凿试,這種方式利用到了外部信息排宰,常用于需要構(gòu)建兩段文本關(guān)系的任務(wù),query一般包含了額外信息红省,根據(jù)外部query對(duì)原文進(jìn)行對(duì)齊额各。
- Local Attention,這種方式也可以成為Self Attention吧恃,因?yàn)槠渲皇怯昧藘?nèi)部信息虾啦,key和value以及query只和輸入原文有關(guān),在self attention中,key=value=query傲醉。既然沒有外部信息蝇闭,那么在原文中的每個(gè)詞可以跟該句子中的所有詞進(jìn)行Attention計(jì)算,相當(dāng)于尋找原文內(nèi)部的關(guān)系硬毕。
結(jié)構(gòu):
- 單層Attention呻引,這是比較普遍的做法,用一個(gè)query對(duì)一段原文進(jìn)行一次attention吐咳。
- 多層Attention逻悠,一般用于文本具有層次關(guān)系的模型,假設(shè)我們把一個(gè)document劃分成多個(gè)句子韭脊,在第一層童谒,我們分別對(duì)每個(gè)句子使用attention計(jì)算出一個(gè)句向量(也就是單層attention);在第二層沪羔,我們對(duì)所有句向量再做attention計(jì)算出一個(gè)文檔向量(也是一個(gè)單層attention)饥伊,最后再用這個(gè)文檔向量去做任務(wù)。
- 多頭Attention蔫饰,這是Attention is All You Need中提到的multi-head attention琅豆,用到了多個(gè)query對(duì)一段原文進(jìn)行了多次attention,每個(gè)query都關(guān)注到原文的不同部分篓吁,相當(dāng)于重復(fù)做多次單層attention茫因,最后再把這些結(jié)果拼接起來。
注意力機(jī)制在CV中的應(yīng)用
注意力是一種機(jī)制越除,或者方法論节腐,并沒有嚴(yán)格的數(shù)學(xué)定義。比如摘盆,傳統(tǒng)的局部圖像特征提取翼雀、顯著性檢測(cè)、滑動(dòng)窗口方法等都可以看作一種注意力機(jī)制孩擂。在神經(jīng)網(wǎng)絡(luò)中狼渊,注意力模塊通常是一個(gè)額外的神經(jīng)網(wǎng)絡(luò),能夠硬性選擇輸入的某些部分类垦,或者給輸入的不同部分分配不同的權(quán)重狈邑。
根據(jù)權(quán)重在特征空間和通道上的應(yīng)用方式不同,主要可分為
通道注意力機(jī)制(Channel Attention)
對(duì)于二維圖像的CNN特征來說蚤认,一般具有3個(gè)維度米苹,即長(zhǎng)、寬和通道砰琢。通道注意力機(jī)制即對(duì)卷積特征的通道進(jìn)行加權(quán)蘸嘶,從而提升特征的表示能力良瞧。比較典型的例子為SENet[7],其增加了一個(gè)通道注意力模塊训唱,學(xué)習(xí)每個(gè)通道的權(quán)重褥蚯,通過抑制無關(guān)特征提升卷積特征的表示性能。SENet通過Squeeze模塊和Exciation模塊實(shí)現(xiàn)所述功能况增,首先通過Squeeze模塊對(duì)卷積特征進(jìn)行進(jìn)行壓縮赞庶,即在通道維度上執(zhí)行全局池化操作,在SENet中采用的是全局平均池化澳骤,作者提到該操作能夠使得靠近數(shù)據(jù)輸入的特征也可以具有全局感受野歧强,這一點(diǎn)在很多的任務(wù)中是非常有用的。然后是通過全連接網(wǎng)絡(luò)進(jìn)行Exciation操作为肮,作者在全連接網(wǎng)絡(luò)中降維操作的目的是一方面降低了網(wǎng)絡(luò)計(jì)算量誊锭,一方面增加了網(wǎng)絡(luò)的非線性能力。最后將得到通道attention應(yīng)用到原始卷積特征上弥锄,即通過乘法加權(quán)的方式乘到先前的特征上,從而提升重要特征蟆沫,抑制不重要特征籽暇。
SENet沒有考慮通道之間的關(guān)系,因此GSoP-Net[8]提出了計(jì)算通道注意力的另一種方式饭庞,從圖中可以看出戒悠,首先將輸入張量進(jìn)行降維到C通道,與SENet不同的是采用二階pool的方式舟山,計(jì)算得到C*C的協(xié)方差矩陣绸狐,這種計(jì)算方式引入了通道之間的相互關(guān)系,然后進(jìn)行線性卷積和非線性激活的兩個(gè)連續(xù)運(yùn)算累盗,得到通道注意力寒矿。
ECANet[9]是一種用于提高深度CNNs性能的超輕注意模塊。ECA模塊通過分析SEnet的結(jié)構(gòu)了解到降維和跨通道交互的影響若债,作者通過實(shí)驗(yàn)證明了降維是沒有作用的符相,并通過自適應(yīng)內(nèi)核大小的一維卷積實(shí)現(xiàn)局部跨通道的信息交互。空間(Spatial)和通道(Channel)注意力(Attention)機(jī)制的融合
CBAM[10]實(shí)現(xiàn)了同時(shí)使用空間和通道注意力機(jī)制蠢琳,模塊結(jié)構(gòu)如下:除此之外,還有很多的注意力機(jī)制相關(guān)的研究绩脆,比如殘差注意力機(jī)制萤厅,多尺度注意力機(jī)制,遞歸注意力機(jī)制等靴迫。
Reference:
- https://zhuanlan.zhihu.com/p/91839581
- http://www.reibang.com/p/4d52edda1d76
- https://zhuanlan.zhihu.com/p/61440116
- http://www.reibang.com/p/af48ee338227
- http://www.reibang.com/p/55d793085e6d
- http://www.reibang.com/p/0fb9f5ad76c5
- Squeeze-and-Excitation Networks, https://arxiv.org/abs/1709.01507
- Global Second-order Pooling Convolutional Networks, https://arxiv.org/abs/1811.12006
- ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks, https://arxiv.org/abs/1910.03151
- CBAM: Convolutional Block Attention Module, https://arxiv.org/abs/1807.06521
- Dual Attention Network for Scene Segmentation, https://arxiv.org/abs/1809.02983