浅层神经网络

This commit is contained in:
estomm
2020-10-21 10:36:53 +08:00
parent 5e0041c064
commit 71ecd37332
3 changed files with 15 additions and 13 deletions

View File

@@ -52,33 +52,35 @@ $$\hat{y} = a^{[2]} = \sigma(z^{[2]})$$
## 激活函数
有一个问题是神经网络的隐藏层和输出单元用什么激活函数。之前我们都是选用 sigmoid 函数,但有时其他函数的效果会好得多。
### 常见激活函数
![](2020-10-20-16-10-59.png)
可供选用的激活函数有:
$$
a = g(z)
$$
* tanh 函数the hyperbolic tangent function双曲正切函数
* sigmod函数
$$
a=\frac{1}{1-e^{-z}}
$$
* tanh 函数the hyperbolic tangent function双曲正切函数
$$a = \frac{e^z - e^{-z}}{e^z + e^{-z}}$$
效果几乎总比 sigmoid 函数好(除开**二元分类的输出层**,因为我们希望输出的结果介于 0 到 1 之间),因为函数输出介于 -1 和 1 之间,激活函数的平均值就更接近 0有类似数据中心化的效果。
> 效果几乎总比 sigmoid 函数好(除开**二元分类的输出层**,因为我们希望输出的结果介于 0 到 1 之间),因为函数输出介于 -1 和 1 之间,激活函数的平均值就更接近 0有类似数据中心化的效果。然而tanh 函数存在和 sigmoid 函数一样的缺点:当 z 趋紧无穷大(或无穷小),导数的梯度(即函数的斜率)就趋紧于 0这使得梯度算法的速度大大减缓。
然而tanh 函数存在和 sigmoid 函数一样的缺点:当 z 趋紧无穷大(或无穷小),导数的梯度(即函数的斜率)就趋紧于 0这使得梯度算法的速度大大减缓。
* **ReLU 函数the rectified linear unit修正线性单元**
* ReLU 函数the rectified linear unit修正线性单元
$$a=max(0,z)$$
当 z > 0 时,梯度始终为 1从而提高神经网络基于梯度算法的运算速度收敛速度远大于 sigmoid 和 tanh。然而当 z < 0 时,梯度一直为 0但是实际的运用中该缺陷的影响不是很大。
> 当 z > 0 时,梯度始终为 1从而提高神经网络基于梯度算法的运算速度收敛速度远大于 sigmoid 和 tanh。然而当 z < 0 时,梯度一直为 0但是实际的运用中该缺陷的影响不是很大。
* Leaky ReLU带泄漏的 ReLU
$$a=max(0.01z,z)$$
Leaky ReLU 保证在 z < 0 的时候,梯度仍然不为 0。理论上来说Leaky ReLU 有 ReLU 的所有优点,但在实际操作中没有证明总是好于 ReLU因此不常用。
![The_activation_function](The_activation_function.png)
在选择激活函数的时候,如果在不知道该选什么的时候就选择 ReLU当然也没有固定答案要依据实际问题在交叉验证集合中进行验证分析。当然我们可以在不同层选用不同的激活函数。
> Leaky ReLU 保证在 z < 0 的时候,梯度仍然不为 0。理论上来说Leaky ReLU 有 ReLU 的所有优点,但在实际操作中没有证明总是好于 ReLU因此不常用。在选择激活函数的时候,如果在不知道该选什么的时候就选择 ReLU当然也没有固定答案要依据实际问题在交叉验证集合中进行验证分析。当然我们可以在不同层选用不同的激活函数。
### 使用非线性激活函数的原因

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 KiB