当前位置: 首页 > news >正文

常见激活函数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函数f(x)=max(w_1x+b_1, w_2x+b_2,...),其提供了更多可学习参数,号称可以拟合任何的凸激活函数,但是其带来了更多的参数,增加了模型的学习难度。

ReLU函数另一个变种是对ReLU函数做了向上截断(如下),这是因为ReLU系列函数存在scale-invariant的特性即当输入增加10倍,输出也会增加10倍,由于其只输出大于0的值,因此当各层权重值加大时,其输出值会累计膨胀,称之为bias shift,造成学习上的困难。

ReLU另一个类似的激活函数是Swish函数, 其是由sigmoid函数再乘以输入变量得到,但在图形上类似于ReLU但为平滑,同时通过引入\beta变量,当\beta值越大其越趋近于ReLU函数,当其值越小,其越趋近于线性函数,这个\beta可以作为一个可以训练学习的参数,一些研究通过实验表明特别在大规模深度神经网络中,其能取得比ReLU更好的效果。

 Swish函数另一个主要的问题是其梯度计算更为复杂,因此另一类似的激活函数hardSwish提供了更为简单的版本。

6. Softplus激活函数

 softplus激活函数可以视为ReLU函数的平滑版本,当\beta值越大其越趋近于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激活函数一般会神经网络中隐层和输出层上&#xff0c;其中作用在输出层主要用于适配输出&#xff0c;比如sigmoid函数可用于生成[0,1]之间的概率估计值。而作用于隐层主要用于增加神经网络的非线性&#xff0c;增加了网络的表达能力&#xff0c;本文主要介绍…...

大厂跟进ChatGPT,为什么百度“文心一言”成色最好?【快评】

作者 | 曾响铃 文 | 响铃说 赶ChatGPT热度&#xff0c;百度3月初就要发布与ChatGPT类似的人工智能聊天机器人服务“文心一言”&#xff08;英文名&#xff1a;ERNIE Bot&#xff09;&#xff0c;似乎无法提振资本市场对百度的信心。 2022年第四季度及全年未经审计的财报发布…...

ChatGPT和Web3:人工智能如何帮助您建立和发展您的 Web3 公司

ChatGPT是OpenAI在2022年11月推出的聊天机器人。该机器人建立在OpenAI的GPT-3人工智能家族上&#xff0c;并通过监督学习和强化学习技术进行了优化。 与ChatGPT机器人聊天时&#xff0c;你会感觉自己在与一个懂得一切并以非常教育性的方式回答的朋友交谈。回答在许多知识领域非…...

【人工智能 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神经网络的激活函数&#xff0c; BP神经网络的传递函数 数据 神经网络参数 基于BP神经网络 性别识别的MATLAB代码 效果图 结果分析 展望 背影 男人体内蛋白质比例大&#xff0c;女生…...

2023年消费电子行业研究报告

第一章 行业概况 消费电子行业是电子信息行业的子行业。消费电子是指围绕着消费者应用而设计的与生活、工作和娱乐息息相关的电子类产品&#xff0c;通常会应用于娱乐、通讯以及文书用途&#xff0c;最终实现消费者自由选择资讯、享受娱乐的目的&#xff0c;主要侧重于个人购买…...

CSDN 编程竞赛三十一期题解

竞赛总览 CSDN 编程竞赛三十一期&#xff1a;比赛详情 (csdn.net) 本次竞赛的最后一道题的描述部分有些问题&#xff08;题目描述与样例不符&#xff09;&#xff0c;另外&#xff0c;测试数据似乎也有点问题&#xff0c;试了多种方式&#xff0c;但最多只能通过10%的测试点。…...

SpringMVC常见面试题(2023最新)

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

【正点原子FPGA连载】第十六章DP彩条显示实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十六章DP彩条显…...

数据结构与算法—链表list

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

自定义View练习题目整理

一、动态音频播放柱形图 1、效果图&#xff1a; 2、步骤 &#xff08;1&#xff09;、新建自定义View类&#xff0c;继承View &#xff08;2&#xff09;、重写onDraw()方法&#xff0c;使用画笔和画布循环画一定数量的柱形 Overrideprotected void onDraw(Canvas canvas) {s…...

LAMP平台部署及应用

LAMP平台部署及应用 &#x1f4d2;博客主页&#xff1a; 微笑的段嘉许博客主页 &#x1f4bb;微信公众号&#xff1a;微笑的段嘉许 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐留言&#x1f4dd; &#x1f4cc;本文由微笑的段嘉许原创&#xff01; &#x1f4c…...

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及打包执行文件五、文件大致分布![image.png](https://img-blog.csdnimg.cn/img_convert/66f1a85ff57d…...

【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&#xff0c;2023 年 2 月 更新 请访问原文链接&#xff1a;https://sysin.org/blog/windows-11/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;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.编程要求&#xff1a; 1&#xff09;结构体封装 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…...

银行家算法

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

181、【动态规划】leetcode ——72. 编辑距离(C++版本)

题目描述 原题链接&#xff1a;72. 编辑距离 解题思路 动态规划五步曲&#xff1a; &#xff08;1&#xff09;dp[i][j]含义&#xff1a; 以word1[i - 1]和word2[j - 1]结尾子串&#xff0c;经过最少次增删改后&#xff0c;可让word1变为word2的步数。dp中的i对应word1中的i…...

mysql 中关于慢查询日志

慢查询日志 慢查询日志主要用来记录执行时间超过设置的某个时长的SQL语句&#xff0c;能够帮助数据库维护人员找出执行时间比较长、执行效率比较低的SQL语句&#xff0c;并对这些SQL语句进行针对性优化。 开启慢查询 可以在 my.cnf 文件或者 my.ini 文件中配置开启慢查询日志…...

程序员必备的软技能-金字塔原理拆解(上)

原书 290千字&#xff0c;本文预计 14千字&#xff0c;拆解比 20&#xff1a;1&#xff0c;预计阅读时长 15分钟序言日常工作中&#xff0c;常常因为思维、表达方式不对产生不想要的结果&#xff1a;写了一个小时的周报&#xff0c;领导却不满意&#xff1f;跟团队讲了半天自己…...

关于我利用python开发的PC端标注软件及目标检测软件

如何利用python快速开发PC端目标检测及数据标注软件概述开发软件背景开发第一步&#xff1a;功能需求分析开发第二步&#xff1a; 前端分区设计开发第三步&#xff1a;功能开发开发第四步&#xff1a;程序功能的打包与检查开发第五步&#xff1a;程序的反馈与改善一个例子的展示…...

Git导出增量包的操作步骤

前言在项目开发部署中&#xff0c;通常是将一个Git项目全量打包发布&#xff0c;但有的场景只需要导出有变更的那部分文件&#xff0c;增量发布&#xff0c;此时就需要使用Git导出增量包了。一、查看提交记录拿到提交ID码①例如使用的gitlab使用方法参考下图(一目了然) 【推荐】…...

JavaWeb--JavaScript

JavaScript1 JavaScript简介2 JavaScript引入方式2.1 内部脚本2.2 外部脚本3 JavaScript基础语法3.1 书写语法3.2 输出语句3.3 变量3.4 数据类型3.5 运算符3.5.1 \\ 和 区别3.5.2 类型转换3.6 流程控制语句3.6.1 if 语句3.6.2 switch 语句3.6.3 for 循环语句3.6.4 while 循环语…...

mars3d加载建筑物白膜及简单建筑物样式

首先需要拥有shp格式的数据。可以通过水经微图下载&#xff0c;注意此软件是付费的将shp格式的数据处理为切片数据&#xff0c;可以使用cesiumlab处理完成得到json数据就可以在mars3d中加载了 function init() { // 判断webgl支持 if (!mars3d.Util.webglreport()) { …...

数据结构之顺序表

本章重点&#xff1a; 1.线性表 2.顺序表 3.链表 4.顺序表和链表的区别和联系 目录 1.线性表 2.顺序表 2.1概念及结构 2.2接口实现 2.2.1 SeqList.h 2.2.2 SeqList.c 2.3数组相关面试题 2.3.1移除元素 2.3.2删除有序数组中的重复项 ​编辑 2.3.3合并两个有序数组…...

【数据挖掘实战】——家用电器用户行为分析及事件识别

项目地址&#xff1a;Datamining_project: 数据挖掘实战项目代码 目录 一、背景和挖掘目标 1、问题背景 2、原始数据 3、挖掘目标 二、分析方法与过程 1、初步分析 2、总体流程 第一步&#xff1a;数据抽取 第二步&#xff1a;探索分析 第三步&#xff1a;数据的预处…...

肠道核心菌属——双歧杆菌属,了解并拥有它

双歧杆菌 双歧杆菌属&#xff08;Bifidobacterium&#xff09;是放线菌门严格厌氧的革兰氏阳性多形性杆状细菌。末端常常分叉&#xff0c;故名双歧杆菌。是人和动物肠道的重要核心菌群和有益生理菌群&#xff0c;也是母乳喂养婴儿中发现的第二大菌。 肥胖、糖尿病和过敏等各种疾…...

Python 之 Pandas 生成时间戳范围、Pandas 的时期函数 Period() 和时间序列 - 重采样 resample

文章目录一、生成时间戳范围1. 指定值2. 指定开始日期并设置期间数3. 频率 freq4. closed二、Pandas 的时期函数 Period()三、时间序列 - 重采样 resample在开始之前&#xff0c;我们先导入 numpy 和 pandas 库&#xff0c;同时导入 python 内置的模块。 import pandas as pd​…...