前向网络,两层MLP,可以作为未归一化的Key-Value记忆结构
Feed-Forward Layers as Unmarlized Key-Value Memories.
前向传播结构
传统的两层神经网络可以被写为 F F ( x ) = W 2 σ ( W 1 x + b 1 ) + b 2 FF(x) = W_2\sigma(W_1x+b_1)+b_2 FF(x)=W2σ(W1x+b1)+b2, σ \sigma σ是非线性激活函数。如果去掉偏置,可以改写成 F F ( x ) = σ ( x ⋅ K T ) ⋅ V FF(x)=\sigma(x\cdot K^T)\cdot V FF(x)=σ(x⋅KT)⋅V。
神经记忆
一个神经记忆模块有
d
m
d_m
dm个key-value对,这个成对的kv就是记忆。每个key用一个d维的向量表示
k
i
k_i
ki,同时
d
m
d_m
dm个key就可以构成一个参数矩阵
K
∈
R
d
m
×
d
K\in\mathbb{R}^{d_m\times d}
K∈Rdm×d。同样我们可以定义value矩阵
V
∈
R
d
m
×
d
V\in\mathbb{R}^{d_m\times d}
V∈Rdm×d,对于一个输入向量
x
∈
R
d
x\in\mathbb{R}^{d}
x∈Rd,我们可以轻松的计算输入向量在
d
m
d_m
dm个keys上的分布(伪分布)
p
(
k
i
∣
x
)
∝
exp
(
x
⋅
k
i
)
p(k_i|x)\propto \exp(x\cdot k_i)
p(ki∣x)∝exp(x⋅ki)
以此分布查询key对应value的值进行聚合得到输出结果
M
N
(
x
)
=
∑
i
=
1
d
m
p
(
k
i
∣
x
)
v
i
MN(x)=\sum_{i=1}{d_m}p(k_i|x)v_i
MN(x)=i=1∑dmp(ki∣x)vi
如果用矩阵表示
M
N
(
x
)
=
s
o
f
t
m
a
x
(
x
⋅
K
T
)
⋅
V
MN(x) = softmax(x\cdot K^T)\cdot V
MN(x)=softmax(x⋅KT)⋅V