20.0 简介
神经网络的核心是神经元(unit)。神经元接收一个或者多个输入,为每个输入乘以一个参数(又叫作权重),接着对加权之后的输入值求和再加上某个偏差值(一般是1),最后把这个值反馈给一个激活函数。
这个输出值会被向前传递给神经网络中更深层的神经元(如果还有更深层的神经元的话)。
前馈(feedforward)神经网络,又叫作多层感知器(multilayer perceptron),是现实世界中最简单的人工神经网络。神经网络可以视为由一系列相互连接的层组成的网络,它的一端连接着一个观察值的特征值,另一端连接着对应的目标值(比如观察值的分类)。观察值的特征值在网络中向前传播,每经过一层,网络都会对特征值进行转换,目标是让最后的输出与目标值相同,“前馈”这个名字就源于此。
具体来说,前馈神经网络包含3种类型的神经元层。神经网络的起始端有一个输入层,输入层的每一个神经元包含一个观察值的某一个特征值。比如,如果一个观察值有100个特征,那么输入层就有100个节点。
神经网络的末端有一个输出层,它把隐藏层的输出转换成对我们的任务有用的值。举个例子,如果我们的目标是对数据做二元分类,我们可以使用一个只有一个节点的输出层,这个节点使用sigmoid函数将它的输出限定在0和1之间,表示对观察值的预测分类的概率。夹在输入层和输出层之间的就是我们前面说的“隐藏”层(其实它们根本没有隐藏)。这些隐藏层接连不断地将输入层的特征值转换为一些值,这些值只要经输出层处理,就可以得到对应观察值的目标分类。有多个隐藏层的神经网络(比如10层、 100层、1000层)被认为是很“深”的网络,它们的应用又被称为深度学习(deep learning)。
一般而言,神经网络在创建时所有的参数都会被初始化为符合高斯分布或者正态分布的小随机值。一旦一个观察值(更常见的情况是一组观察值的集合,又被称为批次
神经网络通过对训练集中的每个观察值重复做多次前向传播和反向传播(所有的观察值都通过网络传递一次就被称为一个epoch,这种训练一般都需要多个epoch),以此迭代更新参数的值。
在本章中,我们将使用流行的Python包Keras来创建、训练和评估几种神经网络。Keras是一个高层的软件包,使用了像TensorFlow和Theano这样的库来作为它的“引擎”。对于我们来说,Keras的优势就在于它可以使我们专注于神经网络的设计和训练,把张量运算的细节留给其他库来完成。
使用Keras创建的神经网络既可以用CPU(比如,你的笔记本电脑)训练,也可以用GPU(比如,某些专门为深度学习而设计的计算机)训练。在现实世界中,我们强烈建议使用GPU来训练神经网络;但是为了便于学习,本书中所有的神经网络都很小而且很简单,用笔记本电脑也可以在几分钟之内把它们训练出来。你只需要记住,对于大型神经网络和大量训练数据,使用CPU来训练会比使用GPU慢得多。
本书评论