EfficientNet论文解读
论文链接:EfficientNet- Rethinking Model Scaling for Convolutional Neural Networks
Introduction对CNN来说,增大模型规模被广泛地用以提高模型准确率,具体来说可以从3个维度进行:
增大深度depth,即增加层数
增大宽度width,即增加channel数
增大图像分辨率image resolution
先前的研究一般都只对其中一个维度进行缩放
虽然对三个维度同时进行任意缩放是可行的,但其需要繁复的手动调整,且往往不能获得更好的结果
因此该论文提出了一种复合缩放方法(compound scaling method)来对CNN进行缩放
Compound Model ScalingCNN通常被划分为多个stage,每个stage的结构相同(例如ResNet),因此可以将CNN定义为
\mathcal{N}=\bigodot\limits_{i=1\ldots s}\mathcal{F}_{i}^{L_{i}}\big(X_{\langle H_{i},W_{i},C_{i}\rangle}\big)其中 ...
应用Attention机制的Seq2Seq
论文链接:Neural Machine Translation By Jointly Learning To Align And Translate
什么是AttentionSeq2Seq解读与实现中讲解的原始的Seq2Seq模型中存在一个问题即encoder的输出是固定长度的向量如果输入序列很长,这个定长向量就很可能无法浓缩所有信息
首先很容易想到将encoder每个timestep的输出都保留下来这样就有了一个尺寸为(timestep, output_dim)的矩阵表示encoder的处理结果(原来seq2seq相当于只保留了这个矩阵最后一行)
那么要如何处理这个矩阵并传递给decoder呢考虑到人类的翻译过程,我们首先会进行 “我=I” “咖啡=coffee” 这样一个单词对应关系的转化这个过程称为对齐(alignment)
也就是说人类会专注于一个单词(或短语)进行翻译我们把这种过程应用于神经网络,就叫Attention机制
加入Attention机制的seq2seq如图所示encoder最后一个cell的状态仍然作为decoder的初始状态不同之处加入了Attention层, ...
Seq2Seq解读与实现
seq2seq(sequence to sequence)是一个经典的序列数据生成模型
论文链接:Sequence to Sequence Learning with Neural Networks
Seq2Seq原理模型结构首先序列数据很自然地想到用RNN处理,seq2seq中选择了LSTM
序列数据间转换最关键的问题就是一般输入输出都是变长序列seq2seq采用了encoder-decoder结构来解决这一问题即encoder先将输入的变长序列转换成一个定长向量,decoder再根据这个向量解码成目标序列
如图所示,以英译法为例encoder接受输入的英文句子,LSTM处理后不保留输出,只保留最后一个cell的状态 $h_t,c_t$然后decoder的初始状态设置为保留的encoder的最后一个状态
我们用和分别表示句子的开始和结束decoder的第一个输入为,此后每个timestep的输入是上一个timestep的输出
假设输出空间不同的单词数为num那么对于decoder每个timestep的输出,应用一个输出维度为num全连接并softmax激活这样就可以用交叉熵判断模 ...
Transformer——Attention is all you need
RNN、LSTM、GRU等总是处理序列问题的第一选择虽然他们展现出了非常优秀的处理效果,但在计算速度上却有着明显缺点
基于循环的层以串行方式处理数据,完全无法利用硬件的并行计算优势
无论是用卷积还是循环处理序列,其计算量都会随输入输出的维度增大而大幅增加
因此Ashish等人提出了仅基于Attention机制和全连接网络的TransformerTransformer不仅计算效率大大提高,其处理效果也不亚于seq2seq
论文链接:Attention is all you need
Attention Is All You Need
Multi-Head AttentionTransformer中使用的作者提出的Multi-Head Attention
记输入的Query向量和(Key, Value)向量对分别为$Q,K,V$,且维度分别为$d_Q,d_K,d_V$传统的Dot-Product Attention公式为
\mathrm{Attention}=\mathrm{softmax}(QK^T)V而另一种传统的Attention——Additive Attention用 ...
infoGAN与disentangled representation学习
论文链接:InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets
Disentangled RepresentationinfoGAN的核心是通过无监督模型学得数据实例的Disentangled Representation(解耦表征)
对于什么是Disentangled Representation,目前并没有比较正式的定义这个概念最早出现于2013年Bengio Representation Learning: A Review and New Perspectives 一文中
Single latent units are sensitive to changes in single generative factors, while being relatively invariant to changes in other factors.
即“单个隐单元仅对单个生成因子的变化敏感,而对其他因子的变化不敏感”
直观理解为,将某实 ...
cycleGAN与Unpaired Image Translation
论文链接:Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks
cycleGAN的提出之前提到的GAN实现通用图像间转换 ——Pix2Pix详解中pix2pix实现了通用的Image to Image Translation模型
然而pix2pix的训练需要成对的图像数据集很多时候我们无法获得这样的数据集,例如如图的转换
针对这种问题,作者基于pix2pix的结构,提出了cycleGAN
cycleGAN的理论
图(a)表示cycleGAN的对抗训练部分
cycleGAN含有两个生成器和两个判别器两个生成器分别学习映射$G:X\rightarrow Y$和$F: Y\rightarrow X$,其中X与Y分别表示两个不成对的图像分布两个判别器则是分别判断生成的两个假图像分布$\hat{X},\hat{Y}$真实性的
cycle consistence loss首先给出部分论文原文
Adversarial training can, in theory, learn mappi ...
LSGAN详解
论文链接:Least Squares Generative Adversarial Networks
LSGAN的思想原始GAN采用了Sigmoid+Binary Cross Entropy的损失其存在一个问题,即G生成的图像G(z)虽然成功地让D认为是真图像,但实际上G(z)仍然和真实的图像x有很大差距此时由于D已经被欺骗,导致G没有可更新的梯度最终使得G生成的图像质量仍较低
我们可以根据作者的图来理解
其中蓝点为G生成的假图像,红点为真图像,蓝线和红线分别为原始GAN的D和LSGAN的D的判别界限
当我们试图用被D判别为真的假图像(洋红色点)去更新G的时候若使用sigmoid+BCE损失,会发现因为loss几乎为0而产生梯度消失
因此作者提出了用least square loss训练GAN由于成功训练的GAN的D的判别曲线应该是穿过并平分真实图像分布的而least square loss可以使生成的图像朝判别边界移动,也就同时使得假图像向真图像区域靠拢的目标函数
这种GAN称为LSGAN(Least Square GAN),其数学表达为
\underset{D}{min}V_{\ ...
条件式GAN——CGAN、ACGAN
CGAN论文链接:Conditional Generative Adversarial Nets
原始的GAN在图像生成上取得了很大成功但是原始GAN仅以某个先验的随机噪声作为G的输入使得G并不总能生成我们想要的图像
因此便有了CGAN(Conditional GAN),即条件式GAN
如图所示,除了随机噪声z,CGAN还在G和D的输入端都加入了条件输入c条件输入c的选择以及c与z的结合方式可以有很多选择,没有特别限制
以mnist手写数字数据集为例可以令c为数字的类别,让后用keras的embedding层将c转换为和z尺寸相同的向量然后相乘
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101 ...
生成式对抗网络GAN
论文链接:Generative Adversarial Nets
对抗式生成网络GAN(Generative Adversarial Nets)由Ian J. Goodfellow大神在2014年提出GAN可以说是深度学习领域最划时代的idea之一了
GAN原理GAN的原理其实非常简单它包含一个生成器网络G(generator)和一个判别器网络D(discriminator)
G的输入是一个先验的随机噪声z,输出G(z)是一张图片D的输入x是一张图片,它需要输出一个概率,表示x是真实的而非由G生成的概率
G和D的训练过程是一个对抗过程即G要尽可能生成能“骗过”D的图片,而D要尽可能识别出图片的真假
这个过程的数学形式为
\underset{G}{min}\underset{D}{max}V(G,D)=E_{x\sim p_{\mathrm{data}}}[\log D(\boldsymbol{x})]+E_{z\sim p_{z}}[\log (1-D(G(\boldsymbol{z})))]其中$p{\mathrm{data}}$和$p{z}$分别表示真实数据的概率分布和输入噪声z ...
DCGAN——GAN与深度卷积
论文链接:Unsupervised Representation Learning with Deep Convolution Generative Adversarial Networks
DCGANGAN的提出为使用神经网络进行图像生成打开了新世界的大门而图像问题又与CNN有着很自然的关联于是卷积与GAN的融合——DCGAN(Deep Convolution GAN)便诞生了
DCGAN是第一个将CNN应用于GAN取得成功的模型它的主要特点是
将判别器中的池化下采样改为带步长的卷积,将生成器中的上采样改为分数步长卷积,也即反卷积
在模型中引入batchnorm(但生成器最后一层和判别器第一层不加入)
移除了隐藏层的全连接层
在生成器除最后一层外使用ReLU激活(原始GAN中使用了maxout)
在判别器中使用LeakyReLU激活
Keras实现代码中使用的是mnist数据集
此处代码中判别器没有用batchnorm,因为发现加了会造成判别器过强,进而导致collapse可能是mnist数据集太简单造成的
123456789101112131415161718192021222 ...