【生成模型】简述概率密度函数可处理流模型

论文笔记(四) 【NICE: Non-liner Independent Components Estimation】glow系列 论文地址:NICE模型     现在打算紧跟生成模型的步伐,看一下最近火起来的流模型,根据Paper_weekly的文章找到了glow模型最原始的论文,NICE模型。本文主要是该篇论文的笔记。 一、论文概述  摘要部分: 1、NICE全称为Non-linear Independent Component Estimation ,可以翻译为非线性独立分量估计。 2、在本文中,我们需要学得一... 阅读详情

本期将介绍第二种非常优雅的生成模型—流模型,它也是一种概率密度函数可处理的生成模型。本文将对其原理进行介绍,并对nice模型的源码进行讲解。

                                          作者&编辑 | 小米粥

1 流模型

这是一种想法比较直接但实际不容易构造的生成模型,它通过可逆的非线性变换等技巧使得似然函数可以被精确计算出来。对于分布比较简单(例如高斯分布)的隐变量z,其概率分布为 pz(z) ,这时若存在一个连续、可微、可逆的非线性变换g(z),将简单的潜变量z的分布转换成关于样本x的一个复杂分布,将非线性变换g(z)的逆变换记为f(x),则可得到样本x的准确的概率密度函数 px(x)

注意,非线性变换g(z)会引起空间的变形,即px(x)不等于 pz(f(x)),且有pz(z)dz=px(x)dx。若上述模型构建成功,则生成样本时只需从简单分布pz(z)中随机采样然后将其变换为 x=g(z) 即可。

为了训练非线性独立成分估计模型,我们必须计算样本的概率密度函数px(x)。分析上式,概率密度函数px(x)的计算需要计算pz(z)和雅可比矩阵的行列式绝对值。对于前者,要构建一个 g(z) 的逆变换f(x),这样当给定一个样本 x 后,就可以通过z=f(x)计算得到其对应的隐变量,pz(z)通常设计为简单的分布,容易计算;对于后者,要将f(x)设计为某种特殊的形式,使得雅可比矩阵的行列式易于计算。另外,变换的可逆性要求样本x和隐变量z具有相同的维度。综上,需要将生成模型精心设计成一种易于处理且灵活的双射模型,使其逆变换f(x)存在,且对应的雅可比矩阵的行列式可计算。

为了对这类模型有更深刻的理解,我们对NICE模型进行详细的介绍。NICE模型的逆变换f(x)由多个加性耦合层和一个尺度变换层构成。在每个加性耦合层中,首先将 n 维样本 x 分解为两部分x1和x2,例如将x的第1,3,5...个元素划入x1部分,将第2,4,6...个元素划入x2部分,每个部分的维度均为n/2;也可以将 x 的第2,4,6...个元素划入x1部分,将第1,3,5...个元素划入 x2 部分;或者使用其他划分方式。然后对两部分其进行变换:

其中m()为任意函数,注意这里要保证m()的输出结果维度与 x2 保持一致,NICE模型使用多层全连接网络和ReLU激活函数来构建 m() 。容易发现,使用加性耦合层作为逆变换f(x)的其中一部分,它是可逆的并且雅可比矩阵的行列式也是容易计算的。当已知h1和h2时,可得其逆变换:

其雅可比矩阵为:

根据三角矩阵的性质,其行列式为对角元素的乘积,故加性耦合层雅可比矩阵的行列式绝对值为1。当将多个加性耦合层串联时,如下图所示。由于每个层的逆变换是容易计算的,则串联后的逆变换仍然是容易计算的。此时的雅可比矩阵为:

根据矩阵行列式的性质,有:

需要说明的是,必须注意在不同的加性耦合层使用不同的划分策略,使得样本不同维度的信息充分混淆。在尺度变换层,定义了包含n个非负参数的向量s=[s1,s2,...,sn],将加性耦合层的输出结果h(l)与s逐元素相乘可得到对应的隐变量z。这里s用于控制每个维度的特征变换的尺度,可以表征维度的重要性,对应维度的数值较大表明这一维度的重要性低,因为生成样本时隐变量需要先经过尺度变换层,隐变量在尺度变换层需要逐元素乘1/s。显然,尺度变换层的逆变换只需逐元素乘1/s,为了计算雅可比矩阵,将尺度变换写为对角矩阵的形式:

则其雅可比矩阵的行列式为s1s2...sn。现在,我们构造了可逆的、雅可比矩阵的行列式绝对值易于计算的逆变换f(x),对于隐变量z,NICE模型假设其n个维度彼此独立,即

若选择z为高斯分布,则样本x的似然函数为:

若选择z为logistic分布,即

则样本x的似然函数为

现在,我们可以使用极大似然法对NICE模型进行训练,训练完成后也得到了生成模型g(z)。若  z 为高斯分布,则直接从高斯分布中采样可得到z;若选择  为logistic分布,可现在0-1之间的均匀分布中采样得到\epsilon ,然后使用变换z=t(ε)得到隐变量。根据两个随机变量的映射关系

则有

将隐变量z使用非线性变换g(z),即经过尺度变换层的逆变换、多个加性耦合层的逆变换可得到生成样本x。

2 NICE 代码

接下来我们将提供一份完整的NICE的代码讲解,其中训练集为mnist数据集。

首先读取相关python库:

import argparse 

import torch 

import torchvision 

import numpy as np 

import niceimport utils

定义主函数,设置相关参数,并进行模型的训练和验证

定义二维掩膜卷积核,其中有A与B两种类型,区别之处在于中心位置是否被卷积计算:

def main(args):

    device = torch.device("cuda:0") 

    # 训练相关参数设置

    dataset = args.dataset

    batch_size = args.batch_size

    latent = args.latent

    max_iter = args.max_iter

    sample_size = args.sample_size

    coupling = 4    mask_config = 1.

    # 优化器设置

    lr = args.lr

    momentum = args.momentum

    decay = args.decay

    zca = None

    mean = None

    # 选择相应的训练数据集

    if dataset == 'mnist':

        mean = torch.load('./statistics/mnist_mean.pt')        (full_dim, mid_dim, hidden) = (1 * 28 * 28, 1000, 5)        transform = torchvision.transforms.ToTensor()        trainset = torchvision.datasets.MNIST(root='~/torch/data/MNIST',            train=True, download=True, transform=transform)        trainloader = torch.utils.data.DataLoader(trainset,            batch_size=batch_size, shuffle=True, num_workers=2)         

  # 使用正态分布或逻辑回归分布

   if latent == 'normal':

        prior = torch.distributions.Normal(

            torch.tensor(0.).to(device), torch.tensor(1.).to(device))

    elif latent == 'logistic':

        prior = utils.StandardLogistic()

    filename = '%s_' % dataset \

             + 'bs%d_' % batch_size \

             + '%s_' % latent \

             + 'cp%d_' % coupling \

             + 'md%d_' % mid_dim \

             + 'hd%d_' % hidden

    # 实例化流模型

    flow = nice.NICE(prior=prior,

                coupling=coupling,

                in_out_dim=full_dim,

                mid_dim=mid_dim,

                hidden=hidden,

                mask_config=mask_config).to(device)

    optimizer = torch.optim.Adam(

        flow.parameters(), lr=lr, betas=(momentum, decay), eps=1e-4)

    total_iter = 0

    train = True

    running_loss = 0

    # 训练模型

    while train:

        for _, data in enumerate(trainloader, 1):

            flow.train()

    # set to training mode

            if total_iter == max_iter:

                train = False

                break

            total_iter += 1

            optimizer.zero_grad()

    # clear gradient tensors

            inputs, _ = data

            inputs = utils.prepare_data(

                inputs, dataset, zca=zca,

 mean=mean).to(device)

            # log-likelihood of input minibatch

            loss = -flow(inputs).mean()

            running_loss += float(loss)

            # backprop and update parameters

            loss.backward()

            optimizer.step()

            if total_iter % 10 == 0:

                mean_loss = running_loss / 2000

                bit_per_dim = (mean_loss + np.log(256.) * full_dim) \

                            / (full_dim * np.log(2.)) 

                print('iter %s:' % total_iter,

                    'loss = %.3f' % mean_loss,

                    'bits/dim = %.3f' % bit_per_dim)

                running_loss = 0.0

            if total_iter % 1000 == 0:

                flow.eval()

        # set to inference mode

                with torch.no_grad():

                    samples = flow.sample(sample_size).cpu()

                    samples = utils.prepare_data(                        samples, dataset, zca=zca, mean=mean, reverse=True)

                torchvision.utils.save_image(torchvision.utils.make_grid(samples),

'./samples/' + filename +'iter%d.png' % total_iter)

    # 保存模型

    torch.save({

        'total_iter': total_iter,

        'model_state_dict': flow.state_dict(),

        'optimizer_state_dict': optimizer.state_dict(),

        'dataset': dataset,

        'batch_size': batch_size,

        'latent': latent,

        'coupling': coupling,

        'mid_dim': mid_dim,

        'hidden': hidden,

        'mask_config': mask_config},

        './models/mnist/' + filename +'iter%d.tar' % total_iter)

    print('Checkpoint Saved')

 if __name__ == '__main__':

    parser = argparse.ArgumentParser('MNIST NICE PyTorch implementation')

    parser.add_argument('--dataset',

                        help='dataset to be modeled.',

                        type=str,

                        default='mnist')    parser.add_argument('--batch_size', 

                        help='number of images in a mini-batch.',

                        type=int,

                        default=256)

    parser.add_argument('--latent',

                        help='latent distribution.',

                        type=str,

                        default='logistic')

    parser.add_argument('--max_iter',

                        help='maximum number of iterations.',

                        type=int,

                        default=20000)

    parser.add_argument('--sample_size',

                        help='number of images to generate.',

                        type=int,

                        default=64)

    parser.add_argument('--lr',

                        help='initial learning rate.',

                        type=float,

                        default=1e-3)

    parser.add_argument('--momentum', 

                        help='beta1 in Adam optimizer.',

                        type=float,

                        default=0.9)

    parser.add_argument('--decay',

                        help='beta2 in Adam optimizer.',

                        type=float,

                        default=0.999)

    args = parser.parse_args()

    main(args)

NICE流模型的核心代码:

# 加性耦合层class Coupling(nn.Module):

    def __init__(self, in_out_dim, mid_dim, hidden, mask_config):

        super(Coupling, self).__init__()

        self.mask_config = mask_config

        self.in_block = nn.Sequential(

            nn.Linear(in_out_dim//2, mid_dim),

            nn.ReLU())

        self.mid_block = nn.ModuleList([

            nn.Sequential(

                nn.Linear(mid_dim, mid_dim),

                nn.ReLU()) for _ in range(hidden - 1)])

        self.out_block = nn.Linear(mid_dim, in_out_dim//2)

    def forward(self, x, reverse=False):

        [B, W] = list(x.size())

        x = x.reshape((B, W//2, 2))

        if self.mask_config:

            on, off = x[:, :, 0], x[:, :, 1]

        else:

            off, on = x[:, :, 0], x[:, :, 1]

        off_ = self.in_block(off)

        for i in range(len(self.mid_block)):

            off_ = self.mid_block[i](off_)

        shift = self.out_block(off_)

        if reverse:

            on = on - shift

        else:

            on = on + shift

        if self.mask_config:

            x = torch.stack((on, off), dim=2)

        else:

            x = torch.stack((off, on), dim=2)

        return x.reshape((B, W))

 # 尺度变换层

 class Scaling(nn.Module):

    def __init__(self, dim):

        super(Scaling, self).__init__()

        self.scale = nn.Parameter(

            torch.zeros((1, dim)), requires_grad=True)

    def forward(self, x, reverse=False):

        log_det_J = torch.sum(self.scale)

        if reverse:

            x = x * torch.exp(-self.scale)

        else:

            x = x * torch.exp(self.scale)

        return x, log_det_J

 # NICE模型

 class NICE(nn.Module):

    def __init__(self, prior, coupling,

        in_out_dim, mid_dim, hidden, mask_config):

        self.prior = prior

        self.in_out_dim = in_out_dim

        self.coupling = nn.ModuleList([

            Coupling(in_out_dim=in_out_dim,

                     mid_dim=mid_dim,

                     hidden=hidden,

                     mask_config=(mask_config+i)%2) \            for i in range(coupling)])

        self.scaling = Scaling(in_out_dim)

    def g(self, z):

        x, _ = self.scaling(z, reverse=True)

        for i in reversed(range(len(self.coupling))):

            x = self.coupling[i](x, reverse=True)

        return x

    def f(self, x):

        for i in range(len(self.coupling)):

            x = self.coupling[i](x)

        return self.scaling(x)

    def log_prob(self, x):

        z, log_det_J = self.f(x)

        log_ll = torch.sum(self.prior.log_prob(z), dim=1)

        return log_ll + log_det_J

    def sample(self, size):

        z = self.prior.sample((size, self.in_out_dim)).cuda()        return self.g(z)

    def forward(self, x):

        return self.log_prob(x)

[1] Dinh L , Krueger D , Bengio Y . NICE: Non-linear Independent Components Estimation[J]. Computer ence, 2014.

[2]Diederik P. Kingma*†, Prafulla Dhariwal⇤. Glow: Generative Flow with Invertible 1x1 Convolutions[J]. 2018.

总结

本期带大家学习了流模型,流模型的生成效果也非常卓越,但是其网络设计比较复杂,训练难度比较大。下一期将为大家继续讲解其他生成模型。

个人知乎,欢迎关注

GAN群

有三AI建立了一个GAN群,便于有志者相互交流。感兴趣的同学也可以微信搜索xiaozhouguo94,备注“加入有三-GAN群”。

更多GAN的学习

知识星球是有三AI的付费内容社区,里面包超过100种经典GAN模型的解读,了解详细请阅读以下文章:

【杂谈】有三AI知识星球指导手册出炉!和公众号相比又有哪些内容?

有三AI秋季划GAN学习小组,可长期跟随有三学习GAN相关的内容,并获得及时指导,了解详细请阅读以下文章:

【杂谈】如何让2020年秋招CV项目能力更加硬核,可深入学习有三秋季划4大领域32个方向

转载文章请后台联系

侵权必究

往期精选

从‘抛硬币’到‘预测股价’:离散与连续概率模型在数据分析/机器学习中的实战区别 本文深入探讨了离散与连续概率模型在数据分析和机器学习中的实战区别,从抛硬币到预测股价等实际业务场景出发,详细解析了概率密度函数与分布函数的应用。通过对比离散型和连续型模型的特点、适用场景及常见误区,帮助读者掌握正确的模型选择方法,提升数据分析的准确性和可靠性。 阅读详情

相关推荐

乘性散斑噪声的Matlab仿真:从物理原理到工程实践

在相干成像系统(如合成孔径雷达SAR、医学超声)中,散斑噪声是一种普遍存在的干扰现象。其本质源于相干波在粗糙表面散射后产生的随机干涉,形成颗粒状纹理。与常见的加性噪声不同,散斑噪声具有乘性特性,即噪声强度与本地信号强度成正比,这导致其统计特性随空间位置变化,显著增加了后续图像处理(如去噪、分割)的难度。理解其Gamma分布模型和等效视数(ENL)等关键参数,对于评估算法鲁棒性和构建可靠的测试数据集至关重要。通过Matlab进行精确的乘性散斑噪声仿真,能够为SAR图像处理、目标检测等高级任务提供可控的测试环境

chuannaoxuan4674的博客 446

细水长flow之NICE:流模型的基本概念与实现

这是我很膜拜的一个大神写的,源链接: https://kexue.fm/archives/5776   By 苏剑林 | 2018-08-11 | 2638位读者 |   前言:自从在机器之心上看到了glow模型之后(请看《下一个GAN?OpenAI提出可逆生成模型Glow》),我就一直对其念念不忘。现在机器学习模型层出不穷,我也经常关注一些新模型动态,但很少像glow模型那样让我怦然心动...

weixin_41036461的博客 6102

统计学基础学习笔记:概率与概率分布

文章目录一、随机变量1、概念2、分类二、概率与概率分布(一)离散型随机变量 一、随机变量 1、概念 随机变量(Random Variable)是一个不确定性事件结果的数值函数(Function)。也就是说,把不确定性事件的结果用数值来表示,即可得到随机变量。 通常随机变量用大写字母来表示,如XXX,其具体观测值(或实现值)用小写字母表示,如xxx。 2、分类 离散型随机变量(Discrete Random Variable)- 有限或无限可数的孤立点 连续型随机变量(Continuous Random

howard2005的专栏 1370

各种生成模型:VAE、GAN、flow、DDPM、autoregressive models

各种生成模型:VAE、GAN、flow、DDPM、autoregressive models

zephyr_wang的博客 3万+

Python自动化批量识别化学分子结构——从图片到SMILES/SDF的实战指南

本文提供了使用Python自动化批量识别化学分子结构图片的实战指南。详细对比了基于Molvec API的在线快速方案与本地部署OSRA工具的两种路径,包含完整的代码示例、环境配置及优化技巧,帮助化学研究者高效地将图片批量转换为SMILES或SDF格式,显著提升数据处理效率。

apple5的专栏 947

OpenCV透视变换实战:5分钟搞定歪斜证件照矫正(附完整代码)

本文详细介绍了如何使用OpenCV的透视变换技术快速矫正歪斜证件照,包含完整的Python代码实现。通过特征检测、坐标计算和矩阵变换三个核心步骤,5分钟内即可将手机拍摄的歪斜图像自动矫正为专业级证件照,大幅提升图像处理效率。

weixin_29094979的博客 483

Flow-based models(NICE);流模型+NICE+代码实现

此时还存在一个问题,那就是输入的图片大多都是稀疏的,也就是说某些维度空间可能并不重要。,那么此时对应的x’也会有一个变化区间,由于这个区间过于小,所以可以近似当做是一个矩形。Flow-Based模型想要构造出一个可逆的模型,也就是说可以把图片正向输入得到一个向量,把这个向量反向输入就可以得到图片。换句话说,Flow-Based模型是一个由输入的空间到输出的空间的双射。也就是说,我们首先对第一部分进行了直接复制,第二部分的输出则是由第二部分加上一个第一部分的非线性变换组成的。同理,后面每一层的det都是1。

qq_36102055的博客 1388

OTN传送网实战指南:从光层到电层的完整架构解析(附配置示例)

本文深入解析OTN传送网从光层到电层的完整架构,涵盖关键组件、技术实现及配置示例。通过高速公路与光传送网的类比,详细介绍了光层超宽传输管道构建、电层业务调度核心引擎以及控制平面智能运维实战。附有典型组网方案与故障排查指南,助力网络工程师高效部署与维护OTN传送网。

tomato的博客 684

流模型(flow)--《NICE: Non-linear Independent Components Estimation》

本文根据2015年《NICE: Non-linear Independent Components Estimation》翻译总结的。流模型的最初论文。流模型(flow)也是一种生成模型。

zephyr_wang的博客 3006

PX4实战指南:通过遥控器通道映射实现多舵机PWM精准控制

本文详细介绍了通过PX4飞控的AUX PWM接口实现遥控器通道映射控制多舵机的实战指南。内容包括硬件选型与连接、软件参数配置、通道映射方法以及常见问题排查,帮助开发者精准实现无人机舵机PWM控制,适用于云台、机械臂等扩展功能开发。

ee345的博客 304

前言:关于作者吴秋生博士与此书简介

博士现为田纳西大学,诺克斯维尔分校,地理系的副教授。他的研究兴趣包括地理信息科学(GIS)、遥感和环境建模。更具体地说,对应用地理空间大数据、机器学习和云计算(例如,谷歌地球引擎、微软行星计算机)来研究环境变化,特别是地表水和湿地淹没动态。吴博士是开放科学和可重复研究的倡导者。他开发了几个用于高级地理空间分析的开源软件包(例如,吴博士还在YouTube上发布了数百个有关GIS和地图绘制的视频。更多有关他的开源项目信息,请访问GitHub(查看他的YouTube频道。.....................

韩天放 6091

【总结】超100期经典GAN模型的解读,从结构设计到应用,你不动心吗?

GAN无疑是这几年深度学习领域里最酷的技术,不管是理论的研究,还是GAN在图像生成,图像翻译,语音图像等基础领域的应用,都非常的丰富。我们公众号输出过非常多的GAN相关资源,本次做一个简单...

hacker_long的专栏 1959

OpenClaw 自定义 Skill 开发完整指南(最新版)

OpenClaw 中的每个 Skill,本质是一套“能力描述 + 执行逻辑”的组合包,核心特征如下:核心载体:以文件夹为单位,文件夹内必须包含SKILL.md文件(能力描述核心);扩展文件:可选agent.py(Python 执行逻辑)、index.ts(TypeScript 执行逻辑)、(辅助文档/示例资源)等;核心优势:AI 通过阅读 SKILL.md 的自然语言描述理解技能,无需严格遵循代码接口,灵活度极高;

haolove527的专栏 2万+

【总结】有三AI所有GAN相关学习资料汇总,有图文、视频、代码实战等......

GAN无疑是这几年深度学习领域里最酷的技术,不管是理论的研究,还是GAN在图像生成,图像翻译,语音图像等基础领域的应用,都非常的丰富。我们公众号输出过非常多的GAN相关资源,本次做一个简单...

hacker_long的专栏 739

STM32F407+OV2640的DCMI+DMA双缓冲JPEG图像采集系统

在嵌入式视觉系统中,数字摄像头接口(DCMI)是MCU连接CMOS图像传感器的关键硬件通道,其与DMA协同实现零CPU干预的高速数据流采集;而JPEG作为一种基于DCT变换与量化压缩的有损图像格式,依赖传感器端硬件编码引擎才能满足实时性要求。理解DCMI三重同步时序(PCLK/HSYNC/VSYNC)与DMA双缓冲机制的流水线协作原理,是突破带宽瓶颈、避免FIFO溢出和帧丢失的技术基础。该架构广泛应用于智能硬件、工业检测与边缘AI前端等需低功耗、高可靠图像捕获的场景,本文以OV2640与STM32F407为

weixin_42103128的博客 158

Could not find a package configuration file provided by “boost_signals“

gmapping/slam_gmapping/gmapping/CMakeLists.txt:14 (find_package)问题在14行,注释该行。,该语句的用以为告诉项目Boost库文件所在。

weixin_72050316的博客 1028

【总结】从视频到图文,代码实战,有三AI-GAN学习资料汇总!

GAN无疑是这几年深度学习领域里最酷的技术,不管是理论的研究,还是GAN在图像生成,图像翻译,语音图像等基础领域的应用,都非常的丰富。我们公众号输出过非常多的GAN相关资源,本次做一个简单...

hacker_long的专栏 934

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【通知】《生成对抗网络GAN原理与实践》代码开源,勘误汇总!

有三上个月出版了新书《生成对抗网络GAN:原理与实践》,Generative Adversarial Networks(中文名生成对抗网络,简称GAN)自从被提出来后,其发展就非常迅猛,几乎已经被应用于所有CNN可以使用的领域,应用涉及图像与视频生成,数据仿真与增强,各种各样的图像风格化任务,人脸与人体图像编辑,图像质量提升。学好GAN算法,对于计算机视觉领域从业,完全是有必要的。我们公众号输出过...

hacker_long的专栏 1223

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【总结】有三AI所有原创GAN相关的学习资料汇总(2022年12月)

GAN的研究和应用在这几年发展可以说是非常迅猛,无疑是这几年深度学习计算机视觉领域里落地性最酷的技术之一,包括图像与视频生成,数据仿真与增强,各种各样的图像风格化任务,人脸与人体图像编辑,图像质量提升等。GAN最早期也是最经典的任务,就是高质量图像生成,当前已经可以生成1024分辨率以上的高清逼真图像,如下图生成了一些假明星脸。图像翻译与风格化则是另外一个应用极其广泛的领域,因为从图像到图像的任务...

hacker_long的专栏 1040

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

从小球颜色识别到自动驾驶:高斯分布在计算机视觉中的神奇应用

本文探讨了高斯分布在计算机视觉中的广泛应用,从基础的颜色识别到复杂的自动驾驶系统。通过极大似然估计等统计方法,高斯分布有效处理了视觉数据的不确定性,并详细介绍了在传感器融合、目标跟踪等场景中的工程实践与优化技巧。

potato的博客 528

自适应深度物理信息神经网络在PDE求解中的应用

物理信息神经网络(PINN)是近年来科学计算领域的重要突破,通过将物理定律编码为神经网络损失函数,实现了无网格的偏微分方程求解。其核心原理是将微分算子转换为可微计算图,利用自动微分技术计算物理约束。相比传统有限元方法,PINN在复杂几何和多物理场耦合问题中展现出显著优势,特别是在处理参数化设计和实时仿真场景时。自适应深度物理信息神经网络(AD-PINN)通过创新的双重嵌套激活函数和动态采样策略,进一步提升了求解精度和效率。该技术已成功应用于计算流体力学、热传导分析等工程领域,为解决高维PDE问题提供了新思路

weixin_32285357的博客 245

地球Online逃生指南(上卷)

本书是一部系统探讨人类意识困境的哲学著作。全书通过七卷本的结构,依次解构人类认知牢笼、自我本质、世界实相、痛苦根源,最终指向自由、慈悲与终极实相。第一卷揭示大脑建构的认知幻象;第二卷剖析"自我"的神经机制;第三卷以系统论阐释世界空性;第四卷建立痛苦的数学模型;第五卷提出觉知训练体系;第六卷论证利他主义的科学基础;第七卷超越逻辑束缚直指存在本质。著作融合现代神经科学、量子物理、复杂性理论与东方哲学,构建了一个从认识到解脱的完整认知框架,最终指向无条件的临在与宇宙层面的觉知。

weixin_45747731的博客 858

生成式AI

为了增强图片生成效果,采用一种加噪(前向过程)+降噪(反向过程)的方法,对样本图片进行加噪处理,并使其噪声逐渐满足高斯分布,再学习降噪方法,将样本图片还原,这样让模型掌握利用一定的随机噪音来完成高质量图片生成能力;模型需要学习到的实际上是能力;此处的应当是一个分布而不是一个具体的样本,由推得的一系列分布,可以使模型的生成效果更加多元化。

weixin_53196770的博客 564

flow的理论背景

生成模型 生成模型的本质是希望能够拟合一个概率分布,深度神经网络可以拟合任何的函数,但是不能拟合任何的概率分布,因为概率分布有非负性和归一性的本质。这样,直接能写的分布只有离散分布和连续的高斯分布。 从严格意义讲,图像是由有限个像素组成的,每个像素的取值也是离散的,有限的,因此可以通过离散分布来描述图像的分布,pixel RNN就是基于这个思路做的,“自回归流”的思路。缺点是无法并行,计算量很大...

林宋的搬砖流水账 1897

PyTorch获取模型参数和warm-up

文章目录PyTorch 获取模型参数 PyTorch 获取模型参数 计算模型所有参数量: total_params = sum(p.numel() for p in model.parameters()) print(f'{total_params:,} total parameters.') 计算trainable参数量: total_trainable_params = sum(p.numel() for p in model.parameters() if p.requires_grad) prin

lavinia_chen007的博客 3358

概率论基础 —— 3.离散型、连续型概率模型,及其概率密度与概率分布函数

在前面的文章里,已经带大伙了解了概率论的概率事件类型,以及针对某些事件的发生概率,以及针对全部场景的某事件的发生概率等基本知识。不过对于统计学专业来说,或者实际应用来说,接触最多的还是离散型和连续型概率,以及分析其概率密度与分布函数。所以说这里的内容可以算是概率论真正的支撑核心和基石。 无论你做数据分析,还是说人工智能方向,这是你应该打好的基础中的基础。 文章目录离散型及连续型概率模型的基本定义什么是概率模型的概率密度与概率分布函数积分换元法与概率中的换元计算一些相关例题1. 离散型随机变量、分布函数2.

老程的技术笔记 1万+
上一篇: 【直播回放】60分钟讲解深度学习中的数据爬虫和标注
下一篇: 【直播回放】60分钟了解各类图像和视频生成GAN结构
言有三
言有三 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄15年 3635粉丝 976原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言有三

三人行必有AI

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值