?? readme.txt
字號:
人工神經網絡實驗系統(BP網絡) V1.0 Beta
零.說在前面的一番話
大家好,這個程序是我自己做的,為了學習的方便和用于研究目的。
其運用了人工神經網絡中的前向網終的BP網絡的理論,還結合了Hebb學
習規則,使其具有一定的學習、自適應和分辯能力。
本來,只做了個感知器的模型,后將多個感知器用BP網絡連結,
做成一個"人工大腦"。對這個"大腦"的操作,有兩種,一種是學習功能,
一種是處理功能。但在神經網絡"學習"過程中要輸入很多的樣本來測試數
據。為了方便,我為這個神經網絡做了套指令系統。也就是說,將要學習
的樣本數據做成"指令",把神經網絡當作"CPU"讓它來處理,就方便了許多。
當然,這些學習樣本還可以存成文件的,以便以后再研究時用。
現在,我把這個程序拿出來和大家分享,大家可以任意"訓練"這個
"人工大腦",說不定有奇跡發生哦!
一.一些基本常識和原理
[什么叫神經網絡?]
人的思維有邏輯性和直觀性兩種不同的基本方式。邏輯性的思維是
指根據邏輯規則進行推理的過程;它先將信息化成概念,并用符號表
示,然后,根據符號運算按串行模式進行邏輯推理;這一過程可以寫成
串行的指令,讓計算機執行。然而,直觀性的思維是將分布式存儲的
信息綜合起來,結果是忽然間產生想法或解決問題的辦法。這種思維
方式的根本之點在于以下兩點:1.信息是通過神經元上的興奮模式分布
儲在網絡上;2.信息處理是通過神經元之間同時相互作用的動態過程
來完成的。
人工神經網絡就是模擬人思維的第二種方式。這是一個非線性動力
學系統,其特色在于信息的分布式存儲和并行協同處理。雖然單個神經
元的結構極其簡單,功能有限,但大量神經元構成的網絡系統所能實現
的行為卻是極其豐富多彩的。
[人工神經網絡的工作原理]
人工神經網絡首先要以一定的學習準則進行學習,然后才能工作。現以
人工神經網絡對手寫“A”、“B”兩個字母的識別為例進行說明,規定
當“A”輸入網絡時,應該輸出“1”,而當輸入為“B”時,輸出為“0”。
所以網絡學習的準則應該是:如果網絡作出錯誤的的判決,則通過網絡
的學習,應使得網絡減少下次犯同樣錯誤的可能性。首先,給網絡的各
連接權值賦予(0,1)區間內的隨機值,將“A”所對應的圖象模式輸入給
網絡,網絡將輸入模式加權求和、與門限比較、再進行非線性運算,得到
網絡的輸出。在此情況下,網絡輸出為“1”和“0”的概率各為50%,也
就是說是完全隨機的。這時如果輸出為“1”(結果正確),則使連接權值
增大,以便使網絡再次遇到“A”模式輸入時,仍然能作出正確的判斷。
如果輸出為“0”(即結果錯誤),則把網絡連接權值朝著減小綜合輸入加
權值的方向調整,其目的在于使網絡下次再遇到“A”模式輸入時,減小
犯同樣錯誤的可能性。如此操作調整,當給網絡輪番輸入若干個手寫字
母“A”、“B”后,經過網絡按以上學習方法進行若干次學習后,網絡
判斷的正確率將大大提高。這說明網絡對這兩個模式的學習已經獲得了
成功,它已將這兩個模式分布地記憶在網絡的各個連接權值上。當網絡
再次遇到其中任何一個模式時,能夠作出迅速、準確的判斷和識別。一
般說來,網絡中所含的神經元個數越多,則它能記憶、識別的模式也就
越多。
=================
二.指令系統的使用
=================
本"人工神經網絡"共有13個神經元構成,4個為輸入神經元,1個為輸
出神經元。也就是說,這個程序最多能處理一個四元關系(包含了二元,
三元)。
指令簡表
==========================
cls 清屏
clearbp 清空"大腦",也就是說讓它回到初始狀態。
因為一般"學習"和"處理"后往往會產生"慣性思維"
的哦。呵呵,和人腦很像的。
clearcom 清空所有指令(學習/處理 指令)
list 顯示所有指令
add 添加一條指令
delete 刪除一條指令
edit 修改其中一條指令
run 讓"大腦"處理所有指令
at 讓"大腦"處理其中一條指令
show 顯示當前神經網絡狀態!是張圖,很有趣!
神經元會受刺激程度變大變小,之間的神經連結也會
隨耦合程度變化。
save 將內存中的指令存入一個文件,擴展名為*.bp
load 從一文件中讀入指令到內存
dir 顯示當前目錄下的指令文件(Dos命令)
about 顯示版本作者信息
exit 退出系統
好了,總共只有這些命令。很簡單吧。下面來看一看,其中幾條重要指令
的使用說明。
(說明: 1.所有指令都是不帶參數的,也就是說,只要打<指令>加回車就OK了,
系統會一步步提示你如何做的。
2.所有指令都就小寫字母打,系統只認小寫)
[幾條最有用的指令]
1.help指令
這就不用多說了吧!可以列出所有的指令的簡要說明。
雖然簡單,但help很重要,對不對?
2.add指令
其功能是添加一條指令進指令系統(CS)。指令分兩類:"學習"和"處理"
"學習"嘛,就是刺激"輸入端神經元"的過程。"處理"當然就是
在大腦"學習"成功后,就能看到的效果啦。
-----------------------------------
打了add后,系統問:
Mode 0.Learning 1.Process
Choose: 0 (回車) (0 是學習 1是處理)
Learning time(Default 1):3 (問你"學習"次數,也就是說要
刺激它幾次,一般是3次最好
如果你剛才選了"處理",就
不會問你了)
Data 1: (依次輸入要它學習或處理的數據樣本就
Data 2: 可以了,共4個,如果沒有輸入0)
Data 3:
Data 4:
(現在你只要看懂指令的使用方法就行了,具體地,見后面的"綜合舉例")
3.list指令
顯示所有的指令。這條指令很重要哦!
其顯示格式例如:
No. Status Freq. Data 1 Data 2 Data 3 Data 4
=============================================================
1 Learn 3 4 2 0 0
2 Process 1 3 3 0 0
No.是指令序號,Status是指令功能Learn(學習)或Process(處理)
Freq是刺激次數,Data 1,2,3,4分別是對輸入神經元的賦初值
怎么樣?一目了然吧.
4.run指令
處理所有"學習"及"處理"指令。
其輸出值一般為這樣的形式:
L: *Out1:xxxxxx Out2:xxxxxx Out3:xxxxxx
P: *Out1:xxxxxx
<1>每一行,表示一條指令的執行輸出。輸出值只有一個,因為此神經網絡
只有一個輸出神經元。
<2>out1表示第一次"刺激"后的輸出,out2表示第二次......
<3>最前面的'L' 表示是"學習"指令,那'P'就表示是'處理'指令
好了,指令就學到這吧。如果忘了的話,打help看看吧!
=================================================================
三.綜合舉例
例1:自動分辯兩類"數和"的關系
本例讓"大腦學習"分辯兩類關系,
第一類:如3和7,4和6....它們的和為10
第二類:如5和15,3和12....它們的和為15
用add不斷添加指令(指令如下表) (此例數據樣本在test1.bp文件中,可用
load命令讀取)
例如添加第一條:
Mode 0.Learning 1.Process
Choose: 0 (回車)
Learning time(Default 1):3 (學習3次)
Data 1: 2 (用2和8刺激它)
Data 2: 8
Data 3: 0
Data 4: 0
...................(依次類推,看下表)
最后打list顯示如下
list
No. Status Freq. Data 1 Data 2 Data 3 Data 4
================================================================
1 Learn 3 2.00 8.00 0.00 0.00
2 Learn 3 3.00 7.00 0.00 0.00
3 Learn 3 9.00 1.00 0.00 0.00
4 Learn 3 3.00 12.00 0.00 0.00
5 Learn 3 10.00 5.00 0.00 0.00
6 Learn 3 9.00 6.00 0.00 0.00
7 Process 1 4.00 11.00 0.00 0.00
用2和8,3和7,9和1分別刺激"大腦"3次(Freq=3) (第一類)
再用10和5,9和6,4和11,分別刺激"大腦"3次 (第二類)
最后,有一條Process(處理)指令,要"大腦"分辨4和11屬"第一類"
還是第二類?
看看結果吧!執行run語句。
L *Out1: 0.515654 Out2: 0.515974 Out3: 0.515974
L *Out1: 0.515974 Out2: 0.515974 Out3: 0.515974
L *Out1: 0.515974 Out2: 0.515974 Out3: 0.515974
L *Out1: 0.519718 Out2: 0.520050 Out3: 0.520051
L *Out1: 0.520051 Out2: 0.520051 Out3: 0.520051
L *Out1: 0.520051 Out2: 0.520051 Out3: 0.520051
P *Out1: 0.520051
從輸出結果可以看到,前3條"學習"指令,使"輸出"神經元收
斂到了值 0.515974。
而后3條"學習"指令,其收斂到了值0.520051。
再看看處理4和11的指令結果 P *Out1: 0.520051
看到了嗎? "大腦"識別出了4和11是屬于第二類的!
怎么樣?很神奇吧?
再打show指令看看吧!"神經網絡"已經形成了!
你可以自己任意的設"模式"讓這個"大腦"學習分辯哦!只要樣本數據量
充分(可含有誤差的樣本),如果能夠在out數據上收斂地話,那它就能
分辨地很準哦!
有時不是絕對精確,因為它具有"模糊處理"的特性.看Process輸出的值
接近哪個Learning的值就是"大腦"作出的"模糊性"判別!
============================================================
四.后 記
這個程序是我連續幾天"奮戰"做出來的,只是一個"人工神經網絡"
的入門級模型,它包含了BP網絡有最簡單的Hebb自學習函數。雖然它能
體現出一部分功能,但還非常地不完善。
其原因是基于我個人的學識水平限制(我才讀大學一年級)和當前此
領域的發展程度限制的。
當我更深刻地學習研究的時候,我愈覺得自已知道的太少。這個程
序只是我做的第一個嘗試性的模型,我還準備作下一個,當然,會比這
個好的!最后,感謝您的支持!
沈琦 2001.7
與我的聯系方式,歡迎有興趣的朋友或對此有所研究的前輩不吝賜教
E-mail: shenqi@shenqisoft.com
我開設的<人工智能>主題的網站地址
http://www.shenqisoft.com/ai/
--------------------------------------------------------------
~~~~~~我思故我在~~~~~~我思故我在~~~~~~我思故我在~~~~~~我思故我在
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -