分享

神经网络如何工作?8分钟入门

 昵称27915469 2019-07-18

神经网络如何工作?8分钟入门

by Gerd Altmann

你肯定听说过神经网络——一种神秘的、类似科幻小说的技术,它是一个热门词汇。但是作为一个不懂技术的人,你已经把它们当作了只留给计算机科学书呆子(比如我自己)的谜。这篇文章是为那些对计算机科学、编码或数学一窍不通的人设计的。

什么是神经网络?

神经网络可以看作是一个人工信息处理器。它接受输入,以某种方式处理它,然后产生一些输出。以下将神经网络简称为网络。网络的结构定义了它如何进行处理,不同的结构产生不同的输出。网络可以分类图像、翻译语言等等。

我们很快就会看到,网络的某些部分是固定的,而其他部分(称为参数)可以更改。我们的目标是调整这些参数,使我们的网络学会解决问题。最初,我们的网络在执行任务时会非常糟糕,就像一个孩子在做微积分一样,因为这些参数是随机设置的。当我们遍历测试网络的多个循环,并根据其响应更新参数时,它会随着时间的推移而变得更好。这种反复的测试和更新过程意味着训练数据是神经网络的重要组成部分。

让我们来看看神经网络是什么样子的。

网络架构

神经网络的最初动机是人类大脑中的神经元,它们有几个重要特征:

  1. 我们大脑中的神经元通过大规模网络相互连接,其中一些神经元的输出可以作为其他神经元的输入。
  2. 神经元之间的连接强度会随着使用频率的不同而发生变化,这就引出了唐纳德·赫布(Donald Hebb)的一句流行语:“一起放电的神经元串连在一起”。
  3. 神经元的电化学电位可以累积,但神经元在电位超过某个阈值之前不会“触发”。

让我们看看我们是否可以通过观察神经网络的构建模块、感知器,来人为地复制这些功能。

神经网络如何工作?8分钟入门

在上面的图中,A和C作为两个连接的神经元,其中神经元A的输出x等于神经元C的输入。我们将用节点(圆圈)表示神经元,用边缘(直线)表示神经元之间的连接。你可以这样想象一个神经元:它接受一些输入,它持有一个值(输入的一些组合),然后将这个值作为输出传递。到目前为止,这个模型满足上面列出的第一个特性。让我们介绍连接强度。

神经网络如何工作?8分钟入门

我们可以通过引入连接权重w来改变连接的强度。神经元C的输入现在是神经元A的输出x乘以权重w。直观上,w的值越大(越小),两个神经元之间的连接就越强(越弱)。这满足第二个特性。最后,让我们引入潜在阈值。

神经网络如何工作?8分钟入门

我们现在引入了另一个神经元B,它的值为b,连接权重为-1。b被称为偏置,我们很快就会知道为什么。C的输入变成了A和B的加权和,即w*x + (-1)* b。接下来,我们将阶跃函数应用于C点的输入,如果x> 0,则定义为f(x) = 1,否则为0。

神经网络如何工作?8分钟入门

阶跃函数

综上所述,如果w*x -b > 0,则C处的值为1,否则为0。我们究竟为什么要那样做?如果w*x < b,那么C点的值将等于0,换句话说,偏置b是一个阈值,我们需要通过它使C点的值不为0。这与前面讨论的神经元的第三个特性完全相同!因此,我们把阶跃函数称为“激活函数”。

只有一个问题。阶跃图的垂直部分在x = 0时表示它不可微分。如果你不知道这意味着什么,不要担心,你所需要知道的就是我们可以用s形函数来逼近阶跃函数。

神经网络如何工作?8分钟入门

Sigmoid函数

您可以将Sigmoid函数看作是所有可能输入的“压扁”,以适应0到1之间的值。x越大(越小),Sigmoid(x)越接近1(0)。

我们可以扩展当前的模型,让许多神经元输入信息,每个神经元都有自己的重量。注意,其中只有一个是偏置。同样,输入变成它之前的神经元的加权和(每个节点的输出与连接权重的乘积)。

神经网络如何工作?8分钟入门

既然这样,为什么不给每一层增加几个节点,增加几个连接层呢?我们把第一层和最后一层之间的层称为“隐藏层”。这里,每一层只有一个偏差。

我们通常先填充最左边的神经元层,然后通过计算下一层神经元的值在网络中“向前”移动,以此类推,最后我们可以计算出输出层神经元的值。

正如我们之前所说,我们的网络中有一些固定的特性和参数。一般结构,即层数,每层节点数和激活函数是固定的。基于我们如何在网络中前进,每个神经元的值是确定的,权重是固定的,因此我们唯一能改变的是我们的参数,神经元之间连接的权重。

既然我们已经了解了什么是网络,让我们来看看如何使用它来解决问题。

如何“学习”

我们来看看最著名的机器学习任务之一,识别手写图像。

神经网络如何工作?8分钟入门

学习的一般过程是这样的:

  1. 定义一个网络
  2. 将图像传入网络(输入)
  3. 网络将预测图像的标签(输出)
  4. 使用预测,以“学习”的方式更新网络
  5. 回到第二步并重复

假设每个图像都是28x28(784)像素,由于它们是灰度的,所以每个像素值的范围从0(黑色)到1(白色)。为了训练网络,我们需要以图像及其相关标签的形式提供培训数据。

网络的第一层将代表数据:它是我们将数据点(图像)输入网络的方式。第一层有784个神经元(加上一个偏差),每个神经元的值为训练图像中一个像素的值。网络的最后一层表示输出:模型对图像标签的预测。这一层将有10个神经元,神经元i的值越接近1,模型越认为图像的标签为i。

最初,我们将图的权重设置为随机值,这就是为什么最初的预测不是很好。选择隐藏层的数量和每个层中神经元的数量是一个很难解决的问题,我们将跳过这个问题。出于教学目的,我们假设有一个包含10个节点的隐藏层,并看一个示例。

神经网络如何工作?8分钟入门

在这个例子中,图像的值被输入到模型中,我们通过网络向前移动来计算输出神经元的值。模型认为图像是4,因为在最后一层中第4个神经元的输出最接近1。

如前所述,我们的目标是更新权重,以便更好地对数据进行分类。为了做到这一点,我们首先需要定义一个损失函数,在做出预测之后,它给我们一个可量化的度量方法,来衡量模型的好坏。其中一个例子是平方误差损失。我们从图像的标签上知道它是5,所以我们理想的情况是输出层的每个神经元都是0,除了第5个神经元应该是1。下面是我们计算预测损失的方法:

神经网络如何工作?8分钟入门

如果模型能够很好地正确预测标签,那么损失的总和将接近于0。

使用损失函数和一些应用微积分,也就是我们将要跳过的“反向传播”,我们可以合适的调整权重以找到最小的损失函数。换句话说,我们可以找出方向(或大或小)和每个权重的变化量,以便更好地预测这幅特定图像。但我们不希望它只学会预测这幅图像,我们希望它能够预测数据集中的所有图像,并能够推广到新图像。所以我们只在反向传播的方向上稍微更新权重。如果我们对许多不同的图像多次重复这个过程,网络将学习权重,可以很好地对手写图像进行分类。

说了很多,让我们总结一下:

  • 网络有节点,节点代表神经元,边缘代表连接权重。我们的目标是调整权重,使流程能够学会执行任务。
  • 我们使用输入层将数据传递到网络中,其中每个节点的值对应于图像中的一个像素。
  • 我们通过图表向前移动,计算一个训练示例的预测输出。网络的预测最初会很糟糕,因为权重是随机设置的。
  • 我们使用损失函数来计算它的错误程度。
  • 使用损失函数,我们执行反向传播来确定方向,并通过调整每个权重的大小来最小化该训练示例的损失函数。
  • 我们对权重进行少量的更新,并重复许多不同的训练示例。

结论

一旦你了解了神经网络是如何运作的,你就会发现它们与其说是智能的,不如说是人工的。我希望通过这篇入门文章,让您受到进一步研究它们的启发。为了简单起见,我们跳过了许多重要的内容,其中最主要的是反向传播,尽管反向传播是大多数神经网络的核心,但对于这样一篇文章来说,它太“数学化”了。对于感兴趣的人,我们需要用Sigmoid函数替换阶跃函数因为反向传播依赖于微分,阶跃函数没有导数。我们所构建的特定网络被称为前馈全连接网络。实际上,卷积神经网络可以更好地识别手写图像。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多