前言

  激活函数值域关于零对称的问题在激活函数那篇文章中未详细介绍,在那里说到,当激活函数的值域不关于0点对称,会导致梯度下降的速度下降,关于这一点,过去我只是将其记下,却并未理解背后的原因。此篇谈谈背后的原因。
要探讨为什么Sigmoid函数会影响学习效率这个问题,需要找到影响梯度的因素。

权重更新

  深度学习一般的学习方法是反向传播,简单来说,就是通过链式法则,求解全局损失函数LLL对某一参数www的偏导数,而后乘以学习率,向梯度的反方向更新参数www,更新公式可以表示为:
w<−w−η⋅∂L∂ww<-w-\eta\cdot\frac{\partial L}{\partial w}w<−w−η⋅∂w∂L​
学习率参数是全局设置的参数,不会影响学习的符号问题,参数的核心步骤就是计算∂L∂w\frac{\partial L}{\partial w}∂w∂L​,对于某一个神经元来说,其输入与输出的关系是:
f(x,w,b)=f(z)=f(∑iwixi+b)f(x,w,b)=f(z)=f(\sum\limits_{i}{w_ix_i}+b)f(x,w,b)=f(z)=f(i∑​wi​xi​+b)
因此对于参数wiw_iwi​来说:
∂L∂wi=∂L∂f∂f∂z∂z∂wi=xi⋅∂L∂f∂f∂z\frac{\partial L}{\partial w_i}=\frac{\partial L}{\partial f}\frac{\partial f}{\partial z}\frac{\partial z}{\partial w_i} = x_i\cdot \frac{\partial L}{\partial f}\frac{\partial f}{\partial z}∂wi​∂L​=∂f∂L​∂z∂f​∂wi​∂z​=xi​⋅∂f∂L​∂z∂f​
因此参数的更新是:
wi<−wi−ηxi⋅∂L∂f∂f∂zw_i<-w_i-\eta x_i\cdot\frac{\partial L}{\partial f}\frac{\partial f}{\partial z}wi​<−wi​−ηxi​⋅∂f∂L​∂z∂f​

上述的参数更新方式,这个wiw_iwi​指的是某两层之间的权重,例如下面的图像:
其中我们的目的是借助误差更新W1和W2的参数值,而参数W1和W2分别对应于X1与X2。
于是有:

w1=w1−ηx1⋅∂L∂f∂f∂zw2=w2−ηx2⋅∂L∂f∂f∂zw_1=w_1-\eta x_1\cdot\frac{\partial L}{\partial f}\frac{\partial f}{\partial z} \\ w_2=w_2-\eta x_2\cdot\frac{\partial L}{\partial f}\frac{\partial f}{\partial z} w1​=w1​−ηx1​⋅∂f∂L​∂z∂f​w2​=w2​−ηx2​⋅∂f∂L​∂z∂f​
其中∂L∂f∂f∂z\frac{\partial L}{\partial f}\frac{\partial f}{\partial z}∂f∂L​∂z∂f​可以理解为梯度项,在计算梯度时,对于w1和w2,它们的∂L∂f∂f∂z\frac{\partial L}{\partial f}\frac{\partial f}{\partial z}∂f∂L​∂z∂f​应该是相等的,也即wiw_iwi​的更新与∂L∂f∂f∂z\frac{\partial L}{\partial f}\frac{\partial f}{\partial z}∂f∂L​∂z∂f​是无关的,于是,仅剩下一个xix_ixi​影响方向,当xix_ixi​的值为正时,wIw_IwI​更新方向就是正方向,当xix_ixi​的方向为负时,wiw_iwi​更新方向就是负方向,
  下标1,2表示第1,2个神经元,而∂L∂f∂f∂z\frac{\partial L}{\partial f}\frac{\partial f}{\partial z}∂f∂L​∂z∂f​表示梯度计算量,它们是根据所有样本点计算得到的,对于这两个神经元,∂L∂f∂f∂z\frac{\partial L}{\partial f}\frac{\partial f}{\partial z}∂f∂L​∂z∂f​的值就是一样的,唯一不同的就是xix_ixi​不同,而x1x_1x1​与x2x_2x2​又是上一层的输出,上一层是经过Sigmoid函数进行变换的,所有的xix_ixi​都是正数(这是因为Sigmoid函数的输出都是大于0的)。
  到此,我们找到更新参数都是同方向的原因了。

为什么所有的xix_ixi​都是正数就会影响更新效率呢?
  要解决这一点,我们需要理解反向传播的原理,向着梯度下降的方向改变权重,那么在学习过程中就肯定存在梯度方向不同的情况,例如有的wiw_iwi​梯度方向是下降,有的wjw_jwj​梯度方向是上升,这样不断迭代就会影响效率。优点像梯度下降法里面的锯齿状迭代,假设在一次迭代过程中w1w_1w1​需要向着正方向更新,w2w_2w2​则需要向着负方向进行更新,但是反向传播的权重更新都是同一方向的,假设计算得到的梯度都是朝着正向更新的,那么参数w1w_1w1​在更新过程中就会更收益,而参数w2w_2w2​在更新时就会朝着反方向更新,这必定会造成一定的误差。这一代更新后得到新的参数w1′w_1'w1′​和w2′w_2'w2′​,后续再用w1′w_1'w1′​和w2′w_2'w2′​来计算误梯度时,可能计算的更新方式就是负方向了,这个时候参数w2w_2w2​就更收益,而参数w1w_1w1​就向放方向更新,这样不断地迭代,虽然说误差会在不断减小,但是减小的速度肯定会受到一定的影响,虽然最后也会收敛到一个好的解,但是过程是“曲折”的。
  此外,在更新输入层到第一层隐含层的权重时,按理来说,这一层的权重可以有不同方向的迭代,因为输入值不一定是同方向的。
基于Sigmoid函数改进的Tanh函数就能很好的解决这个问题,Tanh函数图像如下:


Tanh函数的值域是-1到1,是基于0点对称的,所以在更新参数时能进行有效更新,并不会造成所有参数发生同方向更新。

机器学习笔记-激活函数关于零点对称问题相关推荐

  1. 机器学习笔记之指数族分布——最大熵原理与softmax激活函数的关系

    机器学习笔记之指数族分布--最大熵原理与softmax激活函数的关系 引言 符号定义 基于多维数据集合的经验概率分布 回顾:经验概率分布 多维数据的经验概率分布 Softmax\mathcal Sof ...

  2. 【学习打卡02】可解释机器学习笔记之ZFNet

    可解释机器学习笔记之ZFNet 文章目录 可解释机器学习笔记之ZFNet ZFNet介绍 ZFNet结构 特征可视化 可视化结构 特征不变性 特征演化 遮挡性分析 其他内容 总结和思考 首先非常感谢同 ...

  3. 深度学习基础笔记——激活函数

    相关申明及相关参考: 体系学习地址 主要学习笔记地址 激活函数,你真的懂了吗? - 知乎 (zhihu.com) 聊一聊深度学习的activation function - 知乎 (zhihu.com ...

  4. 迷人的神经网络——机器学习笔记1

    目录 迷人的神经网络--机器学习笔记1 第1章 神经元模型及网络结构 1.1 神经元模型 1.1.1 单输入神经元 1.1.2 激活函数 1.1.3 多输入神经元 1.2 网络结构 1.2.1 单层神 ...

  5. 机器学习笔记-神经网络的原理、数学、代码与手写数字识别

    机器学习笔记-神经网络 作者:星河滚烫兮 文章目录 前言 一.神经网络的灵感 二.基本原理 1.神经网络最小单元--神经元 2.神经网络层结构 3.正向传播 4.反向传播 5.梯度下降 三.数学理论推 ...

  6. Python机器学习笔记:使用Keras进行回归预测

    Keras是一个深度学习库,包含高效的数字库Theano和TensorFlow.是一个高度模块化的神经网络库,支持CPU和GPU. 本文学习的目的是学习如何加载CSV文件并使其可供Keras使用,如何 ...

  7. 一份520页的机器学习笔记!附下载链接

    点击上方"视学算法",选择"星标"公众号 第一时间获取价值内容 近日,来自SAP(全球第一大商业软件公司)的梁劲(Jim Liang)公开了自己所写的一份 52 ...

  8. 700 页的机器学习笔记火了!完整版开放下载

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 作者       梁劲(Jim Liang),来自SAP(全球第一大商业软件公司). 书籍特点       条理清晰 ...

  9. Python机器学习笔记:sklearn库的学习

    自2007年发布以来,scikit-learn已经成为Python重要的机器学习库了,scikit-learn简称sklearn,支持包括分类,回归,降维和聚类四大机器学习算法.还包括了特征提取,数据 ...

  10. 机器学习笔记:时间序列分解(滑动平均)

    0 前言 时间序列数据可以表现出多种模式,将时间序列拆分为多个组件通常很有帮助,每个组件代表一个基础模式类别. 在机器学习笔记(时间序列):不同类型的图示_UQI-LIUWJ的博客-CSDN博客中,我 ...

最新文章

  1. [译]高效的TensorFlow 2.0:应用最佳实践以及有什么变化
  2. PostgreSQL 理解 template1 和 template0
  3. SQL语言之事务处理语言(Oracle)
  4. linux 重定向_Unix/Linux编程实践之IO重定向和管道
  5. Django上传文件及分页
  6. 【一周读书】哲学家,你们都干了些什么?
  7. groovy 兼容 java_java – eclipse插件和maven依赖项中存在的’groovy-all’jar之间的兼容性问题...
  8. opencv stereo match sample
  9. php mess,Mess.php
  10. python无法显示饼图
  11. java日期互转:LocalDateTime、String、Instant、Date
  12. java word转pdf dox4j,使用 docx4j 将 Web 页面转换为 DOCX 与 PDF 格式
  13. 电脑计算机硬盘坏了如何修理,笔记本电脑硬盘坏了怎么修复怎么办
  14. 电脑桌面便签小工具下载,好用的桌面便签软件推荐
  15. 我的理想200字计算机工程师,我的理想工程师作文(我的理想是做一名工程师)...
  16. php如何验证银行卡号,PHP效验银行卡卡号
  17. Windows server 2008 R2安装详细教程
  18. 物联网芯片+区块链底层融合:紫光展锐开创产业升级新思路
  19. VC++ 利用MFC的CWindowDC类实现画线功能 在桌面窗口中画线 绘制彩色线条 CPen nPenStyle nWidth crColor
  20. 世界各国电源插头插座形式

热门文章

  1. 区块链的底层技术:P2P网络原理与应用详解
  2. vue将图片链接、本地图片转为二进制文件流
  3. 有关rand(),srand()产生随机数学习总结
  4. Android 自定义锁屏图案 View
  5. vue+element实现word文档(转成markdown了)带目录预览
  6. Windows 10正式版官方原版ISO镜像下载汇总!!!
  7. 各平台安装OpenCV
  8. 计算机集成牌照,车牌识别+证件识别嵌入式识别系统集成
  9. get_post X老师告诉小宁同学HTTP通常使用两种请求方法,你知道是哪两种吗?
  10. python采用强制缩进的方式使得代码具有极佳的可读性_计算机专业高级语言程序设计课程改革探索...