梯度下降(BGD SGD MSGD)差異

2021-08-15 06:29:17 字數 2309 閱讀 3687

首先引薦一片寫的很詳細的博文

具體介紹不在累述,本文主要視覺化三種梯度下降的差異

先附上手動推導過程:

再附上python**:

# encoding=utf-8

import numpy as np

import matplotlib.pyplot as plt

#建立訓練資料集

#假設訓練學習乙個線性函式y = 2.33x

example_num = 100#訓練總數

batch_size = 10#mini_batch訓練集大小

train_step = 100#訓練次數

learning_rate = 0.0001#學習率

x_input = np.arange(example_num) * 0.1#生成輸入資料x

y_output_correct = 2.33 * x_input#生成訓練正確輸出資料

def train_func(x, k):

result = k * x

return result

#bgd

#引數初始化值

k_bgd = 0.0

#記錄迭代資料用於作圖

k_bgd_record =

for step in range(train_step):

sum_bgd = 0

for index in range(len(x_input)):

sum_bgd += (train_func(x_input[index], k_bgd) - y_output_correct[index]) * x_input[index]

k_bgd -= learning_rate * sum_bgd

#sgd

k_sgd = 0.0

k_sgd_record =

for step in range(train_step):

index = np.random.randint(len(x_input))

sum_sgd = (train_func(x_input[index], k_sgd) - y_output_correct[index]) * x_input[index]

k_sgd -= learning_rate * sum_sgd

#mbgd

k_mbgd = 0.0

k_mbgd_record =

for step in range(train_step):

sum_mbgd = 0

index_start = np.random.randint(len(x_input) - batch_size)

for index in np.arange(index_start, index_start+batch_size):

sum_mbgd += (train_func(x_input[index], k_mbgd) - y_output_correct[index]) * x_input[index]

k_mbgd -= learning_rate * sum_mbgd

#作圖plt.plot(np.arange(train_step), np.array(k_bgd_record), label='bgd')

plt.plot(np.arange(train_step), k_sgd_record, label='sgd')

plt.plot(np.arange(train_step), k_mbgd_record, label='mbgd')

plt.legend()

plt.ylabel('weight')

plt.xlabel('step')

plt.show()

再附上執行結果圖:

bgd:可以在迭代步驟上可以快速接近最優解,但是其時間消耗相對其他兩種是最大的,因為每一次更新都需要遍歷完所有資料。

sgd:引數更新是最快的,因為每遍歷乙個資料都會做引數更新,但是由於沒有遍歷完所有資料,所以其路線不一定是最佳路線,甚至可能會反方向巡跡,不過其整體趨勢是往最優解方向行進的,隨機速度下降還有乙個好處是有一定概率跳出區域性最優解,而bgd會直接陷入區域性最優解。

msgd:以上兩種都是mbgd的極端,mbgd是中庸的選擇,保證引數更新速度的前提下,用過小批量又增加了其準備度,所以大多數的梯度下降演算法中都會使用到小批量梯度下降。

梯度下降 隨機梯度下降 批梯度下降

下面的h x 是要擬合的函式,j 損失函式,theta是引數,要迭代求解的值,theta求解出來了那最終要擬合的函式h 就出來了。其中m是訓練集的記錄條數,j是引數的個數。梯度下降法流程 1 先對 隨機賦值,可以是乙個全零的向量。2 改變 的值,使j 按梯度下降的方向減少。以上式為例 1 對於我們的...

梯度下降 隨機梯度下降和批量梯度下降

對比梯度下降和隨機梯度下降和批量梯度下降 之前看的知識比較零散,沒有乙個系統的解釋說明,看了一些網上的博主的分析,總結了一下自己的理解。例子這裡我參照其他博主的例子做了一些修改,首先是梯度下降 coding utf 8 import random this is a sample to simula...

stanford 梯度 梯度下降,隨機梯度下降

一 梯度gradient 在標量場f中的一點處存在乙個向量g,該向量方向為f在該點處變化率最大的方向,其模也等於這個最大變化率的數值,則向量g稱為標量場f的梯度。在向量微積分中,標量場的梯度是乙個向量場。標量場中某一點上的梯度指向標量場增長最快的方向,梯度的長度是這個最大的變化率。更嚴格的說,從歐氏...