# 实验2:STDP / Hebbian Associative Recall ## 系列实验总结 ### 2a: 原始 STDP(完全失败) - **问题**: W 初始化为 0 → 无脉冲 → STDP 不触发 → W 保持为 0(鸡生蛋死循环) - **教训**: STDP 学习不能依赖网络自身产生 post-spikes,必须 teacher forcing ### 2b: 修复后的 STDP + 直接 Hebbian - **Direct Hebbian**: 1 对完美(CosSim=1.0),但多对时交叉干扰严重(10 对 Disc=0.007) - **STDP v2**: 比 Hebbian 差,LIF 阈值非线性扭曲输出 - **根因**: 随机 spike pattern 不够正交,pattern 重叠导致灾难性干扰 ### 2c: Pattern Separation(突破性进展)⭐ - 引入 Winner-Take-All 模式分离(类比齿状回 dentate gyrus) - **结果**: code=16384, k=20 时,**2000 对记忆完美召回**(Disc=0.999) - 500 对记忆:Correct=1.0, Wrong=0.001 ### 2d: 鲁棒性与容量 - **容量**: 20,000 对记忆仍然完美(code=16384, k=20) - **Partial cue**: 30% 缺失仍 100% 召回,50% 缺失 86% 准确 - **噪声**: ⚠️ 致命弱点——noise_std=0.1 就崩溃到 9% 准确率 - WTA 对输入微扰极其敏感(改变 top-k 排序) ### 2e: 抗噪方案 - **Soft WTA**: 虽然 CosSim 高但 discrimination=0(所有 pattern 都一样,无法区分) - **Multi-probe**: 完全失败 - **Coarse-to-fine**: noise≤0.2 完美,本质上是 NN lookup + Hebbian recall - **Wider k**: 略有改善但不根本 ### 2f: Learned Separator - 随机 embedding 上训练失败(pos_match ≈ neg_match) - 原因:随机高维向量没有语义结构,contrastive loss 无法学到有意义的分离 - **需要真实语义 embedding 才能验证** ### 2g: Multi-hop 联想(核心卖点)⭐⭐ - **A→B→C→D→E→F→G (6跳): CosSim=1.0**,完美链式联想 - 100 条长度为 4 的链(300 个 pair),零干扰 - 收敛链(A→C, B→C): 两条路径都完美到达 C - 发散链(A→B, A→C): 自然产生 50/50 混合——符合生物记忆行为 - **这是 RAG 无法实现的能力**:RAG 只能做单跳 NN 检索 ## 架构决策 ### 确定的方案 1. **Pattern Separation**: WTA(code_dim=16384, k=20)是核心组件 2. **Hebbian Outer-Product**: 存储机制(不是 STDP trace-based) 3. **Multi-hop**: 通过权重矩阵链式乘法实现 4. **容量**: 20K+ 记忆毫无压力 ### 待解决 1. **噪声容忍**: 实际使用需要 coarse retrieval(NN lookup)辅助 - 或者: learned separator 在真实语义 embedding 上可能 work 2. **STDP 的角色**: 在此架构中,直接 Hebbian 比 STDP 好 - STDP 可能在 consolidation(exp03)中找到位置 3. **SNN 的角色**: encoder/decoder 验证通过,但 memory core 更适合 rate-based - SNN 的价值在于: temporal encoding + neuromorphic hardware + consolidation dynamics ## 关键数字 | 指标 | 数值 | |------|------| | 最大容量 (code=16384, k=20) | >20,000 memories | | 单跳召回精度 (clean cue) | 1.0000 | | 多跳召回精度 (6 hops) | 1.0000 | | 噪声容忍 (noise=0.1) | ❌ 0.09 exact rate | | Partial cue 容忍 (30% missing) | ✅ 100% | | Weight matrix 内存 | 16384² × 4B = 1GB |