TensorFlow的自动求导具体是在哪部分代码里实现的?
最近在构建nn的时候,发现使用内积导致了输出全0,所以研究下tf的自动求导机制。题目来自于知乎的一个问题《(34 封私信 / 77 条消息) TensorFlow的自动求导具体是在哪部分代码里实现的? - 知乎》,这个答案讲的很好,但是对其中log函数求导先求复共轭的逻辑有点疑惑,所以研究下复数求导相关机制。先从实数域的多元函数导数讲起,再讲复数域的多元函数导数机制。
tf梯度->方向导数存在的前提->多元可微
实数多源求导
1 实数域下多元函数的可微性
微分和导数是两个不同的概念。
- 对于一元函数,可微和可导完全等价。
- 对于多元函数,可微指的是可全微分。如果在偏导数存在且连续,那么可微
1.1 一元函数的可微性,可导,连续性
如果$y=f(x)$在点x可导,那么函数在该点必连续。反之,一个函数在某点连续但不一定在该点可导,例如函数$f(x)=\sqrt[3]{x}$在实数域内连续,但是在点x=0处不可导。对于一元函数,可微和可导完全等价。
1.2 多元函数的可微性,可导,连续性
雅可比矩阵:
1 复数与复平面
复数,为实数的延伸,它使任一多项式方程都有根。复数当中有个虚数单位,它是-1的一个平方根,即$i^2=-1$。任一复数都可表达为$x + yi$,其中x及y皆为实数,分别称为复数之“实部”和“虚部”。复数的发现源于三次方程的根的表达式。数学上,“复”字表明所讨论的数域为复数,如复矩阵,复变函数等。
复平面(英语:Complex plane)是用水平的实轴与垂直的虚轴建立起来的复数的几何表示。
2 全纯函数
全纯函数(英语:Holomorphic function)是复分析研究的中心对象;它们是定义在复平面上的,在复平面$C$中取值的,在每点上皆复可微的函数。全纯函数有时称为正则函数。在整个复平面上都全纯的函数称为整函数。在一点a全纯,不仅意味着a可微,而且表示在某个中心为a的复平面上的开邻域上可微。
2.1 定义
若$U$为$C$的开子集,且$f: U->C$为一个函数。
- 我们称$f$是在$U$中一点$z_0$是复可微的(complex differentiable)或全纯的,当且仅当该极限存在:
$$
f^{‘}(z_0)=\lim_{z \to z_0} \frac{f(z)-f(z_0)}{z-z_0} \quad
$$
- 若$f$在$U$上任取一点均全纯,则称f在$u$上全纯。
- 特别地,若函数在整个复平面全纯,我们称这个函数为整函数。
关于全纯函数还有一个等价的定义:一个复函数全纯当且仅当它满足柯西-黎曼方程。
3 复变函数可微性
4 Wirtinger导数
参考
- (34 封私信 / 77 条消息) TensorFlow的自动求导具体是在哪部分代码里实现的? - 知乎
- NMT Tutorial 3扩展b. 自动微分 | Tingxun’s Blog
- Python callable() 函数 | 菜鸟教程
- TensorFlow—计算梯度与控制梯度 : tf.gradients和compute_gradients和apply_gradients和clip_by_global_norm控制梯度_xinjieyuan的博客-CSDN博客
- 神经网络中复数函数求导 | zdaiot
- 全纯函数 - 维基百科,自由的百科全书
- 复数 (数学) - 维基百科,自由的百科全书
- 实值复变函数求导 ——(Wirtinger derivatives)_slsl97的博客-CSDN博客_实值复变函数求导
- (34 封私信 / 78 条消息) 复变函数如何理解(或学习)? - 知乎
- (34 封私信 / 78 条消息) 正则和全纯有什么区别? - 知乎
- 微分 - 维基百科,自由的百科全书