从Y = X到构建完整的人工神经网络

 

 

文章发布于公号【数智物语】 (ID:decision_engine),关注公号不错过每一篇干货。算法

 

 

 

来源 | AI研习社(id:okweiwu)浏览器

做者 | Ahmed Gad网络

译者 | AI小山(工程师)、朱慧94(上海大学)、Mr-UC(中国科学院大学)机器学习

原标题 | From Y=X to Building a Complete Artificial Neural Network函数

 

 

在某些时候,你也许曾问过本身,人工神经网络的参数的来源是什么?权重的目的是什么?若是不用误差(bias)会怎样?学习

 

在本教程中,咱们打算回答那些问题,咱们从最简单的人工神经网络(ANN)作起,一直到复杂得多的模型。让咱们从构建一个没有参数的机器学习模型开始,即Y=X。测试

 

而后,咱们将逐步增长一些参数到模型中,直到咱们创建了一个单个神经元,这个神经元被设计成接收一个或多个输入。接着,神经元从数学公式映射成图形形式。经过链接多个神经元,就能生成一个完整的ANN。读完本教程后,我但愿权重和误差的用途就能清楚明白了。优化

 

 

01从最简单的模型 Y=X 开始ui

 

 

机器学习的基础部分其实很是简单。即便是彻底的初学者也能构建一个基本的机器学习模型。所谓的监督式机器学习,它的目标是找到(即学习)一个函数,可以在输入和输出集合之间完成映射。等到学习过程结束,函数应该能对每个给定的输入,返回正确的输出。根据下表给出的数据,咱们来讨论如何完成一个最简单的目标。spa

 

有4组样本。每一个样本有一个单一的输入以及一个单一的输出。观察了数据以后,咱们须要准备一个函数来针对每个给定的输入返回正确的输出,并使得偏差最小。观察数据,咱们明显发现输出Y跟输入X彻底相同。若是X等于2,Y也等于2。若是X是4,Y也是4。

 

所以,咱们须要的是一个函数,接收一个单独的输入X并返回一个单独的输出。这个输出跟输入相同。毫无疑问,函数是F(X)=X。为简单起见,咱们用Y代替F(X)。因而,函数变成Y=X。

 

 

02偏差计算

 

找到合适的机器学习模型(即函数)后,咱们须要对它进行测试,看看它能不能准确预测结果,是否还存在必定偏差(error)。咱们能够用一个简单的偏差函数,根据下面的公式,计算出正确的输出与预测的输出之间的差的绝对值。它在数据样本中循环执行,对每个样本,计算出正确输出与预测输出之差的绝对值,并最终对全部的差的绝对值求和,存入偏差变量中。求和运算中的符号N表示样本的个数。

 

 

下表给出了计算的细节。根据这个表格,函数准确地预测了全部的输出,因此总偏差为0。很棒!可是不要忘这咱们作的只是纯入门的最简单的题目。在把题目改得更难一点以前,我要提一个问题。在每个机器学习模型中,有2个主要环节,分别是学习(即训练)和测试。咱们已经看到了最基本的测试环节。可是学习环节在哪里?在前面那个模型里,咱们有没有作学习?答案是否认的。

 

 

学习意味着模型里的一些参数是在训练环节中从数据里学来的。前面那个模型的函数(Y=X)没有参数可学。函数只是把输入X与输出Y等同起来,没有中间参数来平衡二者的关系。在这种状况下,就没有了学习环节,由于模型是非参数的。“非参数”意思是说模型不须要从数据中学习参数。常见的非参数机器学习模型是K近邻算法(K-nearest neighbors, KNN)。

 

03常数型权重

 

讲明白不用学习参数的缘由后,咱们来对使用的数据作一些修改。新数据以下表所示。你发现哪些改动了吗?其实很简单。每个输出Y再也不与输入X相等,而变成输入的两倍,即2X。咱们仍是用前面的函数(Y=X)预测输出并计算总的偏差。

 

 

偏差计算的细节在下面一张表格中。在这种状况下,跟前面的例子不同,总的偏差不是0,而是14。数据中偏差的存在代表模型函数不能在输入和输出之间正确地映射。

 

为了减小偏差,咱们必须修改函数。问题是,咱们改变函数里的什么东西,可以减小它的偏差呢?函数只有两个变量X和Y。一个表明输入,另外一个表明输出。这两个都不能改。最后结论是,函数是非参数的,因此没有办法对它进行修改以减小偏差。

 

 

可是还有但愿,若是函数目前尚未参数,为何不添加一个或多个参数呢?你能够大胆采用能减小偏差的方法去设计机器学习模型。若是你发现往函数里增长东西能解决问题,立马就加。

 

在新数据中,输出Y是输入X的两倍。但函数没有针对这个作修改,仍然用Y=X。咱们修改函数,使得输出Y等于2X而不是X。如今咱们获得的函数是Y=2X。使用这个函数以后,总的预测偏差用下表来计算。总偏差如今又是0了。不错。

 

 

在把2加到函数里以后,咱们的模型变成有参数的了吗?不!模型仍然是无参数的。一个有参数的模型从数据中学习到参数的值。这里,参数值的计算与数据无关,因此说模型仍然是无参数的。刚才的模型用2乘以X,可是数值2与数据无关。因此,模型还是无参数的。

 

咱们把前面的数据用下表进行修改。

 

 

由于没有学习环节,咱们能直接跳到测试环节,在这个环节里咱们用最新的那个函数(Y=2X)来计算预测输出,而后计算出预测的偏差。总的偏差用下表进行计算。总的偏差如今再也不是0,而是14了。这是怎么回事?

 

 

解决这个问题的模型是创建在输出Y是输入X的两倍(2X)基础之上的。如今,输出Y再也不等于2X,而3X了。所以,咱们能够确定偏差会增长。为了消除这个偏差,咱们不得不改变模型函数,用3,而不是2。新的函数是Y=3X。

 

新的函数Y=3X会将偏差从新调整为0值。但适用于处理先前数据的Y是X的两倍即Y=2X,在处理当下数据时会形成偏差。因此,咱们必须以X的3倍去调整总偏差。在处理先前的数据时,咱们还必须手动把倍数变为2。

 

看起来当每一次数据调整的时候,咱们就必须手动调整模型。对这种烦人的状况,咱们有一个解决方法。咱们能够避免在函数当中使用常量,而用变量代替。这就是代数,一个使用变量多于常量的领域。

 

04将权重做为变量

 

比起在函数中使用常量,好比Y=2X中的2或者Y=3X中的3,咱们能够在y=wx当中使用w这个变量。这个变量的数值能够基于数据计算而来,由于这个模型涵盖了由数据计算得来的变量,因此模型能够说是有参数的。由于模型含有参数,在变量值能够计算的基础上,模型就有了学习步骤。这个参数就是人工神经网络中的一个神经元。接下来就看一下,当先前的数据符合y=2x这一规律时,模型是如何为参数w赋值2的。数据在下面已经给出。

 

将参数初始化为一个一般状况下随机选择的初始值,对于每个参数值,总偏差都是能够计算的。在一些参数值的基础上,咱们能够决定减小偏差的方向,这有助于参数值的最佳(最优)选择。

 

 

05优化参数

 

假设参数w的初始值设定为1.5,咱们如今的函数是y=1.5x,咱们能够根据下面的表格在此函数基础上计算出总偏差。总偏差是8,由于这里存在偏差,咱们能够改变参数w的值。

 

可是目前咱们不知道应该向哪个方向改变参数w的值。我是说,哪种方向更好?咱们是应该增长仍是减小这个参数的值?因此咱们能够选择任何值,不管是比如今的1.5大仍是小。

 

 

假设新的w参数值是0.5,那么新的函数是y=0.5x,咱们能够在此基础上计算新的总偏差获得21。比起以前的参数值1.5和结果8,总偏差增长了。这就是咱们往错误方向为参数值赋值的暗示。咱们能够往数值更大的方向改变w的参数值,而后看结果有没有改善。

 

 

若是新的参数值是2.5,新函数是y=2.5x, 在这个函数的基础上计算总偏差,计算结果可见如下表格,当总偏差为7时,比以前参数值1.5和0.5两个案例的结果更优,因此咱们应该为w赋比1.5更大的值,以减小总偏差。咱们能够接着为w增长赋值。

 

 

假设新的参数值是3,那函数就是y=3x, 在此基础上计算所得的总偏差如如下表格中显示,为14。偏差比以前更大。

 

 

为了对这种状况有更好的观察,咱们能够在下表中总结先前选择的参数w赋值和与之相对应的总偏差。能够看出减小偏差的参数w的值域在1.5-2.5之间。咱们能够在此范围内取值2,这个过程会测试持续更多的值,直到最终总结出2是能够达到最小可能偏差的最优值。当函数为y=wx,当 w为2时,总偏差为0。

 

 

这是针对于函数y=2x的数据,当y=3x时,咱们能够重复以上过程为参数值为3的函数找到最优值。到目前为止,在人工神经网络中使用权重的目的已经很清晰了。

 

咱们如今能够讨论偏移值了。为此咱们须要修饰数据,新的数据已经在下表中给出。

 

 

06误差为常数

 

此数据与Y = 2X时使用的数据相同,但咱们为每一个Y值增长了1。咱们能够测试前一个函数Y = wX,其中w = 2,并根据下面的表计算总偏差。总偏差为4。

 

 

根据咱们以前的讨论,4的偏差意味着wis的值不是最好的,咱们必须改变它直到达到偏差为0。可是在某些状况下,仅使用权重的话将不会达到0偏差。这个例子是一个证据。

 

仅使用权重w,咱们能够达到0偏差吗?答案是否认的。在这个例子中只使用权重,咱们能够接近正确的输出,但仍然会有错误。让咱们更详细地讨论这个问题。

 

对于第一个样本,在等式Y = wX中w的最佳值是什么,它返回一个等于0的偏差?这很简单。咱们有一个包含3个变量的方程,但咱们知道2个变量的值,即Y和X.这就省去了一个变量w,可使用w = Y / X轻松计算。对于第一个样本,Y等于5,X等于2,所以w = Y / X = 5/2 = 2.5。所以,正确预测第一个样本输出的w的最佳值是2.5。咱们能够对第二个样本重复相同的操做。

 

对于第二个样本,Y = 7且X = 3。所以,w = Y / X = 7/3 = 2.33。所以,正确预测第二个样本输出的w的最佳值是2.33。该值不一样于与第一个样本一块儿使用的w的最佳值。根据第一个和第二个样本的w的2个值,咱们找不到w的单个值来正确预测它们的输出。使用w = 2.5将在第二个样本中产生错误,使用w = 2.33将在第一个样本产生错误。

 

做为结论,仅使用权重,咱们不能达到0的偏差。为了解决这种状况,咱们必须使用误差。

 

经过在w和X之间的乘法结果中加1值能够获得0的偏差。所以,新函数是Y = wX + 1,其中w = 2。根据下表,总偏差如今为0. 很好。

 

 

07误差做为变量

 

 

咱们仍然使用常量值1添加到wX。根据咱们以前的讨论,在函数中使用常量值会使此值依赖于特定问题而非通用。

 

所以,咱们可使用变量,而不是使用常数1。所以,新函数是Y = wX + b。变量(参数)b表示ANN中的误差。在解决问题时,咱们如今有2个参数w 和 b来决定它们的最优值。这使问题变得更加困难。咱们要求优化2个参数w(权重)和b(误差),而不是仅仅找到权重w的最佳值。这须要花费比之前更多的时间。

 

为了找到2个参数的最优值,一个好方法是首先优化单个参数,直到达到最小可能的偏差。经过更改此参数确保错误再也不降低后,咱们再开始优化下一个参数。

 

在优化参数w时将此策略应用于前一个示例,咱们将注意到即便和w = 2有微小的误差都会增长偏差。这表示值2是参数w的最佳值,咱们能够开始优化下一个参数b。

 

08从数学形式到神经元的图形形式

 

 

此时,咱们推导出具备2个参数的函数Y = wX + b。第一个是表示权重的w,第二个是表示误差的b。该函数是ANN中接受单个输入的神经元的数学表示。输入为X,权重等于w。神经元的误差为b。

 

经过将权重(w)乘以输入(X)并将结果与误差(b)相加,神经元的输出为Y,其被视为与其链接的其余神经元的输入。神经元也能够表示为总结全部这些信息的图表,以下图所示。

 

在图中,您能够找到数学函数中的参数与神经元图之间的映射。只有一个地方须要注意。误差被视为输入值为1的权重。这使得对于正常输入操纵误差变得容易。

 

 

09具备多个输入的神经元

 

 

到目前为止,权重和误差的目的如今已经很明确,咱们也可以以数学和图形的形式表示神经元。但神经元目前仍只接受单一输入。咱们如何容许它支持多个输入?这也很简单。只需在等式中添加您须要的任何输入,并为每一个输入分配权重。若是有3个输入,则数学形式以下:

 

关于图形形式,只需为每一个输入建立一个新链接,而后将输入和权重放在链接上。这在下图中给出。经过链接这种形式的多个神经元,咱们能够建立一个完整的人工神经网络。记住,整个过程的起点仅仅是Y = X而已。

 

 

10乘积之和

 

 

在数学形式中,咱们注意到重复了不一样的项。这些项对应每一个输入乘以其相应的权重。咱们能够在求和运算符中汇总全部这些乘积。该操做符将返回每一个输入与其相应权重之间的乘积之和。


下面给出了神经元的新数学形式。注意,求和从0开始,而不是1.这意味着将存在权重(w)和具备索引为0的输入(X)。索引为0的权重将指向误差b。其输入将始终指定为+1。

 

 

你也能够在求和完成后再加上误差做为单独的一项(以下所示)。在这种状况下,求和从1开始。

 

 

11结论

 

 

本教程提供了一个很是详细的解释,说明如何从一个很是简单的函数Y = X开始建立一个完整的人工神经网络。在整个教程中,咱们探讨了权重和误差的目的。此外,此教程在数学形式和神经元的图形形式之间进行了一一对应。

 

本文编辑:王立鱼

英语原文:https://heartbeat.fritz.ai/from-y-x-to-building-a-complete-artificial-neural-network-327da18894af

 

 

数智物语征稿启事0613.png

 

星标我,天天多一点智慧

 

相关文章
相关标签/搜索