谷歌NLP新模型「大鳥」突破BERT限制,稀疏注意力機制更省記憶體
最近Google又發了一個NLP模型,名字也很喜感Big Bird!這隻大鳥在長文字任務中能勝過BERT,它有哪些獨特之處呢?
谷歌最近又推出了一個重磅的稀疏注意力模型:Big Bird。
之前各種刷榜的BERT和它的各種衍生版本RoBERTa等,都是構建在Transformer基礎上。
這些模型的核心競爭力就是全注意力機制,但這種機制會產生序列長度的二次依賴,如果輸入的token過長,會撐爆記憶體,而長文字摘要等任務中,BERT的512token,就顯得有點捉襟見肘。
- 二次依賴限制了BERT
BERT中token的長度一般設定為512,這對普通的NLP任務來說足夠了,但是想對一整篇文章或者一本書進行資訊挖掘,也就是長文字任務,512的長度就有點短,把token長度變為1024的話,所需的計算量就會變成原來的4倍,對記憶體是很傷的。
如果能把這個n^2的複雜度降下來,那麼就能實現一個長距的上下文注意力機制,而不會把記憶體撐爆,這就是Big Bird要做的事。
谷歌團隊解決這個問題的方法,是引入一種全新的稀疏注意力機制:Big Bird。
- 谷歌「大鳥」:稀疏注意力機制更省記憶體
Big Bird相對於傳統的全注意力機制來說變的更稀疏,作為更長序列上的Transformer,Big Bird不僅能注意到更長的上下文資訊,還將計算的二次依賴降低到了線性。
我們來看下Big Bird是如何構建的。
圖(a)表示r=2的隨機注意力機制,圖(b)表示w=3的區域性注意力機制,圖(c)表示g=2的全域性注意力機制,圖(d)是三者加起來的Big Bird模型。
圖中空白的部分表示沒有注意,有顏色的部分才能得到關注,有點像dropout的選擇性丟棄。
注意的部分減少了,效能會不會打折扣,我們來看下實驗結果。
- 實驗:三種注意力機制結合效果最好
只採用隨機注意力機制、區域性注意力機制,或者兩者融合起來,都沒有三者合體的效果好。
Global+R+W在MLM任務上超過了BERT-base,在SQuAD和MNLI任務上接近了BERT-base,但是考慮到記憶體上節省了很多資源,還是有其實用價值。
使用基礎的模型,在HotpotQA、Natural QA、 TriviaQA和WikiHop四個問答任務上進行了測試,結果表明Big Bird均超越了RoBERTa和Longformer。
在長文字摘要中,Big Bird也是表現出了很好的潛力,在Arxiv,PubMed,BigPatent上均取得了最好成績。
使用這些資料集,因為它們都是長文件,輸入不僅僅是512個token,更容易對比長文字的特徵提取能力和模型的總體效能。
reddit上有網友對Big Bird提出了質疑認為Big Bird只是另一種Longformer,沒有什麼本質創新。
有網友說,最近爆火的GPT-3也用了稀疏注意力機制,但是因為OpenAI的blocksparse太久沒更新了,所以不知道二者有沒有內在的相似性。
谷歌發表的一些研究,之前也有人提出過類似的,但只有谷歌發出來,才能得到廣泛的關注,進大廠發論文的機率還是高啊。
期待Big Bird給NLP任務帶來新的驚喜!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2710743/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Bengio等人新作:注意力可被視為RNN,新模型媲美Transformer,但超級省記憶體RNN模型ORM記憶體
- 最強NLP預訓練模型!谷歌BERT橫掃11項NLP任務記錄模型谷歌
- jvm:記憶體模型、記憶體分配及GC垃圾回收機制JVM記憶體模型GC
- 谷歌Chrome瀏覽器引入省記憶體/省電模式:減少記憶體佔用谷歌Chrome瀏覽器記憶體模式
- Java記憶體模型,垃圾回收機制,常用記憶體命令及工具Java記憶體模型
- 效能媲美BERT,引數量僅為1/300,谷歌最新的NLP模型谷歌模型
- Android彈藥庫——記憶體管理機制與程式模型Android記憶體模型
- 深入理解BERT Transformer ,不僅僅是注意力機制ORM
- jvm記憶體管理機制JVM記憶體
- javaScript 記憶體管理機制JavaScript記憶體
- js記憶體回收機制JS記憶體
- Java記憶體管理機制Java記憶體
- Netweaver工作程式的記憶體限制 VS CloudFoundry應用的記憶體限制記憶體Cloud
- Python如何管理記憶體?記憶體分配機制是什麼?Python記憶體
- RAG新突破:塊狀注意力機制實現超低延遲檢索增強
- 記憶體模型記憶體模型
- 程式設計師修仙之路--突破記憶體限制的高效能排序程式設計師記憶體排序
- 【記憶體管理】頁面分配機制記憶體
- Java程式執行記憶體機制Java記憶體
- 記憶體管理機制的發展記憶體
- Redis 記憶體淘汰機制詳解Redis記憶體
- 淺析java記憶體管理機制Java記憶體
- 關於JavaScript的記憶體機制JavaScript記憶體
- Java的記憶體管理機制之記憶體區域劃分Java記憶體
- NLP與深度學習(六)BERT模型的使用深度學習模型
- 大模型學習筆記:attention 機制大模型筆記
- 聊聊 記憶體模型與記憶體序記憶體模型
- 注意力機制
- Java記憶體模型FAQ(一) 什麼是記憶體模型Java記憶體模型
- 理解BERT:一個突破性NLP框架的綜合指南框架
- Redis的記憶體和實現機制Redis記憶體
- Python記憶體管理機制-《原始碼解析》Python記憶體原始碼
- android記憶體管理機制與優化Android記憶體優化
- 建立快取記憶體機制-java版快取記憶體Java
- golang 釋放記憶體機制的探索Golang記憶體
- 垃圾收集機制與記憶體分配策略記憶體
- JVM自動記憶體管理機制 二JVM記憶體
- Android Handler機制之記憶體洩漏Android記憶體