首頁  >  文章  >  科技週邊  >  如何提升深度學習演算法效率,Google有這些絕招

如何提升深度學習演算法效率,Google有這些絕招

PHPz
PHPz轉載
2023-04-11 11:43:021460瀏覽

十年前,深度学习崛起的部分原因在于新算法和架构的融合、数据的显著增加以及计算能力方面的提升。过去 10 年里,AI 和 ML 模型更加深入、复杂、有了更多的参数和训练数据,也因而变得更大、更繁琐,这也为机器学习历史带来了最具变革性的成果。

这些模型越来越多地应用于生产和业务应用程序中,与此同时,其效率和成本已经从次要的考虑因素演变为主要的限制。为了应对在高效架构,训练效率,数据效率和推理效率四个层面的重大挑战,谷歌继续在 ML 效率上投入大量资金。除了效率之外,这些模型还面临着许多关于真实性、安全性、隐私性和新鲜度的挑战。接下来,本文将重点介绍 Google Research 为了应对上述挑战,在开发新算法方面所做的努力。

研究的基本问题在于「是否有更好的方法来参数化模型以提高效率?」2022 年,研究人员专注于通过检索上下文、混合专家系统,以及提升 Transformer(大型 ML 模型的心)的效率来研发通过增强模型来注入外部知识的新技术。 

上下文增强模型

为了追求更高的质量和效率,可以使用来自大型数据库或可训练内存的外部上下文来增强神经模型。通过利用检索到的上下文,神经网络无需在其内部参数中广泛地储备知识,就能实现更好的参数效率、可解释性和真实性。 

一篇名为《用于上下文增强语言建模的解耦上下文处理》(Decoupled Context Processing for Context Augmented Language Modeling)的文章中探索了一种基于解耦编码器 - 解码器架构的简单架构,用于将外部上下文合并到语言模型中。在自回归语言建模和开放领域问答任务中,这大大节省了计算量。然而,预训练大型语言模型(LLMs)通过在大型训练集上的自监督消耗了大量的信息。但是,目前还不清楚这些模型对世界的认识是如何与所呈现的上下文相互作用的。通过知识感知微调(KAFT),研究人员将反事实和不相关的上下文纳入标准监督数据集,这加强了 LLM 的可控性和鲁棒性。

如何提升深度學習演算法效率,Google有這些絕招

 论文地址:https://arxiv.org/abs/2210.05758

如何提升深度學習演算法效率,Google有這些絕招

用于上下文合并的编码器 - 解码器交叉注意机制,允许上下文编码与语言模型推理解耦,进而提升上下文增强模型的效率。 

在寻求模块化深度网络的过程中,其中一个问题是如何设计具有相应计算模块的概念数据库。研究人员提出了一种理论体系架构,将「记忆事件」(remember events)以 sketches 的形式存储在一个外部 LSH 表中,其中包括一个 pointers 模块来处理 sketches。

利用加速器从大型数据库中快速检索信息是上下文增强模型的另一大挑战。研究人员开发了一种基于 TPU 的相似度搜索算法,该算法与 TPU 的性能模型保持一致,并对预期召回率提供了分析保证,实现了峰值性能。搜索算法通常涉及大量的超参数和设计选择,这使得在执行新任务时很难对它们进行调整。研究人员提出了一种新的约束优化算法,用于自动化超参数调优。将期望的成本或召回率固定为输入,所提出的算法产生的调优在经验上非常接近速度 - 召回率帕累托边界(speed-recall Pareto frontier),并在标准基准测试中提供领先的性能。

混合專家模型

已證明,混合專家 (MoE)模型是在不過度增加計算成本的前提下,提高神經網路模型容量的有效手段。 MoE 的基本概念是由許多專家子網路建構出一個統一網絡,其中每個輸入由一個合適的專家子集處理。因此,與標準神經網路相比,MoE 只調用了整個模型的一小部分,從而產生瞭如 GLaM 等語言模型應用程式所示的高效率。

如何提升深度學習演算法效率,Google有這些絕招

#GLaM 體系架構中的每個輸入token 被動態路由到64 個專家網路中的兩個進行預測。

對於給定的輸入,路由函數負責決定應激活哪些專家,該函數的設計具有挑戰性,因為研究者希望避免對每個專家的利用不足和過度利用。最近的一項工作提出了專家選擇路由,這是一種新的路由機制,它不是將每個輸入 token 分配給 top-k 專家,而是將每個專家分配給 top-k token。這將自動確保專家的負載平衡,同時也自然地允許多個專家處理一個輸入 token。

如何提升深度學習演算法效率,Google有這些絕招

專家選擇路由。具有預定緩衝區容量的專家被分配 top-k token,從而確保負載平衡。每個 token 可以由數量不定的專家處理。

有效的Transformer

Transformer 是當下正火熱的序列到序列模型,在從視覺到自然語言理解等一系列具有挑戰性的問題上取得了顯著的成功。這種模型的核心組成部分是注意力層,它識別查詢和鍵之間的相似性,並使用這些相似性來建構一個適當的值加權組合。雖然性能強,但注意力機制的運算效率卻不高,複雜度通常為輸入序列長度的二次方。

隨著Transformer 規模的不斷增長,其中一個問題的研究十分有價值,即是否有任何自然發生的結構或模式的學習模型,可以解決注意力有效的原理。為此,研究人員研究了中間 MLP 層中的學習嵌入,並且發現它們非常稀疏 —— 例如,T5-Large 模型有 1% 的非零項。稀疏性進一步表明,人們可以在不影響模型性能的情況下潛在地降低 FLOPs。

論文網址:https://arxiv.org/pdf/2210.06313.pdf

最近,有研究推出 Treeformer— 一種依賴決策樹的標準注意力計算的替代方案。簡單來說,這可以快速識別與查詢相關的鍵的一小部分,並且只對該集合執行注意力操作。根據經驗,Treeformer 可以將注意力層的 FLOPs 降低 30 倍。除此之外還有序列注意力 —— 一種結合了注意力和貪婪演算法的可微分特徵選擇方法。該技術對線性模型有很強的可證明保證,並可無縫擴展到大型嵌入模型。

另一種提高 Transformer 效率的方法是在註意力層中加速 softmax 計算。在「low-rank approximation of the softmax kernel」研究基礎上,研究人員提出了一類新的隨機特徵,提供了softmax kernel 的首個「positive and bounded」隨機特徵近似,並且在序列長度上的計算是線性的。

訓練效率

高效的最佳化方法是現代 ML 應用程式的基石,在大規模設定中,這一點尤其重要。在這種設定下,即使是像 Adam 這樣的一階自適應方法通常也很昂貴,訓練穩定性面臨重重挑戰。此外,這些方法通常對神經網路的架構不可知,因此忽略了架構的豐富性,導致訓練效率低落。這也促使新技術不斷被提出以更有效地優化現代神經網路模型。研究人員正在開發新的架構感知訓練技術,例如,用於訓練Transformer 網路的一些研究,包括新的規模不變的Transformer 網路和新的剪枝方法,並與隨機梯度下降(SGD)結合使用,以加快訓練進程。在該方法的幫助下,研究人員第一次能夠使用簡單的 SGD 有效地訓練 BERT,而不需要自適應。

如何提升深度學習演算法效率,Google有這些絕招

#論文網址:https://arxiv.org/pdf/2210.05758.pdf

 此外,研究人員在LocoProp 的幫助下提出了一種新的方法— 在使用與一階優化器相同的計算和記憶體資源的同時,實現與二階優化器類似的性能。 LocoProp 採用模組化的神經網路視圖,將它們分解成層的組合。然後允許每一層都有自己的損失函數以及輸出目標和權重正則化器。有了這個設置,經過適當的前後傳遞後,LocoProp 繼續對每一層的局部損失進行並行更新。事實上,無論是理論上還是經驗上,這些更新可以被證明類似於那些高階優化器。在深度自編碼器基準上,LocoProp 實現了與高階優化器相當的效能,同時更具速度優勢。

論文連結:https://proceedings.mlr.press/v151/amid22a.html

與反向傳播類似,LocoProp應用前向傳遞來計算激活。在向後傳遞中,LocoProp 為每一層設定每個神經元目標。最後,LocoProp 將模型訓練拆分為跨層的獨立問題,其中幾個本地更新可以並行應用於每個層的權重。

SGD 等最佳化器的核心概念是,每個資料點從分佈中獨立且相同地取樣。可惜這在實際環境中很難滿足,例如強化學習,在這種情況下,模型(或智能體)必須從基於自己預測生成的數據中學習。研究人員提出了一種新的基於反向經驗重播的 SGD 演算法,該演算法可以在線性動力系統、非線性動力系統和 Q-learning 中找到最佳解。此外,已經有研究證明該方法的增強版本 IER 是目前最先進的版本,並且是在各種流行的 RL 基準測試中最穩定的體驗重播技術。

如何提升深度學習演算法效率,Google有這些絕招

#論文網址:https://arxiv.org/pdf/2103.05896.pdf

資料效率

在許多任務中,深度神經網路嚴重依賴大型資料集。除了大型資料集帶來的儲存成本和潛在的安全 / 隱私問題外,在此類資料集上訓練現代深度神經網路還會產生很高的運算成本。解決這個問題的可行方法之一是對資料子集進行選擇。

研究人員分析了子集選擇框架,設計用於實際批次設定中的任意模型族。在這種情況下,學習器可以一次採樣一個範例,同時存取上下文和 true 標籤,但為了限制開銷,只有在選擇了足夠多的範例批次後才能更新其狀態(即進一步的訓練模型權重)。研究人員開發了一種演算法,稱為 IWeS,它透過重要性抽樣來選擇範例,其中分配給每個範例的抽樣機率是基於在先前選擇的批次上訓練的模型的熵。研究所提供的理論分析證明了泛化和抽樣率的界限。 

如何提升深度學習演算法效率,Google有這些絕招

#

論文地址:https://arxiv.org/pdf/2301.12052.pdf

訓練大型網路的另一個問題是,它們可能對訓練資料和部署時看到的資料之間的分佈變化高度敏感,特別是在使用有限數量的訓練資料時,這些資料可能無法覆蓋所有部署時場景。最近的一項研究假設「極端簡單性偏差」是神經網路這種脆弱性背後的關鍵問題,其使這一假設成為可行,導致了兩種新的互補方法——DAFT 和FRR—— 結合在一起時,可以提供明顯更穩健的神經網路。特別是,這兩種方法使用對抗性微調以及反向特徵預測來加強學習網路。

如何提升深度學習演算法效率,Google有這些絕招

#論文網址:https://arxiv.org/pdf/2006.07710.pdf

推理效率

事實證明,增加神經網路的規模能夠提高其預測準確性,然而,在現實世界中實現這些收益是具有挑戰性的,因為大型模型的推理成本對於部署來說非常高。這促使策略提高服務效率,而不犧牲準確性。在 2022 年,專家研究了實現這一目標的不同策略,特別是基於知識蒸餾和自適應計算的策略。

蒸餾

# 蒸餾是一種簡單而有效的模型壓縮方法,極大地擴展了大型神經模型的潛在適用性。已有研究證明蒸餾能在廣告推薦等一系列實際應用中發揮其作用。蒸餾的大多數用例涉及基本配方在給定領域的直接應用,對何時以及為什麼這應該起作用的理解有限。谷歌今年的研究著眼於針對特定環境客製化蒸餾,並正式研究了控制蒸餾成功的因素。

在演算法方面,研究透過仔細建模教師標籤中的噪聲,開發出了一項重新加權訓練範例的重要途徑,以及一項有效措施來對資料子集進行採樣以獲得教師標籤。谷歌在《Teacher Guided Training: An Efficient Framework for Knowledge Transfer》中表明:不是被動地使用教師來註釋固定的資料集,而是主動地使用教師來指導選擇要註釋的資訊性樣本。這使得蒸餾過程在有限的數據或長尾設置中脫穎而出。

論文網址:https://arxiv.org/pdf/2208.06825.pdf

除此之外,Google也研究了從交叉編碼器(dual-encoder, 例如BERT) 到因子雙編碼器(dual-encoder)的新方法,這也是對(query, document)對的相關性進行評分的重要設定。研究人員探討了交叉編碼器和雙編碼器之間表現差距的原因,並注意到這可能是泛化的結果,而不是雙編碼器的容量限制。精餾損失函數的精心構造可以緩解這種情況,並減少交叉編碼器和雙編碼器性能之間的差距。隨後,在 embedtitil 中,研究透過匹配教師模型中的嵌入來進一步改進雙編碼器蒸餾。這種策略也可以用於從大到小的雙編碼器模型中提取信息,其中繼承和凍結教師的文檔嵌入可以證明是非常有效的。

如何提升深度學習演算法效率,Google有這些絕招

#論文網址:https://arxiv.org/pdf/2301.12005.pdf

理論方面,研究從監督複雜性角度出發,提供了一個關於蒸餾的新視角,這是一種衡量學生預測教師標籤程度的方法。 NTK(neural tangent kernel )理論提供了概念性的見解。研究進一步證明,蒸餾會導致學生不適合教師模型認為難以建模的點。直觀地說,這可以幫助學生將有限的能力集中在那些可以合理建模的樣本上。

如何提升深度學習演算法效率,Google有這些絕招

#論文網址:https://arxiv.org/pdf/2301.12245.pdf

自適應計算

雖然蒸餾是一種降低推理成本的有效手段,但它在所有樣本上都是一致的。然而,直觀地說,一些簡單(easy)樣本可能天生就比困難(hard)樣本需要更少的計算。自適應計算的目標是設計能夠實現這種依賴樣本的計算的機制。

CALM(Confident Adaptive Language Modeling)為基於 Transformer 的文字產生器(如 T5)引入了受控的早期退出(early-exit)功能。

如何提升深度學習演算法效率,Google有這些絕招

#論文網址:https://arxiv.org/pdf/2207.07061.pdf

在這種形式的自適應計算中,模型動態地修改每個解碼步驟使用的Transformer 層數。早期退出閘門使用具有決策閾值的置信度測量,該決策閾值經過校準,以滿足統計效能保證。透過這種方式,模型只需要為最具挑戰性的預測計算解碼器層的完整堆疊。更簡單的預測只需要計算幾個解碼器層。在實踐中,該模型平均使用大約三分之一的層進行預測,在保持相同水平的生成質量的同時,速度能提升 2-3 倍。

如何提升深度學習演算法效率,Google有這些絕招

使用常規語言模型(top)和 CALM (bottom)產生文字。 CALM 試圖做出早期預測。一旦對生成的內容足夠自信(深藍色調),它就會跳過來節省時間。

一種流行的自適應電腦制是兩個或多個基本模型的級聯。使用級聯的一個關鍵問題:是簡單地使用目前模型的預測,還是將預測推遲到下游模型。學習何時延遲需要設計一個合適的損失函數,它可以利用適當的訊​​號作為延遲決策的監督。為了實現這一目標,研究人員正式研究了現有的損失函數,證明由於隱含的標籤平滑應用,它們可能不適合訓練樣本。研究展示了可以透過延遲規則的 post-hoc 訓練來緩解這種情況,這並不需要以任何方式修改模型內部。

如何提升深度學習演算法效率,Google有這些絕招

#論文網址:https://openreview.net/pdf?id=_jg6Sf6tuF7

對於檢索應用,標準語意搜尋技術對大型模型產生的每個嵌入使用固定表示。也就是說,無論下游任務及其相關的運算環境或限制如何,表示的大小和能力基本上是固定的。 MRL(Matryoshka representation learning)引入了根據部署環境調整表示法的靈活性。當與標準的近似最近鄰搜尋技術(如 ScaNN)結合使用時,MRL 能夠提供高達 16 倍的低計算,同時具有相同的召回率和準確率指標。

如何提升深度學習演算法效率,Google有這些絕招

#論文網址:https://openreview.net/pdf?id=9njZa1fm35

以上是如何提升深度學習演算法效率,Google有這些絕招的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除