今天,亞馬遜 AWS、微軟 聯(lián)合發(fā)布了 Gluon – 一種新的開源深度學(xué)習(xí)接口,可幫助開發(fā)人員更輕松、更快速地構(gòu)建機器學(xué)習(xí)模型,而不犧牲任何性能。
Gluon 采用一系列預(yù)先構(gòu)建并經(jīng)過優(yōu)化的神經(jīng)網(wǎng)絡(luò)組件,為定義機器學(xué)習(xí)模型提供清晰、簡潔的 API。剛剛接觸機器學(xué)習(xí)的開發(fā)人員會發(fā)現(xiàn)此接口更像傳統(tǒng)代碼,因為他們可以像使用任何其他數(shù)據(jù)結(jié)構(gòu)那樣定義和操作機器學(xué)習(xí)模型。經(jīng)驗豐富的數(shù)據(jù)科學(xué)家和科研人員也會發(fā)現(xiàn)它的寶貴價值:快速構(gòu)建原型和利用動態(tài)神經(jīng)網(wǎng)絡(luò)圖實現(xiàn)全新模型架構(gòu),而又不減緩訓(xùn)練進度。Gluon 現(xiàn)已在Apache MXNet 中可用,日后將“進駐”Microsoft Cognitive Toolkit 及其他架構(gòu)。
神經(jīng)網(wǎng)絡(luò)與開發(fā)人員使用神經(jīng)網(wǎng)絡(luò)的機器學(xué)習(xí) (包括“深度學(xué)習(xí)”) 包含三個主要部分:訓(xùn)練數(shù)據(jù)、神經(jīng)網(wǎng)絡(luò)模型和訓(xùn)練神經(jīng)網(wǎng)絡(luò)的算法。您可以將神經(jīng)網(wǎng)絡(luò)看成是一種有向圖:它有一系列輸入 (數(shù)據(jù)),通過一系列連接的層和權(quán)重連接到一系列輸出 (預(yù)測)。在訓(xùn)練期間,算法根據(jù)網(wǎng)絡(luò)輸出中的錯誤調(diào)整網(wǎng)絡(luò)中的權(quán)重。這就是網(wǎng)絡(luò)學(xué)習(xí)的過程 – 一種可能需要持續(xù)數(shù)天時間的內(nèi)存和計算密集型過程。Caffe2、Cognitive Toolkit、TensorFlow 以及 Apache MXNet 等深度學(xué)習(xí)框架能夠部分解決“如何加快這一過程?”的難題。與數(shù)據(jù)庫中的查詢優(yōu)化器一樣,訓(xùn)練引擎越了解網(wǎng)絡(luò)和算法,越能更好地優(yōu)化訓(xùn)練過程 (例如,它可以根據(jù)其他部分的改變,推斷需要重新計算圖中的哪些部分并跳過不受影響的權(quán)重,從而加快訓(xùn)練進度)。
此外,這些框架還提供并行功能,可通過分發(fā)計算過程來減少總體訓(xùn)練時間。但是,要實現(xiàn)上述優(yōu)化,大多數(shù)框架要求開發(fā)人員完成一些額外工作:首先,提供網(wǎng)絡(luò)圖形式定義,然后“定圖”并調(diào)整權(quán)重。網(wǎng)絡(luò)定義可能極其龐大而復(fù)雜 (包含數(shù)百萬個連接),通常必須手動構(gòu)建。深度學(xué)習(xí)網(wǎng)絡(luò)十分“笨重”,難以調(diào)試,因而很難在項目間復(fù)用代碼。
這種復(fù)雜性可能會令初學(xué)者“無從下手”,對經(jīng)驗豐富的科研人員來說也是一項耗時的任務(wù)。AWS 在 MXNet 中嘗試了一些更靈活易用的新方法定義和訓(xùn)練神經(jīng)網(wǎng)絡(luò)。Microsoft 也是開源項目 MXNet 的開發(fā)者,對部分新想法感興趣。于是我們進行了溝通,結(jié)果發(fā)現(xiàn)雙方抱持幾乎相同的愿景:借助此類技術(shù)降低機器學(xué)習(xí)的復(fù)雜性,讓更多的開發(fā)人員能夠輕松發(fā)揮其強大威力。
Gluon 特點:動態(tài)圖,快速迭代,可擴展訓(xùn)練Gluon 包含四大創(chuàng)新。
1.友好的 API:可以使用簡單、清晰、簡潔的代碼定義 Gluon 網(wǎng)絡(luò) – 相比某些更晦澀、更形式化的網(wǎng)絡(luò)及相關(guān)加權(quán)評分函數(shù)定義方法,這更易于開發(fā)人員學(xué)習(xí),理解難度大幅降低。
2.動態(tài)網(wǎng)絡(luò):Gluon 中的網(wǎng)絡(luò)定義是動態(tài)的:它可以像任何其他數(shù)據(jù)結(jié)構(gòu)一樣“收縮和擴展”。這有別于更常見的形式化網(wǎng)絡(luò)符號定義 (既深度學(xué)習(xí)框架要求必須保持網(wǎng)絡(luò)定義不變,才能在訓(xùn)練期間有效地優(yōu)化計算)。相比之下,動態(tài)網(wǎng)絡(luò)更容易管理。
3.借助 Gluon:開發(fā)人員可以在定義網(wǎng)絡(luò)和算法時輕松混用快速的符號表示和更友好、動態(tài)的“命令式”定義。 可以使用算法定義網(wǎng)絡(luò):這大大加強了模型與訓(xùn)練算法的聯(lián)系。在這種情況下,算法可以在定義和訓(xùn)練期間動態(tài)調(diào)整網(wǎng)絡(luò),而不僅僅是獨立的定義。也就是說,開發(fā)人員能夠使用標(biāo)準(zhǔn)的編程循環(huán)、條件語句創(chuàng)建此類網(wǎng)絡(luò),科研人員也能定義以前無法實現(xiàn)的更復(fù)雜的算法和模型。不管是創(chuàng)建、更改還是調(diào)試,難度都大幅下降。
4.由高性能運營商進行訓(xùn)練:這樣可在不犧牲訓(xùn)練速度的情況下提供友好、簡潔的 API 和動態(tài)圖,可謂是機器學(xué)習(xí)領(lǐng)域的一大進步。某些框架為深度學(xué)習(xí)提供了友好的 API 或動態(tài)圖,但以前的此類方法都會減緩訓(xùn)練速度。與其他領(lǐng)域的軟件一樣,抽象需要在運行時進行協(xié)商和解釋,因而會減慢計算速度。但 Gluon 將簡明的 API 與形式化定義進行了深層融合,無需開發(fā)人員了解具體細節(jié)或手動調(diào)整編譯器優(yōu)化。
能通過 Gluon 向開發(fā)人員提供此類改進,AWS 團隊和 Microsoft 的協(xié)作者倍感興奮。目前,已有開發(fā)人員和科研人員提供十分積極的反饋。
開始使用 GluonGluon 現(xiàn)已在 Apache MXNet 中可用,將在未來版本中支持 Microsoft Cognitive Toolkit。我們還將發(fā)布前端接口和底層 API 規(guī)范,以便在適當(dāng)?shù)臅r候“進駐”其他框架。