• 神经网络的简单解释


    源自知乎:优达学城(Udacity)

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    本文作者:Udacity深度学习&机器学习导师 Walker

     

    题记:“简单” “形象” 两个要求我争取下。“有趣”的话,我觉得数学挺有趣的,你觉得呢?


    神经网络是什么?神经网络就是一系列简单的节点,在简单的组合下,表达一个复杂的函数。下面我们来一个个解释

    线性节点

    节点是一个简单的函数模型,有输入,有输出。我们

    1. 最简单的线性节点: x+y

    我能想到的最简单的线性节点当然就是 x+y 了。

     

     

    2. 参数化线形节点: ax + by

    x+y 是一个特殊的线形组合,我们可以一般化所有 x,y 的线性组合, 即 ax+by 。这里  a,b  就是这个节点的参数。不同的参数可以让节点表示不同的函数,但节点的结构是一样的。

     

     

    3. 多输入线性节点: a_1x_1 + a_2x_2 + a_3x_3 + ... + a_nx_n

    我们进一步把 2 个输入一般化成任意多个输入。这里 a_1, a_2, a_3, ... a_n 是这个节点的参数。同样,不同的参数可以让节点表示不同的函数,但节点的结构是一样的。注意 n 并不是这个节点的参数,输入个数不同的节点结构式不一样的。

    4. 线性节点的向量表达: a^Tx

    上面的式子太过冗长,我们用向量 x 表示输入向量 (x_1, x_2, ..., x_n) ,用向量 a 表示参数向量 (a_1, a_2, ..., a_n) , 不难证明 a^Tx = a_1x_1 + a_2x_2 + a_3x_3 + ... + a_nx_n . 这里向量 a 就是这个节点的参数,这个参数的唯度与输入向量的唯度相同。

     

    5. 带常量的线性节点: a^Tx + b

    有时, 我们希望即使输入全部为 0 的时候,线形节点依然可以有输出,因此引入一个新的参数 b 作为偏差项,以此来增加模型的表达性。有时,为了简化,我们以为会把表达式写作 a^Tx 。此时 x=(x_1, x_2,..., x_n, 1), a = (a_1, a_2, ..., a_n, b)

     

    6. 带激活函数的线性节点: mathbb{1}(a^Tx + b > 0)

    对于二项分类问题,函数的输出只是真或假,即 0 或 1。函数 mathbb{1}: R
ightarrow{1, 0} 将真命题映射到 1, 将假命题映射到 0。

     

     

    线性节点实例

    1. 用线性节点表达 x vee y (或函数)

    或函数的真值表如下:

    定义节点 mathbb{1}(x+y - 0.5>0) , 不难验证,它与 x vee y 是等价的。

     

    2. 用线性节点表达 x wedge y (与函数)

    与函数的真值表如下:

    定义节点 mathbb{1}(x+y-1.5>0) , 不难验证,它与 x wedge y 是等价的。

     

     

    线性节点的表达力

    单个线性节点可以表达所有线性函数(函数值域为实数集)以及所有线性可分的分类器(函数值域为 {0,1} )。概念定义和命题的证明我们这里不在阐述。虽然单个线性节点已经很强大,但依然有他的局限性。对于线性不可分的函数,它无能为力,例如异或函数 x oplus y

     

     

    线性节点的组合

    1. 多个线性节点同层组合: W^Tx

    上述的线性节点输入是多维的,但输出只是一维,即一个实数。如果我们想要多维的输出,那么就可以并列放置多个节点。设 a_1, a_2, ... , a_m 分别是 m 个节点的参数,那么输出则分别为 a_1^Tx, a_2^Tx, ... , a_m^Tx . 最终的输出结果为

    egin{bmatrix} a_1^Tx  a_2^Tx  ...  a_m^Tx end{bmatrix} = egin{bmatrix} a_1^T  a_2^T  ...  a_m^T end{bmatrix} x = egin{bmatrix} a_1 & a_2 & ... & a_m  end{bmatrix}^T x = W^Tx

    其中 W = [a_1, a_2, ... , a_m] 是一个 n*m 的参数矩阵。

     

    2. 多层线性节点:

    多层线性节点中,某一层带激活函数的线性节点,输出作为下一层的输入。通常中间层(或者隐藏层,图中的蓝色节点)会带有一个激活函数,来增加模型的表达力。(思考: 如果隐藏层没有激活函数,为什么两层线性节点和一层等价?

     

    多层多层线性节点实例

    1. 用多层表达异或函数 x oplus y

    这是一个不可线性分隔的函数,不可以用一个线性节点表达。但我们可以使用多层的线性节点来完成这个任务。

    h_1 = mathbb{1}(x+y-0.5 >0)h_1 = x vee y

    h_2 = mathbb{1}(-x-y+1.5 >0)h_2 = overline{x wedge y}

    o = mathbb{1}(h_1 + h_2 - 1.5 >0)o = h_1 wedge h_2

     

     

    多层线性节点的表达力

    可以证明,多层神经元可以表达所有连续函数。证明比较复杂,有兴趣的人可以去看一下: A visual proof that neural nets can compute any function

    写到这里差不多基本讲清楚了神经网络的计算方式,但其实我们还有很多常见的节点没有讲到,例如 Relu, Sigmoid, Dropout 等。神经网络不止有正向计算,还有反向传导,这些节点的出现和反向传导息息相关,有机会的话,再来写一篇文章回答 “如何简单形象又有趣地讲解神经网络的反向传导?

     

     
  • 相关阅读:
    [WebService]请求因 HTTP 状态 404 失败: Not Found。
    [WebService]请求因 HTTP 状态 400 失败: Bad Request。
    关于静态构造函数
    asp.net生成高质量缩略图通用函数
    ASP.NET 操作消息队列
    Asp.net 字符串操作类(补充引用)
    一行代码挂掉IE6,哈哈.......
    .Net代码生成器
    TSQL 跨库查询语句
    获取服务器地址的方法区别
  • 原文地址:https://www.cnblogs.com/fuqia/p/8971059.html
Copyright © 2020-2023  润新知