2013-06-24 42 views
5

我教過自己機器學習的一些在線資源,但我有一個關於漸變下降的問題,我無法弄清楚。漸變下降:我們是否在GD中的每一步迭代了所有的訓練集?或者我們是否爲每個訓練集更改GD?

爲梯度下降的公式由下面的物流回歸給出:

Repeat { 
    θj = θj−α/m∑(hθ(x)−y)xj 
} 

θj哪裏是變量j的係數; α是學習率; hθ(x)是假設; y是實際值,xj是變量j的值。 m是訓練集的數量。 hθ(x),y針對每個訓練集(即,這是和號的用途)。

這是我困惑的地方。

,如果求和代表我的整個訓練集或多少次迭代我已經做到這一點的,我不清楚。

例如,假設我有10個訓練示例。如果我在每個訓練示例之後執行梯度下降,那麼在所有10個訓練示例之後,如果我執行梯度下降,我的係數將會非常不同。

見下面的第一種方式是如何不同,那麼第二種方法:

首先方式

  • 步驟1:由於係數初始化爲0,Hθ(X)= 0
  • 步驟2:在第一個訓練樣例上執行漸變下降。 求和項僅包括1個訓練示例
  • 步驟3:現在使用新的係數,訓練樣例1 & 2 ... 求和項包括第一2訓練實例
  • 步驟4:再次執行梯度下降。
  • 第5步:現在使用新的係數進行訓練例子1,2 & 3 ... 求和項包括前3訓練例子
  • 繼續,直到收斂或使用的所有訓練的例子。

方式二

  • 步驟1:由於係數初始化爲0,Hθ(X)= 0對所有10個 訓練樣例
  • 步驟2:執行使用所有10的梯度下降1個步驟訓練實例。係數將與First Way不同,因爲總和項包括全部10個訓練樣例
  • 步驟3:再次在全部10個訓練樣例上使用新的係數。求和項包括所有10個訓練例子
  • 4步:執行梯度下降,並繼續使用係數上 所有實例直至收斂

我希望我的解釋混亂。有誰知道哪種方式是正確的?

編輯:增加成本的功能和設定功能

cost function = −1/m∑[ylog(hθ(x))+(1−y)log(1−hθ(x))] 
hθ(x) = 1/(1+ e^-z) 
and z= θo + θ1X1+θ2X2 +θ3X3...θnXn 
+0

梯度下降什麼機器學習方法/損失函數?感知? SVM? – carlosdc

+0

@carlosdc這不是SVM,所以我假設它是感知器?對不起,但我從(coursera)學到的課程從未使用過感知器這個術語。它的確教授了SVM,但那是後來的課程,我沒有使用這個方程,所以我假設這不是一個SVM。無論如何,我可以告訴? –

+0

@carlosdc我提供的方程是成本函數的導數...假設是'1 /(1 + e^-z)'和'z =θo+θ1X1+θ2X2+θ3X3...θnXn'.. 。成本函數是:邏輯迴歸的'-1 /mΣ[ylog(hθ(x))+(1-y)log(1-hθ(x))]' –

回答

7

你所描述的第二種方法是執行梯度下降的正確方法。真正的梯度取決於整個數據集,因此一次梯度下降迭代需要使用所有數據集。 (對於任何可以漸變的學習算法都是如此)

「第一種方法」接近稱爲隨機梯度下降的東西。這裏的想法是,使用整個數據集進行一次更新可能會過度,尤其是如果某些數據點是多餘的。在這種情況下,我們從數據集中選取一個隨機點 - 本質上設置m = 1。然後我們根據數據集中單個點的連續選擇進行更新。通過這種方式,我們可以以與漸變下降更新相同的成本進行更新。但每次更新都有點吵,這可能使最終解決方案難以融合。

這些方法之間的折衷被稱爲「MiniBatch」。採取整個數據集的梯度是一整輪「批處理」處理,因爲我們需要手頭的整個數據集。相反,我們將做一個小批量,只選擇整個數據集的一小部分。在這種情況下,我們設置k,1 < k < m,其中k是小批量中的點數。我們選擇k個隨機數據點從每次迭代創建梯度,然後執行更新。重複,直到收斂。顯然,增加/減少k是速度和精度之間的折中。

注意:對於隨機&迷你批量梯度下降,重要的是隨機洗牌/隨機選擇下一個數據點。如果您對每個數據點使用相同的迭代順序,則可能會出現非常奇怪/不好的結果 - 通常會偏離解決方案。

+0

謝謝!包括額外的筆記。我有我的數據全部按y = 0,y = 1的順序排序,但現在我將隨機化它。再次感謝! –

0

在批梯度下降的情況下(取所有樣品),您的解決方案將收斂得更快。在隨機梯度下降的情況下(一次取一個樣本),收斂速度會變慢。

當訓練集不是很大時,使用批梯度下降。但是有些情況下訓練集不固定。例如。訓練發生在飛行中 - 您不斷獲得越來越多的樣本並相應地更新您的矢量。在這種情況下,您必須更新每個樣本。

相關問題