作者:苏勇Andrew
使用神经网络实现机器学习,网络的每个层都将对输入的数据做一次抽象,多层神经网络构成深度学习的框架,可以深度理解数据中所要表示的规律。从原理上看,使用深度学习几乎可以描述和模拟一切规律,但实际上,这个过程效率非常低,需要消耗大量的存储空间描述网络的参数,并且需要大量的数据样本覆盖规律可能涉及到的情景。
优秀的数学家们在过往的研究中,已经发现和总结出了一些描述规律的方法,例如,使用FFT提取数据流中的频率和能量分布特征,我们并不需要再用神经网络的方式以非常低效的方式模拟这些已知的规律,尤其是在资源受限的嵌入式硬件环境当中。一种较好的实践,是利用已知的、高效的特征提取方法作为机器学习框架(AI模型)的前端,取代用于模拟其中规律的初级网络结构,然后再结合更小巧的机器学习方法,例如SVM,或者小规模的NN网络做更高层次的抽象,从而设计出小巧高效的模型。
总结观点:
使用深度学习表示规律效率低。
在机器学习中使用深度网络替代已知的数学公式是愚蠢的。
将已有数学公式表示的特征提取方法和小规模深度学习结合,是资源受限的嵌入式AI应用的一种有效实践。
如下原文是我在瑞萨的一位专职于AI技术开发的同事Stuart Feffer(Reality AI的创始人之一)发表的一篇博客,我翻译了其中大部分内容,以展开阐述在对数据样本做预处理的过程中使用合适的特征变换对深度学习的意义。
深度学习(Deep Learning)几乎已经主导了机器学习领域——它可以利用简单叠加多层神经网络来发现底层数据中隐藏的规律,并且取得了巨大成功。
例如,当使用深度学习来识别一张猫的图片时,深度网络的最低层会学习识别边缘、明暗梯度等视觉特征。然后,更高层次的网络会学习将这些特征组合成的各种模式,再更高层次的网络会学习这些模式组合形成的标志性的形态,而更高层次的网络则会学习进一步将这些形态组合起来以识别出猫。
在那些数据中隐藏的规律过于复杂、无法通过其他方式被发现的情况下,深度学习有着巨大的优势。只要有足够的时间和数据,深度学习几乎可以学习到任何合理的变换规律。深度学习能够破解出世界上所有的特征。然而,这总是个好主意吗?在受限(嵌入式)环境中,它可能是不适合的。
相比于其他传统数值方法,深度学习的收敛速度慢得离谱。几个世纪以来,杰出的数学家们付出了巨大努力,为大量的问题想出了最优解决方案,比如:从已知分布进行统计推断、对许多重要类型函数的近似、线性代数中的信息分析,以及像快速傅里叶变换(FFT)这样的频域分析方法。实际上,深度学习方法是试图用统一的结构和方法,以解决不同的新问题——它们或许能得到接近真实的结果,但却要以极高的低效率为代价。
举个例子,在嵌入式应用中有一个常见的问题:描述和监测一台旋转设备的工作状况。在这一领域的经典工程学中,一个典型方法是使用傅里叶变换——振动和旋转具有天然的属性特征,即是频率,另外,监测功率峰值和频谱形状也能揭示出大量信息。有些峰值是在预期内会出现的,而有些则是不好的(意味着设备可能存在问题)。
此时,假设我们有一个二分类问题,使用FFT能够巧妙地区分两个类别:正常和故障。但是,当我们不知道FFT能取得很好效果的时候,我们没有运行FFT并将其得到的特征用作模型输入,而是直接构建了一个深度学习模型,并让它去学习这两个类别——实际上是希望在深度网络的较低层中模拟出这种傅里叶变换。
快速傅里叶变换是一种由人类精心设计的出色算法,用于实现所谓的离散傅里叶变换(DFT)。但离散傅里叶变换本质上是一种线性矩阵运算,所以将DFT映射到神经网络(神经网络就是在进行输入向量和权重矩阵的乘法计算)中是相当简单的。它看起来会像是一层全连接的节点集合,(理想情况下)权重接近离散傅里叶变换矩阵,并且使用线性激活函数。然后,这个单一的特征层可以连接到更高层,以便基于傅里叶峰值做出决策。
但是,我们来考虑一下这里的各个方面:
为了得到这种简单的表示形式,我们实际上不得不为这一层设计特殊的线性激活函数,而在大多数的深度网络是使用非线性的激活函数。这就意味着常规构建的深度网络已经有些偏离了目标。
为了使这个网络收敛到接近实际的离散傅里叶变换,需要一大组组织良好的示例数据,这些数据要涵盖整个频率空间。来自实际振动或旋转设备的真实数据可能无法提供这种多样性,从而无法训练出一个描述完备的网络。
即使是这种离散傅里叶变换的“最佳情况”网络表示,也需要N^2次乘法运算。而快速傅里叶变换(FFT)的优势就在于它只需要N log2(N)次运算。为什么我们要故意让在嵌入式芯片上执行的更大的运算量呢?
快速傅里叶变换只是众多特征空间运算的例子之一,当这些运算通过神经网络来学习时,会陷入不必要的困境。对于我们所描述的嵌入式应用中“关键频率峰值”的问题,甚至还可以有更有效的数学表示方法表示其中的规律,但如果使用深度学习网络表示这个规律,若没有巨大的计算资源,实际上不可能对其进行建模。
还有一些甚至更简单的变换,神经网络处理起来也很困难。像平方或开平方根这样基本的运算,都需要借助隐藏层网络以及数量极不相称的大量节点才能精确求解。诸如,标准差或均方根,这样明显的工程度量指标,若要使用神经网络来学习和计算它们,效率也极其低下。
所以,尤其是对于嵌入式和资源受限的应用场景,使用特征空间是一种更好的方法。
借助深度学习从头开始学习数学特征是可行的。但对于某些问题而言,这可能并非良策,而对于那些每个时钟周期和每字节内存都十分关键的受限或嵌入式应用来说,这无疑是一场必输的博弈。如果存在更直接的方法,那么使用深度学习来进行特征发现就是对资源的极大浪费。对于这些应用来说,更好的做法,是使用那些已知的、或者能够被证明可以区分目标类别的可靠特征。
Reality AI基于自动化的智能特征提取。我们采用机器学习作为AI算法框架,探索种类繁多且已被充分理解的数学和工程领域的特征空间,并应用诸如稀疏编码之类的机制,从而比直接使用深度学习更快地收敛到相关特征,并更高效地表达这些特征。
这有两个优点:
由此得出的特征计算在计算效率上很高,尤其适合资源受限的嵌入式环境。
从基础物理和时频特性方面来看,计算结果是可以解释的,无需借助任何由网络所表示的“黑箱”操作。
利用以这种方式发现的特征空间,再进行机器学习,仍然能够发挥机器学习在做出复杂决策方面的优势。如此,还可以部署更简单的算法,比如支持向量机(SVM)、决策树或规模较小的神经网络,与深度学习相比,能大幅节省资源。
近年来,深度学习已被用于实现一些非凡的成就。但它并非是解决所有问题的万能钥匙。套用罗伯特・海因莱因(Robert Heinlein,20世纪最有影响力的科幻作家之一)的话来说,“对于某些问题而言,使用深度学习有点像是试图教猪唱歌。这既浪费你的时间,又会惹恼那头猪。”
免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如有疑问请发送邮件至:bangqikeconnect@gmail.com