衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

常用的三種機器學習優化算法介紹和比較

電子工程師 ? 來源:lq ? 2019-04-29 10:47 ? 次閱讀

在本文中,作者對常用的三種機器學習優化算法(牛頓法、梯度下降法、最速下降法)進行了介紹和比較,并結合算法的數學原理和實際案例給出了優化算法選擇的一些建議。

閱讀本文的基礎準備

線性代數

多變量微積分

對凸函數的基本知識

我們都知道,機器學習中最重要的內容之一就是優化問題。因此,找到一個能夠對函數做合理優化的算法始終是我們關注的問題。當前,我們使用最多的優化算法之一是梯度下降算法。在本文中,我們會對梯度下降算法以及一些其他的優化算法進行介紹,并嘗試從理論角度來理解它們。本文介紹的核心算法包括:

牛頓法(Newton’s Method)

最速下降法(Steep Descent)

梯度下降法(Gradient Descent)

如果想對這些算法有更多了解,你可以閱讀斯坦福大學的《凸函數優化—:第三部分》教材。在本文中,我們主要關注二次函數和多項式函數。

對待優化函數的基本假設

一般而言,我們假設我們處理的函數的導數都是連續的(例如,f ∈ C1)。對于牛頓法,我們還需要假設函數的二階導數也是連續的(例如, f ∈ C2)。最后,我們還需要假設需要最小化的函數是凸函數。這樣一來,如果我們的算法集中到一個點(一般稱為局部最小值),我們就可以保證這個值是一個全局最優。

牛頓法

單變量函數的情況

x_n = starting pointx_n1 = x_n - (f'(x_n)/f''(x_n))while (f(x_n) != f(x_n1)): x_n = x_n1 x_n1 = x_n - (f'(x_n)/f''(x_n))

牛頓法的基本思想是,需要優化的函數f在局部可以近似表示為一個二次函數。我們只需要找到這個二次函數的最小值,并將該點的x值記錄下來。之后重復這一步驟,直到最小值不再變化為止。

多變量函數的情況

對于單變量的情況,牛頓法比較可靠。但是在實際問題中,我們處理的單變量情形其實很少。大多數時候,我們需要優化的函數都包含很多變量(例如,定義在實數集?n的函數)。因此,這里我們需要對多變量的情形進行討論。

假設x∈ ?n,則有:

x_n = starting_pointx_n1 = x_n - inverse(hessian_matrix) (gradient(x_n))while (f(x_n) != f(x_n1)):x_n = x_n1x_n1=x_n-inverse(hessian_matrix)(gradient(x_n))

其中,gradient(x_n)是函數位于x_n點時的梯度向量,hessian_matrix是一個尺寸為 nxn 的黑塞矩陣(hessian matrix),其值是函數位于x_n的二階導數。我們都知道,矩陣轉換的算法復雜度是非常高的(O(n3)),因此牛頓法在這種情形下并不常用。

梯度下降

梯度下降是目前為止在機器學習和其他優化問題中使用的最多的優化算法。梯度算法的基本思想是,在每次迭代中向梯度方向走一小步。梯度算法還涉及一個恒定的alpha變量,該變量規定每次跨步的步長。下面是算法示例:

alpha = small_constantx_n = starting_pointx_n1 = x_n - alpha * gradient(x_n)while (f(x_n) != f(x_n1)): # May take a long time to converge x_n = x_n1 x_n1 = x_n - alpha * gradient(x_n)

這里,alpha是在每次迭代中更新x_n時都需要使用的變量(一般稱為超參數)。下面我們對alpha值的選擇進行簡單分析。

如果我們選擇一個很大的alpha,我們很可能會越過最優點,并離最優點越來越遠。事實上,如果alpha的值過大,我們甚至會完全偏離最優點。

當alpha的值過大時,10次迭代后的梯度下降情況

另外,如果我們選擇的alpha值過小,則可能需要經過非常多次迭代才能找到最優值。并且,當我們接近最優值時,梯度會接近于0。因此 ,如果alpha的值過小,我們有可能永遠都無法到達最優點。

當alpha的值過小時,10次迭代后的梯度下降情況

因此,我們可能需要多嘗試一些alpha的值,才能找到最優的選擇。如果選擇了一個合適的alpha值,我們在迭代時往往能節省很多時間。

當alpha的值合理時,10次迭代后的梯度下降情況

最速下降法

最速下降法和梯度下降法非常相似,但是最速下降法對每次迭代時要求步長的值為最優。下面是最速下降法的算法示例:

x_n = starting_pointalpha_k = get_optimizer(f(x_n - alpha * gradient(x_n)))x_n1 = x_n - alpha_n * gradient(x_n)while (f(x_n) != f(x_n1)): x_n = x_n1 alpha_k = get_optimizer(f(x_n - alpha * gradient(x_n))) x_n1 = x_n - alpha_n * gradient(x_n)

其中,x_n和x_n1是?n上的向量,是算法的輸入,gradient是函數 f 在點x_n的梯度,alpha_k的數學表示如下:

因此,在對原始函數進行優化時,我們需要在每一次迭代中對一個內部函數進行優化。這樣做的優點是,這個內部優化函數是一個單變量函數,它的優化不會非常復雜(例如,我們可以使用牛頓法來作為這里的函數)。但是在更多情形下,在每一步中優化這個函數都會帶來比較昂貴的花銷。

二次式函數的特殊情形

對于均方誤差函數:

其中,I是單位矩陣,y=Qw + b。為了簡化討論,這里我們只考慮尋找權重w最優值的情形(假設b是連續的)。將等式y=Qw + b帶入上式并進行一定整理后,我們可以得到如下等式:

現在我們重新查看一下g(α), 我們會發現,如果我們使用點αk處的梯度,由于其為最優值,該梯度應當為0。因此我們有如下等式:

對上式進行簡化,并將f的梯度帶入后,我們可以得到對于αk的表示如下:

這就是在二次函數情形下αk的值。

對二次函數的收斂性分析

對于定義在?2上的二次函數,最速下降法一般用來在非常接近最優值時使用,使用步數不超過十步。

二維中的最速下降在4次迭代后的情形

在上圖中,每一次迭代中的改變方向都是垂直的。在3到4次迭代后,我們可以發現導數的變化基本可以忽略不計了。

為什么最速下降法應用很少?

最速下降法算法遠遠滿足了超參數調優的需求,并且保證能找到局部最小值。但是為什么該算法應用不多呢?最速下降法的問題在于,每一步都需要對 aplha_k 進行優化,這樣做的成本相對高昂。

例如,對于二次函數,每次迭代都需要計算多次矩陣乘法以及向量點乘。但對于梯度下降,每一步只需要計算導數并更新值就可以了,這樣做的成本遠遠低于最速下降算法。

最速下降算法的另一個問題是對于非凸函數的優化存在困難。對于非凸函數,aplha_k 可能沒有固定的值。

對于梯度下降法和最速下降法的對比

在這一部分,我們對梯度下降法和最速下降法進行對比,并比較它們在時間代價上的差異。首先,我們對比了兩種算法的時間花銷。我們會創建一個二次函數:f:?2???→?(該函數為一個2000x2000的矩陣)。我們將對該函數進行優化,并限制迭代次數為1000次。之后,我們會對兩種算法的時間花銷進行對比,并查看 x_n 值與最優點的距離。

我們先來看一下最速下降法:

0 Diff: 117727672.56583363 alpha value: 8.032725864804974e-06 100 Diff: 9264.791000127792 alpha value: 1.0176428564615889e-05 200 Diff: 1641.154644548893 alpha value: 1.0236993350903281e-05 300 Diff: 590.5089467763901 alpha value: 1.0254560482036439e-05 400 Diff: 279.2355946302414 alpha value: 1.0263893422517941e-05 500 Diff: 155.43169915676117 alpha value: 1.0270028681773919e-05 600 Diff: 96.61812579631805 alpha value: 1.0274280663010468e-05 700 Diff: 64.87719237804413 alpha value: 1.027728512597358e-05 800 Diff: 46.03102707862854 alpha value: 1.0279461929697766e-05 900 Diff: 34.00975978374481 alpha value: 1.0281092917213468e-05 Optimizer found with x = [-1.68825261 5.31853629 -3.45322318 ... 1.59365232 -2.85114689 5.04026352] and f(x)=-511573479.5792374 in 1000 iterationsTotal time taken: 1min 28s

下面是梯度下降法的情況,其中 alpha = 0.000001:

0 Diff: 26206321.312622845 alpha value: 1e-06 100 Diff: 112613.38076114655 alpha value: 1e-06 200 Diff: 21639.659786581993 alpha value: 1e-06 300 Diff: 7891.810685873032 alpha value: 1e-06 400 Diff: 3793.90934664011 alpha value: 1e-06 500 Diff: 2143.767760157585 alpha value: 1e-06 600 Diff: 1348.4947955012321 alpha value: 1e-06 700 Diff: 914.9099299907684 alpha value: 1e-06 800 Diff: 655.9336211681366 alpha value: 1e-06 900 Diff: 490.05882585048676 alpha value: 1e-06 Optimizer found with x = [-1.80862488 4.66644055 -3.08228401 ... 2.46891076 -2.57581774 5.34672724] and f(x)=-511336392.26658595 in 1000 iterationsTotal time taken: 1min 16s

我們可以發現,梯度下降法的速度比最速下降法略快(幾秒或幾分鐘)。但更重要的是,最速下降法采取的步長比梯度下降法更加合理,盡管梯度下降法的α的值并非最優。在上述示例中, 對于梯度下降算法,f(xprex)和f(curr)在第900次迭代時的差為450。而最速下降法在很多次迭代前就已經達到這個值了(大約在第300次到第400次迭代之間)。

因此,我們嘗試限制最速下降法的迭代次數為300,輸出如下:

0 Diff: 118618752.30065191 alpha value: 8.569151292666038e-06 100 Diff: 8281.239207088947 alpha value: 1.1021416896567156e-05 200 Diff: 1463.1741587519646 alpha value: 1.1087402059869253e-05 300 Diff: 526.3014997839928 alpha value: 1.1106776689082503e-05 Optimizer found with x = [-1.33362899 5.89337889 -3.31827817 ... 1.77032789 -2.86779156 4.56444743] and f(x)=-511526291.3367646 in 400 iterationsTime taken: 35.8s

可以發現,最速下降法的速度實際更快。在此情形中,我們在每次迭代使用更少的步數就能逼近最優值。事實上,如果你的目標是估計最優值,最速下降法會比梯度下降法更合適。對于低維度的函數,10步的最速下降法就會比經過1000次迭代的梯度下降法更接近最優值。

下面這個例子中,我們使用了一個定義在?3?→?上的二次函數。10步后,最速下降法的得到函數值為 f(x) = -62434.18。而梯度下降法在1000步后得到的函數值為 f(x) = -61596.84??梢园l現,最速下降法在10步后的結果就優于梯度下降法在1000步后的結果。

需要記住的是,這種情形僅在處理二次函數的時候適用。整體而言,在每次迭代中都找到 αk的最優值是較為困難的。對函數 g(α) 求最優值并不總能得到 αk 的最優值。通常,我們會使用迭代的算法來對優化函數求最小值。在這種情形下,最速下降法與梯度下降法相比就比較慢了。因此,最速下降法在實際應用中并不常見。

總結

在本文中,我們學習了三種下降算法:

牛頓法(Newton's method)

牛頓法提供了對函數的二階近似,并在每一步都對函數進行優化。其最大的問題在于,在優化過程中需要進行矩陣轉換,對于多變量情形花銷過高(尤其是向量的特征較多的時候)。

梯度下降(Gradient Descent)

梯度下降是最常用的優化算法。由于該算法在每步只對導數進行計算,其花銷較低,速度更快。但是在使用該算法時,需要對步長的超參數進行多次的猜測和嘗試。

最速下降法(Steepest Descent)

最速下降法在每步都對函數的梯度向量尋找最優步長。它的問題在于,在每次迭代中需要對相關的函數進行優化,這會帶來很多花銷。對于二次函數的情形,盡管每步都涉及很多矩陣運算,最速下降法的效果仍然更優。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 優化算法
    +關注

    關注

    0

    文章

    35

    瀏覽量

    9715
  • 機器學習
    +關注

    關注

    66

    文章

    8441

    瀏覽量

    133087
  • 線性代數
    +關注

    關注

    5

    文章

    50

    瀏覽量

    11130

原文標題:機器學習萌新必備的三種優化算法 | 選型指南

文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    機器學習新手必學的三種優化算法(牛頓法、梯度下降法、最速下降法)

    手把手教你設計人工智能芯片及系統(全階設計教程+AI芯片FPGA實現+開發板)詳情鏈接:http://url.elecfans.com/u/c422a4bd15本文對常用三種機器學習
    發表于 05-07 08:30

    算法三種結構介紹

    嵌入式學習日記2018.11.62018.11.16理論學習階段計算機科學導論(原書第二版)第8章 算法學到的新知識1算法三種結構:順序、
    發表于 11-08 07:12

    數控機床插補算法中最常用三種算法源碼

    菱PLC(可編程邏輯控制器)編程實例項目例程——數控機床插補算法中最常用三種算法源碼
    發表于 11-08 17:32 ?44次下載

    機器學習經典算法-最優化方法

    機器學習算法之最優化方法
    發表于 09-04 10:05 ?0次下載

    NLP的介紹和如何利用機器學習進行NLP以及三種NLP技術的詳細介紹

    本文用簡潔易懂的語言,講述了自然語言處理(NLP)的前世今生。從什么是NLP到為什么要學習NLP,再到如何利用機器學習進行NLP,值得一讀。這是該系列的第一部分,介紹
    的頭像 發表于 06-10 10:26 ?7.7w次閱讀
    NLP的<b class='flag-5'>介紹</b>和如何利用<b class='flag-5'>機器</b><b class='flag-5'>學習</b>進行NLP以及<b class='flag-5'>三種</b>NLP技術的詳細<b class='flag-5'>介紹</b>

    機器學習算法常用指標匯總

    機器學習性能評價標準是模型優化的前提,在設計機器學習算法過程中,不同的問題需要用到不同的評價標準
    的頭像 發表于 02-13 15:09 ?4937次閱讀
    <b class='flag-5'>機器</b><b class='flag-5'>學習</b><b class='flag-5'>算法</b><b class='flag-5'>常用</b>指標匯總

    介紹機器學習常用三種優化算法

    機器學習的世界中,通常我們會發現有很多問題并沒有最優的解,或是要計算出最優的解要花費很大的計算量,面對這類問題一般的做法是利用迭代的思想盡可能的逼近問題的最優解。
    的頭像 發表于 05-04 18:19 ?3306次閱讀

    深度學習三種學習模式介紹

    深度學習是一個廣闊的領域,它圍繞著一形態由數百萬甚至數十億個變量決定并不斷變化的算法——神經網絡。似乎每隔一天就有大量的新方法和新技術被提出來。不過,總的來說,現代深度學習可以分為
    的頭像 發表于 10-23 14:59 ?1.3w次閱讀
    深度<b class='flag-5'>學習</b>的<b class='flag-5'>三種</b><b class='flag-5'>學習</b>模式<b class='flag-5'>介紹</b>

    10大常用機器學習算法匯總

    本文介紹了10大常用機器學習算法,包括線性回歸、Logistic回歸、線性判別分析、樸素貝葉斯、KNN、隨機森林等。
    發表于 11-20 11:10 ?2827次閱讀

    機器學習算法的基礎介紹

    現在,機器學習有很多算法。如此多的算法,可能對于初學者來說,是相當不堪重負的。今天,我們將簡要介紹 10
    的頭像 發表于 10-24 10:08 ?2014次閱讀

    常用機器學習算法的基本概念和特點

    沒有哪一算法能夠適用所有情況,只有針對某一問題更有用的算法機器學習
    的頭像 發表于 01-17 15:43 ?3658次閱讀

    機器學習之關聯分析介紹

    數據挖掘中應用較多的技術是機器學習。機器學習主流算法包括三種:關聯分析、分類分析、聚類分析。本文
    的頭像 發表于 03-25 14:13 ?1902次閱讀

    基于機器學習算法的校準優化方案

    基于機器學習算法的校準優化方案
    發表于 06-29 12:35 ?455次閱讀
    基于<b class='flag-5'>機器</b><b class='flag-5'>學習</b><b class='flag-5'>算法</b>的校準<b class='flag-5'>優化</b>方案

    機器學習算法的5基本算子

    自主決策的方法和插件,其中包含了一系列常用的基本算子。在本文中,我們將會介紹機器學習算法的五
    的頭像 發表于 08-17 16:11 ?1870次閱讀

    機器學習算法入門 機器學習算法介紹 機器學習算法對比

    ,討論一些主要的機器學習算法,以及比較它們之間的優缺點,以便于您選擇適合的算法。 一、機器
    的頭像 發表于 08-17 16:27 ?1005次閱讀
    大发888 这类平台| 百家乐官网游戏补牌规则| 百家乐官网最新缆| 百家乐开户导航| 韦德娱乐| 澳门档百家乐官网的玩法技巧和规则| 威尼斯人娱乐备用网址| 太阳城百家乐官网手机投注| 缅甸百家乐网络赌博解谜| 伊吾县| 伯爵百家乐娱乐城| 娱乐城开户免存送现金| 百家乐官网保单机解码| 百家乐代理| 网络百家乐官网金海岸破解软件| 尊龙百家乐娱乐场开户注册| 探索| 百家乐赌场技巧大全| 娱网棋牌| 百家乐官网的巧门| 大发888线上娱乐21点| 百家乐官网改单软件| 大发888娱乐代理| 百家乐官网在线洗码| 全讯网网址xb112| 百家乐官网赌博走势图| 太阳城洋伞官网| 郑州百家乐官网的玩法技巧和规则| 全讯网bbin888.com| 网上的百家乐官网怎么才能赚钱| 大发888官网亚洲线上| 百家乐官网娱乐网址| 大发888官方授权网| 百家乐官网画面| 娱乐城开户送白菜| 百家乐视频游戏掉线| 百家乐官网不倒翁缺点| 斗地主百家乐的玩法技巧和规则 | 真人百家乐官网开户须知| 百家乐平注法到6| 大丰收百家乐官网的玩法技巧和规则 |