【问题标题】:How does tf.gradients manages complex functions?tf.gradients 是如何管理复杂函数的?
【发布时间】:2019-07-19 08:58:53
【问题描述】:

我正在研究复值神经网络。

对于复值神经网络,通常使用 Wirtinger 演算。那么导数的定义是(考虑到由于刘维尔定理,函数是非全纯的):

如果您阅读 Akira Hirose 的书《复值神经网络:进展和应用》,第 4 章的方程 4.9 定义:

当然也可以使用 Wirtinger 演算来计算偏导数。

张量流是这种情况吗?还是以其他方式定义?我找不到关于该主题的任何好的参考资料。

【问题讨论】:

  • 我对复分析知之甚少(或任何东西),但如果你能给出一些非全纯函数的例子,我们可以看看 TensorFlow 对梯度做了什么。虽然 TF 确实支持复杂的张量,但我不确定它们在多大程度上实现了梯度(对于简单的算术,它似乎有效,但我不知道更复杂的操作)。即使一个函数被 TensorFlow 视为“不可微分”,您也可以使用 tf.gradient 自己实现渐变(但这可能不是您现在感兴趣的)。

标签: tensorflow gradient complex-numbers autodiff


【解决方案1】:

好的,所以我在github/tensorflow 的现有线程中讨论了这个问题,@charmasaur 找到了响应,Tensorflow 用于梯度的方程是:

当使用 z 和 z* 的偏导数的定义时,它使用维廷格微积分。


对于一个或多个复变量的实值标量函数的情况,此定义变为:

这确实是复值神经网络 (CVNN) 应用程序中使用的定义(在此应用程序中,函数是确实真实的损失/误差函数)。

【讨论】:

  • 我已将其取消标记为解决方案,因为我仍然需要我可以引用的可验证来源/参考。我想要一个参考,断言这是 Tensorflow 的方程式或 Tensorflow 中的某个人与它一起工作,告诉我它确实是正确的。
  • 也要求here
猜你喜欢
  • 1970-01-01
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
  • 2021-01-10
  • 1970-01-01
相关资源
最近更新 更多