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

激活函数篇 01 —— 激活函数在神经网络的作用

欢迎来到我的主页:【Echo-Nie】

本篇文章收录于专栏【机器学习】


以下是激活函数系列的相关的所有内容:

激活函数篇 01 —— 一文搞懂激活函数在神经网络中的作用

逻辑回归:Sigmoid函数在分类问题中的应用


1 激活函数的作用

1.1 引入非线性

激活函数为神经元引入了非线性,使得神经网络能够学习和模拟复杂的非线性关系。如果没有激活函数,神经网络将只能学习线性关系,其表达能力将大大受限。例如,一个没有激活函数的神经网络本质上是一个线性变换,无法解决像 XOR 这样的非线性问题。

数学上,如果没有激活函数,神经网络的输出可以表示为:
y = W 2 ​ ( W 1 ​ x + b 1 ​ ) + b 2 ​ y=W_2​(W_1​x+b1​)+b2​ y=W2(W1x+b1​)+b2​

这仍然是一个线性变换。而引入激活函数后,输出变为:
y = W 2 ​ σ ( W 1 ​ x + b 1 ​ ) + b 2 ​ y=W_2​σ(W_1​x+b1​)+b2 ​ y=W2σ(W1x+b1​)+b2​
其中 σ σ σ 是激活函数,使得模型能够学习非线性关系。

1.2 控制输出范围

激活函数可以控制神经元的输出范围,防止输出值过大或过小,从而避免梯度消失或梯度爆炸问题。例如,Sigmoid 函数将输出值限制在 (0,1) 之间,Tanh 函数将输出值限制在 (−1,1) 之间。
这种控制有助于保持梯度的稳定,使得模型在训练过程中能够更好地收敛。

1.3 引入稀疏性

一些激活函数(如 ReLU)可以引入稀疏性,即输出值中有许多零值。这有助于减少模型的复杂度,提高计算效率,并防止过拟合。

例如,ReLU 函数的输出在输入小于零时为零,这使得网络中的许多神经元在某些输入下不激活,从而引入稀疏性。

1.4 提供可导性

激活函数需要是可导的,以便在训练过程中进行反向传播。通过计算激活函数的导数,可以更新网络权重,从而优化模型性能。
例如,Sigmoid 函数的导数为:
σ ′ ( x ) = σ ( x ) ⋅ ( 1 − σ ( x ) ) σ′(x)=σ(x)⋅(1−σ(x)) σ(x)=σ(x)(1σ(x))
这使得在反向传播过程中可以计算梯度并更新权重。


2 为什么需要激活函数

线性模型的局限性

线性模型在数学上可以简单地表示为 y = W x + b y=Wx+b y=Wx+b,其中 W W W 是权重矩阵, x x x 是输入向量, b b b 是偏置项。这种形式的模型只能捕捉输入与输出之间的线性关系,无法处理复杂的非线性问题。例如,XOR问题是典型的非线性问题,不能通过任何线性模型解决。这是因为线性变换(如上述公式)只能将数据映射到一个线性空间中,而无法捕捉到更复杂的数据结构。

如果我们考虑一个多层感知机(MLP),没有激活函数的情况下,即使增加层数,整个网络仍然只能执行一系列线性变换,最终等价于单层的线性变换。这意味着无论网络有多深,它都无法学习和表达复杂的非线性模式。

非线性问题的普遍性

现实世界中的大多数问题都是非线性的,比如图像识别、语音识别和自然语言处理等领域。以图像识别为例,图像中的边缘、纹理和其他特征通常是通过非线性方式组合在一起的。因此,为了使神经网络能够有效地学习这些特征,必须引入非线性组件——即激活函数。

激活函数使得每一层神经元的输出不再是简单的线性组合,而是经过了一个非线性转换。这允许网络学习到输入数据之间更加复杂的依赖关系,并提高其泛化能力。例如,在卷积神经网络(CNNs)中,使用ReLU激活函数可以帮助模型有效地捕捉图像中的局部特征。

梯度消失和梯度爆炸

在深层神经网络中,反向传播算法用于更新网络中的权重。这个过程涉及到计算损失函数相对于每个权重的梯度,并使用这些梯度来调整权重。然而,某些激活函数可能会导致梯度消失或梯度爆炸的问题,特别是在使用Sigmoid或Tanh这样的激活函数时。

  • 梯度消失:当使用Sigmoid作为激活函数时,如果输入值较大或较小,该函数的导数接近于0。这意味着在网络的较深层中,梯度信息会变得非常小,几乎无法对权重进行有效更新,从而减慢了训练速度甚至导致训练停滞。

  • 梯度爆炸:相反的情况是梯度爆炸,当梯度过大时会导致权重更新过大,从而使训练过程不稳定。

ReLU激活函数在这方面表现出色,因为它在 x > 0 x>0 x>0时保持导数为1,避免了梯度消失的问题。然而,ReLU也有自己的局限性,比如可能导致某些神经元永远不被激活(称为“死神经元”)。为此,发展出了Leaky ReLU、ELU等变体来克服这些问题。


3 激活函数的用途

1. 隐藏层:
在神经网络的隐藏层中,激活函数用于引入非线性,使网络能够学习复杂的特征表示。常用的激活函数包括 ReLU、Tanh 和 Sigmoid。

例如,ReLU 函数在隐藏层中广泛使用,因为它计算简单,不易出现梯度消失问题。

2. 输出层:
在神经网络的输出层中,激活函数用于将网络的输出值映射到特定的范围内。
二分类问题:使用 Sigmoid 函数,将输出值映射到 ( 0 , 1 ) (0,1) (0,1) 之间,表示概率。
多分类问题:使用 Softmax 函数,将输出值映射到概率分布。
回归问题:通常不使用激活函数,或者使用线性激活函数。

3. 特定任务
一些特定任务可能需要特定的激活函数。例如:
图像生成:使用 GELU 或 Swish 函数,这些函数在生成任务中表现较好。
自然语言处理:使用 ReLU 或 GELU 函数,这些函数在处理序列数据时表现较好。


4 常见激活函数及其特点

  1. Sigmoid 函数:
    σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+ex1
    输出范围在 ( 0 , 1 ) (0, 1) (0,1) 之间,常用于二分类问题。但容易出现梯度消失问题。

  1. Tanh 函数:
    tanh ⁡ ( x ) = e x − e − x e x + e − x \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} tanh(x)=ex+exexex
    输出范围在 ( − 1 , 1 ) (-1, 1) (1,1) 之间,常用于隐藏层。但同样容易出现梯度消失问题。

  2. ReLU 函数:
    ReLU ( x ) = max ⁡ ( 0 , x ) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x)
    输出范围在 [ 0 , ∞ ) [0, \infty) [0,) 之间,计算简单,不易出现梯度消失问题。但可能导致神经元死亡(即输出恒为零)。

  3. Leaky ReLU 函数:
    Leaky ReLU ( x ) = { x if  x > 0 α x if  x ≤ 0 \text{Leaky ReLU}(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha x & \text{if } x \leq 0 \end{cases} Leaky ReLU(x)={xαxif x>0if x0
    解决了 ReLU 的神经元死亡问题,输出范围在 ( − ∞ , ∞ ) (-\infty, \infty) (,) 之间。但参数 α \alpha α 需要调优。

  4. ELU 函数:
    ELU ( x ) = { x if  x > 0 α ( exp ⁡ ( x ) − 1 ) if  x ≤ 0 \text{ELU}(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha (\exp(x) - 1) & \text{if } x \leq 0 \end{cases} ELU(x)={xα(exp(x)1)if x>0if x0
    x ≤ 0 x \leq 0 x0 时有平滑的指数衰减,解决了 ReLU 的神经元死亡问题,输出范围在 ( − ∞ , ∞ ) (-\infty, \infty) (,) 之间。

  5. Softmax 函数:
    Softmax ( x i ) = e x i ∑ j = 1 n e x j \text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{j=1}^n e^{x_j}} Softmax(xi)=j=1nexjexi
    将输出值映射到概率分布,常用于多分类问题。

  6. Swish 函数:
    Swish ( x ) = x ⋅ σ ( x ) \text{Swish}(x) = x \cdot \sigma(x) Swish(x)=xσ(x)
    自门控激活函数,性能优于 ReLU,计算复杂度稍高。

  7. GELU 函数:
    GELU ( x ) = x ⋅ Φ ( x ) \text{GELU}(x) = x \cdot \Phi(x) GELU(x)=xΦ(x)
    高斯误差线性单元,性能优于 ReLU,常用于 Transformer 模型。

5 关于XOR问题

XOR(Exclusive OR,异或)问题是逻辑运算中的一个经典问题,它展示了为什么简单的线性模型不足以解决某些类型的分类问题。XOR操作符是一个二进制运算符,其结果为真仅当两个输入的值不相等时。具体来说,对于两个二进制输入A和B,XOR的结果如下:

输入A输入B输出
000
011
101
110

XOR问题是非线性可分的。这意味着不能通过一条直线(在二维空间中)或超平面(在多维空间中)将两类数据点完全分开。如果我们将XOR问题的数据点画在一个二维平面上,你会发现无法找到一条直线将输出为1的点与输出为0的点区分开来。

例如,在上述表格中,(0,0) 和 (1,1) 的输出是0,而 (0,1) 和 (1,0) 的输出是1。如果我们尝试用一条直线划分这些点,我们会发现这是不可能的,因为这两类点交错在一起。

XOR问题常用来说明为什么需要使用具有激活函数的多层感知机(MLP),而不是单层感知机。单层感知机只能处理线性可分的问题,即可以通过一条直线或超平面将不同类别的数据点分开的问题。然而,如上所述,XOR问题是线性不可分的。

引入非线性激活函数并增加至少一层隐藏层的神经网络能够解决这个问题。隐藏层中的非线性变换允许网络学习到更复杂的特征表示,从而有效地解决像XOR这样的非线性问题。实际上,一个多层感知机(MLP)通过结合多个线性变换和非线性激活函数,能够逼近任何连续函数,包括解决XOR问题。

相关文章:

激活函数篇 01 —— 激活函数在神经网络的作用

欢迎来到我的主页:【Echo-Nie】 本篇文章收录于专栏【机器学习】 以下是激活函数系列的相关的所有内容: 激活函数篇 01 —— 一文搞懂激活函数在神经网络中的作用 逻辑回归:Sigmoid函数在分类问题中的应用 1 激活函数的作用 1.1 引入非线性 激活函数…...

22.2、Apache安全分析与增强

目录 Apache Web安全分析与增强 - Apache Web概述Apache Web安全分析与增强 - Apache Web安全威胁Apache Web安全机制Apache Web安全增强 Apache Web安全分析与增强 - Apache Web概述 阿帕奇是一个用于搭建WEB服务器的应用程序,它是开源的,它的配置文件…...

Day.23

leetcode 413.等差数列划分 问题:如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。给你一个整数数组 nums ,返回数组 nums 中所有为等差数组的 子数组 个数。 子数组 是数组中的一个连续序列…...

CentOS虚机在线扩容系统盘数据盘

最近在制作Openstack下的镜像,用户需要CentOS6以及CentOS7的虚机镜像,遇到了些关于系统盘以及数据盘在线扩容的问题,故此整理一下。 ​ 传统我们想对磁盘在线热扩容,必然会想到LVM逻辑卷。如果没有LVM逻辑卷的情况下,…...

动手写ORM框架 - GeeORM第一天 database/sql 基础

文章目录 1 初识 SQLite2 database/sql 标准库3 实现一个简单的 log 库4 核心结构 Session本文是7天用Go从零实现ORM框架GeeORM的第一篇。介绍了 SQLite 的基础操作(连接数据库,创建表、增删记录等)。使用 Go 语言标准库 database/sql 连接并操作 SQLite 数据库,并简单封装…...

绘制中国平安股价的交互式 K 线图

在本文中,探索如何使用 Python 的强大库进行股市数据分析与可视化。我们将以中国平安(股票代码:sh601318)为例,展示如何获取其股票数据,并绘制一张交互式 K 线图。 K 线图是股市分析中不可或缺的工具,它能够直观地显示股票的波动情况,包括开盘价、收盘价、最高价和最低…...

[渗透测试]热门搜索引擎推荐— — shodan篇

[渗透测试]热门搜索引擎推荐— — shodan篇 免责声明:本文仅用于分享渗透测试工具,大家使用时,一定需要遵守相关法律法规。 除了shodan,还有很多其他热门的,比如:fofa、奇安信的鹰图、钟馗之眼等&#xff0…...

JavaScript 在 VSCode 中的优势与应用

JavaScript 在 VSCode 中的优势与应用 引言 随着前端技术的发展,JavaScript 已经成为了网页开发中最流行的编程语言之一。Visual Studio Code(简称 VSCode)作为一款轻量级、可扩展的代码编辑器,因其强大的功能和良好的用户体验,深受广大开发者的喜爱。本文将探讨 JavaSc…...

深度学习之StyleGAN算法解析

StyleGAN 算法解析及详细介绍 1. StyleGAN 算法由来 StyleGAN(Style-Based Generative Adversarial Network)是 NVIDIA 于 2018 年 提出的 高质量图像生成算法,由 Tero Karras 等人在论文 《A Style-Based Generator Architecture for Generative Adversarial Networks》 …...

数据结构之排序

排序 参考链接: https://zq99299.github.io/dsalg-tutorial/dsalg-java-hsp/07/09.html#%E7%AE%80%E5%8D%95%E4%BB%8B%E7%BB%8D 基数排序 计数排序 https://www.hello-algo.com/chapter_sorting/counting_sort/...

Vue.js 与第三方插件的集成

Vue.js 与第三方插件的集成 今天我们来聊聊如何在 Vue 项目中集成第三方插件。随着项目功能不断增多,我们常常需要引入各种第三方库和插件,比如国际化、图表、日期处理等,来提升开发效率和用户体验。下面就跟大家分享一下集成第三方插件的常…...

基于Docker搭建ES集群,并设置冷热数据节点

1.背景 存在三台服务器分别是 192.168.2.91(master节点、data-content节点、data-hot节点)、192.168.2.92(data-cold节点、ingest节点)、192.168.2.93(master节点、data-content节点、data-hot节点) 冷热数据分离搭建教程 2.搭建91节点 热数据节点 (1&#xff0…...

MyBatis常见知识点

#{} 和 ${} 的区别是什么? 答: ${}是 Properties 文件中的变量占位符,它可以用于标签属性值和 sql 内部,属于原样文本替换,可以替换任意内容,比如${driver}会被原样替换为com.mysql.jdbc. Driver。 一个…...

Redis --- 使用GEO实现经纬度距离计算

什么是GEO&#xff1f; Spring Boot 项目中可以通过 Spring Data Redis 来使用 Redis GEO 功能&#xff0c;主要通过 RedisTemplate 和 GeoOperations 接口来操作地理位置数据。 Service public class GeoService {Autowiredprivate RedisTemplate<String, Object> red…...

【0403】Postgres内核 检查(procArray )给定 db 是否有其他 backend process 正在运行

文章目录 1. 给定 db 是否有其他 backend 正在运行1.1 获取 allPgXact[] 索引1.1.1 MyProc 中 databaseId 初始化实现1.2 allProcs[] 中各 databaseId 判断1. 给定 db 是否有其他 backend 正在运行 CREATE DATABASE 语句创建用户指定 数据库名(database-name)时候, 会通过 …...

[数据结构] Set的使用与注意事项

目录 Set的说明 常见方法说明 注意事项 TreeSet使用案例 Set的说明 Set与Map主要的不同有两点: Set是继承自Collection的接口类,Set中只存储了Key. 常见方法说明 方法解释boolean add(E e)添加元素,但重复元素不会被添加成功void clear()清空集合boolean contains(Object…...

amis组件crud使用踩坑

crud注意 过滤条件参数同步地址栏 默认 CRUD 会将过滤条件参数同步至浏览器地址栏中&#xff0c;比如搜索条件、当前页数&#xff0c;这也做的目的是刷新页面的时候还能进入之前的分页。 但也会导致地址栏中的参数数据合并到顶层的数据链中&#xff0c;例如&#xff1a;自动…...

离线统信系统的python第三方库批量安装流程

一、关于UOS本机 操作系统&#xff1a;UOS&#xff08;基于Debian的Linux发行版&#xff09; CPU&#xff1a;海光x86 二、具体步骤 1、在联网的电脑上用控制台的pip命令批量下载指定版本的第三方库 方法A cd <目标位置的绝对路径> pip download -d . --platform many…...

韶音科技:消费电子行业售后服务实现数字化转型,重塑客户服务体系

韶音科技&#xff1a;消费电子行业售后服务实现数字化转型&#xff0c;重塑客户服务体系 在当今这个科技日新月异的时代&#xff0c;企业之间的竞争早已超越了单纯的产品质量比拼&#xff0c;**售后服务成为了衡量消费电子行业各品牌实力与客户满意度的关键一环。**深圳市韶音…...

神经网络|(九)概率论基础知识-泊松分布及python仿真

【1】引言 在前序学习进程中&#xff0c;我们已经知晓二项分布是多重伯努利分布&#xff0c;二伯努利分布对应的是可以无限重复、结果只有两种可能的随机试验。 相关文章链接为&#xff1a; 神经网络|(八)概率论基础知识-二项分布及python仿真-CSDN博客 上述文章还调用nump…...

114,【6】攻防世界 web wzsc_文件上传

进入靶场 传个桌面有的 直接空白了 我们 访问一下上传的东西 /index 没显示用于解析的.htaccess和.user.ini 文件&#xff0c;还两个都不显示 .htaccess 和 .user.ini 文件分别用于 Apache 服务器和 PHP-FPM 环境的目录级配置 但上传的时候bp查看状态码是200&#xff0c;…...

【Kubernetes的SpringCloud最佳实践】有Service是否还需要Eureka?

在 Kubernetes 中部署 Spring Cloud 微服务时&#xff0c;是否还需要 Eureka 取决于具体场景和架构设计。以下是详细的实践建议和结论&#xff1a; 1. Kubernetes 原生服务发现 vs Eureka Kubernetes 自身提供了完善的服务发现机制&#xff08;通过 Service 资源&#xff09;&…...

SQL最佳实践(笔记)

写在前面&#xff1a; 之前baeldung的Java Weekly &#xfeff;Reviews里面推荐了一篇关于SQL优化的文章&#xff0c;正好最近在学习数据库相关知识&#xff0c;记一些学习笔记 原文地址&#xff1a;SQL Best Practices Every Java Engineer Must Know 1. 使用索引 使用索引…...

vue3学习四

七 标签ref属性 设置标签ref属性&#xff0c;类似于设置标签id。 普通标签 <template name"test4"> <p ref"title" id"title" click"showinfo">VIEW4</p> <View3/><script lang"ts" setup>…...

C# LiteDB 使用教程

一、引言 在软件开发中&#xff0c;数据存储和管理是至关重要的一环。对于小型项目或者对性能和便捷性有较高要求的场景&#xff0c;传统的大型数据库可能显得过于笨重。而 LiteDB 作为一款轻量级的嵌入式 NoSQL 数据库&#xff0c;为开发者提供了一个简洁、高效的解决方案。它…...

Python Pandas(3):DataFrame

1 介绍 DataFrame 是 Pandas 中的另一个核心数据结构&#xff0c;类似于一个二维的表格或数据库中的数据表。它含有一组有序的列&#xff0c;每列可以是不同的值类型&#xff08;数值、字符串、布尔型值&#xff09;。DataFrame 既有行索引也有列索引&#xff0c;它可以被看做由…...

使用通义灵码 ai编程 来提高开发效率

1、我们先新建一个Hello&#xff0c;world的vue3项目&#xff08;快速上手 | Vue.js&#xff09; 创建好以后&#xff0c;运行以下界面&#xff1a; about界面如下&#xff0c;现在我们让灵码给我们修改一下这个字体的颜色及加点其它的样式&#xff1a; 2、先选中样式&#xf…...

【OpenCV】入门教学

&#x1f3e0;大家好&#xff0c;我是Yui_&#x1f4ac; &#x1f351;如果文章知识点有错误的地方&#xff0c;请指正&#xff01;和大家一起学习&#xff0c;一起进步&#x1f440; &#x1f680;如有不懂&#xff0c;可以随时向我提问&#xff0c;我会全力讲解~ &#x1f52…...

大数据项目4:基于spark的智慧交通项目设计与实现

项目概述 项目直达 www.baiyuntu.com 随着交通数据的快速增长&#xff0c;传统的交通管理方式已无法满足现代城市的需求。交通大数据分析系统通过整合各类交通数据&#xff0c;利用大数据技术解决交通瓶颈问题&#xff0c;提升交通管理效率。本项目旨在通过大数据技术&#…...

netcore openTelemetry+prometheus+grafana

一、netcore项目 二、openTelemetry 三、prometheus 四、grafana添加Dashborad aspire/src/Grafana/dashboards at main dotnet/aspire GitHub 导入&#xff1a;aspnetcore.json和aspnetcore-endpoint.json 效果&#xff1a;...