摘要:?作為一名軟件工程師失尖,我們應該活到老學到老啊奄,時刻與不斷發(fā)展的框架、標準和范式保持同步掀潮。同時菇夸,還要能活學活用,在工作中使用最合適的工具仪吧,以提高工作效率庄新。隨著機器學習在越來越多的應用程序中尋得了一席之地,越來越多的程序員加入AI領域薯鼠,那么择诈,入行AI領域需要哪些技能呢?
人工智能到底有多火
我相信大家之所以能來看這篇文章出皇,也間接說明了人工智能這幾年的火爆羞芍。自從基于深度學習技術的算法2012年在ImageNet比賽中獲得冠軍以來,深度學習先是席卷了整個學術界郊艘,后又在工業(yè)界傳播開來荷科,一瞬間各大企業(yè)如果沒有AI部門都不好意思對外宣傳了。BAT中纱注,百度宣布“All In AI”,阿里建立了達摩院及AI實驗室畏浆,騰訊也在前不久會議上宣布“Ai In All”,并具有騰訊優(yōu)圖、AI Lab和微信AI實驗室狞贱。2017年7月20日刻获,國務院發(fā)布《新一代人工智能發(fā)展規(guī)劃》,將人工智能上升為國家戰(zhàn)略瞎嬉,為中國人工智能產(chǎn)業(yè)做出戰(zhàn)略部署将鸵,對重點任務做出明確解析,搶抓重大機遇佑颇,構筑我國人工智能發(fā)展的先發(fā)優(yōu)勢。
技術的發(fā)展往往遵循一個可預期的模式草娜,即先是萌芽挑胸,然后炒作,而后幻滅宰闰,接著才是技術成熟后的穩(wěn)步爬升茬贵,最后到達應用高峰。研究分析機構Gartner每年都會推出這樣一個分析新興技術發(fā)展趨勢的技術炒作周期報告移袍。前段時間解藻,Gartner發(fā)布了2017年的新興技術炒作周期報告,報告聚焦了前端葡盗、后端與平臺發(fā)展的三大趨勢螟左,提出了AI將無所不在(人工智能),體驗將透明化和沉浸式(AR、VR)胶背,以及平臺全面數(shù)字化(區(qū)塊鏈)的觀點巷嚣,建議企業(yè)架構師和對技術創(chuàng)新有追求的人員應該積極探索和關注這三大趨勢,從而了解掌握這三大趨勢對自己公司和自己職業(yè)發(fā)展的未來影響钳吟。簡單來說這三大趨勢分別對應于括號中我備注的大家平時耳熟能詳?shù)脑~語廷粒。從曲線圖可以看出,物聯(lián)網(wǎng)红且、虛擬助手坝茎、深度學習、機器學習暇番、無人車嗤放、納米電子、認知計算以及區(qū)塊鏈正處在炒作的高峰奔誓。實際上AR斤吐、VR屬于計算機視覺,也可以歸于人工智能范疇厨喂,因此總體上來說和措,未來人工智能將無處不在荚守。
Gartner把深度學習艾栋、強化學習、常規(guī)人工智能揩环、無人車斜纪、認知計算贫母、無人機、會話式用戶接口盒刚、機器學習腺劣、智能微塵、智能機器人因块、智能工作環(huán)境等均列為AI技術范疇橘原。在人機大戰(zhàn)等吸引眼球的活動助推下,很多AI技術目前正處在炒作的高峰期涡上。比如深度學習趾断、機器學習、認知計算以及無人車等吩愧。對比2016年的炒作周期曲線可以發(fā)現(xiàn)芋酌,有些太過超前的概念仍然不慍不火,比如智能微塵雁佳。有些概念因為炒作過高已經(jīng)迅速進入到了幻滅期脐帝,比如商用無人機去年還處在觸發(fā)期同云,今年就已經(jīng)接近幻滅期邊緣了。相對而言腮恩,正處在炒作高峰的深度學習和機器學習技術有望在2到5年內達到技術成熟和模式成熟梢杭。
除了人工智能這么火之外,對于軟件工程師秸滴,尤其是移動端開發(fā)工程師武契,有一點我們更要關注,那就是移動端深度學習逐漸成為新的深度學習研究趨勢荡含。未來會有越來越多的基于深度學習的移動端應用出現(xiàn)咒唆,作為開發(fā)者的我們了解深度學習更有助于我們開發(fā)出優(yōu)秀的應用,同時提升自身能力释液,積極抓住機會全释,應對未來各種變化。
什么是機器學習(Machine Learning误债,ML)浸船?
深度學習的基礎是機器學習,事實上深度學習只是機器學習的一個分支寝蹈。因此我們要入門深度學習就要先了解一些機器學習的基礎知識李命。機器學習最基本的做法,是使用算法來解析數(shù)據(jù)箫老、從中學習封字,然后對真實世界中的事件做出決策和預測。與傳統(tǒng)的為解決特定任務耍鬓、硬編碼的軟件程序不同阔籽,機器學習是用大量的數(shù)據(jù)來“訓練”,通過各種算法從數(shù)據(jù)中學習如何完成任務牲蜀。
有人曾舉過一個例子笆制,很形象生動,當你使用手機的語音識別進行喚醒時涣达,有沒有想過實現(xiàn)這一功能的全部內部流程呢在辆?我們日常交互的大部分計算機程序,都可以使用最基本的命令來實現(xiàn)峭判,但是基于機器學習的程序卻沒有那么簡單,想象下如何寫一個程序來回應喚醒詞棕叫,例如“Okay,Google”林螃,“Siri”,和“Alexa”俺泣。如果在一個只有你自己和代碼編輯器的房間里疗认,僅使用最基本的指令編寫這個程序完残,你該怎么做?不妨思考一下……這個問題非常困難横漏。你可能會想像下面的程序:
ifinput_command=='Okey,Google':
run_voice_assistant()
但實際上谨设,你能拿到的只有麥克風里采集到的原始語音信號,可能是每秒44,000個樣本點缎浇。怎樣才能識別出語音內容扎拣?或者簡單點,判斷這些信號中是否包含喚醒詞素跺。
如果你被這個問題難住了二蓝,不用擔心。這就是我們?yōu)槭裁葱枰獧C器學習指厌。
雖然我們不知道怎么告訴機器去把語音信號轉成對應的字符串刊愚,但我們自己可以。換句話說踩验,就算你不清楚怎么編寫程序鸥诽,好讓機器識別出喚醒詞“Alexa”,你自己完全能夠識別出“Alexa”這個詞箕憾。由此牡借,我們可以收集一個巨大的數(shù)據(jù)集(dataset),里面包含了大量語音信號厕九,以及每個語音型號是否對應我們需要的喚醒詞蓖捶。使用機器學習的解決方式,我們并非直接設計一個系統(tǒng)去準確地辨別喚醒詞扁远,而是寫一個靈活的程序俊鱼,并帶有大量的參數(shù)(parameters)。通過調整這些參數(shù)畅买,我們能夠改變程序的行為并闲。我們將這樣的程序稱為模型」刃撸總體上看帝火,我們的模型僅僅是一個機器,通過某種方式湃缎,將輸入轉換為輸出犀填。在上面的例子中,這個模型的輸入是一段語音信號嗓违,它的輸出則是一個回答{yes,?no}九巡,告訴我們這段語音信號是否包含了喚醒詞。
如果我們選擇了正確的模型蹂季,必然有一組參數(shù)設定冕广,每當它聽見“Alexa”時疏日,都能觸發(fā)yes的回答;也會有另一組參數(shù)撒汉,針對“Apricot”觸發(fā)yes沟优。我們希望這個模型既可以辨別“Alexa”,也可以辨別“Apricot”睬辐,因為它們是類似的任務挠阁。這時候你大概能猜到了,如果我們隨機地設定這些參數(shù)溉委,模型可能無法辨別“Alexa”鹃唯,“Apricot”,甚至任何英文單詞瓣喊。在而大多數(shù)的深度學習中坡慌,學習就是指在訓練過程中更新模型的行為(通過調整參數(shù))。
換言之藻三,我們需要用數(shù)據(jù)訓練機器學習模型洪橘,其過程通常如下:
1.初始化一個幾乎什么也不能做的模型;
2.抓一些有標注的數(shù)據(jù)集(例如音頻段落及其是否為喚醒詞的標注)棵帽;
3.修改模型使得它在抓取的數(shù)據(jù)集上能夠更準確執(zhí)行任務熄求;
4.重復以上步驟2和3,直到模型看起來不錯逗概。
什么是機器學習算法弟晚?從本質上講,機器學習采用了可以從數(shù)據(jù)中學習和預測數(shù)據(jù)的算法逾苫。這些算法通常來自于統(tǒng)計學卿城,從簡單的回歸算法到?jīng)Q策樹等等。
什么是機器學習模型铅搓?一般來說瑟押,它是指在訓練機器學習算法后創(chuàng)建的模型構件。一旦有了一個經(jīng)過訓練的機器學習模型星掰,你就可以用它來根據(jù)新的輸入進行預測多望。機器學習的目的是正確訓練機器學習算法來創(chuàng)建這樣的模型。
機器學習已廣泛應用于數(shù)據(jù)挖掘氢烘、計算機視覺怀偷、自然語言處理、生物特征識別播玖、搜索引擎椎工、醫(yī)學診斷、檢測信用卡欺詐、證券市場分析晋渺、DNA序列測序、語音和手寫識別脓斩、戰(zhàn)略游戲和機器人等領域木西。雖然深度學習技術的發(fā)展,也促進了語音和文本領域的發(fā)展随静,但變化最顯著的還是屬于計算機視覺領域八千。而且由于作者是做計算機視覺的,因此這里也沒法深入介紹語音和自然語言處理領域的過多細節(jié)燎猛,就簡要介紹下計算機視覺領域的技術發(fā)展和相關的應用恋捆,后續(xù)的實驗環(huán)節(jié),大部分也會是基于深度學習的圖像應用為主重绷。
機器學習四要素
針對識別喚醒語的任務沸停,我們將語音片段和標注(label)放在一起組成數(shù)據(jù)集。接著我們訓練一個機器學習模型昭卓,給定一段語音愤钾,預測它的標注。這種給定樣例預測標注的方式候醒,僅僅是機器學習的一種能颁,稱為監(jiān)督學習。深度學習包含很多不同的方法倒淫,我們會在后面的章節(jié)討論伙菊。成功的機器學習有四個要素:數(shù)據(jù)、轉換數(shù)據(jù)的模型敌土、衡量模型好壞的損失函數(shù)和一個調整模型權重來最小化損失函數(shù)的算法镜硕。
數(shù)據(jù)(Data)
越多越好。事實上纯赎,數(shù)據(jù)是深度學習復興的核心谦疾,因為復雜的非線性模型比其他機器學習需要更多的數(shù)據(jù)。
模型(Models)
通常犬金,我們拿到的數(shù)據(jù)和最終想要的結果相差甚遠念恍。例如,想知道照片中的人是不是開心晚顷,我們希望有一個模型峰伙,能將成千上萬的低級特征(像素值),轉化為高度抽象的輸出(開心程度)该默。選擇正確模型并不簡單瞳氓,不同的模型適合不同的數(shù)據(jù)集。在這本書中栓袖,我們會主要聚焦于深度神經(jīng)網(wǎng)絡模型匣摘。這些模型包含了自上而下聯(lián)結的數(shù)據(jù)多層連續(xù)變換店诗,因此稱之為深度學習。在討論深度神經(jīng)網(wǎng)絡之前音榜,我們也會討論一些簡單庞瘸、淺顯的模型。
損失函數(shù)(Loss Functions)
我們需要對比模型的輸出和真實值之間的誤差赠叼。損失函數(shù)可以衡量輸出結果對比真實數(shù)據(jù)的好壞擦囊。例如,我們訓練了一個基于圖片預測病人心率的模型嘴办。如果模型預測某個病人的心率是100bpm瞬场,而實際上僅有60bpm,這時候涧郊,我們就需要某個方法來提點一下這個的模型了贯被。
類似的,一個模型通過給電子郵件打分來預測是不是垃圾郵件妆艘,我們同樣需要某個方法判斷模型的結果是否準確刃榨。典型的機器學習過程包括將損失函數(shù)最小化。通常双仍,模型包含很多參數(shù)枢希。我們通過最小化損失函數(shù)來“學習”這些參數(shù)≈煳郑可惜苞轿,將損失降到最小,并不能保證我們的模型在遇到(未見過的)測試數(shù)據(jù)時表現(xiàn)良好逗物。由此搬卒,我們需要跟蹤兩項數(shù)據(jù):
訓練誤差(training error):這是模型在用于訓練的數(shù)據(jù)集上的誤差。類似于考試前我們在模擬試卷上拿到的分數(shù)翎卓。有一定的指向性契邀,但不一定保證真實考試分數(shù)。
測試誤差(test error):這是模型在沒見過的新數(shù)據(jù)上的誤差失暴,可能會跟訓練誤差很不一樣(統(tǒng)計上稱之為過擬合)坯门。類似于考前模考次次拿高分逗扒,但實際考起來卻失誤了古戴。
優(yōu)化算法(Optimization Algorithms)
最后,我們需要算法來通盤考慮模型本身和損失函數(shù)矩肩,對參數(shù)進行搜索现恼,從而逐漸最小化損失。最常見的神經(jīng)網(wǎng)絡優(yōu)化使用梯度下降法作為優(yōu)化算法。簡單地說叉袍,輕微地改動參數(shù)始锚,觀察訓練集的損失將如何移動。然后將參數(shù)向減小損失的方向調整喳逛。
什么是深度學習
這是機器學習的一個子領域疼蛾,近年來表現(xiàn)出了很大的潛力。它涉及到大腦中神經(jīng)元結構和功能的算法艺配。Andrew Ng曾用下圖對比說明傳統(tǒng)機器學習算法和深度學習算法的特點。從圖中可以看出衍慎,隨著數(shù)據(jù)的增多转唉,到達一定量后,深度學習算法的表現(xiàn)會明顯優(yōu)于傳統(tǒng)的機器學習算法稳捆。
深度學習中最令人激動的特性之一是它在特征學習上的表現(xiàn)赠法。該算法在從原始數(shù)據(jù)中檢測特征方面表現(xiàn)地特別好。有一個很好的例子乔夯,就是通過深度學習技術來識別汽車圖片中的車輪砖织。下圖說明了典型機器學習與深度學習之間的區(qū)別:
在機器學習中特征選擇部分一般需要人的先驗知識的介入來設計好的特征提取方法,比如人知道輪子一般是圓的末荐,一般出現(xiàn)在交通工具上侧纯,有輪胎、輪轂等部件甲脏,基于先驗知識眶熬,人可以選取適合提取輪子特征的方法,再設計分類器以識別輪子块请。而深度學習通常由多個層組成娜氏。它們通常將更簡單的模型組合在一起,通過將數(shù)據(jù)從一層傳遞到另一層來構建更復雜的模型墩新。通過大量數(shù)據(jù)的訓練自動得到一個能識別輪子的模型贸弥,不需要人工設計特征提取環(huán)節(jié)。這是深度學習隨著數(shù)據(jù)量的增加而優(yōu)于其他學習算法的主要原因之一海渊。
隨著深度學習的發(fā)展绵疲,為了方便算法人員訓練模型,調整參數(shù)等臣疑,很多公司開源了優(yōu)秀的深度學習框架最岗,到目前為止,主要的深度學習框架如下圖所示朝捆。目前工業(yè)界用的比較多的是Caffe和TensorFlow般渡,Caffe主要在計算機視覺上用的較多,TensorFlow由谷歌開源,相關文檔較好驯用,適用范圍廣脸秽,基于Python語音,入門簡單蝴乔,建議新手入門可以選擇TensorFlow记餐。但是這些只是深度學習的平臺框架而已,真正重要的還是學習好深度學習的理論薇正,有了理論各種平臺都不是問題片酝。
TensorFlow簡介
TensorFlow是專門為機器學習而設計的快速數(shù)值計算Python庫,它由谷歌開源挖腰,旨在讓世界各地更多的研究人員和開發(fā)人員掌握深度學習雕沿。為了加速深度學習領域的發(fā)展,2015年11月9日猴仑,Google發(fā)布深度學習框架TensorFlow并宣布開源审轮。在短短的一年時間內,在GitHub上辽俗,TensorFlow就成為了最流行的深度學習項目疾渣。
TensorFlow在計算機視覺、語音識別崖飘、推薦系統(tǒng)和自然語言處理等場景下都有豐富的應用榴捡。雖然Tenforflow開源時間剛滿一年,但是它正在以迅猛的速度滲入到我們的尋常生活中朱浴。它支持Linux平臺薄疚,Windows平臺,Mac平臺赊琳,甚至還宣稱要發(fā)布相應的移動端平臺街夭。其次,TensorFlow提供了非常豐富的深度學習相關的API躏筏,可以說目前所有深度學習框架里板丽,提供的API最全的,包括基本的向量矩陣計算趁尼、各種優(yōu)化算法埃碱、各種卷積神經(jīng)網(wǎng)絡和循環(huán)神經(jīng)網(wǎng)絡基本單元的實現(xiàn)、以及可視化的輔助工具酥泞、等等砚殿。
你可以按照官方的教程安裝TensorFlow,安裝好之后芝囤,你就可以用它提供的多個API來訓練機器學習模型了似炎。具體的教程可以參考TensorFlow官網(wǎng)辛萍,不想看英文的也可以參考TensorFlow中文社區(qū).
雖然TensorFlow是最受歡迎的機器學習庫,不過也有其他幾個很棒的選擇羡藐,如Torch(Facebook使用)贩毕、Caffe(出自Berkeley AI研究所的深度學習框架)等等。其中Caffe是第一個在工業(yè)上得到廣泛應用的開源深度學習框架仆嗦,也是第一代深度學習框架里最受歡迎的框架辉阶,目前也有很多企業(yè)和科研人員在使用。
學習資料
一旦對基礎知識有了一定的了解瘩扼,你應該知道自己對機器學習的哪些方面比較感興趣谆甜,你想在應用程序中使用機器學習,還是想研究機器學習集绰。下面是一些優(yōu)秀的參考資料规辱,可以幫助你系統(tǒng)的學習。
書籍:
深度學習技術發(fā)展迅速倒慧,各種平臺框架也迭代很快,推薦相關的書籍其實不太好推薦包券。在這里我只推薦兩本書:
第一本是《白話深度學習與TensorFlow》纫谅,這本書寫的非常通俗易懂,沒有太多理論知識介紹溅固,基本是深度學習的基礎知識和TensorFlow的相關例程付秕,適合沒有深度學習基礎,想入門深度學習的人看侍郭。
第二本是美國Ian询吴,Goodfellow 寫的《Deep Learning》,這本書有中文翻譯版《深度學習》亮元,但是這本書基本是講深度學習理論的猛计,沒有基礎的話很難看懂,但是翻譯者提供了PDF在GitHub上爆捞,想看的可以去下載:https://github.com/exacity/deeplearningbook-chinese
網(wǎng)絡資源:
對于新手入門個人覺得很多網(wǎng)上的手冊奉瘤、教程和博客都很不錯。這篇文章主要面向零基礎的想了解DeepLearning的人員煮甥,太復雜專業(yè)的暫時就不推薦了盗温,以下是一些基礎的入門資源。
1.吳恩達的深度學習在線課程:這是吳恩達成立DeepLearning.ai在線教育網(wǎng)站后的第一個課程成肘,網(wǎng)易云課堂引進了卖局,偏工程可以學習一下,還有相關證書,吳恩達給你的人工智能第一課.
2.莫煩Python:這是一個在澳大利亞讀博的中國人双霍,他會講Python和深度學習的教程砚偶,有視頻批销。Python基本是現(xiàn)在做深度學習的必會語言了,喜歡的可以去這里學習https://morvanzhou.github.io/about/蟹演。
3.臺灣李宏毅教授的在線課程:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17_2.html风钻,還有一個300多頁的ppt,比較系統(tǒng)酒请,也最通俗易懂的:PPT鏈接
4.TensorFlow中文社區(qū):http://www.tensorfly.cn5.想學習caffe框架的骡技,也可以參考徐其華的博客:http://www.cnblogs.com/denny402/tag/caffe/
結語
“整個世界就是一個大數(shù)據(jù)問題” - Andrew McAfee
掌握機器學習就像是馴服一頭野獸。但是羞反,如果你已經(jīng)吃透它布朦,那么它就是你身邊一個非常有價值的資源。暫時想到的就這么多昼窗,愿大家一同進步……
參考資料: