第六章

前馈神经网络实例

你想知道第零章中交互模块的运行原理吗?回想一下你目前为止所学到的知识,一起来看一下第零章的模块是如何识别手写数字的吧!请向下滚动继续阅读。

向下滚动

在这一章里,我们将会用实例解释如何构建一个可以识别手写数字的神经网络。我们将会使用来自于计算机科学家Yann LeCun的MNIST数据集。

MNIST中的图片长28像素,宽28像素。每张图片都会被作为训练数据来教我们的前馈神经网络如何识别手写数字。

每个像素都有一个0到1之间的数值来表示他们的灰度。0是黑色,1代表白色,0和1之间的数字则代表某种深度的灰色。这些28 × 28 = 784个像素会被首尾相连构成一个长的向量(数组),作为输入传递到到输入层中。

输入层会将这些输入像素转换成信号传递到下一个隐藏层中的500个节点中,生成500个数字来表示原有的图片的信息。为了让多层网络起到应有的作用,我们需要使用ReLU作为激活函数构造非线性隐藏层。

这500个节点把它们的输出值送到最后输出层的10个节点里。我们需要把这个10个输出值转换成可以代表输入图片中写的是0到9的概率。Softmax激活函数可以完成这个转换。

最后,输出层的每个节点都对应着一个数字。

因为我们使用了softmax函数,所以每个输出节点都会对应一个概率。这个概率代表着我们的前馈神经网络觉得输入图片有多大可能会对应某个数字。

最高的输出值(概率)就是我们的网络觉得最有可能的结果。这个输出值所对应的数字就是对手写数字的最终的识别结果。

在训练前,我们会将MNIST数据集分成100组。训练时,我们的网络会根据现在的权重和偏置来生成一个预测。这个过程就叫做正向传播

在比对结果和计算损失函数之后,训练算法会回到网络中根据梯度去更新权重和偏置的值,从而使神经网络的预测更接近理想的正确结果。这个过程叫反向传播

在一开始训练时,我们会先初始化网络的参数(权重和偏置)。在这个例子中,我们会先把参数初始化成大约为0的数值。这也是常用的初始化方法之一。

我们采用随机梯度下降法和0.7的学习率来训练我们的网络。这个学习率是通过实验得来的,对于我们手写数字识别网络的训练效果非常好。专业的研究者会通过多次尝试不同的数值来确定一个理想的学习率。

在用这个数据集训练过2到3遍之后,我们的网络就可以使用了。在用这个数据集训练到第2遍的时候,它就有97%的概率来正确的识别手写数字了。在一般的笔记本电脑上,这个训练过程只用花不到1分钟。

这就是我们用于第零章交互模块的前馈神经网络。如果你想亲手训练这个模型,或尝试对现有模型上进行改变,我们为你写好了简答易懂的代码,让你可以随意在网上试验(需要科学上网)。
写代码喽

总结

在这一章中,我们运用了之前所学到的知识来构建一个可以识别手写数字的神经网络。AI还可以做到更多比这个更为强大的事情。希望这些章节可以激发你对探索AI世界的兴趣!

延伸阅读

MNIST Dataset
Deep Learning: An MIT Press Book
A Neural Network Playground

核心词汇

Softmax:一个增强版本的simgoid函数,可以计算多个事物的概率。

正向传播:根据输入数据来让神经网络生成预测的过程。

反向传播:通过调整参数来提升神经网络表现的过程。