觀點(diǎn)?|?論機(jī)器學(xué)習(xí)和編程語(yǔ)言:ML需要專用的計(jì)算機(jī)語(yǔ)言嗎际歼?

姓名:張萌? ? ? ? ? 學(xué)號(hào)17021211113

轉(zhuǎn)自:

http://mp.weixin.qq.com/s/0iPaoc1a_8RzbGO4ITAIdg

【嵌牛導(dǎo)讀】:任何機(jī)器學(xué)習(xí)系統(tǒng)復(fù)雜到一定程度说莫,都會(huì)包含一個(gè)臨時(shí)開(kāi)發(fā)的术羔、不合規(guī)范的赢赊、充滿錯(cuò)誤的、運(yùn)行速度很慢的级历、只有一半功能的編程語(yǔ)言實(shí)現(xiàn)释移。(格林斯潘第十定律)

【嵌牛鼻子】:匯編語(yǔ)言

【嵌牛提問(wèn)】:ML需要專用的計(jì)算機(jī)語(yǔ)言嗎?

【嵌牛正文】:我們很高興看到機(jī)器學(xué)習(xí)大爆發(fā)寥殖,以及機(jī)器學(xué)習(xí)模型的復(fù)雜度和用來(lái)構(gòu)建模型的框架玩讳。越來(lái)越多的頂尖模型更多地涉及到編程問(wèn)題,通常它們需要支持循環(huán)和遞歸等編程結(jié)構(gòu)扛禽,這給創(chuàng)建它們的工具(編程語(yǔ)言)帶來(lái)了一些有趣的問(wèn)題锋边。

盡管機(jī)器學(xué)習(xí)沒(méi)有專用的語(yǔ)言,但有的機(jī)器學(xué)習(xí)框架(如 TensorFlow)在 Python API 下高效地創(chuàng)建了「新語(yǔ)言」编曼,而一些系統(tǒng)(如 PyTorch)重新使用 Python 作為建模語(yǔ)言。我們想問(wèn)的是剩辟,需要為機(jī)器學(xué)習(xí)定制新語(yǔ)言嗎掐场?如果需要往扔,為什么?更重要的是熊户,未來(lái)完美的機(jī)器學(xué)習(xí)語(yǔ)言可能是什么樣子萍膛?

隱藏在機(jī)器學(xué)習(xí)系統(tǒng)后的語(yǔ)言

TensorFlow(TF)已經(jīng)算是著一種「編程語(yǔ)言」了,因?yàn)樵谶@個(gè)框架下我們完全可以使用它所提供的類和對(duì)象編寫(xiě)一個(gè)模型嚷堡。大家使用 Python 和 TF 庫(kù)進(jìn)行編程蝗罗,因此這個(gè)結(jié)論似乎有點(diǎn)令人驚訝。但是蝌戒,TF 要求你在其內(nèi)部語(yǔ)言內(nèi)使用 Python 代碼構(gòu)建表達(dá)式樹(shù)串塑,然后 TF 再進(jìn)行評(píng)估。

事實(shí)上北苟,你可以用任何語(yǔ)言進(jìn)行「懶惰的」TensorFlow 風(fēng)格編程桩匪。如下面的 JavaScript 代碼,就在這種風(fēng)格中實(shí)現(xiàn)了一個(gè)小功能(add):

function

add(a,b)

{return`$

{a}+$

友鼻`;

}

x =1;

y =2;

z =add('x','y')// 'x+y'

eval(z)// 3

x =4

eval(z)// 6

這里傻昙,我們進(jìn)行的是元編程(metaprogramming)——編寫(xiě)寫(xiě)代碼的代碼。上例中彩扔,源語(yǔ)言和目標(biāo)語(yǔ)言是一樣的(JavaScript)妆档,它們也可以是不同的語(yǔ)言(如在處理 C 語(yǔ)言的 C 預(yù)處理器中),我們也可以使用數(shù)據(jù)結(jié)構(gòu)(AST)來(lái)代替字符串虫碉,原則是一樣的贾惦。在 TensorFlow 中,Python 是元語(yǔ)言蔗衡,我們使用 TF 這種基于靜態(tài)計(jì)算圖的語(yǔ)言編寫(xiě)程序纤虽。如果你不信,想一下 TensorFlow 的圖甚至支持變量適應(yīng)范圍(variable scoping)和控制流(control flow)等編程結(jié)構(gòu)绞惦,而不是使用 Python 語(yǔ)法逼纸,你可以通過(guò)一個(gè) API 管理這些結(jié)構(gòu)。

TensorFlow 和類似工具的呈現(xiàn)方式是「庫(kù)」济蝉,但它們是極其不尋常的庫(kù)杰刽。大部分庫(kù)提供一套簡(jiǎn)單的函數(shù)和數(shù)據(jù)結(jié)構(gòu),而不是全新的編程系統(tǒng)和運(yùn)行時(shí)(runtime)王滤。

為什么創(chuàng)建新語(yǔ)言贺嫂?

創(chuàng)建新語(yǔ)言的核心原因非常簡(jiǎn)單:ML 研究需要極高的算力,簡(jiǎn)化建模語(yǔ)言可以使添加特定的優(yōu)化和特征變得簡(jiǎn)單雁乡。訓(xùn)練模型要求極高的硬件支持第喳、合適的數(shù)值、低解釋器開(kāi)銷和多種并行化踱稍。通用語(yǔ)言如 Python 勉強(qiáng)可以提供這些特征曲饱,但 TensorFlow 可以無(wú)縫處理它們悠抹。

不過(guò)有一個(gè)障礙。這些優(yōu)化依賴于簡(jiǎn)單化的假設(shè)(ML 模型不是遞歸的扩淀,或不需要自定義梯度)楔敌,這使得將這些優(yōu)化或應(yīng)用部署到小型設(shè)備變得簡(jiǎn)單。不幸的是驻谆,對(duì)于工程師來(lái)說(shuō)卵凑,模型復(fù)雜度目前出現(xiàn)直線上升的趨勢(shì),而研究者享受破壞這些假設(shè)的過(guò)程∈る現(xiàn)在模型要求條件分支(比較簡(jiǎn)單)勺卢、重復(fù)循環(huán)(沒(méi)有那么簡(jiǎn)單但也不是不可能)、遞歸樹(shù)(幾乎不可能)区端。在 ML 的很多分支值漫,包括神經(jīng)網(wǎng)絡(luò)和概率編程中,模型越來(lái)越像程序织盼,包括推斷其他程序的程序(如程序生成器和解釋器)杨何,且具備不可微組件,如蒙特卡羅樹(shù)搜索沥邻。構(gòu)建提供完全靈活性且達(dá)到頂尖性能的運(yùn)行時(shí)非常困難危虱,但是最強(qiáng)大的模型和突破性的結(jié)果需要這二者。使用機(jī)器學(xué)習(xí)和復(fù)雜樹(shù)結(jié)構(gòu)數(shù)據(jù)需要可微且遞歸的算法唐全。

圖片發(fā)自簡(jiǎn)書(shū)App

該方法的另一個(gè)缺陷是埃跷,目前需要上面討論的元編程。構(gòu)建和評(píng)估表達(dá)樹(shù)對(duì)程序員和編譯器都是額外的負(fù)擔(dān)邮利。很難進(jìn)行推斷弥雹,因?yàn)楝F(xiàn)在代碼有兩個(gè)執(zhí)行時(shí)間,每個(gè)具備不同的語(yǔ)言語(yǔ)義(language semantics)延届,逐步調(diào)試等操作將變得更加困難剪勿。這可以通過(guò)為新的運(yùn)行時(shí)創(chuàng)建語(yǔ)法來(lái)解決,但是其工作量不亞于創(chuàng)建全新的編程語(yǔ)言方庭。

僅用 Python 就可以了嗎厕吉?

機(jī)器學(xué)習(xí)模型開(kāi)始需要編程語(yǔ)言的全部力量,Chainer 和其他人率先使用「define-by-run」方法械念,該方法中 Python 程序本身就是模型头朱,使用運(yùn)行時(shí)自動(dòng)微分(AD)作為導(dǎo)數(shù)。從易用性的角度來(lái)看這種方法很有意思:如果你想要一個(gè)進(jìn)行樹(shù)運(yùn)算的遞歸模型龄减,只需要寫(xiě)下來(lái)项钮,讓 AD 來(lái)施展它的魔力!我們很難不高估這種感覺(jué),使用新的無(wú)障礙方法對(duì)于研究來(lái)說(shuō)是寶貴的寄纵。

但是鳖敷,讓 Python 滿足機(jī)器學(xué)習(xí)的復(fù)雜計(jì)算要求比你想象的還要難得多脖苏。大量研究開(kāi)始開(kāi)發(fā)快速語(yǔ)言(如 PyTorch)程拭,但并沒(méi)有加快 Python 的速度。Python 的語(yǔ)義使它很難提供模型級(jí)別的并行化棍潘,或者為小型設(shè)備編譯模型恃鞋。

MXNet Gluon 正在探索利用二者,至少在一定程度上亦歉。其想法是將基礎(chǔ)的動(dòng)態(tài)自動(dòng)微分和生成可優(yōu)化「靜態(tài)子圖」的代碼追蹤方法聯(lián)系起來(lái)恤浪。不幸的是,這只是把不相關(guān)的實(shí)現(xiàn)和 API 混在一起而已肴楷。這種方法也受限制水由,MXNet 不僅使用它的圖來(lái)做 kernel 級(jí)別的優(yōu)化,還用于高級(jí)別的圖調(diào)度(graph scheduling)赛蔫,如在多個(gè) GPU 上分割模型砂客。此外,目前尚不明確這些混合如何對(duì)此進(jìn)行處理呵恢。

適合機(jī)器學(xué)習(xí)的語(yǔ)言是什么樣的鞠值?

很少有其它領(lǐng)域像機(jī)器學(xué)習(xí)一樣有語(yǔ)言級(jí)的設(shè)計(jì)需求,但在形式化推理或集群計(jì)算等領(lǐng)域渗钉,量身定制的語(yǔ)言已經(jīng)證明它們是高效的解決方案彤恶。同樣,我們希望看到新的或現(xiàn)有的語(yǔ)言能完美地支持機(jī)器學(xué)習(xí)所需要的數(shù)值計(jì)算鳄橘、自動(dòng)微分計(jì)算声离、并行計(jì)算和概率計(jì)算等能力。

當(dāng)前機(jī)器學(xué)習(xí)語(yǔ)言一個(gè)明顯的挑戰(zhàn)是在性能方面難以取得一致性瘫怜,即早期的混合方法需要更多的開(kāi)發(fā)工作术徊。我們期待未來(lái)的機(jī)器學(xué)習(xí)語(yǔ)言將支持任意混合的方法(即靜態(tài)計(jì)算圖內(nèi)可能混合了其它動(dòng)態(tài)或靜態(tài)計(jì)算圖),并且在編譯動(dòng)態(tài)代碼時(shí)能更好地部署宝磨。理想情況下弧关,這種新型語(yǔ)言將只有單個(gè)靈活的「計(jì)算圖格式」。這種計(jì)算圖格式應(yīng)該有一種語(yǔ)法和靜態(tài)描述的方法以表示動(dòng)態(tài)的行為唤锉,換句話說(shuō)世囊,它應(yīng)該看起來(lái)更像一個(gè)標(biāo)準(zhǔn)的編程語(yǔ)言。

可編程語(yǔ)義將達(dá)到新的靈活性水平窿祥,并且它可以通過(guò)類似宏(Macros)的特征實(shí)現(xiàn)株憾。這將允許通過(guò)指定代碼應(yīng)該有怎樣的純數(shù)據(jù)流語(yǔ)義,而在核心系統(tǒng)的頂部構(gòu)建像多 GPU 訓(xùn)練那樣的特征。此外嗤瞎,它也能允許概率編程語(yǔ)言所需要的各種編程操作墙歪,或 NLP 模型中常需要手動(dòng)實(shí)現(xiàn)的向量化或批量化等。

與編程語(yǔ)言社區(qū)一樣贝奇,機(jī)器學(xué)習(xí)工程師非常關(guān)注傳統(tǒng)的自動(dòng)微分領(lǐng)域虹菲。機(jī)器學(xué)習(xí)語(yǔ)言可以從真正實(shí)現(xiàn)一階導(dǎo)的語(yǔ)言中獲取靈感與經(jīng)驗(yàn),這樣的語(yǔ)言可以很容易將符號(hào)與運(yùn)行時(shí)(runtime)技術(shù)結(jié)合在一起掉瞳,將正向與反向模式的自動(dòng)微分技術(shù)混合在一起毕源,所有這些都不會(huì)導(dǎo)致性能上的損失。

ML 研究將需要越來(lái)越強(qiáng)大的類型系統(tǒng)(type systems)陕习、用戶自定義類型和更多的擴(kuò)展手段霎褐。目前在英偉達(dá) GPU 上對(duì)陣列式支持的硬編碼已經(jīng)足夠了,但像前沿的稀疏機(jī)器學(xué)習(xí)该镣,新型 TPU冻璃、Nervana 和 FPGA 等面向機(jī)器學(xué)習(xí)模型部署的硬件都需要更高的靈活性。

若目前存在添加新型硬件支持或新型數(shù)據(jù)表征的新型語(yǔ)言损合,那么用戶可以簡(jiǎn)單地通過(guò)高級(jí)代碼省艳,而不需要改變?cè)瓉?lái)的系統(tǒng)就能添加硬件支持或數(shù)據(jù)表征方式。當(dāng)然塌忽,我們期望機(jī)器學(xué)習(xí)語(yǔ)言能從現(xiàn)有的數(shù)值計(jì)算語(yǔ)言中獲取靈感拍埠,因?yàn)檫@些語(yǔ)言已經(jīng)能很好地處理特定的任務(wù)了。

此外土居,機(jī)器學(xué)習(xí)工程師對(duì)傳統(tǒng)的軟件工程問(wèn)題越來(lái)越感興趣枣购,例如在維護(hù)和擴(kuò)展生產(chǎn)系統(tǒng)等方面。機(jī)器學(xué)習(xí)編程模型使得在組件之間更難以創(chuàng)建接口擦耀,對(duì)模型的重訓(xùn)練可以輕松地實(shí)現(xiàn)向后兼容棉圈。機(jī)器學(xué)習(xí)語(yǔ)言可以像常規(guī)語(yǔ)言一樣將這些問(wèn)題的解決方案結(jié)合起來(lái),但這仍然是一個(gè)開(kāi)放性問(wèn)題眷蜓。

圖片發(fā)自簡(jiǎn)書(shū)App

軟件工程 2.0分瘾?(圖片來(lái)自 XKCD)

任何新語(yǔ)言共同面臨的問(wèn)題就是它們都需要一套新的庫(kù)和生態(tài)系統(tǒng),從而讓人們編寫(xiě)的代碼能夠不斷從中獲得支援吁系。例如:如果選擇不重用 Python 的生態(tài)系統(tǒng)德召,TensorFlow 開(kāi)發(fā)者們需要為圖語(yǔ)言中的圖像處理和文件 IO 等任務(wù)重新寫(xiě)庫(kù),在這一部分做出巨大貢獻(xiàn)的項(xiàng)目是 SciPy汽纤。這可能是我們快速發(fā)展的唯一出路上岗,機(jī)器學(xué)習(xí)參與者們也不能從更為廣泛的 HPC 和數(shù)學(xué)社區(qū)中分裂出去。一個(gè)理想條件下的機(jī)器學(xué)習(xí)生態(tài)系統(tǒng)是理想的數(shù)學(xué)生態(tài)系統(tǒng)蕴坪,這些社區(qū)之間的合作將使所有人的力量都獲得倍增肴掷。

我們期待新的發(fā)展來(lái)自各個(gè)維度敬锐。Graph IR 和 XLA、ONNX呆瞻、NNVM 等格式正在變得前所未有的復(fù)雜台夺,同時(shí)也在受到傳統(tǒng)語(yǔ)言設(shè)計(jì)的啟發(fā),甚至可能會(huì)出現(xiàn)表面語(yǔ)法痴脾,以成為完整意義上的編程語(yǔ)言颤介。TensorFlow XLA 已經(jīng)開(kāi)始面向?qū)S镁幾g器堆棧發(fā)展,現(xiàn)在包含 TVM明郭、DLVM买窟、myelin,以及其它正在進(jìn)行的工作薯定。除此之外,像 PyTorch JIT瞳购、Gluon 和 Tangent 正努力使 Python 本身成為更好的建模語(yǔ)言话侄,盡管這項(xiàng)任務(wù)面臨的挑戰(zhàn)很大。在剛剛把機(jī)器學(xué)習(xí)歸類為數(shù)值編程語(yǔ)言問(wèn)題后学赛,我們?cè)?Julia 社區(qū)中看到了解決這些語(yǔ)言級(jí)別問(wèn)題的極好的基礎(chǔ)年堆,開(kāi)發(fā)者們正在持續(xù)推動(dòng)像 Knet、Flux盏浇、Cassettle变丧、CUDAnative、DataFlow.jl 等工具的發(fā)展绢掰。

結(jié)論:機(jī)器學(xué)習(xí)推理工具

機(jī)器學(xué)習(xí)模型已經(jīng)成為極度泛化的信息處理系統(tǒng)痒蓬,被用于進(jìn)行越來(lái)越高級(jí)、越來(lái)越復(fù)雜滴劲、抽象的任務(wù)攻晒;循環(huán)、遞歸班挖、高階模型鲁捏、甚至堆棧機(jī)和語(yǔ)言解釋器全部都可以以基本組建的組合形式來(lái)實(shí)現(xiàn)。機(jī)器學(xué)習(xí)是一種新的編程范式萧芙,盡管對(duì)于初學(xué)者來(lái)說(shuō)其中含有太多的數(shù)值给梅、可微分和并行化。對(duì)于任何工程領(lǐng)域双揪,這些可用工具都會(huì)對(duì)未來(lái)工作的質(zhì)量和范圍產(chǎn)生深遠(yuǎn)影響动羽。

所有這些都預(yù)示著機(jī)器學(xué)習(xí)系統(tǒng)的設(shè)計(jì)者們面臨著非常大的挑戰(zhàn)。盡管如此盟榴,我們還有一些好消息:如果有一方面仍未解決的話曹质,過(guò)去的幾十年里,計(jì)算機(jī)語(yǔ)言的研究者們已經(jīng)深入討論了同樣的問(wèn)題。為了深入探知這一領(lǐng)域的全部羽德,機(jī)器學(xué)習(xí)和編程語(yǔ)言社區(qū)需要通力合作几莽,所以,真正的挑戰(zhàn)是整合這兩個(gè)群體之間不同的專業(yè)知識(shí)宅静。

我們能否建立起一套面向數(shù)學(xué)章蚣、衍生和并行,同時(shí)又不犧牲傳統(tǒng)編程思想優(yōu)勢(shì)的新語(yǔ)言工具姨夹?這將是未來(lái)十年里計(jì)算機(jī)語(yǔ)言領(lǐng)域里人們面臨的主要問(wèn)題纤垂。

原文地址:https://julialang.org/blog/2017/12/ml&pl

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市磷账,隨后出現(xiàn)的幾起案子峭沦,更是在濱河造成了極大的恐慌,老刑警劉巖逃糟,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吼鱼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡绰咽,警方通過(guò)查閱死者的電腦和手機(jī)菇肃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)取募,“玉大人琐谤,你說(shuō)我怎么就攤上這事⊥婷簦” “怎么了斗忌?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)聊品。 經(jīng)常有香客問(wèn)我飞蹂,道長(zhǎng),這世上最難降的妖魔是什么翻屈? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任陈哑,我火速辦了婚禮,結(jié)果婚禮上伸眶,老公的妹妹穿的比我還像新娘惊窖。我一直安慰自己,他們只是感情好厘贼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布界酒。 她就那樣靜靜地躺著,像睡著了一般嘴秸。 火紅的嫁衣襯著肌膚如雪毁欣。 梳的紋絲不亂的頭發(fā)上庇谆,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音凭疮,去河邊找鬼饭耳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛执解,可吹牛的內(nèi)容都是我干的寞肖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼衰腌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼新蟆!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起右蕊,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤琼稻,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后尤泽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體欣簇,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年坯约,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莫鸭。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡闹丐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出被因,到底是詐尸還是另有隱情卿拴,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布梨与,位于F島的核電站堕花,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏粥鞋。R本人自食惡果不足惜缘挽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呻粹。 院中可真熱鬧壕曼,春花似錦、人聲如沸等浊。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)筹燕。三九已至轧飞,卻和暖如春衅鹿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背过咬。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工大渤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人援奢。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓兼犯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親集漾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子切黔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容