梯度下降的python實現

2021-07-27 11:54:09 字數 1886 閱讀 3746

梯度下降(gradient descent)是最基礎的優化演算法。在微積分中,梯度表示函式增長速度最快的方向。在機器學習問題中,我們的目標常常是求極大值或者極小值。梯度下降法就是沿著梯度的不斷走的方法,當求極小值時沿與梯度相反的方向

用通俗的話說,梯度下降法就像下山,我們會沿著當前最快下降的道路走,直至走至山底(當然這條路未必是最快到達山底的)。

如圖,在乙個求極小值的問題中,我們會沿著梯度不斷往下走,直至走至乙個最低點(區域性最優)。

先從簡單的一元二次方程開始說起。我們擁有乙個函式,

我們使用matplotlib畫出這個函式的圖

我們想求得這個函式的最小值,從圖中可以得到,顯然是在-1處。

那麼梯度下降法會如何求得這個過程呢?

目標函式以及它的導數

f = lambda x:x**2+2*x+1

g = lambda x: 2*x+2

梯度下降法的python表示

def

gd(x_start,step,g,itera):

#x_start 起始點

#step 步長

#g 梯度

#itera 迭代次數

x = x_start

for i in range(itera):

grad = g(x)

x -= grad*step

print("epoch:grad=,x=".format(i,grad,x))

if abs(grad)<1e-6:

break

return x

epoch29:grad=0.01856910058928074,x=-0.9925723597642877
最終答案離-1的舉例已經很小了

# 引數的選擇

當我們把step的值使用1.1代入時,迭代次數不變會怎麼樣呢?

>>>gd(5,1.1,g,30)

epoch29:grad=-2373.7631379977083,x=1423.2578827986254

你會發現x會離目標越來越遠

當我們的step值使用0.0001代入時,迭代次數不變時的答案又是怎麼樣的呢

你會發現他雖然沿著梯度不斷向下走但在總體看來幾乎沒怎麼變·

當你把迭代次數增加到一定大時,它仍然能達到最低點。

當步長過長時,有可能會使梯度下降法無法收斂。

當步長小時,適當增加迭代次數,仍能達到最優解。但是過多的迭代次數會增加訓練的時間。

梯度下降是門手藝活……

梯度下降法的步長到底怎麼確定?

梯度下降演算法的python實現

import sys training data set each element in x represents x0,x1,x2 x 1,0.3 1,1.3 1,2.3 1,3.2 1,4.4 y i is the output of y theta0 x 0 theta1 x 1 theta2...

Python 梯度下降

code import random import numpy as np import matplotlib.pyplot as plt 最速下降法 rosenbrock函式 函式 f x 100 x 2 x 1 2 2 1 x 1 2 梯度 g x 400 x 2 x 1 2 x 1 2 1 x...

梯度下降原理及Python實現

梯度下降演算法是乙個很基本的演算法,在機器學習和優化中有著非常重要的作用,本文首先介紹了梯度下降的基本概念,然後使用python實現了乙個基本的梯度下降演算法。梯度下降有很多的變種,本文只介紹最基礎的梯度下降,也就是批梯度下降。實際應用例子就不詳細說了,網上關於梯度下降的應用例子很多,最多的就是ng...