放大 sigmoid 结果?

Upscaling a sigmoid result?

我对如何以正确的方式放大 sigmoid 结果感到困惑。 例如我的 NN 的输入在 0,10 之间。我将其缩放到 -4,4 之间作为 sigmoid 的活动输入范围,我得到的结果可以说是 0.83201。 现在我想将其重新调整到 0,10 之间。

我认为 sigmoid 的逆函数是 logit 但是当我使用它时发生了有趣的事情:

float u = sig.LogSigmoid(sig.InputScaler(3,0f,10f,-4f,4f));
Debug.Log(-Mathf.Log(u/(1-u)));

结果:1.6。 而

float u = sig.LogSigmoid(sig.InputScaler(4,0f,10f,-4f,4f));
Debug.Log(-Mathf.Log(u/(1-u)));

结果:0.8。

编辑: 好吧,经过一些摆弄,我发现 Logit 确实只在 returns 我的缩放输入 :-) 上工作。 所以对于 sigmoid + 缩小:

float u = sig.LogSigmoid(sig.InputScaler(6,0f,10f,-4f,4f));

以下 logit + 升级非常完美:

Debug.Log(sig.InputScaler(-Mathf.Log((1-u)/u),-4f,4f,0f,10f));

InputScaler 是:

public float InputScaler(float x, float minFrom, float maxFrom, float minTo, float maxTo)
{
    float t = (((x-minFrom)*(maxTo-minTo))/(maxFrom-minFrom))+minTo;
    return t;
}

要将 sigmoid 的输出(在 [0,1] 范围内)重新缩放到 [0,10],您当然可以一般地使用 sig.InputScale(u,0f,1f,0f,10f),但当然在这种情况下缩放是就像 u*10f.

一样简单

但是,我不明白你为什么要说逆sigmoid。如果你想重新缩放一个函数的输出,你永远不需要反函数。

另一方面,如果您试图反转包含输入缩放的 sigmoid,那么您需要将 logit 的输出从 [-4,4] 缩小到 [0,10]:即sig.InputScale(Mathf.Log(u/(1-u)),-4f,4f,0f,10f).