首页 > 其他分享 >Diffusion模型

Diffusion模型

时间:2024-06-09 21:44:23浏览次数:16  
标签:Diffusion loss schedule epsilon 模型 torch alpha hat

参数说明

beta_schedule = np.linspace(0.0001, 0.02, 1000)  # 示例 beta schedule

alpha_hat = np.cumprod(1 - beta_schedule)  # 计算 alpha_hat


具体例子

让我们通过一个具体的例子展示如何计算 Beta Schedule 和 Alpha_hat:

import numpy as np

# 定义 Beta Schedule
beta_schedule = np.linspace(0.1, 0.2, 10)  # 从0.1到0.2等间隔分成10个值

# 计算 Alpha_hat
alpha_hat = np.cumprod(1 - beta_schedule)

# 打印结果
print("Beta schedule:", beta_schedule)
print("Alpha_hat:", alpha_hat)

在代码中的应用

def encode(x_0, t, alpha_hat):
    alpha_hat_t = alpha_hat[t]  # 获取时间步 t 的 alpha_hat
    epsilon = torch.randn_like(x_0)  # 生成标准正态分布噪声
    epsilon_prime = torch.sign(x_0) * torch.abs(epsilon)  # 计算符号噪声
    x_t = torch.sqrt(alpha_hat_t) * x_0 + torch.sqrt(1 - alpha_hat_t) * epsilon_prime  # 计算时间步 t 的特征向量
    return x_t

for t in range(num_steps):
    x_t = encode(x_0, t, alpha_hat)
    node_features.append(x_t.numpy())
    print(f"Node features at time step {t+1} (x_{t+1}):", x_t.numpy())

反向扩散过程和损失计算

for t in range(num_steps-1, -1, -1):
    x_t = torch.tensor(node_features[t+1])
    mu_theta, sigma_t = model.decode(x_t, t, alpha_hat)
    print(f"Reconstructed features at time step {t} (mu_theta_{t}):", mu_theta.detach().numpy())

完整的代码

import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as np

定义模型类
class DiffusionModel(nn.Module):
    def __init__(self, d):
        super(DiffusionModel, self).__init__()
        self.epsilon_predictor = nn.Sequential(
            nn.Linear(d, d),
            nn.ReLU(),
            nn.Linear(d, d)
        )

    def decode(self, x_t, t, alpha_hat):
        alpha_hat_t = alpha_hat[t]
        mu_theta = self.epsilon_predictor(x_t)
        sigma_t = torch.sqrt(1 - alpha_hat_t)
        return mu_theta, sigma_t

def encode(x_0, t, alpha_hat):
    alpha_hat_t = alpha_hat[t]
    epsilon = torch.randn_like(x_0)
    epsilon_prime = torch.sign(x_0) * torch.abs(epsilon)
    x_t = torch.sqrt(alpha_hat_t) * x_0 + torch.sqrt(1 - alpha_hat_t) * epsilon_prime
    return x_t, epsilon

def compute_total_loss(model, x_0, alpha_hat):
    num_steps = len(alpha_hat)
    x_t = x_0
    epsilon_list = []
    
    多步噪声传递过程
    for t in range(num_steps):
        x_t, epsilon = encode(x_t, t, alpha_hat)
        epsilon_list.append(epsilon)
    
    total_loss = 0
    
    反向扩散过程
    for t in range(num_steps-1, -1, -1):
        mu_theta, sigma_t = model.decode(x_t, t, alpha_hat)
        epsilon_t = epsilon_list[t]
        total_loss += F.mse_loss(mu_theta, epsilon_t)
        更新 x_t 为上一步的特征
        x_t = (x_t - torch.sqrt(1 - alpha_hat[t]) * epsilon_t) / torch.sqrt(alpha_hat[t])
    
    return total_loss

初始化参数
d = 5  # 特征向量维度
beta_schedule = np.linspace(0.1, 0.2, 10)  # 示例 beta 计划
alpha_hat = np.cumprod(1 - beta_schedule)  # 计算 alpha_hat

初始化节点特征向量
x_0 = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])
print("Initial node features (x_0):", x_0.numpy())

初始化模型
model = DiffusionModel(d)

计算总损失
total_loss = compute_total_loss(model, x_0, alpha_hat)
print("Total loss:", total_loss.item())

标签:Diffusion,loss,schedule,epsilon,模型,torch,alpha,hat
From: https://www.cnblogs.com/csjywu01/p/18239976

相关文章

  • 网信办大模型备案全网最详细流程【附附件】
    本文要点:大模型备案最详细说明,大模型备案条件有哪些,《算法安全自评估报告》模板,大模型算法备案,大模型上线备案,生成式人工智能(大语言模型)安全评估要点,网信办大模型备案。大模型备案安全评估流程详细说明,见下图:大模型安全评估流程图算法备案安全评估流程详细说明,见下图:算......
  • 网信办大模型备案全网最详细流程【附附件】
    本文要点:大模型备案最详细说明,大模型备案条件有哪些,《算法安全自评估报告》模板,大模型算法备案,大模型上线备案,生成式人工智能(大语言模型)安全评估要点,网信办大模型备案。大模型备案安全评估流程详细说明,见下图:大模型安全评估流程图算法备案安全评估流程详细说明,见下图:算......
  • 开源模型应用落地-LangSmith试炼-入门初体验-Prompts(六)
    一、前言  在许多应用程序中,特别是在大型语言模型(LLM)应用程序中,收集用户反馈以了解应用程序在实际场景中的表现是非常重要的。  本章是LangSmith系列最后一篇文章,通过学习Prompts功能,用户可以上传、浏览、检索和管理提示(Prompt)。这个Prompts功能简化了提示(Prompt)的......
  • 端午节赛龙舟,我们的新队员---AI大模型
       赛龙舟的比赛通常在一个湖泊或河流上进行,参赛队伍会驾驭着长形的龙舟,每艘船上有一名鼓手和多名桨手。比赛开始时,鼓手会击鼓来指挥桨手的划桨节奏,而桨手们则要协同合作,以最快的速度将龙舟划向终点。   赛龙舟不仅仅是一项体育竞技活动,更是一项富有文化内涵的民......
  • C/S模型服务器的调度策略
    非阻塞轮询就是将所有的套接字都设置为非阻塞模式,可以解决客户不发出数据导致服务器端卡死的问题,但是非阻塞套接字也无法妥善地告知服务器数据何时到达,所以服务器需要不断地尝试读取客户端数据。fcntl()函数可以设置或者获取套接字文件的属性多任务并发多任务并发模型就是利用......
  • YoloV8改进策略:Neck篇|自研Neck层融合模型|深度特征与浅层特征融合,涨点明显|附结构图(
    摘要本文介绍的独家原创的Neck层特征融合方法,将深度特征和浅层特征相融合,结合自研下采样模块和动态上采样模块,提供了一种高效的Neck层改进方式,不仅为他们提供了一个现成的解决方案,而且能够作为灵感启发,鼓励他们在此基础上进行进一步的探索和创新。即插即用的特性使得这种改......
  • 打败GPT-4的最强开源中文大模型GLM-4终于亮相了(附:超详细搭建过程)
    GLM-4是由智谱AI推出的新一代基座预处理大模型,具有与GPT-4相近的性能,尤其在中文能力上可以比肩GPT-4。它在多个方面进行了优化和提升,包括支持更长的上下文长度、更快的推理速度、降低推理成本,以及增强了智能体能力。GLM-4能够处理128k的上下文窗口长度,单次提示词可以处理的文......
  • 粒子群优化BP神经网络分类模型进行人类活动分类
    1设计方案1.1数据采集与处理首先,采集沙特国王大学利雅得校区收集不同用户在不同活动状态下的IMU传感器数据集。然后,对数据进行预处理,包括去噪、滤波和特征提取等步骤,以提取出对活动识别有用的特征。1.2BP神经网络结构设计  根据IMU传感器数据的特性和活动识别的需求,设......
  • 初入职场的程序员如何选择AI大模型产品:全面分析
    作为初入职场的程序员,面对层出不穷的AI大模型产品,选择适合自己的工具至关重要。这不仅关系到工作效率的提升,也影响到职业发展的方向。本文将从几个关键方面,详细分析初入职场的程序员该如何选择AI大模型产品,帮助你做出明智的决策。1.了解自己的需求1.1工作内容需求首先,......
  • 全能大模型AIGC产品的使用体验、选择倾向与未来展望
    随着人工智能技术的迅猛发展,AIGC(人工智能生成内容)领域正迎来前所未有的繁荣。其中,全能大模型产品以其强大的生成能力和广泛的应用场景,吸引了众多用户的关注。腾讯元宝APP的上线更是为这一领域注入了新的活力。本文将从个人使用体验出发,分享对全能大模型AIGC产品的看法并探讨其......