深度學習筆記(四) 梯度下降法與區域性最優解

2021-10-03 17:05:30 字數 2853 閱讀 2467

在深度學習過程中,避免不了使用梯度下降演算法。但是對於「非凸問題」,訓練得到的結果往往可能陷入區域性極小值,而非全域性最優解。那麼這裡就以himmelblau 函式為例,**待優化引數的初始值梯度下降方向的影響,從而得到不同的區域性極小值

首先介紹一下himmelblau 函式:

下圖 為 himmelblau 函式的等高線,大致可以看出,它共有 4 個區域性極小值點,並且區域性極小值都是 0,所以這 4 個區域性極小值也是全域性最小值。我們可以通過解析的方法計算出區域性極小值座標,他們分別是(3,2), (−2 805,3 131), (−3 779,−3 283), (3 584,−1 848)。

在已經知道極小值解的情況下,我們現在來用梯度下降演算法來優化 himmelblau 函式的數值極小值解。

程式清單:

import tensorflow as tf

import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import axes3d

defhimmelblau

(x):

return

(x[0]**

2+ x[1]

-11)**

2+(x[0

]+ x[1]

**2-7

)**2x = np.arange(-6

,6,0.1

)y = np.arange(-6

,6,0.1

)print

('x,y range:'

, x.shape, y.shape)

x, y = np.meshgrid(x, y)

# 生成x-y平面網格點,方便視覺化

print

('x,y maps:'

, x.shape, y.shape)

z = himmelblau(

[x, y]

)# 呼叫函式,計算函式值

fig = plt.figure(

'himmelblau'

)ax = fig.gca(projection=

'3d'

)ax.plot_su***ce(x, y, z)

# 繪製3d圖形

ax.view_init(60,

-30)ax.set_xlabel(

'x')

ax.set_ylabel(

'y')

ax.set_ylabel(

'z')

plt.show(

)x = tf.constant([4

.,0.

])# 初始化引數(下面的實驗只需要改這一行的引數)

for step in

range

(200):

with tf.gradienttape(

)as tape:

# 梯度跟蹤

tape.watch(

[x])

# 加入梯度跟蹤列表

y = himmelblau(x)

# 向前傳播

grads = tape.gradient(y,

[x])[0

]# 梯度計算

x -=

0.01

*grads # 梯度下降

if step %

20==19:

print

('step{}: x,y={}; h(x,y)={}'

.format

(step, x.numpy(

), y.numpy())

)

在上面**中,我們只需要改初始化引數,來看看對最終結果的影響

(1)第一次,選取初始點為(4,0),經過200輪迭代訓練後,得到的極小值處為:(3.584,-1.848),極小值接近0。訓練結果如下:

(2)第二次,選取初始點(1,0),訓練結果如下:

(3)第三次,選取初始點(-4,0),訓練結果如下:

(4)第四次,選取初始點(-2,2),訓練結果如下:

統計上面的四次實驗得到的數值結果,與我們通過筆算得到的解析解進行比較,如下表:

可得出如下結論:

(1)通過梯度下降法訓練得到的數值最優解(極小值),幾乎等於解析解。

(2)當對待優化引數x初始化為不同的值時,最後對應的最優解(極小值)處也不相同。

這表明:通過梯度下降演算法迭代得到的最優解(區域性極小值)位置與待優化引數的初始值密切相關

深度學習(七)梯度下降法

應用機器學習演算法時,我們通常採用梯度下降法來對採用的演算法進行訓練。其實,常用的梯度下降法還具體包含有三種不同的形式,它們也各自有著不同的優缺點。總結如下 下面我們以線性回歸演算法來對三種梯度下降法進行比較。一般線性回歸函式的假設函式為 對應的能量函式 損失函式 形式為 下圖為乙個二維引數 0和 ...

機器學習演算法(四) 梯度下降法

在對模型優化時,希望通過梯度下降法使得模型的損失函式降低。目前主要的梯度下降法有sgd momentum adagrad rmsprop adam幾種,接下來將詳細討論這幾種方法以及他們的優缺點。隨機選取乙個樣本的損失來近似整體樣本的平均損失,sgd在進行引數更新時的計算方式為 t t 1 gt t...

機器學習(三) 梯度下降法

本部落格大部分參考了這篇博文 在微積分裡面,對多元函式的引數求 偏導數,把求得的各個引數的偏導數以向量的形式寫出來,就是梯度。比如函式f x,y 分別對x,y求偏導數,求得的梯度向量就是 f x f y 簡稱gr adf x,y 或者 f x,y 如果是3個引數的向量梯度,就是 f x f y,f ...