当前位置: 首页 > news >正文

【深度学习】激活函数

上一章——认识神经网络

新课P54介绍了强人工智能概念,P55到P58解读了矩阵乘法在代码中的应用,P59,P60介绍了在Tensflow中实现神经网络的代码及细节,详细的内容可以自行观看2022吴恩达机器学习Deeplearning.ai课程,专栏中就不再赘述。

文章目录

  • 激活函数的替代方案
    • Sigmoid函数
    • ReLU函数
    • 线性函数
  • 激活函数的选择
    • Output层
    • 隐藏层
  • 为什么模型需要激活函数


激活函数的替代方案

Sigmoid函数

在这里插入图片描述
在逻辑回归中,我们使用的激活函数是Sigmoid函数,又称逻辑函数,它能预测(0,1)区间内的值,因此我们常常会在二分问题中使用。

ReLU函数

在这里插入图片描述
如果我们想要取到更大的正值,我们可以使用这个激活函数来代替,如图右边所示。
这个函数称为ReLU函数(Rectified Linear Unit),即修正线性单元,ReLU:g(z)=max(0,z)ReLU:g(z)=max(0,z)ReLU:g(z)=max(0,z)
其中当z<0z<0z<0时,g(z)=0g(z)=0g(z)=0,z>0z>0z>0时,g(z)=zg(z)=zg(z)=z
在实际工作中,ReLU函数的使用会更加广泛一些,

线性函数

在这里插入图片描述
线性激活函数g(z)=zg(z)=zg(z)=z,我们也可以称它没有使用任何激活函数,因为输入量为z,输出激活量a=g(z)=za=g(z)=za=g(z)=z,实际上没有任何变化。


激活函数的选择

激活函数如何选择取决于你需要一个什么样的输出量,我们以上面提到的几种激活函数为例

Output层

在这里插入图片描述

如果你要选择输出层的激活函数,那么最后得到的就是想要预测的结果,假如你想要预测的结果是一个二分问题,那么其预测值应当是处于0,1之间的,我们会选择逻辑函数;
假如你是要预测股票的涨跌,那么股票的跌可以视为负数,涨视为正数,因此你的输出层激活函数需要有正有负,我们就会选择线性激活函数,使得它有负值。
假设你要预测房价,那么房价一定不会是负数,我们不接受负值的出现,因此你可以选择ReLU函数来进行预测。
以上只是举我们讲过的几种激活函数为例,总而言之需要根据实际要求来选择激活函数,
以上仅是针对输出层,并不对隐藏层适用。

隐藏层

在这里插入图片描述在上一节介绍神经网络的时候,隐藏层使用的是Sigmoid函数,然而实际上ReLU或者其他函数更好,

  • ReLU函数的计算比Sigmoid更简单,更快速
  • ReLU函数的梯度下降速度比Sigmoid更快

如果仔细观察Sigmoid函数的代价函数(上图蓝色部分函数),会发现Sigmoid的函数形状并不是很适合梯度下降,并且随着Z的增大或缩小,Sigmoid函数的图像会趋于平坦,这就导致了dJdw≈0\frac{dJ}{dw}≈0dwdJ0,从而导致了梯度下降速度会越来越慢,而ReLU函数不会有这样的问题。一般来说,大部分情况下在隐藏层用ReLU函数都会更好。


为什么模型需要激活函数

我们的模型能不能不使用任何激活函数(仅线性激活函数)?答案是否定的,首先,从建立神经网络的目的来看,设置激活函数的目的就是为了向神经元添加非线性的输入来实现更复杂的计算,如果不使用激活函数,那么也没必要使用神经网络。

如果神经网络不使用激活函数,会发生什么情况?如下图所示
在这里插入图片描述

假设我们的神经网络的隐藏层和输出层使用的全部都是线性激活函数,那么
a[1]=w1[1]x+b1[1]a^{[1]}=w^{[1]}_1x +b^{[1]}_1a[1]=w1[1]x+b1[1], a[2]=w1[2]a[1]+b1[2]a^{[2]}=w^{[2]}_1a^{[1]} +b^{[2]}_1a[2]=w1[2]a[1]+b1[2]
我们将a[2]a^{[2]}a[2]式子中的a[1]a^{[1]}a[1]替换,就能得到a[2]=w1[2](w1[1]x+b1[1])+b1[2]a^{[2]}=w^{[2]}_1(w^{[1]}_1x +b^{[1]}_1) +b^{[2]}_1a[2]=w1[2](w1[1]x+b1[1])+b1[2]
展开后得到a[2]=(w1[2]w1[1])x+w1[2]b1[1]+b1[2]a^{[2]}=(w^{[2]}_1w^{[1]}_1)x +w^{[2]}_1b^{[1]}_1 +b^{[2]}_1a[2]=(w1[2]w1[1])x+w1[2]b1[1]+b1[2],将(w1[2]w1[1])设为w,(w1[2]b1[1]+b1[2])设为b就得到了a[2]=wx+b(w^{[2]}_1w^{[1]}_1)设为w,(w^{[2]}_1b^{[1]}_1 +b^{[2]}_1)设为b就得到了 a^{[2]}=wx +b(w1[2]w1[1])设为w(w1[2]b1[1]+b1[2])设为b就得到了a[2]=wx+b
也就是说,经过了两层的线性函数的计算,实际上也就相当于进行一次线性函数计算,那么n层线性激活函数的神经网络实际只相当于进行一次线性函数计算。也就是说如果不采用任何激活函数,整个神经网络和线性函数没有差别。所以,如果不使用激活函数,神经网络并不能提升进行复杂计算的能力,整个模型相当于逻辑回归。

在未来的学习中,我们也会接触到其他的激活函数,理解激活函数的作用,选择适宜的激活函数,将对我们神经网络的搭建具有重大意义。


下一章——多分类问题

http://www.lryc.cn/news/9758.html

相关文章:

  • 【新2023】华为OD机试 - 数字的排列(Python)
  • [oeasy]python0085_ASCII之父_Bemer_COBOL_数据交换网络
  • volatile,内存屏障
  • 【ESP 保姆级教程】玩转emqx MQTT篇① —— 系统主题、延迟发布、服务器配置预算、常见问题
  • 第48讲:SQL优化之ORDER BY排序查询的优化
  • [Datawhale][CS224W]图机器学习(三)
  • 2023版最新最强大数据面试宝典
  • CSS 中的 BFC 是什么,有什么作用?
  • 总结在使用 Git 踩过的坑
  • 从 HTTP 到 gRPC:APISIX 中 etcd 操作的迁移之路
  • 【C语言每日一题】——倒置字符串
  • Native扩展开发的一般流程(类似开发一个插件)
  • 【新解法】华为OD机试 - 任务调度 | 备考思路,刷题要点,答疑,od Base 提供
  • Spring3定时任务
  • 数据库版本管理工具Flyway应用研究
  • 更换 Ubuntu 系统 apt 命令安装软件源
  • 2023年可见光通信(LiFi)研究新进展
  • Greenplum的两阶段提交
  • 多元回归分析 | CNN-BiLSTM卷积双向长短期记忆神经网络多输入单输出预测(Matlab完整程序)
  • git命令行推送本地分支到远程仓库
  • 在vscode中使用Typescript并运行
  • 【C++提高编程】C++全栈体系(十九)
  • Java版电能表协议解析源码(DL/T645-2007)、Modbus串口虚拟工具、网络串口调试工具分享
  • 2023美赛选题建议 美国大学生数学建模竞赛ABCDEF题
  • 2023,想跳槽的可以再等等
  • Java之滑动窗口详解
  • Webpack(应用一:基本使用,只需六步骤)
  • 【Python小游戏】智商爆棚,推荐一款益智类亲子娱乐首选—某程序员老爸:成语编成填空“游戏”,贪玩女儿1天牢记500词(厉害了我的Python)
  • 使用web3连接Georli测试网络
  • Python uWSGI 的安装配置