九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
跟我學AI:第一篇 神經(jīng)網(wǎng)絡是如何實現(xiàn)的(三)
 

第一篇 神經(jīng)網(wǎng)絡是如何實現(xiàn)的(三)

清華大學計算機系 馬少平

第三節(jié):神經(jīng)網(wǎng)絡是如何訓練的

小明聽艾博士介紹說,一個神經(jīng)網(wǎng)絡用不同的數(shù)據(jù)做訓練,就可以識別不同的東西,感到很神奇,十分好奇地對艾博士說:艾博士,請您說說神經(jīng)網(wǎng)絡究竟是怎么訓練的吧?

艾博士十分欣賞小明的好奇心,說道:好的,下面我們就開始介紹神經(jīng)網(wǎng)絡究竟是如何進行訓練的。小明,你先說說,你是如何認識動物的?

小明回答說:小時候,每當看到一個小動物時,媽媽就會告訴我這是什么動物,見得多了,慢慢地就認識這些小動物了。難道神經(jīng)網(wǎng)絡也是這么認識動物的嗎?

艾博士說:是的,神經(jīng)網(wǎng)絡也是通過一個個樣本認識動物的。人很聰明,見到一次貓,下次可能就認識這是貓了,但是神經(jīng)網(wǎng)絡有點笨,需要給他大量的樣本才可能訓練好。比如我們要建一個可以識別貓和狗兩種動物的神經(jīng)網(wǎng)絡,首先需要收集大量的貓和狗的照片,不同品種、不同大小、不同姿勢的照片都要收集,并標注好哪些照片是貓,哪些照片是狗,就像媽媽告訴你哪個是貓哪個是狗一樣。這是訓練一個神經(jīng)網(wǎng)絡的第一步,數(shù)據(jù)越多越好。其實我們人類有時候也會這么做,所謂的“熟讀唐詩三百首、不會作詩也會吟”,說的就是這個道理,所謂的見多識廣。

準備好數(shù)據(jù)之后,下一步就要進行訓練了。所謂訓練,就是調整神經(jīng)網(wǎng)絡的權重,使得當輸入一個貓的照片時,貓對應的輸出接近于1,狗對應的輸出接近于0,而當輸入一個狗的照片時,狗對應的輸出接近于1,貓對應的輸出接近于0。

小明:如何做到這一點呢? 

艾博士接著對小明說:我們先來舉個例子。小明,你每天是不是要洗澡?洗澡時,你是怎么調節(jié)熱水器的溫度的?

小明不解地看著艾博士,心想我在問神經(jīng)網(wǎng)絡是怎么訓練的,怎么說起洗澡了?不知道艾博士這葫蘆里賣的什么藥。但既然艾博士問到了,只好回答說:這個很容易啊,熱水器上有兩個旋鈕閥門,一個調節(jié)熱水,一個調節(jié)冷水,如果感覺水熱了,就調大冷水,如果感覺水冷了,就調大熱水。

艾博士又問道:感覺水熱時也可以調小熱水,感覺水冷是也可以調小冷水,對不對?

小明一想也確實這樣,回答道:是的,有不同的調整方法,究竟調整哪個可能還需要看水量的大小。比如感覺水熱了,但是水量也很大,這時就可以調節(jié)熱水變小,如果水量不夠大,則可以調節(jié)冷水變大??傊鶕?jù)水溫和水量兩個因素進行調節(jié)。

艾博士見小明終于說到點子上了,在肯定了他的說法之后又說:其實還有個調節(jié)大小的問題,如果感覺水溫與自己的理想溫度差別比較大,就一次把閥門多調節(jié)一些,如果差別不大就少調節(jié)一些,經(jīng)過多次調整之后,就可以得到比較理想的水溫和水量了。

圖1.9 熱水器調節(jié)示意圖

圖1.10 熱水器可以表達為一個神經(jīng)網(wǎng)絡

艾博士對小明說:我們可以把熱水器抽象成圖1.10,你看看這是不是就是一個神經(jīng)網(wǎng)絡?

小明用手拍著自己的小腦瓜說:我終于明白了,這確實就是一個神經(jīng)網(wǎng)絡。兩個輸入是熱水和冷水,冷熱水的兩個閥門大小相當于權重,冷熱水匯合的地方就相當于加權求和,最后從蓮蓬頭出來的水相當于兩個輸出,一個是水溫,一個是水量。

那么調整冷熱水閥門的大小是不是就相當于訓練呢?小明歪著小腦瓜又問道。

艾博士回答說:正是這樣的。調整水閥門的時候可以向大調也可以向小調,這是調整的方向,也可以一次調整的多一些,也可以調整的小一些,這是調整量的大小,還有就是調整哪個閥門,或者兩個閥門都調整,但是大小和方向可能是不同的。

小明感慨到:沒想到,我們每天洗澡時調整洗澡水這么簡單的事情還有這么多的學問。那么這個思想如何用到訓練神經(jīng)網(wǎng)絡上呢?

艾博士說:小明,在回答如何訓練神經(jīng)網(wǎng)絡之前,我們先說說如何評價一個神經(jīng)網(wǎng)絡是否訓練好了,這與訓練神經(jīng)網(wǎng)絡是緊密相關的。在前面熱水器的例子中,什么情況下你會認為熱水器調節(jié)好了?

小明回答說:如果我覺得水溫和水量跟我希望的差不多,就認為調節(jié)好了。

艾博士說:沒錯。但是對于計算機來說,什么叫差不多呢?需要有個衡量標準。比如我們用  表示希望設定的水溫,而用  表示實際的水溫,用  表示希望的水量,用  表示實際的水量,這樣就可以用希望值與實際值的誤差來衡量是否“差不多”,即當誤差比較小時,則認為水溫和水量調節(jié)的差不多了。但是由于誤差有可能是正的(實際值小于希望值時),也可能是負的(實際值大于希望值時),不方便使用,所以我們常常用輸出的“誤差平方和”作為衡量標準。如下式所示:

  

其中E是閥門大小的函數(shù),通過適當調節(jié)冷、熱水閥門的大小,就可以使得E取得比較小的值,當E比較小時,就認為熱水器調節(jié)好了。這里的“閥門”就相當于神經(jīng)網(wǎng)絡的權值w。

對于一個神經(jīng)網(wǎng)絡來說,我們假定有M個輸出,對于一個輸入樣本d,用  表示網(wǎng)絡的M個實際輸出值,這些輸出值對應的目標輸出值為  ,對于該樣本d神經(jīng)網(wǎng)絡輸出的誤差平方和可以表示為:

  

這是對于某一個樣本d的輸出誤差平方和,如果是對于所有的樣本呢?只要把所有樣本的輸出誤差平方和累加到一起即可,我們用E(w)表示:

   

這里的N表示樣本的總數(shù)。我們通常稱E(w)為損失函數(shù),當然還有其他形式的損失函數(shù),誤差平方和只是其中的一個。這里的w是一個由神經(jīng)網(wǎng)絡的所有權重組成的向量。神經(jīng)網(wǎng)絡的訓練問題,就是求得合適的權值,使得損失函數(shù)最小。

小明看著公式困惑地問到:艾博士,一個神經(jīng)網(wǎng)絡有那么多的權值,這可怎么求解啊?

艾博士回答說:這確實是一個復雜的最優(yōu)化問題。我們先從一個簡單的例子說起,假定函數(shù)f(θ)如圖1.11所示 ,該函數(shù)只有一個變量θ,我們想求它的最小值,怎么計算呢?

圖1.11 最小值求解示意圖

基本想法是,開始我們隨機地取一個  值為  ,然后對  進行修改得到  ,再對  做修改得到  ,這么一步步地迭代下去,使得  一點點接近最小值。

假設當前值為  ,對  的修改量為  ,則:

  

如何計算  呢?有兩點需要確定:一個是修改量的大小,一個是修改的方向,即加大還是減少。

小明你看圖1.11,在圖的兩邊距離最小值比較遠的地方比較陡峭,而靠近最小值處則比較平緩,所以在沒有其他信息的情況下,有理由認為,越是陡峭的地方距離最小值就越遠,此處對  的修改量應該加大,而平緩的地方則說明距離最小值比較近了,修改量要比較小一些,以免越過最小值點。所以修改量的大小,也就是  的絕對值,應該與該處的陡峭程度有關,越是陡峭修改量越大,而越是平緩則修改量越小。

小明請你說說,如何度量曲線某處的陡峭程度呢?

小明很快地回答到:艾博士,我們學過函數(shù)的導數(shù),在某一點的導數(shù)就是曲線在該點切線的斜率,斜率的大小直接反應了該處的陡峭程度。是不是可以用導數(shù)值作為曲線在某點陡峭程度的度量呢?

艾博士說:小明真是一個善于思考的好孩子!導數(shù)確實反應了曲線在某點的陡峭程度。接下來的問題就是如何確定θ的修改方向,也就是θ是加大還是減小。

艾博士指著圖1.11問小明:在最小值兩邊的導數(shù)有什么特點呢?

小明想了想學過的高等數(shù)學知識,回答道:就像前面說過的,在某一點的導數(shù)就是曲線在該點切線的斜率,我們看圖1.11的左半部分,曲線的切線是從左上到右下的,其斜率也就是導數(shù)值是小于0的負數(shù),而在圖1.11的右半部分,曲線的切線是從左下到右上的,其斜率也就是導數(shù)值是大于0的正數(shù)。

艾博士接著小明的話說:左邊的導數(shù)值是負的,這時θ值應該加大,右邊的導數(shù)值是正的,這時θ值應該減小,這樣才能使得θ值向中間靠近,逐步接近f(θ)取值最小的地方。所以,θ的修改方向剛好與導數(shù)值的正負號相反。因此,我們可以這樣修改θi值:

  

  

其中  表示函數(shù)f(θ)的導數(shù)。

小明聽著艾博士的講解,興奮的說:這樣求最小值的問題就解決了吧?

艾博士回答說:還有一個問題,如果導數(shù)值比較大可能會使得修改量過大,錯過了最佳值,出現(xiàn)如圖1.12所示的“震蕩”,降低了求解效率。

圖1.12 當步長過大時可能會產生震蕩

小明摸了摸自己的頭問道:那可怎么辦呢?

艾博士說:一種簡單的處理辦法是對修改量乘以一個叫做步長的常量η,這是一個小于1的正數(shù),讓修改量人為地變小。也就是:

  

步長η需要選取一個合適的值,往往根據(jù)經(jīng)驗和實驗決定。也有一些自動選擇步長,甚至變步長的方法,我們今天先不講了,如果有興趣可以閱讀相關材料。

小明問艾博士:神經(jīng)網(wǎng)絡也是這樣訓練的嗎?

艾博士說:基本原理是一樣的。小明你還記得訓練神經(jīng)網(wǎng)絡我們要優(yōu)化的目標嗎?

小明回答說:記得啊,就是求誤差平方和的最小值,也就是前面講過的損失函數(shù)E(w)的最小值。

艾博士說:我們可以用同樣的方法求解E(w)的最小值,所不同的是E(w)是一個多變量函數(shù),所有的權重都是變量,都要求解,每個權重的修改方式與前面講的θ的修改方式是一樣的,只是導數(shù)要用偏導數(shù)代替。如果用wi表示某個權重的話,則采用下式對權重  進行更新:

  

  

其中  、  分別表示  修改前、修改后的值,  表示E(w)對  的偏導數(shù)。所有對  的偏導數(shù)組成的向量稱為梯度,記作  :

  

所以對所有w的修改,可以用梯度表示為:

  

  

這里的  、   、  、  均為向量,  是常量。兩個向量相加為對應元素相加,一個常量乘以一個向量,則是該常量與向量的每個元素相乘,結果還是向量。

小明看著梯度符號問艾博士:艾博士,這里的梯度物理含義是什么呢?

艾博士回答說:如同只有一個變量時的導數(shù)表示函數(shù)曲線在某個點處的陡峭程度一樣,梯度反應的是多維空間中一個曲面在某點的陡峭程度。就如同我們下山時,每次都選擇我們當前站的位置最陡峭的方向一樣。所以這種求解函數(shù)最小值的方法又稱作梯度下降算法。

小明又問道:艾博士,這樣看來,要訓練神經(jīng)網(wǎng)絡,主要問題就是如何計算梯度了?

艾博士回答說:確實是這樣的。對于神經(jīng)網(wǎng)絡來說,由于包含很多在不同層的神經(jīng)元,計算梯度還是有些復雜的。在計算時,也分三種情況,一種是這里所說的標準梯度下降方法。在計算梯度時要用到所有的訓練樣本,一般來說訓練樣本量是很大的,每更新一次權重都要計算所有樣本的輸出,計算量會比較大。另一種極端的方法是,對每個樣本都計算一次梯度,然后更新一次權重,這種方法稱為隨機梯度下降。由于每個樣本都調整一次w的值,所以計算速度會比較快,一般情況下可以比較快地得到一個還不錯的結果。在使用這個方法時,要求訓練樣本要隨機排列,比如訓練一個識別貓和狗的神經(jīng)網(wǎng)絡,不能前面都用貓訓練,后面都用狗訓練,而是貓和狗隨機交錯地使用,這樣才可能得到一個比較好的結果。這也是隨機梯度下降算法這一名稱的由來。

小明:這倒是一個比較好的方法,但是這樣一次只用一個樣本是否會存在問題呢?

艾博士:確實存在問題。隨機梯度下降方法在訓練的開始階段可能下降的比較快,但在后期,尤其是接近最小值時,可能效果并不好,畢竟梯度是由一個樣本計算得到的,并不能代表所有樣本的梯度方向。另外就是可能有個別不好的樣本,甚至標注錯了的樣本,會對結果產生比較大的影響。

說到這里艾博士又問小明:小明,我們說了兩種情況,一種是一次用上全部樣本,一種是一次只用一個樣本,你想想是否可以有折中的辦法呢?

小明歪著小腦瓜回答說:折中的辦法么……,既不是用全部,也不是用一個,那就是一次用一部分了?

艾博士高興地看著小明說:是的,介于上述兩種方法之間的一種方法是每次用一小部分樣本計算梯度,修改權重w的值。這種方法稱作小批量梯度下降算法,是目前用的最多的方法。

小明說:知道了這三種方法,但是還是不知道梯度如何計算啊?

艾博士說:小明你別著急,我們馬上就講梯度的計算方法。其實以上三種方法只是計算時用的樣本量有所不同,梯度的計算方法是差不多的,為了簡單起見,我們以隨機梯度下降算法為例說明,很容易推廣到梯度下降算法或者小批量梯度下降算法。

下面我們以隨機梯度下降算法為例給出具體的算法描述,想了解如何得到這個算法的話,請參考有關材料。

利用隨機梯度下降算法訓練神經(jīng)網(wǎng)絡,就是求下式的最小值:

  

其中d為給定的樣本,M是輸出層神經(jīng)元的個數(shù),  是樣本d希望得到的輸出值,  是樣本d的實際的輸出值。

為了敘述方便,對于神經(jīng)網(wǎng)絡中的任意一個神經(jīng)元j,我們約定如下符號:神經(jīng)元j的第i個輸入為  ,相對應的權重為  。這里的神經(jīng)元j可能是輸出層的,也可能是隱含層的。  不一定是神經(jīng)網(wǎng)絡的輸入,也可能是神經(jīng)元j所在層的前一層的第i個神經(jīng)元的輸出,直接連接到了神經(jīng)元j。我們得到隨機梯度下降算法如下:

算法 隨機梯度下降算法:

1、神經(jīng)網(wǎng)絡的所有權值賦值一個比較小的隨機值如[-0.05, 0.05]

2、在滿足結束條件前:

3、    對于每個訓練樣本

4、    把樣本輸入神經(jīng)網(wǎng)絡,從輸入層到輸出層,計算每個神經(jīng)元的輸出

5、    對于輸出層神經(jīng)元k,計算誤差項:

  

6、對于隱含層神經(jīng)元h,計算誤差項:

  

7、更新每個權值:

  

  

其中算法第二行的結束條件,可以設定為所有樣本中最大的  小于某個給定值時,或者所有樣本中最大的  小于給定值時,算法結束。

小明指著算法第6行問艾博士:這里公式中的“  ”是什么意思呢?

艾博士解釋說:h是隱含層的神經(jīng)元,它的輸出會連接到它的下一層神經(jīng)元中,“后續(xù)(h)”指的是所有的以h的輸出作為輸入的神經(jīng)元,對于全連接神經(jīng)網(wǎng)絡來說,就是h所在層的下一層的所有神經(jīng)元。

第6行公式中:

  

就是用h的每個后續(xù)神經(jīng)元的誤差項  乘以h到神經(jīng)元k的輸入權重,再求和得到。

小明弄清楚了這些符號的意義后又問艾博士:艾博士,這個算法看起來像是從輸出層開始,先計算輸出層每個神經(jīng)元的  值,有了  值,就可以對輸出層神經(jīng)元的權重進行更新。然后再利用輸出層神經(jīng)元的  值,計算其前一層神經(jīng)元的  ,這樣就可以更新前一層的神經(jīng)元的權重,這樣一層層往前推,每次利用后一層的  值計算前一層的  值,就可以實現(xiàn)對所有神經(jīng)元的權重更新了,真是巧妙。

圖1.14 BP算法計算過程示意圖

艾博士說:小明分析的非常正確。當給定一個訓練樣本后,先是利用當前的權重從輸入向輸出方向計算每個神經(jīng)元的輸出值,然后再從輸出層開始反向計算每個神經(jīng)元的δ值,從而對每個神經(jīng)元的權重進行更新。如圖1.14所示。正是由于采用這樣一種反向一層層向前推進的計算過程,所以它有個名稱叫“反向傳播算法”,簡稱BP(Backpropagation Algorithm)算法。該算法也是神經(jīng)網(wǎng)絡訓練的基本算法,不只是可以訓練全連接神經(jīng)網(wǎng)絡,到目前為止的任何神經(jīng)網(wǎng)絡都是采用這個算法,只是根據(jù)神經(jīng)網(wǎng)絡的結構不同,具體計算上有所差別。

艾博士又強調說:前面介紹的隨機梯度算法中的具體計算方法,是在損失函數(shù)采用誤差平方和,并且激活函數(shù)采用sigmoid函數(shù)這種特殊情況下推導出來的,如果用其他的損失函數(shù),或者用其他的激活函數(shù),其具體的計算方法都會有所改變,這一點一定要注意。

聽到這里,小明問道:我已經(jīng)知道有多種不同的激活函數(shù),但是還有其他的損失函數(shù)嗎?

艾博士回答說:還有一種常用的損失函數(shù)叫交叉熵損失函數(shù),其表達式如下:

  

這是對于一個樣本d的損失函數(shù),如果是對于所有的樣本,則為:

  

其中  表示樣本d在輸出層第k個神經(jīng)元的希望輸出,  表示樣本d在輸出層第k個神經(jīng)元的實際輸出,  表示對輸出  求對數(shù)。

小明看著公式不明白地問到:交叉熵損失函數(shù)有什么具體的物理含義嗎?

艾博士反問小明:你還記得我們前面以貓、狗識別舉例時,神經(jīng)網(wǎng)絡的希望輸出是什么樣子嗎?

小明想了想回答道:一個輸出代表貓,一個輸出代表狗。當輸入為貓時,代表貓的輸出希望為1,另一個希望為0,而當輸入為狗時,則是代表狗的輸出希望為1,另一個希望為0。

艾博士說:對。這里的希望輸出1或者0,可以認為就是概率值。

小明問到:我們如何在神經(jīng)網(wǎng)絡輸出層獲得一個概率呢?

艾博士:如果在輸出層獲得概率值,需要滿足概率的兩個主要屬性,一個是取值在0和1之間,另一個是所有輸出累加和為1。為此需要用到一個名為softmax的激活函數(shù)。該激活函數(shù)與我們介紹過的只作用于一個神經(jīng)元的激活函數(shù)不同,softmax作用在輸出層的所有神經(jīng)元上。

設  分別為輸出層每個神經(jīng)元未加激活函數(shù)的輸出,則經(jīng)過softmax激活函數(shù)之后,第i個神經(jīng)元的輸出  為:

  

很容易驗證這樣的輸出值可以滿足概率的兩個屬性。這樣我們就可以將神經(jīng)網(wǎng)絡的輸出當作概率使用了,后面我們會看到這種用法非常普遍。

艾博士繼續(xù)講解說:我們再回到你問的交叉熵損失函數(shù)的物理意義這個問題上來。從概率的角度來說,我們就是希望與輸入對應的輸出概率比較大,而其他輸出概率比較小。對于一個分類問題,當輸入樣本給定時,M個希望輸出中只有一個為1,其他均為0,所以這時的交叉熵中求和部分實際上只有一項不為0,其他項均為0,所以:

  

我們求  最小,去掉負號實際就是求  最大,也就是求樣本d對應輸出的概率值  最大。由于輸出層用的是softmax激活函數(shù),輸出層所有神經(jīng)元輸出之和為1,樣本d對應的輸出變大了,其他輸出也就自然變小了。

小明:原來是這個含義啊,我明白了。那么誤差平方和損失函數(shù)和交叉熵損失函數(shù)各有什么用處呢?

艾博士:小明你這個問題問的非常好。從上面的分析看,交叉熵損失函數(shù)更適合于分類問題,直接優(yōu)化輸出的概率值。而誤差平方和損失函數(shù)比較適合于預測問題。

小明不明白什么是預測問題,馬上問道:艾博士,什么是預測問題呢?

艾博士舉例說:如果輸出是預測某個具有具體大小的數(shù)值,就是預測問題。比如說,我們根據(jù)今天的天氣情況,預測明天的最高氣溫,就屬于預測問題,因為我們預測的是氣溫的具體數(shù)值。

經(jīng)過艾博士的認真講解,小明終于明白了什么是神經(jīng)網(wǎng)絡,以及神經(jīng)網(wǎng)絡的訓練方法,跟艾博士道別后,帶著滿滿的收獲回家了。

小明讀書筆記

神經(jīng)網(wǎng)絡通過優(yōu)化損失函數(shù)最小進行訓練,損失函數(shù)有誤差的平方和、交叉熵等損失函數(shù)。不同的損失函數(shù)應用于不同的應用場景,誤差的平方和損失函數(shù)一般用于求解預測問題,交叉熵損失函數(shù)一般用于求解分類問題。

BP算法是神經(jīng)網(wǎng)絡常用的優(yōu)化方法,來源于梯度下降算法。其特點是給出了一種反向傳播計算誤差的方法,從輸出層開始,一層一層地計算誤差,以便實現(xiàn)對權重的更新。

一次只使用一個樣本的BP算法稱為隨機梯度下降算法,而一次使用若干個樣本的BP算法稱為批量梯度下降算法。批量梯度下降算法是更常用的神經(jīng)網(wǎng)絡優(yōu)化算法。

BP算法是一個迭代過程,反復使用訓練集中的樣本對神經(jīng)網(wǎng)絡進行訓練。訓練集中的全部樣本被使用一次稱為一個輪次,一般需要多個輪次才能完成神經(jīng)網(wǎng)絡的訓練。



本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
CNN,RNN,LSTM 都是什么?(小白深度學習入門)
零基礎入門深度學習:感應器、線性單元和梯度下降
BP算法
反向傳播算法(過程及公式推導)
當我們在談深度學習時,到底在談論什么(二)
深度學習入門:幾幅手稿講解CNN
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服