題:
當可以使用封閉形式的數學解時,為什麼要使用梯度下降進行線性回歸?
Purus
2017-05-10 21:52:31 UTC
view on stackexchange narkive permalink

我正在在線學習機器學習課程,並了解了梯度下降法,用於計算假設中的最佳值。

  h(x)= B0 + B1X
 

如果我們可以使用以下公式輕鬆找到值,為什麼需要使用Gradient Descent?這看起來也很簡單。但是GD需要多次迭代才能獲得該值。

  B1 =關聯*(y的標準偏差/ x的標準偏差)

B0 =均值(Y)– B1 *均值(X)
 

NOTE:中所述:https://www.dezyre.com/data-science-in-r-programming-tutorial/linear-regression-tutorial

我確實檢查了以下問題,但對於我來說,不清楚。

為什麼需要梯度下降?

為什麼優化是通過梯度下降而不是解析解來解決的?

以上答案比較了GD與使用導數。

您無需梯度下降即可估算線性回歸係數。
@Sycorax“不需要”是一個強有力的聲明。迭代方法可能對海量數據有用。說數據矩陣很大,無法容納在內存中。
@hxd1011感謝您闡明問題的實際範圍。我在純粹用數學的角度思考。
七 答案:
Aksakal
2017-05-11 00:39:45 UTC
view on stackexchange narkive permalink

將梯度下降用於線性回歸的主要原因是計算複雜性:在某些情況下,使用梯度下降來尋找解決方案在計算上更便宜(更快)。

您編寫的公式看起來非常簡單,甚至在計算上也很簡單,因為它僅適用於單變量情況,即只有一個變量時。在多變量情況下,當您有很多變量時,公式在紙上稍微複雜一些,並且在軟件中實現時,需要更多much的計算: $$ \ beta =(X'X)^ {-1} X'Y $$ 在這裡,您需要計算矩陣$ X'X $,然後將其求逆(請參見下面的註釋)。這是一個昂貴的計算。供您參考,(設計)矩陣X具有K + 1列,其中K是預測變量數和N行觀測值。在機器學習算法中,您可以得到K> 1000和N> 1,000,000。 $ X'X $矩陣本身需要花費一些時間來計算,因此您必須將$ K \ times K $矩陣求逆-這很昂貴。

因此,梯度下降可節省大量計算時間。而且,它的完成方式允許微不足道的並行化,即在多個處理器或機器之間分佈計算。線性代數解也可以並行化,但是它更複雜且仍然昂貴。

此外,當您僅將一部分數據保留在內存中時,會有梯度下降的版本,從而降低了對計算機內存的需求。總體而言,對於特大問題,它比線性代數解決方案更有效。

當像機器學習中那樣有成千上萬個變量時,隨著維數的增加,這一點變得更加重要。

Remark。 Ng的演講對梯度下降給予瞭如此多的關注,令我感到驚訝。他花了很短的時間來談論它,可能佔整個課程的20%。對我來說,這只是實現細節,這就是您找到最佳方案的確切方式。關鍵在於製定優化問題,而您發現它的精確程度無關緊要。我不會太擔心。將其交給計算機科學人員,並專注於對您作為統計學家重要的事情。

必須要說的是,了解求解算法的計算複雜度和數值穩定性確實對來說是很重要的。我仍然認為您不必了解算法的實現細節和代碼。通常,這不是最好的時間來用作統計學家。

注1。我寫道,出於教學目的,您必須將矩陣求逆,這並不是平時求解方程式的方式。在實踐中,線性代數問題是通過使用某種因數分解(例如QR)來解決的,其中您不直接求矩陣求反,而是進行其他數學上等效的操作以獲得答案。這樣做是因為在許多情況下矩陣求反是一項昂貴且數值不穩定的操作。

這帶來了梯度下降算法的另一個小優點:副作用:即使設計矩陣存在共線性問題,它也可以工作。即使對於共線性預測變量,通常的線性代數路徑也會爆炸,並且梯度下降將繼續進行。

但是Ng是計算機科學的人。
@amoeba,對他有好處,當我們在CV閒逛時,他可能正在SO上發布帖子:)
@hxd1011,如果您在談論此課程,那麼對於目標受眾來說,這是可以理解的。他是MOOC時代的第一門課程,這幾乎開始了整件事。他不可能將線性代數作為前提條件-那時沒有人會註冊。
關於您的評論:作為數學家,我曾經同意。但是我現在的理解是,在現代機器學習中,優化方法與要優化的目標固有地聯繫在一起。某些形式的正則化(如輟學)可以用算法而不是目標更清晰地表達。簡而言之:如果您使用深網,保留目標函數但更改優化方法,則可能會獲得截然不同的性能。實際上,有時更好的優化程序在實踐中會產生更差的結果...
次要nitpick:您當然不會*反轉* $ X'X $;取而代之的是,您將*解*線性方程組$ X'X \ beta = X'y $為$ \ beta $。從抽像上講,它是相同的,但從數字上講,它要穩定得多,甚至可能更便宜。
多說一點:$(X'X)^ {-1} $有時條件不好,因此不計任何計算成本,它可能會產生錯誤的結果。梯度下降不需要任何逆運算符。
另一方面,帶有QR因式分解的@AnderBiguri解決方案向後穩定,因此在輸入數據存在不確定性的情況下,它可提供盡可能準確的解決方案。
我認為我們都應該停止寫$ \ beta =(X ^ t X)^ {-1} X ^ t y $,而應該一直寫$ X ^ t X \ beta = X ^ t y $。
@MatthewDrury,為什麼不$ y = X \ beta $?我的觀點是,這只是一個等式,並沒有告訴您如何解決。理解是$(X'X)^ {-1} X'y $不是字面的機器指令。另一方面,它很簡單,可以為初學者提供幫助,也可以解決大多數玩具問題。當他們開始解決實際問題時,他們會知道發生了什麼事
@MatthewDrury同意了。這就是為什麼我在求解線性系統$ X ^ tX \ beta = X ^ ty $時會感到困惑的原因。但是,這樣做的好處是為許多人隱藏了更多細節,這表明我們可以為$ \ beta $提供分析解決方案
@Aksakal這是我不同意的觀點。我認為矩陣求逆並不簡單,也沒有必要。IMO我們將線性代數(線性方程組的求解系統)中的基本概念與次要概念(矩陣求逆)相混淆。就玩具實現而言,“ b = Solve(t(X)%*%X)%*%t(X)%*%y”確實比“ b = Solve(t(X)%*%X”更簡單,t(X)%*%y)`?我只是不這麼認為。在這裡,我們可以進行微小的教學改革,並增進人們的理解。
@MatthewDrury,矩陣求逆並不容易實現,但是作為一個數學概念卻是如此。試圖承認它的實現困難是一個好主意,但是對於那些剛剛進入回歸的人來說,它帶來的東西還為時過早。
@MatthewDrury也許當您編寫`inv(X)* y`或`solve(X)%*%y`時,我們應該停止使用執行完全反轉的語言。返回執行分解的對象並在將其乘以向量時應用它,只需很少的語法糖。
@Aksakal在數學概念與實現方面的優勢!
-1
我不是在談論實施人員,而是在講授教學法(我認為實施確實與教學法有關)。我想我將在有機會的情況下為此打開一個元線程。
挑剔:可能是$ X ^ T X $不可逆。如果您想反轉它,如[此答案](https://stats.stackexchange.com/a/363874/215801)所述,一種解決方法是從$ X $列中刪除以下內容的線性組合其他列。
Haitao Du
2017-05-10 23:48:46 UTC
view on stackexchange narkive permalink

首先,我強烈建議您閱讀以下兩篇文章(如果不是重複的話)

請在

中查看J.M.的答案

線性回歸使用什麼算法?

請在

中檢查Mark的答案(從數值穩定性的角度看)

我們需要梯度下降來找到線性回歸模型的係數嗎?


簡而言之,假設我們要解決平方損失的線性回歸問題 $$ \ text {minimize}〜\ | Ax-b \ | ^ 2 $$ span>我們可以設置導數 $ 2A ^ T(Ax-b)$ span>到 $ 0 $ span>,它正在求解線性系統 $$ A ^ TAx = A ^ Tb $$ span>

總的來說,有兩種解決線性系統的方法。直接法和迭代法。請注意,直接方法是求解 $ A ^ TAx = A ^ Tb $ span>,而梯度下降(一種示例迭代方法)是直接求解 $ \ text {minimize}〜\ | Ax-b \ | ^ 2 $ span>。

與直接方法相比(說 QR / LU分解)。當我們擁有大量數據或數據非常稀疏時,迭代方法具有一些優勢。

另一方面,我相信Andrew Ng強調它的原因之一是因為它是一種通用方法(機器學習中使用最廣泛的方法),並且可以在其他模型中使用,例如邏輯回歸或神經網絡。

你是絕對正確的。SGD在處理大量數據時非常有幫助。吳教授演示的方法是最經典,最純正的方法。應該從這一點開始有一個清晰的想法。如果可以理解其座右銘,那麼整個線性估計對他/她將是顯而易見的。
使用關係$ X ^ TX = \ sum x_ix_i ^ T $;數據maxtrix的大小實際上不是問題。您可以一次計算一次$ X ^ TX $和$ X ^ Ty $。實際上,這是在計算機內存遠比今天有限的日子裡在SAS中完成的。限制因素是$ X $中的列數。
Tim Atreides
2017-05-10 22:59:34 UTC
view on stackexchange narkive permalink

Sycorax是正確的,因為您在估計線性回歸時不需要梯度下降。您的課程可能使用一個簡單的示例來教您梯度下降,以介紹更複雜的版本。

不過,我要補充的一件整潔的事情是,目前有一個很小的研究領域,涉及終止梯度下降 early 以防止模型過度擬合。

對於過度擬合的陳述,您可以提供鏈接嗎?增加正則項比限制迭代次數好嗎?
您可以查看Goodfellow等人的《深度學習》的第7章,其中提到了儘早停止以防止神經網絡過度擬合。
通過提早停止進行正則化絕不是一項新技術。例如,這是Landweber迭代中的一種眾所周知的技術:https://en.wikipedia.org/wiki/Landweber_iteration
Sandipan Karmakar
2017-05-10 23:35:03 UTC
view on stackexchange narkive permalink

如果我沒記錯的話,我想您是指吳德華教授提供的MOOC。為了找到最佳的回歸係數,可以使用兩種方法。一種是使用正態方程,即簡單地找出$(\ mathbf {X} ^ T \ mathbf {X})^ {-1} \ mathbf {X} ^ T \ mathbf {y} $,第二種是通過minimizing最小二乘法標準,它源自您引用的假設。順便說一下,第一種方法,即正態方程式,是第二種方法,即優化方法的乘積。

您提到的方法,即使用相關性,它僅適用於一個預測變量和一個攔截量.請注意表格。那麼,當預測變量的數量超過一個時,出路是什麼?然後必須訴諸其他方法,即正則方程或優化。

現在,儘管可以使用直接法線方程,但為什麼要進行優化(這裡是梯度下降)。注意,在正規方程中,必須將矩陣求逆。現在對矩陣求逆需要計算$ \ mathcal {O}(N ^ 3)$,其中$ N $是$ \ mathbf {X} $矩陣中的行數,即觀測值。此外,如果$ \ mathbf {X} $條件不佳,則會在估算中產生計算錯誤。因此,正是這種梯度下降優化算法可以使我們擺脫此類問題。另一個問題是回歸係數的估計過擬合和不擬合。

我對您的建議不只是解決問題。嘗試理解理論。 Ng教授是這個世界上最好的教授之一,在MOOC中善於教授機器學習。因此,當他以這種方式進行教學時,必須有一些潛在的意圖。我希望你不要介意我的話。

祝一切順利。

強烈建議不要“反轉矩陣”。QR在數值上更穩定以求解線性系統。
我同意計算論點。但是,過度擬合或欠擬合與GD與正態方程無關,而與(回歸)模型的複雜性無關。兩種方法(如果GD都能正常工作)都會找到相同的最小二乘解(如果存在),因此將使數據過擬合或過擬合的數量相同。
Timothy Teräväinen
2017-05-10 23:46:45 UTC
view on stackexchange narkive permalink

首先,是的,真正的原因是蒂姆·阿特里德斯(Tim Atreides)給出的原因;這是一個教學練習。

但是,有可能(儘管不太可能)有人希望對從網絡套接字流進來的數万億個數據點進行線性回歸。在這種情況下,對解析解決方案進行單純的評估是不可行的,而隨機/自適應梯度下降的某些變體將以最小的內存開銷收斂到正確的解決方案。

(對於線性回歸,可以將解析解重新構造為遞歸系統,但這不是通用技術。)

Sanyo Mn
2017-10-17 12:37:02 UTC
view on stackexchange narkive permalink

另一個原因是梯度下降是一種更通用的方法。對於許多機器學習問題,成本函數不是凸函數(例如矩陣分解,神經網絡),因此您不能使用封閉形式的解決方案。在那些情況下,使用梯度下降來找到一些好的局部最優點。或者,如果您要實施在線版本,則必須再次使用基於梯度下降的算法。

Hamed
2020-02-21 16:56:02 UTC
view on stackexchange narkive permalink

實際上,您可以通過不同的方法解決線性回歸問題:正態方程式(您提到的方式),QR / SVD分解或直接使誤差最小化的迭代方法(例如梯度下降方法)。

請注意,其他方法為您提供了精確的解決方案(忽略舍入誤差),而由於GD方法是迭代的,因此在選擇步長以收斂到正確的解決方案時應格外小心。迭代方法的優點是,如果您的系統非常大,則可以更快地獲得近似的解決方案。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...