用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

機器之心發表於2019-09-01

WAIC 世界人工智慧大會已於近日在上海開幕。在昨天由機器之心承辦的開發者日主單元上,阿里技術副總裁賈揚清、亞馬遜機器學習副總裁 Alex Smola、百度 AI 技術平臺體系執行總監吳甜、Julia 創始人 Viral、Skymind 聯合創始人 Adam Gibson 做了精彩演講。

阿里賈揚清:從 20 瓦到 20 兆瓦的大腦

從 20 瓦的人腦到 20 兆瓦的雲智慧,近年來,隨著算力、演算法、資料的蓬勃發展,機器學習的基礎設施也完善了起來。在 WAIC 開發者日中,賈揚清第一個分享了他這幾年在人工智慧領域的一些探索和想法。

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

賈揚清是知名的人工智慧青年學者,在加入阿里巴巴之前,他曾任 Facebook AI 架構部門總監,負責前沿 AI 平臺的開發。在深度學習研究、工程、框架等諸多方面,賈揚清有眾多為人所熟知的工作。今年 3 月,賈揚清正式宣佈加入阿里巴巴,擔任技術副總裁崗位,領導大資料計算平臺的研發工作。

在第一場分享中,賈揚清以《20 瓦,64 千瓦和 20 兆瓦的大腦》為題,從演算法的潛力提升、算力的重要地位、資料的爆發式增長三方面討論了這些年的 AI 發展,並最終表示「結合三者,雲是 AI 的必然形式」。

什麼是演算法的潛力

人類大腦功率大約 20W,那麼都能做些什麼呢?這包括與環境互動、學習、推理等等。但是人工智慧模擬起來卻非常難,賈揚清最開始從經典機器學習演算法講到當前主流的演算法,回顧了這些年演算法潛力的變遷。舉個簡單的例子,機器學習需要影像特徵,那麼最開始是通過 HOG 獲取簡單的特徵,後來發現「邊緣」可能非常重要,因此各種卷積神經網路也就大顯身手了。

深度神經網路大大提升了演算法的潛力,賈揚清舉了個案例,在 ImageNet 影像識別挑戰賽中,最開始 SVM 等經典演算法已經到頭了,但那時它們的潛力也只能支援達到 25% 的錯誤率。但隨著 AlexNet 的提出,錯誤率瞬間就降到了 15%,而且重要的是,這種方法有很大的潛力,之後的研究使 ImageNet 的錯誤率一直在降低,甚至低於「人類」識別錯誤率 5%。

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

深度學習利用強大的擬合能力大大擴充套件了演算法潛力,現在演算法問題已經解決了,那麼算力問題呢,我們該怎樣利用計算系統提升訓練速度?

為什麼需要算力、資料

人腦的計算速度是有限的,但計算機可以通過堆算力來提高計算機系統或機器學習系統的能力。在這方面,人們一直在研究如何通過系統的方法提高訓練速度。

2014 年,機器識別一張圖片裡的內容要花 13 微秒左右,但今天,這一速度已提升了上百倍甚至上千倍。這一提升得益於 GPU 的聚合:單個 GPU 每秒只能處理 230 張影像,比人快不了多少,但 256 個 GPU 聚合在一起卻可以處理 6 萬張影像。因此,我們可以通過大量堆算力的方式來提高訓練速度,這也是大家前幾年不斷努力做的一件事情。而這些 GPU 又通過分散式訓練的方式進行合作。

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

如果說演算法是潛在的能力,那麼算力就是發揮潛力的保證。但是,算力將訓練速度提升之後,模型的複雜度也隨之提高。而模型越複雜,過擬合的可能性也就越大,因此我們還需要更多的資料來緩解過擬合。

從 1989 年至今,訓練模型所需的資料量也經歷了爆炸式增長,從 MB 到 GB,再到 TB 和 PB。

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

20 兆瓦的大腦

有了高效的演算法、海量的資料和龐大的算力,那麼怎樣才能將它們聚合在一起並應用到實際業務中呢?賈揚清表示,很多科技巨頭都是通過雲的方式來解決,也就是通過 20 兆瓦的大腦解決。

賈揚清說:「為什麼我們說只有通過雲這種模式,才能夠實現機器學習的創新?是因為雲向我們提供了更大的規模、更高的可用性、更強大的安全性。」

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

此外對於公司來說,我們關注的應該是業務,而不是基礎架構這些東西,所以雲能很好地解決這些問題。賈揚清說:「從 20 瓦的大腦到 20 兆瓦的大腦,我非常高興的是我們一直在解決各種問題,希望聯合算力、演算法和資料,從而不斷趨近於真正的智慧。」

「AI 與雲的結合是一條必經之路」,賈揚清總結道,「我從一個研究者開始逐漸轉向了工程、轉向了業務、轉向了更寬的思考範圍,從而將 AI 向前推動地更遠,這是我非常興奮的一點。」

亞馬遜 Alex Smola:深度 NumPy 與深度圖學習

NumPy 差不多是所有機器學習開發者必須瞭解的庫,它為 Python 附上了數值計算的「靈魂」。然而隨著深度學習框架的流行,NumPy 似乎已經不再閃耀。那麼我們是不是能為 NumPy 插上「Deep」的翅膀,用 NumPy 的 API 直接構建並訓練深度模型?這就是 Alex Smola 為我們介紹的 DeepNumPy。

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

除此之外,Alex Smola 在開發者日上還重點介紹了圖神經網路框架 DGL,它與 DeepNumPy 共同為開發者提供最好用的工具與 API。

Alex Smola 於 2016 年 8 月加入 AWS,現在是 AWS 副總裁和傑出科學家。Smola 被公認為世界頂級機器學習專家之一,他在 2013 年加入 CMU,並擔任教授。Alex 是學術研究界的一位多產且被廣泛引用的作者,撰寫或貢獻了近 500 篇論文,引用量達 75000 多次。

下面,讓我們看看 Smola 大神在 WAIC 開發者日上介紹的《Deep NumPy and DGL》都有什麼吧。

DeepNumPy

Smola 先讓我們思考思考,到底機器學習的開發流程是什麼樣的?這時候我們就會發現 NumPy 即使在深度學習時代,也有非常多的應用。我們習慣了在預處理時使用 NumPy,在預測和視覺化時使用 NumPy,甚至在不同模組間傳遞張量也用 NumPy。除了核心的模型搭建與訓練,似乎其它流程都能用 NumPy。

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

那麼 NumPy 既然在矩陣運算、資料處理等需要 CPU 的環境下如此強大,我們為什麼不直接將它遷移到 GPU,並賦予神經網路 API、自動微分等能力,這樣不更方便麼?Smola 表示,MXNet 社群正在做這樣的事,希望構建和 NumPy 100% 相容且還能搭建神經網路的工具。

  • DeepNumPy 開源地址:https://numpy.mxnet.io

簡單而言,DeepNumPy 作為 MXNet 的前端,它提供了類似 NumPy 的介面,且包含了一系列用於擴充套件深度學習能力的模組。DeepNumPy 主要包含兩大部分,即 mxnet.np 和 mxnet.npx,其中第一部分用起來和 NumPy 是一樣的,第二部分會提供更多擴充套件運算子,對深度學習更有優勢。

如下 Smola 在開發者日中主要介紹了 DeepNumPy 的兩大特點,即非同步執行與自動並行化。非同步執行的優勢與過程如下圖所示:

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

一般而言,我們寫的語句是一行行執行的,且系統的成本也會和真實執行加在一起。DeepNumPy 的優勢在於,後端會以非同步的形式處理前端運算。

Smola 表示 DeepNumPy 另一個優勢是自動並行化,它可以自動解析不同變數之間的依賴性關係,然後優化執行路徑。如以下例子所示,即使我們寫的是一行行程式碼,但 DeepNumPy 可以將 B 和 C 兩個不相關的變數並行處理,從而大大降低了執行時間。

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

Smola 總結道,DeepNumPy 在 Apache 開源組織的管理下,將繼續修改各種 Bug、提供更多強大的新特性。目前 DeepNumPy 已經在通過 TVM 優化 Operator,以提供更多的便利,包括支援 CPU、GPU 和 ASIC 等其它硬體。此外在效能上,DeepNumPy 經過 OP 融合與定製化的排程機制,它即使在大模型上也能展現出非常優異的效能。

在聽過 Smola 的介紹後,機器之心也檢視了這一前沿的開源工作,雖然目前 API 文件還沒有完善,但從一些案例中,我們發現它的使用方法真的和 NumPy 一模一樣,不論是建立陣列,還是執行索引、運算等常規操作,都有一股熟悉的味道。

Deep Graph Library

Somola 另外重點介紹的就是深度圖學習了,這也是近來非常受關注的研究方向。機器之心之前曾介紹過 AWS 開源的 DGL 庫,那麼現在讓我們看看 Smola 眼中的深度圖學習是什麼樣的。

首先 Smola 先定義了什麼是圖(Graph),以及它的一些應用,例如社交的推薦和欺詐檢測等。圖之所以這麼重要,很大程度上在於它的表達能力,現實世界上很多資料都能用圖來表示,差不多是最重要也是最通用的表示方法。然而深度神經網路擅長的是影像等非結構化資料,它基本上處理不了關係型資料,這就要求「圖」演算法有更新的發展。

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

Smola 說:「DGL 是一個 Python 包,它為現存的張量資料庫和圖資料提供一個高效的介面。」為了完成這個目標,DGL 必須能相容多個深度學習框架、必須提供最精簡的 API,同時還要高效地並行圖的計算。據 Smola 介紹,目前 DGL 已經支援圖卷積網路和 TreeLSTM 等多種網路,也適用於很多應用場景。

Smola 舉了個 Pagerank 的案例,它最開始是一種對網頁重要性進行排序的演算法。Pagerank 本質上是一種以網頁之間的超連結個數和質量作為主要因素的排序演算法,因此,我們也可以將網頁視為節點,超連結視為連線的邊,這樣就能構建一個標準的圖。

如下所示為 DGL 實現 Pagerank 的程式碼,它的構建過程非常簡潔。

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

Smola 在現場還展示了更多用 DGL 建模複雜網路的案例,包括圖卷積網路和 Tree-LSTM 等,其中非常有意思的是 Transformer,DGL 也可以將它分解為圖,從而擴充套件它的能力。

下圖展示了 Transformer 如何解構為圖,Smola 說:「我們可以將注意力視為圖中的邊,並採用邊上的訊息傳遞機制作為對應的運算過程,這樣我們就可以將整個 Transformer 表示為圖。具體而言,Transformer 可以由幾個子圖組成,其中 Encoder 建模的是原語言圖,每一個 Token 即一個節點,不同節點間通過注意力進行連線。Decoder 也是一樣,它建模的是目標語的圖。」

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

Smola 表示:「目標語的圖是半完全的,也就是每一個詞只能注意到已預測的歷史詞,它和原語言的完全圖是不一樣的。最後 Encoder 和 Decoder 相結合就能生成完整的 Transformer 圖。」

總體而言,聽過 Smola 的演講後,我們感覺圖的應用要遠比想象中多得多。像影像或文字這些一般神經網路能很好處理的資料,圖神經網路同樣也可以,甚至計算上有更好的優勢。

百度吳甜:語言與知識技術產業應用創新與實踐

以技術落地為落腳點,在本次 WAIC 開發者日上,百度 AI 技術平臺體系執行總監吳甜為我們帶來了主題為《語言與知識技術產業應用創新與實踐》的演講。

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

吳甜現為百度 AI 技術平臺體系執行總監以及深度學習技術與應用國家工程實驗室副主任。她主要負責百度自然語言處理、知識圖譜、深度學習技術平臺飛槳(PaddlePadddle)、百度大腦開放平臺與生態等。

百度語言與知識技術佈局、發展歷程和開放場景

吳甜開始逐一介紹百度語言與知識技術佈局,其中底層的知識圖譜是基礎,中間層是語言理解和語言生成,最上層則是智慧搜尋、深度問答、對話系統、智慧創作和機器翻譯五個應用領域。

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

百度語言與知識技術佈局。

這樣完善的佈局,它的發展也是有一些過程的,吳甜表示主要可以分為三個階段:第一階段始於 2000 年,主要集中於技術模組的整合;第二階段始於 2014 年,開始將技術平臺化;第三階段始於 2017 年,開始開源開放大生產平臺。

那麼百度大腦語言與知識技術開放全景究竟是怎樣的呢?如下圖所示,最底層是深度學習開源框架和平臺 PaddlePaddle,倒數第二層是語言和知識領域的各項基礎技術,往上是四個應用級平臺,再往上是四種服務方式和各種場景方案。

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

百度大腦語言與知識技術開放全景。

百度在 NLP 又有什麼樣的重要成果?

百度在自然語言處理領域的重要成果包括語義表示預訓練模型和今年 7 月份推出的持續學習語義理解框架 ERNIE。吳甜表示,ERNIT 已經累積了 13 億+知識,其中包括 1500 萬篇百科語料和詞語實體知識、10 億條網頁搜尋知識、700 萬輪人類對話資料、2000 萬對句子語義關係和 3 億組篇章結構關係。

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

持續學習的語義理解框架 ERNIE。

ERNIE 框架在工業應用上又有哪些效果呢?首先在智慧問答場景中,如果將 ERNIE 模型應用於問題的分析和排序上,召回率就能提升了 7%;在加入 ERNIE 模型的情況下,廣告的相關性也提升了 2.7%;ERNIE 模型能夠使文字潤色的準確率提升 7.3%;在對話理解場景中,ERNIE 模型將準確率也提升了 2%。

PaddlePaddle 深度學習平臺

但是要訓練 ERNIE 這樣的大模型,非常重要的一點就是提升訓練速度。因此,百度推出了基於 PaddlePaddle 的 GPU 多機多卡訓練加速,從而使得基於飛槳訓練 ERNIE 模型多機加速比達到 77%。

PaddlePaddle 以深度學習框架為核心,從資料預處理到模型部署為深度學習的整個開發和應用流程提供了完整的工具。其中核心框架是從頭構建模型的基礎,而工具組建可以幫助我們快速訓練與試驗模型。最後的服務平臺會為開發者提供整體流程支援。

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

吳甜後面分別介紹了一鍵載入工業級預訓練模型百度 PaddleHub 和麵向工業應用的中文 NLP 開源資料集 PaddleNLP,後者提供共享工業級骨幹程式碼,能夠輕鬆適應領域需求。它們都是以飛槳為核心框架,並擴充套件它的能力。

在 DL 平臺和基礎技術之上,吳甜以 UNIT(理解與互動技術)平臺為例,介紹了應用級平臺智慧便捷性。UNIT 平臺致力於打造為對話系統定製的專業、低成本、全鏈路的技術與服務平臺,並已經為金融、教育等行業提供解決方案和服務。

UNIT 平臺核心技術包括語義理解、閱讀理解和對話管理三大部分,其中 ERNIE SLU 可達到在同樣理解精度下標註量降低 37%~72%,DataKit 可使資料生產效率提升 8 倍,使用語義理解 SLU 定製可使對話技能綜合研發成本降低 60%。目前,UNIT 平臺已實現 6.8 萬定製技能,累計互動次數達 570 億次,全面覆蓋智慧客服、智慧出行、智慧辦公及其他智慧互動場景,為一線開發者實現 AI 產業化提供有力工具。

總體而言,百度的語言與知識技術就是在飛槳深度學習平臺上,搭建完善基礎技術和應用平臺,從而構建更強大的 AI 基礎設施。

Julia 創始人 Viral B. Shah :天生支援可微分程式設計的 Julia

去年 8 月份,MIT 正式釋出了 Julia 1.0,在開發者社群引起了很大的轟動。該語言旨在結合 C 的速度、Matlab 的數學表徵、Python 的通用程式設計與 Shell 的膠水命令列。那麼,Julia 語言以後該怎樣走?Viral 在開發者日表示,只有內嵌可微程式設計系統,Julia 才能更適合深度學習開發,適合更廣的科學運算。

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

在本次的開發者日上,作為 Julia 創始人之一的 Viral B. Shah 博士重點介紹了為什麼 Julia 適合做機器學習開發,以及 Julia 在科學計算與機器學習上的可微分程式設計探索。這種機制將內嵌於 Julia 語言,且因為沒有中間語言的轉換,它做深度學習、做反向傳播的速度還要快於 DL 框架。

Viral B. Shah 擁有加州大學聖巴巴拉分校的電腦科學博士學位。他是 Julia 語言的創始人之一、Julia Computing 的聯合創始人兼執行長,也是開源程式 Circuitscape 的作者之一。

擁有如此多的研究和開發經驗,Viral 在開發者日介紹的《Julia: Generalizing Deep Learning and AI with Differentiable Programming》一定很有意思。

為什麼 DL 需要新語言

Julia 在中國已經有非常成熟的社群,它的效能優勢也不可忽視。Viral 通過大牛的 Twitter 展示了為什麼深度學習需要一種新的程式語言,不論是出於效能上的考慮,還是出於程式設計模式上的考慮,一種更專注於機器學習的語言都是有必要的。這種語言應該內嵌可微分程式設計的思想,並提供便捷的模型 API。

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

Julia 的可微分程式設計是什麼樣的

Viral 說:「我們最近也發過相關論文,嘗試建立機器學習與科學計算之間的橋樑。這個名為 Zygote 地可微分程式設計模組將內嵌於 Julia 語言,並作為第一等的特性。可微程式設計最重要的特性是執行 source-to-source 的轉換,自動微分轉換基本上沒有執行時開銷,因此它要比反向傳播的實際計算成本低很多。」

如下所示 Viral 介紹了可微分程式設計與一般的程式設計有什麼不同。

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

Viral 表示:「Zygote 可以對任何函式進行數值計算與梯度計算,只要我們如平常那樣定義了函式或高階函式,那麼 Julia 和編譯器就能自動算出梯度。這種梯度可以用於進一步的運算,例如反向傳播或梯度下降等。」這是 Julia 非常重要的一個特性,它能處理更廣泛的任務,例如應用物理學或分子生物學等。

「不止機器學習,其它廣大領域的科學計算也需要利用這種可微分程式設計的優勢。因為它們之間有很多相似的地方,例如都會使用最速下降、擬牛頓法等基於梯度的方法,都依賴線性代數等等。」,Viral 強調到。

後面 Viral 還介紹了 Julia 與可微分程式設計的眾多案例,如下主要展示了微分方程的應用。

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

Skymind Adam Gibson:AI 對第四次工業革命的推動

自 18 世紀以來,人類社會先後經歷了三次工業革命,從手工時代逐步過渡到蒸汽時代、電氣時代和資訊時代。而今,我們正在經歷以基因、人工智慧和清潔能源等技術為突破口的第四次工業革命。其中,人工智慧是推動第四次工業革命程式的一股重要力量。

在本次的開發者日上,美國人工智慧/機器學習公司 Skymind 聯合創始人兼首席科學家 Adam Gibson 做了主題為《The Driving Force behind theFourth Industrial Revolution:Emerging of AI in Industrial Applications》的演講。

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

除了建立 Skymind 之外,Adam Gibson 還是最廣泛使用的開源機器學習庫 Eclipse Deeplearning4j 的建立者以及舊金山 Galvanize 技術學校資料科學碩士課程的顧問。

Adam Gibson 在演講中指出,維護、維修、人機合作、生成式設計、供應鏈、產品優化、網路安全等都是工業 4.0 時代的推動力量。

企業中的 AI 應用現狀

既然工業 4.0 的實現離不開 AI,那麼 AI 在企業中的應用現狀如何呢?Adam 指出,目前全球通過 AI 獲取價值的企業還不到 5%,而且這 5% 的企業對 AI 的利用也大多不夠充分。其中有些中小企業只是聽說過 AI,但沒有人才或資金來幫助實現 AI 的利用,還有些大公司聲稱自己用到了 AI,其實用的只是上世紀 80 年代的認知系統。只有極少數 500 強公司或頂尖科技公司才能足夠的人才、資金利用先進的 AI 系統,並利用其產生價值。

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

 此外,Adam 還指出,我們現在要做的就是降低 AI 的應用門檻,通過多樣化的處理將學術研究成果轉化為更加實用的現實應用。同時,我們還需要看到市場需求所在,還很多論文忽略了這一點。

如何在工業 4.0 中應用 AI?

除了上述人才、資金等條件外,在工業場景中應用 AI 首先需要解決資料問題,因為這些實時響應的工廠都是新穎而獨特的,無法提供訓練 AI 模型所需的大量資料。

對此,Adam Gibson 呈現的解決方案是將模擬與 AI 結合起來,即在模擬器中建立許多 AI 可以學習的可能場景,這也是強化學習模型的訓練方式。

強化學習不止與 Alpha Go 有關,同時也是我們通過模擬來做機器學習的一個分支。

廣告商如何投放廣告才能實現效益最大化?物流公司如何優化送貨路線才能降低成本?從供應鏈、智慧交通、人機協作再到工業流程模擬,工業 4.0 時代的許多問題其實都可以歸結為 NP-Hard 問題,即組合優化問題,而強化學習為這些問題提供了一個可行的解決方案。利用強化學習學到的策略可以部署到各種裝置中,以自適應的方式自動完成某些任務。

用NumPy寫深度模型,用Julia可微分程式設計寫函式,這是WAIC開發者日

 此外,Adam 強調,在這些場景中,我們要打造的是一個端到端的解決方案,建造一箇中心化的系統,把資料收集到一起,然後不斷進行模擬、迭代。

以上這些都是主單元的主題演講的精彩內容。當日的主單元還包括WAIC黑客馬拉松頒獎典禮、兩個圓桌論壇等精彩環節。

經過一天的高強度知識洗禮,相信大家都回味無窮,很多讀者可能也都希望親自聽聽大牛口中的「開發經驗」都是什麼樣的。這裡機器之心準備了重播連結,點選「閱讀原文」觀看整場 4 個多小時的知識盛宴。

相關文章