自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺顯易懂!「高中數(shù)學(xué)」讀懂梯度下降的數(shù)學(xué)原理

開發(fā) 開發(fā)工具 機(jī)器學(xué)習(xí)
梯度下降是最常用的機(jī)器學(xué)習(xí)優(yōu)化算法之一,Towards Data Science 近日發(fā)布了一篇文章,淺顯易懂地解釋了梯度下降的原理和工作過程。
「過早優(yōu)化是罪惡之源?!?

——計(jì)算機(jī)科學(xué)家和數(shù)學(xué)家 Donald Ervin Knuth

敏捷(agile)是軟件開發(fā)過程中的一個(gè)廣為人知的術(shù)語。其背后的基本思想很簡單:快速構(gòu)建出來→發(fā)布它→獲得反饋→基于反饋進(jìn)行修改→重復(fù)這一過程。這種做法的目標(biāo)是讓產(chǎn)品親近用戶,并讓用戶通過反饋引導(dǎo)你,以實(shí)現(xiàn)錯(cuò)誤最少的可能的產(chǎn)品。另外,改進(jìn)的步驟也需要很小,并且也應(yīng)該讓用戶能持續(xù)地參與進(jìn)來。在某種程度上講,敏捷軟件開發(fā)過程涉及到快速迭代。而梯度下降的基本過程也差不多就是如此——盡快從一個(gè)解開始,盡可能頻繁地測(cè)量和迭代。

目標(biāo)

梯度下降算法是一個(gè)迭代過程,能讓我們得到一個(gè)函數(shù)的最小值(這里先不提一些額外的注意事項(xiàng))。下面的公式將整個(gè)梯度下降算法匯總成為了一行:

梯度下降

但我們是怎么得到這個(gè)公式的?實(shí)際上很簡單,而且僅包含一些高中數(shù)學(xué)知識(shí)(小編:海外高中數(shù)學(xué)?捂臉)。我們希望能通過這篇文章在線性回歸模型的背景中理解和再現(xiàn)這一公式。

一個(gè)機(jī)器學(xué)習(xí)模型

設(shè)有一些在一個(gè) 2D 空間中的數(shù)據(jù)點(diǎn)。假設(shè)這些數(shù)據(jù)與一組學(xué)生的身高和體重有關(guān)。我們希望預(yù)測(cè)這些量之間的某種關(guān)系,以使我們可以預(yù)測(cè)未來某個(gè)新學(xué)生的體重。這本質(zhì)上是監(jiān)督式機(jī)器學(xué)習(xí)技術(shù)的一個(gè)簡單案例。

現(xiàn)在,讓我們?cè)诳臻g中畫一條任意的線,并使其穿過某些數(shù)據(jù)點(diǎn)。那么這條線的方程即為 Y = mX + b,其中 m 是斜率,b 是這條線在 Y 軸上的截距。

梯度下降

預(yù)測(cè):

給定一組已知的輸入和它們對(duì)應(yīng)的輸出。機(jī)器學(xué)習(xí)模型會(huì)嘗試基于這些數(shù)據(jù)預(yù)測(cè)新輸入的輸出結(jié)果。

機(jī)器學(xué)習(xí)過程

誤差(Error)即為兩個(gè)預(yù)測(cè)結(jié)果之間的差異。

與其相關(guān)的概念是成本函數(shù)或損失函數(shù)。

成本函數(shù)

成本函數(shù)/損失函數(shù)評(píng)估的是我們的機(jī)器學(xué)習(xí)算法的性能表現(xiàn)。損失函數(shù)計(jì)算的是單個(gè)訓(xùn)練樣本的誤差,成本函數(shù)則是損失函數(shù)在整個(gè)訓(xùn)練集上的平均。因此,我會(huì)交替地使用這兩個(gè)術(shù)語。

基本上而言,成本函數(shù)能告訴我們?cè)诮o定了 m 和 b 的值時(shí)模型在預(yù)測(cè)方面的表現(xiàn)「有多好」。

比如說,如果數(shù)據(jù)集中共有 N 個(gè)點(diǎn),而對(duì)于所有這 N 個(gè)數(shù)據(jù)點(diǎn),我們希望最小化其誤差。因此成本函數(shù)就將是總平方誤差,即:

N 個(gè)數(shù)據(jù)點(diǎn)的成本函數(shù)

為什么我們要用平方差而不直接使用絕對(duì)差呢?因?yàn)槠椒讲钅茏屛覀兏p松地推導(dǎo)出一條回歸線。實(shí)際上,為了找到那條線,我們需要計(jì)算成本函數(shù)的一階導(dǎo)數(shù),而計(jì)算絕對(duì)值的倒數(shù)比計(jì)算平方值的導(dǎo)數(shù)要難得多。

1. 最小化成本函數(shù)

任何機(jī)器學(xué)習(xí)算法的目標(biāo)都是最小化成本函數(shù)。

這是因?yàn)閷?shí)際值和預(yù)測(cè)值之間的誤差越低,就說明算法在學(xué)習(xí)上的表現(xiàn)就越好。因?yàn)槲覀兿M玫降偷恼`差值,所以我們希望這些m 和 b 值所得到的誤差盡可能最小。

2. 我們究竟如何最小化任意函數(shù)?

仔細(xì)觀察,我們的成本函數(shù)是 Y=X² 的形式。在笛卡爾坐標(biāo)系中,這是一個(gè)拋物線方程,可以畫成下圖形式:

拋物線

要最小化上述函數(shù),我們需要找到能得到低 Y值的 X 值,即紅點(diǎn)位置。因?yàn)檫@是一張2D 圖,所以定位其最小值很容易,但在更高維度上情況卻非如此。在這些情況下,我們需要設(shè)計(jì)一個(gè)能定位最小值的算法,這個(gè)算法就是梯度下降。

梯度下降

梯度下降是最常用的優(yōu)化算法之一,也是目前最常用的優(yōu)化神經(jīng)網(wǎng)絡(luò)的方式。這是一種用于尋找函數(shù)最小值的迭代式優(yōu)化算法。

1. 直觀理解

假設(shè)你正沿著下面的圖行走,而且目前正位于綠點(diǎn)位置。你的目標(biāo)是到達(dá)最小值,即紅點(diǎn)位置;但在你的位置處,你無法看到最小值在哪里。

可能的動(dòng)作會(huì)是這樣:

  • 你可能向上或向下
  • 如果你決定了要走的方向,為了到達(dá)目的地,你可能跨一大步,也可能走一小步。

本質(zhì)上講,為了到達(dá)最小值,你應(yīng)該知道兩件事:走哪條路和步子邁多大。

梯度下降算法可使用導(dǎo)數(shù)幫助我們有效且高效地做這些決定。導(dǎo)數(shù)是源自微積分的一個(gè)術(shù)語,可作為圖在特定點(diǎn)的斜率而進(jìn)行計(jì)算。所以,如果我們有能力計(jì)算這條切線,我們可能就能夠算出為到達(dá)最小值所應(yīng)選擇的方向。我們將在后文更詳細(xì)地介紹這一點(diǎn)。

2. 最小值

在上圖中,我們可以在綠點(diǎn)畫一條切線,我們知道,如果我們向上移動(dòng),我們就將遠(yuǎn)離最小值或者反過來。另外,這條切線也能讓我們了解斜率的陡峭程度。

藍(lán)點(diǎn)處的斜率沒有綠點(diǎn)處陡,這意味著從藍(lán)點(diǎn)到達(dá)最小值所需的步幅比在綠點(diǎn)處要小得多。

3. 成本函數(shù)的數(shù)學(xué)解釋

現(xiàn)在,讓我們將上面介紹的一切寫成數(shù)學(xué)公式。在等式 y = mX+b 中,m 和 b 是其參數(shù)。在訓(xùn)練過程中,它們的值會(huì)進(jìn)行較小的變化。我們將這個(gè)小變化表示成δ。參數(shù)的值將分別以m=m-δm和 b=b-δb 的方式更新。這里我們的目標(biāo)是找到y(tǒng)=mx+b 中能使誤差最小的 m 和 b 值,即最小化成本函數(shù)的值。

重寫成本函數(shù):

其思想是,通過計(jì)算函數(shù)的導(dǎo)數(shù)和斜率,我們可以找到該函數(shù)的導(dǎo)數(shù)/斜率。

學(xué)習(xí)率

到達(dá)最小值或底部的步幅大小被稱為學(xué)習(xí)率。更大的步幅/更高的學(xué)習(xí)率可以覆蓋更大區(qū)域,但卻有越過最小值的風(fēng)險(xiǎn)。另一方面,更小的步幅/更低的學(xué)習(xí)率到達(dá)低點(diǎn)需要消耗大量時(shí)間。

下面的圖片展示了學(xué)習(xí)率的概念。在第三張圖中,我們用最少的步驟到達(dá)了最小值。這是這一問題的學(xué)習(xí)率。

可以看到,當(dāng)學(xué)習(xí)率過低時(shí),需要很多步驟才能收斂。而當(dāng)學(xué)習(xí)率過高時(shí),梯度下降將無法到達(dá)最小值,如下圖所示。

不同學(xué)習(xí)率的實(shí)驗(yàn)結(jié)果可參考:

https://developers.google.com/machine-learning/crash-course/fitter/graph。

導(dǎo)數(shù)

機(jī)器學(xué)習(xí)在優(yōu)化問題中使用導(dǎo)數(shù)。梯度下降等優(yōu)化算法使用導(dǎo)數(shù)來實(shí)際決定是增大還是減小權(quán)重,以增大或減小目標(biāo)函數(shù)。

如果我們可以計(jì)算出一個(gè)函數(shù)的導(dǎo)數(shù),我們就會(huì)知道要繼續(xù)的方向就是最小化該函數(shù)的方向。我們主要是處理兩個(gè)來自微積分的概念:

1. 冪規(guī)則

冪規(guī)則計(jì)算的是提升成冪的變量的導(dǎo)數(shù)。

2. 鏈?zhǔn)椒▌t

鏈?zhǔn)椒▌t用于計(jì)算復(fù)合函數(shù)的導(dǎo)數(shù)。鏈?zhǔn)椒▌t可以使用萊布尼茲符號(hào)表示如下:

如果變量 z 依賴于變量 y,而變量 y 又依賴于變量 x,則 y 和 z 是因變量,而且 z 也通過中間變量依賴于 x。這被稱為鏈?zhǔn)椒▌t,用數(shù)學(xué)式可寫成:

讓我們通過一個(gè)例子來理解:

將冪規(guī)則和鏈?zhǔn)椒▌t用于導(dǎo)數(shù),我們可以計(jì)算成本函數(shù)相對(duì)于 m 和 b 的變化方式。這涉及到偏導(dǎo)數(shù)的概念,即如果一個(gè)函數(shù)有兩個(gè)變量,則尋找該函數(shù)相對(duì)于一個(gè)變量的偏導(dǎo)數(shù)的方法是將另一個(gè)變量視為常量。用例子解釋會(huì)更清楚:

3. 計(jì)算梯度下降

現(xiàn)在我們將這些微積分規(guī)則應(yīng)用于我們?cè)瓉淼牡仁剑⒄业匠杀竞瘮?shù)相對(duì)于 m 和 b 的導(dǎo)數(shù)。重訪成本函數(shù):

為了簡單,讓我們擺脫其中的求和符號(hào)。這個(gè)求和部分很重要,尤其是涉及到隨機(jī)梯度下降(SGD)與批梯度下降的概念時(shí)。在批梯度下降的過程中,我們一次性檢查所有訓(xùn)練樣本的誤差;而在 SGD 過程中,我們每次檢查每個(gè)誤差。但是,為了簡單起見,我們假設(shè)我們每次檢查每個(gè)誤差。

現(xiàn)在,我們來計(jì)算與 m 和 b 相關(guān)的誤差的梯度:

將這些值放回成本函數(shù),并將其與學(xué)習(xí)率相乘:

現(xiàn)在,這個(gè)等式中的 2 并不是那么重要,因?yàn)樗皇潜硎疚覀兊膶W(xué)習(xí)率有兩倍或一半那么大。所以我們直接丟掉它。因此,最終這整篇文章都濃縮成了兩個(gè)表示梯度下降的簡單等式。

m¹,b¹ = 下個(gè)位置參數(shù);m⁰,b⁰ = 當(dāng)前位置參數(shù)。

因此,為了求解梯度,我們使用新的 m 和 b 值迭代我們的數(shù)據(jù)點(diǎn)并計(jì)算偏導(dǎo)數(shù)。這個(gè)新梯度能指出成本函數(shù)在當(dāng)前位置的斜率以及我們應(yīng)該移動(dòng)的方向,以便更新我們的參數(shù)。我們的更新的大小受學(xué)習(xí)率控制。

總結(jié)

這篇文章的目的是展示梯度下降的概念。我們使用了梯度下降作為線性回歸的優(yōu)化策略。通過繪制擬合線來測(cè)量學(xué)生身高和體重之間的關(guān)系。但是,需要重點(diǎn)指出,這個(gè)線性回歸示例是為了演示簡單而選擇的,梯度下降也可用于其它機(jī)器學(xué)習(xí)技術(shù)。

原文鏈接:

https://towardsdatascience.com/understanding-the-mathematics-behind-gradient-descent-dde5dc9be06e

【本文是51CTO專欄機(jī)構(gòu)“機(jī)器之心”的原創(chuàng)譯文,微信公眾號(hào)“機(jī)器之心( id: almosthuman2014)”】 

戳這里,看該作者更多好文

 

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2019-05-10 09:00:00

JWTAPI身份驗(yàn)證

2020-03-13 08:31:23

網(wǎng)絡(luò)IP地址子網(wǎng)掩碼

2023-04-25 17:20:22

數(shù)據(jù)模型

2014-06-19 14:14:35

機(jī)器學(xué)習(xí)

2024-12-23 10:20:00

數(shù)據(jù)訓(xùn)練模型

2022-04-22 12:36:11

RNN神經(jīng)網(wǎng)絡(luò))機(jī)器學(xué)習(xí)

2010-06-11 08:52:17

并行計(jì)算

2025-01-10 09:25:00

模型數(shù)據(jù)微軟

2015-11-03 09:31:07

自學(xué)高手數(shù)據(jù)分析

2021-07-29 07:51:43

工具 HappensBefore

2025-03-03 01:00:00

DeepSeekGRPO算法

2024-06-07 09:26:30

模型數(shù)學(xué)

2019-01-31 09:20:36

架構(gòu)容錯(cuò)架構(gòu)分布式容錯(cuò)

2025-03-11 14:27:34

find -permLinux權(quán)限文件

2009-11-23 10:24:22

2025-04-07 09:40:00

智能體AI代碼

2020-06-08 09:11:47

Linux 內(nèi)核Linux內(nèi)核

2023-11-16 12:36:00

AI數(shù)據(jù)

2025-01-03 11:46:31

2018-02-04 16:14:30

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)