# PILF **Repository Path**: iamdafu/PILF ## Basic Information - **Project Name**: PILF - **Description**: No description available - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-28 - **Last Updated**: 2025-06-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 预测完整性学习框架(Predictive Integrity Learning Framework, PILF) > 不仅要训练你的模型,更要理解它的心智。

English | 中文 | Model Zoo (EN) | 模型动物园 (ZH)

--- 核心理念: 一个旨在将固定的超参数(如学习率、模型容量)转变为由数据内在“惊奇度”(`Surprise`)实时驱动的动态策略的认知学习框架。其本质是一种自适应超参数调度算法,它让模型根据学习内容的价值,自主决定“学多少”和“用多大容量学”。该框架源于 IPWT (Integrated Predictive Workspace Theory) 理论,相关论文信息请见 ## 1. 设计哲学:从“固定规则”到“动态策略” 传统训练范式依赖于手动设定的、在整个训练过程中通常固定或按预定计划衰减的超参数(如学习率)。这种“一刀切”的方法忽略了不同数据批次所包含的学习价值的巨大差异。 PILF 的设计哲学是:**用动态的、数据驱动的策略取代静态的、人为设定的规则**。 它不再盲目地使用固定的学习率或固定的模型容量,而是通过实时评估每一批次数据带来的 `Surprise`,动态地、按比例地调整其学习行为: 1. **动态学习率 (Dynamic Learning Rate)**: 当 `Surprise` 适中时,意味着遇到了有价值的“可学习区”信息,系统会分配较高的学习率;当 `Surprise` 过低(冗余信息)或过高(异常信息)时,则分配接近于零的学习率,从而自然地实现了“忽略”和“拒绝”的效果。**这直接取代了手动设定的学习率调度器**。 2. **动态容量 (Dynamic Capacity)**: 在 MoE 架构中,`Surprise` 不仅调节学习率,还决定了需要激活的“专家”数量 `k`。简单的任务 (`Surprise` 低) 只需少数专家,而复杂的任务 (`Surprise` 高) 则会动态调动更多专家参与。**这取代了固定的 Top-K 路由**。 ## 2. 核心实现:PILF 的演进阶段 PILF 的演进分为五个主要阶段,每个阶段都建立在前一阶段的基础上,逐步实现更高级的自适应能力: ### 阶段零:MoE-GBP (门控反向传播) 在传统训练中,通过门控机制选择性地更新权重,以缓解灾难性遗忘。`optimizer.step()` 的执行由一个二元门控信号控制,该信号基于`Surprise`指标。作为 PILF 的前身,验证了基于 PI 进行选择性学习的有效性,为后续的动态学习率和容量调度奠定了基础。 ```mermaid graph LR Input --> Model Model --> Surprise["Surprise Calculation"] Surprise --> Gate["Binary Gate (based on Surprise)"] Gate -- "If Open" --> OptimizerStep["Optimizer.step()"] OptimizerStep --> ModelUpdate["Model Update"] ``` ### 阶段一:PILR-S (预测完整性驱动的学习率调度器) PILR-S 是 PILF 思想在**任何标准神经网络**上的直接应用。它只关注一个问题:**如何根据 `Surprise` 动态调整学习率?** 这是通过核心计算工具包 [SigmaPI](https://github.com/dmf-archive/SigmaPI) 实现的。 它取代了传统的 `optimizer.step()` 是否执行的“门控”逻辑,演变为一个平滑的、连续的学习率调制器。 ```mermaid sequenceDiagram participant Trainer participant Model participant SigmaPI_Monitor participant LRScheduler as PILR-S participant Optimizer Trainer->>Model: 前向传播 (Feedforward) Model-->>Trainer: 返回 logits Trainer->>SigmaPI_Monitor: calculate(model, logits) SigmaPI_Monitor-->>Trainer: 返回 pi_metrics (含 Surprise) Trainer->>LRScheduler: update(Surprise) activate LRScheduler LRScheduler->>LRScheduler: lr_modifier = gaussian(Surprise, EMA, std) LRScheduler-->>Trainer: 返回 lr_modifier deactivate LRScheduler Trainer->>Trainer: 计算 loss & loss.backward() Trainer->>Optimizer: 设置 effective_lr = base_lr * lr_modifier Trainer->>Optimizer: step() Trainer->>Optimizer: 恢复 base_lr ``` **机制详解:** 1. **`Surprise` 计算**: 目前我们使用反向传播梯度范数来计算,但未来,完全可以考虑将 Forward Forward 累积梯度作为 surprise 的来源。这个过程无需等待昂贵的反向传播,实现了对学习价值的快速评估。 2. **动态调制**: PILR-S 模块接收 `Surprise`,并根据其与 `Surprise` 的指数移动平均(EMA)和标准差(std)的关系,通过一个高斯函数 `exp(-0.5 * ((surprise - mu) / sigma)^2)` 计算出一个平滑的调制因子 `lr_modifier` (范围在 0 到 1 之间)。 3. **权重更新**: 在计算出 `lr_modifier` 后,才执行标准的 `loss.backward()`。随后,`optimizer` 使用 `effective_lr = base_lr * lr_modifier` 来执行权重更新。`optimizer.step()` **总是被执行**,但其更新的幅度已被 `Surprise` 预先动态缩放。 ### 阶段二:PIL-MoE (预测完整性学习驱动的 MoE - 静态 Top-K) (当前阶段) **目标:** 将 PILR-S 的动态学习率机制引入 MoE 架构,并结合静态 Top-K 硬路由,同时只更新激活的专家权重。 **核心机制:** `effective_lr = base_lr * f(Surprise)` 应用于 MoE 架构。门控网络根据静态 Top-K 值将任务路由到专家,且仅更新被激活的专家权重。 ```mermaid graph LR Input --> InitialSurprise["Initial Surprise Assessment"] subgraph DynamicPolicy [Surprise-Driven Dynamic Policy] direction LR InitialSurprise -- "f(Surprise)" --> lr_mod_Value["lr_mod = f(S)"] end StaticK["Static Top-K"] --> HierarchicalGatingNetwork["Hierarchical Gating (route to k experts)"] HierarchicalGatingNetwork --> MicroExpertPool[...] MicroExpertPool --> Aggregator Aggregator --> Logits Logits --> LossCalculation LossCalculation -- Gradients --> SelectiveUpdate subgraph SelectiveUpdate [Selective Update Module] direction LR lr_mod_Value --> SetLR["Set effective_lr"] SetLR --> OptimizerStep["Optimizer.step()"] end OptimizerStep -- Updates only active experts & gating --> FinalModel ``` ### 阶段三:PILD-MoE (Predictive Integrity-driven Dynamic Mixture of Experts) **目标:** 实现一个完全自适应的认知系统,其中 `Surprise` 不仅调节学习率,还动态缩放激活的专家数量 `k`。 **核心机制:** `k = g(Surprise)` 和 `effective_lr = base_lr * f(Surprise)` 并行运作。模型根据数据复杂性动态调整激活的专家数量和学习强度。 **优势:** 实现了计算效率和模型容量扩展性的最大化,真正实现了计算资源按需分配。 ```mermaid graph LR Input --> InitialSurprise["Initial Surprise"] InitialSurprise --> k_Value["k = g(Surprise)"] InitialSurprise --> lr_mod_Value["lr_mod = f(Surprise)"] k_Value --> GatingNetwork["Dynamic Gating (route to k experts)"] GatingNetwork --> Experts["Active Experts"] Experts --> LossCalculation LossCalculation --> SelectiveUpdate["Selective Update (active experts)"] lr_mod_Value --> SelectiveUpdate SelectiveUpdate --> FinalModel["Model Update"] ``` ### 阶段四:G²PIL (Generative Gaussian Predictive Integrity Learning) **目标:** 构建一个完全自组织、自我巩固、自我演化的认知架构,实现从“被动学习”到“主动创造”的终极飞跃。 **核心机制:** 1. **高斯场域认知空间 (Gaussian Field Cognitive Space):** - 彻底抛弃离散的、基于决策的门控网络。 - 整个系统是一个高维的、连续的“认知空间”。 - **专家即嵌入 (Expert as Embedding):** 每一个专家不再是一个被调用的函数,而是这个空间中的一个**高斯概率分布**,代表其“知识领域”或“专长范围”。 - **输入即探针 (Input as Probe):** 任何输入数据都被映射为此空间中的一个“探针”(一个点或一个更窄的高斯分布)。 - **激活即共鸣 (Activation as Resonance):** 路由过程被“Anycast”式的概率匹配取代。专家根据输入探针与其知识分布的重叠程度被“软激活”,其激活强度是连续的、概率性的。 2. **生成式记忆巩固 (Generative Memory Consolidation):** - 引入一个并行的**生成模型 (Generative Model)**,作为系统的“潜意识”或“梦境引擎”。 - **清醒时学习世界:** 生成器在系统与外部世界交互时,学习真实数据的底层分布。 - **睡眠时创造世界:** 在没有外部输入时,生成器开始“做梦”,即**生成合成数据**。这些梦境数据包含了过去所有经验的抽象和混合。 - **自我重放与巩固:** 系统将这些内部生成的“梦境”作为复习材料,喂给自己。通过在梦境中“排演”,专家们得以维持其知识分布的稳定,抵抗遗忘。 #### G²PIL = Gaussian × Generative - **Gaussian (高斯)** 解决了 **空间 (Space)** 的问题:它定义了知识**如何被组织和访问**。它创造了一个思想的几何学,让概念有了位置、关系和距离,让路由变得平滑、概率化和鲁棒。 - **Generative (生成式)** 解决了 **时间 (Time)** 的问题:它定义了知识**如何被维持和演化**。它让系统摆脱了对外部数据存储的依赖,实现了记忆的内部巩固和创造性的自我重放。 ## 3. 安装与使用 本项目依赖 `sigma-pi` 包进行核心计算。要复现实验并使用完整的测试框架,您必须首先克隆本仓库。 ```bash git clone https://github.com/dmf-archive/PILF.git cd PILF ``` **注意:** 本包不会自动安装 PyTorch。请在继续之前,为您的系统(CPU 或 CUDA)手动安装合适的版本。对于支持 CUDA 的系统,建议使用 `uv` 或 `pip` 安装: ```bash # CUDA 12.1 示例 uv pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 ``` 设置好 PyTorch 后,安装测试框架的依赖项: ```bash pip install -e .[dev] ``` 测试框架是模块化和配置驱动的。 ### 3.1. 配置您的实验 在 `configs/` 目录中创建或修改一个配置文件。例如, `configs/base_vit.py`: ```python # test/configs/base_vit.py # 模型参数 model_config = { 'model_type': 'base', 'embed_dim': 128, 'depth': 6, # ... 其他模型参数 } # 训练参数 train_config = { 'epochs': 20, 'batch_size': 256, # ... 其他训练参数 } ``` ### 3.2. 运行实验 从根目录使用 `run_experiment.py` 脚本启动实验: ```bash python test/run_experiment.py --config test/configs/base_vit.py ``` 要运行其他变体,只需指向它们各自的配置文件: ```bash # 运行 MoE-ViT 实验 python run_experiment.py --config configs/moe_vit.py # 运行 PILR-S-MoE-ViT 实验 python run_experiment.py --config configs/gbp_moe_vit.py ``` ## 4. 理论贡献 - **变超参数为策略**: 将学习率和模型容量从开发者设定的“静态超参数”转变为模型根据数据价值自主调节的“动态策略”。 - **统一“学习”与“遗忘”**: 通过将学习率与 `Surprise` 挂钩,PILF 提供了一个统一的框架来处理学习、忽略(低`Surprise`导致低`lr`)和拒绝(高`Surprise`导致低`lr`),从而内在地缓解了灾难性遗忘。 - **计算资源按需分配**: (PILF) 实现了真正的按需计算,简单的任务消耗极少资源,复杂的任务则动态调用更多资源,极大提升了效率。 --- 本项目采用 AGPLv3 许可证。详情请见 `LICENSE` 文件。