Seq2seq
Generation
我们希望NN能生成structured object,比如:一句话。这个问题我们已经知道要用RNN来解决了。
类似的,我们可以讲一副图片拆成一个个像素,用RNN生成。
但更好的方法是,我们应该让就近的像素对生成的像素进行影响,而非按行来。可以进行 filter + 3维记忆空间 的方法。
Conditional Generation
但更多的时候,我们会给机器一个条件作为输入,从而获得相应的输出。
比如:输入一副图片,机器输出一句话来描述这幅图像。
那我们就可以用一个CNN把图像转化成一个
v
e
c
t
o
r
vector
vector,然后再每个时刻都输入进RNN中,以防RNN忘记。
文字翻译也可以用类似的方法,其做法也并不复杂,大体可以分为两步:
- Encoder:把输入放进一个RNN中,最后输入一个 v e c t o r vector vector
- Decoder:把 v e c t o r vector vector每个时刻都输入另一个RNN中。
此外,在聊天机器人中,我们需要让之前的信息也输入到模型中,防止说重复的内容。
Attention
Attention是一种动态的Generation,即:每个时刻输入进Decoder的
v
e
c
t
o
r
vector
vector不一样。
这样做有两个优势:
- 有时输入太大,不能只用一个 v e c t o r vector vector表示
- 输出的时候可以只考虑一个部分,简化了运算
做法也不复杂:
z
0
z^0
z0表示0时刻的参数。
m
a
t
c
h
match
match是自己设计的函数,可以train。这样就得到了每个
h
h
h对应的
α
α
α。
之后,经过一个 softmax ,然后求和得到
c
c
c ,此时
c
c
c就是Decoder input 。此外,可以得到下一时刻的
z
1
z^1
z1。
Image Caption Generation
将每个图片划分区域,把每个区域的向量与当前时刻的
z
z
z进行运算得到
w
e
i
g
h
t
weight
weight,之后,进行 weighted sum,再交给 Decoder ,以此得到输出。
Memory Network
现在有这样的问题:我们有一篇文章Document,一个问题Query,我们需要输出一个答案Answer。
基本做法如下:
用
x
1
,
x
2
,
x
3
,
.
.
.
,
x
N
x^1,x^2,x^3,...,x^N
x1,x2,x3,...,xN表示文章的每个句子。向量q表示问题。两者经过Match函数得到对应的
α
α
α。而得到的新向量,可以与 q 进行运算,表示机器在反复“思考”。这个过程叫做 Hopping 。
更复杂的版本。
Neural Turing Machine
Neural Turing Machine 不仅可以读取memory,还可以修改memory。
基本流程如下:
我们现在有4个memory:
m
0
1
,
m
0
2
,
m
0
3
,
m
0
4
m_0^1,m_0^2,m_0^3,m_0^4
m01,m02,m03,m04,有对应的
w
e
i
g
h
t
weight
weight:
α
^
0
1
,
α
^
0
2
,
α
^
0
3
,
α
^
0
4
\widehat{α}_0^1,\widehat{α}_0^2,\widehat{α}_0^3,\widehat{α}_0^4
α
01,α
02,α
03,α
04。由此生成对应的向量
r
0
r^0
r0。函数
f
f
f输出三个值:
k
1
,
e
1
,
a
1
k^1,e^1,a^1
k1,e1,a1。
通过计算,得到新的
α
^
1
1
,
α
^
1
2
,
α
^
1
3
,
α
^
1
4
\widehat{α}_1^1,\widehat{α}_1^2,\widehat{α}_1^3,\widehat{α}_1^4
α
11,α
12,α
13,α
14(实际计算很复杂)。
然后再用
e
1
,
a
1
e^1,a^1
e1,a1修改memory得到
m
1
1
,
m
1
2
,
m
1
3
,
m
1
4
m_1^1,m_1^2,m_1^3,m_1^4
m11,m12,m13,m14。
这样就完成了一次更新。
Pointer Network
其实,凸包问题也可以用NN来解决。看起来可以用Seq2seq来解决,硬train一发即可。
但问题在于:输入的点集大小是不确定,train的时候可能只有50个点,输出的集合范围自然是1~50。但test的时候范围可能就变成了1-100。
这就需要对模型进行一点改造。
Recursive Network
是Recurrent Network的升级版本。
Application: Sentiment Analysis
比如,我要处理一个情感分析的问题。
对于Recursive,我们需要决定各个输入之间的关系。将某些输入值放在一起,输入到模型中。
Recursive Model
我们可以考虑用文法结构的顺序进行输入。
这个
f
f
f,不能用一个简单的函数。因此需要一个 network。
Recursive Neural Tensor Network
这个
f
f
f应该整什么样子呢。大概长下面这样。