难以理解 Caffe MNIST 示例

Hard to understand Caffe MNIST example

在此处完成 Caffe 教程后:http://caffe.berkeleyvision.org/gathered/examples/mnist.html

我真的很困惑本教程中使用的不同(高效)模型,定义如下:https://github.com/BVLC/caffe/blob/master/examples/mnist/lenet_train_test.prototxt

据我了解,Caffe 中的卷积层只是简单地计算每个输入的 Wx+b 之和,而不应用任何激活函数。如果我们想添加激活函数,我们应该在该卷积层的正下方添加另一个层,如 Sigmoid、Tanh 或 Relu 层。我在 Internet 上阅读的任何 paper/tutorial 都将激活函数应用于神经元单元。

这给我留下了一个很大的问号,因为我们只能看到模型中交错的卷积层和池化层。希望有人能给我一个解释。

作为站点注释,我的另一个疑问是此求解器中的 max_iter: https://github.com/BVLC/caffe/blob/master/examples/mnist/lenet_solver.prototxt

我们有 60.000 张图像用于训练,10.000 张图像用于测试。那么为什么这里的 max_iter 只有 10.000(而且它仍然可以获得 > 99% 的准确率)? Caffe 在每次迭代中做了什么? 实际上,我不太确定准确率是否是总正确 prediction/test 大小。

我对这个例子感到非常惊讶,因为我还没有找到任何例子,框架可以在很短的时间内达到如此高的准确率(仅 5 分钟即可获得 >99% 的准确率)。因此,我怀疑应该是我误解了什么。

谢谢。

Caffe 使用批处理。 max_iter 是 10,000,因为 batch_size 是 64。No of epochs = (batch_size x max_iter)/No of train samples。所以epochs的个数接近10个。准确率是在test data上计算的。是的,模型的准确率确实 >99%,因为数据集不是很复杂。

关于缺少激活层的问题,你是对的。本教程中的模型缺少激活层。这似乎是对教程的疏忽。对于真正的 LeNet-5 模型,卷积层之后应该有激活函数。对于 MNIST,该模型在没有额外激活层的情况下仍然运行得非常好。

作为参考,Le Cun 在 2001 年的论文中指出:

As in classical neural networks, units in layers up to F6 compute a dot product between their input vector and their weight vector, to which a bias is added. This weighted sum, denoted a_i, for unit i, is then passed through a sigmoid squashing function to produce the state of unit i ...

F6是两个全连接层之间的"blob"。因此,第一个完全连接的层应该应用激活函数(本教程使用 ReLU 激活函数而不是 sigmoid)。

MNIST 是神经网络的 hello world 示例。以今天的标准来看,这是非常简单的。单个全连接层可以解决问题,准确率约为 92%。 Lenet-5 比这个例子有了很大的改进。