【问题标题】:What is the perceptron learning algorithm?什么是感知器学习算法?
【发布时间】:2017-04-01 16:47:16
【问题描述】:

在感知器(一层神经网络)中,更新权重和偏差的算法是什么?我知道有多种算法,但是是否有一种易于在代码中实现的标准算法?

【问题讨论】:

  • 那么你在维基百科学到了什么?

标签: machine-learning neural-network perceptron


【解决方案1】:

标准算法是gradient descent using back-propagation。算法是这样的:

  1. 猜测初始权重和偏差。
  2. 计算“前向传递”,您可以在其中使用权重和偏差来计算估计值y_hat。
  3. 计算损失,即真实值 y 与您从第 2 步计算的估计值 y_hat 之间的差。
  4. 计算每个权重和偏差的损失梯度。这个梯度将以小浮点数的形式出现。此步骤称为“反向传播”,并将其命名为“反向传播”,其中该损失梯度被向后推。
  5. 通过添加梯度来更新权重和偏差。

在您多次重复步骤 2 到 5 之后(称为 epoch),您有望获得最佳权重和偏差。

【讨论】:

  • 他不需要反向传播来解决这个简化的问题!
  • 不,我不知道,这仅适用于具有隐藏层的网络。我需要一个将旧权重和偏差与新权重关联起来的明确方程式。
  • @HarrisonRankin Wiki 仍然为您提供所需的完整算法。我真的不明白你的不情愿……
  • 这个答案并不是 OP 真正要问的 - 他要求一个简单的感知器算法,但答案描述了基于梯度的 mlp 训练(值得注意的是,感知器学习的基本形式 是不是梯度训练)
【解决方案2】:

感知器是一个线性的二元分类器。它通常使用 delta 规则进行训练:

w <- initialize randomly (e.g. uniformly in [-1, 1])
learning_rate <- 0.42  # something in (0, 1)
for epoch in range(42):
    y <- perceptron_classification(x)
    w <- w - learning_rate * (y - target) * x

如果您想查看一个有效的(经过测试的)最小实现,请查看我的存储库:https://github.com/MartinThoma/algorithms/tree/master/perceptron

【讨论】:

  • 经典感知器没有学习率,也没有迭代次数,因为它被设计为仅适用于线性可分数据集。
【解决方案3】:

我认为,我应该提供一些材料,您可以从中开始并快速了解端到端的算法。

考虑这本书:Neural Networks: A Systematic Introduction,但 Raúl Rojas。

关于感知器学习,请参阅第 4.2 节

对于执行学习的空间的非常好的概述、意图、算法、收敛和可视化。我建议先阅读第 3 章,然后阅读第 4 章。

【讨论】:

    猜你喜欢
    • 2017-05-02
    • 2013-10-09
    • 1970-01-01
    • 2014-07-03
    • 2011-02-15
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多