乘法,还是加法?
把更新规则换成大脑的用法
梯度下降对每个权重一视同仁地加上一个增量;这篇 Neuron 论文把"突触变化"重新度量了一遍,得到一条乘在原权重上的更新规则——指数梯度(EG)。性能不输 GD,权重分布自动长成大脑里普遍存在的对数正态,剪枝更扛揍,无关输入越多优势越大。下面把推导、证据和落地代码一次讲透。
新增量,与当前权重无关。小权重和大权重挪动同样的距离,符号可以随便翻。
乘性缩放,只改大小、不改符号。已经很大的权重获得更大的更新量。
GD 训练出来的模型,哪里不像脑
用 GD 训练神经网络来建模大脑,是计算神经科学的常规操作。论文开篇指出的不是 GD "不生物学"这个老生常谈,而是三个可观测的现象差异——每一项都有实验数据对不上:
01突触不会中途变号(Dale 定律)
一个真实突触要么终生兴奋性、要么终生抑制性。而 GD 的加性更新随时可以把一个权重从正改到负——等于允许突触在训练中途更换身份。这不是哲学洁癖:如果你想在模型里强制 Dale 定律(兴奋、抑制种群分开),GD 会在你背后悄悄违规。
02大脑的突触强度是对数正态分布的
跨物种、跨脑区的电生理和树突棘测量反复看到同一件事:突触强度的分布是重尾的对数正态——少数极强的连接 + 一大片极弱的背景。GD 训练会把初始化时的 log-normal 拉回钟形,长尾消失;EG 训练后分布仍然是 log-normal(KS 统计量相差 10 倍)。
03大脑更擅长无视无关输入
神经元泡在大量背景噪声和与当前任务无关的输入里,却只靠少数相关突触就能驱动决策。GD 有"抄近路"的倾向——容易被无关特征带偏。论文后面会证明:无关输入比例越高,EG 对 GD 的优势越大。
光"更像脑"不够——替代算法必须同样能学。这就是为什么作者把 EG 的性能打平放在第一位来讲:先证明不丢分,再证明多得分。
换的不是优化器,是"距离"
EG 不是拍脑袋发明的(Kivinen & Warmuth 1997 就有),它和 GD 一样可以从镜像下降(mirror descent)的第一性原理推出来。起点是一个生物学上很站得住的问题:
最小化突触变化有两条硬理由:突触的生成和维持都要花代谢成本(蛋白合成、受体转运、棘结构改造);改动太大还会冲掉旧记忆——灾难性干扰。把它写成最优化问题,就是论文的方程 (1):
l̂(w) 是损失函数在当前权重处的线性近似;D(w; wt) 是"突触变化惩罚";η 反过来控制惩罚强度——惩罚越小,等效学习率越大。
GD 和 EG 的全部区别,就是 D 选了什么。GD 选的是平方欧氏距离——它对"往哪边挪"完全对称,不关心你是否跨过了零点:
EG 换成未归一化相对熵。它里面有个 log,对反号的自变量根本没定义——于是"突触变号"这件事被从数学上排除,而不是被正则化劝退:
那个 sign(w) 项值得单独说一句:把权重拆成"符号 s × 正部 w⁺"再对正部做镜像下降,链式法则会自动带出这一项(∇l ⊙ s)。消融实验显示把它去掉网络就学不动——它保证负权重收到负梯度时是放大而不是缩向零。exp 恒正,所以整个更新永远只缩放幅度、永不翻转符号——Dale 定律是构造出来的,不是约束出来的。
三个类脑性质,一条比一条具体
性质一符号永不翻转
从随机 log-normal 初始化出发训练 RNN:GD 网络在整个训练过程中每步产生成百上千次符号翻转,EG 网络是零次。若初始化遵守 Dale 定律,EG 网络全程遵守;GD 会悄悄改写兴奋/抑制身份。(对照实验:把 GD 投影到"不许变号"的半直线上,性能会掉——说明 EG 不是"戴着镣铐的 GD",而是真的在用自己的几何找解。)
性质二log-normal 分布被保持
用 log-normal 初始化、训练完再看:GD 的权重分布已经不像 log-normal 了(换 sign-constrained GD 也一样),EG 的仍然被 log-normal 很好拟合;KS 统计量相差 10 倍。更妙的是从正态、均匀分布初始化出发,EG 的更新量本身近似 log-normal,GD 的更新量近似正态——这是乘性更新的指纹。而 log-normal 突触分布恰恰是跨物种、跨脑区反复观测到的实验事实。
性质三更新量正比于现有权重
实验上早就观察到:突触变化量与当前突触强度成正比(乘性可塑性)。论文对每一步更新拟合"更新幅度 ~ 权重幅度"的线性回归:GD 的 R² ≈ 0(完全解释不了),EG 能解释相当比例的方差。乘性规则不是论文的假设,而是更新规则的直接推论。
演示在你的浏览器里跑一次 本页实时运行 · 简化复现
空口说不如亲手看。下面是一个仿论文点神经元设定(图 4A)的极简任务:学生神经元接收 N 个 0/1 输入,其中只有 100 个是相关的——当至少 50 个相关输入同时活跃时,它该输出 1。两个学生(一个 GD、一个 EG)吃同样的数据流,各学各的。训练结束后看它们的权重长什么样:相关输入(实色点)能不能和无关输入(灰点)分开?
先证明不掉分,再证明多得分
4.1标准任务:打平
82 个认知神经科学式任务(Mod-Cog 套件)上训练 2500 神经元的 RNN:GD 和 EG 最终精度都是 98.4%,收敛速度相当,连"按什么顺序学会各任务"都高度一致。更大的压力测试是 ImageNet + ResNet-50:两算法再次大致持平。 EG 能扛住硬任务,"类脑算法学不动难任务"的常见担忧在此不成立。
但"打平"不等于"相同":用动力学相似性分析(DSA)比较两个算法解出的网络,行为相似、权重与轨迹明显不同——EG 在不同任务间发现的解反而更一致。同样的性能,不同的解法,这是后面一切差异的根源。
4.2剪枝:EG 的长尾是留了备份的骨架
EG 的权重长尾意味着:计算集中在少数强连接上,小权重是"冗余背景"。按幅度从小到大剪掉 40–97.5% 的权重,EG 网络在每个剪枝水平上都比 GD 保持得更好(剪前后的权重余弦相似度也更高)。更有生物学味道的设定是"剪完接着学"——发育和睡眠中的突触修剪正是如此:
反过来剪大权重,EG 网络更疼——符合"计算集中在少数强连接"的判断。对训练好的权重矩阵做图分析,EG 的解还有更高的聚类系数与"小世界"系数:长尾 + 骨干,拓扑上也更像脑。
4.3无关输入越多,EG 赢得越多
回到图 2 那个点神经元任务,论文在三种输入规模下网格搜索了两边的最优学习率(见 §6 表格),结果:
乘法是一台信贷分配机器
把 EG 的更新拆开看:exp(−ηg) 先对梯度的每个坐标做指数变换——负梯度(该长的方向)被放大、正梯度被压缩;再乘上当前权重本身。两件事拼起来,就是一台信贷分配机:只要某个连接收到的梯度方向在学习过程中保持一致,它就会被指数级地放大,其余连接被压回背景。
这解释了 §3–§4 的所有现象,而且是同一件事的三张面孔:
长尾——少数连接赢得几乎全部信贷,权重分布必然重尾;抗剪枝——既然计算集中在骨干上,剪掉小权重动不了筋骨,网络拓扑自然呈现小世界聚类;擅长稀疏特征——当任务只有少量相关输入时,"快速把信贷押注到少数连接上"正是最短路径。GD 的加性更新没有这个放大机制,只能在平坦的欧氏空间里慢慢摸索,无关输入一多就淹死在噪声里。
这也和深度学习里的彩票假设接上了:初始化中存在"中奖子网络"。作者猜测 EG 更擅长在初始化里找到该大幅改动的那个子集——乘性规则天然偏好"押注已有的差异",而不是平均用力。
一句话总结这层几何直觉:GD 度量距离用直尺,EG 用的是"变化成本与现状成正比"的尺度。同样走一步,从大权重身上"要走"的距离和小权重完全不同——优化永远沿着便宜的路走,于是解的形状被距离函数决定。
换掉你的优化器:三行起步,五件事注意
EG 对工程实现非常友好——不需要改模型结构、不需要改数据,只需要换掉 optimizer.step()。论文官方实现见 jhcornford/exponentiated-gradients,下面是按论文 STAR Methods 形式整理的最小可用版本:
# EG 优化器(按论文表格的 momentum/weight decay 形式实现) class EG(torch.optim.Optimizer): def __init__(self, params, lr=0.4, momentum=0.925, weight_decay=0.0): super().__init__(params, defaults=dict( lr=lr, momentum=momentum, weight_decay=weight_decay)) @torch.no_grad() def step(self, closure=None): for group in self.param_groups: for p in group['params']: if p.grad is None: continue g = p.grad * torch.sign(p) # sign 项不能省:链式法则的产物 st = self.state[p] if 'm' not in st: st['m'] = torch.zeros_like(p) m = st['m'] m.mul_(group['momentum']).add_(g).add_(group['weight_decay']) p.mul_(torch.exp(-group['lr'] * m)) # 乘性更新:只缩放,不变号
# 配套的两件初始化小事(论文 STAR Methods;本块为示意,变量名自明) # 1) 权重:log-normal 初始化(α=1.5),再随机乘 ±1 —— 最终零均值、方差 1/|h| mu = math.log(alpha**2 / (1 + alpha**2) / math.sqrt(fan_in)) sigma2 = math.log(1 + 1 / alpha**2) w = torch.distributions.LogNormal(mu, sigma2**0.5).sample(shape) * signs('±1 等概率') # 2) 偏置:EG 无法变号,所以拆成正负两组再相加,等效零均值 b = torch.empty(h).uniform_(0, math.sqrt(2/h)) + \ torch.empty(h).uniform_(-math.sqrt(2/h), 0)
论文各任务网格搜索出的学习率——EG 普遍比 GD 大一到两个数量级,这是换优化器后最需要重调的超参:
| 任务 | EG · 范围 → 最优 | GD · 范围 → 最优 |
|---|---|---|
| Mod-Cog 认知任务(RNN) | [2, 8] → 3.5 | [0.01, 1] → 0.1 |
| Mod-Cog 剪枝后再训练 | [0.1, 2.5] → 1.5–2.0 | [0.01, 0.75] → 0.1–0.25 |
| 点神经元 | [0.1, 1] → 0.75–1 | [0.005, 1] → 0.5–0.01 |
| 多室生物物理神经元 | [1e-6, 1e-3] → 1e-4 | [1e-11, 1e-7] → 1e-9 |
| 连续控制(含噪声) | [0.2, 0.8] → 0.4 | [0.001, 0.2] → 0.01 |
| ImageNet(ResNet-50) | [0.1, 0.6] → 0.4 | [0.01, 0.5] → 0.1 |
其余配套(论文取值):momentum 0.925;Mod-Cog 的 weight decay 为 EG 1e-7 / GD 1e-6(EG 的 decay 是乘性 exp(−ηγ),小步长下与 GD 等效);连续控制用 cosine 学习率调度 + 梯度范数裁剪到 4;ImageNet 配 5e-5 weight decay 与 0.15 label smoothing。
清单什么任务值得换
- 训练后要做剪枝 / 压缩——EG 的权重骨干天然抗剪,剪后再训练也更快恢复。
- 输入维度高但相关特征稀疏(大量无关通道、噪声传感器、多模态背景)——论文中 EG 优势最大、且随无关比例增大而增大的场景。
- 想要可解释的权重结构:log-normal 分布、少数强连接骨干、小世界拓扑。
- 计算神经科学建模:Dale 定律、乘性可塑性、比例式更新一次到位。
- 只为刷标准榜单的精度——两算法打平,没有收益,还要重调学习率。
- 严重欠参数化、且最优解要求某些权重变号——EG 会被初始化的符号锁死(过参数化的大网络通常无此问题)。
- 迁移成本清单:sign 项必须保留;偏置拆正负两组;权重建议 log-normal 初始化;学习率按表 1 量级重调;训练稳定性靠梯度裁剪。
论文自己划的三条线
任务的复杂度。Mod-Cog 从优化角度看还是简单任务,远不及开放环境具身控制或真实语言建模。作者的反驳是 EG 及其近亲已在 ImageNet 级任务上验证过可扩展性,但也明说:更高难度下的结论有待未来工作。
变号需求。如果唯一可行的解要求某些突触变号(欠参数化时可能出现),GD 会赢。实验里没观察到,是因为过参数化下"随机初始化恰好凑齐正确符号"的概率很小;而且存在专门设计的兴奋/抑制分离架构,能在欠参数化区间学得很好。
生物细节的抽象层级。模型用的是同质的 ReLU 率单元,没有区分细胞类型——而实验上抑制性与兴奋性突触的可塑性动力学本就不同。另外,真实突触分布是"严格 log-normal"还是"接近 log-normal",作者也坦承无法分辨,但跨实验室的一致性足以让建模者把它当回事。
官方代码:github.com/jhcornford/exponentiated-gradients(PyTorch;多室神经元部分基于 NEURON + Allen Cell Types Database)