diff --git a/new/handson-1shot-learn-py/3.md b/new/handson-1shot-learn-py/3.md index 196daa3a299854baa766a7658c31f011ffa124eb..99abe441ec133146cadbf74b1f4964f5c0beb908 100644 --- a/new/handson-1shot-learn-py/3.md +++ b/new/handson-1shot-learn-py/3.md @@ -157,7 +157,7 @@ MANN 的读取操作与 NTM 的读取操作非常相似,唯一的区别是此 在 MetaNet 中,学习器的损失梯度是任务的*元信息*。 MetaNet 还有一个重要的问题:它如何使用快速权重和慢速权重进行预测? -在 MetaNet 中,将慢速权重和快速权重组合在一起,以在神经网络中进行预测,如下图所示。 在这里, ![](img/82d28676-d274-492d-b225-f62ea1afb9e4.png) 表示元素方式的和: +在 MetaNet 中,将慢速权重和快速权重组合在一起,以在神经网络中进行预测,如下图所示。 在这里,`⊕`表示元素方式的和: ![](img/e3036523-f829-413a-85ad-fe9838ae6684.png) @@ -167,7 +167,7 @@ MANN 的读取操作与 NTM 的读取操作非常相似,唯一的区别是此 元网络也遵循与匹配网络相似的训练过程。 在此,训练数据分为两种类型:支持集`S = (x'[i], y'[i])`和测试集`U = (x[i], y[i])`。 -请记住,目前,我们有四个网络( ![](img/b1693cef-6856-4f5b-8d6a-166d3b849467.png) )和四组要学习的模型参数`(θ, ϕ, w, v)`。 让我们看一下算法的所有步骤: +请记住,目前,我们有四个网络(`f[θ], g[φ], F[w], G[v])`)和四组要学习的模型参数`(θ, ϕ, w, v)`。 让我们看一下算法的所有步骤: ![](img/6a8a41af-c6a4-471a-8998-920cf7d1d0c7.png) @@ -175,34 +175,36 @@ MANN 的读取操作与 NTM 的读取操作非常相似,唯一的区别是此 1. 支持集`S`的样本的`K`个随机对。 -对于 ![](img/21e8c030-3401-4dec-b8eb-5c922c3aa143.png) : +对于`t = 1, ..., K`: -* 通过嵌入函数 ![](img/b26cfb6e-a6ea-4326-b855-dd57be08b573.png) 正向传播数据点。 -* 计算交叉熵损失( ![](img/201c9639-7931-42b8-a935-4ace8e8690cb.png) )。 +* 通过嵌入函数`f[θ]`正向传播数据点。 +* 计算交叉熵损失(`L_emb`)。 -2. 通过 LSTM 网络向前传递数据以计算 ![](img/c1484e71-bd8d-4319-9cb9-0a723f9f3f9d.png)![](img/4fd9eb0f-60a7-4fec-920a-1c1a76a31443.png) 。 +2. 通过 LSTM 网络向前传递数据以计算`θ⁺`:`θ⁺ = F[w](▽L_emb)`。 3. 接下来,遍历支持集`S`中的示例,并为每个示例计算快速权重。 同时,使用获得的嵌入内容更新外部存储器。 -对于 ![](img/3f9aefb6-5729-4162-bbb2-5f4e87a58375.png) : +对于`i = 1, ..., K`: -* 将基本学习器 ![](img/0f0f38db-1693-4019-a341-71d502ff77ef.png) (例如,分类模型)向前传递,并计算损失函数 ![](img/e1f67072-e37f-43d6-9754-596825823ed8.png) (例如,交叉熵)。 -* 计算基本学习器梯度 ![](img/3d68485f-50b6-4efc-8813-8a1413780300.png) ,并使用它们来计算示例级快速权重 ![](img/6b83e258-f733-4a61-b5f0-b950d7a3447c.png) 。 -* 将基础学习器 ![](img/b7a895fd-baa2-4fd6-a461-02d1d97e3e50.png) 的计算得出的快速权重存储在存储器的`M`部分的`i`位置处。 -* 在嵌入网络中使用 ![](img/fc3bd131-8270-4ec7-a311-27712cbbb4bb.png) 合并快速权重和缓慢权重。 -* 将支持样本转发通过嵌入网络并获得嵌入 ![](img/be762b21-d7be-4b10-8ec6-b753b2a3f4c2.png) 。 -* 将 ![](img/b1a785c2-dbb1-4d6e-97a8-d2cf40e9100f.png) 存储在内存`R`的`k`部分的`i`位置。 +* 将基本学习器`g[φ](x[i])`(例如,分类模型)向前传递,并计算损失函数`L_task[i]`(例如,交叉熵)。 +* 计算基本学习器梯度`▽L_task[i]`,并使用它们来计算示例级快速权重`φ⁺[i] = G[v](▽L_task[i])`。 +* 将基础学习器`φ⁺[i]`的计算得出的快速权重存储在存储器的`M`部分的`i`位置处。 +* 在嵌入网络中使用`⊕`合并快速权重和缓慢权重。 +* 将支持样本转发通过嵌入网络并获得嵌入`r'[i] = f[θ,θ⁺](x[i])`。 +* 将`r'[i]`存储在内存`R`的`k`部分的`i`位置。 -4. 最后,是时候使用测试集`U = (x[i], y[i])`构建训练损失了。 从 ![](img/bee139d6-e94e-441b-97bb-a200ca5c2d31.png) 开始。 +4. 最后,是时候使用测试集`U = (x[i], y[i])`构建训练损失了。 从`L_train = 0`开始。 -对于 ![](img/a0a602d8-ee63-4dcd-8c28-89fdce09a658.png) : +对于`j = 1, ..., L`: -* 将测试样本转发通过嵌入网络,并获得测试嵌入![](img/5d24deb2-37ef-4bdf-ad8b-eada7c9aa5ca.png)。 -* 计算支持集的存储嵌入`R`和获得的嵌入 ![](img/9d54431c-bdef-453c-9deb-210cb464738b.png) 之间的相似度。 您可以使用 ![](img/03d3b70a-00f5-402c-b211-8bab70416333.png) 来执行此操作。 在此,`R`是指存储在外部存储器中的数据。 -* 现在,通过使用支持集样本(`M`)的快速权重来计算基础学习器的快速权重( ![](img/41926d4a-5319-4280-9dfd-a9c61c8d32ee.png) )。 您可以使用 ![](img/71fb925b-26c9-48f8-8881-c2c7584123bd.png) 来执行此操作。 在此,`M`是指存储在外部存储器中的数据。 -* 使用最新的 ![](img/d8f9d717-265c-4374-8279-aa325b91498c.png) 将测试样本向前传递通过基本学习器,并计算损失函数 ![](img/e1f67072-e37f-43d6-9754-596825823ed8.png) 。 -* 使用 ![](img/14423e78-c644-4cec-b7dc-f5879e000a7a.png) 更新训练损失。 +* 将测试样本转发通过嵌入网络,并获得测试嵌入`r'[i] = f[θ,θ⁺](x[j])`。 +* 计算支持集的存储嵌入`R`和获得的嵌入`r[j]`之间的相似度。 您可以使用`a[j] = cos(R, r[j])`来执行此操作。 在此,`R`是指存储在外部存储器中的数据。 +* 现在,通过使用支持集样本(`M`)的快速权重来计算基础学习器的快速权重(`φ⁺`)。 您可以使用`φ⁺[j] = softmax(a[j])^T M`来执行此操作。 在此,`M`是指存储在外部存储器中的数据。 +* 使用最新的`φ⁺`将测试样本向前传递通过基本学习器,并计算损失函数`L_task[i]`。 +* 使用公式更新训练损失: -5. 使用 ![](img/2c7b6001-b226-47b4-ab23-4296938f9944.png) 更新所有参数`(θ, ϕ, w, v)`。 + ![](img/14423e78-c644-4cec-b7dc-f5879e000a7a.png) + +5. 使用`L_train`更新所有参数`(θ, ϕ, w, v)`。 在选择嵌入网络时,元网络使用 LSTM 架构。 如我们所见,匹配网络和 LSTM 元学习器也遵循相同的策略,分别用于提取数据和元信息的上下文嵌入。 这是因为 LSTM 架构倾向于记住历史,这使得元学习器的目标能够跨任务提取重要信息。