谷歌剛發布的深度學習動態計算圖工具TensorFlow Fold是什么?
2 月 7 日,谷歌通過博客正式發布了 TensorFlow Fold,該庫針對 TensorFlow 1.0 框架量身打造,可以幫助深度學習開發者根據不同結構的輸入數據建立動態的計算圖(Dynamic Computation Graphs),簡化了模型訓練階段對輸入數據的預處理過程,提升了系統的運行效率。
一般而言,大部分的深度學習項目都需要對模型的訓練數據進行一定程度的預處理。在這個過程中,各種不同規模和結構的輸入數據(例如不同分辨率的圖片數據)將被裁剪成相同的維度和尺寸,然后被壓入棧,等待模型訓練階段的批處理流程。這一步驟之所以至關重要,是因為它使得 TensorFlow 等高性能的深度學習框架可以并行地針對不同的輸入數據運行同一個計算圖,加上當前的 GPU 和多核 CPU 普遍支持的 SIMD(Single Instruction Multiple Data,單指令多數據流) 等加速技術,大大提升了深度學習模型的運算速度。
然而,依然存在諸多問題域無法進行一般的預處理,因此模型必須針對不同的輸入數據建立不同的計算圖。例如自然語言理解中的解析樹(parse trees),源代碼中的抽象語法樹(abstract syntax trees)以及網頁中的 DOM 樹等等。在這些問題中,不同的輸入數據具有不同的計算圖,而且這些計算圖并不能劃分到同一個批處理流程中,因而也就無法實現對處理器、內存和高速緩存的最高效利用。
谷歌此次發布的 TensorFlow Fold 完美解決了這一問題。按照谷歌官方博客的介紹,TensorFlow Fold 庫會根據每個不同的輸入數據建立單獨的計算圖,因為各個輸入數據都可能具有各自不同的規模和結構,因此計算圖也應該各不相同。此后,動態批處理功能將自動組合這些計算圖,以實現在輸入數據內部和不同輸入數據之間的批處理操作,同時還可以通過插入一些附加指令來實現不同批處理操作之間的數據互通。更重要的是,相比于其他實現,TensorFlow Fold 將 CPU 的速度提高了 10 倍以上,GPU 的速度提高了 100 倍。
更全面的原理介紹詳見《DEEP LEARNING WITH DYNAMIC COMPUTATION GRAPHS》,論文鏈接如下: https://openreview.net/pdf?id=ryrGawqex
上圖的動畫展示了一個利用動態批處理運行的遞歸神經網絡。相同顏色的操作被劃分到同一次批處理中,這使得 TensorFlow 能夠更高效地運行。其中Embed操作負責將單詞轉換為向量表示,FC(完全連接,Fully Connected)操作負責將單詞向量組合為短語的向量。該網絡最后的輸出是一個完整句子的向量表示。雖然這里只展示了一個針對單一語句的解析樹,但實際上該網絡可以在任意形狀和大小的多個解析樹上并行地進行動態批處理。
目前,谷歌已經在 Github 平臺開源了 TensorFlow Fold 庫的源代碼。 需要注意的是,目前 TensorFlow Fold 只在 Linux 平臺進行了測試,而且由于API接口的變化,TensorFlow Fold 目前也只適配了 TensorFlow 1.0 。另外,TensorFlow Fold 兼容 Python 2.7 和 3.3+ 版本。詳細的安裝和文檔說明請見 Github 頁面: https://github.com/tensorflow/fold
來自: http://www.leiphone.com/news/201702/r1W8K2Xp3VE1FLoJ.html