深度学习中常用的激活函数有sigmoid、tanh、ReLU、LeakyReLU、PReLU、GELU等。

2023-10-19 16:04

本文主要是介绍深度学习中常用的激活函数有sigmoid、tanh、ReLU、LeakyReLU、PReLU、GELU等。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

深度学习中常用的激活函数

  • 1. Sigmoid函数
  • 2. Tanh函数
  • 3. ReLU函数
  • 4. LeakyReLU函数
  • 5. PReLU函数
  • 6. ELU函数:
  • 7. GELU函数:

深度学习中常用的激活函数有sigmoid、tanh、ReLU、LeakyReLU、PReLU等。

1. Sigmoid函数

Sigmoid函数公式为 f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+ex1,它的输出值在[0,1]之间,可以用来解决二元分类问题。它的主要特点是它是可导的,并且输出值可以被解释为概率。但是,如果输入值过大或过小,会导致梯度消失问题,对于较深的神经网络来说不太适用。

PyTorch的代码示例:

import torch.nn.functional as Fclass Net(nn.Module):def __init__(self):super(Net, self).__init__()self.fc1 = nn.Linear(10, 5)self.fc2 = nn.Linear(5, 1)def forward(self, x):x = F.sigmoid(self.fc1(x))x = F.sigmoid(self.fc2(x))return x

2. Tanh函数

Tanh函数公式为 f ( x ) = e x − e − x e x + e − x f(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}} f(x)=ex+exexex,它的输出值在[-1,1]之间,可以用来解决回归问题。与sigmoid不同的是,它的输出是以0为中心的,因此幂次大的输入值仍然会导致梯度消失问题。

PyTorch的代码示例:

import torch.nn.functional as Fclass Net(nn.Module):def __init__(self):super(Net, self).__init__()self.fc1 = nn.Linear(10, 5)self.fc2 = nn.Linear(5, 1)def forward(self, x):x = F.tanh(self.fc1(x))x = F.tanh(self.fc2(x))return x

3. ReLU函数

ReLU函数公式为 f ( x ) = m a x ( 0 , x ) f(x)=max(0, x) f(x)=max(0,x),它的输出值在[0,无穷)之间,可以用来解决分类和回归问题。它有以下优点:1)解决了梯度消失问题;2)计算速度快。

PyTorch的代码示例:

import torch.nn.functional as Fclass Net(nn.Module):def __init__(self):super(Net, self).__init__()self.fc1 = nn.Linear(10, 5)self.fc2 = nn.Linear(5, 1)def forward(self, x):x = F.relu(self.fc1(x))x = F.relu(self.fc2(x))return x

4. LeakyReLU函数

LeakyReLU函数公式为 f ( x ) = m a x ( 0.01 x , x ) f(x)=max(0.01x, x) f(x)=max(0.01x,x),它的输出值在(-无穷,无穷)之间,是ReLU的改进版。在输入值为负数时,它不是完全为0,而是有一个小的斜率,可以避免神经元死亡。

PyTorch的代码示例:

import torch.nn.functional as Fclass Net(nn.Module):def __init__(self):super(Net, self).__init__()self.fc1 = nn.Linear(10, 5)self.fc2 = nn.Linear(5, 1)self.LeakyReLU = nn.LeakyReLU(0.01)def forward(self, x):x = self.LeakyReLU(self.fc1(x))x = self.LeakyReLU(self.fc2(x))return x

5. PReLU函数

PReLU函数公式为:

f ( x ) = { x , if  x > 0 α x , otherwise f(x) = \begin{cases} x, & \text{if $x > 0$}\\ \alpha x, & \text{otherwise} \end{cases} f(x)={x,αx,if x>0otherwise

其中 α \alpha α 是可学习的参数,它的输出值在(-无穷,无穷)之间,是LeakyReLU的改进版。与LeakyReLU不同的是, α \alpha α 不是固定的,而是可以根据训练数据自适应调节。

PyTorch的代码示例:

import torch.nn.functional as Fclass Net(nn.Module):def __init__(self):super(Net, self).__init__()self.fc1 = nn.Linear(10, 5)self.fc2 = nn.Linear(5, 1)self.PReLU = nn.PReLU()def forward(self, x):x = self.PReLU(self.fc1(x))x = self.PReLU(self.fc2(x))return x

6. ELU函数:

ELU函数的数学公式为 f ( x ) = { x , x > 0 α ( e x − 1 ) , x ≤ 0 f(x)=\begin{cases}x, & x>0\\\alpha(e^x-1), & x\leq0\end{cases} f(x)={x,α(ex1),x>0x0,它是另一种解决ReLU“死亡”现象的函数,通过引入一个指数函数来平滑负数区间。

以下是使用PyTorch实现ELU函数的代码示例:

import torch.nn.functional as Fx = torch.randn(2, 3)
y = F.elu(x, alpha=1.0)
print(y)

深度学习中常用的激活函数有sigmoid、ReLU、LeakyReLU、ELU、SeLU等,其中gelu是近年来提出的一种新的激活函数。

7. GELU函数:

GELU (Gaussian Error Linear Units)函数是一种近年来提出的新型激活函数,其原理是基于高斯误差函数的近似。其作用是在保持ReLU函数优点的同时,减少其缺点。将输入的值 x x x通过高斯分布的累积分布函数(CDF) F ( x ) F(x) F(x),来获得激活函数的输出值。其数学表达式如下:

g e l u ( x ) = x ⋅ Φ ( x ) , 其中 Φ ( x ) = 1 2 [ 1 + e r f ( x 2 ) ] \mathrm{gelu}(x)=x\cdot\Phi (x), \ \mathrm{其中}\Phi(x)=\frac{1}{2}[1+\mathrm{erf}(\frac{x}{\sqrt{2}})] gelu(x)=xΦ(x), 其中Φ(x)=21[1+erf(2 x)]
其中, Φ ( x ) \Phi(x) Φ(x)为高斯分布的累积分布函数。

GELU函数具有以下特点:

  • 可微性:GELU函数可导,可以使用反向传播算法训练神经网络。
  • 非线性:与ReLU函数相似,GELU函数具有非线性特点,可以学习非线性函数。
  • 平滑性:GELU函数在整个实数轴上都是连续可导的,可以减少梯度消失和爆炸问题。
  • 计算效率高:由于GELU函数采用了近似求解,计算速度较ReLU函数更快。

由于高斯分布的概率密度函数(PDF)在均值处最大,因此gelu在接近0的地方具有很好的非线性特性,同时也有一定的平滑性,能够一定程度上减少梯度消失问题,提高模型的泛化能力。

PyTorch代码示例:

import torch.nn as nnclass MyModel(nn.Module):def __init__(self):super(MyModel, self).__init__()self.fc = nn.Linear(10, 20)self.act = nn.GELU()def forward(self, x):x = self.fc(x)x = self.act(x)return xmodel = MyModel()
import torch
import torch.nn.functional as Fclass Net(torch.nn.Module):def __init__(self):super(Net, self).__init__()self.fc1 = torch.nn.Linear(10, 20)self.fc2 = torch.nn.Linear(20, 2)def forward(self, x):x = F.gelu(self.fc1(x))x = F.gelu(self.fc2(x))return x

在上述示例代码中,我们使用了PyTorch中的F.gelu函数,实现了GELU激活函数对网络中的每个神经元进行激活。

这篇关于深度学习中常用的激活函数有sigmoid、tanh、ReLU、LeakyReLU、PReLU、GELU等。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/240873

相关文章

Django中的函数视图和类视图以及路由的定义方式

《Django中的函数视图和类视图以及路由的定义方式》Django视图分函数视图和类视图,前者用函数处理请求,后者继承View类定义方法,路由使用path()、re_path()或url(),通过in... 目录函数视图类视图路由总路由函数视图的路由类视图定义路由总结Django允许接收的请求方法http

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

postgresql使用UUID函数的方法

《postgresql使用UUID函数的方法》本文给大家介绍postgresql使用UUID函数的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录PostgreSQL有两种生成uuid的方法。可以先通过sql查看是否已安装扩展函数,和可以安装的扩展函数

MySQL字符串常用函数详解

《MySQL字符串常用函数详解》本文给大家介绍MySQL字符串常用函数,本文结合实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql字符串常用函数一、获取二、大小写转换三、拼接四、截取五、比较、反转、替换六、去空白、填充MySQL字符串常用函数一、

Java中Arrays类和Collections类常用方法示例详解

《Java中Arrays类和Collections类常用方法示例详解》本文总结了Java中Arrays和Collections类的常用方法,涵盖数组填充、排序、搜索、复制、列表转换等操作,帮助开发者高... 目录Arrays.fill()相关用法Arrays.toString()Arrays.sort()A