丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗,強烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預(yù)覽,將在時失效
人工智能 正文
發(fā)私信給楊曉凡
發(fā)送

0

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

本文作者: 楊曉凡 2017-09-29 23:59
導(dǎo)語:「Deep Learning」讀書分享:第四章 數(shù)值計算


「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

雷鋒網(wǎng) AI 科技評論按:「Deep Learning」這本書是機器學(xué)習(xí)領(lǐng)域的重磅書籍,三位作者分別是機器學(xué)習(xí)界名人、GAN的提出者、谷歌大腦研究科學(xué)家 Ian Goodfellow,神經(jīng)網(wǎng)絡(luò)領(lǐng)域創(chuàng)始三位創(chuàng)始人之一的蒙特利爾大學(xué)教授 Yoshua Bengio(也是 Ian Goodfellow的老師)、同在蒙特利爾大學(xué)的神經(jīng)網(wǎng)絡(luò)與數(shù)據(jù)挖掘教授 Aaron Courville。只看作者陣容就知道這本書肯定能夠從深度學(xué)習(xí)的基礎(chǔ)知識和原理一直講到最新的方法,而且在技術(shù)的應(yīng)用方面也有許多具體介紹。這本書面向的對象也不僅是學(xué)習(xí)相關(guān)專業(yè)的高校學(xué)生,還能夠為研究人員和業(yè)界的技術(shù)人員提供穩(wěn)妥的指導(dǎo)意見、提供解決問題的新鮮思路。

面對著這樣一本內(nèi)容精彩的好書,不管你有沒有入手開始閱讀,雷鋒網(wǎng) AI 研習(xí)社都希望借此給大家提供一個共同討論、共同提高的機會。如果大家有看過之前的分享的話,現(xiàn)在除了王奇文之外,我們還繼續(xù)邀請到了多位機器學(xué)習(xí)方面優(yōu)秀、熱心的分享人參與這本書的系列分享。這期邀請到的是陳安寧與大家一起分享他對這本書第四章的讀書感受。

分享人:陳安寧,Jakie,名古屋大學(xué)計算力學(xué)博士。

「Deep learning」讀書分享(四) —— 第四章 數(shù)值計算

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

大家好,我叫陳安寧,目前在名古屋大學(xué)攻讀計算力學(xué)博士。今天我要和大家分享的是「Deep Learning」這本書的第四章節(jié),Numerical Calculation,即“數(shù)值計算”。

其實大家如果翻過這本書的話,可以看出第四章是整本書所有章節(jié)里面篇幅最少的一章。為什么,是因為其實我們大部分人在運用機器學(xué)習(xí)或者深度學(xué)習(xí)的時候是不需要考慮這一章的內(nèi)容的,這章的內(nèi)容更多是針對算法的數(shù)學(xué)分析,包括誤差的增長以及系統(tǒng)的穩(wěn)定性。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

今天分享的主要輪廓包括以下四個點,

  • 第一,在機器學(xué)習(xí)、包括了深度學(xué)習(xí)中數(shù)值計算的應(yīng)用。

  • 第二,數(shù)值誤差的問題

  • 第三,簡單的分析機器學(xué)習(xí)系統(tǒng)的穩(wěn)定性問題

  • 最后,針對優(yōu)化問題給出了兩種不同的優(yōu)化算法,一種是梯度下降法,一種是限制優(yōu)化算法。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

我們首先來看一下機器學(xué)習(xí)中的數(shù)值計算問題。所謂的機器學(xué)習(xí)或者深度學(xué)習(xí),其實最終的目標大部分都是極值優(yōu)化問題,或者是求解線性方程組的問題。這兩個問題無論哪個,我們現(xiàn)在的求解辦法基本上都是基于計算機的反復(fù)迭代更新來求解。因為目前肯定是沒有解析解的,大家都是通過離散數(shù)學(xué)來求解這兩個問題。

既然這個過程有迭代或者大量的重復(fù)計算,那么肯定會牽扯到數(shù)據(jù)的累積。數(shù)據(jù)累積就極有可能會有誤差的產(chǎn)生。誤差如果過于大或者過于小,在某些特定的情況下都會對系統(tǒng)產(chǎn)生非常致命的影響。

數(shù)值誤差的產(chǎn)生原因和避免方法

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

首先我們來看數(shù)值誤差。所謂的數(shù)值誤差是指由于計算機系統(tǒng)本身的一些特性產(chǎn)生的誤差,比如說我們知道,無論你使用任何編程語言,它里面都有很多的數(shù)據(jù)類型,包括單精度、雙精度、整形、長整型。那么每一種數(shù)據(jù)當你定義以后,它在計算機的內(nèi)存里面都是有對應(yīng)的數(shù)值范圍和精度范圍的。如果在反復(fù)的迭代計算過程中,你產(chǎn)生的數(shù)據(jù)超過了數(shù)據(jù)類型定義的范圍,計算機會自動的進行取舍。

這時就會產(chǎn)生一個問題,因為取舍就導(dǎo)致了和真實值之間的變化,這個變化就極有可能產(chǎn)生很大的麻煩,如果一個很小的數(shù)出現(xiàn)在了分母上,那么計算機在計算過程中就會得到一個非常大的數(shù),如果這個非常大的數(shù)超過了你所定義的數(shù)據(jù)類型的范圍,計算機就會出現(xiàn)錯誤。

我們可以簡單看一下PPT中這個函數(shù),它叫softmax函數(shù),softmax函數(shù)經(jīng)常會在概率里面用到。它有很多特性,它的所有元素的softmax之和是等于1的;然后如果所有元素Xi也是相等的話,那么softmax的每一個元素也是相等的,等于所有n個元素合的1/n。

我們考慮一些比較特殊的情況,比如X是一個非常小的一個量,在指數(shù)函數(shù)中當這個X非常小的時候,這個指數(shù)函數(shù)也是非常小,無限趨于零的。無限趨于零的話,假如有限個值相加,比如n=10的話,十個數(shù)以后這個分母也是一個非常小的值;如果特別小,比如10-10,這個在計算機里面一算的話,softmax就會產(chǎn)生一個很大的數(shù),經(jīng)過多次累積的話,產(chǎn)生的這個大數(shù)極有可能超過你的所定義的數(shù)據(jù)范圍,這個時候你的程序就會報錯。所以我們在計算的時候要避免分母上出現(xiàn)一個極小的數(shù)的情況。

同理,分子 xi 如果是一個非常大的數(shù)字的話,它的指數(shù)也是趨向于無窮的,整個的softmax也是一個非常大的數(shù)。這也就是說,分子過大或者是分母過小,都是我們應(yīng)該在計算過程中極力避免的事情。

舉一個實際應(yīng)用的例子,為什么會有這種過小或過大的情況產(chǎn)生。比如說有一條線,我們要計算某一個點到這個線的距離,這個距離d之后會出現(xiàn)在分母上。對于這樣一個式子,如果這個點我們?nèi)〉秒x線過于近的話,這個距離就非常之小,這在實際應(yīng)用中是經(jīng)常出現(xiàn)的。這種情況下softmax這個函數(shù)就極容易出現(xiàn)問題。

那么有人會問了,怎么樣去避免這個問題呢?當然有很多方法,可以的最簡單的辦法就是定義一個max函數(shù),里面帶有一個常數(shù)比如10-4;如果這個距離D很小的話,我們就取這個10-4,限定了d的最小的值就是10-4。

當然這是一個樸素簡單的想法,在實際應(yīng)用當中,我們可以使用很多其他的方法,比如可以再取一個指數(shù),那么如果這個值非常小的話,它的整個值就會是趨向于1的,實際上也是一個解決問題的辦法。

這兩個問題,一個叫做分母趨近于0,或者是分子趨近于無窮大,一個叫underflow,下溢,就是指分母過于小;一個是overflow,是指分子過于大,趨近于無窮。這兩個問題都是由于計算機的數(shù)據(jù)有一個有限的范圍而產(chǎn)生的,并不是我們的算法本身系統(tǒng)產(chǎn)生的。這是Numerical error其中的一種,我們可以把它理解為,數(shù)據(jù)類型的范圍限定而導(dǎo)致的對于分子或者分母不能過大或過小而產(chǎn)生的限制。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

還有一種極容易出現(xiàn)錯誤的方式,是我們所構(gòu)造的系統(tǒng)產(chǎn)生的。比如我們在求解線性方程組Ax=B的時候,如果這個矩陣A的是一個病態(tài)矩陣,所謂的病態(tài)矩陣,最簡單形象的理解就是其中的某些列向量,它們之間的相關(guān)性過于大,也就是說列向量非常的接近。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

假設(shè)這是其中的兩個列向量,取了其中一個列向量上的點。這兩個列向量過于接近的話,對點進行一個微小的變化,它就有可能跑到了另外一個向量上,就是說它的解發(fā)生了發(fā)生了很大的變化;按理說這個點是屬于向量1的,但僅僅是因為很小的一個擾動,它就跑到了向量2上,它的解就發(fā)生了很大的變化。

有一個一般的辦法判斷矩陣是否病態(tài),就是把矩陣A所有的特征值λ求出來以后,然后把所有λ里的最大的值除以最小值,然后取它的模。我們根據(jù)這個值可以判斷一個矩陣是否是病態(tài)矩陣。

所以很多時候,在進行machine learning或者deep learning之前,我們會對數(shù)據(jù)進行一個篩選。篩選時候有時候很大的一個目的就是為了把其中的特征叫量過于接近的一些數(shù)據(jù)排除出去,讓我們經(jīng)過篩選后的矩陣,在它的每一個列向量上有明顯的差異,盡量避免過于接近的列向量的產(chǎn)生。

優(yōu)化算法的意義以及如何選擇

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

下面我們來簡單說一下優(yōu)化算法。絕大部分的機器學(xué)習(xí)或者說深度學(xué)習(xí),都是可以歸結(jié)為一個求極值的最優(yōu)化問題。最優(yōu)化問題,我們想到的簡單的辦法當然可以有很多,比如說梯度下降,就是僅僅求一個導(dǎo)數(shù)就可以判斷求極值點的方向。

最優(yōu)化問題,所謂的最優(yōu)化去找最小值或者是最大值,涉及到兩個問題,一是我怎么找、往哪個方向走;第二個問題是,我知道了這個方案以后我應(yīng)該怎么走,每一步走多少。這基本上是所有求最值的兩個問題,一個是找方向,第二個是找步長。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

這是Deep Learning書中關(guān)于一些基本函數(shù)的定義,包括objective funtion目標函數(shù),或者也可以稱為損失函數(shù),或者也可以稱為誤差函數(shù)。這時候我們一般都是要求它的最小值,讓誤差或者損失盡量的小。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

這里我們看一個非常簡單的例子,怎么解釋剛才說的兩個問題,一個是找方向,一個是找步長。這是一個目標函數(shù),一個非常簡單的二次函數(shù)。我們看紅色箭頭指的這一點,先看剛才說的取方向、怎么走的問題。這里有無數(shù)種方法,每一條直線都可以代表它可以前進的一個方向。但是我們要從中找到一個,因為這個最低點是我們的目標點,我們要找到從這個點出發(fā)到目標點的最快的路徑、一個方向。

這里面這條紅線是書中原有的,我做了兩條藍色的線。我們從這三條線中可以比較出來,紅線是這三條線里面朝目標點下降最快的一條線,因為紅色線在這個點和目標函數(shù)的角度是最小的,所以它是過這個點的下降最快的一條線。

然后我們看第二個問題,就是知道了方向以后怎么去走。對于每一個步長,我們在這里面引入一個ε的權(quán)值,為了保持系統(tǒng)的穩(wěn)定性,一般會取一個比較小的值,比如說0.001或者是10-4這樣的一個小值,讓這個點緩慢地沿著這個紅色的這個方向,一小步一小步地,朝著目標函數(shù)前進。

但是這里面會有一些問題,比如說我們會遇到一些特殊的點。剛才的比較簡單的二次函數(shù)是沒有問題的,但是看一下后面一些復(fù)雜的函數(shù)。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

這里是一些特殊的點,critical points,我們可以把它稱為臨界點。

所謂的臨界點是指,它的一次導(dǎo)數(shù)為零,也就是說這個點往左或者往右都會都會變大或變小,這個點本身就是這個小的局部系統(tǒng)里面的一個極值點。如果你往兩邊走都是變大,那么它就是一個極小值點;如果你往兩邊走都是變小,那么它就是一個極大值點;如果一邊減小、一邊變大,這種情況是我們在計算里面最不想看到的情況,叫做駐點,雖然它的導(dǎo)數(shù)也是零,但是這個點并不是我們所期待的那個objective point,不是我們想要找的目標點。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

我們看一個復(fù)雜一點的。像這個函數(shù)曲線,圖中有三個點都滿足我們剛才說的一階導(dǎo)數(shù)為零,但是右側(cè)這兩個點就不是我們想要的,最左側(cè)點的值更小。這個時候就有兩個問題,就是局部極值和全局最值的問題。這三個點都可以稱為局部的極值點,只要滿足一階導(dǎo)數(shù)為零,但是怎么判斷你所求的局部極值點是否是全局的最值點?有一個簡單的辦法是把整個系統(tǒng)所有的極值點都找到,然后比從里面比較出最小值;但是在實際應(yīng)用中是不會這么做的,一是浪費太多的計算資源,二是因為起點的不同,找這個局部極值點也會有很多的問題。

所以如果要是把每一個極值點都找的話,會非常的繁瑣,會浪費大量的資源。那么,我們設(shè)計的系統(tǒng)怎么樣保證找到的這個點是一個最優(yōu)點、或者說是全局的最值點呢?

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

之前介紹的都是只有單個變量的系統(tǒng),現(xiàn)在看一下有多個變量的系統(tǒng)。在單變量系統(tǒng)里面,我們只需要求一個輸入的導(dǎo)數(shù);但是在多變量的系統(tǒng)里面,有很多的輸入,就有一個偏導(dǎo)數(shù)的概念,假定其它的變量固定、系統(tǒng)對其中的某一個變量求導(dǎo)的話,就稱之為關(guān)于這個變量的偏導(dǎo)數(shù)。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

把所有的變量的偏導(dǎo)數(shù)求出來,并用向量的形式表示出來,可以表示成這個形式。剛才我們分析過了,如果要找到局部極值點的話,我們最快的方向是求導(dǎo)數(shù)、沿著梯度的方向;那么多變量系統(tǒng)里面也一樣,就是說我們要求一個系統(tǒng)的最小值的話,還是通過求導(dǎo),但這次是多變量的系統(tǒng),所以我們的求導(dǎo)要改成偏導(dǎo)數(shù)向量的方向來去尋找新的最值。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

這種梯度下降算法在實現(xiàn)的時候會有一些不同,比如根據(jù)每次下降所采用的系統(tǒng)點數(shù)的不同,可以大致分為兩大類,一種叫做Batch Gradient Desecent,就是批梯度下降。所謂的“批”就是批量,比如說我們現(xiàn)在有一個系統(tǒng)h(x)等于θi*xi的合集(右上角),這是一個非常簡單的線性系統(tǒng)。按照我們之前所說的,首先要求出這個系統(tǒng)的目標函數(shù),我們這里用了一個最小二乘法的目標函數(shù),然后求這個目標函數(shù)的最小值問題。

首先我們要求它的偏導(dǎo)數(shù),?J(θ)/?θj,它表示一個方向,然后沿著這個方向更新那個變量。在變量更新的時候,批梯度下降是指每一次的變量更新,都會用到所有的xj;然后從i=1到m,會用到所有的單獨變量的偏導(dǎo)數(shù)。比如假設(shè)這個系統(tǒng)里面的每一個樣本有五個特征的話,那么在更新任意一個權(quán)值的時候都要把這五個特征遍歷一遍。

這樣的話,如果是一個非常小的系統(tǒng),比如說樣本數(shù)量不是很多、每一個樣本所包含的特征也不是很多的話,這個是完全可以的,因為它求解的是一個全局的最優(yōu),考慮了考慮到了每一個變量方向的梯度問題,所以求的是全局的最優(yōu)下降的方向。但是所求的系統(tǒng)往往有大量的樣本,同時每一個樣本還包含了不少的特征,簡單分析一下這個系統(tǒng)的計算量的話,假設(shè)它的樣本數(shù)量是n,然后每一個的特征是m,那么其中一個樣本的計算量是m×m;有n個樣本的話,總的計算量是m×m×n。如果樣本1萬、2萬、10萬超級大的話,每一次迭代的計算量是非常大的。

這個時候大家就想到另外一種辦法,我能不能在每一次更新權(quán)值的時候,不用到所有的特征,只用其中的所求變量的特征,這就是我們所謂的隨機梯度下降Stochastic Gradient Descent。隨機梯度就是說,每一次針對權(quán)值的更新,只隨機取其中的一個i,就是隨機取其中的一個特征來計算。這樣它的計算量立馬就下降了,同樣是n個樣本就變成了m×n。因為原來的公式里面有一個求和符號,需要求m個特征的值;這里面每次只求一個特征的。所以這個計算量就少了非常多。

這又引發(fā)了一個問題,通過剛才分析,我們知道BGD是全局自由梯度下降,SGD是隨機梯度現(xiàn)象,隨機梯度中只找了其中一個變量所在的方向進行搜索,向目標點前進,那么這種方法是否能保證最后到達目標呢?理論上是有證明的,是可以的,只是這個會收斂的非常慢。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

這兩個方法就有點矛盾,一個是計算量大,但是全局最優(yōu),收斂比較快;一個是計算量小,但是收斂比較慢,只能找到最優(yōu)目標值的附近。所以又產(chǎn)生了一種調(diào)和的算法,叫做小批量梯度下降,Mini-Batch Gradient Descent。其實很簡單,既不像批量用到所有的特征去更新權(quán)值,也不像隨機梯度下降只用其中一個,我選取一部分,假設(shè)每個樣本有100個特征,我只取其中的10個特征用于每一次的權(quán)值更新。那么首先它的計算量是下降的,其次它也并不是僅僅按照其中某一個、而是它是按照了10個特征向量所在的方向進行搜索,既保證了搜索速度,又保證了計算量,這是目前在梯度下降中用的比較多的一個方法,算是一個BGD和SGD兩種方法的折中方法。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

它們?nèi)叩膬?yōu)缺點分別就是,批量是計算量大,隨機是計算量小,但是搜索精度有一定的問題;Mini-batch就是權(quán)衡了兩者。

剛才所有的分析都是基于一階導(dǎo)數(shù),這也是在簡單的線性系統(tǒng)優(yōu)化中常用的。其實二階導(dǎo)數(shù)對于系統(tǒng)的分析也是非常有用的。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

看一下這幾個簡單的例子。我們知道一階導(dǎo)數(shù)的意義表示的是f(x)的變化,二階導(dǎo)數(shù)的意義就是一階導(dǎo)數(shù)的變化情況。比如說第一幅圖,它的一階導(dǎo)數(shù)從正(上升)到0(水平)再到負的(下降),不停地減小,就可以知道它的二階導(dǎo)數(shù)是小于0的。第二幅圖一條直線的話,它的斜率也就是一階導(dǎo)數(shù)是永遠不變,那么它的二階導(dǎo)數(shù)就永遠是0;同理第三個圖指的是二階導(dǎo)數(shù)大于零的情況。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

二階導(dǎo)數(shù)的意義就是我們可以分析這個系統(tǒng)。下面先介紹一個雅克比矩陣(Jacobian Matrix),我們的系統(tǒng)是一個多輸入、多輸出的系統(tǒng),它變量的范圍是Rm 域的范圍,輸出是Rn 域的范圍,那么f(x) 的雅克比矩陣就是,針對所有的輸入啊求導(dǎo),比如第一行是那個f1對所有的輸入變量求導(dǎo),第二行就是f2f的第二個變量,對所有的變量求導(dǎo);同理,最后一行就是fm對所有的變量求導(dǎo)。這就是雅克比矩陣的定義。

雅克比矩陣是一階的求導(dǎo)矩陣,還有二階求導(dǎo)矩陣黑塞矩陣(Hessian Matrix)。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

黑塞矩陣的定義其實也很簡單,每一個f(x) 同時對兩個方向的變量求二次導(dǎo)數(shù)。當然你也可以把它看成雅克比矩陣的變形,黑塞矩陣里的每一項相當于雅克比矩陣里面的每一項再求導(dǎo),因為二階導(dǎo)數(shù)可以看成一次求導(dǎo)再求導(dǎo)。這是黑塞矩陣的定義。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

黑塞矩陣有一個特點,對于一個系統(tǒng),如果它的偏導(dǎo)數(shù)不分方向的,就是說先對xi求導(dǎo)、或者先對xj求導(dǎo),求導(dǎo)的先后順序不影響二次導(dǎo)數(shù)值的話,那么黑塞矩陣就明顯是一個對稱矩陣,因為xi、xj可以互相交換。就是說對先對x2求導(dǎo)或者先對x1求導(dǎo)是沒有關(guān)系的,那么?x1*?x2和?x2*?x1是相等的。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

那么二階矩陣有什么影響,它對先前的一階矩陣梯度下降的不足有什么樣的改進呢?簡單分析一下,一個f(x) 可以做這樣的泰勒展開,其中包含特定點的值,這個表示的是一階導(dǎo)數(shù),也就是梯度,然后H是一個二階的梯度矩陣。

當我們更新x值的時候,比如說現(xiàn)在是x0,然后下一步更新到x0-εg的時候(這是剛才梯度下降的定義嘛),帶入這個泰勒展開會得到圖中下方的公式。

列出這個公式的主要目的是為了考察梯度下降的步長系數(shù)應(yīng)該怎么取值比較好。剛才講過了,剛開始我們可以隨便給一個比較小的值,0.01、0.004或者更小的值。但是實際的情況下,我們不想隨機給一個,而是通過數(shù)學(xué)的分析得到一個比較好的值,從而定義這個步長系數(shù),可以走得既快又準確。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

帶入得到這個公式之后(當然這時候我們可以把約等號當作等號),我們可以把它當做一個關(guān)于ε的函數(shù),其它的變量可以都當作常數(shù)。如果要得ε的一個比較優(yōu)化的值的話,我們可以看作f(ε) 等于這個式子,然后對它關(guān)于ε求導(dǎo),最后在所有可能的系數(shù)里面得到一個比較好的系數(shù)。有了這個系數(shù)就可以保證我們的步長取得又大又穩(wěn)。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

下面我介紹兩個方法,一個是僅僅用了一階導(dǎo)數(shù)的、我們前面提到的gradient descent;另一個是牛頓方法,這是用到二階導(dǎo)數(shù)的方法。梯度下降僅僅用到了一階導(dǎo)數(shù),所以我們把它稱為一階優(yōu)化算法;牛頓方法用到了二階,我們就把牛頓方法稱為二階優(yōu)化算法。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

我們看一下牛頓迭代方法,這是剛才提到的泰勒展開,然后現(xiàn)在想要找到這個系統(tǒng)的極值點,當然,僅僅求導(dǎo)就行了。根據(jù)一階導(dǎo)數(shù)為0,它的臨界點就是圖中下方這個公式。這樣我們更新就按照這個公式。

這個公式有什么意義呢?就是一次直接找到了這個critical point,過程中用到的是黑塞矩陣。因為在這里面用到了黑塞矩陣,所以我們把牛頓方法稱為一個二階方法。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

這之前,我們遇到的所有求極值的問題都是就是無約束的,就是freestyle,x沒有任何的約束。僅僅是求目標函數(shù)的最小值問題。但是實際情況里有大量的約束問題,這就牽扯到了另外的約束優(yōu)化的問題。

這是維基百科上關(guān)于約束優(yōu)化的定義。

首先f(x) 是目標函數(shù),如果沒有下面這一堆subject to的話,它就是我們之前講到的最優(yōu)化問題,你可以用梯度下降,也可以用牛頓法來求解。但是這個時候它有了很多的約束,比如x必須滿足某一個函數(shù),xi代進去要等于一個特定的值ci。這是一個等式,所以又把它稱作等式約束;相反就是不等式約束問題。

遇到這樣問題應(yīng)該怎么做?很容易想到能不能把這兩個約束的條件整合到目標函數(shù)里面,然后對這個整合的系統(tǒng)再求優(yōu)化問題。其實我們做工程很多時候都是這樣的,之前先有一個基本的、best的處理方法,再遇到一個問題以后,就想辦法把新產(chǎn)生的問題去往已知的基本問題上靠攏。

這里介紹一個KKT的約束優(yōu)化算法。KKT優(yōu)化算法其實很簡單,它就是構(gòu)造了一個廣義的拉格朗日函數(shù),然后我們針對這個廣義的拉格朗日函數(shù),或者是這個系統(tǒng)來求它的極值。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

我們可以從圖片上來看這個約束問題。比如我們選了一個初始點,如果沒有陰影部分的面積,那就從初始點隨便怎么走去找這個最優(yōu)的x。走的方法就是它的梯度方向。但是現(xiàn)在有約束問題的話,x的取值必須要在陰影范圍之內(nèi)走動,這是一個比較形象的約束問題的表征。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

前面提到我們要構(gòu)造拉格朗日函數(shù)。要構(gòu)造拉格朗日函數(shù)也簡單,我們現(xiàn)在有一個等式約束,還有一個不等式約束,只要在等式約束和不能約束之前加入一個系數(shù),當然我們是把這些系數(shù)看作變量的。把這些系數(shù)加入到原來的函數(shù)之上,構(gòu)成了一個新的函數(shù)系統(tǒng),我們就可以把它叫做廣義拉格朗日函數(shù)。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

之前我們是僅僅是求f(x) 的最小值,現(xiàn)在加入了這兩個,我們可以根據(jù)它的特征分析一下。

首先,h(x) 小于等于0的話,針對它的系數(shù)α,我們就要求它的最大值;然后看 λ,因為 λ 是一個常數(shù),求最大或者最小是一樣的;最后又歸結(jié)到f(x),還是求它的最小值。當然,我們也可以兩個累加前面都變成負號,那么同理下面可以變成要求它的最小值。

其實也可以很好理解,就是說原來是一個f(x),現(xiàn)在加入了一個東西,這個東西滿足的條件是對于任意的x,h(x)都必須是小于等于0的。那么如果我的最大值都小于等于0的話,那肯定所有值都小于等于0了。所以我這邊要求一個最小值。

當然我假設(shè)加入的這部分是正的,這邊所有的α都是大于零的,那么L(x,λ,α) αjhj(x) 就始終是小于等于0的;小于等于0的話,我只要讓它的最大值滿足的小于等于0,那么它所有的其他值肯定也是滿足這個條件的。這就是如何構(gòu)建一個拉格朗日函數(shù)的方法。

有了這個構(gòu)建的函數(shù)以后,它的極值問題就可以用梯度下降的方法來求解。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

我們舉一個簡單的例子,最簡單的,線性最小二乘法,這個是在求誤差的時候最常用的損失函數(shù)或者目標函數(shù)了。那么我們可以用到前面講到的梯度下降法,求它的導(dǎo)數(shù),然后x更新的話就是用一個小的補償系數(shù)乘以Δx,就是它的梯度。當然你也可以用牛頓方法,用求它的二階導(dǎo)數(shù)來更新。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

現(xiàn)在我們把這個系統(tǒng)稍微改一下,把它變成一個受限的系統(tǒng)。比如我們要求向量x滿足這個條件,這樣它就變成了一個帶有限制的優(yōu)化問題。這個時候我們可以構(gòu)造拉格朗日函數(shù),原函數(shù)不變,加上它的限制條件,前面加上一個λ變量,然后就可以寫出它的目標函數(shù)。

首先f(x) 是不變的,然后因為xTx小于等于1,所以這邊要求最大的(當然如果xTx大于等于1,你這邊要求最小的)。然后怎么更新這個系統(tǒng)呢,x可以這樣來表示

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

基本上就是求逆的操作。λ滿足的一個梯度條件是,把它看作單變量,對它求導(dǎo),它的導(dǎo)數(shù)需要滿足

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

這樣Deep Learning書的第四章書基本上就講完了。

總結(jié)

最后簡單總結(jié)一下,這一章主要講的問題。

第一,我們在做數(shù)值計算,包括深度學(xué)習(xí)或者機器學(xué)習(xí)的時候,我們要注意里面的變量,尤其是在分母上的變量,不要出于出現(xiàn)過小的值,比如距離,分母不要過橋,分子不要過大?,F(xiàn)在是有軟件是可以幫助我們檢測的,但是因為我們平時用到的算法基本上是成熟的,或者是用了很多Library/庫,其中已經(jīng)對一些異常狀況做過提前預(yù)防,所以我們的計算中是不存在這個問題的。一般是針對我們要自己動手設(shè)計出新的計算方法時才會考慮這個問題;平時的計算過程中一般不需要考慮系統(tǒng)的穩(wěn)定性問題的。你如果設(shè)計一個新的系統(tǒng),你就要分析一下這個系統(tǒng)的穩(wěn)定性。

然后就是梯度下降的意義,就是我們找了一個什么樣的方向去接近目標函數(shù),有了方案以后我們應(yīng)該怎么走,每一步應(yīng)該走多少;有時候你走的過大的話,也會導(dǎo)致系統(tǒng)的發(fā)散。

其實在這本書的最后作者也說了,目前Deep Learning系統(tǒng)缺少嚴格的理論保障。為什么我們做機器學(xué)習(xí)的時候經(jīng)常說調(diào)參數(shù)、調(diào)參數(shù),就是因為很多東西可以說是試出來的,并沒有嚴格的數(shù)學(xué)證明說某一個值應(yīng)該怎么取。這一章節(jié)在最后也說了一個目前使用的深度學(xué)習(xí)算法的缺點,就是因為它的系統(tǒng)目前過于復(fù)雜,比如一層接一層的函數(shù)的疊加或者是相乘,它的系統(tǒng)分析就會很復(fù)雜,很難有一個明確的理論去分析這個系統(tǒng)的各種特征。如果僅僅是一個簡單的f(x)=x2,這種系統(tǒng)無論怎么做都行,它已經(jīng)被分析的太徹底了,無論怎么算都會有一個精確的算法在那里。所以前面講的誤差也僅僅是在一個常見的容易出錯的地方給了一個比較好的指導(dǎo),但實際的計算過程中還會遇到各種各樣的問題。這個時候一是要靠經(jīng)驗,二是也希望會有越來越多的數(shù)學(xué)理論來支持深度學(xué)習(xí)的系統(tǒng)分析。

還有就是,我們在做計算的時候都知道有一個天然的矛盾,就是計算量和精度的問題。計算量大就會讓精度提高,但是有時候過大的計算量又是我們承受不了的,所以這也是一個矛盾?,F(xiàn)在的很多算法其實也就是在中和這個矛盾,既要降低計算量,要保持我們能夠接受的精度。所以現(xiàn)在有很多前處理的方式,針對大量的數(shù)據(jù)要怎么樣處理,讓設(shè)計的系統(tǒng)最后既能夠滿足我們的要求,又盡量的減少計算量,同時也盡量避免一些不必要的誤差。其實這是就是一個洗數(shù)據(jù)的過程,把數(shù)據(jù)洗得干凈一點,把噪音和沒有用的數(shù)據(jù)都淘汰掉的過程。

今天就和大家分享到這里,如果有什么問題的話,歡迎大家在群里面討論。

機器學(xué)習(xí)的數(shù)學(xué)數(shù)學(xué)理論其實比較匱乏,所以有很多值得討論的問題,包括其實有我剛才有好幾個點想講沒有講的,因為時間有限,比如說二階的優(yōu)化問題,怎么樣去用二階的優(yōu)化問題去保證一階優(yōu)化找到那個全局的最小點,而不是局部的最小點。其實這個在多目標、多變量的系統(tǒng)里面,目前還沒有特別好的方法,當然在單系統(tǒng)里面就不存在這個問題,有很多方法去解決。今天就先到這里,謝謝大家。

(完)

雷鋒網(wǎng) AI 科技評論整理,感謝陳安寧此次分享,后續(xù)更多章節(jié)的分享請大家繼續(xù)關(guān)注我們!

相關(guān)文章:

「Deep Learning」讀書系列分享第二章:線性代數(shù) | 分享總結(jié)

「Deep Learning」讀書系列分享第三章:概率和信息論 | 分享總結(jié)

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。

「Deep Learning」讀書系列分享第四章:數(shù)值計算 | 分享總結(jié)

分享:
相關(guān)文章

讀論文為生

日常笑點滴,學(xué)術(shù)死腦筋
當月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說