机器之心报道
编辑:杜伟、陈萍
其实,针对不同类型的任务,我们可以有选择性地使用傅里叶变换或神经网络。
函数逼近(function approximation)是函数论的一个重要组成部分,涉及的基本问题是函数的近似表示问题。函数逼近的需求出现在很多应用数学的分支学科中,尤其是计算机科学。具体而言,函数逼近问题要求我们在定义明确的类中选择一个能够以特定于任务的方式匹配(或逼近)目标函数的函数。
目前,领域内可以实现函数逼近的方式有很多,比如傅里叶变换以及近年来新兴的神经网络。这些函数逼近器在实现过程中采用的方法各有不同,效果也各有差异。
近日,reddit 上的一个热议帖子「对傅里叶变换和神经网络作为函数逼近器进行了比较」。
发帖者认为,这是一个基础性问题。ta 提出了疑问,「如果神经网络的主要前提是全局函数逼近器,那么与傅里叶变换等其它也被证明能逼近任何函数的逼近器相比有哪些优势?为什么整个监督学习没有变成计算傅里叶系数的领域之一?」
原贴地址:https://www.reddit.com/r/MachineLearning/comments/ryw53x/d_fourier_transform_vs_nns_as_function/
网友纷纷对以上问题给出了他们的解读。
傅里叶变换、神经网络,应按需使用
在网友众多的回答中,一位网友的回答可谓是高赞,收获 208 点赞量。ta 的回答是这样的:
高赞回答部分截图
大多数研究都证明了这一点,即傅里叶级数是连续函数的通用逼近器。(快速)傅里叶变换(FFT)可用于从均匀间隔的数据中快速计算傅里叶级数,尽管也存在非均匀 FFT。FFT 具有以下特性:如果模型足够平滑,它们会得到光谱收敛,这意味着误差呈指数递减(你可以通过系数的赫尔德条件看到这一点)。虽然傅里叶级数需要周期性,但对其模型的扩展包括切比雪夫变换 / 切比雪夫多项式,它们具有相似的光谱收敛性,但在 [-1,1] 上,它们是非周期函数。
神经网络收敛速度达不到指数级,甚至在最优的情况下,也很少达到线性收敛速度,那么为什么很多研究都使用神经网络方法呢?首先,我们以计算科学来说,很多研究都使用拟谱法、谱元素等。甚至多项式也是大量函数的通用逼近器(参考魏尔施特拉斯逼近定理)。
我们回到刚才的问题,为什么是神经网络?答案是因为所有这些通用逼近器都是一维的(也有一些专门为低维设计的逼近器,例如球谐函数,但它们适用于非常特殊的情况)。你可以通过张量积将一维通用逼近器变为多维,但是如果将其写出来,你会看到会发生以下现象,一维通用逼近器:
二维通用逼近器,其形式如下:
通过对上述公式进行研究发现,当进入更高维度时,必须为更高阶项的每个组合添加新的项。组合以阶乘或近似指数的方式增长。例如一个表达形式有 161,700 个项,这也仅表示 100 维输入扩展的三阶交叉项。使用这种近似器永远不会完全表示具有数千个像素的大图像。
这种相对于输入大小呈现指数增长的方式就是所谓的维度灾难。神经网络的经验证明了多项式成本增长与输入大小的关系,这就是为什么神经网络被用于这些大数据问题的原因。
但这是否意味着傅里叶级数可以更好地解决足够小、足够平滑的问题?确实如此!这就是为什么基于物理的神经网络和傅里叶神经算子在 3 维情况下无法与优秀的 PDE 求解器竞争。事实上,在论文《Universal Differential Equations for Scientific Machine Learning》中,该研究展示了如何以特定方式将 CNN + 通用逼近器混合到 ODE(通用微分方程)中,以自动发现 PDE 离散化,论文表明,对于特定情况,傅里叶通用逼近器比神经网络效果更好。出于这个原因,DiffEqFlux.jl 包括经典基础层和张量积工具,也就是说,它们必须在正确的上下文中使用。请记住,谱收敛要求被逼近的函数是平滑的,当违反这一点时,你仍然可以获得收敛,但速度很慢。
神经网络是一种工具,傅里叶级数是一种工具,切比雪夫系列也是一种工具。当它们以符合其理论特性的方式使用时,你可以提高性能。
补充一点关于吉布斯现象。如果假设一个函数是平滑的,那么每个点都会影响域中的其他任何地方。你可以通过查看泰勒级数的收敛性来考虑这一点,随着获得越来越多的导数正确,近似值越来越接近原始函数。当假设无限多的导数时,每条数据的影响实际上是全局的。当你有一个不连续性时,这不再是正确的,所以吉布斯现象是一种在这个假设被打破的点附近引入的畸变。这是一个非常高级的描述,但你可以将其引入光谱分析,因为它是误差界限需要做出平滑假设的地方。
傅里叶变换轻松处理音频信号,但面对高维数据效率低下
网友 @hillac 认为,傅里叶变换被认为是具有集合核的卷积神经网络(CNN)。经过数据预训练的傅里叶变换可以实现很好地逼近。当你观察图像上训练的 CNN 的倾斜内核时,它们会让人联想到傅里叶变换中发现的不同频率的触发函数。对于大多数应用来说,傅里叶变换的速度比 CNN 快,所以,如果数据易于处理,则可以使用傅里叶变换。
神经网络可以被训练用于更好地逼近任意数据,因为它不会像傅里叶变换那样对数据携带的信息做出相同假设。因此,虽然傅里叶变换可以轻松地将音频信号分解为信息高度密集的表示,但如果尝试将它用于文本数据,则效果会很差。
另一位网友 @wavefield 表示,傅里叶变换不近似值。它是信息到傅里叶域的转换,仍然包含原始信号中的所有信息,这也是为何能够逆计算的原因。应该看到,某些神经网络运算更容易在傅里叶域中学习。
这一观点获得了赞同。我们可以通过找到用于表示的频率子集来将傅里叶变换转换为近似值。如果使用损失函数(L1)的话,这可以高效地完成。
还有网友 @visualard 总结了傅里叶变换与 CNN 的其他特征。
傅里叶分析是在全局信号上计算的,而 CNN 的一个优点是它们可以检测局部模式。有时将整个信号分解为多个部分,然后再对信号中的全局「thing」做出决策会更有意义。
有人更是指出,傅里叶变换对高维数据效率非常低下。对此,使用随机傅里叶特征是一种解决方案,它类似于仅训练最后一层的随机单隐藏层神经网络。
对于傅里叶变换和神经网络作为函数逼近器的异同与优劣,各位读者可在留言区给出自己的观点。
使用NVIDIA Riva快速构建企业级TTS语音合成助手
NVIDIA Riva 是一个使用 GPU 加速,能用于快速部署高性能会话式 AI 服务的 SDK,可用于快速开发语音 AI 的应用程序。Riva 的设计旨在帮助您轻松、快速地访问会话 AI 功能,开箱即用,通过一些简单的命令和 API 操作就可以快速构建高级别的 TTS 语音合成服务。
2022年1月12日19:30-21:00,本次线上分享主要介绍:
语音合成简介
NVIDIA Riva 特性介绍
启动 NVIDIA Riva 客户端快速实现文字转语音功能
使用 Python 快速搭建基于 Riva 的 TTS 语音合成服务应用