0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

常用的三種機器學(xué)習(xí)優(yōu)化算法介紹和比較

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

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

閱讀本文的基礎(chǔ)準備

線性代數(shù)

多變量微積分

對凸函數(shù)的基本知識

我們都知道,機器學(xué)習(xí)中最重要的內(nèi)容之一就是優(yōu)化問題。因此,找到一個能夠?qū)瘮?shù)做合理優(yōu)化的算法始終是我們關(guān)注的問題。當(dāng)前,我們使用最多的優(yōu)化算法之一是梯度下降算法。在本文中,我們會對梯度下降算法以及一些其他的優(yōu)化算法進行介紹,并嘗試從理論角度來理解它們。本文介紹的核心算法包括:

牛頓法(Newton’s Method)

最速下降法(Steep Descent)

梯度下降法(Gradient Descent)

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

對待優(yōu)化函數(shù)的基本假設(shè)

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

牛頓法

單變量函數(shù)的情況

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))

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

多變量函數(shù)的情況

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

假設(shè)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)是函數(shù)位于x_n點時的梯度向量,hessian_matrix是一個尺寸為 nxn 的黑塞矩陣(hessian matrix),其值是函數(shù)位于x_n的二階導(dǎo)數(shù)。我們都知道,矩陣轉(zhuǎn)換的算法復(fù)雜度是非常高的(O(n3)),因此牛頓法在這種情形下并不常用。

梯度下降

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

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時都需要使用的變量(一般稱為超參數(shù))。下面我們對alpha值的選擇進行簡單分析。

如果我們選擇一個很大的alpha,我們很可能會越過最優(yōu)點,并離最優(yōu)點越來越遠。事實上,如果alpha的值過大,我們甚至?xí)耆x最優(yōu)點。

當(dāng)alpha的值過大時,10次迭代后的梯度下降情況

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

當(dāng)alpha的值過小時,10次迭代后的梯度下降情況

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

當(dāng)alpha的值合理時,10次迭代后的梯度下降情況

最速下降法

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

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是函數(shù) f 在點x_n的梯度,alpha_k的數(shù)學(xué)表示如下:

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

二次式函數(shù)的特殊情形

對于均方誤差函數(shù):

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

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

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

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

對二次函數(shù)的收斂性分析

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

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

在上圖中,每一次迭代中的改變方向都是垂直的。在3到4次迭代后,我們可以發(fā)現(xiàn)導(dǎo)數(shù)的變化基本可以忽略不計了。

為什么最速下降法應(yīng)用很少?

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

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

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

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

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

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

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ā)現(xiàn),梯度下降法的速度比最速下降法略快(幾秒或幾分鐘)。但更重要的是,最速下降法采取的步長比梯度下降法更加合理,盡管梯度下降法的α的值并非最優(yōu)。在上述示例中, 對于梯度下降算法,f(xprex)和f(curr)在第900次迭代時的差為450。而最速下降法在很多次迭代前就已經(jīng)達到這個值了(大約在第300次到第400次迭代之間)。

因此,我們嘗試限制最速下降法的迭代次數(shù)為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

可以發(fā)現(xiàn),最速下降法的速度實際更快。在此情形中,我們在每次迭代使用更少的步數(shù)就能逼近最優(yōu)值。事實上,如果你的目標(biāo)是估計最優(yōu)值,最速下降法會比梯度下降法更合適。對于低維度的函數(shù),10步的最速下降法就會比經(jīng)過1000次迭代的梯度下降法更接近最優(yōu)值。

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

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

總結(jié)

在本文中,我們學(xué)習(xí)了三種下降算法:

牛頓法(Newton's method)

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

梯度下降(Gradient Descent)

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

最速下降法(Steepest Descent)

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 優(yōu)化算法
    +關(guān)注

    關(guān)注

    0

    文章

    35

    瀏覽量

    9660
  • 機器學(xué)習(xí)
    +關(guān)注

    關(guān)注

    66

    文章

    8349

    瀏覽量

    132315
  • 線性代數(shù)
    +關(guān)注

    關(guān)注

    5

    文章

    50

    瀏覽量

    11050

原文標(biāo)題:機器學(xué)習(xí)萌新必備的三種優(yōu)化算法 | 選型指南

文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    機器學(xué)習(xí)新手必學(xué)的三種優(yōu)化算法(牛頓法、梯度下降法、最速下降法)

    手把手教你設(shè)計人工智能芯片及系統(tǒng)(全階設(shè)計教程+AI芯片F(xiàn)PGA實現(xiàn)+開發(fā)板)詳情鏈接:http://url.elecfans.com/u/c422a4bd15本文對常用三種機器學(xué)習(xí)
    發(fā)表于 05-07 08:30

    算法三種結(jié)構(gòu)介紹

    嵌入式學(xué)習(xí)日記2018.11.62018.11.16理論學(xué)習(xí)階段計算機科學(xué)導(dǎo)論(原書第二版)第8章 算法學(xué)到的新知識1算法三種結(jié)構(gòu):順序、
    發(fā)表于 11-08 07:12

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

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

    機器學(xué)習(xí)經(jīng)典算法-最優(yōu)化方法

    機器學(xué)習(xí)算法之最優(yōu)化方法
    發(fā)表于 09-04 10:05 ?0次下載

    NLP的介紹和如何利用機器學(xué)習(xí)進行NLP以及三種NLP技術(shù)的詳細介紹

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

    機器學(xué)習(xí)算法常用指標(biāo)匯總

    機器學(xué)習(xí)性能評價標(biāo)準是模型優(yōu)化的前提,在設(shè)計機器學(xué)習(xí)算法過程中,不同的問題需要用到不同的評價標(biāo)準
    的頭像 發(fā)表于 02-13 15:09 ?4369次閱讀
    <b class='flag-5'>機器</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>算法</b><b class='flag-5'>常用</b>指標(biāo)匯總

    介紹機器學(xué)習(xí)常用三種優(yōu)化算法

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

    深度學(xué)習(xí)三種學(xué)習(xí)模式介紹

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

    10大常用機器學(xué)習(xí)算法匯總

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

    機器學(xué)習(xí)算法的基礎(chǔ)介紹

    現(xiàn)在,機器學(xué)習(xí)有很多算法。如此多的算法,可能對于初學(xué)者來說,是相當(dāng)不堪重負的。今天,我們將簡要介紹 10
    的頭像 發(fā)表于 10-24 10:08 ?1890次閱讀

    常用機器學(xué)習(xí)算法的基本概念和特點

    沒有哪一算法能夠適用所有情況,只有針對某一問題更有用的算法。 機器學(xué)習(xí)
    的頭像 發(fā)表于 01-17 15:43 ?3441次閱讀

    機器學(xué)習(xí)之關(guān)聯(lián)分析介紹

    數(shù)據(jù)挖掘中應(yīng)用較多的技術(shù)是機器學(xué)習(xí)。機器學(xué)習(xí)主流算法包括三種:關(guān)聯(lián)分析、分類分析、聚類分析。本文
    的頭像 發(fā)表于 03-25 14:13 ?1731次閱讀

    基于機器學(xué)習(xí)算法的校準優(yōu)化方案

    基于機器學(xué)習(xí)算法的校準優(yōu)化方案
    發(fā)表于 06-29 12:35 ?405次閱讀
    基于<b class='flag-5'>機器</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>算法</b>的校準<b class='flag-5'>優(yōu)化</b>方案

    機器學(xué)習(xí)算法的5基本算子

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

    機器學(xué)習(xí)算法入門 機器學(xué)習(xí)算法介紹 機器學(xué)習(xí)算法對比

    ,討論一些主要的機器學(xué)習(xí)算法,以及比較它們之間的優(yōu)缺點,以便于您選擇適合的算法。 一、機器
    的頭像 發(fā)表于 08-17 16:27 ?911次閱讀