精华内容
下载资源
问答
  • 常见激活函数为什么要使用激活函数?激活函数具有的特性激活函数的类别饱和激活函数Sigmoid激活函数Tanh(双曲正切函数)激活函数Sigmoid、Tanh激活函数引发的常见问题解决非饱和激活函数ReLU激活函数Leaky ReLU等变种...

    为什么要使用激活函数?

    激活函数用来怎加非线性因素的,提高模型拟合能力。如果不存在激活函数,神经网络的每一层的输入都是对前面输入的线性变化,就算把网络加到很深也无法去拟合任意函数的。

    激活函数具有的特性

    虽然我们常用激活函数不是很多,那是否只有这些函数能作为激活函数呢?我们从神经网络的工作过程中看,激活函数具有什么样的性质能够更好的帮助神经网络的训练。(借鉴Hengkai Guo添加链接描述

    1. 非线性:数,激活函数必须是非线性的。
    2. 计算简单:神经元都要经过激活运算的,在随着网络结构越来越庞大、参数量越来越多,激活函数如果计算量小就节约了大量的资源。
    3. f ( x ) ≈ x {\rm{f}}(x) \approx x f(x)x:在向前传播时,如果参数的初始化是随机量的最小值,神经网络的训练很高效。在训练的时候不会出现输出的幅度随着不断训练发生倍数的增长,是网络更加的稳定,同时也使得梯度更容易回传。
    4. 可微:因为神经网络要通过反向传播来跟新参数,如果激活函数不可微,就无法根据损失函数对权重求偏导,也就无法更新权重。传统的激活函数如sigmoid等满足处处可微。对于分段线性函数比如ReLU,只满足几乎处处可微(即仅在有限个点处不可微)。对于SGD算法来说,由于几乎不可能收敛到梯度接近零的位置,有限的不可微点对于优化结果不会有很大影响1
    5. 非饱和性:(饱和函数有Sigmoid、Tanh等,非饱和函数ReLU等)例如Sigmoid函数求导以后的值很小,两端的值接近为零在反向传播的时候,如果网络的层次过大便会发生梯度消失的问题,使得浅层的参数无法更新。(梯度消失后面会介绍)
    6. 单调性:当激活函数单调时,单层网络保证是凸函数。
    7. 输出值的范围: 当激活函数输出值是有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是无限的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的Learning Rate2

    激活函数的类别

    饱和激活函数

    Sigmoid激活函数

    1. 函数图像和公式
    我们从图像和公式上结合上面分析的激活函数的特性来看看Sigmoid激活函数的优点和缺点。
    f ( x ) = 1 1 + e − x {\rm{f}}(x) = \frac{1}{{1 + {e^{ - x}}}} f(x)=1+ex1

    Sigmoid
    2. 函数性质

    • 非线性函数
    • 求导简单,函数求导后为 f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) {f'}(x) = f(x)(1 - f(x)) f(x)=f(x)(1f(x))
    • 不满足 f ( x ) ≈ x {\rm{f}}(x) \approx x f(x)x
    • 在定义域内处处可导
    • 饱和激活函数
    • 函数为单调函数
    • 函数的输出区间在(0,1)之间,函数定义域为负无穷到正无穷
      3. 函数倒数图像和导数

    Sigmoid导数图像和原图像
    4. 优点和缺点

    • 优点:平滑、容易求导
    • 缺点:
      • 激活函数运算量大(包含幂的运算)
      • 函数输出不关于原点对称,使得权重更新效率变低,同时这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入,随着网络的加深,会改变数据的原始分布
      • 由图像知道导数的取值范围[0,0.25],非常的小。在进行反向传播计算的时候就会乘上一个很小的值,如果网络层次过深,就会发生“梯度消失”的现象了,无法更新浅层网络的参数了。

    Tanh(双曲正切函数)激活函数

    1. 函数图像和公式

    函数图像:
    Tanh
    函数公式:
    f ( x ) = ( e x − e − x ) ( e x + e − x ) f(x) = \frac{{({e^x} - {e^{ - x}})}}{{({e^x} + {e^{ - x}})}} f(x)=(ex+ex)(exex)

    2. 函数倒数图像和导数

    导数公式:
    f ′ ( x ) = 1 − ( f ( x ) ) 2 {f'}(x) = 1 - {(f(x))^2} f(x)=1(f(x))2
    倒数图像:
    Tanh导数图像
    3. 函数性质

    我们从图像和公式上结合上面分析的激活函数的特性来看看Tanh激活函数的优点和缺点,Tanh函数类似于将Sigmoid函数拉伸和向下平移的结果。

    • 非线性函数(从图像上来看是一个分段线性函数,所有的负值为0,正值不变)
    • 求导简单, f ′ ( x ) = 1 − ( f ( x ) ) 2 {f'}(x) = 1 - {(f(x))^2} f(x)=1(f(x))2
    • 不满足 f ( x ) ≈ x {\rm{f}}(x) \approx x f(x)x
    • 饱和激活函数
    • 函数为单调函数
    • 函数的输出区间在(-1,1)之间,函数定义域为负无穷到正无穷

    4. 优点和缺点

    • 优点:
      • 解决了Sigmoid的输出不关于零点对称的问题
      • 也具有Sigmoid的优点平滑,容易求导
    • 缺点:
      • 激活函数运算量大(包含幂的运算
      • Tanh的导数图像虽然最大之变大,使得梯度消失的问题得到一定的缓解,但是不能根本解决这个问题

    Sigmoid、Tanh激活函数引发的常见问题解决

    先针对自然语言处理领域常用的RNN和LSTM网络来说
    1. RNN 中为什么要采用 tanh,而不是 ReLU 作为激活函数?
    (引用何之源​的回答)添加链接描述
    2. 为什么LSTM模型中既存在sigmoid又存在tanh两种激活函数?
    (引用知乎问题添加链接描述

    非饱和激活函数

    ReLU激活函数

    ReLU函数代表的的是“修正线性单元”,它是带有卷积图像的输入x的最大函数(x,o)。ReLU函数将矩阵x内所有负值都设为零,其余的值不变

    1. 函数图像和公式
      公式:
      ReLu: f ( x ) = max ⁡ ( 0 , x ) f(x) = \max (0,x) f(x)=max(0,x)
      函数图像
      ReLu
      2.激活函数的性质
    • 非线性函数(虽然单侧是线性函数)
    • 计算简单是真的简单(不管是在神经网络向前计算过程中还是反向传播的时候)
    • 右侧满足 f ( x ) ≈ x {\rm{f}}(x) \approx x f(x)x
    • 右侧为单调函数
    • 输出为(0,+无穷)
    1. 优点和缺点
    1. 对于ReLU神经元“死亡”解决方案
      • 对函数进行优化,也就有了后面介绍的函数Leaky ReLU等
      • 采用较小的学习速率
      • 采用 momentum based 优化算法,动态调整学习率
    2. ReLu使用中疑问

    Leaky ReLU等变种激活函数

    1. 函数图像和公式

    Leaky ReLu
    公式: f ( x ) = max ⁡ ( α x , x ) f(x) = \max (\alpha x,x) f(x)=max(αx,x)
    函数图像跟之前的ReLu图像很像,同样的PReLU和ELU激活函数也是在ReLu的基础上针对ReLU在训练时神经元容易死亡做出了优化,基本的思路就是让函数小于0的部分不直接为0,而是等于一个很小的数,使得负轴的信息不至于完全丢弃。

    • 在残差网络中激活函数relu的使用,为什么不使用leakyrelu、rrule等改进后的激活函数呢?详细见链接
    • 为什么在生成对抗网络(GAN)中,隐藏层中使用leaky relu比relu要好?详细见链接
    1. https://zhuanlan.zhihu.com/p/73214810
    2. https://zhuanlan.zhihu.com/p/71882757

    1. Goodfellow I, Bengio Y, Courville A. Deep learning[M]. MIT press, 2016. ↩︎

    2. https://zhuanlan.zhihu.com/p/28109972 ↩︎

    展开全文
  • 四种常见激活函数

    2021-01-16 23:15:13
    Relu激活函数的解析式 Relu函数及其导数的图像如下图所示: Relu激活函数优点: 当输入 x<0 时,输出为 0,当 x> 0 时,输出为 x。该激活函数使网络更快速地收敛。它不会饱和,即它可以对抗梯度消失问题,...

    原文

    1、relu函数

    Relu激活函数的解析式
    在这里插入图片描述
    Relu函数及其导数的图像如下图所示:
    在这里插入图片描述
    Relu激活函数优点:
    当输入 x<0 时,输出为 0,当 x> 0 时,输出为 x。该激活函数使网络更快速地收敛。它不会饱和,即它可以对抗梯度消失问题,至少在正区域(x> 0 时)可以这样,因此神经元至少在一半区域中不会把所有零进行反向传播。由于使用了简单的阈值化(thresholding),ReLU 计算效率很高。
    Relu激活函数缺点:
    (1)不以零为中心:和 Sigmoid 激活函数类似,ReLU 函数的输出不以零为中心。
    (2)前向传导(forward pass)过程中,如果 x < 0,则神经元保持非激活状态,且在后向传导(backward pass)中「杀死」梯度。这样权重无法得到更新,网络无法学习。当 x = 0 时,该点的梯度未定义,但是这个问题在实现中得到了解决,通过采用左侧或右侧的梯度的方式。

    2、sigmoid函数

    Sigmoid激活函数的解析式
    在这里插入图片描述
    sigmoid函数及其导数的图像如下图所示:

    在这里插入图片描述

    sigmoid函数也叫Logistic函数,用于隐藏层的输出,输出在(0,1)之间,它可以将一个实数映射到(0,1)的范围内,可以用来做二分类。常用于:在特征相差比较复杂或是相差不是特别大的时候效果比较好。该函数将大的负数转换成0,将大的正数转换为1。
    sigmoid函数的缺点:

    (1)梯度消失:Sigmoid 函数趋近 0 和 1 的时候变化率会变得平坦,也就是说,Sigmoid 的梯度趋近于 0。神经网络使用 Sigmoid 激活函数进行反向传播时,输出接近 0 或 1 的神经元其梯度趋近于 0。这些神经元叫作饱和神经元。因此,这些神经元的权重不会更新。此外,与此类神经元相连的神经元的权重也更新得很慢。该问题叫作梯度消失。因此,想象一下,如果一个大型神经网络包含 Sigmoid 神经元,而其中很多个都处于饱和状态,那么该网络无法执行反向传播。
    (2)不以零为中心:Sigmoid 输出不以零为中心的。
    (3)计算成本高昂:exp() 函数与其他非线性激活函数相比,计算成本高昂。

    3、tanh函数

    tanh激活函数的解析式
    在这里插入图片描述
    tanh函数及其导数的图像如下图所示:

    在这里插入图片描述
    与 Sigmoid 函数类似,Tanh 函数也使用真值,但 Tanh 函数将其压缩至-1 到 1 的区间内。与 Sigmoid 不同,Tanh 函数的输出以零为中心,因为区间在-1 到 1 之间。你可以将 Tanh 函数想象成两个 Sigmoid 函数放在一起。在实践中,Tanh 函数的使用优先性高于 Sigmoid 函数。负数输入被当作负值,零输入值的映射接近零,正数输入被当作正值。

    优点:它解决了Sigmoid函数的不是zero-centered输出问题。
    缺点:梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在。
    为了解决梯度消失问题,我们来讨论另一个非线性激活函数——修正线性单元(rectified linear unit,ReLU),该函数明显优于前面两个函数,是现在使用最广泛的函数。

    4、Leaky Relu函数

    Leaky Relu激活函数的解析式
    在这里插入图片描述
    Leaky Relu函数及其导数的图像如下图所示:
    在这里插入图片描述
    Leaky ReLU 的概念是:当 x < 0 时,它得到 0.01 的正梯度。

    优点:该函数一定程度上缓解了 dead ReLU 问题。
    缺点:
    (1)使用该函数的结果并不连贯。尽管它具备 ReLU 激活函数的所有特征,如计算高效、快速收敛、在正区域内不会饱和。
    (2)Leaky ReLU 可以得到更多扩展。不让 x 乘常数项,而是让 x 乘超参数,这看起来比 Leaky ReLU 效果要好。该扩展就是 Parametric ReLU。

    展开全文
  • 常见激活函数及其Python代码实现阶跃函数sigmoid函数relu函数阶跃函数 VS sigmoid函数softmax函数交叉熵函数 阶跃函数 f(x)={1x≥00x<0 f(x)=\left\{ \begin{aligned} 1 & & x\geq 0 \\ 0 & & x&...

    阶跃函数

    f ( x ) = { 1 x ≥ 0 0 x < 0 f(x)=\left\{ \begin{aligned} 1 & & x\geq 0 \\ 0 & & x<0 \\ \end{aligned} \right. f(x)={10x0x<0

    import numpy as np
    import matplotlib.pylab as plt
    
    def step_function(x):
        return np.array(x > 0, dtype=np.int)
    
    X = np.arange(-5.5, 5.0, 0.1)
    Y = step_function(X)
    plt.plot(X, Y)
    plt.ylim(-0.1, 1.1)
    plt.show()
    

    在这里插入图片描述

    sigmoid函数

    f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+ex1

    def sigmoid(x):
        return 1 / (1 + np.exp(-x))
    
    X = np.arange(-5.0, 5.0, 0.1)
    Y = sigmoid(X)
    plt.plot(X, Y)
    plt.ylim(-0.1, 1.1)
    plt.show()
    

    在这里插入图片描述

    relu函数

    f ( x ) = { x x ≥ 0 0 x < 0 f(x)=\left\{ \begin{aligned} x & & x\geq 0 \\ 0 & & x<0 \\ \end{aligned} \right. f(x)={x0x0x<0

    def relu(x):
        return np.maximum(0, x)
    
    X = np.arange(-5.0, 5.0, 0.1)
    Y = relu(X)
    plt.plot(X, Y)
    plt.ylim(-1.0, 5.5)
    plt.show()
    

    在这里插入图片描述

    阶跃函数 VS sigmoid函数

    def sigmoid(x):
        return 1 / (1 + np.exp(-x))
    
    def step_function(x):
        return np.array(x > 0, dtype=np.int)
    
    X = np.arange(-5.0, 5.0, 0.1)
    Y1 = sigmoid(X)
    Y2 = step_function(X)
    plt.plot(X, Y1)
    plt.plot(X, Y2, 'k--')
    plt.ylim(-0.1, 1.1)
    plt.show()
    

    在这里插入图片描述

    softmax函数

    def softmax(x):
        if x.ndim == 2:
            x = x.T
            x = x - np.max(x, axis=0)
            y = np.exp(x) / np.sum(np.exp(x), axis=0)
            return y.T
        x = x - np.max(x) # 溢出操作
        return np.exp(x) / np.sum(np.exp(x))
    
    x = np.array([3.0, 1.0, -3.0])
    y = softmax(x)
    print(y)
    np.sum(y)
    plt.plot(X, Y)
    plt.ylim(0, 1)
    plt.show()
    

    在这里插入图片描述

    交叉熵函数

    def cross_entropy_error(y, t):
        delta = 1e-7
        return -np.sum(t*np.log(y+delta))
    
    t = [1, 0, 0]
    cross_entropy_error(np.array(y), np.array(t))
    
    y = [0.9, 0.05, 0.05]
    cross_entropy_error(np.array(y), np.array(t))
    
    展开全文
  • 多层感知机、常见激活函数

    千次阅读 2020-06-17 22:41:10
    3.8.2 激活函数 上述问题的根源在于全连接层只是对数据做仿射变换(affine transformation),而多个仿射变换的叠加仍然是一个仿射变换。解决问题的一个方法是引入非线性变换,例如对隐藏变量使用按元素运算的非...

    3.8 多层感知机

    xiaoyao 动手学深度学习 tensorflow2

    前面学习了线性回归和softmax回归在内的单层神经网络。然而深度学习主要关注多层模型。在本节中,将学习多层感知机(multilayer perceptron,MLP)。

    3.8.1 隐藏层

    多层感知机在单层神经网络的基础上引入了一个或多个隐藏层(hidden layer).隐藏层位于输入层和输出层之间。

    如下图所示:

    在这里插入图片描述

    上图所示的多层感知机中,输入和输出个数分别为4和3,中间的隐藏层中包含了5个隐藏单元(hidden unit)。由于输入层不涉及计算,图中的多层感知机的层数为2。由图可见,隐藏层中的神经元和输入层中各个输入完全连接,输出层中的神经元和隐藏层中的各个神经元也完全连接。因此,多层感知机中的隐藏层和输出层都是全连接层。

    具体来说,给定一个小批量样本 X ∈ R n × d \boldsymbol{X} \in \mathbb{R}^{n \times d} XRn×d,其批量大小为 n n n,输入个数为 d d d。假设多层感知机只有一个隐藏层,其中隐藏单元个数为 h h h。记隐藏层的输出(也称为隐藏层变量或隐藏变量)为 H \boldsymbol{H} H,有 H ∈ R n × h \boldsymbol{H} \in \mathbb{R}^{n \times h} HRn×h。因为隐藏层和输出层均是全连接层,可以设隐藏层的权重参数和偏差参数分别为 W h ∈ R d × h \boldsymbol{W}_h \in \mathbb{R}^{d \times h} WhRd×h b h ∈ R 1 × h \boldsymbol{b}_h \in \mathbb{R}^{1 \times h} bhR1×h,输出层的权重和偏差参数分别为 W o ∈ R h × q \boldsymbol{W}_o \in \mathbb{R}^{h \times q} WoRh×q b o ∈ R 1 × q \boldsymbol{b}_o \in \mathbb{R}^{1 \times q} boR1×q

    先来看一种含单隐藏层的多层感知机的设计。其输出 O ∈ R n × q \boldsymbol{O} \in \mathbb{R}^{n \times q} ORn×q的计算为

    H = X W h + b h , O = H W o + b o , (式1) \begin{aligned} \boldsymbol{H} &= \boldsymbol{X} \boldsymbol{W}_h + \boldsymbol{b}_h,\\ \boldsymbol{O} &= \boldsymbol{H} \boldsymbol{W}_o + \boldsymbol{b}_o, \end{aligned}\tag{式1} HO=XWh+bh,=HWo+bo,(1)

    也就是将隐藏层的输出直接作为输出层的输入。如果将以上两个式子联立起来,可以得到

    O = ( X W h + b h ) W o + b o = X W h W o + b h W o + b o . (式2) \boldsymbol{O} = (\boldsymbol{X} \boldsymbol{W}_h + \boldsymbol{b}_h)\boldsymbol{W}_o + \boldsymbol{b}_o = \boldsymbol{X} \boldsymbol{W}_h\boldsymbol{W}_o + \boldsymbol{b}_h \boldsymbol{W}_o + \boldsymbol{b}_o.\tag{式2} O=(XWh+bh)Wo+bo=XWhWo+bhWo+bo.(2)

    从联立后的式子可以看出,虽然神经网络引入了隐藏层,却依然等价于一个单层神经网络:其中输出层权重参数为 W h W o \boldsymbol{W}_h\boldsymbol{W}_o WhWo,偏差参数为 b h W o + b o \boldsymbol{b}_h \boldsymbol{W}_o + \boldsymbol{b}_o bhWo+bo。不难发现,即便再添加更多的隐藏层,以上设计依然只能与仅含输出层的单层神经网络等价。

    3.8.2 激活函数

    上述问题的根源在于全连接层只是对数据做仿射变换(affine transformation),而多个仿射变换的叠加仍然是一个仿射变换。解决问题的一个方法是引入非线性变换,例如对隐藏变量使用按元素运算的非线性函数进行变换,然后再作为下一个全连接层的输入。这个非线性函数被称为激活函数(activation function)。下面介绍几个常用的激活函数。

    3.8.2.1 ReLU函数

    ReLU(rectified linear unit)函数提供了一个很简单的非线性变换。
    给定元素xx,该函数定义为
    R e L U ( x ) = m a x ( x , 0 ) . (式3) ReLU(x)=max(x,0).\tag{式3} ReLU(x)=max(x,0).(3)
    可以看出,ReLU函数只保留正数元素,并将负数元素清零。为了直观地观察这一非线性变换,我们先定义一个绘图函数xyplot。

    import tensorflow as tf
    from matplotlib import pyplot as plt
    import numpy as np
    import random
    %matplotlib inline
    
    def use_svg_display():
        # 用矢量图显示
        %config InlineBackend.figure_format = 'svg'
    
    def set_figsize(figsize=(3.5, 2.5)):
        use_svg_display()
        # 设置图的尺寸
        plt.rcParams['figure.figsize'] = figsize
    
    def xyplot(x_vals, y_vals, name):
        set_figsize(figsize=(5, 2.5))
        plt.plot(x_vals.numpy(), y_vals.numpy())
        plt.xlabel('x')
        plt.ylabel(name + '(x)')
    

    接下来通过Tensor提供的relu函数来绘制ReLU函数。可以看到,该激活函数是一个两段线性函数。

    x = tf.Variable(tf.range(-8,8,0.1),dtype=tf.float32)
    y = tf.nn.relu(x)
    xyplot(x, y, 'relu')
    

    在这里插入图片描述

    显然,当输入为负数时,ReLU函数的导数为0;当输入为正数时,ReLU函数的导数为1。尽管输入为0时ReLU函数不可导,但是我们可以取此处的导数为0。下面绘制ReLU函数的导数。

    with tf.GradientTape() as t:
        t.watch(x)
        y = tf.nn.relu(x)
    dy_dx = t.gradient(y, x)
    xyplot(x, dy_dx, 'grad of relu')
    

    在这里插入图片描述

    3.8.2.2 sigmoid函数

    sigmoid函数可以将元素的值变换到0和1之间:
    sigmoid ( x ) = 1 1 + exp ⁡ ( − x ) . (式4) \text{sigmoid}(x) = \frac{1}{1 + \exp(-x)}.\tag{式4} sigmoid(x)=1+exp(x)1.(4)

    sigmoid函数在早期的神经网络中较为普遍,但它目前逐渐被更简单的ReLU函数取代。在后面“循环神经网络”中会介绍如何利用它值域在0到1之间这一特性来控制信息在神经网络中的流动。下面绘制了sigmoid函数。当输入接近0时,sigmoid函数接近线性变换。

    # x
    
    y = tf.nn.sigmoid(x)
    xyplot(x, y, 'sigmoid')
    

    在这里插入图片描述

    据链式法则,sigmoid函数的导数

    s i g m o i d ′ ( x ) = s i g m o i d ( x ) ( 1 − s i g m o i d ( x ) ) (式5) sigmoid'(x)=sigmoid(x)(1−sigmoid(x))\tag{式5} sigmoid(x)=sigmoid(x)(1sigmoid(x))(5)
    下面绘制了sigmoid函数的导数。当输入为0时,sigmoid函数的导数达到最大值0.25;当输入越偏离0时,sigmoid函数的导数越接近0。

    with tf.GradientTape() as t:
        t.watch(x)
        y = tf.nn.sigmoid(x)
    dy_dx = t.gradient(y, x)
    xyplot(x, dy_dx, 'grad of sigmoid')
    

    在这里插入图片描述

    3.8.2.3 tanh函数

    tanh(双曲正切)函数可以将元素的值变换到-1和1之间:

    定义如下:

    tanh ( x ) = 1 − exp ⁡ ( − 2 x ) 1 + exp ⁡ ( − 2 x ) . (式6) \text{tanh}(x) = \frac{1 - \exp(-2x)}{1 + \exp(-2x)}.\tag{式6} tanh(x)=1+exp(2x)1exp(2x).(6)
    .
    绘制tanh函数。当输入接近0时,tanh函数接近线性变换。虽然该函数的形状和sigmoid函数的形状很像,但tanh函数在坐标系的原点上对称。

    y = tf.nn.tanh(x)
    xyplot(x, y, 'tanh')
    

    在这里插入图片描述

    依据链式法则,tanh函数的导数
    t a n h ′ ( x ) = 1 − t a n h 2 ( x ) . (式7) tanh′(x)=1−tanh^2 (x).\tag{式7} tanh(x)=1tanh2(x).(7)

    下面绘制了tanh函数的导数。当输入为0时,tanh函数的导数达到最大值1;当输入越偏离0时,tanh函数的导数越接近0。

    with tf.GradientTape() as t:
        t.watch(x)
        y = tf.nn.tanh(x)
    dy_dx = t.gradient(y, x)
    xyplot(x, dy_dx, 'grad of tanh')
    

    在这里插入图片描述

    3.8.3 多层感知机

    多层感知机就是含有至少一个隐藏层的由全连接层组成的神经网络,且每个隐藏层的输出通过激活函数进行变换。多层感知机的层数和各隐藏层中隐藏单元个数都是超参数。以单隐藏层为例并沿用本节之前定义的符号,多层感知机按以下方式计算输出:
    H = ϕ ( X W h + b h ) , O = H W o + b o , (式8) \begin{aligned} \boldsymbol{H} &= \phi(\boldsymbol{X} \boldsymbol{W}_h + \boldsymbol{b}_h),\\\boldsymbol{O} &= \boldsymbol{H} \boldsymbol{W}_o + \boldsymbol{b}_o, \end{aligned}\tag{式8} HO=ϕ(XWh+bh),=HWo+bo,(8)

    其中 ϕ \phi ϕ表示激活函数。在分类问题中,我们可以对输出O做softmax运算,并使用softmax回归中的交叉熵损失函数。 在回归问题中,我们将输出层的输出个数设为1,并将输出O直接提供给线性回归中使用的平方损失函数。

    • 小结
      多层感知机在输出层与输入层之间加入了一个或多个全连接隐藏层,并通过激活函数对隐藏层输出进行变换。
      常用的激活函数包括ReLU函数、sigmoid函数和tanh函数。
    
    
    展开全文
  • 常见激活函数及其求导相关知识

    千次阅读 2020-05-31 15:16:10
    Sigmoid 是常用的非线性的激活函数,公式如下: σ(x)=11+e−x \sigma(x)=\frac{1}{1+e^{-x}} σ(x)=1+e−x1​ 函数图像如下: 从图像可以看出,它能够把连续实值映射为0和1之间的输出,特别的,如果是非常大的负数...
  • 需要绘制的激活函数有sigmoid,tanh,ReLU,softplus,swish共5个函数。 各个函数的公式 sigmoid: tanh: ReLU: softplus: swish: 其中 ????(⋅) 为 Logistic 函数, β为可学习的参数或一个固定超参数 ...
  • 几种常见激活函数(笔记整理)

    万次阅读 2019-02-26 19:15:17
    函数是神经网络中非线性的来源,因为如果去掉这些函数,那么整个网络就只剩下线性运算,线性运算的复合还是线性运算的,最终的效果只相当于单层的线性模型. (1)Sigmoid函数 左端趋近于0,右端趋近于1,且两端...
  • 主要介绍了PyTorch中常用的激活函数的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 作用 深度神经网络引入非线性单元,使训练问题不再是一个凸优化问题,虽然我们很难...可微(多元函数):函数可微保证使用梯度下降优化的可计算性。 单调性:保证梯度方向相对稳定。 输出值范围:当输出有限,由于特...
  • 针对四种常用的激活函数进行可视化。 二、代码: import tensorflow as tf import numpy as np import matplotlib.pyplot as plt # fake data x = np.linspace(-5, 5, 100) # following are popular activation...
  • 本资源主要是可视化各种激活函数:Relu,sigmoid ,swish,mish等,只需要依赖numpy,不需要安装pytorch,只是一个简单的demo
  • 激活函数简介 神经网络中用于连接上层神经元输出与下层神经元输入的函数,根据不同的功能有不同的激活函数。 符号函数 符号函数简介 返回输入参数的正负号,用1指代+号,-1指代-号。 符号函数图象 ...
  • 激活函数: def sigmoid(x): """sigmoid函数""" return 1 / (1 + np.exp(-x)) def der_sigmoid(x): """sigmoid函数的导数""" return ...
  • 问:什么是激活函数? 在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数。 问:激活函数有什么用? 如果没有激励函数,在这种情况下你每一层节点的输入都是上层输出的...
  • 本文首发于我的个人博客: 激活函数:...激活函数之性质 1. 非线性:即导数不是常数。保证多层网络不退化成单层线性网络。这也是激活函数的意义所在。 2. 可微性:保证了在优化中梯度的可计算性。虽...
  • 几种常见激活函数的图像绘制

    千次阅读 2021-05-27 15:15:44
    如果某 经元的电位超过了 个"阔值" (thr ho 那么它就会被激活 "兴奋 起来,向其他神经元发送化学物质. 1943 年, [McCulloch and Pitts, 1943] 将上述情形抽象为国 .1 所示的简单 模型,这就是 直沿用至 "M-P 经元模...
  • 常见激活函数 权重初始化

    千次阅读 2020-04-09 23:28:27
    神经网络为什么需要激活函数: 如果不使用激活函数的话,网络整体(conv、pool、fc)是线性函数,线性函数无论叠加多少层,都是线性的,只是斜率和截距不同,叠加网络对解决实际问题没有多大帮助;而神经网络解决的...
  • 常见激活函数的用法

    千次阅读 2018-09-19 17:31:40
    常见激活函数的用法 1.为什么要使用激活函数 如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。 如果使用的话,激活函数给神经元引入了非线性因素,使得神经...
  • Sigmoid 函数 f1(x)=11+e−xf_1(x)=\frac1{1+e^{-x}}   f1(x)f_1(x)的导函数为: ddxf1(x)=f1(x)(1−f1(x))\frac{d}{\mathrm{d}x}f_1(x) = f_1(x)(1-f_1(x))tanh函数sinh(x)=ex−e−x2sinh(x)=\frac{e^x-e^{-x}}2 ...
  • 这篇文章用来整理一下入门深度学习过程中接触到的四种激活函数,下面会从公式、代码以及图像三个方面介绍这几种激活函数,首先来明确一下是哪四种: Sigmoid函数 Tahn函数 ReLu函数 SoftMax函数 激活函数的作用 ...
  • 激活函数的作用 可以想象,如果没有激活函数,下一层的输入总是上一层的输出,无论多少层网络,都是线性函数,线性函数的逼近能力是非常有限的,无法拟合现实中这些没有规律的非线性复杂函数。举个例子: ...
  • 激活函数的主要作用是提供网络的非线性建模能力。如果没有激活函数,那么该网络仅能够表达线性映射,此时即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的。因此也可以认为,只有加入了激活函数之后,深度...
  • 常见激活函数

    2020-03-01 22:58:19
    什么是激活函数   在神经网络中,我们经常可以看到对于某一个隐藏层的节点,该节点的激活值计算一般分为两步:   (1)输入该节点的值为x1,x2x1,x2时,在进入这个隐藏节点后,会先进行一个线性变换,计算出值z...
  • 人工神经元模型及常见激活函数

    万次阅读 2017-06-26 21:46:45
    常见激活函数 1. Sigmoid Sigmoid函数的特点是会把输出限定在0~1之间,如果是非常大的负数,输出就是0,如果是非常大的正数,输出就是1,这样使得数据在传递过程中不容易发散。 Sigmod有两个...
  • 一、常见激活函数总结 激活函数:就是在神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。 常见的激活函数包括 Sigmoid TanHyperbolic(tanh) ReLu softplus softmax ELU PReLU  这些函数有...
  • 常见激活函数 常见的激活函数如下: 阶跃函数 sigmoid函数 tanh函数 relu函数 练习 画出各种激活函数在[-10, 10]区间的图像。 import matplotlib.pyplot as plt import numpy as np x = np.a...
  • 一、关于激活函数 设置激活函数是为了使之能拟合更多的情况,如果仅仅是线性加权那么无论多少层仍然相当于是线性组合,拟合效果十分有限。...二、常见激活函数介绍 1、Sigmoid 数学表达式: 几何图像: ...
  • Pytorch中的激活函数

    2021-01-20 11:50:41
    神经网络中的激活函数就是用来判断我们所计算的信息是否达到了往后面传输的条件。 为什么激活函数都是非线性的 因为如果使用线性的激活函数,那么input跟output之间的关系始终为线性的,这样完全可以不使用网络结构...
  • 激活函数深入理解!
  • tf常见激活函数汇总常见激活函数种类及其图像1 sigmoid(logsig)函数2 tanh函数3 relu函数4 softplus函数tensorflow中损失函数的表达1 sigmoid(logsig)函数2 tanh函数3 relu函数4 softplus函数 激活函数在机器...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 72,289
精华内容 28,915
关键字:

常见的激活函数

友情链接: 01_FFT.rar