陳凱
摘要:本文給出了一種基于數(shù)字邏輯電路的模擬神經(jīng)元行為以及構建簡單神經(jīng)網(wǎng)絡的方法,主要圍繞非線性的異或運算的實現(xiàn),完整呈現(xiàn)了基于隨機發(fā)生器、計數(shù)器、數(shù)字比較器和邏輯門等數(shù)字邏輯元件模擬神經(jīng)元行為和構建神經(jīng)網(wǎng)絡的過程,并討論了其在基礎教育領域人工智能教學中的可能用途。
關鍵詞:感知機;神經(jīng)網(wǎng)絡;異或門;數(shù)字邏輯電路
中圖分類號:G434? 文獻標識碼:A? 論文編號:1674-2117(2024)07-0023-05
“羅森布拉特認為,人的智能行為以人類對世界的整體了解為基礎,很多智能行為很難被形式化。在20世紀50年代,羅森布拉特提出了一種新的實現(xiàn)智能行為的思路,即構建一種能夠自動學習并恰當辨別模式、作出響應的神經(jīng)網(wǎng)絡,他首次引入了感知機的概念,這是一種模擬人腦感知和學習能力的模型,可以對感知機進行訓練,使之能實現(xiàn)特定的分類識別功能。不過,明斯基對感知機的看法則相對悲觀,他認為感知機作為線性模型,無法表示非線性的函數(shù),即便是簡單的如異或(XOR)邏輯運算也難以實現(xiàn)。1969年,明斯基和西摩·佩珀特寫作出版了《感知機》一書,用數(shù)學證明感知機的局限性,他們的觀點對神經(jīng)網(wǎng)絡的研究造成了嚴重的打擊,使得神經(jīng)網(wǎng)絡研究陷入了長達10年的低潮期?!?/p>
以上文字主要由某人工智能語言工具生成,筆者略微做了一些整理。羅森布拉特和明斯基都是人工智能研究界巨擘,兩人圍繞感知機的爭論儼然成為一樁公案。從今天所知回顧歷史,便知羅森布拉特和明斯基都受制于歷史局限,現(xiàn)在的人們知道,具有多層感知機的神經(jīng)網(wǎng)絡可以表示用單層的感知機無法表示的非線性函數(shù)。在基礎教育階段,學生在學習神經(jīng)網(wǎng)絡時,可能會因為無法直觀地看到模擬神經(jīng)元的工作過程,而對整體神經(jīng)網(wǎng)絡的原理缺乏真切的理解,也就難以體驗到多層感知機在解決表示非線性函數(shù)這個問題上的思維方法的突破。正因為這樣,筆者希望能找到具有如下特性的工具:用某種模型實現(xiàn)神經(jīng)元和突觸行為的底層的模擬,提供將虛擬神經(jīng)元搭建成神經(jīng)網(wǎng)絡并展現(xiàn)運行過程與效果的平臺,神經(jīng)元的生成和連接方便,神經(jīng)網(wǎng)絡的架構過程最好能通過在圖形化的環(huán)境中拖拽圖標來完成,且有一定的可定制性;能使用可視化工具將神經(jīng)網(wǎng)絡的結構和工作過程顯現(xiàn)出來,并提供一定的神經(jīng)網(wǎng)絡架構、訓練參數(shù)、訓練指標的設定的人機交互接口;獲取和安裝方便,軟件是開放的,沒有版權上的限制,較少依賴特殊的工作環(huán)境。
然而,能滿足以上要求的現(xiàn)成工具卻很難找到,這就促使筆者思考,如何“親手打造”這樣一種神經(jīng)網(wǎng)絡實驗環(huán)境。本文要介紹的項目名為“閃爍的神經(jīng)網(wǎng)絡”,在這個神經(jīng)網(wǎng)絡中,虛擬神經(jīng)元對來自輸入信號的總體的閃爍的頻率進行計數(shù),當計數(shù)達到閾值時,該虛擬神經(jīng)元也開始以閃爍來對外發(fā)送信號,其行為如圖1所示。
之所以通過閃爍頻率計數(shù)來判定閾值,是因為能夠在教學演示中展現(xiàn)出直觀形象的動態(tài)效果:閃爍的頻率能體現(xiàn)出神經(jīng)元的運動狀態(tài),而且因為對閃爍的計數(shù)需要一定的時間,信號的傳遞過程和神經(jīng)元的變化過程能被頭腦注意并觀察到,神經(jīng)網(wǎng)絡工作的內(nèi)部因果關系也就清晰地呈現(xiàn)出來了。
將這樣的多個行為簡單的神經(jīng)元連接組合到一起,就可以涌現(xiàn)出復雜的行為。而用來制作神經(jīng)元和神經(jīng)網(wǎng)絡的工具,則出乎意料地使用了數(shù)字邏輯模擬器(數(shù)字邏輯仿真軟件)。對已有文獻的考察可知,很少有人將數(shù)字邏輯模擬器用于神經(jīng)網(wǎng)絡的搭建和運用,其中可能有多方面的原因,如數(shù)字邏輯模擬器較難實現(xiàn)浮點數(shù)的運算、無法批量生成神經(jīng)元和快速搭建神經(jīng)網(wǎng)絡(這里不考慮采用硬件描述語言生成神經(jīng)網(wǎng)絡的情況,類似的神經(jīng)網(wǎng)絡實現(xiàn)方法所需要的知識技能超出基礎教育階段絕大部分學習者的水平)、很難用數(shù)字電路本身來進行基于機器學習的調(diào)參(稍微復雜一些的基于數(shù)字電路的神經(jīng)網(wǎng)絡,其中的諸多工作參數(shù)仍然需要計算機環(huán)境下的神經(jīng)網(wǎng)絡算法來計算獲得)。所以,數(shù)字邏輯模擬器并不是一種值得推薦的作為生產(chǎn)工具的神經(jīng)網(wǎng)絡架設環(huán)境。但對于人工智能的初學者來說,數(shù)字邏輯模擬器提供了一個圖形化的實驗環(huán)境,除了剛才提到的神經(jīng)網(wǎng)絡的運行過程能直觀顯現(xiàn)出來之外,神經(jīng)網(wǎng)絡從構想到架設再到運行驗證,都能由學習者親手操作把控。本文使用Logisim數(shù)字邏輯模擬器來構造神經(jīng)網(wǎng)絡,其中的電路當然也能遷移到其他功能完備的數(shù)字邏輯模器中,甚至可以采用真實的元件替代虛擬元件來實現(xiàn)神經(jīng)網(wǎng)絡電路。實際上,使用圖形化的編程工具也能實現(xiàn)與“閃爍的神經(jīng)網(wǎng)絡”類似的效果,但數(shù)字邏輯模擬器提供了一個純粹硬件的構造平臺,更能凸顯出基于底層物理現(xiàn)實的“造物”特性。
數(shù)字邏輯的神經(jīng)網(wǎng)絡基本組件
組成神經(jīng)網(wǎng)絡的幾個基本組件是信號發(fā)生器、信號比較器、信號觸發(fā)器、信號累加器、信號削減器和信號顯示器。這些部件的基礎元件是隨機數(shù)發(fā)生器、計數(shù)器、數(shù)字比較器和邏輯門等。
1.信號發(fā)生器
最簡單的信號發(fā)生器是由一個隨機數(shù)發(fā)生器和一個計數(shù)器組成的,計數(shù)器每次在計滿之后,都會產(chǎn)生一個溢出信號1,然后在重新開始計數(shù)后溢出信號又變?yōu)?,相當于在每次計數(shù)計滿時發(fā)出一個閃爍信號。由于隨機數(shù)發(fā)生器的作用,計數(shù)器發(fā)出溢出信號的時間是不規(guī)律的,這樣就能產(chǎn)生出持續(xù)重復但又不太規(guī)律的閃爍信號。計數(shù)器的位數(shù)決定了閃爍的總體頻率,如3位計數(shù)器要計滿8個數(shù)后才閃爍,4位計數(shù)器則要計滿16個數(shù)后才閃爍。
可以為信號發(fā)生器增加一些元件,使它能產(chǎn)生出更多效果,如:增加一個輸入,通過與門來控制信號發(fā)生器是否發(fā)生信號,這樣就能切換信號發(fā)生器的閃爍和靜默兩種狀態(tài);為隨機數(shù)發(fā)生器設定不同的隨機種子,加強隨機效果;用多套隨機數(shù)發(fā)生器和計數(shù)器,來產(chǎn)生不同頻率的信號,這樣就能設定神經(jīng)網(wǎng)絡中信號的權重。為了便于后續(xù)神經(jīng)網(wǎng)絡的搭建,可以將電路封裝起來,形成抽象的模塊。信號發(fā)生器的電路與封裝后的模塊如上頁圖2所示。后面將要提到的幾個電路也都可以封裝成抽象的模塊,這里就不一一贅述了。在教學中,可以直接提供封裝好的模塊,降低學習的難度,同時將模塊內(nèi)部的工作原理作為拓展的學習內(nèi)容,豐富教學內(nèi)容的難度層次。
2.信號比較器
信號比較器用來判斷在一段時間內(nèi),閃爍的計數(shù)是否超過閾值。信號比較器由兩個計數(shù)器和一個數(shù)字比較器組成,左面的計數(shù)器在計滿數(shù)后向右面的計數(shù)器發(fā)送一個清零信號,所以,當輸入的閃爍信號頻率足夠高時,數(shù)字比較器就能判別出閃爍頻率是否高于一定的閾值,圖3是信號比較器的組成電路,其中所示的閾值是6,這個閾值是神經(jīng)網(wǎng)絡中可以通過人機交互進行調(diào)整的一個重要參數(shù)。
3.信號顯示器
信號顯示器的結構其實和信號比較器很相近,只是將數(shù)字比較器換成一個輸出信號的顯示,這樣能在實驗中,觀察在一定時間周期里閃爍的次數(shù),電路如圖4所示。顯示器僅用于調(diào)試,在最終運行的神經(jīng)網(wǎng)絡中不是必需的。
4.信號觸發(fā)器
信號觸發(fā)器模擬了神經(jīng)元的運行工作過程,只有當輸入信號閃爍的頻率達到閾值時,神經(jīng)元才被觸發(fā)向外發(fā)送閃爍信號,它是由計數(shù)器、非門、或門、驅(qū)動器共同組成的,電路如圖5所示。信號觸發(fā)器的結構稍微復雜一些,不過只要運行起來,它的作用就是顯而易見的:當輸入信號(來自信號比較器)為1時,計數(shù)器就開始計數(shù),在計數(shù)過程中,時鐘信號能夠順利通過驅(qū)動器傳輸?shù)接嫈?shù)器。當計數(shù)器計滿后,如果輸入信號仍然是1,則繼續(xù)下一輪計數(shù),如果輸入信號是0,則驅(qū)動器關閉,時鐘信號被阻止傳輸?shù)接嫈?shù)器,于是停止計數(shù)。
5.信號累加器
信號累加器可以是一個簡單的或門,也可以是幾個或門的組合,如圖6所示,它能將幾組信號的閃爍合并成一組信號的閃爍。如果神經(jīng)網(wǎng)絡比較簡單,就可以直接用或門充當信號累加器,如果神經(jīng)網(wǎng)絡比較復雜,如需要對很多個信號進行或運算,則仍然有必要將其封裝成模塊。
6.信號削減器
信號削減器由一個非門和一個與門組成,當下端的輸入不閃爍時,上端的閃爍信號就能順利通過與門,當下端輸入閃爍時,就會削減掉上端的閃爍信號。電路如下頁圖7所示。
神經(jīng)網(wǎng)絡實現(xiàn)異或門運算
這里有必要簡單說明一下基于多層感知機的神經(jīng)網(wǎng)絡實現(xiàn)異或邏輯運算的原理(實現(xiàn)與、或、非邏輯運算的感知機結構比較簡單,有興趣的讀者可自行查閱相關資料)。這個實現(xiàn)異或邏輯運算神經(jīng)網(wǎng)絡由如圖8所示的兩個輸入神經(jīng)元(最左列)、兩個隱藏層神經(jīng)元(中間列)、一個輸出神經(jīng)元(最右列)組成。在圖8中,深色箭頭代表信號累加,淺色箭頭代表信號削減。神經(jīng)元的觸發(fā)閾值用橫杠的高低來表示。
異或邏輯運算的規(guī)則是,當輸入信號是一個0或一個1時,輸出信號為1,當輸入信號相同時,輸出信號為0。設想一下,如果兩個輸入神經(jīng)元均靜默,則神經(jīng)網(wǎng)絡中沒有任何信號傳輸,輸出神經(jīng)元自然也是靜默;如果兩個輸入神經(jīng)元中有一個活躍,則會觸發(fā)隱藏層上側閾值較低的神經(jīng)元,然后輸出信號傳輸給輸出神經(jīng)元,則輸出神經(jīng)元活躍;如果兩個輸入神經(jīng)元均活躍,則同時觸發(fā)隱藏層上側閾值較低的神經(jīng)元和下側閾值較高的神經(jīng)元,隱藏層下側神經(jīng)元發(fā)送權重較高的削減信號,將隱藏層上側神經(jīng)元發(fā)送的信號大部分消除,則輸出神經(jīng)元無法達到閾值,則輸出靜默。
基于數(shù)字邏輯元件的神經(jīng)網(wǎng)絡
接下來,就可以用數(shù)字邏輯元件搭建神經(jīng)網(wǎng)絡,使其實現(xiàn)異或邏輯運算。一個輸入神經(jīng)元不需要進行閾值判斷,所以直接用信號發(fā)生器表示即可;隱藏層神經(jīng)元和輸出神經(jīng)元需要進行閾值判斷,可以用信號比較器、信號觸發(fā)器和信號發(fā)生器組合成神經(jīng)元模塊,模塊用多個不同的輸出表示不同的輸出信號權重,在實際應用中,可以選用模塊的某一路信號輸出,也可以同時使用多路信號輸出,具體如圖9所示。
最后,將神經(jīng)元和信號累加器、信號削減器組合起來,成為一個可以實現(xiàn)異或運算的神經(jīng)網(wǎng)絡,如圖10所示??梢钥闯?,隱藏層上側的神經(jīng)元閾值較低,為二進制數(shù)00110,也就是十進制數(shù)6,隱藏層下側的神經(jīng)元閾值較高,為二進制數(shù)01010,也就是十進制數(shù)10。當只有一個輸入神經(jīng)元閃爍時,只有隱藏層上側神經(jīng)元被觸發(fā),最終使得輸出神經(jīng)元收到的閃爍信號頻率超過閾值被觸發(fā);而當兩個輸入神經(jīng)元均閃爍時,兩個隱藏層神經(jīng)元均被觸發(fā),下側神經(jīng)元的削減信號權重大(通過多個輸出累加增加權重),將上側神經(jīng)元輸出的閃爍大部分削減,則輸出神經(jīng)元收到的閃爍信號頻率未超過閾值而保持靜默。
用這種基于數(shù)字邏輯的神經(jīng)元當然也可以用來實現(xiàn)更復雜的運算,如判別一個簡單的位圖到底是數(shù)字0還是數(shù)字1、進行一位的二進制數(shù)加法等。關于實現(xiàn)二進制加法的神經(jīng)網(wǎng)絡結構值得一提,其組成幾乎和實現(xiàn)異或運算的神經(jīng)網(wǎng)絡結構一樣,僅僅是在輸入神經(jīng)元的信號累加器后接入了一個閾值較高的輸出神經(jīng)元而已(如圖11)。只要調(diào)整閾值,就能將這個結構用于與邏輯以及或邏輯的運算。至于非邏輯運算,甚至不需要調(diào)整閾值,只要直接將兩個輸入中的一個錨定為1即可。在這里可以看出神經(jīng)網(wǎng)絡實現(xiàn)運算和傳統(tǒng)的算法實現(xiàn)運算在方法思路上的區(qū)別。
穿越時空的遐想
這里有一個引人遐想的問題,如果將與門和非門串聯(lián),則可模擬與非門的功能,繼而將四個與非門組合起來就能模擬異或門的功能,那么自然可以先用神經(jīng)元模擬與非門,再組合起來實現(xiàn)異或門,如圖12所示。在20世紀60年代圍繞感知機的論戰(zhàn)中,是否有人想到用這樣簡單的方法,就能證明可以使用多個神經(jīng)元來實現(xiàn)非線性的異或門運算呢?對于這個問題,筆者尚未查找到相關文獻,但可以肯定的是,羅森布拉特曾經(jīng)明確地提出,多層感知機具有單層感知機所不具備的強大的能力。但明斯基卻認為“我們尚未發(fā)現(xiàn)任何一類真正讓人感興趣的多層機”[1],其中隱含的意味,大概是認為即便能實現(xiàn)異或運算,也無法實現(xiàn)其他更復雜一些的運算。
羅森布拉特的觀點基于一種自然而然的直覺——既然人腦依賴神經(jīng)元的工作實現(xiàn)智能,那么機器當然也能模仿這一過程,但他既不能嚴謹?shù)貙Υ思右宰C明,也難以在現(xiàn)實中加以實施(受制于軟硬件條件,當時只能用神經(jīng)網(wǎng)絡解決很簡單的問題),羅森布拉特的“非嚴謹”研究在當時被主流人工智能學界排斥,如今看來是一種很大的損失。直到20世紀80年代,關于多層神經(jīng)網(wǎng)絡是一種普適的模擬器(可以模擬任何函數(shù))的證明才真正完成。[2]還有更多尚沒有確切答案但值得展開討論的問題,如人的直覺是否僅僅是神經(jīng)元(或其他基礎的物理組件)工作過程的產(chǎn)物?未來機器是否可能擁有像人那樣的直覺?到底在多大程度上,直覺是可以被信賴的?
參考文獻:
[1]Marvin Minsky and Seymour A.Papert.PerceptronsAn Introduction to Computational Geometry[M].Cambridge:The MIT Press,1969:231.
[2]Hornik, Kurt,Maxwell B.Stinchcombe and Halbert L.White.Multilayer feedforward networks are universal approximators[J].Neural Networks,1989:359-366.