政安晨:【深度学习神经网络基础】(三)—— 激活函数

news2025/6/7 17:26:51

目录

线性激活函数

阶跃激活函数

S型激活函数

双曲正切激活函数

修正线性单元

Softmax激活函数

偏置扮演什么角色?


政安晨的个人主页政安晨

欢迎 👍点赞✍评论⭐收藏

收录专栏政安晨的机器学习笔记

希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正!

本文目标:介绍激活函数。

在神经网络编程中,激活函数或传递函数为神经元的输出建立界限。神经网络可以使用许多不同的激活函数。我们将在本文中讨论最常见的激活函数。为神经网络选择激活函数是一个重要的考虑,因为它会影响输入数据格式化的方式。在本文中,我们将指导你选择激活函数。

线性激活函数

最基本的激活函数是线性函数,因为它根本不改变神经元输出。下面公式展示了程序通常如何实现线性激活函数:

如你所见,这个激活函数只是返回神经元输入传递给它的值。下图展示了线性激活函数的图像。

为学习提供数值的回归神经网络,通常会在其输出层使用线性激活函数。分类神经网络,即为其输入确定合适类别的神经网络,通常在其输出层使用Softmax激活函数。

阶跃激活函数

阶跃或阈值激活函数是另一种简单的激活函数。神经网络最初称为“感知机”(perceptron)。McCulloch和Pitts(1943)引入了最初的感知机,并使用了如下公式一样的阶跃激活函数:

上面公式为0.5或更高的输入值输出1,为所有其他输入值输出0。阶跃激活函数通常被称为阈值激活函数,因为它们仅对大于指定阈值的值返回1(真),如下图所示。

S型激活函数

对于仅需要输出正数的前馈神经网络,S型(Sigmoid)激活函数或逻辑激活函数是非常常见的选择。虽然它使用广泛,但双曲正切激活函数或ReLU激活函数通常是更合适的选择。我们将在后面介绍ReLU激活函数。下面公式展示了S型激活函数:

使用S型激活函数以确保值保持在相对较小的范围内,如下图所示,从图中可以看出,大于或小于0的值都会被压缩到0~1的范围内。

双曲正切激活函数

对于必须输出−1~1的值的神经网络,双曲正切(tanh)激活函数也是非常常见的激活函数,如下公式所示:

双曲正切激活函数图像的形状类似S型激活函数,图像的形状如下图所示:

双曲正切激活函数相对S型激活函数具有诸多优点。这些优点涉及神经网络训练中使用的导数,我们以后在“反向传播训练”中介绍。

修正线性单元

修正线性单元(ReLU)由Teh和Hinton在2000年引入,在过去几年中得到了迅速的应用。在ReLU激活函数之前,双曲正切激活函数通常被视为优先选择的激活函数。由于出色的训练结果,目前大多数最新研究都推荐ReLU激活函数。因此,大多数神经网络应该在隐藏层上使用ReLU激活函数,在输出层上使用Softmax或线性激活函数。

下面公式展示了非常简单的ReLU激活函数:

现在,我们将研究为什么ReLU激活函数通常比隐藏层的其他激活函数要好。性能提高的部分原因在于ReLU激活函数是线性的非饱和激活函数。与S型激活函数/逻辑激活函数或双曲正切激活函数不同,ReLU不会饱和到−1、0或1。饱和激活函数总是朝向并最终获得一个值。如双曲正切激活函数在x减小时饱和到−1,在x增大时饱和到1。

下图展示了ReLU激活函数的图像:

最新研究表明,神经网络的隐藏层应使用ReLU激活函数。

Softmax激活函数

与线性激活函数一样,通常会在神经网络的输出层中找到Softmax激活函数。Softmax激活函数用于分类神经网络。分类神经网络中,具有最高值的神经元可以宣称神经网络的输入属于它的分类。因为它是一种更好的方法,所以Softmax激活函数会强制神经网络的输出表示输入落入每个类的概率。如果没有Softmax激活函数,则神经元的输出就是数值,值最高的数表示获胜的类。

为了了解如何使用Softmax激活函数,我们来研究一个常见的神经网络分类问题。

鸢尾花数据集包含针对150种不同鸢尾花的4个测量值。这些花中的每一种都属于3个鸢尾花物种之一。当你提供花朵的测量值时,Softmax激活函数允许神经网络为你提供这些测量值属于这3个物种的概率。如神经网络可能会告诉你,该鸢尾花有80%的概率是setosa,有15%的概率是virginica,只有5%的概率是versicolour。因为这些是概率,所以它们的总和必须是100%。不可能同时有80%的概率是setosa、75%的概率是virginica、20%的概率是versicolour——这种结果是毫无意义的。

要将输入数据分为3个鸢尾花物种之一,则对于这3个物种中的每一个,你都需要一个输出神经元。输出神经元并不指定这3个物种各自的概率。因此,我们期望提供的这些概率总和为100%。而神经网络将告诉你,花朵属于这3个物种中每一个的概率。

要获得概率,请使用下面公式中的Softmax函数:

Softmax激活函数的计算方法与咱们前面介绍的其他激活函数不同。在使用Softmax作为激活函数时,单个神经元的输出取决于其他输出神经元。

下面是用伪代码实现了Softmax激活函数:

def softmax(neuron_output):
  sum = 0
  for v in neuron_output:
    sum = sum + v

  sum = math.exp(sum)
  proba = [ ]
  for i in range(len(neuron_output)):
    proba[i] = math.exp(neuron_output[i])/sum 
  return proba

请考虑一个训练好的神经网络,它将数据分为三类,如3个鸢尾花物种。在这种情况下,你将为每个目标分类使用一个输出神经元。请考虑神经网络要输出以下内容:

Neuron 1: setosa: 0.9

Neuron 2: versicolour: 0.2

Neuron 3: virginica: 0.4

从上面的输出中我们可以清楚地看到,神经网络认为数据代表了setosa鸢尾花。但是,这些值不是概率。值0.9不表示数据有90%的概率代表setosa。这些值的总和为1.5。要将它们视为概率,它们的总和必须为1。

该神经网络的输出向量如下:

[0.9, 0.2, 0.4]

如果将此向量提供给Softmax激活函数,则返回以下向量:

[0.47548495534876745, 0.2361188410001125, 0.28839620365112]

以上3个值的总和为1,可以视为概率。由于向量中的第一个值四舍五入为0.48(48%),因此数据表示setosa的概率为48%。你可以通过以下方式计算该值:

sum=exp(0.9)+exp(0.2)+exp(0.4)=5.17283056695839 j0=exp(0.9)/sum=0.47548495534876745 j1=exp(0.2)/sum=0.2361188410001125 j2=exp(0.4)/sum=0.28839620365112

偏置扮演什么角色?

在上文中看到的激活函数指定了单个神经元的输出。神经元的权重和偏置(bias)共同决定了激活的输出,以产生期望的输出。要查看这个过程如何发生,请考虑下面公式。它表示了单输入的S型激活神经网络:

变量x表示神经网络的单个输入。w和b变量指定了神经网络的权重和偏置。上面公式是一种组合,包含了指定神经网络的公式和指定S型激活函数的公式。

通过调整神经元的权重可以调整激活函数的斜率或形状。下图展示了权重变化对S型激活函数输出的影响:

下图展示了使用以下参数的多个S型曲线:

f(x, 0.5, 0.0)

f(x, 1.0, 0.0)

f(x, 1.5, 0.0)

f(x, 2.0, 0.0)

为了生成这些曲线,我们没有使用偏置,这很显然,因为每种情况下第3个参数都是0。使用4个权重值会在上图中产生4条不同的S型曲线。无论权重如何,当x为0时我们总是得到相同的值0.5,因为当x为0时所有曲线都到达同一点。当输入接近0.5时,我们可能需要神经网络产生其他值。

调整偏置会使S型曲线发生移动,这使得当x接近0时,该函数取值不为0.5。下图展示了权重为1.0时,偏置变化对S型激活函数输出的影响。

下图展示了具有以下参数的多条S型曲线:

f(x, 1.0, 1.0)

f(x, 1.0, 0.5)

f(x, 1.0, 1.5)

f(x, 1.0, 2.0)

这些函数的权重均为1.0。当我们调整不同的偏置时,S型曲线向左或向右移动。由于所有曲线在右上角或左下角发生合并,因此并不是完全的移位。当我们将偏置和权重放在一起时,它们生成了一条曲线,该曲线创建了神经元所需的输出。

以上曲线仅是一个神经元的输出。在一个完整的神经网络中,许多不同神经元的输出将合并,以产生复杂的输出模式。


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

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

相关文章

[RK3399 Linux] 移植Linux 5.2.8内核详解

背景是在RK3399上面移植Rockchip官方提供的u-boot 2017.09 一、linux内核 1.1 源码下载 内核源码下载地址为:《https://www.kernel.org/》: 也可以到内核镜像网址下载https://mirrors.edge.kernel.org/pub/linux/kernel/,这里下载速度更快。 如果下载速度太慢,无法下载,…

理解 编译和链接

目录 1. 翻译环境和运行环境 2. 翻译环境 2.1 预处理(预编译) 2.2 编译 2.2.1 词法分析: 2.2.2 语法分析 2.2.3 语义分析 2.3 汇编 2.4 链接 3. 运行环境 1. 翻译环境和运行环境 在ANSI C的任何一种实现中,存在两个不同…

git修改本地提交历史邮箱地址

1、Git(Git) 2、修改Git本地提交历史中的邮箱地址 使用 git rebase 命令进行交互式重置。 具体步骤如下:(https://git-scm.com/docs/git-rebase) 1、查看提交历史: 使用 git log 命令列出提交历史&#x…

完整的项目源码!在线考试完整系统源码(可接私活)

最近有一些读者问我有没有完整的基于SpringbootVue的项目源码,今天给大家整理了一下,并且录制了搭建的教程,无偿分享给大家。 一、系统运行图 1、登陆页面 2、后台管理 3、全套环境资源 ​源码文件部分截图,带视频教程 ​ 在实际…

WPS的JS宏如何批量实现文字的超链接

表格中需要对文字进行超链接,每个链接指引到不同的地址。例如: 实现如下表格中,文件名称超级链接到对应的文件路径上,点击对应的文件名称,即可打开对应的文件。 序号文件名称文件路径1变更申请与处理表.xls文档\系统…

java八股——消息队列MQ

上一篇传送门:点我 目前只学习了RabbitMQ,后续学习了其他MQ后会继续补充。 MQ有了解过吗?说说什么是MQ? MQ是Message Queue的缩写,也就是消息队列的意思。它是一种应用程序对应用程序的通信方法,使得应用…

多线程回答的滚瓜烂熟,面试官问我虚线程了解吗?我说不太了解!

Java虚拟线程(Virtual Threads)标志着Java在并发编程领域的一次重大飞跃,特别是从Java 21版本开始。这项新技术的引入旨在克服传统多线程和线程池存在的挑战。 多线程和线程池 在Java中,传统的多线程编程依赖于Thread类或实现Ru…

Python(1):认识Python并且了解一些简单函数

文章目录 一、Python的优势及其使用场景二、Python环境的安装三、Python中的变量及其命名四、Python中的注释五、一些简单常见的函数和认识ASCII表六、Python导入模块的方式 一、Python的优势及其使用场景 优点: 开发效率高:Python具有非常强大的第三方…

Java——数组练习

目录 一.数组转字符串 二.数组拷贝 三.求数组中元素的平均值 四.查找数组中指定元素(顺序查找) 五.查找数组中指定元素(二分查找) 六.数组排序(冒泡排序) 七.数组逆序 一.数组转字符串 代码示例: import java.util.Arrays int[] arr {1,2,3,4,5,6}; String…

220 基于matlab的考虑直齿轮热弹耦合的动力学分析

基于matlab的考虑直齿轮热弹耦合的动力学分析,输入主动轮、从动轮各类参数,考虑润滑油温度、润滑油粘度系数等参数,输出接触压力、接触点速度、摩擦系数、对流传热系数等结果。程序已调通,可直接运行。 220直齿轮热弹耦合 接触压力…

出游旅行,不能错过的华为nova 12 Ultra4个AI小技巧

随着AI功能的快速普及,让我们的日常生活和工作借助这些工具变得越来越高效。今天就分享4个超级实用的华为nova 12 Ultra自带的AI小技巧:小艺智能魔法抠图、AI消除、图库搜索、小艺帮写,看看有哪些还是你不知道的? 1. 小艺智能…

Windows:Redis数据库图形化中文工具软件——RESP(3)

这个是用于连接redis数据库的软件工具,安装在windows上的图形化界面,并且支持中文,是在github上的一个项目 1.获取安装包 发布 lework/RedisDesktopManager-Windows (github.com)https://github.com/lework/RedisDesktopManager-Windows/rel…

紧急 CCF-C ICPR 2024摘要投稿日期延期至4月10日 速投速成就科研梦

会议之眼 快讯 第27届ICPR(The International Conference on Pattern Recognition)即国际模式识别会议将于 2024年 12月1日-5日在印度加尔各答的比斯瓦孟加拉会议中心举行!ICPR是国际模式识别协会的旗舰会议,也是模式识别、计算机…

OpenHarmony南向开发案例:【智能保险柜】

样例简介 智能保险柜实时监测保险柜中振动传感器,当有振动产生时及时向用户发出警报。在连接网络后,配合数字管家应用,用户可以远程接收智能保险柜的报警信息。后续可扩展摄像头等设备,实现对危险及时报警,及时处理&a…

LeetCode-2529题:正整数和负整数的最大计数(原创)

【题目描述】 给你一个按 非递减顺序 排列的数组 nums ,返回正整数数目和负整数数目中的最大值。换句话讲,如果 nums 中正整数的数目是 pos ,而负整数的数目是 neg ,返回 pos 和 neg二者中的最大值。注意:0 既不是正整…

Linux 线程:线程同步、生产者消费者模型

目录 一、死锁 二、条件变量实现线程同步 1、为什么需要线程同步 2、条件变量、同步、竞态条件 3、条件变量函数:初始化 销毁 等待 唤醒 4、实现简单的多线程程序 不唤醒则一直等待 实现线程同步 三、生产者消费者 1、借助超市模型理解 2、优点 四、基于…

Eland上传bge-base-zh-v1.5向量化模型到ElasticSearch中

最近需要做一些向量检索,试试ES 一、准备 系统:MacOS 14.3.1 ElasticSearch:8.13.2 Kibana:8.13.2 本地单机环境,无集群,也不基于Docker BGE是一个常见的文本转向量的模型,在很多大模型RAG应…

python基础语法--输入和输出

一、 输入 input() python使用input输入变量,input输入的变量为字符串形式,可以通过其他方式转换为整型或其他类型。 (1)单行读入已知个数的字符串或数字 读入字符串 # 单行读入字符串a,并给出一句输入提示 a input("请…

【汇编语言实战】求三个已知数最大值

C语言描述该程序流程&#xff1a; #include <stdio.h> int main() {int a10,b20,c15;//scanf("%d %d",&a,&b);if(a>b){if(a>c){printf("%d",c);}else{printf("%d",a);}}else{if(b>c){printf("%d",b);}else{pr…

惊!磁盘未初始化,数据如何拯救?

在数字化时代&#xff0c;磁盘作为存储数据的重要载体&#xff0c;其稳定性直接关系到数据的安全。然而&#xff0c;有时我们会遭遇一个令人头疼的问题——磁盘没有初始化。这意味着磁盘无法被操作系统正常识别和使用&#xff0c;其中的数据仿佛被锁进了一个无形的牢笼。那么&a…