1

我对如何以正确的方式提升 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 确实有效,只是它返回我的缩放输入:-)。所以对于 sigmoid + 缩小:

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

以下 logit + upscaling 完美运行:

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;
}
4

1 回答 1

1

要将 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)

于 2015-08-12T11:54:01.087 回答