-
摘要:
随着人工智能(artificial intelligence,AI)规模的快速增长,深度学习应用程序中出现的错误也日益增多. 现有主流深度学习框架大都建立在动态类型语言Python之上,缺乏类型检查机制,导致许多错误无法在编译阶段通过类型检查加以排除. 为此,提出了一种基于定理证明器Coq的强类型函数式编程风格的深度学习框架. 该框架具有带类型的张量结构和强大的静态类型检查能力. 实验结果表明,该框架能够自动有效检测到深度学习模型中的形状不匹配错误,相较于其他检查工具,在检测能力和速度方面具有更大优势. 进一步地,设计并实现了一套从函数式编程模型到C代码的重写转换规则,实现了从函数式神经网络算子表达式到多核并行OpenMP C代码的转换. 多组实验结果表明,该方法生成的算子C代码与手工编写的代码质量相当,且加入多核并行优化后生成的神经网络算子OpenMP C代码相较于顺序执行的算子C代码,速度提升了4~10倍. 此外,利用该方法生成的C算子具有高安全性,能够有效避免人工编写代码时常见的下标越界和存储分配错误等问题.
Abstract:As the scale of AI grows rapidly, errors in deep learning applications are also increasing. Existing popular deep learning frameworks are mostly built on the dynamically-typed language Python, which lacks type checking mechanisms. This leads to many errors that cannot be eliminated through type checking at the compilation stage. This paper proposes a strongly-typed functional programming style deep learning framework based on the theorem prover Coq. The framework features typed tensor structures and a powerful static type checking capability. The experimental results demonstrate that the framework can automatically, quickly, and effectively detect shape mismatch errors in deep learning models, and it has greater advantages in terms of speed and detection capability compared to other checking tools. Furthermore, this paper designs and implements a set of rewriting rules that translate functional programming models into C code, realizing the translation from functional neural network operator expressions to multi-core parallel OpenMP C code. According to the results of multiple sets of experiments, the C code for operators generated by this method is on par with manually written code. Furthermore, the speed of the generated neural network operator C code with multi-core parallel optimization has been improved by 4-10 times compared with the sequentially executed operator C code. Additionally, the generated C operators are highly secure and can effectively avoid common issues such as out-of-bounds indexing and memory allocation errors in manually written code.
-
信息技术的普及和迅速发展,极大地丰富了数据在现实应用场景中的表现形式,使其呈现出高维、多源和异构属性[1]. 例如,在机器人领域,人机交互依赖视觉、听觉、触觉等方面的感官信息;在内容理解领域,多媒体片段包含图片、文本以及音频信号;在医疗诊断领域,脑磁共振成像根据扫描参数的不同分为T1WI、T2WI、T2-FLAIR和增强扫描;在人脸识别领域,提取图像的LBP,HOG,Gabor等特征以降低阴影及光照变化的影响. 广义地讲,从多角度、多渠道对同一观测对象进行的多样性描述被定义为多视图数据,每一种模态或特征都是描述对象的一个视图[2]. 对比单视图数据,多视图数据包含2个重要的信息分量,即一致性信息和互补性信息[3],能够实现对数据样本的全面理解.
聚类作为一种数据预处理技术,旨在将无标签数据按内在相似性划分到不同类别,已被广泛应用于智能医学[4]、推荐系统[5]、模式识别[6]等任务场景. 因此,协同利用多视图数据蕴含的丰富信息来提升聚类效果具有重要的研究意义. 当前的多视图聚类方法可以粗略地划分为基于协同训练的方法[7]、基于多核学习的方法[8]、多视图图聚类[9]和多视图子空间聚类(multi-view subspace clustering,MvSC)[10-11]四类. MvSC通过将高维多视图数据映射到低维特征空间,并从中获取统一的特征表示用于子空间自表达学习,是实现高维数据聚类的一类有效方法. 得益于深度神经网络在特征提取和表示方面的显著优势,深度多视图子空间聚类能够探索复杂场景中样本更深层的特征表达,成为近年来的研究热点[12-14].
自编码器(autoencoders,AEs)是一种典型的深度无监督学习模型,通过对称的网络结构将无标签数据样本抽象为特征向量[15]. 国内外学者将其与多视图子空间聚类结合,提出了一系列方法. Abavisani等人[16]为每个视图分别训练单独的卷积自编码器,然后强制学到的潜在表示具有相同的子空间结构. 在此基础上,Zhu等人[17]使用2组自编码器表征每个视图,分别构建一组特定于视图的子空间表示和一个共享的子空间表示. Zhang等人[18]提出一种深度嵌套的自编码器模型AE2-Nets(autoencoder in autoencoder networks)来退化出视图间共享的紧致表示. 为了提高表示学习的质量,Li等人[19]提出利用多尺度特征学习策略为每个视图提取不同尺度的低维表示. 总的来说,由于多视图数据来自不一致的数据空间,这些方法通常采用“1对1”的编码网络对各个视图进行独立编码. 特别是在处理跨模态的多视图数据时,需要根据具体数据类型选择不同的自编码器架构[20],如图1所示.
近年来,Transformer[21]在自然语言处理和计算机视觉中展现出强大的建模能力以及良好的并行计算能力,逐渐成为处理文本和图像的通用编码架构[22-23]. 为此,本文提出了一种新的面向子空间聚类的多视图统一表示学习网络(multi-view unified representation learning network,MURLN). 在多视图特征提取方面,结合自注意力机制以及多视图学习的特点,提出基于Transformer的多视图共享编码框架学习每个视图的潜在表示,同时施加多样性约束以挖掘视图间的互补信息. 编码框架以共享参数的形式进行训练,提高了模型的泛化能力. 在多视图特征融合方面,考虑到同一个观测样本在不同视图中的不同聚类表现,将多视图融合的目标粒度从整个视图细化到视图内样本,提出一种样本加权的融合方法来从低维潜在空间中构建统一表示. 通过迭代优化模型参数,自适应地学习视图中每个样本的合适权重. 最后,为追求子空间表示的低秩性,设计基于加权Schatten-p范数[24]的正则化约束. 网络结构如图2所示.
本文主要贡献包括4个方面:
1) 提出基于Transformer的多视图共享编码框架,通过共享网络参数对齐不同视图的潜在表示,消除多视图数据的异构性差异.
2) 设计了一种样本加权的多视图特征融合方法MURLN,降低视图内低质量样本对融合结果的影响,加强可靠样本的权重.
3) 提出基于加权Schatten-p范数的低秩正则化约束,与现有方法中常用的核范数相比,由于其考虑了奇异值之间的显著差异,生成的子空间表示能够更好地逼近原始秩函数.
4) 在多个类型的多视图数据集上进行了大量实验. 结果表明,与其他方法相比,MURLN实现了更优越的聚类性能.
1. 相关工作
1.1 符号约定和问题定义
为方便描述,表1列出文中常用的符号及定义.
表 1 一些主要符号Table 1. Some Main Notations符号 定义 {\boldsymbol x}_i^{(v)} \in {\mathbb{R}^{{d_v}}} 视图v中的第i个样本 \boldsymbol I 单位矩阵 \left| \boldsymbol A\right| 矩阵绝对值操作 {\sigma _i}(\boldsymbol A) 矩阵\boldsymbol A的第i个奇异值 {\text{diag}}(\boldsymbol A) 以向量的形式返回矩阵\boldsymbol A的对角线值 {\text{tr}}( \cdot ) 迹函数 给定具有V个视图的数据集\{ {{\boldsymbol X}^{(1)}},{{\boldsymbol X}^{(2)}}, … ,{{\boldsymbol X}^{(V)}}\} ,其中, {{\boldsymbol X}^{(v)}} = ({\boldsymbol x}_1^{(v)},{\boldsymbol x}_2^{(v)}, … ,{\boldsymbol x}_N^{(v)}) \in {\mathbb{R}^{{d_v} \times N}} 表示第v个视图维度为{d_v}的数据矩阵. 本文假设数据完整,即所有视图的样本数量均为N. 多视图子空间聚类的核心思想是通过整合多视图的一致性信息和互补性信息求解一个自表示系数矩阵\boldsymbol S \in {\mathbb{R}^{N \times N}},并在此基础上构建亲和矩阵\boldsymbol W \in {\mathbb{R}^{N \times N}}用于谱聚类.
1.2 子空间聚类
基于谱聚类的子空间聚类依赖于数据的自表达特性[25-26],它假设空间中每个样本都可以由同一子空间中其他样本的线性组合表示,非同一子空间中的样本对应的表示系数几乎为0. 经典的单视图子空间聚类可以形式化为如下优化问题:
\underset{{\boldsymbol{S}}}{\mathrm{min}}{\Vert {\boldsymbol X}-{\boldsymbol {XS}}\Vert }_{\text{r}}+\lambda {\Vert \boldsymbol S\Vert }_{\Omega }\text{,}\text{ s}\text{.t}\text{. diag}(\boldsymbol S)={\boldsymbol{0}}\text{,} (1) 其中{\boldsymbol{X}} = ({{\boldsymbol x}_1},{{\boldsymbol x}_2}, … ,{{\boldsymbol x}_N}) \in {\mathbb{R}^{D \times N}},D表示视图维度. ||\cdot||_{\text{r}} 表示重建损失, ||\cdot||_{\Omega } 表示正则化约束项. 可选约束项{\text{diag}}(\boldsymbol S) = {\boldsymbol{0}}用来避免得到平凡解\boldsymbol S = {\boldsymbol{I}}. 通过优化目标函数式(1),得到表示系数矩阵\boldsymbol S,并计算亲和矩阵\boldsymbol W = {{ ( { | \boldsymbol S | + | {{\boldsymbol S^{\rm T}}} |} )} /2} . 最后,执行谱聚类算法,如Ncut[27],得到聚类结果.
然而,利用单视图的有限信息进行聚类存在较多局限,一旦数据受损可能产生较差的聚类效果. 另外,由于多视图数据的异构性,直接使用单视图聚类方法处理多视图数据也是不合理的.
1.3 多视图子空间聚类
近年来,多视图子空间聚类方法有了很大发展[28-29]. Cao等人[30]设计基于希尔伯特-施密特独立准则的正则化约束,隐式地增强了多视图表示的多样性. 直接从原始数据空间进行自表达重构可能会受到噪声影响,Zhang等人[10]提出将输入数据映射到一个隐空间,并在隐空间中学习统一的低秩子空间表示LMSC(latent multiview subspace clustering). 与浅层模型不同,深度方法利用神经网络提取表达能力更强的数据表征,受到了广泛关注[31-32]. 在LMSC的基础上,Zhang等人[33]基于神经网络提出一个更泛化的模型gLMSC. DMSC-UDL[12]通过卷积自编码器整合局部和全局结构信息,并添加哈达玛积判别约束强化视图内样本的簇间差异. Wang等人[34]构造一个深度结构化多路径网络(structured multi-pathway network,SMpNet)用于多视图子空间聚类,结合编码器中间层产生的隐藏特征信息,提高了自表示系数矩阵的质量.
深度MvSC常用的自编码器可分为卷积自编码器和全连接自编码器. 卷积自编码器[35]侧重于通过卷积层的级联保留2维图像数据的空间信息,全连接自编码器则更适用于处理1维信号,例如文本、特征描述子等. 由于视图间的异构性,现有工作往往采用模态特定的编码器分别对不同视图独立编码,有较高的训练成本或优化成本. 尽管可以依赖预训练好的模型(例如,Faster-RCNN[36]和BERT[37])预先提取数据样本的抽象特征[38],但模态间缺少交互性. Transformer模型的出现在很大程度上为该问题提供了一种有前途的解决方法. 根据文献[23],依赖于自注意力机制的Transformer允许网络根据输入内容动态收集相关特征,被证明能够作为通用的基础编码模型用于不同模态数据的特征学习.
为了区分不同视图对聚类性能提升的贡献程度,Wang等人[39]使用一个视图级融合算子实现多个潜在表示的加权融合. Lu等人[40]引入注意力机制获得每个视图的动态权重,使融合过程更加关注重要的视图. 实际上,质量较差的视图可能存在有价值的观测样本,质量较好的视图同样可能存在不重要或者部分受损的样本. 因此,将每个视图视为一个整体来分配权重的全局融合方法,忽视了同一视图中不同样本的不同重要性,从而对统一表示的学习造成不利影响.
1.4 低秩表示学习
基于谱聚类的子空间聚类算法性能高度依赖于自表示系数矩阵的质量. 大多数现有方法通过构建适当的正则化约束来保证系数矩阵满足某些特定属性,常见的包括稀疏子空间聚类(sparse subspace clustering,SSC)[25]和低秩表示(low-rank representation,LRR)[26]. SSC使用{\ell _0}或{\ell _1}范数正则化来约束子空间表示的稀疏性. LRR将系数矩阵的秩函数凸松弛为核范数,通过求解核范数最小化加强子空间表示的低秩性. 在多视图子空间聚类问题中,低秩表示由于其良好的聚类性能和噪声鲁棒性而被广泛研究[41-43]. 根据标准核范数的定义,其在最小化过程中将所有非零奇异值平均化,是矩阵秩的一个有偏估计. 为此,构建低秩正则化约束需要充分考虑奇异值之间的差异性.
2. 本文方法
本文设计一个面向子空间聚类的多视图统一表示学习网络MURLN. 一方面基于Transformer结构,通过参数共享将每个视图以相同映射规则投影到低维潜在空间,同时引入多样性约束来提高多视图的互补性. 另一方面通过向子空间表示学习引入基于加权Schatten-p范数的低秩约束正则化项来获得数据的最低秩表示. 网络结构如图2所示.
2.1 模型结构
2.1.1 特征嵌入模块
MURLN首先提出一个特征嵌入模块,将不同视图的输入转换为相同维度的特征嵌入. 更具体地说,对于包含V个视图的数据集合,特征嵌入模块由V个特定于视图的嵌入层组成. 以第v个视图输入 {{\boldsymbol X}^{(v)}} \in {\mathbb{R}^{{d_v} \times N}} 为例,嵌入层通常包含3步操作:1)将输入数据划分为M个不重叠的块(patch);2)将块线性映射(通常由可学习的线性层实现)到k维的嵌入空间,得到视图嵌入 \boldsymbol X_{\rm emb}^{(v)} \in {\mathbb{R}^{M \times k \times N}} ;3)构造位置编码 \boldsymbol X_{\rm pos}^{(v)} \in {\mathbb{R}^{M \times k \times N}} 来保留数据内的相对关系. 嵌入层的输出 \boldsymbol X_{\rm E}^{(v)} \in {\mathbb{R}^{M \times k \times N}} 最终表示为带有位置编码的视图嵌入:
\boldsymbol X_{\rm E}^{(v)} = \boldsymbol X_{\rm emb}^{(v)} + \boldsymbol X_{\rm pos}^{(v)}. (2) 由于视图间的异构性,嵌入层中的块划分和位置编码策略取决于输入视图的模态类型. 以长和宽分别为H和 W的 C通道2维图像视图 {{\boldsymbol X}^{(v)}} \in {\mathbb{R}^{H \times W \times C \times N}} 为例,参考文献[44],将其划分为M = H \times W/{P^2}个边长为P的图像块并拉伸成一维特征向量,然后按照图像块的位次索引编码位置. 由于特征嵌入模块仅用于统一输入维度,且不同模态的块划分和位置编码策略已经得到了广泛的研究,因此其具体实现方式不作为本文研究的重点.
2.1.2 共享编码器模块
在统一视图嵌入维度的基础上,进一步设计了一个基于Transformer结构的共享编码器模块来挖掘不同视图的高级语义信息. 该编码器通过参数共享的形式将各个视图嵌入以相同的映射规则投影到低维潜在空间,有利于实现视图间的对齐,同时避免维度灾难和可能存在的噪声干扰. 具体来说,编码器由L个相同的网络层组堆叠而成,每个层组包括一个多头自注意力层和一个带有GELU激活函数的全连接前馈层. 在每层之前执行归一化操作,每层之间由残差结构连接. 给定第v个视图的嵌入\boldsymbol X_{\rm E}^{(v)},编码器中第l层组的计算过程为
\boldsymbol X_0^{(v)} = \boldsymbol X_{\rm E}^{(v)}, (3) \bar {\boldsymbol X} _l^{(v)} = MS A\left( {LN\left( {\boldsymbol X_{l - 1}^{(v)}} \right)} \right) + \boldsymbol X_{l - 1}^{(v)}, (4) \boldsymbol X_l^{(v)} = FFN\left( {LN\left( {\bar {\boldsymbol X} _l^{(v)}} \right)} \right) + \bar {\boldsymbol X} _l^{(v)}, (5) 其中 \boldsymbol X_l^{(v)}(l = 1,2, … ,L) 是编码模块中第l层的输出,MS A\left( \cdot \right),LN\left( \cdot \right), FFN\left( \cdot \right)分别表示多头自注意力层、归一化层和全连接前馈层. 经过嵌入模块和共享编码器模块,原始高维空间中的数据 {{\boldsymbol X}^{(v)}} 被逐步映射到低维特征空间,并最终得到潜在表示 {{\boldsymbol F}^{(v)}} = \boldsymbol X_L^{(v)} \in {\mathbb{R}^{d \times N}} ,其中d = M \times k为潜在表示的维度.
2.1.3 样本加权融合模块
多视图特征表示的有效融合能够强化特征的表达能力,实现信息的共享和互补,提升聚类性能. 为此,MURLN提出一种样本加权的多视图特征融合方法,将每个视图的潜在表示 {{\boldsymbol F}^{(v)}} 融合为统一特征表示 \boldsymbol F \in {\mathbb{R}^{d \times N}} . 考虑到观测样本在不同视图中的质量差异,简单地拼接特征容易忽略视图间以及视图内的复杂关系和不平衡性. 另一方面,在没有先验知识的情况下,人工设计权重具有盲目性. 本文将视图内样本间的权重关系融入目标函数,通过网络迭代优化动态地进行更新. 加权融合的过程形式化为
\boldsymbol F = \sum\limits_{v = 1}^V {\sum\limits_{i = 1}^N {\omega _i^{(v)}\boldsymbol f_i^{(v)}} } , (6) 其中 {\boldsymbol {\omega}} ^{(v)} = (\omega _1^{(v)},\omega _2^{(v)}, … ,\omega _N^{(v)})\in {\mathbb{R}^N} 表示第v个视图对应的权重向量.
2.1.4 自表示学习模块
自表示学习模块包含一个不带偏置和非线性激活函数的全连接层,它能够自然地模拟数据的自表达特性,从而描述成对样本之间的关系,称为自表达层. 遵循多视图数据的一致性,所有视图应具有相同的子空间结构. 因此,将统一表示 \boldsymbol F和特定视图的潜在表示{{\boldsymbol F}^{({v})}}共同作为自表达层的输入,学习所有视图共享的一致子空间表示\boldsymbol S \in {\mathbb{R}^{N \times N}}. {\boldsymbol{S}}=(s_{i,j}),其中{s_{i,j}} 反映了样本i和样本j的相似性关系.
现有子空间聚类方法表明[33],低秩表示可以保持数据的结构特征,并且减少噪声等冗余信息的干扰,有利于学习更理想的系数矩阵. 为此,本文在自表示学习模块中定义一个基于加权Schatten-p范数的低秩约束来强化子空间表示的低秩性. 与传统的基于核范数的低秩约束相比,加权Schatten-p范数不仅在形式上更加灵活,同时还考虑了不同秩分量之间的显著差异(较大奇异值通常表示数据矩阵中嵌入的重要结构信息),已在图像去噪、矩阵补全等任务中验证了有效性[45-46]. 定义为
\begin{gathered} {\left\| \boldsymbol S \right\|_{\boldsymbol w,{{\rm S}_{ p}}}} = {\left(\sum\limits_{i = 1}^N {{{w}_i}{\sigma _i}{{(\boldsymbol S)}^{p}}} \right)^{1/p}},{\text{ }} \\ {\text{s}}{\text{.t}}{\text{. }}{{w}_i} = 1/({\sigma _i}(\boldsymbol S) + \varepsilon ), \\ \end{gathered} (7) 其中0 < {p} \leqslant 1. \boldsymbol w = \left( {{{w}_1},{{w}_2}, … ,{{w}_i}, … ,{{w}_N}} \right)是非负权重向量,通过不同的权重因子实现对非零奇异值不同程度的收缩. \varepsilon 为一个极小值用于避免分母为0,通常\varepsilon ={10^{ - 16}}. 为避免开根过程,式(7)改写为:
\left\| \boldsymbol S \right\|_{\boldsymbol w,{{\rm S}_{ p}}}^p = \sum\limits_{i = 1}^N {{{w}_i}{\sigma _i}{{(\boldsymbol S)}^{p}}} = {\rm{tr}}(\boldsymbol W{\boldsymbol \varDelta ^p}), (8) 其中\boldsymbol W和\boldsymbol \varDelta 为对角矩阵,主对角线上的元素分别由{{w}_i}和 {\sigma _i} 组成. 当{p} = 1时,式(8)退化为加权核范数;当{p} \to 0时,Schatten-0范数等价于求解系数矩阵的秩最小化问题. 因此,Schatten-p范数在形式上比核范数更接近于目标矩阵的秩函数,对低秩问题的求解也更为灵活.
2.1.5 视图重建模块
对于无监督的多视图聚类任务,验证编码器能否学到紧致的特征表示主要通过解码器重构输入数据 {\hat {\boldsymbol X}^{(v)}} \in {\mathbb{R}^{{d_v} \times N}} ,并最小化重建误差来实现. MURLN使用单层全连接层作为解码器的具体实现.
2.2 模型优化
网络模型的训练过程可以形式化为对应目标函数的优化问题. 首先,通过最小化输入数据与重构数据之间的重建损失,端到端地训练编码器-解码器. 重建损失{\mathcal{L}_{\rm re}}定义为
{\mathcal{L}_{\rm re}} = \sum\limits_{v=1}^{V} {\left\| {{{\boldsymbol X}^{({v})}} - {{\hat {\boldsymbol X}}^{({v})}}} \right\|_{\rm F}^2} . (9) 将特定于视图的潜在表示输入样本加权融合模块,构造多视图统一表示,提高特征表达能力. 另外,为了探索视图间的互补性信息,MURLN利用哈达玛积设计正则化约束,增强多视图表示之间的多样性. 融合损失定义为
{\mathcal{L}_{\rm fusion}} = \sum\limits_{v=1}^{V} {\left\| {\boldsymbol F - {{\boldsymbol F}^{(v)}}} \right\|_{\rm F}^2} + \sum\limits_{v \ne u}^V {{{\left\| {{{\boldsymbol F}^{(v)}} \odot {{\boldsymbol F}^{(u)}}} \right\|}_1}} , (10) 其中 \odot 表示哈达玛积,隐式地鼓励多视图统一表示编码互补信息.
自表示系数矩阵的学习受到统一表示和特定视图潜在表示2个方面的共同约束,定义为
{\mathcal{L}_{\rm self}} = \frac{1}{V}\sum\limits_{v=1}^V {\left\| {{{\boldsymbol F}^{(v)}} - {{\boldsymbol F}^{( v)}}\boldsymbol S} \right\|_{\rm F}^2} + \big\| {\boldsymbol F - {\boldsymbol{FS}}} \big\|_{\rm F}^2. (11) 根据对各部分损失函数的分析,模型的整体目标函数形式为:
{\text{min}}\mathcal{L} = {\text{min}}{\mathcal{L}_{\rm re}} + {\lambda _1}{\mathcal{L}_{\rm fusion}} + {\lambda _2}{\mathcal{L}_{\rm self}} + {\lambda _3}{\mathcal{L}_{{{\rm S}_{ p}}}}, (12) 其中{\lambda _1} \gt 0,{\lambda _2} \gt 0,{\lambda _3} \gt 0为权衡参数. {\mathcal{L}_{{{\rm S}_{ p}}}} = \left\| {\boldsymbol{S}}\right\|_{\boldsymbol w,{{\rm S}_{ p}}}^p是作用在子空间表示上的低秩约束正则化项.
2.3 训练细节
为了加速模型收敛,本文使用“预训练+微调”的2阶段优化策略训练网络.
第1阶段预训练编码器和解码器. 首先从均值为零的高斯分布中随机采样初始化编码器和解码器参数,并随机采样b个样本{\boldsymbol x}_i^{(v)}(i = 1,2, … ,b)作为一个训练批次. 然后利用随机梯度下降算法最小化式(9)中的重建损失,迭代更新编码器和解码器的参数.
基于上述初始值,第2阶段对完整网络进行微调,其中未预训练的参数被随机初始化. 由于自表达层学习所有样本的关联关系,因此将全部数据作为微调阶段的输入. 利用梯度下降算法对式(12)迭代求解,直至收敛. 一旦网络收敛,学习到的自表示系数矩阵被用来计算亲和矩阵,最后通过谱聚类后处理获得聚类结果. 具体的参数设置和实验结果在第3节中详细讨论. 算法1提供了本文模型的训练流程.
算法1. MURLN算法.
输入:多视图数据 {{\boldsymbol X}^{\left( v \right)}} ,样本数量N,批大小b,特征维度d,次幂参数p,权衡参数 {\lambda _1},{\lambda _2},{\lambda _3} ;
输出:聚类结果.
初始化模型参数、超参数及系数矩阵\boldsymbol S;
/* 步骤1. 预训练自编码器*/
① while 未收敛 do
② 采样一批数据:{\boldsymbol x}_i^{\left( v \right)} 为{{\boldsymbol X}^{\left( v \right)}} 的列向量, i = 1,2, … ,b ;
③ 最小化式(9),更新特征嵌入模块、共享编 码器模块和视图重建模块参数;
④ end while
/* 步骤2. 微调完整网络*/
⑤ while 未收敛 do
⑥ 在数据集 {{\boldsymbol X}^{\left( v \right)}} 上最小化式(12),更新所有可 训练参数及系数矩阵\boldsymbol S;
⑦ end while
⑧ 计算亲和矩阵,执行谱聚类;
⑨ 返回聚类结果.
3. 实验结果与分析
3.1 数据集和实验设置
1)实验环境. 提出的方法在Windows11操作系统利用PyTorch深度学习库由Python编程语言实现. 实验环境的主要硬件参数为NVIDIA GeForce RTX 3080 Ti GPU,12 GB显存,Intel® Core™ i9-10900F CPU,32 GB内存.
2)数据集. 实验在7个公开的多视图数据集上进行,涉及新闻文档(BBCSport[33])、手写数字(MNIST-USPS[20])、人脸目标(Yale[30],Extended YaleB[19])和通用对象(RGB-D[17],Caltech101-20[31],MSRCV1[10])等多种场景. 表2列出了数据集的详细信息.
表 2 数据集详细信息Table 2. Details of Datasets场景类型 数据集 类别数 样本数 视图数 视图维度 新闻文档 BBCSport 5 544 2 [3 183, 3 203] 手写数字 MNIST-USPS 10 5 000 2 [28×28, 28×28] 人脸目标 Yale 15 165 3 [4 096, 3 304, 6 750] Extended YaleB 10 640 3 [2 500, 3 304, 6 750] 通用对象 MSRCV1 7 210 6 [1 302, 48, 512, 100,
256, 210]RGB-D 50 500 2 [64×64, 64×64] Caltech101-20 20 2 386 6 [48, 40, 254, 1 984,
512, 928]3)评价指标. 本文使用6种通用的评价指标[41]综合评估方法的聚类性能,包括准确性(accuracy,ACC)、标准化互信息(normalized mutual information,NMI)、调整兰德指数(adjusted Rand index,AR)、F分数(F-measure,FM)、精度(precision,P)和召回率(recall,R). 所有指标的值越高,聚类质量越好.
4)对比方法. MURLN将与12种先进的多视图聚类方法进行比较,包括基于多样性约束的多视图子空间聚类(DiMSC[30])、基于低秩表示的多视图聚类(LMSC[10],RMSL[28],DSS-MSC[29],FCMSC[43],FLMSC[11],JSMC[47])、深度多视图子空间聚类(MSCNLG[31],DMSC-UDL[12],SDMSC[19],MSESC[48],D2MVSC[32]). 所有对比方法遵循原文建议调整参数. 在处理多特征数据集时,DMSC-UDL使用的卷积自编码器被替换为文献[32]中的全连接自编码器. 为了减少随机性的影响,所有方法独立运行20次,报告各指标在每个数据集中的平均值.
5)实验参数. 采用AdamW优化器对网络进行优化,初始学习率设置为5E−4,动量因子和权值衰减分别设为0.9和0.05. 优化器根据任务损失产生的梯度来更新模型参数. 在预训练阶段,设置训练迭代次数为500,批大小为256(数据量不足时,批大小为样本数量). 在微调阶段,设置训练迭代次数为200,批大小为输入数据的样本量,以学习完整的表示. 用四元组(分块数M,潜在表示的特征维度d,网络层数L,注意力头个数)表示编码器的超参数. 对于Yale数据集,编码器结构设置为(4, 256, 4, 4). 对于MSRCV1数据集,编码器结构设置为(4, 512, 4, 8). 在MNIST-USPS,BBCSport,Caltech101-20,Extended YaleB数据集中,编码器结构设置为(8, 512, 8, 16). 通过参数敏感性分析,本文将模型在不同数据集上的超参数统一设置为 {\lambda _1} = 0.01,{\text{ }}{\lambda _2} = 0.5,{\text{ }}{\lambda _3} = 1 .
3.2 性能比较与分析
3.2.1 聚类性能比较
实验结果如表3~5所示. 从实验结果中可发现,所提出的方法MURLN在所有数据集上都取得了有竞争力的聚类性能. 对结果的进一步分析表明,MURLN的聚类有效性来自于2个方面.
表 3 Yale和Extended YaleB数据集上的聚类结果(均值)Table 3. Clustering Results in Yale and Extended YaleB Datasets (mean)% 方法 Yale Extended YaleB ACC NMI AR FM P R ACC NMI AR FM P R DiMSC 70.90 72.70 53.50 56.40 54.30 58.60 61.50 63.50 45.30 50.40 48.10 53.40 LMSC 75.20 73.50 55.10 56.40 54.30 57.10 52.42 52.14 26.82 35.10 30.60 41.16 RMSL 74.70 75.50 55.64 58.55 54.51 63.30 53.92 52.75 28.93 36.81 32.72 42.08 DSS-MSC 78.20 77.90 60.10 61.30 59.20 62.20 78.65 76.86 64.81 68.47 65.48 71.85 FCMSC 76.36 78.90 63.67 65.97 63.52 68.61 53.20 53.24 27.51 35.72 31.09 41.98 FLMSC 72.72 74.02 55.67 58.47 56.58 60.49 57.85 55.86 39.49 47.90 46.35 49.64 JSMC 70.91 74.28 56.24 59.01 56.85 61.33 45.85 45.57 24.24 32.51 29.38 36.38 MSCNLG 91.67 90.30 82.10 83.21 81.76 84.70 51.23 48.88 25.45 33.75 29.91 38.72 DMSC-UDL 77.09 75.86 56.01 58.92 54.36 64.32 92.55 88.69 82.12 83.94 81.51 86.54 SDMSC 84.73 84.85 66.35 69.15 86.62 82.73 98.17 95.90 94.03 95.82 94.10 94.88 MSESC 81.21 82.19 71.29 73.22 71.71 74.53 94.15 88.39 87.09 88.37 87.93 88.81 D2MVSC 94.50 93.90 88.90 90.40 90.50 90.40 99.32 98.71 98.24 99.01 98.94 98.93 MURLN(本文方法) 94.95 93.88 89.37 90.59 90.68 89.72 97.40 93.22 92.36 93.09 94.31 95.27 注:最好的结果用黑体标注,次优结果用下划线标注. 表 4 Caltech101-20和MSRCV1数据集上的聚类结果(均值)Table 4. Clustering Results in Caltech101-20 and MSRCV1 Datasets (mean)% 方法 Caltech101-20 MSRCV1 ACC NMI AR FM P R ACC NMI AR FM P R DiMSC 39.12 51.96 26.29 32.23 65.03 21.43 80.36 68.61 62.07 67.41 66.35 68.51 LMSC 55.78 65.12 42.95 48.88 76.61 35.89 80.60 65.30 59.90 65.20 61.20 66.30 RMSL 40.49 47.17 30.82 37.46 63.35 26.61 71.74 63.95 56.10 62.39 60.41 64.52 DSS-MSC 44.11 63.20 31.71 37.43 72.67 25.21 86.57 78.64 72.94 76.74 75.83 77.68 FCMSC 45.98 63.15 34.44 40.44 71.95 28.13 80.90 70.10 63.58 68.70 67.76 69.73 FLMSC 48.16 64.15 35.39 40.98 77.09 28.91 97.57 96.12 95.70 96.16 96.11 96.21 JSMC 65.26 68.11 53.90 59.21 83.62 45.83 62.38 52.98 42.09 50.32 49.14 51.56 MSCNLG 50.23 58.24 36.65 46.70 47.98 45.51 93.08 80.69 83.16 87.09 89.00 85.26 DMSC-UDL 56.76 64.22 48.20 55.86 62.55 51.12 78.36 66.97 59.85 65.46 65.46 65.92 SDMSC 62.00 59.60 48.56 54.04 61.90 62.00 97.06 90.37 92.06 93.99 97.76 96.59 MSESC 60.26 69.18 51.88 63.07 76.38 46.74 91.43 86.07 81.25 83.89 82.64 85.19 D2MVSC 72.73 73.85 56.35 59.15 76.62 72.73 97.78 93.00 95.74 95.36 96.45 97.03 本文方法 80.19 78.37 85.21 87.09 86.54 89.30 98.34 95.99 96.41 96.07 96.82 96.87 注:最好的结果用黑体标注,次优结果用下划线标注. 一方面,MURLN能够利用多视图中的互补性信息表示数据复杂的非线性相关性,这对提升聚类结果至关重要. 观察表3在人脸数据集Yale上的聚类结果,获得前3名的方法分别是:MURLN,D2MVSC,MSCNLG,反映了使用深度神经网络非线性地提取特征可以实现更好的聚类效果. Extended YaleB数据集由于包含不同光线强度下的人脸图像,样本关系与Yale相比更加复杂. 在ACC和NMI指标上,MURLN比传统浅层方法中最优的DSS-MSC分别提高了18.75个百分点和16.36个百分点. 结合其他数据集中的实验结果,MURLN无论是处理2维图像数据还是1维特征数据,性能都较对比方法有明显提升,验证了多视图统一表示学习网络在特征表示方面的出色能力.
另一方面,模型使用Schatten-p范数正则化约束学习到了更低秩的自表示系数矩阵以及更清晰的簇结构. 在Caltech101-20数据集的ACC和NMI指标上,MURLN比次优方法D2MVSC分别提高了7.46个百分点和4.52个百分点. 这是因为加权Schatten-p范数赋予不同奇异值不同的权重,重视较大奇异值的作用,保证了子空间表示的低秩性. 与D2MVSC方法使用的核范数相比,加权Schatten-p范数在求解低秩问题上具有更好的灵活性与有效性.
表 5 BBCSport和MNIST-USPS数据集上的聚类结果(均值)Table 5. Clustering Results in BBCSport and MNIST-USPS Datasets (mean)% 方法 BBCSport MNIST-USPS ACC NMI AR FM P R ACC NMI AR FM P R DiMSC 96.00 88.50 92.00 92.90 91.40 93.00 63.72 59.94 50.08 55.14 54.32 55.99 LMSC 91.20 82.60 84.20 88.70 87.30 87.70 73.33 75.48 65.35 68.99 65.57 72.81 RMSL 97.61 91.81 92.90 95.34 95.23 94.47 44.64 33.19 32.88 24.71 30.25 36.02 DSS-MSC 96.60 88.40 89.80 92.30 92.70 91.80 82.93 87.54 80.99 83.00 78.40 88.17 FCMSC 96.51 89.04 91.06 93.17 94.21 92.15 76.42 77.88 72.54 68.97 69.32 76.51 FLMSC 92.72 85.56 84.57 89.65 89.05 88.53 93.27 86.29 86.93 88.23 88.15 88.32 JSMC 86.58 79.40 81.37 85.94 83.50 88.52 70.21 64.50 58.75 63.89 59.07 65.19 MSCNLG 88.79 72.50 73.39 79.91 77.73 82.23 67.60 77.95 62.66 67.04 57.12 81.12 DMSC-UDL 95.96 87.94 89.00 91.64 91.30 91.97 78.36 66.97 59.85 65.46 65.46 65.92 SDMSC 94.86 86.82 89.36 89.93 86.00 87.92 81.42 88.83 86.99 83.06 78.10 80.04 MSESC 94.85 86.89 85.70 89.05 91.39 86.78 83.76 89.45 82.49 84.34 79.37 89.98 D2MVSC 98.10 93.80 94.90 96.40 96.40 96.41 93.86 90.72 90.60 90.36 89.01 89.32 本文方法 98.70 95.07 94.96 96.41 96.93 96.82 95.63 93.11 92.87 93.49 92.55 93.94 注:最好的结果用黑体标注,次优结果用下划线标注. 3.2.2 共享编码器效果分析
为深入探究基于Transformer的共享编码器在复杂多视图场景中的优势,本文合成一个具有2种模态4个视图的人造数据集(MNIST-USPS-4V). 具体地,在图像数据集MNIST-USPS上增加2个分别由MNIST和USPS数据集提取的LBP特征. 实验设计3种使用不同编码器的MURLN模型用于比较,包括基于全连接编码器的MURLN_FC、卷积自编码器的MURLN_CNN和本文所提方法MURLN. 表6提供了这3种模型分别在MNIST-USPS和MNIST-USPS-4V数据集上的ACC和NMI结果.
表 6 3种编码网络的聚类性能比较(均值)Table 6. Comparison of Clustering Performance for Three Coding Networks (mean)% 数据集 视图(维数) ACC NMI MURLN_CNN MURLN_FC MURLN(本文方法) MURLN_CNN MURLN_FC MURLN(本文方法) MNIST-USPS 视图-1 (28×28) 76.71 72.25 86.74 72.89 74.40 82.64 视图-2 (28×28) 61.20 75.33 71.16 59.10 69.93 74.15 MNIST-USPS 88.94 85.40 95.63 86.14 84.82 93.11 MNIST-USPS-4V 视图-1 (28×28) 41.31 85.67 19.56 78.40 视图-2 (28×28) 50.90 72.78 42.23 67.44 视图-3 (944) 52.56 62.81 44.08 59.66 视图-4 (944) 35.04 67.34 19.75 62.19 MNIST-USPS-4V 79.28 93.27 77.38 91.78 注:最好的结果用黑体标注. 通过观察发现:1)MURLN具备处理不同模态数据的能力,在2种数据场景中均获得了最好的聚类效果,反映出通过Transformer进行的多模态特征编码对性能的提高至关重要. 例如,在MNIST-USPS-4V上比在MURLN_FC的ACC和NMI指标分别提高了13.99个百分点和14.4个百分点. 2)MURLN_CNN通过卷积操作能够保留图像数据的空间信息,但其感受野有限,很难提取全局语义信息,不适用于处理1维特征. 3)MURLN_FC可以通过将图像拉伸成1维向量来编码图像数据,但向量化会导致图像空间信息的丢失,进而降低聚类性能.
进一步,使用峰值信噪比(peak signal-to-noise ratio,PSNR)衡量MURLN与卷积自编码器对图像数据的表示能力. PSNR值越高,表明重建结果越好. 选取RGB-D和MNIST-USPS数据集上的部分图像进行实验可知,MURLN_CNN的平均PSNR值为35.25 dB,MURLN则达到了54.36 dB. 显然,MURLN能够更好地学习样本的有效抽象特征.
3.3 可视化分析
图3和图4给出了MURLN在新闻文档BBCSport数据集以及手写数字MNIST-USPS数据集上学习得到的亲和矩阵和t-SNE图. 显然,学习到的亲和矩阵具有理想的块对角结构和较少的噪声,能清楚地揭示样本之间的关系. 随着迭代次数的增加,聚类结构变得更加清晰,进一步验证了MURLN的有效性.
3.4 参数敏感性分析
MURLN引入4个超参数{\lambda _1},{\lambda _2},{\lambda _3},p,并在各数据集上以网格搜索策略来确定最优参数组合.
如图5所示,对于权衡超参数{\lambda _1},{\lambda _2},{\lambda _3},结合控制变量策略,在Extend YaleB,BBCSport数据集中,使用不同超参数组合得到聚类结果. 以BBCSport为例,固定{\lambda _3} = 0.001,{\lambda _1}\in \left\{ {0.001,\;0.005,\;0.01} \right\},\lambda _2\in\left\{ 0.005,\;0.01, 0.05,\;0.1,\;0.5 \right\},可以实现较好的聚类效果. 综合其他数据集上的结果,设置{\lambda _1} = 0.01,{\lambda _2} = 0.5. 固定{\lambda _1}和{\lambda _2},调整{\lambda _3},如图5 (e)(f)所示. 当{\lambda _3}\in\left\{ 0.1,\;0.5, 1.0 \right\}时,聚类性能相对稳定. 经过实验分析,本文设置{\lambda _3} = 1.0.
图6提供了不同参数p在4个数据集中的ACC和NMI结果. p以0.1的步长在\left\{ 0.1,\;0.2,\;…,\;1.0\right\}范围内取值. 通过观察发现,参数p的选择受数据特性的影响. 例如,对于Caltech101-20和BBCSport数据集,p设置为0.7和0.8可以实现最好的聚类性能. 对于Extended YaleB和MSRCV1数据集,当{p} = 1时可以获得最优结果. 显然,加权核范数作为秩函数的凸松弛并不总是近似求解秩最小化问题的最优选择,说明本文利用Schatten-p范数设计低秩约束的合理性.
3.5 消融研究
为了进一步分析不同模块对MURLN的贡献,全面说明MURLN设计的合理性和有效性,本节设计了5组消融实验方法. 在Yale和MSRCV1数据集上的实验结果如表7所示. 方法A和方法E分别代表了仅使用重建损失(即{\lambda _1} = {\lambda _2} = {\lambda _3} = 0)的基线模型和使用了全部损失的MURLN完整模型. 方法B、方法C和方法D则是在基线模型的基础上,依次增加了融合损失、自表示损失和低秩损失.
表 7 MSRCV1和Yale数据集上损失函数的消融研究Table 7. Ablation Study of Loss Functions on MSRCV1 and Yale Datasets方法 损失项 MSRCV1 Yale {\mathcal{L}_{\rm re}} {\mathcal{L}_{{\text{fusion}}}} {\mathcal{L}_{\rm self}} {\mathcal{L}_{{{\rm S}_{ p}}}} ACC NMI AR FM ACC NMI AR FM A √ 87.13 78.59 76.43 75.86 86.78 83.61 80.29 80.05 B √ √ 92.86 91.37 87.21 88.03 93.16 91.21 85.79 84.73 C √ √ 95.51 89.97 91.76 90.44 92.37 92.01 86.19 88.32 D √ √ 94.77 90.40 88.84 89.16 91.53 89.86 84.15 88.35 E √ √ √ √ 98.34 95.99 96.41 96.07 94.95 93.88 89.37 90.59 注:最好的结果用黑体标注,“√”表示MURLN模型包含该模块. 实验结果验证了5个结论:1)本文使用的3类约束均提升了模型在聚类任务中的表现;2)融合损失能够约束样本级的融合权重,提高视图内高质量样本的影响,同时保证了视图间的多样性;3)自表示损失促进系数矩阵学习到数据样本对之间的相关性,带来了显著的性能提升;4)低秩损失强化了子空间表示的低秩性,使其充分保留多视图数据的结构特征. 5)整合所有模块的MURLN在2个数据集上均取得了最优性能,每个模块都各自发挥作用,去掉任何一个模块都会影响聚类效果.
3.6 收敛性分析
图7展示了MURLN在2个不同类型数据集上的收敛曲线. 可以看出,随着迭代次数增加,目标函数值逐渐下降并趋于稳定. 尽管在开始的几次迭代中发生振荡,但最终大约在80次迭代时收敛. 类似地,聚类性能(ACC和NMI)在前几次迭代过程迅速升高并逐渐收敛. 表明MURLN具有良好的收敛性,能够实现快速收敛. 在其他数据集上也得到了类似的收敛分析.
4. 结 论
本文提出了一种新的多视图子空间聚类方法(MURLN). 与现有方法为不同视图使用单独的编码器不同,MURLN基于Transformer结构设计一个多视图统一表示学习网络,所有视图各自经过特定的嵌入层来统一输入形式和维度,然后共享同一个编码模型. 此外,提出基于加权Schatten-p范数的低秩正则化约束,提高自表示系数矩阵学习的质量. 在多个公开数据集上的大量实验证明了所提方法的有效性和优越性.
利用全连接层实现数据自表达特性的方法普遍存在full-batch training的局限. 具体体现在随着样本数量的增多,全连接层的参数量迅速提升,需要较多的计算和存储资源. 后续工作将关注于模型参数与样本数量的解耦研究,提高大规模多视图数据集聚类的效率和精度. 此外,由于数据收集和传输的复杂性,现实场景中可能存在部分视图缺失现象[49],这也是未来的研究重点.
作者贡献声明:林毓秀负责网络模型的设计和实现,论文的撰写和修改;刘慧提出研究方向,把握论文的创新性,并指导论文修改;于晓负责实验的整理和可视化分析;张彩明提出指导意见并修改论文.
-
表 1 数组的基本操作函数
Table 1 Basic Operation Functions of Array
函数 功能 符号表示 mkvSeq 构造数组/张量 ⊞ let_binding 中间变量值绑定 tlet x := e in y idx 根据下标索引访问数组
第i个元素a |[ i ] max 求数组元素最大值 - sum 求数组元素的和 ∑ 表 2 数值型的基本操作函数
Table 2 Basic Operation Functions of Numerical Type
函数 功能 zero,one 分别代表实数R0,R1 negate 数值型元素取反的操作 add/sub/mul/div 2个数值型元素的加/减/乘/除操作 scal 实数与数值型元素的乘积操作 div_n 数值型元素除以自然数的操作 pow/log/pExp 数值型元素的幂次方/对数/指数操作 sqrt 数值型元素的平方根操作 leExp/gtExp 2个数值型元素的小于等于/大于关系 表 3 函数式神经网络算子表达式
Table 3 Functional Neural Network Operator Expression
分类 函数 功能
元素操作ReLU1d/ReLU2d/
ReLU3d/ReLU4d对不同维度的张量元素取激活函数ReLU Softmax1d/Softmax2d/
Softmax3d/ Softmax4d对不同维度的张量元素取激活函数Softmax Tanh2d/Tanh4d 对不同维度的张量元素取激活函数Tanh Tadd2d/Tadd4d 对相同维度张量元素相加 Tmul2d/Tmul4d 对相同维度张量元素相乘 复合操作 Conv2d/Conv4d 不同维度张量的卷积操作 Avgpool2d/Avgpool3d/
Avgpool4d不同维度张量的平均池化操作 Maxpool2d/Maxpool3d/Maxpool4d 不同维度张量的最大池化操作 Linear/Linear2d 不同维度张量全连接操作 NLLLoss2d 损失函数NLLLoss ConvTranspose2d/
ConvTranspose4d反卷积操作,扩大张量尺寸 重塑操作 Flatten3d/Flatten4d 平铺操作 Truncl1d/Truncl2d 向左/右截断张量k个元素 Padl/Padr 向左/向右填充k个元素 Concat 连接2个张量 表 4 带类型的神经网络模型
Table 4 Typed Neural Network Model
分类 模型 介绍
CNNLeNet 一个经典神经网络模型,由2个卷积层和
3个全连接层组成AlexNet 一种经典的深度CNN模型,由5个卷积层和
3个全连接层组成ResNet-34 一种经典的残差CNN模型 GoogLeNet 一种网中网的深度CNN模型,引入了
Inception模块VGG-16 深度CNN模型,适用于迁移学习 DenseNet-121 一种稠密CNN模型,引入了DenseBlock块与
前面所有层连接GM DCGAN 一种深度卷积生成对抗网络 VAE 一种深度生成模型,由1个编码器和
1个解码器组成RNN LSTM 一种特殊的递归神经网络,引入了3个门和1个细胞状态以处理序列中的长期依赖关系 表 5 形状错误检测结果
Table 5 Shape Error Detection Results
表 6 中间命令式组合子
Table 6 Intermediate Imperative Combinators
函数 具体实现 mkvSeql Definition mkvSeql {n:nat} {d:data} (f:fin n -> acc d -> comm) (out:acc(ary n d)) := for (fun i:fin n => f i out|{i}). mkvParl Definition mkvParl {n:nat} {d:data} (f:fin n -> acc d -> comm) (out:acc(ary n d)):= parfor out (fun i o => f i o). letl Definition letl{s t}(e:exp s)(f:exp s -> acc t -> comm)(out:acc t) := f e out. maxl Definition maxl {n:nat} (xs:exp (ary n num)) (f:exp num -> acc num -> comm) (c : exp num -> comm) := new (fun tmp => let (w,v) := tmp in (w |:= xs |[0]) ; (for (fun i => If (gtExp xs|[i] v) (f xs|[i] w, f v w)) ; c v)). suml Definition suml {n:nat} (xs : exp (ary n num)) (f:exp num -> acc num -> comm) (c : exp num -> comm) := new (fun tmp => let (w,v) := tmp in (w |:= zero) ; (for (fun i => f (add xs|[i] v) w)) ; c v). 表 7 测试结果
Table 7 Test Results
算子操作 张量规模 顺序执行时长/s 并行执行时长/s 加速比 生成代码 手工编写 生成代码 手工编写 生成代码 手工编写 Conv2d (p, s = 1) 700×700
300×3005.910 935 6.978 041 0.720 788 0.823 746 8.20 8.47 Avgpool2d (k = 2) 8 000×8 000 0.130 755 0.142 020 0.016 803 0.059 553 7.78 2.38 Maxpool2d (k = 2) 8 000×8 000 0.141 180 0.065 849 0.022 787 0.047 422 6.20 1.39 ReLU2d 8 000×8 000 0.081 935 0.082 872 0.022 103 0.023 369 3.71 3.55 Linear2d 2 000×3 000 3 000×4 000 13.760 259 13.848 600 1.355 773 1.418 254 10.15 9.76 -
[1] Paszke A, Gross S, Massa F, et al. Pytorch: An imperative style, high-performance deep learning library[J]. Advances in Neural Information Processing Systems, 2019, 32: 8024−8035
[2] Abadi M, Agarwal A, Barham P, et al. Tensorflow: Large-scale machine learning on heterogeneous distributed systems[J]. arXiv preprint, arXiv: 1603.04467, 2016
[3] Jia Yangqing, Shelhamer E, Donahue J, et al. Caffe: Convolutional architecture for fast feature embedding[C]//Proc of the 22nd ACM Int Conf on Multimedia. New York: ACM, 2014: 675−678
[4] Gulli A, Pal S. Deep Learning with Keras[M]. Birmingham: Packt Publishing Ltd, 2017
[5] Wu Dangwei, Shen Beijun, Chen Yuting. An empirical study on tensor shape faults in deep learning systems[J]. arXiv preprint, arXiv: 2106.02887, 2021
[6] Jhoo H Y, Kim S, Song W, et al. A static analyzer for detecting tensor shape errors in deep neural network training code[C]//Proc of the 44th ACM/IEEE Int Conf on Software Engineering. New York: ACM, 2022: 337−338
[7] Lagouvardos S, Dolby J, Grech N, et al. Static analysis of shape in TensorFlow programs[C/OL]//Proc of the 34th European Conf on Object-Oriented Programming (ECOOP 2020). Dagstuhl, Germany: Schloss-Dagstuhl-Leibniz Zentrum für Informatik, 2020[2024-03-10]. https://drops.dagstuhl.de/storage/00lipics/lipics-vol166-ecoop2020/LIPIcs.ECOOP.2020.15/LIPIcs.ECOOP.2020.15.pdf
[8] Dolby J, Shinnar A, Allain A, et al. Ariadne: Analysis for machine learning programs[C/OL]//Proc of the 2nd ACM SIGPLAN Int Workshop on Machine Learning and Programming Languages. New York: ACM, 2018[2024-03-10]. https://arxiv.org/pdf/1805.04058
[9] Hattori M, Sawada S, Hamaji S, et al. Semi-static type, shape, and symbolic shape inference for dynamic computation graphs[C]//Proc of the 4th ACM SIGPLAN Int Workshop on Machine Learning and Programming Languages. New York: ACM, 2020: 11−19
[10] 纪泽宇,张兴军,付哲,等. 分布式深度学习框架下基于性能感知的DBS-SGD算法[J]. 计算机研究与发展,2019,56(11):2396−2409 doi: 10.7544/issn1000-1239.2019.20180880 Ji Zeyu, Zhang Xingjun, Fu Zhe, et al. Performance-Aware based dynamic batch size SGD for distributed deep learning framework[J]. Journal of Computer Research and Development, 2019, 56(11): 2396−2409 (in Chinese) doi: 10.7544/issn1000-1239.2019.20180880
[11] Zhao Tian, Huang Xiaobing, Cao Yu. Deepdsl: A compilation-based domain-specific language for deep learning[J]. arXiv preprint, arXiv: 1701.02284, 2017
[12] Wang Liang, Zhao Jianxin. Architecture of Advanced Numerical Analysis Systems: Designing a Scientific Computing System Using OCaml[M]. Berlin: Springer, 2023
[13] INRIA. The coq proof assistant[EB/OL]. 1997[2022-09-15]. https://coq.inria.fr/
[14] Steuwer M, Fensch C, Lindley S, et al. Generating performance portable code using rewrite rules: From high-level functional expressions to high-performance OpenCL code[J]. ACM SIGPLAN Notices, 2015, 50(9): 205−217 doi: 10.1145/2858949.2784754
[15] Atkey R, Steuwer M, Lindley S, et al. Strategy preserving compilation for parallel functional code[J]. arXiv preprint, arXiv: 1710.08332, 2017
[16] 麻莹莹,陈钢. 基于Coq的矩阵代码生成技术[J]. 软件学报,2022,33(6):2224−2245 Ma Yingying, Chen Gang. Matrix code generation technology based on Coq[J]. Journal of Software, 2022, 33(6): 2224−2245 (in Chinese)
[17] Verma S, Su Zhendong. Shapeflow: Dynamic shape interpreter for tensorflow[J]. arXiv preprint, arXiv: 2011.13452, 2020
[18] Huang A, Hashimoto J, Paszke A, et al. Hasktorch[EB/OL]. 2019[2024-04-13]. https://github.com/hasktorch/hasktorch
[19] Paszke A, Gross S, Chintala S, et al. Automatic differentiation in pytorch[J/OL]. 2017[2024-05-15]. https://api.semanticscholar.org/CorpusID:40027675
[20] Thompson S. Haskell: The Craft of Functional Programming[M]. Boston: Addison-Wesley, 2011
[21] Roesch J, Lyubomirsky S, Weber L, et al. Relay: A new ir for machine learning frameworks[C]//Proc of the 2nd ACM SIGPLAN Int Workshop on Machine Learning and Programming Languages. New York: ACM, 2018: 58−68
[22] Roesch J, Lyubomirsky S, Kirisame M, et al. Relay: A high-level compiler for deep learning[J]. arXiv preprint, arXiv: 1904.08368, 2019
[23] Hattori M, Kobayashi N, Sato R. Gradual tensor shape checking[C]//Proc of the 32nd European Symp on Programming. Berlin: Springer, 2023: 197−224
[24] Eremondi J, Tanter É, Garcia R. Approximate normalization for gradual dependent types[J]. Proceedings of the ACM on Programming Languages, 2019, 3(88): 1−30
[25] Lehmann N, Tanter É. Gradual refinement types[J]. ACM SIGPLAN Notices, 2017, 52(1): 775−788 doi: 10.1145/3093333.3009856
[26] Vazou N, Tanter É, Van Horn D. Gradual liquid type inference[J]. Proceedings of the ACM on Programming Languages, 2018, 2(132): 1−25
[27] Liu A, Bernstein G L, Chlipala A, et al. Verified tensor-program optimization via high-level scheduling rewrites[J]. Proceedings of the ACM on Programming Languages, 2022, 6(55): 1−28
[28] Ragan-Kelley J, Barnes C, Adams A, et al. Halide: A language and compiler for optimizing parallelism, locality, and recomputation in image processing pipelines[J]. ACM SIGPLAN Notices, 2013, 48(6): 519−530 doi: 10.1145/2499370.2462176
[29] Danvy O, Millikin K, Nielsen L R. On one-pass CPS transformations[J]. Journal of Functional Programming, 2007, 17(6): 793−812 doi: 10.1017/S0956796807006387
[30] 马振威,陈钢. 基于Coq记录的矩阵形式化方法[J]. 计算机科学,2019,46(7):139−145 doi: 10.11896/j.issn.1002-137X.2019.07.022 Ma Zhenwei, Chen Gang. Matrix formalization based on Coq record[J]. Computer Science, 2019, 46(7): 139−145 (in Chinese) doi: 10.11896/j.issn.1002-137X.2019.07.022
[31] 麻莹莹,马振威,陈钢. 基于Coq的分块矩阵运算的形式化[J]. 软件学报,2021,32(6):1882−1909 Ma Yingying, Ma Zhenwei, Chen Gang. Formalization of block matrix operations based on Coq[J]. Journal of Software, 2021, 32(6): 1882−1909 (in Chinese)
[32] Shi Zhengpu, Xie Guojun, Chen Gang. CoqMatrix: Formal matrix library with multiple models in Coq[J]. Journal of Systems Architecture, 2023, 143: 102986 doi: 10.1016/j.sysarc.2023.102986
[33] Mahboubi A, Tassi E. Mathematical components[EB/OL]. 2021[2024-05-15]. https://math-comp.github.io/
[34] Boldo S, Lelay C, Melquiond G. Coquelicot: A user-friendly library of real analysis for Coq[J]. Mathematics in Computer Science, 2015, 9: 41−62 doi: 10.1007/s11786-014-0181-1
[35] LeCun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11): 2278−2324 doi: 10.1109/5.726791
[36] Tai Cheng, Xiao Tong, Zhang Yi, et al. Convolutional neural networks with low-rank regularization[J]. arXiv preprint, arXiv: 1511.06067, 2015
[37] He Kaiming, Zhang Xiangyu, Ren Shaoqing, et al. Deep residual learning for image recognition[C]//Proc of the 29th IEEE Conf on Computer Vision and Pattern Recognition. Piscataway, NJ: IEEE, 2016: 770−778
[38] Simonyan K, Zisserman A. Very deep convolutional networks for large-scale image recognition[J]. arXiv preprint, arXiv: 1409.1556, 2014
[39] DiPietro R, Hager G D. Deep learning: RNNs and LSTM[M]//Handbook of Medical Image Computing and Computer Assisted Intervention. San Diego: Elsevier, 2020: 503−519
[40] McCann B. github[EB/OL]. [2023-09-05]. https://github.com/pytorch/examples
[41] Spolsky J. stackoverflow [EB/OL]. [2024-02-22]. https://stackoverflow.com/questions