点击上方“大数据与人工智能”,“星标或置顶公众号”
第一时间获取好内容
作者丨stephenDC
这是作者的第11篇文章
前馈网络是神经网络中最为基础的一种,对网络结构的修改可以延伸出其他的网络类型。前馈网络模型的训练,通常基于模型参数的导数。
而误差反向传播,就是其中最为高效的一种求解导数的算法。
但是,误差反向传播并不是很容易被理解。
作者是数学专业出身,也花了不少功夫来理解这个东西。完了就在思考,明明就是一个复合函数的链式求导,为毛会整的这么难以理解呢?
后来发现,其实是“误差反向传播”这个概念有一定的误导性,如果当初起名叫“导数反向传播”或者“梯度反向传播”,就容易理解多了。
本文就跟大家聊一下这个话题。
前馈网络模型
图1. 前馈网络结构
前馈网络的结构,如上图所示。
其中包括两类对象,结点和边。结点用来表示一个变量,而边则表示两个结点直接的关系。图中的边我们画成了有向的(带箭头),这是因为从输入到输出,信息是单向的向前流动的,而不能反向流动,所谓的“前馈”,也正是这个意思。每一条边上会附带一个参数,称之为“权重”,其作用我们后面再提。
为了一般性,我们在上图中把网络分成了三个部分,中间部分拿来作为示例,其前后都可能还有若干层的网络结构。
在很多文献里,会把结点称为“神经元”,然后讲“树突”、“轴突”什么的。尽管神经网络模型的提出,确实受到了神经科学的启发,但学习这个模型的时候最好忘掉这些东西,没有什么鸟用。
原因有两点:
1. 作为一个抽象出来的数学模型,应该更加通用,跟生物和神经科学扯在一起,只会限制你的思考。
2. 真正生物意义上的“神经网络”,其结构远比这个复杂,这个模型并不足以描述。
模型的计算
很简单对吧?
不过这里要注意的有两点:
1. 对于回归问题,神经网络的输出层(也即最后一层),通常采用线性激活函数,而中间层则采用非线性激活函数。这里为了说明方便,采用了统一的激活函数。
2. 从输入到输出,每一层都先后按照以上方式进行作用,其结果就是输出变成了输入的一个复合函数。信息每向前传播一层,复合函数之上就多加了一次线性加权求和和一次激活函数作用。
模型的训练
对于监督学习来说,计算出损失函数,然后求出损失函数对各个模型参数的导数,即可对模型进行训练。
对神经网络模型而言,参数求导似乎是一个非常艰巨的任务,一是因为模型参数非常多;二是因为复合函数非常复杂。
事实上确实如此,但幸运的是,模型参数的导数之间是有关系的,利用这种关系可以高效地对所有参数进行求导。
小结
这篇文章告诉我们,如果有一天你成了大神,发明了什么算法,一定要慎重地给各种相关概念起名字。
大神们都知道咋回事,但容易误导他人啊!谁特么告诉我,输出为连续值的监督学习问题,怎么就叫Regression了?(摊手...)
-end-