百倍提升張量計算:谷歌開源TensorNetwork

2021-01-09 機器之心Pro

張量網絡正越來越多地用於機器學習領域,它被用於執行複雜計算任務,但對於大多數人來說它仍然遙不可及——我們還沒有開源庫來大規模運行這種底層算法。幸運的是,谷歌正在解決這一問題。昨天,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

相關焦點

  • 谷歌開源TensorFlow Object Detection API物體識別系統
    選自Google Open Source作者:Jonathan Huang機器之心編譯參與:黃小天、李澤南近日,谷歌在其開源博客上發表了一篇名為《Supercharge your Computer Vision models with the TensorFlow Object Detection API》的文章,通過 TensorFlow Object Detection
  • 輸入示例,自動生成代碼:TensorFlow官方工具TF-Coder已開源
    最近,谷歌 TensorFlow 開源了一個幫助開發者寫 TensorFlow 代碼的程序合成工具 TF-Coder。論文地址:https://arxiv.org/pdf/2003.09040.pdf用過 TensorFlow 框架的應該都知道,在操縱張量時,需要跟蹤多個維度、張量形狀和數據類型兼容性,當然還需要考慮數學正確性。
  • 谷歌開源量子計算軟體原始碼,便利科學家利用量子計算機
    開源、開源、開源,重要的事情說三遍。繼開源tensorflow、caffe等深度學習開發框架後,當地時間10月24日,谷歌在自己的官方博客上宣布,開源量子計算軟體OpenFermion,從而讓科學家更方便的使用量子計算機。
  • TensorFlow入門簡介,新手請看這裡!
    【IT168 技術】  TensorFlow是一個使用數據流圖進行數值計算的開源軟體庫,是谷歌基於DistBeliefTensor(張量)意味著N維數組,Flow(流)意味著基於數據流圖的計算,TensorFlow為張量從流圖的一端流動到另一端的計算過程。TensorFlow將複雜的數據結構傳輸至人工智慧神經網絡進行分析和處理。  2017年2月,TensorFlow 1.0版正式發布,其當年的提交數目就已超過2.1萬,其中還有部分外部貢獻者。
  • 終於來了,TensorFlow 新增官方 Windows 支持
    TensorFlow 宣布開源剛剛過去一年。在谷歌的支持下,TensorFlow 已成為 GitHub 上最受歡迎的機器學習開源項目。同時,谷歌也在 TensorFlow 框架中進行過各類研究、開源了其中一些項目,這些研究涉及到自然語言處理、機器翻譯、圖像描述、圖像分類等等。
  • 谷歌正式發布TensorFlow 1.5,究竟提升了哪些功能?
    昨天,谷歌在 GitHub 上正式發布了 TensorFlow 的最新版本 1.5.0,並開源了其代碼。支持 CUDA 9 和 cuDNN 7 被認為是本次更新的最重要部分。機器之心對這次更新的重大改變以及主要功能和提升進行了編譯介紹,原文請見文中連結。
  • 進展|張量網絡的微分編程
    張量網絡方法經過多年的發展已經成為經典統計、量子多體物理等領域重要的理論和計算工具。近年來,張量網絡方法也被應用於機器學習問題中。然而,針對張量網絡的優化仍是一個長期存在的難點。這個瓶頸阻礙了張量網絡方法在一系列複雜問題中的充分應用。
  • TensorFlow與PyTorch之爭,哪個框架最適合深度學習
    目錄谷歌的 TensorFlowFacebook 的 PyTorch我們可以用 TensorFlow 和 PyTorch 構建什麼?我的建議谷歌的 TensorFlowTensorFlow 是谷歌的開發者創造的一款開源的深度學習框架,於 2015 年發布。官方研究發布於論文《TensorFlow:異構分布式系統上的大規模機器學習》。
  • NLP實戰篇之tf2中tensor、variable、gradient、ops
    本文是基於tensorflow2.2.0版本,介紹了tf中變量、張量的概念,tf中梯度的計算方式和tensor相關的操作。實戰系列篇章中主要會分享,解決實際問題時的過程、遇到的問題或者使用的工具等等。如問題分解、bug排查、模型部署等等。
  • TensorFlow極簡教程:創建、保存和恢復機器學習模型
    選自Github機器之心編譯參與:Jane W、李澤南TensorFlow 是一個由谷歌發布的機器學習框架,在這篇文章中,我們將闡述 TensorFlow 的一些本質概念。相信你不會找到比本文更簡單的介紹。
  • 從框架優缺點說起,這是一份TensorFlow入門極簡教程
    Theano 的頂層構建了數值開源深度庫,包括 Keras、Lasagne 和 Blocks。Yoshua Bengio 在 2017 年 9 月 28 日宣布,Theano 的開發將終止。因此實際上 Theano 已死!
  • 玩轉TensorFlow?你需要知道這30功能
    Tensor 的意思是張量,代表 N 維數組;Flow 的意思是流,代表基於數據流圖的計算。把 N 維數字從流圖的一端流動到另一端的過程,就是人工智慧神經網絡進行分析和處理的過程。TFHub 模塊使它變得容易,並且可以在 https://tfhub.dev/ 這個開源軟體商店中使用。
  • TensorFlow 資源大全中文版
    什麼是TensorFlow?TensorFlow 是一個採用數據流圖(data flow graphs),用於數值計算的開源軟體庫。節點(Nodes)在圖中表示數學操作,圖中的線(edges)則表示在節點間相互聯繫的多維數據數組,即張量(tensor)。
  • 5個簡單的步驟掌握Tensorflow的Tensor
    tensor_ndim = rank_3_tensor.ndimprint("The number of dimensions in our Tensor object is", tensor_ndim)Output:The number of dimensions in our Tensor object is 3形狀形狀特徵是每個張量都具有的另一個屬性。
  • 谷歌量子機器學習開源庫TFQ來了!
    全文共2338字,預計學習時長13分鐘去年10月,《Nature》刊發了谷歌的一篇論文,其研發的Sycammore量子處理器能在200秒內完成傳統超級計算機上萬年的計算量,基於此,谷歌宣稱實現了「量子霸權」。
  • 資源| TensorFlow版本號升至1.0,正式版即將到來
    選自github機器之心編譯參與:吳攀2015 年 11 月份,谷歌宣布開源了深度學習框架 TensorFlow,一年之後,TensorFlow 就已經成長為了 GitHub 上最受歡迎的深度學習框架(參見機器之心文章《深度 | TensorFlow 開源一周年:這可能是一份最完整的盤點》),儘管那時候 TensorFlow 的版本號還是 v0.11。
  • 深度解讀TensorFlow,了解它的最新發展!
    TensorFlow.js 是一個開源的用於開發機器學習項目的 WebGL-accelerated JavaScript 庫。TensorFlow.js 可以為開發者提供高性能的、易於使用的機器學習構建模塊,允許研發人員在瀏覽器上訓練模型,或以推斷模式運行預訓練的模型。
  • 深度學習-Pytorch框架學習之張量處理篇
    數據類型根據官方文檔顯示,張量定義為包含單一數據類型元素的多維矩陣。在Pytorch中,有9種CPU張量類型和9種GPU張量類型。具體類型如下圖所示:在Pytorch中,可以通過Python 列表和torch.tensor()構造函數構造一個張量。torch.tensor([[1., -1.], [1., -1.]])
  • 最熱門的深度學習框架TensorFlow入門必備書籍
    其實,早在 2015 年底,谷歌就開源了內部使用的深度學習框架 TensorFlow 。眾多研究表明,Tensorflow 是研究深度學習的首選平臺。於是,很多開發者就問了,TensorFlow如此受歡迎,如果想入門學習它,要選擇哪本書呢?
  • TensorFlow 攜手 NVIDIA,使用 TensorRT 優化 TensorFlow Serving...
    HTTP/REST API at:localhost:8501 …$ curl -o /tmp/resnet/resnet_client.py https://raw.githubusercontent.com/tensorflow/serving/master/tensorflow_serving/example/resnet_client.py