小言_互联网的博客

深度学习入门~激活函数③

240人阅读  评论(0)

神经网络的激活函数

双曲正切函数tanh(x)

  • 之前我们使用的神经网络,一直选择sigmoid函数作为激活函数,但实际上,激活函数可以是任何函数。

    使用双曲正切函数,它的表现比sigmoid函数更好。
    tanh(x)函数公式:

    函数曲线:介于(-1,1),类似于sigmoid函数的平移版本。

    使用tanh(x)的好处:
    ①函数图像过原点。(sigmoid函数的图像不过原点)
    ②收敛速度快于sigmoid函数。
  • 由于双曲正切函数介于(-1,1)之间,使用它作为激活函数好于sigmoid函数。因为使用它,激活函数的平均值更接近于0,让下一层的学习更方便。
  • 将双曲正切函数用于任何情况作为激活函数都是好的,除了将它用于输出层,因为如果y的真实值是二元分类的0或1,那么让y_hat介于0到1之间更为合理,此时使用sigmoid函数更合理。
  • sigmoid函数和tanh函数都有一个缺点,当Z很大或很小的时候,会使α十分接近1或-1,此时两个函数的斜率接近于0(以Logistic回归为例,改变参数W和b,Z的变化缓慢,导致y_hat - y的变化缓慢,降低梯度下降算法的速度),会降低梯度下降算法的速度。

ReLU函数-修正线性单元

  • ReLU函数公式:
  • ReLU函数图像:

激活函数的选择

  • 如果我们正在进行二元分类,理想的输出介于(0,1),那么使用sigmoid函数作为输出层的激活函数更理想。(除了用在二元分类问题中,其他情况下一定不要用)
  • tanh在任何场合下都比sigmoid函数更优越。
  • 而对于其他情况,使用ReLU函数已经变成激活函数的默认选择。如果不确定使用什么函数作为激活函数,那么就可以选择ReLU函数。
  • ReLU函数的一个缺点是,当Z<0时,ReLU函数的导数为0。在实践中,使用它仍然是没问题的。但ReLU函数还有另一个版本,叫带泄露的ReLU函数(Leaky ReLU)。

    👆当Z小于零时,Leaky ReLU函数的斜率不为0。其函数表达式为:α = max(0,01z,z)

为什么神经网络需要非线性的激活函数?

如果仅仅使用线性激活函数,那么最后得到的输出,也会是输入的线性组合,在神经网络中一直在做的只是计算线性激活函数,这种情况下,不如将所有的隐藏层都去掉。

  • 基本上,在机器学习问题中,只有一种情况下会使用到线性激活函数,即在线性回归问题当中。比如说,预测房价,输出不是介于0到1,而是一个实数。
  • 神经网络中间的隐藏层不可以使用线性激活函数,它可以用ReLU、tanh、Leaky ReLU等进行激活。所以在正常的神经网络中,唯一可能用到线性激活函数的地方,通常就是输出层。 除了这种情况,使用线性激活函数非常罕见。

激活函数的导数

当对神经网络进行反向传播计算时,需要真实地计算激活函数的斜率或导数。

  • 以sigmoid函数为例:

    sigmoid函数的表达式:

    sigmoid函数关于z的到导数:dg(z)/dz = g(z)×(1-g(z)),于神经网络中还可以写作g'(z) = a × (1-a)
    如上,当sigmoid函数的参数z很大的时候,导数会很接近于0,相反如果z很小的时候,导数也会很接近于0,当z = 0时,导数为 1/4 。
  • 以tanh函数为例:

    函数的导数g'(z) = dg(z)/dz = 1 - (tanh(z))^2。当z很大时,导数接近于0;当z很小时,导数也很接近于0。当z = 0时,导数为1。
  • 以ReLU和Leaky ReLU函数为例:

    ReLU函数:g(z) = max(0,z)
    导数:g'(z) = 0,z < 0 ; g'(z) = 1,z>0。而z = 0处,ReLU函数不可导,可以令此处的导数为0。

    Leaky ReLU函数:g(z) = max(0.01z,z)

神经网络的梯度下降法

  • 区分正向传播和反向传播:
    神经网络中的正向传播就是自输入矩阵X计算出输出A【2】,具体计算如下图:

👆如果是一个二元分类问题,那么可以将g设置为σ函数。
未完待续。


转载:https://blog.csdn.net/fatfairyyy/article/details/115756112
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场