2
雷鋒網(wǎng)注:本文作者為深度學(xué)習(xí)平臺(tái)MxNet的作者李沐,文章由雷鋒網(wǎng)整理自作者的機(jī)器學(xué)習(xí)網(wǎng)站“動(dòng)手學(xué)深度學(xué)習(xí)”。在這個(gè)網(wǎng)站中,李沐介紹了他做這個(gè)項(xiàng)目的初衷:
兩年前我們開始了MXNet這個(gè)項(xiàng)目,有一件事情一直困擾我們:每當(dāng)MXNet發(fā)布新特性的時(shí)候,總會(huì)收到“做啥新東西,趕緊去更新文檔”的留言。我們曾一度都很費(fèi)解,文檔明明很多啊,比我們以前所有做的項(xiàng)目都好。而且你看隔壁家輪子,都沒文檔,大家照樣也不是用的很嗨。
后來有一天,Zack問了這樣一個(gè)問題:假設(shè)回到你剛開始學(xué)機(jī)器學(xué)習(xí)的時(shí)候,那么你需要什么樣的文檔?
為此,李沐決定:
我們想開設(shè)一些系列課程,從深度學(xué)習(xí)入門到最新最前沿的算法,從0開始通過交互式的代碼來講解每個(gè)算法和概念。
而本文也正是這一系列的開篇介紹,向初學(xué)者介紹了機(jī)器學(xué)習(xí)的背景知識(shí),并希望借此吸引更多的初學(xué)者進(jìn)入到機(jī)器學(xué)習(xí)的殿堂中來。本文原地址:機(jī)器學(xué)習(xí)簡介 - 動(dòng)手學(xué)深度學(xué)習(xí) 0.1 documentation。
以下為全文:
本書作者跟廣大程序員一樣,在開始寫作前需要去來一杯咖啡。我們跳進(jìn)車準(zhǔn)備出發(fā),Alex掏出他的安卓喊一聲“OK Google”喚醒語言助手,Mu操著他的中式英語命令到“去藍(lán)瓶咖啡店”。手機(jī)這時(shí)馬上顯示出識(shí)別的命令,并且知道我們需要導(dǎo)航。接著它調(diào)出地圖應(yīng)用并給出數(shù)條路線方案,每條方案邊上會(huì)有預(yù)估的到達(dá)時(shí)間并自動(dòng)選擇最快的線路。
好吧,這是一個(gè)虛構(gòu)的例子,因?yàn)槲覀円话阍谵k公室喝自己的手磨咖啡。但這個(gè)例子展示了在短短幾秒鐘里,我們跟數(shù)個(gè)機(jī)器學(xué)習(xí)模型進(jìn)行了交互。
如果你從來沒有使用過機(jī)器學(xué)習(xí),你會(huì)想,這個(gè)不就是編程嗎?或者,到底機(jī)器學(xué)習(xí)是什么?首先,我們確實(shí)是使用編程語言來實(shí)現(xiàn)機(jī)器學(xué)習(xí)模型,我們跟計(jì)算機(jī)其他領(lǐng)域一樣,使用同樣的編程語言和硬件。但不是每個(gè)程序都用了機(jī)器學(xué)習(xí)。對(duì)于第二個(gè)問題,精確定義機(jī)器學(xué)習(xí)就像定義什么是數(shù)學(xué)一樣難,但我們試圖在這章提供一些直觀的解釋。
我們?nèi)粘=换サ拇蟛糠钟?jì)算機(jī)程序可以使用最基本的命令來實(shí)現(xiàn)。當(dāng)你把一個(gè)商品加進(jìn)購物車時(shí),你觸發(fā)了電商的電子商務(wù)程序來把一個(gè)商品ID和你的用戶ID插入到一個(gè)叫做購物車的數(shù)據(jù)庫表格中。你可以在沒有見到任何真正客戶前來用最基本的程序指令來實(shí)現(xiàn)這個(gè)功能。如果你發(fā)現(xiàn)你可以這么做,那么你就不應(yīng)該使用機(jī)器學(xué)習(xí)。
對(duì)于機(jī)器學(xué)習(xí)科學(xué)家來說,幸運(yùn)的是大部分應(yīng)用沒有那么容易?;氐角懊婺莻€(gè)例子,想象下如何寫一個(gè)程序來回應(yīng)喚醒詞例如“Okay, Google”,“Siri”,和“Alexa”。如果你在一個(gè)只有你和代碼編輯器的房間里寫這個(gè)程序,你該怎么辦?你可能會(huì)想像下面的程序:
但實(shí)際上你能拿到的只是麥克風(fēng)里采集到的原始語音信號(hào),可能是每秒44,000個(gè)樣本點(diǎn)。那么需要些什么樣的規(guī)則才能把這些樣本點(diǎn)轉(zhuǎn)成一個(gè)字符串呢?或者簡單點(diǎn),判斷這些信號(hào)里是不是就是說了喚醒詞。
如果你被這個(gè)問題困住了,不用擔(dān)心。這就是我們?yōu)槭裁匆獧C(jī)器學(xué)習(xí)。
雖然我們不知道怎么告訴機(jī)器去把語音信號(hào)轉(zhuǎn)成對(duì)應(yīng)的字符串,但我們自己可以。我們可以收集一個(gè)巨大的數(shù)據(jù)集里包含了大量語音信號(hào),以及每個(gè)語音型號(hào)是不是對(duì)應(yīng)我們要的喚醒詞。在機(jī)器學(xué)習(xí)里,我們不直接設(shè)計(jì)一個(gè)系統(tǒng)去辨別喚醒詞,而是寫一個(gè)靈活的程序,它的行為可以根據(jù)在讀取數(shù)據(jù)集的時(shí)候改變。所以我們不是去直接寫一個(gè)喚醒詞辨別器,而是一個(gè)程序,當(dāng)提供一個(gè)巨大的有標(biāo)注的數(shù)據(jù)集的時(shí)候它能辨別喚醒詞。你可以認(rèn)為這種方式是利用數(shù)據(jù)編程。換言之,我們需要用數(shù)據(jù)訓(xùn)練機(jī)器學(xué)習(xí)模型,其過程通常如下:
初始化一個(gè)幾乎什么也不能做的模型;
抓一些有標(biāo)注的數(shù)據(jù)集(例如音頻段落及其是否為喚醒詞的標(biāo)注);
修改模型使得它在抓取的數(shù)據(jù)集上能夠更準(zhǔn)確執(zhí)行任務(wù)(例如使得它在判斷這些抓取的音頻段落是否為喚醒詞上判斷更準(zhǔn)確);
重復(fù)以上步驟2和3,直到模型看起來不錯(cuò)。
機(jī)器學(xué)習(xí)背后的核心思想是,設(shè)計(jì)程序使得它可以在執(zhí)行的時(shí)候提升它在某任務(wù)上的能力,而不是有著固定行為的程序。機(jī)器學(xué)習(xí)包括多種問題的定義,提供很多不同的算法,能解決不同領(lǐng)域的各種問題。我們之前講到的是一個(gè)講監(jiān)督學(xué)習(xí)應(yīng)用到語言識(shí)別的例子。
正因?yàn)闄C(jī)器學(xué)習(xí)提供多種工具可以利用數(shù)據(jù)來解決簡單規(guī)則不能或者難以解決的問題,它被廣泛應(yīng)用在了搜索引擎、無人駕駛、機(jī)器翻譯、醫(yī)療診斷、垃圾郵件過濾、玩游戲、人臉識(shí)別、數(shù)據(jù)匹配、信用評(píng)級(jí)和給圖片加濾鏡等任務(wù)中。
雖然這些問題各式各樣,但他們有著共同的模式從而可以被機(jī)器學(xué)習(xí)模型解決。最常見的描述這些問題的方法是通過數(shù)學(xué),但不像其他機(jī)器學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)的書那樣,我們會(huì)主要關(guān)注真實(shí)數(shù)據(jù)和代碼。下面我們來看點(diǎn)數(shù)據(jù)和代碼。
這個(gè)例子靈感來自 Joel Grus 的一次 應(yīng)聘面試. 面試官讓他寫個(gè)程序來玩Fizz Buzz. 這是一個(gè)小孩子游戲。玩家從1數(shù)到100,如果數(shù)字被3整除,那么喊’fizz’,如果被5整除就喊’buzz’,如果兩個(gè)都滿足就喊’fizzbuzz’,不然就直接說數(shù)字。這個(gè)游戲玩起來就像是:
1 2 fizz 4 buzz fizz 7 8 fizz buzz 11 fizz 13 14 fizzbuzz 16 …
傳統(tǒng)的實(shí)現(xiàn)是這樣的:
1 2 fizz 4 buzz fizz 7 8 fizz buzz 11 fizz 13 14 fizzbuzz 16 17 fizz 19 buzz fizz 22 23 fizz buzz 26 fizz 28 29 fizzbuzz 31 32 fizz 34 buzz fizz 37 38 fizz buzz 41 fizz 43 44 fizzbuzz 46 47 fizz 49 buzz fizz 52 53 fizz buzz 56 fizz 58 59 fizzbuzz 61 62 fizz 64 buzz fizz 67 68 fizz buzz 71 fizz 73 74 fizzbuzz 76 77 fizz 79 buzz fizz 82 83 fizz buzz 86 fizz 88 89 fizzbuzz 91 92 fizz 94 buzz fizz 97 98 fizz buzz
對(duì)于經(jīng)驗(yàn)豐富的程序員來說這個(gè)太不夠一顆賽艇了。所以Joel嘗試用機(jī)器學(xué)習(xí)來實(shí)現(xiàn)這個(gè)。為了讓程序能學(xué),他需要準(zhǔn)備下面這個(gè)數(shù)據(jù)集:
數(shù)據(jù) X [1, 2, 3, 4, ...] 和標(biāo)注Y ['fizz', 'buzz', 'fizzbuzz', identity]
訓(xùn)練數(shù)據(jù),也就是系統(tǒng)輸入輸出的實(shí)例。例如 [(2, 2), (6, fizz), (15, fizzbuzz), (23, 23), (40, buzz)]
從輸入數(shù)據(jù)中抽取的特征,例如 x -> [(x % 3), (x % 5), (x % 15)].
有了這些,Jeol利用TensorFlow寫了一個(gè)分類器。對(duì)于不按常理出牌的Jeol,面試官一臉黑線。而且這個(gè)分類器不是總是對(duì)的。
顯然,用原子彈殺雞了。為什么不直接寫幾行簡單而且保證結(jié)果正確的Python代碼呢?當(dāng)然,這里有很多一個(gè)簡單Python腳本不能分類的例子,即使簡單的3歲小孩解決起來毫無壓力。
幸運(yùn)的是,這個(gè)正是機(jī)器學(xué)習(xí)的用武之地。我們通過提供大量的含有貓和狗的圖片來編程一個(gè)貓狗檢測器,一般來說它就是一個(gè)函數(shù),它會(huì)輸出一個(gè)大的正數(shù)如果圖片里面是貓,一個(gè)大的負(fù)數(shù)如果是狗,如果不確信就輸出一個(gè)0附近的。當(dāng)然,這是機(jī)器學(xué)習(xí)能做的最簡單例子。
成功的機(jī)器學(xué)習(xí)有四個(gè)要素:數(shù)據(jù)、轉(zhuǎn)換數(shù)據(jù)的模型、衡量模型好壞的損失函數(shù)和一個(gè)調(diào)整模型權(quán)重來最小化損失函數(shù)的算法。
數(shù)據(jù)。越多越好。事實(shí)上,數(shù)據(jù)是深度學(xué)習(xí)復(fù)興的核心,因?yàn)閺?fù)雜的非線性模型比其他機(jī)器學(xué)習(xí)需要更多的數(shù)據(jù)。數(shù)據(jù)的例子包括
圖片:例如你的手機(jī)圖片,里面可能包含貓、狗、恐龍、高中同學(xué)聚會(huì)或者昨天的晚飯
文本:郵件、新聞和微信聊天記錄
聲音:有聲書籍和電話記錄
結(jié)構(gòu)數(shù)據(jù):Jupyter notebook(里面有文本,圖片和代碼)、網(wǎng)頁、租車單和電費(fèi)表
模型。通常數(shù)據(jù)和我們最終想要的相差很遠(yuǎn),例如我們想知道照片中的人是不是在高興,所以我們需要把一千萬像素變成一個(gè)高興度的概率值。通常我們需要在數(shù)據(jù)上應(yīng)用數(shù)個(gè)非線性函數(shù)(例如神經(jīng)網(wǎng)絡(luò))
損失函數(shù)。我們需要對(duì)比模型的輸出和真實(shí)值之間的誤差。損失函數(shù)幫助我們決定2017年底亞馬遜股票會(huì)不會(huì)價(jià)值1500美元。取決于我們想短線還是長線,這個(gè)函數(shù)可以很不一樣。
訓(xùn)練。通常一個(gè)模型里面有很多參數(shù)。我們通過最小化損失函數(shù)來學(xué)這些參數(shù)。不幸的是,即使我們做得很好也不能保證在新的沒見過的數(shù)據(jù)上我們可以仍然做很好。
訓(xùn)練誤差。這是模型在評(píng)估用來訓(xùn)練模型的數(shù)據(jù)集上的誤差。這個(gè)類似于考試前我們在模擬試卷上拿到的分?jǐn)?shù)。有一定的指向性,但不一定保證真實(shí)考試分?jǐn)?shù)。
測試誤差。這是模型在沒見過的新數(shù)據(jù)上的誤差,可能會(huì)跟訓(xùn)練誤差不很一樣(統(tǒng)計(jì)上叫過擬合)。這個(gè)類似于考前??即未文酶叻郑珜?shí)際考起來卻失誤了。(筆者之一曾經(jīng)做GRE真題時(shí)次次拿高分,高興之下背了一遍紅寶書就真上陣考試了,結(jié)果最終拿了一個(gè)剛剛夠用的低分。后來意識(shí)到這是因?yàn)榧t寶書里包含了大量的真題。)
下面我們詳細(xì)討論一些不同的機(jī)器學(xué)習(xí)應(yīng)用。
監(jiān)督學(xué)習(xí)描述的任務(wù)是,當(dāng)給定輸入x,如何通過在有標(biāo)注輸入和輸出的數(shù)據(jù)上訓(xùn)練模型而能夠預(yù)測輸出y。從統(tǒng)計(jì)角度來說,監(jiān)督學(xué)習(xí)主要關(guān)注如何估計(jì)條件概率P(y|x)。在實(shí)際情景中,監(jiān)督學(xué)習(xí)最為常用。例如,給定一位患者的CT圖像,預(yù)測該患者是否得癌癥;給定英文句子,預(yù)測出它的正確中文翻譯;給定本月公司財(cái)報(bào)數(shù)據(jù),預(yù)測下個(gè)月該公司股票價(jià)格。
回歸分析也許是監(jiān)督學(xué)習(xí)里最簡單的一類任務(wù)。在該項(xiàng)任務(wù)里,輸入是任意離散或連續(xù)的、單一或多個(gè)的變量,而輸出是連續(xù)的數(shù)值。例如我們可以把本月公司財(cái)報(bào)數(shù)據(jù)抽取出若干特征,如營收總額、支出總額以及是否有負(fù)面報(bào)道,利用回歸分析預(yù)測下個(gè)月該公司股票價(jià)格。
如果我們把模型預(yù)測的輸出值和真實(shí)的輸出值之間的差別定義為殘差,常見的回歸分析的損失函數(shù)包括訓(xùn)練數(shù)據(jù)的殘差的平方和或者絕對(duì)值的和。機(jī)器學(xué)習(xí)的任務(wù)是找到一組模型參數(shù)使得損失函數(shù)最小化。我們會(huì)在之后的章節(jié)里詳細(xì)介紹回歸分析。
值得一提的是,回歸分析所關(guān)注的預(yù)測往往可以解答輸出為連續(xù)數(shù)值的問題。當(dāng)預(yù)測的輸出是離散的類別時(shí),這個(gè)監(jiān)督學(xué)習(xí)任務(wù)就叫做分類。分類在我們?nèi)粘I钪泻艹R?。例如我們可以把本月公司?cái)報(bào)數(shù)據(jù)抽取出若干特征,如營收總額、支出總額以及是否有負(fù)面報(bào)道,利用分類預(yù)測下個(gè)月該公司的CEO是否會(huì)離職。在計(jì)算機(jī)視覺領(lǐng)域,把一張圖片識(shí)別成眾多物品類別中的某一類,例如貓、狗等。
動(dòng)物的分類
給定一個(gè)實(shí)例被抽取出的若干特征作為輸入,我們的分類模型可以輸出實(shí)例為各個(gè)類別的概率,并將概率最大的類別作為分類的結(jié)果。
事實(shí)上,有一些看似分類的問題在實(shí)際中卻難以歸于分類。例如,把下面這張圖無論分類成貓還是狗看上去都有些問題。
正如你所見,上圖里既有貓又有狗。其實(shí)還沒完呢,里面還有草啊、輪胎啊、石頭啊等等。與其將上圖僅僅分類為其中一類,倒不如把這張圖里面我們所關(guān)心的類別都標(biāo)注出來。比如,給定一張圖片,我們希望知道里面是否有貓、是否有狗、是否有草等。給定一個(gè)輸入,輸出不定量的類別,這個(gè)就叫做標(biāo)注任務(wù)。
這類任務(wù)有時(shí)候也叫做多標(biāo)簽分類。想象一下,人們可能會(huì)把多個(gè)標(biāo)簽同時(shí)標(biāo)注在自己的某篇技術(shù)類博客文章上,例如“機(jī)器學(xué)習(xí)”、“科技”、“編程語言”、“云計(jì)算”、“安全與隱私”和“AWS”。這里面的標(biāo)簽其實(shí)有時(shí)候相互關(guān)聯(lián),比如“云計(jì)算”和“安全與隱私”。當(dāng)一篇文章可能被標(biāo)注的數(shù)量很大時(shí),人力標(biāo)注就顯得很吃力。這就需要使用機(jī)器學(xué)習(xí)了。
搜索與排序關(guān)注的問題更多的是如何把一堆對(duì)象排序。例如在信息檢索領(lǐng)域,我們常常關(guān)注如何把一堆文檔按照與檢索條目的相關(guān)性排序。在互聯(lián)網(wǎng)時(shí)代,由于搜索引擎的流行,我們更加關(guān)注如何對(duì)網(wǎng)頁進(jìn)行排序?;ヂ?lián)網(wǎng)時(shí)代早期有一個(gè)著名的網(wǎng)頁排序算法叫做PageRank。該算法的排序結(jié)果并不取決于特定的用戶檢索條目。這些排序結(jié)果可以更好地為所包含檢索條目的網(wǎng)頁進(jìn)行排序。
推薦系統(tǒng)與搜索排序關(guān)系緊密,并廣泛應(yīng)用于購物網(wǎng)站、搜索引擎、新聞門戶網(wǎng)站等等。推薦系統(tǒng)的主要目標(biāo)是把用戶可能感興趣的東西推薦給用戶。推薦算法用到的信息多種多樣,例如用戶的自我描述、對(duì)過往推薦的反應(yīng)、社交網(wǎng)絡(luò)、喜好等等。下圖展示了亞馬遜網(wǎng)站對(duì)筆者之一有關(guān)深度學(xué)習(xí)類書籍的推薦結(jié)果。
搜索引擎的搜索條目自動(dòng)補(bǔ)全系統(tǒng)也是個(gè)好例子。它可根據(jù)用戶輸入的前幾個(gè)字符把用戶可能搜索的條目實(shí)時(shí)推薦自動(dòng)補(bǔ)全。在筆者之一的某項(xiàng)工作里,如果系統(tǒng)發(fā)現(xiàn)用戶剛剛開啟了體育類的手機(jī)應(yīng)用,當(dāng)用戶在搜索框拼出”real”時(shí),搜索條目自動(dòng)補(bǔ)全系統(tǒng)會(huì)把”real madrid”(皇家馬德里,足球球隊(duì))推薦在比通常更頻繁被檢索的”real estate”(房地產(chǎn))更靠前的位置,而不是總像下圖中這樣。
序列學(xué)習(xí)也是一類近來備受關(guān)注的機(jī)器學(xué)習(xí)問題。在這類問題中,輸入和輸出不僅限于固定的數(shù)量。這類模型通??梢蕴幚砣我忾L度的輸入序列,或者輸出任意長度的序列。當(dāng)輸入和輸出都是不定長的序列時(shí),我們也把這類模型叫做seq2seq,例如語言翻譯模型和語音轉(zhuǎn)錄文本模型。以下列舉了一些常見的序列學(xué)習(xí)案例。
一個(gè)常見語法分析的例子是,給定一個(gè)本文序列,如何找出其中的命名實(shí)體,例如人物姓名、城市名稱等。以下是一個(gè)這樣的例子。其中Tom、Washington和Sally都是命名實(shí)體。
Tom wants to have dinner in Washington with Sally.
E - - - - - E - E
在語音識(shí)別的問題里,輸入序列通常都是麥克風(fēng)的聲音,而輸出是對(duì)通過麥克風(fēng)所說的話的文本轉(zhuǎn)錄。這類問題通常有一個(gè)難點(diǎn),例如聲音通常都在特定的采樣率采樣,因?yàn)槁曇艉臀谋局g不存在一一對(duì)應(yīng)。換言之,語音識(shí)別是一類序列轉(zhuǎn)換問題。這里的輸出往往比輸入短很多。
----D----e--e--e-----p----------- L----ea-------r---------ni-----ng-----
這是語音識(shí)別問題的逆問題。這里的輸入是一個(gè)文本序列,而輸出才是聲音序列。因此,這類問題的輸出比輸入長。
機(jī)器翻譯的目標(biāo)是把一段話從一種語言翻譯成另一種語言。目前,機(jī)器翻譯時(shí)常會(huì)翻譯出令人啼笑皆非的結(jié)果。主要來說,機(jī)器翻譯的復(fù)雜程度非常高。同一個(gè)詞在兩種不同語言下的對(duì)應(yīng)有時(shí)候是多對(duì)多。另外,符合語法或者語言習(xí)慣的語序調(diào)整也另問題更加復(fù)雜。
上述的機(jī)器學(xué)習(xí)問題和應(yīng)用場景都是基于監(jiān)督學(xué)習(xí)的。與監(jiān)督學(xué)習(xí)不同,非監(jiān)督學(xué)習(xí)不需要訓(xùn)練數(shù)據(jù)被標(biāo)識(shí)。以圖片分析為例,對(duì)監(jiān)督學(xué)習(xí)來說,訓(xùn)練數(shù)據(jù)里的圖片需要被標(biāo)識(shí)為狗、貓或者別的動(dòng)物,如此一來,一個(gè)分類模型被訓(xùn)練后就能把一張新圖片識(shí)別為某種動(dòng)物。而對(duì)非監(jiān)督學(xué)習(xí)而言,例如聚類學(xué)習(xí),可以把一堆無標(biāo)識(shí)的圖片自動(dòng)聚合成若干類,其中每類分別對(duì)應(yīng)一種動(dòng)物。
以下我們簡要介紹一些常見的非監(jiān)督學(xué)習(xí)任務(wù)。
聚類問題通常研究如何把一堆數(shù)據(jù)點(diǎn)分成若干類,從而使得同類數(shù)據(jù)點(diǎn)相似而非同類數(shù)據(jù)點(diǎn)不似。根據(jù)實(shí)際問題,我們需要定義相似性。
子空間估計(jì)問題通常研究如何將原始數(shù)據(jù)向量在更低維度下表示。理想情況下,子空間的表示要具有代表性從而才能與原始數(shù)據(jù)接近。一個(gè)常用方法叫做主成分分析。
表征學(xué)習(xí)希望在歐幾里得空間中找到原始對(duì)象的表示方式,從而能在歐幾里得空間里表示出原始對(duì)象的符號(hào)性質(zhì)。例如我們希望找到城市的向量表示,從而使得我們可以進(jìn)行這樣的向量運(yùn)算:羅馬 - 意大利 + 法國 = 巴黎。
生成對(duì)抗網(wǎng)絡(luò)是最近一個(gè)很火的領(lǐng)域。這里描述數(shù)據(jù)的生成過程,并檢查真實(shí)與生成的數(shù)據(jù)是否統(tǒng)計(jì)上相似。
機(jī)器學(xué)習(xí)是一個(gè)龐大的領(lǐng)域。我們在此無法也無需介紹有關(guān)它的全部。有了這些背景知識(shí)鋪墊,你是否對(duì)接下來的學(xué)習(xí)更有興趣了呢?
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。