11 Aug

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

前言:自从在机器之心上看到了glow模型之后(请看《下一个GAN?OpenAI提出可逆生成模型Glow》),我就一直对其念念不忘。现在机器学习模型层出不穷,我也经常关注一些新模型动态,但很少像glow模型那样让我怦然心动,有种“就是它了”的感觉。更意外的是,这个效果看起来如此好的模型,居然是我以前完全没有听说过的。于是我翻来覆去阅读了好几天,越读越觉得有意思,感觉通过它能将我之前的很多想法都关联起来。在此,先来个阶段总结。

背景

本文主要是《NICE: Non-linear Independent Components Estimation》一文的介绍和实现。这篇文章也是glow这个模型的基础文章之一,可以说它就是glow的奠基石。

艰难的分布

众所周知,目前主流的生成模型包括VAE和GAN,但事实上除了这两个之外,还有基于flow的模型(flow可以直接翻译为“流”,它的概念我们后面再介绍)。事实上flow的历史和VAE、GAN它们一样悠久,但是flow却鲜为人知。在我看来,大概原因是flow找不到像GAN一样的诸如“造假者-鉴别者”的直观解释吧,因为flow整体偏数学化,加上早期效果没有特别好但计算量又特别大,所以很难让人提起兴趣来。不过现在看来,OpenAI的这个好得让人惊叹的、基于flow的glow模型,估计会让更多的人投入到flow模型的改进中。

glow模型生成的高清人脸

glow模型生成的高清人脸

点击阅读全文...

26 Aug

细水长flow之RealNVP与Glow:流模型的传承与升华

话在开头

上一篇文章《细水长flow之NICE:流模型的基本概念与实现》中,我们介绍了flow模型中的一个开山之作:NICE模型。从NICE模型中,我们能知道flow模型的基本概念和基本思想,最后笔者还给出了Keras中的NICE实现。

本文我们来关心NICE的升级版:RealNVP和Glow。

Glow模型的采样演示:

精巧的flow

不得不说,flow模型是一个在设计上非常精巧的模型。总的来看,flow就是想办法得到一个encoder将输入$\boldsymbol{x}$编码为隐变量$\boldsymbol{z}$,并且使得$\boldsymbol{z}$服从标准正态分布。得益于flow模型的精巧设计,这个encoder是可逆的,从而我们可以立马从encoder写出相应的decoder(生成器)出来,因此,只要encoder训练完成,我们就能同时得到decoder,完成生成模型的构建。

为了完成这个构思,不仅仅要使得模型可逆,还要使得对应的雅可比行列式容易计算,为此,NICE提出了加性耦合层,通过多个加性耦合层的堆叠,使得模型既具有强大的拟合能力,又具有单位雅可比行列式。就这样,一种不同于VAE和GAN的生成模型——flow模型就这样出来了,它通过巧妙的构造,让我们能直接去拟合概率分布本身。

点击阅读全文...

21 Sep

细水长flow之f-VAEs:Glow与VAEs的联姻

这篇文章是我们前几天挂到arxiv上的论文的中文版。在这篇论文中,我们给出了结合流模型(如前面介绍的Glow)和变分自编码器的一种思路,称之为f-VAEs。理论可以证明f-VAEs是囊括流模型和变分自编码器的更一般的框架,而实验表明相比于原始的Glow模型,f-VAEs收敛更快,并且能在更小的网络规模下达到同样的生成效果。

原文地址:《f-VAEs: Improve VAEs with Conditional Flows》

近来,生成模型得到了广泛关注,其中变分自编码器(VAEs)流模型是不同于生成对抗网络(GANs)的两种生成模型,它们亦得到了广泛研究。然而它们各有自身的优势和缺点,本文试图将它们结合起来。

由f-VAEs实现的两个真实样本之间的线性插值

由f-VAEs实现的两个真实样本之间的线性插值

基础

设给定数据集的证据分布为$\tilde{p}(x)$,生成模型的基本思路是希望用如下的分布形式来拟合给定数据集分布
$$\begin{equation}q(x)=\int q(z)q(x|z) dz\end{equation}$$

点击阅读全文...

27 May

【不可思议的Word2Vec】5. Tensorflow版的Word2Vec

本文封装了一个比较完整的Word2Vec,其模型部分使用tensorflow实现。本文的目的并非只是再造一次Word2Vec这个轮子,而是通过这个例子来熟悉tensorflow的写法,并且测试笔者设计的一种新的softmax loss的效果,为后面研究语言模型的工作做准备。

不同的地方

Word2Vec的基本的数学原理,请移步到《【不可思议的Word2Vec】 1.数学原理》一文查看。本文的主要模型还是CBOW或者Skip-Gram,但在loss设计上有所不同。本文还是使用了完整的softmax结构,而不是huffmax softmax或者负采样方案,但是在训练softmax时,使用了基于随机负采样的交叉熵作为loss。这种loss与已有的nce_loss和sampled_softmax_loss都不一样,这里姑且命名为random softmax loss。

另外,在softmax结构中,一般是$\text{softmax}(Wx+b)$这样的形式,考虑到$W$矩阵的形状事实上跟词向量矩阵的形状是一样的,因此本文考虑了softmax层与词向量层共享权重的模型(这时候直接让$b$为0),这种模型等效于原有的Word2Vec的负采样方案,也类似于glove词向量的词共现矩阵分解,但由于使用了交叉熵损失,理论上收敛更快,而且训练结果依然具有softmax的预测概率意义(相比之下,已有的Word2Vec负样本模型训练完之后,最后模型的输出值是没有意义的,只有词向量是有意义的。)。同时,由于共享了参数,因此词向量的更新更为充分,读者不妨多多测试这种方案。

点击阅读全文...

17 Jul

初中生活结束了(友谊地久天长)

07.15,是我们作为初中生的最后日子,过了那天,我们就远离了初中。 我还清楚地记得,中考那几天,大家的依依不舍 在这之前,对于离别,我总是潇潇洒洒,无牵无挂 可是,在这一次的分离中,我却有点伤感 也许已经长大了,对友谊有着更深的感悟,更加珍惜

愿友谊地久天长!

点击阅读全文...

1 Aug

椭圆的周长与面积

椭圆面积和周长的求法,看上去没有什么区别。不过实际上它们的难度有着天壤之别。

椭圆所包围的面积是$S=\pi ab$,这里的a和b是半长轴和半短轴。仅根据椭圆标准方程就可以推导出来。

目前还没有找到椭圆周长的一般公式,要想精确求解,只有代入以下无穷级数:
$$C=2\pi a [1 - (1/2)^2 (\frac{c}{a})^2 - ({1\cdot 3}/{2\cdot 4})^2{c^4}/{3a^4} - ({1\cdot 3\cdot 5}/{2\cdot 4\cdot 6})^2{c^6}/{5a^6}-...]$$
可以写成:
$$C = 2\pi a \sum_{n=0}^{\infty} { - [\prod_{m=1}^n ({2m-1}/{2m})]^2 {c^{2n}}/{a^{2n}(2n - 1)}}$$

距离c 叫做椭圆的线性离心率,等于从中心到任一焦点的距离

点击阅读全文...

8 Oct

8天长假结束了

今天已经是长假的最后一天了,等一下就要去上学了。先向大家说Bye!

想想看,这个假期还是挺充实的。首先当然是祖国六十周年庆,然后就是中秋,跟着就是科学空间重新回归到国家天文台,还有诺贝尔奖的颁布......喜讯太多了,还没有关注完。真希望多一点时间来更新!真的很遗憾......

不过,遗憾归遗憾,学还是要上的。我又有了新的计划了。我要实现我的“无理数”人生,不要做一个有理数(停止不前,或者是不断循环、徘徊)!I think I can !

30 Jul

旋转的弹簧将如何伸长?

旋转的弹簧

旋转的弹簧

一根均匀的弹簧长度l

0

,线密度λ

0

,劲度系数k,总质量M。现在没有重力的环境下,绕其一端作角速度ω的旋转(角速度恒定),则此时其长度变为多少?

这是网友“宇宙为家”在几天前提出的问题。期间我曾做过多次解答,犯了若干次错误,经过修修补补,得出了最后的答案,在此感谢“宇宙为家”朋友的多次提醒。如果下面的答案依旧有错误,望各位读者发现并指出。

点击阅读全文...