本次公開課AI科技大本營邀請(qǐng)到了阿里巴巴的高級(jí)算法專家張相於,他將從數(shù)據(jù)的概率分布開始介紹機(jī)器學(xué)習(xí)核心概念之間的有機(jī)關(guān)系,幫助大家建立知識(shí)脈絡(luò),做到知識(shí)的有機(jī)吸收。同時(shí),講解機(jī)器學(xué)習(xí)的元知識(shí),介紹系統(tǒng)性持續(xù)學(xué)習(xí)的方法和技巧。最后介紹算法工程落地能力的入門和提高,避免只會(huì)算法不會(huì)落地的尷尬。當(dāng)然,隨手推薦一波獨(dú)特有效的學(xué)習(xí)資料不在話下。
我們這次分享的題目叫做《機(jī)器學(xué)習(xí)第二次入門》。我先簡單自我介紹一下,我現(xiàn)在在做算法工作,在阿里做高級(jí)算法專家,主要關(guān)注的領(lǐng)域是在推薦系統(tǒng)、機(jī)器學(xué)習(xí)、金融風(fēng)控這些方面。
本次分享包括三個(gè)內(nèi)容,先講一下機(jī)器學(xué)習(xí)的知識(shí)脈絡(luò),這是我們這次分享的核心內(nèi)容。第二點(diǎn)是工程能力?,F(xiàn)在網(wǎng)絡(luò)上有很多機(jī)器學(xué)習(xí)入門的材料,所以本次課程中會(huì)稍微提一下。最后,會(huì)相對(duì)深入地推薦一些內(nèi)容、資料,會(huì)給大家介紹一些書的特點(diǎn),不是簡單拉個(gè)單子,我覺得拉單子這個(gè)東西可能大家也會(huì)迷失在其中。
機(jī)器學(xué)習(xí)的知識(shí)脈絡(luò)
下面我們看第一個(gè)章節(jié)——機(jī)器學(xué)習(xí)的知識(shí)脈絡(luò)。為什么叫做第二次入門?第一次入門大家可能會(huì)是這樣一種狀態(tài):想從事機(jī)器學(xué)習(xí)行業(yè),你會(huì)去找一些視頻或者是學(xué)習(xí)材料,一上來可能就會(huì)給你一些常用的模型,跟一些實(shí)用的demo這方面的東西。這些東西對(duì)于上手是非常有用的,也是一個(gè)必經(jīng)之路,但是往往會(huì)忽視一些比較靠下的基礎(chǔ)理論知識(shí)。這就會(huì)導(dǎo)致有的同學(xué)會(huì)很困惑,感覺機(jī)器學(xué)習(xí)的理論點(diǎn)特別多,知識(shí)特別多,好像永遠(yuǎn)也學(xué)不完的樣子。但其實(shí)這背后是有一些規(guī)律的。今天我們會(huì)從其中一個(gè)角度進(jìn)行分析,它只是一部分的知識(shí)脈絡(luò),希望能給大家打開一個(gè)新的視角,對(duì)于你持續(xù)地去學(xué)習(xí),去更深入地掌握知識(shí)是有好處的。
首先,我們看這樣一個(gè)問題,你如何能把一棵樹上的所有葉子都抓在手里面,或者所有的葉子都把它收起來?
第一種方式,我用一個(gè)不好的比喻來講,有點(diǎn)像狗熊抓樹葉一樣,因?yàn)橛袀€(gè)詞叫“狗熊掰棒子”大家都知道,什么叫狗熊抓樹葉?就是樹葉落一地,我就一片一片去撿,但是這個(gè)其實(shí)效率很低的。因?yàn)樵谀憧磥硭鼈兙褪且恍]有區(qū)別的葉子,在那兒一個(gè)勁地?fù)?。但是還有種方式——倒過來去抓這個(gè)葉子,從根上去抓,大家都知道《水滸傳》里有魯智深倒拔垂楊柳,從根上到枝干上,然后倒著這么去走,其實(shí)是能夠提綱挈領(lǐng)地去抓住所有的葉子。是這樣一個(gè)比喻。
那么反過來,我們看機(jī)器學(xué)習(xí)現(xiàn)在很熱的一個(gè)知識(shí),怎么能夠去學(xué)好機(jī)器學(xué)習(xí)知識(shí)?有一個(gè)很常見的辦法,我經(jīng)常建議大家去翻一下算法比賽,此前有則新聞,Kaggle 上面一個(gè)最年輕的 Grandmaster 誕生了,他是一個(gè)高中生,他自學(xué)了三年算法的知識(shí),他一下子就變成了 Grandmaster。這個(gè)是實(shí)踐的一個(gè)很好的方式。
但是從另外一個(gè)角度來講,如果你想比較深入地去研究這個(gè)東西,想走得比較遠(yuǎn),建議你還是能夠把基礎(chǔ)先連根拔起,能夠了解它整個(gè)的知識(shí)脈絡(luò)和知識(shí)系統(tǒng),對(duì)于后面的學(xué)習(xí)非常有好。
樹葉丟掉還會(huì)長出來,但是根沒有你就完蛋了,這是什么意思?對(duì)于我們學(xué)習(xí)一些知識(shí)來講,其實(shí)大家應(yīng)當(dāng)會(huì)有這種感受,就是我學(xué)一個(gè)知識(shí)點(diǎn)可能過一段時(shí)間忘掉了,如果你的學(xué)習(xí)不成體系的話就會(huì)這樣子,有點(diǎn)像現(xiàn)在很多所謂碎片化閱讀什么的,但其實(shí)不是所有的知識(shí)都適合碎片化閱讀,有的東西它還是適合系統(tǒng)化地去學(xué)習(xí)。如果你系統(tǒng)化地學(xué)習(xí)之后,有的東西忘掉其實(shí)不是很大的問題,還是可以很容易地把它撿回來,因?yàn)槟阒浪谑裁次恢?。有的如果你腦子里面沒有這個(gè)系統(tǒng)的話,你就會(huì)覺得所有的點(diǎn)就是一個(gè)一個(gè)點(diǎn),不是很好地聯(lián)系起來。這就是我們講這門課的一個(gè)動(dòng)機(jī)。
首先我們來看一下這個(gè)概念,統(tǒng)計(jì)學(xué)習(xí)?,F(xiàn)在最火的概念叫人工智能,但是其實(shí)也有一些比較冷靜、客觀、低調(diào)的大神批判說你們這根本不是人工智能,其實(shí)就是機(jī)器學(xué)習(xí)。機(jī)器學(xué)習(xí),其實(shí)可以再上升一點(diǎn)說機(jī)器學(xué)習(xí)大部分其實(shí)都還是統(tǒng)計(jì)學(xué)習(xí)。統(tǒng)計(jì)學(xué)習(xí)是什么?統(tǒng)計(jì)學(xué)習(xí)其實(shí)就是基于大量的數(shù)據(jù),說得直白點(diǎn)就是學(xué)出一套規(guī)則來。它的核心其實(shí)就是擬合數(shù)據(jù),特別簡單,如果你看一些基礎(chǔ)理論書的話,機(jī)器學(xué)習(xí)就是擬合數(shù)據(jù)。
擬合數(shù)據(jù)一般來講有兩種套路,就是說首先你有一堆數(shù)據(jù),就是所謂的觀察,你有一堆數(shù)據(jù),然后你想知道它背后究竟是一個(gè)什么分布,這個(gè)東西就是生成式模型,生成式模型你可以理解為它就是一個(gè)上帝視角,你學(xué)好了之后它就是一個(gè)上帝視角。比如說 100 萬個(gè)點(diǎn),任何一個(gè)點(diǎn)它的生成概率是多大,這就是統(tǒng)計(jì)學(xué)習(xí)里面最基礎(chǔ)的一個(gè)概念,就是概率分布,也就是說這個(gè)數(shù)據(jù)究竟是由它的,我看到它的 population,它真實(shí)的生成概率是什么樣子,這就是生成式模型。生成式模型我們一般會(huì)把它拆成 X 和 Y,x就是一些特征變量,y就是你觀測(cè)到的結(jié)果,比如說一些標(biāo)簽,會(huì)通常拆成這樣一個(gè)形式,就是y的概率乘以y下面看到x概率。
生成式模型雖然很牛逼,它是一個(gè)上帝視角的東西,但是很多時(shí)候你會(huì)發(fā)現(xiàn)好像也不是百分之百地需要這個(gè)東西,因?yàn)榻^大部分情況下我們的問題,像課前交流時(shí)候有的同學(xué)也說了,絕大多數(shù)的問題其實(shí)它就是一個(gè)監(jiān)督問題,就是一個(gè)分類問題,在這些場(chǎng)景下面我其實(shí)不需要真的知道它的聯(lián)合分布是什么東西,我只需要知道一個(gè)判別概率,一個(gè)條件概率就知道了,也就是說在知道 X 的情況下,Y 有多大的概率。比如說我們常用的點(diǎn)擊率模型,點(diǎn)擊的概率有多大,核心想知道的是這樣一個(gè)問題。所以說就有另外一種擬合方式,就是判別式模型,就是我最終想擬合出來的東西是這樣一個(gè)概率。
我們要擬合數(shù)據(jù),第一個(gè)概念就是假設(shè)集合。假設(shè)集合決定了我要以什么概率函數(shù)的形式去擬合這個(gè)數(shù)據(jù),也就是說我們選一個(gè)什么樣的函數(shù)的樣子,通俗一點(diǎn)說長什么樣子來去擬合它。舉個(gè)例子,比如說我們?nèi)绻菙M合條件的話,我用一個(gè)邏輯回歸,其實(shí)你默認(rèn)了一個(gè)思想你選擇這個(gè)假設(shè)集合就是長這個(gè)樣子。就是1除以1加e的-x次方這樣一個(gè)東西。這是你的假設(shè)集合。
假設(shè)集合選出來之后,我們先不講怎么去得到這個(gè)假設(shè)集合里面的具體東西,因?yàn)槟愕牧鞒唐鋵?shí)就是一步步地選,我先選出假設(shè)集合來,然后我再從假設(shè)集合里面再選一個(gè)具體的東西出來,就有點(diǎn)像我們經(jīng)常學(xué)的那種抓球,有兩個(gè)袋子,一個(gè)袋子里面是紅球,一個(gè)袋子里面是藍(lán)球,然后我再從這兩個(gè)袋子里面決定選出哪個(gè)袋子來,然后再從那個(gè)袋子里面拿出一個(gè)球來。其實(shí)機(jī)器學(xué)習(xí)從最高的角度去看就是這樣一個(gè)東西,所以說第一步你是選這個(gè)假設(shè)集合是什么,然后在假設(shè)集合內(nèi)部,我們等會(huì)兒再講,其實(shí)后面的學(xué)習(xí)過程就是從假設(shè)集合里面再挑出一個(gè)球出來。
我們?cè)趦?yōu)化之前,在得到模型之前,都需要做一件事情,就是先要知道怎么樣判斷擬合得好不好。我很推崇的一句話,就是說“你如果不能衡量一個(gè)事情,你是沒辦法改進(jìn)它的”,這個(gè)其實(shí)不僅適用于數(shù)學(xué)或者什么,其實(shí)整個(gè)在工作中也會(huì)有這樣的問題。你想做一件事情,一定要先有目標(biāo),沒有這個(gè)目標(biāo)就不能說這件事做成沒做成,做好沒做好。所以我們首先要去引入幾個(gè)概念,怎樣評(píng)判我從假設(shè)集合里面選出的一個(gè)東西來,它是一個(gè)好的假設(shè)還是一個(gè)不好的假設(shè)。
這里面首先第一個(gè)概念就是我怎么衡量它的分類能力?為了更好地解講這個(gè)問題,我們把它局限到一個(gè)分類問題上的話,那么最直接衡量分類能力,最概括的那個(gè)指標(biāo)叫做 VC Dimension。VC Dimension這個(gè)我相信大家很多人都見過,好像也是面試?yán)锩嫣貏e喜歡考的一個(gè)知識(shí),但是我之所以把它放在這個(gè)地方講,就是讓大家知道,VC Dimension 它是一個(gè)什么位置,為什么要出現(xiàn)這個(gè)概念?因?yàn)檫@個(gè)概念它不是從天上蹦下來的,它不是從石頭里面蹦出來的,我突然就說我需要一個(gè) VC Dimension,它不是這樣的,它一定是在衡量一個(gè)什么東西。
VC dimension 衡量的是什么?它衡量的是假設(shè)集合的好壞,它不是在衡量一個(gè)具體的假設(shè)。剛才有同學(xué)說假設(shè)集合就是算法,你可以理解為假設(shè)集合就是模型。比如說邏輯回歸它是一個(gè)模型,它就是一個(gè)假設(shè)集合。這個(gè) VC Dimension 它衡量的就是邏輯回歸在某一方面能力怎么樣,或者是決策樹在某一方面能力怎么樣,它還沒有到評(píng)估說具體某一個(gè)擬合出來的模型好不好。
VC Dimension 什么含義?有的同學(xué)可能看過,這里簡單說一下。它其實(shí)講的是特別簡單的事情,VC Dimension 如果是 N 的話,就代表我給你 N 個(gè)點(diǎn),然后把這 N 個(gè)點(diǎn),每個(gè)點(diǎn)都有兩種選擇,比如說是紅藍(lán)兩種顏色,我對(duì)這些點(diǎn)做任意的著色,你這個(gè)模型都能夠分出這兩種顏色來,就是紅的還是藍(lán)的。這里面有一個(gè)典型的,比如說一個(gè)線性模型,它的 VC Dimension 是什么?線性模型的 VC Dimension 就是 N+1,N就是它的維數(shù),大家可以想像一個(gè)特別簡單的場(chǎng)景,一個(gè)二維平面上的直線,它的VC Dimension 就是 3,為什么?因?yàn)槟銓?duì)于任意三個(gè)點(diǎn),你隨便在腦子里面畫上三個(gè)點(diǎn),隨便給它著色,紅的,上面是紅的,下面是藍(lán)的,你都可以畫一條線,把這個(gè)紅藍(lán)區(qū)分開。所以它的 VC Dimension 是可以到 3 的。但是 4 個(gè) OK 嗎?你找出四個(gè)點(diǎn)來,你對(duì)它任意著色,它一定會(huì)找到一種情況,是一條直線分不開的,沒有辦法說直線的一邊就是紅色,一邊全是藍(lán)色。所以說 VC Dimension就是這樣一個(gè)東西,它是衡量一個(gè)假設(shè)集合的一個(gè)分辨能力。
有了 VC Dimension 我們就知道了一個(gè)假設(shè)集合的好壞,那么 VC Dimension 是不是越大越好?比如說我剛才說線性模型的 VC Dimension是 N+1,我們是不是要找一個(gè)無限大的 VC Dimension,這樣一個(gè)假設(shè)集合就是最好的?其實(shí)并不是的,因?yàn)闊o限大的 VC Dimension 就代表著你會(huì)擬合得非常嚴(yán)重。所以說我們引入第二個(gè)概念就是 error。
Error 在機(jī)器學(xué)習(xí)里面,基礎(chǔ)概念里面它是一個(gè)比較復(fù)雜的概念,它是三個(gè)東西組成的,一個(gè)叫 bias,一個(gè)叫 variance,一個(gè)叫 noise。我們先說一下 noise, noise 是什么東西?noise 是噪音,噪音在機(jī)器學(xué)習(xí)里面它的概念就是說,這個(gè)噪音你可以認(rèn)為這個(gè)模型再怎么牛逼,它都分不出來的點(diǎn),這就是噪音。
舉一個(gè)例子,比如我們的樣本集里有兩條樣本,兩條樣本的特征是完全一樣,比如 10 個(gè)特征,每個(gè)特征上取值都是一樣的,但是第一個(gè)樣本它是一個(gè)正例,第二個(gè)樣本它是一個(gè)負(fù)例。這種情況你說你該給這兩個(gè)點(diǎn)分什么例?如果都判成正例,一定會(huì)有一個(gè)是錯(cuò)的,如果都判成負(fù)例,一定也會(huì)有一個(gè)是錯(cuò)的。這個(gè)就是 noise,這就不是你模型能決定的東西。noise 叫做irreducible error,就是不可約錯(cuò)誤,就是模型再怎么牛逼你都干不掉,這是noise。
除了 noise 它剩下的兩部分叫做 reducible error,也就是 bias+variance這兩個(gè)東西。所以說我們后面會(huì)講,小孩子才分對(duì)錯(cuò),大人只看bias和variance。我覺得在機(jī)器學(xué)習(xí)里面它的核心就是在平衡這兩個(gè)點(diǎn)。
關(guān)于 bias 和 variance,其實(shí)很多同學(xué)都看過,我也面試過一些同學(xué),大家對(duì)這個(gè)東西多少都知道一點(diǎn),但是其實(shí)大部分同學(xué)都是一知半解,都不是特別地懂這個(gè)東西,好像都能說出來,bias 好像是說它準(zhǔn)不準(zhǔn),然后 variance 是說它的方差大不大,但是這個(gè) bias 和 variance具體它是怎么算出來的?其實(shí)很多同學(xué)沒有很深刻地理解,在這里我們對(duì)這個(gè)東西做一個(gè)解釋。
因?yàn)榇蠹抑涝诟怕世锩?,你看?bias 和 variance 第一個(gè)想到的是什么東西?一定是概率里面的 bias 和 variance,舉個(gè)最簡單的,比如說有一組隨機(jī)概率分布的點(diǎn),你會(huì)算它的 variance,variance 就是方差,這個(gè)是很好理解的。但是,在機(jī)器學(xué)習(xí)里面它的 variance 指的是什么?
我們看一下這個(gè)公式。最上面這個(gè)就是reducible error。它本身是一個(gè)期望,大家看到期望會(huì)想到什么?期望其實(shí)指是一個(gè)概率分布的期望,如果期望不好理解的話你就理解成平均數(shù)。它既然涉及到平均數(shù)、平均值,它一定就要涉及到好多個(gè)點(diǎn),對(duì)好多個(gè)點(diǎn)算均值才有含義。
就是這個(gè)方括號(hào)里面這個(gè)玩意兒,,那么 Eout 指的是什么?就是在測(cè)試集上面的評(píng)估結(jié)果,這個(gè)應(yīng)該相對(duì)好理解,也就是說你訓(xùn)練一個(gè)模型,然后在 Eout 上面去評(píng)估。這個(gè)Eout指的就是你在測(cè)試集上的一個(gè)結(jié)果。那個(gè) g 是什么?就是你的假設(shè)集合。比如簡單講,我就選了一個(gè)邏輯回歸,這就是邏輯回歸,我要訓(xùn)練邏輯回歸了。右上角這個(gè) D 指的是數(shù)據(jù)集,就是選定一個(gè)一個(gè)訓(xùn)練數(shù)據(jù)集,我在這個(gè)數(shù)據(jù)集上訓(xùn)練出一個(gè)結(jié)果來,然后在我的測(cè)試集上評(píng)估,就得到了Eout里面的一個(gè)點(diǎn)。然后 out 集上得到的好多點(diǎn)就是這個(gè) Eout。然后再對(duì) D 做平均數(shù),取好多好多個(gè)數(shù)據(jù)集,我在每個(gè)上面訓(xùn)練一個(gè)結(jié)果,然后在測(cè)試集上評(píng)估一下,然后得到一個(gè)結(jié)果。這就是這個(gè)東西的來源。
所以說現(xiàn)在第一概念就是 bias 和 variance 它的基礎(chǔ)單位都是數(shù)據(jù)集,然后要算這個(gè)數(shù)據(jù)集上面的誤差,就是這個(gè) error,叫 reducible Error。然后下面這個(gè)可以先不用關(guān)注它是怎么出來的,然后它通過兩步計(jì)算,就把這個(gè)error 分成了兩個(gè)部分,大家可以看到左下角這個(gè)部分和右下角這個(gè)部分,這兩個(gè)東西其實(shí)就是 bias 和 variance。右邊這個(gè)是什么?我解釋一下,就是g bar,g 的平均值,x 這個(gè),它其實(shí)指的是你在所有數(shù)據(jù)集上估的那個(gè)模型再取一個(gè)平均。比如說我有 10 個(gè)數(shù)據(jù)集,我估出 10 個(gè)結(jié)果來,我最終預(yù)測(cè)結(jié)果就把這 10 個(gè)模型的預(yù)測(cè)結(jié)果平均一下,這是g bar 的含義。然后f(x) 特別好理解,f(x) 就是原始函數(shù),就是原始真實(shí)的那個(gè)函數(shù),假設(shè)它有一個(gè)真實(shí)的函數(shù)。這個(gè)東西它就是 bias。
左邊這個(gè)就是它的 variance。variance 是什么?你可以看到 bias 它是沒有外面這個(gè)E的,它是不用算均值的,但是為什么 variance 需要算?因?yàn)関ariance 是概率里面一個(gè)基礎(chǔ)概念,就是你需要把好多點(diǎn)去取方差。所以說它的計(jì)算方式就是說用在每一個(gè)集合上估出來的結(jié)果減去這個(gè)平均函數(shù)估出來的結(jié)果,然后看每一個(gè)集合,它其實(shí)衡量的是在每個(gè)數(shù)據(jù)集上估出來的結(jié)果和你平均結(jié)果是一個(gè)平均誤差,這個(gè)東西就是 variance。所以說我希望通過這段講解讓大家能夠知道 bias 和 variance 它倆究竟指的是什么,大家說起來好像都知道,一個(gè)是衡量偏差的,一個(gè)是衡量方差的,但是偏差和方差是什么?它就是這兩個(gè)含義。
下面這個(gè)圖,它是有兩個(gè)組成部分。左邊是個(gè)特別簡單的圖,它表示的是什么含義?它表示這個(gè)H是我的假設(shè)空間,是這樣一個(gè)圓圈,里面只有一個(gè)點(diǎn),因?yàn)檫@是一個(gè)極端情況,就是說我的假設(shè)空間里面只有一個(gè)點(diǎn)。我舉個(gè)例子,什么叫只有一個(gè)點(diǎn)?就是說估出我的模型,就是 g(x)=1,就是不管你給我什么數(shù)據(jù),我的模型就是這個(gè)結(jié)果,然后我對(duì)你所有的結(jié)果都預(yù)測(cè),不管你給我什么特征我就預(yù)測(cè) y 值=1,就是這樣一個(gè)模型,其實(shí)特別傻的一個(gè)模型。這個(gè)模型它的variance是多少?它的variance是0,為什么它的variance是 0?它的方差為什么是 0?因?yàn)槟悴徽摻o它什么數(shù)據(jù)集,它估的結(jié)果都是一樣的,并且和平均結(jié)果是一樣的,因?yàn)槟闼械慕Y(jié)果都是一樣的,那一平均自然也是一樣的。所以說它的方差是 0。
那么它的偏差是什么?大家可以看到右邊有個(gè) f 這個(gè)小圓點(diǎn),這個(gè)點(diǎn)和這個(gè)f中間的差距這個(gè)就是偏差。所以說這個(gè)模型的方差特別低,它就是 0,你不可能比這個(gè)更低,因?yàn)榉讲顜椒降?,所以方差不可能比這個(gè)更低了。所以這就是一個(gè)極端的 case,它的方差是 0,它的偏差一般來說會(huì)非常大。任何 x 給的y都等于 1,那你自然不會(huì)得到一個(gè)好的結(jié)果了。
右邊這個(gè)它是一個(gè)反向的例子,就是說它的假設(shè)空間點(diǎn)特別多,然后這里面有一個(gè)點(diǎn),顏色偏淺的一個(gè)點(diǎn)。右邊這個(gè)圖是什么含義?就是說假設(shè)空間特別多的點(diǎn),真實(shí)的點(diǎn),真實(shí)的那個(gè) f(x) 是右邊這個(gè)顏色不太一樣的點(diǎn),大家應(yīng)該能夠分辨出來。那么這個(gè)集合你可以看到它的方差會(huì)非常大,因?yàn)槭裁??它每一個(gè)黑點(diǎn)都代表著我給你一個(gè)數(shù)據(jù)集,你給我估一個(gè) g 出來。我給你100 個(gè)數(shù)據(jù)集你就估出 100 個(gè) g 來,這 100 個(gè) g 各不相同,所以它的方差會(huì)很大。但是它的偏差有可能會(huì)比較小,就是陰影部分覆蓋住的這些黑點(diǎn),它的平均點(diǎn)大概率其實(shí)是在顏色不一樣的點(diǎn)附近,所以它的偏差有可能會(huì)比較低,但是它的方差是非常大的。
這里核心想讓大家 get 的一個(gè)點(diǎn)是什么?就是在說機(jī)器學(xué)習(xí)模型的偏差和方差的時(shí)候,它的核心元素是一個(gè)點(diǎn),這個(gè)點(diǎn)是怎么得到的?就是在一個(gè)數(shù)據(jù)集上估出來的結(jié)果。這個(gè)數(shù)據(jù)集,因?yàn)槲覄偛胖v的是實(shí)際中的情況,理論上你是從總的那個(gè)樣本中抽的,就是我知道真實(shí)分布,然后我抽 100 個(gè)點(diǎn),再抽 100 個(gè)點(diǎn),每抽一次就得到一個(gè)數(shù)據(jù)集點(diǎn),就得到這個(gè)公式里面的一個(gè)D,后面的偏差和方差其實(shí)都是對(duì)這個(gè) D 來講的。
Eout 其實(shí)就是 g(D) 減去 f(x) 得來的。這個(gè)公式是不是看著很眼熟?這就是平均展開,a 減 b 的平方等于a 的平方加 b 的平方減去 2ab。然后為什么到下一個(gè)等號(hào)了?它減去g bar x平方,加了一個(gè) g bar x 平方,然后就出來這個(gè)東西了。后面這個(gè)又根據(jù)這個(gè)平方差公式然后得到了這個(gè)圖。
這個(gè)公式中,這個(gè) Eout 其實(shí)就是你的 g(D)減去 f(x) 得來的。這個(gè)公式你不是看著很眼熟嗎?這就是平均展開,a 減 b 的平方等于 a 的平方加 b 的平方減去 2ab。然后為什么到下一個(gè)等號(hào)了?它減去 g 一半 x 平方,加了一個(gè) g 一半 x 平方,然后就出來這個(gè)東西了。后面這個(gè)又根據(jù)這個(gè)平方差公式然后弄了這個(gè)圖。
然后再從直觀的去理解一下這個(gè)圖。這是四種情況,四種情況分別代表了高和低的方差、偏差的點(diǎn)。先看左上角這個(gè)點(diǎn),這是最牛逼的點(diǎn),它有很低的偏差,還有很低的方差。偏差低大家很好理解,就是預(yù)測(cè)準(zhǔn)確率特別好。那為什么關(guān)注方差要低?方差低就代表著你在任意一個(gè)數(shù)據(jù)集上得到的結(jié)果都特別接近在所有數(shù)據(jù)集上得到的結(jié)果,這是一個(gè)保證。這是一個(gè)什么保證?就是說在沒有辦法得到全部數(shù)據(jù)集的情況下,只得到了部分?jǐn)?shù)據(jù)集。在這個(gè)上面的結(jié)果和在所有數(shù)據(jù)集上得到的結(jié)果不會(huì)差特別多,是這樣一個(gè)保證,這就是方差,這就是穩(wěn)定的問題。
然后最不理想的情況是什么?就是右下角這個(gè)情況——偏差又大,方差又大,那這個(gè)模型就沒什么用了,既估不準(zhǔn),而且在不同的數(shù)據(jù)集上跳得還特別厲害。值得關(guān)注的是左下角這個(gè)點(diǎn),左下角這個(gè)點(diǎn)叫做 High bias、Low variance。其實(shí)這種點(diǎn)看著好像離圓心挺遠(yuǎn)的,偏差不大好。但實(shí)際上這種點(diǎn)在實(shí)際中很多時(shí)候也是有用的,因?yàn)樗幸粋€(gè)保證,有一個(gè)穩(wěn)定性保證。如果你關(guān)注的是一個(gè)趨勢(shì)的話,這樣的數(shù)據(jù)集其實(shí)也是ok的,因?yàn)槟阒浪€(wěn)定地離你的圓心就是這么遠(yuǎn),但是你不管拿什么數(shù)據(jù)它都是這么遠(yuǎn),所以這種模型也是ok的。
然后看右上角這個(gè)點(diǎn),可以看到它散得非常厲害,它的方差很高,它的偏差還是比較低的,這種點(diǎn)看起來好像也蠻好,但實(shí)際情況中這種模型不是特別好的點(diǎn),因?yàn)槟愀静恢滥隳硞€(gè)數(shù)據(jù)集能映射到哪個(gè)點(diǎn)上去,它沒有一個(gè)保證。所以我們?cè)诂F(xiàn)實(shí)中其實(shí)很多情況下,我們后面會(huì)講這個(gè)東西和算法能力,和正常化是有關(guān)系的。就是為了要,不管你準(zhǔn)不準(zhǔn)先不說,你不要太散,在工業(yè)中應(yīng)用我們還是很注重穩(wěn)定性的。
這個(gè)大家下去可以再去理解一下,我們后面推薦的書里也會(huì)講這個(gè)東西。
然后我們就講到交叉驗(yàn)證,剛才講這個(gè) bias variance,可能有的同學(xué)會(huì)講這個(gè)東西也就是面試會(huì)考一考,實(shí)際中好像也沒有什么用處。我們下面講一下它在實(shí)際中有什么用處。它的實(shí)際用處就是交叉驗(yàn)證,為什么做交叉驗(yàn)證?交叉驗(yàn)證的方法我就不重復(fù)了,大家應(yīng)該知道,就是說你把數(shù)據(jù)分成 k 份,每次留一份出去,剩下的訓(xùn)練,你可以預(yù)測(cè),然后把結(jié)果拿起來,然后去評(píng)估一下。但有沒有想過你這么評(píng)估,評(píng)估的是什么東西?你評(píng)估的是什么東西?其實(shí)你評(píng)估的就是 bias 和 variance 的一個(gè)拆分,它就是 bias 和variance 拆解的一個(gè)直接應(yīng)用。
流程我這兒簡單寫了一下,就是將數(shù)據(jù)劃分為 k 份,每次留出一份作為測(cè)試,其余作為訓(xùn)練,記得到的誤差為 ei,ei 就是第 i 份的,你把第 i 份去做測(cè)試的時(shí)候得到的誤差,然后就得到了k份測(cè)試結(jié)果。你的 bias 是什么?就是每一份誤差的一個(gè)均值,這個(gè)很好理解,這就是你的 bias。你的 variance 是什么?把這 k 個(gè)誤差當(dāng)做 k 個(gè)點(diǎn),用統(tǒng)計(jì)學(xué)的方法算一下它們的方差,這就是它的 variance,這就能很好地評(píng)估你這個(gè)模型在這個(gè)數(shù)據(jù)集上它的穩(wěn)定性如何,它的偏差如何,這就是這種方差、偏差分解在實(shí)際中的一個(gè)最典型的應(yīng)用。
可能有的同學(xué)經(jīng)常用交叉驗(yàn)證,但其實(shí)對(duì)它的深層次含義沒有過太多的考慮,今天就給大家建立這樣一種聯(lián)系,其實(shí)是解決了兩個(gè)問題,一是偏差、方差的分解究竟在現(xiàn)實(shí)中有什么用;二是反過來,這個(gè)交叉驗(yàn)證它的理論知識(shí)是什么,做這樣一件事情它的意義是什么。
其實(shí)如果你不關(guān)注穩(wěn)定性的話,你就直接再一個(gè)數(shù)據(jù)集上做一個(gè)測(cè)試就ok了,你得到的 bias 如果數(shù)據(jù)量大也是準(zhǔn)的,但是你如果不劃成k份,你做交叉驗(yàn)證你就沒法知道它的穩(wěn)定性是多少,我覺得這個(gè)應(yīng)該說得比較清楚。
在上一步我們已經(jīng)建立了一個(gè)方法,就是說我怎么評(píng)估一組模型的好壞?但是剛才我們經(jīng)歷了是如何評(píng)估一個(gè)假設(shè)集合的好壞,接下來還要想辦法去評(píng)估具體一個(gè)模型,比如我們選定了一個(gè)袋子,下面從袋子里面選球,這個(gè)球的好壞怎么去評(píng)估。所以說第一步需要考慮的,我們這個(gè)reducible一共不就兩步嗎,一個(gè)bias,一個(gè)variance,我們?nèi)绾螠p少bias?在考慮如何減少bias之前,首先要考慮如何評(píng)價(jià)bias,還是剛才那個(gè)理念,在改進(jìn)它之前先要考慮好如何評(píng)價(jià)它。所以說我們?cè)谌粘I钪杏玫脑趺丛u(píng)價(jià)bias,其實(shí)就是各種損失函數(shù),你的loss function方程是什么?剛才有同學(xué)說Cross Entropy。定義出來然后去優(yōu)化它,這是我們后面會(huì)講的一個(gè)優(yōu)化方法。
那么如何減少 variance?就是正則化,這里面就有一個(gè)延伸問題,就是常用的正則化方法,比如說 L2 正則、L1 正則,L1 正則很暴力,就把一些它認(rèn)為沒有用的干掉了,L2 正則它是限制一些參數(shù)的大小。這里面其實(shí)可以有個(gè)問題給大家想想,為什么限制參數(shù)的大小以及限制參數(shù)的數(shù)量就可以減少variance?這個(gè)問題其實(shí)和我剛才講的從假設(shè)集合那個(gè)角度去考慮它是有關(guān)系的,我們剛才有一個(gè)比較極端的圖,我們?cè)倩厝タ匆幌?。它左邊是一個(gè)極端小的假設(shè)集合,右邊是極端大的一個(gè)假設(shè)集合,從一個(gè)很粗的角度去理解,就會(huì)發(fā)現(xiàn)這個(gè)假設(shè)集合里面的東西如果特別少的話,它的穩(wěn)定性就特別好。因?yàn)橐还部蛇x的就一個(gè),極端情況下,那當(dāng)然很穩(wěn)定了。但是如果你可選的東西特別特別多,那你的東西自然就不會(huì)很穩(wěn)定。所以說我們提供一個(gè)特別粗,這不是一個(gè)理論證明的角度去理解它。
那么參數(shù)數(shù)量越少,取值越被限制,它的變化的可能性就越少,那么它自然也就越穩(wěn)定。所以說這就是正則化為什么能夠約束 variance,為什么能夠起到穩(wěn)定模型的一種理解角度,其實(shí)就是我要減少你的假設(shè)集合的大小,不能讓你像孫猴子一樣到處跑,那你就不穩(wěn)定了,我這次抓你在五指山,下次抓你上西天了,那就不好。把你放在一個(gè)籠子里,這個(gè)籠子就這么一畝見方,怎么抓你也不會(huì)跑出這個(gè)東西里頭,所以它就是減少模型復(fù)雜度。模型復(fù)雜度其實(shí)特別簡單,就是參數(shù)越少,取值范圍越小,這個(gè)東西就越好。
那么定義就是這么一個(gè)定義方法。比如說在樹模型里面可能就不是說參數(shù)大小,那可能就是剪枝。剪枝是干什么?剪枝其實(shí)也不是讓你跑太遠(yuǎn)。比如每一層 2 分裂,每一層 2 分裂,就分裂很多很多,但是就不讓你分裂那么多,因?yàn)榉至训迷蕉?,代表著越能生出很多不同種類的數(shù)來,當(dāng)然就飄得很厲害了,這次抓你在這兒,下次抓你在那兒。所以說讓你穩(wěn)定,就能減少方差。
優(yōu)化方法,其實(shí)好多時(shí)候偏差和方差是在一起優(yōu)化的,后面會(huì)講到。
OK,講到這兒,我們又往前走了一步,我們又知道了具體,我們剛才講的如何衡量損失,如何衡量一個(gè) error,現(xiàn)在我們又知道了如何分別去衡量它倆,如何分別去衡量這兩個(gè)東西。
我已經(jīng)定義好的假設(shè)集的好壞,又建立了定義一個(gè)模型的好壞,我們?cè)趺慈サ玫揭粋€(gè)比較好的東西?最理想的方法就是所謂的解析解,就是我們上學(xué)時(shí)候?qū)W的比如說二次方程、三次方程。這里舉一個(gè)例子,就是最小二乘法。如果數(shù)據(jù)量不是很大的話,其實(shí)可以一步,單變量的一個(gè)線性模型的話,你可以一步就算出它的模型它的解來,它的 β0 就等于這個(gè)東西,它的 β1 就等于這個(gè)東西。但是這個(gè)東西太美好了,大部分情況下是得不到的。所以說我們還有一種方法,現(xiàn)在用得更多的方法,就是一個(gè)梯度法,尤其到了神經(jīng)網(wǎng)絡(luò)這一塊,感覺可能都是梯度到處走。梯度法的核心思想就是開局一個(gè)點(diǎn),后面全靠挪,我就空降把你扔到一個(gè)點(diǎn)上,然后你就去找我究竟應(yīng)該去哪里。
它的核心思想就是我每走一步我都要比上一步更接近目標(biāo),它就是這么一個(gè)思想,就是一個(gè)很樸素的思想,但是當(dāng)它大規(guī)模推廣開以后會(huì)有非常好的效果。
我們選講一個(gè),就是大家最常用的梯度下降的方法。梯度下降其實(shí)也是一個(gè)很直觀的方法,但是還是這樣,如果再深究一句為什么梯度下降?可能我們還是需要再有一點(diǎn)點(diǎn)比較深入的想法,一些深入的理解在里頭。
首先第一步,我們是有這樣一個(gè)結(jié)果,θ0,θ 是我們的參數(shù),就是你要估的參數(shù),就是權(quán)重,最簡單的理解。我們可以把它做一個(gè)約等于。這個(gè)東西是什么?這個(gè)東西其實(shí)就是泰勒展開,就是最簡單的泰勒展開,也就是它在 x0附近的泰勒展開,就是 f(x0) 加上 θ 減去 θ0 乘以它的一個(gè)梯度,你看這個(gè)梯度開始出現(xiàn)了,這是它第一次限時(shí)。到這一步你看沒有建立梯度,我為什么要往梯度的負(fù)方向走這樣一個(gè)概念。然后做一個(gè)變換,把右邊這個(gè) θ 減去 θ0 變換成 n 乘以 v,因?yàn)?θ 減去 θ0 是一個(gè)向量,一個(gè)向量把它取標(biāo)準(zhǔn)化,v 是標(biāo)準(zhǔn)向量,標(biāo)準(zhǔn)向量是什么?就是它的模等于1的這樣一個(gè)向量,然后n把它常數(shù)提出來,成了這樣一個(gè)形式。
然后我再做一個(gè)變換,把 f(θ) 減去 f(θ0),然后就等于右邊這個(gè)東西。大家看到最后有個(gè)小于 0,小于 0 是什么意思?我要要求 f(x) 減去 f0,我們剛才講的開局一個(gè)點(diǎn),后期全靠挪,但是有一個(gè)要求,必須每一步挪都比上一步更接近最優(yōu)值。所以 f(x) 代表的是什么?f(x) 代表的就是誤差,代表你的損失函數(shù),loss 當(dāng)然越小越好,損失越小越好,所以 f(x) 減去 f(x0) 我要求它是小于 0 的。所以說到這一步你可以怎么理解?就是 θ0 是我當(dāng)前點(diǎn),是我當(dāng)前這組參數(shù),就是開局這個(gè)點(diǎn),你空降到一個(gè)點(diǎn)了。然后你下一步走的這個(gè) θ,我就一個(gè)要求,希望你要比我的 θ0 導(dǎo)致的誤差數(shù)要低,就是一個(gè)非常樸素的要求。然后我們把右邊這個(gè)約一下,把這個(gè)常數(shù)干掉,就變成了v乘以這個(gè)梯度小于 0 了。
ok,下一步就是比較神奇的事情發(fā)生了,v 和后面這個(gè)梯度你看著它嚇唬人,但是它本身也是個(gè)向量,如果你是一維它就是一個(gè)常數(shù),如果是多維的、高維的它就是個(gè)向量。
那么我怎么樣要求它乘它小于 0?。我們說回這個(gè)向量相乘,向量相乘小于 0 的條件是什么?向量相乘和余弦是有非常緊密關(guān)系的,簡單來講,兩個(gè)向量的夾角如果大于90度,它們倆向量相乘就小于 0,如果是小于 90 度就是大于 0 了。所以說我要求小于 0,我還要求你小于 0 得越厲害越好,就代表我這一步走得比你原來更接近最優(yōu)值,更小,小得更厲害,那我就要你們?nèi)シ聪?。比如說如果A是你的梯度的話,那我的v一定要是 B 方向,它倆乘起來這個(gè)值是最小的,對(duì)應(yīng)的是 f(θ) 減去 f(θ0) 最小。然后再經(jīng)過一些常數(shù)的變化,就得到這樣一個(gè)結(jié)果。
如果我們不考慮常數(shù)的話,那么v就等于負(fù)的 f(θ0) 的梯度,負(fù)梯度方向。然后由于 v 是單位向量,所以我要除一個(gè)它的模。后面再把這個(gè)n加回來,因?yàn)槌?shù)和常數(shù)是可以合并的,θ 就變成 θ0 減去這個(gè)東西,這個(gè)其實(shí)就是非常地樸素。有的同學(xué)說 learning rate 要變化,是要變化,learning rate 反映在哪里?反映在這個(gè)常數(shù)里面,為什么要 learning rate?這是另一個(gè)小的知識(shí)點(diǎn),learning rate 其實(shí)是梯度下降能夠成立的一個(gè)基本原則。learning rate 如果太大,步子邁太大,它的展開就不成立,它的展開的前提是在 x0 附近的一個(gè)展開,如果步子太大你就已經(jīng)不是附近了,而且learning rate 還有比較多的因素在里面,但是作為今天入門課程里面就不講了。
所以你看到雖然是負(fù)梯度方向,是一個(gè)看起來很直覺,因?yàn)楹芏嗬蠋煻紩?huì)給你講比喻,就像爬山一樣,往這個(gè)山的梯度的負(fù)方向走就對(duì)了,它很好直觀理解。但是你如果真的想深刻地理解它為什么,還是要把它掰開了揉碎了去看一看。所以這個(gè)流程,我們給大家介紹最簡單的一個(gè)梯度下降的怎么來的,就是從它的泰勒展開,一步一步。其中就兩個(gè)核心點(diǎn),一個(gè)是它的梯度,一個(gè)就是負(fù)方向,就是兩個(gè)向量相反的方向是乘積最小的,負(fù)向最小的。ok,這就是一個(gè)優(yōu)化方法。
優(yōu)化方法有了之后你能夠得到什么?優(yōu)化方法有了以后你就能得到你夢(mèng)寐以求的模型了,經(jīng)過剛才那么一長串,優(yōu)化完了,你就會(huì)得到具體的參數(shù),w1 是多少,w2 是多少,到這兒就完了,模型就出來了。但是完了嗎?其實(shí)還沒有完,為什么?還有個(gè)決策理論在里頭,決策理論是什么東西?我舉一個(gè)簡單的例子。
模型擬合不是最終目的,擬合出模型來就像你買一個(gè)東西,你最終是要用它的。模型講一個(gè)最簡單的應(yīng)用,它有兩種應(yīng)用,一種是排序,一種是分類,比如說排序典型的 learning to rank 大家都在用,分類不用說,你做反欺詐,這是好人這是壞人。
這里面就有一個(gè)問題,為什么要按照 CTR 的高低排序,從高到低,為什么從高到低排序?肯定要從高到低排,要不然還能從低到高排?這里面大家的直覺是對(duì)的,因?yàn)楹芏鄶?shù)學(xué)理論用了就用了,它和直覺是一樣的,這是非常好的一件事情。還有比如說分類,為什么書上就講分類閾值設(shè)為 0.5,這又是一個(gè)什么意思?其實(shí)背后都是有更深刻的理論在里頭。
比如說,其實(shí)大家可以簡單算算就可以得到一個(gè)結(jié)果,就是按照CTR從高到低排序,它得到的結(jié)果是期望總點(diǎn)擊數(shù)是最大的。如果說你的目標(biāo)就是期望總點(diǎn)擊數(shù),那么你就按 CTR 排序,它從高到低排就是這個(gè)結(jié)果,它得到的就是期望總點(diǎn)擊數(shù)是最大的,這就對(duì)齊了你的一個(gè)目標(biāo)。
分類閾值對(duì)應(yīng)的是一個(gè)什么概念?就是一個(gè)稍微復(fù)雜一點(diǎn)的理論,叫做貝葉斯決策理論的其中一部分,我們這里給大家簡單介紹一下。
左邊是公式,右邊是圖。我們做一個(gè)分類模型,設(shè)一個(gè)閾值,一定會(huì)有錯(cuò),我把閾值設(shè)為 0.5,我肯定會(huì)有分錯(cuò)的,有的把應(yīng)該是正的分成負(fù)的,應(yīng)該是負(fù)的分成正的。右邊這個(gè)圖里大家可以看到有紅色的一部分,右下角還有一個(gè)灰色的部分,這分別你可以理解為代表是兩類錯(cuò)誤,一類錯(cuò)誤是原來是正的你分成了負(fù)的,一類錯(cuò)誤是應(yīng)該是負(fù)的你分成了正的。
我們可以稍微看一眼左邊這個(gè) P(error),就是錯(cuò)誤概率是什么?這兩邊面積加起來,積分積起來。那么我自然就要想,那怎么能把錯(cuò)誤最小化?那么對(duì)應(yīng)到這個(gè)圖上來講,就是想要這個(gè)面積是最小的,我們先不管理論了,就是紅色面積加灰色面積要得到最小。大家動(dòng)用一下你的空間想象能力你就會(huì)發(fā)現(xiàn),這有個(gè)小三角,兩條線中間夾了個(gè)小三角,這個(gè)東西我要讓它更小。你發(fā)現(xiàn)這個(gè)線往左移一移,紅色面積再往左走一走,走到這個(gè)交叉點(diǎn)這兒,你會(huì)發(fā)現(xiàn)這個(gè)時(shí)候它面積最小。這個(gè)時(shí)候?qū)?yīng)的是什么?就是你把上面這個(gè)面積就干掉了,上面這個(gè)面積是什么?其實(shí)就是 reducible error,我們剛才講了半天,說 bias、variance,其實(shí)對(duì)應(yīng)的就是這個(gè)東西,就對(duì)應(yīng)到了你的reducible error。那么你的模型如果把 reducible error 干到最低,那你模型的Error就是最低的,你的error就只有下面這兩片小的面積。
所以說每一個(gè)分類閾值其實(shí)就對(duì)應(yīng)了這樣一條豎直的線,你把它插在這個(gè)地方你就變?yōu)闀?huì)有兩個(gè) error 出現(xiàn),如果你插在最中間這條線上,其實(shí)就是對(duì)應(yīng)的 0.5 的分類閾值,0.5 的分類閾值對(duì)應(yīng)的就是這條線。那么這個(gè)對(duì)應(yīng)的其實(shí)是一個(gè)什么含義?它對(duì)應(yīng)的含義是,把正例分錯(cuò)和負(fù)例分錯(cuò),我付出的代價(jià)是一樣的。但是如果說,比如說你在一些 case 里面,你把正例分成負(fù)例代價(jià)會(huì)非常嚴(yán)重。所以說你每個(gè)分的閾值對(duì)應(yīng)的都是這上面的一條線,一條豎線,0.5 對(duì)應(yīng)的就是交叉的這個(gè)線,在這個(gè)計(jì)算公式下面。如果你把閾值往高了提,紅色面積增大,灰色面積減小,那就是某一類錯(cuò)誤會(huì)增大,某一類錯(cuò)誤會(huì)減小。就是如果 0.5 的分類閾值對(duì)應(yīng)的就是它倆的代價(jià)是相等的,犯第一類錯(cuò)誤和犯第二類錯(cuò)誤都可以接受,同等代價(jià),但是很多場(chǎng)景,比如金融場(chǎng)景,寧可誤殺一個(gè)不能放過一個(gè),這時(shí)候就不是 0.5 的分類閾值了,左邊這個(gè)復(fù)雜的公式就需要發(fā)生一個(gè)變化,會(huì)得到的就是另外一個(gè)結(jié)論。
這就是從模型得到?jīng)Q策的一個(gè)東西,因?yàn)樨惾~斯這個(gè)決策理論稍微有一點(diǎn)復(fù)雜,尤其是貝葉斯錯(cuò)誤率這個(gè)概念。
這個(gè)時(shí)候建立了決策理論,建立了模型,訓(xùn)練出模型來,拿它去做決策。其實(shí)到這個(gè)時(shí)候,一條相對(duì)完整的脈絡(luò)就有了。我其實(shí)就是把剛才講的這些東西串了一遍。我們要知道問題的本質(zhì)是數(shù)據(jù)擬合,然后需要出一個(gè)假設(shè)集合,比如說這就是大家經(jīng)常問的,面試時(shí)候問的,給你一個(gè)問題你怎么解?你用邏輯回歸,還是決策樹?其實(shí)就在問假設(shè)集合是什么。怎么評(píng)估假設(shè)集合的好壞?其實(shí)就是說假設(shè)集合的好壞是 VC 維和偏差方差分解。這就是為什么我們經(jīng)常說線性模型非常好?因?yàn)樗貏e穩(wěn)定,其實(shí)就是說它的方差特別低。
這個(gè)東西怎么映射到現(xiàn)實(shí)的應(yīng)用中?那就是交叉驗(yàn)證,交叉驗(yàn)證不僅能夠得到誤差,還能夠得到你的方差,就是在不同數(shù)據(jù)集上面去跑,得到一個(gè)什么結(jié)果。我們還知道了一點(diǎn),就是說方差低的一個(gè)最大的實(shí)惠,就是說有一個(gè)保證,保證你不管怎么樣得到一個(gè)數(shù)據(jù)集,它的評(píng)估結(jié)果都和你得到所有數(shù)據(jù)集的評(píng)估結(jié)果相差不會(huì)太多,這是非常好的一個(gè)性質(zhì)。
然后我們又知道了怎么在一個(gè)模型里面具體地衡量方差和偏差,那就是定義損失函數(shù)來衡量偏差,用智能化的方法來控制方差。那么就知道了正則化究竟是來干什么的,然后我還簡單聊了一下為什么控制參數(shù)的個(gè)數(shù)和參數(shù)的取值,以及樹的深度的這些東西能夠起到減少方差的作用,因?yàn)樗拗屏思僭O(shè)集合的數(shù)據(jù)。你在這兒建立好了評(píng)價(jià)指標(biāo)之后,終于可以去優(yōu)化它了,那就有了各種優(yōu)化方法,比如說基于梯度的方法,還有一些基于置信域的方法等等,我們就不展開了。
得到模型之后,你要拿它去用,無論是去做排序,還是做分類,拿它用的時(shí)候背后一定會(huì)有一個(gè)思想、原則在里頭,就是為什么這么做閾值?我為什么從高到低排序?有很多這樣的思想在里頭。
到這里就建立了一個(gè)從最初拿到數(shù)據(jù)的假設(shè)開始,一直到最終決策這樣一個(gè)鏈條??梢赃@么講,就是你在機(jī)器學(xué)習(xí)中遇到的絕大部分的知識(shí)點(diǎn)都可以映射到這個(gè)鏈條當(dāng)中的某一個(gè)環(huán)節(jié)。這是為什么我們今天要從這個(gè)維度去講這些事情。
有了這個(gè)鏈條之后,還是之前強(qiáng)調(diào)的那一點(diǎn),你能夠系統(tǒng)化地去學(xué)習(xí)一個(gè)東西。那么這里介紹幾點(diǎn),就是如何構(gòu)建你自己的知識(shí)網(wǎng)絡(luò)。
第一,一定要謹(jǐn)慎對(duì)待“狗熊掰棒子式”的學(xué)習(xí),因?yàn)樘貏e容易忘,就是理解不深刻,總是東一個(gè)點(diǎn)西一個(gè)點(diǎn),你沒有辦法建立這個(gè)知識(shí)點(diǎn)之間的有機(jī)聯(lián)系。說遠(yuǎn)點(diǎn)就談到碎片化閱讀這件事,碎片化閱讀我覺得它不適合所有的領(lǐng)域,包括機(jī)器學(xué)習(xí)你可以碎片化閱讀,但前提是什么?你一定要建立起一個(gè)相對(duì)完整的知識(shí)體系,然后再在里面,碎片化閱讀是什么?就是貼葉子,枝干已經(jīng)有了,我這兒貼一個(gè)葉子,那兒貼一個(gè)葉子,慢慢的就有了這整個(gè)的知識(shí)體系了。
第二,MVP式擴(kuò)展學(xué)習(xí)法。MVP 有的同學(xué)知道,就是最小可行產(chǎn)品。就是建立一個(gè)最小的可行的機(jī)器學(xué)習(xí)體系,比如我剛才講的,你只知道一種學(xué)習(xí)算法,你就先只學(xué)邏輯回歸,然后圍繞邏輯回歸你把我剛才那條鏈條你都打通了,就構(gòu)造出了一個(gè) MVP 版的東西。它有點(diǎn)像什么?有點(diǎn)像大家上高中數(shù)學(xué)的時(shí)候,老師講題,數(shù)學(xué)老師一般他會(huì)先講一個(gè)最簡單,根據(jù)定義最直觀好理解的做法,讓所有同學(xué)都能理解,然后他才會(huì)講一個(gè)所謂的高階做法,讓這些所謂的尖子生有一個(gè)取巧的辦法去做。這里面其實(shí)也是一樣,一定要首先建立一個(gè) MVP 的鏈條,麻雀雖小五臟俱全的這樣一個(gè)鏈條,然后再針對(duì)性地去補(bǔ)充,比如說你發(fā)現(xiàn)我只會(huì)一個(gè)模型不行,我去學(xué)模型,但是這時(shí)候你知道,它是落在了假設(shè)集合里頭,我去補(bǔ)充模型。然后補(bǔ)充模型的時(shí)候就會(huì)講,我這個(gè)模型它的 bias 怎么樣,variance 怎么樣,它的優(yōu)化方法是什么。然后你看到比如說梯度下降它是個(gè)優(yōu)化方法,比如置信域也是個(gè)優(yōu)化方法,你就能知道你每個(gè)知識(shí)點(diǎn)落在什么地方去了。
第三,看到新知識(shí),擴(kuò)展到對(duì)應(yīng)的位置,不要讓它落單。比較忌諱你學(xué)零散的知識(shí)點(diǎn),但是不能讓它落到某一個(gè)具體的系統(tǒng)位置里面去。
就是這樣一些學(xué)習(xí)方法,有的同學(xué)在新學(xué)這個(gè)行業(yè)的時(shí)候,會(huì)感覺知識(shí)點(diǎn)特別多,感覺學(xué)不完的樣子。事實(shí)確實(shí)也學(xué)不完,但是一定要知道自己學(xué)的是哪一塊知識(shí),然后也知道自己哪強(qiáng)哪塊弱,不至于看到什么東西都想學(xué)。這就是自己的一個(gè)知識(shí)網(wǎng)絡(luò)。
算法工程能力入門
后面簡單說一下工程的問題。因?yàn)槲抑霸谛U忻嬖嚨臅r(shí)候,聊過一些東西,就是一些學(xué)生朋友把這個(gè)簡歷上寫得其實(shí)還蠻漂亮的,就是模型各方面都懂,但是讓大家寫一些題的時(shí)候,確實(shí)容易會(huì)差一點(diǎn)。一些簡單的,都談不上是算法題目,一些簡單的面試題目都寫得不是特別好。然后也有同學(xué)在公眾號(hào)后臺(tái)問我怎么學(xué)算法這些東西。其實(shí)我相信大家學(xué)算法的能力是很強(qiáng)的,你有這個(gè)驅(qū)動(dòng)力,但是工程方面還是要加強(qiáng)。
這里放了一張圖,這個(gè)圖是一個(gè)特別簡單的圖。上面那個(gè)圖可以說你的計(jì)劃從 A 到 B,騎著小車過去,下面是現(xiàn)實(shí),你會(huì)發(fā)現(xiàn)好多好多坑。這其實(shí)代表一定程度上代表算法工程師的一個(gè)窘境。一開始你覺得我學(xué)會(huì)模型了,我理論學(xué)得挺明白的,就可以走上人生巔峰了。但其實(shí)你會(huì)發(fā)現(xiàn)你真的到工作中做的時(shí)候,這些東西坑非常多,你一落地會(huì)有很多東西需要去加強(qiáng),需要去夯實(shí)。
工程能力是很大的一個(gè)概念,它是非常大的一個(gè)概念,因?yàn)槲沂亲鏊惴ú呗远嘁稽c(diǎn),但是我也會(huì)接觸不同工程的東西,所以從我的角度去跟大家分享一下這個(gè)概念。它分兩方面,一方面是所謂的離線工程,它的核心內(nèi)涵是什么?就是支持快速、可維護(hù)、可規(guī)模化、可擴(kuò)展的實(shí)現(xiàn)算法??赡芤婚_始你到一個(gè)公司,領(lǐng)導(dǎo)交給你這個(gè)小數(shù)據(jù)做一個(gè)模型,這算第一步,工程化,但是后面如果你是在一個(gè)業(yè)務(wù)快速增長的環(huán)節(jié)上,它一定會(huì)快速地需要很多模型在里面,會(huì)加很多的特征,加很多的樣本,加很多的問題在里頭,所以就要求快速、可維護(hù)、可規(guī)?;⒖蓴U(kuò)展地去做很多問題。具體可能需要你做一些數(shù)據(jù)流的 pipeline,還要求你有一些邏輯抽象復(fù)用能力,最重要的還需要一個(gè) Debug 能力。
數(shù)據(jù)流 pipeline 這塊其實(shí)現(xiàn)在工具也比較多,像 Spark 上面有很多實(shí)現(xiàn)比較好的東西,相當(dāng)于牛人已經(jīng)給你實(shí)現(xiàn)出很多東西來了,可以現(xiàn)成去用。
抽象邏輯復(fù)用能力,它和你做不做算法沒有關(guān)系,這是一個(gè)工程師的基本素養(yǎng),包括這個(gè) Debug 能力是一個(gè)工程師的基本素養(yǎng)。
我覺得這方面有的同學(xué)如果純學(xué)理論,可能對(duì)這塊有點(diǎn)過于不重視了,但是在現(xiàn)實(shí)中如果抽象復(fù)用能力不夠的話,你會(huì)發(fā)現(xiàn)你每天都在寫一樣的東西。然后 Debug 能力不足那就更不用說了,尤其越復(fù)雜的模型,你結(jié)構(gòu)不對(duì),那你很難去調(diào)試到一個(gè)合理的結(jié)果。這塊能力我還是希望,尤其是在校的同學(xué),你一定要加強(qiáng)你的基礎(chǔ)編程能力,一定要知道算法工程師他是一個(gè)偏正短語,他的核心詞還是工程師,他的核心還是工程師,你一定要是一個(gè)合格的工程師,你才能是一個(gè)算法工程師,一定不能只看算法倆字,不看工程師,只看算法那叫研究員。
工程能力講的是在線工程能力,比如我們做一個(gè)模型它是要上線的,尤其比如推薦,可能需要一個(gè)在線實(shí)時(shí)的API去預(yù)測(cè),那么它的核心訴求是什么?支持一個(gè)高效、高可用、穩(wěn)定、可擴(kuò)展地提供服務(wù),企業(yè)里面都是這樣一些要求,你要實(shí)時(shí)預(yù)測(cè)&訓(xùn)練服務(wù)、實(shí)時(shí)數(shù)據(jù)讀取&更新、離線在線數(shù)據(jù)同步等等這些東西,這些也都是工程的同學(xué)需要去做的。但是作為一個(gè)算法同學(xué),你為什么也要適當(dāng)去了解這些東西?因?yàn)楫吘顾暇€的是你做的東西,如果你做這個(gè)東西的時(shí)候完全不考慮說對(duì)方怎么去用,其實(shí)問題到時(shí)候還會(huì)有很多反過來去報(bào)復(fù)你的。
離線和在線的考慮會(huì)有很大的不一樣,典型的有些分歧比如計(jì)算量,離線我們習(xí)慣于批量的計(jì)算,你算很大量的東西都沒關(guān)系,在線的話它會(huì)每次只算一條,它會(huì)對(duì)這方面要求比較高。還有復(fù)雜性、擴(kuò)展性,要求其實(shí)都不一樣。離線的問題出了問題怎么都好說,但是在線出了問題就很難講了。
這里給大家一個(gè)簡單的建議,如何鍛煉工程能力?
第一,勤奮+懶惰。勤奮是指你一定要勤于動(dòng)手,看 paper,看算法,但是一定要勤于動(dòng)手。懶惰指的是什么?就是不能太勤于動(dòng)手,要做適當(dāng)?shù)某橄?,適當(dāng)?shù)膹?fù)用。因?yàn)槲以?jīng)有一些同學(xué)就是特別勤奮,100 個(gè)重復(fù)的任務(wù)他真的就提交 100 次,他沒有想辦法去做一些抽象,做一些復(fù)用,這個(gè)就是太勤奮了,作為工程師一定要有一定的懶惰,然后去抽象它。所以思考要勤奮,動(dòng)手要適當(dāng)?shù)貞卸琛?/p>
實(shí)踐其實(shí)特別簡單就是用自己的真實(shí)數(shù)據(jù)設(shè)計(jì)一個(gè)真實(shí)的場(chǎng)景,然后自己搭建一個(gè)流程,然后給自己不斷地加戲,演自己的對(duì)手戲,去不斷地鍛煉。
這里舉一個(gè)例子,比如在線工程,這個(gè)其實(shí)大家都可以去做,你是學(xué)生,你是做算法,都可以去做這樣一個(gè)實(shí)驗(yàn)。比如你去獲得一個(gè)中等以上規(guī)模數(shù)據(jù)集,比如說你去爬一堆垃圾郵件數(shù)據(jù)集,這個(gè)網(wǎng)上還是蠻好獲取的。然后你離線隨便拿什么東西訓(xùn)練一個(gè)模型都o(jì)k。然后你嘗試著搭建一個(gè)在線服務(wù),它要求什么?我用郵件 ID 去請(qǐng)求,然后你去返回給我它是垃圾郵件的概率。這里面涉及到什么技術(shù)點(diǎn)?如何實(shí)時(shí)獲取特征?因?yàn)槟銈鞯氖?ID,你需要實(shí)時(shí)獲取特征。你得到特征以后如何去獲取實(shí)時(shí)的權(quán)重?然后你如何去計(jì)算實(shí)時(shí)的概率?這些問題你在離線做的時(shí)候,可能調(diào)一個(gè)包就完成了,但是你在線做的時(shí)候,很多事情都是需要你自己去做的,你自己把這個(gè)東西從頭到尾做一遍,哪怕你就做一個(gè)小 demo,你就知道了我做這些東西需要考慮什么點(diǎn)。那么你在以后和工程同學(xué)配合的時(shí)候,你就知道你應(yīng)該如何更好地去服務(wù)他,去配合他。
如果你覺得這個(gè)太小意思了,我做得很爽,那么你再給自己加一點(diǎn)戲。比如說使用多種類型的特征類型,比如有標(biāo)簽類的,有向量類的,有統(tǒng)計(jì)量,你看一下你還能不能很好地實(shí)時(shí)地去處理它。然后你再引入很多特征工程的方法,特征交叉、按類細(xì)分等等,你看還能不能處理好它。然后再模擬一個(gè)高并發(fā)的請(qǐng)求環(huán)境,比如前面都處理得特別好,那很棒,但是你會(huì)發(fā)現(xiàn),一次請(qǐng)求1秒鐘,太慢了,模擬高并發(fā)請(qǐng)求,服務(wù)還扛不扛得住?發(fā)現(xiàn)扛不住了,你看瓶頸在哪里,如何做優(yōu)化。這其實(shí)是一個(gè)很好的例子,如果是在校學(xué)生的話,你可以有充足的時(shí)間去實(shí)現(xiàn)這樣一個(gè)東西,來去打磨一下你的工程能力,其實(shí)你也可以找找感覺,我究竟喜歡做工程還是喜歡做模型。樂趣其實(shí)是不同的,大家也不要覺得現(xiàn)在這個(gè)世界上只有算法工程師值錢,其實(shí)根本不是,后臺(tái)工程師也非常值錢。
-
阿里巴巴
+關(guān)注
關(guān)注
7文章
1617瀏覽量
47343 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8428瀏覽量
132835
原文標(biāo)題:一次性掌握機(jī)器學(xué)習(xí)基礎(chǔ)知識(shí)脈絡(luò) | 公開課筆記
文章出處:【微信號(hào):rgznai100,微信公眾號(hào):rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論