學習筆記之梯度下降算法

梯度下降(Gradient Descent, GD)是目前機器學習、深度學習解決最優化問題的算法中,最核心、應用最廣的方法。它不是一個機器學習算法,而是一種基於搜索的最優化方法。其作用是用來對原始模型的損失函數進行優化,以便尋找到最優的參數,使得損失函數的值最小。也就是,用已知訓練集數據尋找最優得參數,從而找到最優得擬合模型。哪什麼是梯度下降呢?

一、概念

梯度是向量,和參數維度一樣。簡單地來說,多元函數的導數(derivative)就是梯度(gradient),分別對每個變量進行微分,然後用逗號分割開,梯度是用括號包括起來,說明梯度其實是一個向量。比如說線性迴歸損失函數L的梯度爲:f=(La,Lb)\triangledown f=(\frac{\partial{L}}{\partial{a}},\frac{\partial{L}}{\partial{b}})

二、計算過程

1、步驟:

①、對各參數向量求偏導,得出f\triangledown f
②、設置初始參數向量、學習率 η及閾值threshold ;
③、迭代計算參數向量下f\triangledown f值,若f\triangledown f值小於等於閾值threshold 停止,此時的參數向量爲局部最優解;否則,計算下一點參數向量,公式是上一個點參數向量-η*f\triangledown f,進行下一步迭代。

2、一元方程式

一元函數:f(x)=3x2+5xf(x)=3x^2+5x
第一步,求導數。f(x)=6x+5f^{'}(x)=6x+5
第二步,初始化x0x_0、η、threshold。x0=1η=0.1threshold=0.0001x_0=1,η=0.1,threshold=0.0001
第三步,計算f(x0)f^{'}(x_0),並和threshold對比。
第四步,迭代過程。如下表所示:
在這裏插入圖片描述

2.1 簡單代碼演示

首先,手工定義原函數和導函數。
def loss_function(x):
    return 3*(x**2)+5*x

def det_function(x):
    return 6*x+5
然後,定義梯度下降方法。
def get_GD(od_f=None,f=None,x_0=None,eta=0.001,threshold=0):
    x_all=[]
    od_f_all=[]
    det_f_all=[]
    count_n=0
    while True:
        count_n+=1
        y=od_f(x_0)
        #計算導數在x處的值
        det_f=f(x_0)     
        od_f_all.append(y)
        x_all.append(x_0)
        det_f_all.append(det_f)
        #計算下一個點的值
        x_0=x_0-eta*det_f
        #判斷是否到達目的地
        if det_f<=threshold:
            break
            
    return x_all,od_f_all,det_f_all,count_n
最後,設置x_0=1,eta=0.1,threshold=0.0001。查看圖形。

在這裏插入圖片描述
完整代碼塊

參考文章:https://mp.weixin.qq.com/s/44p8anqiiQV6XYGqH5u-Ug
https://mp.weixin.qq.com/s/nI9IBa4ccfg0xqyn0tbRPA
https://mp.weixin.qq.com/s/8gStYSSBvkXeuaX6Pp9qiQ
https://mp.weixin.qq.com/s/OUslRwKGpS29gncsiyAPyg

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