吴恩达deeplearning.ai:sigmoid函数的替代方案以及激活函数的选择

news2025/1/15 19:33:34

以下内容有任何不理解可以翻看我之前的博客哦:吴恩达deeplearning.ai专栏


文章目录

  • 引入——改进下需求预测模型
  • ReLU函数(整流线性单元 rectified linear unit)
  • 线性激活函数(linear activation function)
  • 激活函数的选择
  • 实现方式
  • 为什么需要激活函数


到现在为止,我们一直在隐藏层和输出层使用sigmoid函数作为激活函数,之所以我们这样做是因为我们创建了大量逻辑回归单元,并且要将它们串联起来。但在很多情况下,你使用其它的激活函数会使你的神经网络更加强大。

引入——改进下需求预测模型

让我们先看看之前的博客中见到过的需求预测例子:
在这里插入图片描述
在之前,我们将awareness这个神经元看作是一个逻辑回归,即要么意识到,要么没有意识到。但在很多情况下,awareness的情况并不会这么绝对,它们可能有些了解但不多,有可能很了解,也有可能已经开始病毒化传播了,如果此时仍然使用sigmoid函数就会降低神经网络模型的准确性。所以,我们不如改变为预测awareness的概率为多大,甚至是从0到无穷大的一个值(因为要考虑到病毒化传播的几何级增长),从而可以更精确地调整模型。
之前我们采用的sigmoid函数的数学公式为:
a 2 [ 1 ] = g ( w 2 [ 1 ] + b 2 [ 1 ] ) g ( z ) = 1 1 + e − z a_2^{[1]}=g(w_2^{[1]}+b_2^{[1]})\\ g(z)=\frac{1}{1+e^{-z}} a2[1]=g(w2[1]+b2[1])g(z)=1+ez1
通过数学上的分析可以知道,g(z)一定是一个(0,1)之间的数,因此无法满足我们对于改变模型的需求。
在这里插入图片描述

ReLU函数(整流线性单元 rectified linear unit)

事实上,为了满足函数取值为0到无限大,我们可以采取非常简单的函数就是relu函数,数学公式为:
g ( z ) = m a x ( 0 , z ) g(z)=max(0,z) g(z)=max(0,z)
在这里插入图片描述
通俗点解释这个函数就是,如果z大于0,那么就是z本身,否则就是0。

线性激活函数(linear activation function)

和ReLU函数类似,只是允许了小于零的部分存在,在某些地方,可能会有人称呼它为没有使用激活函数(no activation function)(因为就是它本身,和没用一样),数学表达式为:
g ( z ) = z g(z)=z g(z)=z
以上三个可以说是迄今为止神经网络最常用的三个激活函数,在之后的博客中我们将讨论第四种激活函数Softmax,通过这些激活函数,你能构建功能强大的神经网络。但是问题来了,我们什么时候该使用何种激活函数呢。

激活函数的选择

事实上,关于激活函数的选择,只要你观察了特征向量X和标签Y,那么对于激活函数的选择将会十分地自然。
它主要取决于你输出层的标签。
在这里插入图片描述
具体来说,如果你正在处理Y为布尔值的问题,即二分类问题时,通常选择的就是sigmoid函数,原理在之前的章节中提到过,这也是非常自然的想法。
但如果你正在解决一些回归相关问题,那么你可能会选择其它的激活函数,例如股票预测,就建议使用线性激活函数,因为你对于输出值的范围要求在负无穷到正无穷之间。
最后,如果y只能取非负值,例如房子的价格等(总不能倒贴吧),就可以使用ReLU作为激活函数。
事实上,ReLU是神经网络中迄今为止使用的最广泛的激活函数。尽管我们早期使用了很多的sigmoid函数,但现在ReLU的应用比sigmoid多多了(除非你要解决的单纯是二分类问题)。
这是为什么呢?第一,ReLU的运算比sigmoid快多了,ReLU只需要一步判断便能得出结果,但是sigmoid既要求幂,又要取反等等。第二个重要原因是ReLU仅仅在图形的一个部分变平,而sigmoid有两个部分变平,一个函数在很多地方都很平时,会导致你在使用梯度下降的速度真的很慢;这也很好理解,假设你在预测一个二分类问题,结果输出的结果为0.8和0.9对于代价函数来说带来的修正都很小,而且越靠近正确答案时,这个修正越小,从而使速度降低了。
在这里插入图片描述
在下面这张w,b和成本函数的图中也可以看出,图中的很多地方都非常平坦,这意味着斜率近乎于0,这会阻碍梯度下降。而ReLU函数就没有这个问题。
在这里插入图片描述
下面补充下激活函数在代码中的实现方式

实现方式

就是在Dense函数中修改参数:

from dense.keras.layers import Dense
model = Sequential([
  Dense(units=25, activation = 'relu'),#layer1
  Dense(units=15, activation = 'relu'),#layer2
  Dense(units=1, activation = 'sigmoid')#layer3
  ])

当然在别的情况下也有别的激活函数:

Dense(units=x, activation = 'linear')

激活函数的种类还有很多,例如tan h函数、LeakyReLU函数、swish函数等,这些函数一般使用范围就没那么广,可以自己了解。

为什么需要激活函数

在这里插入图片描述
还是这个需求预测模型,如果我们采用线性激活函数会如何呢?事实证明,这个神经网络将会变得和线性回归网络没有什么不同,所以这会破坏使用神经网络模型的全部目的。因为它将无法拟合比线性回归更加复杂的模型。让我们举个更简单的例子吧:
在这里插入图片描述
假设一个只有一个隐藏层,一个最终输出层,且每层只有一个神经元,特征向量也仅仅含有一个特征,这估计是最最最简单的神经网络了,假设所有的激活函数仍然使用线性激活函数,那么计算过程如上,那么 a [ 2 ] a^{[2]} a[2]就是上图所计算出来的线性函数,那么还不如使用线性回归模型呢。
如果你学过线性代数,那么你会知道这个结果源于:线性函数的线性组合仍然是线性函数。那么无论如何都无法创造出更加复杂的模型。
所以,对于任何一个神经网络而言,只使用线性激活函数那么模型的计算结果仍然等同于线性回归的结果。对于大部分神经网络,使用ReLU就足够了。
这篇博客把激活函数有关的内容详细介绍了一下,下一博客将介绍有关多分类问题的内容。
为了给读者你造成不必要的麻烦,博主的所有视频都没开仅粉丝可见,如果想要阅读我的其他博客,可以点个小小的关注哦。

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

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

相关文章

计算机设计大赛 深度学习图像风格迁移

文章目录 0 前言1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示8 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习图像风格迁移 - opencv python 该项目较为新颖,适合作为竞赛课题…

【Redis】安装与部署-Ubuntu

在Ubuntu上部署redis 安装环境:ubuntu 20.04 1.安装Redis: 在终端中运行以下命令来安装Redis: linuxubuntu:/mnt/hgfs/GB28181$ sudo apt install redis-server2.配置Redis: Redis的默认配置文件位于/etc/redis/redis.conf 一…

vue3新特性-defineOptions和defineModel

defineOptions 背景说明&#xff1a; 有 <script setup> 之前&#xff0c;如果要定义 props, emits 可以轻而易举地添加一个与 setup 平级的属性。 但是用了 <script setup> 后&#xff0c;就没法这么干了 setup 属性已经没有了&#xff0c;自然无法添加与其平…

基础复习(IDA调试器)

1.选择IDA调试后端 在顶部有一个下拉菜单&#xff0c;选择调试器后端位置 很多用户实际上使用的是Windows版本的IDA&#xff0c;该IDA可以直接调试Windows下32bit和64bit的程序 2.本地调试启动方法 载入IDA后&#xff0c;程序实际上在对程序内置的一个字符串进行base64解码…

Go编译到linux运行出现 cannot execute binary file

1.初学Go就在windows上写了个"Hello,World!",在windown上编译了一下&#xff0c;生成了可执行文件。运行无问题 go build text.go .\text.exe Hello,World!2.但是按照网上的教程进行生成linux的可执行文件时出现报错 set CGO_ENABLED0 set GOOSlinux set GOARCHam…

Ubuntu22.04.3LTS安装ffmpeg6.x

1.官网ffmpeg下载源码 https://ffmpeg.org/download.html#build-windows 安装 libx264 开发库&#xff08;一个开源的视频压缩库&#xff0c;用于编码视频流为 H.264/MPEG-4 AVC 视频格式&#xff09;。这是编译 FFmpeg 时如果要支持 H.264 编码必须的。 sudo apt install l…

低功耗设计——门控时钟

1. 前言 芯片功耗组成中&#xff0c;有高达40%甚至更多是由时钟树消耗掉的。这个结果的原因也很直观&#xff0c;因为这些时钟树在系统中具有最高的切换频率&#xff0c;而且有很多时钟buffer&#xff0c;而且为了最小化时钟延时&#xff0c;它们通常具有很高的驱动强度。此外&…

【前端】nginx 反向代理,实现跨域问题

前面讲跨域的问题&#xff0c;这篇 C# webapi 文章里面已经说过了。在上述文章中是属于从服务器端去允许访问的策略去解决跨域问题。而这里是从客户端的角度利用反向代理的方法去解决跨域问题。 反向代理&#xff1a;其原理就是将请求都接收到一个中间件&#xff08;中间地址&a…

时序预测 | Matlab实现基于GRNN广义回归神经网络的光伏功率预测模型

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 1.时序预测 | Matlab实现基于GRNN广义回归神经网络的光伏功率预测模型 2.单变量时间序列预测; 3.多指标评价,评价指标包括:R2、MAE、MBE等,代码质量极高; 4.excel数据,方便替换,运行环境2020及以上。 广义回…

Nest.js权限管理系统开发(四)Swagger API接入

什么是swagger Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(<https://swagger.io/>)。 它的主要作用是&#xff1a; 1. 使得前后端分离开发更加方便&#xff0c;有利于团队协作 2. 接口的文档在线自动生成&#xf…

如何解决Nginx启动出现闪退问题?

哈喽&#xff0c;大家好&#xff0c;我是小浪。那么大家首次在启动nginx的时候&#xff0c;绝大部分同学会出现以下情况&#xff0c;就是我们双击nginx.exe文件之后&#xff0c;屏幕闪退一下就没了&#xff0c;然后我们访问localhost:8080提示404. 那么出现这种情况其实是我们…

JAVA的日志技术【详解】

1.使用日志技术的好处 可以将系统执行的信息&#xff0c;方便的记录到指定的位置&#xff08;控制台、文件中、数据库中&#xff09;。 可以随时以开关的形式控制日志的启停&#xff0c;无需侵入到源代码中去进行修改。 2.日志技术的体系结构 3.Logback日志框架 logback-co…

Spring定时任务--手动执行定时任务(替代@Scheduled)

原文网址&#xff1a;Spring定时任务--手动执行定时任务&#xff08;替代Scheduled&#xff09; 简介 本文介绍SpringBoot如何手动执行定时任务。 之前此文已经介绍过&#xff0c;直接用Scheduled即可使用Spring的定时任务&#xff0c;但有时需要手动去提交定时任务&#xf…

phtread_cancel函数用于取消线程,但不是实时的

如上图所示&#xff0c;线程函数中没有取消点&#xff08;一般是一些系统调用----man 7 pthreads查看&#xff0c;自定义函数是无效的&#xff09;&#xff0c;则使用pthread_cancle函数不生效。 解决方法&#xff1a;可以添加pthread_testcancle(); 通过pthread_join回收的…

【QT+QGIS跨平台编译】之五十一:【QGIS_CORE跨平台编译】—【qgsexpressionparser.cpp生成】

文章目录 一、Bison二、生成来源三、构建过程一、Bison GNU Bison 是一个通用的解析器生成器,它可以将注释的无上下文语法转换为使用 LALR (1) 解析表的确定性 LR 或广义 LR (GLR) 解析器。Bison 还可以生成 IELR (1) 或规范 LR (1) 解析表。一旦您熟练使用 Bison,您可以使用…

37、IO进程线程/使用消息队列完成进程间通信20240225

一、使用消息队列完成两个进程间相互通信。 代码&#xff1a; 进程1代码&#xff1a; #include<myhead.h> struct msgbuf {long mtype;//消息类型char mtext[1024];//消息正文 }; //宏定义结构体消息正文大小 #define MSGSIZE (sizeof(struct msgbuf)-sizeof(long)) i…

微信小程序(四十五)登入界面-简易版

注释很详细&#xff0c;直接上代码 上一篇 此文使用了vant组件库&#xff0c;没有安装配置的可以参考此篇vant组件的安装与配置 新增内容&#xff1a; 1.基础组件的组合 2.验证码倒计时的逻辑处理 源码&#xff1a; app.json {"usingComponents": {"van-field…

RabbitMQ快速入门笔记

学习视频参考 3.RabbitMQ的安装(二)_哔哩哔哩_bilibili 06-MQ的分类_哔哩哔哩_bilibili RabbitMQ官网 RabbitMQ: easy to use, flexible messaging and streaming | RabbitMQ 目录 1.MQ引言 1.1 什么是MQ&#xff1f; 1.2 MQ的分类 1.2.1 ActivaMQ 1.2.2 Kafka 1.2.3 R…

挑战杯 基于机器学习与大数据的糖尿病预测

文章目录 1 前言1 课题背景2 数据导入处理3 数据可视化分析4 特征选择4.1 通过相关性进行筛选4.2 多重共线性4.3 RFE&#xff08;递归特征消除法&#xff09;4.4 正则化 5 机器学习模型建立与评价5.1 评价方式的选择5.2 模型的建立与评价5.3 模型参数调优5.4 将调参过后的模型重…

Unity3D 使用 Proto

一. 下载与安装 这里下载Google Protobuff下载 1. 源码用来编译CSharp 相关配置 2. win64 用于编译 proto 文件 二. 编译 1. 使用VS 打开 2. 点击最上面菜单栏 工具>NuGet 包管理器>管理解决方案的NuGet 管理包 版本一定要选择咱们一开始下载的对应版本否则不兼容&am…