首页 > 解决方案 > 如何使用多层感知器并在给定倾斜分布特征的情况下进行预测

问题描述

我对深度学习和 Keras 还很陌生,这个问题困扰了我好几个星期。希望我能从这里得到一些提示。

特点

我模拟了两个变量,每个变量都有 10k 个样本并遵循标准正态分布A ~ Norm(0, 1)B ~ Norm(0, 1).

标签

我从模拟变量中导出了两个标签y1 = A * By2 = A / B.

模型

输入维度:2

隐藏层:4个密集层,它们都是32个神经元宽

输出层:具有 1 个神经元的密集层

激活函数:ReLU适用于所有激活函数

编译器:'MSE'作为损失函数,'Adam'作为优化器,学习率为 1e-05

任务

最后,我设置了三个任务供 MLP 学习:
(1)使用 A、B 预测 y1;
(2)用A,B预测y2;
(3) 使用 A, 1/B 预测 y2

验证

用于'validation_split = 0.2'验证模型

结果和推理

在任务 1 中经过 10~15 个 epoch 后,训练集和验证集都可以轻松达到MSE1 以下。但是,对于其他两个任务,我总是会得到非常高的损失,例如 30k+ 的训练损失。

[更新] 我还通过 Pearson 相关系数评估了结果,任务 1 的返回值约为 0.7,任务 2 和 3 的返回值 <0.01。

这对我来说很奇怪,因为乘法(y1)和除法(y2)的概念在数学上是相同的。于是我试着研究了 1/B 的分布,我发现它的每一边都有很长的尾巴。我想这可能是困难的根源,但想不出任何策略。我还尝试在训练前对 1/B 进行归一化,但没有成功。

欢迎任何建议或评论。在网上或书本上都找不到这方面的讨论,真的很想在这方面取得一些进展。谢谢你。

标签: pythonmachine-learningneural-networkkerasdeep-learning

解决方案


y2 值的分布与 y1 值有很大不同,具体来说,它的绝对值要大得多。这意味着直接比较损失并不公平。

这有点像估计一个人的质量与估计一颗行星的质量,然后因为你少了数百万磅而感到沮丧。

举个例子,尝试计算所有三个问题的损失,但估计器只能猜测 0.0。我怀疑问题 1 的损失会比其他两个低得多。


推荐阅读