大數據算法基礎筆記

一、分類算法:對數據分類和預測

1. KNN算法即K近鄰(K Nearest Neighbour)算法,是一種基本的分類算法,其主要原理是:對於一個需要分類的數據,將其和一組已經分類標註好的樣本集合進行比較,得到距離最近的K個樣本,K個樣本最多歸屬的類別,就是這個需要分類數據的類別。下面是KNN算法的原理圖:

上圖中,紅藍綠三種顏色的點爲樣本數據,分屬三種類別ω1​ω2​和ω3。對於待分類點Xu,計算和它距離最近的5個點即K爲5,這5個點最多歸屬的類別爲ω1(4個點歸屬ω1,1個點歸屬ω3​),那麼Xu的類別被分類爲ω1。KNN的算法流程也簡單,如下面流程圖所示:

KNN算法可用於各種分類的場景,比如新聞分類、商品分類等,甚至可用於簡單的文字識別。對於新聞分類,可以提前對若干新聞進行人工標註,標好新聞類別,計算好特徵向量。對於一篇未分類的新聞,計算其特徵向量後,跟所有已標註新聞進行距離計算,然後進一步利用KNN算法進行自動分類。

2. 那如何計算數據的距離,如何獲得新聞的特徵向量呢?KNN算法的關鍵是要比較需要分類的數據與樣本數據之間的距離,這在機器學習中通常的做法是:提取數據的特徵值,根據特徵值組成一個n維實數向量空間(該空間也稱作特徵空間),然後計算向量之間的空間距離。空間之間的距離計算方法有很多種,常用的有歐氏距離、餘弦距離等。對於數據xixj​,若其特徵空間爲n維實數向量空間Rn,即xi​ = (xi1​, xi2​, …, xin​),xj​=( xj1​, xj2​​, …, xjn​​),則其歐氏距離計算公式爲:

這個歐式距離公式其實初中就學過,平面幾何和立體幾何裏兩個點之間的距離,也是用這個公式計算出來的,只是平面幾何(二維幾何)裏的n=2,立體幾何(三維幾何)裏的n=3,而機器學習需要面對的每個數據都可能有n維的維度,即每個數據有n個特徵值。但不管特徵值n是多少,兩個數據的空間距離計算公式還是這個歐氏計算公式。大多數機器學習算法都需要計算數據之間的距離,因此掌握數據的距離計算公式是掌握機器學習算法的基礎

歐氏距離是最常用的數據計算公式,但是在文本數據以及用戶評價數據的機器學習中,更常用的距離計算方法是餘弦相似度,如下所示:

餘弦相似度的值越接近1表示其越相似,越接近0表示其差異越大,使用餘弦相似度可以消除數據的某些冗餘信息,某些情況下更貼近數據的本質。比如兩篇文章的特徵值都是:“大數據”、“機器學習”和“Spark”,A文章的特徵向量爲(3, 3, 3),即這三個詞出現次數都是3;B文章的特徵向量爲(6, 6, 6),即這三個詞出現次數都是6。如果光看特徵向量,這兩個向量差別很大,如果用歐氏距離計算確實也很大,但是這兩篇文章其實非常相似,只是篇幅不同而已,它們的餘弦相似度爲1,表示非常相似。

餘弦相似度其實是計算向量的夾角,而歐氏距離公式是計算空間距離。餘弦相似度更關注數據的相似性,比如兩個用戶給兩件商品的打分分別是(3, 3)和(4, 4),那麼兩個用戶對兩件商品的喜好是相似的,這種情況下,餘弦相似度比歐氏距離更合理。

3. 機器學習的算法需要計算距離,而計算距離需要還知道數據的特徵向量,因此提取數據的特徵向量是機器學習工程師的重要工作。不同數據以及不同的應用場景需要提取不同的特徵值,以比較常見的文本數據爲例,看如何提取文本特徵向量。文本數據的特徵值就是提取文本關鍵詞,TF-IDF算法是比較常用且直觀的一種文本關鍵詞提取算法。這種算法由TF和IDF兩部分構成。TF是詞頻(Term Frequency),表示某個單詞在文檔中出現的頻率,一個單詞在一個文檔中出現的越頻繁,TF值越高。詞頻的計算方法如下所示:

TF = 某個詞在文檔中出現的次數 ​/ 文檔總詞數

IDF是逆文檔頻率(Inverse Document Frequency),表示這個單詞在所有文檔中的稀缺程度,越少文檔出現這個詞,IDF值越高,計算方法如下所示:

因此,TF與IDF的乘積就是TF-IDF,計算方法如下:

TF-IDF = TF × IDF

所以如果一個詞在某一個文檔中頻繁出現,但在所有文檔中卻很少出現,那麼這個詞很可能就是這個文檔的關鍵詞。比如一篇關於原子能的技術文章,“核裂變”、“放射性”、“半衰期”等詞彙會在這篇文檔中頻繁出現,即TF很高;但是在所有文檔中出現的頻率卻比較低,即IDF也比較高,因此這幾個詞的TF-IDF值就會很高,就可能是這篇文檔的關鍵詞,也許“中國”這個詞也會頻繁出現,即TF也很高,但是“中國”也在很多文檔中出現,那麼IDF就會比較低,最後“中國”這個詞的TF-IDF就很低,不會成爲這個文檔的關鍵詞。

提取出關鍵詞以後,就可以利用關鍵詞的詞頻構造特徵向量,比如上面例子關於原子能的文章,“核裂變”、“放射性”、“半衰期”這三個詞是特徵值,分別出現次數爲12、9、4,那麼這篇文章的特徵向量就是(12, 9, 4再利用前面提到的空間距離計算公式計算與其他文檔的距離,結合KNN算法就可以實現文檔的自動分類

4. 貝葉斯公式是一種基於條件概率的分類算法,如果已經知道A和B的發生概率,並且知道了B發生情況下A發生的概率,可以用貝葉斯公式計算A發生的情況下B發生的概率,事實上可以根據A的情況即輸入數據,判斷B的概率即B的可能性,進而進行分類。

舉個例子:假設一所學校裏男生佔60%,女生佔40%,男生總是穿長褲,女生則一半穿長褲一半穿裙子。假設校園中迎面走來一個穿長褲的學生,能夠推斷出這個穿長褲學生是男生的概率是多少嗎?答案是75%,具體算法是:

這個算法就利用了貝葉斯公式,貝葉斯公式的寫法是:

意思是A發生的條件下B發生的概率,等於B發生的條件下A發生的概率,乘以B發生的概率,除以A發生的概率。還是上面這個例子,如果問迎面走來穿裙子的學生是女生的概率是多少,同樣帶入貝葉斯公式,可以計算出是女生的概率爲100%。

貝葉斯分類的一個典型的應用場合是垃圾郵件分類,通過對樣本郵件的統計,知道每個詞在郵件中出現的概率P(Ai​),也知道正常郵件概率P(B0​)和垃圾郵件的概率P(B1​),還可以統計出垃圾郵件中各個詞的出現概率P(Ai​∣B1​),那麼一封新郵件到來,就可以根據郵件中出現的詞計算P(B1​∣Ai​),即這些詞出現情況下,郵件爲垃圾郵件的概率,進而判斷郵件是否爲垃圾郵件。

現實中,貝葉斯公式等號右邊的概率,可以通過對大數據的統計獲得,當有新數據到來時,就可以帶入上面的貝葉斯公式計算其概率,而如果設定概率超過某個值就認爲其會發生,那就對這個數據進行了分類和預測,具體過程如下圖所示:

訓練樣本就是原始數據,有時候原始數據並不包含想要計算的維度數據,比如想用貝葉斯公式自動分類垃圾郵件,那麼首先要對原始郵件進行標註,需要標註哪些郵件是正常郵件、哪些郵件是垃圾郵件。這一類需要對數據進行標註才能進行的機器學習訓練也叫作有監督的機器學習

二、數據挖掘:發掘數據間的關係

5. 數據挖掘的典型應用場景有搜索排序、關聯分析以及聚類。Hadoop大數據技術最早源於Google,而Google使用大數據技術最重要的應用場景就是網頁排名。當使用Google進行搜索時會發現,通常在搜索的前三個結果裏就能找到自己想要的網頁內容,而且大概率第一個結果就是想要的網頁。而排名越往後,搜索結果與期望的偏差越大。

那麼Google爲什麼能在十幾萬的網頁中知道最想看的網頁是哪些,然後把這些頁面排到最前面呢?答案是使用了一種叫PageRank的算法,這種算法根據網頁的鏈接關係給網頁打分,如果一個網頁A,包含另一個網頁B的超鏈接,那麼就認爲A網頁給B網頁投了一票,以下面四個網頁A、B、C、D舉例,帶箭頭的線條表示鏈接:

B網頁包含了A、D兩個頁面的超鏈接,相當於B網頁給A、D每個頁面投了一票,初始時所有頁面都是1分,那麼經過這次投票後,B給了A和D每個頁面1/2分(B包含了A、D兩個超鏈接,所以每個投票值1/2分),自己從C頁面得到1/3分(C包含了A、B、D三個頁面的超鏈接,每個投票值1/3分)。而A頁面則從B、C、D分別得到1/2、1/3、1分,用公式表示就是如下的樣子:

等號左邊是經過一次投票後,A頁面的PageRank分值;等號右邊每一項的分子是包含A頁面超鏈接的頁面的PageRank分值,分母是該頁面包含的超鏈接數目。這樣經過一次計算後,每個頁面的PageRank分值就會重新分配,重複同樣的算法過程,經過幾次計算後,根據每個頁面PageRank分值進行排序,就得到一個頁面重要程度的排名表。根據這個排名表,將用戶搜索出來的網頁結果排序,排在前面的通常也正是用戶想要的結果。

但是這個算法還有個問題,如果某個頁面只包含指向自己的超鏈接,這樣的話其他頁面不斷給它送分,而自己一分不出,隨着計算執行次數越多,它的分值也就越高,這顯然是不合理的。這種情況就像下圖所示,A頁面只包含指向自己的超鏈接:

Google的解決方案是,設想瀏覽一個頁面的時候,有一定概率不是點擊超鏈接,而是在地址欄輸入一個URL訪問其他頁面,表示在公式上就是:

上面1−α)就是跳轉到其他任何頁面的概率,通常取經驗值0.15(即α爲0.85),因爲有一定概率輸入的URL是自己的,所以加上上面公式最後一項,其中分母4表示所有網頁的總數。那麼對於N個網頁,任何一個頁面Pi​的PageRank計算公式如下:

公式中,Pj​M(Pi​)表示所有包含有Pi​超鏈接的Pj​L(Pj​)表示Pj​頁面包含的超鏈接數,N表示所有的網頁總和。由於Google要對全世界的網頁進行排名,所以這裏的N可能是一個萬億級的數字,一開始將所有頁面的PageRank值設爲1,帶入上面公式計算,每個頁面都得到一個新的PageRank值,再把這些新的PageRank值帶入上面的公式,繼續得到更新的PageRank值,如此迭代計算,直到所有頁面的PageRank值幾乎不再有大的變化才停止

6. 關聯分析是大數據計算的重要場景之一。通過數據挖掘,商家發現尿不溼和啤酒經常會同時被購買,所以商家就把啤酒和尿不溼擺放在一起促進銷售。這個案例曾經被質疑是假的,因爲沒有人見過超市把啤酒和尿布放在一起賣。通過觀察京東上的沃爾瑪旗艦店,哈爾濱啤酒下方的六個店長推薦,兩個是兒童紙尿褲,還有兩個兒童奶粉,如下圖所示:

在傳統商超確實沒有見過把啤酒和紙尿褲放在一起的情況,可能是因爲傳統商超的物理貨架分區策略限制它沒有辦法這麼做,而啤酒和尿不溼存在關聯關係則確實是大數據中存在的規律,在電商網站就可以輕易進行關聯推薦。通過商品訂單,可以發現頻繁出現在同一個購物車裏商品間的關聯關係,這種大數據關聯分析也被稱作是“購物車分析”,頻繁出現的商品組合也被稱作是“頻繁模式”。

在深入關聯分析前需要先了解兩個基本概念,一個是支持度,一個是置信度支持度是指一組頻繁模式的出現概率,比如(啤酒,尿不溼)是一組頻繁模式,它的支持度是4%,也就是說在所有訂單中,同時出現啤酒和尿不溼這兩件商品的概率是4%。置信度用於衡量頻繁模式內部的關聯關係,如果出現尿不溼的訂單全部都包含啤酒,那麼就可以說購買尿不溼後購買啤酒的置信度是100%;如果出現啤酒的訂單中有20%包含尿不溼,那麼就可以說購買啤酒後購買尿不溼的置信度是20%。

電商網站的商品種類和歷史訂單數據非常龐大,雖然有大數據技術但是資源依然是有限的,那應該從哪裏考慮着手,可以使用最少計算資源找到滿足最小支持度的頻繁模式?找到這種頻繁模式經典算法是Apriori算法,它的步驟是:

(1)設置最小支持度閾值。

(2)尋找滿足最小支持度的單件商品,也就是單件商品出現在所有訂單中的概率不低於最小支持度。

(3)從第2步找到的所有滿足最小支持度的單件商品中,進行兩兩組合,尋找滿足最小支持度的兩件商品組合,也就是兩件商品出現在同一個訂單中概率不低於最小支持度。

(4)從第3步找到的所有滿足最小支持度的兩件商品,以及第2步找到的滿足最小支持度的單件商品進行組合,尋找滿足最小支持度的三件商品組合。

(5)以此類推,找到所有滿足最小支持度的商品組合。

Apriori算法極大降低了需要計算的商品組合數目,這個算法的原理是,如果一個商品組合不滿足最小支持度,那麼所有包含這個商品組合的其他商品組合也不滿足最小支持度。所以從最小商品組合,也就是一件商品開始計算最小支持度,逐漸迭代,進而篩選出所有滿足最小支持度的頻繁模式。通過關聯分析,可以發現看似不相關商品的關聯關係,並利用這些關係進行商品營銷。

7. 分類算法主要解決如何將一個數據分到幾個確定類別中的一類裏去。分類算法通常需要樣本數據訓練模型,再利用模型進行數據分類,那麼一堆樣本數據又如何知道各自的類別呢?樣本數據歸類一方面可以通過人工手動打標籤,另一方面也可以利用算法進行自動歸類,即所謂的“聚類”。聚類就是對一批數據進行自動歸類,如下圖這樣的一組數據,一眼就可以看出可以分爲四組:

但是如果這些數據不是畫在平面上,而是以二維座標的方式給出的一堆數據,就不那麼容易看出來了。K-means是一種在給定分組個數後,能夠對數據進行自動歸類即聚類的算法。計算過程如下圖所示:

(1)隨機在圖中取K個種子點,圖中K=2,即圖中的實心小圓點。

(2)求圖中所有點到這K個種子點的距離,假如一個點離種子點X最近,那麼這個點屬於X點羣。在圖中可以看到A、B屬於上方的種子點,C、D、E屬於中部的種子點。

(3)對已經分好組的兩組數據,分別求其中心點。對於圖中二維平面上的數據,求中心點最簡單暴力的算法就是對同一個分組中所有點的X和Y座標分別求平均值,得到的<x,y>就是下一個中心點。

(4)重複第2步和第3步,直到每個分組的中心點不再移動。這時候,距每個中心點最近的點數據聚類爲同一組數據

K-means算法原理簡單,在知道分組個數的情況下效果非常好,是聚類經典算法。通過聚類分析可以發現事物的內在規律:具有相似購買習慣的用戶羣體被聚類爲一組,一方面可以直接針對不同分組用戶進行差別營銷,線下渠道還可以根據分組情況進行市場劃分;另一方面可以進一步分析,比如同組用戶的其他統計特徵還有哪些,並發現一些有價值的模式。

上面提到的數據挖掘的幾個典型算法,PageRank算法通過挖掘鏈接關係,發現互聯網網頁的排名權重;Apriori算法通過購物車分析,發現商品的頻繁模式;K-means算法則可以進行自動數據聚類,這些算法不需要人工事先對數據進行標註,一般被稱作無監督算法。再上面的分類算法需要樣本數據,而這些樣本數據是需要人工進行預先標註的,因此分類算法一般都是有監督算法

三、推薦引擎:預測用戶的喜好

8. 在用戶對自己需求相對明確時,可以用搜索引擎通過關鍵字搜索方便地找到自己需要的信息。但有些時候,搜索引擎並不能完全滿足用戶對信息發現的需求。一方面,用戶有時候其實對自己的需求並不明確,期望系統能主動推薦一些自己感興趣的內容或商品;另一方面,企業也希望能夠通過更多渠道向用戶推薦信息和商品,在改善用戶體驗的同時,提高成交轉化率,獲得更多營收。常用的推薦算法有:基於人口統計的推薦、基於商品屬性的推薦、基於用戶的協同過濾推薦、基於商品的協同過濾推薦。

基於人口統計的推薦是相對比較簡單的一種推薦算法,根據用戶的基本信息進行分類,然後將商品推薦給同類用戶,如下圖所示:

從圖中可以看到,用戶A和用戶C有相近的人口統計信息,劃分爲同類,那麼用戶A喜歡(購買過)的商品D就可以推薦給用戶C。基於人口統計的推薦比較簡單,只要有用戶的基本信息就可以進行分類,新註冊的用戶總可以分類到某一類別,那麼立即就可以對他進行推薦,沒有所謂的“冷啓動”問題,也就是不會因爲不知道用戶的歷史行爲數據,而不知道該如何向用戶推薦。而且這種推薦算法也不依賴商品的數據,和要推薦的領域無關,不管是服裝還是美食,不管是電影還是旅遊目的地,都可以進行推薦,甚至可以混雜在一起進行推薦。

當然也正因爲這種推薦算法比較簡單,對於稍微精細一點的場景,推薦效果就比較差了。因此,在人口統計信息的基礎上,根據用戶瀏覽、購買信息和其他相關信息,進一步細化用戶的分類信息,給用戶貼上更多的標籤,比如家庭成員、婚姻狀況、居住地、學歷、專業、工作等,即所謂的用戶畫像,根據用戶畫像進行更精細的推薦,並進一步把用戶喜好當做標籤完善用戶畫像,再利用更完善的用戶畫像進行推薦,如此不斷迭代優化用戶畫像和推薦質量。

前面一個算法是基於用戶的屬性進行分類,然後根據同類用戶的行爲進行推薦。而基於商品屬性的推薦則是將商品的屬性進行分類,然後根據用戶的歷史行爲進行推薦,如下圖所示:

從圖中可以看到,電影A和電影D有相似的屬性,被劃分爲同類商品,如果用戶A喜歡電影A,那麼就可以向用戶A推薦電影D,比如給喜歡《星球大戰》的用戶推薦《星際迷航》。一般來說,相對基於人口統計的推薦,基於商品屬性的推薦會更符合用戶的口味,推薦效果相對更好一點。

但是基於商品屬性的推薦需要對商品屬性進行全面的分析和建模,難度相對也更大一點,在實踐中一種簡單的做法是,提取商品描述的關鍵詞和商品的標籤作爲商品的屬性。此外,基於商品屬性的推薦依賴用戶的歷史行爲數據,如果是新用戶進來,沒有歷史數據,就沒有辦法進行推薦了,即存在“冷啓動”問題

9. 而基於用戶的協同過濾推薦是根據用戶的喜好進行用戶分類,常用的就是前面提到的KNN算法,尋找和當前用戶喜好最相近的K個用戶,然後根據這些用戶的喜好爲當前用戶進行推薦,如下圖所示:

從圖中可以看到,用戶A喜歡商品A、商品B和商品D,用戶C喜歡商品A和商品B,那麼用戶A和用戶C就有相似的喜好,可以歸爲一類,然後將用戶A喜歡的商品D推薦給用戶C。

基於用戶的協同過濾推薦和基於人口統計的推薦都是將用戶分類後,根據同類用戶的喜好爲當前用戶進行推薦。不同的是,基於人口統計的推薦僅僅根據用戶的個人信息進行分類,分類的粒度比較大,準確性也較差;而基於用戶的協同過濾推薦則根據用戶歷史喜好進行分類,能夠更準確地反映用戶的喜好類別,推薦效果也更好一點。例如豆瓣推薦電影,就是基於用戶的協同過濾進行推薦。

基於商品的協同過濾推薦是根據用戶的喜好對商品進行分類,如果兩個商品,喜歡它們的用戶具有較高的重疊性,就認爲它們的距離相近,劃分爲同類商品,然後進行推薦,如下圖所示:

從圖中可以看到,用戶A喜歡商品A、商品B和商品D,用戶B喜歡商品B、商品C和商品D,那麼商品B和商品D的距離最近,劃分爲同類商品;而用戶C喜歡商品B,那麼就可以爲其推薦商品D。商品的分類相對用戶的分類更爲穩定,通常情況下,商品的數目也少於用戶的數目,因此使用基於商品的協同過濾推薦,計算量和複雜度小於基於用戶的協同過濾推薦

除了上面這些推薦算法,還有基於模型的推薦,根據用戶和商品數據,訓練數學模型,然後進行推薦。前面提到過的關聯分析,也可以進行推薦。在實踐中,通常會混合應用多種算法進行推薦,特別是大型電商網站,推薦效果每進步一點,都可能會帶來巨大的營收轉化。

四、機器學習的數學原理

10. 所謂的人工智能,在技術層面很多時候就是指機器學習,通過選擇特定的算法對樣本數據進行計算,獲得一個計算模型,並利用這個模型,對以前未曾見過的數據進行預測,如果這個預測在一定程度上和事實相符,就認爲機器像人一樣具有某種智能,即人工智能。這個過程和人類的學習成長非常類似,也是經歷一些事情(獲得樣本數據),進行分析總結(尋找算法),產生經驗(產生模型),然後利用經驗(模型)指導自己的日常行爲,如下圖所示:

機器學習的完整過程也是如此,利用樣本數據經過算法訓練得到模型,這個模型會和預測系統部署在一起,當外部需要預測的數據到達預測系統的時候,預測系統調用模型,就可以立即計算出預測結果。因此,構建一個機器學習系統,需要有三個關鍵要素:樣本、模型、算法

樣本就是常說的“訓練數據”,包括輸入和結果兩部分。比如要做一個自動化新聞分類的機器學習系統,對於採集的每一篇新聞,能夠自動發送到對應新聞分類頻道里面,比如體育、軍事、財經等,這時候就需要批量的新聞和其對應的分類類別作爲訓練數據。通常隨機選取一批現成的新聞素材就可以,但是分類需要人手工進行標註,也就是需要有人閱讀每篇新聞,根據其內容打上對應的分類標籤。在數學上,樣本通常表示爲:

其中xn​表示一個輸入,比如一篇新聞;yn​表示一個結果,比如這篇新聞對應的類別。樣本的數量和質量對機器學習的效果至關重要,如果樣本量太少,或者樣本分佈不均衡,對訓練出來的模型就有很大的影響。就像一個人見得世面少、讀書也少,就更容易產生偏見和刻板印象。

模型就是映射樣本輸入與樣本結果的函數,可能是一個條件概率分佈,也可能是一個決策函數。一個具體的機器學習系統所有可能的函數構成了模型的假設空間,數學表示是:

其中X是樣本輸入,Y是樣本輸出,f就是建立XY映射關係的函數。所有f的可能結果構成了模型的假設空間F。很多時候F的函數類型是明確的,需要計算的是函數的參數,比如確定f函數爲一個線性函數,那麼f的函數表示就可以寫爲:

這時候需要計算的就是a1​a0​兩個參數的值。這種情況下模型的假設空間的數學表示是:

其中θf函數的參數取值空間,一個n維歐氏空間,被稱作參數空間。

11. 算法就是要從模型的假設空間中尋找一個最優的函數,使得樣本空間的輸入X經過該函數的映射得到的f(X),和真實的Y值之間的距離最小。這個最優的函數通常沒辦法直接計算得到,即沒有解析解,需要用數值計算的方法不斷迭代求解。因此如何尋找到f函數的全局最優解,以及使尋找過程儘量高效,就構成了機器學習的算法

如何保證f函數或者f函數的參數空間最接近最優解,就是算法的策略。機器學習中用損失函數來評估模型是否最接近最優解,損失函數用來計算模型預測值與真實值的差距,常用的有0-1損失函數、平方損失函數、絕對損失函數、對數損失函數等。以平方損失函數爲例,損失函數如下:

對於一個給定的樣本數據集:

模型f(X)相對於真實值的平均損失爲每個樣本的損失函數的求和平均值:

這個值被稱作經驗風險,如果樣本量足夠大,那麼使經驗風險最小的f函數就是模型的最優解,即求:

但是相對於樣本空間的可能取值範圍,實際中使用的樣本量總是有限的,可能會出現使樣本經驗風險最小的模型f函數並不能使實際預測值的損失函數最小,這種情況被稱作過擬合,即一味追求經驗風險最小,而使模型f函數變得過於複雜,偏離了最優解。這種情況下,需要引入結構風險以防止過擬合,結構風險表示爲:

在經驗風險的基礎上加上λJ(f),其中J(f)表示模型f的複雜度,模型越複雜J(f)越大。要使結構風險最小,就要使經驗風險和模型複雜度同時小,求解模型最優解就變成求解結構風險最小值:

上面提到的就是機器學習的數學原理:給定模型類型,也就是給定函數類型的情況下,如何尋找使結構風險最小的函數表達式由於函數類型已經給定,實際上就是求函數的參數,各種有樣本的機器學習算法,基本上都是在各種模型的假設空間上求解結構風險最小值的過程,理解了這一點也就理解了各種機器學習算法的推導過程。

那麼爲什麼機器學習要解偏微分方程?機器學習跟偏微分方程究竟是什麼關係?事實上,關係很簡單。機器學習要從假設空間尋找最優函數,而最優函數就是使樣本數據的函數結果值和真實值距離最小的那個函數給定函數模型,求最優函數就是求函數的參數值。給定不同參數,得到不同函數值和真實值的距離,這個距離就是損失,損失函數是關於模型參數的函數,距離越小,損失越小。最小損失值對應的函數參數就是最優函數

數學上求極小值就是求一階導數,計算每個參數的一階導數爲零的偏微分方程組,就可以算出最優函數的參數值。這就是爲什麼機器學習要計算偏微分方程的原因。

五、從感知機到神經網絡算法

12. 感知機是一種比較簡單的二分類模型,將輸入特徵分類爲+1、-1兩類,就像下圖所示,一條直線將平面上的兩類點分類:

二維平面上的點只有兩個輸入特徵(橫軸座標和縱軸座標),一條直線就可以分類。如果輸入數據有更多維度的特徵,那麼就需要建立同樣多維度的模型,高維度上的分類模型也被稱爲超平面。感知機模型如下:

其中x代表輸入的特徵空間向量,輸出空間是{-1, +1},w爲權值向量,b叫作偏置,sign是一個符號函數,如下所示:

wx+b=0爲超平面的方程,當感知機輸出爲+1表示輸入值在超平面的上方,當感知機輸出爲-1表示輸入值在超平面的下方。訓練感知機模型就是要計算出參數wb的值,當有新的數據需要分類的時候,輸入感知機模型就可以計算出+1或者-1從而進行分類。由於輸出空間只有{-1, +1}兩個值,所以只有誤分類的時候,纔會有模型計算值和樣本真實值之間的偏差,偏差之和就是感知機的損失函數,如下所示:

其中M爲誤分類點集合,誤分類點越少,損失函數的值越小;如果沒有誤分類點,損失函數值爲 0。求模型的參數wb,就是求損失函數的極小值。數學上求函數的極小值就是求函數的一階導數,但是感知機損失函數用統計求和函數表達,沒辦法計算解析解。機器學習採用梯度下降法求損失函數極小值,實質上就是求導過程的數值計算方法。對於誤分類點集合M,損失函數L(w,b)變化的梯度,就是某個函數變量的變化引起的函數值的變化,根據感知機損失函數可知:

使用梯度下降更新wb,不斷迭代使損失函數L(w,b)不斷減小,直到爲0也就是沒有誤分類點。感知機算法的實現過程爲如下幾步:

(1)選擇初始值w0​、b0​。

(2)在樣本集合中選擇樣本數據xi​, yi​。

(3)如果yi​(wxi​ + b) < 0,表示yi​爲誤分類點,那麼w = w + ηyi​xi​、b = b + ηyi​,在梯度方向校正wb。其中η爲步長,步長選擇要適當,步長太長會導致每次計算調整太大出現震盪;步長太短又會導致收斂速度慢、計算時間長

(4)跳轉回第2步,直到樣本集合中沒有誤分類點,即全部樣本數據yi​(wxi​ + b) ≥ 0。

13. 現在所說的神經網絡,通常是指機器學習所使用的“人工神經網絡”,是對人腦神經網絡的一種模擬。人腦神經網絡由許多神經元構成,每個神經元有多個樹突,負責接收其他神經元的輸出信號,神經元細胞完成對輸入信號的處理,轉換成輸出信號,通過突觸傳遞給其他神經元。神經元細胞的輸出只有0或者1兩種輸出,但是人腦大約有140億個神經元,這些神經元組成一個神經網絡,前面的神經元輸出作爲後面的神經元輸入進一步處理,如下圖所示:

人腦神經元可以通過感知機進行模擬,每個感知機相當於一個神經元,使用sign函數的感知機輸出也是隻有兩個值,跟人腦神經元一樣,如下圖所示:

x1​, x2​, x3​相當於神經元的樹突,實現信號的輸入;sum() + bsign函數相當於神經元細胞,完成輸入的計算;y是神經元的輸出,上圖用數學形式表達的樣子如下所示:

它是感知機y = sign(wx + b)的向量展開形式。將感知機組成一層或者多層網絡狀結構,就構成了機器學習神經網絡,下圖就是一個兩層神經網絡:

在多層神經網絡中,每一層都由多個感知機組成。將輸入的特徵向量x傳遞給第一層的每一個感知機,運算以後作爲輸出傳遞給下一層的每一個感知機,直到最後一層感知機產生最終的輸出結果,這就是機器學習神經網絡的實現過程。以神經網絡實現手寫數字識別爲例,樣本如下圖所示:

這個手寫數字樣本中的每個數字都是一個28×28像素的圖片,把每個像素當作一個特徵值,這樣每個數字就對應784個輸入特徵。因爲輸出需要判別10個數字,所以第二層(輸出層)的感知機個數就是10個,每個感知機通過0或者1輸出是否爲對應的數字,如下圖所示:

使用梯度下降算法,利用樣本數據,可以訓練神經網絡識別手寫數字,計算每個感知機的wb參數值。當所有的感知機參數都計算出來,神經網絡也就訓練出來了。這樣對於新輸入的手寫數字圖片,可以進行自動識別,輸出對應的數字。

訓練神經網絡的時候採用一種反向傳播的算法,針對每個樣本,從最後一層,也就是輸出層開始,利用樣本結果使用梯度下降算法計算每個感知機的參數,然後以這些參數計算出來的結果作爲倒數第二層的輸出計算該層的參數。然後逐層倒推,反向傳播,計算完所有感知機的參數。當選擇兩層神經網絡的時候,原始感知機的sign函數表現並不太好,更常用的是sigmoid函數,如下圖所示:

對於兩層以上的多層神經網絡,ReLU函數的效果更好一些。ReLU函數表達式非常簡單,如下所示:

y = max(x, 0)

x大於0則輸出x;當x小於0則輸出0。神經網絡根據組織和訓練方式的不同有很多類型,當神經網絡層數比較多時,稱它們爲深度學習神經網絡

14. 前兩年的的圍棋程序AlphaGo則是一種卷積神經網絡,對於一個19×19的圍棋棋盤,在下棋過程中每個位置有黑、白、空三種狀態,將其提取爲特徵就是神經網絡的輸入(事實上,輸入特徵還需要包括氣、眼、喫等圍棋規則盤面信息),而輸出設置19×19即361個感知機產生對應的落子,然後將大量人類的棋譜,即當前盤面下的最佳落子策略作爲訓練樣本,就可以訓練出一個智能下棋的神經網絡。

但是這樣根據人類棋譜訓練得到神經網絡最多就是人類頂尖高手的水平,AlphaGo之所以能夠碾壓人類棋手還依賴一種叫蒙特卡洛搜索樹的算法,對每一次落子以後的對弈過程進行搜索,判斷出真正的最佳落子策略。利用蒙特卡洛搜索樹結合神經網絡,AlphaGo還可以進行自我對弈,不斷進行自我強化,找到近乎絕對意義上的最優落子策略。

一般說來,傳統機器學習算法的結果是可以解釋的,KNN算法的分類結果爲什麼是這樣,貝葉斯分類的結果爲什麼是這樣,都是可以利用樣本數據和算法來解釋的。如果分類效果不好,是樣本數據有問題,還是算法過程有問題,也都可以分析出來。但是一般認爲,神經網絡計算的結果是不可解釋的,爲什麼神經網絡會分類輸出這樣的結果,人們無法解釋;輸出結果不滿意,也無法找到原因,只能不斷嘗試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章