美文网首页
关于神经网络基础知识的视觉和交互式概念

关于神经网络基础知识的视觉和交互式概念

作者: 图像算法 | 来源:发表于2019-08-27 09:07 被阅读0次

    动机

    我不是机器学习专家。我是一名经过培训的软件工程师,而且我与人工智能的互动很少。我一直想深入研究机器学习,但从未真正找到我的“in”。这就是为什么当谷歌在2015年11月开源TensorFlow时,我非常兴奋,并且知道是时候跳进去开始学习之旅了。不是听起来很戏剧化,但对我而言,它实际上感觉有点像普罗米修斯从机械学习的奥林匹斯山向人类传递火焰。我的脑子里想到的是,当Google研究人员发布Map Reduce论文时,整个大数据领域和Hadoop等技术都大大加速了。这次它不是一篇论文 - 它是他们经过多年和几年的演变后内部使用的实际软件。

    所以我开始学习关于这个主题的基础知识,并且看到了对没有该领域经验的人们需要更温和的资源。这是我的尝试。

    从这里开始

    让我们从一个简单的例子开始。假设您正在帮助想要买房子的朋友。她为一幢2000平方英尺的房子(185米)报了400,000美元。这是一个好价钱吗?

    没有参考框架就不容易分辨。所以你问问那些在同一个街区买房的朋友,最后得到三个数据点:

    面积(平方英尺)(x)价格(y)2104399,9001600329,9002400369,000

    就个人而言,我的第一直觉是获得每平方英尺的平均价格,即每平方英尺180美元。

    欢迎来到您的第一个神经网络!现在它还没有达到Siri级别,但现在你知道了基本的构建块。它看起来像这样:

    这样的图表显示了网络的结构以及它如何计算预测。计算从左侧的输入节点开始。输入值向右流动。它乘以重量,结果成为我们的输出。

    将2,000平方英尺乘以180得到360,000美元。这就是这个级别的所有内容。计算预测是简单的乘法。但在此之前,我们需要考虑我们将乘以的重量。在这里,我们从平均值开始,稍后我们将研究更好的算法,这些算法可以随着我们获得更多输入和更复杂的模型而扩展。找到重量是我们的“训练”阶段。因此,每当您听到某人“训练”神经网络时,它只意味着找到我们用来计算预测的权重。

    这是一种预测形式。这是一个简单的预测模型,它接受输入,进行计算并给出输出(因为输出可以是连续值,我们所拥有的技术名称将是“回归模型”)

    让我们想象一下这个过程(为简单起见,我们将价格单位从1美元换成1000美元。现在我们的重量是0.180而不是180):

    更努力更好更快更强

    我们能否根据我们的数据点平均价格估算价格?我们试试吧。让我们首先定义在这种情况下更好的意义。如果我们将模型应用于我们拥有的三个数据点,那么它的工作有多好?

    那有点黄。黄色很糟糕。黄色是错误的。我们想尽可能地收缩黄色。

    面积(x)价格($ 1000)(y_)预测(yy_ - yy_ - y)²2104399.9379214491600329.92884217562400369432-633969

    平均:2,058

    在这里,我们可以看到实际价格值,预测价格值以及它们之间的差异。然后我们需要平均这些差异,因此我们有一个数字告诉我们这个预测模型有多少错误。问题是,第3行的值为-63。如果我们想要使用预测和价格之间的差异作为我们的误差测量棒,我们必须处理这个负值。这就是为什么我们引入一个显示误差平方的附加列的原因之一,从而消除了负值。

    这是我们做得更好的定义 - 更好的模型是错误更少的模型。误差测量为数据集中每个点的误差平均值。对于每个点,误差通过实际值和预测值之间的差值来测量,增加到2的幂。这称为均方误差。使用它作为训练我们模型的指南使它成为我们的损失函数(也是成本函数)。

    既然我们已经为更好的模型定义了测量棒,那么让我们尝试一些更多的权重值,并将它们与我们的平均值进行比较:

    我们不能通过改变重量来改进模型。但是如果我们添加偏差,我们可以找到改善模型的值。

    我们的线条可以更好地逼近我们的值,因为我们已将此b值添加到线条公式中。在这种情况下,我们称之为“偏见”。这使我们的神经网络看起来像这样:

    我们可以通过说具有一个输入和一个输出的神经网络(扰流板警告:并且没有隐藏层)看起来像这样来概括它:

    在此图中,W和b是我们在训练过程中找到的值。X是我们插入公式的输入(在我们的示例中以sq ft为单位的区域)。Y是预测价格。

    现在计算预测使用以下公式:

    因此,我们当前的模型通过在此公式中将房屋区域插入x来计算预测:

    训练

    你怎么样才能训练我们的玩具神经网络?通过调整重量和偏置拨号最小化损失功能。你能得到低于799的误差值吗?

    自动化

    恭喜您手动训练您的第一个神经网络!让我们来看看如何自动化这个培训过程。下面是另一个具有类似自动驾驶功能的示例。这些是GD Step按钮。他们使用一种称为“梯度下降”的算法来尝试逐步实现正确的权重和偏差值,从而最大限度地减少损失函数。

    这两个新图表可以帮助您在设置模型的参数(重量和偏差)时跟踪误差值。跟踪错误很重要,因为培训过程尽可能地减少了这个错误。

    梯度下降如何知道下一步应该在哪里?结石。你知道,我们知道我们正在最小化的函数(我们的损失函数,我们所有数据点的平均值(y_-y)²),并知道它的当前输入(当前的权重和偏差),损失函数告诉我们微调W和b的方向,以便最小化错误。

    了解有关梯度下降的更多信息,以及如何使用它来计算Coursera 机器学习课程的第一个讲座中的新权重和偏差。

    然后有两个

    房子的大小是唯一的变量,它的成本是多少?显然还有很多其他因素。让我们添加另一个变量,看看我们如何调整神经网络。

    假设你的朋友做了更多的研究,发现了更多的数据点。她还发现每个房子有多少间浴室

    面积(平方英尺)(x1)浴室(x2)价格(y)21043399,90016003329,90024003369,0001416223200030004539,90019854299,900153433149001427319899913803212,0001,4943242,500

    我们带有两个变量的神经网络如下所示:

    我们现在必须找到两个权重(每个输入一个)和一个偏差来创建我们的新模型。

    计算Y看起来像这样:

    但我们如何找到w1和w2?这比我们只需要担心一个重量值时有点棘手。如果我们预测房屋的价值,多少额外的浴室会改变多少?

    尝试找到合适的重量和偏见。您将从这里开始看到随着输入数量的增加我们开始进入的复杂性。我们开始失去创建简单的2d形状的能力,这使我们能够一目了然地看到模型。相反,我们必须主要依赖于在调整模型参数时误差值如何变化。

    0

    50

    100

    150

    200

    250

    300

    20,000

    40,000

    60,000

    80,000

    100,000

    错误108268

    重量#1

    0.000重量#2

    0.000偏压

    0.000

    我们可信赖的梯度下降在这里再次提供帮助。它在帮助我们找到合适的权重和偏见方面仍然很有价值。

    特征

    现在您已经看到了具有一个和两个功能的神经网络,您可以找出如何添加其他功能并使用它们来计算您的预测。权重的数量将继续增长,我们添加每个功能时,我们必须调整梯度下降的实现,以便它可以更新与新功能相关的新权重。

    重要的是要注意,我们不会盲目地向网络提供有关我们示例的所有信息。我们必须选择我们为模型提供哪些功能。特征选择/处理是一个完整的学科,具有自己的一套最佳实践和考虑因素。

    分类

    让我们继续调整我们的例子。假设你的朋友给你一份房屋清单。这一次,她已经贴上了她认为哪些浴室大小和数量都很好的标签:

    面积(平方英尺)(x1)浴室(x2)标签(y)21043好16003好24003好14162坏30004坏19854好15343坏14273好13803好1,4943好

    她需要你用它来创建一个模型,根据它的大小和浴室数量来预测她是否想要一所房子。您将使用上面的列表来构建模型,然后她将使用该模型对许多其他房屋进行分类。这个过程的另一个变化是,她有另外一份她已贴上标签的10所房子的清单,但是她正在保留它。在您训练模型后,其他列表将用于评估您的模型 - 从而确保您的模型掌握实际使她成为房屋特征的条件。

    到目前为止我们一直在玩的神经网络都在做“回归” - 它们计算并输出一个“连续”值(输出可以是4,或100.6,或2143.342343)。然而,在实践中,神经网络更常用于“分类”类型的问题。在这些问题中,神经网络的输出必须来自一组离散值(或“类”),如“好”或“坏”。这在实践中是如何运作的,我们将有一个模型,它会说75%确定房子是“好”而不是吐出“好”或“坏”。

    TensorFlow应用程序是实践中分类模型的一个很好的例子

    我们可以将我们看到的网络转换为分类网络的一种方法是让它输出两个值 - 每个类一个(我们的类现在是“好”和“坏”)。然后,我们通过名为“ softmax ” 的操作传递这些值。softmax的输出是每个类的概率。例如,假设网络层输出2表示“好”,4表示“坏”,如果我们将[2,4]输入softmax,它将返回[0.11,0.88]作为输出。其中翻译值表示网络是88%确定输入值是“坏”,我们的朋友不喜欢那个房子。

    Softmax采用数组并输出相同长度的数组。请注意,它的输出都是正数,总计为1 - 这在我们输出概率值时很有用。还要注意,即使4是双2,它的概率不仅是双倍,而是2的8倍。这是一个有用的属性,夸大了输出的差异,从而改善了我们的训练过程。

    产量softmax([1])[1]softmax([1,1])[0.5,0.5]softmax([0,1])[0.26,0.73]softmax([2,4])[0.11,0.88]softmax([5,10])[0.007,0.993]softmax([-1,0,1])[0.09,0.24,0.66]softmax([1,2,4])[0.04,0.11,0.84]

    正如您在最后两行中看到的那样,softmax扩展到任意数量的输入。所以现在,如果我们的朋友添加第三个标签(说“好,但我将不得不在一个房间里”),softmax会扩展以适应这种变化。

    花一点时间来探索网络的形状,因为你改变了功能的数量(x1,x2,x3 ......等)(可以是面积,浴室数量,价格,接近学校/工作等等)并改变数量类(y1,y2,y3 ......等)(可能是“太贵”,“很划算”,“如果我是airbnb那么好”,“太小”):

    真正的动机

    如果你已达到这个目的,我必须告诉你我的另一个动机是写这篇文章。这篇文章是对TensorFlow教程的更温和的介绍。如果您现在开始使用MNIST For ML Beginners,并且遇到此图:

    我在TensorFlow入门教程中写了这篇文章,为没有机器学习经验的人做好准备。这就是我模仿其视觉风格的原因。

    我希望你能做好准备并了解这个系统及其运作方式。如果您想开始修改代码,请随意从介绍教程中学习并教授神经网络如何检测手写数字。

    您还应该通过学习我们在此讨论的概念的理论和数学基础来继续您的教育。现在要问的好问题包括:

    还有哪些其他类型的成本函数?哪个应用哪个更好?

    使用梯度下降实际计算新权重的算法是什么?

    在您已经了解的领域中,机器学习的应用是什么?你可以将这个算法与你的算法书中的其他算法混合使用,以获得什么新的想法?

    更多论文源码关注微信公众号:“图像算法”或者微信搜索账号imalg_cn关注公众号

    相关文章

      网友评论

          本文标题:关于神经网络基础知识的视觉和交互式概念

          本文链接:https://www.haomeiwen.com/subject/yvrsectx.html