基于流的(Flow-based)生成模型简介

基于流的(Flow-based)生成模型简介

生成任务

我们先回顾一下所谓的生成任务,究竟是做什么事情。我们认为,世界上所有的图片,是符合某种分布 pdata(x)p_{data}(x)pdata(x) 的。当然,这个分布肯定是个极其复杂的分布。而我们有一堆图片 x1,x2,…,xm{x_1,x_2,\dots,x_m}x1,x2,,xm ,则可以认为是从这个分布中采样出来的 mmm 个样本。我们通过训练希望得到一个生成器网络 GGG ,该网络定义了一个分布 pG(x)p_G(x)pG(x),能够做到输入一个从正态分布 π(z)\pi(z)π(z) 中采样出来的 zzz ,输出一张看起来像真实世界的图片 x=G(z)x=G(z)x=G(z) 。我们希望 pG(x)p_G(x)pG(x) 与真实的数据分布 pdata(x)p_{data}(x)pdata(x) 越接近越好。

从概率模型的角度来看,想要做到上面说的这件事情,就要通过最大化对数似然,来优化生成器 GGG 的参数:
G∗=arg⁡max⁡G∑i=1mlog⁡pG(xi)G^*=\arg\max_{G}\sum_{i=1}^m\log p_G(x_i) G=argGmaxi=1mlogpG(xi)
可以证明,最大化这个对数似然,就相当于最小化生成器分布 pG(x)p_G(x)pG(x) 与目标分布 pdata(x)p_{data}(x)pdata(x) 的 KL散度,即让这两个分布尽量接近:
G∗≈arg⁡min⁡GKL(pdata∣∣pG)G^*\approx\arg\min_GKL(p_{data}||p_G) GargGminKL(pdata∣∣pG)

在这里插入图片描述

另一种著名的生成模型 VAE 也是一种概率模型,它优化的是这个对数似然的证据下界(ELBO)。而本文要介绍的流模型,可以直接优化这个对数似然本身。当然为了能够直接对目标进行优化,流模型的生成器 GGG 本身会有一些数学上的限制。

数学基础

为了搞懂流模型,我们需要回顾一些数学基础,主要包括:雅可比矩阵(Jacobian Matrix)、行列式(deteminant)、变量变换定理(Change of Variable Theorem)。

雅可比矩阵

定义

假设某函数 f:Rn→Rm\mathbf{f}:\mathbb{R}^n\rightarrow\mathbb{R}^mf:RnRm, 从 x∈Rn\mathbf{x}\in\mathbb{R}^nxRn 映射到向量 f(x)∈Rm\mathbf{f}(\mathbf{x})\in\mathbb{R}^mf(x)Rm, 其雅可比矩阵是一个 m×nm\times nm×n 的矩阵,换句话讲也就是从 Rn\mathbb{R}^nRnRm\mathbb{R}^mRm 的线性映射。其重要意义在于它表现了一个多变量向量函数的最佳线性逼近。因此,雅可比矩阵类似于单变量函数的导数。

此函数 f\mathbf{f}f 的雅可比矩阵 J\mathbf{J}Jm×nm\times nm×n 的矩阵,一般由以下方式定义:
J=[∂f∂x1,∂f∂x2,…,∂f∂xn]=[∂f1∂x1⋯∂f1∂xn∂f2∂x1⋯∂f2∂xn⋮⋱⋮∂fm∂x1⋯∂fm∂xn]m×n\mathbf{J}=[\frac{\partial\mathbf{f}}{\partial x_1},\frac{\partial\mathbf{f}}{\partial x_2},\dots,\frac{\partial\mathbf{f}}{\partial x_n}]= \begin{bmatrix} {\frac{\partial f_1}{\partial x_1}}&{\cdots}&{\frac{\partial f_1}{\partial x_n}}\\{\frac{\partial f_2}{\partial x_1}}&{\cdots}&{\frac{\partial f_2}{\partial x_n}}\\{\vdots}&{\ddots}&{\vdots}\\{\frac{\partial f_m}{\partial x_1}}&{\cdots}&{\frac{\partial f_m}{\partial x_n}}\\ \end{bmatrix}_{m\times n} J=[x1f,x2f,,xnf]=x1f1x1f2x1fmxnf1xnf2xnfmm×n
通俗来讲,就是某个 mmm 维输入,nnn 维输出的函数,把它的各个输出变量对各个输入变量的偏微分求出来,然后按照上面的定义排好,就组成了雅可比矩阵。这里我们暂时只关心输入输出同维度的情况,即 m=nm=nm=n

性质

如果有 x=f(z)x=f(z)x=f(z) ,其雅可比矩阵记为 JfJ_fJf ,其反函数 z=f−1(x)z=f^{-1}(x)z=f1(x) ,其雅可比矩阵记为 Jf−1J_{f^{-1}}Jf1 ,则有:JfJf−1=IJ_fJ_{f^{-1}}=IJfJf1=I 。即如果两个函数互为反函数,则他们的雅可比矩阵互逆。

行列式

行列式(deteminant)是线性代数中的一个基本概念,矩阵 AAA 的行列式记作 ∣A∣|A|Adet(A)det(A)det(A)。相信大家都还有印象,即使不记得复杂的行列式计算公式,也应该知道他就是对一个矩阵进行一顿计算,得到一个标量值。

性质

这里回顾几个行列式的常用性质,后面在介绍流模型时也会用到:

  • 矩阵 AAA 中某行(或列)用同一数 kkk 乘,其行列式值也乘 kkk
  • 某个矩阵的行列式等于其转置的行列式, ∣A∣=∣AT∣|A|=|A^T|A=AT

物理意义

这里还要着重强调的一点是:行列式可以看做是有向面积或体积的概念在一般的欧几里得空间中的推广。或者说,在 nnn 维欧几里得空间中,行列式描述的是一个线性变换对“体积”所造成的影响。

行列式的物理意义就是高维空间中的体积

变量变换定理

变量变换定理是一个有效描述长度、面积、体积和广义n维体积(内容)如何被可微函数所扭曲的定理。特别是,变量变换定理将弄清内容扭曲的整个问题简化为理解无穷小的扭曲,即由线性映射的行列式所给出的导数(一个线性映射)的扭曲。

如果我们有 π(z)\pi(z)π(z)p(x)p(x)p(x) ,并且知道二者之间的关系 x=f(z)x=f(z)x=f(z) ,那么能不能写出 π(z)\pi(z)π(z)p(x)p(x)p(x) 之间的关系?是可以的!

在这里插入图片描述

均匀分布

先举个简单的例子:考虑一个最简单的均匀分布:π(z)\pi(z)π(z) ,它的取值范围是 [0,1][0,1][0,1] 。而它作为一个分布,有 ∫π(z)dz=1\int\pi(z)dz=1π(z)dz=1 ,那么自然地, π(z)=1\pi(z)=1π(z)=1 ,即图中蓝色方块的高为1。我们通过变换函数为 x=f(z)=2z+1x=f(z)=2z+1x=f(z)=2z+1 得到 p(x)p(x)p(x)p(x)p(x)p(x) 同样是均匀分布,通过 ∫p(x)dx=1\int p(x)dx=1p(x)dx=1 ,得到 p(x)=12p(x)=\frac{1}{2}p(x)=21 ,即图中绿色方块的高为 12\frac{1}{2}21 。这样,我们就得到了两个均匀分布之间的关系:p(x′)=12π(z′)p(x')=\frac{1}{2}\pi(z')p(x)=21π(z)

在这里插入图片描述

一般情况

接下来我们来看一般情况。我们想要考察两个一般的分布 π(z)\pi(z)π(z)p(x)p(x)p(x) 在经过变化 x=f(z)x=f(z)x=f(z) 变化前后的关系。我们可以将 zzz 移动 一个很小的距离 Δz\Delta zΔz ,对应的, xxx 也移动了一个很小的距离 Δx\Delta xΔx ,这时可以认为在 Δz\Delta zΔzΔx\Delta xΔx 范围内都是一个均匀分布。蓝色、绿色两个方块的面积是一样的,可以按照我们上面均匀分布的方式来计算,得到:
p(x′)=π(z′)∣dzdx∣p(x')=\pi(z')|\frac{dz}{dx}| p(x)=π(z)dxdz
即变换前后的分布差了一个微分,而这个微分在我们知道 fff 的情况下是可以算出来的。这里要加绝对值是因为 z=f(x)z=f(x)z=f(x) 的变换可能是相反方向的,但这不影响我们的计算方式。

在这里插入图片描述

高维的情况

上面介绍的都是一维的情况,那么在高维的情况下是怎样的呢?

以二维的情况为例。我们还是对 zzz 在两个维度 z1,z2z_1,z_2z1,z2 上增加一个很小的距离 Δz1,Δz2\Delta z_1,\Delta z_2Δz1,Δz2 ,而对应的 x1x_1x1x2x_2x2Δxij\Delta x_{ij}Δxij 表示 ziz_izi 改变时,xjx_jxj 的改变量。与之前类似的,图中蓝色、绿色四边形所对应的体积(注意这里三维的概率密度函数没有画出来,它也是均匀的)是相同的。有:
p(x′)∣det([Δx11Δx21Δx12Δx22])∣=π(z′)Δz1Δz2p(x')| det( \begin{bmatrix} {\Delta x_{11}}&{\Delta x_{21}}\\ {\Delta x_{12}}&{\Delta x_{22}}\\ \end{bmatrix}) | =\pi(z')\Delta z_1\Delta z_2 p(x)det([Δx11Δx12Δx21Δx22])=π(z)Δz1Δz2

在这里插入图片描述

然后就是对这个式子进行一系列变形:
p(x′)∣det([Δx11Δx21Δx12Δx22])∣=π(z′)Δz1Δz2p(x′)∣1Δz1Δz2det([Δx11Δx21Δx12Δx22])∣=π(z′)p(x′)∣det([Δx11/Δz1Δx21/Δz1Δx12/Δz2Δx22/Δz2])∣=π(z′)p(x′)∣det([Δx11/Δz1Δx21/Δz1Δx12/Δz2Δx22/Δz2]T)∣=π(z′)p(x′)=π(z′)∣1det(Jf)∣p(x')| det( \begin{bmatrix} {\Delta x_{11}}&{\Delta x_{21}}\\ {\Delta x_{12}}&{\Delta x_{22}}\\ \end{bmatrix}) | =\pi(z')\Delta z_1\Delta z_2\\ p(x')| \frac{1}{\Delta z_1\Delta z_2} det( \begin{bmatrix} {\Delta x_{11}}&{\Delta x_{21}}\\ {\Delta x_{12}}&{\Delta x_{22}}\\ \end{bmatrix}) | =\pi(z')\\ p(x')| det( \begin{bmatrix} {\Delta x_{11}/\Delta z_1}&{\Delta x_{21}/\Delta z_1}\\ {\Delta x_{12}/\Delta z_2}&{\Delta x_{22}/\Delta z_2}\\ \end{bmatrix}) | =\pi(z')\\ p(x')| det( \begin{bmatrix} {\Delta x_{11}/\Delta z_1}&{\Delta x_{21}/\Delta z_1}\\ {\Delta x_{12}/\Delta z_2}&{\Delta x_{22}/\Delta z_2}\\ \end{bmatrix}^T) | =\pi(z')\\ p(x')=\pi(z')|\frac{1}{det(J_f)}| p(x)det([Δx11Δx12Δx21Δx22])=π(z)Δz1Δz2p(x)Δz1Δz21det([Δx11Δx12Δx21Δx22])=π(z)p(x)det([Δx11z1Δx12z2Δx21z1Δx22z2])=π(z)p(x)det([Δx11z1Δx12z2Δx21z1Δx22z2]T)=π(z)p(x)=π(z)det(Jf)1

结论

总之,在数学基础部分我们要记住的一个结论就是下面的式子:
p(x′)∣det(Jf)∣=π(z′)p(x′)=π(z′)∣det(Jf−1)∣p(x')|det(J_f)|=\pi(z')\\ p(x')=\pi(z')|det(J_{f^{-1}})| p(x)det(Jf)=π(z)p(x)=π(z)det(Jf1)

流模型公式推导

我们回到生成的任务上来,上面提到,生成任务就是要通过最大化对数似然优化生成器:
G∗=arg⁡max⁡G∑i=1mlog⁡pG(xi)G^*=\arg\max_{G}\sum_{i=1}^m\log p_G(x_i) G=argGmaxi=1mlogpG(xi)
而根据上面数学基础得到的结论,有:
pG(xi)=π(zi)∣det(JG−1)∣,zi=G−1(xi)p_G(x_i)=\pi(z_i)|det(J_{G^{-1}})|,\ \ \ \ z_i=G^{-1}(x_i) pG(xi)=π(zi)det(JG1),    zi=G1(xi)
则对数似然:
log⁡pG(xi)=log⁡π(G−1(xi))+log⁡∣det(JG−1)∣\log p_G(x_i)=\log \pi(G^{-1}(x_i))+\log |det(J_{G^{-1}})| logpG(xi)=logπ(G1(xi))+logdet(JG1)
要训练一个好的生成器,只要最大化上面这个式子,就可以了。

现在的问题就是怎么把这个式子算出来,具体来说,这个式子计算的关键在以下两点:

  • 如何计算 det(JG)det(J_G)det(JG)
  • 如何计算 G−1G^{-1}G1

我们设计的生成器网络 GGG 需要满足上面这两个条件,这就是前面提到的流模型生成器数学上的限制。而 VAE、GAN 等生成模型则可以是任意的神经网络,没有限制。

另外要提一点,流模型的输入输出的尺寸必须是一致的。这是因为如果想要 GGG 可逆,它的输入输出维度一致是一个必要条件(非方阵不可能可逆)。比如要生成 100×100×3100\times 100\times 3100×100×3 的图像,那输入的随机噪声也是 100×100×3100\times 100\times 3100×100×3 的。这与 VAE、GAN 等生成模型很不一样,这些生成模型的输入维度通常远小于输出维度。

流模型的网络设计

多层设计

前面提到流模型的生成器 GGG 是要收到数学上的一些限制的,这导致 GGG 本身的表达能力可能是不足的。所以,一般需要堆叠多层网络来得到一个生成器,这也是 “流模型” 这个名称的由来。

不过虽然堆叠了很多层,在公式上也没有什么复杂的。无非就是把一堆 GiG_iGi 连乘起来,通过 log⁡\loglog 之后,又变成连加。

在这里插入图片描述

实际训练

我们再观察一下要最大化的对数似然:
log⁡pG(xi)=log⁡π(G−1(xi))+log⁡∣det(JG−1)∣\log p_G(x_i)=\log \pi(G^{-1}(x_i))+\log |det(J_{G^{-1}})| logpG(xi)=logπ(G1(xi))+logdet(JG1)
发现整个式子只与 G−1G^{-1}G1 有关。实际上,我们在训练过程中,就是通过样本 xix_ixi 训练 G−1G^{-1}G1 ,然后再推理的时候反过来用 GGG 来根据随机噪声进行生成就可以了。

观察第一项,log⁡π(zi)=log⁡π(G−1(xi))\log\pi(z_i)=\log\pi(G^{-1}(x_i))logπ(zi)=logπ(G1(xi)) ,我们知道 π\piπ 是正态分布,因此要最大化这一项,最好让 ziz_izi 是零向量,这样能取到最大值。然而,如果真的将 ziz_izi 取成全0了,那么微分也就是0,从而雅克比行列式 det(JG−1)det(J_{G^{-1}})det(JG1) 也会是 0,这样第二项 log⁡∣det(JG−1)∣\log|det(J_{G^{-1}})|logdet(JG1) 就会是负无穷,这样整个式子没办法最大。即,式子的两项会有一个 tradeoff,前一项让 ziz_izi 尽量靠近零向量,而后一项又会让 ziz_izi 不要是全零。

在这里插入图片描述

coupling layer

在经典的流模型方法 NICE 和 RealNVP 中,使用的具体网络结构是 coupling layer。

做法

coupling layer 的输入是 DDD 维的 z1,…,zDz_1,\dots,z_Dz1,,zD ,输出也是 DDD 维的 x1,…,xDx_1,\dots,x_Dx1,,xD 。将输入输出分别拆成两组,前 ddd 维一组,后面 D−dD-dDd 维是另一组。

输出 xix_ixi 的前 ddd 个元素就是输入 ziz_izi 的前 ddd 个元素直接拷贝过来。

而输出 xix_ixi 的后 D−dD-dDd 个元素是这样计算的:输入的前 ddd 个元素先通过两个函数 F,HF,HF,H 得到 D−dD-dDd 维的 βi\beta_iβiγi\gamma_iγi 。然后与输入的后 D−dD-dDd 个元素通过一个线性计算 xi>d=βizi+γix_{i>d}=\beta_iz_i+\gamma_ixi>d=βizi+γi 得到输出 xix_ixi 的后 D−dD-dDd 个元素。注意这里的 F,HF,HF,H 可以是任意的函数、任意的网络,不需要满足前面提到的限制。

第一次接触 coupling layer 的读者可能会很奇怪,这个层花里胡哨一顿操作是要干嘛?别急,下面我们就通过分析 coupling layer 与流模型生成器网络的两个数学限制,来解释这个层设计的巧妙之处。

在这里插入图片描述

如何计算G−1G^{-1}G1

首先我们来看 coupling layer 如何计算它的 inverse: z=G−1(x)z=G^{-1}(x)z=G1(x) 。即如何根据 xix_ixi 得到 ziz_izi

对于前 ddd 维,这是很容易的,因为 xix_ixiziz_izi 的前 ddd 维是全等的,因此也是直接拷贝回来即可。

对于后 D−dD-dDd 维,首先我们已经得到 ziz_izi 的前 ddd 维了,再通过函数 F,HF,HF,H 即可计算出 βi\beta_iβiγi\gamma_iγi (这里可以看到 F,HF,HF,H 无需是可逆的),这样就可以通过反转之前的线性计算,即通过 zi>d=xi−γiβiz_{i>d}=\frac{x_i-\gamma_i}{\beta_i}zi>d=βixiγi,得到 ziz_izi 的后 D−dD-dDd 维度。

如何计算 det(JG−1)det(J_{G^{-1}})det(JG1)

然后我们再来看 coupling layer 如何计算雅可比行列式 det(JG−1)det(J_{G^{-1}})det(JG1)

在计算 coupling layer 时,我们将输入输出都分成了两个部分,现在计算雅可比行列式,就分成四块来看。

  • 左上角的一块就是单位矩阵 III, 因为这部分输出是完全拷贝输入的;
  • 右上角的部分是零矩阵,因为输出的前 ddd 维,与输入的后 D−dD-dDd 维完全没关系;
  • 左下角的矩阵可能会非常复杂,因为 F,HF,HF,H 是任意的网络,但是由于上半部分是单位矩阵和零矩阵,因此这部分与整个矩阵行列式的计算无关,整个矩阵的行列式只取决于右下角的部分
  • 右下角的部分是一个对角矩阵,因为这部分是通过线性计算 xi>d=βizi+γix_{i>d}=\beta_iz_i+\gamma_ixi>d=βizi+γi 得到的,只与相同下标的有关,并且,值就是 βi\beta_iβi

因此,整个矩阵的行列式:
det(JG−1)=βd+1βd+2…βDdet(J_{G^{-1}})=\beta_{d+1}\beta_{d+2}\dots\beta_D det(JG1)=βd+1βd+2βD

在这里插入图片描述

堆叠coupling layer

前面提到过,流模型要通过堆叠多层网络来强化整个生成器的表达能力。但是,在堆叠 coupling layer 的时候要注意一点:每次 copy 的那一半要进行交换,不能每次都 copy 上半部分。如果每次 copy 的都是上半部分,那到最后生成的图像的上半部分会和输入是完全一样的噪声。因此,需要在堆叠时注意更换 copy 的半部。

在这里插入图片描述

另外,对于图像生成任务来说,区分前后半部的方法通常有两种:按空间和按通道。分别是某些像素坐标 (hi,wi)(h_i,w_i)(hi,wi) 做前半部,另一些做后半部;和某些通道做前半部,另一些做后半部。当然,也可以选择两种混用。

在这里插入图片描述

1x1 Conv

近年一篇较新的流模型的方法是来自 OpenAI 的 GLOW。这篇工作提出的方法是使用 1x1 的卷积来作为流模型的层。具体来说,图像的每一个像素位置 1x3 个元素会与一个 3x3 的矩阵 WWW 做乘积,得到输出的 1x3 。在这个过程中,WWW 是要学习的参数,模型通过学习 WWW 的参数,可能可以自己对通道进行 shuffle(如下图例子所示)。这样与 coupling layer 配合时就不用手动选择 copy 的半部,而是可以由模型通过学习自己决定通道交换的方法。

当然,作为流模型的一层,1x1 Conv 也需要满足前面提到的两个限制。对于雅可比行列式 det(JG−1)det(J_{G^{-1}})det(JG1) 的计算,1x1 的卷积层是完全可解析的,即可以直接通过公式计算出来的,就是 det(W)d×ddet(W)^{d\times d}det(W)d×d。但是对于 G−1G^{-1}G1 可逆性,原文并没有给出保证。虽然原文在实现时将 WWW 初始化为可逆的,并且 3x3 的矩阵不可逆的概率也比较小(行列式恰好等于零),但是毕竟没有在原理上保证可逆,在一些网友训练的过程中也出现了 NaN 的情况。

在这里插入图片描述

最后推荐一下 openai 写的关于 glow 的 demo 和 blog:

https://openai.com/blog/glow/

有很多好玩的应用。比如通过统计计算 “笑的人脸” 和 “不笑的人脸” 的差,再加到一张不笑的人脸上,让他笑起来等。

Ref

  • realnvp paper
  • nice paper
  • glow paper
  • Flow-based Generative Model
  • 雅可比矩阵-维基百科

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iec60870-5-104通讯协议编程_三菱FX编程口通讯协议1——协议解读

三菱PLC编程口通讯协议:1、三菱PLC编程口通讯协议有四个命令,如下:2、三菱FX系列PLC地址对应表:PLC_X Group Base AddRess128;Const PLC_Y_Group Base AddRess160;M _Group Base_AddRess 256;P…

DETR精读笔记

DETR精读笔记 论文:End-to-End Object Detection with Transformers (发表于 ECCV-2020) 代码:https://github.com/facebookresearch/detr 解读视频:DETR 论文精读【论文精读】 本笔记主要基于 Yi Zhu 老师的解读 引言…

GAN网络评估指标:IS、FID、PPL

GAN网络评估指标:IS、FID、PPL 转自:IS、FID、PPL,GAN网络评估指标 另外关于GAN的评价指标,推荐李宏毅老师的视频:【機器學習2021】生成式對抗網路 (Generative Adversarial Network, GAN) (三) – 生成器效能評估與條…

降维后输入分类器分类时报错_逻辑回归解决多分类方法及其优缺点分析

众所周知,逻辑回归常用于解决二分类任务,但是在工作/学习/项目中,我们也经常要解决多分类问题。本文总结了 3 种逻辑回归解决多分类的方法,并分析了他们的优缺点。一、One-Vs-Rest假设我们要解决一个分类问题,该分类问…

PyTorch 的 Autograd

PyTorch 的 Autograd 转自:PyTorch 的 Autograd PyTorch 作为一个深度学习平台,在深度学习任务中比 NumPy 这个科学计算库强在哪里呢?我觉得一是 PyTorch 提供了自动求导机制,二是对 GPU 的支持。由此可见,自动求导 (a…

商场楼层导视牌图片_百宝图商场电子导视软件中预约产品功能简介

百宝图商场电子导视软件中预约产品功能简介 管理端,可配合百宝图商场电子导视软件配套使用 1:数据展示:图形展示总预约数/预约时间峰值/预约途径/各途径数量对比 2:数据统计:有效预约数量/无效预约数量/无效预约原因备…

Pytorch autograd.grad与autograd.backward详解

Pytorch autograd.grad与autograd.backward详解 引言 平时在写 Pytorch 训练脚本时,都是下面这种无脑按步骤走: outputs model(inputs) # 模型前向推理 optimizer.zero_grad() # 清除累积梯度 loss.backward() # 模型反向求导 optimizer.step()…

相对熵与交叉熵_熵、KL散度、交叉熵

公众号关注 “ML_NLP”设为 “星标”,重磅干货,第一时间送达!机器学习算法与自然语言处理出品公众号原创专栏作者 思婕的便携席梦思单位 | 哈工大SCIR实验室KL散度 交叉熵 - 熵1. 熵(Entropy)抽象解释:熵用于计算一个随机变量的信…

动手实现一个带自动微分的深度学习框架

动手实现一个带自动微分的深度学习框架 转自:Automatic Differentiation Tutorial 参考代码:https://github.com/borgwang/tinynn-autograd (主要看 core/tensor.py 和 core/ops.py) 目录 简介自动求导设计自动求导实现一个例子总结参考资料 简介 梯度…

http 错误 404.0 - not found_电脑Regsvr32 用法和错误消息的说明

​ 对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。Regsvr32.exe 的用法RegSvr32.exe 具有以下命令行选项: Regs…

MobileNet 系列:从V1到V3

MobileNet 系列:从V1到V3 转自:轻量级神经网络“巡礼”(二)—— MobileNet,从V1到V3 自从2017年由谷歌公司提出,MobileNet可谓是轻量级网络中的Inception,经历了一代又一代的更新。成为了学习轻…

mysql 高级知识点_这是我见过最全的《MySQL笔记》,涵盖MySQL所有高级知识点!...

作为运维和编程人员,对MySQL一定不会陌生,尤其是互联网行业,对MySQL的使用是比较多的。MySQL 作为主流的数据库,是各大厂面试官百问不厌的知识点,但是需要了解到什么程度呢?仅仅停留在 建库、创表、增删查改…

teechart mysql_TeeChart 的应用

TeeChart 是一个很棒的绘图控件,不过由于里面没有注释,网上相关的资料也很少,所以在应用的时候只能是一点点的试。为了防止以后用到的时候忘记,我就把自己用到的东西都记录下来,以便以后使用的时候查询。1、进制缩放图…

NLP新宠——浅谈Prompt的前世今生

NLP新宠——浅谈Prompt的前世今生 转自:NLP新宠——浅谈Prompt的前世今生 作者:闵映乾,中国人民大学信息学院硕士,目前研究方向为自然语言处理。 《Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in…

requestfacade 这个是什么类?_Java 的大 Class 到底是什么?

作者在之前工作中,面试过很多求职者,发现有很多面试者对Java的 Class 搞不明白,理解的不到位,一知半解,一到用的时候,就不太会用。想写一篇关于Java Class 的文章,没有那么多专业名词&#xff0…

初学机器学习:直观解读KL散度的数学概念

初学机器学习:直观解读KL散度的数学概念 转自:初学机器学习:直观解读KL散度的数学概念 译自:https://towardsdatascience.com/light-on-math-machine-learning-intuitive-guide-to-understanding-kl-divergence-2b382ca2b2a8 解读…

MySQL应用安装_mysql安装和应用

1.下载mysql安装包2.安装mysql,自定义->修改路径3.配置mysql,选择自定义->server模式->500访问量->勾选控制台->设置gbk->设置密码和允许root用户远程登录等等。以管理员权限,在控制台输入:net start MySQL, 启…

mysql 商品规格表_商品规格分析

产品表每次更新商品都会变动的,ID不能用,可是购物车还是用了,这就导致每次保存商品,哪怕什么都没有改动,也会导致用户的购物车失效。~~~其实可以考虑不是每次更新商品就除所有的SKU,毕竟有时什么都没修改呢…

huggingface NLP工具包教程1:Transformers模型

huggingface NLP工具包教程1:Transformers模型 原文:TRANSFORMER MODELS 本课程会通过 Hugging Face 生态系统中的一些工具包,包括 Transformers, Datasets, Tokenizers, Accelerate 和 Hugging Face Hub。…

隐马尔可夫模型HMM推导

隐马尔可夫模型HMM推导 机器学习-白板推导系列(十四)-隐马尔可夫模型HMM(Hidden Markov Model) 课程笔记 背景介绍 介绍一下频率派和贝叶斯派两大流派发展出的建模方式。 频率派 频率派逐渐发展成了统计机器学习,该流派通常将任务建模为一…