尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

大模型画图,90%的人只会扩散模型——这条“一行一行写字“的老路,被我玩出了花

大模型画图,90%的人只会扩散模型——这条“一行一行写字“的老路,被我玩出了花 有人用魔法棒画图有人用钢笔写字——而真正的高手知道什么时候该用哪支笔。AI 画图现在所有人都在讲扩散模型。但今天这个故事里那个模型根本不懂扩散——它只是像写字一样一行一行一个像素一个像素地把画写出来。单元1 | 一个被当成过时的思路先问你一个问题AI 是怎么学会画图的大概率你脑子里蹦出来的词是扩散。输入一句画一只猫几秒钟一张高清图出来了。这是过去三年最火的路线。但你知道在这条路线火起来之前还有一种更古老的玩法吗它叫自回归生成。听起来很学术翻译成人话就是像写字一样画图。你写一篇作文是一个字一个字往外蹦的——先写第一个字再看一眼写第二个字再看一眼写第三个字。画图也是一样先画左上角那个像素根据它猜右边那个再根据这两个猜第三个……直到整张图被写完。这思路放在今天绝大多数人会嗤之以鼻都什么年代了还玩像素自回归扩散模型不香吗但我偏偏想试试——不是因为怀旧是因为我有一个执念当一个模型能理解行列它就同时理解了位置而位置是一切画面的骨架。于是我用 373 张真实照片从零开始训了一个专门写字画画的模型。今天的这个故事就是它的完整成长记录。不过在讲它之前我得先给你看看这个模型在训练的时候偷偷干了一件多离谱的事。单元2 | 基础设定让模型学会坐标语言先交代一下实验的舞台。数据373 张真实照片灰度的64×64 分辨率64 级灰度。很小对吧但恰恰因为小你能把每一个细节都看清。我要做的是教模型读懂图像的结构。怎么教给它一门坐标语言。这是这个项目最妙的设计之一。模型的世界里没有图这个概念只有一串令牌start表示开始一个数字表示接下来我要从第 3 行开始写再一个数字“从第 7 列开始”然后是灰度的具体值……整张图被翻译成了一门只有 194 个词的小语言。而模型的任务就是把这门语言说得越来越准。但只从左往右写有一个致命的问题你永远只能看到左边的东西看不到上面的。想象拼一幅拼图你只看左边一块、不看上面一块经常拼错。而画面里的信息横着和竖着是两种完全不同的规律——横着看是渐变竖着看是轮廓。所以这个模型做了一个关键决策不走单行道走双向。它同时派出了两个探路专家——一个沿着行从左往右读一个沿着列从上往下读。两个专家的判断放在一起相乘、归一化得出最终答案。注意是相乘不是平均。这个细节是后面所有故事的地基。光有行列两个专家还不够。接下来模型给自己加人手了。单元3 | 四位专家一场辩论48.4M 参数的成长之路从最基础的版本开始这个模型一共经历了 7 次升级。我给每个版本都配了一个专家第一个专家行专家——从左往右读。第二个专家列专家——从上往下读。第三个专家局部专家——像放大镜盯着周围一圈的像素细节而且是多尺度的小圈、中圈、大圈一起看。第四个专家2D 专家——它不是看一条线而是看整个二维平面用二维递归的方式把左上的区域整体记在心里。到最后一个版本四位专家全部到齐行、列、多尺度局部、2D参数量 48.4M四条路同时推理。这套架构最狠的地方在于一次训练全员上岗。训练的时候四位专家一起练用到的时候可以按任务只挑其中几位上场其他人在旁边休息。这就好像……你组了一支乐队吉他、贝斯、鼓、键盘全练了同一首曲子。但演出的时候你完全可以只让吉他和贝斯上——因为这场演唱会可能只需要他们。好舞台搭好了演员就位了。接下来是重头戏演员排练的时候作弊了。单元4 | 五个坑最扎心的那个你的模型一直在作弊这个项目的工程部分踩了五个大坑。前四个都是普通的坑。比如数据格式不对得先转置再展开读取存档的时候文件反复打开导致内存损坏训练和生成用了两套实现结果有微小的浮点差异——这些都还好。真正让我脊背发凉的是第一个坑。项目里用了一种因果卷积。名字很拗口你只需要知道它负责让模型在预测当前位置时只能看到过去不能偷看未来——这是自回归的铁律。我实现的时候把卷积核的未来部分直接设成了 0想着这样不就挡住了嘛。但梯度根本不认识 0。权重是 0 不代表梯度过不去——反向传播的时候误差照样沿着那个位置往回传。也就是说训练的时候模型其实一直在偷看未来而我完全没发现。更恐怖的是之前所有版本存下来的模型权重全都带着这个作弊缺陷。这意味着我之前测试得到的成绩单全部作废。发现的那一刻我盯着屏幕看了很久。你能想象吗你辛苦养大的孩子考试一直考 100 分你以为是天赋——结果你发现他一直在偷看答案。而这个 bug 的修复方法讽刺地简单每次更新完权重重新把未来的位置遮上就行。但这句话说出来只需要一秒发现它我用了不知道多少个深夜。修好这个作弊 bug 之后四个版本重新赛跑——然后出现了最戏剧性的一幕。单元5 | 重新赛跑四路夺冠但藏着一个魔咒修好作弊之后我把四个主要版本全部重新训练、重新测试。任务有三类修复图像中心缺失的部分、续写下半张、续写右半张还有最难的一档——从零开始凭空画一张。成绩按±1 级命中率来算留出的测试图不打小抄。第一版两路专家中心修复 32.4%——但这个数字是侥幸靠一次运气爆棚的采样真实水平要打个折扣右半续写只有 8%凭空生成大约 26%。而且生成一张图要 42 分钟够你看一部电影了。第二版加多尺度局部专家修好作弊 bug 之后中心修复 29.4%右半 18%生成 14.5%但速度起飞35 秒一张。第三版三路专家中心 22.9%右半 19.6%生成 21.5%97 秒。第四版四路全开中心只有 16.9%但右半续写直接飙到 46.7%凭空生成 50.5%而且只要 43 秒。看出来了吗四路模型在中心修复上成绩反而垫底。但在右半续写和凭空生成上直接碾压全场。同一个模型同一个测试环境——换了任务排名就天翻地覆。这不是巧合。它指向了一个反直觉的真相也是这个项目最重要的发现。别急我马上把这张神秘配方表念给你听。单元6 | 猪队友与灵魂同一个模型三种任务三套配方我把四路模型请出来在留出的测试图上把五位专家组合全部跑了一遍每个任务都用最优的组合。结果是这样的任务一中心修复。最优组合只上行列两路。命中 17.7%。你可能会问四路全开不是更聪明吗不——加任何一位专家成绩都变差。任务二下半续写。同样只上行列。加人必输。任务三右半续写。最优组合变了行列之外加上局部专家。因为左半是已知的局部专家可以借力打力命中率干到 27.9%。任务四凭空生成。最优组合又变了行列 局部 2D三路——但列专家反而多余了。最好成绩 55.5%。想快点行列 2D 就行53.3%。听出规律了吗修复类的任务是证据驱动的——已知信息就在那儿专家宁缺毋滥最朴素的行列交叉就够了越加人越乱。续写类的任务是借力驱动的——已知部分越丰富越能抱对大腿该上局部就上局部。而凭空生成是想象力驱动的——这时候最锐利的局部专家和最大局观的 2D 专家才是灵魂。同一个模型一次训练三种任务三套最优配方。这是最让我着迷的地方。那些在修复任务里拖后腿的专家——局部、2D——我一度想骂它们是猪队友又尖锐又容易出错一上场就把乘积给绑架了。结果到了凭空生成的赛场上它们直接封神多样性、全局结构全靠它们撑起来。猪队友和灵魂之间只差一个任务。单元7 | 泼冷水64×64 的玩具但它教会了我一件事现在该有人泼冷水了。冷静地说这个模型只是个玩具。64×6464 级灰度373 张照片从零生成的命中率也就五成半。距离AI 画家还有十万八千里。它的工程上也有不完美的地方生成要手动维护状态缓存和训练时的 cuDNN 库存在微小的浮点分歧存储模型权重时打开文件的方式不对还会损坏数据——这些坑我都记在了文档里。但这个故事的价值不在成绩单上而在那一张配方表上。它告诉我们专家的价值从来不是绝对的。同一个专家这个任务里是猪队友换个任务就是灵魂。你在网上看到的那些加了这个模块就变强的经验帖可能只是因为它恰好换了个任务。它也告诉我们修复和创造用的是两套完全不同的能力。修补一张图你需要的是一双挑剔的眼睛凭空画一张图你需要的是敢想的脑子。以后谁再说会修图就会画画你可以把这份数据甩给他。最后它还告诉我们一件事关于怎么和代码相处你的模型可能一直在骗你——而你得有勇气把它的成绩单作废从头再来。结尾写这个项目的时候我一直在想一个问题为什么我要用写字的方式画图后来我想明白了。扩散模型像一个魔法师一挥魔杖画面从天而降——但你永远不知道它在想什么。自回归模型像一个匠人一笔一笔每一笔都有迹可循——你能看着它的思路理解它为什么会这样画。而当你给匠人配上四位各怀绝技的助手你还能看明白什么时候该让谁上场。这大概就是工程师的浪漫吧——别人看模型看的是分数我们看模型看的是它怎么思考。373 张照片194 个词的坐标语言48.4M 参数7 次架构迭代5 个工程大坑和一句最值钱的结论猪队友和灵魂之间只差一个任务。如果你也在折腾自己的小模型或者正被某个加了反而变差的模块折磨——别急着删它换个任务试试它可能只是还没等到属于它的舞台。评论区聊聊你手里的模型有没有那种换了个场景就封神的模块https://github.com/dfytensor/RCL2
返回列表