慢特征分析(Slow Feature Analysis,SFA)算法

简介: 慢特征分析(Slow Feature Analysis,SFA)算法

慢特征分析(Slow Feature Analysis,SFA)

内容较多且枯燥,建议耐心理解,放上冰冰降降温。

点击: 这里有相应的SFA算法的程序 可供参考。

image.png

1 Introduction

慢特征分析(Slow Feature Analysis,SFA),一种无监督降维方法,被用来学习过程监控的时间相关表示。SFA不仅可以通过监测稳态分布来检测与运行条件的偏差,还可以根据时间分布来识别过程的动态异常。


时变信号的不变特征有助于分析和分类。慢特征分析(SFA)是一种从矢量输入信号中学习不变或缓慢变化特征的新方法。它是基于输入信号的非线性扩展和主成分分析对扩展信号及其时间导数的应用。它可以保证直接在函数族中找到最优解,并且可以学习提取大量的非相关特征,这些特征是根据它们的不变性程度排序的。SFA可分层应用于处理高维输入信号和提取复杂特征。SFA首先应用于基于简单单元输出的复杂单元调谐特性,包括视差和运动。然后通过反复应用SFA来学习更复杂的输入-输出函数。最后,提出了一个层次网络的SFA模块作为一个简单的视觉系统模型。同样的非结构化网络也可以学习一维物体的平移、大小、旋转、对比度或光照不变性,只依赖于训练刺激。令人惊讶的是,只有少数的训练对象足以实现对新对象的良好概括。所生成的表示方法适用于物体识别。如果训练网络同时学习多个不变性,性能会下降。


总体思路如下图1所示。假设三个不同的条纹字母形状的物体以不同的方向和速度在视野中移动,例如,首先是S,然后是F,然后是a。在高水平上,这个激励可以由三个随时间变化的变量来表示。第一个表示对象标识,即当前哪个字母是可见的,假设一次只有一个对象可见。这是什么信息。第二个和第三个变量分别表示物体的垂直和水平位置。这是信息。这种表示法特别方便,因为它紧凑,激励的重要方面可以直接获取。


主要的传感输入——在这个例子中是光感受器的活动——分布在许多传感器上,这些传感器只对物体的简单局部特征做出反应,如局部灰度值、点或边缘。由于传感器对局部特征作出反应,它们的活动变化很快,即使激励移动缓慢。例如,第一个光感受器对F的反应。因为这些条纹,当F仅以两条条纹的宽度穿过感受器时,感受器的活动就会迅速地由低到高再返回。这种初级感觉信号是一种低级的表征,只隐含地包含相关信息,如物体的身份和位置。然而,如果受体覆盖了整个视野,视觉刺激就被主要的感觉信号所反映,并且可能存在一个输入-输出函数,它可以提取相关信息,并从这个低级表征中计算出如上所述的高级表征。

image.png

image.png

图1:缓慢变化的激励和快速变化的传感器活动之间的关系。(上)三个不同的物体,字母S, F和A,一个接一个地穿过视野。三种不同位置的光感受器对这种刺激的反应被记录下来,并与虚线上字母的灰值剖面相对应。(左下)三个(数量不多的)光感受器随时间变化的活动。当一个物体穿过它们的接收区域时,受体会做出强烈的反应,否则就会安静下来。高值表示白色;低值表示黑色。(右下角)这三个图表显示了刺激物随时间的身份和位置的高级表征。


什么可以作为一个总体目标来指导无监督学习,以找到这样的输入-输出函数?高水平表达和主要感觉信号之间的一个主要区别在于它们变化的时间尺度。因此,一个缓慢变化的表示可以被认为比一个快速变化的表示具有更高的抽象级别。这里需要注意的是,输入-输出函数仅根据输入电流计算瞬时输出信号。因此,输出信号的缓慢变化不能通过时域低通滤波实现,但必须基于输入信号固有的低和有用的方面的提取。绝大多数可能的输入-输出函数会产生快速变化的输出信号,只有很小一部分会产生缓慢变化的输出信号。任务是找到这些罕见的函数。


图1中的初级感觉信号与高级表征相比变化迅速,尽管初级感觉信号的成分由于激励背景的空白而有广泛的安静期。例如,x1的传感器只对F做出反应,因为它的接受区位于视野的右下角。然而,这个说明性的例子是一个人工激励,在更自然的条件下,初级感觉信号和高级表征之间的时间变化差异应该更加明显。


图1中的对象标识和对象位置图在表示对象的线性部分之间有间隙。这些空白需要以某种方式填补。例如,如果用某个常数值来做这件事,然后把图形看作一个整体,那么物体的身份和位置都有相似的时间尺度,至少与变化更快的主要感觉信号相比是这样。这意味着可以基于慢变化的目标来学习目标位置和目标识别,这为学习不变性问题提供了新的思路。通常的观念是,物体的位置变化很快,而物体的身份变化缓慢或很少,识别系统必须学会只表示物体的身份而忽略物体的位置。然而,对这种情况的另一种解释是,物体翻译引起初级感觉信号的快速变化,相比之下,物体身份和物体位置变化缓慢。这两个方面都可以作为慢特征从初级感觉信号中提取。虽然从概念上说,物体身份是激励的什么信息,而物体位置是在哪里的信息,这是方便的,但它们本质上是相似的,与初级感觉信号相比,它们可能在类似的时间尺度上发生变化。


在接下来的两部分中,给出了学习问题的形式化定义,并提出了一种新的求解算法。接下来的部分将描述几个示例应用程序。首先,在视觉皮层中发现的复杂行为可以从简单的细胞输出推断出来。这在第二个例子中扩展到包括视差和运动方向。第三个例子说明,更复杂的输入-输出函数可以通过重复应用学习算法来逼近。第四个和第五个例子展示了一个层次网络如何学习平移和其他不变性。在最后的讨论中,将该算法与之前的不变量学习方法进行了比较。


2 学习问题

第一步是给出不变性学习的数学定义。给定一个矢量输入信号x(t),目标是找到一个输入-输出函数g(x),使输出信号y(t):= g(x(t))变化尽可能慢,同时仍然传递一些关于输入的信息,以避免琐碎的恒定响应。严格的不变性不是目标,而是变化缓慢的近似不变性。这可以正式表述如下:

image.png

3 慢特性分析(SFA)算法

image.png

是最小的。


假设所选择的非线性函数hkare使扩展信号z(t)具有零均值和单位协方差矩阵。这样一组非线性函数h k h_kh

k


可以很容易地通过一个球阶从任意集合h k ′ h_{k}^{\prime}h

k


中导出,如下所述。然后我们发现约束条件(见公式2-4)

image.png

当且仅当我们约束权重向量为向量的标准正交集时,自动满足。


因此,对于输入输出函数的第一个分量,优化问题简化为寻找使方程(3.1)中的Δ ( y 1 ) \Delta\left(y_{1}\right)Δ(y

1


)最小的赋范权向量。解是矩阵⟨ z ˙ z ˙ T ⟩ \left\langle\dot{\mathbf{z}} \dot{\mathbf{z}}^{T}\right\rangle⟨

z

˙

 

z

˙

 

T

⟩的赋范特征向量,它对应于最小的特征值(cf. Mitchison, 1991)。下一个更高的特征值的特征向量产生输入-输出函数的下一个分量与下一个更高的1个值。这就引出了解决上述优化问题的算法。


明确区分原始信号、来自训练数据的精确归一化信号和来自测试数据的近似归一化信号是有用的。设x ~ ( t ) \tilde{\mathbf{x}}(t)

x

~

(t)是一个可以有任意均值和方差的原始输入信号。为了计算方便和显示的目的,信号被归一化为零的平均值和单位方差。这种归一化对训练数据x(t)是精确的。用相同的偏移量和因子来校正测试数据,通常会得到一个近似归一化的输入信号x ′ ( t ) \mathbf{x}^{\prime}(t)x

(t),因为每个数据样本的均值和方差略有不同,而归一化总是使用从训练数据中确定的偏移量和因子来完成。在下面,原始信号有一个波浪线,测试数据有一个破折号;没有波浪线或破折号的符号通常(但不总是)指的是规范化训练数据。


该算法现在有如下形式(参见下图):


输入信号。用于训练,i维输入信号为x ~ ( t ) \tilde{\mathbf{x}}(t)

x

~

(t)。

输入信号归一化。对输入信号进行归一化得到

image.png

image.png

image.png

image.png

image.png

image.png

重复。如果需要,将输出信号y ( t ) y(t)y(t)(或它的前几个分量或不同输出信号的组合)作为输入信号x ( t ) x(t)x(t),用于学习算法的下一个应用。继续步骤3。


测试。为了对测试信号进行系统测试,将步骤2至6中推导的归一化和输入-输出函数应用于新的输入信号(属于x0(T))。注意,这个测试信号需要使用与训练信号相同的偏移量和因子进行归一化,以准确地再现学习的输入-输出关系。因此,训练信号只是近似地归一化降低

image.png

只有在测试信号对训练信号具有代表性的情况下,归一化才是准确的。输出信号也是如此

image.png

由于实际原因,在步骤4和步骤5中使用了奇异值分解而不是PCA。对于一些特征值非常接近于零的退化数据,奇异值分解是一种较好的分析方法,然后在步骤4中丢弃这些特征值。非线性展开有时会导致退化数据,因为它产生高度冗余的表示,其中一些成分可能具有线性关系。一般来说,特征值接近于零的信号分量通常包含噪声,如舍入误差,在归一化后会非常迅速地波动和在任何情况下,SFA都不会在步骤5中选择。因此,决定哪些小组件应该被丢弃并不重要。

image.png

image.png

image.png


相关文章
|
3月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
112 3
|
18天前
|
存储 算法 安全
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
|
27天前
|
缓存 算法 搜索推荐
Java中的算法优化与复杂度分析
在Java开发中,理解和优化算法的时间复杂度和空间复杂度是提升程序性能的关键。通过合理选择数据结构、避免重复计算、应用分治法等策略,可以显著提高算法效率。在实际开发中,应该根据具体需求和场景,选择合适的优化方法,从而编写出高效、可靠的代码。
35 6
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
82 1
|
3月前
|
并行计算 算法 IDE
【灵码助力Cuda算法分析】分析共享内存的矩阵乘法优化
本文介绍了如何利用通义灵码在Visual Studio 2022中对基于CUDA的共享内存矩阵乘法优化代码进行深入分析。文章从整体程序结构入手,逐步深入到线程调度、矩阵分块、循环展开等关键细节,最后通过带入具体值的方式进一步解析复杂循环逻辑,展示了通义灵码在辅助理解和优化CUDA编程中的强大功能。
|
3月前
|
算法
PID算法原理分析
【10月更文挑战第12天】PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。
|
4月前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
在 Python 编程中,算法的性能至关重要。本文将带您深入了解算法复杂度的概念,包括时间复杂度和空间复杂度。通过具体的例子,如冒泡排序算法 (`O(n^2)` 时间复杂度,`O(1)` 空间复杂度),我们将展示如何评估算法的性能。同时,我们还会介绍如何优化算法,例如使用 Python 的内置函数 `max` 来提高查找最大值的效率,或利用哈希表将查找时间从 `O(n)` 降至 `O(1)`。此外,还将介绍使用 `timeit` 模块等工具来评估算法性能的方法。通过不断实践,您将能更高效地优化 Python 程序。
81 4
|
4月前
|
算法 程序员 Python
程序员必看!Python复杂度分析全攻略,让你的算法设计既快又省内存!
在编程领域,Python以简洁的语法和强大的库支持成为众多程序员的首选语言。然而,性能优化仍是挑战。本文将带你深入了解Python算法的复杂度分析,从时间与空间复杂度入手,分享四大最佳实践:选择合适算法、优化实现、利用Python特性减少空间消耗及定期评估调整,助你写出高效且节省内存的代码,轻松应对各种编程挑战。
87 1
|
3月前
|
算法
PID算法原理分析及优化
【10月更文挑战第6天】PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。
|
3月前
|
算法 安全 Go
Python与Go语言中的哈希算法实现及对比分析
Python与Go语言中的哈希算法实现及对比分析
62 0

热门文章

最新文章