模型学习的计算过程具体是怎样的?
1.前馈网络(FNN)
前馈神经网络简称前馈网络,是一种单向的多层结构,也是最简单的神经网络。
X1,X2,X3,X4为输入数据,中间5个黄色的圆点表示有5个神经元的第一层和3个黄色的圆点表示有3个神经元的第二层,第一层和 第二层是模型的内部环节,称为隐藏层。实际网络中,隐藏层可以有很多层,不局限于2层,绿色的圆点是网络的最后一层,称为输出层。神经元的单向箭头连线就是两个节点之间的权重。
前馈网络中的前馈指的是这个网络中的每一层神经元产生信号之后会传递到下一层,而下一层的神经元产生的信号无法反传递给上一层,即数据是单向流动的。
下面举个例子来说明前馈网络的计算,
输入数据x:x=[0.5,0.8]T
权重Wij:表示从节点i和j之间的权重,方向由j到i。例如,从上图中Wcb=0.7,Wda=0.3
权重矩阵Wj:表示第j层的权重矩阵,这里有两个权重矩阵,分别是W1和W2
激活函数:这里选择sigmoid函数作为激活函数。
计算如下:
1.节点c的输入,
同理,节点d的输入,
模型的计算是以矩阵的方式,故得到的结果也是以层为单位的,计算过程如下,
现在输入的数据走到了c和d两个节点,这里还有一层sigmoid激活函数,因此第一层的输出如下节点c的输出为0.6479,节点d的输出为0.5769
用同样的方式可以就计算节点e的输出,结果如下,
现在,输入数据X经过网络的各个节点之后,最后模型给出的计算结果是0.6469,到这里就完成了前馈网络从输入到输出的计算过程。
2.链式法则
深度学习的主要内容就是优化更新各个节点之间链接的权重,也就是更新W的值。那么如何更新权重呢?模型的学习就是不断减小损失函数,我们采用最小化损失函数,而最小化损失函数通常采用梯度下降的方式,即每一次给模型更新权重时按照梯度下降的方式进行。
链式法则是将两个函数组合起来的复合函数,其导数等于里面函数代入外函数值得导数乘以里面函数的导数。
举个例子,
3.反向传播
1.前向传播:将训练数据输入到网络中,数据经过隐藏层,最后到达输出层并作为结果输出。
2.误差及其传播:计算输出值和实际值之间的误差,将误差从输出层向隐藏层反向传递,直到输入层。
3.迭代:根据误差调整模型各个参数的值,并不断迭代前两个步骤,直至达到结束模型训练的条件。
还是用这个简化网络举例,
损失函数表示如下,
下面来看反向传播是怎样进行的,反向传播就是反馈从输出往输入方向流动,即最先更新的应为最后一层隐藏层的权重,即Wec和Wed。我们以Wec为例,首先确定
更新权重,假定a=1,则Wec的更新值如下,
同理,更新其他5个节点,
按照之前的前馈计算步骤,可以得到输出O(e)=0.648366218,对应的损失函数L(x)=0.061823158,对比原来的L(x)=0.062351,可以发现损失函数变小了。如果有更多的数据,则会有更多的迭代,模型的表现也就越好。
在进行梯度更新的时候,很多变量被反复计算了。而在实际的反向传播算法中,每个节点都会暂存从上层反馈回来的各个数据值信息,也就避免了重复计算。