提交 d9dacbb7 编写于 作者: W wizardforcel

2020-12-25 17:54:39

上级 48c11db1
......@@ -36,13 +36,13 @@
* 人工神经网络的成本面是非凸的; 因此,它需要一组良好的初始权重才能实现合理的收敛。
* 人工神经网络具有很多参数,因此,它们需要大量数据进行训练。 不幸的是,对于许多项目而言,可用于训练神经网络的特定数据不足,而该项目旨在解决的问题非常复杂,需要神经网络解决方案。
在这两种情况下,迁移学习都可以解决。 如果我们使用在大量标记数据上训练的预训练模型,例如 ImageNet 或 CIFAR,则涉及迁移学习的问题将具有很好的初始权重来开始训练; 然后可以根据现有数据对这些权重进行微调。 同样,为了避免在较少的数据量上训练复杂的模型,我们可能希望从预训练的神经网络中提取复杂的特征,然后使用这些特征来训练相对简单的模型,例如 SVM 或逻辑模型 回归模型。 举个例子,如果我们正在研究图像分类问题,并且已经有一个预训练的模型(例如,基于 1,000 个 ImageNet 的`VGG16`网络),我们可以通过`VGG16`的权重传递训练数据 并从最后一个池化层提取特征。 如果我们有`m`个训练数据点,则可以使用等式![](img/139dc334-8e37-42cb-a0b1-1b0365f4800f.png),其中`x`是特征向量,`y`是输出类。 然后,我们可以从预训练的`VGG16`网络中得出复杂的特征,例如向量`h`,如下所示:
在这两种情况下,迁移学习都可以解决。 如果我们使用在大量标记数据上训练的预训练模型,例如 ImageNet 或 CIFAR,则涉及迁移学习的问题将具有很好的初始权重来开始训练; 然后可以根据现有数据对这些权重进行微调。 同样,为了避免在较少的数据量上训练复杂的模型,我们可能希望从预训练的神经网络中提取复杂的特征,然后使用这些特征来训练相对简单的模型,例如 SVM 或逻辑模型 回归模型。 举个例子,如果我们正在研究图像分类问题,并且已经有一个预训练的模型(例如,基于 1,000 个 ImageNet 的`VGG16`网络),我们可以通过`VGG16`的权重传递训练数据 并从最后一个池化层提取特征。 如果我们有`m`个训练数据点,则可以使用等式`(xi, yi), i = 1 -> m`,其中`x`是特征向量,`y`是输出类。 然后,我们可以从预训练的`VGG16`网络中得出复杂的特征,例如向量`h`,如下所示:
![](img/bb55e155-7677-4ae6-8bf9-9998e72422ab.png)
此处`W`是经过预训练的`VGG16`网络的权重集,直到最后一个池化层。
然后我们可以使用经过转换的训练数据点集![](img/080334e1-6154-4fa1-8842-facd28520bd6.png)来构建相对简单的模型。
然后我们可以使用经过转换的训练数据点集`(hi, yi), i = 1 -> m`来构建相对简单的模型。
# 迁移学习并检测糖尿病性视网膜病变
......@@ -126,7 +126,7 @@ Softmax 将是表示输出层中不同类别的概率的最佳激活函数,而
![](img/8058232c-897d-4cec-9a2d-768e01646985.png)
这里是![](img/a33a501b-e7a0-493e-a5d8-a72cb436bd4c.png)和![](img/e843ff33-9d4b-47d4-87c5-76825a0c42d5.png)
这里是`y = [y1, ..., y5]^T``p = [p1, ..., p5]^T`
同样,`M`训练数据点上的平均损耗可以表示为:
......@@ -885,7 +885,7 @@ Validation Quadratic Kappa Score: 0.44422008110380984
# 分类结果
通过使用所有三个神经网络架构`VGG16``ResNet50``InceptionV3`进行分类。 对于该糖尿病性视网膜病用例,使用迁移学习网络的`InceptionV3`版本可获得最佳结果。 如果是分类分类,我们只是将具有最大预测分类概率的分类转换为预测严重性标签。 但是,由于问题中的类别具有序数意义,因此我们可以利用 softmax 概率的方法之一是针对 softmax 概率对类别严重性进行期望并得出预期分数![](img/9da8911b-24ab-4c74-8b78-2f195780a9d6.png)如下 :
通过使用所有三个神经网络架构`VGG16``ResNet50``InceptionV3`进行分类。 对于该糖尿病性视网膜病用例,使用迁移学习网络的`InceptionV3`版本可获得最佳结果。 如果是分类分类,我们只是将具有最大预测分类概率的分类转换为预测严重性标签。 但是,由于问题中的类别具有序数意义,因此我们可以利用 softmax 概率的方法之一是针对 softmax 概率对类别严重性进行期望并得出预期分数`y_hat`如下 :
![](img/13040376-dbdd-411b-85da-5ae7e4231683.png)
......@@ -996,7 +996,7 @@ def inception_pseudo(dim=224,freeze_layers=30,full_freeze='N'):
return model_final
```
与其像分类网络中那样使分类交叉熵(对数损失)最小化,不如使回归网络的均方误差最小。 对于回归问题最小化的成本函数如下,其中![](img/01c7300e-3717-4466-8914-96b1e3446910.png)是预测的标签:
与其像分类网络中那样使分类交叉熵(对数损失)最小化,不如使回归网络的均方误差最小。 对于回归问题最小化的成本函数如下,其中`y_hat`是预测的标签:
![](img/8e955dd6-0917-4280-936d-2df33cbe371e.png)
......
......@@ -185,7 +185,7 @@
![](img/edaf41f6-4172-4397-b791-f714571e57ca.png) ![](img/546bd7e5-37e3-44ba-a006-3378e4664053.png)
如果我们仔细观察, `P(f[5] / e[1])`就是翻译概率, `P(a[f] / e[1])`是丰富度,而 `P(a[d] / e[1], f[5])`是失真概率。 我们需要针对英语句子中与给定法语句子的所有比对中的所有给定英语单词进行此活动,以计算`P(F, a / E)`。 最后,我们需要采用最佳英语句子![](img/da614761-d0d0-4d7c-a1db-6666a7d68f5b.png)和对齐方式![](img/10715372-f52d-4d7d-a131-032da0542465.png),以使`P(F, a / E)P(E)`的概率最大化。 如下所示:
如果我们仔细观察, `P(f[5] / e[1])`就是翻译概率, `P(a[f] / e[1])`是丰富度,而 `P(a[d] / e[1], f[5])`是失真概率。 我们需要针对英语句子中与给定法语句子的所有比对中的所有给定英语单词进行此活动,以计算`P(F, a / E)`。 最后,我们需要采用最佳英语句子`E_hat`和对齐方式`a_hat`,以使`P(F, a / E)P(E)`的概率最大化。 如下所示:
![](img/396ee058-a561-4b7e-a60d-1a568bbb52b6.png)
......@@ -214,7 +214,7 @@ NMT 与其他传统方法相比的一些优点如下:
图 3.3:神经机器翻译系统的高级编码器-解码器架构
如果`T`是与源语言文本![](img/39b615f1-11b1-4356-b3bb-e432b66d1e58.png)相对应的目标语言文本,那么为了进行训练,我们只是试图使`P[w](T[s+1] / S, T)`的对数概率相对于`W`最大化,其中`T[s+1]`表示目标语言文本已转换 只需一个时间步长,`W`表示编码器-解码器架构模型参数。
如果`T`是与源语言文本`S`相对应的目标语言文本,那么为了进行训练,我们只是试图使`P[w](T[s+1] / S, T)`的对数概率相对于`W`最大化,其中`T[s+1]`表示目标语言文本已转换 只需一个时间步长,`W`表示编码器-解码器架构模型参数。
现在我们已经讨论了编码器-解码器 NMT 的训练过程,现在我们将研究如何在推理过程中使用训练后的模型。
......@@ -538,7 +538,7 @@ def train_test_split(self,num_recs,train_frac=0.8):
图 3.6:推理过程的逐步说明
从上图可以看出,解码器第一步的输出为`C'est`,而隐藏状态和单元状态为![](img/8f9d7576-9524-451d-9733-333ec39cf99a.png)。 如虚线所示,将其再次馈送到解码器,以生成下一个字以及下一组隐藏状态和单元状态。 由于解码器输出伪结束字符`[END]`,因此重复该过程。
从上图可以看出,解码器第一步的输出为`C'est`,而隐藏状态和单元状态为`[h'[1]; c'[1]]`。 如虚线所示,将其再次馈送到解码器,以生成下一个字以及下一组隐藏状态和单元状态。 由于解码器输出伪结束字符`[END]`,因此重复该过程。
为了进行推断,我们可以按原样使用网络的编码器部分,并进行一些修改以使解码器折叠以使其包含一个时间步。 概括地说,无论 RNN 是一个时间步长还是几个时间步长,与 RNN 相关的权重都不会改变,因为 RNN 的所有时间步长都共享相同的权重。
......
......@@ -45,7 +45,7 @@ L2 范数下的重建损失可以表示为:
![](img/db0f4732-8246-4e5f-ab9f-d680b444e478.png)
由于我们正在处理图像,因此可以假设`x[A]`是所有像素的扁平向量,以符合 L2 规范术语。 如果我们假设`x[A]`是矩阵,则最好将![](img/6e698b45-8fde-420b-8ada-ee9b7b1f13c9.png)称为 **Frobenius 范数**。 但是,这些只是数学术语,实质上,我们只是将原始图像和重建图像之间的像素值差的平方和求和。
由于我们正在处理图像,因此可以假设`x[A]`是所有像素的扁平向量,以符合 L2 规范术语。 如果我们假设`x[A]`是矩阵,则最好将`||·||_2^2`称为 **Frobenius 范数**。 但是,这些只是数学术语,实质上,我们只是将原始图像和重建图像之间的像素值差的平方和求和。
让我们考虑一下生成器在使变换后的图像`x[AB]`追求时要尽量降低成本的做法。 鉴别者将尝试将图像标记为伪图像,因此生成器`G[AB]`应当在这种情况下产生`x[AB]`使其成为假图片的对数丢失的方式尽可能小。 如果域`B`中的鉴别符`D[B]`将真实图像标记为`1`,将伪图像标记为`0`,则图像真实的概率由`D[B](.)`,则发生器应使`x[AB]`在鉴别器网络下极有可能出现,从而使`D[B](x[B]) = D[B](G[AB](x[A]))`接近`1`)。 就对数损失而言,生成器应使先前概率的负对数最小化,这基本上使我们得到`C[D(AB)]`,如下所示:
......@@ -75,7 +75,7 @@ L2 范数下的重建损失可以表示为:
![](img/8907ca7c-ae87-4a4b-80e3-37c4bfb678cc.png)
如果我们表示`G[AB]`的参数,则`G[BA]``D[A]``D[B]`设为![](img/add08803-366e-44a6-9f62-c665aace690f.png),![](img/f35e2820-b2e9-4677-8efd-553527f6b982.png),![](img/8a81454a-fef2-4725-8f9f-d1cdb30ea8ae.png)和![](img/fec915b9-292c-4e75-9e7f-6cf4872bb1a7.png),则网络的优化参数可以表示为:
如果我们表示`G[AB]`的参数,则`G[BA]``D[A]``D[B]`设为`θ[GAB]``θ[GBA]``θ[DA]``θ[DB]`,则网络的优化参数可以表示为:
![](img/3d609715-cecb-4823-8ce5-87fda4d8846f.png)
......@@ -189,7 +189,7 @@ the number of input images processed : 30000
# DiscoGAN 的生成器
DiscoGAN 的生成器是前馈卷积神经网络,其中输入和输出是图像。 在网络的第一部分中,图像在空间维度上按比例缩小,而输出要素图的数量随图层的进展而增加。 在网络的第二部分中,图像沿空间维度按比例放大,而输出特征映射的数量则逐层减少。 在最终输出层中,将生成具有与输入相同的空间尺寸的图像。 如果生成器将图像`x[A]`转换为`x[AB]`从域`A`到域`B`表示为`G[AB]`,则我们有![](img/6c5507b6-7666-4601-8730-0b89c4a198fc.png)
DiscoGAN 的生成器是前馈卷积神经网络,其中输入和输出是图像。 在网络的第一部分中,图像在空间维度上按比例缩小,而输出要素图的数量随图层的进展而增加。 在网络的第二部分中,图像沿空间维度按比例放大,而输出特征映射的数量则逐层减少。 在最终输出层中,将生成具有与输入相同的空间尺寸的图像。 如果生成器将图像`x[A]`转换为`x[AB]`从域`A`到域`B`表示为`G[AB]`,则我们有`x[AB] = G[AB](x[A])`
此处显示的是`build_generator`函数,我们可以使用它来构建 DiscoGAN 网络的生成器:
......
......@@ -267,7 +267,7 @@ def get_clean_caption_data(self,text_path,feat_path):
`N + 1`时间步长,我们进入解码阶段,在此阶段,连同来自 LSTM 1 的`h[t]`(输出 1),先前的时间步的词嵌入矢量`w[t-1]`被馈送到 LSTM2。在这一阶段,没有到 LSTM 1 的输入,因为所有特征`f[t]`在时间步`N`耗尽。 解码阶段的时间步长由`self.caption_lstm_step`确定。
现在,如果我们用函数`f[2]`表示 LSTM 2 的活动,则`f[2](h[t], w[t-1]) = h[2t]`,其中`h[2t]`是 LSTM 2 在时间步`t`的隐藏状态。 该隐藏状态`h[2t]`在时间`t`时,通过 *softmax* 函数转换为输出单词的概率分布, 选择最高概率的单词作为下一个单词![](img/a18e98b6-e400-4784-9452-c7ab8bc9a7cc.png)
现在,如果我们用函数`f[2]`表示 LSTM 2 的活动,则`f[2](h[t], w[t-1]) = h[2t]`,其中`h[2t]`是 LSTM 2 在时间步`t`的隐藏状态。 该隐藏状态`h[2t]`在时间`t`时,通过 *softmax* 函数转换为输出单词的概率分布, 选择最高概率的单词作为下一个单词`o_hat[t]`
![](img/09b71b6c-5a27-49ae-965b-98e8810fbdb9.png) = ![](img/9ae080a8-cf15-45f5-ad50-b98244404366.png)
......@@ -477,7 +477,7 @@ unk => A substitute for a word that is not included in the vocabulary
![](img/21a19e2b-fef3-4156-b1b2-8812e5a6b329.png)
此处,![](img/6642a024-56d0-41c5-88a4-2f2bfe5820a2.png)是时间步长`t`时实际目标单词的一个热编码矢量,而![](img/3463c520-4df0-40bc-902b-27d871ed8803.png)是模型预测的概率矢量。
此处,`y^(t) = [y1^(t), y2^(t), ..., y[V]^(t)]`是时间步长`t`时实际目标单词的一个热编码矢量,而`p^(t) = [p1^(t), p2^(t), ..., p[V]^(t)]`是模型预测的概率矢量。
在训练期间的每个时期都会记录损失,以了解损失减少的性质。 这里要注意的另一件事是,我们正在使用 TensorFlow 的`tf.train.saver`函数保存经过训练的模型,以便我们可以恢复模型以进行推理。
......
......@@ -59,7 +59,7 @@ Q 值表也通过迭代`t`进行索引,因为代理只能查看到目前为止
![](img/823779f3-1c49-4d21-85ad-8bdc5c069e63.png)
在这里,![](img/46bb165d-fe66-4309-b669-3fb14c3bdb31.png)是折扣因子。 如我们所见,长期奖励结合了即时奖励`r[t]`和基于所展示的下一状态`s[t + 1]`的累积未来奖励。
在这里,`γ`是折扣因子。 如我们所见,长期奖励结合了即时奖励`r[t]`和基于所展示的下一状态`s[t + 1]`的累积未来奖励。
根据计算出的长期奖励,状态动作对`(s[t], a[t])`的现有 Q 值更新为 如下:
......@@ -81,13 +81,13 @@ Q 值表也通过迭代`t`进行索引,因为代理只能查看到目前为止
# 制定成本函数
使用架构比较容易,在该架构中,可以获取网络馈给的给定状态的所有动作的 Q 值。 在图 9.3 的右侧中也进行了说明。 我们将让代理与环境交互并收集状态和奖励,以此为基础我们将学习 Q 函数。 实际上,网络会通过将给定状态`s`的所有动作![](img/e80900f0-58f0-404b-b333-9afac7b951bd.png)的预测 Q 值与目标 Q 值的预测 Q 值最小化来学习 Q 函数。 每个训练记录都是一个元组`s[t], a[t], r[t], s[t + 1]`
使用架构比较容易,在该架构中,可以获取网络馈给的给定状态的所有动作的 Q 值。 在图 9.3 的右侧中也进行了说明。 我们将让代理与环境交互并收集状态和奖励,以此为基础我们将学习 Q 函数。 实际上,网络会通过将给定状态`s`的所有动作`[a[i]], i = 1 -> n`的预测 Q 值与目标 Q 值的预测 Q 值最小化来学习 Q 函数。 每个训练记录都是一个元组`s[t], a[t], r[t], s[t + 1]`
请记住,要根据网络本身计算目标 Q 值。 让我们考虑一个事实,即网络是由`W ∈ R^d`重参数化的,对于给定状态的每个动作,我们学习从状态到 Q 值的映射。 对于`n`组动作![](img/cf95e427-278f-4b63-ada8-cbc875aa51af.png),网络将预测与每个动作有关的`i`Q 值。 映射函数可以表示如下:
请记住,要根据网络本身计算目标 Q 值。 让我们考虑一个事实,即网络是由`W ∈ R^d`重参数化的,对于给定状态的每个动作,我们学习从状态到 Q 值的映射。 对于`n`组动作`[a[i]], i = 1 -> n`,网络将预测与每个动作有关的`i`Q 值。 映射函数可以表示如下:
![](img/1d914f16-68c7-46e4-bacd-426a6451178e.png)
在给定状态`s[t]`的情况下,此映射用于预测 Q 值,并且此预测![](img/97e96b85-ec2f-4e7e-9a65-7f9e3a443693.png)用于我们要最小化的成本函数。 这里要考虑的唯一技术是,我们只需要获取与实例`t`上观察到的动作`a[t]`相对应的预测 Q 值。
在给定状态`s[t]`的情况下,此映射用于预测 Q 值,并且此预测`p_hat(t)`用于我们要最小化的成本函数。 这里要考虑的唯一技术是,我们只需要获取与实例`t`上观察到的动作`a[t]`相对应的预测 Q 值。
我们可以基于下一个状态`s[t + 1]`使用相同的映射来构建目标 Q 值。 如上一节所述,对 Q 值的候选更新如下:
......@@ -119,13 +119,13 @@ Q 值表也通过迭代`t`进行索引,因为代理只能查看到目前为止
在上图中,我们可以看到两个网络:网络`A`,可以学习预测给定状态下的实际 Q 值;以及网络`B`,可以帮助计算目标 Q 值。 网络`A`通过最小化目标的损失函数和预测的 Q 值来进行改进。 由于 Q 值通常本质上是连续的,因此一些有效的损失函数为`mean squared error``mean absolute error``Huber Loss``log-cosh loss`等。
网络`B`基本上是网络`A`的副本,因此它们共享相同的架构。 通常以指定的时间间隔将网络`A`的权重复制到网络`B`。 这是为了确保不使用同一组网络权重来预测 Q 值,也不会制定目标 Q 值,因为这会导致不稳定的训练。 给定单个训练元组`(s[t] = s, a[t] = a, r[r] = r, s[t + 1] = s')`,网络`A`对所有可能的动作给出状态`s[t] = s`。 由于我们知道实际动作`a[t] = a`,因此我们选择 Q 值`Q[t](s[t] = a, a[t] = a)`。 这将充当我们的预测 Q 值![](img/def6bacb-9f53-4d6f-9766-5f4a67d24943.png)
网络`B`基本上是网络`A`的副本,因此它们共享相同的架构。 通常以指定的时间间隔将网络`A`的权重复制到网络`B`。 这是为了确保不使用同一组网络权重来预测 Q 值,也不会制定目标 Q 值,因为这会导致不稳定的训练。 给定单个训练元组`(s[t] = s, a[t] = a, r[r] = r, s[t + 1] = s')`,网络`A`对所有可能的动作给出状态`s[t] = s`。 由于我们知道实际动作`a[t] = a`,因此我们选择 Q 值`Q[t](s[t] = a, a[t] = a)`。 这将充当我们的预测 Q 值`y_hat`
现在,计算目标要困难一些,因为它涉及到两个网络。 我们知道在步骤`t`的任何状态`s[t]`的候选 Q 值是时间`t`的即时奖励`r[t]`,加上给定新状态`s[t + 1]`的在下一步`t + 1`的最大 Q 值。 候选 Q 值可以表示为:
![](img/b7a4a62e-cdc8-4476-8fa8-2dc532b1976c.png)
![](img/3324a291-28b5-4821-920a-394f71f7e4fe.png)是恒定折扣因子时就是这种情况。 奖励`r`已经是训练元组的一部分。 因此,我们唯一需要计算目标的是动作`a'`,该动作给出最大 Q 值,并将相应的 Q 值赋予相应的动作`a'`。 这个计算问题![](img/b1ae24ef-b42e-46c8-9bba-d3868b2e37ed.png)分为两个部分:
`γ`是恒定折扣因子时就是这种情况。 奖励`r`已经是训练元组的一部分。 因此,我们唯一需要计算目标的是动作`a'`,该动作给出最大 Q 值,并将相应的 Q 值赋予相应的动作`a'`。 这个计算问题`max[a'] Q[t](s', a)`分为两个部分:
* 网络`A`确定动作`a'`,该动作在状态`s'`下给出最大 Q 值。 但是,我们**不会**从网络`A`中获取与`a'`和状态`s'`对应的 Q 值。
* 网络`B`用于提取 Q 值`Q[tk](s', a')`对应于状态`s'`和动作`a'`
......@@ -134,7 +134,7 @@ Q 值表也通过迭代`t`进行索引,因为代理只能查看到目前为止
# 实施自动驾驶汽车
现在,我们将研究实现一种自动驾驶的无人驾驶赛车,该赛车使用深度 Q 网络学习如何在赛道上自行驾驶。 驾驶员和汽车将充当代理,赛车场及其周围环境将充当环境。 我们将使用 OpenAI Gym `CarRacing-v0`框架作为环境。 状态和奖励将由环境呈现给代理,而代理将通过采取适当的行动对代理采取行动。 这些状态采用从汽车前面的摄像头拍摄的图像的形式。 环境接受的动作为三维矢量`a ∈ R^3`的形式,其中第一个分量用于左转,第二个分量用于前移 第三部分用于向右移动。 该代理将与环境交互并将交互转换为![](img/59a5c19d-76a5-4b71-949f-f1ea1d801766.png)形式的元组。 这些交互元组将用作我们的训练数据。
现在,我们将研究实现一种自动驾驶的无人驾驶赛车,该赛车使用深度 Q 网络学习如何在赛道上自行驾驶。 驾驶员和汽车将充当代理,赛车场及其周围环境将充当环境。 我们将使用 OpenAI Gym `CarRacing-v0`框架作为环境。 状态和奖励将由环境呈现给代理,而代理将通过采取适当的行动对代理采取行动。 这些状态采用从汽车前面的摄像头拍摄的图像的形式。 环境接受的动作为三维矢量`a ∈ R^3`的形式,其中第一个分量用于左转,第二个分量用于前移 第三部分用于向右移动。 该代理将与环境交互并将交互转换为`(s, a, r, s'), i = 1 -> m`形式的元组。 这些交互元组将用作我们的训练数据。
该架构将类似于我们在图右侧所示的架构(“图 9.4A”和“图 9.4B”)。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册