精华内容
下载资源
问答
  • 文章目录系列文章目录前言一、输出层的意义二、不同激活函数的介绍和实现1.恒等函数2.sigmoid函数3.softmax函数4.softmax函数的问题三、将softmax函数引入我们的输出层总结 前言      &...

    系列文章目录

    人工智能—深度学习神经网络神经元的实现
    人工智能–深度学习两层全连接神经网络搭建



    前言

          我们在上一章节中已经实现了神经网络系统的结构,但作为一个成熟的预测或者分类神经网络,他还需要一定的完善。今天我们将详细介绍的就是其中的输出层中的一些优化。


    一、输出层的意义

          我们前面提到过,神经网络是一种为了辅助深度学习的工具方法,而深度学习又是完善机器学习的一个分支,所以说本质上深度学习神经网络的覆盖问题往往都是机器学习的问题,而机器学习的问题根据结果的不同,就能分为回归问题和分类问题。那神经网络中又是如何体现这个回归或者分类的目的的呢?那肯定是要看我们的输出层的结果形式。
          在上一章中,我们运行了自己的第一个神经网络系统,得出了一个结果,但在没有具体背景的情况下,那个结果其实没有什么意义,而我们要想使这个结果有意义,记得凭借我们的输出层激活函数了。
          当我们的背景问题是一个回归问题的时候,我们往往选择恒等激活函数,也就是不对输出做任何改变,因为回归问题往往最后计算的结果是一个具体的权重,也是我们的最终答案,那我们当然是原封不动的输出是最好的。
          当我们的背景问题是一个分类问题的时候,输出结果往往是一个概率,不同结点的值代表了是这个分类的概率大小,但由于复杂的网络关系,最后的值往往不能约束在 [ 0 , 1 ] [0,1] [0,1]范围内,为了让他更加贴切概率的概念,我们会选择使用前面提到的sigmoid函数或者今天我们要着重介绍的softmax函数

    二、不同激活函数的介绍和实现

    1.恒等函数

          恒等函数主要用于对回归问题的激活,这种问题中往往需要我们最大程度的保护最后的输出结果,所以恒等函数简单点来说那就是什么都不做。他的定义为:
    y = x y=x y=x

    2.sigmoid函数

          sigmoid函数由于其限制在 [ 0 , 1 ] [0,1] [0,1]中的特性,所以很适合用来做概率转换函数。他的定义我们已经很熟悉:
    1 1 + e − x \frac{1}{1+e^{-x}} 1+ex1

    3.softmax函数

          相比较sigmoid函数他比较适合于二分类问题,softmax函数能充分考虑每一个输出结点的权重影响,从而使概率的描述更加准确。他的定义式为:
    e a k ∑ i = 1 n e a i \frac{e^{a_{k}}}{\sum_{i=1}^ne^{a_{i}}} i=1neaieak

    4.softmax函数的问题

          因为softmax中不乏指数运算,而指数运算最大的问题就是容易产生特别大的数,而当两个数特别大时,再进行其他操作就很容易出错,比如公式里的除法。让我们来看个例子具体感受一下。

    def softmax(x):
        return np.exp(x)/np.sum(np.exp(x))
    
    x = np.array([1000,1010,1020])
    y = softmax(x)
    print(y)
    

    输出结果为:

    [nan nan nan]
    
    Process finished with exit code 0
    

    这种现象就是叫做计算机中的“溢出”,而我们如何避免过大的值导致的运算过程“溢出”呢?
    于是我们引入了一个常量,将softmax函数改进为:
    C e a k C ∑ i = 1 n e a i \frac{Ce^{a_{k}}}{C\sum_{i=1}^{n}e^{a_{i}}} Ci=1neaiCeak
    因为分式上下乘以一个常量,所以分式的值不会改变然后我们再进行变形:
    C e a k C ∑ i = 1 n e a i = e a k + log ⁡ c ∑ i = 1 n e a i + log ⁡ c = e a k + C ′ ∑ i = 1 n e a k + C ′ \frac{Ce^{a_{k}}}{C\sum_{i=1}^{n}e^{a_{i}}}=\frac{e^{a_{k}+\log{c}}}{\sum_{i=1}^{n}e^{a_i+\log{c}}}=\frac{e^{a_k+C^{'}}}{\sum_{i=1}^ne^{a_k+C^{'}}} Ci=1neaiCeak=i=1neai+logceak+logc=i=1neak+Ceak+C
    转换成这个形式,那就可以对 C ′ C' C进行任意取值,因为C是任意的,所以 C ′ C' C也相应的是,但我们引入这个 C ′ C' C的最终目的是为了防止溢出,所以建议这个 C ′ C' C取最大值的负数。也就是
    e a k − max ⁡ ( a ) ∑ i = 1 n e a i − max ⁡ ( a ) \frac{e^{a_{k}-\max(a)}}{\sum_{i=1}^ne^{a_{i}-\max(a)}} i=1neaimax(a)eakmax(a)
    还是代入到那个例子中进行实验:

    def softmax(x):
        return np.exp(x-np.max(x))/np.sum(np.exp(x-np.max(x)))
    
    x = np.array([1000,1010,1020])
    y = softmax(x)
    print(y)
    

    输出结果为:

    [2.06106005e-09 4.53978686e-05 9.99954600e-01]
    
    Process finished with exit code 0
    

    很明显我们可以看到,原来为nan的异常值已经可以被正确的计算了!

    三、将softmax函数引入我们的输出层

          还是以我们之前实现的神经网络系统为例,我们将最后的输出层激活函数置换为我们刚刚实现的softmax函数来再看看是否能准确运行!

    代码如下(示例):

    def softmax(x):
        return np.exp(x-np.max(x))/np.sum(np.exp(x-np.max(x)))
    def forward_net(network,x):
        W1 = network['W1']
        b1 = network['b1']
        W2 = network['W2']
        b2 = network['b2']
        W3 = network['W3']
        b3 = network['b3']
        x = np.dot(x,W1)+b1
        x = ReLU(x)
        x = np.dot(x,W2)+b2
        x = ReLU(x)
        x = np.dot(x, W3) + b3
        x = softmax(x)
        return x
    

    运行结果为:

    [0.00196166 0.99803834]
    
    Process finished with exit code 0
    

    看来我们的激活函数已经能完美运行啦。


    总结

          为了能更好的带领大家投入到真实的神经网络运行实例中去,笔者准备了这一章,让大家能更好的认识一种最常用的输出层激活函数——softmax。接下来我们就可以自如的使用哦我们的网络进入到各种各样的场景中去了

    展开全文
  • 深度学习——恒等函数和softmax函数

    千次阅读 2018-10-06 11:36:12
    恒等函数和softmax函数这两个函数多用于输出层的激活函数 其中分类问题多用softmax函数,回归方程多用恒等函数 ps:分类问题可类比为分类图像,比如区分人,车,手机物体;  回归问题可类比为房价和地区,大小...

    恒等函数softmax函数这两个函数多用于输出层的激活函数

    其中分类问题多用softmax函数,回归方程多用恒等函数

    ps:分类问题可类比为分类图像,比如区分人,车,手机等物体;

         回归问题可类比为房价和地区,大小等因素成正比

     

     

    1. 恒等函数:输出=输入

    2. softmax函数:输出为一个函数

    其中exp为指数函数,ak代表第k个输出神经元的输入,ai代表第i个输出神经元的输入,公式分子表示ak的指数函数,分母表示所有输出神经元的输入指数函数的和

    2.1 softmax函数的注意事项

    在计算指数时,比如e的5000次方,数据将会非常大,计算机处理“数”时,数值必须在4字节或8字节的有限数据宽度内,超出的数据则会显示为无穷(inf),所以要对softmax函数进行改进,防止数据的溢出

    如图中,将分子分母同时乘以C,然后将C提进指数函数中,图中用的logC理解成数学中的lnC,然后用C'代替logC,通过控制C'来控制exp函数中的指数,来实现softmax函数不因为数据过大而出错

    2.2 softmax函数意义

    通过公式我们可以知道softmax函数得出的结果的和为1,换一种说法,即每个输出神经元的输出是这个神经元的概念,比如现在有两个神经元,y1输出为0.2,y2输出为0.8,则代表y1的概率为20%,y2的概率为80%,若y1代表汽车,y2代表人,则表示有80%概率是人

    展开全文
  • 恒等函数和 softmax 函数

    千次阅读 2019-02-23 13:42:10
    恒等函数会将输入按原样输出,...和前面介绍的隐藏层的激活函数一样,恒等函数进行的转换处理可以用一根箭头来表示。 softmax 函数 公式如下 exp(x) 是表示 ex 的指数函数(e 是纳皮尔常数 2.7182 …)。式(3.10)...

    恒等函数会将输入按原样输出,对于输入的信息,不加以任何改动地直接输出。因此,在输出层使用恒等函数时,输入信号会原封不动地被输出。另外,将恒等函数的处理过程用之前的神经网络图来表示的话,则如图
    在这里插入图片描述
    和前面介绍的隐藏层的激活函数一样,恒等函数进行的转换处理可以用一根箭头来表示。

    softmax 函数

    公式如下
    在这里插入图片描述
    exp(x) 是表示 ex 的指数函数(e 是纳皮尔常数 2.7182 …)。式(3.10)表示假设输出层共有 n 个神经元,计算第 k 个神经元的输出 yk。如式(3.10)所示,softmax 函数的分子是输入信号 ak 的指数函数,分母是所有输入信号的指数函数的和。
    在这里插入图片描述
    用图表示 softmax 函数的话,如图 3-22 所示。图 3-22 中,softmax 函数的输出通过箭头与所有的输入信号相连。这是因为,从式(3.10)可以看出,输出层的各个神经元都受到所有输入信号的影响。

    def softmax(a): 
    c = np.max(a) 
    exp_a = np.exp(a - c) 
    # 溢出对策 
    sum_exp_a = np.sum(exp_a) 
    y = exp_a / sum_exp_a 
    return y
    

    现在我们来实现 softmax 函数。在这个过程中,我们将使用 Python 解释器逐一确认结果。

    a = np.array([0.3,2.9,4.0])
    y = softmax(a)
    print(y)
    print(sum(y))
    

    如上所示,softmax 函数的输出是 0.0 到 1.0 之间的实数。并且,softmax 函数的输出值的总和是 1。输出总和为 1 是 softmax 函数的一个重要性质。正因为有了这个性质,我们才可以把 softmax 函数的输出解释为“概率”。

    展开全文
  • # 神经网络激活函数 # 阶跃函数 def step_function(x): return np.array(x > 0, dtype=np.int) # sigmoid函数 --二元分类问题 def sigmoid(x): return 1 / (1 + np.exp(-x)) # relu函数 def ReLU(x): ...
    import matplotlib.pyplot as plt
    import numpy as np
    
    # 神经网络激活函数
    
    
    # 阶跃函数
    def step_function(x):
        return np.array(x > 0, dtype=np.int)
    
    
    # sigmoid函数   --二元分类问题
    def sigmoid(x):
        return 1 / (1 + np.exp(-x))
    
    
    # relu函数
    def ReLU(x):
        return np.maximum(0, x)
    
    # 输出层设计,回归问题用恒等函数,分类问题用softmax函数
    
    
    # 恒等函数      --原样输出
    def equal(x):
        return x
    
    
    # softmax函数   --用于多元分类问题,输出层神经元数量即为类别数量
    def softmax(x):
        c = np.max(x)
        a = np.exp(x-c)  # 解决溢出
        y = a / np.sum(a)
        return y
    
    
    x = np.arange(-5.0, 5.0, 0.1)
    y = step_function(x)
    plt.plot(x, y)
    
    y = sigmoid(x)
    plt.plot(x, y)
    
    y = ReLU(x)
    plt.plot(x, y)
    
    y = equal(x)
    plt.plot(x, y)
    
    y = softmax(x)
    print(np.sum(y))  # softmax函数特性,所有相加为1 和概率类似
    plt.plot(x, y)
    plt.ylim(-0.1, 1.1)
    
    plt.show()
    
    

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 而“多层感知机”就是指神经网络,即使用sigmoid函数等平滑的激活函数的多层网络。 激活函数activation function:把输入信号的总和转换为输出信号的转换器。 它的关键在于如何去激活输入信号的总和。 (1)阶跃...
  • 激活函数

    2020-10-07 13:57:29
    备注1:如果不使用激活函数或者使用线性激活函数(线性激活函数又称恒等激励函数),每层的输出都是输入的线性函数,不论神经网络有多少隐藏层,一直在做的是计算线性函数(仍是最原始的感知机)。 备注2:激活函数...
  • 23种激活函数

    千次阅读 2019-11-07 15:02:30
    文章目录一、简介二、激活函数种类1、恒等函数2、单位阶跃函数3、逻辑函数4、双曲正切函数5、反正切函数6、Softsign函数7、反平方根函数(ISRU)8、线性整流函数(ReLU)9、带泄露线性整流函数(Leaky ReLU)10、参数化...
  • 深度学习 激活函数

    2018-08-05 19:54:00
    什么是激活函数 如上图,在神经元中,输入的inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数(Activation Function)...但是,如果激活函数恒等激活函数的时候($f(x)=x$)就不满足这个性质了,而且如...
  • ReLu激活函数

    千次阅读 2019-06-30 13:06:07
    ReLU函数的倒数在正数部分是等于1的,因此在深度网络中使用relu激活函数就不会导致梯度小时和爆炸的问题。并且,ReLU函数计算速度快,加快了网络的训练。不过,如果梯度过大,导致很多负数,由于负数部分值为0,...
  • 本博客仅为作者记录笔记之用,不免有很多细节不对之处。 还望各位看官能够见谅,欢迎批评指正。 更多相关博客请猛戳:...日常 coding 中,我们会很自然的使用一些激活函数,比如:sigmoid
  • 机器学习常用激活函数

    千次阅读 2018-09-12 14:28:55
    机器学习常用激活函数   摘要: 激活函数就是神经网络输出端的一个节点,来连接两个神经网络。本文主要介绍激活函数的功能以及激活函数类型。 什么是激活函数激活函数就是神经网络输出端的一个节点,来...
  • 神经网络之激活函数

    万次阅读 2020-03-18 19:52:57
    神经网络中的激活函数系列文章:   激活函数是神经网络中非常重要的东西,作用不亚于卷积。激活函数是为了模拟神经元的激活和抑制状态的一个组件,自然界的神经活动都是通过一部分神经元的激活,一部分神经元受到...
  • 激活函数原理详解 向女朋友介绍系列之激活函数。通过激活一词的解释,循循引入神经网络为什么要激活函数。分析了几种常见的激活函数并且激活函数的特点。 激活函数是什么 目录 激活函数原理详解 激活函数是什么...
  • 聊一聊激活函数

    2018-08-14 12:18:25
    聊一聊激活函数   https://mp.weixin.qq.com/s/Gm4Zp7RuTyZlRWlrbUktDA   Why激活函数? 引入激活函数是为了引入非线性因素,以此解决线性模型所不能解决的问题,让神经网络更加powerful! 以下解释部分可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,391
精华内容 2,156
关键字:

恒等函数激活函数