17 Sep

变分自编码器(四):一步到位的聚类方案

由于VAE中既有编码器又有解码器(生成器),同时隐变量分布又被近似编码为标准正态分布,因此VAE既是一个生成模型,又是一个特征提取器。在图像领域中,由于VAE生成的图片偏模糊,因此大家通常更关心VAE作为图像特征提取器的作用。提取特征都是为了下一步的任务准备的,而下一步的任务可能有很多,比如分类、聚类等。本文来关心“聚类”这个任务。

一般来说,用AE或者VAE做聚类都是分步来进行的,即先训练一个普通的VAE,然后得到原始数据的隐变量,接着对隐变量做一个K-Means或GMM之类的。但是这样的思路的整体感显然不够,而且聚类方法的选择也让我们纠结。本文介绍基于VAE的一个“一步到位”的聚类思路,它同时允许我们完成无监督地完成聚类和条件生成。

理论

一般框架

回顾VAE的loss(如果没印象请参考《变分自编码器(二):从贝叶斯观点出发》):
$$KL\Big(p(x,z)\Big\Vert q(x,z)\Big) = \iint p(z|x)\tilde{p}(x)\ln \frac{p(z|x)\tilde{p}(x)}{q(x|z)q(z)} dzdx\tag{1}$$
通常来说,我们会假设$q(z)$是标准正态分布,$p(z|x),q(x|z)$是条件正态分布,然后代入计算,就得到了普通的VAE的loss。

点击阅读全文...

6 Mar

O-GAN:简单修改,让GAN的判别器变成一个编码器!

本文来给大家分享一下笔者最近的一个工作:通过简单地修改原来的GAN模型,就可以让判别器变成一个编码器,从而让GAN同时具备生成能力和编码能力,并且几乎不会增加训练成本。这个新模型被称为O-GAN(正交GAN,即Orthogonal Generative Adversarial Network),因为它是基于对判别器的正交分解操作来完成的,是对判别器自由度的最充分利用。

FFHQ线性插值效果图

FFHQ线性插值效果图

Arxiv链接:https://papers.cool/arxiv/1903.01931

开源代码:https://github.com/bojone/o-gan

点击阅读全文...

9 Dec

变分自编码器(八):估计样本概率密度

在本系列的前面几篇文章中,我们已经从多个角度来理解了VAE,一般来说,用VAE是为了得到一个生成模型,或者是做更好的编码模型,这都是VAE的常规用途。但除了这些常规应用外,还有一些“小众需求”,比如用来估计$x$的概率密度,这在做压缩的时候通常会用到。

本文就从估计概率密度的角度来了解和推导一下VAE模型。

两个问题

所谓估计概率密度,就是在已知样本$x_1,x_2,\cdots,x_N\sim \tilde{p}(x)$的情况下,用一个待定的概率密度簇$q_{\theta}(x)$去拟合这批样本,拟合的目标一般是最小化负对数似然:
\begin{equation}\mathbb{E}_{x\sim \tilde{p}(x)}[-\log q_{\theta}(x)] = -\frac{1}{N}\sum_{i=1}^N \log q_{\theta}(x_i)\label{eq:mle}\end{equation}

点击阅读全文...

4 Jan

智能家居之热水器零冷水技术原理浅析

如果家庭使用单一的热水器集中供热水,那么当我们想要用热水时,往往需要先放一段时间的冷水,而如果放冷水时间比较长的话,就会比较影响体验。所谓零冷水,实际上就是想办法提前把热水管中的冷水排放掉,以达到(几乎)瞬间出热水的效果。事实上,零冷水并不是什么高大上的技术,但可能由于观念没跟上、理解上有误等原因,零冷水技术还没有在家庭中得到普及,不过随着大家对生活品质的要求越来越高,零冷水确实在慢慢流行起来了。

本文来简单分析一下零冷水技术的实现原理,包括各种方案的优缺点和自省DIY的参考思路。

理想的零冷水方案

理想的零冷水方案

写在前面

在文章开始,需要纠正很多人的一个错误观念:零冷水不是为了省钱,而是为了提升生活品质。如果你是省钱最大的心态,那么接下来的内容就可以不用看了,零冷水技术对你毫无价值。

点击阅读全文...

26 Sep

利用“熄火保护 + 通断器”实现燃气灶智能关火

燃气灶智能化主要有两个方向:一是检测开关火状态,实现跟抽油烟机等其他设备的联动;二是实现智能关火,这包括定时关火以及接入米家(或者其他智能家居)实现语音关火、远程关火等。目前带有这两点功能的燃气灶选择并不多,并且相比普通燃气灶贵不少,单纯为了这两点功能而换一个新燃气灶并不划算,所以就出现了一些将普通燃气灶智能化的的魔改方案。

接入方案示意图

接入方案示意图

本文主要分享基于燃气灶自带的熄火保护装置,利用通断器将燃气灶接入米家,实现智能关火功能。

点击阅读全文...

16 Oct

Cool Papers浏览器扩展升级至v0.2.0

年初,我们在《更便捷的Cool Papers打开方式:Chrome重定向扩展》中发布了一个Chrome浏览器插件(Cool Papers Redirector v0.1.0),可以通过右击菜单从任意页面中重定向到Cool Papers中,让大家更方便地获取Kimi对论文的理解。前几天我们把该插件升级到了v0.2.0,并顺利上架到了Chrome应用商店中,遂在此向大家推送一下。

更新汇总

相比旧版v0.1.0,当前版v0.2.0的主要更新内容如下:

1、右键菜单跳转改为在新标签页打开;

2、右键菜单支持同时访问多个论文ID;

3、右键菜单支持PDF页面;

4、右键菜单新增更多论文源(arXiv、OpenReview、ACL、IJCAI、PMLR);

5、右键菜单在搜索不到论文ID时,转入站内搜索(即划词搜索);

6、在某些网站的适当位置插入快捷跳转链接(arXiv、OpenReview,ACL)。

点击阅读全文...

29 Jun

文本情感分类(三):分词 OR 不分词

去年泰迪杯竞赛过后,笔者写了一篇简要介绍深度学习在情感分析中的应用的博文《文本情感分类(二):深度学习模型》。虽然文章很粗糙,但还是得到了不少读者的反响,让我颇为意外。然而,那篇文章中在实现上有些不清楚的地方,这是因为:1、在那篇文章以后,keras已经做了比较大的改动,原来的代码不通用了;2、里边的代码可能经过我随手改动过,所以发出来的时候不是最适当的版本。因此,在近一年之后,我再重拾这个话题,并且完成一些之前没有完成的测试。

为什么要用深度学习模型?除了它更高精度等原因之外,还有一个重要原因,那就是它是目前唯一的能够实现“端到端”的模型。所谓“端到端”,就是能够直接将原始数据和标签输入,然后让模型自己完成一切过程——包括特征的提取、模型的学习。而回顾我们做中文情感分类的过程,一般都是“分词——词向量——句向量(LSTM)——分类”这么几个步骤。虽然很多时候这种模型已经达到了state of art的效果,但是有些疑问还是需要进一步测试解决的。对于中文来说,字才是最低粒度的文字单位,因此从“端到端”的角度来看,应该将直接将句子以字的方式进行输入,而不是先将句子分好词。那到底有没有分词的必要性呢?本文测试比较了字one hot、字向量、词向量三者之间的效果。

模型测试

本文测试了三个模型,或者说,是三套框架,具体代码在文末给出。这三套框架分别是:

1、one hot:以字为单位,不分词,将每个句子截断为200字(不够则补空字符串),然后将句子以“字-one hot”的矩阵形式输入到LSTM模型中进行学习分类;

2、one embedding:以字为单位,不分词,,将每个句子截断为200字(不够则补空字符串),然后将句子以“字-字向量(embedding)“的矩阵形式输入到LSTM模型中进行学习分类;

3、word embedding:以词为单位,分词,,将每个句子截断为100词(不够则补空字符串),然后将句子以“词-词向量(embedding)”的矩阵形式输入到LSTM模型中进行学习分类。

点击阅读全文...

26 Jun

OCR技术浅探:9. 代码共享(完)

文件说明:

1. image.py——图像处理函数,主要是特征提取;

2. model_training.py——训练CNN单字识别模型(需要较高性能的服务器,最好有GPU加速,否则真是慢得要死);

3. ocr.py——识别函数,包括单字分割、前面训练好的模型进行单字识别、动态规划提升效果;

4. main.py——主文件,用来调用1、3两个文件。

5、我们的模型中包含的字.txt(UTF-8编码)

点击阅读全文...