【问题标题】:Encog AI Framework: Backpropagation with Gaussian Noise InjectionEncog AI 框架:使用高斯噪声注入进行反向传播
【发布时间】:2013-05-19 14:08:51
【问题描述】:

两周以来,我一直在通过工作台和 Java 代码修改 Encog 中的标准多层感知器和反向传播算法。我的下一份工作需要在输入模式中插入噪声,如本文所示:http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6033567 (MLP 神经网络训练中的 PCA 和高斯噪声提高了小数据集和不平衡数据集问题的泛化能力)

基本上,我需要(这是一个二元分类问题): 1 - 使用主成分分析 (PCA) 转换输入模式 2 - 使用反向传播训练 MLP,有一个技巧:在每个 epoch 的每个训练模式中插入不同的白噪声。

使用 Java 版本的 Encog 进行这种噪声注入的更直接的方法是什么?是否有任何可用的训练算法涉及人工噪声注入?

PS.:我引用的论文的完整算法是

1. 应用 PCA 去相关变量
2.初始化系统架构
3.设置k、最大epoch数和最小误差
4. 开始训练 - While epoch counter 一种。随机绘制输入模式(向量 x)而不替换表示
湾。将噪声注入输入模式
1. 对于输入模式中的每个变量
一种。从高斯分布中画出 g。 g ~ N(0,1)
湾。计算 n = k * g
C。添加 ninto 输入模式 x
C。呈现输入模式
d。调整系统参数
e.如果已达到训练停止标准,则
1. 停止训练
F。否则
1. 递增纪元计数器
2. 转至 4.a

【问题讨论】:

    标签: java neural-network backpropagation encog noise-generator


    【解决方案1】:

    我认为最好的方法是创建一个实现 MLDataSet 接口的类。然后,您将为新版本的 MLDataSet 提供常规 BasicMLDataSet(或其他数据集)。对于 size() 方法,您将返回每次迭代要训练的训练模式的数量。然后,每次调用新的 MLDataSet 以返回一个 MLDataPair,您从提供的数据集中随机选择一对,然后克隆此元素,并按照描述添加噪声,然后返回它。

    这听起来会实现论文所描述的吗?如果你最终实现了这个并且想将它贡献给 Encog 项目,那就太好了。如果你不这样做,我也可以自己尝试。

    【讨论】:

    • 我的评论太大了,所以我把它改成了下面的回复。
    【解决方案2】:

    我研究了 Backprop 类并想出了另一种看起来更通用和直接的方法。我创建了一个 ErrorStructure 接口、一个 NoisyBackpropagation 类和一个 NoisyGradientWorker。

    第一堂课概括了许多噪声注入技术(这个主题在上个月得到了新的关注,来自我在一些科学论文中看到的内容)。

    第二个类只是带有 ErrorStructure 属性的 Backprop。第三类是 GradientWorker,接收一个 NoiseStructure 作为参数,在训练过程中注入噪声。

    小窍门:

    • 一些 ErrorStructure 实现(特别是我希望 发布)将需要复杂的初始化参数派生自 训练集。我不能使用更通用的 MLDataSet。这并不严格 有必要,但我想在将来的某一天使用它。
    • 我必须添加 SSJ: Stochastic Simulation in Java 包作为依赖项或 NoiseStructure 计算将花费太长时间。我不知道 SSJ 会在多大程度上阻碍 Encog 的速度。

    顺便说一句,MLDataSet 调整解决方案似乎对一些高级重采样方案非常有用。

    【讨论】:

      猜你喜欢
      • 2016-02-07
      • 2020-06-08
      • 2014-08-26
      • 2016-08-17
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      • 2014-09-23
      • 1970-01-01
      相关资源
      最近更新 更多