首页 > 其他分享 >深度学习:(六)激活函数的选择与介绍

深度学习:(六)激活函数的选择与介绍

时间:2024-09-22 20:22:28浏览次数:8  
标签:函数 导数 align 0.01 ReLU 深度 激活

激活函数

之前使用的 a = σ ( z ) a=\sigma(z) a=σ(z) ,其中 σ (   ) \sigma(~) σ( ) 便是激活函数。

在神经网络中,不同层的激活函数可以不同。

在学习中,一般以 g ( z ) g(z) g(z) 来表示激活函数。

为什么需要(线性)激活函数?

不需要激活函数就等同于使用线性激活函数 g ( z ) = z g(z)=z g(z)=z (恒等激活函数),那么使用单个样本下的双层网络代码就为:
G i v e n    i n p u t    x :          a [ 0 ] = x          z [ 1 ] = W [ 1 ] a [ 0 ] + b [ 1 ]          a [ 1 ] = z [ 1 ]          z [ 2 ] = W [ 2 ] a [ 1 ] + b [ 2 ]          a [ 2 ] = z [ 2 ] \begin{align*} &Given~~input~~x:\\ &~~~~~~~~a^{[0]}=x\\ &~~~~~~~~z^{[1]}=W^{[1]}a^{[0]}+b^{[1]}\\ &~~~~~~~~a^{[1]}=z^{[1]}\\ &~~~~~~~~z^{[2]}=W^{[2]}a^{[1]}+b^{[2]}\\ &~~~~~~~~a^{[2]}=z^{[2]} \end{align*} ​Given  input  x:        a[0]=x        z[1]=W[1]a[0]+b[1]        a[1]=z[1]        z[2]=W[2]a[1]+b[2]        a[2]=z[2]​
将最后的结果展开,则 a [ 2 ] = z [ 2 ] = W [ 2 ] ( W [ 1 ] a [ 0 ] + b [ 1 ] ) + b [ 2 ] = ( W [ 2 ] W [ 1 ] ) a [ 0 ] + W [ 2 ] b [ 1 ] + b [ 2 ] a^{[2]}=z^{[2]}=W^{[2]}(W^{[1]}a^{[0]}+b^{[1]})+b^{[2]}=(W^{[2]}W^{[1]})a^{[0]}+W^{[2]}b^{[1]}+b^{[2]} a[2]=z[2]=W[2](W[1]a[0]+b[1])+b[2]=(W[2]W[1])a[0]+W[2]b[1]+b[2] ,其中 W [ 2 ] W [ 1 ] W^{[2]}W^{[1]} W[2]W[1] 可以看作 W ′ W^{'} W′ , W [ 2 ] b [ 1 ] + b [ 2 ] W^{[2]}b^{[1]}+b^{[2]} W[2]b[1]+b[2] 可以看作 b ′ b^{'} b′ ,最终可等效为 a [ 2 ] = W ′ a [ 0 ] + b ′ a^{[2]}=W^{'}a^{[0]}+b^{'} a[2]=W′a[0]+b′ 。

这说明,如果没有激活函数,或者是其他线性激活函数,那么无论层数多深,总会存在与之等效的单层神经网络,那么深度学习的意义就没有了,就变成了单纯的逻辑回归了。

特例

针对回归问题,输出层可以使用线性激活函数,而隐藏层依旧不可以。

sigma函数

g ( z ) = σ ( z ) g(z)=\sigma(z) g(z)=σ(z)

公式: a = σ ( z ) = 1 1 + e − z a=\sigma(z)=\frac{1}{1+e^{-z}} a=σ(z)=1+e−z1​ 。

函数图像:
在这里插入图片描述

梯度/斜率/导数:
g ′ ( z ) = d d z g ( z ) = 1 1 + e − z ( 1 − 1 1 + e − z ) = g ( z ) [ 1 − g ( z ) ] \begin{align*} g^{'}(z)=\frac{d}{dz}g(z)&=\frac{1}{1+e^{-z}}(1-\frac{1}{1+e^{-z}})\\ &=g(z)[1-g(z)] \end{align*} g′(z)=dzd​g(z)​=1+e−z1​(1−1+e−z1​)=g(z)[1−g(z)]​
导数图像:
在这里插入图片描述

使用:在**二元分类**问题上(输出层的结果为0~1),输出层的激活函数可以使用sigma函数。

禁用:在非二元分类问题上,禁用,即使是二元分类问题,隐藏层中也不能用。

缺点: z z z 非常大或者非常小时, σ ( z ) \sigma(z) σ(z) 函数的梯度(斜率)会很小,会形成梯度消失问题,从而拖慢梯度下降算法。

双曲正切函数

g ( z ) = t a n h ( z ) g(z)=tanh(z) g(z)=tanh(z)

公式: a = t a n h ( z ) = e z − e − z e z + e − z a=tanh(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}} a=tanh(z)=ez+e−zez−e−z​ 。

函数图像:
在这里插入图片描述

优点:可达到“数据中心化”的效果,即数据平均值接近 0 0 0 。

缺点:① 二元分类问题上(输出层的结果为0~1),输出层不能用。

​ ② z z z 非常大或者非常小时, t a n h ( z ) tanh(z) tanh(z) 函数的梯度(斜率)会很小,会形成梯度消失问题,从而拖慢梯度下降算法。

梯度/斜率/导数:
g ′ ( z ) = d d z g ( z ) = 1 − g 2 ( z ) \begin{align*} g^{'}(z)=\frac{d}{dz}g(z)=1-g^{2}(z) \end{align*} g′(z)=dzd​g(z)=1−g2(z)​
导数图像:
在这里插入图片描述

线性修正单元(ReLU)

g ( z ) = R e L U ( z ) g(z)=ReLU(z) g(z)=ReLU(z)

现在已经变成隐层激活函数的默认选择了。

公式: a = R e L U ( z ) = m a x { 0 , z } a=ReLU(z)=max\{0,z\} a=ReLU(z)=max{0,z} 。

函数图像:
在这里插入图片描述

P.S.: z = 0 z=0 z=0 这一点的导数不存在,但在编程中,刚好 z = 0 z=0 z=0 的概率非常之低,所以不用担心。或者自己可以给 z = 0 z=0 z=0 点的导数赋值。

**注意:**ReLU并不是线性激活函数,其导数并不是在全域都为恒定值。

梯度/斜率/导数:
g ′ ( z ) = { 0 , if  z < 0 1 , if  z ≥ 0 \begin{align*} g^{'}(z)=\begin{cases} 0, & \text {if $z<0$}\\ 1, & \text {if $z≥0$}\\ \end{cases} \end{align*} g′(z)={0,1,​if z<0if z≥0​​
z = 0 z=0 z=0 处的导数,可以人为定义成 1 1 1 或 0 0 0 。

导数图像:
在这里插入图片描述

带泄露ReLU(Leaky ReLU)

g ( z ) = L e a k y   R e L U ( z ) g(z)=Leaky~ReLU(z) g(z)=Leaky ReLU(z)

公式: a = L e a k y   R e L U ( z ) = m a x { b ⋅ z , z } a=Leaky~ReLU(z)=max\{b·z,z\} a=Leaky ReLU(z)=max{b⋅z,z} , b b b 可以取 0.01 0.01 0.01 。

函数图像:
在这里插入图片描述

梯度/斜率/导数:
g ′ ( z ) = { 0.01 , if  z < 0 1 , if  z ≥ 0 \begin{align*} g^{'}(z)=\begin{cases} 0.01, & \text {if $z<0$}\\ 1, & \text {if $z≥0$}\\ \end{cases} \end{align*} g′(z)={0.01,1,​if z<0if z≥0​​
z = 0 z=0 z=0 处的导数,可以人为定义成 1 1 1 或 0.01 0.01 0.01 。

导数图像:
在这里插入图片描述

标签:函数,导数,align,0.01,ReLU,深度,激活
From: https://blog.csdn.net/qq_51409113/article/details/142442844

相关文章

  • string类(上)(解析各种成员函数)
    文章目录1.为什么要学习string类2.标准库中的string类2.1构造函数2.2成员函数2.3与内存相关的成员函数1.`capacity()`2.`resize()`3.`reserve()`2.4其他函数的简单示例4.`insert()`和`assign()`5.`at()`和`operator[]`6.`erase()`2.5string迭代器2.7示例:......
  • 深度解析SAP业务技术云平台的优势
    在当今数字化快速发展的时代,企业对于高效、灵活且安全的业务解决方案的需求日益增长。SAP业务技术云平台应运而生,它为企业带来了诸多显著的优势。 一、集成性优势1.全面的业务功能集成   SAP业务技术云平台集成了众多关键的业务功能,如财务、客户关系管理、项目管理、人员......
  • C++中模板的初级使用函数模板(刚刚接触模板概念的小白也能明白)
    文章目录模板分类函数模板函数模板的原理函数模板基本语法——typename以及class简单的函数模板多类型模板参数class和typename的选择类模板模板分类模板的核心思想是让编译器在编译时生成适用于具体类型的代码,这个过程称为模板实例化。C++中的模板分为两种:......
  • 深度剖析智能养老设备市场分析:现状、趋势与前景
    本文深入探讨了智能养老设备市场的现状、趋势与前景。通过对市场的全面分析,揭示了当前智能养老设备市场所面临的问题以及未来的发展机遇。同时,合理分布了相关关键词,为读者提供了有价值且信息丰富的内容。一、引言人口老龄化的加剧,智能养老设备市场逐渐成为关注的焦点。智能养老......
  • 【C++基础知识——std::visit函数理解】
    1.std::visit函数的定义std::visit通常用于访问std::variant类型的对象。std::variant是C++17引入的一种类型安全的联合体,可以存储多个类型中的一个。visit函数允许你通过一个访问者(visitor)来访问std::variant中存储的值,而不需要显式地检查存储的类型。2.示例#......
  • 地统计常用公式与概念介绍:插值、平稳假设、变异函数、块金、克里格、线性无偏等
      本文对插值、平稳假设、变异函数、克里格等常用的地学计算概念加以介绍,并对相关公式进行推导。1引言  我们由地学计算的几个基本概念入手,对相关理论方面的内容加以一定了解。  需要注意的是,以下内容如果单独来看或许有些不好理解,但一旦将其与实际应用结合,便会豁然开朗......
  • 神经网络:激活函数选择
        结论直接看——激活函数的选择方式        神经网络主体分为输入层、隐藏层和输出层三个模块。一般情况下,输入层只负责对数据的输入,并不做任何的变换。故而,激活函数的选择只涉及隐藏层和输出层两个模块。     神经网络主体图激......
  • 高等数学 3.6 函数图像的描绘
    利用导数描绘函数图形的一般步骤如下:(1)确定函数\(y=f(x)\)的定义域及函数所具有的某些特性(如奇偶性、周期性等),并求出函数的一阶导数\(f^{'}(x)\)和二阶导数\(f^{''}(x)\);(2)求出一阶导数\(f^{'}(x)\)和二阶导数\(f^{''}(x)\)在函数定义域内的全部零点,并求出函数\(f(x)......
  • 【重学 MySQL】三十七、聚合函数
    【重学MySQL】三十七、聚合函数基本概念5大常用的聚合函数COUNT()SUM()AVG()MAX()MIN()使用场景注意事项示例查询聚合函数(AggregateFunctions)在数据库查询中扮演着至关重要的角色,特别是在处理大量数据时。它们能够对一组值执行计算,并返回一个汇总后的单......
  • C++容器list底层迭代器的实现逻辑~list相关函数模拟实现
    目录1.两个基本的结构体搭建2.实现push_back函数3.关于list现状的分析(对于我们如何实现这个迭代器很重要)3.1和string,vector的比较3.2对于list的分析3.3总结4.迭代器类的封装5.list容器里面其他函数的实现6.个人总结7.代码附录1.两个基本的结构体搭建首先就是我......