提交 7f4ba406 编写于 作者: W wizardforcel

2021-01-08 21:08:13

上级 40b75534
......@@ -170,10 +170,10 @@
* 行数等于特征向量的数量(在我们的示例中为`x1``x2`)。
* 列数等于第一个隐藏层中的神经元数。
矩阵中的每个权重值都有一些后缀和上标。 如果我们将权重的一般形式表示为![](img/c16cd84f-3e3a-42e5-b619-a628b3160c0c.png),则应将其解释如下:
矩阵中的每个权重值都有一些后缀和上标。 如果我们将权重的一般形式表示为`W[jk]^l`,则应将其解释如下:
* `l`表示要从其到达重量的层。 在这种情况下,我们刚刚看到的权重矩阵将与输入层相关联。
* `j`表示神经元在![](img/ef96922d-fbab-4bf0-bac4-07dc23ece429.png)中的位置,而`k`表示神经元在该值传播到的下一层中的位置。
* `j`表示神经元在`l`中的位置,而`k`表示神经元在该值传播到的下一层中的位置。
权重通常是随机初始化的,这会向神经网络添加*随机*字符。 让我们为输入层随机初始化一个权重矩阵:
......@@ -183,19 +183,19 @@
![](img/4716dd77-2dfc-490d-b796-aa1215cab251.png)
第一个矩阵包含训练集中的所有实例(没有响应变量`y`),第二个矩阵是我们刚刚定义的权重矩阵。 乘法的结果存储在变量![](img/a85b6a85-7af3-46bc-aa93-70b13630a83d.png)中(此变量可以命名为任何名称,上标表示它与网络的第一个隐藏层有关)。
第一个矩阵包含训练集中的所有实例(没有响应变量`y`),第二个矩阵是我们刚刚定义的权重矩阵。 乘法的结果存储在变量`Z^(1)`中(此变量可以命名为任何名称,上标表示它与网络的第一个隐藏层有关)。
在将这些结果发送到下一层将应用激活功能的神经元之前,我们还有一步。 Sigmoid 激活函数和输入层的最终输出如下所示:
![](img/20a23d3e-6c8c-44ac-874b-3e088653fec9.png)
在这里,`Z^(1)`是我们对下一层神经元的最终输出。 注意,将 Sigmoid 函数应用于![](img/ad7faaaf-0c2c-4576-92b4-6b1cf41f2489.png)矩阵的每个元素。 最终矩阵的尺寸为`10 X 3`,其中每一行用于训练集中的每个实例,每一列用于第一隐藏层的每个神经元。
在这里,`Z^(1)`是我们对下一层神经元的最终输出。 注意,将 Sigmoid 函数应用于`Z^(1)`矩阵的每个元素。 最终矩阵的尺寸为`10 X 3`,其中每一行用于训练集中的每个实例,每一列用于第一隐藏层的每个神经元。
我们看到的整个计算没有我们最初谈到的偏差项`b`。 好吧,这只是在图片中添加另一个维度的问题。 在那种情况下,在我们将 sigmoid 函数应用于![](img/2f62dd1e-ca80-4973-a7da-b0b7622410bc.png)矩阵的每个元素之前,矩阵本身将被更改为以下形式:
我们看到的整个计算没有我们最初谈到的偏差项`b`。 好吧,这只是在图片中添加另一个维度的问题。 在那种情况下,在我们将 sigmoid 函数应用于`Z^(1)`矩阵的每个元素之前,矩阵本身将被更改为以下形式:
![](img/541cba3d-b30e-416a-8eac-8a9b0ec6f6f1.png)
经过这个矩阵乘法处理后,应用了 Sigmoid 函数并将输出发送到下一层的神经元,整个过程对 NN 中的每个隐藏层和输出层重复。 在继续过程中,我们应该从输出层获取![](img/7ca8c778-786e-4432-b25f-0409a6d2ef8c.png)
经过这个矩阵乘法处理后,应用了 Sigmoid 函数并将输出发送到下一层的神经元,整个过程对 NN 中的每个隐藏层和输出层重复。 在继续过程中,我们应该从输出层获取`a^(3)`
Sigmoid 激活函数输出的值范围为 0-1,但是我们正在处理二进制分类问题,我们只希望 0 或 1 作为 NN 的最终输出。 我们可以稍作调整。 我们可以在 NN 的输出层定义一个阈值-对于小于 0.5 的值,应将其标识为 0 类,而对于大于或等于 0.5 的值应将其标识为 1 类。请注意,这称为前向通过或前向传播。
......@@ -220,7 +220,7 @@ Sigmoid 激活函数输出的值范围为 0-1,但是我们正在处理二进
![](img/6d3375fb-d8cf-49aa-ba7e-26efe4d6b342.png)
在此,`y`表示给定实例的地面真值或真实标签(记住训练集中的响应变量`y`),![](img/e50fa991-8408-4440-88e2-cd37d88e29a1.png)表示由 NN 模型。 该函数本质上是凸的,对于凸优化器(例如梯度下降)而言非常理想。
在此,`y`表示给定实例的地面真值或真实标签(记住训练集中的响应变量`y`),`y_hat`表示由 NN 模型。 该函数本质上是凸的,对于凸优化器(例如梯度下降)而言非常理想。
这是我们没有选择一个更简单且不凸的损失函数的原因之一。 (如果您不熟悉凸和非凸等术语,请不要担心。)
......@@ -357,9 +357,9 @@ CNN 的核心是一个称为卷积的操作(在计算机视觉和图像处理
向网络依次提供字母`w, h``a`。 让我们尝试给这些字母指定索引:
* ![](img/454ba3b9-649e-4cae-877b-6b2cde5bf155.png)→![](img/f653ecc8-9aae-468b-983e-256285270df6.png)
* ![](img/173cfead-90f6-4776-83e6-208f4919ba20.png)→![](img/a2112f9b-9250-42c1-85c0-9be6fab58c48.png)
* ![](img/3e03023b-b603-4d60-bb97-cb51c112e8c1.png)→![](img/2815c5c2-68c2-44ae-a545-8a9227b5685e.png)
* `w -> (t - 1)`
* `h -> (t)`
* `a -> (t + 1)`
这些索引称为时间步长(图中的上标表示 RNN 的展开)。 循环层利用在先前时间步长给出的输入以及在当前时间步长上操作时的功能。 让我们一步一步地了解此循环层如何产生输出。
......@@ -383,7 +383,7 @@ CNN 的核心是一个称为卷积的操作(在计算机视觉和图像处理
![](img/8bbaa47e-7702-433d-aac9-870000b96aa9.png)
RNN ![](img/4b9aaa2a-87d5-487b-9d8c-6a54cb705d09.png)的第一遍是字母`w`。 我们将根据等式`(1)`随机初始化两个权重矩阵。 假设初始化后的矩阵![](img/06871357-5a95-4e0b-aee0-90bfb11dcc7c.png)如下所示:
RNN `x[1]`的第一遍是字母`w`。 我们将根据等式`(1)`随机初始化两个权重矩阵。 假设初始化后的矩阵`W[xh]`如下所示:
![](img/94ec44a4-d673-4c34-854b-e1d35c371270.png)
......@@ -392,19 +392,19 @@ RNN ![](img/4b9aaa2a-87d5-487b-9d8c-6a54cb705d09.png)的第一遍是字母`w`。
* `x = 3`,因为我们在递归层中有三个循环神经元
* `h = 4`,因为我们的词汇量是 4
矩阵![](img/a1666498-816b-4b2b-87a6-4c777b0e2976.png)`1×1`矩阵。 让我们将其值为 0.35028053。 我们还在这里介绍偏置项`b`,它也是`1 x 1`矩阵 0.6161462。 在下一步中,我们将把这些值放在一起并确定![](img/8d4bf29d-dca0-4114-9f7b-79469774b4a9.png)的值。 (稍后我们将处理第二个方程。)
矩阵`W[hh]``1×1`矩阵。 让我们将其值为 0.35028053。 我们还在这里介绍偏置项`b`,它也是`1 x 1`矩阵 0.6161462。 在下一步中,我们将把这些值放在一起并确定`h[t]`的值。 (稍后我们将处理第二个方程。)
# 将权重矩阵放在一起
首先确定![](img/c1ccae7d-7e2d-4c5c-9d8f-8f3d7d29a2bf.png)。 ![](img/d9784c61-5546-4ef2-8485-d134d1b8c132.png)是一个`4 x 1`的矩阵,表示我们先前定义的字母`w`。 矩阵乘法的标准规则在这里适用:
首先确定`W[xh]x[1]``x[1]`是一个`4 x 1`的矩阵,表示我们先前定义的字母`w`。 矩阵乘法的标准规则在这里适用:
![](img/234a5eeb-d4fd-4fb8-ad16-468a49bb1010.png)
现在我们将计算![](img/a1b2ed80-6b11-4cdd-b69f-4dd54bf630b9.png)项。 我们很快就会看到偏差项的重要性。 由于`w`是我们要馈送到网络的第一个字母,因此它没有任何先前的状态,因此,我们将![](img/47774b6e-33a9-495f-9c90-7a98bc56ad42.png)看作是一个由零组成的`3 x 1`矩阵:
现在我们将计算`W[hh]h[0] + b`项。 我们很快就会看到偏差项的重要性。 由于`w`是我们要馈送到网络的第一个字母,因此它没有任何先前的状态,因此,我们将`h[0]`看作是一个由零组成的`3 x 1`矩阵:
![](img/7dcad348-20fc-4827-96c5-f4e62ffd10bb.png)
请注意,如果不采用偏差项,我们将得到仅由零组成的矩阵。 现在,我们将根据公式`(1)`将这两个矩阵相加。 加法的结果是一个`3 x 1`的矩阵,并存储在![](img/fe80e464-21d6-468f-bbc8-1a23d3a7a9a5.png)(在这种情况下为![](img/def168f0-bef1-4905-8c0d-1ced2411df48.png))中:
请注意,如果不采用偏差项,我们将得到仅由零组成的矩阵。 现在,我们将根据公式`(1)`将这两个矩阵相加。 加法的结果是一个`3 x 1`的矩阵,并存储在`h[t]`(在这种情况下为`h[1]`)中:
![](img/8d9339a0-4050-4c6f-8756-c05e881ccb3c.png)
......@@ -412,33 +412,33 @@ RNN ![](img/4b9aaa2a-87d5-487b-9d8c-6a54cb705d09.png)的第一遍是字母`w`。
# 应用激活功能和最终输出
对于 RNN,![](img/ff3c61ce-bd96-4088-8fbe-4cf175154e52.png)是激活功能的不错选择。 因此,在应用![](img/00494d15-6793-4ec3-9fb8-3c3f40d6c9d9.png)之后,矩阵如下所示:
对于 RNN,`tanh`是激活功能的不错选择。 因此,在应用`tanh`之后,矩阵如下所示:
![](img/fefb7cb2-a21e-4ac2-8aaa-84401ab2bf71.png)
我们得到了![](img/5a3592f6-3ebd-4459-aa50-dfaa77b7eedd.png)的结果。 `ht`充当下一个时间步的![](img/1f0a601e-c001-4c1a-86b6-84ffa79cc16e.png)。 现在,我们将使用公式`(2)`计算![](img/62216a8f-4753-45e0-853e-a73540ac5f36.png)的值。 我们将需要另一个随机初始化的权重矩阵![](img/7e9e4820-3c32-47c8-9529-a914a16cdd59.png)(形状为`4 x 3`):
我们得到了`h[t]`的结果。 `ht`充当下一个时间步的`h[t-1]`。 现在,我们将使用公式`(2)`计算`y[t]`的值。 我们将需要另一个随机初始化的权重矩阵`W[hy]`(形状为`4 x 3`):
![](img/281bbcd0-d1ba-46a1-9998-7609b6319c5f.png)
应用第二个方程式后,![](img/d7a94c7b-b682-4671-99b8-63180437e306.png)的值变为`4 x 1`矩阵:
应用第二个方程式后,`y[t]`的值变为`4 x 1`矩阵:
![](img/0a969531-c833-44fd-8c6f-f034c65b267d.png)
现在,为了预测`w`之后的下一个字母是什么(请记住,我们所有的计算都以字母`w`开始,但我们仍然保留了 RNN)以从给定的词汇表中得出合适的词,我们将 softmax 函数应用于![](img/220321b9-76f4-476f-9fac-b77514106737.png)。 这将为词汇表中的每个字母输出一组概率:
现在,为了预测`w`之后的下一个字母是什么(请记住,我们所有的计算都以字母`w`开始,但我们仍然保留了 RNN)以从给定的词汇表中得出合适的词,我们将 softmax 函数应用于`y[t]`。 这将为词汇表中的每个字母输出一组概率:
![](img/20663bb4-96fe-4e90-bf5e-5ced2e6e9e10.png)
如果有人对学习 softmax 函数的外观感到好奇,可以在[这个页面](http://bit.ly/softmaxfunc)上找到一篇非常有用的文章。
因此,RNN 告诉我们`w`之后的下一个字母更有可能是![](img/fdcd5b37-b1e7-4248-8ec0-1569c96a25a8.png)。 至此,我们完成了 RNN 的初始遍历。 作为练习,您可以使用从此传递中获得的`ht`值,然后将其(以及下一个字母`h`)应用于 RNN 的下一传递,以了解发生了什么。
因此,RNN 告诉我们`w`之后的下一个字母更有可能是`a`。 至此,我们完成了 RNN 的初始遍历。 作为练习,您可以使用从此传递中获得的`ht`值,然后将其(以及下一个字母`h`)应用于 RNN 的下一传递,以了解发生了什么。
现在,让我们解决最重要的问题-什么是网络学习? 同样,权重和偏见! 您可能已经猜到了下一个句子。 使用反向传播进一步优化了这些权重。 现在,这种反向传播与我们之前看到的有些不同。 此版本的反向传播称为**时间上**的反向传播。 我们不会对此进行学习。 在结束本节之前,让我们总结一下在 RNN 前向传递过程中执行的步骤(在词汇表进行一次热编码之后):
* 随机初始化权重矩阵。
* 使用公式`(1)`计算![](img/06efe53c-1ce5-45a5-9526-995ad648f78c.png)
* 使用公式`(1)`计算`h[t]`
* 使用公式`(2)`计算![](img/71c99373-2b99-42eb-9199-be1382be273b.png)
* 将 softmax 函数应用于![](img/fbe962da-d664-4cf8-9c26-31ddc850c175.png),以获取词汇表中每个字母的概率。
* 使用公式`(2)`计算`y[t]`
* 将 softmax 函数应用于`y[t]`,以获取词汇表中每个字母的概率。
很高兴知道,除了 CNN 和 RNN 之外,还有其他类型的神经网络,例如自编码器,生成对抗网络,胶囊网络等。 在前两节中,我们详细了解了两种最强大的神经网络类型。 但是,当我们谈论前沿的深度学习应用程序时,这些网络是否足以被使用? 还是我们需要在这些基础上进行更多增强? 事实证明,尽管这些架构性能良好,但是它们无法扩展,因此需要更复杂的架构。 在下一章中,我们将介绍其中一些专门的架构。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册