深入理解 DNC 架构:从原理到 TensorFlow 实现
1. 无干扰写入机制
传统模型在写入操作时可能存在干扰问题,为了解决这个问题,引入了使用向量(usage vector)$u_t$。使用向量是一个长度为 $N$ 的向量,每个元素的值在 0 到 1 之间,表示对应内存位置的使用程度,0 表示完全空闲,1 表示完全使用。
初始时,$u_0 = 0$,并在每个步骤中根据使用信息进行更新。为了确定新数据应分配到哪个内存位置,需要计算分配权重(allocation weighting)$a_t$。具体步骤如下:
1. 对使用向量进行排序,得到空闲列表 $\phi_t$,即按使用程度升序排列的内存位置索引列表。
2. 使用以下公式计算分配权重:
- $a_{t \phi_t j} = (1 - u_{t \phi_t j}) \prod_{i = 1}^{j - 1} u_{t \phi_t i}$,其中 $j \in [1, \cdots, N]$。
通过这个公式,最空闲的位置将获得最大的权重,从而确保模型能够聚焦于单个空闲位置进行写入,提高了可靠性并加快了训练速度。
最终的写入权重 $w_t^w$ 由分配权重 $a_t$ 和基于内容寻址机制得到的查找权重 $c_t^w$ 共同决定:
$w_t^w = g_t^w g_t^a a_t + (1 - g_t^a) c_t^w$
其中,$g_t^w$ 和 $g_t^a$ 是写入门和分配门,取值在 0 到 1 之间,它们控制着写入操作。$g_t^w$ 决定是否进行写入,$g_t^a$ 决定是使用分配权重写入新位置还是使用查找权重修改现有值。
超级会员免费看
订阅专栏 解锁全文

1223

被折叠的 条评论
为什么被折叠?



