机器学习-激活函数的直观理解
机器学习-激活函数的直观理解
在机器学习中,激活函数(Activation Function)是用于引入非线性特性的一种函数,它在神经网络的每个神经元上被应用。
如果不使用任何的激活函数,那么神经元的响应就是wx+b,相当于线性的。由此,任意数量的线性激活的神经元叠加,其功能和单个线性激活的神经元一致(线性叠加后仍然是线性的)。
1、几种常用的激活函数
线性激活函数:也相当于没有激活函数,其作用相当于线性叠加:

Sigmoid函数:Sigmoid函数是一个典型的逻辑函数,它会将任何实数映射到0到1之间。然而,它在输入值非常大或非常小的时候,会出现梯度消失的问题。f(x) = 1 / (1 + e^(-x))

Tanh函数:Tanh函数与Sigmoid函数非常相似,它会将任何实数映射到-1到1之间。和Sigmoid函数一样,它也存在梯度消失的问题。Tanh函数相对于原点对称,在处理某些具有对称性的问题时,Tanh可能会比Sigmoid更有优势。f(x) = (e^x - e^(-x)) / (e^x + e^(-x))

ReLU函数:ReLU(Rectified Linear Unit)是一种常用的激活函数,它对负数输出0,对正数则直接输出该数值。由于其简单性和在多层神经网络中的表现,ReLU在很多深度学习模型中得到了应用。但是它可能会在训练过程中出现神经元“死亡”的情况。f(x) = max(0, x)
死亡:当神经网络的权重更新导致神经元的输入变为负值,由于ReLU函数的特性,其输出将会为0,并且在后续的训练中,该神经元的输出将一直保持为0,因此某些神经元会不起作用。

Leaky ReLU:为了解决ReLU的“死亡”神经元问题,人们提出了Leaky ReLU激活函数。Leaky ReLU允许负数的小斜率,这样即使输入是负数,神经元也不会完全失效。在x小于0时有一个极小的负斜率。

Softmax函数:Softmax函数常用于多分类神经网络的输出层,因为它可以给出输入数据属于每个类别的概率。
Swish函数:Swish是一种自门控激活函数,它在深度学习模型中表现出了优于ReLU的性能。Swish函数的形状介于ReLU和Sigmoid之间。f(x) = x * sigmoid(βx)

2、激活函数的直观理解
让我们来拟合一个函数,其目标如下所示:

使用两层网络进行建模,其中第一层包含两个神经元(激活函数如下待定),第二层包含一个线性激活的神经元。
线性激活函数:首先使用线性激活函数作为第一层两个神经元的激活函数,训练得出的最终结果如下所示,由此可见多个线性激活神经元等效于一个神经元,因为最终得到的还是线性函数:

ReLU函数:其次使用ReLU函数作为第一层两个神经元的激活函数,在理想的情况下会得到如下的拟合结果,相当于是两个ReLU函数的组合,一个是直接向左平移,一个是翻转后平移:


但是ReLU在训练时可能会出现神经元死亡现象(上面解释过了),此时继续迭代也不会给性能带来提升(相当于陷入局部最优了),如:

由此可见,激活函数就是拟合的最小单元。
Leaky ReLU:使用Leaky ReLU可以避免ReLU在训练时导致的死亡现象,每次训练都能得到满意的结果:

Sigmoid函数:Sigmoid函数在此处实际上更有优势,因为其实际上就是一个连续的曲线(Tanh同理):

总结:激活函数就是拟合最终结果的最小单元,最终结果就是激活函数的平移反转或多次计算。上面的例子第二层是线性激活,因此最终结果相当于是第一层结果的线性叠加
3、结论分析
总结:激活函数就是拟合最终结果的最小单元,最终结果就是激活函数的平移反转或多次计算。上面的例子第二层是线性激活,因此最终结果相当于是第一层结果的线性叠加
显然,如果将第一层的两个神经元改为1个,就只会使用一个激活函数去进行拟合,Sigmoid的案例如;
4、代码
# 引入相关的包
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from keras.models import Sequential
from keras.layers import Dense
import warnings
warnings.simplefilter(action='ignore', category=UserWarning)
# 创建要拟合的函数
X = np.linspace(0,2*np.pi, 100)
y = np.cos(X)+1
X=X.reshape(-1,1)
# 画图(可选)
fig,ax = plt.subplots(1,1, figsize=(4,3))
ax.plot(X,y)
plt.show()
# 构建模型
model = Sequential([# Dense(2, activation="linear", name = 'l1'),Dense(2, activation="sigmoid", name = 'l1'),# Dense(2, activation="tanh", name='l1'),# Dense(2, activation="relu", name='l1'),# Dense(2, activation="leaky_relu", name='l1'),# Dense(2, activation="swish", name='l1'),Dense(1, activation="linear", name = 'l2')]
)
model.compile(loss=tf.keras.losses.MeanSquaredError(),optimizer=tf.keras.optimizers.Adam(0.04),
)
model.fit(X,y,epochs=300
)
# 进行模型预测
yhat = model.predict(X)
fig,ax = plt.subplots(1,1, figsize=(4,4))
ax.plot(X,y)
ax.plot(X,yhat)
plt.show()
# 进行模型预测
l1 = model.get_layer('l1')
l2 = model.get_layer('l2')
l1.get_weights()
l2.get_weights()
相关文章:
机器学习-激活函数的直观理解
机器学习-激活函数的直观理解 在机器学习中,激活函数(Activation Function)是用于引入非线性特性的一种函数,它在神经网络的每个神经元上被应用。 如果不使用任何的激活函数,那么神经元的响应就是wxb,相当…...
Fedora 36 ARM 镜像源更换与软件安装
1、什么是Fedora Fedora Linux是较具知名度的Linux发行套件之一,由Fedora专案社群开发、红帽公司赞助,目标是建立一套新颖、多功能并且自由的作业系统。 Fedora是商业化的Red Hat Enterprise Linux发行版的上游原始码。 2、Fedora软件安装 64 位 .deb&a…...
多级缓存快速上手
哈喽~大家好,这篇来看看多级缓存。 🥇个人主页:个人主页 🥈 系列专栏:【微服务】 🥉与这篇相关的文章: JAVA进程和线程JAVA进程和线程-CSDN博客Http…...
初始React
<!DOCTYPE html> <html> <head> <meta charset"UTF-8" /> <title>React</title> </head> <body> 了解React <!-- React是一个用于构建web和原生态交互界面的库 相对于传统DOM开发优势:组件化开发…...
2.5 逆矩阵
一、逆矩阵的注释 假设 A A A 是一个方阵,其逆矩阵 A − 1 A^{-1} A−1 与它的大小相同, A − 1 A I A^{-1}AI A−1AI。 A A A 与 A − 1 A^{-1} A−1 会做相反的事情。它们的乘积是单位矩阵 —— 对向量无影响,所以 A − 1 A x x A^{…...
物流实时数仓:数仓搭建(ODS)
系列文章目录 物流实时数仓:采集通道搭建 物流实时数仓:数仓搭建 文章目录 系列文章目录前言一、IDEA环境准备1.pom.xml2.目录创建 二、代码编写1.log4j.properties2.CreateEnvUtil.java3.KafkaUtil.java4.OdsApp.java 三、代码测试总结 前言 现在我们…...
【ARM 嵌入式 编译 Makefile 系列 18 -- Makefile 中的 export 命令详细介绍】
文章目录 Makefile 中的 export 命令详细介绍Makefile 使用 export导出与未导出变量的区别示例:导出变量以供子 Makefile 使用 Makefile 中的 export 命令详细介绍 在 Makefile 中,export 命令用于将变量从 Makefile 导出到由 Makefile 启动的子进程的环…...
【opencv】计算机视觉:停车场车位实时识别
目录 目标 整体流程 背景 详细讲解 目标 我们想要在一个实时的停车场监控视频中,看看要有多少个车以及有多少个空缺车位。然后我们可以标记空的,然后来车之后,实时告诉应该停在那里最方便、最近!!!实现…...
播放器开发(三):FFmpeg与SDL环境配置
学习课题:逐步构建开发播放器【QT5 FFmpeg6 SDL2】 环境配置 我这边的是使用macOS;IDE用的是CLion;CMake构建,除了创建项目步骤、CMakeLists文件有区别之外的代码层面不会有太大区别。 配置上只添加一下CMakeLists中FFmpeg和SD…...
KubeVela核心控制器原理浅析
前言 在学习 KubeVela 的核心控制器之前,我们先简单了解一下 KubeVela 的相关知识。 KubeVela 本身是一个应用交付与管理控制平面,它架在 Kubernetes 集群、云平台等基础设施之上,通过开放应用模型来对组件、云服务、运维能力、交付工作流进…...
迎接“全全闪”时代 XSKY星辰天合发布星海架构和星飞产品
11 月 17 日消息,北京市星辰天合科技股份有限公司(简称:XSKY星辰天合)在北京首钢园举办了主题为“星星之火”的 XSKY 星海全闪架构暨星飞存储发布会。 (图注:XSKY星辰天合 CEO 胥昕) XSKY星辰天…...
[架构相关]基础架构设计原则
基础架构设计原则 文章目录 基础架构设计原则一、可用性(Availability)1.1、引入冗余1.2、负载均衡1.3、故障转移1.4、备份和恢复策略 二、可扩展性(Scalability)2.1 水平扩展2.2 垂直扩展2.3 弹性扩展 三、可靠性(Rel…...
测试在 Oracle 下直接 rm dbf 数据文件并重启数据库
创建一个新的表空间并创建新的用户,指定新表空间为新用户的默认表空间 create tablespace zzw datafile /oradata/cesdb/zzw01.dbf size 10m;zzw用户已经创建过,这里修改其默认表空间 alter user zzw quota unlimited on zzw; alter user zzw default …...
【开源】基于JAVA的计算机机房作业管理系统
项目编号: S 017 ,文末获取源码。 \color{red}{项目编号:S017,文末获取源码。} 项目编号:S017,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 登录注册模块2.2 课程管理模块2.3 课…...
Ubuntu 配置静态 IP
Ubuntu 18 开始可以使用netplan配置网络。配置文件位于/etc/netplan/xxx.yaml中,netplan默认是使用NetworkManager来配置网卡信息的。 修改配置文件: 1、打开文件编辑:sudo vi 01-network-manager-all.yaml原文件内容如下:netwo…...
Spring Cloud实战 |分布式系统的流量控制、熔断降级组件Sentinel如何使用
专栏集锦,大佬们可以收藏以备不时之需 Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏:https:/…...
第六届 传智杯初赛B组
文章目录 A. 字符串拼接🍻 AC code B. 最小差值🍻 AC code C. 红色和紫色🍻 AC code D. abb🍻 AC code E. kotori和素因子🍻 AC code F. 红和蓝🍻 AC code 🥰 Tips:AI可以把代码从 j…...
文档向量化工具(二):text2vec介绍
目录 前言 text2vec开源项目 核心能力 文本向量表示模型 本地试用 安装依赖 下载模型到本地(如果你的网络能直接从huggingface上拉取文件,可跳过) 运行试验代码 前言 在上一篇文章中介绍了,如何从不同格式的文件里提取…...
vscode中pylance无法显示outline无法跳转
当打开的workspce中有较多的文件时,pylance需要分析的文件太多,导致卡住,无法分析到对应的python文件 常见的情况是,当我们在workspace中包含了data文件夹(通常是通过软连接方式把数据集链接过来)…...
番外篇之通讯录
前言:用到的知识点有枚举、结构体、数组,快速排序(用的名字排序) 下面是测试函数: test.c #define _CRT_SECURE_NO_WARNINGS 1 #include"contact.h" void menu() {printf("*************************…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
