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

人工智能-深度学习-神经网络-激活函数

激活函数通过引入非线性来增强神经网络的表达能力,对于解决线性模型的局限性至关重要。由于反向传播算法(BP)用于更新网络参数,因此激活函数必须是可微的,也就是说能够求导的。

满足激活函数的条件

1.可微分,也就是可求导

        激活函数必须是可微的。这是因为反向传播算法依赖于梯度的计算,而梯度的计算需要激活函数是可微的。如果激活函数不可微,那么梯度无法计算,反向传播算法就无法进行。

2.必须是非线性的

        激活函数必须是非线性的。这是因为如果激活函数是线性的,那么无论神经网络有多少层,整个网络仍然可以简化为一个线性模型。非线性激活函数能够引入非线性变换,使得神经网络能够逼近和学习更复杂的函数。

常见激活函数

sigmoid

        它将输入映射到0到1之间的值,因此非常适合处理概率问题。

数学表达式为:

        

  1. 将任意实数输入映射到 (0, 1)之间,因此非常适合处理概率场景。

  2. sigmoid函数一般只用于二分类的输出层。

  3. 微分性质: 导数计算比较方便,可以用自身表达式来表示:

                

缺点:

  • 梯度消失:

    • 在输入非常大或非常小时,Sigmoid函数的梯度会变得非常小,接近于0。这导致在反向传播过程中,梯度逐渐衰减。

    • 最终使得早期层的权重更新非常缓慢,进而导致训练速度变慢甚至停滞。

  • 信息丢失:输入100和输入10000经过sigmoid的激活值几乎都是等于 1 的,但是输入的数据却相差 100 倍。

  • 计算成本高: 由于涉及指数运算,Sigmoid的计算比ReLU等函数更复杂,尽管差异并不显著。

曲线图:

使用场景:

        适合用于神经网络的输出层;

tanh

        tanh(双曲正切)是一种常见的非线性激活函数,常用于神经网络的隐藏层。

公式:

        

特征:

  1. 输出范围: 将输入映射到$$(-1, 1)$$之间,因此输出是零中心的。相比于Sigmoid函数,这种零中心化的输出有助于加速收敛。

  2. 对称性: Tanh函数关于原点对称,因此在输入为0时,输出也为0。这种对称性有助于在训练神经网络时使数据更平衡。

  3. 平滑性: Tanh函数在整个输入范围内都是连续且可微的,这使其非常适合于使用梯度下降法进行优化。

表示为:

                        

缺点:
  1. 梯度消失: 虽然一定程度上改善了梯度消失问题,但在输入值非常大或非常小时导数还是非常小,这在深层网络中仍然是个问题。

  2. 计算成本: 由于涉及指数运算,Tanh的计算成本还是略高,尽管差异不大。

跟sigmoid的函数图像差不多

同样适用于输出层。

ReLU

        ReLU(Rectified Linear Unit)是深度学习中最常用的激活函数之一,它的全称是修正线性单 元。ReLU 激活函数的定义非常简单,但在实践中效果非常好。

数学公式:

                        

进行非线性变换时:

        ​​​​​​​        ​​​​​​​        

稀疏激活:ReLU在输入小于等于 0 时输出为 0,这使得 ReLU 可以在神经网络中引入稀疏性(即一些神经元不被激活),这种稀疏性可以提升网络的泛化能力。

也就是一些神经元不会被激活。

缺点

神经元死亡:

如果某个神经元输入值是负,那么该神经元将永远不再激活,成为“死亡”神经元。随着训练的进行,网络中可能会出现大量死亡神经元,从而会降低模型的表达能力。

LeakyReLU

Leaky ReLU是一种对 ReLU 函数的改进,旨在解决 ReLU 的一些缺点,特别是Dying ReLU 问题。Leaky ReLU 通过在输入为负时引入一个小的负斜率来改善这一问题。

公式:

        ​​​​​​​        

特征:

特征
  1. 避免神经元死亡:通过在$$x\leq 0$$ 区域引入一个小的负斜率,这样即使输入值小于等于零,Leaky ReLU仍然会有梯度,允许神经元继续更新权重,避免神经元在训练过程中完全“死亡”的问题。

  2. 计算简单:Leaky ReLU 的计算与 ReLU 相似,只需简单的比较和线性运算,计算开销低。

缺点
  1. 参数选择:α 是一个需要调整的超参数,选择合适的α 值可能需要实验和调优。

  2. 出现负激活:如果α 设定得不当,仍然可能导致激活值过低。

softmax

        Softmax激活函数通常用于分类问题的**输出层**,它能够将网络的输出转换为概率分布,使得输出的各个类别的概率之和为 1。Softmax 特别适合用于多分类问题。

公式:​​​

        ​​​​​​​        ​​​​​​​        

特征:

        将输出转化为概率:通过$$Softmax$$,可以将网络的原始输出转化为各个类别的概率,从而可以根据这些概率进行分类决策。

        概率分布:输出是一个概率分布,并且所有输出值的和为 1,表示每个类别的预测概率。

        突出差异:$$Softmax$$会放大差异,使得概率最大的类别的输出值更接近$$1$$,而其他类别更接近$$0$$。

Softmax 函数是一种常用的激活函数,主要用于多分类问题。它将一个向量中的每个元素转换为一个介于 0 和 1 之间的值,并且所有元素的和为 1。Softmax 函数通常用于神经网络的输出层,以生成概率分布,表示每个类别的预测概率。Softmax 函数是非线性的,可微的,支持反向传播算法的梯度计算。

        

缺点:

1. 数值不稳定性

Softmax 函数涉及指数运算,当输入值非常大时,指数运算可能会导致数值溢出(overflow)。同样,当输入值非常小时,指数运算可能会导致数值下溢(underflow)。

2. 对输入敏感

Softmax 函数对输入值非常敏感,尤其是当输入值之间的差异较大时。这可能导致梯度消失或梯度爆炸问题,尤其是在深层神经网络中。

3. 类别不平衡问题

Softmax 函数假设所有类别是互斥的,并且每个类别的概率是独立的。在实际应用中,类别不平衡问题可能导致某些类别的概率被低估。

解决方法:
  • 类别加权:在损失函数中为不同类别分配不同的权重,以平衡类别不平衡问题。

  • 数据增强:通过数据增强技术(如过采样、欠采样)来平衡训练数据中的类别分布。

import torch
import torch.nn as nn# 表示4分类,每个样本全连接后得到4个得分,下面示例模拟的是两个样本的得分
input_tensor = torch.tensor([[-1.0, 2.0, -3.0, 4.0], [-2, 3, -3, 9]])softmax = nn.Softmax()
output_tensor = softmax(input_tensor)
# 关闭科学计数法
torch.set_printoptions(sci_mode=False)
print("输入张量:", input_tensor)
print("输出张量:", output_tensor)

函数选择:

隐藏层

  1. 优先选ReLU;

  2. 如果ReLU效果不咋地,那么尝试其他激活,如Leaky ReLU等;

  3. 使用ReLU时注意神经元死亡问题, 避免出现过多神经元死亡;

  4. 不使用sigmoid,尝试使用tanh;

输出层

  1. 二分类问题选择sigmoid激活函数;

  2. 多分类问题选择softmax激活函数;

  3. 回归问题选择identity激活函数;

​​​​​​​

更多激活函数可以查看官方文档:torch.nn — PyTorch 2.5 documentationicon-default.png?t=O83Ahttps://pytorch.org/docs/stable/nn.html#non-linear-activations-weighted-sum-nonlinearity

相关文章:

人工智能-深度学习-神经网络-激活函数

激活函数通过引入非线性来增强神经网络的表达能力,对于解决线性模型的局限性至关重要。由于反向传播算法(BP)用于更新网络参数,因此激活函数必须是可微的,也就是说能够求导的。 满足激活函数的条件 1.可微分,也就是可求导 激活函…...

vue3+ts+uniapp微信小程序顶部导航栏

这是colorui改的&#xff0c;不用就不用看啦 color-ui(https://docs.xzeu.com/#/) 新建component文件夹创建topNavigation.vue <template><view><view class"cu-custom" :style"height: CustomBar px"><view class"cu-bar…...

IAR中编译下载未下载问题

第一张图片是正常下载&#xff0c;第二张未正常下载。经过查看download选项发现 启用了 suppress download &#xff08;禁用下载)...

springboot(20)(删除文章分类。获取、更新、删除文章详细)(Validation分组校验)

目录 一、删除文章分类功能。 &#xff08;1&#xff09;接口文档。 1、请求路径、请求参数。 2、请求参数。 3、响应数据。 &#xff08;2&#xff09;实现思路与代码书写。 1、controller层。 2、service接口业务层。 3、serviceImpl实现类。 4、mapper层。 5、后端接口测试。…...

英语系统语法书面记载:高级语法 8 的状语从句

在英语高级语法中&#xff0c;状语从句是一种用来修饰动词、形容词、副词或整个句子的从句&#xff0c;它提供有关时间、地点、原因、条件、方式、让步等信息。状语从句通常由特定的连词引导。以下是常见的几种状语从句类型及其用法&#xff1a; 1. 时间状语从句 (Adverbial Cl…...

C语言:深入理解指针(1)

一.内存和地址 在讲内存和地址之前&#xff0c;我们想有个生活中的案例&#xff1a; 假设有一栋宿舍楼&#xff0c;把你放在楼里&#xff0c;楼上有100个房间&#xff0c;但是房间没有编号&#xff0c;你的一个朋友来找你玩&#xff0c;如果想找到你&#xff0c;就得挨个房子去…...

priority_queue--优先队列

一、认识优先队列 priority_queue&#xff08;优先队列&#xff09;是 C 标准模板库&#xff08;STL&#xff09;中的一个容器适配器。它的底层实现通常是用堆&#xff08;一般是二叉堆&#xff09;来实现的。优先队列中的元素按照一定的优先级顺序进行排列&#xff0c;在队首的…...

Paper -- 建筑物高度估计 -- 基于深度学习、图像处理和自动地理空间分析的街景图像建筑高度估算

论文题目: Building height estimation from street-view imagery using deep learning, image processing and automated geospatial analysis 中文题目: 基于深度学习、图像处理和自动地理空间分析的街景图像建筑高度估算 作者: Ala’a Al-Habashna, Ryan Murdoch 作者单位: …...

开发一套ERP 第八弹 RUst 插入数据

更全面的报错,方便检查错误在哪里,现代高级语言越来越智能 还是得看下原文档怎么操作的 src 目录为crate 的根目录 想在crate 中模块相互引入需要在 main 中声明,各个模块,然后才能在各个模块中相互引入和使用 原始工程引入,避免直接使用 lib.rs 回合cargo 中的一些 工程管理出…...

回退用 git revert 还是 git reset?

git revert 会生成一个新的 commit 来记录此次操作&#xff1b;git reset 是把 HEAD 指针向前挪动一次&#xff0c;会减少一个 commit。 回退用 git revert 回退还是用 git reset&#xff0c;核心就一点&#xff1a; 是否需要记录这次回退。 如果需要记录这次回退&#xff0c…...

【docker】多阶段构建与基础构建,及企业案例展示

基础构建与多阶段构建对比 基础构建&#xff08;单阶段构建&#xff09; 在基础构建中&#xff0c;所有构建过程和最终的应用程序都在同一个镜像中进行&#xff0c;构建工具和最终应用程序都会在最终镜像中。 这样构建镜像时会包含所有的构建工具和依赖&#xff0c;因此最终镜…...

基于链表的基础笔试/面试题

1. 反转链表 问题描述&#xff1a;反转一个单向链表。 示例&#xff1a; 输入&#xff1a;1 → 2 → 3 → 4 → 5 输出&#xff1a;5 → 4 → 3 → 2 → 1 class ListNode {int val;ListNode next;ListNode(int x) {val x;} }public class LinkedList {public ListNode …...

SARIMA 模型Matlab代码

% 导入数据 data readtable(data.xlsx); % 假设数据在第一列 y data{:, 1}; % 获取第一列数据% 划分训练集和测试集&#xff0c;80% 训练&#xff0c;20% 测试 trainSize floor(0.8 * length(y)); trainData y(1:trainSize); testData y(trainSize1:end);% 创建时间序列…...

第八课 Unity编辑器创建的资源优化_特效篇(Particle System)详解

无论是CPU还是GPU&#xff0c;粒子系统对其的影响面都是不容小觑的。随着项目的重度化和3A化&#xff0c;玩家的口味变挑剔了、游戏玩法复杂度变高了、画面的特效表现变复杂了......所以我们还是更加谨慎地对待粒子系统。 特效&#xff08;Particle System&#xff09; 游戏效…...

Oracle对比表与表之间的结构

自己首先想到的就是,navicat有提供结构同步 但是有些时候情况不一样,比如我遇到的是连接不同,而且是互相同步,以最多的列的那个表为样 没有说一个固定的源 那么还可以通过导出表结构去另一个库中执行看是否报错,以此来判断结构的不同 但是我感觉有点儿麻烦 最后想到通过sql语…...

基于JSP+MySQL的网上招聘系统的设计与实现

摘要 在这样一个经济飞速发展的时代&#xff0c;人们的生存与生活问题已成为当代社会需要关注的一个焦点。对于一个刚刚 踏入社会的年轻人来说&#xff0c;他对就业市场和形势了解的不够详细&#xff0c;同时对自己的职业规划也很模糊&#xff0c;这就导致大量的 时间被花费在…...

【Linux】进程地址空间(虚拟地址vs物理地址vs页表)

Linux 进程概念补充【Linux】 进程是什么&#xff08;不熟悉的兄弟可以看看&#xff09;。 1. C/C内存分布图 对于有c/c基础的同学相信对上面的图片并不陌生&#xff0c;实际上其描述的并不是正真的物理内存&#xff0c;而是虚拟内存&#xff0c;我们把它叫做进程地址空间 。 2…...

pytorch 融合 fuse 学习笔记

目录 fuse_lora 作用是什么 fuse_modules源码解读 fuse_lora 作用是什么 在深度学习模型微调场景下&#xff08;与 LoRA 相关&#xff09; 参数融合功能 在使用 LoRA&#xff08;Low - Rank Adaptation&#xff09;对预训练模型进行微调后&#xff0c;fuse_lora函数的主要作…...

在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程

在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程 在 Ubuntu 20.04 上使用 Lux 下载 Bilibili&#xff08;哔哩哔哩&#xff09;视频的完整和详细步骤如下&#xff0c;包括使用预编译二进制文件的安装方法&#xff1a; 1. 安装依赖 确保你的系统已安装 FFmpeg&…...

【eclipse】快捷键

【eclipse】快捷键 编辑导航重构调试复制其他快速生成 Eclipse 提供了丰富的快捷键来帮助开发者提高工作效率。 以下是一些常用的 Eclipse 快捷键&#xff0c;它们覆盖了编辑、导航、重构、调试等多个方面。 这些快捷键能够显著提升开发效率&#xff0c;尤其是在处理大型项目时…...

集成开发环境(IDE)的使用技巧插件配置

在开发过程中&#xff0c;集成开发环境&#xff08;IDE&#xff09;的使用技巧和插件配置对提高工作效率、优化代码质量和加速调试至关重要。 一、IDE使用技巧 1. 代码导航 跳转到定义&#xff08;Go to Definition&#xff09;&#xff1a;快速跳转到函数、类或变量的定义位…...

【如何提升代码工程质量】code review篇

应该对于基本上所有软件相关的公司来说&#xff0c;都有committer机制&#xff0c;即代码写好之后会提交合并请求&#xff0c;待相关人员code review通过后再进行合入&#xff0c;所以code review就是代码合入代码仓库的最后一道关卡&#xff0c;对于代码质量的影响也是不容忽视…...

Qt 面试题学习13_2024-12-1

Qt 面试题 1、 QString与基本数据类型如何转换?2、常用数据结构3、进程之间的道信方式有哪些? 1、 QString与基本数据类型如何转换? 1、将QString转换为基本数据类型通过QString的各种转换函数&#xff0c;可以将QString转换为int、float、double等基本数据类型。 QStri…...

Hive 安装与架构详解

Hive 安装&#xff08;基于 Ubuntu 系统&#xff09; 为了学习 Hive 的相关操作&#xff0c;我们需要先安装 Hive&#xff0c;以下是基于 Ubuntu 系统安装 Hive 的步骤&#xff1a; 下载 Hive 我们将使用 hive-0.13.1-cdh5.3.2 版本&#xff0c;当然你可以根据需要下载最新的…...

前端入门指南:模块打包器是什么?模块打包器的工作原理与实践

前言 在前端开发的生态系统中&#xff0c;随着项目复杂度和规模的不断提升&#xff0c;代码管理和优化变得至关重要。模块化开发作为一种有效的代码组织方式&#xff0c;极大地提升了代码的可维护性和复用性。 然而&#xff0c;面对大量的模块和复杂的依赖关系&#xff0c;如…...

初识ProtoBuf以及环境搭建(Win和Ubuntu)

初始ProtoBuf 序列化和反序列化的概念 序列化&#xff1a;把对象转换为字节序列的过程 称为对象的序列化。 反序列化&#xff1a;把字节序列恢复为对象的过程 称为对象的反序列化。 什么情况下需要序列化和反序列化&#xff1f; 存储数据&#xff1a;当你想把的内存中的对象状…...

springboot366高校物品捐赠管理系统(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 高校物品捐赠管理系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff…...

【Python网络爬虫笔记】5-(Request 带参数的get请求) 爬取豆瓣电影排行信息

目录 1.抓包工具查看网站信息2.代码实现3.运行结果 1.抓包工具查看网站信息 请求路径 url:https://movie.douban.com/typerank请求参数 页面往下拉&#xff0c;出现新的请求结果&#xff0c;参数start更新&#xff0c;每次刷新出20条新的电影数据 2.代码实现 # 使用网络爬…...

递归算法讲解(c基础)

递归的定义 递归是指在函数的定义中使用函数自身的方法。它是一种解决问题的策略&#xff0c;将一个大型复杂的问题逐步分解为规模更小的、与原问题相似的子问题来解决。当子问题的规模足够小&#xff0c;达到一个可以直接求解的基本情况&#xff08;也称为终止条件&#xff09…...

AJAX一、axios使用,url组成(协议,域名,资源路径)查询参数和化简,错误处理,请求/响应报文,状态码,接口文档,

一、AJAX是什么 概念 &#xff1a; AJAX是一种与服务器&#xff08;后端&#xff09;通信的技术 二、请求库axios的基本用法 1导包 2使用 // 1. 发请求 axios({ url: 请求地址 }).then(res > { // 2.接收并使用数据 }) <body><p class"province"…...

1号网站建设 高端网站建设/四川网站seo

题目链接&#xff1a;http://poj.org/problem?id2955 题意&#xff1a;求相互匹配的括号个数。 一道简单的区间dp&#xff0c;按常规的套路来写就可以了。 #include <iostream> #include <cstring> #include <string> using namespace std; int dp[110][110…...

网站建设 网页设计需要技能/南京百度seo排名

2019独角兽企业重金招聘Python工程师标准>>> 开启防火墙端口 firewall-cmd --zonepublic --add-port21/tcp --permanent firewall-cmd --zonepublic --add-port10060-10090/tcp --permanent 重启防火墙 systemctl restart firewalld.service 关闭selinux vi /etc/se…...

qq登陆wordpress/sem是指什么

2019独角兽企业重金招聘Python工程师标准>>> #Golang并发 Golang原生支持并发。并发的最小单位是goroutine&#xff0c;相互之间的通信采用channel. 这里不涉及锁等复杂的内容&#xff0c;先简单的弄个例子了解一下Golang并发实现的简洁。 #例子&#xff0c;实现sli…...

舟山网站制作公司/百度搜索一下

包括企业管理软件、协作与通讯以及企业门户 http://www.chinajava.net/learn/applications/tryanddownload.html http://www.chinajava.net/learn/applications/index.html...

盐城网站推广哪家好/免费seo工具汇总

认识主机板煮 鸡板....咳&#xff01;「主机板」&#xff08;Motherboard&#xff09;不算电脑里最先进的零组件&#xff0c;但绝对是塞最多东西的零组件。事实上&#xff0c;现在新的主机板简直像怪物&#xff0c;上面 可能有数十个长长短短、大大小小、圆的方的、各式各样的插…...

北京市海淀区网站建设/企业网络营销策略

小项目源码https://gitee.com/chen_yan_ting/web-socket_dou_di_zhu 实现原理: WebSocket的onClose 连接关闭回调方法webSocket.onclose() 重新新建WebSocket() 建立一个连接 但是连接参数一模一样和原来的一模一样 后端的OnOpen()方法创建新的session 找到客户端对应对象 把对…...