非調庫方法實現梯度下降法多元線性回歸:
在高等數學中,我們學習了導數,泰勒展開等等,我們一定做過一類題:求最小值/極小值,其實就是在求我們該如何取引數,使得目標函式取得最小值。這個數學問題有著深厚的工程應用背景,比如:深度學習中,我們該如何取神經網路的權值,使得學習誤差最小?這裡的權值就是我們要求的引數,學習誤差就是目標函式。
通常我們的做法是求導,令求導的方程等於零,解方程。但是在學習時我們發現,我們只能用這個方法解決一小部分相對簡單的方程,但在工程應用中,往往這個方程非常複雜,我們需要求取的引數可能很多,這時候,這一套方法就變得不切實際。
這種情況下,我們可以使用梯度下降法,根據代價函式建立乙個迭代序列,通過不斷迭代,去逼近得到乙個全域性最小值或者是乙個區域性極小值。如何能保證我們的迭代方向是朝著目標函式值不斷減小的方向進行的呢?接下來簡單的證明一下,並不需要很高深的理論。
觀察一階泰勒展開式,假如我們將約等號右側的f(x0)看作是上一次的值,左側的f(x)看作是更新值,那麼我們只要使約等號右側第二項是負值,那麼我們的目標函式就是朝著變小的方向變化的。
而要使第二項恒為小於等於0的值,我們可以取,在不同的應用中會有不同的名字,我們將這一式子帶入一階泰勒展開式,就變成了如下形式:
因此,我們就能構造出使f(x)不斷減小的迭代序列:
到此,我們過了一遍梯度下降法的演算法核心,值得一提的是,在進行梯度下降時,我們需要賦乙個初始的x值,這個初始值不同,我們經過梯度下降得到的最小值可能也是不同的,因為梯度下降法找到的可能是全域性最小值,也可能是區域性極小值,這個問題可以通過多次隨機賦初值執行來解決。
隨後會更新梯度下降演算法的一些應用實踐,分別是python語言實現線性回歸,sklearn實現線性回歸,keras實現線性回歸。
梯度下降法和隨機梯度下降法
批量梯度下降法 batch gradient descent 在更新引數時使用所有的樣本來進行更新 隨機梯度下降法 stochastic gradient descent 求梯度時沒有用所有的m個樣本的資料,而是僅僅選取乙個樣本j來求梯度。小批量梯度下降法 mini batch gradient d...
梯度下降法
梯度下降法 是乙個一階 最優化演算法 通常也稱為 最速下降法 我之前也沒有關注過這類演算法。最近,聽史丹福大學的機器學習課程時,碰到了用梯度下降演算法求解線性回歸問題,於是看了看這類演算法的思想。今天只寫了一些入門級的知識。我們知道,函式的曲線如下 程式設計實現 c code cpp view pl...
梯度下降法
回歸 regression 梯度下降 gradient descent 發表於332 天前 技術,科研 被圍觀 1152 次 前言 這個系列主要想能夠用數學去描述機器學習,想要學好機器學習,首先得去理解其中的數學意義,不一定要到能夠輕鬆自如的推導中間的公式,不過至少得認識這些 式子吧,不然看一些相關...