私の理解では、いくつかの機能があります。
fb(A) = B
fc(A) = C
上記の関数、つまり A からこれらのそれぞれへのマッピングを知っていますか? B が D に近づくように最適化したい場合は、以下を選択する必要があります。
- 近いとはどういう意味ですか。||BD||^2 を最小化するなど、B と D の場合のベクトル ノルムを確認できます。この差の要素の二乗の標準的な合計は、おそらくそのトリックを実行し、計算上優れています。
- 最適化する方法。これは、ローカルミミナが必要かグローバルミミナが必要かなど、機能に大きく依存します。
つまり、基本的に、問題を最小化するように煮詰めました。
コスト = ||fb(A) - fd(A)||^2
確かにできることの 1 つは、A の個々の要素に関してこのコスト関数の勾配を計算し、適切な「時間ステップ」を使用して順オイラー法で最小化ステップを実行することです。これは高速ではないかもしれませんが、十分に小さいタイム ステップと適切に動作する十分な関数を使用すると、少なくとも極小値に到達できます。
これの勾配を計算する
grad_A(コスト) = 2*||fb(A)-fd(A)||*(grad_A(fb)(A)-grad_A(fd)(A))
ここで、grad_A は A に関する勾配を意味し、grad_A(fb)(A) は A で評価された関数 fb の A に関する勾配を意味します。
grad_A(fb)(A) の計算は、fb の形式に依存しますが、ここにいくつかのページに「行列計算」の恒等式と説明があります。
行列計算の恒等式
行列計算の説明
次に、前方オイラー更新を行うことにより、 A で勾配降下を実行するだけです。
A_next = A_prev - タイムステップ * grad_A(コスト)