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

目录

线性激活函数

阶跃激活函数

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型曲线向左或向右移动。由于所有曲线在右上角或左下角发生合并,因此并不是完全的移位。当我们将偏置和权重放在一起时,它们生成了一条曲线,该曲线创建了神经元所需的输出。

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


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java Spring IoCDI :探索Java Spring中控制反转和依赖注入的威力,增强灵活性和可维护性

💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:Java Spring IoC&DI :探索Java Spring中控制反转和依赖注入的威力,增强灵活性和可维护性 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 前提小知识:高内…

12-2-CSS 字体图标

个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 CSS 字体图标1 字体图标的产生2 字体图标的优点3 字体图标的下载4 字体图标的…

LangChain-10(2) 加餐 编写Agent获取本地Docker运行情况 无技术含量只是思路

可以先查看 上一节内容,会对本节有更好的理解。 安装依赖 pip install langchainhub编写代码 核心代码 tool def get_docker_info(docker_name: str) -> str:"""Get information about a docker pod container info."""result…

隐私计算实训营学习八:隐语SCQL的开发实践

文章目录 一、SCQL使用集成最佳实践1.1 SCQL使用流程1.2 SCQL部署1.3 SCQL使用示例 二、SCQL工作原理三、使用SecretNote上手体验SCQL 一、SCQL使用集成最佳实践 1.1 SCQL使用流程 SCQL使用: SCQL 开放 API 供⽤户使⽤/集成。可以使⽤SCDBClient上⼿体验(类似与My…

归一化技术比较研究:Batch Norm, Layer Norm, Group Norm

归一化层是深度神经网络体系结构中的关键,在训练过程中确保各层的输入分布一致,这对于高效和稳定的学习至关重要。归一化技术的选择(Batch, Layer, GroupNormalization)会显著影响训练动态和最终的模型性能。每种技术的相对优势并…

CSS - 你实现过宽高自适应的正方形吗

难度 难度级别:中高级及以上 提问概率:80% 宽高自适应的需求并不少见,尤其是在当今流行的大屏系统开发中更是随处可见,很显然已经超越了我们日常将div写死100px这样的范畴,那么如何实现一个宽高自适应的正方形呢?这里提出两种实现方案。…

【Linux】进程初步理解

个人主页 : zxctscl 如有转载请先通知 文章目录 1. 冯诺依曼体系结构1.1 认识冯诺依曼体系结构1.2 存储金字塔 2. 操作系统2.1 概念2.2 结构2.3 操作系统的管理 3. 进程3.1 进程描述3.2 Linux下的PCB 4. task_struct本身内部属性4.1 启动4.2 进程的创建方式4.2.1 父…

JAVA:探索Apache POI 处理利器

请关注微信公众号:拾荒的小海螺 1、简述 Apache POI是Apache软件基金会的顶级项目之一,它允许Java开发人员读取和写入Microsoft Office格式的文档,包括Excel、Word和PowerPoint文件。通过POI,开发人员可以创建、修改和读取Excel…

面试(04)————JavaWeb

1、网络通讯部分 1.1、 TCP 与 UDP 区别? 1.2、什么是 HTTP 协议? 1.3、TCP 的三次握手,为什么? 1.4、HTTP 中重定向和请求转发的区别? 1.5、 Get 和 Post 的区别? 2、cookie 和 session 的区别&am…

加入酷开会员 酷开系统带你一起开启看电视的美好时光!

看电视对孩子和大人来说,都是有好处的。英国的《星期日泰晤士报》曾刊登报道:“看电视可以让小孩增长见闻,学习各种良好的社交和学习技巧,从而为他们今后的学习打下良好的基础。”而对于成年人来说,看电视也是一种娱乐…

linux 安装 pptp 协议

注意:目前iOS已不支持该协议 yum -y install ppp wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/pptpd-1.4.0-2.el7.x86_64.rpm yum -y install pptpd-1.4.0-2.el7.x86_64.rpm vi /etc/pptpd.conf 去除 localip 和 remoteip的注释 …

【.Net】Polly

文章目录 概述服务熔断、服务降级、服务限流、流量削峰、错峰、服务雪崩Polly的基本使用超时策略悲观策略乐观策略 重试策略请求异常响应异常 降级策略熔断策略与策略包裹(多种策略组合) 参考 概述 Polly是一个被.NET基金会支持认可的框架,同…

SAP-MM 新增公司代码 激活物料分类账

1、OMX1 - 激活物料分类账(配置环境) 2、CKMSTART - 物料分类账的生产开始(生产机运行) 不激活创建物料时会报错:估价范围还没有生产式的物料账簿 执行后结果: 以上~~

creo扫描杯子学习笔记

creo扫描杯子学习笔记 扫描2要素: 轨迹, 截面。 多用于曲线扫描,区别于拉伸命令。 大小自定 旋转扫描 抽壳 草绘把手 扫描把手 复制曲面 实例化切除 成型

Web爬虫

📑前言 本文主要是【Web爬虫】——简单使用的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一句&#…

PHP实现网站微信扫码关注公众号后自动注册登陆实现方法及代码【关注收藏】

在网站注册登陆这环节,增加微信扫码注册登陆,普通的方法需要开通微信开发者平台,生成二维码扫码后才能获取用户的uinonid或openid,实现注册登陆,但这样比较麻烦还要企业认证交费开发者平台,而且没有和公众号…

区域自动气象站讲解

TH-QC10当我们每天查看天气预报,安排出行计划,或是在户外活动时关注天气变化,很少有人会想到这一切背后默默付出的“英雄”——区域自动气象站。这些看似不起眼的气象监测设备,却在我们日常生活中扮演着至关重要的角色。今天&…

【话题】程序员35岁会失业吗?

大家好,我是全栈小5,欢迎阅读小5的系列文章,这是《话题》系列文章 目录 背景招聘分析一、技术更新换代的挑战二、经验与技术的双重优势三、职业发展的多元化选择四、个人成长与职业规划的平衡五、结语文章推荐 背景 35岁被认为是程序员职业生…

【OJ】stack刷题

个人主页 : zxctscl 如有转载请先通知 题目 1. 155. 最小栈1.1 分析1.2 代码 2. JZ31 栈的压入、弹出序列2.1 分析2.2 代码 3. 150. 逆波兰表达式求值3.1 分析3.2 代码 1. 155. 最小栈 1.1 分析 利用两个栈,一个栈a负责入数据和出数据,另一个…

分类预测 | Matlab实现DRN深度残差网络数据分类预测

分类预测 | Matlab实现DRN深度残差网络数据分类预测 目录 分类预测 | Matlab实现DRN深度残差网络数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现DRN深度残差网络数据分类预测(完整源码和数据),运行环境为Matl…