我把 Bad Apple 压缩进了一个 3MB 的神经网络 [P]

Reddit r/MachineLearning 模型

摘要

作者将 Bad Apple 动画压缩进了一个使用正弦激活(SIREN)的小型 MLP,仅用 79 万参数(约 3MB)表示 27 亿像素,并通过时间拉伸和运动聚焦采样等改进,使验证 MSE 降低了约 9 倍。

我训练了一个小型 MLP 来记住经典的 Bad Apple 动画:约 27 亿像素的视频被压缩进 79 万参数(3.2MB float32,1.6MB float16)中。网络接收一个三维坐标 (t, y, x)——帧索引和像素位置——并输出 0 到 1 之间的灰度值。要“播放”视频,你可以对该函数在整个网格上进行求值。“视频”隐式存储在 5 层正弦激活线性层(Sitzmann 等人的 SIREN)中,隐藏单元数为 512,ω₀ = 30,输出层为 sigmoid。源文件 bad_apple.mp4 有 6524 帧,分辨率 854×480;我将其降采样为 1620 帧 × 384×384,约为原始像素的 1/10(空间 2.8 倍 + 时间 4 倍的缩减)。起初,我使用带低频傅里叶特征的 ReLU MLP,它在 MSE 0.12 附近达到平台期。SIREN 的正弦激活无需额外成本就能引入更高频率,因此网络能够输出精细细节。不幸的是,这个模型有一个问题:它只能缓慢地移动信息,所以快速运动看起来模糊。为了解决这个问题,我做了两处修改:时间拉伸:在第一层之前,我将时间坐标相对于空间坐标放大了 4 倍,从而赋予其 4 倍的时间容量。运动聚焦采样:Bad Apple 约 90% 是静态黑色,因此均匀像素采样导致运动边缘缺乏梯度。现在每个训练批次的一半来自相邻帧之间发生变化的像素。对于训练流程,我在整个数据体上使用单个共享网络(没有逐帧潜变量;最初我使用逐帧微调,但那会导致灾难性遗忘),配合余弦调度的 Adam + 权重 EMA,然后对整个视频做一遍低学习率的“精修”训练。新模型有以下改进:验证 MSE 从 0.0795 下降到 0.0090(约 9 倍提升)。与旧模型相比,高运动帧与 ground truth 的接近程度提高了 3.6 倍,静态帧则提高了近 15 倍。400 个采样帧中有 398 个得到改进。备注:384×384 是正方形(原始是 16:9,所以播放时会垂直拉伸。以 8fps 播放时,1620 帧接近原视频的 3:37 时长;以 12fps 播放时约为 1.6 倍快进。12.6MB 的 checkpoint 包含权重、Adam 动量和 EMA 副本;网络本身为 3.2MB。)完整分辨率视频、checkpoint 和代码可在此 Github 链接中找到。
查看原文

相似文章

通过激活聚合的提示压缩

arXiv cs.CL

本文提出通过中间层激活的学习加权和将指令提示压缩为单个激活向量,准确率下降低于2%,并揭示了对LLM激活空间结构的洞察。