据我了解,您有一些功能。
fb(A) = B
fc(A) = C
你知道上面列出的函数,即你知道从 A 到每个函数的映射吗?如果你想尝试优化,使B接近D,你需要选择:
- 关闭是什么意思。您可以查看 B 和 D 情况的一些向量范数,例如最小化 ||BD||^2。这种不同元素的标准平方和可能会起作用并且在计算上很好。
- 如何优化。这在很大程度上取决于您的功能,无论您是想要本地还是全局 mimina 等。
所以基本上,现在我们将问题归结为最小化:
成本 = ||fb(A) - fd(A)||^2
您当然可以做的一件事是计算此成本函数相对于 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 的形式,但这里有一些页面有“矩阵演算”的标识和解释。
矩阵演算恒等式
矩阵演算解释
然后,您只需通过前向 Euler 更新对 A 执行梯度下降:
A_next = A_prev - 时间步长 * grad_A(成本)