神经网络 | 常见的激活函数

news2024/11/15 4:25:39

Hi,大家好,我是半亩花海。本文主要介绍神经网络中必要的激活函数的定义、分类、作用以及常见的激活函数的功能。


目录

一、激活函数定义

二、激活函数分类

三、常见的几种激活函数

1. Sigmoid 函数

(1)公式

(2)图像

(3)优点与不足

2. Tanh 函数

(1)公式

(2)图像

(3)优点与不足

3. ReLU 函数

(1)公式

(2)图像

(3)优点与不足

4. Softmax 函数

(1)公式

(2)图像

(3)特点与不足


一、激活函数定义

激活函数(Activation Function),就是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端,旨在帮助网络学习数据中的复杂模式。

激活函数是神经网络中的一种非线性变换,它定义在每个神经元上,将神经元输入信号转换为输出信号。在深度学习中,激活函数非常重要,因为它们使神经网络能够捕捉到非线性关系,从而能够更好地逼近复杂的函数或映射。

下图展示了一个神经元是如何输入激活函数以及如何得到该神经元最终的输出:


二、激活函数分类

激活函数可以分成两类——饱和激活函数非饱和激活函数

  • 饱和激活函数: Sigmoid、 Tanh...
  • 非饱和激活函数:  ReLU 、Leaky Relu  、ELU、PReLU、RReLU...

了解一下饱和

假设 h(x) 是一个激活函数。

  • 当我们的 n 趋近于正无穷,激活函数的导数趋近于 0,那么我们称之为右饱和

\lim_{n \to +\infty }h'(x)=0

  • 当我们的 n 趋近于负无穷,激活函数的导数趋近于 0,那么我们称之为左饱和

\lim_{n \to -\infty }h'(x)=0

当一个函数既满足左饱和又满足右饱和的时候我们就称之为饱和,典型的函数有 Sigmoid、Tanh 函数。

  • 反之,不满足以上条件的函数则称为非饱和激活函数。
    • Sigmoid 函数需要一个实值输入压缩至 [0,1] 的范围。
    • tanh 函数需要讲一个实值输入压缩至 [-1, 1] 的范围。

相对于饱和激活函数,使用非饱和激活函数优势在于两点:

  • 非饱和激活函数能解决深度神经网络(层数非常多)带来的梯度消失问题。
  • 使用非饱和激活函数能加快收敛速度。

三、常见的几种激活函数

在深度学习中,最常用的激活函数包括 Sigmoid函数、ReLU函数(Rectified Linear Unit)、Tanh 函数、Softmax 函数等。这些激活函数不同的特点和优缺点,应根据具体的问题选择合适的激活函数。

例如:Sigmoid 函数在输出处的值域为 [0,1],可以将输出解释为概率,因此常用于二分类问题;ReLU 函数在输入为负数时输出为 0,可以有效地解决梯度消失问题,因此广泛应用于卷积神经网络中。

1. Sigmoid 函数

(1)公式

Sigmoid 激活函数的数学表达式为:

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

导数表达式为:

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

(2)图像

(3)优点与不足

Sigmoid 优点:

  • 值域为 [0, 1],非常适合作为模型的输出函数用于输出一个 (0,1) 范围内的概率值,可用于将预测概率作为输出的模型,比如用于表示二分类的类别或者用于表示置信度
  • Sigmoid 函数的输出范围是 0 到 1。由于输出值限定在 0 到 1,因此它对每个神经元的输出进行了归一化
  • 该函数是连续可导的(即可微),可以提供非常平滑的梯度值,防止模型训练过程中出现突变的梯度(即避免“跳跃”的输出值)。

Sigmoid 不足:

  • 从其导数的函数图像上可以看到,其导数的最大值只有 0.25,而且当 x 在 [-5, 5] 的范围外时其导数值就已经几乎接近于 0 了。这种情况会导致训练过程中神经元处于一种饱和状态,反向传播时其权重几乎得不到更新,从而使得模型变得难以训练,这种现象被称为梯度消失问题。
  • 输出不是以 0 为中心而是都大于 0 的(这会降低权重更新的效率),这样下一层的神经元会得到上一层输出的全正信号作为输入,所以 Sigmoid 激活函数不适合放在神经网络的前面层而一般是放在最后的输出层中使用。
  • 需要进行指数运算(计算机运行得较慢),计算量大及计算复杂度高,训练耗时;指数的越大其倒数就越小,容易产生梯度消失。

2. Tanh 函数

(1)公式

Tanh 激活函数的数学表达式为:

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

导数表达式为:

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

(2)图像

(3)优点与不足

Tanh 优点:

  • 在分类任务中,双曲正切函数(Tanh)逐渐取代 Sigmoid 函数作为标准的激活函数,其具有很多神经网络所钟爱的特征。它是完全可微分的,反对称,对称中心在原点
  • 输出是 S 型曲线,具备打破网络层与网络层之间的线性关系,可以把网络层输出非线形地映射到 (−1,1) 区间里。负输入将被强映射为负,而零输入被映射为接近零;Tanh 的输出间隔为 1 且值域是以 0 为中心的 [-1,1](可以解决 Sigmoid 激活函数输出不以 0 为中心的问题。)
  • 在一般的二元分类问题中,Tanh 函数一般用于隐藏层,而 Sigmoid 函数用于输出层,但这并不是固定的,需要根据特定问题进行调整。

Tanh 不足:

  • 当输入较大或较小时,输出几乎是平滑的并且梯度较小,这不利于权重更新。
  • Tanh 函数也需要进行指数运算,所以其也会存在计算复杂度高且计算量大的问题。
  • 当神经网络的层数增多的时候,由于在进行反向传播的时候,链式求导,多项相乘,函数进入饱和区(导数接近于零的地方)就会逐层传递,这种现象被称为梯度消失

3. ReLU 函数

(1)公式

ReLU 激活函数的数学表达式为:

f(x)=max(x, 0)=\left\{\begin{matrix}x,x\geq 0 & & \\ 0,x< 0 & & \end{matrix}\right.

导数表达式为:

f(x)=\left\{\begin{matrix}1,x\geq 0 & & \\ 0,x< 0 & & \end{matrix}\right.

(2)图像

(3)优点与不足

① ReLU 优点:

  • ReLU 函数在正输入时是线性的,收敛速度快,计算速度快,同时符合恒等性的特点。当输入为正时,由于导数是1,能够完整传递梯度,不存在梯度消失的问题(梯度饱和问题)。
  • 计算速度快。ReLU 函数中只存在线性关系且无论是函数还是其导数都不包含复杂的数学运算,因此它的计算速度比 Sigmoid 和 Tanh 更快。
  • 当输入大于0时,梯度为1,能够有效避免链式求导法则梯度相乘引起的梯度消失和梯度爆炸;计算成本低。
  • 它保留了 step 函数的生物学启发(只有输入超出阈值时神经元才激活),不过当输入为正的时候,导数不为零,从而允许基于梯度的学习(尽管在 x=0 的时候,导数是未定义的)。当输入为负值的时候,ReLU 的学习速度可能会变得很慢,甚至使神经元直接无效。因为此时输入小于零而梯度为零,从而其权重无法得到更新,在剩下的训练过程中会一直保持静默。

② ReLU 不足:

  • ReLU 的输入值为负的时候,输出始终为 0,其一阶导数也始终为 0,这样会导致神经元不能更新参数,也就是神经元不学习了,这种现象叫做“Dead Neuron”。为了解决 ReLU 函数这个缺点,在 ReLU 函数的负半区间引入一个泄露(Leaky)值,所以称为 Leaky ReLU 函数。
  • 与 Sigmoid 一样,其输出不是以 0 为中心的(ReLU 的输出为 0 或正数)。
  • ReLU 在小于 0 的时候梯度为零,导致了某些神经元永远被抑制,最终造成特征的学习不充分;这是典型的 Dead ReLU 问题,所以需要改进随机初始化,避免将过多的负数特征送入ReLU。

4. Softmax 函数

(1)公式

Softmax 激活函数的数学表达式为:

f(x)=\frac{e^{x_{i}}}{\sum_{i=0}^{n}e^{x_{i}}}

这里使用梯度无法求导,所以导函数图像是一个 y=0 的直线。

(2)图像

(3)特点与不足

① Softmax 特点:

  • 在零点不可微,负输入的梯度为零。这意味着对于该区域的激活,权重不会在反向传播期间更新,因此会产生永不激活的死亡神经元。
  • 将预测结果转化为非负数、预测结果概率之和等于1。
  • 经过使用指数形式的 Softmax 函数能够将差距大的数值距离拉的更大。在深度学习中通常使用反向传播求解梯度进而使用梯度下降进行参数更新的过程,而指数函数在求导的时候比较方便.

② Softmax 不足:

使用指数函数,当输出值非常大的话,计算得到的数值也会变的非常大,数值可能会溢出

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

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

相关文章

Open CASCADE学习|点和曲线的相互转化

目录 1、把曲线离散成点 1.1按数量离散 1.2按长度离散 1.3按弦高离散 2、由点合成曲线 2.1B样条插值 2.2B样条近似 1、把曲线离散成点 计算机图形学中绘制曲线&#xff0c;无论是绘制参数曲线还是非参数曲线&#xff0c;都需要先将参数曲线进行离散化&#xff0c;通过离…

JavaScript综合练习1

JavaScript 综合练习 1 1. 循环嵌套 两个以上的循环进行套娃。 1.1. 语法 for (外部声明记录循环次数的变量; 循环条件; 变化值) {for (内部声明记录循环次数的变量; 循环条件; 变化值) {循环体;} }2. 倒三角 2.1. 案例 2.2. 代码实现 // 外层打印几行 for (let i 1; i …

【高阶数据结构】位图布隆过滤器

文章目录 1. 位图1.1什么是位图1.2为什么会有位图1.3 实现位图1.4 位图的应用 2. 布隆过滤器2.1 什么是布隆过滤器2.2 为什么会有布隆过滤器2.3 布隆过滤器的插入2.4 布隆过滤器的查找2.5 布隆过滤器的模拟实现2.6 布隆过滤器的优点2.7 布隆过滤器缺陷 3. 海量数据面试题3.1 哈…

在windows的控制台实现贪吃蛇小游戏

欢迎来到博主的文章 博主id&#xff1a;代码小豪 前言&#xff1a;看懂这篇文章需要具有C语言基础&#xff0c;还要对单链表具有一定的理解。如果你只是想要试玩这个游戏&#xff0c;可以直接在文章末尾找到源码 由于实现贪吃蛇需要调用Win32 API函数&#xff0c;这些函数我会…

vue3项目中的404页面

vue3项目中的404页面 春节前的最后一篇技术博客了 写了不少vue项目&#xff0c;发现一直没有正确处理404页面。404页面的出现有这么几种可能&#xff1a; 错误输入了页面地址路由连接跳转时&#xff0c;某些路由已经不存在了&#xff0c;而程序员并没有正确处理 也就是说40…

jvm问题自查思路

本文聊一下最近处理了一些jvm的问题上&#xff0c;将这个排查和学习过程分享一下&#xff0c;看了很多资料&#xff0c;最终都会落地到几个工具的使用&#xff0c;本文主要是从文档学习、工具学习和第三方技术验证来打开认知和实践&#xff0c;希望有用。 一、文档 不仅知道了…

假期刷题打卡--Day26

1、MT1212乘法表 请编写一个简单程序&#xff0c;输出九九乘法表。输入n&#xff0c;就输出乘法表到n的地方。 格式 输入格式&#xff1a; 输入整型 输出格式&#xff1a; 输出整型。形式如&#xff1a;1*11 样例 1 输入&#xff1a; 5输出&#xff1a; 1*11 2*12 …

编曲入门软件哪个好 编曲入门教程 Studio One哪个版本好 Studio One6.5正版多少钱 FL Studio下载

新手编曲软件推荐&#xff1f;新手学编曲要先熟悉编曲逻辑&#xff0c;因此需要选择编曲逻辑简明易懂的宿主软件。编曲新手应该做哪些准备&#xff1f;准备好编曲设备、宿主软件、基础乐理学习资料。 一、编曲入门软件哪个好 新手入门阶段还没有形成系统的编曲思维&#xff0…

整合 Axios

大家好我是苏麟 , 今天聊一下Axios . Axios Axios 是一个基于 promise 网络请求库&#xff0c;作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpReques…

七、Nacos源码系列:Nacos服务发现

目录 一、服务发现 二、getServices()&#xff1a;获取服务列表 2.1、获取服务列表 2.2、总结图 三、getInstances(serviceId)&#xff1a;获取服务实例列表 3.1、从缓存中获取服务信息 3.2、缓存为空&#xff0c;执行订阅服务 3.2.1、调度更新&#xff0c;往线程池中…

【算法】{画决策树 + dfs + 递归 + 回溯 + 剪枝} 解决排列、子集问题(C++)

文章目录 1. 前言2. 算法例题 理解思路、代码46.全排列78.子集 3. 算法题练习1863.找出所有子集的异或总和再求和47.全排列II17.电话号码的字母组合 1. 前言 dfs问题 我们已经学过&#xff0c;对于排列、子集类的问题&#xff0c;一般可以想到暴力枚举&#xff0c;但此类问题用…

基于Chrome插件的Chatgpt对话无损导出markdown格式(Typora完美显示)

刚刚提交插件到Chrome插件商店正在审核&#xff0c;想尝试的可以先使用&#xff1a; https://github.com/thisisbaiy/ChatGPT-To-Markdown-google-plugin/tree/main 我将源代码上传至了GitHub&#xff0c;欢迎star, IssueGoogle插件名称为&#xff1a;ChatGPT to MarkDown plus…

海外云手机——平台引流的重要媒介

随着互联网的飞速发展&#xff0c;跨境电商、短视频引流以及游戏行业等领域正经历着迅猛的更新换代。在这个信息爆炸的时代&#xff0c;流量成为至关重要的资源&#xff0c;而其中引流环节更是关乎业务成功的关键。海外云手机崭露头角&#xff0c;成为这一传播过程中的重要媒介…

【保姆级教程|YOLOv8改进】【7】多尺度空洞注意力(MSDA),DilateFormer实现暴力涨点

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

Ribbon全方位解析:构建弹性的Java微服务

第1章 引言 大家好,我是小黑,咱们今天聊聊Ribbon,这货是个客户端负载均衡工具,用在Spring Cloud里面能让咱们的服务调用更加灵活和健壮。负载均衡,听起来挺高大上的,其实就是把外界的请求平摊到多个服务器上,避免某个服务器压力太大,其他的却在那儿闲着。 Ribbon的牛…

Springboot整合JUnit5框架

目录 第一章、在pom文件中导入依赖第二章、新建测试类第三章、新建测试方法 友情提醒: 先看文章目录&#xff0c;大致了解文章知识点结构&#xff0c;点击文章目录可直接跳转到文章指定位置。 第一章、在pom文件中导入依赖 SpringBoot2.2x之后的版本中spring-boot-starter-te…

Python(21)正则表达式中的“元字符”

大家好&#xff01;我是码银&#x1f970; 欢迎关注&#x1f970;&#xff1a; CSDN&#xff1a;码银 公众号&#xff1a;码银学编程 获取资源&#xff1a;公众号回复“python资料” 在本篇文章中介绍的是正则表达式中一部分具有特殊意义的专用字符&#xff0c;也叫做“元…

基于51 单片机的交通灯系统 源码+仿真+ppt

主要内容&#xff1a; 1&#xff09;南北方向的绿灯、东西方向的红灯同时亮40秒。 2&#xff09;南北方向的绿灯灭、黄灯亮5秒&#xff0c;同时东西方向的红灯继续亮。 3&#xff09;南北方向的黄灯灭、左转绿灯亮&#xff0c;持续20秒&#xff0c;同时东西方向的红灯继续…

rust语言tokio库底层原理解析

目录 1 rust版本及tokio版本说明1 tokio简介2 tokio::main2.1 tokio::main使用多线程模式2.2 tokio::main使用单线程模式 3 builder.build()函数3.1 build_threaded_runtime()函数新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图…

前端JavaScript篇之对执行上下文的理解

目录 对执行上下文的理解创建执行上下文 对执行上下文的理解 当我们在执行JavaScript代码时&#xff0c;JavaScript引擎会创建并维护一个执行上下文栈来管理执行上下文。执行上下文有三种类型&#xff1a;全局执行上下文、函数执行上下文和eval函数执行上下文。 在写代码的时…