用于训练感知器的袖珍算法

机器算法验证 机器学习 算法
2022-03-16 14:31:05

当您在 Wikipedia 上阅读感知器变体时,会解释一种算法:Pocket Algorithm据说:

通过将迄今为止看到的最佳解决方案“装在口袋里”来解决感知器学习的稳定性问题

但是,关于算法的解释不多,我想看看它的一些伪代码,以及如何手动实现的解释。

3个回答

在 Rojas 的神经网络书籍中对此进行了更全面的讨论,该书籍可从他的网站获得。我相信这本书还包含对介绍算法的原始论文的参考。

http://www.inf.fu-berlin.de/inst/ag-ki/rojas_home/pmwiki/pmwiki.php?n=Books.NeuralNetworksBook

编辑:是的,这是 Gallant 的伪代码原论文:

https://www.ling.upenn.edu/courses/Fall_2007/cogs501/Gallant1990.pdf

基本上,口袋算法是一种感知器学​​习算法,具有保存迭代结果的内存。您可以考虑类似于以下内容的口袋算法:

def pocket(training_list, max_iteration):
    w = randomVector()
    best_error = error(w)
    for i in range(0, max_iteration):
        x=misclassified_sample(w, training_list)  
        w=vector_sum(w, x.y(x))
        if error(w) < best_error :
            best_w = w
            best_error = error(w)
    return best_w

我发现该博客对理解袖珍算法非常有帮助。我正在摘录该博客。

袖珍学习算法

这个想法很简单:这个算法将迄今为止看到的最好结果保存在它的口袋里(这就是它被称为口袋学习算法的原因)。最好的结果意味着错误分类的数量最少。如果新权重产生的错误分类数量少于口袋中的权重,则将口袋中的权重替换为新权重;如果新的砝码不比口袋里的好,把那个放在口袋里并丢弃新的砝码。在训练迭代结束时,算法返回口袋中的解,而不是最后的解。

伪代码

在此处输入图像描述