




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、淺談神經(jīng)網(wǎng)絡先從回歸(Regression)問題說起。我在本吧已經(jīng)看到不少人提到如果想實現(xiàn)強AI,就必須讓機器學會觀察并總結(jié)規(guī)律的言論。具體地說,要讓機器觀察什么是圓的,什么是方的,區(qū)分各種顏色和形狀,然后根據(jù)這些特征對某種事物進行分類或預測。其實這就是回歸問題。如何解決回歸問題?我們用眼睛看到某樣東西,可以一下子看出它的一些基本特征??墒怯嬎銠C呢?它看到的只是一堆數(shù)字而已,因此要讓機器從事物的特征中找到規(guī)律,其實是一個如何在數(shù)字中找規(guī)律的問題。例:假如有一串數(shù)字,已知前六個是1、3、5、7,9,11,請問第七個是幾?你一眼能看出來,是13。對,這串數(shù)字之間有明顯的數(shù)學規(guī)律,都是奇數(shù),而且是按
2、順序排列的。那么這個呢?前六個是0.14、0.57、1.29、2.29、3.57、5.14,請問第七個是幾?這個就不那么容易看出來了吧!我們把這幾個數(shù)字在坐標軸上標識一下,可以看到如下圖形:用曲線連接這幾個點,延著曲線的走勢,可以推算出第七個數(shù)字7。由此可見,回歸問題其實是個曲線擬合(Curve Fitting)問題。那么究竟該如何擬合?機器不可能像你一樣,憑感覺隨手畫一下就擬合了,它必須要通過某種算法才行。假設有一堆按一定規(guī)律分布的樣本點,下面我以擬合直線為例,說說這種算法的原理。其實很簡單,先隨意畫一條直線,然后不斷旋轉(zhuǎn)它。每轉(zhuǎn)一下,就分別計算一下每個樣本點和直線上對應點的距離(誤差),求
3、出所有點的誤差之和。這樣不斷旋轉(zhuǎn),當誤差之和達到最小時,停止旋轉(zhuǎn)。說得再復雜點,在旋轉(zhuǎn)的過程中,還要不斷平移這條直線,這樣不斷調(diào)整,直到誤差最小時為止。這種方法就是著名的梯度下降法(Gradient Descent)。為什么是梯度下降呢?在旋轉(zhuǎn)的過程中,當誤差越來越小時,旋轉(zhuǎn)或移動的量也跟著逐漸變小,當誤差小于某個很小的數(shù),例如0.0001時,我們就可以收工(收斂, Converge)了。啰嗦一句,如果隨便轉(zhuǎn),轉(zhuǎn)過頭了再往回轉(zhuǎn),那就不是梯度下降法。我們知道,直線的公式是y=kx+b,k代表斜率,b代表偏移值(y軸上的截距)。也就是說,k可以控制直線的旋轉(zhuǎn)角度,b可以控制直線的移動。強調(diào)一下,梯
4、度下降法的實質(zhì)是不斷的修改k、b這兩個參數(shù)值,使最終的誤差達到最小。求誤差時使用 累加(直線點-樣本點)2,這樣比直接求差距 累加(直線點-樣本點) 的效果要好。這種利用最小化誤差的平方和來解決回歸問題的方法叫最小二乘法(Least Square Method)。問題到此使似乎就已經(jīng)解決了,可是我們需要一種適應于各種曲線擬合的方法,所以還需要繼續(xù)深入研究。我們根據(jù)擬合直線不斷旋轉(zhuǎn)的角度(斜率)和擬合的誤差畫一條函數(shù)曲線,如圖:從圖中可以看出,誤差的函數(shù)曲線是個二次曲線,凸函數(shù)(下凸, Convex),像個碗的形狀,最小值位于碗的最下端。如果在曲線的最底端畫一條切線,那么這條切線一定是水平的,在
5、圖中可以把橫坐標軸看成是這條切線。如果能求出曲線上每個點的切線,就能得到切線位于水平狀態(tài)時,即切線斜率等于0時的坐標值,這個坐標值就是我們要求的誤差最小值和最終的擬合直線的最終斜率。這樣,梯度下降的問題集中到了切線的旋轉(zhuǎn)上。切線旋轉(zhuǎn)至水平時,切線斜率=0,誤差降至最小值。切線每次旋轉(zhuǎn)的幅度叫做學習率(Learning Rate),加大學習率會加快擬合速度,但是如果調(diào)得太大會導致切線旋轉(zhuǎn)過度而無法收斂。注意:對于凹凸不平的誤差函數(shù)曲線,梯度下降時有可能陷入局部最優(yōu)解。下圖的曲線中有兩個坑,切線有可能在第一個坑的最底部趨于水平。微分就是專門求曲線切線的工具,求出的切線斜率叫做導數(shù)(Derivati
6、ve),用dy/dx或f(x)表示。擴展到多變量的應用,如果要同時求多個曲線的切線,那么其中某個切線的斜率就叫偏導數(shù)(Partial Derivative),用y/x表示,讀“偏(partial)”。由于實際應用中,我們一般都是對多變量進行處理,我在后面提到的導數(shù)也都是指偏導數(shù)。以上是線性回歸(Linear Regression)的基本內(nèi)容,以此方法為基礎,把直線公式改為曲線公式,還可以擴展出二次回歸、三次回歸、多項式回歸等多種曲線回歸。下圖是Excel的回歸分析功能。在多數(shù)情況下,曲線回歸會比直線回歸更精確,但它也增加了擬合的復雜程度。直線方程y=kx+b改為二次曲線方程y=ax2+bx+c
7、時,參數(shù)(Parameter)由2個(分別是k、b)變?yōu)?個(分別是a、b、c),特征(Feature)由1個(x)變?yōu)?個(x2和x)。三次曲線和復雜的多項式回歸會增加更多的參數(shù)和特征。前面講的是總結(jié)一串數(shù)字的規(guī)律,現(xiàn)實生活中我們往往要根據(jù)多個特征(多串數(shù)字)來分析一件事情,每個原始特征我們都看作是一個維度(Dimension)。例如一個學生的學習成績好壞要根據(jù)語文、數(shù)學、英語等多門課程的分數(shù)來綜合判斷,這里每門課程都是一個維度。當使用二次曲線和多變量(多維)擬合的情況下,特征的數(shù)量會劇增,特征數(shù)=維度2/2 這個公式可以大概計算出特征增加的情況,例如一個100維的數(shù)據(jù),二次多項式擬合后,特
8、征會增加到100*100/2=5000個。下面是一張50*50像素的灰度圖片,如果用二次多項式擬合的話,它有多少個特征呢?大約有3百萬!它的維度是50*50=2500,特征數(shù)=2500*2500/2=3,125,000。如果是彩色圖片,維度會增加到原來的3倍,那么特征數(shù)將增加到接近3千萬了!這么小的一張圖片,就有這么巨大的特征量,可以想像一下我們的數(shù)碼相機拍下來的照片會有多大的特征量!而我們要做的是從十萬乃至億萬張這樣的圖片中找規(guī)律,這可能嗎?很顯然,前面的那些回歸方法已經(jīng)不夠用了,我們急需找到一種數(shù)學模型,能夠在此基礎上不斷減少特征,降低維度。于是,“人工神經(jīng)網(wǎng)絡(ANN, Artifici
9、al Neural Network)”就在這樣苛刻的條件下粉墨登場了,神經(jīng)科學的研究成果為機器學習領域開辟了廣闊的道路。神經(jīng)元有一種假說:“智能來源于單一的算法(One Learning Algorithm)”。如果這一假說成立,那么利用單一的算法(神經(jīng)網(wǎng)絡)處理世界上千變?nèi)f化的問題就成為可能。我們不必對萬事萬物進行編程,只需采用以不變應萬變的策略即可。有越來越多的證據(jù)證明這種假說,例如人類大腦發(fā)育初期,每一部分的職責分工是不確定的,也就是說,人腦中負責處理聲音的部分其實也可以處理視覺影像。下圖是單個神經(jīng)元(Neuron),或者說一個腦細胞的生理結(jié)構(gòu):下面是單個神經(jīng)元的數(shù)學模型,可以看出它是生
10、理結(jié)構(gòu)的簡化版,模仿的還挺像:解釋一下:+1代表偏移值(偏置項, Bias Units);X1,X2,X2代表初始特征;w0,w1,w2,w3代表權(quán)重(Weight),即參數(shù),是特征的縮放倍數(shù);特征經(jīng)過縮放和偏移后全部累加起來,此后還要經(jīng)過一次激活運算然后再輸出。激活函數(shù)有很多種,后面將會詳細說明。舉例說明:X1*w1+X2*w2+.+Xn*wn這種計算方法稱為加權(quán)求和(Weighted Sum)法,此方法在線性代數(shù)里極為常用。加權(quán)求和的標準數(shù)學符號是,不過為了簡化,我在教程里使用女巫布萊爾的符號表示,剛好是一個加號和一個乘號的組合。這個數(shù)學模型有什么意義呢?下面我對照前面那個 y=kx+b
11、直線擬合的例子來說明一下。這時我們把激活函數(shù)改為Purelin(45度直線),Purelin就是y=x,代表保持原來的值不變。這樣輸出值就成了 Y直線點 = b + X直線點*k,即y=kx+b。看到了吧,只是換了個馬甲而已,還認的出來嗎?下一步,對于每個點都進行這種運算,利用Y直線點和Y樣本點計算誤差,把誤差累加起來,不斷地更新b、k的值,由此不斷地移動和旋轉(zhuǎn)直線,直到誤差變得很小時停住(收斂)。這個過程完全就是前面講過的梯度下降的線性回歸。一般直線擬合的精確度要比曲線差很多,那么使用神經(jīng)網(wǎng)絡我們將如何使用曲線擬合?答案是使用非線性的激活函數(shù)即可,最常見的激活函數(shù)是Sigmoid(S形曲線)
12、,Sigmoid有時也稱為邏輯回歸(Logistic Regression),簡稱logsig。logsig曲線的公式如下:還有一種S形曲線也很常見到,叫雙曲正切函數(shù)(tanh),或稱tansig,可以替代logsig。下面是它們的函數(shù)圖形,從圖中可以看出logsig的數(shù)值范圍是01,而tansig的數(shù)值范圍是-11。自然常數(shù)e公式中的e叫自然常數(shù),也叫歐拉數(shù),e=2.71828.。e是個很神秘的數(shù)字,它是“自然律”的精髓,其中暗藏著自然增長的奧秘,它的圖形表達是旋渦形的螺線。融入了e的螺旋線,在不斷循環(huán)縮放的過程中,可以完全保持它原有的彎曲度不變,就像一個無底的黑洞,吸進再多的東西也可以保持
13、原來的形狀。這一點至關(guān)重要!它可以讓我們的數(shù)據(jù)在經(jīng)歷了多重的Sigmoid變換后仍維持原先的比例關(guān)系。e是怎么來的?e = 1 + 1/1! + 1/2! + 1/3! + 1/4! + 1/5! + 1/6! + 1/7! + . = 1 + 1 + 1/2 + 1/6 + 1/24 + 1/120+ . 2.71828 (!代表階乘,3!=1*2*3=6)再舉個通俗點的例子:從前有個財主,他特別貪財,喜歡放債。放出去的債年利率為100%,也就是說借1塊錢,一年后要還給他2塊錢。有一天,他想了個壞主意,要一年算兩次利息,上半年50%,下半年50%,這樣上半年就有1塊5了,下半年按1塊5的50
14、%來算,就有1.5/2=0.75元,加起來一年是:上半年1.5+下半年0.75=2.25元。用公式描述,就是(1+50%)(1+50%)=(1+1/2)2=2.25元。可是他又想,如果按季度算,一年算4次,那豈不是更賺?那就是(1+1/4)4=2.44141,果然更多了。他很高興,于是又想,那干脆每天都算吧,這樣一年下來就是(1+1/365)365=2.71457。然后他還想每秒都算,結(jié)果他的管家把他拉住了,說要再算下去別人都會瘋掉了。不過財主還是不死心,算了很多年終于算出來了,當x趨于無限大的時候,e=(1+1/x)x 2.71828,結(jié)果他成了數(shù)學家。e在微積分領域非常重要,ex的導數(shù)依然
15、是ex,自己的導數(shù)恰好是它自己,這種巧合在實數(shù)范圍內(nèi)絕無僅有。一些不同的稱呼:ex和e-x的圖形是對稱的;ln(x)是ex的逆函數(shù),它們呈45度對稱。神經(jīng)網(wǎng)絡好了,前面花了不少篇幅來介紹激活函數(shù)中那個暗藏玄機的e,下面可以正式介紹神經(jīng)元的網(wǎng)絡形式了。下圖是幾種比較常見的網(wǎng)絡形式:- 左邊藍色的圓圈叫“輸入層”,中間橙色的不管有多少層都叫“隱藏層”,右邊綠色的是“輸出層”。- 每個圓圈,都代表一個神經(jīng)元,也叫節(jié)點(Node)。- 輸出層可以有多個節(jié)點,多節(jié)點輸出常常用于分類問題。- 理論證明,任何多層網(wǎng)絡可以用三層網(wǎng)絡近似地表示。- 一般憑經(jīng)驗來確定隱藏層到底應該有多少個節(jié)點,在測試的過程中也可
16、以不斷調(diào)整節(jié)點數(shù)以取得最佳效果。計算方法:- 雖然圖中未標識,但必須注意每一個箭頭指向的連線上,都要有一個權(quán)重(縮放)值。- 輸入層的每個節(jié)點,都要與的隱藏層每個節(jié)點做點對點的計算,計算的方法是加權(quán)求和+激活,前面已經(jīng)介紹過了。(圖中的紅色箭頭指示出某個節(jié)點的運算關(guān)系)- 利用隱藏層計算出的每個值,再用相同的方法,和輸出層進行計算。- 隱藏層用都是用Sigmoid作激活函數(shù),而輸出層用的是Purelin。這是因為Purelin可以保持之前任意范圍的數(shù)值縮放,便于和樣本值作比較,而Sigmoid的數(shù)值范圍只能在01之間。- 起初輸入層的數(shù)值通過網(wǎng)絡計算分別傳播到隱藏層,再以相同的方式傳播到輸出層
17、,最終的輸出值和樣本值作比較,計算出誤差,這個過程叫前向傳播(Forward Propagation)。前面講過,使用梯度下降的方法,要不斷的修改k、b兩個參數(shù)值,使最終的誤差達到最小。神經(jīng)網(wǎng)絡可不只k、b兩個參數(shù),事實上,網(wǎng)絡的每條連接線上都有一個權(quán)重參數(shù),如何有效的修改這些參數(shù),使誤差最小化,成為一個很棘手的問題。從人工神經(jīng)網(wǎng)絡誕生的60年代,人們就一直在不斷嘗試各種方法來解決這個問題。直到80年代,誤差反向傳播算法(BP算法)的提出,才提供了真正有效的解決方案,使神經(jīng)網(wǎng)絡的研究絕處逢生。BP算法是一種計算偏導數(shù)的有效方法,它的基本原理是:利用前向傳播最后輸出的結(jié)果來計算誤差的偏導數(shù),再用
18、這個偏導數(shù)和前面的隱藏層進行加權(quán)求和,如此一層一層的向后傳下去,直到輸入層(不計算輸入層),最后利用每個節(jié)點求出的偏導數(shù)來更新權(quán)重。為了便于理解,后面我一律用“殘差(error term)”這個詞來表示誤差的偏導數(shù)。輸出層隱藏層:殘差 = -(輸出值-樣本值) * 激活函數(shù)的導數(shù)隱藏層隱藏層:殘差 = (右層每個節(jié)點的殘差加權(quán)求和)* 激活函數(shù)的導數(shù)如果輸出層用Purelin作激活函數(shù),Purelin的導數(shù)是1,輸出層隱藏層:殘差 = -(輸出值-樣本值)如果用Sigmoid(logsig)作激活函數(shù),那么:Sigmoid導數(shù) = Sigmoid*(1-Sigmoid)輸出層隱藏層:殘差 =
19、-(Sigmoid輸出值-樣本值) * Sigmoid*(1-Sigmoid) = -(輸出值-樣本值)*輸出值*(1-輸出值)隱藏層隱藏層:殘差 = (右層每個節(jié)點的殘差加權(quán)求和)* 當前節(jié)點的Sigmoid*(1-當前節(jié)點的Sigmoid)如果用tansig作激活函數(shù),那么:tansig導數(shù) = 1 - tansig2殘差全部計算好后,就可以更新權(quán)重了:輸入層:權(quán)重增加 = 當前節(jié)點的Sigmoid * 右層對應節(jié)點的殘差 * 學習率隱藏層:權(quán)重增加 = 輸入值 * 右層對應節(jié)點的殘差 * 學習率偏移值的權(quán)重增加 = 右層對應節(jié)點的殘差 * 學習率學習率前面介紹過,學習率是一個預先設置好的
20、參數(shù),用于控制每次更新的幅度。此后,對全部數(shù)據(jù)都反復進行這樣的計算,直到輸出的誤差達到一個很小的值為止。以上介紹的是目前最常見的神經(jīng)網(wǎng)絡類型,稱為前饋神經(jīng)網(wǎng)絡(FeedForward Neural Network),由于它一般是要向后傳遞誤差的,所以也叫BP神經(jīng)網(wǎng)絡(Back Propagation Neural Network)。BP神經(jīng)網(wǎng)絡的特點和局限:- BP神經(jīng)網(wǎng)絡可以用作分類、聚類、預測等。需要有一定量的歷史數(shù)據(jù),通過歷史數(shù)據(jù)的訓練,網(wǎng)絡可以學習到數(shù)據(jù)中隱含的知識。在你的問題中,首先要找到某些問題的一些特征,以及對應的評價數(shù)據(jù),用這些數(shù)據(jù)來訓練神經(jīng)網(wǎng)絡。- BP神經(jīng)網(wǎng)絡主要是在實踐的
21、基礎上逐步完善起來的系統(tǒng),并不完全是建立在仿生學上的。從這個角度講,實用性 生理相似性。- BP神經(jīng)網(wǎng)絡中的某些算法,例如如何選擇初始值、如何確定隱藏層的節(jié)點個數(shù)、使用何種激活函數(shù)等問題,并沒有確鑿的理論依據(jù),只有一些根據(jù)實踐經(jīng)驗總結(jié)出的有效方法或經(jīng)驗公式。- BP神經(jīng)網(wǎng)絡雖然是一種非常有效的計算方法,但它也以計算超復雜、計算速度超慢、容易陷入局部最優(yōu)解等多項弱點著稱,因此人們提出了大量有效的改進方案,一些新的神經(jīng)網(wǎng)絡形式也層出不窮。文字的公式看上去有點繞,下面我發(fā)一個詳細的計算過程圖。這里介紹的是計算完一條記錄,就馬上更新權(quán)重,以后每計算完一條都即時更新權(quán)重。實際上批量更新的效果會更好,方法
22、是在不更新權(quán)重的情況下,把記錄集的每條記錄都算過一遍,把要更新的增值全部累加起來求平均值,然后利用這個平均值來更新一次權(quán)重,然后利用更新后的權(quán)重進行下一輪的計算,這種方法叫批量梯度下降(Batch Gradient Descent)。例1:我們都知道,面積=長*寬,假如我們有一組數(shù)測量據(jù)如下:我們利用這組數(shù)據(jù)來訓練神經(jīng)網(wǎng)絡。(在Matlab中輸入以下的代碼,按回車即可執(zhí)行)p = 2 5; 3 6; 12 2; 1 6; 9 2; 8 12; 4 7; 7 9; % 特征數(shù)據(jù)X1,X2t = 10 18 24 6 18 96 28 63; % 樣本值net =newff(p, t, 20);
23、% 創(chuàng)建一個BP神經(jīng)網(wǎng)絡 ff=FeedForwardnet =train(net, p, t); % 用p,t數(shù)據(jù)來訓練這個網(wǎng)絡出現(xiàn)如下的信息,根據(jù)藍線的顯示,可以看出最后收斂時,誤差已小于10-20。你也許會問,計算機難道這樣就能學會乘法規(guī)則嗎?不用背乘法口訣表了?先隨便選幾個數(shù)字,試試看:s = 3 7; 6 9; 4 5; 5 7; % 準備一組新的數(shù)據(jù)用于測試y =sim(net, s) % 模擬一下,看看效果% 結(jié)果是:25.1029 61.5882 29.5848 37.5879看到了吧,預測結(jié)果和實際結(jié)果還是有差距的。不過從中也能看出,預測的數(shù)據(jù)不是瞎蒙的,至少還是有那么一點靠
24、譜。如果訓練集中的數(shù)據(jù)再多一些的話,預測的準確率還會大幅度提高。你測試的結(jié)果也許和我的不同,這是因為初始化的權(quán)重參數(shù)是隨機的,可能會陷入局部最優(yōu)解,所以有時預測的結(jié)果會很不理想。例2:下面測試一下擬合正弦曲線,這次我們隨機生成一些點來做樣本。p = rand(1,50)*7 % 生成1行50個07之間的隨機數(shù)t = sin(p) % 計算正弦曲線s = 0:0.1:7; % 生成07的一組數(shù)據(jù),間隔0.1,用于模擬測試plot(p, t, x) % 畫散點圖net = newff(p, t, 20); % 創(chuàng)建神經(jīng)網(wǎng)絡net = train(net, p, t); % 開始訓練y = sim(
25、net, s); % 模擬plot(s, y, x) % 畫散點圖從圖中看出,這次的預測結(jié)果顯然是不理想的,我們需要設置一些參數(shù)來調(diào)整。下面的設置是一種標準的批量梯度下降法的配置。% 創(chuàng)建3層神經(jīng)網(wǎng)絡 隱藏層10個節(jié)點-logsig, 輸出層1個節(jié)點-purelin traingd代表梯度下降法net = newff(p, t,10, logsig purelin, traingd); % 10不能寫成10 1% 設置訓練參數(shù)net.trainparam.show= 50; % 顯示訓練結(jié)果(訓練50次顯示一次)net.trainparam.epochs= 500; % 總訓練次數(shù)net.tr
26、ainparam.goal= 0.01; % 訓練目標:誤差0.01net.trainParam.lr= 0.01; % 學習率(learning rate)net = train(net, p, t); % 開始訓練注意:newff的第三個參數(shù)10不能寫成10 1,否則就是4層網(wǎng)絡,兩個隱藏層,分別是10個和1個節(jié)點。這個很容易弄錯。(輸出層的節(jié)點數(shù)程序會自動根據(jù)t的維度自動判斷,所以不用指定)y = sim(net, s); % 模擬plot(s, y, x) % 畫散點圖這時的效果顯然更差了。把精度調(diào)高一點看看。訓練次數(shù)加到9999,誤差logsig, 輸出層1個節(jié)點-purelin t
27、raingd代表梯度下降法net = newff(p, t, 10, logsig purelin, traingd);% 設置訓練參數(shù)net.trainparam.show = 50; % 每間隔50次顯示一次訓練結(jié)果net.trainparam.epochs =9999; % 總訓練次數(shù)net.trainparam.goal =0.001; % 訓練目標:誤差0.001net.trainParam.lr =0.06; % 學習率(learning rate)net = train(net, p, t); % 開始訓練標準的批量梯度下降法的速度確實夠慢,這次計算花了一分多鐘。y = sim(
28、net, s); % 模擬plot(s, y, x) % 畫散點圖效果比上次稍好一點。不過這條曲線顯得坑坑洼洼的很難看,這是一種過擬合(Overfitting)現(xiàn)象,與之相反的是欠擬合(Underfitting)。先來解決速度問題,把traingd改為trainlm即可。trainlm使用LM算法,是介于牛頓法和梯度下降法之間的一種非線性優(yōu)化方法,不但會加快訓練速度,還會減小陷入局部最小值的可能性,是Matlab的默認值。net = newff(p, t, 10, logsig purelin, trainlm);. 后面的代碼不變這個速度比較驚嘆了,1秒鐘之內(nèi)完成,只做了6輪計算,效果也好了
29、一些。不過,LM算法也有弱點,它占用的內(nèi)存非常大,所以沒把其它算法給淘汰掉。下面解決過擬合問題,把隱藏層的節(jié)點數(shù)目設少一點就行了。net = newff(p, t, 3, logsig purelin, trainlm);. 后面的代碼不變這回終于達到滿意的效果了。(有時會出現(xiàn)局部最優(yōu)解,可以多試幾次)如果節(jié)點數(shù)目太少,會出現(xiàn)欠擬合的情況。關(guān)于隱藏層的節(jié)點個數(shù),一般是要憑感覺去調(diào)的。如果訓練集的維數(shù)比較多,調(diào)節(jié)起來比較耗時間,這時可以根據(jù)經(jīng)驗公式上下浮動地去調(diào)整。下面給出幾個經(jīng)驗公式供參考:如果把輸出層改為logsig激活會是什么樣子呢?net = newff(p, t, 3, logsig
30、logsig); % 創(chuàng)建神經(jīng)網(wǎng)絡net = train(net, p, t); % 開始訓練y = sim(net, s); % 模擬plot(s, y, x) % 畫散點圖可以看出,-10范圍之間的點都變?yōu)?了。使用logsig輸出時要想得到完整數(shù)值范圍的效果,必須先對數(shù)據(jù)進行歸一化才行。歸一化(Normalization),也叫標準化,就是把一堆數(shù)字按比例縮放到01或-11的范圍。雖然用Purelin輸出可以不必歸一化,但歸一化能在一定程度上加快收斂速度,因此被許多教程定為訓練前的必須步驟。公式為:歸一值 = (當前值x-最小值min)/(最大值max-最小值min)如果限定了范圍,公式
31、為:y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin;0.10.9的范圍:(0.9-0.1)*(x-min)/(max-min)*(0.9-0.1)+0.1把5, 2, 6, 3這四個數(shù)歸一化:Matlab的歸一化命令為:mapminmax注:網(wǎng)上的不少教程里用premnmx命令來歸一化,要注意Matlab版本R2007b和R2008b,premnmx在處理單列數(shù)據(jù)時有bug,Matlab已給出了警告,R2009a版才修正。因此推薦使用mapminmax。mapminmax的輸入輸出值和premnmx是行列顛倒的,使用時要注意代碼中是否添加轉(zhuǎn)置符號。a =
32、 5, 2, 6, 3;b =mapminmax(a,0, 1) % 歸一化到01之間% b = 0.7500 0 1.0000 0.2500c =mapminmax(a) % 歸一化到-11之間% c = 0.5000 -1.0000 1.0000 -0.5000反歸一化(Denormalization)就是按歸一化時的比例還原數(shù)值。a = 5, 2, 6, 3;c,PS = mapminmax(a); % PS記錄歸一化時的比例mapminmax(reverse, c,PS) % 利用PS反歸一化% ans = 5 2 6 3神經(jīng)網(wǎng)絡的歸一化(01范圍)代碼:p = rand(1,50)*
33、7; % 特征數(shù)據(jù)t = sin(p); % 樣本值s = 0:0.1:7; % 測試數(shù)據(jù)pn,ps =mapminmax(p, 0, 1); % 特征數(shù)據(jù)歸一化tn,ts =mapminmax(t, 0, 1); % 樣本值歸一化sn =mapminmax(apply, s,ps); % 測試數(shù)據(jù),按ps比例縮放net = newff(pn, tn, 5 1, logsig logsig); % 創(chuàng)建神經(jīng)網(wǎng)絡net = train(net, pn, tn); % 開始訓練yn = sim(net, sn); % 模擬y =mapminmax(reverse, yn,ts); % 按ps的比例還原plot(s, y, x) % 畫散點圖神經(jīng)網(wǎng)絡工具箱還有一個UI圖形操作界面,執(zhí)行nntool就可以打開。我覺得不如寫代碼方便,所以不怎么用。我提供一個相關(guān)的教程鏈接,有興趣
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 星級酒店集團管理辦法
- 血液中心全面質(zhì)量管理體系建設及程序文件解讀
- 華為后備梯隊管理辦法
- 公廁建設后續(xù)管理辦法
- 水輪機增效優(yōu)化技術(shù)-洞察及研究
- 傳播學領域的爭議、轉(zhuǎn)向及新聞傳播范疇探討
- 公益健康基金管理辦法
- 公文書寫中的字體規(guī)范與設計原則
- 安全生產(chǎn)八不傷害心得體會
- 世界文化遺產(chǎn)申報
- GB/T 18884.2-2015家用廚房設備第2部分:通用技術(shù)要求
- GB/T 12239-2008工業(yè)閥門金屬隔膜閥
- 軍標類型整理文檔
- 山東中醫(yī)藥大學2020-2021學年內(nèi)科護理學試題及答案1
- DB32T 4174-2021 城市居住區(qū)和單位綠化標準
- 基本原理與性能特點多自由度電磁軸承課件
- Q∕SY 1836-2015 鍋爐 加熱爐燃油(氣)燃燒器及安全聯(lián)鎖保護裝置檢測規(guī)范
- 北京輸變電工程標準工藝應用圖冊(圖文并茂)
- 儀器使用記錄表
- 石河子大學化學化工學院學院綜合測評方案-理學院
- 《汽車電工電子技術(shù)》全套教案(完整版)
評論
0/150
提交評論