神经网络之父 Geoff Hinton 推翻毕生心血「反向传播演算法」:打掉重来,AI 才有未来!(4)

多个输入

可以思考一下稍微复杂一点的神经网络,即一个神经元将有多个输入:

如果一个神经元有多个输入端怎么办,从 j 到 k 的权重更新规则会不会影响从 i 到 k 的权重更新规则?为了弄清这个问题,我们可以对 i 到 k 的权重手动求导。

我们可以从上面看到从i 到k 的权重更新是不依赖于从j 到k 权重的导数的,因此第一条准测就是损失函数对权重的导数不依赖于同层级神经网络上的其他任何权重的导数,所以神经网络同层级的权重可以独立地更新。同时该法则还存在更新的自然顺序,这种自然顺序仅仅只依赖于神经网络同一层级其他权重的值,这种排序是人工神经网络算法的反向传播的计算基础。

多个输出

接下来我们可以思考下有多个输出的隐藏层神经元。

在前面的基础上,唯一和前面权重更新有差别的是输入神经元与 i 神经元之间的求导法则。神经元多输出端的情况就是其有多个直接后继神经元,所以我们必须沿着以神经元 i 为根结点的所有路径来计算误差的总和。接下来我们可以详细地写出损失函数对权重求导而更新的过程,并且我们定义 σ(⋅) 就是神经元 i 的激活函数:

现在有两点需要注意,首先就是第二条推导准则:具有多个输出的神经元权重更新依赖于所有可能路径上的导数。

但是更重要地是我们需要看到反向传播算法和正向传播算法之间的联系。在反向传播的过程中,我们会计算神经网络输出端的误差,我们会把这些误差反向传播并且沿着每条路径加权。当我们传播到了一个神经元,可以 将经权重反向传播过来的误差乘以神经元的导数,然后就可以同样的方式反向传播误差,一直追溯到输入端。反向传播非常类似于正向传播,是一种递归算法。接下来会介绍误差信号,然后再改写我们的表达式。

误差信号

手动求出所有权重的更新是十分棘手的,特别是在有上百神经元和多层神经网络的情况下。但是我们在最后的几部分看到一种模式,即误差是沿着神经网络向前传播的。因此我们可以定义误差信号为每一个神经元的累积误差。

其衡量了随着数据输入到神经元 j,神经网络的误差改变了多少。使用误差信号有很好的性能,也就是我们可以用更紧凑的形式来表达反向传播。如果神经元 j 是一个输出节点,这也就意味着 (如果神经元 j 的激活函数是 f_j(⋅))。另外,如果神经元 j 是一个隐藏神经元,那么另一层的神经元 k 属于 j 的输出神经元。我们可以使用链式求导法则进一步解释 :

注意最后的偏导项∂y^ /∂zj,多神经元取决于 z_j,确切的说是所有 k∈outs(j)的神经元。我们在多个输出端的部分中看到,导致具有多个输出神经元的权重确实对这些输出神经元有影响。但对于每个神经元 k,我们有 ,每个 s_k 不取决于任何其它同层的结点。因此,我们可以再次使用链式规则并对 k∈out(j)的输出结点求和。

基于我们对误差信号的定义,我们已经知道 ,所以如果我们 (y^−y) 放入求和中,我们就能得到递归关系。现在我们能用紧凑的方程式表征反向传播误差。

最后,反向传播算法更新权重的一般形式可以表示为以下几个步骤:

1. 将训练样本沿整个网络前向传播,并且记录每一个 。

2. 对于所有的神经元 j 和每一个训练样本 y_i 计算误差信号 ,如果 j 是输出神经元,那么有():

如果 j 不是输出神经元,那么有()。

3. 通过以下更新法则更新权重。

上面是一般反向传播算法的推导和建立过程,我们从最简单与直觉的概念一步步完善并推导出最后的更新规则。虽然反向传播算法有着很多的局限性与不足,并且也有学者提出如解耦方法等理论解决反向传播算法的不足,但反向传播算法仍然是目前神经网络中最主流与强大的最优化方法。最后我们同样期待 Hinton 等人所提出的 capsule 能对反向传播算法有本质上的提升!

Hinton 基本上就是对目前这种结果不是很满意,因此提出了 Capsule 的概念。 Hinton 注意到一个目前大多数神经解剖学研究都支持的理论——大部分哺乳类,特别是灵长类大脑皮层中大量存在称为Cortical minicolumn 的柱状结构(皮层微柱),其内部含有上百个神经元,并存在内部分层。这意味着人脑中的一层并不是类似现在 NN 的一层,而是有更深一层的复杂内部结构。

Hinton 提出 Capsule 的核心观念就透过 coincidence filtering(巧合筛分)来在层与层之间找到最好的(处理)路径,最好的处理路径就等同于(正确)的处理图像、资讯了。 Hinton 并不认为一定要「完美」处理路径才是最好的, 有点类似于「人类认得出猫」不是完美的每一个都意识到是猫,能够(正确)处理图像才是重点。

发表评论

电子邮件地址不会被公开。 必填项已用*标注