尧图精选

M-Layer 完全指南:基于 Keras 的李代数矩阵指数化层(Intelligent Matrix Exponentiation)

🕒 发布时间:2026/9/21 1:43:42 📁 来源:尧图网络
人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载M-Layer 是 google-research 仓库m_layer目录下发布的一个 Keras 自定义层其核心思想是把输入表示representation通过一个可训练的三阶张量嵌入为矩阵再对该矩阵取矩阵指数matrix exponentiation从而以李代数生成元嵌入 指数映射的方式构造表达能力极强的特征变换。本指南以 m_layer/README.md 为主线结合 m_layer.py、m_layer_test.py 与两个配套 Notebook 的源码细节完整讲解 M-Layer 的论文背景、文件组成、快速上手方式、层内实现原理、全部构造参数、四大实验复现路径以及测试运行方法帮助你在自己的 Keras 项目中直接引入并调优 M-Layer。M-Layer 是什么论文背景与仓库定位M-Layer 是论文 Intelligent Matrix Exponentiation作者Thomas Fischbacher、Iulia M. Comsa、Krzysztof Potempa、Moritz Firsching、Luca Versari、Jyrki AlakuijalaarXiv 编号 2008.03936的配套开源实现。该目录的 README 明确指出这里发布的代码用于复现论文中描述的实验与结论。从源码结构看m_layer.py 的类文档字符串M-Layer 的核心可以概括为一句话Lie Algebra generator-embedding and matrix exponentiation——即先学习一组矩阵生成元generator把输入向量线性组合成一个矩阵然后通过矩阵指数把它映射到矩阵李群Lie group上。这样的变换天然具备以下特性矩阵指数是处处光滑、可微的因此可以端到端训练指数映射把加法结构李代数转换为乘法结构李群使网络有能力高效表达旋转、周期、缩放等复合变换相比普通非线性激活函数它在处理外推extrapolation、周期信号、多项式函数如行列式等问题时表现出更强的归纳偏置。论文的具体数值结论需要阅读原文仓库本身并不包含对照实验的性能数据本指南聚焦于如何理解、安装、导入并使用 M-Layer这一仓库层面的完整脉络。仓库文件清单与各自职责m_layer目录共包含以下文件README 对前四个做了逐一说明文件职责m_layer.pyPython 模块以 Keras Layer 形式实现 M-Layer类名MLayerM_Layer_Experiments.ipynbColab Notebook演示 M-Layer 在螺旋线、多项式、周期数据、CIFAR-10 上的应用M_Layer_Robustness.ipynbColab Notebook按论文内容探讨 M-Layer 的鲁棒性cifar10_model.npy在 CIFAR-10 上训练好的模型权重供鲁棒性 Notebook 加载使用m_layer_test.py单元测试验证可以搭建包含MLayer的模型并完成一次推理run.sh一键脚本创建虚拟环境、安装依赖、运行单元测试requirements.txt依赖清单numpy与tensorflowinit.py包标记文件使m_layer可以作为 Python 包被导入快速上手获取代码与导入 MLayer方式一仅获取 m_layer 子目录推荐google-research 是一个体量很大的仓库如果只需要 M-LayerREADME 给出的方案是借助 Subversion 的稀疏检出能力只导出m_layer子目录svn export https://github.com/google-research/google-research/trunk/m_layer执行前需要先安装 subversion大多数 Linux 发行版可用apt-get install subversion安装。方式二克隆整个仓库不带历史如果你希望保留完整的 google-research 代码以便对照其他项目可以安装 git 后做浅克隆git clone gitgithub.com:google-research/google-research.git --depth1--depth1只拉取最新一次提交避免下载完整历史。导入与最小可用示例拿到m_layer目录后即可像普通 Keras 自定义层一样导入使用from m_layer import MLayer注意两个细节一是目录中存在init.py因此m_layer可作为包导入二是 M_Layer_Experiments.ipynb 的导入逻辑给出了一个兼容本地与 Colab 环境的写法——若当前目录已存在m_layer.py则直接from m_layer import MLayer否则先svn export下载再from m_layer.m_layer import MLayerimport os.path if os.path.isfile(m_layer.py): from m_layer import MLayer else: !if ! type svn /dev/null; then sudo apt-get install subversion; fi !svn export https://github.com/google-research/google-research/trunk/m_layer from m_layer.m_layer import MLayer环境依赖requirements.txt 只声明了两个依赖numpy tensorflow也就是说M-Layer 本身是一个纯 TensorFlow/Keras 实现不依赖任何第三方专有库。Notebook 中的实验还会用到tensorflow_datasets、matplotlib、pandas等常用库。深入源码MLayer 层的工作原理MLayer定义在 m_layer.py继承自tf.keras.layers.Layer。其内部实现只有三个关键环节构建可训练权重、将输入收缩为矩阵、对矩阵取指数。环节一build——可训练权重rep_to_exp_tensor与matrix_bias在build(input_shape)中层根据输入最后一维的大小dim_rep与构造参数dim_m创建一个可训练权重self._rep_to_exp_tensor self.add_weight( namerep_to_exp_tensor, shape(dim_rep, self._dim_m, self._dim_m), initializerself._matrix_init, trainableTrue)这个三阶张量rep_to_exp_tensor就是表示 → 矩阵生成元的映射它把维度为dim_rep的输入向量线性组合成一个dim_m × dim_m的矩阵。若开启偏置还会追加一个形状为(1, dim_m, dim_m)的可训练matrix_bias默认用uniform初始化。从 m_layer_test.py 可以验证这一点测试中input_shape(3,)、dim_m5随后断言mlayer.trainable_weights[0].shape [3, 5, 5]正好对应(dim_rep3, dim_m5, dim_m5)。环节二call——einsum 张量收缩构造矩阵前向计算的第一段是把输入x形状为(..., dim_rep)与生成元张量做张量收缩得到每个样本对应的矩阵mat形状为(..., dim_m, dim_m)mat tf.einsum(amn,...a-...mn, self._rep_to_exp_tensor, x)若开启了偏置则加上matrix_biasmat tf.einsum(amn,...a-...mn, self._rep_to_exp_tensor, x) self._matrix_bias这里的语义是对每个样本mat sum_a x[a] * rep_to_exp_tensor[a]即输入向量的每个分量充当矩阵生成元的线性组合系数。输入因此从向量空间被嵌入到dim_m × dim_m的矩阵空间李代数。环节三call——精确 expm 或平方缩放近似得到矩阵mat后M-Layer 根据matrix_squarings_exp参数选择两条路径m_layer.pyif self._matrix_squarings_exp is None: return tf.linalg.expm(mat) # Approximation of exp(mat) as (1mat/k)**k with k 2**MATRIX_SQUARINGS_EXP mat mat * 0.5**self._matrix_squarings_exp tf.eye(self._dim_m) for _ in range(self._matrix_squarings_exp): mat tf.einsum(...ij,...jk-...ik, mat, mat) return matmatrix_squarings_expNone直接调用tf.linalg.expm计算精确的矩阵指数matrix_squarings_expk整数用平方缩放squaring-and-scaling近似即exp(M) ≈ (I M / 2^k) ^ (2^k)。具体做法是先把矩阵缩放为I M / 2^k再连续平方k次每次平方用一次einsum矩阵乘法完成。后者在训练阶段更省计算代价是指数结果的精度略有损失CIFAR-10 实验中即采用matrix_squarings_exp3。输出形状与配置序列化compute_output_shape返回(batch, dim_m, dim_m)每个样本输出的都是一个完整矩阵。因此在典型用法中MLayer之后通常紧跟tf.keras.layers.Flatten()把矩阵展平再接全连接层做分类或回归见下文实验部分。get_config把dim_m、matrix_init、with_bias、matrix_squarings_exp全部序列化因此MLayer可以无缝配合 Keras 的model.save/load_model与tf.keras.models.clone_model等机制。构造参数详解MLayer的构造签名m_layer.py如下MLayer(dim_m, matrix_initNone, with_biasFalse, matrix_squarings_expNone, **kwargs)各参数含义与注意事项参数默认值含义与影响dim_m必填被指数化的矩阵维度即生成元矩阵的形状为dim_m × dim_m同时决定输出矩阵的尺寸与参数量matrix_initNone生成元张量rep_to_exp_tensor的初始化器。传None时代码实际执行matrix_init or uniform即回退到 Keras 默认的均匀分布初始化m_layer.py。注意类文档字符串声称None默认使用normal初始化与代码实现存在出入实际行为以代码为准如果你希望正态初始化应显式传入normalwith_biasFalse是否在指数化之前为矩阵增加一个形状为(1, dim_m, dim_m)的可训练偏置matrix_bias。偏置能显著增加层表达能力实验 Notebook 中螺旋线与周期数据模型均开启matrix_squarings_expNoneNone表示用tf.linalg.expm精确计算传整数k则用(I M/2^k)^(2^k)的平方缩放近似。近似路径计算量更小适合训练规模较大的场景**kwargs—透传给tf.keras.layers.Layer基类如name、dtype等参数量计算生成元张量含dim_rep × dim_m × dim_m个参数dim_rep为输入最后一维开启偏置后再增加dim_m × dim_m个。以 m_layer_test.py 的模型为例input_shape(3,)、dim_m5可训练权重形状为[3, 5, 5]即 75 个参数。配套实验M_Layer_Experiments.ipynb 中的四大应用M_Layer_Experiments.ipynb 围绕论文问题训练 M-Layer包含四个实验每个实验都以明确的常量配置和模型构建函数组织便于直接修改复跑。实验一螺旋线生成与外推该实验先构造二维螺旋线数据spiral_generate通过极坐标半径与角度采样并可选加入额外旋转然后对比两类模型M-Layer 模型Dense(10) → MLayer(dim_m10, with_biasTrue, matrix_squarings_expNone, matrix_initnormal) → ActivityRegularization(l21e-3) → Flatten → Dense(1, sigmoid)普通 DNN 对照Flatten → Dense(20) → Dense(20) → Dense(1, sigmoid)。关键超参SPIRAL_DIM_REP 10、SPIRAL_DIM_MATRIX 10、SPIRAL_LR 0.01、SPIRAL_EPOCHS 1000、SPIRAL_BATCH_SIZE 16。该实验重点考察模型对旋转对称结构的拟合与外推能力。实验二多元多项式——行列式与永久式目标是让网络学习 3×3 矩阵的行列式np.linalg.det与永久式permanent通过遍历所有排列求和实现见poly_fun。模型结构为Flatten(input_shape(3, 3)) → MLayer(dim_m8, matrix_initnormal) → ActivityRegularization(l21e-4) → Flatten → Dense(1)关键超参POLY_DIM_MATRIX 8、POLY_NUM_SAMPLES 8192、POLY_EPOCHS 150、POLY_LR 1e-3、POLY_DECAY 1e-6。训练数据在[-1, 1]上均匀采样测试集规模为 100000 个样本。Notebook 分别以poly_run(permanentTrue)与poly_run(permanentFalse)训练永久式和行列式两个任务用以验证 M-Layer 对高次多项式函数的表达能力。实验三周期数据——墨尔本每日最低气温该实验使用墨尔本 1981–1990 年每日最低气温数据集daily-min-temperatures.csv。README 注明该数据集来源于 datamarket.com由 kaggle.com 引用转载并按 archive.org 记录的默认开放许可default open license发布。预处理方式为先对气温减去均值再做 7 天滑动平均np.convolve核为full(7, 1/7)数据按 9:1 切分为训练集与测试集。模型结构为Dense(2, input_shape(1,), kernel_initializerRandomNormal()) → MLayer(dim_m10, with_biasTrue, matrix_squarings_expNone, matrix_initperiodic_matrix_init) → Flatten → Dense(1)其中periodic_matrix_init是一个自定义初始化函数先在形状内采样N(0, 0.01)的小噪声再把每个矩阵的对角元素减去PERIODIC_DIAG_INIT 10使初始矩阵呈强对角占优结构从而为捕获周期性提供先验。关键超参PERIODIC_EPOCHS 1000、PERIODIC_BATCH_SIZE 128、PERIODIC_LR 0.00001、PERIODIC_DIM_MATRIX 10。实验四CIFAR-10 图像分类CIFAR-10 实验展示了把 M-Layer 融入图像分类流水线的完整配置。数据通过tfds.load(cifar10)加载像素缩放到[0,1]标签做 one-hot 编码。模型结构为Flatten(input_shape(32, 32, 3)) → Dense(35) → MLayer(dim_m30, with_biasTrue, matrix_squarings_exp3) → ActivityRegularization(1e-3) → Flatten → Dense(10, softmax)关键超参CIFAR_DIM_REP 35、CIFAR_DIM_MAT 30、CIFAR_LR 1e-3、CIFAR_DECAY 1e-6、CIFAR_MOMENTUM 0.9、CIFAR_BATCH_SIZE 32、CIFAR_EPOCHS 150。优化器为带动量的 SGD并配置了两个回调ReduceLROnPlateau(monitorval_acc, factor0.2, patience5, min_lr1e-5)验证准确率停滞时把学习率缩小为原来的 0.2EarlyStopping(monitorval_acc, patience15)验证指标连续 15 轮无提升时提前终止训练。值得注意此实验显式使用matrix_squarings_exp3平方缩放近似而非精确expm说明在大规模训练中该参数是重要的计算-精度权衡旋钮。鲁棒性验证M_Layer_Robustness.ipynb 与 cifar10_model.npyM_Layer_Robustness.ipynb 用于分析模型鲁棒性并验证论文中关于鲁棒性的论断。Notebook 会先检查当前目录是否存在cifar10_model.npy不存在则下载并校验文件完整性。cifar10_model.npy 是仓库中随附的、在 CIFAR-10 上训练好的模型权重文件大小约 1 MB可直接加载用于扰动、噪声、对抗样本等鲁棒性测试无需重新训练。运行测试与验证环境仓库提供了一键运行单元测试的脚本 run.sh#!/bin/bash thisdir$(dirname $0) cd $(readlink -f ${thisdir}) set -e set -x virtualenv -p python3 env source env/bin/activate pip install -r requirements.txt python -m m_layer_test脚本依次完成切换到脚本所在目录 → 用 Python 3 创建虚拟环境env→ 安装 requirements.txt 中的依赖 → 以模块方式执行 m_layer_test.py。单元测试 m_layer_test.py 的核心逻辑如下其文档字符串明确说明只验证能搭模型并跑推理不验证训练收敛性model tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape(3,)), MLayer(dim_m5, matrix_initnormal), tf.keras.layers.ActivityRegularization(l21e-4), tf.keras.layers.Flatten() ]) mlayer model.layers[1] self.assertEqual(mlayer.trainable_weights[0].shape, [3, 5, 5]) prediction model.predict(tf.ones((1, 3))) self.assertFalse(numpy.isnan(prediction).any())测试验证两点一是MLayer的生成元权重形状符合(dim_rep, dim_m, dim_m)二是对全 1 输入的前向推理结果中不含 NaN即expm数值路径稳定。ActivityRegularization(l21e-4)出现在 M-Layer 之后与实验 Notebook 的用法一致说明这是抑制 M-Layer 大数值输出的常用配套手段。使用注意与边界初始化选择matrix_initNone时代码回退到uniform如需高斯初始化请显式传入normal测试与多数实验即如此。数值稳定性tf.linalg.expm输出可能数值较大建议像实验那样在MLayer后接ActivityRegularization防止梯度爆炸对输入先做归一化如 CIFAR 的/255也有帮助。矩阵维度成本dim_m直接决定输出矩阵面积dim_m²与参数量输出矩阵最终要Flatten后接全连接层因此dim_m过大会显著增加后续层的输入维度需结合实际任务权衡。训练与推理速度需要精确指数时使用默认的expm训练任务规模较大且能接受近似误差时可像 CIFAR-10 实验那样设置matrix_squarings_exp3之类的整数值换取更快的矩阵运算。兼容性get_config已实现完整序列化MLayer可安全用于模型保存/加载与 Keras 生态的各类回调、优化器组合依赖仅numpytensorflow与 notebook 中的tensorflow_datasets、pandas等仅在实验脚本内使用。至此从 README 的快速上手、源码的三步前向计算到四个实验的完整配置与测试验证M-Layer 的使用路径已经全部打通导入from m_layer import MLayer按任务设定dim_m、with_bias与matrix_squarings_exp并在其后衔接Flatten Dense即可开始实验。赞分享人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载相关推荐SymPy 李代数模块liealgebras完全指南根系统、Cartan 矩阵与 Weyl 群SymPy 李代数模块liealgebras完全指南根系统、Cartan 矩阵与 Weyl 群 本篇技术指南围绕 SymPy 的 liealgebras科学计算符号运算SymPy 稠密矩阵完全指南Matrix、DenseMatrix 与不可变矩阵的类层次与实战用法SymPy 稠密矩阵完全指南Matrix、DenseMatrix 与不可变矩阵的类层次与实战用法 SymPy 是使用纯 Python 实现的计算机代数系统C科学计算符号运算jellyfish未来展望AI时代字符串相似度计算的技术演进路线图jellyfish未来展望AI时代字符串相似度计算的技术演进路线图 jellyfish作为一款专注于字符串近似匹配和语音匹配的Python库在信息检索、自然上一篇Appsmith Docker 自托管如何配置自定义域名与自有 SSL 证书下一篇Autoware地理坐标转换终极指南GeographicLib集成详解 ️创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →