在Google Sheet中创建深度神经网络

AiTechYun

编辑:xiaoshan

深度卷积神经网络并不像听起来的那样令人生畏。我将向你们展示我在Google Sheet中做的一个实现。复制它,你可以尝试一下,看看不同的因素如何影响模型的预测。

Google Sheet实现地址:https://docs.google.com/spreadsheets/d/1SwfVctd4TjdN2S8BL09ktpQN_41sARYzD3NEHyr-8Z0/edit?usp=sharing

本文简短的介绍了卷积神经网络(CNN),并推荐了一些参考资料。

我最近完成了FastAI的精彩的深度学习课程,所有的灵感和功劳都来自于此。 Jeremy Howard和他的共同创始人Rachel Thomas向全班同学展示了用Excel做CNN的想法。但据我所知,电子表格在网上是不可用的,而且似乎也没有完全完成网络。我对他们的工作做了一个小小的扩展,把它放在Google Sheet上,这样每个人都可以尝试一下。

如何创建?

我在MNIST数据集(一组手写数字的黑白图像)中训练了一个非常简单的CNN。该数据集中的图像均为28×28像素。每个像素被表示为0(无油墨)和1(最大油墨)之间的数字。这是一个典型数据集,因为它足够小,并且能够快速真实的显示机器学习的复杂性。模型的工作是确定图像的编号。每幅图像都是0-9中的一个数字。

MNIST示例图像。28 x28像素。注意:我在Sheet中添加了条件格式,所以墨水显示为红色。

我使用Keras深度学习库来训练这个模型(参见这里的代码),然后将训练后的权值从模型中输入到Sheet中。训练过的权值只是数字。要把它放进Sheet中,这意味着把模型中的一堆数字复制粘贴到Sheet中。最后一步是添加公式来复制模型所做的事情,公式只是常规的乘法和加法。重申一下:复制一个深度学习模型的数学方法是在乘法和加法的基础上进行的。

代码地址:https://gist.github.com/blakewest/5aa2a93beac46f3848a32dc7c32ffb23

在模型的每一层中都有权值(即“参数”)。任何机器学习模型都会自动地学习权值。这个模型大约有1000个权值。更复杂的模型可以很容易地拥有数亿个权值。你可以在下面看到该模型的1000个权值:

什么时候使用卷积神经网络?

使用CNN来发现序列数据中的模式是非常积极有效的方式,但是你很难将这些模式转换成文字,或者通过简单的规则来提取它们。CNN假设排序很重要

例如,分类图像是CNN的一个主要用例,因为像素在逻辑上是连续的,而且很多模式是清晰明了的。你可以尝试区分猫和吉娃娃,就会知道为什么CNN有用的了。

另一方面,如果你获得了当前两支球队之间的棒球数据,并且想预测出获胜者,CNN并不会给你任何帮助。你的数据(如获胜次数、失败次数或团队击球平均数)不是固定顺序。排序并不重要,我们已经提取了有用的模式。所以CNN不会有任何帮助。

CNN的背后的直觉

为了方便理解,我们把度卷积神经网络分解成“深度”、“卷积”和“神经网络”三个部分。

卷积

假如你是盲人,但你的任务是找出手写图像上的数字是多少。你可以和看到图像的人交谈,但是他们不知道数字是什么。你可以问他们一些简单的问题。你有什么办法呢?

你可以采取的一种方法是问这样的问题:“图像顶部是否有直线?”“从右到左的对角线?”诸如此类的问题,你可以很好地猜出它是7或者2,等等。

这就是卷积的作用。

方框1乘以方框2,求和结果为方框3。这就是一个卷积。

图像中的每个像素都通过一个产生相应像素的函数(即“卷积”)来运行。卷积使用过滤器来寻找模式。例如,注意上面的过滤器(在第二个截图)中,右边界的红色更深,左边界的红色更浅。这个过滤器基本上会更倾向于选择左边界。

你可能不太清除为什么它会选择左边界,但是通过电子表格,你会发现,这是数学计算的结果。过滤器会找到看起来像他们自己的东西。CNN通常会使用数百个过滤器,所以每个像素都有很多“分数”,比如左边界分数、顶部边界分数、对角线、角点等等。

电子表格地址:https://docs.google.com/spreadsheets/d/1SwfVctd4TjdN2S8BL09ktpQN_41sARYzD3NEHyr-8Z0/edit?usp=sharing

深度

关于边界的问题已经解决了,但是更复杂的形状如何解决呢?这就是“深度”多层结构的由来。因为现在我们有了“左边界”、“顶部边界”和其他简单的图像“过滤器”,我们可以添加另一层,并在以前所有的过滤器上运行卷积,并组合它们。将50/50的左边界和顶部边界组合在一起,就可以得到一个左圆角。

第二个卷积从以前的卷积层获取对应的像素,并通过它自己的过滤器相乘。就像以前一样,我们对结果求和,为第二个卷积层产生一个新的对应像素。

严谨的CNN将会有许多层,这使得模型能够建立越来越抽象和复杂的形状。即使只有4到5层,你的模型也能完成寻找面部、动物和各种有意义的形状的任务。

神经网络

现在你可能会说,“想法很好,但是想出所有正确的过滤器真的很乏味。”“最后我如何组合这些过滤器的所有答案?”

首先,我们很有必要意识到,我们的CNN实际上有两个“部分”。第一部分,卷积,在我们的图像数据中找到有用的特征。第二部分,“密集”层(之所以这么命名是因为每个神经元都有很多权值)在电子表格的末尾进行分类。一旦你有了这些特征,致密层就不会像运行一堆线性回归那样,而是把它们合并成一个可能的数字分数。最高分是模型的预测结果。

矩阵1是卷积的输出。矩阵1中的每个像素都乘以矩阵2中的对应数字,结果为3。再利用绿色方框重复这个过程。最终会得到8个输出,也叫做“神经元”。

找出所有合适的权值来使用过滤器和密集的层可能会使你烦躁。但计算权值是神经网络的意义所在,所以我们不需要担心。但如果你好奇,你可以尝试一下“反向传播算法”。

总结

每个CNN大概分为两部分。卷积,用来在开始时找到图像中的有用特征:在末端的层,通常被称为“密集”层,它根据这些特征对事物进行分类。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180223B0J9MU00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券