提交 9a6f9207 编写于 作者: W wizardforcel

2021-01-18 10:54:48

上级 8c8e0bec
......@@ -120,7 +120,7 @@ Rosenblatt 还介绍了权重的概念(`w`1,`w`2,…,`w`n),这些数
图 2.6:每个神经元执行的计算
在这里,如前所述,`X`是指输入数据,`W`是确定输入数据重要程度的权重,`b` 偏差值和 sigma(![1](img/B15778_02_Formula1.png))表示应用于线性函数的激活函数。
在这里,如前所述,`X`是指输入数据,`W`是确定输入数据重要程度的权重,`b`偏置值和 sigma(`σ`)表示应用于线性函数的激活函数。
激活函数的目的是将非线性引入模型。 有不同的激活函数可供选择,当今最常用的激活函数列表如下:
......@@ -182,7 +182,7 @@ Rosenblatt 还介绍了权重的概念(`w`1,`w`2,…,`w`n),这些数
图 2.14:MSE 损失函数
此处,`n`是指样本数,![4](img/B15778_02_Formula2.png)是基本真值,![5](img/B15778_02_Formula3.png)是预测值。
此处,`n`是指样本数,`y[i]`是基本真值,`y_hat[i]`是预测值。
* **交叉熵/多类交叉熵**:此函数通常用于二进制或多类分类模型。 它测量两个概率分布之间的差异; 较大的损失函数将表示较大的差异。 因此,这里的目标是使损失函数最小化:
......@@ -190,7 +190,7 @@ Rosenblatt 还介绍了权重的概念(`w`1,`w`2,…,`w`n),这些数
图 2.15:交叉熵损失函数
同样,`n`是指样本数。 ![2](img/B15778_02_Formula4.png)和![3](img/B15778_02_Formula5.png)分别是基本事实和预测值。
同样,`n`是指样本数。 `y[i]``y_hat[i]`分别是基本事实和预测值。
### 反向传播
......
......@@ -107,19 +107,19 @@ Logistic 回归是**判别式分类器**的一种形式,在判别式分类器
![](img/aaedf542-dd84-4589-8774-94190df0b2f6.png)
在该等式中, <sub>![](img/9e687802-529b-47b4-b926-f79460e42dde.png)</sub><sub>![](img/de6b828f-f1ce-4715-8f21-7b34bfb928ce.png)</sub> 代表连体神经网络,`m`代表裕度。
在该等式中, `D[w] = √((f(X1) - f(X2))²)``f(X)`代表连体神经网络,`m`代表裕度。
让我们进一步求解损耗方程。 以![](img/ebfeb884-3dee-4849-91bd-8021071d9860.png)表示相似的货币对:
让我们进一步求解损耗方程。 以`Y = 1`表示相似的货币对:
![](img/029593cf-8b9d-4162-8c8f-4b58a97c679d.png)
如果两个输入`X1``X2`相同,则意味着连体网络应该能够学习制作![](img/e843011f-0dae-4ee9-aab1-b30b397c688f.png)。 我们在方程式中增加余量`m`,以使连体网络不使`W = 0`,从而使![](img/e42aca85-376a-4e55-8283-2c06a1ea0acb.png)。 通过强制执行边距,我们确保连体网络学习到良好的决策边界。
如果两个输入`X1``X2`相同,则意味着连体网络应该能够学习制作`D²[w] = 0`。 我们在方程式中增加余量`m`,以使连体网络不使`W = 0`,从而使`D²[w] = 0`。 通过强制执行边距,我们确保连体网络学习到良好的决策边界。
类似地,对于不相似对的`Y = 0`,这将产生以下结果:
![](img/50d96d9a-18f2-41b9-a4af-0df76984984e.png)
从数字上讲,对于相同的对情况,仅当 <sub>![](img/9e17b69d-3b92-4dd5-a673-d84ba21155d2.png)</sub> 时,损失函数才为零,否则它将表现为回归损失,并尝试学习特征以确保 <sub>![](img/0055203a-3cac-4b67-af42-8dcee695db46.png)</sub> 得到 接近 0。
从数字上讲,对于相同的对情况,仅当`D[w] = 0`时,损失函数才为零,否则它将表现为回归损失,并尝试学习特征以确保`D[w]`接近 0。
尽管对比损失函数是学习判别特征的一种好方法,但是在连体网络架构的其他修改版本中,对比损失函数不能非常清楚地学习决策边界。 在这种情况下,我们可以使用称为**三重损失**的新损失函数,该函数可帮助架构获得更好的结果。
......@@ -133,7 +133,7 @@ Logistic 回归是**判别式分类器**的一种形式,在判别式分类器
* **正例**`P`):类似于锚点的数据点
* **负例**`N`):与锚点不同的数据点
考虑到 <sub>![](img/e9178178-fb66-4068-9c95-136daa792b82.png)</sub> 是连体网络的输出,理想情况下,我们可以假设以下内容:
考虑到`f(X)`是连体网络的输出,理想情况下,我们可以假设以下内容:
![](img/73760b22-b575-40f1-85be-396c6822a5d5.png)
......@@ -141,7 +141,7 @@ Logistic 回归是**判别式分类器**的一种形式,在判别式分类器
![](img/e89f8c0f-2387-40bf-9cd0-b346ff3fdc52.png)
由于我们不希望连体网络学习 <sub>![](img/964d20e8-bd63-4db4-9325-966883692fbe.png)</sub> ,因此我们将添加余量,类似于对比损失函数:
由于我们不希望连体网络学习`f(X) = 0, X ∈ R`,因此我们将添加余量,类似于对比损失函数:
![](img/aa0e72e6-1a0c-4888-a75d-1e4276061bb4.png)
......@@ -193,16 +193,15 @@ Logistic 回归是**判别式分类器**的一种形式,在判别式分类器
# 建模级别–匹配的网络架构
匹配网络将支持集(`k`示例)映射到分类器 <sub>![](img/c628b9bf-2301-44ff-a215-34fe294bf46b.png)</sub> 的支持集(`k`示例)`S = (x[i], x[i]), i = 1, ..., k`。 基本上,匹配网络将映射 <sub>![](img/32387eb6-1143-4e6f-b8d2-77d528ed3584.png)</sub> 定义为参数化神经网络 <sub>![](img/36d4ebe3-ed3d-4215-adb1-6257ba483e8f.png)</sub> 。 如果我们谈论 <sub>![](img/b38f3f2d-c7cc-4411-8ba8-53f4be93e84e.png)</sub> 的最简单形式,它将是支持集标签的线性组合形式:
匹配网络将支持集(`k`示例)映射到分类器`C[s](·)`的支持集(`k`示例)`S = (x[i], x[i]), i = 1, ..., k`。 基本上,匹配网络将映射`S -> C[s](·)`定义为参数化神经网络`P(y_hat | x_hat, S)`。 如果我们谈论`P(y_hat | x_hat, S)`的最简单形式,它将是支持集标签的线性组合形式:
![](img/94576b62-c681-443b-ba09-e6e280e2407f.png)
在此, <sub>![](img/9d27137a-d907-4cdc-8669-738c248917ac.png)</sub> 是 softmax 函数。 从逻辑上看,我们可以看到 <sub>![](img/31dd3df4-a4c0-4def-a0a7-dac7a250545d.png)</sub> 正在非参数意义上正确计算。
在此,`a(x_hat, x[i])`是 softmax 函数。 从逻辑上看,我们可以看到`y_hat`正在非参数意义上正确计算。
例如,如果我们有 2 个类,分别为 0 和 1,则 2 个示例(`k = 2`)如下:
<sub>![](img/c7fe5273-416a-40fb-9fe1-d82792a71a7f.png)</sub>
例如,如果我们有 2 个类,分别为 0 和 1,则 2 个示例(`k = 2`)如下:`y = (0, 1)`
通过将![](img/da9905e0-8ddb-4f7a-a0e2-da4fcb2b81a6.png)变成一键编码向量,我们将获得以下信息:
通过将`y`变成一键编码向量,我们将获得以下信息:
![](img/725b5feb-44c8-43ed-8a13-b4c530b590e8.png)
......@@ -218,11 +217,11 @@ Logistic 回归是**判别式分类器**的一种形式,在判别式分类器
![](img/d3c88db6-018b-4740-a01d-e40f57052f55.png)
总体而言,我们可以看到![](img/962034ed-f99c-497c-960f-aa8b1b4031b0.png)如何成为确定测试输入![](img/cfcb54a1-b5cc-477a-905d-262404b93966.png)属于哪个类别的概率的线性组合。 要将任何形式的函数转换为概率空间,深度学习社区使用的最佳选择是 softmax 函数,使得![](img/9d27137a-d907-4cdc-8669-738c248917ac.png)如下:
总体而言,我们可以看到`y_hat`如何成为确定测试输入`x_hat`属于哪个类别的概率的线性组合。 要将任何形式的函数转换为概率空间,深度学习社区使用的最佳选择是 softmax 函数,使得`a(x_hat, x[i])`如下:
![](img/6d449b9b-9813-4ed7-9f19-37f2889465e4.png)
在此,![](img/b4a28f36-a520-4491-b236-928889ca8b83.png)是训练集和测试数据点的嵌入之间的余弦相似度函数。
在此,`c`是训练集和测试数据点的嵌入之间的余弦相似度函数。
现在,出现了关于如何从测试集和训练集中提取嵌入的问题。 任何形式的神经网络都可以工作。 对于图像,著名的 VGG16 或 Inception Net 将通过使用迁移学习为测试图像和训练图像提供适当的嵌入; 本质上,这是过去大多数基于度量的方法所做的,但是无法获得人类水平的认知结果。
......@@ -230,7 +229,7 @@ VGG16 和 Inception Net 是深度学习架构,它们在 ImageNet 数据集上
匹配网络指出了上述简单化非参数方法的两个问题:
* **问题 1**:即使分类策略 <sub>![](img/17dc3f3b-c6a5-4351-b438-0bea4fdd2273.png)</sub>已设定条件,训练集图像的嵌入也彼此独立,而不认为它们是支持集的一部分 在支持集上。
* **问题 1**:即使分类策略`P(y_hat | x_hat, S)`已设定条件,训练集图像的嵌入也彼此独立,而不认为它们是支持集的一部分 在支持集上。
**解决方案**:匹配网络使用**双向长短期记忆****LSTM**)在整个支持范围内启用每个数据点的编码 组。 通常,LSTM 用于理解数据序列,因为它们能够使用其单元内部的门保持整个数据的上下文。 同样,使用双向 LSTM 可以更好地理解数据序列。 匹配网络使用双向 LSTM 来确保支持集中一幅图像的嵌入将具有所有其他图像嵌入的上下文。
......@@ -240,7 +239,7 @@ VGG16 和 Inception Net 是深度学习架构,它们在 ImageNet 数据集上
![](img/d8c095d5-729c-49ac-8834-ef3b2c1f861e.png)
这里,`K`是展开步骤的数量, <sub>![](img/162a5cde-5de6-4e81-8e0c-1bf34cbf2a93.png)</sub> 是通过 VGG16 / Inception 网络获得的测试图像嵌入; <sub>![](img/7926b74a-e61c-4f2c-a766-bc5832a16f23.png)</sub> 是将测试图像嵌入带到同一空间的样本集。
这里,`K`是展开步骤的数量,`embeddings(x_hat)`是通过 VGG16 / Inception 网络获得的测试图像嵌入; `g(S)`是将测试图像嵌入带到同一空间的样本集。
下图说明了匹配的网络架构:
......@@ -248,17 +247,17 @@ VGG16 和 Inception Net 是深度学习架构,它们在 ImageNet 数据集上
匹配的网络架构解决了通过设置框架在训练模型时复制测试条件的一次学习问题,如*训练过程*部分中所述。 匹配网络的架构包含许多子部分。 为了简化和更清楚地了解它,我们将从左到右进行每个过程:
1. 作为预处理数据的一部分,将创建`k`示例的支持集 S 作为 <sub>![](img/81c53f2c-7a5e-46bc-9381-7f684d8346d1.png)</sub>
1. 作为预处理数据的一部分,将创建`k`示例的支持集 S 作为`(x[i], y[i]), i = 1 ... k`
2. 获取支持集后,它会通过标准特征提取层(`g`),例如 VGG 或 Inception。
3. 在提取支持集(S)的嵌入(`g`层的输出)之后,将它们放入双向 LSTM 架构中。 这有助于模型学习支持集中存在的标签的概率分布。
4. 与训练集类似,查询图像(即测试图像)的全上下文嵌入提取也经历了组合的双向 LSTM 架构,同时从 <sub>![](img/b3de2e24-25bf-4ebb-b8dc-005c78e966da.png)</sub> 获得了贡献,从而 映射到相同的嵌入空间。
5. 从这两种架构获得输出后,这些输出将通过 softmax 层(也称为注意内核步骤 <sub>![](img/c6fbdc1f-b476-4ba7-a8d9-b85edb929080.png)</sub> )传递。
4. 与训练集类似,查询图像(即测试图像)的全上下文嵌入提取也经历了组合的双向 LSTM 架构,同时从`g(x[i)`获得了贡献,从而 映射到相同的嵌入空间。
5. 从这两种架构获得输出后,这些输出将通过 softmax 层(也称为注意内核步骤`a(h[k-1], g(x[i]))`)传递。
6. 然后,从 <sub>![](img/65804ec8-e01d-4379-888c-44d1128cee54.png)</sub><sub>![](img/c1427030-3f4c-46af-a48e-af649e85f951.png)</sub> 获得的输出用于检查查询图像属于哪个类别:
6. 然后,从`g(x[i])``f'(x)`获得的输出用于检查查询图像属于哪个类别:
![](img/61fbf48b-9b8f-4de8-96b1-487001701281.png)
在此等式中, <sub>![](img/bcaaae1f-40be-41b2-8e8f-ee8101d417ca.png)</sub> 是支持集中标签的加权和。
在此等式中,`y_hat`是支持集中标签的加权和。
在此,注意核是 softmax 函数,其余弦距离的值介于`g(x[i])``f'(x)`之间。 为了训练模型,我们可以使用任何基于分类的损失函数,例如交叉熵损失函数。
......@@ -776,7 +775,7 @@ class Embeddings_extractor(nn.Module):
return x
```
3. 在分类器之后创建注意力模型。 <sub>![](img/86322c77-c099-4a51-8b1f-a082d5730125.png) </sub> =余弦相似度的 softmax:
3. 在分类器之后创建注意力模型。`a(x, x_hat)`余弦相似度的 softmax:
```py
class AttentionalClassify(nn.Module):
......
......@@ -46,31 +46,31 @@ MAML 的目的是为模型的参数提供良好的初始化,从而以较少的
要了解 MAML 的一次学习/几次学习,首先,我们需要学习某些术语。 这些类似于我们在匹配网络时学到的知识:
* `T`:这表示各种任务-例如,我们希望我们的模型学习识别猫,狗,马等,以及`T[i]`代表一种识别猫的训练模型。 在此, <sub>![](img/8ea63037-a58c-442f-92f2-9d07e3a87639.png)</sub>
* `T`:这表示各种任务-例如,我们希望我们的模型学习识别猫,狗,马等,以及`T[i]`代表一种识别猫的训练模型。 在此,`T[i] ∈ T`
* `P(T)`:这表示所有任务之间的概率分布。 我们的目标是通过 MAML 学习`P(T)`
* `L(T)`:这表示任务生成的损失函数`T`数据点。 对于分类,我们可以使用交叉熵损失:
![](img/db9617c8-2ef5-4a11-8dec-bf17f01a1a38.png)
假设我们希望训练一个分类模型 <sub>![](img/f05abb5c-a3bc-44c9-9885-79742b208881.png)</sub> ,该模型可以学习识别图像中的猫,狗和马。 让我们逐步介绍如何设置 MAML:
假设我们希望训练一个分类模型`f[θ]`,该模型可以学习识别图像中的猫,狗和马。 让我们逐步介绍如何设置 MAML:
1. 随机初始化模型参数- <sub>![](img/3bf20bc5-9fcc-4e0c-958f-b5f45875dac2.png)</sub>
1. 随机初始化模型参数`θ ~ N(0, 1)`
2. 重复直到完成。
3.`P(T)`中提取`T[i]`-例如,我们从所有可能的任务中随机抽取识别猫的任务。
4. 对于从`P(T)`采样的所有`T[i]`,执行以下操作:
* `T[i]`的样本 K 训练数据点 <sub>![](img/7e325469-9556-4a59-a147-35ab0b382aa3.png)</sub> (对于一次学习,`K = 1`)。
* 前向穿过层( <sub>![](img/50d12fb6-9f87-49ba-ae54-e3dcf83b4116.png)</sub> ),以计算 <sub>![](img/ff48dbe2-8656-458b-bc25-caae8e59e015.png)</sub> <sub>![](img/1a533a78-541e-43e9-aa2c-8befc6481991.png)</sub>
* 使用梯度下降法更新参数。 由于我们正在针对特定任务训练模型,因此我们将学习 <sub>![](img/0e7efd36-3d1a-4f69-860f-4a537cec5ea7.png)</sub> (特定于任务的参数):
* `T[i]`的样本 K 训练数据点`D[i] = (x[i], y[i])`(对于一次学习,`K = 1`)。
* 前向穿过层(`f[θ]`),以计算`L[T[i]]`<sub>![](img/1a533a78-541e-43e9-aa2c-8befc6481991.png)</sub>
* 使用梯度下降法更新参数。 由于我们正在针对特定任务训练模型,因此我们将学习`θ'[i]`(特定于任务的参数):
![](img/4848ff3d-a327-43fe-8c92-7d6f69977ac1.png)
* 来自`T[i]`的样本测试数据点 <sub>![](img/4de777ad-1428-4472-b982-236c62396e2a.png)</sub> ,用于元更新。
* 来自`T[i]`的样本测试数据点`D'[i] = (x[i], y[i])`,用于元更新。
结束`for`循环。
5. 通过使用模型 <sub>![](img/a658ddf5-fd7d-4275-85fe-3588a5d49214.png)</sub> 上的采样测试数据点 <sub>![](img/f27f8c70-0ded-49e9-9df9-79a17431f23c.png)</sub> 计算损耗及其梯度来更新 <sub>![](img/005304cd-40b7-4175-bdd3-0e190c4b6dec.png)</sub>
5. 通过使用模型`f[θ'[i]]`上的采样测试数据点`D'[i]`计算损耗及其梯度来更新`θ`
![](img/00a98b32-110e-44d8-9a49-e36078be0d57.png)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册