摘要:在此期間,移動端開發工程師可謂是風生水起,幾乎人們日常生活中接觸互聯網的途徑,都是通過一個叫的東西,基于這兩大系統平臺。而上面說的這些事情,都是當今移動端開發者的機會。
“古典程序員”集體恐慌
隨著2007年第一臺iPhone問世,隨后Android的猛烈跟進,蘋果和谷歌推動了長達10年的移動互聯網浪潮。在此期間,移動端開發工程師可謂是風生水起,幾乎人們日常生活中接觸互聯網90%的途徑,都是通過一個叫App的東西,基于iOS/Android這兩大系統平臺。
然而好日子似乎也快到頭了,隨著行業巨頭的逐步壟斷,小App生存空間日漸萎縮,App排名靠前的幾乎都是幾家巨頭的產品,市場上對移動端開發人員的需求也在下降。同時由于近些年學校里面學生也學,外面培訓機構也教,開發人員的供給還在上升,大家似乎感受到了一絲絲涼意。
近兩年,人工智能的浪潮洶涌而來,“古典”程序員們更是集體陷入了恐慌,不會點深度學習,是不是過兩年就找不到工作了。
今天的AI就像十年前的Android/iOS一樣,一夜之間需求暴漲,人才短缺。市面上的培訓課程層出不窮,各種《21天學會深度學習》,《手把手教你神經網絡》之類的課程,動輒幾千,多者上萬,跟當年的Android/iOS真的很像。
人工智能可沒換一種編程語言那么簡單當然了,作為一個“科班出身”的AI從業人員,我想說還是有點不一樣的。Android/iOS更多的是語言上的不同,或者界面交互方式的創新,本質上的思想和邏輯跟之前的VC/塞班也都一樣。
而狹義的人工智能應用,在思考問題的方式上是完全不同的,大家考慮的更多的是模型、數據,跟數據結構課里面學的排序/查找也不是一個概念。各種數學概念搞得人暈頭轉向,可以說,對于普通程序員來說,AI的學習曲線是非常陡峭的。
以Facial Landmark Detection(人臉特征點定位)為例,輸入很多標注了特征點的人臉圖片,經過一個應用程序很久的運算,保存一個模型文件。然后用另一個應用程序,輸入一張人臉圖片,就能把特征點給自動標注出來,這個過程無論從數學的角度還是從編程的角度來看,都極其復雜,以后的文章里我會試圖解釋。模型只是很小一部分
大多數人工智能的教程里面,主要講的內容我都可以歸納為模型和算法,你經常看到的各種術語,比如決策樹、支持向量機、邏輯回歸、神經網絡,到后來的CNN,RNN,LSTM,GAN等,都是模型。在學術圈模型和算法基本上就是全部,這也是對于普通程序員來說,最難以理解的部分,就像前面提到的Facial Landmark Detection的例子。
對于工業界來說模型和算法只是一部分,甚至可能是一小部分。
大家的模型可能差不多在深度學習流行之前,學術界解決問題很多都是靠特征設計,這里面會有很多的技巧(trick),很多時候一篇論文的效果好不好,主要不是取決于那幾個數學公式,而是代碼里面的trick。所以那個時候除非是SVM這種通用的算法框架,很少有人公布自己的代碼。
而深度學習流行之后,似乎大家不那么吝惜自己的代碼了,很多人都選擇了開源。帶來的結果是,每年一批論文和對應的代碼發布之后,任何一個人下載一套代碼,就能達到State-of-Art。這對研究人員來說是非常殘酷的,可能你辛辛苦苦研究一年剛剛超過去年的水平,人家一公布,你又落后所有人了。
而世界上真正有能力設計網絡的人并不多,而且訓練網絡的代價非常的大,大部分AI工作者的主要工作還是在公認的比較好的基礎上,進行小修小補,甚至都不做修改,只是優化優化數據。這就導致了,大部分人的模型都差不多,你折騰半天,可能沒比別人強多少。當然我這里不包括那些頂尖的選手,頂尖的AI人才,也不是我們普通程序員的目標,看看他們的簡歷你就知道我為什么這么說了,而且這樣的人一個公司也不需要幾個,太貴。。。
開源的那套東西沒法直接用既然開源的東西那么多,為什么AI應用仍然有很高的門檻呢。因為開源的東西通常是沒法直接用的,原因總結有兩個:
多數開源代碼是無法直接在移動端運行的,Tensorflow Lite是一個強大的存在,一定要緊密關注。
移動端的運算能力較弱,而且不同硬件和平臺有很多適配問題,這對于一個應用是否能夠大規模應用是決定性的。
先推理(Inference)再學習(Training) 什么是Training和Inference幾乎所有機器學習的任務都可以抽象成一件事情,設計一個方程y=f(x),通過Training得到函數f的所有參數。然后再輸入一個新的x,得到輸出y,這個叫Inference。
我試圖用一種最粗糙的方法解釋一下這兩個過程。你可能暫時不用理解Training
先說Inference,比如我有函數Y=f(X)=aX*X+bX+c。假設a=b=c=1,如果現在有一個輸入x=1,那么輸出y=3,這就是一次Inference。
再說Training,如果我知道輸入x=1的時候,y=10,那說明a=b=c=1肯定是錯的,利用優化算法,改變a,b,c的值,使得輸出y更接近1一些。那么現在有很多的x和對應的y,要找到一組a,b,c,使得總體的錯誤最小,這就是Training。
好消息是,真正的人工智能應用中,你只需要使用Inference,也就是f(x)是已知的,是由其他大牛在計算能力很強的一臺機器或者一個集群上,訓練了幾個小時甚至幾天得到的。應用在運行的時候,要做的只是把輸入送到方程里,得到輸出。
掌握了Inference,Training也不會很難還是負責任的補充一下,這里講的是突圍,強調效率,先推理再學習不是說學習不重要,Training仍然是人工智能的核心。前面的例子也大體描述了Training的過程,其實Training就是根據Inference結果的錯誤,不斷優化參數,然后再Inference,反復迭代的過程。所以掌握好了Inference,也是為掌握Training打基礎。
客戶端的機會就在于Inference的優化和部署 現在主流的Training和Inference主要都在服務端Training不用說,需要大量的計算資源和存儲,而且通常離線完成,現在基本上都是在服務端上完成。
主流的Inference,比如大家常用到的商品識別(淘寶客戶端的拍立淘)、語音識別(天貓精靈)等,核心的運算也都在服務端,因為算法模型巨大,客戶端內存可能都放不下,速度也達不到。
近年邊緣計算這個詞開始興起,而近幾天Google發布的Edge TPU把這件事情推到了極致。所謂邊緣,就是在云的邊緣,或者外面。要解決的問題有以下兩點:
云端計算資源貴
網絡傳輸實時性和穩定性問題
大家考慮的解決問題的方法主要是:
把一些對計算要求不是特別高的運算放到邊緣設備上
對算法本身進行優化和簡化
提升邊緣設備的運算能力
這里的邊緣設備是一個抽象的概念,包含但不限于:
手機
帶有處理芯片的攝像頭
架設在本地的小型服務器
從計算資源成本來說,手機最極致,你自己花錢買的,不管算什么都不會耗費服務器的資源,架設在本地的攝像頭或者服務器通常也是客戶一次性花費,不會帶來后續的負擔。
從網絡角度來說,實時性取決于算法本身運行的速度,如果太慢,可能還不如上傳,但穩定性一定更優。
從業態來說,新零售興起的今天,像盒馬鮮生這樣的領軍隊伍,也是邊緣計算的先行者。
“抖音”——“部署”和“優化”極致典范抖音大家都知道,他的美顏/長腿/手勢識別等技術大大提升了生產力,為社會低成本地創造了無數的大長腿大眼網紅。
從AI工作者的角度來看,抖音是把端上人工智能應用的部署和優化發揮到了極致。還以Facial Landmark Detection為例,抖音的美顏能夠做那么好,人臉特征點的定位功不可沒。目前主流的算法基本都是基于CNN的,運算量極大,而且各種磨皮/瘦臉的圖像處理,也非常復雜。這里商湯科技可能結合了多種優化技術,才能達到如此快的效果。CPU的Neon優化和GPU優化應該都有應用。
此外,抖音這種億級用戶的產品,一定會覆蓋非常多的手機機型,如此復雜的算法,能夠在這么多不同的手機上運行,這也是一件很不容易的事情。
我再不懷好意地猜測一下,抖音上的人臉,除了用來定位,有可能還會被用來做人臉識別/聚類的訓練數據,這里就涉及到了邊緣和云之間的協同工作。
而上面說的這些事情,都是當今移動端開發者的機會。
突圍之路 基本功如果是視覺方面,就是圖像處理,語音方面就是音頻處理。以視覺為例,現在深度學習基本輸入都是原始像素,也不用做復雜的特征提取,所以這一塊要求不是太高。當然隨著應用的深入,很多東西還是慢慢要學。
動手把流行的算法移植到手機上這件事情可能是最重要的,就是動手,動手,動手。很多人學習深度學習,就是先把Tensorflow在自己的機器上安裝一遍,然后把Tutorial里面的幾個例子跑一跑,就完事了。加起來也沒幾行python代碼,其實你什么也沒學會,就是照書敲代碼。
我說的動手,還是針對Inference,建議先從Tensorflow Lite開始,一步步把訓練好的模型通過量化處理變成簡化的模型,然后在Android或者iOS上調用API,做一個App。
Tensorflow官方有開源的sample,是1000類的圖像分類,可以在這個基礎上改模型,改代碼,逐步嘗試。比如把1000類變成狗的品種識別,或者實現一個手寫數字識別,再復雜一點,做一個人臉檢測。后面會專門寫一些教程,把不同算法移植到手機上。
緊密關注Tensorflow Lite的發展Google發布Tensorflow之后,生態日漸完善,開發社區非常活躍,遠遠把Caffe甩在了身后。隨后發布的TPU,專門針對Tensorflow優化的AI芯片,提供了Cloud服務,Tensorflow Lite也是對移動平臺支持最好的Inference框架,近日推出的Edge TPU,同樣完美支持Tensorflow Lite,大有一統江湖之勢。所以一定要關注Tensorflow的發展。
作為移動端開發人員,Tensorflow Lite是重中之重。目前來看,Tensorflow Lite的優化還主要限于CPU,之后還會有什么發展也是關注重點。Tensorflow Lite的代碼量也不是太大,有時間閱讀源代碼,甚至進行一些優化,都是非常有價值的事情。
學習性能優化的方法前面提到了,性能優化是客戶端智能的重中之重,可以著重學習一下技術:
C++性能優化
Neon/SSE指令集優化
GPU優化
這些技術難度都不低,而且通常跟應用場景本身相關,不容易有通用解決方案,在實際應用中可能會成為核心突破點。
除了手機,玩玩別的設備邊緣計算不只包含手機,手機重界面和交互,有很多AI應用其實是不強調界面和交互的,比如安防領域,試試更多的設備,會拓展更多的可能性。比如Nvidia的TX2,Raspberry PI,以及即將上市的Edge TPU。
有時間多看看書前面幾乎沒有提到看書,不是看書不重要,而是只看書不動手是沒有效果的。在實踐中,不明白的地方一定需要網上查或者翻看資料。在這個基礎上,系統的學習理論知識,也是很有必要的。理想情況下,我認為可以重點關注一下幾點:
主流深度神經網絡的架構,設計的思想,理解不同層到底在干什么,對應的代碼在哪
人工智能發展的歷程,怎么一步步發展到深度學習的
曾經流行的一些經典算法,很多思想其實在深度學習中都有應用
多一種思路,更廣闊的天地最后,我想說很多人的焦慮其實大可不必,人工智能一定是未來,但人工智能不可能是全部,術業有專攻,你在自己的領域如果足夠強,是很難被取代的。
但是人工智能提供了一種新的思路,就是通過數據和模型,能夠把一些以前需要人來判斷的事情變成自動的。最重要的就是,以前需要你定義好的if else規則,現在是一個動態可學習的東西,這本身不就是一件很妙的事情嗎?
多一門知識,多一種思路,我相信會給每個人帶來更廣闊的天地,加油!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/19779.html
摘要:乘著云計算強勁發展的東風,百度云繼續加固生態化護城河。百度云編織的生態巨網事實上,百度云在生態和落地方面的加速度很明顯。從年開放運營至今,百度云儼然已經編織了一張巨大的生態之網,具體可以從三個方面來細看。乘著云計算、AI強勁發展的東風,百度云繼續加固生態化護城河。12月6日,在2018百度ABC Inspire企業智能大會上,百度副總裁、百度云總經理尹世明宣布ABC企業智能合作伙伴聯盟正式成...
摘要:北京時間月日月日,由和中國國際人才交流基金會聯合主辦的第七屆全球軟件案例研究峰會簡稱在北京國家會議中心圓滿落幕。本屆峰會,來自阿里美團百度平安銀行等企業的講師分別從企業轉型及研發效能方面分享敏捷和的實踐細節和操作經驗。 北京時間11月30日-12月3日,由msup和中國國際人才交流基金會聯合主辦的第七屆全球軟件案例研究峰會(簡稱:TOP100summit)在北京國家會議中心圓滿落幕。T...
閱讀 2411·2021-11-25 09:43
閱讀 1246·2021-11-24 09:39
閱讀 742·2021-11-23 09:51
閱讀 2382·2021-09-07 10:18
閱讀 1841·2021-09-01 11:39
閱讀 2776·2019-08-30 15:52
閱讀 2589·2019-08-30 14:21
閱讀 2850·2019-08-29 16:57