深度学习与支持向量机的分类原理异同
深度学习利用神经网络对数据进行分类,我们来看看其分类的本质是什么。
下面我们来看一个2层的神经网络中的第1层:
输入a可以看作三维空间的一个点,输出z可以看作两维空间的点。从输入a到输出z,首先输入向量a左乘了一个变换矩阵w,经历了坐标变换被压缩了一维,然后再进行了一个sigmoid函数映射,实质上是对二维空间进行了扭曲(非线性化)。
然后再进行一个二维坐标变换和sigmoid映射,最后输出结果。
很明显,就是线性变换-非线性化-线性变换-非线性化-结果。
其实这个例子不太恰当,我更喜欢低维的向量映射到高维空间中,这样更好理解。
比如一个二维向量,通过三维变换(当然第z维可以任选,因为二维向量的三维坐标为0)映射到高维空间中,通过**函数(如tanh,sigmoid)非线性化后,即可用平面或超平面对数据进行线性分类。
这个线性的超平面通过非线性化和坐标变换的逆变换后回到正交标准坐标系中,会变成一个非线性化的超平面,直接上图:
上图是在标准正交坐标系下的曲线与分类界面,这个坐标系经过线性变换与**函数非线性变换后,变成如下坐标系:
在这个非线性坐标系上,曲线反而能被线性平面分开了。线性分界面再逆变换回去,就变成上上图的非线性分界面。
本质上,深度学习是将要分类的对象经过多次线性变换,映射到高维和低维空间后再进行非线性变换,把空间扭成麻花后,正好可以用一个线性超平面把不能在标准正交坐标系中线性分类的数据,进行了线性分类。在分类时,不用把这个线性分类平面变换回标准正交坐标系,直接把需要分类的数据变换到麻花坐标系中即可。
线性变换的空间维数即每一层的神经元个数。我感性上认为从低维映射到高维空间后更容易分类。
多说一句,即使做一万个线性变换,不能线性分类的数据还是不能分,一定要有**函数进行非线性变换后,数据才有可能进行线性分类。
对于支持向量机,首先说一个小故事:
就比如上面那个情况,我们可以人为计算出这种映射,比如一个样本点是用坐标表示的(x1,x2),它有个类标签,假设为1,那么把这个点映射到三维中变成
因此,支持向量机只能从低维映射到高维,通过非线性映射后,对数据进行线性分类。
还有一个不同点,支持向量机只能二分类,而深度学习可以多分类。这是由它们的分类原理决定的。支持向量机是使分类超平面离两个最近的不同类的点的距离相等,来确定超平面的,而深度学习是计算需要分类的数据与分类类别的相似度来实现分类的。
深度学习中的某一个类别比如猫,包含了训练数据中所有猫的特征,站立,躺卧,行走,蜷缩等,但它为什么能判断某一个特定图像中的猫呢,这和**函数有关。**函数不仅提供非线性,而且在判别的过程中,如果图像中是站立的猫,那么分类模型中躺卧、蜷缩等特征是不被**的,只有站立的特征才**。站立特征匹配度很高的时候,输出的相似度数据也很高。至于具体怎么实现的,我目前也没琢磨明白。
结论:
深度学习与支持向量机的分类原理相同之处:都是通过非线性矩阵变换后,用线性超平面对数据进行分类。
不同之处:深度学习可以向低维和高维空间进行变换,而线性变换和非线性变换是分两步走的,支持向量机只能由低维向高维映射,其变换是通过核函数一步完成的。深度学习可以多分类,支持向量机只能二分类。