【深度学习_TensorFlow】激活函数

写在前面

上篇文章我们了解到感知机使用的阶跃函数和符号函数,它们都是非连续,导数为0的函数:

在这里插入图片描述

建议回顾上篇文章,本篇文章将介绍神经网络中的常见激活函数,这些函数都是平滑可导的,适合于梯度下降算法。


写在中间

激活函数是做什么的?


激活函数(Activation Function)是神经网络中的一个重要组成部分,主要用于将神经元的输入信息进行非线性变换,从而引入非线性特性。

为什么要使用激活函数?


如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是线性组合,这种情况就是最原始的感知机。将来归纳出的方程就如图a所示,要实现图b的效果就只能将线性模型嵌套非线性函数转换为非线性函数。

在这里插入图片描述

我们把这个非线性函数称为激活函数(Activation Function),用𝜎表示:

o = σ ( W x + b ) o=\sigma{(Wx + b)} o=σ(Wx+b)

这里的𝜎代表了某个具体的非线性激活函数,如 Sigmoid 函数、ReLU 函数

在这里插入图片描述

表达能力


模型的表达能力偏弱,就可以通过堆叠多次变换来增加其表达能力

把第一层神经元的输出值 h 1 h_1 h1作为第二层神经元模型的输入,把第二层神经元的输出 h 2 h_2 h2作为第三层神经元的输入,最后一层神经元的输出作为模型的输出,使用ReLU激活函数举例

h 1 = R e L U ( W x 1 + b 1 ) h_1=ReLU(Wx_1 + b_1) h1=ReLU(Wx1+b1)
h 2 = R e L U ( W 2 h 1 + b 2 ) h_2 = ReLU(W_2h_1 + b_2) h2=ReLU(W2h1+b2)
o = W 3 h 2 + b 3 o = W_3h_2 + b_3 o=W3h2+b3


激活函数介绍

一、Sigmoid

( 1 )简单介绍

此函数的定义如下

S i g m o i d ( x ) ≜ 1 1 + e − x \mathrm{Sigmoid}(x)\triangleq\frac1{1+\mathrm{e}^{-x}} Sigmoid(x)1+ex1

在这里插入图片描述

在深度学习中的优点如下:

  • 它的值域为(0, 1),能够把𝑥 ∈ 𝑅的输入“压缩”到𝑥 ∈ (0,1)区间,和概率的分布范围[0,1]契合,可以通过 Sigmoid 函数将输出转译为概率输出

  • Sigmoid 函数连续可导,可以直接利用梯度下降算法优化网络参数


( 2 )简单实现

如何在TensorFlow中使用这个函数呢,其实一行代码就可以搞定了

tf.nn.sigmoid(x) # 通过 Sigmoid 函数

二、ReLU

( 1 )简单介绍

在 ReLU激活函数提出之前,Sigmoid 函数通常是神经网络的激活函数首选。但是 Sigmoid 函数在输入值较大或较小时容易出现梯度值接近于 0 的现象,网络参数长时间得不到更新,导致训练不收敛或停滞不动的现象发生。

此函数的定义如下:

ReLU ⁡ ( x ) ≜ max ⁡ ( 0 , x ) \operatorname{ReLU}(x)\triangleq\max(0,x) ReLU(x)max(0,x)

在这里插入图片描述

可以看到,ReLU 对小于 0 的值全部抑制为 0;对于正数则直接输出


( 2 )函数实现

函数的调用同样简单

tf.nn.relu(x)

三、LeakyReLU

( 1 )简单介绍

ReLU 函数在𝑥 < 0时导数值恒为 0,也可能会造成梯度弥散现象,为了克服这个问题,LeakyReLU 函数被提出,此函数的定义为:

LeakyReLU ≜ { x x ≥ 0 p x x < 0 \text{LeakyReLU}\triangleq\left\{\begin{matrix}x&x\geq0\\px&x<0\end{matrix}\right. LeakyReLU{xpxx0x<0

在这里插入图片描述

其中𝑝为用户自行设置的某较小数值的超参数,如 0.02 等。当𝑝 = 0时,LeayReLU 函数退化为ReLU 函数;当𝑝 ≠ 0时,𝑥 < 0处能够获得较小的导数值𝑝,从而避免出现梯度弥散现象。

( 2 )函数实现

tf.nn.leaky_relu(x, alpha=0.02) 

四、Tanh

( 1 )简单介绍

Tanh 函数能够将𝑥 ∈ 𝑅的输入“压缩”到(−1,1)区间,其函数的定义为

tanh ⁡ ( x ) = ( e x − e − x ) ( e x + e − x ) = 2 ⋅ s i g m o i d ( 2 x ) − 1 \begin{aligned}\tanh(x)&=\frac{(\mathrm{e}^x-\mathrm{e}^{-x})}{(\mathrm{e}^x+\mathrm{e}^{-x})}=2\cdot\mathrm{sigmoid}(2x)-1\end{aligned} tanh(x)=(ex+ex)(exex)=2sigmoid(2x)1

在这里插入图片描述


( 2 )代码实现

tf.nn.tanh(x) 

激活函数输出范围

了解了上面的函数之后,不知你是否有这样的疑问,这么多种函数,在进行网络构建的时候究竟如何选择?

其实这其中还是有些门道的,主要根据数据的范围和构建网络的目的来选择,具体情况还要结合实际问题试验:

例如:

  • 输出区间为[0, 1],在网络模型主要进行二分类(猫狗识别分类)、图片生成(像素归一化),就可以使用类似Sigmoid()一类的函数。

  • 输出区间为[0, 1],且所有数据的概率和为1,网络模型主要进行多分类问题(mnist手写数字识别),就可以使用类似Softmax()一类的函数。

  • 输出区间为[-1, 1],就可以使用Tanh() 函数。

  • 输出区间在某个段内,网络模型进行年龄预测、股票走势的预测,更倾向于回归问题,ReLU函数可能效果较好。


写在最后

👍🏻点赞,你的认可是我创作的动力!
⭐收藏,你的青睐是我努力的方向!
✏️评论,你的意见是我进步的财富!

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

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

相关文章

【知识产权】专利的弊端

接上篇【知识产权】著作权的作用_qilei2010的博客-CSDN博客。 ​ 1 专利的分类 首先,专利分为:发明专利、实用新型专利、外观设计专利。这里要说明的是专利的不同种类在不同的国家都是有不同规定的,并不是所有国家和地区都是分成这三类。 >国家法律法规数据库 >中华…

redis入门2-命令

Redis的基本数据类型 redis的基本数据类型&#xff08;value&#xff09;: string,普通字符串 hash&#xff08;哈希&#xff09;,适合存储对象 list(列表),按照插入顺序排序&#xff0c;可以由重复的元素 set(无序集合)&#xff0c;没有重复的元素 sorted set(有序集合)&…

Spring集成Web

目录 1、简介 2、监听器 3、Spring提供的listener 3.1、xml 3.2、配置类 3.3、WebApplicationContextUtils 3.4、说明 4、自己复现的listener 4.1、ContextLoaderListener 4.2、WebApplicationContextUtils 4.3、Web调用 ⭐作者介绍&#xff1a;大二本科网络工程专业…

JVM相关知识

JVM主要有堆、方法区、虚拟机栈、本地方法栈、程序计数器组成 线程私有区域&#xff1a; 程序计数器&#xff1a;字节码执行的都有一个编号&#xff0c;就是程序计数器&#xff0c;解释器按这个计数器执行字码&#xff0c;将字节码转换为机器码给cpu运行。其二就是多线程中&a…

【C++】开源:ncurses终端TUI文本界面库

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍ncurses终端文本界面库。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下…

【计算机视觉】干货分享:Segmentation model PyTorch(快速搭建图像分割网络)

一、前言 如何快速搭建图像分割网络&#xff1f; 要手写把backbone &#xff0c;手写decoder 吗&#xff1f; 介绍一个分割神器&#xff0c;分分钟搭建一个分割网络。 仓库的地址&#xff1a; https://github.com/qubvel/segmentation_models.pytorch该库的主要特点是&#…

运输层---概述

目录 运输层主要内容一.概述和传输层服务1.1 概述1.2 传输服务和协议1.3 传输层 vs. 网络层1.4 Internet传输层协议 二. 多路复用与多路分解&#xff08;解复用&#xff09;2.1 概述2.2 无连接与面向连接的多路分解&#xff08;解复用&#xff09;2.3面向连接的多路复用*2.4 We…

STM32刷Micropython固件参考指南

STM32刷Micropython固件指南 其实刷固件和普通的程序下载烧录无多大的差异&#xff0c;主要是其他因数的影响导致刷固件或刷完固件无法运行的情况和相关问题。 &#x1f4d1;刷固件教程 固件下载。目前所支持的stm32型号有这些&#xff1a; stm32f0, stm32f4, stm32f7, stm32g…

基于C#的窗体阴影效果方案 - 开源研究系列文章

最近在研究C#的Winform窗体的效果&#xff0c;上次介绍了窗体动画效果的博文( 基于C#的无边框窗体动画效果的完美解决方案 - 开源研究系列文章 )&#xff0c;这次将窗体阴影效果的方案进行一个介绍。 找了一下度娘&#xff0c;具体窗体阴影效果就两种方法&#xff1a;直接绘制和…

Spring:JDBCTemplate

JDBCTemplate 概述 概述 JDBC&#xff08;Java DataBase Connectivity&#xff0c;Java 数据库连接&#xff09;&#xff0c; 一 种用于执行 SQL 语句的 Java API&#xff08;Application Programming Interface &#xff0c; 应用程序设计接口 &#xff09;&#xff0c;可以为…

数学知识(二)

一、裴蜀定理 对于任意整数a,b&#xff0c;一定存在非零整数x,y&#xff0c;使得 ax by gcd(a,b) #include<iostream> #include<algorithm>using namespace std;int exgcd(int a,int b,int &x,int &y) {if(!b){x 1,y 0;return a;}int d exgcd(b,a %…

大数据Flink(五十五):Flink架构体系

文章目录 Flink架构体系 一、 Flink中的重要角色 二、Flink数据流编程模型 三、Libraries支持