首先引薦一片寫的很詳細的博文
具體介紹不在累述,本文主要視覺化三種梯度下降的差異
先附上手動推導過程:
再附上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的梯度。在向量微積分中,標量場的梯度是乙個向量場。標量場中某一點上的梯度指向標量場增長最快的方向,梯度的長度是這個最大的變化率。更嚴格的說,從歐氏...