采訪Node.js之父Ryan Dahl
Ryan Dahl 現(xiàn)在是 Google Brain 的一個(gè)軟件工程師。他是 Node.js 之父,Node.js 是一個(gè)基于 Chrome V8 JavaScript 引擎的 JS 運(yùn)行環(huán)境。現(xiàn)在他從事深度學(xué)習(xí)研究項(xiàng)目,工作重點(diǎn)是彩色化和超分辨率等圖像轉(zhuǎn)換工作。他曾經(jīng)貢獻(xiàn)過(guò)幾個(gè)開(kāi)源項(xiàng)目,包括 HTTP Parse、libuv。
2017 年 8 月 31 日 Ryan Dahl 做客于英文播客 mappingthejourney,分享了他的個(gè)人經(jīng)歷,開(kāi)發(fā) Node.js 的過(guò)程,對(duì) Node.js 的理解,他在 Google (Brain) 的工作現(xiàn)狀,對(duì)學(xué)習(xí) ML 的看法等。
Pramod: 大家好,歡迎來(lái)到 mapping the journey。當(dāng)我們聽(tīng)到 Node.js 時(shí)就會(huì)想到 Ryan Dahl。他向我們展示了我們的I/O工作完全錯(cuò)誤,并教會(huì)了我們?nèi)绾问褂眉儺惒骄幊棠P蛠?lái)構(gòu)建軟件。我們今天的嘉賓就是 Ryan Dahl ,一個(gè)黑客、出色的程序員、也是 Node 之父。我們非常榮幸能夠邀請(qǐng)到他,歡迎 Ryan。
Ryan: Hello!很高興到這兒來(lái)。
Pramod: Ryan 我們知道您是Node之父,能跟我們聊聊做技術(shù)之前的經(jīng)歷嗎?
Ryan: 當(dāng)然,我在圣地亞哥 (San Diego) 長(zhǎng)大,在我 6 歲的時(shí)候,我媽媽買了一臺(tái) Apple 2C ,所以我想我屬于比較早接觸電腦的人。順便說(shuō)一句,我今年 36 歲。因此,我是伴隨著互聯(lián)網(wǎng)長(zhǎng)大的。我去了圣地亞哥的社區(qū)大學(xué),然后在加州大學(xué)圣地亞哥分校攻讀數(shù)學(xué),畢業(yè)后在羅切斯特大學(xué)研究生院攻讀數(shù)學(xué)博士。
在那里我學(xué)習(xí)了代數(shù)拓?fù)鋵W(xué),那是一門(mén)非常抽象的課程,我當(dāng)時(shí)非常討厭這門(mén)課程,因?yàn)槲腋杏X(jué)它與現(xiàn)實(shí)生活離得太遠(yuǎn)了,但是很多年后我發(fā)現(xiàn)這門(mén)課程非常棒。博士期間,我突然發(fā)現(xiàn)自己不想當(dāng)個(gè)數(shù)學(xué)家,于是放棄了這個(gè)計(jì)劃。然后我買了一張去南美的單程票并在那里呆了一年,在那里我開(kāi)啟了饑餓學(xué)習(xí)模式,并且找到一份和一個(gè)名叫 Eric 的家伙共同開(kāi)發(fā)一些網(wǎng)站的工作。這就是我編程生涯的開(kāi)始,使用 Ruby on Rails 為滑雪板公司開(kāi)發(fā)網(wǎng)站。
Pramod:很好!放棄博士學(xué)位、到南美旅行并成為一名 Web 開(kāi)發(fā)者。
Ryan:是的,在羅切斯特大學(xué),我習(xí)慣于處理非常抽象的問(wèn)題,然而在網(wǎng)站工作是一個(gè)非常具體的過(guò)程。但是我嘗試著將這個(gè)過(guò)程變成一套很棒的數(shù)學(xué)理論,就像我在研究生院接觸到的那樣。我認(rèn)為這讓我想到了…我認(rèn)為,我喜歡 Ruby 是因?yàn)樗鼧O大的改變了網(wǎng)站開(kāi)發(fā),我認(rèn)為,在使用 Ruby 時(shí),你可以很好的表達(dá)自己的想法。那在當(dāng)時(shí)非常有趣。而且我認(rèn)為Rails 給人留下了深刻的印象。它提出了新的結(jié)構(gòu)(也可能這不是新的),但是我認(rèn)為 Rails 推廣了模型視圖控制器(MVC)結(jié)構(gòu)。我對(duì)把這兩件事情結(jié)合在一起非常感興趣。
Pramod: 是的,建立網(wǎng)站非常有意思。Ruby 是非常棒的工具。接下來(lái),你到德國(guó)成了一名 Web 開(kāi)發(fā)的自由職業(yè)者,其中的一個(gè)項(xiàng)目就是 Node ,而且我認(rèn)為你在接下來(lái)的六到八個(gè)月一直在做這項(xiàng)工作。
Ryan:是的,離開(kāi)南美之后我跟我的女朋友搬到了德國(guó),因?yàn)樗堑聡?guó)人,而且她必須重返校園。在那里我開(kāi)始參加 Ruby 會(huì)議,人們?cè)谀抢镉懻撃P鸵晥D控制器(MVC)的新案例。如果我發(fā)音正確,其中一個(gè)家伙叫 Chris Neukirchen,他開(kāi)發(fā)了一個(gè) Rack 的項(xiàng)目對(duì) Web 服務(wù)器進(jìn)行簡(jiǎn)單抽象。一個(gè) Web 服務(wù)器變成了一個(gè)函數(shù)接口,你可以從那里獲得一個(gè)請(qǐng)求,然后返回一個(gè)響應(yīng)。
結(jié)合我為 Engineyard 的 Nginx 模塊做的一些工作,讓我想到如何…讓我后退一步。在 Nginx 中,一切都是異步的。因此,當(dāng)你為它新建一個(gè)模塊時(shí)必須非常小心來(lái)保證它是非阻塞的。是的,我想 Chris Neukirchen 的 rack 和 Nginx 使用非阻塞 IO 架構(gòu) web 服務(wù)器的方法,讓我開(kāi)始思考如何能將這兩件事情結(jié)合在一起。
Pramod: 現(xiàn)在,你有了結(jié)合 Rack 和 Nginx 的想法。你是如何說(shuō)服自己用未來(lái) 6 個(gè)月的時(shí)間開(kāi)發(fā)可以在服務(wù)器端運(yùn)行 Javascript 的框架,這能大大提高性能嗎?
Ryan: 一邊是 Rack 的簡(jiǎn)單 web服務(wù)器界面,一邊是 Nginx 的異步部分,我一直在想這兩個(gè)部分。然后2008年Chrome 發(fā)布,并且同時(shí)發(fā)布了 V8 JavaScript 解釋器。它應(yīng)該不算是解釋器,它是一個(gè)很棒的運(yùn)行環(huán)境。 V8 發(fā)布后,我開(kāi)始對(duì)它進(jìn)行分析,它看起來(lái)迷人而且干凈,而且很快,突然之間我想到:JavaScript 是單線程的,已經(jīng)實(shí)現(xiàn)了非阻塞。
這有點(diǎn)兒諷刺,但在 web 瀏覽器中人們使用 AJAX 請(qǐng)求和事件時(shí)已經(jīng)實(shí)現(xiàn)了非阻塞請(qǐng)求。哦,哇!我認(rèn)為 JavaScript 結(jié)合異步 IO,再結(jié)合一些 HTTP服務(wù)器事件,將會(huì)變成一件非??岬氖虑?。我對(duì)這個(gè)想法感到非常興奮,在接下來(lái)的四年里一直在做這項(xiàng)工作。
Pramod: 是的,JavaScript 與異步I/O 配合的很好。我相信開(kāi)發(fā)人員都在等待看到一個(gè)實(shí)現(xiàn)這項(xiàng)功能的框架,我好奇的是,在那段時(shí)間里,你有導(dǎo)師或者能夠相互討論的人嗎?還是只有你一個(gè)人。
Ryan:只有我自己,我有一些提供建議的程序員朋友,我的意思是,第一步絕對(duì)是我在自己的房間里完成的。但后來(lái),我搬到了舊金山,在 Joyent 工作,在那里我遇到很多非常棒的編程專家。是的,在那之后許多人給我指導(dǎo)并且為 Node 貢獻(xiàn)點(diǎn)子。
Pramod:很好,與我們分享一下開(kāi)發(fā) Node 的心路歷程吧,我知道 Node 從 2009 年開(kāi)始的,開(kāi)發(fā)經(jīng)歷了很長(zhǎng)時(shí)間。
Ryan:我覺(jué)得至少對(duì)于我自己而言,在我的生活中,沒(méi)有比喜歡并且有堅(jiān)信的想法更好的事情了。并且我有時(shí)間坐下來(lái)開(kāi)發(fā) Node 。我認(rèn)為 Node 是一個(gè)等待發(fā)生但是還沒(méi)做到的想法,別人或許能夠做到。但是突然間我相對(duì)失業(yè)并且有空閑時(shí)間,可以不停的工作幾個(gè)月,而這正是開(kāi)發(fā)初步產(chǎn)品所需要的。這很棒而且很有趣。
Pramod:非常好,這太奇妙了。你確實(shí)做的非常棒。Node 建立在“純異步”編程模型的基礎(chǔ)上,你是怎么為 Node 想到這個(gè)點(diǎn)子的?
Ryan:是的,我認(rèn)為那是一個(gè)非常有趣的問(wèn)題。現(xiàn)在已經(jīng)過(guò)去好幾年了。從 2012 年或 2013 年開(kāi)始我沒(méi)有再進(jìn)行 Node 開(kāi)發(fā)了。從這點(diǎn)來(lái)看,Node 是一個(gè)大項(xiàng)目。因此,是的,當(dāng)初實(shí)現(xiàn) Node 之后,我到處游說(shuō)人們使用 Node?;蛟S我們處理 I/O 的方式有錯(cuò),或許我們以非阻塞的方式做所有事情將會(huì)解決編程過(guò)程中遇到的很多問(wèn)題,比如我們可以完全忘記線程,只使用過(guò)程抽象和序列化通信。但是在一個(gè)過(guò)程中,完全異步方式可以處理很多很多的請(qǐng)求。那時(shí)我堅(jiān)信這個(gè)觀點(diǎn),但是幾年之后,我認(rèn)為這可能不是編程的最終和全部想法。特別是當(dāng) Go 出現(xiàn)的時(shí)候。
我認(rèn)為 Go 很早之前就出現(xiàn)了,但我大約在 2012 年第一次聽(tīng)說(shuō) Go 。他們有一個(gè)非常好的運(yùn)行環(huán)境,具有合適的綠色線程和易于使用的抽象。我認(rèn)為阻塞 I/O(引號(hào)中的阻塞I/O),由于Go和操作系統(tǒng)的接口都是綠色線程,我認(rèn)為那完全是非阻塞 I/O 。
但是,他們給用戶的接口是阻塞的,我認(rèn)為這是一個(gè)更好的編程模型。如果阻塞,我們可以更加輕松的考慮大多數(shù)情況需要做的工作。你知道,如果有非常多的后續(xù)動(dòng)作,這樣做是很好的:做 A,等待一個(gè)響應(yīng)或者一個(gè)錯(cuò)誤;做 B,等待一個(gè)響應(yīng),出錯(cuò)。在 Node 中,這更加困難,因?yàn)楸仨毺D(zhuǎn)到另一個(gè)函數(shù)調(diào)用中。
Pramod: 是的,我喜歡 Go 的編程模型。使用 goroutines 如此簡(jiǎn)單有趣,事實(shí)上,我們用它來(lái)創(chuàng)建分布式應(yīng)用。
Ryan: 是的,我認(rèn)為..對(duì)于特定類型的應(yīng)用,比如說(shuō),我們要建一個(gè)服務(wù)器,我很難想象除了使用 Go 還能使用什么。意思是說(shuō),我認(rèn)為 Node 的非阻塞編程對(duì)于沒(méi)有線程的 JavaScript 非常好用。我認(rèn)為很多需要跳轉(zhuǎn)到多個(gè)異步函數(shù)來(lái)實(shí)現(xiàn)的回調(diào)問(wèn)題,現(xiàn)在已經(jīng)通過(guò) JavaScript 異步特性-異步關(guān)鍵字緩解了。
因此,在更新版本的 JavaScript 中,這更容易實(shí)現(xiàn)。這就是說(shuō),我認(rèn)為 Node 不是構(gòu)建大型服務(wù)器網(wǎng)站的最佳系統(tǒng)。我會(huì)用 Go 構(gòu)建大型服務(wù)器網(wǎng)站,說(shuō)實(shí)話,那是我離開(kāi) Node 的原因。我意識(shí)到:這不是有史以來(lái)最好的服務(wù)端系統(tǒng)。
是的,我認(rèn)為 Node 在客戶端大放異彩,可以實(shí)現(xiàn)網(wǎng)站開(kāi)發(fā)周邊的一些腳本,比如打包客戶端 JS 腳本的 Browserify。你可以實(shí)現(xiàn)所有客戶端 JS 的服務(wù)端處理。然后可以做小型服務(wù)器……或許很小的開(kāi)發(fā)服務(wù)器,或許是處理實(shí)時(shí)事務(wù)的一些真實(shí)服務(wù)器。Node 或許有用,或者說(shuō)它可以是正確選擇。但是如果要建立一個(gè)大規(guī)模的中心 DNS 服務(wù)器,我不會(huì)選擇 Node。
Pramod:這對(duì)全世界所有的開(kāi)發(fā)者來(lái)說(shuō)應(yīng)該是一個(gè)很好的選擇。 為應(yīng)用選擇合適的工具非常重要。 你完全沒(méi)有偏向 Node。 在 2009年柏林的 JsConf 上你介紹了 Node.js。 你會(huì)對(duì)突然獲得的成功和擁簇感到驚訝嗎?
Ryan:是的,我的意思是,我基本上連續(xù)四年都處于驚喜之中。因?yàn)樗l(fā)展的非???,大家非常喜歡它。
Pramod:然后你加入 Joyant、全職開(kāi)發(fā) Node 并去了 SF ,對(duì)嗎?體驗(yàn)如何?開(kāi)發(fā)人員喜愛(ài)它,而你是這一切的核心。
Ryan:這絕對(duì)是我一生中,感覺(jué)自己處于會(huì)議和其他事情中心的體驗(yàn)。有一次去日本,人們要求我與他們合影,我意識(shí)到…我不知道,我很討厭這種感覺(jué)。而且每當(dāng)我在線上回復(fù)某件事情時(shí),也將收到 100 條答復(fù)。
因此,我感覺(jué)自己需要非常小心的選擇用語(yǔ)以及表達(dá)自己的想法,因?yàn)楹孟翊蠹叶荚趦A聽(tīng),這種感覺(jué)很奇怪。而且我不喜歡這種感覺(jué)。我的意思是,我是一個(gè)程序員,我愿意寫(xiě)代碼,有時(shí)也會(huì)在沒(méi)有仔細(xì)考慮的情況下發(fā)表個(gè)人觀點(diǎn)。所以,我覺(jué)得我不是一個(gè)…是的,我不太喜歡這種感覺(jué)。
Pramod: 推出 Node 時(shí)你只有 29 ?30 歲?但是 Node 卻有如此大的影響力。
Ryan:是的,我的意思是,我絕對(duì)是個(gè)開(kāi)發(fā)新手。
Pramod:好的,Ryan。原來(lái)會(huì)同時(shí)涌現(xiàn)很多服務(wù)器端 JavaScript 項(xiàng)目。Node 并不是唯一一個(gè)。你認(rèn)為Node 的成功源于什么?
Ryan:是的,有一些人嘗試開(kāi)發(fā)服務(wù)器端的 JavaScript 。我現(xiàn)在甚至不能說(shuō)出他們的名字,而且我忘記了他們是誰(shuí)。
事情是這樣的,他們都使用阻塞I/O ,因?yàn)闆](méi)有線程,這與 JavaScript 結(jié)構(gòu)一點(diǎn)兒關(guān)系都沒(méi)有。使用阻塞I/O 理論上無(wú)法處理請(qǐng)求。比如,一次處理一個(gè),這永遠(yuǎn)都沒(méi)用?;谶@個(gè)原因,還有我喜歡做這件事,讓我能夠坐下來(lái)并且開(kāi)發(fā)運(yùn)行良好的 HTTP 服務(wù)器。我有一個(gè) demo 可以…我有一個(gè) HTTP服務(wù)器(一個(gè)原始 TCP服務(wù)器)。并且我使這些服務(wù)器運(yùn)行良好,這樣大家可以坐下來(lái)不用花費(fèi)多大力氣就可以建一個(gè)網(wǎng)站。
說(shuō)實(shí)話,創(chuàng)建 web 服務(wù)器不是最簡(jiǎn)單的事情,我想這些系統(tǒng)中很多是留給社區(qū)做的,所以沒(méi)有人做。因?yàn)闆](méi)有什么可以使用的系統(tǒng)。我認(rèn)為發(fā)布一個(gè)軟件框架(或者任何軟件)時(shí),有一個(gè) demo 可以讓用戶坐下來(lái)立即使用非常重要。這就是 Node 所做的事情之一。人們可以下載并直接使用 web 服務(wù)器。
Pramod: 是的,好的 demo、容易下載、安裝和使用,這些會(huì)產(chǎn)生很大區(qū)別。而且,大家了解 JavaScript ,他們可以在任何時(shí)刻開(kāi)始寫(xiě)代碼。我開(kāi)始使用 node 時(shí)感覺(jué)非常簡(jiǎn)單,因?yàn)槲伊私?JavaScript。
Ryan:是的,我感覺(jué)我們理所當(dāng)然地認(rèn)為在語(yǔ)言之間切換非常容易。 我的意思是,即使你知道另外一種語(yǔ)言,但要做到這一點(diǎn)也會(huì)非常困難。 而且很多人對(duì) Javascript 非常熟悉。 為他們提供能夠在其他情況下使用的工具,可以激勵(lì)人們。 你突然之間發(fā)現(xiàn)可以比以前做得更多。
Pramod:是的,在 2012 年 node 已經(jīng)有了龐大的開(kāi)發(fā)基礎(chǔ)。那么為什么你要把它交給 Joyent 的 Isaac Schueter?
Ryan:有許多原因。我最主要的原因在于,那時(shí)我已經(jīng)開(kāi)發(fā) Node 四年了。我已經(jīng)實(shí)現(xiàn)了自己的愿望,我從來(lái)不希望 Node 成為一個(gè)龐大的 API 。我希望它是個(gè)小巧緊湊的內(nèi)核,人們可以用它構(gòu)建模塊。
還有一些重要的事情,我希望能夠支持關(guān)鍵特性。因此很早就添加了擴(kuò)展模塊,我們實(shí)現(xiàn)了所有的網(wǎng)絡(luò)庫(kù),HTTP、UDP、TCP,我們可以訪問(wèn)所有的文件系統(tǒng)。
然后,一大塊內(nèi)容(差不多時(shí)五個(gè)人一年的工作)需要放到 Windows 中并且運(yùn)行良好。而且我們希望使用 Windows 抽象( IO完成端口)來(lái)實(shí)現(xiàn)異步IO 。所以,這需要重寫(xiě)核心庫(kù),最后做出的是 libuv 庫(kù)。
是的,但是在某些時(shí)候,所有這些都做完了,我們已經(jīng)發(fā)布 Windows 版本了,而且你知道,它也運(yùn)行良好。我的意思是,這是我本來(lái)打算實(shí)現(xiàn)的,我很高興能夠有機(jī)會(huì)實(shí)現(xiàn)。當(dāng)然,之后會(huì)有無(wú)數(shù)的錯(cuò)誤需要修正,但是……你看,有足夠多的人參與進(jìn)來(lái)。我沒(méi)有必要去做這件事情,而且我希望其做些其他事情。再加上 Go 的發(fā)布,我認(rèn)為 Node 不能夠成為服務(wù)器的終極解決方案。而且,我發(fā)表博客文章時(shí)不希望成為關(guān)注的中心。
Pramod:很好,是的,有些人不喜歡出名。當(dāng)你開(kāi)始開(kāi)發(fā) Node 的時(shí)候,你肯定有一些目標(biāo),現(xiàn)在的 Node.js 實(shí)現(xiàn)這些目標(biāo)了嗎?
Ryan:我的意思..成千上萬(wàn)的人使用 Node (如果不是數(shù)百萬(wàn)人),我認(rèn)為這肯定超出了我對(duì)它的期望,是的,這很酷。
Pramod: Rayan當(dāng)你完成 Node 的奇妙之旅后,你決定做些什么呢?
Ryan:Node 之后,我搬到…我離開(kāi) Joyent 并且停止參與 Node 項(xiàng)目后,我搬到了紐約?;艘恍r(shí)間在一些項(xiàng)目上。我有許多項(xiàng)目,你知道那時(shí) Instagram 已經(jīng)發(fā)布了,但是它很新而且看起來(lái)很簡(jiǎn)單,每個(gè)人都在說(shuō):哇,它是如此簡(jiǎn)單,我也可以開(kāi)發(fā)這樣的項(xiàng)目。我也這樣想。因此,我有了一個(gè)社交網(wǎng)絡(luò)項(xiàng)目;我有一個(gè) C++ 編譯系統(tǒng)項(xiàng)目,還有另一個(gè) HTML 編譯系統(tǒng)項(xiàng)目,與 Browserify 類似,它以一種更聰明方式打包 JavaScript 和 HTML。
是的,我做了一大堆項(xiàng)目,但是沒(méi)有一個(gè)項(xiàng)目讓我心動(dòng)。我認(rèn)為可以推遲其中一些項(xiàng)目,比如我的社交網(wǎng)絡(luò)項(xiàng)目,我可以在某些時(shí)候回頭處理。是的,我開(kāi)發(fā)了一段時(shí)間。然后我開(kāi)始閱讀關(guān)于……我開(kāi)始了解卷積網(wǎng)絡(luò)和如何解決圖像分類,這讓我對(duì)機(jī)器學(xué)習(xí)很感興趣,
Pramod:你還是 Google Brain 見(jiàn)習(xí)項(xiàng)目的成員,給我們講講體驗(yàn)吧?
Ryan: 是的,我只在山景城呆了一年。 因此,晚了一步,TensorFlow 兩年前發(fā)布了。
與此同時(shí),他們宣布了這個(gè) Google Brain 見(jiàn)習(xí)項(xiàng)目,他們邀請(qǐng) 20 個(gè)人參與 Google Brain ,Google Brain 是 Google 的一個(gè)機(jī)器學(xué)習(xí)研究實(shí)驗(yàn)室。 人們……我認(rèn)為這個(gè)實(shí)驗(yàn)室的觀點(diǎn)是并不一定要學(xué)過(guò)機(jī)器學(xué)習(xí),如果你有一定的數(shù)學(xué)和編程背景,并且對(duì)機(jī)器學(xué)習(xí)感興趣,那么請(qǐng)來(lái)這里并實(shí)現(xiàn)這些新想法。 因?yàn)闄C(jī)器學(xué)習(xí)變化很快,而且這里已經(jīng)做了大量的工作。
但是現(xiàn)在社區(qū)已經(jīng)把機(jī)器學(xué)習(xí)的范圍縮小到最有用的神經(jīng)網(wǎng)絡(luò)算法了,它可能只需要一些人實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò),而這個(gè)新的 ML 框架就是TensorFlow,這將激發(fā)一些有趣的想法。 我在那里花了一年的時(shí)間,基本上是編寫(xiě)模型和模型文件。 我主要從事圖像轉(zhuǎn)換問(wèn)題的研究。 所以,你知道,如果你有一些輸入圖像,你想預(yù)測(cè)一些輸出圖像。 我覺(jué)得這個(gè)問(wèn)題很有趣,讓我舉一些例子。
著色的問(wèn)題。你可以使用黑白照片作為輸入,嘗試預(yù)測(cè)輸出照片的顏色。這個(gè)問(wèn)題最酷的地方在于有無(wú)限的訓(xùn)練數(shù)據(jù)。你可以拍攝任何彩色照片并去飽和,然后它就成了輸入照片,對(duì)吧?
機(jī)器學(xué)習(xí)的一個(gè)問(wèn)題是需要大量數(shù)據(jù),然而對(duì)于這類任務(wù),數(shù)據(jù)將不再是一個(gè)問(wèn)題。而且,最近出現(xiàn)了大量生成模型的工作(輸出圖像的模型),特別是出現(xiàn)了對(duì)抗性網(wǎng)絡(luò)和像素 CNN,這些模型已經(jīng)展示了學(xué)習(xí)自然圖像多樣性的能力,就像真正理解真實(shí)圖像是什么、什么不是真實(shí)圖像、什么看起來(lái)像真實(shí)形象。
我的想法是在生成模型中使用這些最新模型,并采取無(wú)限的訓(xùn)練數(shù)據(jù),看看能否解決一些圖像轉(zhuǎn)換問(wèn)題。 所以,我做了一些超分辨率的工作,也就是提高低分辨率圖片的分辨率。 這也是一個(gè)圖像轉(zhuǎn)換的問(wèn)題。 現(xiàn)在我已經(jīng)完成了兩個(gè)著色的項(xiàng)目。
Pramod:很好的解釋,Ryan。是的,我認(rèn)為 TensorFlow 是處理許多機(jī)器學(xué)習(xí)問(wèn)題的好平臺(tái)。我不太了解圖像分類、轉(zhuǎn)換,但我相信這一定很有趣。你還在繼續(xù)做 ML 的工作嗎?
Ryan:是的,我現(xiàn)在還在 Google(作為一個(gè)軟件工程師)從事這種類型的工作,研究生成模型,并嘗試幫助研發(fā)人員建立下一代的生成系統(tǒng),下一代的生成模型。
Pramod:生成模型與你之前從事的 node 或 web開(kāi)發(fā)工作使用的 JavaScript 差別是如此之大。
Ryan:是的,我想也是。但是我是數(shù)學(xué)專業(yè),所以我想我有相當(dāng)不錯(cuò)的數(shù)學(xué)基礎(chǔ)。是的,我認(rèn)為人們喜歡把別人固定到特定領(lǐng)域,我不想這樣做。我不想成為一個(gè) JavaScript 專家,我不想成為一個(gè)機(jī)器學(xué)習(xí)專家,我認(rèn)為探索可能性非常有趣。令人興奮的是,做以前沒(méi)做過(guò),并且能夠以某種方式令人受益的事情。
Pramod:很好,是的,機(jī)器學(xué)習(xí)需要好的數(shù)學(xué)基礎(chǔ)。在你最近一篇關(guān)于樂(lè)觀虛無(wú)主義的博客中,你說(shuō)我們有朝一日能夠模仿大腦、開(kāi)發(fā)一個(gè)像人類一樣理解和思考的機(jī)器,我們離實(shí)現(xiàn)這個(gè)目標(biāo)還有多遠(yuǎn)?
Ryan:是的,我要對(duì)這種說(shuō)法更謹(jǐn)慎一些…我的意思是,這是我的個(gè)人觀點(diǎn)。我們開(kāi)發(fā)的東西遠(yuǎn)不及人類的智慧。我的意思是,我們使用的機(jī)器學(xué)習(xí)系統(tǒng)非常簡(jiǎn)單,根本不會(huì)工作。實(shí)際上,我有一篇關(guān)于我的見(jiàn)習(xí)的文章,我在那篇文章中列舉了開(kāi)發(fā)這些模型的所有困難。我認(rèn)為不從事這類工作的人們可能會(huì)有這樣的想法,你可以采用這類模型然后輸入一些數(shù)據(jù),它就能工作了。但事實(shí)并非如此,這些模型非常挑剔,而且還沒(méi)有被很好的理解,要花費(fèi)很多個(gè)月的時(shí)間進(jìn)行精心調(diào)整和試驗(yàn),才能得到相似的結(jié)果。
所以,我們離它很遠(yuǎn),但是我認(rèn)為基礎(chǔ)……最近有一些有希望的技術(shù)得到了改進(jìn),卷積網(wǎng)絡(luò)似乎起作用了,而且 propagation 似乎也正在起作用。事實(shí)上,這些東西都建立在模型基礎(chǔ)上的,這個(gè)神經(jīng)網(wǎng)絡(luò)模型不像大腦一樣工作,但是以大腦的某種方式激發(fā),這是非常誘人的。我們也有 GPU,我們展示了如何在這些方面訓(xùn)練它和如何通過(guò) GPU 進(jìn)行分布式訓(xùn)練。所以,我認(rèn)為出現(xiàn)了建立更大、更智能的系統(tǒng)的基礎(chǔ)。而且,我個(gè)人認(rèn)為,我是一個(gè)無(wú)神論者,我相信我們的大腦中除了化學(xué)物質(zhì)和神經(jīng)元之外再?zèng)]有別的東西了。而且我認(rèn)為我的意識(shí),我們所有的意識(shí)都以某種方式都被編碼到這些神經(jīng)元之間的相互作用中。所以,我不明白我們?yōu)槭裁床荒芡ㄟ^(guò)足夠的研究和工作來(lái)模仿這種行為。當(dāng)然,現(xiàn)在還遠(yuǎn)遠(yuǎn)沒(méi)達(dá)到能夠預(yù)測(cè)需要多久能夠?qū)崿F(xiàn)的程度。
Pramod:很棒,你已經(jīng)看到了這一切,Ryan 你認(rèn)為未來(lái) 20 年技術(shù)將在哪些領(lǐng)域發(fā)展?
Ryan:我對(duì)機(jī)器學(xué)習(xí)和它帶來(lái)的可能性感到非常興奮。我認(rèn)為即使在我們實(shí)現(xiàn)真正的人工智能之前,這種技術(shù)也非常有用。我的意思是,你使用的任何系統(tǒng)都將從這項(xiàng)技術(shù)中受益匪淺,比如佩戴智能眼鏡將會(huì)幫助你。有無(wú)數(shù)的工業(yè)過(guò)程可以利用這項(xiàng)技術(shù)。比如使用計(jì)算機(jī)視覺(jué)的進(jìn)行分揀回收的回收中心。我的意思是,將有很多很多系統(tǒng)可以從簡(jiǎn)單的機(jī)器學(xué)習(xí)系統(tǒng)中受益。而且我們會(huì)不斷看到這些系統(tǒng)適用于不同的流程。所以,我認(rèn)為這將對(duì)科技行業(yè)產(chǎn)生重大的影響,對(duì)人類都將產(chǎn)生很大的影響。
Pramod:是的,機(jī)器學(xué)習(xí)令人興奮。我在山景城看到自動(dòng)駕駛汽車時(shí)非常興奮。有一天我會(huì)坐到后面并把控制完全交給汽車。Ryan,謝謝你帶給我們?nèi)绱顺錾?Node 框架,謝謝你參加這次節(jié)目。祝你好運(yùn),和你聊天的感覺(jué)非常棒。
Ryan:是的,很棒,感謝你邀請(qǐng)我。很高興能夠和大家分享這些。
Pramod:謝謝你。這就是所有內(nèi)容了,聽(tīng)眾們。我真的非常喜歡與 Ryan 聊天,他謙虛而且受人尊敬。他早些年在科技領(lǐng)域取得了如此大的成就,這是一個(gè)非常鼓舞人心的故事。再見(jiàn),我們兩周以后會(huì)踏上另外一個(gè)有趣的旅程,Shukriya。