96SEO 2026-02-23 12:57 4
。

很多开发人员觉得还不过瘾#xff0c;希望内容可以更加深入。
因此#x…以前通过论文介绍
和大语言模型LLMs的主要原理之外在代码实践环节主要还是局限于是引入预训练模型、在预训练模型基础上做微调、使用
等等。
很多开发人员觉得还不过瘾希望内容可以更加深入。
因此本文将讲解基于扩散模型原理的代码实践将尝试用代码完整从底层开始洞悉扩散模型Diffusion
等能够仅通过提示词Prompt就能够生成图像。
我们希望通过编写这个“扩散模型原理”代码实践系列使用代码来探究和诠释这些应用背后算法的原理。
探索基于扩散的生成人工智能的前沿世界并从头开始创建自己的扩散模型深入了解扩散过程和驱动扩散过程的模型而不仅仅是预先构建的模型和
通过进行采样、训练扩散模型、构建用于噪声预测的神经网络以及为个性化图像生成添加背景信息获得实用的编码技能在整个系列的最后我们将有一个模型可以作为我们继续探索应用扩散模型的起点
噪声采样Sampling训练扩散模型Training添加上下文Embedding
这四部分的完整代码可参考GitHubhttps://github.com/hanyun2019/difussion-model-code-implementation
亚马逊云服务免费体验链接https://aws.amazon.com/cn/free/?sc_channelseosc_campaignblog1102
中国有句古语起心动念。
因此既然我们要开始从底层揭开扩散模型Diffusion
Model的面纱首先是否应该要想清楚一个问题使用扩散模型的目标是什么
本文将讨论扩散模型的目标以及如何利用各种游戏角色图像例如精灵图像训练数据来增强模型的能力然后让扩散模型自己去生成更多的游戏角色图像例如生成某种风格的精灵图像等。
精灵图像集你想要更多的在这些数据集中没有的大量精灵图像你该如何实现这个现在看起来不可能完成的任务
https://zrghr.itch.io/froots-and-veggies-culinary-pixels《kyrise》
Model就能帮上忙了。
你有很多训练数据比如你在这里看到的游戏中精灵角色的图像这是你的训练数据集。
而你想要更多训练数据集中没有的精灵图像。
你可以使用神经网络按照扩散模型过程为你生成更多这样的精灵。
扩散模型能够生成这样的精灵图像。
这就是我们这个系列要讨论的有趣话题。
以这个精灵图像数据集为例扩散模型能够学习到精灵角色的通用特征例如某种精灵的身体轮廓、头发颜色甚至腰带配饰细节等。
神经网络学习生成精灵图像的概念是什么呢它可能是一些精致的细节比如精灵的头发颜色、腰带配饰等也可能是一些大致的轮廓比如头部轮廓、身体轮廓、或者介于两者之间的其它轮廓等。
而做到这一点的一种方法即通过获取数据并能够专注更精细的细节或轮廓的方法实际上是添加不同级别的噪声noise。
因此这只是在图像中添加噪声它被称为
这个思路其实是受到了物理学的启发场景很类似一滴墨水滴到一杯清水里的全过程。
最初我们确切地知道墨水滴落在那里但是随着时间的推移我们会看到墨水扩散到清水中直到它完全消失或者说完全和清水融为一体。
Sprite”开始当添加噪音时它会消失直到我们辨别不出它到底是哪个精灵。
精灵图像为例以下详细描述通过添加不同阶段噪声到精灵训练数据集的全过程。
Bob”的时候我们想让神经网络知道“你知道这里有一些噪声”不过通过一些细节它看起来像“Bob
Fred”这个图像时变得只能看到精灵的模糊轮廓了。
那么在这里我们感觉到这可能是精灵但可能是精灵
这时我们可能想让神经网络为这些精灵图像推荐更通用的细节比如在此基础上为
Idea”这个图像时虽然已经无法辨认图像的特征我们仍然希望它看起来更像精灵。
这时我们仍然想让神经网络知道“我希望你通过这张完全嘈杂的图像通过提炼出精灵可能样子的轮廓来把它变成更像精灵的图像”。
process即随着时间的推移逐渐增加噪声的过程如同把一滴墨水完全扩散到一杯清水之中。
我们需要训练的那个神经网络就是希望它能够把不同的嘈杂图像变成美丽精灵。
这就是我们的目标即扩散模型的目标。
Idea”这个图像开始这时只是纯粹的噪声到开始看起来像里面可能有精灵再到长得像精灵
distribution的。
换句话说也就是这个图像的像素每一个都是从正态分布又称
你可以从该正态分布中采样噪声然后你可以使用神经网络逐渐去除噪声来获得一个全新的精灵除了你训练过的所有精灵之外你还可以获得更多的精灵。
恭喜你你已经找到了生成大量的全新美丽精灵的理论方法接下来就是代码实践了。
在下一章里我们将用代码展示为了实现正态分布噪声采样而主动在迭代阶段添加噪声的方法和没有添加噪声方法的模型输出结果对比测试。
这将是一次很有趣和难忘的扩散模型工作原理奇妙体验。
首先我们将讨论采样。
我们将详细介绍采样的细节以及它在多个不同的迭代中是如何工作的。
如需详细了解可参考以下官方文档https://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/gs-setup-working-env.html
本实验的完整示例代码可参考https://github.com/hanyun2019/difussion-model-code-implementation/blob/dm-project-haowen-mac/L1_Sampling.ipynb
sample你把这个噪声样本输入到一个已经训练好的神经网络中。
这个神经网络已经知道精灵图像的样子它接下来的主要工作是预测噪声。
请注意这个神经网络预测的是噪声而不是精灵图像然后我们从噪声样本中减去预测的噪声来得到更像精灵图像的输出结果。
由于只是对噪声的预测它并不能完全消除所有噪声因此需要多个步骤才能获得高质量的样本。
比如我们希望在
如果你看过一些关于穿越时间旅行的电影这整个过程很像是一段时间旅行。
想像一下你有一杯墨汁我们实际上是在用时光倒退step
backwards的方式它最初是完全扩散的漆黑墨汁然后我们会一直追溯到有第一滴墨汁滴入一杯清水的那个最初时分。
noise。
为什么我们需要添加一些额外噪声这其实是一个很有趣的话题我们会在本文的后面部分详细探讨这个话题。
这是你实际将原始噪声、那个样本传递回神经网络的地方然后你会得到一些预测的噪声。
而这种预测噪声是经过训练的神经网络想要从原始噪声中减去的噪声以在最后得到看起来更像精灵图像的输出结果。
相关的实用库以及导入帮助我们设计神经网络的一些辅助函数helper
nn.Sequential(nn.AvgPool2d((4)),
nn.Sequential(nn.ConvTranspose2d(2
normalizenn.ReLU(),nn.Conv2d(n_feat,
接下来我们将设置模型训练需要的一些超参数包括时间步长、图像尺寸等。
决定了在特定时间里步长对图像施加的噪点水平。
因此这部分只是构造一些你记得的缩放因子的
https://arxiv.org/pdf/2006.11239.pdf
schedule噪声调度确定在某个时间步长应用于图像的噪声级别S1S2S3缩放因子的值
torch.randn_like(x)”来添加额外的采样噪声以让噪声输入符合正态分布
nn_model.load_state_dict(torch.load(f{save_dir}/model_trained.pth,
i8:intermediate.append(samples.detach().cpu().numpy())intermediate
现在让我们来可视化采样随时间推移的样子。
这可能需要几分钟具体取决于你在哪种硬件上运行。
在本系列的第四集中我们还将介绍一种快速采样Fast
点击开始按钮来查看不同时间线上模型生成的精灵图像动图显示如下所示。
如果以上动图无法在手机上正常显示可以参考下面这三张我在不同时间线上分别做了截图。
对于我们不添加噪音的输出测试代码方面其实实现很简单就是是将变量
sample_ddpm_incorrect(n_sample):#
i8:intermediate.append(samples.detach().cpu().numpy())intermediate
这显然不是我们想要的结果。
可见在这个神经网络的架构设计中在每个迭代阶段添加额外噪声来保持输入噪声符合正态分布是很关键的一个步骤。
“扩散模型工作原理”代码实践系列的第一篇本文通过两段不同代码块的实现来对比了两种扩散模型的采样方法
总的来说就是扩散模型的神经网络输入应该是符合正态分布的噪声样本。
由于在迭代过程中噪声样本减去模型预测的噪声之后得到的样本已经不符合正态分布了所以容易导致输出变形。
因此在每次迭代之后我们需要根据其所处的时间步长来添加额外的采样噪声以让输入符合正态分布。
这可以保证模型训练的稳定性以避免模型的预测结果由于接近数据集的均值而导致的输出结果变形。
亚马逊云服务免费体验链接https://aws.amazon.com/cn/free/?sc_channelseosc_campaignblog1102
这个系列之后的文章我们将继续深入了解扩散过程和执行该过程的模型帮助大家在更深层次的理解扩散模型并且通过自己动手从头构建扩散模型而不是仅仅引用预训练好的模型或使用模型的
来对扩散模型底层实现原理的理解更加深刻。
下一篇文章我们将用代码来实践扩散模型的训练敬请期待。
Work”https://www.deeplearning.ai/short-courses/how-diffusion-models-work/
https://zrghr.itch.io/froots-and-veggies-culinary-pixels
https://github.com/cloneofsimo/minDiffusion
https://arxiv.org/abs/2006.11239
https://arxiv.org/abs/2010.02502
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback