激活函数(Activation Function)

news2024/11/28 0:41:57

目录

1 激活函数的概念和作用

1.1 激活函数的概念

1.2 激活函数的作用

1.3 通俗地理解一下激活函数(图文结合)

1.3.1 无激活函数的神经网络

1.3.2 带激活函数的神经网络

2 神经网络梯度消失与梯度爆炸

2.1 简介梯度消失与梯度爆炸

2.2 梯度不稳定问题 

2.3 产生梯度消失的根本原因

2.4 产生梯度爆炸的根本原因

2.5 当激活函数为sigmoid时,梯度消失和梯度爆炸哪个更容易发生

2.6 如何解决梯度消失和梯度爆炸

3 激活函数的比较


1 激活函数的概念和作用

1.1 激活函数的概念

    激活函数(Activation Function)是一种添加到人工神经网络中的函数,旨在帮助网络学习数据中的复杂模式。类似于人类大脑中基于神经元的模型,激活函数最终决定了要发射给下一个神经元的内容。

    在人工神经网络中,一个节点的激活函数定义了该节点在给定的输入或输入集合下的输出。标准的计算机芯片电路可以看作是根据输入得到开(1)或关(0)输出的数字电路激活函数。因此,激活函数是确定神经网络输出的数学方程式。

    首先我们来了解一下人工神经元的工作原理,大致如下:

    上述过程的数学可视化过程如下图所示:

1.2 激活函数的作用

    关于神经网络中的激活函数的作用,通常都是这样解释:不使用激活函数的话,神经网络的每层都只是做线性变换,多层输入叠加后也还是线性变换。因为线性模型的表达能力通常不够,所以这时候就体现了激活函数的作用了,激活函数可以引入非线性因素。疑问就来了,激活函数是如何引入非线性因素呢?

1.3 通俗地理解一下激活函数(图文结合)

    为了解释激活函数如何引入非线性因素,接下来让我们以神经网络分割平面空间作为例子。

1.3.1 无激活函数的神经网络

    神经网络最简单的结构就是单输出的单层感知机,单层感知机只有输入层和输出层,分别代表了神经感受器和神经中枢。下图是一个只有两个输入单元和一个输出单元的简单单层感知机。图中x1,x2代表神经网络的输入神经元受到的刺激,w1,w2代表输入神经元和输出神经元间链接的紧密程度,b代表输出神经元的兴奋阈值,y为输出神经元的输出。我们使用该单层感知机划出一条线将平面分隔开,如图所示:

    同理,我们也可以将多个感知机(注意,不是多层感知机)进行组合获得更强的平面分类能力,如图所示:

    再看一看包含一个隐层的多层感知机的情况,如图所示: 

    通过对比可以发现,上面三种没有激励函数的神经网络的输出都是线性方程,其都是在用复杂的线性组合来试图逼近曲线。 

1.3.2 带激活函数的神经网络

    让我们在神经网络每一层神经元做完线性变换以后,加上一个非线性激活函数对线性变换的结果进行转换,结果显而易见,输出立马变成一个不折不扣的非线性函数了。

    拓展到多层神经网络的情况,和刚刚一样的结构,加非线性激活函数之后,输出就变成了一个复杂的非线性函数了,如图所示:

    总结:加入非线性激活函数后,神经网络就有可能学习到平滑的曲线来分割平面,而不是用复杂的线性组合逼近平滑曲线来分割平面,使神经网络的表示能力更强了,能够更好的拟合目标函数。这就是为什么我们要有非线性的激活函数的原因。。如下图所示说明加入非线性激活函数后的差异,上图为用线性组合逼近平滑曲线来分割平面,下图为平滑的曲线来分割平面:

2 神经网络梯度消失与梯度爆炸

2.1 简介梯度消失与梯度爆炸

    层数较多的神经网络模型在训练的时候会出现梯度消失(gradient vanishing problem)和梯度爆炸(gradient exploding problem)问题。梯度消失问题和梯度爆炸问题一般会随着网络层数的增加变得越来越明显。

    例如,对于下图所示的含有三个隐藏层的神经网络:

    →梯度消失问题发生时,靠近输出层的hidden layer3的权值更新相对正常,但是靠近输入层的hidden layer1的权值更新会变得很慢,导致靠近输入层的隐藏层权值几乎不变,仍接近于初始化的权值。这就导致hidden layer1相当于只是一个映射层,对所有的输入做了一个函数映射,这时此深度神经网络的学习就等价于只有后几层的隐藏层网络在学习。

    →梯度爆炸的情况是:当初始的权值过大,靠近输入层的hidden layer1的权值变化比靠近输出层的hidden layer3的权值变化更快,就会引起梯度爆炸的问题。

2.2 梯度不稳定问题 

    在深度神经网络中的梯度是不稳定的,在靠近输入层的隐藏层中或会消失,或会爆炸。这种不稳定性才是深度神经网络中基于梯度学习的根本问题。

    梯度不稳定的原因:前面层上的梯度是来自后面层上梯度的乘积。当存在过多的层时,就会出现梯度不稳定场景,比如梯度消失和梯度爆炸。

2.3 产生梯度消失的根本原因

    我们以图2的反向传播为例,假设每一层只有一个神经元且对于每一层都可以用公式1表示,其中\sigma为sigmoid函数,C表示的是代价函数,前一层的输出和后一层的输入关系如公式1所示。我们可以推导出公式2。

    而sigmoid函数的导数{\sigma }'(x)如下图右图所示。 

    可见, {\sigma }'(x)的最大值为1/4,而我们一般会使用标准方法来初始化网络权重,即使用一个均值为0标准差为1的高斯分布。因此,初始化的网络权值通常都小于1,从而有\left |{\sigma }'(z)\omega \right | \leq \frac{1}{4}。对于2式的链式求导,层数越多,求导结果越小,最终导致梯度消失的情况出现。

    对于上图,\frac{\partial C}{\partial b_{1}}和 \frac{\partial C}{\partial b_{3}}有共同的求导项。可以看出,前面的网络层比后面的网络层梯度变化更小,故权值变化缓慢,从而引起了梯度消失问题。

2.4 产生梯度爆炸的根本原因

    当\left |{\sigma }'(z)\omega \right | > 1,也就是W比较大的情况。则前面的网络层比后面的网络层梯度变化更快,引起了梯度爆炸的问题。

2.5 当激活函数为sigmoid时,梯度消失和梯度爆炸哪个更容易发生

    结论:梯度爆炸问题在使用sigmoid激活函数时,出现的情况较少,不容易发生。

    量化分析梯度爆炸时x的取值范围:因导数最大为0.25,故\left | w \right | > 4,才可能出现\left |{\sigma }'(z)\omega \right | > 1;按照\left |{\sigma }'(wx + b)\omega \right | > 1可计算出x的数值变化范围很窄,仅在公式3范围内,才会出现梯度爆炸。画图如5所示,可见x的数值变化范围很小;最大数值范围也仅仅0.45,当\left | w \right | = 6.9时出现。因此仅仅在此很窄的范围内会出现梯度爆炸的问题。

2.6 如何解决梯度消失和梯度爆炸

    梯度消失和梯度爆炸问题都是因为网络太深,网络权值更新不稳定造成的,本质上是因为梯度反向传播中的连乘效应。对于更普遍的梯度消失问题,可以考虑以下三种方案解决:

1、用ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout等替代sigmod函数。

2、用Batch Normalization。

3、LSTM的结构设计也可以改善RNN中的梯度消失问题。

3 激活函数的比较

    反之,不满足以上条件的函数则称为非饱和激活函数。

    sigmoid和tanh是“饱和激活函数”,而ReLU及其变体则是“非饱和激活函数”。使用“非饱和激活函数”的优势在于两点:(1)“非饱和激活函数”能解决所谓的“梯度消失”问题。(2)它能加快收敛速度。

    →Sigmoid函数将一个实值输入压缩至[0,1]的范围---------σ(x) = 1 / (1 + exp(−x))

    →tanh函数将一个实值输入压缩至 [-1, 1]的范围---------tanh(x) = 2σ(2x) − 1

    由于使用sigmoid激活函数会造成神经网络的梯度消失和梯度爆炸的问题,所以许多人提出了一些改进的激活函数,如:tanh、ReLU、LeakyReLU、PReLU、RReLU、ELU、Maxout。

本文参考:https://blog.csdn.net/weixin_39910711/article/details/114849349?ops_request_misc=&request_id=&biz_id=102&utm_term=%E6%BF%80%E6%B4%BB%E5%87%BD%E6%95%B0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-114849349.nonecase&spm=1018.2226.3001.4187

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/428749.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java基础——缓冲流

(1)缓冲流概述: 缓冲流也称高效流,或者高级流。(字节流可称原始流)作用:缓冲流自带缓冲区,可以提高原始字节流,字符流读写数据的性能。(2)字节缓…

水质站房式在线监测系统集方案要点

水质在线自动监测系统是一套高度集成的一体化水质自动监测系统,其中包含水样采集处理、水质自动分析、数据采集传输、远程操作监控于一体的在线全自动监控系统。 本次方案整体系统采用一体化集成方式,辅助设备工艺制作精细,同时系统工艺流程…

阿木动态 | 阿木实验室亮相第58·59届中国高等教育展(重庆)

4月10日,第58.59届中国高等教育博览会在重庆国际博览中心圆满结束。本届展会中,各大科技企业、研发机构和教育组织都集中展示了最新的教育科技成果和应用。 阿木实验室作为一家注重提高客户研发效率的企业,此次展会中,阿木实验室 …

MinIO安装配置访问以及SpringBoot整合MinIO

MinIO 1.MinIO安装 Minio 是个基于 Golang 编写的开源对象存储服务,存储非结构化数据,如:图片,视频,音乐等 官网地址:https://min.io/ 中文地址:http://minio.org.cn 官网文档( …

行业首选|墨菲安全实力入选《开发安全产品及服务购买决策参考》

十分钟快速部署,为企业提供最高效可靠的软件供应链安全解决方案! 近日,GoUpSec 深入调研了14家国内开发安全“酷厂商”(包括专业厂商和综合安全厂商),从产品功能、应用行业、成功案例、安全策略等维度对各厂…

DAY 41 WEB和HTTP协议

HTML概述 HTML叫做超文本标记语言,是一种规范,也是一种标准,它通过标记符号来标记要显示的网页中的各个部分。网页文件本身是一种文本文件,通过在文本文件中添加标记符,可以告诉浏览器如何显示其中的内容。 HTML命令可…

Android 纯应用的业务需求越来越窄,可否转向“智能座舱”?

回想2012年—2018年可谓是中国移动互联网的黄金时代,应用市场几乎每天都有新的App应用上线。 而如今却发生了巨大的改变,纯应用的业务需求越来越窄,岗位也随之收缩,这是作为Android开发者不容略的事实。 造成这种现象的原因是互…

类模板的三种表达方式

一:所有的类模板函数写在类的内部 template <typename T> class A { public:A(T a0) {this->a a;}T& getA() {return this->a;}A operator(const A& other) {A temp;//要求A的构造函数要有默认值temp.a this->a other.a;return temp;} private:T a;…

Java语言请求示例,电商商品详情接口,关键词搜索接口,代码封装

Java是一种编程语言&#xff0c;被特意设计用于互联网的分布式环境。Java具有类似于C语言的“形式和感觉”&#xff0c;但它要比C语言更易于使用&#xff0c;而且在编程时彻底采用了一种“以对象为导向”的方式。 使用Java编写的应用程序&#xff0c;既可以在一台单独的电脑上…

红十字救护员急救知识培训笔记

文章目录1、线上学习&#xff1a;理论知识2、线下培训&#xff1a;理论考试3、线下培训&#xff1a;实操学习实操考试3.1 心肺复苏CPR3.2 气道异物梗阻3.3 创伤救护一共有三个步骤 1、线上学习理论课程&#xff0c;所有课程进度100%可以报名线下 2、线下有一个实操的培训&#…

【实战经验】Android性能优化大分析:多种方法让你的应用飞起来

概述 Android性能优化是为了提高应用的响应速度、稳定性和用户体验。在应用开发中&#xff0c;当应用出现卡顿、卡死、运行缓慢等问题时&#xff0c;会给用户带来极差的体验&#xff0c;甚至导致用户流失。而进行性能优化可以有效地解决这些问题&#xff0c;提高应用的质量和用…

TryHackMe-Ra(windows)

Ra 您已经找到了WindCorp的内部网络及其域控制器。你能打开他们的网络吗&#xff1f; 您已经获得了WindCorp的内部网络的访问权限&#xff0c;这家价值数十亿美元的公司正在运行广泛的社交媒体活动&#xff0c;声称自己是不可破解的&#xff08;哈&#xff01;这个说法太多了…

OpenAI Translator Bob Plugin Bob上一款翻译、润色、语法修改插件

OpenAI Translator Bob Plugin 一款可以在Bob进行即时翻译的插件。它基于 OpenAI 的 GPT 系列模型&#xff0c;能够提供高质量、准确的翻译服务。该插件支持多种语言的翻译&#xff0c;包括中文、英文、法语、德语、日语等。用户只需在页面中选中需要翻译的文本&#xff0c;然…

MyBatisPlus3.4.3版自动生成代码的使用

AutoGenerator 是 MyBatis-Plus 的代码生成器&#xff0c;通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码&#xff0c;极大的提升了开发效率。 1 准备工作 创建springboot工程&#xff0c;这里省略。 2 导入依赖 <d…

Ae:灯光图层

灯光 Light是合成中可用于照亮其他 3D 图层并能产生投影、反射的一种元素&#xff0c;类似于光源。如果没有建立灯光图层&#xff0c;系统会使用默认的“环境光”来照亮场景。当建立了灯光图层之后&#xff0c;以所建立的灯光来照明。一般可根据实际需要创建一个或多个相同或不…

2023测试工程师全新技术栈,吃透这些,起薪就15k

相信每个准备软件测试面试的同学&#xff0c;不管你是大学刚毕业&#xff0c;满心憧憬着进入公司实习、非计算机行业转行软件测试、自学测试就业还是培训后就业&#xff0c;都会面临着众多的疑问和不解&#xff0c;那就是该怎么走出着第一步&#xff0c;今天本文一次性告诉你&a…

第三章 运算符

文章目录1. 什么是运算符2 算术运算符2.1 基本四则运算符 、-、*、/、%2.2 增量赋值运算符 、- 、* 、/ 、%2.3 自增/自减运算符 、--3. 关系运算符4. 逻辑运算符5. 位运算符6. 移位运算7. 条件运算符8. 运算符的优先级1. 什么是运算符 计算机的最基本的用途之一就是执行数学运…

蓝桥杯web组备赛

文章目录前言js的数据结构和算法find方法箭头函数注意事项vue2的问题学会用检查来快速查看代码结构css Transform原生dom操作有些遗忘当看不懂js逻辑的时候console.log打印看一下jquery的使用vue2也忘了&#xff0c;一个月没写就忘成狗class 和 style的动态绑定axios获取数据购…

FFMpeg的整体结构

fdk-aac voaac_enc x264这些属于扩展。需要另外编译。 FFMPEG有8个常用库&#xff1a; AVUtil: 核心工具库&#xff0c;下面的许多其他模块都会依赖该库做一些基本的音视频处理操作。 AVFormat&#xff1a;文件格式和协议库&#xff0c;该模块是最重要的模块之一&#xf…

Cheaptrick算法

Cheaptrick&#xff0c;a spectral envelope estimator for high-qualityspeech synthesis 转载请注明出处&#xff01; 2015年Morise发表在SPEECH COMMUNICATION期刊上的一篇文章。 该算法目的是获得一个准确的、时间稳定的谱包络&#xff0c;采用基频(F0)&#xff0c;由F0…