误差反向传播

点击上方“ 大数据与人工智能 ”,“星标或置顶公众号”

第一时间获取好内容

作者丨stephenDC

这是作者的第 11 篇文章

前馈网络是神经网络中最为基础的一种,对网络结构的修改可以延伸出其他的网络类型。前馈网络模型的训练,通常基于模型参数的导数。

而误差反向传播,就是其中最为高效的一种求解导数的算法。

但是,误差反向传播并不是很容易被理解。

作者是数学专业出身,也花了不少功夫来理解这个东西。完了就在思考,明明就是一个复合函数的链式求导,为毛会整的这么难以理解呢?

后来发现, 其实是“误差反向传播”这个概念有一定的误导性 ,如果当初起名叫“ 导数反向传播 ”或者“ 梯度反向传播 ”,就容易理解多了。

本文就跟大家聊一下这个话题。

前馈网络模型

图1. 前馈网络结构

前馈网络的结构,如上图所示。

其中包括两类对象,结点和边。结点用来表示一个变量,而边则表示两个结点直接的关系。图中的边我们画成了有向的 (带箭头) ,这是因为从输入到输出,信息是单向的向前流动的,而不能反向流动,所谓的“前馈”,也正是这个意思。每一条边上会附带一个参数,称之为“权重”,其作用我们后面再提。

为了一般性,我们在上图中把网络分成了三个部分,中间部分拿来作为示例,其前后都可能还有若干层的网络结构。

在很多文献里,会把结点称为“神经元”,然后讲“树突”、“轴突”什么的。尽管神经网络模型的提出,确实受到了神经科学的启发,但学习这个模型的时候最好忘掉这些东西,没有什么鸟用。

原因有两点:

1. 作为一个抽象出来的数学模型,应该更加通用,跟生物和神经科学扯在一起,只会限制你的思考。

2. 真正生物意义上的“神经网络”,其结构远比这个复杂,这个模型并不足以描述。

模型的计算

很简单对吧?

不过这里要注意的有两点:

1.  对于回归问题,神经网络的输出层(也即最后一层),通常采用线性激活函数,而中间层则采用非线性激活函数。这里为了说明方便,采用了统一的激活函数。

2.  从输入到输出,每一层都先后按照以上方式进行作用,其结果就是输出变成了输入的一个复合函数。信息每向前传播一层,复合函数之上就多加了一次线性加权求和和一次激活函数作用。

模型的训练

对于监督学习来说,计算出损失函数,然后求出损失函数对各个模型参数的导数,即可对模型进行训练。

对神经网络模型而言,参数求导似乎是一个非常艰巨的任务, 一是因为模型参数非常多;二是因为复合函数非常复杂。

事实上确实如此,但幸运的是,模型参数的导数之间是有关系的,利用这种关系可以高效地对所有参数进行求导。

小结

这篇文章告诉我们,如果有一天你成了大神,发明了什么算法,一定要慎重地给各种相关概念起名字。

大神们都知道咋回事,但容易误导他人啊!谁特么告诉我,输出为连续值的监督学习问题,怎么就叫Regression了? (摊手…)

-end-