Pytorch深度學習-梯度下降02

之前采用的窮舉法來求解最優(yōu)的w值,但是當數(shù)據(jù)量大維度多的時候,會導致訓練性能急劇下降
而梯度下降算法的原理:迭代找到目標函數(shù)的最小值,或者收斂到最小值

梯度的概念:

1.在單變量的函數(shù)中,梯度其實就是函數(shù)的微分溪烤,代表著函數(shù)在某個給定點的切線的斜率
2.在多變量函數(shù)中,梯度是一個向量庇勃,向量有方向氛什,梯度的方向就指出了函數(shù)在給定點的上升最快的方向
3.α在梯度下降算法中被稱作為學習率或者步長,意味著我們可以通過α來控制每一步走的距離

隨機梯度下降算法:

之前的梯度下降可能會產生鞍點問題匪凉,當訓練遇到梯度為0的情況時w=w-a*gradient(x_data,y_date)捺檬,w無法繼續(xù)向前迭代再层,有可能會錯過最優(yōu)值,故可以采取隨機梯度下降算法堡纬,將每一個樣本的梯度代入進行迭代聂受,盡可能的將w送到最優(yōu)處。

本次使用的模型為簡單線性回歸模型:y = w*x

1.定義線性回歸模型

#定義模型
def forward(x):
    return w*x
#初始隨機猜測一個權值w=1.0
w=-1.0

2.計算損失函數(shù)

#定義單次成本計算函數(shù)
def loss(x,y):
    y_pred = forward(x)
    return (y-y_pred) ** 2

3.數(shù)據(jù)集

#定義 DataSet-實際w==2
x_date = [1.0,2.0,3.0]
y_date = [2.0,4.0,6.0]

4.定義梯度計算公式

#定義隨機梯度計算公式
def gradient(x, y):
    return 2*x*(x*w-y)

5.使用梯度下降算法進行訓練

#通過梯度下降算法來訓練模型---設定為1-100次:左閉右開區(qū)間
#拿所有樣本對反復訓練100次烤镐,每一次都需要訓練所有的樣本對---梯度為樣本點的梯度
for epoch in range(1, 100):
    print("epoch=", epoch)
    for x, y in zip(x_date, y_date):
        loss_val = loss(x, y)
        # 每一次訓練用的梯度都是一對樣本對的梯度蛋济,也就是某點的梯度
        w = w-0.01*gradient(x, y)   #學習率定義為0.01
        print("\tx=", x, "y=", y, "grad=", gradient(x, y),"w=", w)
    #打印輸出是第幾次訓練,訓練權值和訓練的損失函數(shù)
    w_list.append(w)
    mse_list.append(loss_val)
    print("\tw=", w, "loss=", loss_val)

6.完整代碼及訓練結果

# -*- codeing = utf-8 -*-
'''
梯度下降算法存在的問題:
    1.陷入局部最優(yōu)
    2.解決鞍點問題
'''
#采用隨機梯度下降算法---計算每一點樣本對的梯度來進行w權值的更新
#優(yōu)點: 時間復雜度高炮叶,但是結果比較準確
#存在的缺點: 由于本次的訓練w值來源于上一個樣本的梯度訓練碗旅,故由于前后關系,無法進行并行計算的方式進行梯度下降訓練
'''
當計算平均梯度遇到鞍點(梯度為0點,即gradient == 0)時镜悉,w=w-a*gradient無法前進祟辟,此時某一隨機樣本的梯度可能不是鞍點,可能繼續(xù)將w向前
'''
import matplotlib.pyplot as plt

#訓練數(shù)據(jù)集---實際w權值=2.0
x_date = [1.0,2.0,3.0]
y_date = [2.0,4.0,6.0]
#初始隨機猜測一個權值w=1.0
w=-1.0
#定義線性回歸模型
def forward(x):
    return x*w
#定義單次成本計算函數(shù)
def loss(x,y):
    y_pred = forward(x)
    return (y-y_pred) ** 2
w_list = []
mse_list = []
#定義隨機梯度計算公式
def gradient(x, y):
    return 2*x*(x*w-y)
print("predict before training:", "w=", w, forward(4))

#通過梯度下降算法來訓練模型---設定為1-100次:左閉右開區(qū)間
#拿所有樣本對反復訓練100次侣肄,每一次都需要訓練所有的樣本對---梯度為樣本點的梯度
for epoch in range(1, 100):
    print("epoch=", epoch)
    for x, y in zip(x_date, y_date):
        loss_val = loss(x, y)
        # 每一次訓練用的梯度都是一對樣本對的梯度旧困,也就是某點的梯度
        w = w-0.01*gradient(x, y)   #學習率定義為0.01
        print("\tx=", x, "y=", y, "grad=", gradient(x, y),"w=", w)
    #打印輸出是第幾次訓練,訓練權值和訓練的損失函數(shù)
    w_list.append(w)
    mse_list.append(loss_val)
    print("\tw=", w, "loss=", loss_val)

print("predict completed:", "w=", w, forward(4))
plt.plot(w_list, mse_list)
plt.ylabel("mean Square error")
plt.xlabel("w")
plt.show()



結果如下:
image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末稼锅,一起剝皮案震驚了整個濱河市吼具,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌矩距,老刑警劉巖拗盒,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異剩晴,居然都是意外死亡锣咒,警方通過查閱死者的電腦和手機侵状,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毅整,“玉大人趣兄,你說我怎么就攤上這事〉考担” “怎么了艇潭?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長戏蔑。 經常有香客問我蹋凝,道長,這世上最難降的妖魔是什么总棵? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任鳍寂,我火速辦了婚禮,結果婚禮上情龄,老公的妹妹穿的比我還像新娘迄汛。我一直安慰自己,他們只是感情好骤视,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布鞍爱。 她就那樣靜靜地躺著,像睡著了一般专酗。 火紅的嫁衣襯著肌膚如雪睹逃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天祷肯,我揣著相機與錄音沉填,去河邊找鬼。 笑死佑笋,一個胖子當著我的面吹牛拜轨,可吹牛的內容都是我干的。 我是一名探鬼主播允青,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼橄碾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了颠锉?” 一聲冷哼從身側響起法牲,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎琼掠,沒想到半個月后拒垃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡瓷蛙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年悼瓮,在試婚紗的時候發(fā)現(xiàn)自己被綠了戈毒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡横堡,死狀恐怖埋市,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情命贴,我是刑警寧澤道宅,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站胸蛛,受9級特大地震影響污茵,放射性物質發(fā)生泄漏。R本人自食惡果不足惜葬项,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一泞当、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧民珍,春花似錦零蓉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽箩兽。三九已至津肛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間汗贫,已是汗流浹背身坐。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留落包,地道東北人部蛇。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像咐蝇,于是被迫代替她去往敵國和親涯鲁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內容