書名: 神經網絡與深度學習:基于MATLAB的仿真與實現作者名: 姚舜才 李大威編著本章字數: 3290字更新時間: 2023-08-25 11:44:54
第一部分 神經網絡基礎及MATLAB
緒論
“智能”無疑是當前的流行詞之一,相關的新聞報道和各種消息中經常會出現,而且很多產品也被冠以“智能”。然而對于如何定義智能及實現智能,大家卻不是很關心。好像只要能給生活帶來一些便捷的產品就可以將其稱為智能產品,例如智能手機、智能家居等。事實上,對于智能的定義是在不斷變化的,從心理學上定義的智能到機器智能、人工智能都有不同的表述。而機器智能多指具有一定的類似人的推理能力的機器或裝置。這些智能的機器或裝置的確給我們的生活帶來了不少便利,使得很多人對其青睞有加,想方設法使它更加“聰明”地為我們服務,這就涉及智能的實現問題。
智能如何實現?人們會很自然地聯想到自身,智能的實現可以借鑒人的智能的實現,首先應該有一個“大腦”用來思考,還應該接受一定的教育和訓練才能“智能”地生活和“智能”地工作。這實際上就說明了智能的實現應該有兩方面的支撐:一是“大腦”——計算機硬件,二是“思維”——軟件和算法。計算機硬件的發展依賴于制造業和材料科學的發展,當然也得有古老和傳統的采礦業的支撐;而智能的實現更主要的是軟件和算法。這正如人的智能:光有一個機靈的大腦是不行的,還要經過系統的學習和訓練才能成為一個有思想、會思考的人!中國古典讀物中也有“玉不琢,不成器;人不學,不知義”的說法。一個人機靈的大腦可能來自遺傳,相應地,一個智能機器的硬件會依賴于材料科學等方面的保障。要使機器具有“智能”,則更應該強調其軟件和算法的效率和優勢。因此,從智能的實現上來說,也強調高效的算法。
如何實現高效的智能算法呢?在20世紀中葉,很多富有遠見的學者就開始了探討。在1956年夏天,美國學者赫伯特·亞歷山大·西蒙(Herbert Alexander Simon,1916—2001)、約翰·麥卡錫(John McCarthy,1927—2011)、馬爾文·李·明斯基(Marvin Lee Minsky,1927—2016)、紐厄爾(Allen Newell,1927—1992)等聚集在達特茅斯一起討論關于信息處理的學術問題,在這次會議(達特茅斯會議)上首次提出了“人工智能”這一術語,一般認為這就是人工智能的起源。
在此后將近10年的時間,也就是到20世紀60年代中葉,關于智能研究的主題是系統的執行能力,研究內容為對數據的優化處理,即智能系統在接收到相應的數據后進行自尋優的過程。需要設計在現在看來較為簡單的算法使系統能夠自動進行優化處理,例如某些棋局對弈程序。隨著技術問題的不斷出現,也在不斷提出新的處理要求,各種智能算法層出不窮。在智能算法領域始終存在兩種方向(發展為兩大學派):一是以傳統統計學為基礎,并在此基礎上不斷改進和發展的統計學習理論和支持向量機方法;二是仿生智能,這是受到了生物智能或神經科學的啟發而發展出的一系列智能方法,例如遺傳算法、神經網絡等。
傳統統計學對于智能算法方面的基礎貢獻主要來源于傳統統計學中的多元統計分析。多元統計分析是對標量數據統計的擴展。多元統計分析方法建立在嚴密的數學推理基礎上,對于數據樣本的分析給出了詳盡的分析過程和不容辯駁的結果。很多基于統計學方法的智能算法都能在多元統計分析的范疇進行溯源,例如線性分類、聚類和主成分分析等。在某種程度上,可以說多元統計分析是智能算法的源流。當然,多元統計分析方法也存在一些問題,首先,多元統計分析方法始終還是一種靜態分析方法,對于動態系統的數據建模,多元統計分析方法是無能為力的;其次,由于關注數學分析的嚴謹,多元統計分析方法的計算量比較大。但不論怎樣,經過多年的不斷發展,統計學習理論學派在基于貝葉斯理論的基礎上形成了統計學習的方法,因此也被稱為“貝葉斯派”。這個學派的主要代表人物是弗拉基米爾·瓦普尼克(Vladimir N. Vapnik)和阿列克謝·切沃寧基斯(Alexey Chervonenkis)。
仿生智能作為智能算法的一個重要分支,與統計學相比,可能在理解上更為容易,同時在普及程度上也似乎比統計學更廣一些。在仿生智能中又有很多分支,例如生物遺傳算法、粒子群算法等。但其中最有代表性的莫過于神經網絡算法了。神經網絡算法正如其名,最初是受到了神經元對于外部刺激-響應模式的啟發,然后利用簡單的電路實現的,后來隨著硬件水平的不斷提高,神經網絡算法的復雜程度和精細程度也在不斷提高,在很多傳統技術難以解決的領域大顯身手,受到了廣泛的贊譽。首先,經典神經網絡算法是依賴于數據的,對于外部輸入的大量數據,經過一定的處理可以很好地建立起輸入和輸出之間的關系。這種關系一般是非線性的(如果是線性關系,則不必費這么大的周折)。因此,神經網絡對于非線性映射關系的建立有著不可撼動的地位。其次,神經網絡是依賴于結構的,網絡結構的調整和改變往往會帶來不同的運算效果。因此,神經網絡的發展也促進了其他相關學科的發展。最后,神經網絡的學習模式與人類的學習模式存在一定的相似性,神經網絡學習模式的產生和發展在很大程度上是受到了人類的學習模式的影響,因此神經網絡的學習模式與人類的學習模式可以相互借鑒,促進人工智能的不斷發展。
鑒于神經網絡自身的特點,這種具有特色的仿生智能算法也受到了一些質疑,例如神經網絡并不能解釋非線性映射的機理,只是“照貓畫虎”地“模仿”;神經網絡依賴于數據,其泛化程度不盡如人意;神經網絡的學習模式過于單一等。對于這些質疑,神經網絡計算學派在不斷推廣其實際應用的同時也在不斷反思和改進。經過多年的改進后,一種新型的神經網絡終于面世——這就是基于深度學習的神經網絡。在這種神經網絡中,將統計學和其他較為嚴謹的數學理論引入,在一定程度上規避了傳統神經網絡的缺點,從而在很大程度上提升了傳統神經網絡的性能。AlphaGo與李世石的圍棋之戰就是一個很好的例證。目前,各種基于深度學習的神經網絡如雨后春筍般相繼推出,例如卷積神經網絡、生成對抗網絡等。這似乎預示著在將來一段時間內以神經網絡為基本架構,同時兼顧統計學派學習方法的智能學習模式可能要占據人工智能領域的制高點。
再好的理論也得有實踐的平臺,各種神經網絡算法的實現也不例外。在硬件平臺方面,現在已經有很多性能良好的GPU和CPU供神經網絡算法運行,而且,在AlphaGo與李世石圍棋大戰兩個月后,谷歌公司的硬件工程師公布的張量處理單元(Tensor Processing Unit,TPU)已經應用于深度學習神經網絡。有的技術人員甚至聲稱“TPU的處理速度比當前GPU和CPU的速度快15~30倍”。這些處理單元主要應用于很多專用和特殊的場合,而對于神經網絡的初學者來說最為重要的是了解算法的結構,體驗算法的效率。基于這種考慮,如果不進行超大規模的神經網絡計算,則一般性能較好的PC就足以支撐算法的運行。有了硬件支撐,接下來就要考慮算法和軟件了。目前能夠在PC上運行神經網絡算法的軟件有很多種,這些軟件各具特色,從不同的側面反映著神經網絡算法的特點。傳統而經典的C、C++語言主要側重于基礎和底層的開發;Java語言由于其半編譯性的特點具有較高的可移植性,但在運行速度上有一些問題;在當前智能算法、神經網絡的開發領域很多人推崇Python語言,但Python語言對于線程的處理又似乎不盡如人意……可以看出,對于軟件和計算機語言的選擇,更多的是見仁見智、難分伯仲。對于想了解和體驗神經網絡算法優勢的人來講,筆者推薦使用MATLAB軟件。
單純從計算機語言的角度講,MATLAB不像是一種計算機語言。雖然它也有一些語法規則,但與正統的計算機語言相比,似乎顯得簡陋了一些。然而自從誕生以來,MATLAB在科學分析和計算領域就一直占據很重要的位置。MATLAB是Matrix和Laboratory兩個詞的組合,意為矩陣實驗室。MATLAB最初推出的版本就以簡潔和類似手工計算的方式解決了矩陣計算的問題。當時被稱為“演算紙式”計算機語言。緊接著,MATLAB提供控制工程領域仿真分析軟件包。在其后幾十年,MATLAB不斷發展,陸續將各學科和技術領域的分析計算軟件包囊括在內,形成了涵蓋控制、電氣、電子、通信、虛擬現實甚至航空航天等諸多領域的龐大軟件。此外,MATLAB還體現了體系開放的特點,對于C、Python等語言可以相互交融,進行混合編程。從某種程度上說,MATLAB軟件是廣大科技人員不可或缺的理論分析和仿真運算工具。
MATLAB既提供了較為規范和完備的傳統神經網絡工具箱,也為新型的深度學習神經網絡留下了擴展空間。在學習神經網絡基礎理論的同時,如果能夠利用MATLAB對所學的理論進行驗證則會達到事半功倍的效果。如果在此基礎上激發創新的靈感,開發出更加有效和實用的神經網絡,那更完美。