【机器学习笔记 Ⅱ】6 激活函数

激活函数是神经网络的核心组件,其作用远不止“引入非线性”。以下是系统化的解析:


1. 核心作用

(1) 引入非线性

  • 没有激活函数:多层神经网络等价于单层线性变换(矩阵连乘仍是线性)。

  • 加入激活函数:每层通过非线性函数(如ReLU)变换,使网络能拟合任意复杂函数(Universal Approximation Theorem)。

(2) 决定神经元激活状态

  • 激活函数输出值表示神经元的“激活程度”(如Sigmoid输出0~1的概率,ReLU输出是否激活)。

(3) 控制梯度流动

  • 良好的激活函数(如ReLU)可缓解梯度消失/爆炸问题,确保反向传播时梯度有效更新参数。

2. 没有激活函数会怎样?

  • 模型能力受限:只能解决线性问题(如线性回归),无法处理图像、语言等非线性数据。
  • 深度无效:无论多少层,等效于单层线性模型。

数学证明
假设网络有 ( L ) 层,每层权重为 ( \mathbf{W}_l ),无激活函数时:

最终仍为线性变换。


3. 激活函数的关键特性

特性作用示例函数
非线性使网络能拟合复杂模式。ReLU, Sigmoid, Tanh
可微分支持梯度下降优化。所有常用激活函数
单调性保证损失函数是凸的(利于优化)。ReLU, Leaky ReLU
输出范围控制避免数值爆炸(如Tanh输出[-1,1],Sigmoid输出[0,1])。Tanh, Sigmoid
稀疏激活部分神经元输出为零,提升计算效率。ReLU

4. 常用激活函数对比


5. 为什么ReLU最常用?

  • 计算高效:无需指数运算(比Sigmoid/Tanh快6倍)。
  • 缓解梯度消失:正区间梯度恒为1。
  • 稀疏性:负输入输出0,减少参数依赖。

问题:ReLU在 ( x<0 ) 时梯度为0,可能导致神经元死亡。
解决方案:使用Leaky ReLU或Parametric ReLU(PReLU)。


6. 激活函数选择指南

任务类型隐藏层推荐输出层推荐理由
二分类ReLUSigmoid输出概率
多分类ReLUSoftmax多类概率归一化
回归ReLU无(线性输出)直接预测数值
RNN/LSTMTanh按任务选择处理正负激活,避免梯度爆炸

7. 代码示例

(1) 自定义激活函数(Python)

import numpy as npdef relu(x):return np.maximum(0, x)def sigmoid(x):return 1 / (1 + np.exp(-x))# 前向传播示例
z = np.dot(X, W) + b  # 线性变换
a = relu(z)            # 激活函数

(2) 在PyTorch中使用激活函数

import torch.nn as nnmodel = nn.Sequential(nn.Linear(784, 128),nn.ReLU(),          # 隐藏层激活nn.Linear(128, 10),nn.Softmax(dim=1)   # 输出层激活
)

8. 高级话题

(1) 自适应激活函数

(2) 梯度消失问题的数学解释

链式法则中,若激活函数导数 ( \sigma’(z) ) 过小(如Sigmoid在两端导数≈0),多层连乘导致梯度指数级衰减。


9. 总结

  • 没有激活函数:神经网络退化为线性模型,无法解决现实中的非线性问题。
  • 核心价值
    1. 引入非线性,使网络成为“万能逼近器”。
    2. 控制神经元激活与梯度流动。
  • 实践建议
    • 隐藏层默认使用ReLU(注意初始化权重和学习率)。
    • 输出层根据任务选择(Sigmoid/Softmax/线性)。

激活函数是神经网络的“灵魂”,决定了模型能否学习复杂模式!

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

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

相关文章

AI无标记动捕如何结合VR大空间技术打造沉浸式游戏体验

随着数字科技的迅猛发展&#xff0c;VR大空间技术正逐步成为各行业探索沉浸式体验的重要方向。在VR游戏领域&#xff0c;市场对于高度沉浸式体验的需求日益增长&#xff0c;而传统VR游戏主要依赖手柄和基础体感进行交互&#xff0c;而在VR大空间中&#xff0c;用户可以通过全身…

Qt智能指针

在 Qt 框架中&#xff0c;智能指针用于自动管理对象的生命周期&#xff0c;防止内存泄漏。以下是 Qt 中主要的智能指针及其用法详解&#xff1a;1. QScopedPointer作用&#xff1a;独占所有权&#xff0c;超出作用域时自动释放对象&#xff08;类似 std::unique_ptr&#xff09…

408第三季part2 - 计算机网络 - 信道利用率

理解t1是发送帧的传输时间t2是确认帧的传输时间中间是传播过程这整个过程就是发送周期任何题目会有以下几种情况题目这里数据帧和确认帧长度是一样的t1 t2然后把t1的传输数据算出来然后传播是0.2sd停止等待 k1确认帧忽略t2 0t1算好后&#xff0c;求数据帧的长度下面是速率&…

Android framework 开发者模式下,如何修改动画过度模式

Android framework 开发者模式下&#xff0c; 如何修改动画过度模式 开发者模式下&#xff0c;动画过度 模式1.0→0.5&#xff0c;按如下方式修改。 开发云 - 一站式云服务平台 .../core/java/com/android/server/wm/WindowManagerService.java | 8 ---- 1 file changed, …

win11安装paddlelabel并创建目标检测项目

创建虚拟环境 conda create -n paddlelabel python3.11.11 conda activate paddlelabel通过以下命令安装 pip install --upgrade paddlelabel输入命令pdlabel运行paddlelabel&#xff0c;发现报错&#xff1a; ModuleNotFoundError: Please install connexion using the flask …

关于Novatek B/G-R/G白平衡色温坐标系再探究

目录 一、准备知识 二、色温坐标系的构建 三、Novatek白平衡色温坐标系的再探究 2.1 直线白点框 2.2双曲线白点框 四、仿真代码 之前写的一篇博文关于联咏(Novatek )白平衡色温坐标系探究-CSDN博客感觉逻辑上有些混乱,这个周末我又好好思考了下,以…

基于路径质量的AI负载均衡异常路径检测与恢复策略

AI流量往往具有突发性、大象流&#xff08;大规模数据流&#xff09;占比高的特点&#xff0c;极易造成网络拥塞热点。一条质量不佳&#xff08;如高延迟、高丢包、带宽受限&#xff09;的路径&#xff0c;不仅自身无法有效传输数据&#xff0c;如果ECMP继续向其分发流量&#…

ubuntu22.04 安装cuda cudnn

1.输入nvidia-smi查看可以支持安装的cuda最大版本 2.cuda与cudnn版本的选择 核心原则 向下兼容性&#xff1a;较新的 cuDNN 通常兼容旧版 CUDA&#xff0c;但反之不成立 框架依赖&#xff1a;优先考虑深度学习框架&#xff08;TensorFlow/PyTorch&#xff09;的版本要求 硬件…

5、Receiving Messages:Message Listener Containers

提供了两个MessageListenerContainer实现&#xff1a; KafkaMessageListenerContainer ConcurrentMessageListener容器 KafkaMessageListenerContainer在单个线程上接收来自所有主题或分区的所有消息。ConcurrentMessageListenerContainer委托给一个或多个KafkaMessageListe…

JDBC 注册驱动的常用方法详解

JDBC 注册驱动的常用方法详解 在 JDBC 中&#xff0c;注册驱动是建立数据库连接的第一步。以下是几种常用的驱动注册方式&#xff1a; 1. 显式类加载&#xff08;传统方式&#xff09; // 通过 Class.forName() 加载驱动类 Class.forName("com.mysql.cj.jdbc.Driver&qu…

插入数据优化

目录 一.插入数据优化 1.insert语句优化 ①批量插入 ②手动提交事务 ③主键顺序插入 2.大批量插入数据&#xff08;100万条&#xff09; 举例 第一步&#xff1a;连接数据库时&#xff0c;加上--local-infile属性 第二步&#xff1a;查看全局参数local_infile的值&…

区块链在域名系统安全中的应用进展综述

一、区块链与DNS结合的核心原理1.1 传统DNS的安全缺陷中心化架构&#xff1a;传统DNS依赖中心化服务器&#xff08;如ICANN管理的根服务器&#xff09;&#xff0c;存在单点故障风险&#xff0c;易受DDoS攻击或配置错误影响。协议脆弱性&#xff1a;DNS协议设计之初缺乏加密和认…

GO Web 框架 Gin 完全解析与实践

目录 1. 为什么选择 Gin?解锁 Go Web 开发的超能力 Gin 的核心优势 什么时候用 Gin? 第一个 Hello World 2. 路由的艺术:从简单 GET 到复杂匹配 基础路由 高级路由技巧 性能优化小贴士 3. 中间件的魔法:让请求处理更聪明 内置中间件 自定义中间件 中间件的最佳实…

RabbitMQ使用topic Exchange实现微服务分组订阅

案例场景&#xff1a;用户下单后需要多个微服务&#xff08;如营销、会员&#xff09;分别订阅并处理订单事件&#xff0c;且每个微服务可能有多个集群实例&#xff0c;需要保证同一个微服务的集群中&#xff0c;只有一个实例消费到消息。不同于Kafka和rocketMQ有分组消费的功能…

kotlin 通道trysend方法

trySend 方法是 Kotlin 协程中 Channel 类的一个重要功能。它用于向通道发送元素&#xff0c;但与 send 方法不同的是&#xff0c;trySend 是非阻塞的。这意味着它不会在通道满时挂起当前协程&#xff0c;而是会立即返回。 trySend 方法的效果 非阻塞行为&#xff1a; 当你调用…

winform CheckedListBox单击选中解决方案

在WinForms的CheckedListBox控件中&#xff0c;默认需要双击才能切换选中状态&#xff08;复选框勾选&#xff09;。要实现单击即选中&#xff0c;需要通过代码处理鼠标点击事件并手动切换选中状态。以下是实现步骤&#xff1a; 1.CheckOnClick属性置为true即可。 2.通过事件处…

Docker文件操作、数据卷、挂载

一&#xff1a;容器文件操作 在Docker环境中&#xff0c;管理容器内部的文件是一个常见的需求。 无论是为了配置应用、备份数据还是调试问题&#xff0c;了解如何高效地进行文件操作都是非常重要的。 docker cp命令提供了一种简单的方法来在宿主主机和容器之间复制文件或目录…

接口漏洞怎么抓?Fiddler 中文版 + Postman + Wireshark 实战指南

接口安全是现代应用开发中的高危环节&#xff1a;一旦API存在未授权访问、参数篡改、权限绕过等漏洞&#xff0c;可能直接导致用户信息泄露、资金损失甚至整个平台瘫痪。对于开发和安全人员来说&#xff0c;光依赖后端日志排查远远不够&#xff0c;需要对接口进行主动安全性验证…

iOS 出海 App 安全加固指南:无源码环境下的 IPA 加固与防破解方法

随着越来越多国内开发团队将iOS App推向海外市场&#xff0c;如何在交付和分发环节保护应用安全成为出海过程中的重要议题。尤其是App进入多个海外应用商店或通过第三方渠道发行时&#xff0c;容易被当地黑产或竞争对手进行逆向分析&#xff0c;从而暴露内部API、核心业务流程等…

React Hooks 内部实现原理与函数组件更新机制

React Hooks 内部实现原理与函数组件更新机制 Hooks 的内部实现原理 React Hooks 的实现依赖于以下几个关键机制&#xff1a; 1. 链表结构存储 Hook 状态 React 使用单向链表来管理 Hooks 的状态。每个 Hook 节点包含&#xff1a; type Hook {memoizedState: any, // 存储…