机器学习。神经网络(第1部分):感知器学习过程

我想提前指出,那些了解感知器学习方式的人几乎不会在本文中找到新的东西。您可以安全地跳过它。为什么我决定写这篇文章-我想写一系列与神经网络和TensorFlow.js的使用有关的文章,因此我不能忽略一般的理论摘录。因此,请您耐心和谅解地对待最终想法。



在经典编程中,开发人员使用特定的编程语言描述了一组严格指定的规则,这些规则是根据他在特定主题领域的知识确定的,并且作为第一近似,描述了解决类似问题时人脑中发生的过程。



例如,可以制定一个打井字棋,国际象棋等的策略(图1)。





图1-解决问题的经典方法



机器学习算法可以定义一组解决问题的规则,而无需开发人员的参与,而只能基于训练数据集的可用性。

训练集是与一组预期结果(响应,输出)相关的某种输入集。在训练的每个步骤中,模型都会通过更改内部状态来优化并减少模型实际输出与预期结果之间的误差(图2)。





图2-机器学习



神经网络



长期以来,科学家在我们大脑中发生的过程的启发下,试图对中枢神经系统进行逆向工程,并试图模仿人脑的工作。因此,机器学习的一个完整方向诞生了-神经网络。



在图3中,您可以看到生物神经元的设计与机器学习中使用的神经元的数学表示形式之间的相似之处。





图3-神经元的数学表示



在生物神经元中,神经元接收来自树突的电信号,调制具有不同强度的电信号,当达到某个阈值时可以激发神经元,这又将导致电信号通过突触传递给其他神经元。



感知器



一个神经网络的数学模型,由一个神经元组成,执行两个顺序的操作(图4):



  • 考虑连接的权重(电导或电阻),计算输入信号的总和

    sum= XTW+B=i=1nxiwi+b

  • 将激活函数应用于输入信号的总和。

    out=φ(sum)







图4-感知器的数学模型



任何微分函数都可以用作激活函数,最常用的函数如表1所示。激活函数的选择落在工程师的肩膀上,通常这种选择是基于解决相似问题的现有经验,或者仅仅是通过方法选择。

那个笔记



但是,建议如果神经网络中需要非线性,则ReLU函数最适合用作激活函数,该函数在训练过程中具有模型的最佳收敛速度。

表1-常用激活功能
Linear function

φ(x)=x

.

Sigmoid function

φ(x)=11+ex



Softmax function

φ(xj)=exjiexi

φ([1.20.90.4])=[0.460.340.20]



( 2)

Hyperbolic Tangent function

φ(x)=exexexex





[-1, 1]. , ,

Rectified Linear Unit (ReLU)

φ(x)=max(0,x)





, , sigmoid tanh

Leaky ReLU

φ(x)=max(0.01x,x)





ReLU , 0





感知器学习过程



学习过程包括几个步骤。为了更清晰起见,我们将考虑一个虚拟问题,该问题将通过一个神经网络解决,该神经网络由具有线性激活函数的神经元组成(这本质上是一个根本没有激活函数的感知器),并且为了简化任务,我们将排除神经元中的位移节点b(图5) ...





图5-训练前一步的训练数据集和神经网络的状态



在此阶段,我们具有处于特定状态的神经网络,该状态的某些连接权重是在训练模型的前一阶段计算出来的,或者如果这是训练的第一次迭代,则在以下位置选择连接权重的值随机顺序。



因此,让我们假设我们有一些训练数据集,该集合中每个元素的值都由输入数据(输入数据)的向量表示,其中包含2个参数(特征) x1,x2... x1,x2在模型中,取决于所讨论的领域,可能隐含任何内容:房屋中的房间数量,房屋与大海的距离等等,或者我们只是在尝试训练逻辑运算AND或OR的神经网络。



训练集中的每个输入向量都映射到预期的输出向量。在这种情况下,输出数据向量仅包含一个参数,再次取决于所选主题区域,该参数可能表示任何内容-房屋价格,执行逻辑“与”或“或”运算的结果。



步骤1-前馈程序

在此步骤中,我们将考虑每个键的权重来计算输入信号的总和,并应用激活函数(在我们的情况下,没有激活函数)。让我们对训练集中的第一个元素进行计算:

ypredicted=i=1nxiwi=10.1+0.50.2=0.2







图6-错误的正向传播



请注意,对于张量运算的特殊情况,以上公式是简化的数学方程。



张量本质上是一个数据容器,可以具有N个轴,并且每个轴上可以具有任意数量的元素。大多数带有张量的人都熟悉数学-向量(一个轴的张量),矩阵(两个轴的张量-行,列)。

该公式可以用以下形式编写,您将在其中看到熟悉的矩阵(张量)及其乘法,并且还了解了上面讨论的简化形式:



Ypredicted= XTW=[x1x2]T[w1w2]=[x1x2][w1w2]=[x1w1+x2w2]





步骤2-计算误差

函数误差函数是一个度量标准,反映了预期输出与接收到的输出之间的差异。通常使用以下误差函数:

-均方误差(MSE) -该误差函数对训练集中的离群值特别敏感,因为它使用了实际值与期望值之间的差的平方(离群值是一个与其他值远非同一个值的值)数据集,有时可能由于数据错误而出现,例如将数据与不同的度量单位混合或传感器读数差):

L=1Ni=1N(ypredicted(i)yexpected(i))2



-均方根误差(Root MSE) -实际上,这与神经网络中的均方根误差相同,但是它可以反映实际的物理度量单位,例如,如果在神经网络中,神经网络的输出参数是房屋价格(美元),则度量单位均方误差为平方美元($2),而对于标准差,则是美元($),这自然会稍微简化人工分析的任务:



L=1Ni=1N(ypredicted(i)yexpected(i))2



-平均偏差(平均绝对误差,MAE) -与上述两个值相比,对异常值不太敏感:

L=1Ni=1N|ypredicted(i)yexpected(i)|



-交叉熵-用于分类任务:

L=i=1Nj=1Myexpected(ij)log(ypredicted(ij))



哪里

N -训练集中的份数

M -解决分类问题时的班级数量

yexpected -预期产值

ypredicted-训练后的模型的实际输出值



对于我们的特殊情况,我们将使用MSE:

L=1Ni=1N(ypredicted(i)yexpected(i))2=(0.21)2=0.64





步骤3-反向传播

训练神经网络的目标很简单-最小化误差函数:

Lmin



找到函数最小值的一种方法是,在学习的每个下一步中,沿着与梯度向量相反的方向修改连接权重-梯度下降法,在数学上看起来像这样:

w(k+1)=wkμL(wk)



哪里 k -神经网络训练的第k次迭代;

μ-学习率由工程师设置,通常可以为0.1;0.01(关于学习步骤如何影响学习收敛过程,请稍后注意)

L-错误函数

的梯度要找到梯度,我们针对自定义参数使用偏导数w1,w2

L(w)=[Lw1LwN]



在我们的特殊情况下,考虑到所有简化,错误函数采用以下形式:

L(w1,w2)=(ypredictedyexpected)2=(x1w1+x2w2yexpected)2=

=(1w1+0.5w21)2



导数公式备忘
,

ddxc=0;c=const

ddx[cf(x)]=cf(x); c=const

ddxxn=nxn1

ddx[f(x)±g(x)]=f(x)±g(x)

ddx[f(x)g(x)]=f(x)g(x)+g(x)f(x)

ddxf(g(x))=f(g(x))g(x)





让我们找到以下偏导数:

w1(w1+0.5w21)2=2(w1+0.5w21)w1(w1+0.5w21)=

=2(w1+0.5w21)1=2(0.1+0.50.21)=1.6



w2(w1+0.5w21)2=2(w1+0.5w21)w2(w1+0.5w21)=

=2(w1+0.5w21)0.5=2(0.1+0.50.21)0.5=0.8





然后,误差的反向传播过程是沿着模型从输出向输入的方向移动,其中模型权重沿与梯度矢量相反的方向进行了修改。将学习步骤设置为0.1(学习率)(图7):

w1(k+1)=w1(k)μL(w1,w2)w1=0.10.1(1.6)=0.26



w2(k+1)=w2(k)μL(w1,w2)w2=0.20.1(0.8)=0.28





图7-误差的反向传播

因此,我们已完成k + 1个训练步骤,以确保误差已减小,并且具有新权重的模型的输出已接近预期值,我们将沿着具有新权重的模型执行误差的正向传播过程(请参见步骤1)。 :

ypredicted=x1w1+x2w2=10.26+0.50.28=0.4



如您所见,输出值朝着预期结果的正确方向增加了0.2个单位-一(1)。该错误将是:

L=(0.41)2=0.36



如您所见,在上一个训练步骤中,误差为0.64,并且使用新的权重-0.36,因此,我们在正确的方向上调整了模型。



文章的下一部分:

机器学习。神经网络(第2部分):或建模;与TensorFlow.js机器学习进行XOR

神经网络(第3部分)-显微镜下的卷积网络。探索Tensorflow.js API



All Articles