码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【深度学习】5-从计算图直观认识“激活函数不以零为中心导致收敛变慢”


    ​🚩 前言

    活动地址:CSDN21天学习挑战赛

    “众所周知,激活函数最好具有关于零点对称的特性,不关于零点对称会导致收敛变慢”,这种说法看到几次了,但对于背后的原因却一直比较模糊,今天就来捋一捋。

    为此我阅读了一些文章,其中一篇个人觉得写得很棒(附在文末的参考中),但也花了一些时间才看懂(可能我比较笨?)。后面我发现从计算图来看这个问题会比较直观和容易理解一些。

    如果不了解计算图,可以查阅 齐藤康毅 的 《深度学习入门 基于python的理论与实现》的第五章:误差反向传播法。


    文章目录

    • ​🚩 前言
    • 1. 收敛变慢的原因
    • 2. 为何要“对称”?
    • 3. 与“参数值全相同”情况的对比
      • 3.1. 激活函数输出值全为正
      • 3.2. 参数值全相同


    1. 收敛变慢的原因

    先上计算图(某层神经网络的一小部分):

    在这里插入图片描述

    图中黑色箭头为正向推理,红色箭头为误差的反向传播。因为 s i g m o i d sigmoid sigmoid 函数的输出值都为正,故 x i x_i xi​ 的符号都相同且为正;则参数 w i w_i wi​ 的更新方向(增大\减小) x i a x_ia xi​a 仅由 a a a 决定。

    • 当 a a a 大于 0 ,所有参数更新时都增大
    • 当 a a a 小于 0, 所有参数更新时均减小

    所有参数更新方向始终一致会有什么影响?如果某次迭代收敛到最优参数,一个参数需要增大,另一个需要减小,那我们一致的参数更新方向就无法指向最优点,会形成一种锯齿型的路径,因此收敛到最优点的速度就慢。
    在这里插入图片描述
    图片来源:谈谈激活函数以零为中心的问题

    2. 为何要“对称”?

    前面我们看到,参数更新方向一致将导致锯齿状的更新路径。只要激活函数的值域分布在零的两边,就不会出现更新方向始终一致的问题了。

    那对称的意义是什么?像下图中,函数曲线偏向 y 的正半轴,那么更新参数时参数就更容易增大而不容易减小,但如何确定参数更应该增大还是减小呢?
    在这里插入图片描述

    3. 与“参数值全相同”情况的对比

    下面对比一下两个问题。

    1. 激活函数输出值全为正:参数更新路径为锯齿状,更新慢
    2. 参数值全相同:完全无法正常训练

    3.1. 激活函数输出值全为正

    对于激活函数输出值全为正,以二维的参数空间为例,它失去的是一半的方向。一对参数值更新量 ( Δ w 1 , Δ w 2 ) (\Delta w1, \Delta w2) (Δw1,Δw2) ,虽然 Δ w 1 \Delta w1 Δw1 与 Δ w 2 \Delta w2 Δw2 的符号相同,但参数不同的绝对值仍可以组合出丰富的更新方向,足以抵达这二维空间中的任意一点,因为第二、四象限中的任一个向量,都可以分解为第一、三象限中的两个向量。
    在这里插入图片描述

    3.2. 参数值全相同

    参数值全相同将导致所有参数的更新方向和幅度也相同(可参考:权重参数全相同值初始化,导致无法训练),此时模型完全报废,因为参数更新将只能在同一条直线上移动。
    在这里插入图片描述


    参考

    1. 《深度学习入门 基于python的理论与实现》齐藤康毅
    2. 谈谈激活函数以零为中心的问题

    博主主页:清风莫追_CSDN
    原文链接:http://t.csdn.cn/nIA0d

    ​

  • 相关阅读:
    Flink TaskManager的Memory Model内存模型
    第20章 设置应用程序的样式并对其进行部署
    如何用Python让你的电脑说话
    kvm 创建win11虚拟机
    基于C++实现的语音信号的处理与滤波
    金蝶云苍穹融资租赁系统V5.0发布。
    LeetCode-30. 串联所有单词的子串【滑动窗口】
    Could not load library libcudnn_cnn_train.so.8, 解决类似问题的思路与方法
    解剖—单链表相关OJ练习题
    27. Ubuntu 20.04 开机自动挂载文件/etc/fstab
  • 原文地址:https://blog.csdn.net/m0_63238256/article/details/126448584
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号