实值复变函数求导 ——(Wirtinger derivatives)_wirtinger导数-程序员宅基地

技术标签: 算法  虚数  神经网络  数字信号处理  

1.背景知识

在工程应用中,特别是信号处理领域,经常会遇到一些关于复信号的计算,一个典型的例子就是著名的快速傅里叶变换(FFT),它会将实信号也映射为复信号。与实信号相比,复信号包含额外的相位信息。某些物体,例如phase object,其有效信息完全包含在相位信号中。 而且实数作为复数的一个子集,针对复信号设计的算法往往有更加广泛的应用。因此,研究复信号是非常有必要的。    

一些余弦波叠加的FFT分析(图片来源:维基百科)

常见的对的复信号的处理是将其实部和虚部分开,然后进行单独处理,这样就可以用处理实信号的方法解决复信号的问题。但是,这种方法往往包含很多重复步骤分别用来处理实部和虚部。 我们希望能够直接在复数域进行相关分析,从而让整个算法的结构变得更加精简。

信号复原是信号处理中一个重要的方向,主要研究根据测量结果恢复出原始信号,而这个问题常常被看作是一个优化问题。解决优化问题经常要用到函数的梯度,因此有必要研究复变函数的一些求导理论。

2.经典的复变函数可导性

在传统的复变函数理论中,可导性的要求非常严格,具体定义为:如果复变函数f(z)z_0处可导,那么极限

                                                                   \lim_{z \to z_0} \frac{f(z)-f(z_0)}{z-z_0}

总是存在,与z趋近于z_0的路径无关。因此,若将其写成实部和虚部的形式,那么对于函数f(z) = u(z)+iv(z)和变量z = x+iy, 必须满足条件:

                                                                           \frac{\partial u}{\partial x} = \frac{\partial v}{\partial y}, \frac{\partial u}{\partial y} = -\frac{\partial v}{\partial x},

这一性质与势能函数类似,即做功只与始末位置有关,而与路径无关,比如重力势能只与高度有关。因此其在一个封闭路径上的积分为0,从而可导函数具有上述的偏导数约束。 

重力势能(来源:百度百科)

                         

这种定义下的导函数是实数导数理论的一个直接推广,但是适用性较窄,使用时限制条件较多。一类典型的不具有这种可导性的函数包括所有的实值复变函数(非常函数)。对于这种函数,u(z)不为常数,v(z) = 0,因此\frac{\partial v}{\partial y} = \frac{\partial v}{\partial x} = 0,必不满足上述偏导数条件。但是,这类实值函数在实际应用中很常见,一个例子是评价函数。对于一个复原后的复信号,我们对它的评价一定为一个实数,这样才可以用该指标的大小评价信号的好坏(一般复数无法直接比较大小)。在模仿深度学习进行误差反向传播更新的过程中,必然会涉及到实值复变函数的求导,而上述导数定义无法使用,因此引入了Wirtinger导数体系解决这个问题。

3. Wirtinger 导数

Wirtinger 导数由Remmert与1995年提出 [1],用于解决实值复变函数的问题。首先通过实部与虚部分离的方法研究一个复变函数f(z) = F(x,y) = U(x,y)+iV(x,y), z = x+iy的微分问题。根据多元函数的微分性质

                                                dF = \frac{\partial F}{\partial x} dx +\frac{\partial F}{\partial y} dy = \frac{\partial U}{\partial x} dx + \frac{\partial V}{\partial x} idx + \frac{\partial U}{\partial y} dy + \frac{\partial V}{\partial y} idy,

根据z与x和y的关系,可将其改写成关于z的微分:

                                                                              x = \frac{z+z^*}{2}, dx = \frac{dz+dz^*}{2}\\ ~~~~~y = \frac{z-z^*}{2i}, dx = \frac{dz-dz^*}{2i},

带入上式可得,若dF = \frac{\partial F}{\partial z}dz + \frac{\partial F}{\partial z^*}dz^*,那么

                                                                                  \frac{\partial }{\partial z} = \frac{1}{2}(\frac{\partial }{\partial x}-i\frac{\partial }{\partial y})\\ ~~~~~\frac{\partial }{\partial z^*} = \frac{1}{2}(\frac{\partial }{\partial x}+i\frac{\partial }{\partial y}),

这两个导数就被称为Wirtinger导数(Wirtinger derivatives)。

根据上述定义,可以得到一个Wirtinger求导法则中非常重要的一组等式

                                                              \frac{\partial z^*}{\partial z} = \frac{1}{2}\left[\frac{\partial x}{\partial x}-i\frac{\partial (-iy)}{\partial y}\right] = 1-i*(-i) = 0\\ ~~~~~\frac{\partial z}{\partial z^*} = \frac{1}{2}\left[\frac{\partial x}{\partial x}+i\frac{\partial (iy)}{\partial y}\right] = 1+i*i = 0.

类比多元函数中偏导数恒为零的情况,我们可以很自然得得出一个结论:在Wirtinger求导法则中,zz^*可以看作两个互不相关的变量,只要分别对其单独求导即可。例如,对z求导时,可将z^*看作常量,反之亦然。

最后举一个例子。复数的模平方的计算公式为\|z\|^2 = z^*z,那么在Wirtinger导数体系下,其关于z的导数为

                                                                 \frac{\partial \|z\|^2}{\partial z} =\frac{\partial z^*z}{\partial z} = z^*, \frac{\partial \|z\|^2}{\partial z^*} =\frac{\partial z^*z}{\partial z^*} = z.

模函数也为一个实值函数,它也具有实值函数特有的求导性质

                                                                                         dF = 2Re(\frac{\partial F}{\partial z}dz).

对于梯度下降法,其最速下降方向为\frac{\partial F}{\partial z^*},其中F为实值复变函数。

参考文献:

[1] Remmert, R. (1991). Theory of complex functions (Vol. 122). Springer Science & Business Media.

[2] (一份实用课件) https://mediatum.ub.tum.de/doc/631019/631019.pdf

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_37872766/article/details/107673096

智能推荐

JS对table添加删除一行_var row = btn.parentnode.parentnode; r-程序员宅基地

文章浏览阅读1k次。添加一行,并用AJAX提交数据。 function submitForm() { var name = $("#name").val(); var description = $("#description").val(); var url = $("#url").val(); $.ajax({ url: '/admin/ops', type:_var row = btn.parentnode.parentnode; row.parentnode.removechild(row);

HTML学习记录(列表标签&属性)_列表标签的属性-程序员宅基地

文章浏览阅读196次。ol:有序列表标签属性值描述type1,A,a,I,i规定列表顺序类型reversed (HTML5新加)reversed列表倒叙startnumberHTML5不支持,规定列表起始<ol type="A/a/I,i">ul:无序列表标签属性值描述typedisc,square,circle规定列表顺..._列表标签的属性

FFmpeg 编译支持的格式_ffmpeg g722-程序员宅基地

文章浏览阅读332次。[meng@localhost ffmpeg-4.3.2]$ ./configure --helpUsage: configure [options]Options: [defaults in brackets after descriptions]Help options: --help print this message --quiet Suppress showing informative output --_ffmpeg g722

Python GUI 快速入门_pygui-程序员宅基地

文章浏览阅读2.6k次,点赞4次,收藏22次。GUI 就是图形用户界面的意思,在 Python 中使用 PyQt 可以快速搭建自己的应用,使得自己的程序看上去更加高大上,学会 GUI 编程可以使得自己的软件有可视化的结果,更方便地参加 “互联网+”或其他创新创业大赛。目 录1 安装PyQt 与QtDesigner2 添加GUI 到 PyCharm3 界面设计测试小程序1 安装PyQt 与QtDesigner如果你想用 Python 快速制作界面,可以安装 PyQt:pip install pyQt5 -ih..._pygui

以吃货联盟初级改版为例,(面向对象初级程序设计模拟网上点餐控制台程序(第一版未使用工具辅助类)。_吃货(多实例测试)-程序员宅基地

文章浏览阅读999次,点赞2次,收藏6次。面向对象最初级程序设计思维:设计过程与抽象过程,(类是对象的模板与抽象,是具有相同属性和方法的一组对象的集 合,对象是类的实体,由属性与行为共同组成一个具体的实体。) 类与对象的关系:类是对象抽象,对象是类的实例化实体。 使用类图理解类的关系 面向对象三大特性应用:1、封装 ;2、继承;3、多态;是程序设计更符合人思考的方式。 封装:{维护数据安全性将属性私有化(以包机制,与private..._吃货(多实例测试)

Camstar技术介绍-程序员宅基地

文章浏览阅读212次。Camstar_camstar

随便推点

Oracle中通过存储过程,Function,触发器实现解析时间类型的字段并插入的对应的数据表中...-程序员宅基地

文章浏览阅读71次。摘要:之前在项目中解决了插入字符串类型的数据,今天试着写了一个插入date类型的字段,成功了,现在记录一下,以便以后查看:一:首先建立一个根据xml节点名称获取对应的xml值的Function.sql:CREATE OR REPLACE FUNCTION MIP.GetXmlNodeValue (xmlStr CLOB, nodeName VARCHAR2) RETURN VAR..._oracle sql 触发器中对date类型的字段的处理

KCF -目标检测算法总结_kcf 目标检测-程序员宅基地

文章浏览阅读1.1w次,点赞7次,收藏48次。KCF简介KCF是一种鉴别式追踪方法,这类方法一般都是在追踪过程中训练一个目标检测器,使用目标检测器去检测下一帧预测位置是否是目标,然后再使用新检测结果去更新训练集进而更新目标检测器。而在训练目标检测器时一般选取目标区域为正样本,目标的周围区域为负样本,当然越靠近目标的区域为正样本的可能性越大。简单来说 KCF 是 核相关滤波算法,滤波器 和 跟踪patch 进行相乘的到相关性,对应位置较..._kcf 目标检测

汇编语言编一程序段,求双字(DX,AX)的绝对值_汇编语言求双字长数的绝对值-程序员宅基地

文章浏览阅读4.7k次。a100mov ax,ffff;把双字长数的低字放到AX中mov dx,ffff;把双字长数的高字放到DX中test dx,8000;测试双字长数的符号jz 0113;如果是非负数,则直接保存neg dx;如果是负数,则求补neg ax;求补sbb dx,0int 3g=073f:0100 0113运行附图如下:..._汇编语言求双字长数的绝对值

Qt安装MySQL驱动,解决QMYSQL driver not loaded问题_qsmqldriver-程序员宅基地

文章浏览阅读222次。根据项目https://github.com/thecodemonkey86/qt_mysql_driver翻译Get precompiled qsqlmysql.dll from releases获取编译后的qsqlmysql.dll 链接不是很懂这两个有什么区别之后put qsqlmysql.dll (if release build) / qsqlmysqld.dll (if debug build, but note that when using MinGW 8.1.0 the d_qsmqldriver

Java面试题目大汇总(附参考答案)-程序员宅基地

文章浏览阅读1.4w次,点赞61次,收藏333次。足足准备了长达3个月的面试,终于在上周拿到了阿里的offer!博主汇总整理了一份我面试之前看的一些Java面试题目,可以说是非常详细!分享给大家,希望对正在面试Java岗位的朋友有帮助哈~~(文末附参考答案)Java基础相关面试题目:JDK 和 JRE 有什么区别? == 和 equals 的区别是什么? 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? final 在 java 中有什么作用? java 中的 Math.round(-1.5)

网络存储服务ip-san搭建_ipsan搭建-程序员宅基地

文章浏览阅读2k次。一.什么是ip-sanip-san也就是SAN(全称Storage Area Network,存储局域网络),它的诞生,使存储空间得到更加充分的利用,并使得安装和管理更加有效。SAN是一种将存储设备、连接设备和接口集成在一个高速网络中的技术。SAN本身就是一个存储网络,承担了数据存储任务,SAN网络与LAN业务网络相隔离,存储数据流不会占用业务网络带宽。在SAN网络中,所有的数据传输在高速、..._ipsan搭建

推荐文章

热门文章

相关标签