专栏首页share ai happiness深度学习那些事 — 激活函数

深度学习那些事 — 激活函数

这篇文章介绍激活函数,之所以将激活函数单独拿出来进行介绍,因为多层感知机在刚开始发展的时候,梯度会消失,所以它梯度不会太深,训练不了太深的参数,其实最核心的问题就是激活函数,结合反向求导那篇文章求导的过程,我们提出两个问题,带着这两个问题往下看。

有的激活函数为什么导致那个参数无法收敛?

梯度为什么会消失?

激活函数特征

  • 非线性:当激活函数是非线性的时候,一个两层的神经网络就可以逼近基本上所有的函数了。如果 MLP不适用激活函数,那么深层网络跟单层神经网络是等价的。
  • 可微性:当优化方法是基于梯度的时候,这个性质是必须的。
  • 单调性:当激活函数是单调的时候,单层网络能够保证是凸函数。

从激活函数特征我们可以知道,激活函数一定要是非线性的,如果是线性的,就相当于一层非常厚的线性模型,就是因为非线性,才能让神经网络得到更复杂的模型。如果激活函数不可微就没法求它的导数。单调的时候才能保证这个函数式凸函数,凸函数只有一个最优解。

前面是激活函数必须要有的特性,现在看看不同的激活函数都有什么特性呢?

如果输出结果是有限的,梯度优化更加稳定,不会出现极端的情况。当输出结果是无限的模型会更加高效,随之带来的结果是不稳定的,一般需要把学习速率设置更小一点。学习速率太大了容易激进,太小了得不到收敛。

01

Sigmoid 激活函数

下图蓝色曲线就是激活函数的曲线,黄色的是激活函数导数曲线,导数的值域在0-0.25之间,就验证之前说过的,输出是有限的收敛能稳定。所以要初始化要小心。不管输入范围多少,输出范围一直是0-1之间。

02

Sigmoid 激活函数

下图黄色是激活函数,蓝色是函数本身,都是受限制的,只不过范围不一样。

前面介绍的两个存在梯度消失,下面介绍的这个不会,但是神经元容易死掉。

03

Relu 激活函数

如果小于0,不被激活,大于0的话,激活结果是输入和输出是一样的。这个 正好类似f(x)约等于x,输出不受限制。

反向传播算法-核心思想

为什么激活函数决定了梯度会不会消失?决定了神经元会不会死掉?

请看下图中公式:前部分算的是误差值(这里由两部分组成,其中一个激活函数的导数),后部分算的是下层节点具体的值,前面的误差乘一个小于1的数,算出来的值只能越来越小,也就是从上层往下层传递的时候,乘了好几次小于1的值,误差会越来越小,只要层数越深,最后导致求下层边的权重的时候这个权重几乎等于0了,最后导数消失,就是梯度消失。

梯度消失导致的结果是什么?

看上图中更新参数,旧的参数是黄色的,减去导数值乘上学习速率,如果导数值小,相当于每次没有减,这就导致梯度消失导致权重无法更新问题,权重没有办法更新,这个模型就学不下去,所以说以前多层感知机三层就很多了,再多的话下面就学不好,学不好就导致整个模型非常差。

下面这个是sig()激活函数:

下面是Relu激活函数:

Relu激活函数导数等于1,hi也可以大于1,所以就解决了梯度消失问题,虽然解决了梯度消失问题,Relu激活函数不设上限,神经元容易死掉。

为什么神经元容易死掉?

hi这个值,假设前馈的时候hi非常大,通过激活函数之后也是很大,那导数也就非常大,如果用非常大的导数更新的时候,会导致 变成负数,那下次,新的参数值来了,负数给了这个激活函数,激活函数不会被激活,前馈计算的时候这个节点也是0,反向传播的时候没有被激活的节点的导数是0,也就是说这个节点死掉,以后也不会参与之后的过程。

小结

  • 激活函数是梯度消失的根本原因。
  • Relu可以解决梯度消失问题,但会导致网络变得脆弱。

现在也有好多变种,既可以不让梯度消失,也不会把神经元变得脆弱。

本文分享自微信公众号 - 1001次重燃(smile765999),作者:木野归郎

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-10-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 项目实战中Hive注释乱码解决方案

    下面这些都是我在工作中总结出来的,希望对大家有帮助,如果有其他的问题或者解决方法可以留言给我。

    木野归郎
  • Elasticsearch 加班不睡觉(一)

    在实际MySQL业务中,一般会先验证sql有没有问题,如果没有问题,再写业务代码。实际ES业务中,也一样,先DSL确认没有问题,再写业务代码。

    木野归郎
  • Hive中使用 with as 优化SQL

    当我们书写一些结构相对复杂的SQL语句时,可能某个子查询在多个层级多个地方存在重复使用的情况,这个时候我们可以使用 with as 语句将其独立出来,极大提高S...

    木野归郎
  • 精通Excel数组公式010:认识数组函数:TRANSPOSE、MODE.MULT和TREND

    数组函数是可以提供多个值的Excel内置函数。下面列出了8个Excel内置的数组函数:

    fanjy
  • 机器学习第7天:深入了解逻辑回归

    简单来说, 逻辑回归(Logistic Regression)是一种用于解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性。比如某用户购买某...

    明天依旧可好
  • 一哥答疑:数据仓库如何确定主题域?

    大家好,我是一哥,前几天跟一个朋友聊了一些数据中台建设的内容,针对数据仓库中主题域如何划分这个话题聊了很多。其实数据仓库建设的理论大家已经都知道了不少,也看过不...

    数据社
  • Wolfram函数资源库高光时刻:从国家边境到鸟类话语泡泡

    2019年6月,Stephen Wolfram宣布,公司正式发布Wolfram函数资源库,这是一个可以立即用于Wolfram语言的函数资源库。从那时开始,这个资...

    WolframChina
  • [ 一个名字换一块表 ] WeTest征名送AppleWatch

    ? ? 征名背景 本着开放、共赢的腾讯精神,将内部沉淀10年、历经上千款游戏的优秀测试工具陆续开放给外部开发者使用,由此为伊始,腾讯游戏官方推出了WeTest...

    WeTest质量开放平台团队
  • 当我们在谈论高并发的时候究竟在谈什么?

    高并发是互联网分布式系统架构的性能指标之一,它通常是指单位时间内系统能够同时处理的请求数,简单点说,就是QPS(Queries per second)。

    Java团长
  • 吴恩达深度学习笔记 2.3 logistic回归损失

    损失函数测量预测(p()和期望输出(y()之间的差异。换句话说。损失函数计算单个培训示例的错误。

    Dar_Alpha

扫码关注云+社区

领取腾讯云代金券