對(duì)于移動(dòng)開(kāi)發(fā),人工智能的到來(lái)意味著什么?
近幾年來(lái)人工智能的話題那是炙手可熱。在國(guó)內(nèi)很多大佬言必談機(jī)器學(xué)習(xí)和大數(shù)據(jù);在美國(guó)剛畢業(yè)的人工智能PHD也是眾人追捧,工資直逼NBA球星。人工智能甚至成為了互聯(lián)網(wǎng)領(lǐng)域茶余飯后的話題 —— 仿佛不懂人工智能就是落伍了。
筆者作為一名移動(dòng)開(kāi)發(fā)者,對(duì)于如火如荼的人工智能和機(jī)器學(xué)習(xí),也保持了密切的追蹤和了解。這篇文章就是總結(jié)我在硅谷工作的所見(jiàn)所聞,拋磚引玉的與大家分享一下我對(duì)于人工智能的思考。
人工智能是什么?
關(guān)于人工智能(AI),我們經(jīng)常聽(tīng)到這樣一些相關(guān)詞:大數(shù)據(jù)(Big Data),機(jī)器學(xué)習(xí)(Machine Learning),神經(jīng)網(wǎng)絡(luò)(Neural Network)。那么這些詞到底有什么區(qū)別?我們來(lái)看下面一則小故事。
從前有個(gè)程序員叫牛頓。他定義了一個(gè)方法來(lái)計(jì)算自由落體的速度:
func getVelocity(time t: second) -> Float {return 9.8 * t}
他是怎么得到這個(gè)方法的呢?牛頓自己被一個(gè)蘋(píng)果砸中之后,做了大量的邏輯推導(dǎo)和實(shí)驗(yàn)論證之后,得到了這個(gè)公式。這是目前傳統(tǒng)意義上的寫(xiě)程序方法——理解清楚了事物的內(nèi)在邏輯和真相后,由人來(lái)定義方法。直到今天,絕大多數(shù)程序都是這么寫(xiě)出來(lái)的。
而所謂的人工智能,就是機(jī)器自己定義方法。人工智能的實(shí)現(xiàn)方法有很多,比如可以讓機(jī)器來(lái)模擬大腦,然后像人一樣思考,從而定義方法。機(jī)器學(xué)習(xí)只是另一種實(shí)現(xiàn)人工智能的方法,就是由大數(shù)據(jù)定義方法。假如牛頓時(shí)期就有機(jī)器學(xué)習(xí),它得出自由落體速度的過(guò)程是這樣的:
1. 收集盡可能多的自由落體實(shí)驗(yàn)數(shù)據(jù)。假如收集到的數(shù)據(jù)如下
| 負(fù)責(zé)人 | 速度 (m/s) | 時(shí)間 (s) |
| 伽利略 | 9.8 | 1 |
| 牛頓 | 19.6 | 2 |
| 達(dá)芬奇 | 29.4 | 3 |
| 亞里士多德 | 30 | 4 |
2. 分析數(shù)據(jù)。機(jī)器學(xué)習(xí)會(huì)分析出,亞里士多德的數(shù)據(jù)偏差太大不予采納。其他三人的數(shù)據(jù)滿足同一規(guī)律。
3. 定義方法。根據(jù)上面數(shù)據(jù),機(jī)器學(xué)習(xí)得出結(jié)論,速度 = 時(shí)間 * 9.8。
隨著數(shù)據(jù)收集得越多,機(jī)器學(xué)習(xí)得到的結(jié)論就越準(zhǔn)確。其實(shí)人類學(xué)習(xí)的過(guò)程也十分類似:書(shū)上有大量的知識(shí)(加工的數(shù)據(jù)),我們看了之后進(jìn)行理解思考,然后得出自己的結(jié)論。

開(kāi)普勒就是個(gè)著名的人肉的機(jī)器學(xué)習(xí)實(shí)踐者:他前半輩子看星星,把觀測(cè)到的數(shù)據(jù)記錄下來(lái);后半輩子用自己的邏輯和理解分析這些數(shù)據(jù);最后得出行星運(yùn)動(dòng)的開(kāi)普勒-牛頓模型。然后用這個(gè)模型去預(yù)測(cè)其他行星運(yùn)轉(zhuǎn),同時(shí)新的數(shù)據(jù)用來(lái)修正模型的參數(shù),使之逼近完美。
那么數(shù)據(jù)和人相比有什么優(yōu)勢(shì)呢?我認(rèn)為是更快更準(zhǔn)確。人在定義方法時(shí),總是需要對(duì)該方法的前后因果、邏輯關(guān)系、各種情況都要求考慮周全,這有時(shí)需要花費(fèi)很多時(shí)間去研究論證,而且忽略某些極端情況也時(shí)有發(fā)生,導(dǎo)致定義漏洞百出。而數(shù)據(jù)在互聯(lián)網(wǎng)時(shí)代,獲取的成本是很低的。在這樣情況下,大量數(shù)據(jù)的輕易獲得會(huì)使得方法定義越來(lái)越快;同時(shí)現(xiàn)實(shí)中數(shù)據(jù)涵蓋的情況之廣,也使得依次定義的方法更加準(zhǔn)確。
吳軍博士在《智能時(shí)代》一書(shū)中對(duì)大數(shù)據(jù)的優(yōu)勢(shì)進(jìn)行了以下總結(jié):“在無(wú)法確定因果關(guān)系時(shí),數(shù)據(jù)為我們提供了解決問(wèn)題的新方法,數(shù)據(jù)中所包含的信息可以幫助我們消除不確定性,而數(shù)據(jù)之間的相關(guān)性在某種程度上可以取代原來(lái)的因果關(guān)系,幫助我們得到想要的答案,這便是大數(shù)據(jù)的核心。”
我們回到上文牛頓自由落體速度的實(shí)驗(yàn)中去。實(shí)際上,機(jī)器學(xué)習(xí)拿到的實(shí)驗(yàn)數(shù)據(jù),可能是以下的記載:
這個(gè)數(shù)據(jù)樣本中有很多特征,時(shí)間、空氣濕潤(rùn)度、風(fēng)力、比薩斜塔的高度、鉛球質(zhì)量、初始速度、到達(dá)地面時(shí)間等等。那么自由落體速度到底跟哪些特征相關(guān)?如果讓機(jī)器自己去分析,這就叫做無(wú)監(jiān)督學(xué)習(xí)。如果我們告訴機(jī)器,不要 care 質(zhì)量和時(shí)間,重點(diǎn)分析鉛球到達(dá)地面的時(shí)間和比薩斜塔的高度,這就叫做監(jiān)督學(xué)習(xí)。后者在于借鑒了人類的智慧,這樣機(jī)器學(xué)習(xí)就有了大致的方向。
至此,機(jī)器學(xué)習(xí)依然難以稱得上“智能” -- 它無(wú)非是更快更準(zhǔn)確的得出答案而已。如果僅僅如此,AlphaGo就算將所有九段棋手的對(duì)弈研究透徹(這些對(duì)弈的輸贏已定,相當(dāng)于人為標(biāo)注走法好壞,故為監(jiān)督學(xué)習(xí)),水平也就十段而已,于九段相比,也就是略勝一籌,發(fā)揮更穩(wěn)定一點(diǎn)。然而事實(shí)是,AlphaGo 的棋力要遠(yuǎn)勝人類最高水平。
其實(shí)AlphaGo在下棋時(shí),每下幾步,系統(tǒng)都會(huì)告訴它勝率是否提升。這種不斷反饋的機(jī)制可以讓AlphaGo實(shí)時(shí)強(qiáng)化棋力,并鼓勵(lì)其嘗試人類從沒(méi)有下過(guò)的路數(shù),從而實(shí)現(xiàn)超越人類。這種反饋的訓(xùn)練方式就叫做增強(qiáng)學(xué)習(xí)。

最后講講神經(jīng)網(wǎng)絡(luò)是怎么回事。以我粗淺的理解,神經(jīng)網(wǎng)絡(luò)是由神經(jīng)元組成,每個(gè)神經(jīng)元都有對(duì)應(yīng)的功能。比如,人工智能要識(shí)別一堆動(dòng)物照片中的母狗,第一個(gè)神經(jīng)元做的是判斷哪些動(dòng)物是狗,第二個(gè)神經(jīng)元做的就是區(qū)分狗的公母。
上面這個(gè)例子中,我們是先讓第一個(gè)神經(jīng)元進(jìn)行判斷,再將結(jié)果傳遞給第二個(gè)神經(jīng)元。也就是說(shuō),后者的輸入是前者的輸出,這就是神經(jīng)網(wǎng)絡(luò)分層的概念。所以AlphaGo這種大型神經(jīng)網(wǎng)絡(luò),就是基于神經(jīng)元分層這個(gè)原理。
因?yàn)闄C(jī)器學(xué)習(xí)的發(fā)展在人工智能領(lǐng)域一枝獨(dú)秀。所以提到人工智能,幾乎就相當(dāng)于是在談機(jī)器學(xué)習(xí)。
人工智能在移動(dòng)開(kāi)發(fā)上有哪些應(yīng)用?
前面說(shuō)了這么多,肯定很多人要問(wèn):這些都很高大上,可惜我是iOS/Android工程師,人工智能到底關(guān)我何事?其實(shí)人工智能在移動(dòng)端上由來(lái)已久,且可能會(huì)深入我們的日常開(kāi)發(fā)中,所以我們有必要對(duì)此高度敏感。這里筆者以iOS平臺(tái)為例,來(lái)分享一下人工智能在移動(dòng)端上的應(yīng)用。
首先,喬布斯老爺子早在若干年前就在iPhone上布局了智能語(yǔ)音助手 Siri。Siri 可謂是人工智能和機(jī)器學(xué)習(xí)在移動(dòng)端上第一次成功的應(yīng)用:它結(jié)合了語(yǔ)音識(shí)別(Speech Recognition)和自然語(yǔ)言處理(Natural Language Processing)兩大人工智能操作(當(dāng)然前者是后者的一部分)。后來(lái)因?yàn)樘O(píng)果封閉的基因,Siri 的數(shù)據(jù)量一直沒(méi)有上去,而我們都知道數(shù)據(jù)量是提高人工智能水平的關(guān)鍵,所以現(xiàn)在 Siri 現(xiàn)在一直很雞肋。

同 Siri 類似,F(xiàn)acebook 在他們的Messenger App中集成了聊天機(jī)器人(Chatbot)。在去年的 F8 現(xiàn)場(chǎng),我還清楚地記得他們號(hào)稱這是 App 開(kāi)發(fā)的新紀(jì)元 - 由聊天機(jī)器人和人工智能主導(dǎo)的 App 將取代傳統(tǒng)手機(jī)應(yīng)用,而 Messenger 將從一款聊天應(yīng)用變成一個(gè)平臺(tái)甚至是一個(gè)操作系統(tǒng)。這個(gè)跟微信的小程序戰(zhàn)略類似,只不過(guò)多了人工智能的噱頭。可惜的是,很多人工智能領(lǐng)域的大佬告訴我,聊天機(jī)器人離成熟還有很大距離。

到這里,人工智能在移動(dòng)端都沒(méi)有比較成功的案例。直到這一款 App 的誕生:Prisma。老毛子 Alexey 在讀了兩篇論文——《藝術(shù)風(fēng)格的神經(jīng)算法》和《利用神經(jīng)卷積網(wǎng)絡(luò)進(jìn)行文理合成》之后,開(kāi)發(fā)出了Prisma這款風(fēng)格轉(zhuǎn)換的 App。它的基本流程是這樣:
1. 用戶上傳照片
2. 將照片傳至云端,云端的神經(jīng)網(wǎng)絡(luò)分析識(shí)別照片
3. 輸出一副重新繪制的作品
4. 將重繪的作品下載到手機(jī)端

這款A(yù)pp最難的地方在于第二步的耗時(shí),即模型分析研究照片的風(fēng)格。Alexey優(yōu)化了神經(jīng)網(wǎng)絡(luò)的細(xì)節(jié),使得 Prisma 在重繪一張照片的耗時(shí)僅需幾秒。之后的App 迭代,為了讓速度更快,也為了解決海外用戶連接云端的演示問(wèn)題,神經(jīng)網(wǎng)絡(luò)的模型被直接部署在了移動(dòng)端。利用 iPhone 強(qiáng)大的處理器直接進(jìn)行離線圖片繪制,這也讓Prisma成為了第一款能夠離線運(yùn)行風(fēng)格轉(zhuǎn)換神經(jīng)網(wǎng)絡(luò)的手機(jī)運(yùn)用。現(xiàn)在Prisma的處理一張圖片的速度只需半秒不到,它也因?yàn)樗囆g(shù)和技術(shù)的完美結(jié)合而拿下iOS年度最佳應(yīng)用,并且擁有了數(shù)億用戶。
最后再介紹一款A(yù)pp:Topology Eyewear,一款訂制眼鏡的電子商務(wù)應(yīng)用。其特點(diǎn)是對(duì)用戶進(jìn)行人臉識(shí)別,然后在手機(jī)端渲染出客戶戴上不同眼鏡的效果。

第三方App的成功,刺激了大廠在相關(guān)領(lǐng)域的重視。Snapchat、Instagram、WhatsApp 紛紛將人工智能技術(shù)引入了其濾鏡效果。同時(shí)Facebook和Google也開(kāi)始將AI框架輕便化以方便部署在移動(dòng)端。2017年的WWDC,機(jī)器學(xué)習(xí)成為了整個(gè)大會(huì)最熱門(mén)的詞匯,同時(shí)蘋(píng)果正式推出了Core ML框架。在隨后的幾年里,蘋(píng)果不斷完善Core ML工具鏈——它的API涵蓋視覺(jué)識(shí)別、自然語(yǔ)義處理、語(yǔ)音分析三大場(chǎng)景,在提供很多訓(xùn)練好的模型基礎(chǔ)上還有十分定制化的Create ML模型訓(xùn)練生成工具。操作的易用性讓Core ML剛面世就受到廣大開(kāi)發(fā)者的追捧,現(xiàn)在已經(jīng)有超過(guò)100個(gè)App使用了Core ML來(lái)開(kāi)發(fā)業(yè)務(wù)。
總體來(lái)說(shuō),移動(dòng)應(yīng)用AI化已經(jīng)是一個(gè)基本趨勢(shì),正如李開(kāi)復(fù)在哥倫比亞大學(xué)的畢業(yè)演講中說(shuō):在未來(lái),伴隨著硬件、軟件和網(wǎng)絡(luò)帶寬成本的下降,人工智能的成本幾乎就是電費(fèi)了。
移動(dòng)開(kāi)發(fā)者該何去何從?
首先我認(rèn)為,移動(dòng)端和人工智能并不是對(duì)立關(guān)系,而是互補(bǔ)的關(guān)系。iOS/Android應(yīng)用需要人工智能來(lái)提高自身的效率和拓展功能,人工智能技術(shù)需要在 移動(dòng)端上落實(shí)為產(chǎn)品。智能時(shí)代更多是移動(dòng)時(shí)代的升級(jí)和補(bǔ)充,而不是取代。所以iOS/Android開(kāi)發(fā)仍有市場(chǎng),我們無(wú)需擔(dān)心人工智能會(huì)讓我們失業(yè)。
但是,移動(dòng)開(kāi)發(fā)者需要擁抱人工智能。Google IO、Facebook F8、Apple WWDC,都有越來(lái)越多的講座是關(guān)于移動(dòng)App開(kāi)發(fā)和機(jī)器學(xué)習(xí)相結(jié)合;如果你有讀博客的習(xí)慣,你會(huì)發(fā)現(xiàn) Facebook的移動(dòng)端技術(shù)專欄近年來(lái)幾乎篇篇都要談到借鑒人工智能技術(shù)開(kāi)發(fā)的新功能。比如《The engineering behind social recommendations》,F(xiàn)acebook紐約的團(tuán)隊(duì)為了在移動(dòng)端更好的面向用戶推薦餐廳和旅游地點(diǎn),利用了大數(shù)據(jù)和人工智能將大量相關(guān)的信息抽取出來(lái),再針對(duì)用戶的狀態(tài)和地點(diǎn)進(jìn)行推薦。Google 更是把人工智能融入到了絕大多數(shù)的移動(dòng)應(yīng)用中,更在其Pixel系列手機(jī)的賣(mài)點(diǎn)上主打“人工智能牌”。如果移動(dòng)開(kāi)發(fā)者拒絕人工智能,我們可能再也無(wú)法開(kāi)發(fā)出讓用戶滿意的應(yīng)用。就像現(xiàn)在算法和計(jì)算機(jī)系統(tǒng)是程序員的基本功一樣,未來(lái)人工智能也會(huì)是程序員的必備基本技能之一。
人工智能將給 iOS 開(kāi)發(fā)帶來(lái)很多新的機(jī)會(huì)。人工智能界的泰斗,邁克爾喬丹教授說(shuō):
人工智能(Artificial Intelligence) =
智能放大(intelligence Augment)+
智能基建(intelligent Infrastructure)+
自動(dòng)算法(Automatic Algorithm)
作為移動(dòng)端開(kāi)發(fā)者我深以為然,下面是我個(gè)人對(duì)這句話的理解:
智能放大:即我們?nèi)祟愔腔鄣耐卣埂1热?Google 搜索拓展了我們獲取知識(shí)的渠道;大數(shù)據(jù)可以幫助科爾改進(jìn)金州勇士隊(duì)的訓(xùn)練方案和優(yōu)化戰(zhàn)術(shù)選擇。
智能基建:即物聯(lián)網(wǎng)。Amazon 的智能家居和 Amazon Go 無(wú)人超市,Uber 的無(wú)人汽車,IBM 的智慧城市,它們都會(huì)根據(jù)每個(gè)用戶的需求進(jìn)行個(gè)性化操作。
自動(dòng)算法:即各種各樣的人工智能工具。深度學(xué)習(xí)、增強(qiáng)學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)的改進(jìn),以及 TensorFlow, Caffe, MXNet 等框架的推出和應(yīng)用都屬于這個(gè)范疇。
無(wú)論是哪一個(gè)方面,移動(dòng)開(kāi)發(fā)都可以大有作為——“智能放大”的App可以直接用來(lái)滿足用戶需求;“智能基建”一定需要開(kāi)發(fā)者在終端完成對(duì)用戶的相應(yīng)連接;自動(dòng)算法的運(yùn)用會(huì)則讓App更加強(qiáng)大。

最后,作為移動(dòng)開(kāi)發(fā)者該如何學(xué)習(xí)人工智能?蘋(píng)果的朋友不妨去關(guān)注下Core ML/Create ML等官方推出的工具;安卓的朋友不妨去研究下谷歌出品的ML Kit。另外,Google推出的TensorFlow,F(xiàn)acebook主導(dǎo)的Caffe,以及Amazon力捧的MXNet,都可以訓(xùn)練出很棒的模型供iOS和Android開(kāi)發(fā)使用。有條件的朋友也可以去研究下TensorFlow Lite——這是谷歌開(kāi)發(fā)的,針對(duì)移動(dòng)和物聯(lián)網(wǎng)的深度學(xué)習(xí)框架。我個(gè)人的經(jīng)驗(yàn)是,研究人工智能框架,不推薦看中文書(shū),直接去看英文文檔效果更好。因?yàn)檫@些框架變化很快,書(shū)中內(nèi)容淘汰得很快,而且有些理論知識(shí)還是看一手的資料更好。
結(jié)語(yǔ)
現(xiàn)在也有很多人不看好人工智能,認(rèn)為炒作太熱,只是概念,泡沫太多,難以落地變現(xiàn)。作為移動(dòng)開(kāi)發(fā)者,從技術(shù)角度看,現(xiàn)在的人工智能技術(shù)已經(jīng)足以大幅推動(dòng)我們App的進(jìn)步和拓展。與其作壁上觀,不如進(jìn)來(lái)親身實(shí)踐,希望這篇文章能給開(kāi)發(fā)或者關(guān)注App的你帶來(lái)一些啟發(fā)。
參考文獻(xiàn)
- 智能時(shí)代:https://book.douban.com/subject/26838557
- 寫(xiě)給大家看的機(jī)器學(xué)習(xí)書(shū):https://zhuanlan.zhihu.com/machine-learning-book
- 人工智能的現(xiàn)狀和未來(lái):https://www.ljsw.io/dedao/2017-08-30/0K.html
- 移動(dòng)應(yīng)用AI化成新戰(zhàn)場(chǎng)?詳解蘋(píng)果最新Core ML模型構(gòu)建基于機(jī)器學(xué)習(xí)的智能應(yīng)用:https://juejin.im/post/593932c1fe88c2006af90775
- Bringing Machine Learning to your iOS Apps: https://academy.realm.io/posts/altconf-2017-meghan-kane-bringing-machine-learning-to-your-ios-apps
- Everything a Swift Dev Needs to Know About Machine Learning: https://academy.realm.io/posts/swift-developer-on-machine-learning-try-swift-2017-gallagher
