![機(jī)器學(xué)習(xí)入門-淺談神經(jīng)網(wǎng)路_第1頁(yè)](http://file4.renrendoc.com/view12/M06/00/21/wKhkGWY3DJSAVLtvAALxJlLYEZA841.jpg)
![機(jī)器學(xué)習(xí)入門-淺談神經(jīng)網(wǎng)路_第2頁(yè)](http://file4.renrendoc.com/view12/M06/00/21/wKhkGWY3DJSAVLtvAALxJlLYEZA8412.jpg)
![機(jī)器學(xué)習(xí)入門-淺談神經(jīng)網(wǎng)路_第3頁(yè)](http://file4.renrendoc.com/view12/M06/00/21/wKhkGWY3DJSAVLtvAALxJlLYEZA8413.jpg)
![機(jī)器學(xué)習(xí)入門-淺談神經(jīng)網(wǎng)路_第4頁(yè)](http://file4.renrendoc.com/view12/M06/00/21/wKhkGWY3DJSAVLtvAALxJlLYEZA8414.jpg)
![機(jī)器學(xué)習(xí)入門-淺談神經(jīng)網(wǎng)路_第5頁(yè)](http://file4.renrendoc.com/view12/M06/00/21/wKhkGWY3DJSAVLtvAALxJlLYEZA8415.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
機(jī)器學(xué)習(xí)入門——淺談神經(jīng)網(wǎng)路〔摘自百度貼吧〕先從回歸(Regression)問(wèn)題說(shuō)起。我在本吧已經(jīng)看到不少人提到如果想實(shí)現(xiàn)強(qiáng)AI,就必須讓機(jī)器學(xué)會(huì)觀察并總結(jié)規(guī)律的言論。具體地說(shuō),要讓機(jī)器觀察什么是圓的,什么是方的,區(qū)分各種顏色和形狀,然后根據(jù)這些特征對(duì)某種事物進(jìn)行分類或預(yù)測(cè)。其實(shí)這就是回歸問(wèn)題。如何解決回歸問(wèn)題?我們用眼睛看到某樣?xùn)|西,可以一下子看出它的一些根本特征??墒怯?jì)算機(jī)呢?它看到的只是一堆數(shù)字而已,因此要讓機(jī)器從事物的特征中找到規(guī)律,其實(shí)是一個(gè)如何在數(shù)字中找規(guī)律的問(wèn)題。例:假設(shè)有一串?dāng)?shù)字,前六個(gè)是1、3、5、7,9,11,請(qǐng)問(wèn)第七個(gè)是幾?你一眼能看出來(lái),是13。對(duì),這串?dāng)?shù)字之間有明顯的數(shù)學(xué)規(guī)律,都是奇數(shù),而且是按順序排列的。那么這個(gè)呢?前六個(gè)是0.14、0.57、1.29、2.29、3.57、5.14,請(qǐng)問(wèn)第七個(gè)是幾?這個(gè)就不那么容易看出來(lái)了吧!我們把這幾個(gè)數(shù)字在坐標(biāo)軸上標(biāo)識(shí)一下,可以看到如下列圖形:用曲線連接這幾個(gè)點(diǎn),延著曲線的走勢(shì),可以推算出第七個(gè)數(shù)字——7。由此可見,回歸問(wèn)題其實(shí)是個(gè)曲線擬合(CurveFitting)問(wèn)題。那么究竟該如何擬合?機(jī)器不可能像你一樣,憑感覺(jué)隨手畫一下就擬合了,它必須要通過(guò)某種算法才行。假設(shè)有一堆按一定規(guī)律分布的樣本點(diǎn),下面我以擬合直線為例,說(shuō)說(shuō)這種算法的原理。其實(shí)很簡(jiǎn)單,先隨意畫一條直線,然后不斷旋轉(zhuǎn)它。每轉(zhuǎn)一下,就分別計(jì)算一下每個(gè)樣本點(diǎn)和直線上對(duì)應(yīng)點(diǎn)的距離(誤差),求出所有點(diǎn)的誤差之和。這樣不斷旋轉(zhuǎn),當(dāng)誤差之和到達(dá)最小時(shí),停止旋轉(zhuǎn)。說(shuō)得再?gòu)?fù)雜點(diǎn),在旋轉(zhuǎn)的過(guò)程中,還要不斷平移這條直線,這樣不斷調(diào)整,直到誤差最小時(shí)為止。這種方法就是著名的梯度下降法(GradientDescent)。為什么是梯度下降呢?在旋轉(zhuǎn)的過(guò)程中,當(dāng)誤差越來(lái)越小時(shí),旋轉(zhuǎn)或移動(dòng)的量也跟著逐漸變小,當(dāng)誤差小于某個(gè)很小的數(shù),例如0.0001時(shí),我們就可以收工(收斂,Converge)了。啰嗦一句,如果隨便轉(zhuǎn),轉(zhuǎn)過(guò)頭了再往回轉(zhuǎn),那就不是梯度下降法。我們知道,直線的公式是y=kx+b,k代表斜率,b代表偏移值(y軸上的截距)。也就是說(shuō),k可以控制直線的旋轉(zhuǎn)角度,b可以控制直線的移動(dòng)。強(qiáng)調(diào)一下,梯度下降法的實(shí)質(zhì)是不斷的修改k、b這兩個(gè)參數(shù)值,使最終的誤差到達(dá)最小。求誤差時(shí)使用累加(直線點(diǎn)-樣本點(diǎn))^2,這樣比直接求差距累加(直線點(diǎn)-樣本點(diǎn))的效果要好。這種利用最小化誤差的平方和來(lái)解決回歸問(wèn)題的方法叫最小二乘法(LeastSquareMethod)。問(wèn)題到此使似乎就已經(jīng)解決了,可是我們需要一種適應(yīng)于各種曲線擬合的方法,所以還需要繼續(xù)深入研究。我們根據(jù)擬合直線不斷旋轉(zhuǎn)的角度(斜率)和擬合的誤差畫一條函數(shù)曲線,如圖:從圖中可以看出,誤差的函數(shù)曲線是個(gè)二次曲線,凸函數(shù)(下凸,Convex),像個(gè)碗的形狀,最小值位于碗的最下端。如果在曲線的最底端畫一條切線,那么這條切線一定是水平的,在圖中可以把橫坐標(biāo)軸看成是這條切線。如果能求出曲線上每個(gè)點(diǎn)的切線,就能得到切線位于水平狀態(tài)時(shí),即切線斜率等于0時(shí)的坐標(biāo)值,這個(gè)坐標(biāo)值就是我們要求的誤差最小值和最終的擬合直線的最終斜率。這樣,梯度下降的問(wèn)題集中到了切線的旋轉(zhuǎn)上。切線旋轉(zhuǎn)至水平時(shí),切線斜率=0,誤差降至最小值。切線每次旋轉(zhuǎn)的幅度叫做學(xué)習(xí)率(LearningRate),加大學(xué)習(xí)率會(huì)加快擬合速度,但是如果調(diào)得太大會(huì)導(dǎo)致切線旋轉(zhuǎn)過(guò)度而無(wú)法收斂。注意:對(duì)于凹凸不平的誤差函數(shù)曲線,梯度下降時(shí)有可能陷入局部最優(yōu)解。下列圖的曲線中有兩個(gè)坑,切線有可能在第一個(gè)坑的最底部趨于水平。微分就是專門求曲線切線的工具,求出的切線斜率叫做導(dǎo)數(shù)(Derivative),用dy/dx或f'(x)表示。擴(kuò)展到多變量的應(yīng)用,如果要同時(shí)求多個(gè)曲線的切線,那么其中某個(gè)切線的斜率就叫偏導(dǎo)數(shù)(PartialDerivative),用?y/?x表示,?讀“偏(partial)”。由于實(shí)際應(yīng)用中,我們一般都是對(duì)多變量進(jìn)行處理,我在后面提到的導(dǎo)數(shù)也都是指偏導(dǎo)數(shù)。以上是線性回歸(LinearRegression)的根本內(nèi)容,以此方法為根底,把直線公式改為曲線公式,還可以擴(kuò)展出二次回歸、三次回歸、多項(xiàng)式回歸等多種曲線回歸。下列圖是Excel的回歸分析功能。在多數(shù)情況下,曲線回歸會(huì)比直線回歸更精確,但它也增加了擬合的復(fù)雜程度。直線方程y=kx+b改為二次曲線方程y=ax^2+bx+c時(shí),參數(shù)(Parameter)由2個(gè)(分別是k、b)變?yōu)?個(gè)(分別是a、b、c),特征(Feature)由1個(gè)(x)變?yōu)?個(gè)(x^2和x)。三次曲線和復(fù)雜的多項(xiàng)式回歸會(huì)增加更多的參數(shù)和特征。前面講的是總結(jié)一串?dāng)?shù)字的規(guī)律,現(xiàn)實(shí)生活中我們往往要根據(jù)多個(gè)特征(多串?dāng)?shù)字)來(lái)分析一件事情,每個(gè)原始特征我們都看作是一個(gè)維度(Dimension)。例如一個(gè)學(xué)生的學(xué)習(xí)成績(jī)好壞要根據(jù)語(yǔ)文、數(shù)學(xué)、英語(yǔ)等多門課程的分?jǐn)?shù)來(lái)綜合判斷,這里每門課程都是一個(gè)維度。當(dāng)使用二次曲線和多變量(多維)擬合的情況下,特征的數(shù)量會(huì)劇增,特征數(shù)=維度^2/2這個(gè)公式可以大概計(jì)算出特征增加的情況,例如一個(gè)100維的數(shù)據(jù),二次多項(xiàng)式擬合后,特征會(huì)增加到100*100/2=5000個(gè)。下面是一張50*50像素的灰度圖片,如果用二次多項(xiàng)式擬合的話,它有多少個(gè)特征呢?——大約有3百萬(wàn)!它的維度是50*50=2500,特征數(shù)=2500*2500/2=3,125,000。如果是彩色圖片,維度會(huì)增加到原來(lái)的3倍,那么特征數(shù)將增加到接近3千萬(wàn)了!這么小的一張圖片,就有這么巨大的特征量,可以想像一下我們的數(shù)碼相機(jī)拍下來(lái)的照片會(huì)有多大的特征量!而我們要做的是從十萬(wàn)乃至億萬(wàn)張這樣的圖片中找規(guī)律,這可能嗎?很顯然,前面的那些回歸方法已經(jīng)不夠用了,我們急需找到一種數(shù)學(xué)模型,能夠在此根底上不斷減少特征,降低維度。于是,“人工神經(jīng)網(wǎng)絡(luò)(ANN,ArtificialNeuralNetwork)”就在這樣苛刻的條件下粉墨〔閃亮〕登場(chǎng)了,神經(jīng)科學(xué)的研究成果為機(jī)器學(xué)習(xí)領(lǐng)域開辟了廣闊的道路??记绊氈喝绻莂,b,c三個(gè)原始特征,那么轉(zhuǎn)換為2次多項(xiàng)式為a^2+a*b+a*c+b^2+b*c+c^2,一共6項(xiàng)(6個(gè)特征);如果是a,b,c,d四個(gè)原始特征,那么轉(zhuǎn)換為a^2+a*b+a*c+a*d+b^2+b*c+b*d+c^2+b*c+d^2,共10個(gè)特征,當(dāng)原始特征數(shù)越來(lái)越大時(shí),轉(zhuǎn)換的特征數(shù)會(huì)趨于"原始特征數(shù)的平方/2"。,可以用O(n^2)來(lái)表示。神經(jīng)元有一種假說(shuō):“智能來(lái)源于單一的算法(OneLearningAlgorithm)”。如果這一假說(shuō)成立,那么利用單一的算法(神經(jīng)網(wǎng)絡(luò))處理世界上千變?nèi)f化的問(wèn)題就成為可能。我們不必對(duì)萬(wàn)事萬(wàn)物進(jìn)行編程,只需采用以不變應(yīng)萬(wàn)變的策略即可。有越來(lái)越多的證據(jù)證明這種假說(shuō),例如人類大腦發(fā)育初期,每一局部的職責(zé)分工是不確定的,也就是說(shuō),人腦中負(fù)責(zé)處理聲音的局部其實(shí)也可以處理視覺(jué)影像。下列圖是單個(gè)神經(jīng)元(Neuron),或者說(shuō)一個(gè)腦細(xì)胞的生理結(jié)構(gòu):下面是單個(gè)神經(jīng)元的數(shù)學(xué)模型,可以看出它是生理結(jié)構(gòu)的簡(jiǎn)化版,模仿的還挺像:解釋一下:+1代表偏移值(偏置項(xiàng),BiasUnits);X1,X2,X2代表初始特征;w0,w1,w2,w3代表權(quán)重(Weight),即參數(shù),是特征的縮放倍數(shù);特征經(jīng)過(guò)縮放和偏移后全部累加起來(lái),此后還要經(jīng)過(guò)一次激活運(yùn)算然后再輸出。激活函數(shù)有很多種,后面將會(huì)詳細(xì)說(shuō)明。舉例說(shuō)明:55/5=11X1*w1+X2*w2+...+Xn*wn這種計(jì)算方法稱為加權(quán)求和(WeightedSum)法,此方法在線性代數(shù)里極為常用。加權(quán)求和的標(biāo)準(zhǔn)數(shù)學(xué)符號(hào)是,不過(guò)為了簡(jiǎn)化,我在教程里使用女巫布萊爾的符號(hào)表示,剛好是一個(gè)加號(hào)和一個(gè)乘號(hào)的組合。這個(gè)數(shù)學(xué)模型有什么意義呢?下面我對(duì)照前面那個(gè)y=kx+b直線擬合的例子來(lái)說(shuō)明一下。這時(shí)我們把激活函數(shù)改為Purelin(45度直線),Purelin就是y=x,代表保持原來(lái)的值不變。這樣輸出值就成了Y直線點(diǎn)=b+X直線點(diǎn)*k,即y=kx+b??吹搅税?,只是換了個(gè)馬甲而已,還認(rèn)的出來(lái)嗎?下一步,對(duì)于每個(gè)點(diǎn)都進(jìn)行這種運(yùn)算,利用Y直線點(diǎn)和Y樣本點(diǎn)計(jì)算誤差,把誤差累加起來(lái),不斷地更新b、k的值,由此不斷地移動(dòng)和旋轉(zhuǎn)直線,直到誤差變得很小時(shí)停住(收斂)。這個(gè)過(guò)程完全就是前面講過(guò)的梯度下降的線性回歸。一般直線擬合的精確度要比曲線差很多,那么使用神經(jīng)網(wǎng)絡(luò)我們將如何使用曲線擬合?答案是使用非線性的激活函數(shù)即可,最常見的激活函數(shù)是Sigmoid(S形曲線),Sigmoid有時(shí)也稱為邏輯回歸(LogisticRegression),簡(jiǎn)稱logsig。logsig曲線的公式如下:還有一種S形曲線也很常見到,叫雙曲正切函數(shù)(tanh),或稱tansig,可以替代logsig。下面是它們的函數(shù)圖形,從圖中可以看出logsig的數(shù)值范圍是0~1,而tansig的數(shù)值范圍是-1~1。自然常數(shù)e公式中的e叫自然常數(shù),也叫歐拉數(shù),e=2.71828...。e是個(gè)很神秘的數(shù)字,它是“自然律”的精髓,其中暗藏著自然增長(zhǎng)的奧秘,它的圖形表達(dá)是旋渦形的螺線。融入了e的螺旋線,在不斷循環(huán)縮放的過(guò)程中,可以完全保持它原有的彎曲度不變,就像一個(gè)無(wú)底的黑洞,吸進(jìn)再多的東西也可以保持原來(lái)的形狀。這一點(diǎn)至關(guān)重要!它可以讓我們的數(shù)據(jù)在經(jīng)歷了多重的Sigmoid變換后仍維持原先的比例關(guān)系。e是怎么來(lái)的?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)再舉個(gè)通俗點(diǎn)的例子:從前有個(gè)財(cái)主,他特別貪財(cái),喜歡放債。放出去的債年利率為100%,也就是說(shuō)借1塊錢,一年后要還給他2塊錢。有一天,他想了個(gè)壞主意,要一年算兩次利息,上半年50%,下半年50%,這樣上半年就有1塊5了,下半年按1塊5的50%來(lái)算,就有1.5/2=0.75元,加起來(lái)一年是:上半年1.5+下半年0.75=2.25元。用公式描述,就是(1+50%)(1+50%)=(1+1/2)^2=2.25元??墒撬窒耄绻醇径人?,一年算4次,那豈不是更賺?那就是(1+1/4)^4=2.44141,果然更多了。他很快樂(lè),于是又想,那干脆每天都算吧,這樣一年下來(lái)就是(1+1/365)^365=2.71457。然后他還想每秒都算,結(jié)果他的管家把他拉住了,說(shuō)要再算下去別人都會(huì)瘋掉了。不過(guò)財(cái)主還是不死心,算了很多年終于算出來(lái)了,當(dāng)x趨于無(wú)限大的時(shí)候,e=(1+1/x)^x≈2.71828,結(jié)果他成了數(shù)學(xué)家。e在微積分領(lǐng)域非常重要,e^x的導(dǎo)數(shù)依然是e^x,自己的導(dǎo)數(shù)恰好是它自己,這種巧合在實(shí)數(shù)范圍內(nèi)絕無(wú)僅有。一些不同的稱呼:e^x和e^-x的圖形是對(duì)稱的;ln(x)是e^x的逆函數(shù),它們呈45度對(duì)稱。神經(jīng)網(wǎng)絡(luò)好了,前面花了不少篇幅來(lái)介紹激活函數(shù)中那個(gè)暗藏玄機(jī)的e,下面可以正式介紹神經(jīng)元的網(wǎng)絡(luò)形式了。下列圖是幾種比擬常見的網(wǎng)絡(luò)形式:-左邊藍(lán)色的圓圈叫“輸入層”,中間橙色的不管有多少層都叫“隱藏層”,右邊綠色的是“輸出層”。-每個(gè)圓圈,都代表一個(gè)神經(jīng)元,也叫節(jié)點(diǎn)(Node)。-輸出層可以有多個(gè)節(jié)點(diǎn),多節(jié)點(diǎn)輸出常常用于分類問(wèn)題。-理論證明,任何多層網(wǎng)絡(luò)可以用三層網(wǎng)絡(luò)近似地表示。-一般憑經(jīng)驗(yàn)來(lái)確定隱藏層到底應(yīng)該有多少個(gè)節(jié)點(diǎn),在測(cè)試的過(guò)程中也可以不斷調(diào)整節(jié)點(diǎn)數(shù)以取得最正確效果。計(jì)算方法:-雖然圖中未標(biāo)識(shí),但必須注意每一個(gè)箭頭指向的連線上,都要有一個(gè)權(quán)重(縮放)值。-輸入層的每個(gè)節(jié)點(diǎn),都要與的隱藏層每個(gè)節(jié)點(diǎn)做點(diǎn)對(duì)點(diǎn)的計(jì)算,計(jì)算的方法是加權(quán)求和+激活,前面已經(jīng)介紹過(guò)了。(圖中的紅色箭頭指示出某個(gè)節(jié)點(diǎn)的運(yùn)算關(guān)系)-利用隱藏層計(jì)算出的每個(gè)值,再用相同的方法,和輸出層進(jìn)行計(jì)算。-隱藏層用都是用Sigmoid作激活函數(shù),而輸出層用的是Purelin。這是因?yàn)镻urelin可以保持之前任意范圍的數(shù)值縮放,便于和樣本值作比擬,而Sigmoid的數(shù)值范圍只能在0~1之間。-起初輸入層的數(shù)值通過(guò)網(wǎng)絡(luò)計(jì)算分別傳播到隱藏層,再以相同的方式傳播到輸出層,最終的輸出值和樣本值作比擬,計(jì)算出誤差,這個(gè)過(guò)程叫前向傳播(ForwardPropagation)。前面講過(guò),使用梯度下降的方法,要不斷的修改k、b兩個(gè)參數(shù)值,使最終的誤差到達(dá)最小。神經(jīng)網(wǎng)絡(luò)可不只k、b兩個(gè)參數(shù),事實(shí)上,網(wǎng)絡(luò)的每條連接線上都有一個(gè)權(quán)重參數(shù),如何有效的修改這些參數(shù),使誤差最小化,成為一個(gè)很棘手的問(wèn)題。從人工神經(jīng)網(wǎng)絡(luò)誕生的60年代,人們就一直在不斷嘗試各種方法來(lái)解決這個(gè)問(wèn)題。直到80年代,誤差反向傳播算法(BP算法)的提出,才提供了真正有效的解決方案,使神經(jīng)網(wǎng)絡(luò)的研究絕處逢生。BP算法是一種計(jì)算偏導(dǎo)數(shù)的有效方法,它的根本原理是:利用前向傳播最后輸出的結(jié)果來(lái)計(jì)算誤差的偏導(dǎo)數(shù),再用這個(gè)偏導(dǎo)數(shù)和前面的隱藏層進(jìn)行加權(quán)求和,如此一層一層的向后傳下去,直到輸入層(不計(jì)算輸入層),最后利用每個(gè)節(jié)點(diǎn)求出的偏導(dǎo)數(shù)來(lái)更新權(quán)重。為了便于理解,后面我一律用“殘差(errorterm)”這個(gè)詞來(lái)表示誤差的偏導(dǎo)數(shù)。輸出層→隱藏層:殘差=-(輸出值-樣本值)*激活函數(shù)的導(dǎo)數(shù)隱藏層→隱藏層:殘差=(右層每個(gè)節(jié)點(diǎn)的殘差加權(quán)求和)*激活函數(shù)的導(dǎo)數(shù)如果輸出層用Purelin作激活函數(shù),Purelin的導(dǎo)數(shù)是1,輸出層→隱藏層:殘差=-(輸出值-樣本值)如果用Sigmoid(logsig)作激活函數(shù),那么:Sigmoid導(dǎo)數(shù)=Sigmoid*(1-Sigmoid)輸出層→隱藏層:殘差=-(Sigmoid輸出值-樣本值)*Sigmoid*(1-Sigmoid)=-(輸出值-樣本值)*輸出值*(1-輸出值)隱藏層→隱藏層:殘差=(右層每個(gè)節(jié)點(diǎn)的殘差加權(quán)求和)*當(dāng)前節(jié)點(diǎn)的Sigmoid*(1-當(dāng)前節(jié)點(diǎn)的Sigmoid)如果用tansig作激活函數(shù),那么:tansig導(dǎo)數(shù)=1-tansig^2殘差全部計(jì)算好后,就可以更新權(quán)重了:輸入層:權(quán)重增加=輸入值*右層對(duì)應(yīng)節(jié)點(diǎn)的殘差*學(xué)習(xí)率隱藏層:權(quán)重增加=當(dāng)前節(jié)點(diǎn)的Sigmoid*右層對(duì)應(yīng)節(jié)點(diǎn)的殘差*學(xué)習(xí)率偏移值的權(quán)重增加=右層對(duì)應(yīng)節(jié)點(diǎn)的殘差*學(xué)習(xí)率學(xué)習(xí)率前面介紹過(guò),學(xué)習(xí)率是一個(gè)預(yù)先設(shè)置好的參數(shù),用于控制每次更新的幅度。此后,對(duì)全部數(shù)據(jù)都反復(fù)進(jìn)行這樣的計(jì)算,直到輸出的誤差到達(dá)一個(gè)很小的值為止。以上介紹的是目前最常見的神經(jīng)網(wǎng)絡(luò)類型,稱為前饋神經(jīng)網(wǎng)絡(luò)(FeedForwardNeuralNetwork),由于它一般是要向后傳遞誤差的,所以也叫BP神經(jīng)網(wǎng)絡(luò)(BackPropagationNeuralNetwork)。BP神經(jīng)網(wǎng)絡(luò)的特點(diǎn)和局限:-BP神經(jīng)網(wǎng)絡(luò)可以用作分類、聚類、預(yù)測(cè)等。需要有一定量的歷史數(shù)據(jù),通過(guò)歷史數(shù)據(jù)的訓(xùn)練,網(wǎng)絡(luò)可以學(xué)習(xí)到數(shù)據(jù)中隱含的知識(shí)。在你的問(wèn)題中,首先要找到某些問(wèn)題的一些特征,以及對(duì)應(yīng)的評(píng)價(jià)數(shù)據(jù),用這些數(shù)據(jù)來(lái)訓(xùn)練神經(jīng)網(wǎng)絡(luò)。-BP神經(jīng)網(wǎng)絡(luò)主要是在實(shí)踐的根底上逐步完善起來(lái)的系統(tǒng),并不完全是建立在仿生學(xué)上的。從這個(gè)角度講,實(shí)用性>生理相似性。-BP神經(jīng)網(wǎng)絡(luò)中的某些算法,例如如何選擇初始值、如何確定隱藏層的節(jié)點(diǎn)個(gè)數(shù)、使用何種激活函數(shù)等問(wèn)題,并沒(méi)有確鑿的理論依據(jù),只有一些根據(jù)實(shí)踐經(jīng)驗(yàn)總結(jié)出的有效方法或經(jīng)驗(yàn)公式。-BP神經(jīng)網(wǎng)絡(luò)雖然是一種非常有效的計(jì)算方法,但它也以計(jì)算超復(fù)雜、計(jì)算速度超慢、容易陷入局部最優(yōu)解等多項(xiàng)弱點(diǎn)著稱,因此人們提出了大量有效的改良方案,一些新的神經(jīng)網(wǎng)絡(luò)形式也層出不窮。文字的公式看上去有點(diǎn)繞,下面我發(fā)一個(gè)詳細(xì)的計(jì)算過(guò)程圖。參考這個(gè):我做了整理這里介紹的是計(jì)算完一條記錄,就馬上更新權(quán)重,以后每計(jì)算完一條都即時(shí)更新權(quán)重。實(shí)際上批量更新的效果會(huì)更好,方法是在不更新權(quán)重的情況下,把記錄集的每條記錄都算過(guò)一遍,把要更新的增值全部累加起來(lái)求平均值,然后利用這個(gè)平均值來(lái)更新一次權(quán)重,然后利用更新后的權(quán)重進(jìn)行下一輪的計(jì)算,這種方法叫批量梯度下降(BatchGradientDescent)。推薦的入門級(jí)學(xué)習(xí)資源:AndrewNg的《機(jī)器學(xué)習(xí)》公開課:Coursera公開課筆記中文版〔神經(jīng)網(wǎng)絡(luò)的表示〕:://52opencourse/139/coursera公開課筆記-斯坦福大學(xué)機(jī)器學(xué)習(xí)第八課-神經(jīng)網(wǎng)絡(luò)的表示-neural-networks-representationCoursera公開課視頻〔神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)〕:://52opencourse/289/coursera公開課視頻-斯坦福大學(xué)機(jī)器學(xué)習(xí)第九課-神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)-neural-networks-learning斯坦福深度學(xué)習(xí)中文版:教程關(guān)于Matlab的入門教程,參看這個(gè)帖子:例1:我們都知道,面積=長(zhǎng)*寬,假設(shè)我們有一組數(shù)測(cè)量據(jù)如下:我們利用這組數(shù)據(jù)來(lái)訓(xùn)練神經(jīng)網(wǎng)絡(luò)。〔在Matlab中輸入以下的代碼,按回車即可執(zhí)行〕p=[25;36;122;16;92;812;47;79]';%特征數(shù)據(jù)X1,X2t=[101824618962863];%樣本值net=newff(p,t,20);%創(chuàng)立一個(gè)BP神經(jīng)網(wǎng)絡(luò)ff=FeedForwardnet=train(net,p,t);%用p,t數(shù)據(jù)來(lái)訓(xùn)練這個(gè)網(wǎng)絡(luò)出現(xiàn)如下的信息,根據(jù)藍(lán)線的顯示,可以看出最后收斂時(shí),誤差已小于10^-20。你也許會(huì)問(wèn),計(jì)算機(jī)難道這樣就能學(xué)會(huì)乘法規(guī)那么嗎?不用背乘法口訣表了?先隨便選幾個(gè)數(shù)字,試試看:s=[37;69;45;57]';%準(zhǔn)備一組新的數(shù)據(jù)用于測(cè)試y=sim(net,s)%模擬一下,看看效果%結(jié)果是:25.102961.588229.584837.5879看到了吧,預(yù)測(cè)結(jié)果和實(shí)際結(jié)果還是有差距的。不過(guò)從中也能看出,預(yù)測(cè)的數(shù)據(jù)不是瞎蒙的,至少還是有那么一點(diǎn)靠譜。如果訓(xùn)練集中的數(shù)據(jù)再多一些的話,預(yù)測(cè)的準(zhǔn)確率還會(huì)大幅度提高。你測(cè)試的結(jié)果也許和我的不同,這是因?yàn)槌跏蓟臋?quán)重參數(shù)是隨機(jī)的,可能會(huì)陷入局部最優(yōu)解,所以有時(shí)預(yù)測(cè)的結(jié)果會(huì)很不理想。例2:下面測(cè)試一下擬合正弦曲線,這次我們隨機(jī)生成一些點(diǎn)來(lái)做樣本。p=rand(1,50)*7%生成1行50個(gè)0~7之間的隨機(jī)數(shù)t=sin(p)%計(jì)算正弦曲線s=[0:0.1:7];%生成0~7的一組數(shù)據(jù),間隔0.1,用于模擬測(cè)試plot(p,t,'x')%畫散點(diǎn)圖net=newff(p,t,20);%創(chuàng)立神經(jīng)網(wǎng)絡(luò)net=train(net,p,t);%開始訓(xùn)練y=sim(net,s);%模擬plot(s,y,'x')%畫散點(diǎn)圖從圖中看出,這次的預(yù)測(cè)結(jié)果顯然是不理想的,我們需要設(shè)置一些參數(shù)來(lái)調(diào)整。下面的設(shè)置是一種標(biāo)準(zhǔn)的批量梯度下降法的配置。%創(chuàng)立3層神經(jīng)網(wǎng)絡(luò)[隱藏層10個(gè)節(jié)點(diǎn)->logsig,輸出層1個(gè)節(jié)點(diǎn)->purelin]traingd代表梯度下降法net=newff(p,t,10,{'logsig''purelin'},'traingd');%10不能寫成[101]%設(shè)置訓(xùn)練參數(shù)net.trainparam.show=50;%顯示訓(xùn)練結(jié)果(訓(xùn)練50次顯示一次)net.trainparam.epochs=500;%總訓(xùn)練次數(shù)net.trainparam.goal=0.01;%訓(xùn)練目標(biāo):誤差<0.01net.trainParam.lr=0.01;%學(xué)習(xí)率(learningrate)net=train(net,p,t);%開始訓(xùn)練注意:newff的第三個(gè)參數(shù)10不能寫成[101],否那么就是4層網(wǎng)絡(luò),兩個(gè)隱藏層,分別是10個(gè)和1個(gè)節(jié)點(diǎn)。這個(gè)很容易弄錯(cuò)?!草敵鰧拥墓?jié)點(diǎn)數(shù)程序會(huì)自動(dòng)根據(jù)t的維度自動(dòng)判斷,所以不用指定〕y=sim(net,s);%模擬plot(s,y,'x')%畫散點(diǎn)圖這時(shí)的效果顯然更差了。把精度調(diào)高一點(diǎn)看看。訓(xùn)練次數(shù)加到9999,誤差<0.001;學(xué)習(xí)率調(diào)到0.06,希望能加快點(diǎn)速度。%創(chuàng)立2層神經(jīng)網(wǎng)絡(luò)[隱藏層10個(gè)節(jié)點(diǎn)->logsig,輸出層1個(gè)節(jié)點(diǎn)->purelin]traingd代表梯度下降法net=newff(p,t,10,{'logsig''purelin'},'traingd');%設(shè)置訓(xùn)練參數(shù)net.trainparam.show=50;%每間隔50次顯示一次訓(xùn)練結(jié)果net.trainparam.epochs=9999;%總訓(xùn)練次數(shù)net.trainparam.goal=0.001;%訓(xùn)練目標(biāo):誤差<0.001net.trainParam.lr=0.06;%學(xué)習(xí)率(learningrate)net=train(net,p,t);%開始訓(xùn)練標(biāo)準(zhǔn)的批量梯度下降法的速度確實(shí)夠慢,這次計(jì)算花了一分多鐘。y=sim(net,s);%模擬plot(s,y,'x')%畫散點(diǎn)圖效果比上次稍好一點(diǎn)。不過(guò)這條曲線顯得坑坑洼洼的很難看,這是一種過(guò)擬合(Overfitting)現(xiàn)象,與之相反的是欠擬合(Underfitting)。先來(lái)解決速度問(wèn)題,把traingd改為trainlm即可。trainlm使用LM算法,是介于牛頓法和梯度下降法之間的一種非線性優(yōu)化方法,不但會(huì)加快訓(xùn)練速度,還會(huì)減小陷入局部最小值的可能性,是Matlab的默認(rèn)值。net=newff(p,t,10,{'logsig''purelin'},'trainlm');...后面的代碼不變這個(gè)速度比擬驚嘆了,1秒鐘之內(nèi)完成,只做了6輪計(jì)算,效果也好了一些。不過(guò),LM算法也有弱點(diǎn),它占用的內(nèi)存非常大,所以沒(méi)把其它算法給淘汰掉。下面解決過(guò)擬合問(wèn)題,把隱藏層的節(jié)點(diǎn)數(shù)目設(shè)少一點(diǎn)就行了。net=newff(p,t,3,{'logsig''purelin'},'trainlm');...后面的代碼不變這回終于到達(dá)滿意的效果了。(有時(shí)會(huì)出現(xiàn)局部最優(yōu)解,可以多試幾次)如果節(jié)點(diǎn)數(shù)目太少,會(huì)出現(xiàn)欠擬合的情況。關(guān)于隱藏層的節(jié)點(diǎn)個(gè)數(shù),一般是要憑感覺(jué)去調(diào)的。如果訓(xùn)練集的維數(shù)比擬多,調(diào)節(jié)起來(lái)比擬耗時(shí)間,這時(shí)可以根據(jù)經(jīng)驗(yàn)公式上下浮動(dòng)地去調(diào)整。下面給出幾個(gè)經(jīng)驗(yàn)公式供參考:如果把輸出層改為logsig激活會(huì)是什么樣子呢?net=newff(p,t,3,{'logsig''logsig'});%創(chuàng)立神經(jīng)網(wǎng)絡(luò)net=train(net,p,t);%開始訓(xùn)練y=sim(net,s);%模擬plot(s,y,'x')%畫散點(diǎn)圖可以看出,-1~0范圍之間的點(diǎn)都變?yōu)?了。使用logsig輸出時(shí)要想得到完整數(shù)值范圍的效果,必須先對(duì)數(shù)據(jù)進(jìn)行歸一化才行。歸一化(Normalization),也叫標(biāo)準(zhǔn)化,就是把一堆數(shù)字按比例縮放到0~1或-1~1的范圍。雖然用Purelin輸出可以不必歸一化,但歸一化能在一定程度上加快收斂速度,因此被許多教程定為訓(xùn)練前的必須步驟。公式為:歸一值=(當(dāng)前值x-最小值min)/(最大值max-最小值min)如果限定了范圍,公式為:y=(ymax-ymin)*(x-xmin)/(xmax-xmin)+ymin;0.1~0.9的范圍:(0.9-0.1)*(x-min)/(max-min)*(0.9-0.1)+0.1把5,2,6,3這四個(gè)數(shù)歸一化:Matlab的歸一化命令為:mapminmax注:網(wǎng)上的不少教程里用premnmx命令來(lái)歸一化,要注意Matlab版本R2007b和R2008b,premnmx在處理單列數(shù)據(jù)時(shí)有bug,Matlab已給出了警告,R2009a版才修正。因此推薦使用mapminmax。mapminmax的輸入輸出值和premnmx是行列顛倒的,使用時(shí)要注意代碼中是否添加轉(zhuǎn)置符號(hào)。a=[5,2,6,3];b=mapminmax(a,0,1)%歸一化到0~1之間%b=0.750001.00000.2500可以用下面的代碼歸一化到〔0,1〕a=[5,2,6,3];b=mapminmax(a)+1/2c=mapminmax(a)%歸一化到-1~1之間%c=0.5000-1.00001.0000-0.5000反歸一化(Denormalization)就是按歸一化時(shí)的比例復(fù)原數(shù)值。a=[5,2,6,3];[c,PS]=mapminmax(a);%PS記錄歸一化時(shí)的比例mapminmax('reverse',c,PS)%利用PS反歸一化%ans=5263神經(jīng)網(wǎng)絡(luò)的歸一化(0~1范圍)代碼:p=rand(1,50)*7;%特征數(shù)據(jù)t=sin(p);%樣本值s=[0:0.1:7];%測(cè)試數(shù)據(jù)[pn,ps]=mapminmax(p,0,1);%特征數(shù)據(jù)歸一化[tn,ts]=mapminmax(t,0,1);%樣本值歸一化sn=mapminmax('apply',s,ps);%測(cè)試數(shù)據(jù),按ps比例縮放net=newff(pn,tn,[51],{'logsig''logsig'});%創(chuàng)立神經(jīng)網(wǎng)絡(luò)net=train(net,pn,tn);%開始訓(xùn)練yn=sim(net,sn);%模擬y=mapminmax('reverse',yn,ts);%按ps的比例復(fù)原plot(s,y,'x')%畫散點(diǎn)圖神經(jīng)網(wǎng)絡(luò)工具箱還有一個(gè)UI圖形操作界面,執(zhí)行nntool就可以翻開。我覺(jué)得不如寫代碼方便,所以不怎么用。我提供一個(gè)相關(guān)的教程鏈接,有興趣的可以看一下:matlab神經(jīng)網(wǎng)絡(luò)工具箱創(chuàng)立神經(jīng)網(wǎng)絡(luò):://blog.sina/s/blog_8684880b0100vxtv.html〔新浪替換成sina〕logsigSigmoid函數(shù)(S形函數(shù),LogisticFunction)是受統(tǒng)計(jì)學(xué)模型的啟發(fā)而產(chǎn)生的激活函數(shù)。基于生物學(xué)的神經(jīng)元激活函數(shù)是這樣的:參看:實(shí)踐證明了基于統(tǒng)計(jì)學(xué)的Sigmoid函數(shù)激活效果要比基于生物學(xué)的模型好,而且計(jì)算起來(lái)很方便,所以說(shuō)不能以機(jī)器和人的相似度為標(biāo)準(zhǔn)來(lái)判斷AI算法的好壞。Sigmoid函數(shù)原先是個(gè)描述人口增長(zhǎng)的數(shù)學(xué)模型,1838提出,給出的是導(dǎo)數(shù)形式(概率密度)。人口增長(zhǎng)規(guī)律:起初階段大致是指數(shù)增長(zhǎng);然后逐漸開始變得飽和,增長(zhǎng)變慢;到達(dá)成熟時(shí)幾乎停止增長(zhǎng);整個(gè)過(guò)程形如一條S型曲線。導(dǎo)數(shù)的形式知道了,那么它的原函數(shù)是什么樣子呢?導(dǎo)數(shù)求原函數(shù),用統(tǒng)計(jì)學(xué)的話來(lái)講,即根據(jù)概率密度函數(shù)(PDF)求累積分布函數(shù)(CDF),不定積分(IndefiniteIntegral)就是專門用來(lái)做這個(gè)的工具。根據(jù)不定積分的知識(shí)可知,由于常數(shù)項(xiàng)是可變的,所以存在無(wú)數(shù)個(gè)原函數(shù)的可能。讓我們先用圖解法看一下:既然導(dǎo)數(shù)是函數(shù)曲線的斜率,那么可以把一定數(shù)值范圍內(nèi)的斜率,都畫成一根根的短斜線,組成斜率場(chǎng)(SlopeFields,DirectionFields),然后根據(jù)這些斜線的走勢(shì),畫出積分曲線。Matlab可以用quiver命令來(lái)畫斜率場(chǎng)。從上圖中可以看出,在y軸的0~1之間是個(gè)分水嶺,0和1處的方向趨于水平。下面放大0~1的范圍看看是什么樣子的??吹搅税桑覀円腖ogisticSigmoid就在這里呢。下面給出符號(hào)求解的過(guò)程:tansig雙曲正切函數(shù)(雙極S形函數(shù),tanh,HyperbolicTangent),讀tanch,18世紀(jì)就已經(jīng)出現(xiàn)了。它的定義是:tanh(x)=sinh(x)/cosh(x),可以由著名的歐拉公式(Euler'sformula)推導(dǎo)出來(lái)。用tanh作激活函數(shù),收斂比擬快,效果比Logistic函數(shù)還要好。歐拉公式:i是虛數(shù)(ImaginaryNumber)單位,它的定義是:(即i^2=-1)題外話:根據(jù)上面的公式變換,可以得出史上最美的數(shù)學(xué)公式:,數(shù)學(xué)中最神秘的5個(gè)符號(hào)e、i、π、1和0,全包含在里面了。求tanh的導(dǎo)數(shù):logsig和tansig的關(guān)系:matlab神經(jīng)網(wǎng)絡(luò)工具箱創(chuàng)立神經(jīng)網(wǎng)絡(luò)為了看懂師兄的文章中使用的方法,研究了一下神經(jīng)網(wǎng)絡(luò)昨天花了一天的時(shí)間查怎么寫程序,但是費(fèi)了半天勁,不能運(yùn)行,百度知道里倒是有一個(gè),可以運(yùn)行的,先貼著做標(biāo)本%生成訓(xùn)練樣本集clearall;clc;P=[1100.8072400.21511821.5;1102.8652400.11521212;1102.592400.11242411.5;2200.62400.31231821;22032400.32532111.5;1101.5622400.31531811.5;1100.5472400.3151921.5];01.3183000.11521812];T=[54248162787168380314797;28614639586963782898;86002402710644415328084;230802445102362823335913;602571278927675373541;346159353280762110049;56783172907164548144040];@907117437120368130179];m=max(max(P));n=max(max(T));P=P'/m;T=T'/n;%-------------------------------------------------------------------------%pr(1:9,1)=0;%輸入矢量的取值范圍矩陣pr(1:9,2)=1;bpnet=newff(pr,[124],{'logsig','logsig'},'traingdx','learngdm');%建立BP神經(jīng)網(wǎng)絡(luò),12個(gè)隱層神經(jīng)元,4個(gè)輸出神經(jīng)元%tranferFcn屬性'logsig'隱層采用Sigmoid傳輸函數(shù)%tranferFcn屬性'logsig'輸出層采用Sigmoid傳輸函數(shù)%trainFcn屬性'traingdx'自適應(yīng)調(diào)整學(xué)習(xí)速率附加動(dòng)量因子梯度下降反向傳播算法訓(xùn)練函數(shù)%learn屬性'learngdm'附加動(dòng)量因子的梯度下降學(xué)習(xí)函數(shù)
net.trainParam.epochs=1000;%允許最大訓(xùn)練步數(shù)2000步net.trainParam.goal=0.001;%訓(xùn)練目標(biāo)最小誤差0.001net.trainParam.show=10;%每間隔100步顯示一次訓(xùn)練結(jié)果net.trainParam.lr=0.05;%學(xué)習(xí)速率0.05bpnet=train(bpnet,P,T);%-------------------------------------------------------------------------p=[1101.3183000.11521812];p=p'/m;r=sim(bpnet,p);R=r'*n;display(R);運(yùn)行的結(jié)果是出現(xiàn)這樣的界面點(diǎn)擊performance,trainingstate,以及regression分別出現(xiàn)下面的界面再搜索,發(fā)現(xiàn)可以通過(guò)神經(jīng)網(wǎng)絡(luò)工具箱來(lái)創(chuàng)立神經(jīng)網(wǎng)絡(luò),比擬友好的GUI界面,在輸入命令里面輸入nntool,就可以開始了。點(diǎn)擊import之后就出現(xiàn)下面的具體的設(shè)置神經(jīng)網(wǎng)絡(luò)參數(shù)的對(duì)話界面,
這是輸入輸出數(shù)據(jù)的對(duì)話窗
首先是訓(xùn)練數(shù)據(jù)的輸入
然后點(diǎn)擊new,創(chuàng)立一個(gè)新的神經(jīng)網(wǎng)絡(luò)network1,并設(shè)置其輸入輸出數(shù)據(jù),包括名稱,神經(jīng)網(wǎng)絡(luò)的類型以及隱含層的層數(shù)和節(jié)點(diǎn)數(shù),還有隱含層及輸出層的訓(xùn)練函數(shù)等
點(diǎn)擊view,可以看到這是神經(jīng)網(wǎng)絡(luò)的可視化直觀表達(dá)
創(chuàng)立好了一個(gè)network之后,點(diǎn)擊open,可以看到一個(gè)神經(jīng)網(wǎng)絡(luò)訓(xùn)練,優(yōu)化等的對(duì)話框,選擇了輸入輸出數(shù)據(jù)后,點(diǎn)擊train,神經(jīng)網(wǎng)絡(luò)開始訓(xùn)練,如右下方的圖,可以顯示動(dòng)態(tài)結(jié)果
下面三個(gè)圖形那么是點(diǎn)擊performance,trainingstate以及regression而出現(xiàn)的
下面就是simulate,輸入的數(shù)據(jù)是用來(lái)檢驗(yàn)這個(gè)網(wǎng)絡(luò)的數(shù)據(jù),output改一個(gè)名字,這樣就把輸出數(shù)據(jù)和誤差都存放起來(lái)了
在主界面上點(diǎn)擊export就能將得到的out結(jié)果輸入到matlab中并查看
下列圖就是輸出的兩個(gè)outputs結(jié)果
關(guān)于神經(jīng)網(wǎng)絡(luò)〔matlab〕歸一化的整理BP神經(jīng)網(wǎng)絡(luò)matlab實(shí)現(xiàn)實(shí)例經(jīng)過(guò)最近一段時(shí)間的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí),終于能初步使用matlab實(shí)現(xiàn)BP網(wǎng)絡(luò)仿真試驗(yàn)。這里特別感謝研友sistor2004的帖子《自己編的BP算法〔工具:matlab〕》和研友wangleisxcc的帖子《用C++,Matlab,F(xiàn)ortran實(shí)現(xiàn)的BP算法》前者幫助我對(duì)BP算法有了更明確的認(rèn)識(shí),后者讓我對(duì)matlab下BP函數(shù)的使用有了初步了解。因?yàn)樗麄儼l(fā)的帖子都沒(méi)有加注釋,對(duì)我等新手閱讀時(shí)有一定困難,所以我把sistor2004發(fā)的程序稍加修改后加注了詳細(xì)解釋,方便新手閱讀。%嚴(yán)格按照BP網(wǎng)絡(luò)計(jì)算公式來(lái)設(shè)計(jì)的一個(gè)matlab程序,對(duì)BP網(wǎng)絡(luò)進(jìn)行了優(yōu)化設(shè)計(jì)%yyy,即在o(k)計(jì)算公式時(shí),當(dāng)網(wǎng)絡(luò)進(jìn)入平坦區(qū)時(shí)(<0.0001)學(xué)習(xí)率加大,
出來(lái)后學(xué)習(xí)率又復(fù)原%v(i,j)=v(i,j)+deltv(i,j)+a*dv(i,j);動(dòng)量項(xiàng)clearallclcinputNums=3;
%輸入層節(jié)點(diǎn)outputNums=3;
%輸出層節(jié)點(diǎn)hideNums=10;
%隱層節(jié)點(diǎn)數(shù)maxcount=20000;
%最大迭代次數(shù)samplenum=3;
%一個(gè)計(jì)數(shù)器,無(wú)意義precision=0.001;
%預(yù)設(shè)精度yyy=1.3;
%yyy是幫助網(wǎng)絡(luò)加速走出平坦區(qū)
alpha=0.01;
%學(xué)習(xí)率設(shè)定值a=0.5;
%BP優(yōu)化算法的一個(gè)設(shè)定值,對(duì)上組訓(xùn)練的調(diào)整值按比例修改error=zeros(1,maxcount+1);%error數(shù)組初始化;目的是預(yù)分配內(nèi)存空間errorp=zeros(1,samplenum);%同上v=rand(inputNums,hideNums);
%3*10;v初始化為一個(gè)3*10的隨機(jī)歸一矩陣;v表輸入層到隱層的權(quán)值deltv=zeros(inputNums,hideNums);%3*10;內(nèi)存空間預(yù)分配dv=zeros(inputNums,hideNums);%3*10;
w=rand(hideNums,outputNums);
*3;同Vdeltw=zeros(hideNums,outputNums);*3dw=zeros(hideNums,outputNums);*3samplelist=[0.1323,0.323,-0.132;0.321,0.2434,0.456;-0.6546,-0.3242,0.3255];
%3*3;指定輸入值3*3(實(shí)為3個(gè)向量)expectlist=[0.5435,0.422,-0.642;0.1,0.562,0.5675;-0.6464,-0.756,0.11];
%3*3;期望輸出值3*3(實(shí)為3個(gè)向量),有導(dǎo)師的監(jiān)督學(xué)習(xí)count=1;while(count<=maxcount)
%結(jié)束條件1迭代20000次c=1;while(c<=samplenum)fork=1d(k)=expectlist(c,k);%獲得期望輸出的向量,d(1:3)表示一個(gè)期望向量?jī)?nèi)的值endfori=1:inputNumsx(i)=samplelist(c,i);%獲得輸入的向量〔數(shù)據(jù)〕,x(1:3)表一個(gè)訓(xùn)練向量end%Forward();forj=1:hideNumsnet=0.0;fori=1:inputNumsnet=net+x(i)*v(i,j);%輸入層到隱層的加權(quán)和∑X(i)V(i)
endy(j)=1/(1+exp(-net));
%輸出層處理f(x)=1/(1+exp(-x))單極性sigmiod函數(shù)endfork=1net=0.0;forj=1:hideNumsnet=net+y(j)*w(j,k);endifcount>=2&&error(count)-error(count+1)<=0.0001o(k)=1/(1+exp(-net)/yyy);
%平坦區(qū)加大學(xué)習(xí)率elseo(k)=1/(1+exp(-net));
%同上endend%BpError(c)反應(yīng)/修改;errortmp=0.0;fork=1errortmp=errortmp+(d(k)-o(k))^2;%第一組訓(xùn)練后的誤差計(jì)算enderrorp(c)=0.5*errortmp;%誤差E=∑(d(k)-o(k))^2*1/2%end?ckward();fork=1【轉(zhuǎn)】BP神經(jīng)網(wǎng)絡(luò)matlab實(shí)現(xiàn)實(shí)例utputNumsyitao(k)=(d(k)-o(k))*o(k)*(1-o(k));%輸入層誤差偏導(dǎo)endforj=1:hideNumstem=0.0;fork=1【轉(zhuǎn)】BP神經(jīng)網(wǎng)絡(luò)matlab實(shí)現(xiàn)實(shí)例utputNumstem=tem+yitao(k)*w(j,k);%為了求隱層偏導(dǎo),而計(jì)算的∑endyitay(j)=tem*y(j)*(1-y(j));%隱層偏導(dǎo)end%調(diào)整各層權(quán)值forj=1:hideNumsfork=1【轉(zhuǎn)】BP神經(jīng)網(wǎng)絡(luò)matlab實(shí)現(xiàn)實(shí)例utputNumsdeltw(j,k)=alpha*yitao(k)*y(j);%權(quán)值w的調(diào)整量deltw(已乘學(xué)習(xí)率)w(j,k)=w(j,k)+deltw(j,k)+a*dw(j,k);%權(quán)值調(diào)整,這里的dw=dletw(t-1),實(shí)際是對(duì)BP算法的一個(gè)dw(j,k)=deltw(j,k);%改良措施--增加動(dòng)量工程的是提高訓(xùn)練速度endendfori=1:inputNumsforj=1:hideNumsdeltv(i,j)=alpha*yitay(j)*x(i);%同上deltwv(i,j)=v(i,j)+deltv(i,j)+a*dv(i,j);dv(i,j)=deltv(i,j);endendc=c+1;end%第二個(gè)while結(jié)束;表示一次BP訓(xùn)練結(jié)束doubletmp;tmp=0.0;fori=1:samplenumtmp=tmp+errorp(i)*errorp(i);%誤差求和endtmp=tmp/c;error(count)=sqrt(tmp);%誤差求均方根,即精度if(error(count)<precision)%另一個(gè)結(jié)束條件break;endcount=count+1;%訓(xùn)練次數(shù)加1end%第一個(gè)while結(jié)束error(maxcount+1)=error(maxcount);p=1:count;pp=p/50;plot(pp,error(p),'-');%顯示誤差制作雙縱坐標(biāo)excel圖??吹诫p縱坐標(biāo)軸的圖,但是一直也沒(méi)要用,所以沒(méi)有深究。今天要用,才發(fā)現(xiàn)不會(huì),百度了一番之后試驗(yàn)成功,為防止我這腦袋忘記了,還是記下來(lái),很簡(jiǎn)單。下表是我需要制作的兩個(gè)地方的面積,想做一個(gè)每個(gè)月份兩個(gè)地區(qū)面積的比擬圖。如果之間插入散點(diǎn)圖,可以看到如下列圖,由于數(shù)據(jù)相差比擬大,造成低值的那個(gè)地區(qū)幾乎值都在最底下,看不出高地變化。鼠標(biāo)點(diǎn)擊紅色區(qū)域,就是我們覺(jué)得要編輯的數(shù)據(jù),右鍵,如下列圖,點(diǎn)擊設(shè)置數(shù)據(jù)系列格式在系列選項(xiàng)中,可以看到系列選項(xiàng),選擇次坐標(biāo)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度建筑工地鋼筋裝配式建筑應(yīng)用推廣合同
- 2025年度智能電網(wǎng)工程設(shè)計(jì)與施工一體化服務(wù)合同
- 2025年度臨時(shí)員工勞動(dòng)合同終止后的再就業(yè)服務(wù)協(xié)議
- 2025年度數(shù)據(jù)中心設(shè)備租賃服務(wù)合同
- 2025年度廣告創(chuàng)意設(shè)計(jì)制作合同范本
- 2025年度離婚協(xié)議書起草與婚姻調(diào)解服務(wù)合同
- 2025年度綠色建筑節(jié)能改造項(xiàng)目HSE施工合同
- 2025年度互聯(lián)網(wǎng)產(chǎn)業(yè)園場(chǎng)地租賃合同模板
- 2025年二手房買賣標(biāo)準(zhǔn)合同(2篇)
- 2025年度智能家居系統(tǒng)設(shè)計(jì)與裝飾裝修承包合同
- 機(jī)械加工生產(chǎn)計(jì)劃排程表
- 女性生殖系統(tǒng)解剖與生理 生殖系統(tǒng)的血管淋巴和神經(jīng)
- 江蘇省2023年對(duì)口單招英語(yǔ)試卷及答案
- 易制毒化學(xué)品安全管理制度匯編
- GB/T 35506-2017三氟乙酸乙酯(ETFA)
- GB/T 25784-20102,4,6-三硝基苯酚(苦味酸)
- 特種設(shè)備安全監(jiān)察指令書填寫規(guī)范(特種設(shè)備安全法)參考范本
- 硬筆書法全冊(cè)教案共20課時(shí)
- 《長(zhǎng)方形的面積》-完整版課件
- PDCA降低I類切口感染發(fā)生率
- 工業(yè)企業(yè)現(xiàn)場(chǎng)監(jiān)測(cè)工況核查表
評(píng)論
0/150
提交評(píng)論