编辑推荐
AlphaGo战胜李世石,标志着新一轮人工智能的浪潮已经来袭。而你是否已经做好迎接新的人工智能技术的准备?《自己动手写神经网络》将带你一探作为AlphaGo基石的人工神经网络。《自己动手写神经网络》不局限于纸上谈兵,我们用代码诠释一切。《自己动手写神经网络》可能改变你对人工智能的态度。深入讲解人工神经网络的工作原理,并且能够动手实践人工神经网络书力求通俗易懂,使用尽可能简单的语言描述人工神经网络的原理与理论。《自己动手写神经网络》力求以具体实现与应用为导向,除了理论介绍外,每一章节的应用和实践都有具体的实现详解。全书使用Java作为主要语言,与Matlab等语言不同的是:Java语言是目前企业级软件开发zui为流行的语言,因此,使用Java实现的神经网络具备更强的系统集成能力与实践能力。由于Java语言本身通俗易懂,在基本语法上与C/C 类似,因此,本书同样适合没有Java基础的程序员。
内容简介
《自己动手写神经网络》讲解通俗易懂,使用简单的语言描述人工神经网络的原理,并力求以具体实现与应用为导向,除了理论介绍外,每一章节的应用和实践都有具体的实例实现,让读者达到学以致用。《自己动手写神经网络》分为11章,主要内容为:简单的人工神经网络模型和理论应用;介绍了一个基于Java的人工神经网络框架Neuroph;介绍了基于Neuroph开发一个简单的人工神经网络系统—感知机;介绍了ADALINE网络以及使用Neuroph实现ADALINE神经网络;介绍了BP神经网络的基本原理和具体实现;介绍了BP神经网络的具体实践应用;介绍了Hopfield网络的原理、实践和应用;介绍了双向联想网络BAM的原理、实践和应用;介绍了竞争学习网络,特别是SOM网络以及相关算法与实现;介绍了PCA方法以及与PCA方法等价的PCA神经网络。《自己动手写神经网络》适合以下类型的读者:对神经网络感兴趣,期望可以初步了解神经网络原理的读者;有一定编程经验,期望学习和掌握神经网络的程序员;期望对神经网络进行实际应用的工程人员;任何一名神经网络爱好者。
作者简介
葛一鸣,浙江工业大学硕士,国家认证系统分析师,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