Transformer
Transformer的结构Transformer的结构如上图所示,我们将其拆解为x个小部分,逐个部分用代码实现,然后再将各个部分联结起来,形成最终的Transformer。 关于Transformer的原理,网上已经有很多优质的文章了,这里我们关心其代码实现。对于其每一个子模块(以类的形式定义),我们都会实例化一个对象,用具体的数值代入其中,把中间过程中产生的变量维度及相关信息打印出来,这些都体现在代码注释中,请留意。 Muti-Head AttentionMuti-Head Attention接收输入q,k,v,维度在这里都是$[4,3,512]$,输出维度也是$[4,3,512]$。 q和k的维度是一致的,而v可以和它们不一致,这里只是为了方便才将三者维度保持一致。 SelfAttention实现代码如下...
CycleGAN
上图中,最左边一列是原图,右侧的4列是将原图转换成其他风格后的图像。这种转换被称为图像风格迁移。 实现图像风格迁移的方法有很多,这里我们介绍CycleGAN并用它来实现图像风格迁移。 CycleGAN的网络结构CycleGAN的网络结构如上图所示。它的训练数据集需要来自两个不同的域(就是两种不同风格的图像):$A,B$; CycleGAN包含两个生成器:$G_{AB},G_{BA}$,分别用于将A风格图像转换为B风格图像,以及将B风格图像转换为A风格图像; 同样,它也包含两个判别器:$D_{A},D_{B}$。 CycleGAN的损失函数在原始GAN损失函数的基础上,CycleGAN为了防止生成器偷懒(解释见下一段),增加了循环一致性损失,这个东西其实就是重构损失,以保证转换后的图像和原图像的内容一致性。 李宏毅老师的PPT中一幅图很形象的展示了循环一致性损失 现在举个例子解释偷懒...
从GAN到WGAN再到WGAN-GP
之前介绍了GAN的原理,并使用celeba数据集训练了一个基于DCGAN的”假”人脸生成器(传送门戳我),这里我把它的生成效果图搬运过来了在GAN问世后,其出色的表现使得对于GAN的研究一时风生水起(至今还在持续),越来越多关于GAN的研究成果被发表,GAN本身存在的缺陷也逐步被挖掘出来。 本文不会陷入繁杂的数学推导中,而是指出WGAN相比于原始GAN的改进之处,以及进一步提出的WGAN-GP,并动手用PyTorch进行实现。 WGANWGAN便是对于原始GAN的一种改进方案,它的作者用了大量篇幅指出了原始GAN的不足之处,并最终给出了自己的解决方案。虽然其中蕴含了大量的数学推导,但推导的结论却出乎意料的简单,或许这就是数学的魅力。 说完一堆废话后,来看看改进得到的WGAN相比于原始GAN有哪些改动,这里直接把WGAN作者给出的训练算法贴出来,然后做简要分析。 5和10分别给出了判别器和生成器的损失函数,相比于原始GAN...
火爆全球的GAN究竟是何方神圣?
故事时间从前有一个人,他希望通过制造假币来发家致富。 于是,他开始学习制造假币。 一开始,他的技术太菜,制作的假币刚流入市场就被警察发现了。 他不甘心,于是继续学习来提升造假币技术,这一次,假币并没有被发现,他很开心的数着钱。 可是,过了一段时间,敏锐的警察使用刚刚学习到的新知识,破获了他的假币。 但他还是不甘示弱,继续提升造假币的技术 警察也继续学习新的假币鉴别技术 就这样,他的造假币技术一直在提升,警察鉴别假币的技术也在不断提升 在互相抗衡很久以后,他的造假币技术到了炉火纯青的地步,以至于警察都难以鉴别。 GAN是什么? 生成对抗网络(Generative adversarial network,...
变分自编码器
Vae他有一些烦恼反正现在的年轻人都有许多烦恼那么多要思考那么多要寻找诱惑太多 不坚定就犯错了 哦哦,不对,不是这个Vae,也不是uae~ 是接下来出场的VAE~ 对比AE,引出VAE之前介绍了自编码器(AE)的原理(传送门),当时讲到自编码器并不具有真正的生成能力,以图像为例来说,它只能将输入的图像$X$编码成隐向量$z$,然后将$z$作为解码器的输入,得到输出图像$X’$。如果我们尝试将与$z$的shape一致的”随机特征表示”输入解码器,那么得到的将是毫无意义的噪声图像。 变分自编码器(VAE)突破了这一限制! 先给出结论:在VAE中,只要随机特征表示(这里也将这些特征表示记作$z$)是从某些分布,如标准正态分布中采样得到的,那么将$z$输入解码器之后可以得到与训练集图像类似但不同于训练集中任何一张图像的新图像。 比如,训练集是手写数字图像,那么在训练完成后,将从标准正态分布中采样得到的$z$输入解码器,可以得到一些新的手写数字图像。 以上所说的特征表示$z$,被称为隐向量(latent...
自编码器
自编码器的结构自编码器(Auto Encoder)是一种神经网络模型。它由两部分组成:编码器(Ecoder)和解码器(Decoder)。 编码器用于将输入数据(Input Data)进行编码,从而将输入数据映射到维度较低的隐空间(Latent Space),得到被编码的数据(Encoded...
回归树
开篇在之前的决策树讲解(传送门)中,我们使用ID3算法生成了一棵决策树,并且在文章最后指出除了ID3算法,常用的决策树生成算法还有C4.5。 但是,无论是基于信息增益的ID3算法,还是基于信息增益比的C4.5算法,它们都只能处理分类问题,而对于回归问题就束手无策了。 现在,我们要介绍一种既可用于分类任务又可用于回归任务的决策树的生成算法:CART算法。 CART的全称是 classification and regression...
AdaBoost
开篇AdaBoost是一种提升(boosting)方法。 你可能听过“众人拾柴火焰高”这句话,提升方法的思想与这句话的思想颇有相似之处。 一个人拾到的柴火,只能维持小的火苗;但一群人一起拾柴,供给同一火堆,那么这个火堆终将燃起熊熊大火。 对于给定的训练集,单个分类器的分类能力可能并不算好;但如果同时训练一堆分类器,让分类器们一起做判断,那么分类结果将会比任何一个单独的分类器做分类都要好。 上面的单个分类器被称为“弱分类器”,若干个“弱分类器”联合起来,就得到了“强分类器”。 AdaBoost作为最具代表性的提升方法,自然也蕴含着这种集体智慧的思想。至于其具体细节,且往下看。 AdaBoost...
朴素贝叶斯
开篇正如其名,”朴素贝叶斯”原理”朴素”,实现简单,是一种常用的机器学习算法。 为何“朴素”?如何“学习”?如何分类?别急,咱们慢慢道来~ 概率统计回忆录朴素贝叶斯也是贝叶斯方法的一种,提起贝叶斯,学过概率统计的你一定听说过条件概率公式,全概率公式和贝叶斯公式吧,忘记了也没关系,我们先来快速过一遍。 条件概率公式: $$P(A|B)=\frac{P(A,B)}{P(B)}$$ 全概率公式: $$P(B)=\sum_{i=1}^{n}P(A_i)P(B|A_i)$$ 贝叶斯公式: $$P(A|B)=\frac{P(A,B)}{P(B)}=\frac{P(B|A)P(A)}{...
决策树
...














