国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
機(jī)器學(xué)習(xí)干貨,一步一步通過(guò)Python實(shí)現(xiàn)梯度下降的學(xué)習(xí)

Gradient Descent - 梯度下降

梯度下降法(英語(yǔ):Gradient descent)是一個(gè)一階最優(yōu)化算法,通常也稱為最速下降法。 要使用梯度下降法找到一個(gè)函數(shù)的局部極小值,必須向函數(shù)上當(dāng)前點(diǎn)對(duì)應(yīng)梯度(或者是近似梯度)的反方向的規(guī)定步長(zhǎng)距離點(diǎn)進(jìn)行迭代搜索。如果相反地向梯度正方向迭代進(jìn)行搜索,則會(huì)接近函數(shù)的局部極大值點(diǎn);這個(gè)過(guò)程則被稱為梯度上升法。

以上是維基百科對(duì)梯度下降的解釋。

下面我們來(lái)一步一步的學(xué)習(xí)一遍:

什么是 梯度下降?

為了方便,我們準(zhǔn)備一些數(shù)據(jù),并通過(guò)Python繪制出圖像。

圖1:數(shù)據(jù)準(zhǔn)備和圖像

如圖1所示,我們準(zhǔn)備了一組數(shù)據(jù),x軸為體重(Weight)數(shù)據(jù),y軸是身高(Height)數(shù)據(jù),通過(guò)Python中 matplotlib 包,將數(shù)據(jù)圖像話。

此時(shí),圖像中的點(diǎn)似乎呈現(xiàn)出線性的關(guān)系。

問題來(lái)了,我們?cè)趺礃尤フ业阶钇ヅ涞闹本€關(guān)系式呢?

有的同學(xué)會(huì)直接上手 線性回歸。自然沒錯(cuò),但是今天的主角是 梯度下降。

那么,我們一起來(lái)用梯度下降的方式來(lái)解決這個(gè)問題吧!

第一步:假設(shè)函數(shù)關(guān)系 h(x)

既然上述圖像可以被看成是線性關(guān)系,我們就可以假設(shè)一個(gè)線性的函數(shù)關(guān)系式:h(x);

Predicted Height = Intercept + Slope * Weight

身高的預(yù)測(cè)值 = y軸截距 + 斜率 * 體重

找到最優(yōu)化線性關(guān)系的問題就轉(zhuǎn)化成了:找到最優(yōu)的 y軸截距 和 斜率的問題

用數(shù)學(xué)的方法來(lái)表示如下:

圖2:數(shù)學(xué)公式

在數(shù)據(jù)中,真實(shí)存在的 y值 和 預(yù)測(cè)值 h是存在誤差的。這個(gè)誤差可以用殘留誤差(Residual Error)來(lái)表示。

圖3

圖4:殘留誤差(Residual Error)

在圖4中,數(shù)據(jù)點(diǎn)(紅球)的y值與直線給出的預(yù)測(cè)值之間的誤差顯示為藍(lán)色的虛線

  • 在統(tǒng)計(jì)中,我們將所有誤差的平方和稱為

    Sum of the Squared Residuals 殘值平方和;

  • 在機(jī)器學(xué)習(xí)中,所有誤差的平方和稱為

    損失函數(shù) Loss Function ~ J;

為什么損失函數(shù)里要用距離的平方而不是距離的絕對(duì)值?

大家有想過(guò)這個(gè)問題嗎?誤差是| 預(yù)測(cè)值_i - 實(shí)際值_i | ,那我取誤差絕對(duì)值的和的最小值不也可以稱為一個(gè)損失函數(shù)嘛。

千萬(wàn)不要以為這個(gè)平方是隨隨便便來(lái)的。背后是有道理的。

誤差 = 預(yù)測(cè)值_i - 實(shí)際值_i

這個(gè)誤差是符合一定概率分布的??催^(guò)我之前的文章介紹海量數(shù)據(jù)的中心極限定理的朋友,應(yīng)該知道這個(gè)誤差 可以被假定為:

平均值 u = 0,方差為σ 的正態(tài)分布。

圖5:正態(tài)分布

那么在已知正太分布的情況下,每一個(gè)數(shù)據(jù)點(diǎn)都會(huì)對(duì)應(yīng)一個(gè)誤差,而誤差出現(xiàn)的概率,準(zhǔn)確的說(shuō)是Likelihood是可以通過(guò) 正態(tài)分布的函數(shù)求得的。

圖6:likelihood(概率)

所有數(shù)據(jù)點(diǎn) 誤差概率相加

當(dāng)我們對(duì)上述函數(shù)取對(duì)數(shù)可得:

取對(duì)數(shù)

最大似然分析,不懂得看我之前的文章。我們要保證 L 最大,只要保證上式 右邊值最大。

式子右邊 第一項(xiàng)和第二項(xiàng)是定值,只要保證第三項(xiàng)最小就可以使 L最大。

由于 u = 0,只要sum((誤差值_i)^2) 最小就可以啦!

這就是為什么 損失函數(shù) J要采用平方的數(shù)學(xué)解釋啦!

目標(biāo):找到β0 和 β1使得 損失函數(shù) J 最?。。?!

圖7:給出y和x的定義

在Python中,我們首先給β0 和 β1賦值為0,當(dāng)然可以賦值成任何值。

圖8:梯度下降

為什么叫梯度下降?

在圖8中,如果我們將每一個(gè)β0 和 β1對(duì)應(yīng)的的 殘值平方和作圖表示出來(lái),就能發(fā)現(xiàn)局部最低點(diǎn),也就是殘值平方和最小的點(diǎn)。圖8是只考慮斜率的情況下。如果同時(shí)考慮β0 和 β1,則是三維圖像,如圖9.

圖9

第二步:將β0 和 β1插入相關(guān)函數(shù)和導(dǎo)數(shù)中;

介紹了這么多梯度下降,接著我們就進(jìn)入如何使用梯度下降 找到β0 和 β1吧!

小范圍的極小值點(diǎn),我們會(huì)想到 函數(shù)的一階導(dǎo)數(shù) = 0 對(duì)應(yīng)的 x 值。

圖10:一階導(dǎo)數(shù)

接下來(lái),我們要定義一個(gè)重要的概念 學(xué)習(xí)效率(Learning Rate): a梯度下降對(duì)于 Learning Rate的選擇非常敏感。

圖11:梯度下降

當(dāng)我們?cè)诋?dāng)前的β0 和 β1下無(wú)法使得 損失函數(shù)對(duì)于β0 和 β1的偏微分為0。

損失函數(shù)對(duì)于β0 和 β1的偏微分可以理解成β0 和 β1 變化的梯度方向(如圖11)。那么,我們?cè)谶@個(gè)梯度下降的方向上給β0 和 β1做一個(gè)微小的移動(dòng)。

圖12

通過(guò)對(duì)β0 和 β1 最終找到是的損失函數(shù) J 最小的β0 和 β1。

Python實(shí)現(xiàn)梯度下降

圖13

先從β0 和 β1都為0開始,圖13中藍(lán)線。

我們運(yùn)行1000次,并且將直線的演變過(guò)程畫出來(lái):

為了有些同學(xué)想自己試試,我把代碼復(fù)制如下:

import numpy as npfrom matplotlib import pyplot as plt%matplotlib inlinex_data = [1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]y_data = [1, 2, 3, 1, 4, 5, 6, 4, 7, 10, 15, 9]plt.plot(x_data, y_data, 'ro')plt.title('Height vs Weight')plt.xlabel('Weight')plt.ylabel('Height')# y = β0 + β1 * xβ0 = 0β1 = 0y = lambda x : β0 + β1 * xdef plot_line(y, data_points): x_values = [i for i in range(int(min(data_points)) - 1, int(max(data_points)) + 2)] y_values = [y(x) for x in x_values] plt.plot(x_values, y_values, 'b') plot_line(y, x_data)learning_rate = 0.001def summation(y, x_data, y_data): slope_β0 = 0 slope_β1 = 0 for i in range(1, len(x_data)): slope_β0 += y(x_data[i]) - y_data[i] slope_β1 += (y(x_data[i]) - y_data[i]) * x_data[i] return slope_β0 / len(x_data), slope_β1 / len(x_data)for i in range(1000): slope_β0, slope_β1 = summation(y, x_data, y_data) β0 = β0 - learning_rate * slope_β0 β1 = β1 - learning_rate * slope_β1 plot_line(y, x_data) plt.plot(x_data, y_data, 'ro')

總結(jié)

以上就是梯度下降的過(guò)程,以及如何通過(guò)python來(lái)實(shí)現(xiàn)梯度下降。

最后,我們可以得到我們想要的線性關(guān)系函數(shù)了。

y = 0.058 + 1 * x

希望大家喜歡我的文章。

“逃學(xué)博士”:理工科直男一枚,在冰天雪地的加拿大攻讀工程博士。閑暇之余分享點(diǎn)科學(xué)知識(shí)和學(xué)習(xí)干貨。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
跟我學(xué)AI:第一篇 神經(jīng)網(wǎng)絡(luò)是如何實(shí)現(xiàn)的(三)
對(duì)線性回歸、邏輯回歸、各種回歸的概念學(xué)習(xí)
「機(jī)器學(xué)習(xí)入門」(7) 線性回歸算法:原理、公式推導(dǎo)、損失函數(shù)
教程:采用梯度下降算法實(shí)現(xiàn)線性回歸!
神經(jīng)網(wǎng)絡(luò)如何學(xué)習(xí)的?
梯度下降直觀解釋及Python示例
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服