梯度下降法的神經網路容易收斂到局部最優,為什麼應用廣泛?


反對回答區中一部分稱「模型收斂於鞍點」的回答。當然也有的大牛可以一針見血,那我就對這個問題多展開一下吧,讓鮮血流的更猛烈一些。(害怕.jpg)

真的結束於最優點嗎?

我們知道,在局部最優點附近,各個維度的導數都接近0,而我們訓練模型最常用的梯度下降法又是基於導數與步長的乘積去更新模型參數的,因此一旦陷入了局部最優點,就像掉進了一口井,你是無法直著跳出去的,你只有連續不間斷的依託四周的井壁努力向上爬才有可能爬出去。更何況梯度下降法的每一步對梯度正確的估計都在試圖讓你墜入井底,因此勢必要對梯度「估計錯很多次」才可能僥倖逃出去。那麼從數學上看,什麼才是局部最優點呢?

這個問題看似很白痴,很多人會說「局部最優點不就是在loss曲面上某個一階導數為0的點嘛」。這就不準確啦,比如下面這個馬鞍形狀的中間的那個點:

(圖片來自《deep learning》)

顯然這個點也是(一階)導數為0,但是肯定不是最優點。事實上,這個點就是我們常說的鞍點

顯然,只用一階導數是難以區分最優點和鞍點的。

我們想一下,最優點和鞍點的區別不就在於其在各個維度是否都是最低點嘛~只要某個一階導數為0的點在某個維度上是最高點而不是最低點,那它就是鞍點。而區分最高點和最低點當然就是用二階導數(斜率從負變正的過程當然就是「下凸」,即斜率的導數大於0,即二階導數大於0。反之則為「上凹」,二階導數小於0)。也就是說,若某個一階導數為0的點在至少一個方向上的二階導數小於0,那它就是鞍點啦

那麼二階導數大於0和小於0的概率各是多少呢?由於我們並沒有先驗知識,因此按照最大熵原理,我們認為二階導數大於和小於0的概率均為0.5!

那麼對於一個有n個參數的機器學習/深度學習模型,「loss曲面」即位於n+1維空間(loss值為縱軸,n個參數為n個橫軸)。在這個空間里,如果我們通過梯度下降法一路下滑終於滑到了一個各方嚮導數均為0的點,那麼它為局部最優點的概率即 0.5^n ,為鞍點的概率為 1-0.5^n ,顯然,當模型參數稍微一多,即n稍微一大,就會發現這個點為鞍點的概率會遠大於局部最優點!

好吧我再啰嗦的舉個栗子,已經反應過來的同學可以跳過這個栗子:

假設我們的模型有100個參數(實際深度學習模型中一般會遠大於100),那麼某一階導數為0的點為局部最優點的概率為約為 0.5^{100}approx10^{-31} ,而為鞍點的概率則為 1.0-10^{-31}approx 1.0 。就算我們的模型在訓練時使用了特別厲害的「超級梯度下降法」,它可以每走一步都恰好踩在一個一階導數為0的點上,那麼從數學期望上來看,我們需要走10^31步才行。而實際的projects中,哪怕數據集規模為千萬級,我們分了100萬個batches,然後要迭代100次,那也僅僅是走了 10^6*10^2=10^8 步,你真的覺得運氣可以辣么好的走到局部最優點上去嗎?所以實際中,當我們的深度學習模型收斂時,幾乎沒有必要認為它收斂到了一個局部最優點,這完全等同於杞人憂天。

也就是說,如果最後模型確實在梯度下降法的指引下收斂到了一個導數為0的點,那這個點幾乎可以肯定就是一個鞍點。

如果我們的模型真的收斂到鞍點上了,會很可怕嗎?

這就又回到了文章開頭的那副馬鞍狀的圖。

顯然,站在馬鞍中央的時候,雖然很難翻過兩邊的山坡,但是往前或者往後隨便走一步就能摔下馬鞍!而在文章《batch size》中小夕講過,我們默認使用的mini-batch梯度下降法本身就是有雜訊的梯度估計,哪怕我們位於梯度為0的點,也經常在某個mini-batch下的估計把它估計偏了,導致往前或者往後挪了一步摔下馬鞍,也就是mini-batch的梯度下降法使得模型很容易逃離特徵空間中的鞍點。

那麼問題來了,既然局部最優點很難踩到,鞍點也很容易逃離出去,那麼

為什麼我們的模型看起來是收斂了呢?

初學者可能會說 「誒誒,會不會是學習率太大了,導致在「鞍點」附近震蕩?」 首先,鞍點不像最優點那樣容易震蕩,而且哪怕你不斷的減小學習率繼續讓模型收斂,大部分時候你這時計算output層或者後幾層的梯度向量的長度時往往會發現它依然離0很遙遠!(這句話是有實驗支撐的,不過那篇論文我暫時沒記起來,找到時貼出來)說明大部分時候收斂到的並不是鞍點。

那會不會踩到的鞍點太多,雖然前面的鞍點都輕鬆逃逸了,但是最後恰好收斂到一個跳不下去的鞍點身上了?

這倒是有可能,不排除有一些「馬鞍面」特別平坦的鞍點區域,當模型陷入這種鞍點上時,由於計算出的梯度非常小,導致要連續迭代非常多次才可能慢慢移開這個鞍點,事實上大部分工程情況下,沒等它移開的時候我們就已經默認為模型收斂、訓練結束了,實際上人家模型還在努力逃離鞍點中呢。

不過話說回來,雖然高維空間中的鞍點數量遠遠大於最優點,而且鞍點數量隨著特徵空間維度增高而指數級增長,但是鞍點的數量在整個空間中又是微不足道的:按前面的假設,假設在某個維度上隨機一跳有10%的概率踩到導數為0的點,那麼我們在101維的空間中的一步恰好踩到這個點上的概率為10^-100,也就是說在101維空間里隨機亂跳的時候,有10^-100的可能性踩到鞍點身上。因此,即使有難以逃離的鞍點,即使我們的優化演算法在努力向附近的鞍點靠攏,那麼被我們正好踩到那些難以逃離的特殊鞍點的概率也是非常小的。

所以更令人信服的是,在高維空間里(深度學習問題上)真正可怕的不是局部最優也不是鞍點問題,而是一些特殊地形。比如大面積的平坦區域:

(圖片來自《deep learning》)

在平坦區域,雖然導數不為0但是卻不大。雖然是在不斷下降但是路程卻非常長。對於優化演算法來說,它需要走很多很多步才有可能走過這一片平坦區域。甚至在這段地形的二階導數過於特殊的情況下,一階優化演算法走無窮多步也走不出去(設想一下,如果終點在一米外,但是你第一次走0.5米,後續每一步都是前一步的一半長度,那麼你永遠也走不到面前的一米終點處)。

所以相比於栽到最優點和鞍點上,優化演算法更有可能載到這種類似平坦區的地形中(如果這個平坦區又是「高原地帶」,即loss值很高的地帶,那麼恭喜你悲劇了)。更糟糕的是,由於高維地形難以可視化,還有很多更複雜的未知地形會導致假收斂,一旦陷入到這些危險地形中,幾乎是無解的。

所以說,在深度學習中,與其擔憂陷入局部最優點怎麼跳出來,更不如去考慮

  1. 如何去設計一個盡量沒有「平坦區」等危險地形的loss空間,即著手於loss函數的設計以及深度學習模型的設計;
  2. 盡量讓模型的初始化點遠離空間中的危險地帶,讓最優化遊戲開始於簡單模式,即著手於模型參數的初始化策略;
  3. 讓最優化過程更智能一點,該加速沖時加速沖,該大膽跳躍時就大膽跳,該慢慢踱步時慢慢走,對危險地形有一定的判斷力,如梯度截斷策略;
  4. 開外掛,本來下一步要走向死亡的,結果被外掛給拽回了安全區,如batch normalization策略等。


深度神經網路「容易收斂到局部最優」,很可能是一種想像,實際情況是,我們可能從來沒有找到過「局部最優」,更別說全局最優了。

很多人都有一種看法,就是「局部最優是神經網路優化的主要難點」。這來源於一維優化問題的直觀想像。在單變數的情形下,優化問題最直觀的困難就是有很多局部極值,如

人們直觀的想像,高維的時候這樣的局部極值會更多,指數級的增加,於是優化到全局最優就更難了。然而單變數到多變數一個重要差異是,單變數的時候,Hessian矩陣只有一個特徵值,於是無論這個特徵值的符號正負,一個臨界點都是局部極值。但是在多變數的時候,Hessian有多個不同的特徵值,這時候各個特徵值就可能會有更複雜的分布,如有正有負的不定型和有多個退化特徵值(零特徵值)的半定型

在後兩種情況下,是很難找到局部極值的,更別說全局最優了。

前面很多回答說了,現在看來神經網路的訓練的困難主要是鞍點的問題。在實際中,我們很可能也從來沒有真的遇到過局部極值。Bengio組這篇文章Eigenvalues of the Hessian in Deep Learning裡面的實驗研究給出以下的結論:

? Training stops at a point that has a small gradient. The norm of the gradient is not zero, therefore it does not, technically speaking, converge to a critical point.

? There are still negative eigenvalues even when they are small in magnitude.

另一方面,一個好消息是,即使有局部極值,具有較差的loss的局部極值的吸引域也是很小的Towards Understanding Generalization of Deep Learning: Perspective of Loss Landscapes。

For the landscape of loss function for deep networks, the volume of basin of attraction of good minima dominates over that of poor minima, which guarantees optimization methods with random initialization to converge to good minima.

所以,很可能我們實際上是在「什麼也沒找到」的情況下就停止了訓練,然後拿到測試集上試試,「咦,效果還不錯」。

補充說明,這些都是實驗研究結果。理論方面,在各種假設下,深度神經網路的Landscape 的鞍點數目指數增加,而具有較差loss的局部極值非常少。

相關的回答:

有哪些學術界都搞錯了,忽然間有人發現問題所在的事情?

李振華:神經網路的訓練可以採用二階優化方法嗎(如Newton, Quasi Newton)?

李振華:啟發式優化演算法中,如何使之避免陷入局部最優解?


反對 @夕小瑤 的答案。我雖然(還)不是做機器學習的,但是優化在計算化學中也算是一個中心議題。假如說神經網路的梯度下降法和一般計算數學中的「梯度下降法」一樣,並且只用到loss函數 z=f(x,y) 的一階偏導數 frac{partial z}{partial x}frac{partial z}{partial y} 的話,那從原理上就很難出現 @夕小瑤 提到的那種在 x (或者 y )方向最大,並且在 y (或者 x )方向最小的一階鞍點。為什麼呢?因為優化的時候在 xy 方向就是沿著 frac{partial z}{partial x}frac{partial z}{partial y} 的負方向前進的啊,除非初始點正巧落到了坐標軸上,否則如何能沿著另外一個方向爬山呢?

那麼,為什麼最終的優化結果,又很可能是一個鞍點呢?實際上,不需要更多維空間,一個二維曲面就能演示出來。如下圖(來自於Symmetry of second derivatives)所示, f(x,y) 完全可以在兩個坐標軸方向都是「下凸」,但是在 x^2+y^2 方向是「上凸」。不妨假設在 x 軸及其鄰域內 frac{partial z}{partial y}=frac{partial^2 z}{partial y^2}=0y 軸及其鄰域內 frac{partial z}{partial x}=frac{partial^2 z}{partial x^2}=0 (也就是說山脊並不是那麼尖,而是可以很平坦的),那麼根據最樸素的梯度下降法,對於初始點在坐標軸附近的系統,最終就收斂於圖中這樣有四條上山路徑和四條下山路徑的四岔鞍點(比三條上山/下山路徑的「猴鞍點」還複雜一點)。

很顯然,對於一個一般的函數,由於其一階偏導數只考慮到了 f(x,y) 沿坐標軸方向的變化,它根本就不能反映任何一個點沿任何其它方向的變化。考慮到 frac{曲面上任意一點可行進的方向的數目}{坐標軸的數目}=infty ,那麼根據一階偏導數來估計鞍點的數目也根本無法進行。如果我們對loss曲面一無所知,那麼僅僅對於一個二元函數,收斂到鞍點的概率恐怕也是無窮大。當然了,我們似乎總是懷著良好的信念,認為實際遇到的函數的性質足夠良好,並沒有那麼那麼多猴鞍點、四岔鞍點、五岔鞍點……雖然好像沒有什麼理論上的證明,但至少根據大家對化學勢能面的研究,這種信念在大多數情況下好像是有效的。


因為你的直覺是錯的。

你以為你所優化的神經網路參數空間可能會像下圖一樣陷入local minima:

圖片來源:Deep Learning Specialization by Andrew Ng

但實際上在高維空間中絕大多數梯度值為0的點不是上圖所示的local minima,而是saddle point(我們在將低維空間中的直覺想當然地推廣到高維時出現了問題):

圖片來源:Deep Learning Specialization by Andrew Ng

假設在一個20,000維的參數空間中,如果某個點梯度值為0,那麼在每個方向上既可以是凸(convex)函數也可以是凹(concave)函數(如下圖所示)。但要想該點成為local minima的話,所有的20,000個方向都必須是凸的,在神經網路構成的巨大的參數空間中,這個概率是十分小的。

圖片來源:Deep Learning Specialization by Andrew Ng

更詳細的解釋可以參看:

1. 有哪些學術界都搞錯了,忽然間有人發現問題所在的事情? - 李振華的回答 - 知乎

2. Deep Learning Specialization - Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization


題目:梯度下降法的神經網路容易收斂到局部最優

我還沒見過有證明梯度下降能收斂到局部最優。最多也就是收斂到saddle point。


先問是不是再問為什麼。


https://arxiv.org/pdf/1605.07110.pdf

針對線性神經網路(當然大部分神經網路是非線性的),在一些前提下,

  1. 每一個local minimum都是global minimum
  2. 每一個不是local minimum的critical point都是saddle point
  3. 3層以內的神經網路沒有「bad」saddle point,3層以上的有
  4. (不在這篇文章中)我們有辦法逃脫saddle point


高維(High dimension)下並不是每個維度都會是bowl shape的局部最優。因此大概率(with high probability)你會遇到鞍點(saddle point)。

與此同時,saddle point附近需要擔心的問題是收斂速度變慢。搞個Moment或者Adam,或者normalization,都可以解決。

但題主還會擔心:那低維度怎麼辦?低維度應該不會選用Deep Learning。


1 假如數據足夠多,即使是局部最優,也是極好的解,而數據太大的時候,只有神經網路加隨機梯度下降才能hold住

2 網路足夠深的時候,局部最優沒那麼局部,往往以鞍點存在,此時優化演算法可以部分解決

3 通過調整學習率等,可以部分避免局部最優

儘管如此,非凸優化依然保證不了得到最優解。但是與其帶來的好處相比就不值一提了,即使非最優解也常常吊打其他模型,所以大家還是用。


SGD被廣泛用於訓練神經網路的主要原因是,在實際中好用。

對於機器學習來說,是不是收斂到局部最優其實無所謂,只要拿到的model能generalize就是好model。更極端點的說,其實很多時候收不收斂都無所謂,這個在深度學習里不少吧。

至於說一定要研究收斂到什麼樣的解,都是從理論的角度出發。所謂追求「deep thinking」嘛。不過很多時候deep thinking被狹隘的理解為deep math,完全是本末倒置了。

很多時候,所謂「理論上的局限性」只是做理論的人的局限性。因為沒做明白嘛!


Andrew Ng談過這個問題,在高維空間里同時達到多個維度的局部最優並且在那裡卡住的幾率太小了,所以梯度下降可以放心用


手機敲一敲晚點加料(加完了,沒圖),說到神經網路,我假設你說的是隨機梯度下降法。。

那是不是收斂到局部最優這個真不好說,目前看到最好的理論結果是在一階鞍點也會有顯著下降方向的假設下以概率意義用很大的複雜度可以收斂到近似的二階鞍點(Natasha2),傳統的收斂到局部最優反正不是這麼定義的。。

隨機梯度法應用廣泛的原因嘛: 快,對大個兒的問題好使,好實現,好變異,好懂,同體量的二階方法實際效果上還需觀望,各路大咖的框架實現的優化運算元全是一階的。

深度學習某個角度來說也是在優化一個函數,那一般的非凸的四階函數都是NP難了,所以深度學習的這種迷之函數是真NM難了。先找普通非凸函數說吧,就隨便來一至少二階光滑可導的函數求局部極小,先看不隨機的演算法。如果它二階導在一階鞍點是退化(半正定)的,考慮x*x+y*y*y或者x*x+y*y(y*y-1),取初始點為(x,0)找最小點,那一二階是都沒用了,有沒有極小點都沒用了,因為一二階都提供不了y軸方向的下降,只能往上看到三階去… 其實二階能用都不好弄,那還是只考慮二階不退化的狀況吧。這時候如果一階鞍點的二階正定,就局部最優了。二階不定,就有正的特徵值,負的特徵值和0的特徵值,對應正的特徵空間,負的特徵空間和零特徵空間,這仨互相正交,加起來是全空間。正的那部分提供上升方向,負的那部分提供下降方向,零的不變。考慮x*y,算吧算吧,(0, 0)是一階鞍點,上邊兒的二階導不定,在(0, 0)點上升方向對應特徵值1的子空間x=y,下降方向是對應特徵值-1的子空間x=-y。這就是說,在不隨機的情況下,如果梯度大,就用梯度下降,如果梯度很小到等於零,就找負特徵空間,直到某點梯度也為0,負特徵空間也沒有,前提假設函數二階不退化,那就是說收斂到局部最優了。想找全局最優嘛?一般情形下這跟在我們的世界裡找四維空間的生物一樣。。

但是這得算特徵空間啊,至少也得算最負的那個特徵值對應的一維的特徵子空間,就得要二階導,太費勁。那隨便找個方向唄,點兒好的話這個方向投影在負特徵空間的部分比正特徵空間那部分顯著。那也算是個下降方向。這就是梯度下降加噪音了,什麼時候加?最好是梯度小的時候加。怎麼知道加的噪音有用?在一階鞍點的鄰域球里隨便找兩個方向,它倆都在負方向不顯著的那個區域的概率可以被估計上界,所以以不為零的概率一定能找到一個方向,它投影到負特徵空間的部分更顯著,就是說這噪音有用。加多少,論文里有寫(escaping efficiently) 。

那隨機梯度下降更難搞了,也不知道什麼時候和梯度小(算不起),就只能每步都加噪音,加多少也並不知道。。前面有回答里提到隨機梯度不用加噪音就能找到負特徵空間里的方向,因為隨機梯度自己就是帶噪音的,我覺的不能這麼說。隨機梯度的期望還是梯度,只有加上不和隨機樣本同分布的噪音,直覺上才是把期望變成了梯度加噪音。所以即便是隨機梯度,也是要加全空間的噪音的才可以期望它可以收斂到近似局部極小(noisy sgd)。

到這兒,才能開始提到神經網路了,這個更玄乎,先假設函數是確定的,是說來自於固定的網路結構和相同的數據,然後開始搞。

第一個問題是,收斂到什麼才算好?第二個問題是,極小值,最小值,鞍點都啥關係?第三個問題才是現有的演算法收斂最終停哪兒了?第四個問題是,這些演算法夠不夠好,有沒有更好的?

哪個其實都不清楚。。第一個問題可能是認為收斂到極小值最好,比鞍點好(identify saddle),最好極小值處在一塊兒很平的區域,在一定範圍內亂加噪音都不影響函數值和一階導(sharp minima)。第二個問題可能是認為極小值和最小值一樣好,這個有深度線性網路的證明,但是作者推廣到一般深度網路只用了一段話。。(without local minima)。有非常多極小,有更非常多的鞍點,可以用所謂隨機矩陣的思路來解釋。。(identify saddle)。第三個問題,batch大小,初始點的不同等會導致收斂到不同的結果(good init),但是總之會收斂到一個相對平緩的區域,所謂平緩是指在這塊兒區域一階二階導都沒用了,可能都是非常小的數(Hessian eigenvalues)。迭代步花很長很長時間才可能走到這塊區域的邊緣然後掉下去,並不知道要花多長時間也不知道會不會掉下去。非負損失函數的函數值沒到0的時候,都至少不能說是收斂到鞍點或者極小點了。第四個問題,夠不夠好並不知道。。應用的結果很多都是可接受甚至某些超人類的,這說明夠好,還是不夠好?有沒有更好的,倒是可以嘗試,至少嘗試縮短訓練時間,減少調參的成本嘛,可是imagenet都24分鐘能搞完了。。可是別的方法總還是得試對吧。。

上擬二階,二階或者三階正則?那好大的二階矩陣啊,還是隨機的,估計的。。好在有辦法不用去搞真正的矩陣,二階導向量乘積可以拿來當運算元用,幾乎必要的線性方程也可以不涉及矩陣分解來求解,可是這全特么是非凸的啊,分析結果都是一大坨啊。。咋整?不過好消息是,Tensorflow和Pytorch都已經實現高階微分運算元了,這樣以來在神經網路里可以方便快捷的用來設計演算法的元素比梯度多了。近幾年大規模問題的二階理論也多見了(subsampled cubic,subsampled Hessian),雖然離實用還遠點,但是還是要滿懷期待啊!

最後貼一個2017 ICML的tutorial視頻(youtube, recent advances in stochastic convex and non-convex optimization),1:19:00之後就是non-convex部分了,可惜音質太感人。。

O啦.. 歡迎討論


謝邀。

小小地糾正一下題主,梯度下降通常是收斂到saddle points而不是收斂到局部最優,尤其是高維問題裡面。目前里說,還沒有很好的方法來解決神經網路裡面的優化問題。實際上這一類問題通常不是凸優化問題,它不像凸優化問題性質那麼好,但是目前基本都是借鑒凸優化的解決辦法,比如梯度下降。另一方面,其實我們很多時候也不是說一定要最優解甚至全局最優解,夠用就行了。

梯度下降簡單,易於實現,如果考慮二階優化的話,比如L-BFGS,那麼通常需要你的硬體能夠支持full batch update。現在人們針對梯度下降又設計了很多改進方法,來解決優化過程中被困在saddle points,或者local minima 的問題。主要有兩類改進:一類是SGD + Momentum,可以理解為下坡的時候增加一點前面步驟留下來的慣性;另一類是AdaGrad,可以理解為在學習率上面動手腳, 使得每一個參數更新都會有自己與眾不同的學習率。如果對AdaGrad裡面grad_squared (dx^2)那一項加入Momentum那就是RMSProp,再給grad (dx)加上Momentum就是Adam,這些就是現在最常用的梯度下降法的延伸,確實能在一定程度上解決大部分問題。


收斂到局部極小值一般是不知道坑在哪裡然後收斂收斂著就進了坑。。

全局最優在你第一次嘗試的時候是不知道在哪裡的。

不是一張圖那樣明顯的告訴著你你不能往左走,得往右,右邊是最優。

梯度下降是目前最好的辦法了吧。

參考周志華老師的書 嘗試三種方法跳出局部極小,接近全局最小:

1、以多組不同參數值初始化多個神經網路,按標準方法訓練後,取其中誤差最小的解作為最終參數。

2、使用「模擬退火」技術。模擬退火在每一步都以一定的概率接受比當前解更差的結果,從而有助於「跳出」局部極小。在每步迭代過程中,接收「次優解」的概率要隨著時間的推移而逐漸降低,從而保證演算法穩定。

3、使用隨機梯度下降。


我直覺覺得大多數神經網路成功的應用中,局部最優就夠了,甚至不用局部最優就夠了。


收斂到局部最優不是個太大的問題,實際中只要loss低,訓練時間短就行。SGD之類的一階演算法單次迭代快,所以相對於要估計Hessian的高階演算法速度上有優勢。另外梯度下降很難收斂到saddle point,也是在高維優化問題里挺好的性質。

關於局部最優的loss問題目前的還沒有太完整的解釋,我見過的幾種包括:

  1. 線性網路的局部最優都是全局最優
  2. 網路越大,loss大的孤立局部最優越少
  3. 網路越大,loss大的包含局部最優的區域面積相對越小

上面的2和3現在只對一個hidden layer的ReLU網路有證明,並且要一些假設。

這裡有幾篇相關的論文

[1602.04915] Gradient Descent Converges to Minimizers

[1605.07110] Deep Learning without Poor Local Minima

[1611.01540] Topology and Geometry of Half-Rectified Network Optimization

[1702.05777] Exponentially vanishing sub-optimal local minima in multilayer neural networks


因為沒有完美的方法的。


先不管他是能不能局部最優,至少當初gd從凸優化過來,人家確實想找個最優解。而且mit那個deep learning那個書前面講了好多怎麼跳出saddle points,怎麼跳出局部最優的嗎。

就算你找到了個演算法,能達到全局最優,但是你實際問題上不好用,因為問題本身有隨機性,模型本身存在誤差,另外你那個數據集不能包含整個問題空間的所有情況。就像比如一個人男生找女朋友,結果次次被騙,那麼他就學習到了女生都是騙子,所以實際訓練出來的網路可能是個噴子。好多演算法模型確實是凸的,所以能找到全局最優解,但實際上工程師們不喜歡全局最優解,所以會搞個正則化項在模型里。

從數學的角度來講,數值優化確實想找到最優解,但是大家發現挺難找的。但從機器學習的角度來講,我們一開始就不想要最優解,當然要是我們有無限的數據量,無限的計算能力,那麼我們肯定也想要最優解啊。類似的情況是機器人定位,現在感測器和控制器都有誤差,最早用determinate的模型效果很差,現在在模型里人為引入誤差,反而定位定的很准。反正做計算機別和做數學的混到一起了,管你數學上的性質有多好,解決不了問題都白扯。


其實是分情況的,對於人類自己定義的知識集圖譜內,存在比SGD更好的辦法,AlphaZero就是一個例子,因為圍棋的規則還有信息對於機器是完全透明公開的,所以它可以在短短時間內就超越前代經過人工訓練的版本,甚至發現許多新的套路和招式(避開了陷入Local minimum的坑)。

然而在現實世界中,人們對於許多問題的信息並不是百分百清楚了解的,因為這些隱藏的未知信息,影響了我們的判斷,也成為了讓機器找到全局最優解的障礙,這種情況下,我們只能接受不完美,努力獲取更多的信息.

個人認為,機器學習其實就是在大海撈針,以前我們人力有限,現在因為我們擁有近乎無限的計算力,所以可以,不同的區別在於,我們所處的海(問題領域)不盡相同,對於那些我們已知邊界的海洋,我們是可以找到那一根針(最優解)的,而對於有的海洋,如同浩瀚宇宙一般無邊無際的時候(受限於時間空間),我們所能做的就是找到一根最像針的物件作為我們的解。

SGD應用的廣泛歸根究底其實是我們還需要更努力的去探索這個世界


因為在實際操作中,很難保證函數在整個定義域內都是convex, 相反的,局部convexity很常見。同時在engineering領域,很多情況下並不需要global optimal,只需要local optimal就行了。


推薦閱讀:

深度學習晶元?
有沒有介紹神經網路、蟻群、遺傳、退火、魚群等等演算法的書籍?
怎樣看待地平線機器人以深度強化學習演算法為切入點?
同價位的專業卡與遊戲卡誰更適合跑深度學習相關程序?
學數學用中文還是英文?

TAG:神經網路 | 深度學習DeepLearning |