機器學習基礎——帶你走近機器學習

摘要:本文介紹了機器學習的基礎知識以及在企業中的一些應用。通過本文的學習可以快速了解機器學習的基本概念、監督學習以及PAC學習理論,並了解機器學習在實際應用中現狀。

演講嘉賓介紹:淘寶技術部——永叔。

本次直播視頻精彩回顧,戳這裡!

本節課代碼及講義下載,戳這裡!

本次分享主要分為以下四個部分:

1.ML技術都用在哪裡?

2.最常用的LR是什麼鬼?

3.ML工程師每天都在幹什麼?

4.DL在企業里都怎麼玩?

一、ML技術都用在哪裡?

以一次搜索引擎檢索為例,在搜索框中輸入關鍵詞「承德旅遊」。可以發現,在搜索結果中既有自然搜索的結果也有sponsored search的廣告結果。在這樣一次檢索的背後發生了什麼呢?

下圖是一個檢索的示意圖。最前端是WEB服務的網關,比如Nginx,Tengine這樣的伺服器。輸入的查詢詞是「承德旅遊」。首先,它會進入高級檢索模塊,其中包含很多步驟,比如query分析、query變換、query規約、關鍵詞擴展等。找到了query召回信號之後,進入基礎檢索進行召回,比如廣告主文案的召回。下圖最下部分是檢索索引部分。眾所周知,在sponsored search中,廣告的排序是和廣告在展示後是否會被用戶點擊是直接相關的。但決定廣告在一個隊列里時的先後順序時,就需要用到機器學習。這是一個典型的二分類,即點擊或不點擊。點擊率預估模塊可以在下圖的左側找到。

類似的機器學習的例子還有很多。比如,打開手機淘寶,在這一塊區域中,每一個人看到的結果都不一樣。右邊是手機淘寶的首頁下方的猜你喜歡商品推薦模塊。這個模塊會根據用戶的長短期興趣來推薦不同的商品。像這樣的商品推薦應用中就大量地使用了機器學習相關的技術。

類似的系統有很多,比如Netflix,它曾是美國的一個租碟公司,現在主營網路視頻和電視直播等等。下圖是它的系統架構圖。其中既有搜索也有推薦,大量的使用了機器學習的相關技術。

下圖是一個簡要的淘寶推薦示意圖。可以從用戶的行為日誌中挖掘可能的商品和商品之間的關聯,以及用戶的喜好。在做出一些推薦之後,會對推薦進行排序、過濾等。這其中,商品展示後是否會被用戶點擊,用戶點擊後是否會購買,都是典型的二分類問題,都可以轉化為機器學習問題來處理。

在做機器學習相關的應用時,只要我們識別出這些問題可以利用機器學習的相關技術去解決,那就可以使用相關的模型或演算法去解決相應的問題。現在常用的機器學習中,統計機器學習的應用是比較廣的。它有三個要素,首先是模型,即決策函數。第二,學習策略,即損失和風險是什麼。第三,演算法,就是要把模型中相應的權重求出來。下圖右側列了一些比較典型的問題,比如網頁的主題聚類,查詢詞的意圖識別、多個衡量網頁與查詢詞相似度方法的結果的融合,包括經典的點擊率預估和商品轉化率的預估。這些問題都可以作為機器學習問題來做。

在現代後端商業系統中,一旦碰到分類類的機器學習,很多公司都會選擇logistic回歸,為什麼大家都會選擇LR呢?在企業級應用中有一些原則。

  • 數據的豐富性比模型的選擇更重要。數據乾淨,數據量大、數據的質量高時,用一些簡單高效的模型就可以取得非常好的效果。
  • 模型的吞吐能力。在企業級應用的時候,一般都會面臨海量數據,模型求解對數據的吞吐能力就是大家關注的一個重點。
  • 求解演算法的並行化難度的高低。如果並行度很低,在大規模海量數據處理的時候,就很難運用集群的力量來達到加速的目的。
  • 模型的迭代速度
  • 特徵的自解釋性及badcase控制。Logistic回歸在特徵的自解釋性上的表現很好,比如現在常用的深度學習,網路模型重權重與其物理含義之間有比較清晰的對應關係。相應的,如果在一些樣本上學偏了或者是碰到了一些badcase,像logistic回歸這樣,天然具有自解釋性的模型就能很好地控制這些情況。

二、 最常用的LR是什麼鬼?

接下來給大家解釋一下logistic回歸的原理。Logistic回歸是廣義線性回歸中的一種。線性回歸,如下圖第一個公式所示,大家很容易理解。Logistic回歸在線性回歸的基礎上進行了logit變換。如下圖第二個公式所示。可以發現,當概率趨近於零時,權重就會發生劇烈的震蕩。為了讓求解的概率結果具有從0到1的物理含義,同時也避免一些震蕩,因此進行logit變換,其概率的計算公式如下圖第三個公式所示。Logistic回歸在現代的深度學習中用較廣,比如,sigmoid激活函數,其圖像如下圖所示。可以發現,它是一條0到1之間的光滑的函數曲線。

還有一些分類方法,比如線性SVM,也可以用於二分類,它的核心還是尋找一個分界面把樣本分成兩類。如下圖所示。

下面是Logistic回歸的一個例子。LR可以用來擬合來自於某個連續函數的樣本集合。當P=0.5時,LR分類器也會出現問題,這時樣本會被隨機分配。

回歸到之前提及的點擊率預測問題,它是一個典型的0-1樣本問題,這裡把它稱作logistic binary classifier。下圖的第一個公式計算了y=1和y=0時的概率。構造Loss的方法有很多,這裡我們採用的是極大似然估計。把所有的事件,包括正例和負例,全部發生的概率進行連乘,讓全部發生的概率最大化,一般在計算Loss時會加一層log運算,將連乘運算變成加法,方便在後續進行優化處理。在構造損失函數時,通常分成兩個部分。第一個部分是empirical loss,即經驗風險,第二個部分是structure loss,即結構化風險。大家如果有時間的話,可以去看一下周志華老師的《機器學習》(西瓜書),在這本書中清楚地解釋了這兩種風險。下圖最後一個公式計算了結構化風險,加上‖ω‖目的是避免模型在求解地過程中為了擬合某些特殊的點,讓ω產生非常大的振幅,導致模型出現過擬合。

LR有很多求解方法,下圖列出一部分。它們主要分成了兩大類,第一類是左邊這一支他們屬於Newton法,之所以會產生這麼多版本,核心都是為了在精度和計算速度中進行取捨。另一類方法是右邊這一支,它們都屬於梯度下降。現在機器學習演算法中有針對梯度下降進行的很多優化演算法。所有模型求解演算法可以分成兩個大類,Offline和Online。

下面講解L1-LR優化問題最優解。如下圖第一個公式,在結構化風險中加1範數,即把ω各維度的絕對值相加。這時,會出現一個問題,在做最優化問題時的KKD條件,是Loss function取到最小值點。需要要求它的一階條件,即一階導數為0。但使用1範數時,它的一階導是不存在的。因此引入了虛梯度(次梯度)的概念,即分象限進行求解,如下圖所示。

Offline求解演算法包括以下幾類。Gradient Descent:直接採用目標函數在當前w的梯度的反方向作為下降方向,它一般是線性收斂的。Newton Method:利用二次Taylor展開來近似目標函數,通過求解近似函數來獲取下降方向。Newton法在求解多元Loss function時,需要求解一個複雜的高維的矩陣即Hessen矩陣以及矩陣的逆矩陣,時間複雜度很高。Quasi-Newton法通過擬合的方式找到Hessen矩陣的近似來加速計算下降方向,DFP、BFGS、L-BFGS以及OWLQN都屬於此類演算法。

DFP只利用了梯度來計算Hessen矩陣,但仍需要計算Hessen矩陣的逆來獲取Newton方向。BFGS直接利用梯度來計算Hessen矩陣的逆,因此只需要求一階導即可。

在迭代時,除了選擇權重更新的方向之外還要選擇步長。一種方法是固定步長,而通過line search等方法可以選擇最優步長,使損失函數盡量小,接近全局最優點,避免陷入局部最優點。感興趣的同學可以自行學習。

Quasi-Newton的求解過程。思路是用一階導去逼近二階導。

BFGS演算法簡介,見下圖。

L-BFGS演算法簡介,見下圖。

感興趣的同學可以參考2003年微軟研究院有關OWLQN的論文,也可以在網上查找到對應的演算法實現。

OWLQN-象限限定的有限內存擬牛頓法。針對計算虛梯度時的分象限問題進行優化,在更新步長搜索時不會導致權重更新越界。同時解決了用1範式導致的求一階導時的問題。有人可能會有疑問,為什麼要用1範數而不是更平滑的2範數。因為在企業級預估模型中比較關注模型的稀疏性,這與性能相關。如2範數這樣稀疏性較好的,其各階導數均存在且曲線平滑,但當特徵值很多比如一千億個,那麼就存在一千億個權重值需要被計算。然而使用1範數就可以有效的使模型的size變小,在可接受的精度損失範圍內起到提速的效果。

上述方法都屬於Offline求解方法。在Offline求解方法中,大家可以在訓練時看到整體的數據樣本。比如昨天一整天產生了一千萬的樣本,在訓練時,這一千萬個樣本都可以作為訓練樣本。Offline求解方法中有以下兩個假設。一、在實際場景中,樣本分為訓練集和測試集,他們應該是近似同分布的。二、模型中所選擇的特徵具備良好的泛化性。因為在模型上線後,遇到的樣本可能是在訓練集甚至驗證集中都未出現過的,如果模型沒有良好的泛化性,那麼預測結果可能比較差。需要注意的一點是,在實際情況中,訓練集和測試機未必是近似同分布的。

三、ML工程師每天都在幹什麼?

工業界中需要的好模型有以下特徵。

  • 訓練速度高,能夠處理超大規模的樣本;
  • 能夠捕獲樣本中重要的信息,並反映在權重里;
  • 線上實時預測時性能高,滿足高並發場景的需要(稀疏性);
  • 對新數據反應及時。

BATCH問題的定義如下圖。

BATCH訓練和ONLINE訓練的區別在於,BATCH跑的是整個樣本集,而ONLINE的樣本是一條一條的流式的。BATCH使用的是基礎梯度下降方法,選中一個方法乘步長,選擇下降最快的方向去迭代權重。下圖右邊的是隨機梯度下降方法。「隨機」體現在,它的方向是以每個樣本為例做選擇的,以整個樣本來看,方向選擇就具有很強的隨機性。從BATCH 到ONLINE的轉化使得模型更適合線上的流式數據。模型可以對外界刺激產生更為及時的反應,單樣本也更利於加速計算。

下面給大家介紹LOSS function中常見的正則項(regularization term),包括L1正則項,L2正則項。正如前面介紹的,L1在0處不可導,而L2在0處可導。L1在BATCH模式下容易產生稀疏解。而ONLINE模式下即使L1也很難產生稀疏解,因為單樣本更新時,在整個數據集上是很難產生稀疏解的。我們期望在ONLINE模式下模型的高反應速度,同時也希望能克服它所帶來的問題

其解法分為以下幾種分類:

  • 提升訓練精度,降低模型複雜度,引入稀疏性
  • SGD及其變種,L1簡單截斷法、TG(梯度截斷)、FOBOS(前向後向切分)
  • 對偶平均法,RDA(正則對偶平均)、FTRL

接下來給大家介紹損失函數中ONLINE的Regret Bound。在BATCH模式下,損失函數是比較容易定義的。但在ONLINE模式下,定義損失函數,是將先前學習到的模型與當前的損失作差,即Regret,其計算公式如下圖。

下面給大家介紹一下L1簡單截斷和TG梯度截斷。如下圖所示,L1截斷中,當|vi|≤θ時,直接截斷為0,即引入稀疏解。而梯度截斷中,引入了α使其更柔性,可以利用α的值進行調節。

FOBOS也是在2009年提出的,它的求解分為兩步。如下圖所示。

RDA屬於對偶平均法,其簡介如下圖。

FTRL結合了RDA和FOBOS的優點,其簡介如下。這個模型在現在很多公司中應用很廣。

下圖是解法之間的關係圖。

由BATCH變換為ONLINE時,會引入一些問題。

  • Sampling是否有收益。BATCH中正負例的比例是與數據集中的比例差不多的,而ONLINE中,一段時間內的正負例比例會出現差異,因此要採用Sampling策略。

  • ONLINE訓練的瓶頸。訓練速度要跟得上樣本產生的速度。

  • BATCH/ONLINE的Ensembling。

  • ONLINE場景下特徵如何調研。

下面介紹如何選擇ONLINE化的路線。ONLINE方式相較於BATCH有明顯的提升,但如果要做到實時產生數據實時完成,還存在面臨的挑戰。因此在選擇BATCH和ONLINE方式時要根據實際情況來定。

下圖是一個Online Prediction System的例子。可以發現,在做點擊率預估時,需要緩存機制,比如保存前幾分鐘的展示樣本,當發生點擊時再將點擊與展示樣本進行拼接。

上面,解釋了ONLINE相關的各種問題,以及一些解決方案。下面列出了一些挑戰。

  • 由延時點擊帶來的誤差累計
  • 秒級更新帶來的壓力
  • 特徵權重在累計新樣本中變化太小
  • 並行特徵實驗框架,支持在線特徵實驗

前面介紹了關於採樣的方法,實際上,在採樣時一定會引入一些bias,其實在訓練系統中也會引入各種各樣的偏差。這些偏差會導致預估值與真實值之間存在距離,如何使這兩個值儘可能接近呢?這是機器學習中的一個經典問題:Predicator Calibration,即預估矯正。根據不同的bias可能會採用不同的方法進行矯正。

四、DL在企業里都怎麼玩?

在企業中,演算法工程師每天大量的工作都集中在數據部分,包括數據準備、數據清洗、數據分析、特徵篩選等。在企業中,需要解決的問題通常是大規模的,當數據體量超過一定大小之後,很多在paper中適用的方法可能不再適用,需要對模型求解演算法進行優化,比如分散式的訓練程序的開發。現在Tensorflow、Parameter Server、MxNet等框架給編寫分散式並行求解演算法帶來了很大的便利。

下面簡單介紹以下企業中的深度學習應用。下圖展示了深度學習的發展情況。

深度學習的提出過程如下:

  1. 海量數據中蘊含了大量的信息,而機器學習的目的就是期望從中找出有價值的特徵(也稱概念)
  2. 模型的複雜程度(即自由度)反映了其理解數據的能力,一般而言,數據量越龐大、數據雜訊越多就更加需要模型有強大的表達能力
  3. 傳統機器學習的效果很大程度上取決於特徵選擇的好壞,即我們常說的特徵工程(Feature Engineering)
  4. 2006年Geoffrey Hinton在美國Science雜誌上提出的深度神經網路(逐層求解方法)大幅提升了效果以及模型求解的速度
  5. Andrew NG:我們沒有像往常做的那樣框定一個邊界,而是直接把演算法應用到海量數據上,讓數據自己說話,系統會自動從數據中學習。

下面是深度學習中的一個神經元結構。其中有不同的的激活函數對應著不同的使用場景。

傳統的神經網路的核心是前一層和後一層之間存在大量的參數之間的交叉聯繫。深度學習的提出了逐層求解神經網路的演算法,便於大家在其中增加層數即Hidden Layer,在圖像、語音等複雜數據的建模過程中有著很強的建模能力。

下圖是逐層初始化的示意圖。

在深度學習中應用的最好的兩個方向是語音和圖像。深度學習在NLP中的應用在近幾年也有了一些進展。但對於一些經典的language model,深度學習仍沒有取得明顯的優勢。

下圖是淺層模型和深層模型的對比。

下圖是卷積神經網路的示意圖,它基於不用size的模板來提取同一張圖像上的不同維度的抽象特徵。CNN在圖像處理中應用效果較好,也有人將CNN應用於NLP中,效果差強人意。

Deep learning簡單可以理解為NN的發展。大約二三十年前,NN曾經是ML領域特別火熱的一個方向,但是後來確慢慢淡出了,原因包括以下幾個方面:

  • 容易過擬合,參數比較難調,?而且需要不少trick;
  • 訓練速度慢,在層次比較少(<=3)的情況下效果並不比其它方法更優。
  • 傳統BP?網路:梯度擴散,誤差校正變?;易收斂到局部值。
  • DL兩步訓練:down2top非監督一層層訓練;top2down監督調整(fine-tune)。

深度模型的訓練難度包含以下幾個方面。

  • 局部最優:與淺層模型的代價函數不不同,深層模型的每個神經元都是非線性變換,代價函數是高度非凸函數,採用梯度下降的方法容易陷入局部最優。
  • 梯度彌散:使?反向傳播演算法傳播梯度的時候,隨著傳播深度的增加,梯度的幅度會急劇減小,會導致淺層神經元的權重更新非常緩慢,不能有效學習。這樣一來,深層模型也就變成了前幾層相對固定,只能改變最後層的淺層模型。
  • 數據獲取:深層模型的表達能力強大,模型的參數也相應增加。對於訓練如此多參數的模型,小訓練數據集是不能實現的,需要海量的有標記的數據,否則只能導致嚴重的過擬合。

原文鏈接

更多技術乾貨敬請關注云棲社區知乎機構號:阿里云云棲社區 - 知乎


推薦閱讀:

分段函數的複合函數要怎麼求(1)
x = cos x 的解析形式
使用PyTorch從零開始構建Elman循環神經網路
想要成為數據科學家?知道這11種機器學習演算法嗎?

TAG:深度學習DeepLearning | 演算法 | 函數 |