一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

優(yōu)化與深度學(xué)習(xí)之間的關(guān)系

 taotao_2016 2020-05-10

【導(dǎo)讀】在深度學(xué)習(xí)任務(wù)中,我們常常會(huì)為模型定義一個(gè)損失函數(shù),損失函數(shù)表征的是預(yù)測值和實(shí)際值之間的差距,再通過一定的優(yōu)化算法減小這個(gè)差距然后絕大多數(shù)情況下,我們的損失函數(shù)十分復(fù)雜,不像我們解數(shù)學(xué)題能得到一個(gè)確定,唯一的解析解。而是通過數(shù)學(xué)的方法去逼近一個(gè)解,也稱數(shù)值解。

局部最小值和全局最小值

假設(shè)我們的損失函數(shù)是

image-20200506204323155
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-2, 2, 0.01)
print(x)
f = x*np.cos(np.pi*x)
plt.plot(x, f)
plt.show()

我只畫出了區(qū)間(-2, 2)的函數(shù)圖像,通過觀察圖像,我們發(fā)現(xiàn)該函數(shù)有兩個(gè)波谷,分別是局部最小值和全局最小值。

到達(dá)局部最小值的時(shí)候,由損失函數(shù)求得的梯度接近于0,我們很難再跳出這個(gè)局部最小值,進(jìn)而優(yōu)化到全局最小值,即x=1處,這也是損失函數(shù)其中的挑戰(zhàn)

鞍 點(diǎn)

假設(shè)我們的損失函數(shù)為

image-20200506205323585

文章所標(biāo)的點(diǎn),即是鞍點(diǎn)(saddle point),形狀像馬鞍處。

它的特點(diǎn)也是兩邊的梯度趨近于0,但并不是真正的最小值點(diǎn)

在深度學(xué)習(xí)優(yōu)化過程中,這兩種情況很常見,我們需要盡可能地通過數(shù)學(xué)方式去逼近最優(yōu)

梯度下降為什么有效

這里需要用到高數(shù)里面的泰勒展開公式

由于ε是個(gè)極小值,所以我們可以用梯度乘上一個(gè)很小的數(shù),去替代

<section role="presentation" data-formula="f(x-n*f(x)’) = f(x)-n*f(x)" ^2'="" data-formula-type="block-equation">

由于梯度的平方是恒大于0的,因此有

< f(x)'="" data-formula-type='block-equation'>

看到這里大家應(yīng)該就明白了,其中n代表的是超參數(shù)學(xué)習(xí)率,我們通過讓x減去一個(gè)常數(shù)乘以學(xué)習(xí)率,使得目標(biāo)損失函數(shù)值得到下降

接下來我會(huì)以函數(shù)

作為一個(gè)梯度下降例子

以下是我的畫圖代碼

import matplotlib.pyplot as plt
import numpy as np

def gradient_optimizer(eta):
    x = 0.5
    results = [x]
    for i in range(5):
        # 函數(shù)x*np.cos(np.pi*x)的導(dǎo)數(shù)為np.cos(np.pi * x) - x * np.sin(np.pi * x)
        x -= eta * (np.cos(np.pi * x) - x * np.sin(np.pi * x))
        results.append(x)
    return results


res = gradient_optimizer(0.1)


def fx(arr):
    ans = []
    for num in arr:
        ans.append(num * np.cos(np.pi * num))
    return ans


def plot():
    x = np.arange(-2, 2, 0.01)
    y = x * np.cos(np.pi * x)
    res_y = fx(res)
    plt.plot(x, y)
    plt.plot(res, res_y, '-o')
    plt.show()


plot()

image-20200506212515114

函數(shù)從x=0.5開始,很順利的優(yōu)化到了全局最小值的地方

那么我們換到x = -1.0,并增加迭代步伐,再次觀察梯度下降情況

image-20200506212649497

我們將迭代步伐調(diào)至20,可見我們卡在局部最小值,無法跳出

那么我們?cè)囋囋龃髮W(xué)習(xí)率,看能不能跳出來

我將eta設(shè)置為1.000542(PS:這個(gè)函數(shù)太刁鉆了,調(diào)了半天學(xué)習(xí)率才達(dá)到想要的結(jié)果)

image-20200506213117915

可以看見再經(jīng)歷過一系列震蕩后,我們的函數(shù)成功到達(dá)了全局最小值點(diǎn),當(dāng)然背后是我找這個(gè)參數(shù)的心酸。

我們?cè)侔褜W(xué)習(xí)率參數(shù)調(diào)大一點(diǎn)點(diǎn),將eta設(shè)置為1.0055

image-20200506213334210

這里我們也可以看得出學(xué)習(xí)率的關(guān)系

當(dāng)學(xué)習(xí)率很小,我們下降較為平滑,但容易卡在局部最小值點(diǎn)

當(dāng)學(xué)習(xí)率很大,我們梯度優(yōu)化過程中會(huì)十分劇烈,可能達(dá)到全局最小值點(diǎn),但也很可能距離優(yōu)化目標(biāo)越來越遠(yuǎn)

隨機(jī)梯度下降SGD

假設(shè)我們有n個(gè)樣本數(shù)據(jù),那么每次進(jìn)行梯度下降,我們需要分別對(duì)每個(gè)數(shù)據(jù)計(jì)算其梯度。

時(shí)間復(fù)雜度為O(n),當(dāng)樣本很多的時(shí)候,這個(gè)計(jì)算開銷是非常大的。

隨機(jī)梯度下降則是在梯度下降每次迭代當(dāng)中,隨機(jī)采取一個(gè)樣本,計(jì)算其梯度,作為整體梯度進(jìn)行下降,我們的計(jì)算開銷也就下降到了O(1)

為了梯度值更穩(wěn)定,我們也可以選擇小批量隨機(jī)梯度下降,以一小批樣本的梯度作為整體的梯度估計(jì)

動(dòng)量法Momentum

我們實(shí)際優(yōu)化的函數(shù)會(huì)十分復(fù)雜,最常見的函數(shù)是多維的情況。當(dāng)函數(shù)在某個(gè)方向上變化十分劇烈,則對(duì)應(yīng)方向上的梯度變化也十分劇烈,為了達(dá)到收斂,需要更多時(shí)間步迭代。

梯度變化劇烈的另外一個(gè)原因是,我們單一地考慮了當(dāng)前的梯度,而忽略了以前的梯度情況。

當(dāng)我們把以前的梯度加入到當(dāng)前梯度計(jì)算中,會(huì)緩解這種問題,加速收斂

動(dòng)量法引入了一個(gè)速度變量,初始化為0,由以下兩個(gè)公式進(jìn)行變量維護(hù)

指數(shù)移動(dòng)平均

這里參考的是mxnet出品的動(dòng)手學(xué)教程

我們假設(shè)有下面公式

繼續(xù)展開得到

則 這里直接是變量替換而我們由高數(shù)的常見的極限公式可得

而,則 舉個(gè)例子,取,則根據(jù)前面的極限公式 如果我們把0.37看作是個(gè)很小的數(shù),那我們可以忽略了更高階的系數(shù),比如等等 換句話說,當(dāng),我們只關(guān)注近十個(gè)階數(shù)的系數(shù)

簡單來說,指數(shù)移動(dòng)平均就是計(jì)算近幾個(gè)時(shí)間步的加權(quán)平均,時(shí)間越近,對(duì)應(yīng)的權(quán)重就越大

接下來我們對(duì)動(dòng)量法的速度變量進(jìn)行變形

我們相當(dāng)于是對(duì)

這一項(xiàng)做了移動(dòng)平均。因此動(dòng)量法能綜合考慮一定量時(shí)間步內(nèi)的梯度情況

AdaGrad算法

在前面兩種優(yōu)化算法里,自變量的每一個(gè)元素都是使用同一學(xué)習(xí)率來自我迭代。

而在前面我們對(duì)學(xué)習(xí)率討論中,不同學(xué)習(xí)率所帶來的優(yōu)化效果也不同。

因此我們?cè)谒伎寄芊裉岢鲆粋€(gè)自適應(yīng)學(xué)習(xí)率調(diào)整的優(yōu)化算法

AdaGrad算法維護(hù)一個(gè)狀態(tài)變量

通過以下兩個(gè)公式進(jìn)行迭代更新

我們可以看到狀態(tài)變量S每次都是通過梯度按元素平方進(jìn)行迭代,這樣每個(gè)變量就有自己特定的學(xué)習(xí)率,而且狀態(tài)變量放置在分母下,能逐步調(diào)小學(xué)習(xí)率, 不需要人為進(jìn)行調(diào)整。

缺點(diǎn)就是可能模型還未收斂,學(xué)習(xí)率已經(jīng)過小,很難找到合適的數(shù)值解

RMSProp算法

既然AdaGrad缺點(diǎn)是因?yàn)槠椒胶瘮?shù)是個(gè)遞增函數(shù),一直迭代會(huì)讓學(xué)習(xí)率持續(xù)下降。

那么我們不妨將動(dòng)量法的移動(dòng)平均思想,用于處理狀態(tài)變量s

因此RMSProp算是結(jié)合了Adagrad和Momentum的思想

計(jì)算公式如下

移動(dòng)平均并不是一個(gè)單調(diào)遞增的函數(shù),因此它能更好地調(diào)節(jié)學(xué)習(xí)率

Adam算法

Adam算法則是結(jié)合了RMSProp和Momentum算法

它在RMSProp算法基礎(chǔ)上也對(duì)梯度變量做了指數(shù)加權(quán)移動(dòng)平均

公式如下

這里對(duì)速度變量做的指數(shù)移動(dòng)平均與動(dòng)量法的方法有點(diǎn)區(qū)別

在t較小的時(shí)候,各個(gè)時(shí)間步權(quán)值之和不為1

因此需要做個(gè)偏差修正

然后調(diào)整每個(gè)元素的學(xué)習(xí)率

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    精品香蕉国产一区二区三区| 91精品国产品国语在线不卡| 日韩一级一片内射视频4k| 欧洲亚洲精品自拍偷拍| 欧美丰满大屁股一区二区三区| 免费啪视频免费欧美亚洲| 在线欧洲免费无线码二区免费| 亚洲中文字幕免费人妻| 成人三级视频在线观看不卡 | 肥白女人日韩中文视频| 黄色国产自拍在线观看| 在线日本不卡一区二区| 99在线视频精品免费播放| 清纯少妇被捅到高潮免费观看| 日本在线不卡高清欧美 | 中文字幕熟女人妻视频| 国产一级特黄在线观看| 在线免费国产一区二区三区| 亚洲精品蜜桃在线观看| 在线观看视频日韩成人| 国产麻豆视频一二三区| 久久国产人妻一区二区免费| av免费视屏在线观看| 夫妻性生活黄色录像视频| 欧美精品久久一二三区| 国产情侣激情在线对白| 国产亚洲欧美日韩国亚语| 色综合视频一区二区观看| 日本一本在线免费福利| 国产精品涩涩成人一区二区三区| 日本本亚洲三级在线播放| 这里只有九九热精品视频| 国产在线一区二区三区不卡| 精品久久久一区二区三| 色哟哟精品一区二区三区| 国产精品美女午夜福利| 亚洲性日韩精品一区二区| 国产人妻熟女高跟丝袜| 国内自拍偷拍福利视频| 精品国产成人av一区二区三区| 亚洲欧洲一区二区综合精品|