【问题标题】:Activation function to get day of week获取星期几的激活函数
【发布时间】:2020-01-03 08:36:40
【问题描述】:

我正在编写一个程序来预测什么时候会发生。我不知道在星期几(1-7)中获得输出的激活函数。

我尝试了 sigmoid 函数,但我需要输入预测日期并输出它的概率,我不希望它是这样的。

我希望激活函数返回 0 到无穷大,ReLU 是这个任务的最佳激活函数吗?

编辑:

另外,如果我希望输出超过 7 天,例如 x 将在今天起第 9 天或从今天起第 15 天等发生,该怎么办?我正在寻找动态的方法来做到这一点

【问题讨论】:

  • 拥有 7 个输出节点并激活 softmax 怎么样?给出最大概率的那个是正确的
  • 也可以,但我只想要 1 个输出节点,这可能吗?

标签: neural-network artificial-intelligence activation-function


【解决方案1】:

您要做的是使用回归方法解决分类问题。这至少是非常规的。

您可以使用任何想要的激活函数并根据需要定义输出。例如。线性,relu,输出范围从 1 到 7 或介于 -1(或 0)和 1 之间的值,例如 tanh 或 sigmoid,并映射输出(-1 -> 1; -0.3 -> 2; ...)。

你的问题是你得到一个浮点数。因此,您的模型不仅要学习如何正确分类,还要学习如何预测输出神经元中所需的(几乎)准确数字。这使问题变得比它必须的更复杂。使用这样的模型,对于一些异常数据点,您可能会得到意外的返回值,例如 0、-1 或 8。那么您会怎么做?

总结一下:听听@venkata krishnan,使用 softmax 和 7 个输出神经元,如果需要,将这个结果映射到神经网络外部 1 到 7 之间的数字。

编辑

再次阅读 cmets 后,我想到的将是您想要什么和应该做什么的混合。

您可以尝试将倒数第二层设为 7 个神经元的 softmax 层,并将这些输出映射到最后一层的单个神经元。

我没有尝试过,也没有读过类似的东西,所以我不能告诉你这是不是一个好主意,可能不是,但你可能认为值得一试。

【讨论】:

  • 有道理,是的。那么,我可以为训练输出使所有输出使用 sigmoid 激活函数来训练并在实际需要的日期中输入 1,例如 0->0 ; 1->0 ; 2->1; 3->0 ;......;6->0 ?
  • 另外,如果我希望输出超过 7 天,例如 x 将在今天起第 9 天,或者从今天起第 15 天等发生,该怎么办?
  • 你可以做 Sigmoid,但这通常不是你对分类输出所做的。这些值实际上并不重要,只要将 softmax 应用于输出向量即可。如果您还没有,我强烈建议您阅读 softmax 的概率解释,例如在 this article 中。更应该将您的全部输出视为概率分布
【解决方案2】:

我想补充一下@venkata krishnan 的观点,这在您的问题设置中提出了一个有效的观点。您将在下面找到原始问题的答案,但我强烈建议您先阅读以下评论。

通常,您希望区分分类变量、有序变量和区间变量。我在a different answer on Stackoverflow 中给出了相对冗长的解释,更详细地理解这个概念可能会有所帮助。
在您的场景中,您最想了解“有多错”。当然,假设您在做什么并将其解释为区间变量是完全合理的,因此在不同值之间有一个假设的顺序(和距离)。
然而, 有问题的是,您假设 离散 变量上有一个连续 空间。例如,解释 4.3 的输出没有任何意义,因为您只能在 4(星期五,假设您从 0 开始编号)或 5(星期六)之间分辨。两者之间的任何值都必须四舍五入,这非常好 - 直到您想要对此损失执行反向传播。 这是有问题的,因为无论您如何“四舍五入”您的值,您本质上都是在引入非凸和非连续函数。同样,为了举例说明,您可以假设四舍五入到最接近的数字;然后,在 4.5 的值处,您会看到损失突然增加,这是非微分的,因此会给优化器带来困难,可能会限制系统的收敛。

相反,如果您按照@venkata krishnan 的建议使用多个输出神经元,您可能会在纸上丢失距离信息(您休息了多少天),但您当然仍然可以以任何方式解释您的损失你喜欢。对于离散值变量,这肯定是更好的选择。

回答您最初的问题:我个人会确保您的损失函数在上层和下层都有界,否则您可能会有未定义/不一致的损失值,这可能会导致低于标准的优化。一种方法是重新缩放 Sigmoid 函数(sigmoid(R) 的共同域是[0,1]。最终,您可以将输出乘以6,得到一个值范围为@987654329 @,并且可以(在四舍五入后)覆盖您想要的所有值。

【讨论】:

  • 那么,我可以使用 sigmoid 函数来解决这个特殊问题吗?并乘以 6?但是sigmoid函数不是用于概率吗?抱歉,我还是 ML 新手,所以我有点困惑
  • 没有激活函数在概率意义上有直接的解释,它总是取决于你如何看待你的结果以及你在做什么。这就是 Softmax 如此受欢迎的原因,因为它具有简洁的数学特性以及交叉熵损失。但是,是的,您可以在此处使用缩放的 Sigmoid,尽管实际上所有答案都反对它
  • 另请注意,简单的缩放本质上是按照您在另一个答案中所要求的:如果您突然更改天数/时间刻度,您仍然可以在技术上应用不同的刻度并重新训练而无需太多改变。
  • 那么,sigmoid 对概率来说不是强制性的吗?嗯,如果是这样,sigmoid 似乎是最好的方法,因为我需要更动态的方法来做到这一点。
  • 还有另一个问题,我如何扩大 sigmoid 函数的输出,我是否只需将其乘以所需输出的最大值?
【解决方案3】:

据我所知,没有像激活函数这样的东西会产生 0 到无穷大。您可以使用将返回概率的“Softmax”激活函数应用 7 个输出节点。还有另一种可能有效的解决方案。您可以使用“Binary”激活函数创建 3 个输出节点,该函数将返回 0 或 1。这意味着您可以有 8 个不同的输出,只有 3 个节点,即 000、001、010、011、100 , 101, 110 和 111。您可以使用其中的 7 个。

【讨论】:

  • 肯定有。 ReLU 的输出范围正是 OP 所说的。它的取值范围为[0, \infty]。我同意你对输出节点的观点,但你也必须意识到,分类值的概率分布会让你失去任何关于“距离”的信息(预测星期二而不是星期一可以说比预测星期五好星期一)。你不能直接从 softmax 恢复这个距离,除非你也改变你的损失函数。在类似的节点上,您的二元方法虽然很优雅,但仍然存在损失问题。
猜你喜欢
  • 2015-10-03
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-03
  • 2017-11-07
相关资源
最近更新 更多