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

以下内容有任何不理解可以翻看我之前的博客哦:吴恩达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'),#layer1Dense(units=15, activation = 'relu'),#layer2Dense(units=1, activation = 'sigmoid')#layer3])

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

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

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

为什么需要激活函数

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

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

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

相关文章

Linux安装Mysql(超详细,亲测)

1.下载MySQL的YUM仓库文件 创建一个文件夹(可以在任意目录建立一个文件夹,这边建议在home下创建) mkdir mysql 进入创建的mysql目录 cd mysql 下载MySQL的YUM仓库文件 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.no…

UDP 与 RTP 实现高效的音视频通信

协议确定了双方通信的规则和流程。在互联网的协议集中,有一种无连接的传输协议,被称为用户数据报协议(UDP,User Datagram Protocol)。 UDP 为应用程序提供了一种简单的数据传输方式,当我们谈到 UDP 应用场…

LeetCode 31 下一个排列

LeetCode 31 下一个排列 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如,arr [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的…

Keil5 配置jlink

1.先选好对应的芯片设备 之后步骤参考这个:MDK5 JLINK配置流程_keil5配置jlink仿真器步骤-CSDN博客

LeetCode 热题 100 | 二叉树(四)

目录 1 114. 二叉树展开为链表 2 105. 从前序与中序遍历序列构造二叉树 3 437. 路径总和 III 菜鸟做题(即将返校版),语言是 C 1 114. 二叉树展开为链表 题眼:展开后的单链表应该与二叉树 先序遍历 顺序相同。 而先序遍历就…

MBG(Mybatis-Generator)生成代码

目录 步骤: 1. 创建数据库表 2. 配置 MyBatis Generator 3. 运行 MyBatis Generator 4. 编写业务逻辑 在实际开发中,你会发现有很多重复的工作: 首先是PO对象,我们往往创建与数据库表字段一一对应的PO对象; 其次在Mapper里…

【电机仿真】HFI算法脉振高频电压信号注入观测器-PMSM无感FOC控制

【电机仿真】HFI算法脉振高频电压信号注入观测器-PMSM无感FOC控制 文章目录 前言一、脉振高频电压注入法简介(注入在旋转坐标系的d轴)1.旋转高频电压(电流)注入法2.脉振高频电压注入法 二、高频注入理论1.永磁同步电机的高频模型2…

java spring 01 IOC源码

01.spring 中的基础是IOC 中有一个方法 例子: 01. 02. 03. 这里是扩展方法,现在是空的 beanfactorypostprocessors: 国际化:(一般不管) 广播器: 监听器: 实例化&#xff1…

Day03-课后练习(流程控制_分支结构)(判断年、月、日是否合法,判断打鱼还是晒网,判断星座)

参考答案博客链接跳转 文章目录 巩固题1、从键盘输入一个整数,判断它是否是5的倍数2、从键盘输入一个字符,判断字符类型3、计算折扣后金额4、输出月份对应的英语单词5、计算今天是星期几 简答题拔高题(自愿)6、判断年、月、日是否…

使用Node.js和Vue.js构建全栈Web应用

随着互联网的迅速发展,Web应用程序的开发变得越来越复杂和多样化。为了满足用户不断变化的需求,全栈开发已成为一个备受关注的话题。在本篇博客中,我将介绍如何使用Node.js和Vue.js来构建全栈Web应用。 Node.js是一个基于Chrome V8引擎的Jav…

Vue.js+SpringBoot开发大学兼职教师管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容三、界面展示3.1 登录注册3.2 学生教师管理3.3 课程管理模块3.4 授课管理模块3.5 课程考勤模块3.6 课程评价模块3.7 课程成绩模块3.8 可视化图表 四、免责说明 一、摘要 1.1 项目介绍 大学兼职教师管理系统,旨…

TongWEB(东方通),部署WEB前后端项目步骤

我的系统: 银河麒麟桌面系统V10(SP1)(兆芯) 环境需要搭建好,什么redis,数据库等 1.准备项目前端war包 (我后端项目本就是war部署,jar转war自行百度一下吧) 进入前端打包好的dist文件夹,创建一个文件夹 WEB-INF ,再在 WEB-INF 里创建一个 web.xml 文件,文件内容: <web-…