机器学习-sigmoid函数和relu函数-个人解读

机器学习-sigmoid函数和relu函数-个人解读

今天博主来解读一下sigmoid函数和relu函数,我觉得很多同学可能都知道这两个函数是什么,他们干什么的,他们有什么用,但是呢?我想这两个常用的激活函数内在的本质,很多同学应该不是很理解,今天博主就给出自己的一些解读。

首先,我们先谈谈激活函数是什么:

激活函数(Activation Function)是一种添加到人工神经网络中的函数,旨在帮助网络学习数据中的复杂模式。类似于人类大脑中基于神经元的模型,激活函数最终决定了要发射给下一个神经元的内容。
看下面一张图,图中博主标红的部分就是激活函数再一个单神经元的神经网络中的部分,它呢一般再深度学习中是对神经元的输出进行处理。
注:激活函数不仅仅再神经网络中应用,机器学习一些传统算法也很常用,再卷积神经网络中则是对卷积核的卷积输出进行处理。
在这里插入图片描述

然后,我们肯定要知道激活函数干什么的?(作用)
第一,读神经网络加入非线性激活函数后,由神经网络的万能定理,神经网络就可以拟合任何一个函数。也就是增强网络的表示能力。(下一个实验就是万能定理的实验)
第二,激活可以防止梯度消失、梯度爆炸且加快模型学习速度。

下面我们就介绍两种最常见的激活函数sigmoid函数和relu函数,并结合这两个函数解释一下为什么激活函数可以由上面两点作用。
首先是sigmoid函数:
数学表达式:
在这里插入图片描述
数学图像:
在这里插入图片描述
这里,我给出大家分析激活函数的方法,如何分析一个激活函数?
看下面几个激活函数的特征:
(1)看他的取值范围
(2)看他的对称性
(3)看他的导函数曲线(或者说看他的函数陡峭性)

其中1和3一般是最重要的。

大家可以看到sigmoid的取值空间是多少?
(0,1)
所以因为sigmoid这一个特性,sigmoid经常被用于作为概率转化,不过这种转化一般适用于二分类,大家可以思考一下这个问题,多分类一般用softmax,另外呢如果是做概率转化,则经常用于最后一步对全连接层的输出进行处理。

然后呢,看他的函数对称性,大家可以发现sigmoid是关于(0,0.5)对称的,这恰好满足了它作为二分类概率转化的一个重要特征,概率转化激活函数必须是对称的,这符合现实需求,比如我们最终对特征处理后,因为一般样本提取过的特征,影响性事线性的,比如我们给了一个输入X,经过神经网络表征学习最后变成了X’,X‘经过全连接层的线性转化,变成了一个值,然后再经过sigmoid函数处理,我们知道,这个值可能为负,可能为正,为负则sigmoid处理后输出小于0.5,则判断为负样本,为正则sigmoid处理后输出大于0.5,判断为正样本。
那我们知道总不能输入一个值1,一个值-1,经过激活函数处理,变成了0.4和0.9吧,一般我们认为我们表征学习后的特征影响性是符合线性情况的。

然后是导函数曲线,导函数曲线其实是最重要的,这里可以发现sigmoid函数基本上是x在(-5,5)上导函数才稍微大一点,其他情况但函数基本为0,那这个有什么用呢?
举个例子:
一个二分类问题
加入现在我们由5个样本输入模型,经过网络层的处理,最后在经过sigmoid函数处理之前的数值输出分别为:
-1,1,3,100,-100,
五个样本真实的标签则是0,1,1,1,0
注:上面五个值经过sigmoid函数处理处理后,为分类为1的概率。

大家可以发现,这五个数值经过sigmoid处理后,可以发现100,-100对应的导数值基本趋于0,100输出的概率激活为1了。也就是对于这个样本模型输出效果已经很好了,那么导数正好趋于0,也就是这个样本不应该对模型有大的影响。-100经过sigmoid函数处理输出几乎为0了,效果也很好,也不需要根据这个样本更新模型了,但是-1,1,3,这三个值对应的概率还不是最好的接近0,1,1,正好倒数值也比较大,用于对模型进行较大程度更新。

所以大家如果很仔细的看我上面这个例子,就会发现sigmoid函数的精髓,对于模型已经分类效果不错的样本,sigmoid不会随意根据这个样本调整模型,对于模型分类效果不好的样本,采用sigmoid函数则会对模型进行较大程度的调整。这种模型调整策略是很棒的。且sigmoid对称性特性和0-1区间的取值,是的其可以用于较好的处理概率问题。
但是也可以发现sigmoid函数很容易发生梯度消失,在只要输入的值不在(-5,5)之间,几乎就是梯度为0了,这也就是为什么隐藏层不加入sigmoid函数,因为太容易发生梯度消失了,但是可以在全连接层使用这个函数。

对于sigmoid函数,其实博主希望各位能好好看看上面这个例子,sigmoid函数可以说因为自己的函数特征有了其优点,也有了其缺点。

下面我们讲一下relu函数:
数学表达式:
在这里插入图片描述
那么函数图像也很简单了:
在这里插入图片描述

分析激活函数,还是先看它的下面三个特性:
(1)看他的取值范围
(2)看他的对称性
(3)看他的导函数曲线(或者说看他的函数陡峭性)

我们可以看到,它的取值范围是【0,正无穷】
而且根据输入激活函数随机性的原理我们可以知道,经过这个激活函数处理,有一般的概率输出为0,由反向传播的原理知道,经过激活函数输出为0,那么这激活函数在这次样本输入中其梯度就为0,也就是不会被更新,且该神经元的输出也不会对最终结果再有影响。这就形成了relu的稀疏性,就是指,relu处理后,由一般的概率会使当前神经网络层一半的的神经元失灵。很多同学可能就问了,哎呀,为啥要让他们失灵啊,那我们直接设置一半不就好了。

为什么relu要那么做呢,第一,神经网络学习能力是很强的,所以很容易过拟合,那么relu函数就可以一定程度解决这种问题。
第二,就是relu函数的真正精髓,每次训练会随机的让让很大一部分神经元失灵,只更新部分神经元,每次更新的部分神经元是随机的,在这种情况下,每次被更新的神经元组合是很复杂的,相同性很低,那么就可以有效的让神经元独立学习,孤军奋战,不那么被其他神经元影响,做出自己的有利贡献。博主觉得这才是relu函数的精髓,这可以大大提高模型的学习能力。

然后relu函数没有对称性就不看了,所以relu函数不能用于全连接层之后,都是用于隐藏层之后,对神经元学习有帮助。

然后再看其导函数,x>0导数都为1,不管x取什么值,只要x>1,否则倒数为0,x<=0也不用考虑,输出为0,神经元就失灵了,所以这个特性就是说明relu函数是为了神经元更新参数专门设置的,其不易发生梯度消失。只要输出有效,梯度就为1。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】模板(函数模板与类模板)讲解

本篇文章会对C中的模板进行讲解&#xff0c;其中会对函数模板和类模板进行讲解。希望本篇文章会对你有所帮助。 文章目录 一、函数模板 1、1 模板的引入 1、2 函数模板举例讲解 1、2、1 函数模板的概念 1、2、2 函数模板格式 1、2、3 函数模板实例化 1、2、4 模板参数的匹配原则…

如何将SAP数据抽取到Azure数据湖平台?

经过多年的发展&#xff0c;SNP Glue 在全球已成为值得信赖且广为人知的解决方案&#xff0c;支持客户将其 SAP 数据与现代化的平台集成。SNP Glue 打破了数据孤岛&#xff0c;向数据科学家开放了 SAP&#xff0c;支持基于企业 SAP 数据的多个新用例。 随着时间的推移&#xff…

详解 HTTPS、TLS、SSL、HTTP区别和关系

一、什么是HTTPS、TLS、SSL HTTPS&#xff0c;也称作HTTP over TLS。TLS的前身是SSL&#xff0c;TLS 1.0通常被标示为SSL 3.1&#xff0c;TLS 1.1为SSL 3.2&#xff0c;TLS 1.2为SSL 3.3。下图描述了在TCP/IP协议栈中TLS(各子协议)和HTTP的关系。 二、HTTP和HTTPS协议的区别 …

前端AES加密,后端解密,有效防止数据外泄

在工作中经常遇到密码明文传输这个问题&#xff0c;为了让密码安全些会让加密&#xff0c;现在有个比较方便的AES加密&#xff08;前端密钥可能存在泄露风险&#xff0c;应该放到配置项中&#xff09;&#xff1a; 一、前端加密 1、首先引入前端需要用到的js&#xff1a;crypt…

【Git】Git 拉取的快速方法(含项目示例)

文章目录 一、问题的提出二、问题的尝试解决 一、问题的提出 在我们之前的拉取中&#xff0c;速度可能比较慢&#xff0c;例如&#xff0c;我们要拉取CLIP的项目。 (ldm) rootI1385efcc2300601b29:/hy-tmp/latent-diffusion# pip install githttps://github.com/openai/CLIP.…

接口测试辅助,Fiddler抓取安卓手机https请求(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Fiddler 是一款免…

Qt + QR-Code-generator 生成二维码

0.前言 之前使用 libgrencode 生成二维码&#xff0c;LGPL 协议实在不方便&#xff0c;所以需要找一个 github 星星多的&#xff0c;代码简单最好 header-only&#xff0c;协议最好是 MIT 或者兼容协议而不是 GPL 或者 LPGL。 QR-Code-generator 正好符合这个要求&#xff0c…

Stable Diffusion 用2D图片制作3D动态壁纸

如果想让我们的2D图片动起来可以使用stable-diffusion-webui-depthmap-script插件在SD中进行加工让图片动起来。 这是一个可以从单个图像创建深度图,现在也可以生成3D立体图像对的插件,无论是并排还是浮雕。生成的结果可在3D或全息设备(如VR耳机或Looking Glass显示器)上查…

git下载源码及环境搭建之前端(三)

学习目标&#xff1a; vue 新项目的 前端环境搭建 vue 项目在 使用 Visual Studio Code 开发前端项目环境的搭建及 相关文件的配置 操作步骤&#xff1a; 前端&#xff1a; 下图所示为开发时前端所用的编辑器 注意&#xff1a;在配置时 有时候 localhost 可能 不太好用&…

基于Tensorflow来重现GPT v1模型

OpenAI推出的ChatGPT模型让我们看到了通用人工智能的发展潜力&#xff0c;我也找了GPT的相关论文来进行研究。OpenAI在2017年的论文Improving Language Understanding by Generative Pre-Training提出了GPT的第一个版本&#xff0c;我也基于这个论文来用Tensorflow进行了复现。…

神经网络架构设计常见问题及解答

如果你是人工神经网络 (ANN) 的初学者&#xff0c;你可能会问一些问题。 比如要使用的隐藏层数量是多少&#xff1f; 每个隐藏层有多少个隐藏神经元&#xff1f; 使用隐藏层/神经元的目的是什么&#xff1f; 增加隐藏层/神经元的数量总是能带来更好的结果吗&#xff1f; 使用什…

信贷系统开发设计基础(二)

目录 架构演进篇 01 信贷架构演进概述 02 单体架构案例简介 03 单体系统群架构案例分析 04 微服务案例分析 架构演进篇 01 信贷架构演进概述 02 单体架构案例简介 03 单体系统群架构案例分析 04 微服务案例分析 总结&#xff1a; ---------------------------------------…