張量網絡正越來越多地用於機器學習領域,它被用於執行複雜計算任務,但對於大多數人來說它仍然遙不可及——我們還沒有開源庫來大規模運行這種底層算法。幸運的是,谷歌正在解決這一問題。昨天,Google AI 發布了 TensorNetwork,它使用 TensorFlow 機器學習框架作為後端,並用 GPU 優化來提高張量計算的效率。
TensorNetwork 連結:https://github.com/google/tensornetwork
在科學領域有很多難度頗高的挑戰,如開發高溫超導體、理解時空的本質,這些任務需要處理複雜的量子系統。其中最具挑戰的是系統中量子態的數量呈指數級增長,使得暴力計算變得不可行。為了解決這個問題,人們開發了張量網絡(tensor network)這一數據結構。
張量網絡讓我們專注於量子態與現實世界問題最相關的部分——如低能態,並忽略那些不太相關的部分。張量網絡也越來越多地出現在機器學習(ML)應用中。然而,我們仍然能在 ML 社區中看到廣泛應用張量網絡所面臨的困難:1)目前還沒有生產級的張量網絡庫用於規模化地運行張量網絡算法;2)大多數張量網絡文獻是物理學應用方向的,這就產生了一種錯誤的固有印象:只有通曉量子力學知識才能理解張量網絡算法。
為了解決這些問題,谷歌發布了 TensorNetwork:一個旨在提高張量計算效率的全新開源庫。谷歌表示,這個工具是與加拿大圓周理論物理研究所(Perimeter Institute for Theoretical Physics)、谷歌 X 公司共同開發的產品。它使用 TensorFlow 作為後端,針對 GPU 進行優化,與 CPU 上的運行速度相比實現了 100 倍的加速。
谷歌還在一系列論文中介紹了 TensorNetwork,其中第一篇論文《TensorNetwork: A Library for Physics and Machine Learning》介紹了這個庫及其 API,並為非物理背景讀者介紹了張量網絡的背景。在第二篇論文《TensorNetwork on TensorFlow: A Spin Chain Application Using Tree Tensor Networks》中,谷歌將重點放在一個物理問題的案例上,介紹了如何使用這一工具並獲得 GPU 加速。
為何張量網絡如此好用?
張量是多維數組,按照階數分類:例如普通數是零階張量(也被稱為標量),向量是一階張量,矩陣是二階張量,以此類推……雖然低階張量可以簡單地使用數組或者 T_ijnklm 這樣的數學符號來表示(其中指數的數字代表張量的階數),但如果我們要處理高階張量,這種符號表示法就會很繁瑣。
在這種情況下使用圖解表示法(diagrammatic notation)是更好的選擇,人們只需要畫一個圓(其他形狀也行)和若干條線(或腿),腿的數量表示張量的階數。在這種符號體系中,標量是一個圓,向量有一條腿,矩陣有兩條腿,以此類推……張量的每一條腿也有一個維度,就是腿的長度。例如,代表物體在空間中速度的向量就是三維一階張量。
張量的圖解表示
以這種方式表示張量的優點是可以簡潔地編碼數學運算,例如將一個矩陣乘以一個向量以產生另一個向量,或者將兩個向量相乘以產生標量。這些都是更為通用的「張量縮並」概念的示例。
張量縮並的圖解表示法。以上示例包括向量和矩陣相乘,以及矩陣跡(即矩陣對角元素的總和)。
以下是張量網絡的簡單示例,它們用圖的形式表示將多個張量進行縮並形成新張量的過程。每個張量組件的階數由其腿的數量決定。腿相連形成一條邊表示縮並,而「落單」的腿的個數決定最終張量的階數。
左:四個矩陣乘積的跡 tr(ABCD),這是一個標量(該圖中沒有出現「落單」的腿)。右:三個三階張量通過張量縮並過程生成新的三階張量(其中有三個「落單」的腿)。
儘管這些示例很簡單,但張量網絡通常可以表示壓縮後的數百個張量。使用傳統符號描述這一過程比較困難,這也是 1971 年 Roger Penrose 創造圖解表示法的原因。
實踐中的張量網絡
給出一些黑白圖像,每一張圖像都可以被認為是 N 個像素值的列表。單個圖像中的單個像素可以被 one-hot-encode 為二維向量,將這些像素編碼結果結合起來會得到整個圖像的 2^N 維 one-hot-encoding 結果。谷歌將高維向量轉化為 N 階張量,然後將所有圖像的所有張量聚合到一起得到張量 T_(i1,i2,...,iN)。
這看起來似乎是在浪費時間:用這種方式編碼約 50 像素的圖像就需要拍字節級別(petabytes)的內存。而這正是張量網絡的作用所在。研究人員沒有直接存儲或操縱張量 T,而是將 T 表示為張量網絡內的多個小的張量組合,這樣就高效得多了。例如,流行的矩陣乘積態(matrix product state,MPS)網絡可以將 T 表示為 N 個較小的張量,從而使總參數量為 N 的線性級,而不是指數級。
在 MPS 張量網絡中,高階張量 T 被表示為多個低階張量。
這並不能表明,在高效創建或操縱大型張量網絡的同時能夠持續避免使用大量內存。但這至少說明在某些情況下是可能的,這也是張量網絡廣泛用於量子物理和機器學習領域的原因。Stoudenmire 和 Schwab 在論文《Supervised Learning with Quantum-Inspired Tensor Networks》中使用這種編碼來創建圖像分類模型,展示了張量網絡的新用途。而谷歌開發的 TensorNetwork 庫旨在推進這類工作,谷歌在 TensorNetwork 相關論文《TensorNetwork: A Library for Physics and Machine Learning》中介紹了該庫的用途。
TensorNetwork 在物理場景中的性能
TensorNetwork 是一個針對張量網絡算法的通用庫,因此它適用於物理學場景。逼近量子態是張量網絡在物理學領域的傳統用法,恰好可以說明 TensorNetwork 庫的能力。谷歌在另一篇論文《TensorNetwork on TensorFlow: A Spin Chain Application Using Tree Tensor Networks》中,介紹了一種樹張量網絡(tree tensor network,TTN),它可以逼近周期性量子自旋鏈(一維)或 thin torus 上點陣模型(二維)的真值狀態。谷歌使用 TensorNetwork 庫實現了該算法。此外,谷歌研究人員還對比了使用 CPU 和 GPU 的情況,發現在使用 GPU 和 TensorNetwork 庫時出現了顯著的計算加速(100 倍)。
連接維度 vs 計算時間。連接維度(bond dimension)決定張量網絡中張量的大小。連接維度越大說明張量網絡越強大,但同時也需要更多的計算資源。
結論和未來工作
谷歌表示這是闡述 TensorNetwork 在現實應用中作用的系列文章的第一篇,後續谷歌將使用 TensorNetwork 在 MNIST 和 Fashion-MNIST 上執行圖像分類,以及時序分析、量子電路模擬等。谷歌希望 TensorNetwork 能夠成為物理學家和機器學習從業者的得力助手。
原文連結:https://ai.googleblog.com/2019/06/introducing-tensornetwork-open-source.html