深度学习-激活函数

news2025/1/21 18:48:51

文章目录

  • 基础知识
  • Sigmoid函数 (Logistic函数)
  • 双曲正切函数(Tanh函数)
  • 线性整流函数(ReLU函数)
  • Leaky ReLU函数
  • Softmax函数


基础知识

激活函数是神经网络中的一种非线性函数,它作为神经元的输出函数,将输入信号进行转换并引入非线性特性。激活函数的引入能够给神经网络增加更强的表达能力和拟合复杂函数的能力。

  • 在神经网络中,每个神经元都有一个激活函数,它接受输入信号(来自前一层神经元或输入层)并计算输出。激活函数的作用是对输入信号进行非线性变换,从而为神经网络引入非线性能力,使其能够学习和表示更加复杂的数据模式和关系。
  • 类似于人类大脑中基于神经元的模型,激活函数最终决定了是否传递信号以及要发射给下一个神经元的内容。在人工神经网络中,一个节点的激活函数定义了该节点在给定的输入或输入集合下的输出。

Sigmoid函数 (Logistic函数)

Sigmoid函数,也称为Logistic函数,是一种常见的激活函数。它将输入的实数映射到一个范围在0到1之间的输出。常用于二分类问题或作为输出层的激活函数。

Sigmoid函数的数学表达式如下:

f ( x ) = 1 1 + e − x f(x) = \frac{1}{1 + e^{-x}} f(x)=1+ex1

其中,x表示输入值,e是自然对数的底。函数的输出f(x)位于0到1之间。

  • 当x趋近于正无穷大时,f(x)趋近于1;
  • 当x趋近于负无穷大时,f(x)趋近于0。

Sigmoid的函数图像:
在这里插入图片描述
Sigmoid函数的特点

  • 它的输出是连续、光滑的,并且具有可导性,这使得在反向传播算法中可以对其进行梯度计算。在神经网络中,Sigmoid函数通常用作二分类问题的输出层激活函数,也可以用作隐藏层的激活函数。
  • 然而,Sigmoid函数在输入值非常大或非常小的情况下,梯度接近于0,这可能导致梯度消失的问题。

Sigmoid函数的代码实现:

import numpy as np
import matplotlib.pyplot as plt

# 生成 x 值
x = np.linspace(-10, 10, 100)

# 计算 Sigmoid(x) 的值
sigmoid = 1 / (1 + np.exp(-x))

# 绘制曲线
plt.plot(x, sigmoid)
plt.title('Graph of Sigmoid Function')
plt.xlabel('x')
plt.ylabel('Sigmoid(x)')
plt.grid(True)
plt.show()

双曲正切函数(Tanh函数)

双曲正切函数是双曲函数的一种。双曲正切函数在数学语言上一般写作tanh ⁡。它将输入的实数映射到一个范围在 -1到1之间的输出,解决了Sigmoid函数的不以0为中心输出问题,然而,梯度消失的问题和幂运算的问题仍然存在。

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
其中,x表示输入值,e是自然对数的底。函数的输出f(x)位于-1到1之间。

  • 当x趋近于正无穷大时,f(x)趋近于1;
  • 当x趋近于负无穷大时,f(x)趋近于-1。

TanH的函数图像:
tanh函数图像
TanH函数的代码实现:

import numpy as np
import matplotlib.pyplot as plt

# 生成 x 值
x = np.linspace(-10, 10, 100)

# 计算 tanh(x) 的值
y = np.tanh(x)

# 绘制曲线
plt.plot(x, y)
plt.title('Graph of tanh Function')
plt.xlabel('x')
plt.ylabel('tanh(x)')
plt.grid(True)
plt.show()

Tanh函数与Sigmoid函数类似,但相对于Sigmoid函数而言,Tanh函数具有更好的对称性。它可以用作隐藏层的激活函数,能够处理正负值的输入,并保留输入的相对关系。

线性整流函数(ReLU函数)

线性整流函数,又称修正线性单元ReLU,是一种人工神经网络中常用的激活函数,通常指代以斜坡函数及其变种为代表的非线性函数。

ReLU函数的数学表达式如下:

f ( x ) = max ⁡ ( 0 , x ) f(x) = \max(0, x) f(x)=max(0,x)

其中,x表示输入值。

  • 如果输入值x大于0,则ReLU函数返回输入值x本身;
  • 如果输入值x小于或等于0,则ReLU函数返回0。

ReLU的函数图像:
在这里插入图片描述
ReLU函数的代码实现:

import numpy as np
import matplotlib.pyplot as plt

# 生成 x 值
x = np.linspace(-10, 10, 100)

# 计算 ReLU(x) 的值
relu = np.maximum(0, x)

# 绘制曲线
plt.plot(x, relu)
plt.title('Graph of ReLU Function')
plt.xlabel('x')
plt.ylabel('ReLU(x)')
plt.grid(True)
plt.show()

ReLU函数(线性整流函数)主要特点:

  • 非线性:ReLU函数是一个非线性函数,它在输入值大于0时返回输入值本身,而在输入值小于或等于0时返回0。这种非线性特性使得神经网络能够学习和表示更加复杂的函数关系。
  • 稀疏激活性:当输入值小于等于0时,ReLU函数的输出为0,这意味着对应的神经元将不会被激活。这种稀疏激活性可以使网络具有更高的稀疏性,从而减少参数的冗余性,提高计算效率。
  • 零梯度问题:ReLU函数在输入值大于0时具有常数梯度,这意味着在正区间内梯度保持为1。这样的特性可以加速梯度下降的收敛速度,并减轻梯度消失的问题。
  • 线性可分性:ReLU函数能够将输入值划分为两个线性可分的区域,即正区间和负区间。这种线性可分性使得ReLU函数在处理线性可分问题时表现良好。
  • 异常值不敏感:ReLU函数对于大于0的输入值不受异常值的影响。即使输入值非常大,ReLU函数的输出仍然是一个正数,从而减轻了异常值的影响。

Leaky ReLU函数

Leaky ReLU函数是对ReLU函数的一种改进,旨在解决ReLU函数中的神经元死亡问题(Dead ReLU)。

Leaky ReLU函数的数学表达式:

f ( x ) = { a x , if  x < 0 x , if  x ≥ 0 f(x) = \begin{cases} ax, & \text{if } x < 0 \\ x, & \text{if } x \geq 0 \end{cases} f(x)={ax,x,if x<0if x0

其中,x表示输入值,a是一个小于1的常数,通常取0.01。

  • 如果输入值x大于0,Leaky ReLU函数返回输入值x本身;
  • 如果输入值x小于等于0,Leaky ReLU函数返回输入值ax。

与ReLU函数不同的是,Leaky ReLU函数在负区间中引入了一个小的斜率,使得神经元在负区间也能具有非零的梯度。

Leaky ReLU的函数图像:

在这里插入图片描述
Leaky ReLU函数的代码实现:

import numpy as np
import matplotlib.pyplot as plt

# 定义Leaky ReLU函数
def leaky_relu(x, a):
    return np.maximum(a * x, x)

# 生成 x 值
x = np.linspace(-10, 10, 100)

# 定义斜率
a = 0.01

# 计算 Leaky ReLU(x) 的值
leaky_relu_vals = leaky_relu(x, a)

# 绘制曲线
plt.plot(x, leaky_relu_vals)
plt.title('Graph of Leaky ReLU Function')
plt.xlabel('x')
plt.ylabel('Leaky ReLU(x)')
plt.grid(True)
plt.show()

Leaky ReLU函数(带泄露的线性整流函数)主要特点:

  • 非线性:Leaky ReLU函数是一个非线性函数,可以处理非线性的函数关系。

  • 解决神经元死亡问题:Leaky ReLU函数引入了一个小的斜率(通常取较小的正数,如0.01),使得神经元在负区间也能具有非零的激活。这有助于避免神经元完全不激活的问题,称为神经元死亡。

  • 具有稀疏激活性:当输入值小于0时,Leaky ReLU函数的输出为一个小的斜率乘以输入值,这意味着对应的神经元在负区间仍然得到一定程度的激活。这种稀疏激活性可以使网络具有更高的稀疏性,减少参数的冗余性。

  • 缓解梯度消失问题:Leaky ReLU函数在负区间具有非零的梯度,这有助于减轻梯度消失问题。相比于ReLU函数的常数梯度,Leaky ReLU函数的斜率可调,可以在一定程度上保持梯度的传播,提高网络的学习能力。

  • 异常值不敏感:与ReLU函数类似,Leaky ReLU函数对于大于0的输入值不受异常值的影响。即使输入值非常大,Leaky ReLU函数的输出仍然是一个正数。

Softmax函数

Softmax函数是一种常用的激活函数,通常用于多分类问题中。它将一组实数转化为表示概率分布的向量。

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

Softmax函数图像:
在这里插入图片描述

Softmax函数的代码实现:

import numpy as np
import matplotlib.pyplot as plt

def softmax(x):
    e_x = np.exp(x)
    return e_x / np.sum(e_x)

# 定义输入向量
x = np.linspace(-5, 5, 100)

# 计算Softmax函数的输出
y = softmax(x)

# 绘制Softmax函数图像
plt.plot(x, y)
plt.xlabel('Input')
plt.ylabel('Softmax Output')
plt.title('Softmax Function')
plt.grid(True)
plt.show()

Softmax函数的主要特点如下:

  • 概率分布:Softmax函数将输入向量转化为表示概率分布的向量,每个元素表示对应类别的概率。
  • 归一化性质:Softmax函数确保输出向量的元素之和为1,因此可以看作是对输入向量进行归一化操作。
  • 多分类问题:Softmax函数常用于多分类问题中,可以将模型输出的原始分数转化为概率分布,便于进行类别的预测和分类。
  • 平移不变性:Softmax函数对输入向量的每个元素进行指数运算,因此对于整个向量的平移(加上或减去一个常数)是不敏感的,不会改变概率分布。

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

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

相关文章

Linux 安装Harbor镜像仓库私服

参考链接 Docker 的基础知识、安装、使用Harbor镜像仓库私服搭建 Harbor是什么&#xff1f; Harbor是由VMware公司开源的企业级的Docker Registry管理项目&#xff0c;它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。 Harbor 的所有组…

WebGL正射投影

目录 可视范围&#xff08;正射类型&#xff09; 可视空间 正射投影的盒状可视空间的工作原理 盒状可视空间 定义盒状可视空间 Matrix4.setOrtho&#xff08;&#xff09; 按键控制near、far ​编辑 示例效果 示例代码 代码详解 修改near和far值 通过右方向键增大n…

从物理叠加到化学反应,看方太如何把洗碗机玩出「新价值」

文 | 智能相对论 作者 | 佘凯文 随着酷暑烈日的逐渐远去&#xff0c;秋意也开始浓厚了起来。所谓“秋风起&#xff0c;秋膘贴”&#xff0c;在“金九银十”的当下&#xff0c;美食自是不可辜负的恩赐。肥美多膏的大闸蟹、软糯香甜的南瓜羹、爽脆可口的莲藕汤..... 秋季的美食…

idea中启动maven项目报错-java: 程序包lombok.extern.slf4j不存在问题如何解决

1、 现象&#xff1a; 在springboot的maven项目启动时&#xff0c;报错&#xff1a; Error:(3, 27) java: 程序包lombok.extern.slf4j不存在 编译不报错&#xff0c;maven依赖也合适&#xff0c;项目就是无法启动 原因&#xff1a; 其实不是项目本身或者maven本身的问题&am…

Java垃圾收集机制

目录 前言 判断对象是否存活 引用计数算法 可达性分析算法 GC Root的产生 Java中的四种引用类型 1.强引用 强引用弱化方式 方式1&#xff1a;使对象指向null 方式2&#xff1a;使对象超出作用域范围 2.软引用 3.弱引用 4.虚引用 垃圾收集算法 分代收集理论 垃圾…

Linux内核及可加载内核模块编程

图1 Linux系统整体结构 图2 Linux的源代码结构 下面显示一段内核模块代码案例&#xff1a; #include <linux/moduLe.h> #include <linux/kernel.h #include <linux/intt.h> /*模块的初始化函数lkp_ init()_init是用于初始化的修饰符 */ static int __init lk…

第十五届全国大学生数学竞赛报名快要截止了,你报上名了吗?

关于组织参加 第十五届全国大学生数学竞赛的通知 01 为了培养人才、服务教学、提高大学生学习数学的兴趣&#xff0c;培养学生分析问题、解决问题的能力&#xff0c;发现和选拔数学创新人才&#xff0c;为学生提供一个展示基础知识和思维能力的舞台&#xff0c;我校决定组织参…

SSM整合demo及个人思考

SSM整合 项目整体架构说明1. 创建Maven项目2. 配置web.xml4. 配置springmvc.xml5. 配置spring.xml6. 配置mybatis-config.xml以及创建mapper接口和mapper配置文件7. 配置log4j.xml8. 后端CURD测试8.1 在数据库中插入数据8.2 pojo中的实体类Employee8.3 mapper层的EmployMapper接…

oppo手机便签隐藏了一条怎样打开?手机如何找到隐藏便签?

有不少用户在使用OPPO手机的过程中&#xff0c;遇到了一些问题&#xff0c;例如自己在使用手机系统便签应用时&#xff0c;把一条重要的便签设置了隐藏&#xff0c;但是现在找不到隐藏的便签了。 那么oppo手机便签隐藏了一条怎样打开&#xff1f;OPPO手机如何找到隐藏便签&…

【C++】基础知识点回顾 上:命名空间与输入输出

前言 学习C一段时间后&#xff0c;再回过头来看这些C的基础知识&#xff0c;感觉有很多细节是自己当时没有注意的&#xff0c;所以写一篇文章来回顾复习一下C的基础知识。 命名空间的使用 相信很多朋友在学习C的第一个代码的时候&#xff0c;在写上头文件之后&#xff0c;紧…

运营商大数据实时获取精准数据

随着大数据技术的快速发展和完善&#xff0c;出现了一种新的扩张方式——互联网大数据的精准扩张。如果没有一个好的渠道来获得顾客&#xff0c;这就像准备热情地做饭&#xff0c;但当饭吃完后&#xff0c;人们只能饿了。 今天的消费者已经从最早的线下消费逐渐过渡到互联网消…

浅谈6种API架构模式

在摸鱼刷X时&#xff0c;看到一张非常棒的图&#xff0c;是关于不同API架构的&#xff0c;下面学习记录一下。 &#xff08;摘自网络&#xff09; 1、gRPC gRPC是一种高性能、跨语言、易扩展的远程过程调用(RPC)框架&#xff0c;可用于分布式系统之间的通信。gRPC被广泛地应用…

金融贷款行业实时高精准获客 ——三网运营商大数据

都说生产是第一因素&#xff0c;但对于任何企业来说&#xff0c;客户来源才是第一因素。 在大多数行业&#xff0c;获得客户的困难已经成为行业的挑战。如今&#xff0c;许多行业和企业获得客户的主要来源是在线促销和客户获取。现在几乎每个人都有一部手机。运营商可以根据移…

每日一练 | 网络工程师软考真题Day33

阅读以下说明&#xff0c;答复以下【问题1】和【问题2】 【说明】 某单位内部网络拓扑结构如图5-1所示&#xff0c;在该网络中采用RIP路由协议。 【问题1】 1&#xff0e;路由器第一次设置时&#xff0c;必须通过Console口连接运行终端仿真软件的微机进行配置&#xff0c;此时…

ByteV联合“智农”打造--数字孪生大棚可视化

ByteV联合“智农”打造的数字孪生大棚可视化&#xff0c;不仅要让粮食稳产、增产&#xff0c;更要对土壤肥力进行改良和提升。不仅能够实现科技引领农业发展&#xff0c;更在智慧农业的基础上实现一站式托管&#xff0c;真正做到技术提升、5G引领、建后管护的闭环管理。让高标准…

预测多基因扰动的转录结果

了解细胞对基因扰动的反应是许多生物医学应用的核心&#xff0c;从识别癌症中涉及的基因相互作用到开发再生医学方法。然而&#xff0c;可能的多基因扰动数量的组合爆炸严重限制了实验验证。在这里&#xff0c;作者提出了图增强的基因激活和抑制模拟器&#xff08;GEARS&#x…

Linux内核4.14版本——drm框架分析(13)——DRM_IOCTL_MODE_SETPLANE(drm_mode_setplane)

目录 1. drm_mode_setplane 1.1 根据应用的plane_req->plane_id找到plane 1.2 根据应用的plane_req->fb_id找到struct drm_framebuffer 1.3 调用setplane_internal 2. setplane_internal->__setplane_internal 2.1 struct drm_framebuffer是否为空 2.2 判断此p…

Cesium对WMS地图服务进行查询并弹框展示信息

一、简介 Cesium加载WMS地图服务&#xff0c;然后调用接口GetFeatureInfo对要素信息进行查询 二、测试接口 {type: "Point | MultiPoint | LineString | MultiLineString | Polygon | MultiPolygon",coordinates: 数组 } 查询点 http://123.56.67.147:8080/geoserve…

智慧公厕构建城市公共厕所中枢网络,民生服务更高效,城市管理更精准

随着城市化进程的加快&#xff0c;城市人口的不断增长&#xff0c;城市公共厕所问题愈发凸显。大量的人口涌入&#xff0c;公厕资源的不足、管理的不到位&#xff0c;已经成为困扰城市发展的一大难题。然而&#xff0c;智慧公厕的出现&#xff0c;为解决这一问题提供了新的思路…

2023-09-12 LeetCode每日一题(课程表 IV)

2023-03-29每日一题 一、题目编号 1462. 课程表 IV二、题目链接 点击跳转到题目位置 三、题目描述 你总共需要上 numCourses 门课&#xff0c;课程编号依次为 0 到 numCourses-1 。你会得到一个数组 prerequisite &#xff0c;其中 prerequisites[i] [ai, bi] 表示如果你…