精簡版SGD理解隨機梯度下降過程


 1 #精簡版SGD
 2 def SGD(self, training_data, epochs, mini_batch_size, eta,):
 3         n = len(training_data)
 4         # 進行epochs次主循環來計算weights和biases
 5         for j in xrange(epochs):
 6             # 每個主循環走一遍所有訓練數據,並shuffle一下提供好的隨機性
 7             random.shuffle(training_data)
 8             # 對於每個計算隨機梯度的具體事件,設置一個mini_batch,用這mini_batch_size個樣本來計算隨機梯度
 9             mini_batches = [
10                 training_data[k:k+mini_batch_size]
11                 for k in xrange(0, n, mini_batch_size)]
12             # 計算隨機梯度,更新weights和biases,eta是學習率
13             for mini_batch in mini_batches:
14                 self.update_mini_batch(mini_batch, eta)
知乎上看到一個直觀的解釋...
鏈接:https://www.zhihu.com/question/43673341/answer/730181826

涉及到的基礎概念有批數量,迭代次數,訓練集數量。

打個比方吧,比如田徑跑步。

一次只能8個人一起跑,這就是模型的批數量,也就是說batch number 為8

然后開始跑步,也就是說進行模型的前向傳播,

然后跑步到終點,一次迭代完成,這整個的一次過程稱為模型的一次迭代。

那么剩下的田徑選手怎么辦,繼續從頭開始跑,也就是說開始下一次的迭代。

所有的選手都跑完之后,也就是說數據集中的數據在模型中都訓練完了,這就是一次epoch。

epoch與epoch之間是獨立的,一次接一次的迭代,一個epoch接一個epoch。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM