導航:首頁 > 編程語言 > 注意力機制Python代碼詳解

注意力機制Python代碼詳解

發布時間:2023-08-19 07:38:10

Ⅰ 注意力機制詳解

Attention機制在近幾年來在圖像,自然語言處理等領域中都取得了重要的突破,被證明有益於提高模型的性能。Attention機制本身也是符合人腦和人眼的感知機制,這里我們主要以計算機視覺領域為例,講述Attention機制的原理,應用以及模型的發展。

所謂Attention機制,便是聚焦於局部信息的機制,比如圖像中的某一個圖像區域。隨著任務的變化,注意力區域往往會發生變化。

面對上面這樣的一張圖,如果你只是從整體來看,只看到了很多人頭,但是你拉近一個一個仔細看就了不得了,都是天才科學家。

圖中除了人臉之外的信息其實都是無用的,也做不了什麼任務, Attention機制便是要找到這些最有用的信息 ,可以想見最簡單的場景就是從照片中檢測人臉了。

和注意力機制相伴而生的一個任務便是顯著目標檢測,即salient object detection。它的輸入是一張圖,輸出是一張概率圖,概率越大的地方,代表是圖像中重要目標的概率越大,即人眼關注的重點,一個典型的顯著圖如下:

右圖就是左圖的顯著圖,在頭部位置概率最大,另外腿部,尾巴也有較大概率,這就是圖中真正有用的信息。

顯著目標檢測需要一個數據集,而這樣的數據集的收集便是通過追蹤多個實驗者的眼球在一定時間內的注意力方向進行平均得到,典型的步驟如下:

於是就能得到下面這樣的圖,第二行是眼球追蹤結果,第三行就是顯著目標概率圖。

上面講述的都是空間上的注意力機制,即關注的是不同空間位置,而在CNN結構中,還有不同的特徵通道,因此不同特徵通道也有類似的原理,下面一起講述。

注意力機制的本質就是定位到感興趣的信息,抑制無用信息,結果通常都是以概率圖或者概率特徵向量的形式展示,從原理上來說,主要分為 空間注意力模型,通道注意力模型,空間和通道混合注意力模型 三種, 這里不區分soft和hard attention

不是圖像中所有的區域對任務的貢獻都是同樣重要的,只有任務相關的區域才是需要關心的,比如分類任務的主體,空間注意力模型就是尋找網路中最重要的部位進行處理。

我們在這里給大家介紹兩個具有代表性的模型,第一個就是Google DeepMind提出的STN網路(Spatial Transformer Network[1])。它通過學習輸入的形變,從而完成適合任務的預處理操作,是一種基於空間的Attention模型,網路結構如下:

這里的Localization Net用於生成仿射變換系數,輸入是C×H×W維的圖像,輸出是一個空間變換系數,它的大小根據要學習的變換類型而定,如果是仿射變換,則是一個6維向量。

這樣的一個網路要完成的效果如下圖:

即定位到目標的位置,然後進行旋轉等操作,使得輸入樣本更加容易學習。這是一種一步調整的解決方案,當然還有很多迭代調整的方案,感興趣可以去有三知識星球星球中閱讀。

相比於Spatial Transformer Networks 一步完成目標的定位和仿射變換調整,Dynamic Capacity Networks[2]則採用了兩個子網路,分別是低性能的子網路(coarse model)和高性能的子網路(fine model)。低性能的子網路(coarse model)用於對全圖進行處理,定位感興趣區域,如下圖中的操作fc。高性能的子網路(fine model)則對感興趣區域進行精細化處理,如下圖的操作ff。兩者共同使用,可以獲得更低的計算代價和更高的精度。

由於在大部分情況下我們感興趣的區域只是圖像中的一小部分,因此空間注意力的本質就是定位目標並進行一些變換或者獲取權重。

對於輸入2維圖像的CNN來說,一個維度是圖像的尺度空間,即長寬,另一個維度就是通道,因此基於通道的Attention也是很常用的機制。

SENet(Sequeeze and Excitation Net)是2017屆ImageNet分類比賽的冠軍網路,本質上是一個基於通道的Attention模型,它通過建模各個特徵通道的重要程度,然後針對不同的任務增強或者抑制不同的通道,原理圖如下。

在正常的卷積操作後分出了一個旁路分支,首先進行Squeeze操作(即圖中Fsq(·)),它將空間維度進行特徵壓縮,即每個二維的特徵圖變成一個實數,相當於具有全局感受野的池化操作,特徵通道數不變。

然後是Excitation操作(即圖中的Fex(·)),它通過參數w為每個特徵通道生成權重,w被學慣用來顯式地建模特徵通道間的相關性。在文章中,使用了一個2層bottleneck結構(先降維再升維)的全連接層+Sigmoid函數來實現。

得到了每一個特徵通道的權重之後,就將該權重應用於原來的每個特徵通道,基於特定的任務,就可以學習到不同通道的重要性。

將其機制應用於若干基準模型,在增加少量計算量的情況下,獲得了更明顯的性能提升。作為一種通用的設計思想,它可以被用於任何現有網路,具有較強的實踐意義。而後SKNet等方法將這樣的通道加權的思想和Inception中的多分支網路結構進行結合,也實現了性能的提升。

通道注意力機制的本質,在於建模了各個特徵之間的重要性,對於不同的任務可以根據輸入進行特徵分配,簡單而有效。

前述的Dynamic Capacity Network是從空間維度進行Attention,SENet是從通道維度進行Attention,自然也可以同時使用空間Attention和通道Attention機制。

CBAM(Convolutional Block Attention Mole)是其中的代表性網路,結構如下:

通道方向的Attention建模的是特徵的重要性,結構如下:

空間方向的Attention建模的是空間位置的重要性,結構如下:

首先將通道本身進行降維,分別獲取最大池化和均值池化結果,然後拼接成一個特徵圖,再使用一個卷積層進行學習。

這兩種機制,分別學習了通道的重要性和空間的重要性,還可以很容易地嵌入到任何已知的框架中。

除此之外,還有很多的注意力機制相關的研究,比如 殘差注意力機制,多尺度注意力機制,遞歸注意力機制 等。

從原理上來說,注意力機制在所有的計算機視覺任務中都能提升模型性能,但是有兩類場景尤其受益。

我們知道細粒度分類任務中真正的難題在於如何定位到真正對任務有用的局部區域,如上示意圖中的鳥的頭部。Attention機制恰巧原理上非常合適,使用了注意力機制,對模型的提升效果很明顯。

我們又回到了開頭,沒錯,Attention的本質就是重要/顯著區域定位,所以在目標檢測領域是非常有用的。

上圖展示了幾個顯著目標檢測的結果,可以看出對於有顯著目標的圖,概率圖非常聚焦於目標主體,在網路中添加註意力機制模塊,可以進一步提升這一類任務的模型。

Ⅱ 為什麼說Transformer的注意力機制是相對廉價的注意力機制相對更對於RNN系列及CNN系列演算法有何優勢

QA形式對自然語言處理中注意力機制(Attention)進行總結,並對Transformer進行深入解析。


二、Transformer(Attention Is All You Need)詳解
1、Transformer的整體架構是怎樣的?由哪些部分組成?
2、Transformer Encoder 與 Transformer Decoder 有哪些不同?
3、Encoder-Decoder attention 與self-attention mechanism有哪些不同?
4、multi-head self-attention mechanism具體的計算過程是怎樣的?
5、Transformer在GPT和Bert等詞向量預訓練模型中具體是怎麼應用的?有什麼變化?

一、Attention機制剖析

1、為什麼要引入Attention機制?

根據通用近似定理,前饋網路和循環網路都有很強的能力。但為什麼還要引入注意力機制呢?

python實用代碼

python實用代碼如:
abs(number),返回數字的絕對值;cmath.sqrt(number),返回平方根,也可以應用於負數;float(object),將字元串和數字轉換成浮點數。
Python是一種廣泛使用的解釋型、高級和通用的編程語言。Python由荷蘭數學和計算機科學研究學會的GuidovanRossum創造,第一版發布於1991年,它是ABC語言的後繼者,也可以視之為一種使用傳統中綴表達式的LISP方言。
Python提供了高效的高級數據結構,還能簡單有效地面向對象編程。

閱讀全文

與注意力機制Python代碼詳解相關的資料

熱點內容
acmc用什麼編譯器 瀏覽:230
golangweb編譯部署 瀏覽:923
怎樣踩東西解壓 瀏覽:969
單片機核心板外接鍵盤 瀏覽:396
怎樣打開自己的微信文件夾 瀏覽:424
單片機紅外測距原理 瀏覽:268
phpxdebug擴展 瀏覽:757
建築樓層凈高演算法 瀏覽:1000
怎麼關閉智聯app求職狀態 瀏覽:418
pdf的文件夾怎麼列印 瀏覽:752
延拓演算法初值 瀏覽:786
首次適應演算法都不滿足的話怎麼辦 瀏覽:19
php56加密 瀏覽:556
金立手機app怎麼設置浮窗 瀏覽:496
程序員沒有社會地位 瀏覽:963
榮耀app怎麼解鎖 瀏覽:594
php程序員學歷 瀏覽:636
c語言編譯可以嗎 瀏覽:201
脂硯齋重評石頭記pdf 瀏覽:756
三星冰箱壓縮機哪裡產 瀏覽:429