理论:单层神经网络
MNIST数据集中的手写数字是28×28像素的灰度图像。
把它们分类的最简单的方法是使用28x28=784像素作为1层神经网络的输入。
神经网络中的每个“神经元”都对它的所有输入进行加权和,然后加上一个称为“偏置”的常数,再通过一些非线性激活函数来反馈结果。
这里我们设计了一个有10个输出神经元的单层神经网络,因为我们要把数字分成10类(0到9)。
对于分类问题,效果比较好的激活函数是softmax函数。对一个向量应用softmax是通过取每个元素的指数,然后归一化向量(使用任何范数,例如向量的普通欧几里德长度)来完成的。
为什么“SoftMax”被称为SoftMax?
指数是一个急剧增长的函数。它会增加向量元素之间的差异。
然后,当您对向量进行规范化时,控制范数的最大元素将被规范化为接近1的值,而其他元素将最终除以大值并规范化为接近0的值。所得到的向量清楚地显示了它的最大元素“max”,但是保留了其值的原始相对顺序,因此是“soft”。
现在我们将使用矩阵乘法将这个单层神经元的行为总结为一个简单的公式。
让我们直接针对100幅图像的“小批量”作为输入,生成100个预测(10元素向量)作为输出。
使用权重矩阵W中的第一列权重,我们计算第一张图像的所有像素的加权和。
这个和对应于第一个神经元。
使用第二列权重,我们对第二神经元执行同样的操作,直到第10个神经元。
然后我们可以对剩下的99幅图像重复操作。
如果我们称X为包含100幅图像的矩阵,那么在100幅图像上计算的10个神经元的所有加权和就是X·W(矩阵相乘)。
每个神经元现在必须加上它的偏差(常数)。
由于我们有10个神经元,所以会有10个偏置常数。
我们将这个向量称为偏置b。
它必须加到之前计算的矩阵的每一行中。我们将用一个简单的加号来写这个。
“Broadcasting”是Python及其科学计算库numpy中使用的标准技巧。
它扩展了具有不相容维度的矩阵上的正常操作的工作方式。
“Broadcasting add”的意思是“如果您添加了两个矩阵,但是由于它们的维数不兼容,所以无法添加,请尽可能地复制小的矩阵以使其工作。”
顺便问一下,什么是“tensor”张量?
“tensor张量”就像一个矩阵,但具有任意数量的维数。一维张量是向量。二维tensor张量是一个矩阵。然后可以有3, 4, 5个或更多个维度的tensor张量。