提交 96947214 编写于 作者: W wizardforcel

2020-12-25 16:54:56

上级 d13216fd
......@@ -59,11 +59,11 @@
激活函数用于在神经网络中引入非线性。 我们将激活函数应用于权重乘以并加到偏差上的输入,即`f(z)`,其中`z = 输入 * 权重 + 偏差`。 激活函数有以下几种:
* **Sigmoid 函数**:Sigmoid 函数是最常用的激活函数之一。 它在`0``1`之间缩放值。 可以将 Sigmoid 函数定义为![](img/00163.jpeg)。 当我们将此功能应用于`z`时,值将在 0 到`1`的范围内缩放。 这也称为逻辑函数。 它是 Sigmoid,如下图所示:
* **Sigmoid 函数**:Sigmoid 函数是最常用的激活函数之一。 它在`0``1`之间缩放值。 可以将 Sigmoid 函数定义为`f(z) = 1 / (1 + e^z)`。 当我们将此功能应用于`z`时,值将在 0 到`1`的范围内缩放。 这也称为逻辑函数。 它是 Sigmoid,如下图所示:
![](img/00164.gif)
* **双曲正切函数**:与 Sigmoid 函数不同,双曲正切函数在`-1``+1`之间缩放值。 双曲正切函数可以定义为![](img/00165.jpeg)。 当我们将此功能应用于`z`时,这些值将在`-1``+1`的范围内缩放。 它也是 S 形,但居中为零,如下图所示:
* **双曲正切函数**:与 Sigmoid 函数不同,双曲正切函数在`-1``+1`之间缩放值。 双曲正切函数可以定义为`f(z) = (e^(2z) - 1) / (e^(2z) + 1)`。 当我们将此功能应用于`z`时,这些值将在`-1``+1`的范围内缩放。 它也是 S 形,但居中为零,如下图所示:
![](img/00166.gif)
......@@ -71,7 +71,7 @@
![](img/00168.gif)
* **Softmax 函数**:softmax 函数实际上是 Sigmoid 函数的推广。 它通常应用于网络的最后一层,同时执行多类分类任务。 它给出了每个类别作为输出的概率,因此 softmax 值的总和将始终等于`1`。 可以定义为![](img/00169.jpeg)
* **Softmax 函数**:softmax 函数实际上是 Sigmoid 函数的推广。 它通常应用于网络的最后一层,同时执行多类分类任务。 它给出了每个类别作为输出的概率,因此 softmax 值的总和将始终等于`1`。 可以定义为`σ(z[i]) = e^z[i] / Σ[j] e^z[j]`
# 深入研究 ANN
......@@ -105,7 +105,7 @@
yHat = sigmoid(z2)
```
前向传播很酷,不是吗? 但是我们如何知道神经网络生成的输出是否正确? 我们必须定义一个新函数,称为成本函数`J`,也称为损失函数,它告诉我们神经网络的性能如何。 有许多不同的成本函数。 我们将均方误差用作成本函数,可以将其定义为实际值![](img/00175.jpeg)与预测值![](img/00176.jpeg)之间的均方差:
前向传播很酷,不是吗? 但是我们如何知道神经网络生成的输出是否正确? 我们必须定义一个新函数,称为成本函数`J`,也称为损失函数,它告诉我们神经网络的性能如何。 有许多不同的成本函数。 我们将均方误差用作成本函数,可以将其定义为实际值`(y)`与预测值`(y_hat)`之间的均方差:
![](img/00177.jpeg)
......@@ -135,7 +135,7 @@
现在,让我们从数学上看一下。 现在,我们将讨论很多有趣的数学运算,因此戴上微积分帽并按照以下步骤操作。 因此,我们有两个权重,一个是`w[xh]`,对输入权重是隐藏的,另一个是`w[hy]`, 隐藏以输出权重。 我们需要根据我们的权重更新规则来更新这些权重。 为此,首先,我们需要计算成本函数相对于权重的导数。
由于我们正在反向传播,也就是说,从输出层到输入层,我们的第一权重将是`w[hy]`。 因此,现在我们需要计算`J`相对于`w[hy]`的导数。 我们如何计算导数? 回想一下我们的成本函数![](img/00183.jpeg)。 我们无法直接计算导数,因为`J`中没有`w[hy]`项。
由于我们正在反向传播,也就是说,从输出层到输入层,我们的第一权重将是`w[hy]`。 因此,现在我们需要计算`J`相对于`w[hy]`的导数。 我们如何计算导数? 回想一下我们的成本函数`J = 1 / 2(y - y_hat)`。 我们无法直接计算导数,因为`J`中没有`w[hy]`项。
回顾如下给出的前向传播方程:
......@@ -143,7 +143,7 @@
![](img/00185.jpeg)
首先,我们将计算相对于![](img/00186.jpeg)的偏导数,然后从![](img/00187.jpeg)计算相对于![](img/00188.jpeg)的偏导数。 从![](img/00189.jpeg),我们可以直接计算我们的导数![](img/00190.jpeg)。 这实际上是连锁规则。
首先,我们将计算相对于`y_hat`的偏导数,然后从`y_hat`计算相对于`z[2]`的偏导数。 从`z[2]`,我们可以直接计算我们的导数`w[hy]`。 这实际上是连锁规则。
因此,我们的等式变为:
......@@ -155,7 +155,7 @@
![](img/00193.jpeg)
其中![](img/00194.jpeg)是我们的 Sigmoid 激活函数的导数。 我们知道 Sigmoid 函数是![](img/00195.jpeg),所以 Sigmoid 函数的导数将是![](img/00196.jpeg)
其中`σ'`是我们的 Sigmoid 激活函数的导数。 我们知道 Sigmoid 函数是`σ = 1 / (1 + e^(-z))`,所以 Sigmoid 函数的导数将是`σ' = e^(-z) / (1 + e^(-z))^2`
![](img/00197.jpeg)
......@@ -189,7 +189,7 @@
一旦我们计算了两个权重的梯度,就将根据权重更新规则更新以前的权重。
现在,让我们做一些编码。 看等式`(1)``(2)`。 我们在两个方程式中都有![](img/00206.jpeg)和![](img/00207.jpeg),因此我们不必一遍又一遍地进行计算。 我们将其定义为`delta3`
现在,让我们做一些编码。 看等式`(1)``(2)`。 我们在两个方程式中都有`∂J/∂y_hat``∂J/∂z[2]`,因此我们不必一遍又一遍地进行计算。 我们将其定义为`delta3`
```py
delta3 = np.multiply(-(y-yHat),sigmoidPrime(z2))
......@@ -333,7 +333,7 @@ yhat = tf.nn.softmax(z2)
![](img/00209.jpeg)
其中![](img/00210.jpeg)是实际值,![](img/00211.jpeg)是预测值:
其中`y[i]`是实际值,`y_hat[i]`是预测值:
```py
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y * tf.log(yhat), reduction_indices=[1]))
......@@ -427,7 +427,7 @@ RNN 是一种特殊类型的神经网络,广泛应用于顺序数据。 换句
![](img/00218.jpeg)
在前面的示例中,![](img/00219.jpeg)是时间`t`时的实际单词,![](img/00220.jpeg)是时间`t`时的预测单词。 由于我们将整个序列作为训练样本,因此总损失将是每个时间步的损失总和。
在前面的示例中,`y[t]`是时间`t`时的实际单词,`y_hat[t]`是时间`t`时的预测单词。 由于我们将整个序列作为训练样本,因此总损失将是每个时间步的损失总和。
# 通过时间反向传播
......@@ -767,7 +767,11 @@ CNN 通常包含三个主要层:
您可以看到我们的滤镜已检测到实际图像中的边缘并产生了卷积图像。 类似地,使用不同的滤镜从图像中提取不同的特征。
例如,如果我们使用滤镜矩阵,比如说锐化滤镜![](img/00231.jpeg),那么我们的卷积图像将如下所示:
例如,如果我们使用滤镜矩阵,比如说锐化滤镜:
![](img/00231.jpeg)
那么我们的卷积图像将如下所示:
![](img/00232.jpeg)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册