前言
近幾年來人工智能的話題那是炙手可熱。在國內(nèi)很多大佬言必談機(jī)器學(xué)習(xí)和大數(shù)據(jù);在美國剛畢業(yè)的人工智能 PHD 也是眾人追捧,工資直逼 NFL 四分衛(wèi)。人工智能甚至成為了互聯(lián)網(wǎng)領(lǐng)域茶余飯后的話題 —— 仿佛不懂人工智能就是落伍了。
筆者作為一名 iOS 開發(fā)者,對于如火如荼的人工智能和機(jī)器學(xué)習(xí),也保持了密切的追蹤和了解。這篇文章就是總結(jié)我在美國工作的所見所聞,拋磚引玉的與大家分享一下我對于人工智能的思考。
人工智能是什么?
關(guān)于人工智能(AI),我們經(jīng)常聽到這樣一些相關(guān)詞:大數(shù)據(jù)(Big Data),機(jī)器學(xué)習(xí)(Machine Learning),神經(jīng)網(wǎng)絡(luò)(Neural Network)。那么這些詞到底有什么區(qū)別?我們來看下面一則小故事。
從前有個(gè)程序員叫牛頓。他定義了一個(gè)方法來計(jì)算自由落體的速度:
func getVelocity(time t: second) -> Float {
return 9.8 * t
}
他是怎么得到這個(gè)方法的呢?牛頓自己被一個(gè)蘋果砸中之后,做了大量的邏輯推導(dǎo)和實(shí)驗(yàn)論證之后,得到了這個(gè)公式。這是目前傳統(tǒng)意義上的寫程序方法 -- 理解清楚了事物的內(nèi)在邏輯和真相后,由人來定義方法。直到今天,絕大多數(shù)程序都是這么寫出來的。
而所謂的人工智能,就是機(jī)器自己定義方法。人工智能的實(shí)現(xiàn)方法有很多,比如可以讓機(jī)器來模擬大腦,然后像人一樣思考,從而定義方法。機(jī)器學(xué)習(xí)只是另一種實(shí)現(xiàn)人工智能的方法,就是由大數(shù)據(jù)定義方法。假如牛頓時(shí)期就有機(jī)器學(xué)習(xí),它得出自由落體速度的過程是這樣的:
- 收集盡可能多的自由落體實(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 |
分析數(shù)據(jù)。機(jī)器學(xué)習(xí)會分析出,亞里士多德的數(shù)據(jù)有誤不予采納。其他三人的數(shù)據(jù)滿足同一規(guī)律。
定義方法。根據(jù)上面數(shù)據(jù),機(jī)器學(xué)習(xí)得出結(jié)論,速度 = 時(shí)間 * 9.8。
隨著數(shù)據(jù)收集得越多,機(jī)器學(xué)習(xí)得到的結(jié)論就越準(zhǔn)確。其實(shí)人類學(xué)習(xí)的過程也十分類似:書上有大量的知識(加工的數(shù)據(jù)),我們看了之后進(jìn)行理解思考,然后得出自己的結(jié)論。
開普勒就是個(gè)著名的人肉的機(jī)器學(xué)習(xí)實(shí)踐者:他前半輩子看星星,把觀測到的數(shù)據(jù)記錄下來;后半輩子用自己的邏輯和理解分析這些數(shù)據(jù);最后得出行星運(yùn)動的開普勒-牛頓模型。然后用這個(gè)模型去預(yù)測其他行星運(yùn)轉(zhuǎn),同時(shí)新的數(shù)據(jù)用來修正模型的參數(shù),使之逼近完美。
那么數(shù)據(jù)和人相比有什么優(yōu)勢呢?我認(rèn)為是更快更準(zhǔn)確。人在定義方法時(shí),總是需要對該方法的前后因果、邏輯關(guān)系、各種情況都要求考慮周全,這有時(shí)需要花費(fèi)很多時(shí)間去研究論證,而且忽略某些極端情況也時(shí)有發(fā)生,導(dǎo)致定義漏洞百出。而數(shù)據(jù)在互聯(lián)網(wǎng)時(shí)代,獲取的成本是很低的。在這樣情況下,大量數(shù)據(jù)的輕易獲得會使得方法定義越來越快;同時(shí)現(xiàn)實(shí)中數(shù)據(jù)涵蓋的情況之廣,也使得依次定義的方法更加準(zhǔn)確。
吳軍博士在《智能時(shí)代》一書中對大數(shù)據(jù)的優(yōu)勢進(jìn)行了以下總結(jié):“在無法確定因果關(guān)系時(shí),數(shù)據(jù)為我們提供了解決問題的新方法,數(shù)據(jù)中所包含的信息可以幫助我們消除不確定性,而數(shù)據(jù)之間的相關(guān)性在某種程度上可以取代原來的因果關(guān)系,幫助我們得到想要的答案,這便是大數(shù)據(jù)的核心。”
我們回到上文牛頓自由落體速度的實(shí)驗(yàn)中去。實(shí)際上,機(jī)器學(xué)習(xí)拿到的實(shí)驗(yàn)數(shù)據(jù),可能是以下的記載:
9月15日的夜晚,小雨微風(fēng)。伽利略在比薩斜塔上扔下了1顆鉛球,質(zhì)量為4kg,初始速度為0,到達(dá)地面時(shí)間為6s多。
這個(gè)數(shù)據(jù)樣本中有很多特征,時(shí)間、空氣濕潤度、風(fēng)力、比薩斜塔的高度、鉛球質(zhì)量、初始速度、到達(dá)地面時(shí)間等等。那么自由落體速度到底跟哪些特征相關(guān)?如果讓機(jī)器自己去分析,這就叫做無監(jiān)督學(xué)習(xí)。如果我們告訴機(jī)器,不要 care 質(zhì)量和時(shí)間,重點(diǎn)分析鉛球到達(dá)地面的時(shí)間和比薩斜塔的高度,這就叫做監(jiān)督學(xué)習(xí)。后者在于借鑒了人類的智慧,這樣機(jī)器學(xué)習(xí)就有了大致的方向。
至此,機(jī)器學(xué)習(xí)依然難以稱得上“智能” -- 它無非是更快更準(zhǔn)確的得出答案而已。如果僅僅如此,AlphaGo 就算將所有九段棋手的對弈研究透徹(這些對弈的輸贏已定,相當(dāng)于人為標(biāo)注走法好壞,故為監(jiān)督學(xué)習(xí)),水平也就十段而已,于九段相比,也就是略勝一籌,發(fā)揮更穩(wěn)定一點(diǎn)。然而事實(shí)是,AlphaGo 的棋力要遠(yuǎn)勝人類最高水平。
其實(shí) AlphaGo 在下棋時(shí),每下幾步,系統(tǒng)都會告訴它勝率是否提升。這種不斷反饋的機(jī)制可以讓 AlphaGo 實(shí)時(shí)強(qiáng)化棋力,并鼓勵(lì)其嘗試人類從沒有下過的路數(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)元都有對應(yīng)的功能。比如,人工智能要識別一堆動物照片中的母狗,第一個(gè)神經(jīng)元做的是判斷哪些動物是狗,第二個(gè)神經(jīng)元做的就是區(qū)分狗的公母。
上面這個(gè)例子中,我們是先讓第一個(gè)神經(jīng)元進(jìn)行判斷,再將結(jié)果傳遞給第二個(gè)神經(jīng)元。也就是說,后者的輸入是前者的輸出,這就是神經(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í)。
人工智能在 iOS 開發(fā)上有哪些應(yīng)用?
前面說了這么多,肯定很多人要問:這些都很高大上,可惜我是 iOS 工程師,人工智能到底關(guān)我何事?其實(shí)人工智能在 iOS 上由來已久,且可能會深入我們的日常開發(fā)中,所以我們有必要對此高度敏感。這里筆者來分享一下人工智能在 iOS 上的應(yīng)用。
首先,喬布斯老爺子早在若干年前就在 iPhone 上布局了智能語音助手 Siri。Siri 可謂是人工智能和機(jī)器學(xué)習(xí)在移動端上第一次成功的應(yīng)用:它結(jié)合了語音識別(Speech Recognition)和自然語言處理(Natural Language Processing)兩大人工智能操作(當(dāng)然前者是后者的一部分)。后來因?yàn)樘O果封閉的基因,Siri 的數(shù)據(jù)量一直沒有上去,而我們都知道數(shù)據(jù)量是提高人工智能水平的關(guān)鍵,所以現(xiàn)在 Siri 現(xiàn)在一直很雞肋。
同 Siri 類似,F(xiàn)acebook 在他們的 Messenger App 中集成了聊天機(jī)器人(Chatbot)。在去年的 F8 現(xiàn)場,我還清楚地記得他們號稱這是 App 開發(fā)的新紀(jì)元 - 由聊天機(jī)器人和人工智能主導(dǎo)的 App 將取代傳統(tǒng)手機(jī)應(yīng)用,而 Messenger 將從一款聊天應(yīng)用變成一個(gè)平臺甚至是一個(gè)操作系統(tǒng)。這個(gè)跟微信的小程序戰(zhàn)略類似,只不過多了人工智能的噱頭。可惜的是,很多人工智能領(lǐng)域的大佬告訴我,聊天機(jī)器人離成熟還有很大距離。
到這里,人工智能在 iOS 端都沒有比較成功的案例。直到這一款 App 的誕生:Prisma。老毛子 Alexey 在讀了兩篇論文 --《藝術(shù)風(fēng)格的神經(jīng)算法》和《利用神經(jīng)卷積網(wǎng)絡(luò)進(jìn)行文理合成》之后,開發(fā)出了 Prisma 這款風(fēng)格轉(zhuǎn)換的 App。它的基本流程是這樣:
- 用戶上傳照片
- 將照片傳至云端,云端的神經(jīng)網(wǎng)絡(luò)分析識別照片
- 輸出一副重新繪制的作品
- 將重繪的作品下載到手機(jī)端
這款 App 最難的地方在于第二步的耗時(shí),即模型分析研究照片的風(fēng)格。Alexey 優(yōu)化了神經(jīng)網(wǎng)絡(luò)的細(xì)節(jié),使得 Prisma 在重繪一張照片的耗時(shí)僅需幾秒。之后的App 迭代,為了讓速度更快,也為了解決海外用戶連接云端的演示問題,神經(jīng)網(wǎng)絡(luò)的模型被直接部署在了移動端。利用 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ù)億用戶。
最后再介紹一款 App:Topology Eyewear。這是一款訂制眼鏡的電子商務(wù)應(yīng)用。其特點(diǎn)是對用戶進(jìn)行人臉識別,然后在手機(jī)端渲染出客戶戴上不同眼鏡的效果。
第三方 App 的成功,刺激了大廠在相關(guān)領(lǐng)域的重視。Snapchat,Instagram,WhatsApp 紛紛將人工智能技術(shù)引入了其濾鏡效果。同時(shí) Facebook 和 Google 也開始將 AI 框架情輕便化以方便部署在移動端。2017年剛過去的 WWDC,機(jī)器學(xué)習(xí)成為了整個(gè)大會最熱門的詞匯,同時(shí)蘋果正式推出了 Core ML 框架。它涵蓋視覺識別和自然語義處理兩大內(nèi)容,在提供很多訓(xùn)練好的模型基礎(chǔ)上還有十分定制化的模型生成工具。操作的易用性讓 Core ML 剛面世就受到廣大開發(fā)者的追捧。
總體來說,移動應(yīng)用 AI 化已經(jīng)是一個(gè)基本趨勢,正如李開復(fù)在哥倫比亞大學(xué)的畢業(yè)演講中說:在未來,伴隨著硬件、軟件和網(wǎng)絡(luò)帶寬成本的下降,人工智能的成本幾乎就是電費(fèi)了。
iOS 開發(fā)者該何去何從?
首先我認(rèn)為,iOS 和人工智能并不是對立關(guān)系,而是互補(bǔ)的關(guān)系。iOS 應(yīng)用需要人工智能來提高自身的效率和拓展功能,人工智能技術(shù)需要在 iOS 平臺上落實(shí)為產(chǎn)品。智能時(shí)代更多是移動時(shí)代的升級和補(bǔ)充,而不是取代。所以 iOS 開發(fā)仍有市場,我們無需擔(dān)心人工智能會讓我們失業(yè)。
但是,iOS 開發(fā)者需要擁抱人工智能。這屆的 try! Swift 大會,有兩個(gè)演講專門提到了機(jī)器學(xué)習(xí);如果你有讀博客的習(xí)慣,你會發(fā)現(xiàn) Facebook 的 iOS 技術(shù)專欄近年來幾乎篇篇都要談到借鑒人工智能技術(shù)開發(fā)的新功能。比如《The engineering behind social recommendations》,F(xiàn)acebook紐約的團(tuán)隊(duì)為了在移動端更好得面向用戶推薦餐廳和旅游地點(diǎn),利用了大數(shù)據(jù)和人工智能將大量相關(guān)的信息抽取出來,再針對用戶的狀態(tài)和地點(diǎn)進(jìn)行推薦。Google 更是把人工智能融入到了絕大多數(shù)的 iOS 的應(yīng)用中。如果 iOS 開發(fā)者拒絕人工智能,我們可能再也無法開發(fā)出讓用戶滿意的應(yīng)用。就像現(xiàn)在算法和計(jì)算機(jī)系統(tǒng)是程序員的基本功一樣,未來人工智能也會是程序員的必備基本技能之一。
人工智能將給 iOS 開發(fā)帶來很多新的機(jī)會。人工智能界的泰斗,邁克爾喬丹教授說 AI = IA + II + AA。作為 iOS 開發(fā)者我深以為然,下面是我對這句話的理解:
人工智能(Artificial Intelligence) = 智能放大(intelligence Augment)+ 智能基建(intelligent Infrastructure)+ 自動算法(Automatic Algorithm)。
- 智能放大:即我們?nèi)祟愔腔鄣耐卣埂1热?Google 搜索拓展了我們獲取知識的渠道;大數(shù)據(jù)可以幫助科爾改進(jìn)金州勇士隊(duì)的訓(xùn)練方案和優(yōu)化戰(zhàn)術(shù)選擇。
- 智能基建:即物聯(lián)網(wǎng)。Amazon 的智能家居和 Amazon Go 無人超市,Uber 的無人汽車,IBM 的智慧城市,它們都會根據(jù)每個(gè)用戶的需求進(jìn)行個(gè)性化操作。
- 自動算法:即各種各樣的人工智能工具。深度學(xué)習(xí)、增強(qiáng)學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)的改進(jìn),以及 TensorFlow, Caffe, MXNet 等框架的推出和應(yīng)用都屬于這個(gè)范疇。
無論是哪一個(gè)方面,iOS 開發(fā)都可以大有作為。智能放大方面的 App 可以直接面向用戶;智能機(jī)建一定需要 iOS 開發(fā)者在終端完成對用戶的相應(yīng)連接;自動算法的運(yùn)用會讓 iOS 應(yīng)用更加強(qiáng)大。
最后,作為 iOS 開發(fā)者該如何學(xué)習(xí)人工智能?Core ML 是官方推出的工具,大家不妨從這里著手。WWDC 展示的 Core ML 開發(fā)步驟分為以下3步:
- 通過其他平臺或框架得到機(jī)器學(xué)習(xí)模型
- 將模型導(dǎo)入 Xcode 中,Xcode 自動生成對應(yīng)的 Swift 接口
- 使用 Swift 接口進(jìn)行編程
使用場景為:
- 情感分析
- 物體識別
- 個(gè)性化定制
- 類型轉(zhuǎn)換
- 音樂標(biāo)簽
- 手勢識別
- 自然語義識別
還有Google推出的TensorFlow,F(xiàn)acebook主導(dǎo)的Caffe,以及Amazon力捧的MXNet,都可以訓(xùn)練出很棒的 Core ML 模型供 iOS 開發(fā)使用。這幾個(gè)框架大家也可以了解一下,這里吐血建議,研究人工智能框架,不推薦看中文書,直接去看英文文檔效果更好。因?yàn)檫@些框架變化很快,書中內(nèi)容淘汰得很快,而且有些理論知識還是看一手的資料更好。
結(jié)語
也有很多人不看好人工智能,認(rèn)為現(xiàn)在炒作太熱,只是概念,泡沫太多,難以落地變現(xiàn)。作為 iOS 開發(fā)者,從技術(shù)角度看,現(xiàn)在的人工智能技術(shù)已經(jīng)足以大幅推動我們 App 的進(jìn)步和拓展。與其作壁上觀,不如進(jìn)來親身實(shí)踐,希望這篇文章能給開發(fā)或者關(guān)注 iOS 的你帶來一些啟發(fā)。