当前位置:   article > 正文

深度学习系列一

深度学习系列一

激活函数

sigmod

  1. 梯度消失问题:

    • sigmoid函数的导数在输入值较大或较小时接近于0。
    • 在反向传播过程中,这些小梯度会相乘,导致深层网络的梯度变得非常小。
    • 结果是,深层网络的参数几乎不会更新,训练变得非常困难。
    • 这就是为什么在5层以上的网络中,sigmoid函数容易导致梯度消失。
  2. 非零中心化:

    • sigmoid函数的输出范围是(0, 1),均值不是0。
    • 这会导致后续层的神经元接收到的输入总是正的,影响梯度下降的效率。
  3. 在实践中的使用限制:

    • 由于上述问题,sigmoid在隐藏层中很少使用。
    • 现代神经网络更常用ReLU等其他激活函数。
  4. 二分类输出层的应用:

    • sigmoid函数输出范围(0,1),可以解释为概率。
    • 这使它非常适合二分类问题的输出层,где输出可以直接解释为属于某类的概率。

梯度消失

想象一下sigmoid函数就像一个S形的滑梯:

  1. 滑梯的特点:

    • 滑梯中间部分比较陡。
    • 两端(顶部和底部)非常平缓,几乎是水平的。
  2. 梯度就像球在滑梯上滚动的速度:

    • 在中间部分,球滚动得快(梯度大)。
    • 在两端,球几乎不动(梯度接近零)。
  3. 反向传播过程:

    • 想象你有多个这样的滑梯连在一起(多层网络)。
    • 你从最后一个滑梯开始往回推球。
  4. 梯度消失现象:

    • 如果球落在任何一个滑梯的平缓部分,它就几乎停止了。
    • 当你试图把这个几乎不动的球推回前面的滑梯时,它在每个滑梯上都几乎不动。
  5. 对深层网络的影响:

    • 在5层以上的网络中,球(梯度)经过多个滑梯后,速度变得极其缓慢。
    • 这意味着网络的前面几层几乎收不到任何"推力"来更新它们的参数。
  6. 训练困难:

    • 如果前面的层不能有效更新,整个网络就难以学习和改进。
    • 这就像你试图教一个团队,但只有最后几个人能听到你的指令,而前面的人几乎听不到任何东西。

梯度的作用:

  1. 指导方向:梯度指示了函数值下降最快的方向。
  2. 更新参数:在训练过程中,我们使用梯度来更新网络的权重和偏置。
  3. 评估影响:梯度大小表示输入变化对输出的影响程度。

为什么要相乘: 在深度神经网络中,我们使用链式法则来计算梯度。这就需要相乘多个局部梯度。

举个简单的例子: 假设有一个两层网络:输入 x,通过函数 f 到中间层,再通过函数 g 到输出 y。

y = g(f(x))

要计算 dy/dx(输入x对输出y的影响),我们需要:

dy/dx = dy/df * df/dx

这里:

  • dy/df 是 g 的导数
  • df/dx 是 f 的导数

在更深的网络中,这种相乘会一直延续到输入层。

实际应用:

  1. 反向传播:计算每一层参数的梯度,需要从输出层向输入层传播误差。这个过程中会连续相乘多个局部梯度。

  2. 参数更新: 新参数 = 旧参数 - 学习率 * 梯度

    如果梯度接近零(由于多次相乘变得很小),参数几乎不会更新。

  3. 理解网络:通过观察梯度,我们可以理解输入的微小变化如何影响最终输出。

为什么要进行反向传播:

反向传播是训练神经网络的核心算法,主要有以下几个原因:

a) 效率:

  • 正向计算每个参数的梯度会非常耗时。
  • 反向传播利用了中间计算结果,大大提高了效率。

b) 更新参数:

  • 我们需要知道如何调整每一层的权重和偏置。
  • 反向传播能精确计算每个参数对最终损失的影响。

c) 处理复杂网络:

  • 对于深层网络,正向计算梯度几乎不可能。
  • 反向传播使得训练深层网络成为可能。

d) 实现反馈机制:

  • 类似于人类学习过程中的纠错。
  • 从输出的误差开始,逐层调整网络参数。

e) 梯度下降优化:

  • 反向传播提供了准确的梯度信息。
  • 这些梯度用于梯度下降算法,优化网络参数。

f) 理解网络行为:

  • 通过观察梯度流动,我们可以理解网络各部分的重要性。
  • 有助于网络结构的设计和优化。

 反向传播通俗化解释

a) 效率:

想象你在爬一座有100层的大楼,每层都有不同的密码锁。

  • 正向计算就像你每次都从1楼开始,一层层爬上去,尝试每一层的密码。每次只改动一个密码,就得重新从头爬一遍。
  • 反向传播则像是你先爬到顶楼,然后在下楼的过程中记录每层的情况。这样,你只需爬一次楼,就能获得所有楼层的信息。

反向传播通过聪明地利用已经计算过的信息,大大减少了重复工作。

b) 更新参数:

把神经网络想象成一个复杂的音响系统,有很多旋钮可以调节。

  • 我们的目标是调出最好的音效(最小化损失)。
  • 但是,直接调整旋钮很难知道对最终音效的影响。
  • 反向传播就像是一个精确的测量工具,告诉你每个旋钮对最终音效的具体影响。
  • 有了这个工具,你就知道该扭哪个旋钮,扭多少,来改善音效。

c) 处理复杂网络:

想象你在指挥一个有1000人的大合唱团。

  • 正向计算就像你要单独告诉每个人如何调整他们的声音,然后每次只调整一个人,再听整体效果。这几乎是不可能完成的任务。
  • 反向传播就像你先听整体效果,然后从后排开始,逐排给出调整建议。每一排都基于后面几排的反馈来调整。这样,即使是1000人的合唱团,你也能有效地进行指导。

反向传播使得我们能够有效地"指挥"非常深和复杂的神经网络,即使它们有成百上千的层次。

总的来说,反向传播就像是一个聪明的"信息传递系统",它让我们能够高效地了解复杂网络中每个小部分的作用,从而进行精确的调整。这在处理大规模、多层次的神经网络时特别重要。

tanh激活函数 

 与 Sigmoid 相比,它是以 0 为中心的,使得其收敛速度要比 Sigmoid 快,减少迭代次数。然而,从图中可以看出,Tanh 两侧的导数也为 0,同样会造成梯度消失。

 在隐藏层使用tanh函数,在输出层使用sigmoid函数

  1. 隐藏层使用 tanh 函数:

    a) 中心化输出:tanh 函数的输出范围是 (-1, 1),均值为 0。这种中心化的特性有助于后续层的学习。

    b) 梯度更强:tanh 的导数范围是 (0, 1],比 sigmoid 的导数范围 (0, 0.25] 更大,有助于减轻梯度消失问题。

    c) 非线性:tanh 提供了必要的非线性,允许网络学习复杂的模式。

  2. 输出层使用 sigmoid 函数:

    a) 二元分类:sigmoid 函数的输出范围是 (0, 1),可以直接解释为概率,特别适合二元分类问题。

    b) 多标签分类:在多标签分类中,我们需要每个输出节点独立地表示一个类别的概率,sigmoid 很适合这种情况。

    c) 概率输出:在需要概率输出的回归问题中,sigmoid 也很有用。

  3. 为什么不在所有层都使用 tanh:

    a) 输出需求:很多任务需要 0 到 1 之间的输出,这正是 sigmoid 的范围。

    b) 解释性:在分类问题中,sigmoid 的输出更容易解释为概率。

  4. 为什么不在所有层都使用 sigmoid:

    a) 梯度消失:sigmoid 在两端的梯度非常小,容易导致梯度消失问题。

    b) 非零中心:sigmoid 的输出不是零中心化的,可能会导致后续层的输入偏移。

激活函数输出的中心化特性为什么有助于后续层的学习

  1. 中心化的含义: 中心化意味着数据的平均值接近于0。tanh函数的输出范围是(-1, 1),其平均值趋近于0,这就是所谓的"中心化"。

  2. 为什么中心化有帮助:

    a) 减少偏置偏移(Bias Shift):

    • 如果输入总是正的(如sigmoid的输出),会导致下一层神经元的偏置项总是朝一个方向更新。
    • 中心化的输入使得正负值大致平衡,减少了这种系统性的偏移。

    b) 加速学习:

    • 中心化的数据通常能让优化算法(如梯度下降)更快地收敛。
    • 这是因为损失函数的等高线在中心化数据上往往更圆,更容易优化。

    c) 改善梯度流动:

    • 在反向传播中,中心化的激活值有助于梯度更均匀地流向网络的不同部分。
    • 这可以减轻梯度消失或爆炸的问题。

    d) 增强特征的表达能力:

    • 中心化的输出允许后续层更容易地学习到正负两种模式。
    • 这增加了网络表达复杂函数的能力。
  3. 具体例子: 假设下一层的某个神经元计算 w * x + b:

    • 如果x总是正的(如sigmoid输出),那么w和b的调整会有一定的关联性。
    • 如果x是中心化的(如tanh输出),w和b可以更独立地调整,提供更大的灵活性。
  4. 对比sigmoid: sigmoid的输出范围是(0, 1),不是中心化的。这可能导致:

    • 后续层的输入有一个正的偏移。
    • 梯度更新时可能会出现某些系统性的偏差。

  1. 非中心化数据的情况:

    • 这就像在一个狭长的山谷里。
    • 山谷的一边可能很陡,另一边可能很缓。
    • 你在这里行走时,可能会反复横跳:在陡峭的一侧迈大步,在平缓的一侧迈小步。
    • 这样走起来很不顺畅,需要很多次调整才能到达最低点。
  2. 中心化数据的情况:

    • 这更像是在一个圆形的碗状山谷里。
    • 四周的坡度大致相同。
    • 你可以更直接地朝着中心(最低点)走去。
    • 不需要太多的左右摇摆,你的路径会更直接、更高效。
  3. 在机器学习中:

    • "走路"就是优化算法(如梯度下降)调整参数的过程。
    • "山谷的形状"就是损失函数的等高线。
    • 中心化的数据tends to创造更"圆"的等高线,使得优化过程更顺畅。
  4. 为什么会这样:

    • 非中心化数据可能在某些维度上有很大的值,在其他维度上有很小的值。
    • 这会导致损失函数在不同维度上的变化速率差异很大。
    • 中心化后,数据在各个维度上的尺度更接近,使得损失函数的行为更均匀。
  5. 实际效果:

    • 使用中心化数据,优化算法通常能更快地找到最优解。
    • 需要的迭代次数可能会减少。
    • 最终得到的解可能会更好(更接近全局最优)。

Relu激活函数

 

        从上述函数图像可知,ReLU 激活函数将小于 0 的值映射为 0,而大于 0 的值则保持不变,它更加重视正信号,而忽略负信号,这种激活函数运算更为简单,能够提高模型的训练效率。

        从图中可以看到,当x<0时,ReLU导数为0,而当x>0时,则不存在饱和问题。所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。然而,随着训练的推进,部分输入会落入小于0区域,导致对应权重无法更新。这种现象被称为“神经元死亡”。

        ReLU是目前最常用的激活函数。与sigmoid相比,RELU的优势是:

        采用sigmoid函数,计算量大(指数运算),反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。 sigmoid函数反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练。 Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。

  1. ReLU的确引入了非线性: 虽然ReLU在正半轴是线性的,但它在整体上是非线性的。这是因为: f(x) = max(0, x)

    这个函数在x=0处有一个"拐点",这就引入了非线性。

  2. 分段线性函数: ReLU实际上是一个分段线性函数。它在不同的输入范围有不同的行为:

    • 当x > 0时,f(x) = x
    • 当x ≤ 0时,f(x) = 0
  3. 非线性的重要性: 这种非线性是至关重要的。如果没有这种非线性:

    • 整个神经网络将退化为一个线性模型
    • 网络将失去学习复杂模式的能力
  4. ReLU的非线性效果:

    • 它能够有选择地激活神经元(当输入为正时)
    • 这种"开关"行为使网络能够学习复杂的非线性决策边界
  5. 与其他激活函数的比较:

    • 相比sigmoid或tanh,ReLU的非线性可能不那么明显
    • 但它的简单性和有效性使它在许多情况下表现更好
  6. 实际应用中的非线性: 在深度网络中,多层ReLU的组合可以近似任何复杂的非线性函数

  7. ReLU的优势:

    • 计算简单,有利于快速训练
    • 在正区间梯度恒为1,有助于缓解梯度消失问题
    • 产生稀疏激活,可能带来一些正则化效果

softmax

  1. Softmax 作为激活函数:

    • 在神经网络的输出层使用,将原始输出转换为概率分布。
    • 引入非线性,允许网络学习复杂的决策边界。
  2. Softmax 作为归一化方法:

    • 确实,Softmax 可以被视为一种特殊的归一化技术。
    • 它将任意实数值的向量转换为和为 1 的概率分布。
  3. 归一化特性:

    • 输出总和为 1:Σᵢ softmax(xᵢ) = 1
    • 保持相对大小关系:较大的输入对应较大的输出概率。
  4. 与其他归一化方法的比较:

    • Min-Max 归一化:将值缩放到 [0,1] 范围,但和不必为 1。
    • L2 归一化:缩放向量使其 L2 范数为 1。
    • Softmax:不仅将值映射到 (0,1),还确保和为 1。
  5. Softmax 的指数特性:

    • 使用指数函数 (exp) 放大了输入之间的差异。
    • 这使得最大值更加"突出",有利于分类任务。
  6. 在机器学习中的广泛应用:

    • 多类分类问题中的标准选择。
    • 在注意力机制、强化学习等领域也有重要应用。
  7. 温度参数:

    • Softmax 可以引入温度参数来调整输出分布的"软硬度"。
    • softmax(xᵢ/T),其中 T 是温度。
    • 较低的温度使分布更"尖锐",较高的温度使分布更均匀。
  8. 计算稳定性考虑:

    • 在实践中,常常会减去输入的最大值以提高数值稳定性。
    • 这不会改变 Softmax 的结果,但可以防止指数计算中的溢出。

  1. Softmax 的主要用途:

    • 主要用在神经网络的输出层,特别是在多类分类问题中。
    • 不常用作隐藏层的激活函数。
  2. 为什么不常用于隐藏层:

    • 计算成本高:需要计算所有神经元的总和,对大型网络来说可能效率低下。
    • 全局依赖性:每个输出都依赖于所有输入,这可能不适合某些网络结构。
    • 可能引入不必要的约束:强制输出和为1可能限制网络的表达能力。
  3. 常用的隐藏层激活函数:

    • ReLU 及其变体(如 Leaky ReLU, ELU)
    • tanh
    • Sigmoid(在某些特定情况下)
  4. Softmax 的特殊地位:

    • 在输出层中几乎是多类分类问题的标准选择。
    • 提供了直接可解释为概率的输出。
  5. 其他常见用途:

    • 在注意力机制中用于计算注意力权重。
    • 在某些强化学习算法中用于动作选择。
  6. Softmax 的变体:

    • Hierarchical Softmax:用于大规模分类问题,提高计算效率。
    • Sparsemax:产生稀疏的概率分布,在某些情况下更有优势。
  7. 与其他输出层激活函数的比较:

    • 二元分类:常用 Sigmoid
    • 多标签分类:可能使用多个 Sigmoid
    • 回归问题:通常不使用 Softmax,可能直接使用线性输出
  8. 在深度学习框架中的实现:

    • 通常,Softmax 与交叉熵损失函数结合使用,为了数值稳定性,常常将两者合并实现。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/866083
推荐阅读
相关标签
  

闽ICP备14008679号