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