|
|
51CTO旗下网站
|
|
移动端

1.2 一台简单的预测机

《Python神经网络编程》本书首先从简单的思路着手,详细介绍了理解神经网络如何工作所必须的基础知识。本节为大家介绍一台简单的预测机。

作者:林赐 译来源:人民邮电出版社|2018-05-23 10:44

1.2 一台简单的预测机

让我们先从构建超级简单的机器开始。

想象一下,一台基本的机器,接受了一个问题,做了一些“思考”,并输出了一个答案。与我们在上面的例子中进行的操作一样,我们从眼睛输入图片,使用大脑分析场景,并得出在场景中有哪些物体的结论。

下面就是这台机器看起来的样子。

记住,计算机不是真的思考,它们只是得到包装的计算器,因此让我们使用更恰当的词语来形容这个过程。

一台计算机接受了一些输入,执行了一些计算,然后弹出输出。下列的内容详细说明了这一点。一台计算机对“3×4”的输入进行处理,这种处理也许是将乘法运算转化为相对简单的一组加法,然后弹出答案“12”。

你可能会想“这也没什么了不起的吧!”,没关系。这里,我们使用简单和熟悉的例子来引出此后我们将看到的更有趣的神经网络的概念。

让我们稍微增加一点复杂度。

试想一下将千米转化为英里的一台机器,如下所示。

现在想象一下,我们不知道千米和英里之间的转换公式。我们所知道的就是,两者之间的关系是线性的。这意味着,如果英里数加倍,那么表示相同距离的千米数也是加倍的。这是非常直观的。如果这都不是真理,那么这个宇宙就太让人匪夷所思了。

千米和英里之间的这种线性关系,为我们提供了这种神秘计算的线索,即它的形式应该是“英里=千米×C”,其中C为常数。现在,我们还不知道这个常数C是多少。

我们拥有的唯一其他的线索是,一些正确的千米/英里匹配的数值对示例。这些示例就像用来验证科学理论的现实世界观察实验一样,显示了世界的真实情况。

我们应该做些什么,才能计算出缺失的常数C呢?我们信手拈来一个随机的数值,让机器试一试!让我们试着使用C = 0.5,看看会发生什么情况。

这里,我们令:英里=千米×C,其中千米为100,当前,我们猜测C为0.5。

这台机器得到50英里的答案。

嗯,鉴于我们随机选择了C = 0.5,这种表现还算不错。但是,编号为2的真实示例告诉我们,答案应该是62.137,因此我们知道这是不准确的。

我们少了12.137。这是计算结果与我们列出的示例真实值之间的差值,是误差。即:

下一步,我们将做些什么呢?我们知道错了,并且知道差了多少。我们无需对这种误差感到失望,我们可以使用这个误差,指导我们得到第二个、更好的C的猜测值。

再看看这个误差值。我们少了12.137。由于千米转换为英里的公式是线性的,即英里= 千米×C,因此我们知道,增加C就可以增加输出。

让我们将C从0.5稍微增加到0.6,观察会发生什么情况。

现在,由于将C设置为0.6,我们得到了英里=千米×C = 100×0.6 = 60,这个答案比先前50的答案更好。我们取得了明显的进步。

现在,误差值变得更小了,为2.137。这个数值甚至可能是我们很乐于接受的一个误差值。

这里,很重要的一点是,我们使用误差值的大小指导如何改变C的值。我们希望输出值从50增大一些,因此我们稍微增加了C的值。

我们不必尝试使用代数法计算出C需要改变的确切量,让我们继续使用这种方法改进C值。如果你还不能被我说服,还是认为计算出确切的答案才够简单,那么,请记住,更多有趣的问题是没有一个简单的数学公式将输出和输入关联起来的。这就是我们需要诸如神经网络这样相对成熟而复杂的方法的原因。

让我们再次重复这个过程。输出值60还是太小了。我们再次微调C,将其从0.6调到0.7。

糟糕!过犹不及,结果超过了已知的正确答案。先前的误差值为2.137,现在的误差值为-7.863。这个负号告诉我们,我们不是不足,而是超调了。请记住上面的公式,误差值等于真实值减去计算值。

如此说来,C = 0.6比C = 0.7好得多。我们可以就此结束这个练习,欣然接受C = 0.6带来的小小误差。但是,让我继续向前走一小段距离。我们为什么不使用一个较小的量,微调C,将C从0.6调到0.61呢?

这比先前得到的答案要好得多。我们得到输出值61,比起正确答案62.137,这只差了1.137。

因此,最后的这次尝试告诉我们,应该适度调整C值。如果输出值越来越接近正确答案,即误差值越来越小,那么我们就不要做那么大的调整。使用这种方式,我们就可以避免像先前那样得到超调的结果。

同样,读者无需为如何使用确切的方式算出C值而分心,请继续关注这种持续细化误差值的想法,我们建议将修正值取为误差值的百分比。直觉上,这是正确的:大误差意味着需要大的修正值,小误差意味着我们只需要小小地微调C的值。

无论你是否相信,我们刚刚所做的,就是走马观花地浏览了一遍神经网络中学习的核心过程。我们训练机器,使其输出值越来越接近正确的答案。

这值得读者停下来,思考一下这种方法,我们并未像在学校里求解数学和科学问题时所做的一样一步到位,精确求解问题。相反,我们尝试得到一个答案,并多次改进答案,这是一种非常不同的方法。一些人将这种方法称为迭代,意思是持续地、一点一点地改进答案。

关键点

所有有用的计算机系统都有一个输入和一个输出,并在输入和输出之间进行某种类型的计算。神经网络也是如此。
当我们不能精确知道一些事情如何运作时,我们可以尝试使用模型来估计其运作方式,在模型中,包括了我们可以调整的参数。如果我们不知道如何将千米转换为英里,那么我们可以使用线性函数作为模型,并使用可调节的梯度值作为参数。

改进这些模型的一种好方法是,基于模型和已知真实示例之间的比较,得到模型偏移的误差值,调整参数。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Java程序员面试宝典

本书是程序员面试宝典系列中的一册,也是上一本《程序员面试宝典》的姊妹书。本书对程序设计面试中Java常见的题型和常用解答技巧进行了介绍...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊