Deep Reading | 從0到1再讀注意力機制,此文必收藏!
譯者 | forencegan
編輯 | 琥珀
出品 | AI科技大本營(ID: rgznai100)
【AI科技大本營導語】注意力機制(Attention)已經成為深度學習必學內容之一,無論是計算機視覺還是自然語言處理都可以看到各種各樣注意力機制的方法。之前我們曾在一篇乾貨文章《關於深度學習中的注意力機制,這篇文章從例項到原理都幫你參透了》中,從例項到原理幫助大家參透注意力機制的工作原理。今天,我們將再度為大家梳理全部理論要點,是大家學習的必備資料之一,併為後續掌握最新流行的注意力機制保駕護航。
在本篇部落格中,作者不僅概述了注意力機制是如何被創造出來的,也詳細探討了時下最流行的注意力機制相關的方法和模型,比如Transformer、SNAIL、神經圖靈機(Neural Turing Machines)以及自注意力生成對抗網路(SAGAN),一度成為不少學習者的參考資料。
該篇部落格結構如下:
序列到序列(Seq2Seq)模型究竟有什麼問題?
為翻譯而生
定義
注意力機制模型家族
歸納總結
自注意力機制(Self-attention)
Soft & Hard Attention
Global & Local Attention
神經圖靈機
讀寫機制
注意力機制
指標網路(Pointer Network)
Transformer
Key, Value and Query
多頭自注意力機制(Multi-Head Self-Attention)
編碼器(Encoder)
解碼器(Decoder)
完整的結構
SNAIL
自注意力生成對抗網路(Self-Attention GAN)
參考
在某種程度上,注意力取決於我們如何對影像的不同區域進行視覺注意或將一個句子中的單詞關聯起來。
以圖1 中的柴犬圖為例。
圖1 一隻可愛的柴犬穿著一件人類的外套。該圖片來自於Instagram @mensweardog
人類的視覺注意力機制使我們能夠以一種“高解析度”的形式關注到影像的某個區域(例如當你觀察圖中黃色框標註的狗耳朵的時候),而同時以一種“低解析度”的形式感知著周圍的影像(例如這個時候你的余光中雪的背景,還有柴犬所穿的外套的樣子),然後調整眼睛所關注的焦點或者相應地進行推斷。
如果將影像扣掉一小塊,我們也可以根據影像中其餘的內容線索推測出被扣掉的內容究竟是什麼。比如可以推測出被黃色框扣掉的內容是一個尖尖的耳朵,因為我們看到了一個狗的鼻子,右邊另一個尖尖的耳朵以及柴犬的神祕眼神(圖中紅色框所示的內容)。對於耳朵的預測,底部的毛衣和毯子就不如上述狗的特徵有用。
類似的,我們同樣可以解釋,一個句子或近似語境中單詞之間的關係。在一句話中,當我們看到“吃”這個單詞的時候,我們很快就會遇到一個食物詞(apple)。雖然顏色術語(green)描述了食物,但可能跟“吃”之間沒有直接的關係。
圖2 同一個句子當中,不同詞之間具有不同的關係
簡而言之,深度學習中的注意力機制可以被廣義地定義為一個描述重要性的權重向量:通過這個權重向量為了預測或者推斷一個元素,比如影像中的某個畫素或句子中的某個單詞,我們使用注意力向量定量地估計出目標元素與其他元素之間具有多麼強烈的相關性,並由注意力向量的加權和作為目標的近似值。
序列到序列(Seq2Seq)模型究竟有什麼問題?
seq2seq模型最早是在2014年由Sutskever提出的,他主要針對的是語言模型。從廣義上來講,它的目的是將輸入序列(源序列)轉換成一個新的序列(目標序列),而且兩個序列的長度可以是任意的。轉換任務包括文字或者語音上的多語種機器翻譯,問答對話的生成或者生成句子的語法樹等任務。
seq2seq模型通常具有一種編碼器-解碼器(encoder-decoder)結構,由下面兩部分構成:
Encoder:編碼器處理輸入序列,然後將其中包含的資訊壓縮成固定長度的上下文向量(context vector),上下文向量也可以叫做句子嵌入(sentence embedding)。這種表示方式可以用來對一整個句子的含義做出一個很好的總結。
Decoder:利用Encoder產生的上下文向量來初始化解碼器以產生變換後的輸出序列。早期的工作僅僅使用編碼器網路的最後狀態作為解碼器的初始狀態。
編碼器和解碼器都可以是遞迴神經網路,例如使用LSTM和GRU單元。
圖3 encoder-decoder模型,用來將“she is eating a green apple”翻譯成中文,圖中是對編碼器和解碼器隨著時間步而展開的視覺化效果
這種固定長度的上下文向量設計的一個關鍵的和明顯的缺點在於,它無法記住很長的句子,對很長的時序資訊來說,一旦它完成了對整個序列的處理,它通常會忘記最開始的部分,從而丟失很多有用的資訊。因此,在2015年Bahdanau等人為了解決長時依賴問題,提出了注意力機制。
為翻譯而生
注意力機制的誕生,最開始是為了幫助神經機器翻譯(NMT)記住較長的源句。注意力機制的祕方在於,它建立了一個上下文向量與整個源句之間的快捷方式,而不只是通過編碼器最後一步的隱層狀態來生成上下文向量。這些快捷方式的連線權重是根據每個輸出元素自適應計算出來的。
既然上下文向量可以訪問到整個句子中的每個單詞,那我們根本不用擔心之前的資訊會被遺忘。源序列和目標序列之間的對齊(alignment)就通過這個上下文向量來學習和控制,從本質上講,要計算上下文向量需要三個必要資訊:
編碼器的隱含層狀態
解碼器的隱含層狀態
源和目標序列之間的對齊方式
圖4 加入注意力機制的encoder-decoder模型(Bahdanau等人,2015)
定義
現在讓我們以科學的方式來定義神經機器翻譯系統中引入的注意力機制。比方說,我們有一個長度為n的源序列x,並嘗試輸出長度為m的目標序列y:
(加粗的變數代表他們是一個向量,本部落格中所有情況相同)
這裡的編碼器是雙向LSTM(或者其他你認為合適的遞迴神經網路),前向的隱含層狀態定義為,後向的隱含層狀態定義為。將兩種表示簡單地串聯起來構成編碼器的整個隱含層狀態表示。這種表示方法意在描述當前單詞的時候包含有它之前和之後詞的釋義。
解碼器網路對於第t時刻的輸出單詞的隱含層狀態可以表示為, 其中上下文向量是輸入序列的隱含層狀態的加權和,權重由對齊函式計算得來:
對齊函式得到的分數是根據第i個位置的輸入和第t個位置的輸出對得來的,它衡量了二者的匹配程度。的集合衡量了輸出關注到多少源序列的隱層狀態。在Bahdanau的文章中,對齊分數的引數由一個前饋神經網路引數化,其輸入僅僅是輸入序列和輸出序列的隱含層狀態,這個模型跟整體模型的其它部分一起參與訓練,從而學到所謂的注意力權重。因此對齊分數函式的定義如下面所示,給定tanh作為非線性啟用函式:
其中和是可學習的引數,作為整體模型引數的一部分參與到訓練的過程當中。
對齊分數矩陣是一個很好的副產品,它可以很好的顯示出源單詞和目標單詞之間的相關性。
圖5 對齊分數矩陣,表現了源句法語“L’accord sur l’Espace économique européen a été signé en août 1992”到目標語句英語“The agreement on the European Economic Area was signed in August 1992”翻譯的單詞之間相關性的結果。
點選下面連結可以獲得具體的實施方法,這是Tensorflow團隊提供的一份優秀的教程。
https://www.tensorflow.org/versions/master/tutorials/seq2seq
注意力機制模型家族
有了注意力機制,源序列和目標序列的依賴關係再也不需要二者之間的相對距離了!有了機器翻譯領域上巨大的進展,注意力機制在包括計算機視覺(Xu et al.2015)在內的其它領域也都隨之有了廣泛的應用,研究者們也相繼探索出各種不同的注意力機制模型以適用於不同的應用場合(Luong, et al., 2015; Britz et al., 2017; Vaswani, et al., 2017)。
歸納總結
下面的表格,我們總結了幾種流行的注意力機制以及相應的對齊分數函式:
(*)在Luong等人的文章中被稱為“concat”,在Vaswani等人的文章中被稱為“附加註意”。
(^)它增加了一個比例因子`$1/\sqrt{n}$`,因為當輸入較大時,softmax函式的梯度可能非常小,難以進行有效的學習。
下面總結了一些更廣義的應用到注意力機制的方法:
(&)此外,Cheng等人在2016等論文中也將其稱為內注意力機制(intra-attention)。
自注意力機制(Self-attention)
自注意力機制,又稱內注意力機制,是一種將單個序列的不同位置關聯起來以計算同一序列的表示的注意機制。它在機器閱讀、抽象摘要或影像描述生成中非常有用。
在“Long short-term memory network”這篇文章中使用自注意力機制去做機器閱讀。在下面的例子中,自注意機制使我們能夠學習當前單詞和句子前一部分之間的相關性。
相關連結:https://arxiv.org/pdf/1601.06733.pdf
圖6 當前單詞為紅色,藍色陰影的大小表示啟用級別也就是相關性的大小。(圖片來自於Cheng et al.,2016)
在“Show,attend and tell”這篇文章中,自注意力機制應用於影像以生成適當的描述。影像首先由卷積神經網路進行編碼,具有自注意力機制的遞迴神經網路利用卷積特徵對映逐條生成描述性詞語。注意力權重的視覺化清晰地展示了模型為了輸出某個單詞而關注影像的某些區域。
相關連結:http://proceedings.mlr.press/v37/xuc15.pdf
圖7 機器根據影像得到的描述“一個女人正在一個公園裡扔飛碟”。(影像來自於Xu et al. 2015)
Soft & Hard Attention
soft vs hard 注意力記住是區分注意力定義的另一種方式。最初的想法是在“Show, attend and tell paper”論文中提出的,其主要思想在於:注意力是否可以訪問整個影像或只訪問影像中的一部分:
Soft Attention:所學習的對齊權重關注於整個輸入影像中的各個部分,關鍵思想和Bahdanau在2015年的論文如出一轍。
優點:模型是平滑可微的
缺點:當輸入序列非常長的時候,計算量會很大
Hard Attention:每一步只關注到影像中的一部分
優點: 預測階段具有很小的運算量
缺點:模型是不可導的而且需要更加複雜的訓練技術,例如強化學習和方差降低(variance reduction)
Global & Local Attention
“Luong, et al.,2015” 首次提出了“global”和“local”注意力機制。global注意力機制和soft注意力機制類似,然而local是hard和soft的有趣的融合,它是對hard attention的一種改進,使得它變得可導:該模型首先預測一個當前目標詞對齊的位置和一個圍繞源位置的視窗,然後用於計算上下文向量。
相關連結:https://arxiv.org/pdf/1508.04025.pdf
圖8 全域性和區域性注意力機制(圖片來自於Luong,et al.,2015中圖2和圖3)
神經圖靈機
1936年,阿蘭·圖靈提出了一個計算機的最小模型。它由一個無限長的磁帶和一個與磁帶互動的磁頭組成。磁帶上有無數的單元格,每個單元格都填有一個符號:0,1或空格(“ ”)。操作頭可以讀取符號、編輯符號,並可以在磁帶上左右移動。理論上,圖靈機可以模擬任何計算機演算法,不管這個過程有多複雜或多耗時。無限記憶體給圖靈機帶來了數學上無限的優勢。然而,無限記憶體在真正的現代計算機中是不可行的。
圖9 圖靈機的樣子:一個磁帶+一個處理磁帶的磁頭。(圖片來源:http: aturingmachine.com)
神經圖靈機(NTM,Graves, Wayne & Danihelka, 2014)是一種神經網路與外部儲存器耦合的模型結構。儲存器模仿圖靈機磁帶,神經網路控制操作頭從磁帶讀取或者向磁帶中寫。然而,NTM中的記憶體是有限的,因此它看起來更像是一臺“神經馮諾伊曼機器”。
NTM包含兩個主要部件:一個由神經網路構成的控制器和儲存器。控制器:負責對記憶體執行操作。它可以是任何型別的神經網路(前饋神經網路或遞迴神經網路)。儲存器:儲存處理過的資訊。它是一個大小為`$N \times M$`的矩陣,其中包含N行向量,每個向量都有M個維度。
在一次更新迭代的過程中,控制器處理輸入訊號並相應地與儲存器進行互動以生成輸出。互動由一組並行讀寫頭處理。讀和寫操作都是模糊的,因為它們都需要訪問所有記憶體地址。
圖10 神經圖靈機的結構
讀寫機制
當在時刻t(注意力向量大小為N)從記憶體中讀取資料時,控制分配給不同記憶體位置(矩陣行)的注意量。讀取向量是記憶記憶體的加權和,權重根據注意力強度來衡量。
其中代表向量的第i個元素,是儲存矩陣的第i行向量。
在t時刻寫入記憶體時,受LSTM中輸入和遺忘門的啟發,寫入磁頭首先根據一個擦除向量擦除一些舊的內容,然後通過一個加法向量新增新的資訊到儲存器中。
注意力機制
在神經圖靈機中,如何產生注意力分佈wt取決於定址機制:神經圖靈機使用基於內容和基於位置的定址的混合定址方式。
基於內容的定址方式
基於內容的定址方式,就是根據控制器從輸入行和記憶體行提取的關鍵向量kt之間的相似性來建立注意向量。基於內容的注意力機制用餘弦相似度來計算相似性,然後用softmax函式進行歸一化。此外,神經圖靈機增加了放大器βt用來放大或衰減分佈的重點。
插值
然後利用插值門,也就是一個標量gt將新生成的基於內容的注意向量與上一步的注意權值進行混合:
基於位置的定址方式
基於位置的定址將注意向量中不同位置的值相加,並通過允許的整數移位上的加權分佈進行加權。它等價於與核函式st(.)的一維卷積,st(.)是位置偏移的函式。定義這個分佈有多種方法。參見圖11以獲得啟發。
圖11 兩種表示位移權重分佈st的方式
最後注意分佈由標量進行銳化增強。
注意向量wt在時間步長t上生成的完整過程如圖12所示。控制器產生的每個磁頭的所有引數都是唯一的。如果有多個讀寫頭並行,控制器將輸出多個集合。
圖12 神經圖靈機定址機構流程圖
指標網路(Pointer Network)
在排序或旅行推銷員(travelling salesman)等問題中,輸入和輸出都是順序的資料。不幸的是,傳統的seq-2-seq或NMT模型都不能很容易地解決這些問題,因為輸出元素的離散類別不是預先確定的,而是取決於可變的輸入大小。指標網路(Ptr-Net;(Vinyals, et al. 2015)的提出就是為了解決這類問題:當輸出元素對應於輸入序列中的位置時。指標網路沒有使用注意力機制將編碼器的隱藏單元混合到上下文向量中(參見圖8),而是使用注意力機制直接作用在編碼器上,選擇輸入序列中某個元素作為解碼器的輸出。
圖13 指標網路模型的結構圖(圖片來自於https://lilianweng.github.io/lil-log/assets/images/ptr-net.png)
當給定輸入序列為,指標網路的輸出是一個由整數索引構成的序列。指標網路依然是以編碼器-解碼器的結構作為基礎。其中編碼器和解碼器的隱含層狀態分別表示為和。指標網路使用addictive attention作為對分數齊函式,然後同樣使用softmax進行歸一化從而建立輸出條件概率模型:
可以看到,在指標網路中注意機制被簡化了,因為它沒有將編碼器狀態與注意權重混合到輸出中。這樣,輸出只響應位置,而不響應輸入內容。
Transformer
“Attention is All you Need”這篇文章(Vaswani, et al., 2017),無疑是2017年最有影響力和最有趣的論文之一。它對soft attention進行了大量的改進,使得在不需要遞迴神經網路單元(LSTM,GRU)的情況下進行seq2seq建模成為了可能。它提出的 Transformer 模型完全建立在自注意力機制(self-attention)的基礎上,沒有使用任何序列對齊的遞迴結構。
其模型結構如下:
Key, Value and Query
Transformer的主要部件是一個叫做“多頭自注意力機制”的單元(multi-head self-attention mechanism)。Transformer將輸入的編碼表示形式視為一組鍵key-值value對(K,V),它們的維度都是n(輸入序列長度);在NMT的上下文中,key和value都是編碼器的隱含層狀態。在解碼器中,上一步的輸出被壓縮為一個查詢query(Q的維度為m),下一步的輸出是通過對映這個查詢query到一組鍵key和值value的集合生成的。Attention 函式的本質可以被描述為一個查詢到一系列鍵-值對的對映。
Transformer選擇縮放點積(scaled dot-product attention)作為注意力機制:輸出為各個值key的加權和,其中每個值value的權重定義為查詢query作用於所有鍵key的縮放點積:
多頭自注意力機制(Multi-Head Self-Attention)
圖14 多頭縮放點積注意力機制的結構圖
多頭注意力機制會平行計算縮放點積很多次,而不是僅僅計算一次。然後將相互獨立的注意力計算單元的輸出簡單的拼接在一起,最後通過一個線性單元轉換成期望大小的維度。我認為這樣做的動機是因為合併總是有效的?根據作者在文章中的描述,“多頭注意力機制允許模型共同關注來自不同位置的不同子空間的資訊。而僅僅有一個注意力機制,是不能得到這麼豐富的資訊的。”
其中為可學習的引數。
編碼器(Encoder)
圖15 Transformer的編碼器結構
編碼器可以生成基於注意力的表示,其能夠從可能無限大的上下文中定位到特定的資訊。
6個相同的層堆疊在一起
每個編碼層都有一個多頭自注意力機制層和一個全連線前饋神經網路單元
每個編碼子層之間都採用殘差連線方式,並且使用層歸一化(layer normalization)。
每個子層的輸出資料都是相同的維度`$d_\text{model} = 512$`
解碼器(Decoder)
圖16 Transformer的解碼器結構
解碼器能夠對已編碼的表示進行檢索。
6個相同的層堆疊在一起
每個解碼層含有兩個子層結構,一個是多頭注意力機制,另一個是全連線前饋神經網路單元
與編碼器結構類似,每個解碼器子層之間都採用殘差連線方式,並且使用層歸一化(layer normalization)。
第一個多頭注意子層被修改,以防止當前位置參與到後面的子序列的位置中,因為我們不想在預測當前的位置時有目標序列的未來資訊對其進行干擾。
完整的結構
有了前面對編碼器和解碼器結構的介紹,下面將引出Transformer的整體結構:
源序列和目標序列都先要經過一個embedding層,將其嵌入到相同的維度,例如。
為了儲存序列的位置資訊,使用基於正弦函式的位置編碼器對每個輸入向量進行編碼,將編碼向量合併在嵌入向量之後。
softmax函式和線性層加入到最後解碼器的輸出上。
圖17 Transformer的整體結構
注:作者實現的一個Transformer模型:lilianweng/transformer-tensorflow
SNAIL
Transformer模型沒有遞迴結構或者卷積結構,即便加入位置編碼單元對嵌入向量的位置進行編碼,對序列的順序表示也很弱。對於像強化學習這種對位置依賴性十分敏感的問題,這可能是一個大問題。
簡單神經注意力元學習(Simple Neural Attention Meta-Learner)簡稱SNAIL,通過將Transformer的自注意力機制與時序卷積相結合,部分解決了模型中位置編碼的問題。它已被證明擅長解決監督學習和強化學習任務。
圖18 SNAIL模型的結構圖
SNAIL的產生歸功於元學習,這是另一個值得寫一篇文章來歸納的大話題。但簡單來說,元學習用來預測那些新穎的但未被觀察到的、具有跟已知樣本有相同分佈的樣本資料。
自注意力生成對抗網路(Self-Attention GAN)
最後,我想提到一個最新發布的生成對抗網路模型,自注意力生成對抗網路,我們來看看注意力機制是如何應用到生成對抗網路上以提高生成影像的質量的。
經典的DGGAN(深度卷積生成對抗網路)將生成器和判別器都表示成多層卷積神經網路。然而,表示的能力受到濾波器大小的限制,因為一個畫素的特徵受限於一塊小的區域性區域。為了連線相隔很遠的區域,必須通過卷積操作來稀釋這些特徵,儘管如此,他們之間的依賴性也未必能得到很好的保證。
在計算機視覺中,由於上下文向量可以通過soft-attention明確地學習到一個畫素與其他位置所有畫素之間的關係,即便是相距甚遠的區域,它也可以輕鬆捕獲全域性的依賴關係。因此,如果將self-attention與GAN相結合,有望處理更多細節資訊。
圖19 卷積操作和自注意力機制訪問到的區域大有不同
SAGAN採用非區域性神經網路(non-local neural network)的注意力方法來計算。卷積影像的特徵圖構成三個分支,分別對應於Transformer模型中的鍵、值和查詢三個概念。
然後我們使用點積(dot-product)注意力機制來得到自注意特徵圖:
圖20 SAGAN中的自注意力機制
注意到,是注意力圖(attention map)中的一個元素,它表示模型在生成第j個位置時對第i個位置應該注意多少程度。都是1x1的卷積核。
如果你不太明白1x1的卷積是什麼意思,請參看Andrew Ng的一個簡短的教程
(鏈接:https://www.youtube.com/watch?v=9EZVpLTPGz8)。
列向量是最終的輸出結果,。
之後,輸出的注意層(attention layer)乘以一個比例係數,再放回到原始的特徵圖中,這類似於殘差連線方式:
儘管縮放係數在訓練期間從0逐漸增加,但是網路被配置為一開始依賴區域性區域中的資訊,然後通過分配更多權重給更遠區域逐漸學習到更遠區域的資訊。
圖21 SAGAN生成的大小為128×128的不同類別的示例影像
如果你發現任何這篇文章中的錯誤或者誤解,請不要猶豫跟我聯絡,我很樂意糾正這些錯誤。
參考文獻:
[1] “Attention and Memory in Deep Learning and NLP.” - Jan 3, 2016 by Denny Britz
[2] “Neural Machine Translation (seq2seq) Tutorial”
[3] Dzmitry Bahdanau, Kyunghyun Cho, and Yoshua Bengio. “Neural machine translation by jointly learning to align and translate.” ICLR 2015.
[4] Kelvin Xu, Jimmy Ba, Ryan Kiros, Kyunghyun Cho, Aaron Courville, Ruslan Salakhudinov, Rich Zemel, and Yoshua Bengio. “Show, attend and tell: Neural image caption generation with visual attention.” ICML, 2015.
[5] Ilya Sutskever, Oriol Vinyals, and Quoc V. Le. “Sequence to sequence learning with neural networks.” NIPS 2014.
[6] Thang Luong, Hieu Pham, Christopher D. Manning. “Effective Approaches to Attention-based Neural Machine Translation.” EMNLP 2015.
[7] Denny Britz, Anna Goldie, Thang Luong, and Quoc Le. “Massive exploration of neural machine translation architectures.” ACL 2017.
[8] Ashish Vaswani, et al. “Attention is all you need.” NIPS 2017.
[9] Jianpeng Cheng, Li Dong, and Mirella Lapata. “Long short-term memory-networks for machine reading.” EMNLP 2016.
[10] Xiaolong Wang, et al. “Non-local Neural Networks.” CVPR 2018
[11] Han Zhang, Ian Goodfellow, Dimitris Metaxas, and Augustus Odena. “Self-Attention Generative Adversarial Networks.” arXiv preprint arXiv:1805.08318 (2018).
[12] Nikhil Mishra, Mostafa Rohaninejad, Xi Chen, and Pieter Abbeel. “A simple neural attentive meta-learner.” ICLR 2018.
[13] “WaveNet: A Generative Model for Raw Audio” - Sep 8, 2016 by DeepMind.
[14] Oriol Vinyals, Meire Fortunato, and Navdeep Jaitly. “Pointer networks.” NIPS 2015.
[15] Alex Graves, Greg Wayne, and Ivo Danihelka. “Neural turing machines.” arXiv preprint arXiv:1410.5401 (2014).
相關連結:https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html
◆
精彩推薦
◆
4月13-14日,CSDN將在北京主辦“Python開發者日(2019)”,匯聚十餘位來自阿里巴巴、IBM、英偉達等國內外一線科技公司的Python技術專家,還有數百位來自各行業領域的Python開發者,共同探討Python在不同場景下的的應用優勢和實戰經驗。即刻掃碼搶購早鳥票,限量發售!
推薦閱讀:
❤點選“閱讀原文”,檢視歷史精彩文章。
相關文章
- 再讀Handler機制
- 注意力機制
- 解碼注意力Attention機制:從技術解析到PyTorch實戰PyTorch
- [譯] Flutter 從 0 到 1Flutter
- 三種Transformer模型中的注意力機制介紹及Pytorch實現:從自注意力到因果自注意力ORM模型PyTorch
- 從 0 到 1 認識 TypescriptTypeScript
- 從0到1實現PromisePromise
- Android Router 從 0 到 1Android
- 0到1,Celery從入門到出家
- 從0到1搭建實時反外掛機制,多維度補充手遊攻防力
- iOS必讀 – 收藏集 – 掘金iOS
- 從0到1學習介面自動化測試必備知識!
- CNN中的注意力機制綜合指南:從理論到Pytorch程式碼實現CNNPyTorch
- 學習seo如何從0到1
- gtest學習教程(從0到1)
- webpack從0到1使用指南Web
- attention注意力機制學習
- 什麼是注意力機制?
- 從0到1,開發一個動畫庫(1)動畫
- DNSLOG平臺搭建從0到1DNS
- 從0到1,小白的前端摸索之路前端
- 從0到1實現VueUI庫思路VueUI
- Android輪播圖從0到1Android
- 從0到1進行Spark history分析Spark
- 從0到1搭建自助分析平臺
- 從0到1使用kubebuiler開發operatorUI
- node專案從0到1實戰
- 從代理機制到Spring AOPSpring
- 深入理解圖注意力機制
- 《從0到1學習Flink》—— Flink 讀取 Kafka 資料批量寫入到 MySQLKafkaMySql
- Combine 框架,從0到1 —— 1.核心概念框架
- 從0到1玩轉執行緒池執行緒
- 從0到1完成一個Babel外掛Babel
- UI元件庫從0到1開發心得UI元件
- Python從0到1的學習之道Python
- Flutter 開發從 0 到 1(五)原始碼Flutter原始碼
- 從 0 到 1 開展軟體測試
- 如何理解敏捷開發的從0到1敏捷