最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

6.3 梯度下降

2023-02-20 15:23 作者:梗直哥丶  | 我要投稿


import?os
import?matplotlib.pyplot?as?plt

os.environ["KMP_DUPLICATE_LIB_OK"]?=?"TRUE"

import?torch

# 定義函數(shù)
def?f(x):
????return?x?**?2?+?4?*?x?+?1

# 定義初始值
x?=?torch.tensor(-10., requires_grad=True)

# 記錄每一步的值
xs?=?[]
ys?=?[]

# 迭代更新參數(shù)
learning_rate?=?0.1
for?i?in?range(100):
????# 計(jì)算預(yù)測(cè)值和損失
????y?=?f(x)

????# 記錄參數(shù)和損失
????xs.append(x.item())
????ys.append(y.item())

????# 反向傳播求梯度
????y.backward()

????# 更新參數(shù)
????with?torch.no_grad():
????????x?-=?learning_rate?*?x.grad

????????# 梯度清零
????????x.grad.zero_()

????

????????
# 顯示真實(shí)的函數(shù)曲線
x_origin?=?torch.arange(-10,?10,?0.1)
y_origin?=?f(x_origin)
plt.plot(x_origin, y_origin,'b-')

# 繪制搜索過程
plt.plot(xs,ys,'r--')
plt.scatter(xs, ys, s=50, c='r') ?# 圓點(diǎn)大小為 50,顏色為紅色
plt.xlabel('x')
plt.ylabel('y')

plt.show()

# 打印結(jié)果
print(f'最終參數(shù)值:{x.item()}')

最終參數(shù)值:-2.000000476837158

更改學(xué)習(xí)率,你可以看到不同的搜索過程。比如調(diào)大到0.7,可以看到下面這樣的圖像??梢钥闯觯^大的學(xué)習(xí)率可能導(dǎo)致優(yōu)化算法很難收斂,來回亂跳。

import?torch
import?matplotlib.pyplot?as?plt

# 定義函數(shù)
def?f(x, y):
????return?x?**?2?+?2*?y?**?2

# 定義初始值
x?=?torch.tensor(-10., requires_grad=True)
y?=?torch.tensor(-10., requires_grad=True)

# 記錄每一步的值
xs?=?[]
ys?=?[]
zs?=?[]

# 迭代更新參數(shù)
learning_rate?=?0.1
for?i?in?range(100):
????# 計(jì)算預(yù)測(cè)值和損失
????z?=?f(x, y)

????# 記錄參數(shù)和損失
????xs.append(x.item())
????ys.append(y.item())
????zs.append(z.item())

????# 反向傳播
????z.backward()

????# 更新參數(shù)
????x.data?-=?learning_rate?*?x.grad
????y.data?-=?learning_rate?*?y.grad

????# 清空梯度
????x.grad.zero_()
????y.grad.zero_()

# 繪制圖像
fig?=?plt.figure()
ax?=?fig.add_subplot(projection='3d')
ax.plot(xs, ys, zs,?'r-')
ax.scatter(xs, ys, zs, s=50, c='r') ?# 圓點(diǎn)大小為 50,顏色為紅色

plt.show()

# 打印結(jié)果
print(f'最終參數(shù)值:x={x.item()}, y={y.item()}')


# 繪制原始的二維函數(shù)圖像
X, Y?=?torch.meshgrid(torch.arange(-10,?10,?0.1), torch.arange(-10,?10,?0.1))
Z?=?f(X, Y)
plt.contour(X, Y, Z, levels=30)

# 繪制搜索過程曲線
plt.plot(xs, ys,?'r-')
plt.scatter(xs, ys, s=50, c='r') ?# 圓點(diǎn)大小為 50,顏色為紅色
plt.show()

最終參數(shù)值:x=-2.0370367614930274e-09, y=-6.533180924230175e-22

在上面例子中,我們分別在3D坐標(biāo)系和二維等高線圖像上可視化的顯示了梯度下降法的搜索過程。你也可以調(diào)整學(xué)習(xí)率,感受一下其中的變化。

6.3.4 怎么調(diào)整學(xué)習(xí)率

通過上面的例子,我們可以看出在深度學(xué)習(xí)中,學(xué)習(xí)率是調(diào)整權(quán)重更新幅度的重要超參數(shù)。如果學(xué)習(xí)率過大,那么權(quán)重會(huì)更新得過快,容易跳過最優(yōu)解;如果學(xué)習(xí)率過小,那么權(quán)重更新會(huì)變得很慢,需要更多的時(shí)間才能收斂到最優(yōu)解。那問題來了,該怎么調(diào)整這個(gè)參數(shù)呢?

常用的方法有:

使用固定的學(xué)習(xí)率:這種方法簡(jiǎn)單,但是在不同的訓(xùn)練數(shù)據(jù)上可能需要調(diào)整不同的學(xué)習(xí)率。

學(xué)習(xí)率衰減(learning rate decay):在訓(xùn)練的過程中隨著時(shí)間的推移,逐漸減小學(xué)習(xí)率。常用的方法有指數(shù)衰減和正則衰減。

動(dòng)態(tài)調(diào)整學(xué)習(xí)率:使用優(yōu)化算法,根據(jù)模型的訓(xùn)練情況動(dòng)態(tài)調(diào)整學(xué)習(xí)率。常用的優(yōu)化算法有?Adam,RMSProp 和 Adagrad。

手動(dòng)調(diào)整學(xué)習(xí)率:在訓(xùn)練的過程中手動(dòng)調(diào)整學(xué)習(xí)率,通常是在驗(yàn)證集上表現(xiàn)不佳時(shí)減小學(xué)習(xí)率,或者在訓(xùn)練集上表現(xiàn)較好時(shí)增大學(xué)習(xí)率。

這里我們先給你羅列了一些常用的方法,具體它們都是什么樣的,原理和細(xì)節(jié)等更多方面的知識(shí)就涉及到了深度學(xué)習(xí)的進(jìn)階課程。如果你感興趣,歡迎加入學(xué)習(xí)(微信:gengzhige99),回復(fù)“我想學(xué)深度學(xué)習(xí)進(jìn)階課程”。


6.3.5 還有比梯度下降法更好的優(yōu)化算法嗎?

當(dāng)然有。但是到底什么是“好”有不同的標(biāo)準(zhǔn),更要看具體情況。梯度下降法是通過不斷迭代來尋找函數(shù)的最小值的方法,其基于最速下降的思想。在每次迭代中,梯度下降法只需要計(jì)算函數(shù)的梯度,因此在計(jì)算上比較簡(jiǎn)單。梯度下降法的收斂速度通常比較慢,但是它更加穩(wěn)定,在很多情況下都能夠找到最優(yōu)解。在實(shí)際應(yīng)用中,我們通常會(huì)采用梯度下降法。但是,如果函數(shù)的形態(tài)比較復(fù)雜,或者計(jì)算函數(shù)的梯度的代價(jià)很高,那么我們就可能會(huì)選擇使用牛頓法。

牛頓法是通過不斷迭代來尋找函數(shù)的最小值的方法,其基于二次近似的思想。在每次迭代中,牛頓法需要計(jì)算函數(shù)的雅可比矩陣,這使得它在計(jì)算上比較復(fù)雜,但是如果滿足一定條件,牛頓法的收斂速度通常會(huì)比梯度下降法要快。這方面的內(nèi)容超出了本課程的范圍。如果你感興趣,可以自行選修。

梗直哥提示:本節(jié)我們簡(jiǎn)要介紹了梯度下降法的基本原理和相關(guān)知識(shí),側(cè)重入門和代碼展示,對(duì)其中的數(shù)學(xué)推導(dǎo)和細(xì)節(jié)限于篇幅原因講述的可能沒有那么深入。如果你希望更加細(xì)致、徹底的了解這種極其重要的方法,歡迎選修我們的前導(dǎo)課程:“解一卷而眾篇明”之機(jī)器學(xué)習(xí)核心概念精講


?


6.3 梯度下降的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
通化市| 大邑县| 磐安县| 叙永县| 阳西县| 抚远县| 阿坝| 新竹市| 昌图县| 大竹县| 牡丹江市| 略阳县| 高安市| 定远县| 阳朔县| 尖扎县| 平乡县| 三门峡市| 广水市| 遂川县| 新丰县| 普宁市| 河池市| 宣城市| 安达市| 安阳县| 龙岩市| 华安县| 阿鲁科尔沁旗| 偏关县| 游戏| 读书| 莱阳市| 桦甸市| 贵南县| 谷城县| 五河县| 呼伦贝尔市| 巨鹿县| 彭泽县| 郧西县|