最簡單的梯度下降法

梯度下降法,主要通過梯度方向與學習率兩個值,一步一步迭代求出最優值的過程。

1. 隨機產生開始迭代的初始值,包括x值,學習率;

2. 計算函數的導數,通過學習率與導數的乘積更新x,即

x_{i+1} = x_{i} - \frac{\partial y}{\partial x}\times lr

其中lr是學習率,\frac{\partial y}{\partial x}是函數的導數。

3. 用更新的x,更新y,重複2與3,直到相鄰兩個y值相同,或者相鄰兩個y的差值小於某個值終止。

假設以y=x^{2}爲例,則相關python代碼實現如下:

# 第一步:隨機生成一個數,區間在[-10,10]
x_begin = np.random.uniform(-10,10)
iter_time = 1
learning_rate = 0.3
x = x_begin
y_tmp = 0
# 第二步:根據梯度乘以時間做迭代,通過前後兩次的值的差小於某個值作爲迭代終止條件
while(True):
    y = x**2
    # 添加終止條件,當前後兩個y值一樣時終止
    if np.abs(y-y_tmp)>1e-8:
        # 更新x值
        print('iter time: ',iter_time)
        print('gradient*learning_rate: ',2*x*learning_rate,',the x is %f' % x,'and the y is %f' % y)
        iter_time = iter_time + 1
        x = x - 2*x*learning_rate
        y_tmp = y
    else:
        break

運行的結果如下所示:

梯度下降法的特點:

不能保證被優化的函數達到全局最優解。

初始化值很大程度上影響求解最優解。

當函數爲凸函數時,梯度下降法能夠保證達到全局最優解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章