標籤:output pre 大數 tar mini tle 起源 檢查 嬰兒
轉載:http://www.cnblogs.com/zhijianliutang/p/4050931.html
前言
本篇文章繼續我們的微軟挖掘系列演算法總結,前幾篇文章已經將相關的主要演算法做了詳細的介紹,我為了展示方便,特地的整理了一個目錄提綱篇:大資料時代:深入淺出微軟資料採礦演算法總結連載,有興趣的童鞋可以點擊查閱,在開始Microsoft 神經網路分析演算法之前,本篇我們先將神經網路分析演算法做一個簡單介紹,此演算法由於其本身的複雜性,所以我打算在開始之前先將演算法原理做一個簡單的總結,因為本身該演算法就隸屬於高等數學的研究範疇,我們對演算法的推斷和驗證過程不做研究,只介紹該演算法特點以及應用情境,且個人技術能力有限,不當之處還望勿噴。
演算法起源
在思維學中,人類的大腦的思維分為:邏輯思維、直觀思維、和靈感思維三種基本方式。
而神經網路就是利用其演算法特點來類比人腦思維的第二種方式,它是一個非線性動力學系統,其特點就是資訊分布式儲存和並行協同處理,雖然單個神經元的結構及其簡單,功能有限,但是如果大量的神經元構成的網路系統所能實現的行為確實及其豐富多彩的。其實簡單點講就是利用該演算法來類比人類大腦來進行推理和驗證的。
我們先簡要的分析下人類大腦的工作過程,我小心翼翼的在網上找到了一張勉強看起來舒服的大腦圖片
嗯,看著有那麼點意思了,起碼看起來舒服點,那還是在19世紀末,有一位叫做:Waldege的大牛建立了神經元學活,他說人類複雜的神經系統是由數目繁多的神經元組成,說大腦皮層包括100億個以上的神經元,每立方毫米源數萬個,汗..我想的是典型的大資料。他們相互聯絡形成神經網路,通過感官器官和神經來接受來自身體外的各種資訊(在神經網路演算法中我們稱:訓練)傳遞中樞神經,然後經過對資訊的分析和綜合,再通過運動神經發出控制資訊(比如我在部落格園敲文字),依次來實現機體與外部環境的聯絡。
神經元這玩意跟其它細胞一樣,包括:細胞核、細胞質和細胞核,但是它還有比較特殊的,比如有許多突起,就跟上面的那個圖片一樣,分為:細胞體、軸突和樹突三分部。細胞體內有細胞核,突起的作用是傳遞資訊。樹突的作用是作為引入輸入資訊的突起,而軸突是作為輸出端的突起,但它只有一個。
也就是說一個神經元它有N個輸入(樹突),然後經過資訊加工(細胞核),然後只有一個輸出(軸突)。而神經元之間四通過樹突和另一個神經元的軸突相聯絡,同時進行著資訊傳遞和加工。我去...好複雜....
我們來看看神經網路的原理演算法公式
中間那個圓圓的就是細胞核了,X1、X2、X3....Xn就是樹突了,而Yi就是軸突了....是不是有那麼點意思了,嗯...我們的外界資訊是通過神經元的樹突進行輸入,然後進過細胞核加工之後,經過Yi輸出,然後輸出到其它神經元...
但是這種演算法有著它自身的特點,就好像人類的大腦神經元一樣,當每次收到外界資訊的輸入,不停的刺激的同時會根據資訊的不同發生自身的調節,比如:通過不斷的訓練運動員學會了遠動,不停的訓練學會了騎單車....等等吧這些人類的行為形成,其本質是通過不停的訓練數百億腦神經元形成的。而這些行為的沉澱之後就是正確結果導向。
同樣該演算法也會通過X1、X2、X3....Xn這些元素不停的訓練,進行自身的參數的調整來適應,同樣訓練次數的增加而形成一個正確的結果導向。這時候我們就可以利用它的自身適應過程產生正確的結果,而通過不斷的訓練使其具備學習功能,當然,該演算法只是反映了人腦的若干基本特性,但並非生物系統的逼真描述,只是某種簡單的模仿、簡化和抽象。
該演算法不同數字電腦一樣,會按照程式的一步一步地執行運算,而是能夠自身適應環境、總結規律、完成某種運算、識別或控制過程,而這就是機器人的起源...人工智慧的基礎。
神經網路演算法原理
由於神經網路演算法的設計面太大,我們此處暫且只分析Microsoft神經網路演算法的原理,在Microsoft神經網路演算法中,我們可以簡化成下面這個圖片:
Microsoft神經網路使用的由最多三層神經元組成的“多層感知器”網路,分別為:輸入層、可選隱含層和輸出層。
輸入層:輸入神經元定義資料採礦模型所有的輸入屬性值以及機率。
隱含層:隱藏神經元接受來自輸入神經元的輸入,並向輸出神經元提供輸出。隱藏層是向各種輸入機率分配權重的位置。權重說明某一特定宿儒對於隱藏神經元的相關性或重要性。輸入所分配的權重越大,則輸入值也就越重要。而這個過程可以描述為學習的過程。權重可為負值,表示輸入抑制而不是促進某一特定結果。
輸出層:輸出神經元代表資料採礦模型的可預測屬性值。
資料從輸入經過中間隱含層到輸出,整個過程是一個從前向後的傳播資料和資訊的過程,後面一層節點上的資料值從與它相串連的前面節點傳來,之後把資料加權之後經過一定的函數運算得到新的值,繼續傳播到下一層節點。這個過程就是一個前向傳播過程。
而當節點輸出發生錯誤時,也就是和預期不同,神經網路就要自動“學習”,後一層節點對前一層節點一個“信任”程度(其實改變的就是串連件的權重),採取降低權重的方式來懲罰,如果節點輸出粗粗哦,那就要查看這個錯誤的受那些輸入節點的影響,降低導致出錯的節點串連的權重,懲罰這些節點,同時提高那些做出正確建議節點的串連的權重。對那些受到懲罰的節點而說,也用同樣的方法來懲罰它前面的節點,直到輸入節點而止。這種稱為:回饋。
而我們學習的過程就是重複上面的介紹的流程,通過前向傳播得到輸入值,用回饋法進行學習。當把訓練集中的所有資料運行過一遍之後,則稱為一個訓練周期。訓練後得到神經網路模型,包含了訓練集中相應值和受預測值影響變化的規律。
在每個神經元中的隱含層中都有著複雜的函數,並且這些都非線性函數,並且類似生物學神經網路的基本傳輸特徵,這些函數稱之為:啟用函數,即:輸入值發生細微的變化有時候會產生較大的輸出變化。
當然Microsot神經網路演算法使用的函數是這樣的:
其中a是輸入值,而O是輸出值。
處理反向傳播,計算誤差,更新權值時輸出層所用的誤差函數為交叉熵
上述公式中Oi是輸出神經元i的輸出,而Ti是基於訓練範例的該輸出神經元實際值。
隱含神經元的誤差是基於下一層的神經元的誤差和相關權值來計算的。公式為:
其中Oi是輸出神經元i的輸出,該單元有j個到下一層的輸出。Erri是神經元i的誤差,Wij是這兩個神經元之間的權值。
一旦計算出每個神經元的誤差,則下一步是使用以下方法來調整網路中的權值。
其中l為0-1範圍內的數,稱之為學習函數。
其實以上函數應用的啟用函數還是挺簡單的。有興趣的可以進行詳細的研究和公式的推算,咱這裡只是簡要分析,列舉演算法特點。
Microsoft神經網路分析演算法特點
經過上面的原理分析,我們知道了神經網路演算法分為了:輸入層、隱含層、輸出層三層方式串連,其中隱含層是可選的,也就是說在Microsoft神經網路演算法中如果不經過隱含層,則輸入將會直接從輸入層中的節點傳遞到輸出層中的節點。
輸入層特點:如果輸入層如果為離散值,那麼輸入神經元通常代表輸入屬性的單個狀態。如果輸入資料包含Null值,則缺失的值也包括在內。具有兩個以上狀態的離散輸入屬性值會產生一個輸入神經元,如果存在NUll值,會自動再重新的產生一個輸入的神經元,用以處理Null值,一個連續的輸入屬性將產生兩個輸入神經元:一個用於缺失的狀態、一個用以連續屬性自身的值。輸入神經元可向一個多多個神經元提供輸入。
隱含層特點:隱含神經元接受來自輸入神經元的輸入,並向輸出神經元提供輸出。存在啟用函數供其使用改變閥值。
輸出層特點:輸出神經如果對於離散輸入屬性,輸出神經元通常代表可預測可預測屬性的單個預測狀態,其中包括缺失的Null值。
如果採礦模型包含一個或多個僅用於預測的屬性,演算法將建立一個代表所有這些屬性的單一網路,如果採礦模型包含一個或多個同時用於輸入和預測的屬性,則該演算法提供者將為其中每個屬性構建一個網路。
對於具有離散值的輸入屬性和可預測屬性,每個輸入或輸出神經元各自表示單個狀態。對於具有連續值的輸入屬性和可預測屬性,每個輸入或輸出神經元分別表示該屬性值的範圍和分布。
演算法提供者通過接受之前保留的定性資料集也就是案例集合并將鑑效組資料中的每個案例的實際已知值與網路的預測進行比較。即通過一個“批學習”的過程來迭代計算的整個網路,並且改變的輸入權重。該演算法處理了整個案例集合之後,將檢查每個神經元的預測值和實際值。該演算法將計算錯誤程度(如果錯誤),並且調整與神經輸入關聯的權重,並通過一個“回傳”的過程從輸出神經元返回到輸出神經元。然後,該演算法對整個案例集合重複該過程。經過以上的層層沉澱我們的演算法就算從一個不懂的“嬰兒”逐漸成長成“成人”,而這個結果就是我們那它來發掘和預測的工具。
神經網路分析演算法應用情境
神經網路研究內容廣泛,非本篇文章所能涵蓋,而且它反映了多學科交叉技術領域的特點。研究工作集中以下領域:
(1)生物原型研究。從生理學、心理學、腦科學、病理學等生物科學方面研究神經細胞、神經網路、神經系統的生物原型結構及其功能機理。
(2)建立理論模型。根據生物原型的研究,建立神經元、神經網路的理論模型。其中包括概念性模型、知識模型、物理化學模型、數學模型等。(3)網路模型與演算法研究。在理論模型研究的基礎上構作具體的神經網路模型,以實現電腦類比或準備製作硬體,包括網路學習演算法的研究。這方面的工作也稱為技術模型研究。(4)人工神經網路應用系統。在網路模型與演算法研究的基礎上,利用人工神經網路組成實際的應用系統,例如,完成某種訊號處理或模式識別的功能、構造專家系統、製成機器人等等。
我去....這那是我這個碼農層面研究的事,上面說的種種如果有興趣童鞋可以繼續深入研究,隨便一塊玩好了都可以陞官加祿,衣食無憂......
迴歸正題,我們還是來看看我們的Microsoft 神經網路分析演算法在資料採礦領域的應用那些:
其實它的應用情境是最廣泛的,比如當我們拿到一堆資料的時候,針對一個目標無從下手毫無頭緒的時候,Microsoft 神經網路分析演算法就是該應用的最佳情境了,因為其利用“人腦”的特點去茫茫的資料海洋中去發掘有用的資訊。比如:BOSS把公司的資料庫扔給你了...讓你分析下公司為啥不掙錢...或者說啥子原因導致的不盈利...這時候該演算法就應該出場了。
不過從最近的市場中發現,該演算法的在"文本挖掘"中特別火,而且更在微軟中得到充分利用,比如當前的:微軟小冰,各種平台下的語音辨識,並且就連蘋果這樣的孤傲的公司也在慢慢的臣服於該演算法的魅力下,有興趣可以查看本篇文章:http://www.yeeworld.com/article/info/aid/4039.html
大資料時代:基於微軟案例資料庫資料採礦知識點總結(Microsoft 神經網路分析演算法原理篇)