为啥感知器学习算法不会收敛?

Posted

技术标签:

【中文标题】为啥感知器学习算法不会收敛?【英文标题】:Why won't Perceptron Learning Algorithm converge?为什么感知器学习算法不会收敛? 【发布时间】:2013-10-09 13:42:44 【问题描述】:

我已经在 Python 中实现了感知器学习算法,如下所示。即使有 500,000 次迭代,它仍然不会收敛。

我有一个带有目标向量 Y 的训练数据矩阵 X,以及一个要优化的权重向量 w。

我的更新规则是:

while(exist_mistakes): 
    # dot product to check for mistakes
    output = [np.sign(np.dot(X[i], w)) == Y[i] for i in range(0, len(X))]

    # find index of mistake. (choose randomly in order to avoid repeating same index.) 
    n = random.randint(0, len(X)-1)
    while(output[n]): # if output is true here, choose again
        n = random.randint(0, len(X)-1)

    # once we have found a mistake, update
    w = w + Y[n]*X[n] 

这是错的吗?或者为什么它在 500,000 次迭代后仍然没有收敛?

【问题讨论】:

我希望我能证明这一点,但对于任何给定的识别器来说,都应该有无数个无法训练的目标(或者 Kurt Gödel 会做一些后退)。 只是附注 - 错误分类示例的随机抽样效率非常低,您应该简单地遍历所有示例并更新每个错误分类。 您的感知器更新规则也缺少学习率参数,这会影响权重的收敛。 【参考方案1】:

基本问题是随机选择的点不一定是线性可分类的。

但是,算法还有一个更严重的问题:

即使您参考了 Vapnik 的“统计学习理论”等很好的参考资料,也不会遇到 OP 算法中最大的问题。问题也不在于学习率参数。证明学习率参数对算法是否收敛没有实际影响是微不足道的——这是因为学习率参数只是一个标量。

想象一组四个点进行分类。这四个点是长度为 sqrt(2) 的正交向量。 “课堂”点是(-1,1)。 “课外”点是 (-1,-1)、(1,1) 和 (1,-1)。无论学习率如何,OP 的原始算法永远不会收敛。

原始发帖人的算法无法收敛的原因是缺少偏置项(实际上是第 0 维项的系数),它必须增加其他维项。没有偏置项,感知器就没有完全定义。通过在 1D 或 2D 空间中手动建模感知器来证明这一点很简单。

偏差术语在文献中经常被用作“移动”超平面的一种方式,但这似乎主要是因为许多人倾向于在 2D 空间中教授/学习感知器以用于教学目的。 “移位”一词并不能充分解释为什么在高维空间中需要偏置项(“移位”100 维超平面是什么意思?)

人们可能会注意到,证明感知器平均收敛时间的文献排除了偏差项。这是因为如果您假设感知器会收敛,则可以简化感知器方程(参见 Vapnik,1998,Wiley,p.377)。对于证明来说,这是一个很大的(但必要的)假设,但是通过假设一个不完整的实现是无法充分实现感知器的。

Alex B. J. Novikoff 的 1962/1963 年感知器收敛证明包括这个零维项。

【讨论】:

【参考方案2】:

Perceptrons Perceptrons 由 Minsky 和 ​​Papert 在 1969 年著名地证明,感知器学习算法不能保证对于非线性可分的数据集收敛。

如果您确定您的数据集是线性可分的,您可以尝试为每个数据向量添加偏差,如问题所述:Perceptron learning algorithm not converging to 0 - 添加偏差可以帮助建模决策边界穿过原点。

或者,如果您想使用一种能够保证收敛到指定宽度边距的感知器学习算法的变体,即使对于不能线性分离的数据集,请查看Averaged Perceptron -- PDF。平均感知器是投票感知器的近似值,据我所知,这是在 Freund 和 Schapire 的一篇不错的论文中介绍的,"Large Margin Classification Using the Perceptron Algorithm" -- PDF。

使用平均感知器,您可以在训练期间每次展示训练示例后复制参数向量。最终的分类器使用所有参数向量的平均值。

【讨论】:

以上是关于为啥感知器学习算法不会收敛?的主要内容,如果未能解决你的问题,请参考以下文章

感知器学习算法不收敛到 0

感知器学习算法的参数调整

每月学习数理统计--《统计学习方法—李航》: 感知器

感知器代码实现--机器学习随笔2

深度学习——线性单元和梯度下降

神经网络算法:线性神经网络算法原理