在Google表格中构建深度神经网络
深度卷积神经网络并不像听起来那么令人害怕,本文将在Google表格中实现的来证明这一点。复制它(使用左上角的文件→制作复制选项),然后你就可以随意使用它来查看不同的杠杆如何影响模型的预测。
本文的其余部分将是一个简短的介绍,以了解卷积神经网络(CNN)背后的更多资源以及信息。
在继续之前,可能要向FastAI发出感谢,因为最近完成的精彩的深度学习过程,所有的灵感和信誉都归功于他们。杰出的导师杰里米·霍华德(Jeremy Howard)和他的联合创始人雷切尔·托马斯(Rachel Thomas)展示了在Excel中做CNN的想法。但据悉,电子表格并没有在网上提供,也似乎没有完全完成网络。本文对自己的工作做了一个小小的扩展,并将其放在Google表格中,这样每个人都可以轻松地进行操作。
如何构建它?
作者在MNIST数据集上训练了一个非常简单的CNN,这是一组手写数字的黑白图像。每个图像是28x28像素,每个像素被表示为0(无墨)和1(最大墨)之间的数字。这是一个经典的数据集,因为它足够小而且速度很快,但足以显示机器学习的复杂性。模型的工作则是确定图像的数量。每张图片将总是只有0-9中的一个数字。
这儿使用的是名为Keras的流行深度学习库(请参阅此处的代码)训练模型,然后将训练后的权重从模型放入表格中。训练的权重只是数字,把它放入表格,这意味着实际的工作就是从模型复制和粘贴一堆数字到表格。最后一步是添加公式来复制模型所做的工作,这只是常规的旧的乘法和加法。重申一下:复制深度学习模型预测的数学模型在乘法和加法处都停止了。
在模型的每一层中都有权重(又名“参数”)。权重是机器学习模型自动学习的,这个模型有大约1000个砝码。更复杂的模型可以容易地拥有数亿计。你可以在下面看到这个模型的全部:
何时使用卷积神经网络?
你可以使用CNN来查找连续数据中的模式,在这些模式中,存在非常积极的模式,但是很难将这些模式转化为单词,或者通过简单的规则来提取它们。 CNN的假设顺序很重要。
例如,分类图片是CNN的主要用例,因为像素在逻辑上是连续的,并且任何人都清楚有很多图案。然而,试着把一只猫和一只吉娃娃分开来,你就会明白为什么CNN是有用的。
另一方面,如果你在两支球队之间获得了现在的棒球数据,而你想预测胜利者,那么CNN将是一个奇怪的选择。因为你拥有的数据(例如胜利,损失或团队击球平均数)不是固有的顺序。顺序并不重要,我们已经提取了我们认为有用的模式。所以CNN不会有帮助。
直视CNN的背后
为了加深理解,我们把深层卷积神经网络分解成“深层”、“卷积”和“神经网络”的组成部分。
卷积
想象一下,你是盲人。但是你的工作是弄清楚这个手写图片是什么。你可以和看到图像的人交谈,但他们不知道是什么号码。所以你可以问他们很简单的问题。那么,你能做什么?
你可以采取的一种方法是,问一下这样的问题:“从右到左的对角线?”。如果有足够的问题,你可以猜测它是一个7,还是2,或者其他什么数字。
直观地说,这就是卷积正在做的事情。这台计算机也像是盲人,所以它做了能做的,并问了许多小问题。
要问这些问题,图像中的每个像素都会运行一个函数产生一个相应的像素,它可以回答这些小问题之一。卷积使用过滤器来查找模式。例如,请注意上面的过滤器(屏幕截图中的第2号)在截图中,右侧更红,而左侧更红。该过滤器将基本上会查找左边缘。
它可能并不明显,为什么它会找到左边缘,但通过电子表格,你会发现这就是数学计算的结果。过滤器可以找到像自己一样的东西。而CNN将经常使用数百个过滤器,因此你可以为每个像素获得很多“分数”。
深层
好吧,关于边缘的问题很酷,那么,更复杂的形状如何?因为现在我们有了一个“左边缘”、“顶部边缘”和其他简单的图像“过滤器”,我们可以添加另一层,并在所有以前的过滤器上运行卷积,并组合它们!所以将50/50的左边缘和上边缘结合起来可以得到一个圆角。
第二次卷积采用来自先前卷积层的相应像素,并将它们各自乘以它自己的滤波器。就像以前一样,我们对结果进行求和,并为第二个卷积层生成一个新的相应像素。
严肃的CNN将会有很多层次,这使得模型可以建立越来越抽象和复杂的形状。即使只有4层或5层,你的模型也可以开始寻找面部、动物和各种有意义的形状。
神经网络
现在你可能会问自己:“所有这些都很棒,但是想出所有正确的过滤器听起来真是太乏味了。”“那到底怎么样?我如何将这些过滤器的所有答案组合成有用的东西?“
首先,认识到高层次的CNN真的有两个“部分”是有用的。第一部分,卷积,在我们的图像数据中找到有用的特征。第二部分,电子表格末尾的“密集”层(如此命名,因为有很多权重与每个神经元绑定),对我们进行分类。一旦你拥有了这些特征,密集的图层就不会像运行一堆线性回归一样,并且将它们会组合成一个可能的数字的分数。
矩阵1是卷积的输出。然后矩阵1中的每个像素乘以矩阵2中的相应数字。总和为3,再用绿色的框重复这个过程,你最终会得到8个输出,或深度学习术语中的“神经元”。
弄清楚用于过滤器和密集层的所有权重过程十分繁杂。幸运的是,自动计算这些权重就是NN的全部意义,所以我们不需要担心这一点。但是,如果你好奇,你应该“反向传播”。
总结
每个CNN大概有两部分。卷积一开始在图像中找到有用的特征,最后的图层通常称为“密集”层,它根据这些特征对事物进行分类。
为了得到真实的感觉,推荐你用电子表格,从头到尾跟踪一个像素。与过滤器混合,看看会发生什么。
注意
训练CNN所需的数学包括微积分,所以它可以自动调整权重。 但是,一旦模型被训练,它实际上只需要乘法和加法来做预测。 在实践中,微积分是由你正在使用的任意深度学习库来处理的。