提交 0871b3bb 编写于 作者: W wizardforcel

2020-12-27 13:45:32

上级 aba22fe9
......@@ -123,11 +123,11 @@
麻省理工学院技术评论,[《神经网络学习通过面孔识别犯罪分子》](https://blog.keras.io/the-limitations-of-deep-learning.html)
该论文在科学界和大众媒体中引起了极大轰动。 所提出的解决方案的一个关键问题是它不能正确地识别输入数据中固有的偏差。 即,本研究中使用的数据来自两个不同的来源:一个用于罪犯,一个用于非罪犯。 一些研究人员建议,他们的算法可以识别与研究中使用的不同数据源相关的模式,而不是从人们的面部识别相关模式。 尽管可以对模型的可靠性进行技术上的考虑,但主要的批评是出于道德基础:人们应该清楚地认识到深度学习算法所使用的输入数据的固有偏差,并考虑其应用将如何对人们的学习产生影响。 生活。
该论文在科学界和大众媒体中引起了极大轰动。 所提出的解决方案的一个关键问题是它不能正确地识别输入数据中固有的偏差。 即,本研究中使用的数据来自两个不同的来源:一个用于罪犯,一个用于非罪犯。 一些研究人员建议,他们的算法可以识别与研究中使用的不同数据源相关的模式,而不是从人们的人脸识别相关模式。 尽管可以对模型的可靠性进行技术上的考虑,但主要的批评是出于道德基础:人们应该清楚地认识到深度学习算法所使用的输入数据的固有偏差,并考虑其应用将如何对人们的学习产生影响。 生活。
### 注意
蒂莫西·雷维尔(Timothy Revell),[《用于“识别”罪犯的面部识别技术的关注》](https://www.newscientist.com/article/2114900-concerns-as-face-recognition-tech-used-to-identify-criminals/)
蒂莫西·雷维尔(Timothy Revell),[《用于“识别”罪犯的人脸识别技术的关注》](https://www.newscientist.com/article/2114900-concerns-as-face-recognition-tech-used-to-identify-criminals/)
为了使进一步了解学习算法(包括深度学习)中的道德主题,请参阅 [AI Now Institute](https://ainowinstitute.org/) 为了解智能系统的社会意义所做的工作。
......
# 前言
《Python 元学习实用指南》解释了元学习的基础知识,并帮助您了解元学习的概念。 您将经历各种一次性学习算法,例如连体,原型,关系和内存增强网络,并在 TensorFlow 和 Keras 中实现它们。 您还将了解最新的元学习算法,例如与模型无关的元学习(MAML),Reptile 和通过元学习进行快速上下文适应(CAML)。 然后,您将探索如何使用 meta-SGD 快速学习,并发现如何使用元学习进行无监督学习。
《Python 元学习实用指南》解释了元学习的基础知识,并帮助您了解元学习的概念。 您将经历各种一次学习算法,例如连体,原型,关系和内存增强网络,并在 TensorFlow 和 Keras 中实现它们。 您还将了解最新的元学习算法,例如与模型无关的元学习(MAML),Reptile 和通过元学习进行快速上下文适应(CAML)。 然后,您将探索如何使用元 SGD 快速学习,并发现如何使用元学习进行无监督学习。
# 这本书是给谁的
......
......@@ -38,15 +38,15 @@
# 学习初始化
在这种方法中,我们尝试学习最佳的初始参数值。 那是什么意思? 假设我们正在建立一个神经网络来对图像进行分类。 首先,我们初始化随机权重,计算损失,并通过梯度下降使损失最小化。 因此,我们将通过梯度下降找到最佳权重,并将损失降到最低。 代替随机初始化权重,如果我们可以使用最佳值或接近最佳值来初始化权重,那么我们可以更快地达到收敛,并且可以很快学习。 在接下来的章节中,我们将看到如何使用 MAML,Reptile 和 Meta-SGD 等算法精确找到这些最佳初始权重。
在这种方法中,我们尝试学习最佳的初始参数值。 那是什么意思? 假设我们正在建立一个神经网络来对图像进行分类。 首先,我们初始化随机权重,计算损失,并通过梯度下降使损失最小化。 因此,我们将通过梯度下降找到最佳权重,并将损失降到最低。 代替随机初始化权重,如果我们可以使用最佳值或接近最佳值来初始化权重,那么我们可以更快地达到收敛,并且可以很快学习。 在接下来的章节中,我们将看到如何使用 MAML,Reptile 和SGD 等算法精确找到这些最佳初始权重。
# 学习优化器
在这种方法中,我们尝试学习优化器。 我们通常如何优化神经网络? 我们通过在大型数据集上进行训练来优化神经网络,并使用梯度下降来最大程度地减少损失。 但是在少数学习设置中,梯度下降失败了,因为我们将拥有较小的数据集。 因此,在这种情况下,我们将学习优化器本身。 我们将有两个网络:一个实际尝试学习的基础网络和一个优化该基础网络的元网络。 在接下来的部分中,我们将探讨其工作原理。
# 学习通过梯度下降学习梯度下降
# 通过梯度下降来元学习梯度下降
现在,我们将看到一种有趣的元学习算法,称为学习通过梯度下降学习梯度下降。 这个名字不是很令人生畏吗? 好吧,事实上,它是最简单的元学习算法之一。 我们知道,在元学习中,我们的目标是元学习过程。 通常,我们如何训练神经网络? 我们通过计算损耗并通过梯度下降使损耗最小化来训练我们的网络。 因此,我们使用梯度下降来优化模型。 除了使用梯度下降,我们还能自动学习此优化过程吗?
现在,我们将看到一种有趣的元学习算法,称为“通过梯度下降来元学习梯度下降”。 这个名字不是很令人生畏吗? 好吧,事实上,它是最简单的元学习算法之一。 我们知道,在元学习中,我们的目标是元学习过程。 通常,我们如何训练神经网络? 我们通过计算损耗并通过梯度下降使损耗最小化来训练我们的网络。 因此,我们使用梯度下降来优化模型。 除了使用梯度下降,我们还能自动学习此优化过程吗?
但是我们如何学习呢? 我们用**循环神经网络****RNN**)取代了传统的优化器(梯度下降)。 但这如何工作? 如何用 RNN 代替梯度下降? 如果您仔细研究,我们在梯度下降中到底在做什么? 这基本上是从输出层到输入层的一系列更新,我们将这些更新存储在一个状态中。 因此,我们可以使用 RNN 并将更新存储在 RNN 单元中。
......@@ -81,9 +81,9 @@
因此,通过这种方式,我们通过梯度下降学习梯度下降优化。
# 优化作为快速学习的模型
# 为几次学习优化模型
我们知道,在几次射击学习中,我们从较少的数据点中学习,但是如何在几次射击学习环境中应用梯度下降呢? 在几次学习设置中,由于数据点很少,梯度下降突然失败。 梯度下降优化需要更多的数据点才能达到收敛并最大程度地减少损失。 因此,我们需要在少数情况下获得更好的优化技术。 假设我们有一个由某些参数`θ`参数化的`f`模型。 我们使用一些随机值初始化此参数`θ`,并尝试使用梯度下降法找到最佳值。 让我们回想一下梯度下降的更新方程:
我们知道,在几次学习中,我们从较少的数据点中学习,但是如何在几次学习环境中应用梯度下降呢? 在几次学习设置中,由于数据点很少,梯度下降突然失败。 梯度下降优化需要更多的数据点才能达到收敛并最大程度地减少损失。 因此,我们需要在少数情况下获得更好的优化技术。 假设我们有一个由某些参数`θ`参数化的`f`模型。 我们使用一些随机值初始化此参数`θ`,并尝试使用梯度下降法找到最佳值。 让我们回想一下梯度下降的更新方程:
![](img/deada297-d555-46fb-b0c7-97c407cb09cb.png)
......@@ -146,7 +146,7 @@
我们首先了解了元学习是什么,以及元学习中如何使用单发,少发和零发学习。 我们了解到,支持集和查询集更像是火车集和测试集,但每个类中都有`k`个数据点。 我们还看到了`n`-方式 k 次的含义。 后来,我们了解了不同类型的元学习技术。 然后,我们探索了通过梯度下降学习梯度下降的学习方法,其中我们看到了 RNN 如何用作优化器来优化基础网络。 后来,我们将优化视为快速学习的模型,其中我们使用 LSTM 作为元学习器,以在快速学习环境中进行优化。
在下一章中,我们将学习称为连体网络的基于度量的元学习算法,并且将了解如何使用连体网络执行面部和音频识别。
在下一章中,我们将学习称为连体网络的基于度量的元学习算法,并且将了解如何使用连体网络执行人脸和音频识别。
# 问题
......
......@@ -52,7 +52,7 @@
# 连体网络的应用
如我们所知,连体网络通过使用相同的架构找到两个输入值之间的相似性来学习。 它是涉及两个实体之间的计算相似性的任务中最常用的一次学习算法之一。 它功能强大且强大,可作为低数据问题的解决方案。
如我们所知,连体网络通过使用相同的架构找到两个输入值之间的相似性来学习。 它是涉及两个实体之间的计算相似性的任务中最常用的一次学习算法之一。 它功能强大且强大,可作为低数据问题的解决方案。
在发表连体网络的[第一篇论文](https://papers.nips.cc/paper/769-signature-verification-using-a-siamese-time-delay-neural-network.pdf)中,作者描述了网络对于签名验证任务的重要性。 签名验证任务的目的是识别签名的真实性。 因此,作者用真正的和不正确的签名对训练了连体网络,并使用了卷积网络从签名中提取特征。 提取特征后,他们测量了两个特征向量之间的距离以识别相似性。 因此,当出现新的签名时,我们提取特征并将其与签名者存储的特征向量进行比较。 如果距离小于某个阈值,则我们接受签名为真实签名,否则我们拒绝签名。
......
# 原型网络及其变体
在上一章中,我们了解了什么是连体网络以及如何将它们用于执行少量学习任务。 我们还探讨了如何使用连体网络进行面部和音频识别。 在本章中,我们将介绍另一种有趣的几次学习算法,称为原型网络,该算法能够将其推广到训练集中没有的班级。 我们将从了解什么是原型网络开始,然后我们将了解如何使用原型网络在 omniglot 数据集中执行分类任务。 然后,我们将看到原型网络的不同变体,例如高斯原型网络和半原型网络。
在上一章中,我们了解了什么是连体网络以及如何将它们用于执行少量学习任务。 我们还探讨了如何使用连体网络进行人脸和音频识别。 在本章中,我们将介绍另一种有趣的几次学习算法,称为原型网络,该算法能够将其推广到训练集中没有的班级。 我们将从了解什么是原型网络开始,然后我们将了解如何使用原型网络在 omniglot 数据集中执行分类任务。 然后,我们将看到原型网络的不同变体,例如高斯原型网络和半原型网络。
在本章中,您将了解以下内容:
......@@ -43,7 +43,7 @@
![](img/a325ba73-ced0-470a-8615-5219bb5bbe1f.png)
原型网络不仅用于单次/几次射击学习,而且还用于零次学习。 考虑以下情况:每个类没有数据点,但是您具有包含每个类的高级描述的元信息。 因此,在这些情况下,我们从每个类的元信息中学习嵌入,以形成类原型,然后使用该类原型进行分类。
原型网络不仅用于单次/几次学习,而且还用于零次学习。 考虑以下情况:每个类没有数据点,但是您具有包含每个类的高级描述的元信息。 因此,在这些情况下,我们从每个类的元信息中学习嵌入,以形成类原型,然后使用该类原型进行分类。
# 算法
......@@ -218,7 +218,7 @@ def get_embeddings(support_set, h_dim, z_dim, reuse=False):
return net
```
请记住,我们不会使用整个数据集进行训练; 由于我们使用的是一次学习,因此我们从每个班级中抽取一些数据点作为支持集,并以情景方式使用支持集训练网络。
请记住,我们不会使用整个数据集进行训练; 由于我们使用的是一次学习,因此我们从每个班级中抽取一些数据点作为支持集,并以情景方式使用支持集训练网络。
现在,我们定义一些重要的变量-我们考虑 50 次五次学习场景:
......
# 使用 TensorFlow 的关系和匹配网络
在上一章中,我们了解了原型网络,以及如何将原型网络的变体(例如高斯原型网络和半原型网络)用于一次学习。 我们已经看到原型网络如何利用嵌入来执行分类任务。
在上一章中,我们了解了原型网络,以及如何将原型网络的变体(例如高斯原型网络和半原型网络)用于一次学习。 我们已经看到原型网络如何利用嵌入来执行分类任务。
在本章中,我们将学习关系网络和匹配网络。 首先,我们将了解什么是关系网络以及如何在单次,几次和零次学习设置中使用它,然后,我们将学习如何使用 TensorFlow 建立关系网络。 在本章的后面,我们将学习匹配网络以及如何在几次学习中使用它们。 我们还将看到在匹配网络中使用的不同类型的嵌入函数。 在本章的最后,我们将看到如何在 Tensorflow 中构建匹配的网络。
......@@ -18,7 +18,7 @@
现在,我们将看到另一种有趣的单次学习算法,称为关系网络。 它是最简单,最有效的单发学习算法之一。 我们将探讨在单发,少发和零发学习设置中如何使用关系网络。
# 一次学习中的关系网络
# 一次学习中的关系网络
关系网络由两个重要功能组成:以`f[φ]`表示的嵌入函数和以`g[φ]`表示的关系功能。 嵌入函数用于从输入中提取特征。 如果输入是图像,则可以使用卷积网络作为嵌入函数,这将为我们提供图像的特征向量/嵌入。 如果我们的输入是文本,那么我们可以使用 LSTM 网络获取文本的嵌入。
......@@ -50,7 +50,7 @@
![](img/5f7d57ed-3814-4506-a8d2-da060f75ef00.png)
# 一次性学习中的关系网络
# 几次学习中的关系网络
我们已经看到了如何拍摄属于支持集中每个类别的单个图像,并在关系网络的单次学习设置中将它们与查询集中图像的关系进行比较。 但是,在几次学习设置中,每个班级将有多个数据点。 我们如何使用嵌入函数在此处学习特征表示?
......@@ -68,7 +68,7 @@
![](img/61827802-face-4bba-9b33-1a79c5d2deaf.png)
# 零镜头学习中的关系网络
# 零学习中的关系网络
既然我们已经了解了如何在单发和少发学习任务中使用关系网络,我们将看到如何在零发学习设置中使用关系网络,在这种情况下,每个类别下都没有任何数据点。 但是,在零射击学习中,我们将具有元信息,该元信息是有关每个类的属性的信息,并将被编码到语义向量`v[c]`中,其中下标`c`表示类。
......@@ -259,7 +259,7 @@ Episode 900: loss 0.250
# 匹配网络
匹配网络是 Google 的 DeepMind 团队发布的另一种简单高效的一次学习算法。 它甚至可以为数据集中未观察到的类生成标签。
匹配网络是 Google 的 DeepMind 团队发布的另一种简单高效的一次学习算法。 它甚至可以为数据集中未观察到的类生成标签。
假设我们有一个支持集`S`,其中包含`K`示例作为`(x1, y1), (x2, y2), ..., (xk, yk)`。 给定查询点(一个新的看不见的示例)`x_hat`时,匹配网络通过将其与支持集进行比较来预测`x_hat`的类别。
......
......@@ -2,7 +2,7 @@
到目前为止,在前面的章节中,我们已经学习了几种基于距离的度量学习算法。 我们从连体网络开始,了解了连体网络如何学会区分两个输入,然后我们研究了原型网络以及原型网络的变体,例如高斯原型网络和半原型网络。 展望未来,我们探索了有趣的匹配网络和关系网络。
在本章中,我们将学习用于一次学习的**内存增强神经网络****MANN**)。 在进入 MANN 之前,我们将了解他们的前身**神经图灵机****NTM**)。 我们将学习 NTM 如何使用外部存储器来存储和检索信息,并且还将看到如何使用 NTM 执行复制任务。
在本章中,我们将学习用于一次学习的**内存增强神经网络****MANN**)。 在进入 MANN 之前,我们将了解他们的前身**神经图灵机****NTM**)。 我们将学习 NTM 如何使用外部存储器来存储和检索信息,并且还将看到如何使用 NTM 执行复制任务。
在本章中,我们将学习以下内容:
......@@ -55,7 +55,7 @@ NTM 的重要组成部分如下:
如上图所示,我们具有`N`行和`M`列的存储矩阵,大小为`N`的权重向量包含所有`N`个位置。 执行这两个的线性组合,我们得到长度为`M`的读取向量。
# 写操作
# 写操作
与读取操作不同,写入操作由两个称为擦除和添加操作的子操作组成,这两个子操作分别擦除旧信息并将新信息添加到存储器。
......@@ -114,11 +114,11 @@ NTM 的重要组成部分如下:
与基于内容的寻址不同,在基于位置的寻址中,我们专注于位置而不是内容相似性。 它包括三个步骤:
1.
1.
2. 卷积移位
3. 锐化
# 插
# 插
基于位置的寻址的第一步称为插值。 它用于决定我们应该使用在上一个时间步获得的权重`w[t - 1]`,还是使用通过基于内容的寻址获得的权重`w[t]^c`。 但是我们如何决定呢? 我们使用一个新的标量参数`g[t]`,该参数用于确定应使用的权重。 `g[t]`的值可以为 0 或 1。
......@@ -159,7 +159,7 @@ NTM 的重要组成部分如下:
![](img/99d7e67e-ddd1-4966-b2e5-3196b2bc88c0.png)
# 使用 NTM 复制任务
# 使用 NTM 执行复制任务
现在,我们将看到如何使用 NTM 执行复制任务。 复制任务的目的是了解 NTM 如何存储和调用任意长度的序列。 我们将为网络提供一个随机序列,以及一个指示序列结束的标记。 它必须学习输出给定的输入序列。 因此,网络会将输入序列存储在内存中,然后从内存中回读。 现在,我们将逐步了解如何执行复制任务,然后在最后看到整个最终代码。
......@@ -387,7 +387,7 @@ w_c = K_amplified / tf.reduce_sum(K_amplified, axis=1, keepdims=True) # eq (5)
基于位置的寻址涉及其他三个步骤:
1.
1.
2. 卷积移位
3. 锐化
......@@ -645,7 +645,7 @@ train(args)
# 记忆增强神经网络(MANN)
现在,我们将看到一个有趣的 NTM 变体,称为 MANN。 它广泛用于一键式学习任务。 MANN 旨在使 NTM 在一次学习任务中表现更好。 我们知道 NTM 可以使用基于内容的寻址或基于位置的寻址。 但是在 MANN 中,我们仅使用基于内容的寻址。
现在,我们将看到一个有趣的 NTM 变体,称为 MANN。 它广泛用于一键式学习任务。 MANN 旨在使 NTM 在一次学习任务中表现更好。 我们知道 NTM 可以使用基于内容的寻址或基于位置的寻址。 但是在 MANN 中,我们仅使用基于内容的寻址。
MANN 使用一种称为最少最近访问的新寻址方案。 顾名思义,它写入最近最少使用的内存位置。 等待。 什么? 我们刚刚了解到 MANN 不是基于位置的,那么为什么我们要写入最近最少使用的位置? 这是因为最近最少使用的存储位置由读取操作确定,而读取操作由基于内容的寻址执行。 因此,我们基本上执行基于内容的寻址,以读取和写入最近最少使用的位置。
......@@ -707,7 +707,7 @@ MANN 使用一种称为最少最近访问的新寻址方案。 顾名思义,
read_vector_list.append(read_vector)
```
# 写操作
# 写操作
在执行写操作之前,我们要找到最近最少使用的内存位置,因为这是我们必须写的位置。 我们如何找到最近最少使用的内存位置? 为了找到这一点,我们计算了一个新的向量,称为使用权重向量。 它由`w[t]^u`表示,并将在每个读取和写入步骤之后进行更新。 它只是读取权重向量和写入权重向量的总和,即`w[t]^u < -w[t]^r + w[t]^w`
......@@ -792,10 +792,10 @@ M_ = prev_M * tf.expand_dims(1\. - tf.one_hot(prev_indices[:, -1], self.memory_s
3. 为什么我们使用读写头?
4. 什么叫记忆?
5. NTM 中使用哪些不同类型的寻址机制?
6. 什么叫插门?
6. 什么叫插门?
7. 如何从使用权重向量中计算出最少使用的权重向量?
# 进一步阅读
* [NTM 论文](https://arxiv.org/pdf/1410.5401.pdf)
* [使用记忆增强神经网络的一次性学习](https://arxiv.org/pdf/1605.06065.pdf)
\ No newline at end of file
* [使用记忆增强神经网络的一次学习](https://arxiv.org/pdf/1605.06065.pdf)
\ No newline at end of file
......@@ -167,7 +167,7 @@ YHat = sigmoid(a)
因此,我们使用 MAML 来找到可在各个任务之间推广的最佳参数值`θ`。 因此,对于一项新任务,我们可以通过采取较少的梯度步骤,在较短的时间内从几个数据点中学习。
# 使用 MAML 进行培训
# 将 MAML 用于训练
现在,我们定义一个名为`MAML`的类,在其中实现 MAML 算法。 在`__init__`方法中,我们将初始化所有必需的变量。 然后,我们定义我们的`sigmoid`激活函数。 在此之后,我们定义了`train`函数。
......@@ -481,7 +481,7 @@ Sampling Next Batch of Tasks
我们已经看到了如何使用 MAML 查找可跨任务通用的最佳参数θ。 现在,我们将看到一个称为 ADML 的 MAML 变体,该变体同时使用干净样本和对抗样本来查找更好且更健壮的初始模型参数`θ`。 在继续之前,让我们了解什么是对抗性样本。 通过对抗攻击获得对抗样本。 假设我们有一张图片; 对抗性攻击包括以无法被我们的眼睛察觉的方式稍微修改此图像,并将此修改后的图像称为对抗图像。 当我们将该对抗图像提供给模型时,它无法正确分类。 有几种不同的对抗攻击可用于获取对抗样本。 我们将看到一种常用的方法,称为**快速梯度符号方法****FGSM**)。
# 固定 GSM
# FGSM
假设我们正在执行图像分类; 通常,我们通过计算损失并通过相对于模型参数(例如权重)计算损失的梯度并更新模型参数来尝试使损失最小化来训练模型。 为了获得图像的对抗样本,我们计算损失相对于图像输入像素的梯度,而不是模型参数。 因此,图像的对抗样本基本上是相对于图像的损耗梯度。 我们只采取一个梯度步骤,因此它在计算上是有效的。 计算完梯度后,我们取其符号。
......@@ -564,7 +564,7 @@ print y[0]
[0]
```
# 固定 GSM
# FGSM
现在,我们定义了另一个称为`FGSM`的函数,用于生成对抗性输入。 我们使用 FGSM 生成对抗性样本。 我们已经看到了 FGSM 如何通过计算相对于输入而不是模型参数的梯度来生成对抗对。 因此,我们将干净(`x``y`)对作为输入,并生成对抗(`x_adv``y`)对:
......@@ -1023,7 +1023,7 @@ Updated Model Parameter Theta
Sampling Next Batch of Tasks
```
# 反洗钱
# CAML
我们已经看到了 MAML 如何找到模型的最佳初始参数,从而可以轻松地以较少的梯度步骤将其适应于新任务。 现在,我们将看到一个有趣的 MAML 变体,称为 CAML。 CAML 的概念非常简单,与 MAML 相同。 它还尝试找到更好的初始参数。 我们了解了 MAML 如何使用两个循环。 在内部循环中,MAML 学习特定于任务的参数,并尝试使用梯度下降来最大程度地减少损失,在外部循环中,它更新模型参数以减少跨多个任务的预期损失,以便我们可以使用更新的模型参数作为相关任务的更好的初始化。
......@@ -1067,7 +1067,7 @@ Sampling Next Batch of Tasks
在本章中,我们学习了如何找到可在各个任务之间推广的最佳模型参数`θ`,以便我们可以减少梯度步骤,并快速学习新的相关任务。 我们从 MAML 开始,我们看到了 MAML 如何执行元优化来计算最佳模型参数。 接下来,我们看到了对抗性元学习,其中我们使用了干净样本和对抗性样本来查找可靠的初始模型参数。 后来,我们了解了 CAML,并看到了 CAML 如何使用两个不同的参数,一个用于在任务中学习,另一个用于更新模型参数。
在下一章中,我们将学习 meta-SGD 和 Reptile 算法,该算法再次用于查找模型的更好的初始参数。
在下一章中,我们将学习SGD 和 Reptile 算法,该算法再次用于查找模型的更好的初始参数。
# 问题
......
# 元 SGD 和 Reptile
在上一章中,我们学习了如何使用 MAML 查找可在多个任务中推广的最佳参数。 我们看到了 MAML 如何通过计算元梯度和执行元优化来计算此最佳参数。 我们还看到了对抗性元学习,它通过添加对抗性样本并使 MAML 在干净样本和对抗性样本之间进行搏斗以找到最佳参数,从而增强了 MAML。 我们还看到了 CAML,或者说是元学习的上下文适应。 在本章中,我们将学习 Meta-SGD,这是另一种用于快速执行学习的元学习算法。 与 MAML 不同,Meta-SGD 不仅会找到最佳参数,还将找到最佳学习率和更新方向。 我们将看到如何在监督学习和强化学习设置中使用 Meta-SGD。 我们还将看到如何从头开始构建 Meta-SGD。 继续,我们将学习 Reptile 算法,该算法对 MAML 进行了改进。 我们将看到 Reptile 与 MAML 有何不同,然后将介绍如何在正弦波回归任务中使用 Reptile。
在上一章中,我们学习了如何使用 MAML 查找可在多个任务中推广的最佳参数。 我们看到了 MAML 如何通过计算元梯度和执行元优化来计算此最佳参数。 我们还看到了对抗性元学习,它通过添加对抗性样本并使 MAML 在干净样本和对抗性样本之间进行搏斗以找到最佳参数,从而增强了 MAML。 我们还看到了 CAML,或者说是元学习的上下文适应。 在本章中,我们将学习元 SGD,这是另一种用于快速执行学习的元学习算法。 与 MAML 不同,元 SGD 不仅会找到最佳参数,还将找到最佳学习率和更新方向。 我们将看到如何在监督学习和强化学习设置中使用元 SGD。 我们还将看到如何从头开始构建元 SGD。 继续,我们将学习 Reptile 算法,该算法对 MAML 进行了改进。 我们将看到 Reptile 与 MAML 有何不同,然后将介绍如何在正弦波回归任务中使用 Reptile。
在本章中,您将了解以下内容:
* 元 SGD
* 监督学习中的 Meta-SGD
* 强化学习中的 Meta-SGD
* 从头开始构建 Meta-SGD
* 监督学习中的SGD
* 强化学习中的SGD
* 从头开始构建SGD
* 爬虫
* 使用 Reptile 进行正弦波回归
......@@ -27,33 +27,33 @@
我们通常将参数`θ`设置为某个随机值,并在训练过程中尝试找到最佳值,然后将学习率`α`的值设置为一个小数值,或者将其随时间衰减,以及跟随梯度的更新方向。 我们是否可以通过元学习来学习梯度下降的所有这些关键要素,以便可以从几个数据点快速学习? 在上一章中,我们已经看到 MAML 如何找到可在各个任务之间推广的最佳初始参数`θ`。 有了最佳的初始参数,我们就可以减少梯度步骤,并快速学习新任务。
因此,现在我们是否可以学习最佳的学习率和更新方向,从而可以跨任务进行概括,从而实现更快的收敛和培训? 让我们看看如何通过将其与 MAML 进行比较在 Meta-SGD 中学习。 如果您还记得,请在 MAML 内循环中,通过最小化梯度下降带来的损失,找到每个任务`T[i]`的最佳参数`θ'[i]`
因此,现在我们是否可以学习最佳的学习率和更新方向,从而可以跨任务进行概括,从而实现更快的收敛和培训? 让我们看看如何通过将其与 MAML 进行比较在SGD 中学习。 如果您还记得,请在 MAML 内循环中,通过最小化梯度下降带来的损失,找到每个任务`T[i]`的最佳参数`θ'[i]`
![](img/fbd9f509-c789-4ef5-bfa1-c7eee18e09a3.png)
对于 Meta-SGD,我们可以按如下方式重写前面的公式:
对于SGD,我们可以按如下方式重写前面的公式:
![](img/9d597f2d-4624-40a2-ae28-031223f68120.png)
但是有什么区别呢? 此处`α`不仅是一个标量小值,而且是一个向量。 我们以与`θ`相同的形状随机初始化`α`。我们将`θ`称为初始参数,将`αᐁ[θ]L[T[i]](f[θ])`称为自适应项。 因此,自适应项表示更新方向,其长度成为学习率。 我们在自适应项的方向而不是在梯度方向`ᐁ[θ]L[T[i]](f[θ])`上更新我们的值,并且在自适应项中隐式地实现了我们的学习率。
因此,在 Meta-SGD 中,我们不会使用较小的标量值来初始化学习率`α`。 相反,我们使用与`θ`相同形状的随机值来初始化学习率,并与`θ`一起学习它们。 我们采样了一些任务,并且对于每个任务,我们采样了一些`k`数据点,并使用梯度下降使损失最小化,但是我们的更新方程式变为:
因此,在SGD 中,我们不会使用较小的标量值来初始化学习率`α`。 相反,我们使用与`θ`相同形状的随机值来初始化学习率,并与`θ`一起学习它们。 我们采样了一些任务,并且对于每个任务,我们采样了一些`k`数据点,并使用梯度下降使损失最小化,但是我们的更新方程式变为:
![](img/9d597f2d-4624-40a2-ae28-031223f68120.png)
也就是说,我们的更新方向是自适应项方向,而不是梯度方向,并且我们将`α``θ`一起学习。
现在,在外循环中,我们执行元优化-也就是说,我们计算相对于最佳参数`θ'[i]`的损耗梯度,并更新我们随机初始化的模型参数`θ`。 在 Meta-SGD 中,我们还更新了随机初始化的`α`,而不是单独更新`θ`,如下所示:
现在,在外循环中,我们执行元优化-也就是说,我们计算相对于最佳参数`θ'[i]`的损耗梯度,并更新我们随机初始化的模型参数`θ`。 在SGD 中,我们还更新了随机初始化的`α`,而不是单独更新`θ`,如下所示:
![](img/6f85d711-9900-47ad-a8b7-312381b5d153.png)
![](img/0c7acdb6-ec47-439a-bf52-852b0d82256a.png)
如您所见,Meta-SGD 只是对 MAML 的一小部分调整。 在 MAML 中,我们随机初始化模型参数`θ`,并尝试找到可跨任务通用的最佳参数。 在 Meta-SGD 中,我们不仅学习模型参数`θ`,还学习了学习率和更新方向,这在适应性术语中隐含地实现。
如您所见,元 SGD 只是对 MAML 的一小部分调整。 在 MAML 中,我们随机初始化模型参数`θ`,并尝试找到可跨任务通用的最佳参数。 在元 SGD 中,我们不仅学习模型参数`θ`,还学习了学习率和更新方向,这在适应性术语中隐含地实现。
# Meta-SGD 用于监督学习
# 用于监督学习的元 SGD
现在,我们将看到如何在有监督的学习环境中使用 Meta-SGD。 与 MAML 一样,我们可以将 Meta-SGD 应用于可以通过梯度下降训练的任何监督学习问题,无论是回归学习还是分类学习。 首先,我们需要定义我们要使用的损失函数。 例如,如果要执行分类,则可以使用交叉熵作为损失函数,如果要进行回归,则可以使用均方误差作为损失函数。 我们可以使用适合我们任务的任何损失函数。 让我们逐步进行以下操作:
现在,我们将看到如何在有监督的学习环境中使用元 SGD。 与 MAML 一样,我们可以将元 SGD 应用于可以通过梯度下降训练的任何监督学习问题,无论是回归学习还是分类学习。 首先,我们需要定义我们要使用的损失函数。 例如,如果要执行分类,则可以使用交叉熵作为损失函数,如果要进行回归,则可以使用均方误差作为损失函数。 我们可以使用适合我们任务的任何损失函数。 让我们逐步进行以下操作:
1. 假设我们有一个由参数`θ`参数化的模型`f`,并且在任务!`p(T)`上有一个分布。 首先,我们随机初始化模型参数θ,并随机初始化`α`形状与`θ`相同的形状。
......@@ -78,9 +78,9 @@
5. 对于`n`次迭代,我们重复步骤 2 到步骤 4。
# 从头开始构建 Meta-SGD
# 从头开始构建SGD
在上一节中,我们了解了 Meta-SGD 的工作原理。 我们看到了 Meta-SGD 如何获得更好,更健壮的模型参数`θ`,该参数可跨任务进行通用化,并具有最佳的学习率和更新方向。 现在,我们将从头开始对 Meta-SGD 进行编码,以更好地了解它们。 就像我们在 MAML 中所做的一样,为了更好地理解,我们将考虑一个简单的二进制分类任务。 我们随机生成输入数据,并使用简单的单层神经网络对其进行训练,并尝试找到最佳参数`θ'[i]`。 我们将逐步详细介绍如何执行此操作。
在上一节中,我们了解了元 SGD 的工作原理。 我们看到了元 SGD 如何获得更好,更健壮的模型参数`θ`,该参数可跨任务进行通用化,并具有最佳的学习率和更新方向。 现在,我们将从头开始对元 SGD 进行编码,以更好地了解它们。 就像我们在 MAML 中所做的一样,为了更好地理解,我们将考虑一个简单的二进制分类任务。 我们随机生成输入数据,并使用简单的单层神经网络对其进行训练,并尝试找到最佳参数`θ'[i]`。 我们将逐步详细介绍如何执行此操作。
[您还可以在此处查看 Jupyter 笔记本中提供的代码,并提供说明](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/07.%20Meta-SGD%20and%20Reptile%20Algorithms/7.4%20Building%20Meta-SGD%20from%20Scratch.ipynb)
......@@ -133,11 +133,11 @@ a = np.matmul(X, theta)
YHat = sigmoid(a)
```
因此,我们使用 Meta-SGD 查找最佳参数值`theta`,学习率和梯度更新方向,这些方向可在各个任务之间推广。 因此,对于一项新任务,我们可以通过采取较少的梯度步骤,在较短的时间内从几个数据点中学习。
因此,我们使用SGD 查找最佳参数值`theta`,学习率和梯度更新方向,这些方向可在各个任务之间推广。 因此,对于一项新任务,我们可以通过采取较少的梯度步骤,在较短的时间内从几个数据点中学习。
# 元 SGD
现在,我们定义一个名为`MetaSGD`的类,在其中实现 Meta-SGD 算法。 在`__init__`方法中,我们将初始化所有必需的变量。 然后,我们定义 Sigmoid 激活函数。 之后,我们定义火车功能:
现在,我们定义一个名为`MetaSGD`的类,在其中实现SGD 算法。 在`__init__`方法中,我们将初始化所有必需的变量。 然后,我们定义 Sigmoid 激活函数。 之后,我们定义火车功能:
```py
class MetaSGD(object):
......@@ -409,9 +409,9 @@ Sampling Next Batch of Tasks
---------------------------------
```
# Meta-SGD 用于强化学习
#SGD 用于强化学习
现在,我们将了解如何在强化学习中使用 Meta-SGD。 Meta-SGD 与可以通过梯度下降训练的任何 RL 算法兼容。
现在,我们将了解如何在强化学习中使用元 SGD。元 SGD 与可以通过梯度下降训练的任何 RL 算法兼容。
1. 假设我们有一个由参数`θ`参数化的模型`f`,并且在任务`p(T)`上有一个分布。 首先,我们随机初始化模型参数`θ`,并随机初始化形状与`θ`相同的`α`
2. 从任务分布中采样一些任务`T[i]``T[i] ~ p(T)`。 假设我们已经采样了三个任务`T = {T[1], T[2], T[3]}`
......@@ -424,7 +424,7 @@ Sampling Next Batch of Tasks
5. 对于`n`次迭代,我们重复步骤 2 到步骤 4。
# 爬虫
# Reptile
Reptile 算法已被 OpenAI 提出作为对 MAML 的改进。 它很容易实现。 我们知道,在 MAML 中,我们可以计算二阶导数,即梯度的梯度。 但是从计算上来说,这不是一个有效的任务。 因此,OpenAI 提出了对 MAML 的改进,称为 Reptile。 Reptile 的算法非常简单。 对一些`n`个任务进行采样,然后运行**随机梯度下降****SGD**),以减少每个采样任务的迭代次数,然后沿某个方向更新模型参数,这是所有任务的共同点。 由于我们对每个任务执行的 SGD 迭代次数较少,因此间接暗示我们正在计算损失的二阶导数。 与 MAML 不同,它在计算上很有效,因为我们不直接计算二阶导数也不展开计算图,因此易于实现。
......@@ -562,7 +562,7 @@ optimizer = tf.train.AdamOptimizer(1e-2).minimize(loss_function)
init = tf.global_variables_initializer()
```
# 爬虫
# Reptile
现在,我们将看到如何使用 Reptile 找到神经网络的最佳参数。
......@@ -765,19 +765,19 @@ Sampling Next Batch of Tasks
# 总结
在本章中,我们学习了 Meta-SGD 和 Reptile 算法。 我们看到了 Meta-SGD 与 MAML 有何不同,以及如何在监督学习和强化学习设置中使用 Meta-SGD。 我们看到了 Meta-SGD 如何学习模型参数以及学习率和更新方向。 我们还了解了如何从头开始构建 Meta-SGD。 然后,我们了解了 Reptile 算法。 我们看到了 Reptile 与 MAML 的不同之处,以及 Reptile 对 MAML 算法的改进。 我们还学习了如何在正弦波回归任务中使用 Reptile。
在本章中,我们学习了元 SGD 和 Reptile 算法。 我们看到了元 SGD 与 MAML 有何不同,以及如何在监督学习和强化学习设置中使用元 SGD。 我们看到了元 SGD 如何学习模型参数以及学习率和更新方向。 我们还了解了如何从头开始构建元 SGD。 然后,我们了解了 Reptile 算法。 我们看到了 Reptile 与 MAML 的不同之处,以及 Reptile 对 MAML 算法的改进。 我们还学习了如何在正弦波回归任务中使用 Reptile。
在下一章中,我们将学习如何将梯度一致性用作元学习中的优化目标。
# 问题
1. Meta-SGD 与 MAML 有何不同?
2. Meta-SGD 如何找到最佳学习率?
3. meta-SGD 中学习率的更新方程是什么?
1. SGD 与 MAML 有何不同?
2. SGD 如何找到最佳学习率?
3. SGD 中学习率的更新方程是什么?
4. Reptile 算法如何工作?
5. Reptile 算法的更新方程是什么?
# 进一步阅读
* [Meta-SGD](https://arxiv.org/pdf/1707.09835.pdf)
* [SGD](https://arxiv.org/pdf/1707.09835.pdf)
* [Reptile](https://arxiv.org/pdf/1803.02999.pdf)
\ No newline at end of file
# 梯度协议作为优化目标
# 作为优化目标的梯度协议
在上一章中,我们了解了 Meta-SGD 和 Reptile 算法。 我们看到了如何使用 Meta-SGD 查找最佳参数,最佳学习率和梯度更新方向。 我们还看到了 Reptile 算法的工作原理以及比 MAML 更有效的方法。 在本章中,我们将学习如何将梯度一致性用作元学习的优化目标。 正如您在 MAML 中所看到的,我们基本上是对各个任务的梯度进行平均,并更新模型参数。 在梯度一致性算法中,我们将对梯度进行加权平均以更新模型参数,并且我们将了解如何为梯度添加权重如何帮助我们找到更好的模型参数。 在本章中,我们将确切探讨梯度一致性算法的工作原理。 我们的梯度协议算法可以同时插入 MAML 和 Reptile 算法。 我们还将从头开始了解如何在 MAML 中实现梯度协议。
在上一章中,我们了解了元 SGD 和 Reptile 算法。 我们看到了如何使用元 SGD 查找最佳参数,最佳学习率和梯度更新方向。 我们还看到了 Reptile 算法的工作原理以及比 MAML 更有效的方法。 在本章中,我们将学习如何将梯度一致性用作元学习的优化目标。 正如您在 MAML 中所看到的,我们基本上是对各个任务的梯度进行平均,并更新模型参数。 在梯度一致性算法中,我们将对梯度进行加权平均以更新模型参数,并且我们将了解如何为梯度添加权重如何帮助我们找到更好的模型参数。 在本章中,我们将确切探讨梯度一致性算法的工作原理。 我们的梯度协议算法可以同时插入 MAML 和 Reptile 算法。 我们还将从头开始了解如何在 MAML 中实现梯度协议。
在本章中,我们将学习以下内容:
* 梯度协议
* 重量计算
* 权重计算
* 梯度一致性算法
* 使用 MAML 构建梯度一致性算法
# 梯度协议作为优化
# 作为优化的梯度协议
梯度一致性算法是一种有趣且最近引入的算法,可作为元学习算法的增强功​​能。 在 MAML 和 Reptile 中,我们尝试找到一个更好的模型参数,该参数可在多个相关任务中推广,以便我们可以使用更少的数据点快速学习。 如果我们回顾前面几章中学到的知识,就会发现我们随机初始化了模型参数,然后从任务分布`p(T)`中抽取了一批随机任务`T[i]`进行了采样。 对于每个采样任务`T[i]`,我们通过计算梯度将损失降到最低,并获得更新的参数`θ'[i]`,这形成了我们的内部循环:
......@@ -37,7 +37,7 @@
![](img/bebd9e1c-97f8-40ca-9cd6-d5dbec4a7089.png)
# 重量计算
# 权重计算
我们已经看到,通过将权重与梯度相关联,我们可以了解哪些任务具有强梯度一致性,哪些任务具有强梯度不一致。
......
# 最新进展和后续步骤
恭喜你! 我们已经到了最后一章。 我们已经走了很长一段路。 我们从元学习基础开始,然后看到了几种一次性学习算法,例如连体,原型,匹配和关系网络。 后来,我们还看到了 NTM 如何存储和检索信息。 展望未来,我们看到了有趣的元学习算法,例如 MAML,Reptile 和 Meta-SGD。 我们看到了这些算法如何找到最佳的初始参数。 现在,我们将看到元学习的一些最新进展。 我们将学习如何使用与任务无关的元学习来减少元学习中的任务偏差,以及如何在模仿学习系统中使用元学习。 然后,我们将看到如何使用 CACTUs 算法在无监督的学习环境中应用 MAML。 稍后,我们将学习一种称为学习在概念空间中学习的深度元学习算法。
恭喜你! 我们已经到了最后一章。 我们已经走了很长一段路。 我们从元学习基础开始,然后看到了几种一次学习算法,例如连体,原型,匹配和关系网络。 后来,我们还看到了 NTM 如何存储和检索信息。 展望未来,我们看到了有趣的元学习算法,例如 MAML,Reptile 和元 SGD。 我们看到了这些算法如何找到最佳的初始参数。 现在,我们将看到元学习的一些最新进展。 我们将学习如何使用与任务无关的元学习来减少元学习中的任务偏差,以及如何在模仿学习系统中使用元学习。 然后,我们将看到如何使用 CACTUs 算法在无监督的学习环境中应用 MAML。 稍后,我们将学习一种称为学习在概念空间中学习的深度元学习算法。
在本章中,您将了解以下内容:
......@@ -68,7 +68,7 @@
熵方法的问题在于它仅适用于分类任务。 因此,我们无法将算法应用于回归或强化学习任务。 为了克服这个问题,我们将看到另一种算法,称为不平等最小化 TAML。 就像熵方法一样简单。 在这种方法中,我们试图使不平等最小化。 经济学中使用了几种不平等措施来衡量收入分配,财富分配等。 在元学习环境中,我们可以使用这些经济不平等措施来最小化我们的任务偏差。 因此,可以通过最小化批次中所有采样任务损失的不平等性来最小化模型对任务的偏见。
# 不平等措施
# 不平等度量
我们将看到一些常用的不平等测度。 我们可以将任务`T[i]`中的损失定义为`l[i]`,将采样任务的平均损失定义为`l_bar`,将单个批次中的任务数定义为`M`
......@@ -88,7 +88,7 @@
![](img/7f22913b-2db2-4bf3-9f58-65d6415f32ef.png)
# 算法差异
# 算法的方差
算法的方差可以定义如下:
......@@ -163,7 +163,7 @@ MIL 中涉及的步骤如下:
5.`n`次迭代重复步骤 2 到 4。
# 仙人掌
# CACTUS
我们已经了解了 MAML 如何帮助我们找到最佳的初始模型参数,以便可以将其推广到许多其他相关任务。 我们还了解了 MAML 如何在监督学习和强化学习设置中使用。 但是,我们如何在没有数据点标签的无监督学习环境中应用 MAML? 因此,我们引入了一种称为 **CACTUS** 的新算法,该算法是`Clustering to Automatically Generate Tasks for Unsupervised Model Agnostic Meta Learning`的缩写。
......@@ -185,7 +185,7 @@ MIL 中涉及的步骤如下:
![](img/63421732-5fd9-40a0-ac04-cd0eb01560d7.png)
# 学习在概念空间中学习
# 概念空间中的元学习
现在,我们将看到如何使用深度元学习在概念空间中元学习。 首先,我们如何进行元学习? 我们在每个任务中抽样一批相关任务和一些`k`数据点,并训练我们的元学习者。 我们可以将深度学习的力量与元学习结合起来,而不仅仅是使用我们的原始元学习技术进行培训。 因此,当我们对一批任务以及每个任务中的一些`k`数据点进行采样时,我们将使用深度神经网络学习每个`k`数据点的表示形式,然后对这些表示进行元学习。
......@@ -203,7 +203,7 @@ MIL 中涉及的步骤如下:
但是,为什么我们要这样做呢? 代替在原始数据集上执行元学习,我们在概念空间中执行元学习。 我们如何学习这些概念? 这些概念由概念生成器通过学习输入的嵌入来生成。 因此,我们在各种相关任务上训练概念生成器和元学习器; 与此相伴的是,我们通过向概念生成器提供外部数据集,从而通过概念鉴别器改进了概念生成器,以便可以更好地学习概念。 通过联合培训过程,我们的概念生成器可以学习各种概念并在相关任务上表现更好; 我们输入外部数据集只是为了增强概念生成器的性能,当我们输入一组新的输入时,它会不断学习。 因此,这是一个终身学习系统。
# 关键
# 关键
现在,让我们详细了解每个组件。
......@@ -211,22 +211,22 @@ MIL 中涉及的步骤如下:
众所周知,概念生成器用于提取特征。 我们可以使用由某些参数`θ[G]`参数化的深度神经网络来生成概念。 例如,如果我们的输入是图像,则概念生成器可以是 CNN。
# 概念别器
# 概念别器
它基本上是一个分类器,用于预测概念生成器生成的概念的标签。 因此它可以是由`θ[D]`参数化的任何监督学习算法,例如 SVM 和决策树。
# 元学习者
我们的元学习器可以是`θ[M]`参数化的任何元学习算法,例如 MAML,Meta-SGD 或 Reptile。
我们的元学习器可以是`θ[M]`参数化的任何元学习算法,例如 MAML,SGD 或 Reptile。
# 损失函数
我们在这里使用两组损失函数:
* 概念歧视损失
* 概念判别损失
* 元学习损失
# 概念歧视损失
# 概念判别损失
我们从数据集`D`中采样一些数据点`(x, y)`,将它们馈送到概念生成器,该概念生成器学习概念并将其发送给概念鉴别器,后者试图预测这些概念的类。 因此,概念鉴别符的丢失意味着我们的概念鉴别符在预测类别方面有多出色,可以表示为:
......
......@@ -9,7 +9,7 @@
5. 在基于度量的元学习设置中,我们将学习适当的度量空间。 假设我们要找出两个图像之间的相似性。 在基于度量的设置中,我们使用一个简单的神经网络,该网络从两个图像中提取特征并通过计算这两个图像的特征之间的距离来查找相似性。
6. 我们以**剧情方式**训练模型; 也就是说,在每个剧情中,我们从数据集`D`中采样一些数据点,并准备我们的支持集并在支持集上学习。 因此,在一系列事件中,我们的模型将学习如何从较小的数据集中学习。
# 第 2 章:使用连体网络的面部和音频识别
# 第 2 章:使用连体网络的人脸和音频识别
1. 连体网络是神经网络的一种特殊类型,它是最简单,最常用的单次学习算法之一。 连体网络基本上由两个对称的神经网络组成,它们具有相同的权重和架构,并最终通过能量函数`E`结合在一起。
......@@ -25,7 +25,7 @@
5. 连体网络的应用是无止境的。 它们已经堆叠了用于执行各种任务的各种架构,例如人类动作识别,场景更改检测和机器翻译。
# 第章:原型网络及其变体
# 第 3 章:原型网络及其变体
1. 原型网络简单,高效,是最常用的少量学习算法之一。 原型网络的基本思想是创建每个类的原型表示形式,并根据类原型和查询点之间的距离对查询点(新点)进行分类。
2. 我们为每个数据点计算嵌入以学习特征。
......@@ -72,10 +72,10 @@
5. 上下文参数是特定于任务的参数,该参数在内部循环中更新。 用 denoted 表示,它特定于每个任务,代表单个任务的嵌入。
6. 共享参数在任务之间共享,并在外循环中更新以找到最佳模型参数。 用θ表示。
# 第 7 章:Meta-SGD 和 Reptile 算法
# 第 7 章:SGD 和 Reptile 算法
1. 与 MAML 不同,在 Meta-SGD 中,除了找到最佳参数值`θ`之外,我们还找到最佳学习率`α`并更新方向。
2. 学习率在适应项中隐式实现。 因此,在 Meta-SGD 中,我们不会以较小的标量值初始化学习率。 相反,我们使用与`θ`相同形状的随机值初始化它们,然后与`θ`一起学习它们。
1. 与 MAML 不同,在SGD 中,除了找到最佳参数值`θ`之外,我们还找到最佳学习率`α`并更新方向。
2. 学习率在适应项中隐式实现。 因此,在SGD 中,我们不会以较小的标量值初始化学习率。 相反,我们使用与`θ`相同形状的随机值初始化它们,然后与`θ`一起学习它们。
3. 学习率的更新公式可以表示为:
......@@ -83,7 +83,7 @@
4.`n`个任务进行采样,并在每个采样任务上以较少的迭代次数运行 SGD,然后按照所有任务共有的方向更新模型参数。
5. Reptile 更新方程可表示为`θ = θ + ε(θ' - θ)`
# 第 8 章:梯度协议作为优化目标
# 第 8 章:作为优化目标的梯度协议
1. 当所有任务的梯度都在同一方向上时,则称为梯度一致性;当某些任务的梯度与其他任务之间存在较大差异时,则称为梯度不一致。
2. 梯度一致性中的更新方程可表示为:
......
......@@ -6,7 +6,7 @@
# 技术要求
在开始执行前面部分中描述的步骤之前,您需要具备以下条件:
在开始执行前人脸分中描述的步骤之前,您需要具备以下条件:
* Python 3.4 或更高版本
* 具有 Ubuntu 16.04 或更高版本的计算机(对于大多数基于 \*NIX 的系统,例如 macOS 或其他 Linux 变体,说明仍然相似)
......
......@@ -175,7 +175,7 @@ Google 为语音和视觉应用发布了自己的制造商套件,称为 AIY。
# 视觉套件
视觉套件提供了构建智能相机的功能,该相机可以使用机器学习来查看和识别对象,甚至可以在其上运行自定义 TF 模型。 与语音工具包一样,该工具包还附带 Raspberry Pi Zero,定制设计的 Vision Bonnet,压电蜂鸣器和 Raspberry Pi Camera V2。 该套件随附一个预先存储有 AIY 系统图像的 SD 卡,其中包括针对多种计算机视觉应用的演示,例如图像分类,物体检测,面部检测,食物分类和自动拍照。
视觉套件提供了构建智能相机的功能,该相机可以使用机器学习来查看和识别对象,甚至可以在其上运行自定义 TF 模型。 与语音工具包一样,该工具包还附带 Raspberry Pi Zero,定制设计的 Vision Bonnet,压电蜂鸣器和 Raspberry Pi Camera V2。 该套件随附一个预先存储有 AIY 系统图像的 SD 卡,其中包括针对多种计算机视觉应用的演示,例如图像分类,物体检测,人脸检测,食物分类和自动拍照。
和以前一样,可以按照[这里](https://aiyprojects.withgoogle.com/vision/#assembly-guide)。 该设备有一个简单的...
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册