1. 程式人生 > >機器學習面試系列四

機器學習面試系列四

61.說說梯度下降法

@LeftNotEasy,本題解析來源:http://www.cnblogs.com/LeftNotEasy/archive/2010/12/05/mathmatic_in_machine_learning_1_regression_and_gradient_descent.html

下面是一個典型的機器學習的過程,首先給出一個輸入資料,我們的演算法會通過一系列的過程得到一個估計的函式,這個函式有能力對沒有見過的新資料給出一個新的估計,也被稱為構建一個模型。

我們用X1,X2..Xn 去描述feature裡面的分量,比如x1=房間的面積,x2=房間的朝向等等,我們可以做出一個估計函式:

θ在這兒稱為引數,在這兒的意思是調整feature中每個分量的影響力,就是到底是房屋的面積更重要還是房屋的地段更重要。為了如果我們令X0 = 1,就可以用向量的方式來表示了:

我們程式也需要一個機制去評估我們θ是否比較好,所以說需要對我們做出的h函式進行評估,一般這個進行評估的函式稱為損失函式(loss function),描述h函式不好的程度,在下面,我們稱這個函式為J函式

在這兒我們可以做出下面的一個損失函式:

換言之,我們把對x(i)的估計值與真實值y(i)差的平方和作為損失函式,前面乘上的1/2是為了在求導的時候,這個係數就不見了。

如何調整θ以使得J(θ)取得最小值有很多方法,其中有最小二乘法(min square),是一種完全是數學描述的方法,另外一種就是梯度下降法。

梯度下降法的演算法流程如下:

1)首先對θ賦值,這個值可以是隨機的,也可以讓θ是一個全零的向量。

2)改變θ的值,使得J(θ)按梯度下降的方向進行減少。

為了描述的更清楚,給出下面的圖:

這是一個表示引數θ與誤差函式J(θ)的關係圖,紅色的部分是表示J(θ)有著比較高的取值,我們需要的是,能夠讓J(θ)的值儘量的低,也就是達到深藍色的部分。θ0,θ1表示θ向量的兩個維度。

在上面提到梯度下降法的第一步是給θ給一個初值,假設隨機給的初值是在圖上的十字點。

然後我們將θ按照梯度下降的方向進行調整,就會使得J(θ)往更低的方向進行變化,如下圖所示,演算法的結束將是在θ下降到無法繼續下降為止。

當然,可能梯度下降的最終點並非是全域性最小點,即也可能是一個區域性最小點,如下圖所示:

上面這張圖就是描述的一個區域性最小點,這是我們重新選擇了一個初始點得到的,看來我們這個演算法將會在很大的程度上被初始點的選擇影響而陷入區域性最小點。

下面我將用一個例子描述一下梯度減少的過程,對於我們的函式J(θ)求偏導J:

下面是更新的過程,也就是θi會向著梯度最小的方向進行減少。θi表示更新之前的值,-後面的部分表示按梯度方向減少的量,α表示步長,也就是每次按照梯度減少的方向變化多少。

一個很重要的地方值得注意的是,梯度是有方向的,對於一個向量θ,每一維分量θi都可以求出一個梯度的方向,我們就可以找到一個整體的方向,在變化的時候,我們就朝著下降最多的方向進行變化就可以達到一個最小點,不管它是區域性的還是全域性的。

用更簡單的數學語言進行描述步驟2)是這樣的:

62.梯度下降法找到的一定是下降最快的方向麼?
梯度下降法並不是下降最快的方向,它只是目標函式在當前的點的切平面(當然高維問題不能叫平面)上下降最快的方向。在practical implementation中,牛頓方向(考慮海森矩陣)才一般被認為是下降最快的方向,可以達到superlinear的收斂速度。梯度下降類的演算法的收斂速度一般是linear甚至sublinear的(在某些帶複雜約束的問題)。by林小溪(https://www.zhihu.com/question/30672734/answer/139689869)。
一般解釋梯度下降,會用下山來舉例。假設你現在在山頂處,必須抵達山腳下(也就是山谷最低處)的湖泊。但讓人頭疼的是,你的雙眼被蒙上了無法辨別前進方向。換句話說,你不再能夠一眼看出哪條路徑是最快的下山路徑,如下圖(圖片來源:http://blog.csdn.net/wemedia/details.html?id=45460):

最好的辦法就是走一步算一步,先用腳向四周各個方向都邁出一步,試探一下週圍的地勢,用腳感覺下哪個方向是下降最大的方向。換言之,每走到一個位置的時候,求解當前位置的梯度,沿著梯度的負方向(當前最陡峭的位置向下)走一步。就這樣,每要走一步都根據上一步所在的位置選擇當前最陡峭最快下山的方向走下一步,一步步走下去,一直走到我們感覺已經到了山腳。
當然這樣走下去,我們走到的可能並不一定是真正的山腳,而只是走到了某一個區域性的山峰低處。換句話說,梯度下降不一定能夠找到全域性的最優解,也有可能只是一個區域性最優解。當然,如果損失函式是凸函式,梯度下降法得到的解就一定是全域性最優解。

@zbxzc(http://blog.csdn.net/u014568921/article/details/44856915):更進一步,我們來定義輸出誤差,即對於任意一組權值向量,那它得到的輸出和我們預想的輸出之間的誤差值。定義誤差的方法很多,不同的誤差計算方法可以得到不同的權值更新法則,這裡我們先用這樣的定義:

上面公式中D代表了所有的輸入例項,或者說是樣本,d代表了一個樣本例項,od表示感知器的輸出,td代表我們預想的輸出。
這樣,我們的目標就明確了,就是想找到一組權值讓這個誤差的值最小,顯然我們用誤差對權值求導將是一個很好的選擇,導數的意義是提供了一個方向,沿著這個方向改變權值,將會讓總的誤差變大,更形象的叫它為梯度。

既然梯度確定了E最陡峭的上升的方向,那麼梯度下降的訓練法則是:

梯度上升和梯度下降其實是一個思想,上式中權值更新的+號改為-號也就是梯度上升了。梯度上升用來求函式的最大值,梯度下降求最小值。

這樣每次移動的方向確定了,但每次移動的距離卻不知道。這個可以由步長(也稱學習率)來確定,記為α。這樣權值調整可表示為:

總之,梯度下降法的優化思想是用當前位置負梯度方向作為搜尋方向,因為該方向為當前位置的最快下降方向,所以也被稱為是“最速下降法”。最速下降法越接近目標值,步長越小,前進越慢。梯度下降法的搜尋迭代示意圖如下圖所示:

正因為梯度度下降法在接近最優解的區域收斂速度明顯變慢,所以利用梯度下降法求解需要很多次的迭代。在機器學習中,基於基本的梯度下降法發展了兩種梯度下降方法,分別為隨機梯度下降法和批量梯度下降法。[email protected],http://blog.csdn.net/wtq1993/article/details/51607040

隨機梯度下降

普通的梯度下降演算法在更新迴歸係數時要遍歷整個資料集,是一種批處理方法,這樣訓練資料特別忙龐大時,可能出現如下問題:

1)收斂過程可能非常慢;

2)如果誤差曲面上有多個局極小值,那麼不能保證這個過程會找到全域性最小值。

為了解決上面的問題,實際中我們應用的是梯度下降的一種變體被稱為隨機梯度下降。

上面公式中的誤差是針對於所有訓練樣本而得到的,而隨機梯度下降的思想是根據每個單獨的訓練樣本來更新權值,這樣我們上面的梯度公式就變成了:


經過推導後,我們就可以得到最終的權值更新的公式:


有了上面權重的更新公式後,我們就可以通過輸入大量的例項樣本,來根據我們預期的結果不斷地調整權值,從而最終得到一組權值使得我們的演算法能夠對一個新的樣本輸入得到正確的或無限接近的結果。

這裡做一個對比

設代價函式為


批量梯度下降


引數更新為:


i是樣本編號下標,j是樣本維數下標,m為樣例數目,n為特徵數目。所以更新一個θj需要遍歷整個樣本集


隨機梯度下降

引數更新為:


i是樣本編號下標,j是樣本維數下標,m為樣例數目,n為特徵數目。所以更新一個θj只需要一個樣本就可以。

下面兩幅圖可以很形象的對比各種優化方法(圖來源:http://sebastianruder.com/optimizing-gradient-descent/):

SGD各優化方法在損失曲面上的表現

從上圖可以看出, Adagrad、Adadelta與RMSprop在損失曲面上能夠立即轉移到正確的移動方向上達到快速的收斂。而Momentum 與NAG會導致偏離(off-track)。同時NAG能夠在偏離之後快速修正其路線,因為其根據梯度修正來提高響應性。

SGD各優化方法在損失曲面鞍點處上的表現

63.牛頓法和梯度下降法有什麼不同

@wtq1993,http://blog.csdn.net/wtq1993/article/details/51607040
1)牛頓法(Newton's method)

牛頓法是一種在實數域和複數域上近似求解方程的方法。方法使用函式f (x)的泰勒級數的前面幾項來尋找方程f (x) = 0的根。牛頓法最大的特點就在於它的收斂速度很快。

具體步驟:

首先,選擇一個接近函式 f (x)零點的 x0,計算相應的 f (x0) 和切線斜率f  ' (x0)(這裡f ' 表示函式 f  的導數)。然後我們計算穿過點(x0,  f  (x0)) 並且斜率為f '(x0)的直線和 x 軸的交點的x座標,也就是求如下方程的解:

我們將新求得的點的 x 座標命名為x1,通常x1會比x0更接近方程f  (x) = 0的解。因此我們現在可以利用x1開始下一輪迭代。迭代公式可化簡為如下所示:

已經證明,如果f  ' 是連續的,並且待求的零點x是孤立的,那麼在零點x周圍存在一個區域,只要初始值x0位於這個鄰近區域內,那麼牛頓法必定收斂。 並且,如果f  ' (x)不為0, 那麼牛頓法將具有平方收斂的效能. 粗略的說,這意味著每迭代一次,牛頓法結果的有效數字將增加一倍。

由於牛頓法是基於當前位置的切線來確定下一次的位置,所以牛頓法又被很形象地稱為是"切線法"。牛頓法的搜尋路徑(二維情況)如下圖所示:

關於牛頓法和梯度下降法的效率對比:

a)從收斂速度上看 ,牛頓法是二階收斂,梯度下降是一階收斂,前者牛頓法收斂速度更快。但牛頓法仍然是區域性演算法,只是在區域性上看的更細緻,梯度法僅考慮方向,牛頓法不但考慮了方向還兼顧了步子的大小,其對步長的估計使用的是二階逼近。

b)根據wiki上的解釋,從幾何上說,牛頓法就是用一個二次曲面去擬合你當前所處位置的局部曲面,而梯度下降法是用一個平面去擬合當前的局部曲面,通常情況下,二次曲面的擬合會比平面更好,所以牛頓法選擇的下降路徑會更符合真實的最優下降路徑。

注:紅色的牛頓法的迭代路徑,綠色的是梯度下降法的迭代路徑。

牛頓法的優缺點總結:

優點:二階收斂,收斂速度快;

缺點:牛頓法是一種迭代演算法,每一步都需要求解目標函式的Hessian矩陣的逆矩陣,計算比較複雜。

64.什麼是擬牛頓法(Quasi-Newton Methods)

@wtq1993,http://blog.csdn.net/wtq1993/article/details/51607040
擬牛頓法是求解非線性優化問題最有效的方法之一,於20世紀50年代由美國Argonne國家實驗室的物理學家W.C.Davidon所提出來。Davidon設計的這種演算法在當時看來是非線性優化領域最具創造性的發明之一。不久R. Fletcher和M. J. D. Powell證實了這種新的演算法遠比其他方法快速和可靠,使得非線性優化這門學科在一夜之間突飛猛進。

擬牛頓法的本質思想是改善牛頓法每次需要求解複雜的Hessian矩陣的逆矩陣的缺陷,它使用正定矩陣來近似Hessian矩陣的逆,從而簡化了運算的複雜度。擬牛頓法和最速下降法一樣只要求每一步迭代時知道目標函式的梯度。通過測量梯度的變化,構造一個目標函式的模型使之足以產生超線性收斂性。這類方法大大優於最速下降法,尤其對於困難的問題。另外,因為擬牛頓法不需要二階導數的資訊,所以有時比牛頓法更為有效。如今,優化軟體中包含了大量的擬牛頓演算法用來解決無約束,約束,和大規模的優化問題。

具體步驟:

擬牛頓法的基本思想如下。首先構造目標函式在當前迭代xk的二次模型:

相關推薦

機器學習面試系列

61.說說梯度下降法 @LeftNotEasy,本題解析來源:http://www.cnblogs.com/LeftNotEasy/archive/2010/12/05/mathmatic_in_machine_learning_1_regression_and

機器學習面試系列

1.請簡要介紹下SVM   SVM,全稱是support vector machine,中文名叫支援向量機。SVM是一個面向資料的分類演算法,它的目標是為確定一個分類超平面,從而將不同的資料分隔開。   擴充套件:這裡有篇文章詳盡介紹了SVM的原理、推導,http:/

機器學習與深度學習系列連載: 第一部分 機器學習(十)非監督度學習-1 Unsupervised Learning-1

非監督度學習-1 Unsupervised Learning-1(K-means,HAC,PCA) 非監督學習方法主要分為兩大類 Dimension Reduction (化繁為簡) Generation (無中生有) 目前我們僅專注化繁為簡,降維的方法,

小白的機器學習筆記系列-邏輯迴歸

一個概率問題 前面我們講了線性分類和線性迴歸,這裡讓我們來思考另外一類問題——求概率問題。 比如說,我們根據一個人的既往病歷,生活習慣,年齡等來判斷一個人是否會得心肌梗塞。我們想要的答案不僅僅是一個簡單的是或否,實際上我們希望知道的是得心肌梗塞的風險有多大。醫生

BAT機器學習面試1000題系列(第76~149題)

正文共43140個字,124張圖,預計閱讀時間:108分鐘。76、看你是搞視覺的,熟悉哪些CV框

BAT機器學習面試1000題系列(第150~279題)

長文~可先收藏再看喲~150、在感知機中(Perceptron)的任務順序是什麼?深度學習 DL

BAT機器學習面試1000題系列(第1~305題

1 請簡要介紹下SVM,機器學習 ML模型 易SVM,全稱是support vector machine,中文名叫支援向量機。SVM是一個面向資料的分類演算法,它的目標是為確定一個分類超平面,從而將不同的資料分隔開。 擴充套件:這裡有篇文章詳盡介紹了SVM的原理、推導,《支援

BAT機器學習面試1000題系列 第1 305題

14 L1和L2正則先驗分別服從什麼分佈。機器學習 ML基礎 易@齊同學:面試中遇到的,L1和L2正則先驗分別服從什麼分佈,L1是拉普拉斯分佈,L2是高斯分佈。@AntZ: 先驗就是優化的起跑線, 有先驗的好處就是可以在較小的資料集中有良好的泛化效能,當然這是在先驗分佈是接近真實分佈的情況下得到的了,從資訊理

BAT題庫 | 機器學習面試1000題系列(第246~250題)

246.對於神經網路的說法, 下面正確的是 :  1. 增加神經網路層數, 可能會增加測試資料集的分類錯誤率 2. 減少神經網路層數, 總是能減小測試資料集的分類錯誤率 3. 增加神經網路層數,

BAT機器學習面試1000題系列(第1~60題)

@寒小陽、龍心塵 1 抽象成數學問題 明確問題是進行機器學習的第一步。機器學習的訓練過程通常都是一件非常耗時的事情,胡亂嘗試時間成本是非常高的。 這裡的抽象成數學問題,指的我們明確我們可以獲得什麼樣的資料,目標是一個分類還是迴歸或者是聚類的問題,如果都不是的話,如果劃歸為其中的某類問題。 2 獲取

BAT機器學習面試1000題系列大集合整理(320)

BAT機器學習面試1000題系列大集合整理(已整理至320題)此博文整合了全部發布的最新題目,排版已經經過本人整理,公式已用latex語法表示,方便讀者閱讀。同時連結形式也做了優化,可直接跳轉至相應頁面,希望能夠幫助讀者提高閱讀體驗,文中如果因為本人的整理出

BAT機器學習面試1000題系列(第1~305題)

引言在今年的神經網路頂級會議NIPS2016上,深度學習三大牛之一的Yann Lecun教授給出了一個關於機器學習中的有監督學習、無監督學習和增強學習的一個有趣的比喻,他說:如果把智慧(Intelligence)比作一個蛋糕,那麼無監督學習就是蛋糕本體,增強學習是蛋糕上的櫻桃,那麼監督學習,僅僅能算作蛋糕上的

機器學習筆記(機器學習可行性分析

資料 表示 image 隨機 訓練樣本 -s mage 例如 lin 從大量數據中抽取出一些樣本,例如,從大量彈珠中隨機抽取出一些樣本,總的樣本中橘色彈珠的比例為,抽取出的樣本中橘色彈珠的比例為,這兩個比例的值相差很大的幾率很小,數學公式表示為: 用抽取到的樣本作為訓練

重新學習python系列()? WTF?

== 字符 計數器 函數 有用 read counter pri random 多進程: fork()調用一次,返回兩次,因為操作系統自動把當前進程(稱為父進程)復制了一份(稱為子進程), 然後,分別在父進程和子進程內返回getppid()得到父進程的IDgetpid()

機器學習入門之機器學習的方法-神經網絡(轉載)

轉載 bsp 圖像 src nbsp 加速 數值 str 我們   轉自 飛鳥各投林   神經網絡      神經網絡(也稱之為人工神經網絡,ANN)算法是80年代機器學習界非常流行的算法,不過在90年代中途衰落。現在,攜著“深度學習”之勢,神

python機器學習實戰(

畫畫 import 測試數據 trac 1+n read dex 缺失值 類型 python機器學習實戰(四) 版權聲明:本文為博主原創文章,轉載請指明轉載地址

機器學習面試--樸素貝葉斯

eight str 存儲 hint 做的 均值 相關性 似然 actual 關鍵詞:先驗概率;條件概率和後驗概率;特征條件獨立;貝葉斯公式;樸素貝葉斯;極大似然估計;後驗概率最大化; 期望風險最小化;平滑方法 樸素貝葉斯分類的定義如下: 1. 設 x = a1,a2, ..

機器學習面試--算法評價指標

匹配 預測 src 數據挖掘 學習 關系 目標 mina abs 機器學習分為三個階段: 第一階段:學習模型。采用學習算法,通過對訓練集進行歸納學習得到分類模型; 第二階段:測試模型。將已經學習得到的分類模型用於測試集,對測試集中未知類別的實例進行分類。 第三階

小白學習Spark系列:rdd踩坑總結

build .text 大數據分析 遇到 ESS bstr 分隔符 讀取配置 關註   初次嘗試用 Spark+scala 完成項目的重構,由於兩者之前都沒接觸過,所以邊學邊用的過程大多艱難。首先面臨的是如何快速上手,然後是代碼調優、性能調優。本章主要記錄自己在項目中遇到的

機器學習實戰()邏輯迴歸LR(Logistic Regression)

目錄 0. 前言 1. Sigmoid 函式 2. 梯度上升與梯度下降 3. 梯度下降法(Gradient descent) 4. 梯度上升法(Gradient ascent) 5. 梯度下降/上升法的數學推導