前言背景
在学习transformer时,文中出现的各种特殊结构的行业黑话使我大受打击,所以从头开始学习,势必要弄懂行业黑话,打不过就加入他们。为了了解Encoder-Decoder结构,所以选择这篇文章ByteNet进行分析。
介绍Transformer的源论文:Arxiv:Attention Is All You Need
Transformer论文中提供的源代码:Github:Tensor2Tensor
ByteNet原文
ByteNet的设计者是来自Google DeepMind(London UK)的研究人员。这是一篇基于CNN的Encoder-Decoder架构的文章。原文为:Arxiv:Neural Machine Translation in Linear Time。
1. Introduction详解
Introduction部分可以分为:1.任务综述;2.模型综述;3.结构综述;4.本文内容简介。
主要详解第四部分,从想象的角度一步一步分析。
ByteNet方法族的特征有两点:1.解码器压在编码器上;2.动态展开技术。所以整个结构应该长下面这个样子。
具体到ByteNet就是,ByteNet使用固定深度的一维卷积神经网络做编码器和解码器,并且使用了参数膨胀技术快速增加感知域,同时解码器中的卷积层是加掩码的。
2. Translation Model的要求
翻译可以用条件概率模型来看。假设源字符串为s,翻译后的字符串为t。
那么可以把它看成条件概率:
P
(
t
∣
s
)
P(t|s)
P(t∣s)。
对于给定的s,我们选择使得
P
(
t
∣
s
)
P(t|s)
P(t∣s)最大的那个t作为s的翻译。为了计算的方便,对该公式进行分解:
P
(
t
∣
s
)
=
P
(
t
0
,
t
1
,
⋯
,
t
n
∣
s
)
=
P
(
t
0
∣
s
)
×
P
(
t
1
∣
s
,
t
0
)
×
⋯
×
P
(
t
n
∣
s
,
t
0
,
t
1
,
t
2
,
t
3
,
⋯
,
t
n
−
1
)
=
P
(
t
0
∣
s
)
×
P
(
t
1
∣
s
,
t
0
)
×
⋯
×
P
(
t
n
∣
s
,
t
(
k
∣
k
<
n
,
k
≥
0
,
k
∈
Z
)
)
=
∏
i
=
0
n
P
(
t
i
∣
s
,
t
(
k
∣
k
<
i
,
k
≥
0
,
k
∈
Z
)
)
\begin{split} P(t|s)=&P(t_0,t_1,\cdots,t_n|s) \\=&P(t_0|s)\times P(t_1|s,t_0)\times \cdots \times P(t_n|s,t_0,t_1,t_2,t_3,\cdots,t_{n-1}) \\=&P(t_0|s)\times P(t_1|s,t_0)\times \cdots \times P(t_n|s,t_{(k|k<n,k\geq0,k\in Z )}) \\=&\prod_{i=0}^{n}P(t_i|s,t_{(k|k<i,k\geq 0,k\in Z )}) \end{split}
P(t∣s)====P(t0,t1,⋯,tn∣s)P(t0∣s)×P(t1∣s,t0)×⋯×P(tn∣s,t0,t1,t2,t3,⋯,tn−1)P(t0∣s)×P(t1∣s,t0)×⋯×P(tn∣s,t(k∣k<n,k≥0,k∈Z))i=0∏nP(ti∣s,t(k∣k<i,k≥0,k∈Z))
模型结构如下所示:
2.1 模型的三点要求
- 模型运行时间应该与输入输出字符串的长度成正比。
- 编码器的输出的长度应该与输入的长度成正比。也就是(resolution perserving)可以理解为尺寸相同。
- 前向信号和反向信号传播给所有参数的路径应该尽可能短。
其中专业黑话有:
long-range dependicies:计算多个乘积项的结果。
3. ByteNet结构
3.2 动态展开
因为输入序列s与翻译序列t长度很可能是不一致的,但是一般来说是正相关的,所以为了信息的保存,编码器要尽可能地保留信息,所以设置编码器的输出信息表示的长度为
∣
t
^
∣
|\hat{t}|
∣t^∣。关键在于这句话:
论文中设计的编码器输出信息的长度与输入序列的长度之间的关系为:
∣
t
^
∣
=
a
∣
s
∣
+
b
|\hat{t}|=a|s|+b
∣t^∣=a∣s∣+b
动态展开就是在编码器得到的信息基础上,根据条件概率分布以自回归:
y
t
=
f
(
y
k
<
t
,
x
)
y_t=f(y_{k<t},x)
yt=f(yk<t,x)的方式逐步生成目标序列。目标序列长度可以与表示序列的长度不同,以最终结束标志为准。这个过程得到的字符串可能是不定长的所以叫动态展开。
在动态展开过程中解码器每一步生成的字符
t
i
t_i
ti都是基于编码器的信息表示和之前的生成的
t
k
<
i
t_{k<i}
tk<i来生成的。也就是服从上面的条件概率公式。
3.3 embedding tensor(嵌入张量)
3.4 掩码一维卷积
参考文献:Arxiv:Pixel Recurrent Neural Networks
解码器使用一维加掩码的卷积层对输入嵌入张量进行分析。
掩码核尺寸大小为k。掩码可以用下式来表示:
通过这个掩码可以确保每次的预测不会用到之后的信息。
3.5 膨胀
本部分参考文献:Arxiv:Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs
用膨胀增加感知域。本论文借研究图像语义分割(即像素点分类)问题介绍了带有条件随机场的密集卷积神经网络,提出了“DeepLab”系统。
本论文主要参考文献为:
- Arxiv:Untangling Local and Global Deformations in Deep Convolutional Networks for Image Classification and Sliding Window Detection
- Arxiv:Efficient Inference in Fully Connected CRFs with Gaussian Edge Potentials
第一个参考文献是该模型的第一部分:带孔的atrous算法。
第二个参考文献是该模型的第二部分:全连接条件随机场。
本文中模型结构为:
语义分割的常见系统:
带孔的atrous算法
稀疏采样为:
通过对核的尺寸和步幅(stride)的控制可以控制输出的大小。
通过分析不难发现:假设源序列长度为n,output_stride(os)=1。采样后序列长度为m。m、n与kernel_size(ks)、input_stride(is)之间的关系为:
m
=
n
−
(
k
s
−
1
)
×
i
s
m=n-(ks-1)\times{is}
m=n−(ks−1)×is
对于上图我们有:
3
=
7
−
2
×
2
=
7
−
4
3=7-2\times2=7-4
3=7−2×2=7−4,也就是通过控制步幅可以控制采样大小。
所以如果进行t轮采样那么尺寸大小会变为:
n
−
t
×
(
k
s
−
1
)
×
i
s
n-t\times{(ks-1)\times{is}}
n−t×(ks−1)×is
3.1 EFFICIENT DENSE SLIDING WINDOW FEATURE EXTRACTION WITH THE HOLE ALGORITHM
好像是这样的:
左边为原始VGG-16结构,池化层后面有采样过程,丢失了大量信息,这样导致最后步幅为32。但是通过两个池化层不采样,大大保留了信息量,然后让卷积层和全连接层采样,实现步幅为8的信息提取。
3.2 CONTROLLING THE RECEPTIVE FIELD SIZE AND ACCELERATING DENSE COMPUTATION WITH CONVOLUTIONAL NETS
感知野与filter的尺寸有什么关系?看原文好像是说改了filter会影响感知野。
感知野的计算公式什么?
通过计算可以发现:
224
∗
224
=
0.25
∗
7
∗
7
∗
4096
224*224=0.25*7*7*4096
224∗224=0.25∗7∗7∗4096,
128
∗
128
=
0.25
∗
4
∗
4
∗
4096
128*128=0.25*4*4*4096
128∗128=0.25∗4∗4∗4096。
换句话说感知野
n
∗
n
n*n
n∗n与全连接层所得到的尺寸大小
m
∗
m
m*m
m∗m之间的关系为:
n
∗
n
=
m
∗
m
∗
4096
∗
0.25
n*n=m*m*4096*0.25
n∗n=m∗m∗4096∗0.25
但是好奇怪,为什么是0.25?同时对第二个内容又不存在这种关系。
VGG-16网络的感知野尺寸是
224
×
224
224\times224
224×224,包含零前缀部分。在将网络变为卷积网络以后,感知野尺寸为
404
×
404
404\times404
404×404。
还是借助于前面画的结构图,左边的源VGG-16的感知野尺寸为
224
×
224
224\times224
224×224,后面这个感知野尺寸为:
404
×
404
404\times404
404×404。
在网络变为完全卷积层时,第一个全连接层有4096个filter,每个尺寸为
7
×
7
7\times7
7×7。并成为计算瓶颈。块越大计算越慢。
这个尺寸与感知野之间的关系可能还要看论文才能理解。但是论文中此节并没有列出参考文献。所以我目前构思不出来。
结论
所以结论就是通过采样算法实现了感知野的控制。。。。。,也就是通过采样实现膨胀?
3.6 残差模块
参考文献:Arxiv:Identity Mappings in Deep Residual Networks
残差模块是为了解决梯度消失问题。从数学公式上来说就是:
y
=
f
(
x
)
+
x
y=f(x)+x
y=f(x)+x。