首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perceptron一直只学会复制一个模式。

Perceptron一直只学会复制一个模式。
EN

Stack Overflow用户
提问于 2015-04-30 17:01:27
回答 1查看 262关注 0票数 0

这是个相当奇怪的问题。

A有一个反向传播代码,其工作原理非常完美,如下所示:

现在,当我进行批量学习时,我得到了错误的结果,即使它只是一个简单的标量函数近似。

经过培训,网络对所有输入模式产生几乎相同的输出。

在这一刻,我已经尝试过:

  1. 引入偏置权
  2. 尝试过输入权值的更新和不更新
  3. 在批次学习中改变模式
  4. 尝试在每个模式之后更新并积累
  5. 以不同可能的方式初始化权重
  6. 重复检查代码10次。
  7. 按模式数目计算的规范化累积更新
  8. 试过不同的层,神经元数
  9. 尝试不同的激活函数
  10. 尝试不同的学习率
  11. 尝试了从50到10000的不同的历次。
  12. 试图使数据规范化

我注意到,在对一种模式进行了大量的反向传播之后,网络为大量的输入产生了几乎相同的输出。

当我试图逼近一个函数时,我总是只得到一行(几乎是一条线)。如下所示:

相关问题:Neural Network Always Produces Same/Similar Outputs for Any Input和增加偏置神经元的建议并没有解决我的问题。

我找到了这样的职位:

代码语言:javascript
复制
When ANNs have trouble learning they often just learn to output the
average output values, regardless of the inputs. I don't know if this 
is the case or why it would be happening with such a simple NN.

这足以说明我的处境。但该如何处理呢?

我的结论是,我所遇到的情况是有权利的。实际上,对于每一种网络配置,您可能只需将所有连接“剪切”到输出层。这实际上是可能的,例如,通过将所有隐藏的权重设置为接近零,或者将偏差设置在一些疯狂的值上,以使过饱和隐藏层,并使输出独立于输入。在此之后,我们可以自由地调整输出层,以便只复制输出,因为它独立于输入。在批量学习中,所发生的情况是梯度平均,而网络只复制目标的平均值。输入不起任何作用。

EN

回答 1

Stack Overflow用户

发布于 2015-05-02 05:24:13

我的答案不能完全准确,因为你还没有发布perceptron(...)backpropagation(...)函数的内容。

但是根据我的猜测,您在一个数据上对您的网络进行了多次培训,然后在一个循环for data in training_data中对另一个数据进行了完全的训练,这导致您的网络只记住最后一个数据。相反,尝试在每个数据上对您的网络进行一次培训,然后多次这样做(反转嵌套循环的顺序)

换句话说,for I = 1:number of patterns循环应该在backpropagation(...)函数的循环中,因此这个函数应该包含两个循环。

示例(在C#中):

这里是反向传播函数的一些部分,我在这里简化了它。在每次更新权重和偏差时,整个网络都会被“传播”。在这个网址上可以找到以下代码:https://visualstudiomagazine.com/articles/2015/04/01/back-propagation-using-c.aspx

代码语言:javascript
复制
public double[] Train(double[][] trainData, int maxEpochs, double learnRate, double momentum)
{
    //...
    Shuffle(sequence); // visit each training data in random order
    for (int ii = 0; ii < trainData.Length; ++ii)
    {
        //...
        ComputeOutputs(xValues); // copy xValues in, compute outputs 
        //...
        // Find new weights and biases
        // Update weights and biases
        //...
    } // each training item
}

可能不起作用的是,您只想在这个注释之后(以Batch learn为例)将所有内容都包含在第二个for循环中,以完成多个学习阶段:

代码语言:javascript
复制
%--------------------------------------------------------------------------
%% Get all updates
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29973691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档