常见激活函数Activation Function的选择
Activation Function激活函数一般会神经网络中隐层和输出层上,其中作用在输出层主要用于适配输出,比如sigmoid函数可用于生成[0,1]之间的概率估计值。而作用于隐层主要用于增加神经网络的非线性,增加了网络的表达能力,本文主要介绍隐层的激活函数的选择。
1. Sigmoid激活函数
sigmoid函数会将输入转化到0~1之间的范围,数据分布以0.5为中间,其主要的优点是处处连续可导,当输入值较大或较小时其梯度值极小,因此容易造成梯度消失的问题,特别是随着网络层数增加,各层权重参数叠加会导致问题加剧,虽然可能BatchNorm等方法可以解决这类问题,但在多数情况下,应用sigmoid激活函数并不会带来较大收益,现在更常用Relu函数等取代。
2. Tanh激活函数
tanh函数会将输入转化到-1~1之间的范围,数据分布以0为中间,其也是处处连续可导,但当输入值较大或较小时其梯度值极小,也会出现梯度消失的问题,另外由于其数据分布是以0为中心的,因此更容易收敛,在某些特定网络结构(如RNN)中,这种以0为中心对称分布,同时包含了负数值的激活函数是有帮助的。
3. 类Tanh激活函数
上图的两个函数类似于tanh函数,其值范围在-1~1之间, 数据分布以0为中间,只是softsign函数更为平滑在一定程度上能减少tanh函数的梯度消失问题,会带来更为高效的训练,但其梯度计算相较于tanh更为复杂。hardtanh函数的梯度计算更为简单,但其分布偏硬,当权重参数值保持在一个偏小范围时,其也会有非常好的收敛效果(否则更容易陷入梯度消失问题)。
4. ReLU激活函数
Relu函数是更为常用的激活函数,很多人认为当不知道应该选择什么激活函数时,relu函数是默认的选择。relu函数首先的优点是其梯度计算很简单,梯度在大于0的情况下处处为1,可以加速模型的训练,另外其也不会存在梯度消费的问题。
但是其当小于0时输出为0,会造成神经元死亡现象(dying ReLU problem),可能会减少神经元的表达,同时会阻断梯度的回传,可能会造成训练困难,但从另一方面来说,其类似于L1正则化,增加了模型的稀疏性,会带来dropout相似的效果,增加模型的泛化性。
5. ReLU激活函数的变种
上图ReLU函数的一系列变种函数,其解决ReLU神经元死亡现象(dying ReLU problem),对于输入值小于0时,添加了一个a<1的线性系数,其中Leaky ReLU函数这个系数a值是固定的较小值,而PRelu这个系数a值是一个模型可训练的参数,RReLU函数这个系数a值是随机采样得到的。
特别是对于小型网络,应用Leaky ReLU函数是很有必要的,能让输出值小于0部分梯度也能回传,可以帮忙模型更好的训练。
与PReLU函数类似的是Maxout函数,其提供了更多可学习参数,号称可以拟合任何的凸激活函数,但是其带来了更多的参数,增加了模型的学习难度。
ReLU函数另一个变种是对ReLU函数做了向上截断(如下),这是因为ReLU系列函数存在scale-invariant的特性即当输入增加10倍,输出也会增加10倍,由于其只输出大于0的值,因此当各层权重值加大时,其输出值会累计膨胀,称之为bias shift,造成学习上的困难。
ReLU另一个类似的激活函数是Swish函数, 其是由sigmoid函数再乘以输入变量得到,但在图形上类似于ReLU但为平滑,同时通过引入变量,当
值越大其越趋近于ReLU函数,当其值越小,其越趋近于线性函数,这个
可以作为一个可以训练学习的参数,一些研究通过实验表明特别在大规模深度神经网络中,其能取得比ReLU更好的效果。
Swish函数另一个主要的问题是其梯度计算更为复杂,因此另一类似的激活函数hardSwish提供了更为简单的版本。
6. Softplus激活函数
softplus激活函数可以视为ReLU函数的平滑版本,当值越大其越趋近于ReLU函数,但是虽然其处处连续可导,但在实际上其并没有比ReLu更好的效果,一方面其计算梯度更为复杂,另外可能是Relu所带来的稀疏性对模型本身会增益。
7. ELU类激活函数
前文提到ReLU函数存在bias shift的问题,PReLU等变种激活函数可以解决这个问题,但是其存在线性负轴,因此对于噪声缺乏稳健性(神经元缺乏不激活状态),而ELU类激活函数更为平滑,函数处处连续可导,同时保证输出的均值为0,因此在训练时的收敛速度要高于ReLU,也不存在ReLU神经元死亡现象(dying ReLU problem),但是ELU函数的计算复杂度要高于ReLU,所以在测试时计算速度要大于ReLU。
8. shrink类激活函数
shrink类函数几乎是很少用于隐层激活函数,其类似于一个线性函数,只不过在0附近有一个段非激活区域,在某些场景下会有用,比如用于软L1正则项的计算,或者在稀疏编码sparse coding,可以用于计算稀疏的潜在变量。
总结:
对于激活函数的选择并没有放之四海皆准的法则,一般都需要根据模型需要去尝试。很多学者建议在初始情况下选择ReLU作为默认激活函数,之后可以尝试PReLU、Maxout、Swish等类ReLU函数进行优化,但这些方法都可能会增加模型的训练难度。
另外,sigmoid、tanh等其他类激活函数由于存在梯度消失等问题,很多学者并不推荐使用,但是通过结合BatchNorm等方法,在部分场景下会更适合,比如tanh函数适合某些需要负值输出的情况。
相关文章:

常见激活函数Activation Function的选择
Activation Function激活函数一般会神经网络中隐层和输出层上,其中作用在输出层主要用于适配输出,比如sigmoid函数可用于生成[0,1]之间的概率估计值。而作用于隐层主要用于增加神经网络的非线性,增加了网络的表达能力,本文主要介绍…...

大厂跟进ChatGPT,为什么百度“文心一言”成色最好?【快评】
作者 | 曾响铃 文 | 响铃说 赶ChatGPT热度,百度3月初就要发布与ChatGPT类似的人工智能聊天机器人服务“文心一言”(英文名:ERNIE Bot),似乎无法提振资本市场对百度的信心。 2022年第四季度及全年未经审计的财报发布…...

ChatGPT和Web3:人工智能如何帮助您建立和发展您的 Web3 公司
ChatGPT是OpenAI在2022年11月推出的聊天机器人。该机器人建立在OpenAI的GPT-3人工智能家族上,并通过监督学习和强化学习技术进行了优化。 与ChatGPT机器人聊天时,你会感觉自己在与一个懂得一切并以非常教育性的方式回答的朋友交谈。回答在许多知识领域非…...
【人工智能 AI】怎样实施RPA 机器人流程自动化(Robotic Process Automation)?核心技术有哪些?
文章目录 RPA 简介RPA的实施RPA的核心技术1. 自动化测试(1)自动化测试工具(2)自动化测试框架2. 自动化脚本(1)自动化脚本语言(2)自动化脚本框架3. 机器学习(1)机器学习模型(2)机器学习框架(3)自然语言处理(4)图像处理(5)深度学习(6)机器人操作系统RPA核心能…...

基于BP神经网络的性别识别,BP神经网络详细原理,自编码神经网络代码,神经网络案例之18
目标 背影 BP神经网络的原理 BP神经网络的定义 BP神经网络的基本结构 BP神经网络的神经元 BP神经网络的激活函数, BP神经网络的传递函数 数据 神经网络参数 基于BP神经网络 性别识别的MATLAB代码 效果图 结果分析 展望 背影 男人体内蛋白质比例大,女生…...

2023年消费电子行业研究报告
第一章 行业概况 消费电子行业是电子信息行业的子行业。消费电子是指围绕着消费者应用而设计的与生活、工作和娱乐息息相关的电子类产品,通常会应用于娱乐、通讯以及文书用途,最终实现消费者自由选择资讯、享受娱乐的目的,主要侧重于个人购买…...
CSDN 编程竞赛三十一期题解
竞赛总览 CSDN 编程竞赛三十一期:比赛详情 (csdn.net) 本次竞赛的最后一道题的描述部分有些问题(题目描述与样例不符),另外,测试数据似乎也有点问题,试了多种方式,但最多只能通过10%的测试点。…...

SpringMVC常见面试题(2023最新)
目录前言1.简单介绍下你对springMVC的理解?2.说一说SpringMVC的重要组件及其作用3.SpringMVC的工作原理或流程4.SpringMVC的优点5.SpringMVC常用注解6.SpringMVC和struts2的区别7.怎么实现SpringMVC拦截器8.SpringMvc的控制器是不是单例模式?如果是,有什…...

【正点原子FPGA连载】第十六章DP彩条显示实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南
1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第十六章DP彩条显…...

数据结构与算法—链表list
目录 链表 链表类型 链表插入 链表删除 写程序注意点 与数组区别 链表应用 LRU 实现思想 链表 链表,一种提高数据读取性能的技术,在硬件设计、软件开发中有广泛应用。常见CPU缓存,数据库缓存,浏览器缓存等。缓存满时&#…...

自定义View练习题目整理
一、动态音频播放柱形图 1、效果图: 2、步骤 (1)、新建自定义View类,继承View (2)、重写onDraw()方法,使用画笔和画布循环画一定数量的柱形 Overrideprotected void onDraw(Canvas canvas) {s…...

LAMP平台部署及应用
LAMP平台部署及应用 📒博客主页: 微笑的段嘉许博客主页 💻微信公众号:微笑的段嘉许 🎉欢迎关注🔎点赞👍收藏⭐留言📝 📌本文由微笑的段嘉许原创! Ὄ…...
ubuntu20.04安装python3虚拟环境
1.安装pip3 sudo apt install python3-pip2.安装虚拟环境 sudo apt install virtualenv sudo apt install virtualenvwrapper3.修改配置文件设置环境变量 打开.bashrc并编辑 gedit ~/.bashrc在.bashrc文件后面加入下面两行 export WORKON_HOME$HOME/.virtualenvs source …...

VUE3源码分析————rollup打包
文章目录什么是rolluprollup打包和webpack打包的区别rollup打包准备一、安装yarn开始rollup打包一、初始化二、package.json文件配置三、新建并配置打包文件夹四、下载rollup及打包执行文件五、文件大致分布
【JavaScript】前端实现电子签名:
文章目录一、效果:二、实现:三、扩展一、效果: 二、实现: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"vie…...

Windows 11 22H2 中文版、英文版 (x64、ARM64) 下载 (updated Feb 2023)
Windows 11, version 22H2,2023 年 2 月 更新 请访问原文链接:https://sysin.org/blog/windows-11/,查看最新版。原创作品,转载请保留出处。 作者主页:www.sysin.org 全新推出 Windows 11 全新 Windows 体验&#x…...

【java】Spring Cloud --Spring Cloud Alibaba 教程
文章目录Spring Cloud Alibaba是什么Spring Cloud AlibabaSpring Cloud Alibaba 组件Spring Cloud Alibaba 的应用场景Spring Cloud 两代实现组件对比Spring Cloud Alibaba 版本依赖Spring Cloud Alibaba 组件版本关系Spring Cloud Alibaba NacosNacos 的特性服务发现服务健康监…...

通过操作Cortex-A7核,串口输入相应的命令,控制LED灯进行工作增加编程要求
2.编程要求: 1)结构体封装 typedef struct{ char* cmd_arr; //命令行字符串 gpio_t* gpiox;//GPIO组号 unsigned int pin; //引脚编号 status_t status; //LED灯状态 void(*gpio_write_pin)(gpio_t* gpiox,unsigned int pin,status_t status); }cmd_t; 2…...

银行家算法
银行家算法 银行家算法是一种用来避免操作系统死锁出现的有效算法,所以在引入银行家算法的解释之前,有必要简单介绍一下死锁的概念。 一、死锁 死锁:是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成…...

181、【动态规划】leetcode ——72. 编辑距离(C++版本)
题目描述 原题链接:72. 编辑距离 解题思路 动态规划五步曲: (1)dp[i][j]含义: 以word1[i - 1]和word2[j - 1]结尾子串,经过最少次增删改后,可让word1变为word2的步数。dp中的i对应word1中的i…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...