专栏首页白话NLP【深度大白话】——曲则全,谈谈深度学习中的激活函数
原创

【深度大白话】——曲则全,谈谈深度学习中的激活函数

1. 什么是激活函数

在这里插入图片描述

如上图所示,激活函数(Activation Function)是在人工神经网络神经元上运行的函数,负责将神经元的输入映射到输出。激活函数为人工神经网络引入非线性因素,可以让人工神经网络模型更好的去学习、理解非常复杂的非线性关系。

2. 为什么要用激活函数

2.1 感知机(Perception)

感知机(Perception)是人工神经网络的前身,在感知机模型中不使用激活函数,是一个线性分类器。

2.1.1 一层感知机

一层感知机网络如下图所示:

在这里插入图片描述

表达式为:

y = w_{1}x_{1}+w_{2}x_{2}+w_{3}x_{3}

观察上式可知:一层感知机是一个线性分类器

2.1.2 二层感知机

二层感知机如下图所示:

在这里插入图片描述
y=w_{2-1}(w_{1-11}x_{1}+w_{1-21}x_{2}+w_{1-31}x_{3})\\+w_{2-2}(w_{1-12}x_{1}+w_{1-22}x_{2}+w_{1-32}x_{3})\\ +w_{2-3}(w_{1-13}x_{1}+w_{1-23}x_{2}+w_{1-33}x_{3})

整理如下:

y=(w_{2-1}w_{1-11}+w_{2-2}w_{1-12}+w_{2-3}w_{1-13})x_{1}\\+(w_{2-1}w_{1-21}+w_{2-2}w_{1-22}+w_{2-3}w_{1-23})x_{2}\\+(w_{2-1}w_{1-31}+w_{2-2}w_{1-32}+w_{2-3}w_{1-33})x_{3}

把一层感知机的表达式和二层感知机整理后的式子进行对比发现:感知机的层数并不能改变其是线性分类器的特性。

2.2 线性不可分

线性分类器存在一个问题:不能解决线性不可分的问题。最简单的线性不可分问题如下图所示:使用一条直线把橙色的正方形和绿色的圆形进行分割。

在这里插入图片描述

上图中红色和深绿色的线是两条例子,经试验发现,在二维平面中不存在这样一条直线可以把橙色的正方形和绿色的圆形进行分割。

这就是感知机(线下分类器)面临的问题:不能解决线性不可分问题。

2.3 激活函数的作用

激活函数最重要的作用就是可以给模型带来非线性因素,直白的理解就是把直线“掰弯”

在这里插入图片描述

如上图所示,当感知器加入激活函数后,可以使用曲线把橙色的正方形和绿色的圆形分割开来。

3. 常见的激活函数

3.1 sigmoid

表达式

sigmoid 是常用的非线性激活函数,解析式如下所示:

sigmoid(x) = f(x) = \frac{1}{1+e^{-x}}

导函数的表达式如下:

sigmoid'(x)=f'(x) = \frac{e^{-x}}{(1+e^{-x})^2}=\frac{1}{1+e^{-x}}-\frac{1}{(1+e^{-x})^2}=f(x)\times(1-f(x))

图像

在这里插入图片描述

备注:橙色的线表示原函数,蓝色的线表示导函数。

特点

sigmoid把输入的值转换为0到1之间,特别的:如果是非常大的正数,就转换为1,如果非常小的负数,则转换为0;

缺点

  1. 从上图可以看出,sigmod的导函数的值域为:0, 0.25,在反向传播(BP)更新参数时很容易出现梯度消失的现象;
  2. 有饱和区域,当输入的x非常大或非常小时,sigmoid激活函数的导函数值为0,即此时的梯度为0,会导致神经元不能更新;
  3. sigmoid的输出都是正数,不是zero centered,这会导致zigzag现象;
  4. sigmoid含有幂运算,在求解时比较耗时。对于规模较大的神经网络,这会时训练时间增长。

3.2 tanh

表达式

tanh的解析式如下所示:

tanh(x)=f(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}

tanh的导函数如下所示:

tanh'(x)=f'(x)=\frac{(e^{x}+e^{-x})^2-(e^{x}-e^{-x})^2}{(e^{x}+e^{-x})^2}=1-(\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}})=1-f^2(x)

图像

在这里插入图片描述

备注:橙色的线表示原函数,蓝色的线表示导函数。

特点

  • tanh 把输入的值转换为0到1之间,特别的:如果是非常大的正数,就转换为1,如果非常小的负数,则转换为0;
  • tanh解决了sigmoid不是zero centered的问题。缺点
  • 从上图可以看出,sigmod的导函数的值域为:0, 1,在反向传播(BP)更新参数时仍然会出现梯度消失的现象;
  • 有饱和区域,当输入的x非常大或非常小时,sigmoid激活函数的导函数值为0,即此时的梯度为0,会导致神经元不能更新;
  • tanh含有幂运算,在求解时比较耗时。对于规模较大的神经网络,这会时训练时间增长。

3.3 relu

3.3.1 relu

表达式

relu的解析式如下所示:

relu(x) =f(x)=max(0,x)

relu的导函数解析式如下所示:

relu'(x)=f'(x)= {{1, x>0 \atop 0, x \leq 0}}

图像

在这里插入图片描述

备注:橙色的线表示原函数,蓝色的线表示导函数。

优点

  1. 在正区间中,解决了梯度消失的问题;
  2. 不含幂运算,计算速度非常快;
  3. 收敛速度远远快于sigmoid和tanh;存在的问题
  4. relu的输出不是zero-centered
  5. 存在dead relu problem,即:某些神经元在训练过程中会出现永远不会被激活的情况,因为在反向更新时,如果梯度太大,权值更新之后可能会变成负数,在之后的正向传播的时候,输出会一直为0,造成dead relu的问题(备注:此问题可以通过使用小学习率或者使用leaky ReLU等方法改进)。

3.3.2 leaky relu

表达式

leaky_relu的解析式如下所示:

leaky_relu(x) =f(x)=max(ax,x)

leaky_relu的导函数解析式如下所示:

relu'(x)=f'(x)= {{1, x>0 \atop a, x \leq 0}}

图像

备注:橙色的线表示原函数,蓝色的线表示导函数。特点leaky relu是为了解决relu的dead relu问题而设计的,将relu的前半段用“ax”(通常a取值为0.01)替换0。这样在理论上就解决了dead relu的问题。

备注:在实践中,并没有证明leaky relu在效果上完全优于relu。

3.3.3 ELU

表达式

elu的表达式如下所示:

elu(x)=f(x)= {{x,x>0 \atop a(e^{x}-1), x \leq 0}}

elu导函数的表达式如下所示:

elu'(x)=f'(x)={{1, x>0 \atop ae^{x}, x \leq 0}}

图像

在这里插入图片描述

备注:橙色的线表示原函数,蓝色的线表示导函数。

特点

elu也是为了解决relu的dead relu问题而设计的,elu除了具有relu的优点之外还具有以下优点:

  1. 解决dead relu问题;
  2. 输出的均值接近于0,即满足zero-centered;小缺点
  3. 计算量比relu和leaky relu大; 备注:在实践中,并没有证明elu在效果上完全优于relu。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用pytorch进行文本分类——ADGCNN

    在文本分类任务中常用的网络是RNN系列或Transformer的Encoder,很久没有看到CNN网络的身影(很久之前有TextCNN网络)。本文尝试使用CNN...

    Dendi
  • 【白话NLP】——为什么需要mask

    通常在训练NLP模型时,batch中的句子长度不相等,这个时候会对没有达到规定长度的句子会进行pad操作(一般用0进行pad),如下图所示(绿色是进行pad的部...

    Dendi
  • 【BERT系列】—— 将Tensorflow格式的模型转换为Pytorch格式的模型

    以BERT为代表的预训练模型是目前NLP领域最火热的方向,但是Google发布的 BERT 是Tensorflow格式的,这让使用pytorch格式 程序猿 们...

    Dendi
  • 听信谣言,Google工程师被村民活活打死!Docker 18.06社区版发布;苏宁总裁隔空对呛刘强东

    据外媒报道,近日,印度一位 32 岁的 Google 软件工程师 Mohammad Azam 遭遇不幸,被人活活打死,而原因竟然是村民听信谣言,以为这位工程师是...

    程序员宝库
  • 2018年薪酬指南出炉!工资涨幅最高的是这3个行业…

    源 / 21世纪商业评论 文 / 陈秋燕 导读:你觉得哪个行业的工资收入最好?最有发展前景的行业是什么? 小伙伴们,你2018年的薪酬相对2017年涨了...

    顶级程序员
  • 深入理解 JavaScript 回调函数 [每日前端夜话0xDF]

    JavaScript 回调函数是成为一名成功的 JavaScript 开发人员必须要了解的一个重要概念。但是我相信,在阅读本文之后,你将能够克服以前使用回调方法...

    疯狂的技术宅
  • PTA刷题记录:L1-019 谁先倒 (15分)

    题目要求: 划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出...

    英雄爱吃土豆片
  • WEP/WPA/WPA2/WPA3初识

    WEP加密是最早在无线加密中使用的技术,新的升级程序在设置上和以前有点不同,功能当然比之前丰富一些,下面让我们来看看如何使用WEP。 当在无线“基本设置”里面“...

    用户7557625
  • Ubuntu输入密码后重返登录界面

    进入了登录界面后,不用输入密码,按住 Ctrl+Alt+F1(F1~F6都行) 打开profile文件

    JNingWei
  • 护网杯pwn——huwang超详细wp

    比赛结束快一个星期了,复现了一下这道题,借鉴了一下网上的wp发现大佬们写的都很简略,所以这里写一个详细的wp供小白们学习。

    安恒网络空间安全讲武堂

扫码关注云+社区

领取腾讯云代金券