梯度下降 AdaGrad演算法內容及實現

2022-07-12 18:30:20 字數 2917 閱讀 8181

在一般的優化演算法中,目標函式自變數的每乙個變數都採用統一的學習率來進行迭代。

\[w = w-\eta\frac,\\

b = b-\eta\frac

\]但是adagrad演算法根據自變數在每個維度的梯度值大小來調整各個維度上的學習率,從而避免統一的學習率難以適應所有維度的問題。

『』『初始資料

』『』xdata = np.array([8., 3., 9., 7., 16., 05., 3., 10., 4., 6.]).reshape(-1, 1)

ydata = np.array([30., 21., 35., 27., 42., 24., 10., 38., 22., 25.]).reshape(-1, 1)

m = xdata.shape[0]

w_g = 8

b_g = 90

w_a = 8

b_a = 90

h_w = 0

h_b = 0

eps = 1e-5

tw_g =

tb_g =

tw_a =

tb_a =

iter = 10000

一、代價函式

def cost(w, b):

tsum = 0

for i in range(m):

tsum += (w * xdata[i] + b - ydata[i]) ** 2

return tsum / (2 * m)

二、梯度
def grad(w, b):

dw = (1 / m) * ((w * xdata + b - ydata) * xdata).sum()

db = (1 / m) * (w * xdata + b - ydata).sum()

return dw, db

三、梯度下降
def graddescent(alpha, w, b, iter):

cost = np.zeros(iter)

for i in range(iter):

w, b = cal_gradient(alpha, w, b)

cost[i] = cost(w, b)

return w, b, cost

四、adagrad實現
def cal_adagrad(lr, w, b, h_w, h_b, eps):

dw, db = grad(w, b)

h_w += dw ** 2

h_b += db ** 2

w = w - lr * (1 / math.sqrt(h_w + eps)) * dw

b = b - lr * (1 / math.sqrt(h_b + eps)) * db

return w, b

def adagrad(lr, w, b, iter):

cost = np.zeros(iter)

for i in range(iter):

w, b = cal_adagrad(lr, w, b, h_w, h_b, eps)

cost[i] = cost(w, b)

return w, b, cost

五、影象

深度學習優化方法 AdaGrad 梯度下降

梯度下降演算法 隨機梯度下降演算法 sgd 小批量梯度下降演算法 mini batch sgd 動量法 momentum nesterov動量法有乙個共同的特點是 對於每乙個引數都用相同的學習率進行更新。但是在實際應用中,各個引數的重要性肯定是不一樣的,所以我們對於不同的引數要動態的採取不同的學習率...

梯度下降演算法 梯度下降演算法為何叫梯度下降?

首先,我們知道乙個演算法的名字可以很好地去解釋乙個演算法,那麼梯度下降演算法是什麼呢?很明顯的,就是用梯度這個工具來解決問題的一種演算法。解決什麼問題呢?如何在乙個函式曲面的某一點,找到乙個函式值變化最大的方向。比如 我們站在山上的某一點,我們想要以最快的速度上山,但是我們的步子大小是一定的,那麼最...

梯度下降演算法 梯度下降演算法公式推導

場景假設 梯度下降法的基本思想可以模擬為乙個下山的過程。假設這樣乙個場景 乙個人被困在山上,需要從山上下來 找到山的最低點 但此時山上的濃霧很大,導致可視度很低 因此,下山的路徑就無法確定,必須利用自己周圍的資訊一步一步地找到下山的路。這個時候,便可利用梯度下降演算法來幫助自己下山。怎麼做呢,首先以...