什麼是梯度
梯度:梯度的本意是乙個向量,由函式對每個引數的偏導組成,表示某一函式在該點處的方向導數沿著該方向取得最大值,即函式在該點處沿著該方向變化最快,變化率最大。
梯度下降演算法原理
演算法思想:梯度下降是一種非常通用的優化演算法,能夠為大範圍的問題找到最優解。梯度下降的中心思想就是迭代地調整引數從而使損失函式最小化。假設你迷失在山上的迷霧中,你能感覺到的只有你腳下路面的坡度。快速到達山腳的乙個策略就是沿著最陡的方向下坡。這就是梯度下降的做法:通過測量引數向量 θ 相關的損失函式的區域性梯度,並不斷沿著降低梯度的方向調整,直到梯度降為 0 ,達到最小值。
其中 η 為學習率,是 0 到 1 之間的值,是個超引數,需要我們自己來確定大小。
演算法原理:
在傳統機器學習中,損失函式通常為凸函式,假設此時只有乙個引數,則損失函式對引數的梯度即損失函式對引數的導數。如果剛開始引數初始在最優解的左邊,
很明顯,這個時候損失函式對引數的導數是小於 0 的,而學習率是乙個 0 到 1 之間的數,此時按照公式更新引數,初始的引數減去乙個小於 0 的數是變大,也就是在座標軸上往右走,即朝著最優解的方向走。同樣的,如果引數初始在最優解的右邊,
此時按照公式更新,引數將會朝左走,即最優解的方向。所以,不管剛開始引數初始在何位置,按著梯度下降公式不斷更新,引數都會朝著最優解的方向走。
梯度下降演算法流程
隨機初始引數;
確定學習率;
求出損失函式對引數梯度;
按照公式更新引數;
重複 3 、 4 直到滿足終止條件(如:損失函式或引數更新變化值小於某個閾值,或者訓練次數達到設定閾值)。
程式設計要求根據提示,使用 python 實現梯度下降演算法,並損失函式最小值時對應的引數theta,theta會返回給外部**,由外部**來判斷theta是否正確。
測試說明
損失函式為:loss=θ²−8θ+17loss=\theta²-8\theta+17loss=θ²−8θ+17
最優引數為:4.0
你的答案跟最優引數的誤差低於0.0001才能通關。
# -*- coding: utf-8 -*-
import numpy as np
import warnings
warnings.filterwarnings(
"ignore"
)def
gradient_descent
(initial_theta,eta=
0.05
,n_iters=
1000
,epslion=1e-
8):'''
梯度下降
:param initial_theta: 引數初始值,型別為float
:param eta: 學習率,型別為float
:param n_iters: 訓練輪數,型別為int
:param epslion: 容忍誤差範圍,型別為float
:return: 訓練後得到的引數
'''#********** begin *********#
theta = initial_theta
i_iter =
0while i_iter < n_iters:
gradient =
2*theta -
8#梯度
last_theta = theta
theta = theta - eta*gradient
if(abs
(theta-last_theta)
:break
i_iter +=
1return theta
#********** end **********#
機器學習 梯度下降
參照 機器學習 這本書的第4.4.3節。一.解決目標及情景假設 當給定一些資料,輸入x向量已知,輸出y也已知,設計乙個線性函式y h x 去擬合這些資料。既然是線性函式,在此不妨設為h x w0 x0 w1 x1。此時我們遇到的問題就是如何確定w0和w1這兩個引數,即w w0,w1 這個向量。既然是...
機器學習 梯度下降
梯度下降法 如果讀者對方向導數和梯度的定義不太了解,請先閱讀上篇文章 方向導數與梯度 前些時間接觸了機器學習,發現梯度下降法是機器學習裡比較基礎又比較重要的乙個求最小值的演算法。梯度下降演算法過程如下 1 隨機初始值 2 迭代 在這裡,簡單談一下自己對梯度下降法的理解。首先,要明確梯度是乙個向量,是...
機器學習 梯度下降
1.引數要同時更新 2.初始化不同,獲得的最小值也不同,即得到的引數也不同,演算法收斂到不同的區域性最優解。凸函式只有全域性最優解,無論如何初始化,不必擔心陷入區域性最優解 3.越接近最小值時,收斂的速度最逐漸減慢,在學習率不變的情況下,越接近最小值 最優解 偏導數的絕對值會越來越小,所以演算法收斂...