编辑推荐: |
本文主要介绍了一个简单的人工神经网络是如何学习的,并让你深入了解神经网络是如何由神经元一步一步构建起来的。希望对你的学习有帮助。
本文来自于微信公众号人工智能学习指南,由火龙果软件Linda编辑,推荐。 |
|
今天,我们将要讨论一个重要的主题——神经网络介绍,这篇文章将重点介绍一个简单的人工神经网络是如何学习的,并让你深入了解神经网络是如何由神经元一步一步构建起来的。
虽然我们会深入探讨数学细节,但是不用担心,因为我们将 逐步分解并解释每个步骤。
阅读完本文后,你会发现它比听起来简单得多。
神经网络非常强大,因为它们可以识别数据中复杂的模式,而这些模式可能让传统算法难以应对,它们可以解决高度复杂的机器学习问题(如自然语言处理和图像识别),甚至可以在不需要大量手工特征工程的情况下,自动从原始数据中提取有用的信息。
归根结底,神经网络的问题大致可以归结为两大类——分类(Classification)和回归(Regression)。
分类 是为给定的输入预测一个离散的标签(例如:这是一张猫的图片还是狗的图片?这部电影评论是正面的还是负面的?)。
回归 是为给定的输入预测一个连续的值(例如:天气预报)。
今天,我们将重点讨论 回归问题。
举一个简单的例子:
我们最近搬到了一个新城市,目前正在寻找新家。
但是,我们注意到这个地区的房价差异很大。
由于我们对这座城市不熟悉,我们唯一的信息来源就是我们可以在网上找到的信息。
我们找到了一个我们感兴趣但不确定它的价格是否合适房子。
所以,我们可以建立一个神经网络,根据某些特征(如房屋面积(以平方英尺为单位)、位置(1=城市,2=郊区,3=乡村)、房龄和房间数量)来预测房屋价格。
我们的目标是使用这些特征来预测房屋价格。
我们做的第一件事是收集有关附近房屋的数据以及它们的售价。
注意:这是一个合成数据集
接下来,我们想要训练一个神经网络。训练涉及将数据集输入到模型中,模型学习数据中的模式。
术语解释:由于我们使用上面的数据集来训练模型,因此它被称为训练数据。
所以,该模型能够根据可用数据预测新房屋的价格。
但在进入模型构建和训练之前,让我们先了解一下为什么它被称为神经网络。
背景
神经网络使计算机能够以人类大脑为灵感处理数据。它利用按层排列的相互连接的神经元,类似于人类大脑的结构。
这是一个生物神经元。
它接收输入,处理接收到的输入或数据(这种处理简直就像魔法一。
就像人类大脑通过接收输入并生成输出来处理数据一样,神经网络的操作方式也类似。
这里的蓝色线条代表神经元的输入。
在房屋定价的背景下,这些输入可以被视为不同的特征变量,而输出将是预测的房屋价格。
每个输入都与一个称为权重的常数项相关联。
因此,让我们将它们添加到我们的人工神经元中。
这些权重的目的是指示输入的重要性。
较高的权重值意味着输入被认为更重要。
因此,如果房龄的权重高于位置的权重,这意味着房屋的房龄比房屋的位置更重要。
现在,生物神经元中像是发生了一些魔术,而这就是人工神经元中的魔术。
当我们放大时,我们发现这种魔术本质上是两个数学步骤。
第 1 部分:求和
第一部分是求和,在这里我们将每个输入与其对应的权重相乘,然后将它们相加。
你可能还注意到了顶部的b,这被称为偏差项,它是一个常数值。
我们将此值添加到加权和中以完成求和。
数学:
第 2 部分:激活函数
在神经网络中,激活函数的作用确实是将来自前一层神经元的加权输入(即上一步的求和结果)转换为输出,这个输出随后会被传递给下一层的神经元。
二元阶跃函数
它很简单:如果输入(我们称之为x)等于或大于0,函数就输出1;否则,它输出0。
当你需要一个明确的决定,比如是或否时,这个函数非常有用。
例如,基于输入,这所房子会出售吗?
线性函数
它如实反映情况。它只返回它接收到的任何值。
因此,如果我们的求和结果是5,那么输出也是5。
Sigmoid函数
它真正改变了游戏规则,能够优雅地将任何输入值压缩到0到1的范围内。
它非常适合基于概率的问题,例如,在给定某些条件下,房屋出售的可能性有多大?
双曲正切函数,简称tanh
它与Sigmoid相似,但有一个不同之处:它的输出值范围在-1到1之间。
因此,较大的正输入值接近于1,而较大的负输入值接近于-1。
整流函数ReLU(Rectified Linear Unit)
这个函数在神经网络领域非常出色。
它简单而有效:如果输入为正,则保持不变;如果为负,则将其变为零。
这种功能使它在许多场景中都非常有用。
Leaky ReLU(带泄露的线性整流单元)的激活函数
这是对常规ReLU的一个巧妙改进。
虽然ReLU将所有负输入设置为零,但Leaky ReLU允许负输入有一个小的、非零的、常数输出。
你可以想象它就像一个稍微打开的水龙头,即使大部分时间是关闭的,也会让一小股水流(也就是我们的案例中,数据)通过。
最后是最近非常受欢迎的Swish函数
实际上,还有许多其他的激活函数,每一种都有其独特的特点。
但以上这些是最流行和最通用的激活函数之一。
激活函数的妙处在于它们可以根据我们的具体问题进行调整。
例如,如果我们在预测一些连续的事物,比如房价(一个回归问题),那么整流函数ReLU就是一个很好的选择。
它只给出正输出,这与房价不会是负数的事实非常吻合。但如果我们在估计概率,比如房屋销售的可能性,那么sigmoid函数就是我们的首选,因为其整洁的0到1范围可以反映概率值。
接下来让我们继续选择整流函数ReLU作为我们神经元中的激活函数,因为这对我们的问题最有意义。
接下来,我们需要确定权重和偏置项的值应该是多少。
我们知道它们是常数项,但它们的值应该是多少呢?
现在,让我们假设我们已经训练了我们的神经网络并得到了最优值。
所以,让我们用这些最优值替换这些项。
这就是一个我们所说的训练有素的神经网络,本质上,这意味着我们已经利用可用的数据,通过一个神经元的训练,创建了最有效的模型。
现在,我们可以通过输入我们试图确定价值的房屋的相关特征来预测房价。
让我们试着预测我们训练数据集中第一所房子的价格。
当我们输入数据时,数据处理的神奇部分之一是求和……
……而第二部分是将这个求和值通过整流函数ReLU:
从本质上讲,我们的模型以第一所房子的特征作为输入,并根据这些特征预测价格为103.6万美元。
换句话说,它表示:“根据这些房屋特征,我预测房屋的价格为103.6万美元。”
但是,当我们将其与实际房价175万美元进行比较时,结果相差了71.4万美元,很明显这个结果误差非常大。
如果我们将这个简单的模型输入剩余的房屋,我们将得到以下预测价格:
正如我们所看到的,预测价格都非常不准确。
这表明我们的模型不是很有效,考虑到它的不复杂性,这是可以理解的。
它只有一个神经元,就像人的大脑一样,只有当神经元协作时,它们才能做出更有影响力的决策并以更高的精度处理数据。
让我们退后一步,考虑是否有更直观的方法来解决这个问题。
我们可以通过考虑不同特征之间的相互作用,来提高我们的预测能力,因为两个特征的组合比单独的特征更有意义。
例如,房间和大小的组合可能是有价值的。
一栋房间多但空间小的房子可能会让人感到拥挤,从而降低对买家的吸引力,导致价格降低。
同样,房子年龄和位置的组合也很重要。
在城市地区,新房通常更贵,而在农村地区,买家可能更喜欢老房子的魅力,这可能会增加它们的价值。
此外,农村地区的旧房子也可能经过更多的翻新。
可能性是无穷无尽的,考虑所有不同的组合是一项具有挑战性的任务。
但这正是我们利用多个神经元的力量的时候,与生物神经元协同工作可以做出更好决策的方式类似,人工神经元一起工作也可以实现相同的目标。
让我们通过向其中添加另外两个神经元来使我们的简单神经网络更加强大。
这将创建一个类似蜘蛛网的结构:
在这种情况下,所有的输入都被输入到每个神经元中。
由于我们有3个神经元输入,并且我们知道每个输入都与一个权重相关联,因此总共有12个(= 4 * 3)不同的权重。
为了保持它们的独立性,让我们引入一些符号。
权重由w_ij表示,其中i是神经元编号,j是输入到其中的输入。所以,例如,这个突出的权重……
……被标记为w₁₂,因为它是第一个神经元的第二个输入。而这个突出显示的输入……
……被标记为w₃₄,因为它是第三个神经元的第四个输入。类似地,这是所有已标记的权重:
这些权重可以取任何值,而这些值是在训练过程中确定的。
假设我们神经网络的训练过程确定了只有卧室和大小特征与神经元1是相关的,而其他两个特征则不被考虑,那么进入第一个神经元的地点和年龄的权重将为0。
类似地,假设只有卧室、大小和位置对第二个神经元是重要的,而房龄被忽略,那么进入第二个神经元的年龄的权重为0。
同时,第三个神经元仅将位置和年龄视为重要特征,而卧室和大小的权重为0。
生成的神经网络如下所示:
同样,训练过程也会产生最优的偏置值。
所以让我们继续在这里添加它们(也让权重=0的输入消失,使图表更易读):
你可能注意到了一些奇怪的地方:我们有3个输出。然而,我们只有一个输出,即预测价格。
因此,我们需要找到一种方法将来自3个神经元的输出组合成一个。
为了做到这一点,让我们在前面再添加一个神经元。
术语:每一层都有编号,输入层通常被标记为0。
最后一层被称为输出层,而位于输入层和输出层之间的任何层都被视为隐藏层。
请记住,每个输入都伴随着一个相应的权重。
因此,即使这些输入到新的神经元也会有权重,这些权重也可以在训练过程中进行估计。
新的偏置也将在训练过程中确定。因此,新的神经网络(假设它已经完全训练过)将具有以下最优值:
现在让我们继续讨论激活函数。
对于这种情况,我们将所有激活函数都设置为等于整流函数Relu。
注意:通常,同一层将具有相同的激活函数。
我们用所有最优的偏置和权重值训练了我们的神经网络。现在是时候让它运转一下,看看它在预测房价方面的表现如何了。
让我们再次将我们第一所房子的特征通过这个神经网络。
我们将在每一步突出显示激活的输入和神经元,来阐述这个过程。
第 1 步 — 第一个神经元
第 2 步 — 第二个神经元
第 3 步 — 第三个神经元
最后,使用隐藏层的输出并将它们传递到输出层:
第 4 步 — 最后一个神经元
这就是我们如何使用这个神经网络来获得输出的方法!将输入传递以获得输出的过程称为前向传播。
我们将对剩余的房屋重复相同的过程:
让我们将这些新的预测价格与仅由一个神经元构成的神经网络做的旧预测价格进行比较。
粗略地看,新的预测比旧的预测表现得更好。
但是,如果我们想找到一个数字来量化我们的预测与实际值之间的偏差要怎么做呢?
这个时候就是成本函数发挥作用的时候了,成本函数告诉我们我们的预测偏离了多少。
根据预测的类型,我们可以使用不同的成本函数。
对于这个问题,我们会使用一个称为均方误差(MSE)的成本函数。
MSE允许我们a)衡量我们的预测与实际价格之间的偏差,以及b)比较不同模型所做的预测。
它计算预测房价与实际房价之间差异的平方平均值。数学上:
术语:通常的符号是将实际价格称为“y”,将预测价格称为“y hat”。
目标是最小化MSE。MSE越接近0,我们的模型在预测价格方面的表现就越好。
因此,使用此公式,我们可以计算旧的单神经元模型的MSE为:
这证实了我们的第一个模型非常糟糕。
同样,新的更复杂模型的MSE为:
仍然相当糟糕,但至少比之前的MSE稍好一些。
但我们可以考虑创建一个更好的模型。
一种方法是在现有层中添加更多的神经元以提高预测能力。像这样:
在隐藏层中添加了第四个神经元
我们可以添加一个全新的隐藏层:
添加了第二个带有 3 个神经元的隐藏层
我们也可以在不同的层放置不同的激活函数:
如你所见,可能性是无穷无尽的。
我们可以调整神经网络的复杂性以满足我们的特定需求。这些不同的可能性称为神经网络架构。
我们可以自定义层的数量、每一层的神经元以及激活函数,以适应我们正在尝试解决的数据和问题,使其根据需要尽可能简单或复杂。
|