梯度下降詳細簡單解釋(tensorflow代碼講解)

梯度下降

1.梯度

各個方向的偏微分組成的向量

圖一
​ 圖1

舉例說明,z對x的偏微分和對y的偏微分如下,則梯度是(-2x,2y)的這樣一個向量

在這裏插入圖片描述
​ 圖2

在光滑連續函數的每個點上,都可以計算一個梯度,也就是一個向量,用小箭頭表示,那麼梯度越大的地方,向量的模值就會越大,箭頭就會越長,如圖所示

在這裏插入圖片描述
​ 圖3

可以看到,越平坦的地方,箭頭越短,說明梯度越小,所以梯度反映了圖像的變化趨勢

2.通過梯度更新參數,讓目標函數(損失函數)趨於極小值

更新參數的目的是讓目標函數找到一個極小值,這個目標函數就是我們說的損失函數

在函數中的每個變量稱爲參數,對圖二中的例子進一步分析,x,y兩個就是參數,如圖,x沿着x正方向,所以△x>0,如果函數是上升的,是在上坡的,則△z>0,這時候參數x應該往回走,即應該減小。如果函數是下降,是下坡的,則△z<0,這時候參數x應該往前走,即應該增大,所以參數和梯度的關係應該是相反的
在這裏插入圖片描述
左邊是更新後的參數, at是學習率,防止每次改變的幅度過大,一不小心跳過了最小值點
在這裏插入圖片描述
圖4

3.通過tensorflow計算梯度

損失函數定義在

with tf.GradientTape() as tape:
    tape.watch([w])
    loss = w*x#在這裏定義損失函數

計算梯度在

grade = tape.gradient(loss,w)#在這裏計算梯度

完整代碼

import tensorflow as tf
w = tf.constant(1)
x = tf.constant(2.)
with tf.GradientTape() as tape:
    tape.watch([w])
    loss = w*x#在這裏定義損失函數
grade = tape.gradient(loss,w)#在這裏計算梯度
with tf.Session() as sess:
    print(sess.run(grade))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章