寫在前面:自 2017 年 Transformer 技術出現以來,便在 NLP、CV、語音、生物、化學等領域引起了諸多進展。知源月旦團隊期望通過「Transformer+X」 梳理清 Transformer 技術的發展脈絡,以及其在各領域中的應用進展,以期推動 Transformer 技術在更多領域中的應用。限於篇幅,在這篇推文中,我們先介紹 Transformer 的基本知識,以及其在 NLP 領域的研究進展;後續我們將介紹 Transformer + CV / 語音/生物/化學等的研究。
Github:floatingCatty/BAAI-Monthly-Transformer模型由Google在2017年在 Attention Is All You Need[1] 中提出。該文使用 Attention 替換了原先Seq2Seq模型中的循環結構,給自然語言處理(NLP)領域帶來極大震動。隨著研究的推進,Transformer 等相關技術也逐漸由 NLP 流向其他領域,例如計算機視覺(CV)、語音、生物、化學等。因此,我們希望能通過此文盤點 Transformer 的基本架構,分析其優劣,並對近年來其在諸多領域的應用趨勢進行梳理,希望這些工作能夠給其他學科提供有益的借鑑。1.1 Transformer 結構Transformer 模型結構如圖1所示,模型由6個編碼器(Encoder)和6個解碼器(Decoder) 組成,輸入(Inputs)和輸出(Outputs)通過同一個訓練好的詞嵌入層(Word Embedding)將輸入字符轉換為維度為d的向量。Transformer對編碼器(Encoder)與解碼器(Decoder)兩端的序列分別添加位置編碼(Positional Encoding)。之後,編碼經過含有多頭自注意力機制(Multi-head Self-Attention)、位置前向傳播網絡(Position-wise Feed-Forward Network)、殘差連接(Residual Connection)和層歸一化(Layer Normalization)的計算單元。由於Transformer的計算拋棄了循環結構的遞歸和卷積,無法模擬文本中的詞語位置信息,因而需要人為添加。該過程稱為位置編碼(Positional Encoding),使用詞的位置向量,表示單詞在句中的位置與詞間的相對位置,在Transformer中與句子的嵌入表示相加,獲得模型輸入。Vaswani et.al[1]提出 Positonal Encoding的兩種方式:一種是學習得到,隨機初始化後加入模型作為參數進行訓練。一種是使用不同頻率的正弦和餘弦函數,在每個詞語的詞向量的偶數位置添加sin變量,奇數位置添加cos變量,以此填滿Positional Encoding矩陣,該方式保證了每個位置向量不重複而且不同之間的位置之間存在線性關係,在計算注意力權重的時候(兩個向量做點積),相對位置的變化會對注意力產生影響,而絕對位置變化不會對注意力產生影響,這更符合常理。上述方式都是將單詞嵌入向量與位置嵌入向量分開訓練,且只能接受整型數值作為詞索引或位置索引,不能捕捉有序的關係,例如鄰接關係或優先級,會導致每個位置上的位置向量是彼此獨立的,稱之為 Position Independence Problem[2]。針對這個問題,Benyou et.al 提出了一種改進方法——將以前定義為獨立向量的詞嵌入擴展為以位置 pos 為自變量的連續函數。這樣詞的表示可以隨著位置的變化而平滑地移動,不同位置上的詞表示就可以互相關聯起來。實驗結果表示,Complex Embedding 在性能上有較大的優化和提高。注意力機制(Attention Mechanism)作為對Seq2Seq模型的改進而被提出。在機器翻譯任務中,目標語言與輸入語言的詞彙之間,存在一些對應關係,Bahdanau[3] 鮮明地指出了固定大小的中間層維度對翻譯任務的限制,並直接計算 BiRNN 對輸入的編碼h與候選輸出的編碼的s之間的相似度量作為替代,根據相似得分輸出預測的目標語言詞彙。這突破了 Seq2Seq 模型學習的中間表徵h的維度對輸入信息的限制。日後發展出的大多 Attention 機制仍可以表述在這一框架下,即計算輸入的表示與輸出表示間的得分 score,作為判斷輸出單詞的依據,但不同的是,對於輸入詞的編碼採用了不同的處理模型,例如RNN,CNN[4]等。在 Transformer 以及後續的主流模型中,多採用多頭自注意力機制(Scale-dot Product Self-Attention)。自注意力在 Cheng et. al.[5] 的機器閱讀工作中提出,該模型採用加和式的 Attention 得分,計算輸入新詞與前文各詞的聯繫,使用加和式注意力計算:Transformer 中採用的是多頭自注意力機制[1]。在 Encoder 中,Q、K、V均為輸入的序列編碼,而多頭的線性層可以方便地擴展模型參數。該方法經常被表示為詞與詞之間的全連接結構[6],同一序列中詞的關係直接由 score 值計算得到,不會因為時序、傳播的限制而造成信息損失,有利於模擬長程依賴,但也有工作通過實驗表明[7],多頭注意力機制解決長程依賴是由於參數量的增加,若在同規模下對比,相對CNN,RNN並未有明顯提升。自注意力長程依賴、可擴展、多連接等特點讓其在語言任務上表現出色。許多工作針對計算開銷問題提出了改進。Kitaev et. al[8] 的 Reformer,並在計算時,使用相同的線性層參數計算Q、K矩陣,並對每個 Query 單獨計算 Attention 得分,這樣雖然增加了循環次數,但卻能將存儲開銷變為原來的平方根級。此外,考慮到 Softmax 函數更多關注序列中較大的值,因此篩選了部分相似的 Token 計算相關性值,這與 Rewon Child[9] 提出了 Sparse Attention 優化計算的方法相似。Zhang et. al.[10] 在 TensorCoder 中提出了維度的 Scale-dot Product Attention,將計算開銷從O(N^2d),降低到O(Nd^2),對於序列長度大於詞向量維度時,能有效降低開銷。3)Position-Wise Feed-Forward NetworkFixed Patterns(固定模式):將視野限定為固定的預定義模式,例如局部窗口、固定步幅塊,用於簡化注意力矩陣;
Combination of Patterns(組合模式):通過組合兩個或多個不同的模式來提高效率;
Learnable Patterns(可學習模式):以數據驅動的方式學習訪問模式,關鍵在於確定 Token 相關性。
Memory(內存):利用可以一次訪問多個 Token 的內存模塊,例如全局存儲器。
Low Rank(低秩):通過利用自注意力矩陣的低秩近似,來提高效率。
Kernels(內核):通過內核化的方式提高效率,其中核是注意力矩陣的近似,可視為低秩方法的一種。
Recurrence(遞歸):利用遞歸,連接矩陣分塊法中的各個塊,最終提高效率。
[1]Vaswani, Ashish, et al. "Attention is all you need." Advances in neural information processing systems 30 (2017): 5998-6008.[2]Wang, Benyou, et al. "Encoding word order in complex embeddings." arXiv preprint arXiv:1912.12333 (2019).[3]Bahdanau, Dzmitry, Kyunghyun Cho, and Yoshua Bengio. "Neural machine translation by jointly learning to align and translate." arXiv preprint arXiv:1409.0473 (2014).[4]Gehring, Jonas, et al. "Convolutional sequence to sequence learning." arXiv preprint arXiv:1705.03122 (2017).[5]Cheng, Jianpeng, Li Dong, and Mirella Lapata. "Long short-term memory-networks for machine reading." arXiv preprint arXiv:1601.06733 (2016).[6]Guo, Qipeng, et al. "Star-transformer." arXiv preprint arXiv:1902.09113 (2019).[7]Tang, Gongbo, et al. "Why self-attention? a targeted evaluation of neural machine translation architectures." arXiv preprint arXiv:1808.08946 (2018).[8]Kitaev, Nikita, Łukasz Kaiser, and Anselm Levskaya. "Reformer: The efficient transformer." arXiv preprint arXiv:2001.04451 (2020).[9]Child, Rewon, et al. "Generating long sequences with sparse transformers." arXiv preprint arXiv:1904.10509 (2019).[10]Zhang, Shuai, et al. "TensorCoder: Dimension-Wise Attention via Tensor Representation for Natural Language Modeling." arXiv preprint arXiv:2008.01547 (2020).[11]Ioffe, Sergey , and C. Szegedy . "Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift." (2015).[12]Ba, Jimmy Lei , J. R. Kiros , and G. E. Hinton . "Layer Normalization." (2016).[13]Xiong, Ruibin , et al. "On Layer Normalization in the Transformer Architecture." (2020).[14]Lee, Juho, et al. "Set transformer: A framework for attention-based permutation-invariant neural networks." International Conference on Machine Learning. PMLR, 2019.[15]Dai, Zihang, et al. "Transformer-xl: Attentive language models beyond a fixed-length context." arXiv preprint arXiv:1901.02860 (2019).[16]Tay, Yi, et al. "Efficient transformers: A survey." arXiv preprint arXiv:2009.06732 (2020).[17]Radford, Alec, et al. "Improving language understanding by generative pre-training." (2018): 12.[18]Devlin, Jacob, et al. "Bert: Pre-training of deep bidirectional transformers for language understanding." arXiv preprint arXiv:1810.04805 (2018).[19]Liu, Xiaodong, et al. "Multi-task deep neural networks for natural language understanding." arXiv preprint arXiv:1901.11504 (2019).[20]餘同瑞,金冉,韓曉臻,李家輝,鬱婷.Tongrui Yu,ra自然語言處理預訓練模型的研究綜述,2020[21]Xipeng Qiu,Tianxiang Sun,Yige Xu,etc.Pre-trained Models for Natural Language Processing: A Survey,2020[22]Yoshua Bengio, et al. "A neural probabilistic language model." Journal of machine learning research, 3(Feb):1137–1155, 2003.[23]Ronan Collobert, JasonWeston, L´eon Bottou, Michael Karlen,Koray Kavukcuoglu, and Pavel P. Kuksa. Natural language processing (almost) from scratch. J. Mach. Learn. Res., 2011.[24]Tomas Mikolov, Ilya Sutskever, Kai Chen, Gregory S. Corrado, and Jeffrey Dean. Distributed representations of words and phrases and their compositionality. In NeurIPS, 2013.[25]Jeffrey Pennington, Richard Socher, and Christopher D. Manning. GloVe: Global vectors for word representation. In EMNLP, 2014.[26]Piotr Bojanowski, Edouard Grave, Armand Joulin, and Tomas Mikolov. Enriching word vectors with subword information.TACL, 5:135–146, 2017.[27]Bryan McCann, James Bradbury, Caiming Xiong, and Richard Socher. Learned in translation: Contextualized word vectors. In NeurIPS, 2017.[28]Oren Melamud, Jacob Goldberger, and Ido Dagan. Context2Vec: Learning generic context embedding with bidirectional LSTM. In CoNLL, pages 51–61, 2016.[29]Prajit Ramachandran, Peter J Liu, and Quoc Le. Unsupervised pretraining for sequence to sequence learning. In EMNLP,pages 383–391, 2017.[30]Jeremy Howard and Sebastian Ruder. Universal language model fine-tuning for text classification. In ACL, pages 328–339, 2018.[31]Yang, Zhilin, et al. "Xlnet: Generalized autoregressive pretraining for language understanding." Advances in neural information processing systems. 2019.[32]Liu, Yinhan, et al. "Roberta: A robustly optimized bert pretraining approach." arXiv preprint arXiv:1907.11692 (2019).[33]Lan, Zhenzhong, et al. "Albert: A lite bert for self-supervised learning of language representations." arXiv preprint arXiv:1909.11942 (2019).想要了解更多資訊,請掃描下方二維碼,關注機器學習研究會
轉自:極市平臺