神经网络与深度学习笔记(三)激活函数与参数初始化

激活函数

为什么使用激活函数?

线性激活函数一般用于输出。如果使用线性方程,而不使用激活函数,那么神经网络不管多少层,它的输出就仅仅是输入函数的线性变化

ReLu

神经网络与深度学习笔记(三)激活函数与参数初始化 - 图1

又称为整流线性单元函数,表达式可以表示为:

神经网络与深度学习笔记(三)激活函数与参数初始化 - 图2%0A#card=math&code=a%20%3D%20max%280%2Cz%29%0A)

ReLU函数一般可以默认使用,不知道用啥可以使用ReLU试试先。

ReLU函数在 神经网络与深度学习笔记(三)激活函数与参数初始化 - 图3 时,导数为1

神经网络与深度学习笔记(三)激活函数与参数初始化 - 图4 时,导数为0

leaky ReLU

神经网络与深度学习笔记(三)激活函数与参数初始化 - 图5

表达式可以表示为:

神经网络与深度学习笔记(三)激活函数与参数初始化 - 图6%0A#card=math&code=a%20%3D%20max%280.01z%2Cz%29%0A)

使用较少,与ReLU不同之处在于,当 神经网络与深度学习笔记(三)激活函数与参数初始化 - 图7 时,leaky ReLU,导数不为0

sigmoid

神经网络与深度学习笔记(三)激活函数与参数初始化 - 图8

主要用于二元分类,表达式为:

神经网络与深度学习笔记(三)激活函数与参数初始化 - 图9

除非是二元分类或输出层。其他的情景不建议用。或许使用tanh更好

tanh

神经网络与深度学习笔记(三)激活函数与参数初始化 - 图10

双曲正切函数,表达式为:

神经网络与深度学习笔记(三)激活函数与参数初始化 - 图11

一般情况下,tanh优于sigmoid,且具有居中数据的功能。

tanhsigmoid 在 x 很大或者很小时,斜率接近0,会减缓梯度下降的速度

如果不知道哪种激活函数的效果好,不妨都试一遍!

参数初始化

神经网络与深度学习笔记(三)激活函数与参数初始化 - 图12

对于参数 神经网络与深度学习笔记(三)激活函数与参数初始化 - 图13 我们不能初始化为0,因为那会出现对称失效的现象。当训练时, 神经网络与深度学习笔记(三)激活函数与参数初始化 - 图14 ,即 神经网络与深度学习笔记(三)激活函数与参数初始化 - 图15神经网络与深度学习笔记(三)激活函数与参数初始化 - 图16 一致,这就使得隐藏层的功能一样,而不同隐藏层应该有不同的功能。同时,参数 神经网络与深度学习笔记(三)激活函数与参数初始化 - 图17 初始化为0在反向传播时,求得的导数也会是一样的。

因此,神经网络与深度学习笔记(三)激活函数与参数初始化 - 图18 应该使用随机初始化。

  1. w1 = np.random.randn((2,2)) * 0.01 #当把0.01变成100时,在w增加,z增加的情况下,Z的梯度下降会变慢。

对于参数b 初始化为0时可以的。

检查矩阵维数

神经网络与深度学习笔记(三)激活函数与参数初始化 - 图19

在检查神经网络是否会出现错误时,使用检查矩阵维数的方法是很有效的

我们设 神经网络与深度学习笔记(三)激活函数与参数初始化 - 图20 为第 神经网络与深度学习笔记(三)激活函数与参数初始化 - 图21 层的单元数

则它们的维数

神经网络与深度学习笔记(三)激活函数与参数初始化 - 图22%5C%5C%0A#card=math&code=w%5E%7B%5Bl%5D%7D%2C%20dw%20%EF%BC%9A%28n%5E%7B%5Bl%5D%7D%2Cn%5E%7B%5Bl-1%5D%7D%29%5C%5C%0A)

神经网络与深度学习笔记(三)激活函数与参数初始化 - 图23%5C%5C%0A#card=math&code=b%5E%7B%5Bl%5D%7D%2C%20db%20%EF%BC%9A%28n%5E%7B%5Bl%5D%7D%2C1%29%5C%5C%0A)

神经网络与深度学习笔记(三)激活函数与参数初始化 - 图24%5C%5C%0A#card=math&code=z%5E%7B%5Bl%5D%7D%2Ca%5E%7Bl%7D%3A%28n%5E%7B%5Bl%5D%7D%2C1%29%5C%5C%0A)

神经网络与深度学习笔记(三)激活函数与参数初始化 - 图25%0A#card=math&code=Z%5E%7Bl%7D%2CA%5E%7Bl%7D%2CdZ%2CdA%3A%28n%5E%7B%5Bl%5D%7D%2Cm%29%0A)

同时,在编程时候,记得将 神经网络与深度学习笔记(三)激活函数与参数初始化 - 图26 缓存起来,以便反向传播调用数据

例如:输入 神经网络与深度学习笔记(三)激活函数与参数初始化 - 图27

  1. 输出 ![](https://g.yuque.com/gr/latex?a%5E%7Bl%7D#card=math&code=a%5E%7Bl%7D),![](https://g.yuque.com/gr/latex?Cache(z%5E%7B%5Bl%5D%7D%2Cw%5E%7B%5Bl%5D%7D%2Cb%5E%7B%5Bl%5D%7D)#card=math&code=Cache%28z%5E%7B%5Bl%5D%7D%2Cw%5E%7B%5Bl%5D%7D%2Cb%5E%7B%5Bl%5D%7D%29)
  2. 输入 ![](https://g.yuque.com/gr/latex?da%5E%7B%5Bl%5D%7D#card=math&code=da%5E%7B%5Bl%5D%7D)
  3. 输出 ![](https://g.yuque.com/gr/latex?da%5E%7B%5Bl-1%5D%7D%2Cdw%5E%7B%5Bl%5D%7D%2Cdb%5E%7B%5Bl%5D%7D#card=math&code=da%5E%7B%5Bl-1%5D%7D%2Cdw%5E%7B%5Bl%5D%7D%2Cdb%5E%7B%5Bl%5D%7D)

神经网络与深度学习笔记(三)激活函数与参数初始化 - 图28%5C%5C%0A#card=math&code=dz%5E%7B%5Bl%5D%7D%20%3D%20da%5E%7B%5Bl%5D%7D%20%2A%20g%5E%7B%5Bl%5D%27%7D%28z%5E%7B%5Bl%5D%7D%29%5C%5C%0A)

神经网络与深度学习笔记(三)激活函数与参数初始化 - 图29

神经网络与深度学习笔记(三)激活函数与参数初始化 - 图30

神经网络与深度学习笔记(三)激活函数与参数初始化 - 图31