《自己動手寫神經網絡》講解通俗易懂,使用簡單的語言描述人工神經網絡的原理,并力求以具體實現與應用為導向,除了理論介紹外,每一章節的應用和實踐都有具體的實例實現,讓讀者達到學以致用。《自己動手寫神經網絡》分為11章,主要內容為:簡單的人工神經網絡模型和理論應用;介紹了一個基于Java的人工神經網絡框架Neuroph;介紹了基于Neuroph開發一個簡單的人工神經網絡系統感知機;介紹了ADALINE網絡以及使用Neuroph實現ADALINE神經網絡;介紹了BP神經網絡的基本原理和具體實現;介紹了BP神經網絡的具體實踐應用;介紹了Hopfield網絡的原理、實踐和應用;介紹了雙向聯想網絡BAM的原理、實踐和應用;介紹了競爭學習網絡,特別是SOM網絡以及相關算法與實現;介紹了PCA方法以及與PCA方法等價的PCA神經網絡。
《自己動手寫神經網絡》適合以下類型的讀者:對神經網絡感興趣,期望可以初步了解神經網絡原理的讀者;有一定編程經驗,期望學習和掌握神經網絡的程序員;期望對神經網絡進行實際應用的工程人員;任何一名神經網絡愛好者。
AlphaGo戰勝李世石,標志著新一輪人工智能的浪潮已經來襲。
而你是否已經做好迎接新的人工智能技術的準備?
《自己動手寫神經網絡》將帶你一探作為AlphaGo基石的人工神經網絡。
《自己動手寫神經網絡》不局限于紙上談兵,我們用代碼詮釋一切。
《自己動手寫神經網絡》可能改變你對人工智能的態度。
深入講解人工神經網絡的工作原理,并且能夠動手實踐人工神經網絡
書力求通俗易懂,使用盡可能簡單的語言描述人工神經網絡的原理與理論。
《自己動手寫神經網絡》力求以具體實現與應用為導向,除了理論介紹外,每一章節的應用和實踐都有具體的實現詳解。
全書使用Java作為主要語言,與Matlab等語言不同的是:Java語言是目前企業級軟件開發zui為流行的語言,因此,使用Java實現的神經網絡具備更強的系統集成能力與實踐能力。由于Java語言本身通俗易懂,在基本語法上與C/C 類似,因此,本書同樣適合沒有Java基礎的程序員。
葛一鳴,浙江工業大學碩士,國家認證系統分析師,Oracle OCP。長期從事Java軟件開發工作,對Java技術、人工智能、神經網絡、數據挖掘等技術有濃厚興趣。
現著有《自己動手寫神經網絡》《Java程序性能優化》《實戰Java虛擬機》《實戰Java高并發程序設計》。
目 錄
第1章 人工神經網絡概述1
1.1 人工智能與神經網絡簡史1
1.1.1 人工智能的誕生:1943~1956年2
1.1.2 黃金發展期:1956~1974年3
1.1.3 第一次低谷期:1974~1980年4
1.1.4 繁榮期:1980~1987年5
1.1.5 第二次低谷期:1987~1993年5
1.1.6 再次崛起:1993年至今6
1.2 生物學研究對神經網絡的影響6
1.3 大數據對人工智能的影響8
1.4 計算機硬件發展對人工智能的影響9
1.5 計算機軟件發展對人工智能的影響9
1.6 人工智能的廣泛應用10
第2章 人工神經元模型與感知機12
2.1 人工神經元組成要素12
2.1.1 人工神經元的基本結構12
2.1.2 傳輸函數類型13
2.2 感知機15
2.2.1 使用感知機識別水果15
2.2.2 讓感知機記憶邏輯與17
2.2.3 感知機的學習算法18
2.3 總結20
第3章 神經網絡框架Neuroph介紹21
3.1 Neuroph是什么21
3.2 Neuroph系統的構成22
3.3 Neuroph Studio的功能展示22
3.3.1 使用Neuroph Studio構造感知機處理邏輯與23
3.3.2 使用Neuroph Studio進行動物分類實驗28
3.4 Neuroph Library架構分析34
3.4.1 Neuroph Library核心架構35
3.4.2 Neuron神經元35
3.4.3 Layer層36
3.4.4 NeuralNetwork神經網絡37
3.4.5 LearningRule學習算法37
3.4.6 DataSet和DataSetRow38
3.5 Neuroph開發環境搭建38
3.5.1 基礎平臺Java介紹以及安裝39
3.5.2 包管理工具Maven安裝39
3.5.3 開發工具Eclipse安裝40
3.6 總結41
第4章 使用Java實現感知機及其應用42
4.1 第一個Neuroph程序使用感知機記憶邏輯與42
4.1.1 創建感知機網絡42
4.1.2 理解輸入神經元InputNeuron45
4.1.3 理解貝葉斯神經元BiasNeuron45
4.1.4 step傳輸函數是如何實現的46
4.2 讓感知機理解坐標系統47
4.2.1 感知機網絡的設計47
4.2.2 感知機網絡的實現47
4.3 感知機學習算法與Java實現49
4.3.1 感知機學習規則的實現50
4.3.2 一個自學習的感知機實現SimplePerceptron51
4.3.3 小試牛刀SimplePerceptron學習邏輯與52
4.3.4 訓練何時停止53
4.4 再看坐標點位置識別55
4.5 感知機的極限異或問題57
4.6 總結58
第5章 ADALINE網絡及其應用59
5.1 ADALINE網絡與LMS算法59
5.2 ADALINE網絡的Java實現60
5.3 使用ADALINE網絡識別數字62
5.3.1 印刷體數字識別問題概述62
5.3.2 代碼實現63
5.3.3 加入噪點后再嘗試66
5.4 總結67
第6章 多層感知機和BP學習算法68
6.1 多層感知機的結構與簡單實現68
6.1.1 多層感知機結構的提出68
6.1.2 定義多層感知機處理異或問題69
6.1.3 多層感知機的簡單實現71
6.2 多層感知機學習算法BP學習算法74
6.2.1 BP學習算法理論介紹74
6.2.2 BP學習算法與BP神經網絡的實現77
6.3 BP神經網絡細節優化84
6.3.1 隨機化權值的方式84
6.3.2 Sigmoid函數導數的探討86
6.4 帶著算法重回異或問題87
6.5 總結89
第7章 BP神經網絡的案例90
7.1 奇偶性判別問題90
7.1.1 問題描述90
7.1.2 代碼實現90
7.2 函數逼近94
7.2.1 問題描述94
7.2.2 代碼實現94
7.3 動物分類99
7.3.1 問題描述99
7.3.2 問題分析100
7.3.3 代碼實現102
7.4 簡單的語音識別104
7.4.1 問題描述104
7.4.2 代碼實現104
7.5 MNIST手寫體識別106
7.5.1 問題描述106
7.5.2 問題分析108
7.5.3 代碼實現108
7.6 總結112
第8章 Hopfield神經網絡113
8.1 Hopfield神經網絡的結構和原理113
8.1.1 Hopfield網絡的結構113
8.1.2 網絡吸引子114
8.1.3 網絡權值的設計115
8.2 網絡的存儲容量117
8.3 Hopfield神經網絡的Java實現118
8.3.1 Hopfield網絡構造函數118
8.3.2 Hopfield網絡的神經及其特點119
8.3.3 Hopfield網絡學習算法120
8.4 Hopfield網絡還原帶有噪點的字符121
8.5 Hopfield網絡的自聯想案例123
8.6 總結126
第9章 BAM雙向聯想記憶網絡127
9.1 BAM網絡的結構與原理127
9.2 BAM網絡的學習算法128
9.3 使用Java實現BAM網絡129
9.3.1 BAM網絡的靜態結構129
9.3.2 BAM網絡學習算法130
9.3.3 BAM網絡的運行131
9.4 BAM網絡的應用133
9.4.1 場景描述人名與電話133
9.4.2 數據編碼設計134
9.4.3 具體實現136
9.5 總結140
第10章 競爭學習網絡141
10.1 競爭學習的基本原理141
10.1.1 向量的相似性142
10.1.2 競爭學習規則143
10.2 自組織映射網絡SOM的原理144
10.2.1 SOM網絡的生物學意義144
10.2.2 SOM網絡的結構144
10.2.3 SOM網絡的運行原理145
10.2.4 有關初始化權重的問題146
10.3 SOM網絡的Java實現147
10.3.1 SOM網絡拓撲結構的實現147
10.3.2 SOM網絡的初始權值設置150
10.3.3 Kohonen算法的實現153
10.4 SOM網絡的應用157
10.4.1 使用SOM網絡進行動物聚類158
10.4.2 使用SOM網絡進行城市聚類161
10.5 總結164
第11章 PCA神經網絡165
11.1 PCA方法概述165
11.1.1 PCA方法數學背景166
11.1.2 PCA計算示例167
11.2 PCA神經網絡學習算法170
11.2.1 Oja算法170
11.2.2 Sanger算法171
11.3 基于Neuroph實現PCA網絡172
11.3.1 Oja算法的實現172
11.3.2 Sanger算法的實現177
11.4 使用PCA網絡預處理MNIST手寫體數據集178
11.5 總結181