深度学习 - 激活函数、梯度问题 and 损失函数

  • 激活函数

    • 函数、导数 and 优劣

      多层神经网络在计算过程中,如果没有非线性计算,那么多层网络等价于单层网络。所以激活函数应运而生,它可以规范梯度,加入非线性因素。

      1. Sigmoid

        函数: f ( z ) = 1 1 + e − Z f(z)=\frac{1}{1+e^{-Z}} f(z)=1+eZ1

        导数: f ′ ( z ) = f ( z ) [ 1 − f ( z ) ] f'(z)=f(z)[1-f(z)] f(z)=f(z)[1f(z)]

        特点:在 z 值较小(0附近)梯度较大,更新速度快;但在 z 值很大,趋于正、负无穷时梯度接近 0,致使更新变化缓慢,迭代速度低。

      2. Tanh (双曲正切)

        函数: f ( z ) = e z − e − z e z + e − z f(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}} f(z)=ez+ezezez

        导数: f ′ ( z ) = 1 − f 2 ( z ) f'(z)=1-f^2(z) f(z)=1f2(z)

        特点:与 Sigmoid 类似,相当于Sigmoid 的平移。

      3. ReLU (Rectified Linear Unit,修正线性单元)

        函数: f ( z ) = m a x ( 0 , z ) f(z)=max(0, z) f(z)=max(0,z)

        导数: f ′ ( z ) = { 1 , x > 0 0 , x ≤ 0 f'(z)=\begin{cases} 1, x>0\\ 0, x\le0\\ \end{cases} f(z)={1,x>00,x0

        特点:求梯度简单,可有效解决梯度消失问题,其单侧抑制提供了网络稀疏表达的能力。但会导致神经元不可逆死亡的问题,一旦等于 0 后则参数无法更新。

      4. LReLU (Leaky ReLU)

        函数: f ( z ) = m a x ( α z , z ) f(z)=max(αz,z) f(z)=max(αz,z)

        导数: f ′ ( z ) = { 1 , x > 0 α , x ≤ 0 f'(z)=\begin{cases} 1, x>0\\ α, x\le0\\ \end{cases} f(z)={1,x>0α,x0

        特点:

        ∙ \bullet α 为一个较小值,在具备 ReLU 的优点的基础上,在 <0 的部分不会使神经元死亡,只是用极小值代替,仍然保留神经元信息。但由于引入了 α,所以 α 超参数的选择称为问题。

        ∙ \bullet 由此又产生了 PReLU(Parametric ReLU),参数化的 ReLU,它将 α 作为可学习的参数,加入 BP训练,与其他参数一起优化。

        ∙ \bullet 或随机化 α,得到 RReLU (Random ReLU)。将 α 作为一个满足某种分布的随机采样,测试时再固定下来,从一定程度上能起到正则化的作用。

      5. ELU(指数线性单元)

        函数: f ( z ) = { x , x &gt; 0 α e x − 1 , x ≤ 0 f(z)=\begin{cases} x, x&gt;0\\ αe^x-1, x\le0\\ \end{cases} f(z)={x,x>0αex1,x0

        导数: f ′ ( z ) = { 1 , x &gt; 0 α e x , x ≤ 0 f&#x27;(z)=\begin{cases} 1, x&gt;0\\ αe^x, x\le0\\ \end{cases} f(z)={1,x>0αex,x0

        特点:具备以上的优点,输出的均值趋于 0,但由于指数的存在,计算量较大。

      6. Maxout

        函数: h i ( z ) = max ⁡ j ∈ [ 1 , k ] ( w 1 T z + b 1 , . . . , w k T z + b k ) h_i(z)=\max_{j\in[1,k]}{(w_1^Tz+b_1,...,w_k^Tz+b_k)} hi(z)=maxj[1,k](w1Tz+b1,...,wkTz+bk)

        导数: f ′ ( z ) = w k T , 其 中 w k T z + b k = m a x f&#x27;(z)=w_k^T,其中 w_k^Tz+b_k=max f(z)=wkTwkTz+bk=max

        特点:Maxout 可以看做另外加入一个激活函数层,包含一个参数k,代表增加了 k 个神经元,然后输出这 k 个神经元激活值的最大值。也可以形象化理解为 k 条线的拼接。除拥有以上多有优点外,它还可以拟合任意凸函数。

      其他详细介绍可参阅 激活函数

    • 梯度消失与梯度饱和
      1. 梯度消失

        问题:参数无法更新,模型无法训练。

        原因:主要因为网络层数太多,太深,导致梯度无法传播。本质应该是激活函数的饱和性。例如 Sigmoid 函数,倘若 x 值已经较大,此时梯度已经很小,而网络层数很多,多个极小值累乘,则梯度只会更小。

        解决:替换激活函数,减小网络层数。

      2. 梯度饱和

        问题:结果无法收敛。

        原因:梯度太大。

        解决:可以通过减小学习率、减小batch size(累积梯度更小)、 特征规范化(避免突然来一个较大的输入)、梯度裁剪。

        梯度裁剪 g = m i n ( θ ∣ ∣ g ∣ ∣ , 1 ) g=min(\frac{θ}{||g||},1) g=min(gθ,1),将梯度投影到较小的尺度上。

  • 反向传播

    主要是用链式求导,详情可见 反向传播与梯度下降

  • 平方差损失 and 交叉熵损失

    1. 平方差损失

      公式: J ( W , b ) = 1 2 ∣ ∣ y − f ( z ) ∣ ∣ 2 J(W,b)=\frac{1}{2}||y-f(z)||^2 J(W,b)=21yf(z)2

      导数: J ′ ( W , b ) = − [ y − f ( z ) ] f ′ ( z ) J&#x27;(W,b)=-[y-f(z)]f&#x27;(z) J(W,b)=[yf(z)]f(z)

      应用场景:更适合输出为连续值,且最后一层不含 Sigmoid 的神经网络。因为导数中包含了 f ′ ( z ) f&#x27;(z) f(z),所以如果使用 Sigmoid 作为激活函数,那么 Sigmoid 的梯度消失问题则会显现出来。

    2. 交叉熵损失

      公式: J ( W , b ) = − ∑ k = 1 n y k l n f ( z k ) J(W,b)=-\sum_{k=1}^{n}y_klnf(z_k) J(W,b)=k=1nyklnf(zk)

      导数: J ′ ( W , b ) = { f ( z i ) [ 1 − f ( z i ) ] , k i = k j − f ( z i ) f ( z j ) , k i ≠ k j J&#x27;(W,b)=\begin{cases} f(z_i)[1-f(z_i)],k_i=k_j\\ -f(z_i)f(z_j),k_i \ne k_j\\ \end{cases} J(W,b)={f(zi)[1f(zi)]ki=kjf(zi)f(zj)ki̸=kj

      应用场景:更适合二分类或多分类。使用 Softmax 作为激活函数时,最后一层不存在梯度消失问题,但是如果隐层仍然有 Sigmoid 激活函数,那么仍然存在梯度消失问题。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值