[实践应用] 深度学习之激活函数

news2024/9/20 6:28:32

文章总览:YuanDaiMa2048博客文章总览


深度学习之激活函数

  • 激活函数
    • 基本概念
    • 分类
    • 常见的激活函数
      • 2. Tanh/双曲正切激活函数
      • 3. ReLU激活函数
      • 4. Softmax激活函数
    • PyTorch中如何使用
      • 1. 线性激活函数
      • 2. 非线性激活函数
        • Sigmoid
        • Tanh
        • ReLU
        • Leaky ReLU
        • Parametric ReLU (PReLU)
      • 使用激活函数

激活函数

基本概念

激活函数(Activation Function)是一种添加到人工神经网络中的函数,旨在帮助网络学习数据中的复杂模式。在神经元中,输入的input经过一系列加权求和后作用于另一个函数,这个函数就是这里的激活函数。类似于人类大脑中基于神经元的模型,激活函数最终决定了是否传递信号以及要发射给下一个神经元的内容。

分类

激活函数可以分为线性激活函数(线性方程控制输入到输出的映射,如f(x)=x等)以及非线性激活函数(非线性方程控制输入到输出的映射,比如Sigmoid、Tanh、ReLU、LReLU、PReLU、Swish 等)

为什么要使用激活函数?

  • 因为神经网络中每一层的输入输出都是一个线性求和的过程,下一层的输出只是承接了上一层输入函数的线性变换,所以如果没有激活函数,那么无论你构造的神经网络多么复杂,有多少层,最后的输出都是输入的线性组合,纯粹的线性组合并不能够解决更为复杂的问题。而引入激活函数之后,我们会发现常见的激活函数都是非线性的,因此也会给神经元引入非线性元素,使得神经网络可以逼近其他的任何非线性函数,这样可以使得神经网络应用到更多非线性模型中。

在这里插入图片描述

常见的激活函数

  1. Sigmoid函数
    Sigmoid函数也被称为Logistic函数,通常用于神经网络的隐层神经元输出。其输出值的范围在 (0,1) 之间,因此可以将实数映射到 (0,1) 的区间,常用于二分类问题。在特征相差较复杂或差异不是特别大时,Sigmoid函数的效果较好。其数学表达式如下所示:
    σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+ex1

在这里插入图片描述

应用场景

  • 用于将预测概率作为输出的模型。由于概率的取值范围是 0 到 1,因此 Sigmoid 函数非常合适。
    - 适用于二分类问题,输出范围为 (0,1),可用于输出概率。
    - 适用于多层网络中的中间层的非线性转换。

优点

  • 输出范围在 (0,1) 内,适合作为概率输出。
  • 函数是可微的,有助于梯度下降优化。
  • 在输出接近 0 或 1 时,梯度较大,有助于参数更新。

缺点

  • Sigmoid 函数存在梯度消失问题,导致深层网络训练困难。
  • 在输出远离中心位置时,梯度接近于 0,容易导致梯度消失。
  • Sigmoid 函数的计算相对复杂,会消耗更多的计算资源。

2. Tanh/双曲正切激活函数

Tanh函数,又称双曲正切激活函数(hyperbolic tangent activation function),与Sigmoid函数类似,但将其值范围压缩至 -1 到 1 的区间内。与Sigmoid函数不同的是,Tanh函数的输出以零为中心,因为其取值范围在 -1 到 1 之间。其数学表达式如下:
Tanh ( x ) = e x − e − x e x + e − x \text{Tanh}(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}} Tanh(x)=ex+exexex

Tanh函数和Sigmoid函数之间存在一种简单的关系,可以通过Sigmoid函数的输出来表示Tanh函数。给定Sigmoid函数的输出 σ ( x ) σ(x) σ(x),Tanh函数的输出可以表示为:
Tanh ( x ) = 2 σ ( 2 x ) − 1 \text{Tanh}(x) = 2σ(2x) - 1 Tanh(x)=2σ(2x)1
这个关系式表示了Tanh函数如何由Sigmoid函数的输出得出。

在这里插入图片描述

应用场景

  • 适用于隐藏层的激活函数,可以将输入值映射到 (-1,1) 区间内。
  • 适用于需要零中心化的场景,相较于 Sigmoid 函数,Tanh 函数的输出以 0 为中心。

优点

  • 输出值在 (-1,1) 内,相比于 Sigmoid 函数,Tanh 函数的输出以 0 为中心,有助于神经网络的训练。
  • 函数的形状对称,能够保持输入的符号信息。

缺点

  • 仍然存在梯度消失问题,特别是在靠近饱和区域时。
  • 计算复杂度较高,相比于 Sigmoid 函数,计算量大一些。

3. ReLU激活函数

ReLU函数又称为修正线性单元(Rectified Linear Unit),是一种分段线性函数,其弥补了sigmoid函数以及tanh函数的梯度消失问题,在目前的深度神经网络中被广泛使用。ReLU函数本质上是一个斜坡(ramp)函数,其数学表达式如下:

  • 这个函数的图像在 x > 0 x > 0 x>0 时是一条斜坡,斜率为1;在 x < 0 x < 0 x<0 时函数值为0。ReLU 函数可以表示为:

ReLU ( x ) = { 0 , if  x ≤ 0 x , if  x > 0 = max ⁡ ( 0 , x ) \text{ReLU}(x) = \begin{cases} 0, & \text{if } x \leq 0 \\ x, & \text{if } x > 0 \end{cases} = \max(0, x) ReLU(x)={0,x,if x0if x>0=max(0,x)

ReLU函数作为神经元的激活函数,在接收来自上一层神经网络的输入向量 x \mathbf{x} x,进行线性变换 w T x + b \mathbf{w}^T\mathbf{x} + b wTx+b 之后,产生非线性输出结果。换言之,对于进入神经元的来自上一层神经网络的输入向量 x \mathbf{x} x,使用ReLU函数的神经元会输出:

ReLU ( w T x + b ) = max ⁡ ( 0 , w T x + b ) \text{ReLU}(\mathbf{w}^T\mathbf{x} + b) = \max(0, \mathbf{w}^T\mathbf{x} + b) ReLU(wTx+b)=max(0,wTx+b)

这个输出值将被传递至下一层神经元,或作为整个神经网络的输出(取决于神经元在网络结构中的位置)。

在这里插入图片描述

应用场景

  • 在深度神经网络中广泛应用,能够有效避免梯度消失问题,加速网络的收敛速度。
  • 许多成功的深度学习模型使用 ReLU 作为激活函数,如 AlexNet、VGG 等。

优点

  • 相比于 Sigmoid 和 Tanh 函数,ReLU 函数的计算速度更快,因为它是简单的线性函数。
  • 解决了梯度消失问题,能够在训练深层神经网络时更快地收敛。

缺点

  • Dead ReLU 问题:当输入为负时,ReLU 函数输出为 0,导致部分神经元失活,无法更新参数,影响模型性能。
  • 对于负数部分,ReLU 函数的导数为 0,可能导致梯度消失问题。
  • 不是零中心化,可能导致在训练过程中出现偏移。

Dead ReLU问题是指在训练神经网络时,ReLU激活函数所对应的神经元可能会因参数更新不当而“死亡”。具体来说,如果某个ReLU神经元在一次不恰当的参数更新后,对于所有的训练数据,其输出始终为负数,那么该神经元的参数梯度将永远为零,即无法被激活。这意味着,即使在后续的训练过程中,神经元接收到的输入值可能已经可以激活它,但由于参数梯度一直为零,该神经元也无法被激活。这种情况被称为“死亡ReLU问题”,可能出现在网络的任何隐藏层中。Dead ReLU问题可能会影响网络的性能和训练效果,因此在实践中需要采取措施来缓解这个问题,例如使用其他类型的激活函数或调整网络结构。

4. Softmax激活函数

Softmax函数是一种常用的激活函数,通常用于多分类问题中,将模型的原始输出转换为概率分布。Softmax函数接受一个包含任意实数的向量作为输入,并将每个元素的值转换为介于 0 和 1 之间的概率值,使得所有元素的概率之和等于 1。Softmax函数的数学表达式如下:
Softmax ( z ) i = e z i ∑ j = 1 N e z j \text{Softmax}(\mathbf{z})_i = \frac{e^{z_i}}{\sum_{j=1}^{N} e^{z_j}} Softmax(z)i=j=1Nezjezi
其中, z \mathbf{z} z 是输入向量, N N N 是向量的维度, Softmax ( z ) i \text{Softmax}(\mathbf{z})_i Softmax(z)i 表示 Softmax 函数的输出向量中的第 i i i 个元素。

应用场景

  • 用于多分类问题中,将模型的原始输出转换为类别概率分布。
  • 在神经网络的输出层使用 Softmax 函数,可以得到每个类别的预测概率,然后根据概率进行分类决策。

优点

  • 输出结果是一个概率分布,所有类别的概率之和为 1,便于理解和解释。
  • Softmax 函数是可微的,有助于梯度下降优化。
  • 在训练过程中,Softmax 函数的梯度可以直接用于更新参数。

缺点

  • 对于输入较大或较小的情况,Softmax 函数的输出会非常接近于 0 或 1,可能导致梯度消失问题。
  • Softmax 函数的计算量较大,因为要对所有元素进行指数运算和求和操作,特别是在处理大规模数据时,计算复杂度较高。

PyTorch中如何使用

在 PyTorch 中,可以使用 torch.nn 模块来定义各种激活函数。以下是几个经典激活函数的定义及其代码示例:

1. 线性激活函数

线性激活函数实际上是恒等函数,它可以通过直接返回输入实现:

import torch.nn as nn

class LinearActivation(nn.Module):
    def forward(self, x):
        return x

linear_activation = LinearActivation()

2. 非线性激活函数

Sigmoid
import torch.nn as nn

sigmoid = nn.Sigmoid()
Tanh
import torch.nn as nn

tanh = nn.Tanh()
ReLU
import torch.nn as nn

relu = nn.ReLU()
Leaky ReLU
import torch.nn as nn

leaky_relu = nn.LeakyReLU(negative_slope=0.01)  # negative_slope 参数用于控制负半轴的斜率
Parametric ReLU (PReLU)
import torch.nn as nn

prelu = nn.PReLU()  # PReLU 的参数可以通过设置 init 参数进行初始化

使用激活函数

可以在构建模型时将这些激活函数作为层添加到网络中。例如:

import torch
import torch.nn as nn

class SimpleNet(nn.Module):
    def __init__(self):
        super(SimpleNet, self).__init__()
        self.fc1 = nn.Linear(10, 20)
        self.relu = nn.ReLU()  # 可以换成其他激活函数,如 nn.Sigmoid()
        self.fc2 = nn.Linear(20, 1)

    def forward(self, x):
        x = self.fc1(x)
        x = self.relu(x)
        x = self.fc2(x)
        return x

# 实例化模型
model = SimpleNet()

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

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

相关文章

ThinkPHP Email功能如何配置才能发送邮件?

ThinkPHP Email发送流程&#xff1f;使用ThinkPHP发Email方法&#xff1f; ThinkPHP作为一款流行的PHP框架&#xff0c;提供了强大的Email功能&#xff0c;使得开发者能够轻松实现邮件发送。AokSend将详细介绍如何配置ThinkPHP Email功能&#xff0c;以确保邮件能够顺利发送。…

基于多种智能优化算法优化BP神经网络的数据时序预测

基于多种智能优化算法优化BP神经网络进行数据时序预测的研究&#xff0c;旨在通过引入多种优化算法来提高传统BP神经网络&#xff08;Backpropagation Neural Network&#xff09;的预测精度与泛化能力。 代码原理及流程 1. BP神经网络简介 BP神经网络是一种常见的前馈神经网…

别找了!包含gpt在内的国内可以使用的Ai网站都在这了【最新可用】

在当今人工智能迅速发展的时代&#xff0c;智能创作与对话平台为用户提供了多样化的功能支持。以下是一些国内代表性的GPT平台&#xff0c;涵盖了从个人到企业的广泛需求&#xff0c;您可以根据自己的需求灵活选择。我们还为您整理了这些平台的链接&#xff0c;方便直接体验。&…

谷歌对抗司法部:为什么谷歌的“数百个竞争对手”说法站不住脚

随着谷歌反垄断陪审团审判的进行&#xff0c;谷歌声称美国司法部对广告技术市场的看法狭隘&#xff0c;并且广告商和出版商有很多替代选择。然而&#xff0c;证据并不支持这一说法。 谷歌误导性地声称有“数百个竞争对手。” 虽然存在许多广告技术提供商&#xff0c;但谷歌在…

【Petri网导论学习笔记】Petri网导论入门学习(二)

Petri 网导论学习笔记&#xff08;二&#xff09; 如需学习转载请注明原作者并附本帖链接&#xff01;&#xff01;&#xff01; 如需学习转载请注明原作者并附本帖链接&#xff01;&#xff01;&#xff01; 如需学习转载请注明原作者并附本帖链接&#xff01;&#xff01;&am…

如何进行DAP-seq的数据挖掘,筛选验证位点

从样本准备到寄送公司&#xff0c;每一天都在“祈祷”有个心仪的分析结果&#xff0c;终于在这天随着邮件提示音的响起&#xff0c;收到了分析结果...... 分析前工作 爱基在进行数据分析之前&#xff0c;会有两次质控报告反馈给老师们。第一个&#xff0c;基因组DNA的提取质控…

线上找工作求职招聘小程序源码系统 带完整的安装代码包以及搭建部署教程

系统概述 在当今这个数字化时代&#xff0c;互联网已经渗透到我们生活的方方面面&#xff0c;其中就业市场也不例外。随着移动互联网的普及&#xff0c;线上找工作已成为许多求职者的首选方式。为了满足这一市场需求&#xff0c;我们精心打造了一款“线上找工作求职招聘小程序…

SpringMVC中的前置调用

这两天在看一个老项目&#xff0c;用的SpringMVCJSP。因为很久没看SpringMVC&#xff0c;在看一个Controller的时候竟然看不懂了哈哈哈哈~ Controller&#xff1a; Controller RequestMapping("example") FunctionId("F001") public class ExampleContro…

安全团队需要了解的六大最危险的新威胁

人工智能的崛起为网络安全带来了非凡的机遇和令人生畏的挑战。 虽然人工智能可以轻松识别和利用漏洞&#xff0c;但如果没有强大的安全措施&#xff0c;部署人工智能会带来重大风险。 随着技术的发展&#xff0c;许多组织优先考虑人工智能创新&#xff0c;却忽视了安全性&#…

《黑神话悟空》有情众生三十四难成就指南

在《黑神话悟空》的丰富世界中&#xff0c;解锁“有情众生三十四难”成就是一项颇具挑战性的任务。这个成就要求玩家完成一系列精细的支线任务&#xff0c;并在小雷音寺击败不白。以下是详细的成就解锁步骤&#xff0c;助你在这款动作角色扮演游戏中取得新的进展。 如果需要一个…

苹果手机铃声怎么设置自己的歌?3个方法自定义手机铃声

苹果手机内部的手机铃声库只有固定的几首铃声&#xff0c;且都是纯音乐&#xff0c;比较单调&#xff0c;并不是所有用户都喜欢这些铃声。那么&#xff0c;苹果手机铃声怎么设置自己的歌呢&#xff1f;小编这里有3个方法&#xff0c;可以教大家如何将手机铃声设置成自己喜欢的歌…

深度学习-目标检测(一)-R-CNN

目录 一&#xff1a;目标检测-Overfeat模型 1.滑动窗口 二&#xff1a;目标检测R-CNN模型 1.R-CNN结构 1.步骤&#xff08;以AlexNet网络为基准&#xff09; 2.候选区域 3.CropWarp 4.CNN网络提取特征 5.特征向量训练分类器SVM 三&#xff1a;R-CNN训练过程 1.训练…

DataLoader使用

文章目录 一、认识dataloader二、DataLoader整合数据集三、使用DataLoader展示图片方法四、去除结尾不满足batch_size设值图片的展示 一、认识dataloader DataLoader 用于封装数据集&#xff0c;并提供批量加载数据的迭代器。它支持自动打乱数据、多线程数据加载等功能。datas…

【网络安全】-文件上传漏洞实战-upload-labs(0~16)

准备&#xff1a; 一句话木马&#xff1a;<? php eval($_REQUEST[cmd]); ?)> 格式&#xff1a;写入txt文本重命名后缀问.php /.php 格式&#xff0c;看具体要求上传。 Pass-01: 显示页面源代码&#xff0c;发现是js对不合法文件进行检查,上传修改为.jpg的php文件直接…

孩子为什么会有自闭症?

自闭症&#xff0c;这个复杂而神秘的神经发展性障碍&#xff0c;长久以来一直困扰着无数家庭和专业人士。尽管其确切原因尚未被完全揭示&#xff0c;但多年的研究与实践已经为我们提供了多个可能的解释框架。 首先&#xff0c;遗传因素在自闭症的发病中扮演了重要角色。科学家发…

HTML5超酷炫的水果蔬菜在线商城网站源码系列模板1

文章目录 1.设计来源1.1 主界面1.2 商品列表界面1.3 商品详情界面1.4 其他界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/142059238 HTML5超酷炫的水果蔬菜在线商城网…

五星级可视化页面(04):城市鸟瞰地图,恢宏大气。

今天继续分享五星级可视化大屏界面&#xff0c;本期分享城市3D鸟瞰图的&#xff0c;非常的恢宏大气。

101 个 React 技巧和窍门

在这篇文章中&#xff0c;我分享了我多年来学到的101个最佳提示和技巧。准备好了吗&#xff1f;让我们开始吧&#x1f4aa;&#xff01; 注意&#xff1a;本指南假定你对 React 有基本的了解&#xff0c;并了解术语 props、state、context 等。 类别 #1&#xff1a;组件组织 1…

Mac中Twig模版安装与SSTI漏洞学习

感谢大佬的文章参考学习。 SSTI&#xff1a;https://www.cnblogs.com/bmjoker/p/13508538.html Homebrew&#xff1a;快速开始 - Homebrew 中文网 Homebrew安装 一键快捷安装&#xff1a;默认使用中科大的源 /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homeb…

LDAP HA 配置

目录 1 LDAP 高可用1.1 介绍1.2 安装1、环境2、全量数据同步3、配置LDAP的HA4、测试 总结 1 LDAP 高可用 1.1 介绍 LDAP的主从同步模式有5种&#xff1a; MirrorMode为ldap ha比较主流的一种模式&#xff0c;本文基于MirrorMode模式进行部署。 如果想要主从LDAP是同一个IP…