シグモイドの結果を正しい方法でアップスケールする方法について混乱しています。たとえば、私の NN の入力は 0 から 10 の間です。これをシグモイドのアクティブな入力範囲として -4,4 の間にスケーリングすると、0.83201 という結果が得られます。今、これを 0,10 の間に再スケーリングしたいと思います。
シグモイドの逆はロジットだと思っていましたが、これを使用すると面白いことが起こります:
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。
編集:いくつかいじった後、わかりましたが、ロジットが機能するのはスケーリングされた入力のみを返すことがわかりました:-)。シグモイド+ダウンスケーリングの場合:
float u = sig.LogSigmoid(sig.InputScaler(6,0f,10f,-4f,4f));
次のロジット+アップスケーリングは完璧に機能しました:
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;
}