小白学数据:Google可视化体验平台

小白学数据:Google可视化体验平台

此猫简介:姓名滴滴,性别男,国籍美国。性格温顺,宅死,喜欢陪主人上班和学数据,主人是大数据文摘非专栏主编Aileen,据主人介绍,滴滴很愿意为大数据文摘“小白学数据”系列代言

小白学数据:Google可视化体验平台

大数据文摘作品,转载具体要求见文末

编译整合:Nancyzxll 审稿:张远园 Aileen

“小白学数据”系列是大数据文摘新的尝试(文末相关文章推荐可以看到其他小白学数据系列往期精彩文章),欢迎大家给我们提出宝贵意见,更欢迎给我们推荐文章和投稿,给我们后台留言即可,谢谢。

小福利:大数据文摘已经成立学生群,专为热爱数据的学生准备,在大数据文摘后台回复“学生”填表进群。

◆ ◆ ◆

引言

小白学数据系列的读者们,大家好久不见。谷歌最近推出了一个神经网络可视化教学平台“游乐场”Tensorflow Playground。大家通过浏览器就可以玩玩神经网络了!是不是很神奇?跟着小白一起试玩之后,一定会感觉,“啊哈,这就是神经网络啊,我也明白了”。

那么,现在就把网址发给大家,http://playground.tensorflow.org,整体来看它是长这个样子的:

小白学数据:Google可视化体验平台

让我们一起来了解一下这个神经网络游乐场吧!

几个基本问题

小白:我有点忘了什么是神经网络了,能不能再帮我复习一下?

答:好吧。想回顾以往小白学数据系列的同学可以在文末的历史文章回顾中找到小白学神经网络的基础篇。简单来说神经网络是通过计算机程序从数据中进行学习的一项技术。它是基于我们目前我们对人脑工作方式的理解而产生的(注意,这里说是基于,是因为人脑是一个非常复杂的神经网络,而人工神经网络实际上是我们对人脑工作过程的理解的一种非常简化的表示)。首先,我们需要创建一堆具有互联系的神经元,这些神经元可以互相传送信息。然后,我们想用这个网络去解决一个问题。我们并不指望网络一下子就找到问题的正确答案,它可以不断的去自我调适,每一次可以增强神经元之间导致输出正确的连接,并削弱那些导致输出不正确的连接。更多关于神经网络的细节介绍,请参考Michael Nielsen的神经网络和深度学习(http://neuralnetworksanddeeplearning.com/index.html)。如果想了解神经网络更加技术性的介绍,请参考Ian Goodfellow, Yoshua Bengio和Aaron Courville著的深度学习http://www.deeplearningbook.org/。

小白:什么叫神经元呀?

答:我们来看一个最最简化的图片。本质上来说,它是这个样子的。

小白学数据:Google可视化体验平台

是不是够简单粗暴?里面那个大圆圈圈就是一个神经元,其中的f(·),我们称之为激活函数。它的输入,例如上图,就是所有输入xi乘以相应权重wji的总和。

小白:什么叫做激活函数呀?

答:激活函数嘛,顾名思义,就是激活那个神经元的函数。再说清楚一点,例如一个阶跃函数(如下图的例子)就可以是一个激活函数,一旦它的输入到达一个值,它的输出就蹦到上面那个值去,实现“激活”,完成量变到质变的过程。

小白学数据:Google可视化体验平台

小白:那网络“不断的去自我调适”,具体是怎么实现的呢?

答:我们再看一张稍微复杂一点的图。看到里面那个“Error”了吗?这就是一个反向传播的过程。我们说网络的“自我调适”,就是指通过这一次的输出和正确输出的差值,来矫正下一次的输入。那么如何矫正呢?就是用的梯度下降算法。梯度下降,你可以这么理解,在你面前有3个滑梯,一个30度,一个60度,最后一个是90度。如果想最快到达地面,那一定会选择90度的那个滑梯。这个选择的过程,就可以称为梯度下降算法。

小白学数据:Google可视化体验平台

小白:酷,那我可以按自己的想法建网络吗?

答:当然可以了!在Tensorflow Playground这个平台上我们可以选择不同的参数和设计,神经网络训练的每一步迭代将会用可视化显示出来。谷歌已经把开源代码放在GitHub上了,就是希望能够让入门和学习神经网络变得更加容易。拉到网页的最上面一行,我们会看到有一个参数选项列表。现在对我们对这些选项一一进行解释:

小白学数据:Google可视化体验平台

Activation是激活函数,定义了每一个神经元的输出,Google提供了四种选择。用户可以一一尝试并且通过可视化清楚的看懂他们的区别。

Learning Rate是学习率,决定每一步学习的步长。这个和前面的问题里我们谈到梯度学习有关。运用梯度下降算法进行优化时,在梯度项前会乘以一个系数,这个系数就叫学习率。学习率如果太小函数收敛很慢,太大则可能无法找到极值,甚至函数无法收敛。

小白:打断一下,那我们该如何选择学习率呢?

答:嗯,好问题!为了解释这个问题,那我们还要介绍一个名词叫Loss。Loss翻译过来是损失。简单的说就是预测值和实际值之间的差别。损失越小,表示模型预测结果越准确,这种模型就越好。Playground的右上角可以直观地看到每一次迭代之后的Training Loss和Testing Loss的走向。最理想的情况是两个Loss都逐渐变小,说明模型越来越准确。如果Training Loss减小而Testing Loss增大,可能我们就过拟合(Overfit)了。对于不同的问题,会有合适的计算Loss的方法,也就是你可能经常听到的损失函数(Loss function),也叫代价函数(Cost function)。

回到学习率的选择问题,大概就只有通过不断尝试了。一个在实践中选择学习率的办法是先把学习速率设置为0.01,然后观察Testing and Training Loss 的走向,如果Loss一直在变小,那你可以逐步地调大学习速率。如果Loss在变大或者走向多变,那就得减小学习速率。经过一番尝试之后,你可以大概确定学习速率的合适的值。从Playground平台的右边的OUTPUT栏可以清楚直观的看到每一步迭代后的Loss趋势图。

小白学数据:Google可视化体验平台

小白:我懂啦!这个平台可以模拟什么样的问题呢?

答:回来看到参数设定部分。

Problem type包含神经网络能够解决的两类问题:

1)分类(Classification),离散化的问题。在这里可以直观的看出,我们的问题是建立一个模型成功区分橙色和蓝色的点

小白学数据:Google可视化体验平台

2)回归(Regression),连续性的问题。

小白学数据:Google可视化体验平台

上面左边的图是Google提供的为分类问题的4种选择实例,右图为回归问题的2种选择。

页面的左边还有一些参数可以设置:

Ratio of training to test data指在总数据集中,拿出多少作为训练数据集。训练数据指用这些数据来调适网络,测试数据指用这些数据来验证网络的效果如何。训练数据+测试数据=总数据量),设置Noise可以选择噪音数据多少以及每次训练使用的数据量。

Noise可以设定是否加入噪音。

Batch size指在每一次迭代中,计算多少个数据。

下面还有一个”REGENERATE”按钮,每按下这个按钮,Playground就会重新按照你选择的参数生成随机数据集。

小白学数据:Google可视化体验平台

小白:所以说我们只能在这些提供的实验和数据中选择一个特定的问题,但是参数我们可以自由调节。

答:是的。接下来,在中间这一栏,我们可以选择这个神经网络中自己想要输入的特征(feature)和层数,以及每层有几个神经元。

小白学数据:Google可视化体验平台

小白:能不能具体说一下FEATURES(特征)是什么意思?

答:这是指的在训练网络时,是否需要给网络输入特征。举个很简单的例子,如果你在描述一个人的时候,你会用一些最能够区分他和其他人的特征来描述这个人。我们在这里说的特征,也是一个意思。即我们找到的,能够最大限度描述输入数据特性的那些东西(“东西”可以用函数或者参数值来表示。)现在回去看截屏中可选择的FEATURES,这些数据都为二维数据,X1代表横轴坐标值,X2代表纵轴坐标值,知道这个之后,其余的特征值就很容易懂啦。

小白学数据:Google可视化体验平台

根据不同的问题,我们需要输入不同的特征。如上图这种复杂的分类问题,仅仅X1 , X2, X12, X21这样单一维度的特征可能不足以做出好的模型,这时候我们就会考虑X1X2这样的交叉特征了。咱们也可以限制特征,让神经网络自己通过不断的迭代,修改神经元的权重,从而自己“学习”到有用的特征。在实际应用中,很多图像识别问题已经可以做到不需要人为进行特征提取,直接对原始图片进行操作。

小白:网络中里显示的颜色代表什么?

答:橙色代表负值,蓝色代表正值。在这里,我们用-1(橙色)或者+1(蓝色)来初始化数据(这些数据用小圆圈表示)。在隐含层(HIDDEN LAYERS)中,层与层之间的线条颜色由连接神经元之间的权重决定。蓝色代表权重为正,橙色代表权重为负。位于连接线右边的神经元的输入值,由位于连接线左边神经元的输出值及相应连接线的权重、以及激活函数来决定。在输出层(OUTPUT),点的颜色由其所具有的数值决定。在输出层中的背景颜色代表针对某一个特定区域,网络预测出来的值为多少。背景颜色的强度代表预测的可信度。

小白:这个平台能做好多事儿啊!他们使用的是什么程序库呢?

我可能想更加深入的学习一下。

答:这个库是谷歌自己开发的,专门用于这个可视化教学的小程序库(链接在这里:https://github.com/tensorflow/playground/blob/master/nn.ts)。如果想做实际应用的话,可以考虑使用谷歌开发的TensorFlow开源库(https://www.tensorflow.org/)。

相关推荐