当您在 Wikipedia 上阅读感知器变体时,会解释一种算法:Pocket Algorithm据说:
通过将迄今为止看到的最佳解决方案“装在口袋里”来解决感知器学习的稳定性问题
但是,关于算法的解释不多,我想看看它的一些伪代码,以及如何手动实现的解释。
当您在 Wikipedia 上阅读感知器变体时,会解释一种算法:Pocket Algorithm据说:
通过将迄今为止看到的最佳解决方案“装在口袋里”来解决感知器学习的稳定性问题
但是,关于算法的解释不多,我想看看它的一些伪代码,以及如何手动实现的解释。
在 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
我发现该博客对理解袖珍算法非常有帮助。我正在摘录该博客。
袖珍学习算法
这个想法很简单:这个算法将迄今为止看到的最好结果保存在它的口袋里(这就是它被称为口袋学习算法的原因)。最好的结果意味着错误分类的数量最少。如果新权重产生的错误分类数量少于口袋中的权重,则将口袋中的权重替换为新权重;如果新的砝码不比口袋里的好,把那个放在口袋里并丢弃新的砝码。在训练迭代结束时,算法返回口袋中的解,而不是最后的解。
伪代码