概述
最近发现了一个传统算法,非常适合描述多层感知机(Multi-Layer Perceptron,MLP)的模型逻辑,其算法逻辑也非常清晰简单,所以在这里再对比一下,方便大家更容易理解多层感知机的内容,这篇文章不会写复杂的数学公式。想从数学方面去更多的理解多层感知机的内容可以查看往期的文章。
二叉空间分割树
什么是二叉空间分割(Binary Space Partitioning)?它是一种通过使用超平面(Hyperplane)作为划分工具,递归地将空间细分为两个凸集的方法。而生成的数据结构是一个二叉树,即二叉空间分割树。它是由Fuch和Kedem在1980年首先提出的。它的基本思想是基于这样一个事实,任何超平面都可以将空间分割成两个半空间。如果我们在任何半空间中也有一个超平面,它会进一步将此半空间分割为更小的两个子空间。我们可以将这一过程一直进行下去,将子空间分割得越来越小,直到达到终止条件构造成一颗二叉树。其算法逻辑如下:
1、整个空间被表示为根节点。
4、这个过程需要在划分的每个子空间中递归重复,以最终构造完整的二叉树,其中每个叶节点都可被区分(即子空间不能再次被细分,如左侧不能再分割出更多的独立五角心)。
整体来说,二叉空间分割树(BSP Tree)是非常简单且常用的算法,运行逻辑也很清晰。其应用范围也是非常多的尤其在3D渲染上,感兴趣的可以搜索关于二叉空间分割树的内容深入了解,或者更多的细节及代码也可以参考下文的链接。
多层感知机
理解了二叉空间分割树,其实也就理解了多层感知机的模型逻辑,他们在运行的核心逻辑上是没有区别的。有区别是空间划分的数量及实现这种逻辑的方式。两者空间划分的数量是不同的,多层感知机构造的不是二叉树,而是多叉树,因为多层感知机的每一层都会将空间划分为大于等于2个子空间。实现方式也会有差异,这是必然的,因为多层感知机是学习算法,多层感知机是通过节点权重构造的多个分离超平面来划分空间的。
如上图,三个超平面将空间划分为6个子空间,这种属于比较巧合的情况,实际上三个超平面在隐藏层一般会将二维空间划分为7个子空间。
递归的在子空间内再次划分子空间,如上图R1这个子空间被再次划分为了6个子空间,而递归的次数是由多层感知机的层数决定的,层越多递归次数越多,那么划分的子空间一般会更多。
上图中为了简洁只画了一个子空间R1的情况,实际是每个子空间都和R1一样被划分,当然每个子空间区域划分的所使用的超平面一般是不同的。
而反向传播算法(Back propagation)的本质就是求这样的递归逻辑下超平面组合的全局最优解,也就是如何通过优化各层放置超平面的位置使得分类(回归)误差最小化。
总结
这篇文章只简单概述模型逻辑,即说明二叉空间分割树的算法逻辑和多层感知机是完全一致的。至于多层感知机的超平面从何而来,这个以前的文章已经说明了,每个隐藏节点都会构造一个超平面,分类层也会构造一个或多个超平面,如果不排斥数学的话可以查看往期的文章。当然本文多层感知机隐藏层使用的ReLU激活函数,其他激活函数性质没这么好所以没怎么研究。
参考:
- Binary Space Partitioning Trees
- Binary Space Partitioning Tree Tutorial