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