第一章 回歸滴劲,分類 & 聚類

????分類數(shù)據(jù)

????數(shù)據(jù)回歸分析

????聚類數(shù)據(jù)

????如何構(gòu)建機(jī)器學(xué)習(xí)問題

雖然還有其他模型酿雪,但是回歸,分類和聚類在機(jī)器學(xué)習(xí)問題上是三種最主要的數(shù)據(jù)評估方式垂券,這三種模式是最常見的花盐,也是這本書的重點(diǎn),下一節(jié)將為你介紹分類菇爪,回歸和聚類算芯。?

1.1數(shù)據(jù)分類

分類嘗試確定輸入數(shù)據(jù)所屬哪個(gè)類別,分類通常是一個(gè)監(jiān)督訓(xùn)練操作凳宙,這意味著是用戶向神經(jīng)網(wǎng)絡(luò)提供數(shù)據(jù)和期望的結(jié)果熙揍,對于數(shù)據(jù)分類,期望結(jié)果是確定這個(gè)數(shù)據(jù)類氏涩。

監(jiān)督神經(jīng)網(wǎng)絡(luò)總是訓(xùn)練知道的數(shù)據(jù)届囚,在訓(xùn)練期間,神經(jīng)網(wǎng)絡(luò)評估怎樣更好地分類已知的數(shù)據(jù)是尖,一旦訓(xùn)練完成意系,神經(jīng)網(wǎng)絡(luò)期望將能夠更好地去分類未知的數(shù)據(jù)。

Fisher’sIris?數(shù)據(jù)集是個(gè)分類的例子饺汹,這個(gè)數(shù)據(jù)集包含了Iris花的測量數(shù)據(jù)蛔添,這是一個(gè)最著名的數(shù)據(jù)集,它經(jīng)常用來評估機(jī)器學(xué)習(xí)方法,完整數(shù)據(jù)集可以在以下URL得到:

http://www.heatonresearch.com/wiki/IrisData Set

下面是這個(gè)Iris數(shù)據(jù)集的一小部分例子


上面的數(shù)據(jù)顯示為一個(gè)CSV文件迎瞧,CSV是一種很常見的神經(jīng)網(wǎng)絡(luò)輸入格式夸溶,第一行通常是定義為每個(gè)文件的列,正如你所看見的凶硅,每種花提供了五種信息

? Sepal Length (萼片長度)

? Sepal Width (萼片寬度)

? Petal Length (花瓣長度)

? Petal Width (花瓣寬度)

? Species (種類)

對于分類缝裁,神經(jīng)網(wǎng)絡(luò)要求給萼片和花瓣的長/寬,?神經(jīng)網(wǎng)絡(luò)就能夠識別這個(gè)花所處的物種。

一個(gè)分類屬性通常是一個(gè)非數(shù)字?jǐn)?shù)據(jù)足绅,因此捷绑,類中的成員必須是明確定義的,對于這個(gè)Iris數(shù)據(jù)集编检,這兒有三個(gè)不同的Iris類別胎食,如果一個(gè)神經(jīng)網(wǎng)絡(luò)訓(xùn)練的是這三種Iris類別扰才,那就不能期望它確定識別玫瑰允懂,分類的所有成員必須在訓(xùn)練前已知。

1.2回歸分析

在上一節(jié)衩匣,我們學(xué)習(xí)了怎樣分類數(shù)據(jù)蕾总,通常想要的輸出不是一個(gè)簡單的類,而是一個(gè)數(shù)值琅捏,考慮一下這個(gè)汽車的每加侖英里?(MPG)的計(jì)算生百,提供的數(shù)據(jù),如發(fā)動機(jī)尺寸和汽車重量柄延,這個(gè)汽車也許就能夠計(jì)算出它的MPG蚀浆。

考慮以下五輛汽車數(shù)據(jù)示例:


對于更多的信息,完整的數(shù)據(jù)集可以在這個(gè)網(wǎng)站上找到:

http://www.heatonresearch.com/wiki/MPG_Data_Set

回歸的思想是用車輛的輸入數(shù)據(jù)訓(xùn)練神經(jīng)網(wǎng)絡(luò)搜吧,但是市俊,使用回歸時(shí),網(wǎng)絡(luò)不會生成類滤奈,神經(jīng)網(wǎng)絡(luò)預(yù)計(jì)能提供每加侖汽油的里程數(shù)摆昧。

同樣重要的是要注意,并不是上述文件中的每一個(gè)數(shù)據(jù)都將被使用蜒程,如“汽車名稱”和“原產(chǎn)地”不使用绅你,汽車的名稱與燃油效率無關(guān),因此被排除在外昭躺。同樣忌锯,原產(chǎn)地也不利于這個(gè)方程,原產(chǎn)地是一個(gè)數(shù)值领炫,它指定汽車的地理區(qū)域偶垮。雖然有些地區(qū)確實(shí)注重燃料效率,但這一數(shù)據(jù)范圍太廣,不起作用针史。

1.3聚類

另外一個(gè)常用的分析是聚類晶伦,不像前兩個(gè)分析類型,聚類是一個(gè)典型的無監(jiān)督啄枕,前兩節(jié)中的數(shù)據(jù)集可以應(yīng)用于聚類婚陪,不同的是聚類分析將不要求用戶像在Iris數(shù)據(jù)集的情況下提供物種,或者M(jìn)PG數(shù)據(jù)集提供MPG频祝,聚類算法預(yù)計(jì)將數(shù)據(jù)元素放置到與物種或者M(jìn)PG相對應(yīng)的集群中泌参。

對于聚類,這種機(jī)器學(xué)習(xí)方法簡單地查看數(shù)據(jù)常空,并試圖將這些數(shù)據(jù)放入多個(gè)集群中沽一,預(yù)計(jì)的集群數(shù)量必須提前定義,如果集群數(shù)量變化漓糙,集群機(jī)器學(xué)習(xí)方法將需要再次訓(xùn)練铣缠。

聚類和分類非常相似,它的輸出是一個(gè)集群昆禽,這類似于一個(gè)分類蝗蛙,然而,集群不同于回歸醉鳖,因?yàn)樗惶峁┮粋€(gè)數(shù)字捡硅,所以,如果將聚類與MPG數(shù)據(jù)集一起使用盗棵,那輸出將是一個(gè)汽車可以歸入到其中的某個(gè)集群壮韭,也許每個(gè)集群會指定不同級別的車輛燃料效率,也許聚類會把汽車分為幾組纹因,顯示出一些尚未被注意到的關(guān)系喷屋。

1.4構(gòu)建神經(jīng)網(wǎng)絡(luò)

現(xiàn)在已經(jīng)對神經(jīng)網(wǎng)絡(luò)三個(gè)主要模型問題有了了解,是時(shí)候來考察數(shù)據(jù)是怎樣提供給神經(jīng)網(wǎng)絡(luò)的了辐怕,這節(jié)將重點(diǎn)主要是在怎樣構(gòu)造一個(gè)神經(jīng)網(wǎng)絡(luò)接受數(shù)據(jù)項(xiàng)并提供輸出逼蒙,隨后的章節(jié)將詳細(xì)說明數(shù)據(jù)在提供給神經(jīng)網(wǎng)絡(luò)之前如何標(biāo)準(zhǔn)化數(shù)據(jù)。

神經(jīng)網(wǎng)絡(luò)通常是分層的寄疏,至少有一個(gè)輸入和輸出層是牢,也許還有隱藏層,某些神經(jīng)網(wǎng)絡(luò)類型不會再輸入和輸出層之外分解成任何形式層陕截,然而驳棱,這個(gè)輸入層和輸出層將永遠(yuǎn)存在,也許可能被整合在同一層农曲,我們現(xiàn)在將考察輸入層社搅,輸出層和隱藏層驻债。

1.4.1理解輸入層

輸入層是神經(jīng)網(wǎng)絡(luò)的第一層,和其他層一樣形葬,這一層包括了一個(gè)指定數(shù)字的神經(jīng)元合呐,同一層的神經(jīng)元都含有相似的屬性,通常笙以,對于神經(jīng)網(wǎng)絡(luò)將用于分類淌实,回歸或聚類的每個(gè)屬性,輸入層將有一個(gè)神經(jīng)元與之對應(yīng)猖腕。

考慮之前的示例拆祈,Iris數(shù)據(jù)集有四個(gè)輸入神經(jīng)元,這些神經(jīng)元指定花瓣的寬度和長度倘感,萼片的寬度和長度放坏,MPG數(shù)據(jù)集有更多的輸入神經(jīng)元,輸入神經(jīng)元的數(shù)目并不總是直接對應(yīng)于屬性的數(shù)量老玛,而一些屬性的數(shù)量將需要不止一個(gè)神經(jīng)元編碼淤年,這個(gè)編碼過程,稱為標(biāo)準(zhǔn)化逻炊,將在下一章中介紹互亮。

神經(jīng)元的數(shù)量決定了一層的輸入結(jié)構(gòu),對于每個(gè)輸入神經(jīng)元余素,存儲為一個(gè)double值,例如炊昆,以下的數(shù)組能夠被輸入到包含五個(gè)神經(jīng)元的層:

double[]input = new double[5];

這個(gè)輸入到一個(gè)神經(jīng)網(wǎng)絡(luò)總是為一個(gè)double類型的數(shù)組桨吊,重要的是這個(gè)數(shù)組直接對應(yīng)于輸入層神經(jīng)元的數(shù)目,Encog使用MLData接口定義類來持有這些數(shù)組凤巨,上面的數(shù)組能夠簡單的轉(zhuǎn)換為一個(gè)MLData?對象视乐,代碼如下:

MLDatadata = new BasicMLData(input);

?可提供給encog的數(shù)據(jù),是由MLData接口定義任何“array like”數(shù)據(jù)敢茁,輸入必須總是使用MLData對象傳遞給神經(jīng)網(wǎng)絡(luò)內(nèi)部佑淀,BasicMLData類實(shí)現(xiàn)了MLData接口,然而彰檬,BasicMLData類不僅僅是為Encog提供數(shù)據(jù)的唯一方法伸刃,其他實(shí)現(xiàn)了MLData的也可以為Encog提供數(shù)據(jù)。

?BasicMLData類僅僅提供了一個(gè)基于內(nèi)存的數(shù)據(jù)對于神經(jīng)網(wǎng)絡(luò)逢倍,一旦神經(jīng)網(wǎng)絡(luò)處理輸出捧颅,一個(gè)基于MLData類將從神經(jīng)網(wǎng)絡(luò)輸出層返回,輸出層將在下節(jié)討論较雕。

1.4.2?理解輸出層

?輸出層是神經(jīng)網(wǎng)絡(luò)的最后一層碉哑,這層提供了前面那些層處理完的輸出,輸出層的輸出格式非常類似于輸入層提供的數(shù)據(jù),神經(jīng)網(wǎng)絡(luò)的輸出是一個(gè)double數(shù)組扣典。

?神經(jīng)網(wǎng)絡(luò)輸出一個(gè)基于MLData接口的類妆毕,大多數(shù)構(gòu)建的神經(jīng)網(wǎng)絡(luò)返回的輸出類型是一個(gè)BasicMLData,然而贮尖,未來或者第三方神經(jīng)網(wǎng)絡(luò)也許會返回其他實(shí)現(xiàn)了MLData接口的類型设塔。

??神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)接受輸入(一個(gè)double數(shù)組)?和產(chǎn)生一個(gè)輸出(也是一個(gè)double數(shù)組),對于一個(gè)神經(jīng)網(wǎng)絡(luò)擅長的問題远舅,確定怎樣構(gòu)造輸入數(shù)據(jù)和有意義的輸出是兩個(gè)主要的挑戰(zhàn)闰蛔,神經(jīng)網(wǎng)絡(luò)的正真力量來自其模式識別能力,神經(jīng)網(wǎng)絡(luò)應(yīng)該有能力產(chǎn)生想要的輸出即使已經(jīng)發(fā)生了扭曲图柏。

?回歸神經(jīng)網(wǎng)絡(luò)通常產(chǎn)生一個(gè)輸出神經(jīng)元序六,他提供神經(jīng)網(wǎng)絡(luò)產(chǎn)生的數(shù)值,如果相同的神經(jīng)網(wǎng)絡(luò)預(yù)測到兩個(gè)或兩個(gè)以上給定輸入的數(shù)字蚤吹,那多輸出神經(jīng)元可能存在例诀。

?分類產(chǎn)生一個(gè)或多個(gè)輸出神經(jīng)元,這取決于輸出類怎樣編碼的裁着,在這里有幾個(gè)不同的編碼方式繁涂,將在下一章作詳細(xì)的討論。

?聚類的設(shè)置類似二驰,它的輸出神經(jīng)元確定數(shù)據(jù)屬于哪個(gè)集群扔罪。

1.4.3?隱藏層

?????? 在前面的討論中,神經(jīng)網(wǎng)絡(luò)包含了輸入層和輸出時(shí)桶雀,有時(shí)候矿酵,輸出層和輸入層是相同的,但是大多數(shù)通常是兩個(gè)單獨(dú)的層矗积,此外全肮,在輸入層和輸出層之間也許存在其他的層,這層被稱為隱藏層棘捣,隱藏層在輸入層和輸出層之間插入辜腺,隱藏層也可以承擔(dān)更多復(fù)雜的結(jié)構(gòu)。

?????? 隱藏層唯一的目標(biāo)是讓神經(jīng)網(wǎng)絡(luò)更好的為給定的輸入產(chǎn)生預(yù)期的輸出乍恐,神經(jīng)網(wǎng)絡(luò)編程首先涉及到的是定義輸入層和輸出層神經(jīng)元個(gè)數(shù)评疗,一旦確定了如何將編程問題轉(zhuǎn)換為輸入和輸出神經(jīng)元數(shù),那是時(shí)候來定義隱藏層了禁熏。

?????? 隱藏層是一個(gè)非常大的“黑盒子”壤巷,這個(gè)問題是根據(jù)隱藏層和輸出層的神經(jīng)元數(shù)定義的。神經(jīng)網(wǎng)絡(luò)如何產(chǎn)生正確的輸出部分是通過隱藏層執(zhí)行的瞧毙。一旦定義了輸入和輸出層的結(jié)構(gòu)胧华,就必須定義最佳學(xué)習(xí)的隱藏層結(jié)構(gòu)寄症。

?????? 避免創(chuàng)建一個(gè)太簡單或者是太復(fù)雜的隱藏層結(jié)構(gòu)是一個(gè)挑戰(zhàn),太復(fù)雜的隱藏層結(jié)構(gòu)將要花太多時(shí)間去訓(xùn)練矩动,太簡單的隱藏層結(jié)構(gòu)將學(xué)習(xí)不到這個(gè)問題有巧,一個(gè)好的起點(diǎn)是一個(gè)單一的隱藏層神經(jīng)元數(shù)目等于輸入層的兩倍,在根據(jù)這個(gè)網(wǎng)絡(luò)的性能悲没,隱藏層神經(jīng)元的數(shù)量在適當(dāng)增加或者減少篮迎。

?????? 開發(fā)者經(jīng)常想知道該使用多少層隱藏層,一些研究表明示姿,第二個(gè)隱藏層是很少的任意值甜橱,

Encog是一個(gè)很好的方法執(zhí)行一個(gè)實(shí)驗(yàn)和錯誤搜索最優(yōu)的隱藏層配置,更多的信息栈戳,請查看以下的URL:

http://www.heatonresearch.com/wiki/Hidden_Layers

?????? 有一些神經(jīng)網(wǎng)絡(luò)沒有隱藏層岂傲,輸入層直接連接到輸出層,進(jìn)一步子檀,一些神經(jīng)網(wǎng)絡(luò)僅僅只有一個(gè)單一的層镊掖,那些單一的層是自連的,這些連接允許網(wǎng)絡(luò)學(xué)習(xí)褂痰,包含在這些連接亩进,成為突觸,是一個(gè)個(gè)體權(quán)重矩陣缩歪。

1.5使用一個(gè)神經(jīng)網(wǎng)絡(luò)

這一節(jié)將詳細(xì)地怎樣為一個(gè)簡單的問題構(gòu)造一個(gè)神經(jīng)網(wǎng)絡(luò)归薛,設(shè)計(jì)這樣的一個(gè)神經(jīng)網(wǎng)絡(luò),它能夠模擬一個(gè)XOR運(yùn)算操作驶冒,學(xué)習(xí)XOR運(yùn)算是神經(jīng)網(wǎng)絡(luò)示例中的第一個(gè)例子苟翻,就像大多數(shù)的編程語言的第一個(gè)示例是一個(gè)簡單的“Hello World”顯示程序,神經(jīng)網(wǎng)絡(luò)時(shí)常用這個(gè)XOR運(yùn)算符來做示例骗污,學(xué)習(xí)XOR運(yùn)算符是一個(gè)神經(jīng)網(wǎng)絡(luò)中的”Hello World”程序。

1.5.1??? XOR操作和神經(jīng)網(wǎng)絡(luò)

XOR運(yùn)算是一種常見布爾邏輯運(yùn)算符沈条,其他兩個(gè)是AND和OR運(yùn)算符需忿,對于每個(gè)這些邏輯運(yùn)算符,有四種不同的組合蜡歹,AND所有可能的組合如下顯示:

0AND 0 = 0

1AND 0 = 0

0AND 1 = 0

1AND 1 = 0

這應(yīng)該符合你學(xué)習(xí)的計(jì)算機(jī)編程的操作符屋厘,正如它的名字所暗示的,僅僅當(dāng)兩個(gè)輸入都為true的時(shí)候月而,它的運(yùn)算才返回ture汗洒。

OR運(yùn)算符如下:

0OR 0 = 0

1OR 0 = 1

0OR 1 = 1

1 OR 1 = 1

這也應(yīng)該和你在計(jì)算機(jī)編程里學(xué)習(xí)到的OR運(yùn)算符是一致的,當(dāng)輸入兩個(gè)中的其中之一必須為true, OR運(yùn)算才為true.

“異或”(XOR)運(yùn)算符不太經(jīng)常用于計(jì)算機(jī)編程父款,XOR運(yùn)算符的可能組合如下:

0 XOR 0 = 0

1 XOR 0 = 1

0 XOR 1 = 1

1 XOR 1 = 0

正如你看見的溢谤,XOR運(yùn)算僅僅當(dāng)兩個(gè)輸入都不同時(shí)才返回true, 下一節(jié)說明怎樣為XOR運(yùn)算構(gòu)造輸入瞻凤,輸出和隱藏層。

1.5.2??? 為XOR構(gòu)造一個(gè)神經(jīng)網(wǎng)絡(luò)

這里XOR運(yùn)算符是兩個(gè)輸入和一個(gè)輸出世杀,將構(gòu)造相應(yīng)的輸入和輸出結(jié)構(gòu)阀参,給輸入神經(jīng)元喂以下的double值:


上面顯示的這些值對應(yīng)到輸入XOR運(yùn)算符,輸出神經(jīng)元期望的輸出為以下的double值:


這是一種神經(jīng)網(wǎng)絡(luò)能夠構(gòu)造的而一種方式瞻坝,這是一種允許一個(gè)簡單前饋神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)XOR運(yùn)算符的一種方式蛛壳,前饋神經(jīng)網(wǎng)絡(luò),也稱為感知器所刀,是我們將要學(xué)習(xí)的第一個(gè)神經(jīng)網(wǎng)絡(luò)架構(gòu)衙荐。

在這里還有其他的方式將XOR數(shù)據(jù)傳遞給神經(jīng)網(wǎng)絡(luò),在本書后面浮创,有兩個(gè)循環(huán)神經(jīng)網(wǎng)絡(luò)的示例忧吟,探索包括Elman和jordan樣式神經(jīng)網(wǎng)絡(luò),這些方法將XOR數(shù)據(jù)視為一個(gè)長序列蒸矛,基本上連接一起XOR的真值表瀑罗,結(jié)果為一個(gè)長的XOR序列:例如:


這里的換行符僅僅是為了可閱讀,這種神經(jīng)網(wǎng)絡(luò)視XOR為一個(gè)長序列雏掠,通過使用上面的數(shù)據(jù)斩祭,該神經(jīng)網(wǎng)絡(luò)有一個(gè)單一的輸入神經(jīng)元和一個(gè)單一的輸出神經(jīng)元,輸入神經(jīng)元從上面的列表中得到一個(gè)值乡话,輸出神經(jīng)元期望返回這個(gè)值的下一個(gè)值摧玫。

這表明通常有多種方式為一個(gè)神經(jīng)網(wǎng)絡(luò)提供模型數(shù)據(jù),如何為數(shù)據(jù)建模將大大影響神經(jīng)網(wǎng)絡(luò)的成功绑青,如果一個(gè)特定的模式不工作诬像,那應(yīng)該考慮另外一種,下一步就是為前饋神經(jīng)網(wǎng)絡(luò)標(biāo)準(zhǔn)化XOR數(shù)據(jù)闸婴。

因?yàn)閄OR運(yùn)算符有兩個(gè)輸入和一個(gè)輸出坏挠,所以神經(jīng)網(wǎng)絡(luò)也跟隨這種結(jié)構(gòu),此外邪乍,神經(jīng)網(wǎng)絡(luò)有一個(gè)單一的隱藏層有兩個(gè)神經(jīng)元來幫助處理數(shù)據(jù)降狠,兩個(gè)神經(jīng)元的選擇是任意的,經(jīng)常導(dǎo)致實(shí)驗(yàn)和錯誤庇楞,XOR問題是簡單的榜配,兩個(gè)隱藏層神經(jīng)元足以解決它,這個(gè)網(wǎng)絡(luò)的圖入圖1.1所示:


在上面網(wǎng)絡(luò)圖中有四個(gè)不同的神經(jīng)元吕晌,如下說明:

輸入神經(jīng)元:I1, I2

輸出神經(jīng)元:O1

隱藏神經(jīng)元:H1, H2

偏執(zhí)神經(jīng)元:B1, B2

輸入蛋褥,輸出和隱藏神經(jīng)元在前面已經(jīng)討論了,在這個(gè)圖中看到的新的神經(jīng)元是偏執(zhí)神經(jīng)元睛驳,一個(gè)偏執(zhí)神經(jīng)元總是輸出一個(gè)為1的值和從不接受從前面層的輸入烙心。

簡而言之膜廊,偏執(zhí)神經(jīng)元允許神經(jīng)網(wǎng)絡(luò)更有效的學(xué)習(xí)模式,他們類似隱藏層功能弃理,沒有偏執(zhí)神經(jīng)元溃论,很難對一個(gè)輸入值為0的神經(jīng)網(wǎng)絡(luò)產(chǎn)生輸出,與其說這是XOR數(shù)據(jù)的一個(gè)問題痘昌,但它其他數(shù)據(jù)集也有這個(gè)問題钥勋,更多有關(guān)它功能的詳細(xì)介紹,可以訪問以下URL:

http://www.heatonresearch.com/wiki/Bias

現(xiàn)在看看使用來解決XOR運(yùn)算符的神經(jīng)網(wǎng)絡(luò)代碼辆苔,完整的代碼包含在Encog示例中算灸,位置如下:

Org.encog.examples.neural.xor.XORHelloWorld

示例開始創(chuàng)建一個(gè)神經(jīng)網(wǎng)絡(luò)如下圖1.1.,所需的代碼來創(chuàng)建這個(gè)網(wǎng)絡(luò)是相對簡單的:


在上面的代碼中驻啤,一個(gè)BasicNetwork被創(chuàng)建菲驴,三個(gè)層添加到這個(gè)網(wǎng)絡(luò)中,第一層骑冗,為輸入層赊瞬,有兩個(gè)神經(jīng)元,第二層是隱藏層贼涩,也有兩個(gè)神經(jīng)元巧涧,最后為輸入層,有一個(gè)神經(jīng)元遥倦,最后谤绳,調(diào)用finalizeStructure方法通知網(wǎng)絡(luò)沒有層被添加了,調(diào)用reset隨機(jī)初始化這三個(gè)層之間的連接權(quán)重袒哥。

神經(jīng)網(wǎng)絡(luò)總是以隨機(jī)權(quán)重值開始缩筛。一個(gè)訓(xùn)練過程將這些權(quán)重調(diào)整到提供期望輸出的值。由于神經(jīng)網(wǎng)絡(luò)總是以隨機(jī)值開頭堡称,所以同一程序的兩次運(yùn)行會產(chǎn)生非常不同的結(jié)果瞎抛。一些隨機(jī)權(quán)重提供了比其他更好的起點(diǎn)。有時(shí)隨機(jī)權(quán)重相距太遠(yuǎn)却紧,網(wǎng)絡(luò)將無法學(xué)習(xí)婿失。在這種情況下,權(quán)重應(yīng)該再次隨機(jī)化啄寡,進(jìn)程重新啟動。

你也要注意在上面代碼中ActivationSigmoid類哩照,這指定了神經(jīng)網(wǎng)絡(luò)使用sigmoid激活函數(shù)挺物,激活函數(shù)將在第四章中學(xué)習(xí),僅僅隱藏層和輸出層使用激活函數(shù)飘弧,輸出層沒有激活函數(shù)识藤,如果一個(gè)輸入層指定了激活函數(shù)砚著,它將沒有影響。

每一層都指定了一個(gè)boolean 值痴昧,boolean值指定了在這個(gè)層中是否有偏執(zhí)神經(jīng)元稽穆,輸出層,如圖1.1所示赶撰,相對于輸入層和隱藏層沒有偏執(zhí)神經(jīng)元舌镶,這是因?yàn)橐粋€(gè)偏執(zhí)神經(jīng)元僅僅連接到下一層,輸出層是最后一層豪娜,所以在這里不需要有偏執(zhí)神經(jīng)元餐胀,如果一個(gè)輸出層指定了偏執(zhí)神經(jīng)元,他將不起作用瘤载。

這些權(quán)重構(gòu)成了長期記憶的神經(jīng)網(wǎng)絡(luò)否灾,一些神經(jīng)網(wǎng)絡(luò)也包含了上下文層給神經(jīng)網(wǎng)絡(luò)的短期記憶,神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)通過修改這些權(quán)重值鸣奔,這也是真真的Elman和Jordan神經(jīng)網(wǎng)絡(luò)墨技。

現(xiàn)在這個(gè)神經(jīng)網(wǎng)絡(luò)已經(jīng)被創(chuàng)建,現(xiàn)在應(yīng)該訓(xùn)練它挎狸,訓(xùn)練是一個(gè)隨機(jī)權(quán)重被調(diào)整到接近輸出的過程扣汪,訓(xùn)練將在下一節(jié)討論。

1.5.3??? 訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)

訓(xùn)練這個(gè)神經(jīng)網(wǎng)絡(luò)伟叛,構(gòu)造了一個(gè)MLDataSet對象私痹,這個(gè)對象包括了輸入和預(yù)期的輸出,構(gòu)造這個(gè)對象统刮,有兩個(gè)數(shù)組被創(chuàng)建紊遵,第一個(gè)數(shù)據(jù)是XOR運(yùn)算的輸入,第二個(gè)是預(yù)期的輸出侥蒙,這些將對應(yīng)于XOR的可能值暗膜,回顧一下,四種可能值如下所示:


首先鞭衩,為XOR構(gòu)造一個(gè)四個(gè)輸入值的數(shù)組学搜,使用了一個(gè)兩維的double數(shù)組,如下:


同樣的论衍,也構(gòu)造一個(gè)期望輸出的數(shù)組瑞佩,如下:


即使這里僅僅是一個(gè)輸出值,仍然也需要傳遞一個(gè)二維的數(shù)組坯台,如果有多個(gè)輸出神經(jīng)元炬丸,則像數(shù)組額外添加列。

現(xiàn)在構(gòu)造兩個(gè)輸入數(shù)組蜒蕾,必須創(chuàng)建一個(gè)MLDataSet對象訓(xùn)練集稠炬,這個(gè)對象創(chuàng)建如下:


現(xiàn)在訓(xùn)練集已經(jīng)創(chuàng)建焕阿,神經(jīng)網(wǎng)絡(luò)能夠訓(xùn)練,訓(xùn)練程序調(diào)整神經(jīng)網(wǎng)絡(luò)權(quán)重到最好產(chǎn)生期望輸出首启,訓(xùn)練將繼續(xù)更多次的迭代指導(dǎo)錯誤率低于網(wǎng)絡(luò)可接受的程度暮屡,首先,必須創(chuàng)建一個(gè)訓(xùn)練對象毅桃,Encog支持多種不同類型的訓(xùn)練褒纲。

這個(gè)例子使用彈性傳播訓(xùn)練(RPROP),RPROP也許是encog所支持的最好的訓(xùn)練算法,還提供了其他訓(xùn)練技術(shù)疾嗅,并通過一定的訓(xùn)練技術(shù)較好地解決了某些問題外厂,RPROP訓(xùn)練代碼構(gòu)造如下:


所有的訓(xùn)練類實(shí)現(xiàn)了MLTrain接口,RPROP算法通過ResilientPropagation類實(shí)現(xiàn)代承,構(gòu)造如上汁蝶。

一旦構(gòu)造了訓(xùn)練器,就應(yīng)該訓(xùn)練神經(jīng)網(wǎng)絡(luò)了论悴,訓(xùn)練神經(jīng)網(wǎng)絡(luò)調(diào)用的是MLTrain中的iteration方法掖棉,直到錯誤率低于指定的值為止,誤差是神經(jīng)網(wǎng)絡(luò)輸出與期望輸出匹配的程度:


上面的代碼循環(huán)通過更多次的迭代膀估,因?yàn)橐股窠?jīng)網(wǎng)絡(luò)的錯誤率低于1%幔亥,一旦神經(jīng)網(wǎng)絡(luò)訓(xùn)練結(jié)束,他就真正的使用了察纯,下一節(jié)將介紹怎樣使用一個(gè)神經(jīng)網(wǎng)絡(luò)帕棉。

1.5.4??? 執(zhí)行一個(gè)神經(jīng)網(wǎng)絡(luò)

運(yùn)用神經(jīng)網(wǎng)絡(luò)是調(diào)用BasicNetwork類的compute方法,在這里饼记,我們遍歷每個(gè)訓(xùn)練集值香伴,并顯示神經(jīng)網(wǎng)絡(luò)的輸出:


Compute方法接受一個(gè)MLData類和返回另外的MLData對象,返回對象里包含了從神經(jīng)網(wǎng)絡(luò)的輸出具则,向用戶顯示即纲,運(yùn)行這個(gè)程序,每一次迭代的訓(xùn)練結(jié)果博肋,當(dāng)前的錯誤率首先顯示:


第一次迭代的時(shí)候錯誤率為56%低斋,到了107次的時(shí)候下降到了1%以下,因?yàn)樯窠?jīng)網(wǎng)絡(luò)隨機(jī)初始化權(quán)重匪凡,因此有可能每次運(yùn)行這個(gè)程序迭代訓(xùn)練會得到不同的數(shù)值膊畴,此外,盡管最后錯誤率也許不同病游,他也應(yīng)該總是在1%以下結(jié)束巴比。

最終,程序顯示每個(gè)訓(xùn)練項(xiàng)目的結(jié)果如下:


正如你所看見的,這個(gè)網(wǎng)絡(luò)還沒有被訓(xùn)練給出準(zhǔn)確的結(jié)果轻绞,這是正常的,因?yàn)榫W(wǎng)絡(luò)訓(xùn)練為1%的錯誤率佣耐,所以每個(gè)結(jié)果也將存在一般的1%的預(yù)期值政勃。

因?yàn)樯窠?jīng)網(wǎng)絡(luò)被初始化隨機(jī)值,第二次運(yùn)行這個(gè)程序最終的輸出也將有差異:


第二次運(yùn)行輸出輕微的不同兼砖,這是正常的奸远。

這是第一個(gè)Encog示例,在這本書中所有包含的示例能后下載讽挟,怎樣下載這些示例懒叛,更多的信息參考附錄A “安裝Encog”。

1.6總結(jié)

Encog是一個(gè)先進(jìn)的機(jī)器學(xué)習(xí)框架耽梅,使用來創(chuàng)建神經(jīng)網(wǎng)絡(luò)薛窥,這章重點(diǎn)在回歸,分類和聚類眼姐,最后诅迷,這章也展示了怎樣創(chuàng)建一個(gè)能夠?qū)W習(xí)XOR操作的Encog應(yīng)用程序。

回歸神經(jīng)網(wǎng)絡(luò)接受輸入和產(chǎn)生一個(gè)數(shù)值型輸出众旗,分類神經(jīng)網(wǎng)絡(luò)接受輸入和預(yù)測輸入屬于哪個(gè)類罢杉,聚類不要求期望輸出,當(dāng)然贡歧,聚類的輸入數(shù)據(jù)和集群輸入情況下盡其所能滩租。

Encog支持機(jī)種不同的層類型,然而利朵,這些層分為三組律想,這取決于它們在神經(jīng)網(wǎng)絡(luò)中的位置,取決它們在神經(jīng)網(wǎng)絡(luò)中的位置哗咆,輸入層從外部接受輸入蜘欲,隱藏層從輸入層接受數(shù)據(jù)作進(jìn)一步的處理,輸出層從輸入或者最后一個(gè)隱層得到數(shù)據(jù)晌柬,并輸出到外部世界姥份。

XOR運(yùn)算符是這章中使用的例子,XOR運(yùn)算符時(shí)常使用作為神經(jīng)網(wǎng)絡(luò)的簡單的“Hello World”應(yīng)用程序年碘,XOR運(yùn)算符提供了一個(gè)非常簡單模式澈歉,大多數(shù)神經(jīng)網(wǎng)絡(luò)能夠簡單學(xué)習(xí),他是重要的知道為一個(gè)神經(jīng)網(wǎng)絡(luò)怎樣構(gòu)造數(shù)據(jù)屿衅,神經(jīng)網(wǎng)絡(luò)接受和返回一個(gè)float型數(shù)組埃难。

最后,這章詳細(xì)說明怎樣發(fā)送數(shù)據(jù)到一個(gè)神經(jīng)網(wǎng)絡(luò),XOR數(shù)據(jù)示例很容易提供給一個(gè)神經(jīng)網(wǎng)絡(luò)涡尘,沒有必要標(biāo)準(zhǔn)化或者編碼忍弛,然而,大多數(shù)真實(shí)世界數(shù)據(jù)將需要標(biāo)準(zhǔn)化考抄,標(biāo)準(zhǔn)化將在下一章介紹细疚。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市川梅,隨后出現(xiàn)的幾起案子疯兼,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異萤悴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)姨裸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來香拉,“玉大人啦扬,你說我怎么就攤上這事≠炻担” “怎么了扑毡?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵,是天一觀的道長盛险。 經(jīng)常有香客問我瞄摊,道長,這世上最難降的妖魔是什么苦掘? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任换帜,我火速辦了婚禮,結(jié)果婚禮上鹤啡,老公的妹妹穿的比我還像新娘惯驼。我一直安慰自己,他們只是感情好递瑰,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布祟牲。 她就那樣靜靜地躺著,像睡著了一般抖部。 火紅的嫁衣襯著肌膚如雪说贝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天慎颗,我揣著相機(jī)與錄音乡恕,去河邊找鬼言询。 笑死,一個(gè)胖子當(dāng)著我的面吹牛傲宜,可吹牛的內(nèi)容都是我干的运杭。 我是一名探鬼主播,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼蛋哭,長吁一口氣:“原來是場噩夢啊……” “哼县习!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谆趾,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叛本,沒想到半個(gè)月后沪蓬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡来候,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年跷叉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片营搅。...
    茶點(diǎn)故事閱讀 40,973評論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡云挟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出转质,到底是詐尸還是另有隱情园欣,我是刑警寧澤,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布休蟹,位于F島的核電站沸枯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏赂弓。R本人自食惡果不足惜绑榴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盈魁。 院中可真熱鬧翔怎,春花似錦、人聲如沸杨耙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽按脚。三九已至于毙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辅搬,已是汗流浹背唯沮。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工脖旱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人介蛉。 一個(gè)月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓萌庆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親币旧。 傳聞我的和親對象是個(gè)殘疾皇子践险,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 小弟我英語水平很差,四級沒過而最近要補(bǔ)考四級吹菱,但單純記單詞又記不住還困巍虫,然而最近又想學(xué)習(xí)人工智能,所以就找了個(gè)人工...
    縮短了永恒閱讀 1,623評論 0 1
  • 今天喝水3000毫升第4天啦鳍刷,一天比一天輕松呢 喝水也盡量白天喝的多了些占遥,有意識的提前趕任務(wù)。 沒有第一二天的要喝...
    無媚閱讀 290評論 0 0
  • 杜魯門總統(tǒng)的故事输瓜。 惡運(yùn)氣用完瓦胎,好運(yùn)氣就來了。而我現(xiàn)在覺得所謂的好運(yùn)氣時(shí)間上就是堅(jiān)持到壞運(yùn)氣用完的那一刻尤揣,好運(yùn)氣就...
    真真卒跡閱讀 490評論 0 0
  • 公司具體要怎么經(jīng)營搔啊,寶玉他們誰都沒有一個(gè)真正的經(jīng)驗(yàn)可以用來實(shí)施,在他們心里北戏,只有他們想象中有生意就是有客戶上門來负芋,...
    可可豆子閱讀 517評論 0 1
  • 原諒你,就是放過我自己
    空思我閱讀 185評論 0 1