1.动机
2015年11月谷歌开源TensorFlow的时候,我非常兴奋,知道是时候开始学习了。听起来不太戏剧化,但对我来说,这实际上有点像普罗米修斯从机器学习的奥林匹斯山把火传给人类。在我的脑海里浮现出这样一个想法:当谷歌研究人员发布他们的Map Reduce论文时,整个大数据领域和Hadoop等技术都得到了大大的加速。这一次,这不是一篇论文,而是经过多年的发展,他们在内部使用的软件。
因此,我开始尽我所能地学习这个主题的基础知识,并意识到需要为在这个领域没有经验的人提供更温和的资源。这是我的尝试。
2. 出发
让我们从一个简单的例子开始。假设你在帮助一个想买房的朋友。她以40万美元的价格买了一栋2000平方英尺(185米)的房子。这个价格合适吗?
没有参照系是不容易判断的。所以你问你的朋友谁在同一个社区买了房子,你最终得到三个数据:
![v2-d906d2d8f2a9b890bcdb9baa086b89f6_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/0571879018cf97b5ca95a63c472c8d61.png)
就我个人而言,我的第一反应是得到每平方英尺180美元的平均价格。
欢迎来到你的第一个神经网络!现在它还没有达到Siri的水平,但是现在你知道了基本的构建块。看起来是这样的:
![v2-4767a473c73bbf3b9992552a05ef3c46_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/e0c12f1f4952613401aba569dc6a4f9d.jpeg)
像这样的图表向我们展示了网络的结构以及它是如何计算预测的。计算从左侧的输入节点开始。输入值向右流动。它乘以权重,结果就是我们的输出。
把2000平方英尺乘以180就得到36万美元。预测的计算是简单的乘法运算。但在那之前,我们需要考虑我们将要乘以的权重。这里我们从一个平均值开始,稍后我们将研究更好的算法,它可以随着我们得到更多的输入和更复杂的模型而扩展。找到权重是我们的“训练”阶段。所以,每当你听说有人“训练”神经网络时,就意味着找到我们用来计算预测的权重。
![v2-7cd00ea47a3e6d791277cad5355448a4_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/4543369a42cfc05613550739f1d513c0.png)
这是一种预测。这是一个简单的预测模型,它接受一个输入,进行一个计算,并给出一个输出(因为输出可以是连续值,所以我们的technical名称是“回归模型”)
让我们将这个过程形象化(为了简单起见,让我们将价格单位从1美元切换到1000美元)。现在我们的重量是0.180而不是180):
![v2-84735c350ca7110af12f9362229da310_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/082ad264b0c04ad0f3d749d00bdb7ca1.png)
3. 更快,更好,更快,更强
我们能做得比根据我们数据点的平均值来估计价格更好吗?让我们试试。让我们先来定义在这种情况下做得更好意味着什么。如果将我们的模型应用到我们拥有的三个数据点上,它可以做到多好?
![v2-61bd69509bf57ab82175b8e38808810b_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/f6f78715c8fba34a28bb01f150953464.jpeg)
有点黄了。黄色不好。黄色表示错误。我们想尽量缩小黄色。
![v2-64b8817ba7408bc2adcfca1ae4a4f83b_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/0c849dba5cae30ab62d0b8d38d273e5f.png)
在这里我们可以看到实际价格,预测价格,以及它们之间的差异。然后我们需要平均这些差异,这样我们就有了一个数字,告诉我们这个预测模型有多大的误差。问题是,第三行的值是-63。如果我们想用预测值和价格之间的差异作为误差度量标准,就必须处理这个负值。这就是为什么我们要引入一个额外的列来显示误差平方,从而去掉负值。
这就是我们对“做得更好”的定义——更好的模型就是误差更小的模型。误差被测量为我们数据集中每个点的平均误差。对于每个点,通过实际值和预测值之间的差值来衡量误差,并提高到2的幂次方。这称为均方误差(mse)。以它为指导来训练我们的模型并使之成为我们的损失函数(也就是成本函数)。
既然我们已经定义了一个更好的模型的度量标准,让我们用更多的权重值进行实验,并将它们与我们的平均选择进行比较:
![v2-4fe028b9cc2974fb025b5908946cb4d4_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/600f588e8f25c5023d29d8f45edb6717.jpeg)
我们的线可以更好地近似我们的值,现在我们将这个b值添加到公式中。在这种情况下,我们称之为“bias”。这使得我们的神经网络看起来像这样:
![v2-8eb49970ea10db7c51be5fac102335e4_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/f7f02077fe63938ad7a6fa6b0a37f5c9.jpeg)
我们可以这样来概括,一个神经网络有一个输入和一个输出(spoiler warning:没有隐藏层)如下所示:
![v2-78cce6c05951bca25bf7c315eb29655b_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/902290fb074adb622e278bc53999e4f9.jpeg)
在这个图中,W和b是我们在训练过程中发现的值。X是我们插入公式中的输入(在我们的例子中,面积以平方英尺为单位)。Y是预测价格。
计算预测现在使用以下公式:
![v2-4cb7ac097723e256cd4024d0d0aeaa1f_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/20951c9dde590e1458a21a6a77b98c19.png)
因此,我们当前的模型通过插入房屋面积x来计算预测,在这个公式中:
![v2-b4c91e1f80768f80e837afa1b38d58a1_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/670878d3e3178044f1b0856ac56bd205.png)
4. 训练你的Dragon
你试试训练我们的玩具神经网络怎么样?通过调整权重和偏差刻度盘来最小化损失函数。你能得到低于799的误差值吗?
![v2-aedc2560dd0fdd3618bb94c7650ccc32_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/5c56e89720fdb8679ec391348f50889f.jpeg)
5. 自动化
恭喜你手动训练了你的第一个神经网络!让我们看看如何自动化这个训练过程。
下面是另一个带有autopilot-like功能的例子。这些是GD步骤按钮。他们使用一种称为“梯度下降”的算法,试图逐步走向正确的权重和偏差值,以最小化损失函数。
![v2-e9ca91c6449ab084f980a16e1dd52a83_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/6e4d1e7962d1b831519337997930c625.jpeg)
这两个新的图表可以帮助在处理模型的参数(权重和偏差)时跟踪错误值。跟踪错误是很重要的,因为训练过程都是为了尽可能减少这种误差。
梯度下降法知道它的下一步应该在哪里?知道我们要最小化的函数(我们的损失函数,所有数据点的的平均值),并且知道它当前输入(当前的权重和偏差),损失函数的导数告诉我们为了最小化误差,向哪个方向推w和b。
6. 另外两个例子
房子的大小是决定房价的唯一变量吗?显然还有很多其它因素。我们再加一个变量,看看如何调整我们的神经网络。
假设你的朋友做了更多的研究,发现了更多的数据点。她还发现每间房子有多少个浴室:
![v2-f83b6b8427e1617bc1acf22e400e2ebc_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/470109553e4f755a5196ffdec9b53699.jpeg)
带有两个变量的网络如下:
![v2-84cfa0cd578923555d608f6e61c0e716_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/865008dc12af3b91b4b8d531ffa47064.jpeg)
我们现在必须找到两个权重(每个输入一个)和一个偏差来创建新模型。
计算Y如下所示:
![v2-3470baaf7a5850b3cb66d6ec1f325ea9_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/db388fc1caa75f3dffb80ab193aadb21.png)
但是我们怎么找到w1和w2呢?这比我们只需要担心一个权重的时候要复杂一些。有一个额外的浴室会在多大程度上改变我们对房子价值的预测?
试着找出正确的权重和偏差。您将从这里开始看到,随着输入变量的增加,模型更复杂。我们开始失去创建简单2d形状的能力,这些形状可以让我们一眼就看到模型。相反,当我们调整模型参数时,我们必须主要依赖于误差值是如何变化的。
![v2-52c749d32030ce02dad4683094ea0082_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/d35d4b38806c0dfff0cece0e14ad977b.jpeg)
直接使用梯度下降即可。
7. 特征
现在我们已经看了具有一个和两个特征的神经网络,我们还可以想办法添加额外的特征,并使用它们来计算得到预测。权重的数量将继续增长,我们的梯度下降的实现将不得不在添加每个特征时进行调整,以便它可以更新与新特征相关联的新权重。
这里需要注意的是,我们不会盲目地向网络提供我们所知道的关于我们的examples的所有信息。我们必须有选择性地选择哪些特性提供给模型。特征选择/处理是一个完整的学科,有自己的一套最佳实践和考虑因素。如果您想查看一个示例,说明如何检查数据集以选择哪些特性来为预测模型提供数据,请查看泰坦尼克号之旅。
神经网络基础之可视化和交互式指南!![v2-071e132c7353c2be34deb925be1bf617_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/fc2a0f0dcac83004cef5e37a7284455d.jpeg)