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

2018年02月23日 由 xiaoshan.xiang 发表 691961 0
在Google Sheet中创建深度神经网络

深度卷积神经网络并不像听起来的那样令人生畏。我将向你们展示我在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。该数据集中的图像均为28x28像素。每个像素被表示为0(无油墨)和1(最大油墨)之间的数字。这是一个典型数据集,因为它足够小,并且能够快速真实的显示机器学习的复杂性。模型的工作是确定图像的编号。每幅图像都是0-9中的一个数字。


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

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


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


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


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


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



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


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


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


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



CNN的背后的直觉


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


卷积


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


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


这就是卷积的作用。


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


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


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


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


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

深度


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


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


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


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


神经网络


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


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


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


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


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



总结


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


资源


为了了解更多,我推荐以下资源:


交互式卷积——一个关于卷积的交互式教程。只有卷积部分,不包括神经网络部分。


地址:http://setosa.io/ev/image-kernels/


开发人员实用性深度学习——这是我从 Fast.AI学到的。它是在线的,并且完全免费。


地址:http://course.fast.ai/


CNN基础视频——这是Jeremy Howard (FastAI创始人)录制的视频,时长20分钟。


视频地址:https://www.usfca.edu/data-institute/certificates/deep-learning-part-one
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
写评论取消
回复取消