机器学习—非零中心化、非零中心化会带来的问题

2023-09-18 22:28:27

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

 神经元模型

        如图1所示是神经网络中一个典型的神经元设计,它完全仿照人类大脑中神经元之间传递数据的模式设计。大脑中,神经元通过若干树突(dendrite)的突触(synapse),接受其他神经元的轴突(axon)或树突传递来的消息,而后经过处理再由轴突输出。 

图1 经典神经元模型

图1来自:聊一聊深度学习的activation function - 知乎

        在图1中, xi 是其他神经元的轴突传来的消息, wi 是突触对消息的影响, wi*xi 则是神经元树突上传递的消息。这些消息经由神经元整合后再激活输出( f(z) )。这里,整合的过程是线性加权的过程,各输入特征 xi 之间没有相互作用。激活函数(active function)一般来说则是非线性的,各输入特征 xi 在此处相互作用。

Sigmoid 函数

Sigmodid 函数表达式:\sigma(x)=\tfrac{1}{1+e^{-x}}

图2 Sigmoid函数图像及其导函数图像

        Sigmoid函数是深度学习领域开始时使用频率最高的activation function。它是便于求导的平滑函数,其导数为\sigma (x)(1-\sigma(x)),这是优点。然而,Sigmoid有三大缺点:

  • 容易出现gradient vanishing
  • 函数输出并不是zero-centered
  • 幂运算相对来讲比较耗时

Gradient Vanishing

        优化神经网络的方法是Back Propagation,即导数的后向传递:先计算输出层对应的loss,然后将loss以导数的形式不断向上一层网络传递,修正相应的参数,达到降低loss的目的。
        Sigmoid函数在深度网络中常常会导致导数逐渐变为0,使得参数无法被更新,神经网络无法被优化。原因在于两点:
(1) 在上图中容易看出,当σ(x) 中 x 较大或较小时,导数接近0,而后向传递的数学依据是微积分求导的链式法则,当前层的导数需要之前各层导数的乘积,几个小数的相乘,结果会很接近0。
(2) Sigmoid导数的最大值是0.25,这意味着导数在每一层至少会被压缩为原来的1/4,通过两层后被变为1/16,…,通过10层后为1/1048576。请注意这里是“至少”,导数达到最大值这种情况还是很少见的。

输出不是zero-centered

        Sigmoid函数的输出值恒大于0,这会导致模型训练的收敛速度变慢。举例来讲,对\sigma \left ( \sum_{i}{w}_{i}*{x}_{i}+b \right ),如果所有{x}_{i} 均为正数或负数,那么其对{w}_{i}的导数总是正数或负数,这会导致如下图红色箭头所示的阶梯式更新,这显然并非一个好的优化路径。深度学习往往需要大量时间来处理大量数据,模型的收敛速度是尤为重要的。所以,总体上来讲,训练深度学习网络尽量使用zero-centered数据 (可以经过数据预处理实现) 和zero-centered输出。

图3 阶梯式更新参数

幂运算相对耗时

        相对于前两项,这其实并不是一个大问题,我们目前是具备相应计算能力的,但面对深度学习中庞大的计算量,最好是能省则省 。

参考自:

聊一聊深度学习的activation function - 知乎
谈谈激活函数以零为中心的问题 | 始终
cs231n_激活函数_unit gaussian_zone_chan的博客-CSDN博客
【深度学习】5-从计算图直观认识“激活函数不以零为中心导致收敛变慢”_收敛的很慢_清风莫追的博客-CSDN博客
【深度学习】1-权重参数全相同值初始化,导致无法训练_深度学习所有参数初始化一致有什么问题_清风莫追的博客-CSDN博客

更多推荐

Vue之vue-cli搭建SPA项目

目录​编辑前言一、vue-cli简介1.什么是vue-cli2.vue-cli的重要性3.vue-cli的应用场景二、Vue-cli搭建SPA项目1.构建前提(node.js安装完成)2.安装vue-cli3.使用脚手架vue-cli(2.X版)来构建项目4.分析创建spa项目的八个问题5.在开发工具中导入新建的SPA

tensorflow基础

windows安装tensorflowanaconda或者pip安装tensorflow,tensorflow只支持win764系统,本人使用tensorflow1.5版本(pipinstalltensorflow==1.5)tensorboardtensorboard只支持chrome浏览器,而且加载过程中可能有一段

革命性创新:RFID技术引领汽车零部件加工新时代

革命性创新:RFID技术引领汽车零部件加工新时代RFID(RadioFrequencyIdentification,射频识别)技术是一种利用无线电频率进行自动识别的技术,可以快速、准确地识别物体并获取相关数据。在汽车零部件加工中,RFID技术可以发挥重要作用,提高生产效率、降低成本和减少错误。本文将介绍RFID在汽车零

激光焊接汽车PP塑料配件透光率测试仪

随着汽车主机厂对车辆轻量化的需求越来越强烈,汽车零部件轻量化设计、制造也成为汽车零部件生产厂商的重要技术指标。零部件企业要实现产品的轻量化,在材料指定的情况下,要通过产品设计优化、产品壁厚减小和装配方式的优化来解决。使用PP材料的汽车部品由于PP材料缩水率高,薄壁化设计会带来后续开发过程产品表面缩水、顶杆痕、应力痕等缺

最新Java JDK 21:全面解析与新特性探讨

🌷🍁博主猫头虎带您GotoNewWorld.✨🍁🦄博客首页——猫头虎的博客🎐🐳《面试题大全专栏》文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大

ChatGPT与日本首相交流核废水事件-精准Prompt...

了解更多请点击:ChatGPT与日本首相交流核废水事件-精准Prompt...https://mp.weixin.qq.com/s?__biz=Mzg2NDY3NjY5NA==&mid=2247490070&idx=1&sn=ebdc608acd419bb3e71ca46acee04890&chksm=ce64e42f

时序数据库 IoTDB 发布端边云原生解决方案,有效优化工业互联网数据上传时效与资源消耗...

2023年9月8日,由中国通信学会、福建省工业和信息化厅主办的2023中国国际工业互联网创新发展大会在厦门举办。大会主论坛中,时序数据库IoTDB发表其自研建立的端边云原生解决方案,该方案可实现端侧设备、边缘服务器、数据中心数据的协同汇聚,达到数据实时上传、带宽成本控制、与多终端同步管理。01关于大会为贯彻落实国家两个

大模型为使用Prompt提供的指导和建议

当使用大型语言模型时,合适的Prompt对于获取理想的响应至关重要。以下是一些常见任务的Prompt示例,以供参考:1.自然语言生成:“请为我生成一篇关于气候变化影响的文章。”“写一封感谢信,内容表达对某位导师的感激之情。”“编写一首诗,描述夏天的美丽。”2.问答任务:“回答以下问题:什么是人工智能?”“解释量子力学的

Java 泛型

目录(generic泛型)引言-idea技巧(快捷键)泛型的理解和好处传统方式用泛型来解决前面的问题(快速入门)泛型的好处泛型基本语法泛型介绍示例代码泛型的声明泛型的实例化(什么时候给泛型指定一个具体的类型)-一般来说是创建一个对象的时候指定的示例代码泛型语法和使用泛型使用案例自定义泛型自定义泛型类自定义泛型接口自定义

Prompt-To-Prompt——仅通过文本进行图像编辑

文章目录1.摘要2.算法2.1Cross-attentionintext-conditionedDiffusionModels2.2ControllingtheCross-attentionWordSwapAddingaNewPhraseAttentionRe–weighting3.应用Text-OnlyLocaliz

【C++】动态内存管理 ④ ( 对象的动态创建和释放引申思考 | 基础数据类型 内存分析 | malloc 分配内存 delete 释放 | new 分配内存 free 释放内存 )

文章目录一、对象的动态创建和释放引申思考二、基础数据类型内存分析1、malloc分配内存delete释放内存2、new分配内存free释放内存一、对象的动态创建和释放引申思考malloc和free是C语言stdlib标准库中的函数,用于分配和回收堆内存;new和delete是C++语言中的操作符,用于分配和回收堆内存;

热文推荐