深度学习系列一

激活函数

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 与交叉熵损失函数结合使用,为了数值稳定性,常常将两者合并实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/49507.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Passing output of 3DCNN layer to LSTM layer

题意&#xff1a;将3DCNN&#xff08;三维卷积神经网络&#xff09;层的输出传递给LSTM&#xff08;长短期记忆网络&#xff09;层 问题背景&#xff1a; Whilst trying to learn Recurrent Neural Networks(RNNs) am trying to train an Automatic Lip Reading Model using 3…

2024年上半年主要游戏安全风险,该如何应对?

随着游戏行业的蓬勃发展&#xff0c;安全问题也日益成为行业关注的焦点。面对 2024 年上半 年的游戏安全风险挑战&#xff0c;游戏行业需要不断加强技术能力&#xff0c;完善安全策略&#xff0c;与各方共 同努力&#xff0c;打造一个更加安全、公平的游戏环境。 游戏安全解…

前端程序员会演化出类TA岗位吗?

前端开发领域确实在不断演化&#xff0c;随着技术的进步和行业的需求变化&#xff0c;前端程序员的角色和职责也在拓展&#xff0c;这自然催生了一系列相关的专业岗位。以下是一些从前端开发领域分化出来的专业角色&#xff0c;我们可以称之为“类TA”&#xff08;Technical Ad…

BGP之选路MED

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时&#xff0c;BGP协议会对这些BGP路由的属性进行比较&#xff0c;以确定去往该目标网络的最优BGP路由。BGP路由属性的比较顺序为Preferred Value属性、Local Preference属性、路由生成方式、AS_Path属性、Origin属…

学习记录——day18 数据结构 树

树的存储 1、顺序存储 对于普通的二叉树&#xff0c;不适合存储普通的二叉树顶序存储&#xff0c;一般用于存储完全二叉树而言&#xff0c;如果使用顺序存储&#xff0c;会浪费大量的存储空间&#xff0c;因为需要给没有节点的位置留出空间&#xff0c;以便于后期的插入。 所以…

20分钟上手新版Skywalking 9.x APM监控系统

Skywalking https://skywalking.apache.org/ Skywalking是专为微服务、云原生和基于容器的&#xff08;Kubernetes&#xff09;架构设计的分布式系统性能监控工具。 Skywalking关键特性 ● 分布式跟踪 ○ 端到端分布式跟踪。服务拓扑分析、以服务为中心的可观察性和API仪表板。…

兼容浏览器,切换PC端显示PC端,切换H5端显示H5端

兼容浏览器&#xff0c;切换PC端显示PC端&#xff0c;切换H5端显示H5端 Uniapp vue3 Uview 项目 Vue3 Vite Ts ElementPlus PC端 &#xff08;在浏览器PC端&#xff0c;切换H5端兼容显示H5端页面&#xff09; 浏览器H5端 (在浏览器H5端&#xff0c;切换PC端兼容显示PC端…

CSS实现的扫光效果组件

theme: lilsnake 图片和内容如有侵权&#xff0c;及时与我联系~ 详细内容与注释&#xff1a; CSS实现的扫光效果组件 代码 技术栈与框架 Vue3 CSS 扫光效果的原理 扫光效果的原理就是从左到右无限循环的一个位移动画 实现方式 适配文字扫光效果的css .shark-box { …

Stable Diffusion基本原理通俗讲解

Stable Diffusion是一种基于深度学习的图像生成技术&#xff0c;它属于生成对抗网络&#xff08;GANs&#xff09;的一种。简单来说&#xff0c;Stable Diffusion通过训练一个生成器&#xff08;Generator&#xff09;和一个判别器&#xff08;Discriminator&#xff09;&#…

【linux】Shell脚本三剑客之sed命令的详细用法攻略

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

【OSS对象存储】Springboot集成阿里云OSS + 私有化部署Minio

【OSS对象存储】Springboot集成阿里云OSS 私有化部署Minio 一、摘要二、POM依赖三、配置文件四、表结构设计五、代码实现5.1 代码包结构5.2 API封装5.3 增删改查 六、扩展6.1 Minio配置https访问 一、摘要 掌握阿里云OSS、私有化部署Minio两种对象存储的使用方式运用工厂策略…

Blender 4.2 安装GIS插件步骤

Blender 4 更新以后插件安装变得复杂&#xff0c;插件界面的安装按钮不显示&#xff0c;界面布局改变&#xff0c;怎么安装插件&#xff1a; 1. 在线安装&#xff1a; “编辑”&#xff08;Edit&#xff09;>进入偏好设置&#xff08;Preferences setting&#xff09;>…

机械学习—零基础学习日志(高数10——函数图形)

零基础为了学人工智能&#xff0c;真的开始复习高数 函数图像&#xff0c;开始新的学习&#xff01;本次就多做一做题目&#xff01; 第一题&#xff1a; 这个解法是有点不太懂的了。以后再多研究一下。再出一道题目。 张宇老师&#xff0c;比较多提示了大家&#xff0c;一定…

设计模式12-构建器

设计模式12-构建器 由来和动机原理思想构建器模式的C代码实现构建器模式中的各个组件详解1. 产品类&#xff08;Product&#xff09;2. 构建类&#xff08;Builder&#xff09;3. 具体构建类&#xff08;ConcreteBuilder&#xff09;4. 指挥者类&#xff08;Director&#xff0…

kettle从入门到精通 第七十九课 ETL之kettle kettle读取数据库BLOB字段转换为文件

上一课我们讲解了如何将文件以二进制流的方式写入数据库&#xff0c;本节课我们一起学习下如何将二进制数据读取为文件。 1、将二进制流转换为文件这里主要用到了步骤【文本文件输出】。表输入步骤从表中读取blob字段&#xff0c;java代码定义二进制流转换为文件的全路径&#…

Apache Tomcat文件包含漏洞复现(详细教程)

1.漏洞原理 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;其安装后会默认开启ajp连接器&#xff0c;方便与其他web服务器通过ajp协议进行交互。属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和…

设计模式13-单件模式

设计模式13-单件模式 写在前面对象性能模式典型模式1. 单例模式&#xff08;Singleton Pattern&#xff09;2. 享元模式&#xff08;Flyweight Pattern&#xff09;3. 原型模式&#xff08;Prototype Pattern&#xff09;4. 对象池模式&#xff08;Object Pool Pattern&#xf…

【Django】在vscode中新建Django应用并新增路由

文章目录 打开一个终端输入新建app命令在app下的views.py内写一个视图app路由引入该视图项目路由引入app路由项目(settings.py)引入app&#xff08;AntappConfig配置类&#xff09;运行项目 打开一个终端 输入新建app命令 python manage.py startapp antapp在app下的views.py内…

源代码加密软件有什么用?源代码怎么防泄密

在软件开发领域&#xff0c;源代码被视为软件的生命线&#xff0c;它包含了实现特定功能的算法、业务逻辑以及技术细节&#xff0c;是软件公司的核心竞争力所在。由于源代码的重要性&#xff0c;其安全防护变得尤为关键。一旦源代码泄露&#xff0c;企业不仅面临财务损失&#…

DevExpress WinForms自动表单布局,创建高度可定制用户体验(二)

使用DevExpress WinForms的表单布局组件可以创建高度可定制的应用程序用户体验&#xff0c;从自动安排UI控件到按比例调整大小&#xff0c;DevExpress布局和数据布局控件都可以让您消除与基于像素表单设计相关的麻烦。 P.S&#xff1a;DevExpress WinForms拥有180组件和UI库&a…