neural networks and deep learning-chapter1-2

1.3 神经网络的架构

假设我们有这样一个神经网络:
neural networks and deep learning-chapter1-2
如前文所示,最左边的一层称为输入层,其神经元称为输入神经元;最右边的一层称为输出层,其神经元称为输出神经元。而对于那些居于这两层之间的层,我们称之为隐藏层。它表达的含义非常简单:既非输入层也非输出层的层。隐藏层可以是0层,也可以是无数层。

一般来说,输入层和输出层是很好设计的:我们的数据有多少特征,我们就设计多少个输入神经元;我们需要得到多少目标,我们就设计多少个输出神经元。但隐藏层的设计就没这么简单了:该设计多少隐藏层,每层包含多少神经元,这些神经元与其它层的交互方式是怎样?为了解决这个问题,得到一个好的隐藏层,研究人员们创造了许多设计最优原则,这些原则可以帮助人们得到ta们想要的神经网络。这些原则会在后面讲到。

目前为止,我们所讨论的神经网络,都是前一层的输出作为下一层的输入,这种神经网络被称为前馈神经网络。这种网络是没有环路(loop)的,因为一旦容许环路存在,那么σ函数的输出有时就要依赖输入,这将会使神经网络变得难以理解。

但是有一种被称为递归神经网络的神经网络是容许回路的存在的。这一模型的思想是让神经元在沉寂(quiescent)之前的一段限定好的时间里激发(fire)。这一激发会刺激其它神经元,并使它们在一段时间后,激发限定的时间。这一激发又会激发其它的神经元,于是一段时间后,我们得到了一个级联(cascade)的激发神经元。由于神经元的输出只会在一段时间后才会影响它的输入,这一神经网络中的环路并不会导致问题。

部分原因是目前还没有很好的算法来实现递归神经网络,递归神经网络在目前影响力还不如前馈神经网络。但由于它的设计思路在理论上更接近人脑的工作原理,所以它更有潜力。而且由于加入了环路,递归神经网络也许能解决一些前馈神经网络无法解决或很难解决的问题。但由于篇幅所限,本文将介绍更为流行的前馈神经网络。

1.4 一个简单的手写数字分类神经网络

在了解了神经网络后,我们继续回到手写数字识别的问题。
neural networks and deep learning-chapter1-2
当面对这样一个手写数字时,我们首先将问题分为两类:1、获得单个数字;2、识别单个数字。当你能够很好的解决第二个问题后,第一个问题就很好解决了。我们可以选取随机的方式来对整体数字进行分割(后面会提到单个数字的大小是确定的,因此这里的数据应该是填在带方框限定大小的表格里的,所以是非常好分割的。不过这种方法的问题是,对于那些将数字重要特征写出格子,甚至写到旁边格子的数据,这种方式该如何识别呢?也许这就是这种方法误差的主要来源?),并使用神经网络分别识别每个分割出来的部分,并对所有结果进行对比,选取得分最高,即置信度最好的那一组作为分割结果。

明白了这点后,我们就开始着手解决第二个问题。

我们将设计一个三层的神经网络(可能一个更为复杂的神经网络能够更好地解决这个问题,但在问题的开始,我们还是简单一些):
neural networks and deep learning-chapter1-2
由于每个数字是由一个2828的栅格构成的,所以输入神经元共有784=2828个,其中每个输入神经元的数值由其表示的栅格的灰度(greyscale)表示,灰度表示栅格的深浅,0为纯白,1为纯黑,中间数值为深浅不同的灰色。

第二层是隐藏层,它有15个神经元组成。

第三层为输出层,共有十个神经元,每个神经元代表一个数字。当输入一个数字后,哪个神经元被**,就代表这个数字是那个神经元所对应的数字。

这里有一个问题是,为什么我们需要十个神经元来表示结果,而不是使用2进制,因为2进制只需要4个神经元就可以表示0到9。实际上,在有些算法里是可以这样的,但由于我们设计的这个神经网络的原理是每个隐藏层的神经元都只检测一个形状是否存在,例如:
neural networks and deep learning-chapter1-2
为了达到这个目的,它可以将这个形状所包含的栅格对应的神经元的输入给予很大的权重,而给予其它输入很小的权重。同理,假设第二、三、四个神经元的作用是检测以下形状是否存在:
neural networks and deep learning-chapter1-2
而这四个形状组合起来就构成了数字0:
neural networks and deep learning-chapter1-2
在这个神经网络里,若前四个隐藏神经元被**,那么第一个输出神经元就可以判断出输入的数字是0。但如果变成由四个输出神经元构成的神经网络,那么第一个输出神经元的任务就变成了判断这个数字的最高位是什么。而将数字的形状和数字的最高位相联系可不是一件容易的事情。

课后习题:

There is a way of determining the bitwise representation of a digit by adding an extra layer to the three-layer network above. The extra layer converts the output from the previous layer into a binary representation, as illustrated in the figure below. Find a set of weights and biases for the new output layer. Assume that the first 3 layers of neurons are such that the correct output in the third layer (i.e., the old output layer) has activation at least 0.99, and incorrect outputs have activation less than 0.01.
neural networks and deep learning-chapter1-2
1:
首先明确,第三层自上到下代表的数字为0至9,第四层从上到下分别代表四位二进制数字的最高位至最低位,并设输出神经元的偏置设为0.99。

那么第一个输出神经元只有在8和9时输出1,那么就将对应8和9的第三层神经元的权重置为1,其余置为0;

同理,第二个输出神经元只有在4、5、6、7时输出1;第三个输出神经元只有在2、3、6、7时输出1;第四个输出神经元只会在1、3、5、7、9时输出1。只要将对应的第三层的神经元的权重置为1,其余置为0即可。这有点像做决策时,决策者得到多个维度的信息并进行组合,最终得到总体的描述。

我不明白这里的activation是什么意思,或许是说判别的正确率高于99%?如果我的理解是正确的,那么如果考虑到误差的话,上述设计方式就不合适了,一个可能的改进方式是:设计一种新的编码方式,将每个输出神经元考虑的第三层神经元的数量尽量接近,从而尽可能地减少误判的影响(如果在分配第三层神经元时考虑数字的形状,将形状差异小的数字分到同一个输出神经元内也许效果会更好些?)。且当出现的编码不存在与编码表时报错。