自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 Vscode在分数缩放下模糊问题的解决方法

【代码】Vscode在分数缩放下模糊问题的解决方法。

2025-11-16 06:39:34 90

原创 使用Pytorch DDP数据分发功能实现加速推理

比如Deblur, inpainting等等确实需要大量数据推理的任务的时候,时间我们是受不了的。在Diffusion训练过程中,我们可能每10k个iterations评估一下metrics,就算这一次的评估时间再久,也就每10k一次而已。别忘了,DDP中可是包含了Data Parallelism,负责把dataset的数据进行切分。0,2,4给一张卡,1,2,5给一张卡.尤其是在非1000个sigma的任务中,有些任务可能有2000多个sigma,这个迭代更新过程非常非常慢。

2025-10-30 05:27:02 218

原创 如何找到真正的Pineapple之Diffusion副产品---插值生成与反演插值。

我们对两张图像进行加噪声,然后对两个噪声做SLerp,比如我们可以得到中间那个Noise是什么样的,那么我们可以直接对这个中间噪声图像进行去噪,就能得到想要的中间状态的清晰图像。观察下面这一组图片,图片中的人物似乎同一个人在不同background中的照片,但是面部也有所变化,就像是一个连续的变化一样。由于Noise从头到尾是一个平滑过渡的,那么生成的图像直接也是平滑过度的。对于第一种,我们的噪声是随机的,是两个随机过程的过渡。对于第二种,我们的噪声是固定的,是两个固定过程的过渡。我们比较下这两个任务。

2025-10-25 08:22:51 254

原创 Pytorch多卡训练DP DDP与子进程死锁

文档的意思是当你在进行debug的时候,可以把后台进程的stdin给拉回到terminal给你输入,也就是说在不进行debug的时候,也就是正常训练的时候,后台进行的stdin全部都被隐藏。观察这个wandb日志能发现,DDP更快的另外一个原因是,对于一个main.py的模型入口来说,DDP其实是独立运行了两次,每张卡都有对应的独立的main.py的运行文件。与一开始的DP不同的是,每个GPU都是独立进行训练的,不再有Master GPU这么一说,可以大幅度降低不同GPU之间的同步时间。

2025-10-24 02:44:15 626

原创 炸串,瑞士卷与Score-Matching如何更简单

比如你的图像是256x256的,那么trace的长度就是256,问题是在于back propagation的过程中,我们得算所有x的,x1,,,,xn对于f1,f2,,,,,fn,因为算法底层是遍历所有的x的计算图,你不能只算main diagonal的,那么这个计算开销是不行的,如果你的参数是上百万的,会非常非常慢。那么山脚下的p(x)的值是很小的,可能是半个鱼豆腐?Pascal是这么说的,x~是这个带人为noise的图像,x是原始图像,q是加noise的过程,σ就是noise的强度。

2025-10-20 08:25:35 500

原创 王寡妇刨根问底 数值稳定性Log-Sum-Exp trick与Softmax

对于一个exponential function而言,x过大会导致其本身过大,会造成overflow,反之亦然会造成等于0,这两点危险都很大,0的话会有很大的影响。那么对于任何一个e^xi,肯定都是小于等于e^xMAX的,x_max = max(x1, x2, ,,,,,,,,,,,,,, xn)。能看出,LSE趋近于max,并不是等于max,所以是一个smoothed,differentiable everywhere的函数。上面说的是很好理解的,对于任意一个xi肯定都是小于等于x_max的。

2025-10-18 03:41:55 263

原创 Diffusion中几种Noise Scheduler

这个其实还是很好理解的,sigmoid本身是0-1的,但是α我们希望是从1-0的,所以就得加一个符号来翻转。但是下面这个式子去代码实现的话,其实更加精确。因为如果βmax非常大,βmin非常小,做了指数1/1000-1,运算后值会非常小,导致精度变差。这个就有所不同了,我们这里把第0个t记为第一个t,那么对于最开始的t就是βmin,t等于T时,那就是βmax。我们设置s是一个非常小的offset,那么中间的fraction就是一个接近0的数,整体接近1。考虑第0次的噪声,那么就是0-1/T-1 = β1。

2025-10-16 08:00:38 324

原创 小明上学,炸串和人性与不同的Lerp

可不要小瞧仅仅是这么简单的原理,在最新的一些前沿技术上面有非常重要的应用,比如stable diffusion中seeds的选择可以由不同的erp来决定。观察equation,当t为0时slerp为a,当t等于1的时候等于b。这两个都非常简单,sinerp是sin(x * pi/2),后面的是1 - cos(x * pi/2)。有人说小明不喜欢走寻常路,剑走偏锋,出其不意,想走个圆弧样子的出来,也不是不行。所以考虑另一种情况,小明上学不是匀速的,是变速的,因为在路上吃炸串不能走太快。

2025-10-16 06:00:12 292

原创 “传下去”这个梗与BatchNorm的思考,Sigmoid和分布视角

让我们back到Internal Covariate Shift现象,如果分布偏移到了一个相对大的值,比如说sigmoid(5),那么derivative就接近0了,这样模型就很难训练了。2. 如果都在0附近的话,sigmoid其实就变成线性函数了,我们用activation function的目的就是去学习非线性的变换,那么sigmoid就白用了对吗。我们可以用公式可视化这个过程,对于一个网络N,那么它的输出是由每一层的parameter θ决定的,那么每一层的分布可以类比为。γ学习方差,β学习均值。

2025-10-14 02:49:24 355

原创 不同尺度的两个梯度做运算小巧思

让gradient f1除以他的L2 norm,这就实现了归一化,现在这整一项的模长就变成了1,但是方向信息还是保留着的。2. 整一项再乘以gradient fb的L2,那么现在gradient fa和gradient fb就在同一个scale了,因为他们的模长现在一致了,但是我们仍然具有原先的方向信息。想象一个场景,就是你现在要对两个gradient做运算,他们分别是gradient fa和gradient fb,但是他们并不在一个尺度,我们可以通过L2距离来衡量他们的尺度。

2025-10-11 13:21:36 209

原创 Langevin Dynamics动态噪声

v is velocity of particle,λ is damping coefficient of particle(中文叫阻尼系数,但是我觉得翻译的不太好,damp本身有。那么这是一个连续的,计算机无法处理的,但是我们可以把一个无穷小的dt和dwt近四成一个很小的time step,这个叫Euler-Maruyama method。我们可以发现是最后一项控制了intensity of noise,根号2乘以一个超参数,再乘以一个Gaussian即可。是一个Gaussian PDF。

2025-10-11 00:23:04 249

原创 Annealed Langevin Dynamics动态学习率

当前噪声Current Noise Level,当处于去噪声第一步时,噪声水平是很大的,也就是sigma很大。我们需要一个公式去衡量当前噪声与去噪声最后一步的距离,你可以直接相减,你也可以current sigma除以最后一个sigma,其变化范围在最后就是1,这样更加合理。当然是改变gardient,那么平方函数就其实非常适合,随着输入的持续减小,其gradient也在减小,在初始过程,current sigma很大,那么下降过程变化就很大,然后变化越来越小。2. Annealing退火。

2025-10-10 11:15:39 199

原创 小白也能理解的Expectation Maximization算法,及生成模型的关系

假设全球有200个国家,2种性别,那么我们就有 200×2=400对mean和standard deviation,所以我们需要estimate 800个参数,那么这就是一个800重积分,在目前计算机中是无法计算的。再者,从上图可以看出,在E-step中是不更新任何参数的,只有M-step才进行mean和variance的更新。首先我们可以随机找一个θ,固定住这个θ,然后去寻找lower bound,最大值对应的原始分布交点就是新的θ,然后固定这个θ再寻找lower bound,repeatedly。

2025-10-07 13:24:19 814

原创 L1和L2对训练速度和GPU利用率的差异

首先我们能发现,L1并不是线性的,因为梯度为0的时候要用次梯度来处理,比如直接选0作为梯度,如果你的normalization intensity足够合适的时候,那么weight=0产生sparsity。L2是处处可微的differentiable everywhere,gpt说gpu设计出来非常适合这种连续的,处处可微的计算。那么密集计算的话内存是连续访问的,稀疏计算的话是随机访问的,连续访问的话显存读取更快,这个也是影响速度的因素之一。总想写点什么,这是我写的第一个blog,避免以后忘记什么。

2025-10-06 03:04:44 299

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除