第十章 類神經網路
類神經網路 人們總是習於概括化自身的經驗,相反的,電腦則精於依循精確的指令來重複操作。類神經網路的訴求則在於:藉由在電腦上模擬人類的神經連結來填補該二者的空隙。當被定義明確時,類神經網路概括化以及從資料中學習的能力,就如人類從經驗中學習的能力一般。
類神經網路廣為利用原因 電腦已經普及,可用來做複雜運算, 特別是資料己經相當齊全的商業。 因為類神經網路與己知的統計方法 在1980年代越來越被廣為利用。 電腦已經普及,可用來做複雜運算, 特別是資料己經相當齊全的商業。 因為類神經網路與己知的統計方法 有極為密切的相關,分析家也因此 更樂於使用。 大部分開始可以運用在實務上。
不動產評估 房價鑑定者或是不動產經理人,都是在界定明確的領域中專家的代表。由一些特定特徵所描述的房子,經由專家們的考量而產生其評估值。在西元1992年,IBM的研究人員發現這是一個適合給類神經網路處理的問題。下圖解釋了這個理由。類神經網路接受特定的輸入,在這個例子中是房子的一些資訊,並且產生出特定的結果 - 房子評估結果。
不動產評估
不動產評估 在使用類神經網路來做預測的第一個步驟是我們必須要用以往的銷售資料來訓練類神經網路。用來訓練的例子必須要再加入另外兩個項目 - 房子的銷售價與賣出的時間。下表列出了一個用來訓練的例子。
不動產評估
不動產評估 由於類神經網路輸入與輸出的值0與1之間的時候表現的最好。因此我們要將所有的值,不管是連續的還是限定在特定的範圍,轉換到0與1之間的新數值。為了要轉換連續的數值,我們減去這些值範圍中的最小值,並且將減掉後的結果除以這個數值的全距。 舉例子來說,要得到建造年份(1923)的調整值,我們將1923減掉1850(最古老的房子所建造的年份)而得到73。再除以年份的範圍大小(1986-1850+1=137)而得到標準化的值為0.5328。
不動產評估 對暖氣規格,我們可以任意指定B所調整後的值為1 ,而A調整後的值為0。如果我們有三個我們可以將他們指定為0,0.5,1的值。
不動產評估
不動產評估 在訓練的階段,我們不斷的用訓練組合中的例子餵給類神經網路。類神經網路會藉由比較預測出來的值與實際的價錢去調整內部的權值比重以改進預測結果準確性。當權值比重不再改變或是已經達到了預設的訓練次數後,就是訓練完成的時候。
不動產評估 在實際運用上,我們會以一個從未試過的例子來給類神經網路作為測試,以確定類神經網路已經從訓練中學會去找到一個最適合模式。當對這個測試例子的表現感到滿意後,我們就有了一個類神經網路的模型。
不動產評估 由於輸出的數字是介於0與1之間的,我們必須將它還原實際的銷售價。如果得到的是0.75,我們要把它乘上數值範圍的大小($147,000)並加上這個範圍的底數($103,000)而得到一個為$213,250的估計值。
不動產評估 先前的例子說明了最常使用類神經網路的情況 - 建立一個用分類或是預測的模型。這個步驟的過程如下: 釐清輸入和輸出項目 將輸入和輸出項目調整到零與壹之間 適當建立網路位向 由具有代表性可用來訓練的例子練訓網路
不動產評估 測試型。如果有必要,重複的訓練網路, 調整訓練的例子組合,網路位向,以及參 數。使用評估資料組合來測試網路的表現 情況。 使用嚴格獨立於訓練資料的範例來做網路 測試型。如果有必要,重複的訓練網路, 調整訓練的例子組合,網路位向,以及參 數。使用評估資料組合來測試網路的表現 情況。 將網路產生的模型使用在預測未知輸入的 情況下。
什麼是類神經網路 類神經網路由模擬神經元的基本單位組成。每一個基本單位互相連結,如下圖,所以一些單位的輸出是另一些單元的輸入。所有在下圖的例子都是前項餵入的類神經網路,也是整個網路從輸入到輸出是單一流向且沒有迴路。
什麼是類神經網路
什麼是類神經網路 前向式的網路最簡單也最有用的網路類型。有三個基本的問題可以用來討論: 1. 他們的單元是什麼,單元的行為又是 什麼?什麼是活化函數 (activation function) 2. 單元是如何相互連接的?也就是,網 路的位向是什麼? 3. 網路是如何學習辦認各種模式的?也 就是,什麼是倒傳導?
類神經網路的單元 類神經網由設計來模擬生物神經元行為的基本單位所組(下圖)。這些單元組合了它的多個輸入而產生單一的輸出值。這個組合的過程就叫做單元的活化函數。最常用的活化函數奠基在生物學模型上。輸出值在輸入值超過到一個臨界值前都維持在很小。而當輸入值達到臨界值時,神經單元就會被活化而使輸出值變高。
類神經網路的單元
類神經網路的單元 一個活化函數可以分成兩部分。第一個部分,組合函數 (Combination Function) 結合所有的輸入變成一個單一值。如同上圖所示,每一個進入單元的輸入都有他自己的權重值最常見到的組合函數便是權重和,也就是每個輸入乘上它的權重值後再相加在一起。有時候其他的組函數,包括了權重輸入的最大值,或是這些值的AND及OR值,也是很有用的。
類神經網路的單元 活化函數的第二個部分就是轉換函數,這名字來自它轉換合函數輸出至單元的輸出。下圖比較了三個典型的轉換函數,S形(Sigmoid),線性(Linear),雙曲線正切(Hyperbolic tangent)函數。
類神經網路的單元
類神經網路的單元 一個只包含線性輚換函數的前項餵入類神經網路的轉換函數實際上就是在做線性迴歸(Linear Regression)- 也就是統計學家所說的最接近曲線。S形函數和雙曲線正切函數則是非線性函數,呈現非線性的行為。他們間的最大不同在於輸出的範圍,S形函數的輸出是在0與1之間,而雙曲線正切函數在-1與1之間。
類神經網路的單元 S形函數與輸入值的範圍: 對所有可能的總和函數值,S形函數提供了介於0與1之間的值。S形函數的公式如下:
類神經網路的單元 最常用的轉換函數是S形的S函數。縱使它不是線性的,對統計學家而言,它的特性卻相當迷人。當所輸的權重都很小的時候,結合函數的結果也很小,設在-1與1之間。在這個範圍,S形函數幾乎是線性使得整個類神經網路呈現幾乎是線性的特徵。當權重愈來愈大時,S形函數會漸趨向飽和值,0與1。這樣的特性反映了從線性模型到非線性模型漸進的變化。因此,類神經網路對三種類型的問有很好的預測結果,線性問題,類線性問題,與非線性問題。
前向式類神經網路 下圖顯示了一個前向式類神經網路如何從入計算出輸出。它的位向,也就是它的結構是用來預測和分類的網路典型。其中的單元被分成三層。最左邊的一層連接到輸入,而輸入的值已經被調整到0與1之間。這些單元我們稱為網路的輸入層(Input Layer)
前向式類神經網路
前向式類神經網路 接下來一個層叫做隱藏層(Hidden Layer),因為它即不是連到輸入也不是連到輸出。在這個層的每一個單位都是完整的與輸入層的單元所連接。即然這個網路含有標準單元,他們經由把相關的輸入與權重相乘再加總,在經過S形函數而得到輸出。意味著整個類神經網所能理解的型態容量就越多。不過,因為類神經網路會藉由記憶訓練資料來理解每個型態,容量越大也會帶來缺點。
前向式類神經網路 注意上圖的單元,在上面都有一個額外的輸入。這是一個值為1的常數輸入。如同其它的輸入,這個1也有它的權重,並且也包括在組合函數之內。這個常數輸入提供了整體的補償值(Offset),使得網路更能去理解各種型態。在訓練階段中,調整這個常數輸入的權重就跟調整其他輸入權重一樣。
前向式類神經網路 右邊的最後一個單元是輸出層,連結到網路的輸出。它完整的連接到隱藏層的所有單元。大部分的時候,類神經網路被用來算一個單一值,在此情形,輸出層中只有一個輸出值在0與1之間的單位。我們必須要反調整(unmassage)這輸出值以便了解。在圖13.6中,我們必須將0.49815轉回到103,000與250,000範圍間的值。得到的是176,228,已經相當的接近真實值171,000了。
前向式類神經網路 有時候輸出層會不只一個。舉例來說,百貨公司連鎖店想要預測顧客在不同部門如淑女服飾,家俱,和育樂部門購買的產品的可能性。以此資訊可以用來設計銷售和郵寄目標的計畫。為了完成這個預測,他們建立了如下圖的網路。這個網路有三個輸出,各對應到一個部門。輸出則根據輸入對顧客的描述,顯示了他們下次到相關部門購買的偏好。
前向式類神經網路
前向式類神經網路 在輸入一個顧客的資料後,類神經網路會計算出三個值。由這些輸出,百貨公司要如何去對這些顧客進行促銷呢?一些常用的方法如下: ●選擇擁有輸出值最大的部門 ●選擇擁有前三高輸出值的部門 ●選擇超出一些臨界值的所有的部門 ●選擇在最高輸出一定比率的所有部門 這些所有的方法都不錯,在不同的情況各有其優缺點。沒有一個絕對的答案說哪一個最正確。在使用上,你可以在測試組上試幾種的可能去找到最符合情況的。
類神經網路如何利用倒傳導(Backpropagation)學習 訓練類神經網路就是在為輸入設定最好權重的過程。訓練的目標在使得產生的權重可以使其輸出值盡可能的接近在訓練資料中的各種例子。到目前為止最常用的就是由約翰.霍普菲德(John Hopfield)所發展出的倒傳導。它的精髓有三個步驟: 1.網路得到訓練的例子,使用現在的權重去計算出 輸出的結果 2.倒傳導便藉由計算出的值與實際值計算輸出值的 誤差 3.誤差經由回授回到網路,使得權重調整以得到最 小的誤差 。
使用基因演算法訓練 使用基因演算法的第一個步驟就是定義染色體,如下圖所有的在網路的權重被聚集在矩陣裡形成一個染色體。接下來的步驟是染色體決定最適配函數(Fitness Function)。我們可以由特定的訓練資料求出染色體,並得到誤差(誤差定義為計算值與實際值相差的絕對值或是平方)。即然目的是要在訓練資料中減少誤差,我們在完整的訓練資料使用染色體來評估整個網路,並在過程中加入所有的誤差。適配函數便是在所有訓練資料中的誤差和。基因演算法便可以利用選擇,雜交,以及突變來減小適配函數。
使用基因演算法訓練
選擇訓練資料 選擇好的訓練資料有幾個需要的考量的: 涵蓋有特性的值 變數的數量 輸入的數量 輸出的數量 有效的計算能力
準備資料 ● 連續值(小數與整數)的變項 ●簡單的將他們調整到0與1之間 ●使用更大的範圍 ●拒絕掉超出範圍的值 ●將最小值轉到0.1,最大值轉到0.9,而 非轉到0與1 ●下圖表示了有時連續數值的變項所引起 的問題 - 數值的偏移
準備資料 較好的分法是: $10,000 - $17,999 very low $18,000 - $31,999 low $32,000 - $63,999 middle $64,000 - $99,999 high $1,000,000 and above very high
準備資料 另一方法是經由轉換的方法來增進分佈,一個常用來做轉換很棒方法是對數函數(Logarithm)。對底為10 的數,對數值就是它的指數。所以,10的log是1,而100是2,1000是3等等。使用對數可以將收入輚換到4與6間。下圖比較了使用對數與先前的數值。我們可以看到,對數在展開我們有興趣的數值處理得非常好。
準備資料 log
準備資料 ●像連續的變項一樣,也有著最 大最小值 法也是非常好用的。這種方法 我們叫做溫度計碼(Thermometer ● 有順序,離散(整數)的變項 ●像連續的變項一樣,也有著最 大最小值 ●還有個處理離散,次序值的方 法也是非常好用的。這種方法 我們叫做溫度計碼(Thermometer Code)
準備資料 0 → 10,000 1 / 2 = 0. 5000 1 → 11000 3 / 4 = 0. 7500 2 → 11100 7 / 8 = 0. 8750 3 → 11110 15/16 = 0. 9375 從一端算起的差值比起另一端起的差值來得不顯著時,如學習成績,債券等級等,溫度計碼相當好用。譬如說,D與F的差別,就跟A與B的差別不相同。使用溫度計碼,我們就可以將 A, B , C , D , F 的等級分別以0. 9375 , 0. 8750 , 0. 7500 , 0. 5000和0. 000來代替。
準備資料 ●有兩個根本就不同的方法來 處理類別變項。第一個是把這 些變項當作是離散,有次序的 值來處理,就用我們在前一節 ● 有類別值的變項 ●有兩個根本就不同的方法來 處理類別變項。第一個是把這 些變項當作是離散,有次序的 值來處理,就用我們在前一節 所討論的方法來處理。
準備資料 但是不幸的,網路並沒有辦法去知道這個變項的值是不含次序的。所以,如果我們試著把婚姻狀況,單身,離婚,結婚,寡居,未知,分別對應到0.00,0.25,0.5,0.75及1。站在網路的觀點來看,單身跟未知是非常遙遠不同的,而離婚跟結緍卻不是。
準備資料 第二項處理項目類別的方法是將類別打破變成一個或多個值的旗標(FLAG)。假設性別有三個值(男,女,未知) 。如果我們可以將他們打破成指定為0與1的旗標,這有一個N個1編碼(1 of N coding)例子。在這有三種等效的編碼方式可以用來表示性別的三種值(男,女,未知)N個1編碼,將性別的男,未知,女分別對應到 (1,0,0), (0,1,0), (0,0,1)。
準備資料 ● 其他類別 ●日期 ●地址或是任何文字,也是一樣 的複雜
解讀結果 反轉換得使用連續值的類神經網路相當便於使用。另外一方面來說,如果網路所要預測的是二位元的或是類的值,譬如一個顧客該不該被列入郵寄名單或是一個股該不該賣,這時因為網路產生的是連續值,解讀結果變的困難的多。理想上,網路的輸出值也是產生在0與0. 1的低值與0.9或1的高值。但是不幸的是,在很多情況下,網路總是會產生居中的值而使得解讀困難,我們該怎麼辦呢?
解讀結果 天真的想法是將比0. 5小的都歸一個值,比0. 5大的又歸另一個值(剛剛好0. 5得則可歸於任一邊)。這樣處理相當簡單也便於理解,但卻不是最好的解決方法。另外一個方法是分成三個區段,比0. 33小歸在一類,比0 . 67大歸在一類,其餘的就叫做未知。
解讀結果 下圖顯示了在測試資料上使用類神經網路所得到的一些典型的結果。在這個情況下,網路將所有資料分成兩類。大部份的A類聚集在低的一端;而B類聚集在高的一端。然而,還是有些例外。從資料中,任何小於0.62的應該會在A類,而任何大於0.64的則在B類,並且決定切斷點0.63為右側切斷。在這個例子中,我們可以發現如果使用0.5當切斷點會失掉很多重要的,結果稍微高過0.5的A。
解讀結果
解讀結果 另外一個處理二進位值的方法是使用兩個輸出的網路,一個給A類,一個給B類。對在A類的訓練資料中的成員,網路應該要被訓練到A類偵測器為1,而B類偵測器為0。對在B類的訓練資料中的成員,網路應該要被訓練到B類偵測器為1,而A類偵測器為0。我們可以解讀結果這些值是可信任的等級。所以,如果輸出是0.8跟0.2 ,我們可以說這個例子有80%的機率會是A,而有20%會是B。
用在時間序列的類神經網路 類神經網路可以輕易地被採用來作時間序列的分析。下圖就顯示如何去做。網路是藉由在時間序列的資料最古老的資料開始來訓練的。接著就使用第二古老的資料,而最古老的資料輸入層的下一個集合,就這樣一直繼續下去。這個網路訓練的每一個步驟就像是一個前向式且倒傳導的網路試著去預測值一樣。
用在時間序列的類神經網路
用在時間序列的類神經網路 事實上,只要更改輸入的資料,一個標準的前向式,倒傳導網路也可以跟時間延遲的類經網路有相同的效果。如果我們有以下表的時間序列,有十個資料,而我們所感興趣的是星期幾以及收盤價。為了要造出一個有三個時間延遲的時間序列,我們可以給舊的值新的項目。避免累贅,我們沒有必要將星期幾的資料重複三次。結果就在下表中。那些資料現在可以被輸入前向式,倒傳導網路而不需要特去對時間序列支援。
用在時間序列的類神經網路
給使用前向式倒傳導網路的導引 最大的決定大概就是在隱藏層中單元的數目 了。越多的單元,網路就能夠辦認更多的類 型。當然,這也會有缺點。網路可能因此會 記憶住所有的訓練資料,而非是從中找到一 個通則。那隱藏層到底要多大才好呢?有個 簡單的通則是,隱藏層絕對不要大過輸入層 的兩倍以上。最好的開始點是設隱藏層與輸 入層一樣的大小。如果網路出現過度訓練的 狀態,就減少隱藏層的大小。而相反的,如 果結果不夠正確,就增加它的大小。
給使用前向式倒傳導網路的導引 另一個要考慮的是訓練資料的大小。訓練資 料必須要大到可以涵蓋所有項目的所有輸入 才行。此外,你必須要對每一個權重準備數 個訓練資料。對一個有s個輸入,h個隱藏層, 1個輸出的網路,其裡面會有n *( s +1)+ h +1 個權重。舉例來說,如果有15個輸入單元, 10個在隱藏層的單元,則會有161權重在網 路中。對每一個權重,你需要準備5到10個 訓練資料,所以,在訓練資料中至少要805 個例子。
如何知道網路內部在進行什麼 靈敏度分析( Sensitivity Analysis)的秘 訣可以用來了解這不透明的模型是如 何運作的。靈敏度分析並沒有提供明 確的法則,但是它的確可以指出輸入 對網路結果的相對重要性。靈敏度分 析使用測試資料來找出網的輸出對每 一個輸入的靈敏度。下面就是基本的 步驟:
如何知道網路內部在進行什麼 找出每個輸入值的平均值。因為值在測試 資料中的分佈並不是均勻的,一般來說平 均值不會恰好是0. 5 。我們可以把這平均值 當作是測試資料的中心。 當所有的輸入都使用其平均值時,測量網 路的輸出。 一次改變一個輸入,改變其值到最大及最 小值(通常分別是1和0),並觀察網路的 輸出值。
如何知道網路內部在進行什麼 某些輸入,網路的輸出不會對三個值(最 小值,平均值,最大值)偏移太多。這表 示網路對這些輸入並不靈敏。但是有些輸 入則對網路的輸出有很大的影響。這表示 網路對這些輸是較敏銳的。藉由測量輸出 的改變量,我們可以測出對每一個輸入的 靈敏度。對所有的輸入都做這樣的測量, 就可以建立一個對每一個項目相對重要性 的結果。
如何知道網路內部在進行什麼 我們可以藉由同時一次更改兩個或三 個項目,去看是否這些項目的組合特 別的重要。 有時候,在測試資料中,從一個點開 始會比從中心點開始來的好。
用類神經網路於非監督資料採礦 在下圖所展示自我組織圖的例子,是一個 能夠在資料中辦認未知類型的類神經網路。 自我組織的輸出不只有一個點,而有很多 的單元。每一個在輸出層的單元都連結到 所有輸入層的單元。輸出層被排列如同棋 盤上方格般的格子。雖然這個層中,每一 個單元並沒有直接彼此連結,但我們後面 討論,這樣格子式的結構對訓練自我組織 圖上扮演很重要的角色。
用類神經網路於非監督資料採礦
用類神經網路於非監督資料採礦 自我組織圖是如何辦認各種類別的呢?想像你在 一個嘉年華會的攤位上,往佈滿小洞的牆上丟球, 只要把球丟進任一個洞內,你就有機會獲得獎品。 訓練自我組織圖就像被蒙著眼睛在攤位前,且牆 上根本沒有半個洞,這個與在大量的資料中要辦 別認類別而不知如何開始是類似的。每一次你丟 球時,就會在牆上造成一個凹孔,當足夠次數的 球落在同一個附近,原本的凹陷就會變成穿過牆 的小洞。現在,又落在一樣位置的球變得會穿過 這個洞。對自我組織而言,這是一個可辦認的資 料群集。
用類神經網路於非監督資料採礦 上圖顯示了簡單的自我組織圖是如何運作的。 當把訓練資料中的一個樣本丟到網路中時, 這個值往前穿過整個網路到達輸出層。輸 出層的單元會互相比較而擁有最高值者獲 勝。它所得到的獎賞是得以調整權重值, 以增進對輸入的反應。這個就像在網路中製 造小坑洞一樣。還有訓練網路的其他觀點。 不是只是獲勝的單位得以調整權值,在它 附近的也可以調整權值以增加對輸入的反 應。
例子研究:尋找群集 一家大銀行有興趣在增加它所售出房屋貸款的數量。要決定增加市場佔有率的最好策略,銀行必須去了解現在擁有房貸的人。找到5,000個有房屋貸款的顧客,以及5,000個沒有房屋貸款的顧客。
例子研究:尋找群集 這些蒐集的資料有以下的項目: ●房子的評估值 ●剩餘的信用額度 ●所被認可的信用額度 ●年齡 ●婚絪狀況 ●小孩的數量 這些蒐集的資料有以下的項目: ●房子的評估值 ●剩餘的信用額度 ●所被認可的信用額度 ●年齡 ●婚絪狀況 ●小孩的數量 ●家庭收入
例子研究:尋找群集 輸入值都被調整成0到1的數字,並用來訓練網路。網路分辦出在資料中的五個群集,但並沒有給這五個群集任何的資料。我們所要做的是決定在每個群集中最為平均的成員,也就是群集中的每個項目的平均值。如果群集中有一半是男性,一半是女性,並且將男性對應到0.0,而女性對應到1.0。則這個群集中對這個項目的平均成員值就是0.5。在其它的群集中,也許每九個女性才只有一個男性。在這樣的群集中,平均成的就為0.9。
例子研究:尋找群集 這些平均值可以一起被畫成如下圖,這個圖顯示了在銀行例子中的五個群集的中心。我們可以發現是哪幾個特點定義了各個群集。在這個例子中,銀行可以注意到,當已緍40多歳有小孩的顧客是特別值得注意的群集。再進一步的調查顯示了這些顧客也有十幾歳的子孩。這些人想要用這些房屋貸款來負擔大學教育的學費。這部門就設計針對這樣市場的行銷計劃,利用房貸來支付大學教育的方案。
例子研究:尋找群集 但銀行從這個活動的反應得到失望的結果。這個行銷計畫並未成功。銀行將問題回到辦認顧客上,這次包括了更多的資訊,存款系統,信用卡系統等等。在這個群集的客除了有自己帳戶也想有商業帳戶的傾向。這就提供了一個新的思考方向。當孩子離開家唸大學時,家長就有新的機會,可以利用他們的房子的淨值,來從事新的商業活動。有了這樣的觀點,銀行就可以瞄準那些處於空巢期家長準備要開始新事業上,去擬定行銷計畫。這計畫成功了,也看到房子貸款部門表現變好。
例子研究:尋找群集
類神經網路的優點 ●可以處理的問題很廣 ●縱使在很複雜的領域,還是可以得 到很好的結果 ●能夠處理類別變數或是連續的變數 ●應用在很多的套裝軟體中
類神經網路的缺點 ●輸入需要在0與1之間 ●無法解釋產生的結果 ●可能會過早地產生一個較差的結果