神经网络(一):神经元模型与逻辑回归

作者: tgbaggio | 来源:发表于2018-09-28 17:00 被阅读5次

    一、仿生学

    在经典的机器学习领域,有很多不同类型的模型,它们大致可以分为两类:一类是比较注重模型可解释性的传统统计模型,比如线性回归和逻辑回归;另一类是侧重于从结构上“模仿”数据的机器学习模型,比如监督式学习SVM和非监督式学习KMeans。

    这些模型虽然在结构和形态上千差万别,但它们有一个共同的建模理念,就是首先对数据做假设,然后根据这些假设进行数学推导,并最终得到模型的公式。其中最核心的部分就是模型的假设,它直接决定了模型的适用范围,也是模型效果的保障。这些模型不但能对未知数据做预测,还能帮助我们去理解数据之间的相关关系。

    但神经网络或者深度学习是一种全新的建模理念,它并不关心模型的假设以及相应的数学推导,也就是说它并不关心模型的可解释性。这个理念的目的是借鉴仿生学[1]的思路,利用计算机和数学模型去模拟人的大脑,因此,其中最核心的内容就是工程实现。从模型角度来讲,这种理念的建模起点是最终的模型公式,而模型效果的保障是,这样的模型能在一定程度上模仿大脑,而大脑是人类智能的基础。

    这种理念下设计出来的模型有很多酷炫的名字,比如神经网络、人工智能以及深度学习等。这类模型虽然难以理解或者更准确地说,到目前为止人类还无法理解,但在某些特定应用场景里的预测效果却出奇得好,因此也常常引起争论。一部分人认为,目前的人工智能热只是一个泡沫,整个学科并没有实质性的突破;另一部分人认为人工智能已经在突破的前夜,在不远的未来,它将给人类带来巨大的便利;还有一部分人认为人工智能是极其危险的东西,我们正在创造一种新的具有智能的“生命”,也许在不远的未来,这种人造的智能会统治地球并最终毁灭人类,就像很多科幻电影里的情节那样。

    以上这3种观点都有其道理[2],本系列文章并不打算加入这种宏观议题争论,而是采取中立立场讨论相关的技术细节和发展趋势。相信读者通过这个系列的文章了解了人工智能的基础知识后,会对上面的话题有自己的观点。

    二、神经元

    由于神经网络的模拟对象是人的大脑,那么在讨论具体的模型之前,我们有必要先从生物学的角度来看看人的大脑有哪些特性。

    根据生物学的研究,人脑的计算单元是神经元(neuron)。它能根据环境变化做出反应,再将信息给其他的神经元。在人脑中,大约有860亿个神经元,它们相互联结构成了极其复杂的神经系统,而后者正是人类智慧的物质基础。因此遵循人脑的生物结构,我们首先需要搭建模型来模拟人的神经元。

    如图1所示,一个典型的神经元由4个部分组成。

    • 树突:一个神经元有若干个树突,它们能接收来自其他神经元的信号,并将信号传递给细胞体。
    • 细胞体:细胞体是神经元的核心,它把各个树突传递过来的信号加总起来,得到一个总的刺激信号。
    • 轴突:当细胞体内的刺激信号超过一定阈值之后,神经元的轴突会对外发送信号。
    • 突触:该神经元发送的信号(若有)将由突触向其他神经元或人体内的其他组织(对神经信号做出反应的组织)传递。需要注意的是,神经元通常有多个突触,但它们传递的信号都是一样的。
    图1

    将上述的神经元结构抽象成数学概念,可以得到如图1所示的神经元模型。

    • 模型的输入是数据里的自变量,比如图中的x_1, x_2, x_3。它们用圆点表示,对应着神经元里的树突。
    • 接收输入变量的是一个线性模型,在图中用正方形表示。这个线性模型对应着神经元的细胞体。值得注意的是,对于神经元中的线性模型,我们将模型中的权重项和截距项特意分开,用表示权重w_i,用b表示截距[3]
    • 接下来是一个非线性的激活函数f(activation function),它将控制是否对外发送信号,在图中用三角形表示,对应这神经元里的轴突。在神经网络领域,常常用一个圆圈来概括地表示线性模型和激活函数,并不将两者分开,在本系列文章中,我们将沿用这一记号。
    • 将模型的各个部分联结起来得到最后的输出f(\sum_i w_ix_i + b),这个值将传递给下一个神经元模型,在图中用箭头表示,对应着神经元里的突触。值得注意的是,一个神经元可以有多个输出箭头,但它们所输出的值都是一样的。

    在神经元模型中,非线性的激活函数f是整个模型的核心。在最初的神经元模型中[4],的定义是非常直观的,当函数的自变量大于某个阈值时,则等于1,否则等于0。具体的公式如下:

    f = \begin{cases} 1, x > 0\\0, x <= 0 \end{cases} \tag{1}

    这个模型在学术上被称为感知器(perceptron),它可被用来解决二元分类问题(因为模型的输出是0或1)。感知器虽然在某种程度上模拟了神经元里轴突的行为,但处理方式有些太过粗糙了,因为在生物学上,神经元输出的是一个连续值而非离散值。这导致感知器的模型效果很一般。为了改进这一点,通常使用sigmoid函数(sigmoid function,也称为S函数)来作为神经元的激活函数[5],这样的模型被称为sigmoid神经元(sigmoid neuron)。

    三、Sigmoid神经元与二元逻辑回归

    Sigmoid函数在数据科学领域是一个非常重要的函数。特别是在神经网络和深度学习领域,我们会经常见到它。sigmoid的函数图像呈S形状,因此也常被称为S函数,具体的公式如下:

    S(z) = \frac{1}{1 + e^{-z}}\tag{2}

    使用sigmoid函数作为神经元里的激活函数有两大好处。从实用的角度来讲,sigmoid函数能将任意的实数值映射到(0, 1)区间,当公式(2)中的变量z是很大的负数时,函数值接近0;当变量z是很大的正数时,函数值接近1。这个特性在神经元上也能找到很好的解释:函数值接近0表示神经元没被激活,而函数值接近1表示神经元完全被激活。

    从理论的角度来讲,sigmoid函数模拟了两种效应的相互竞争:假设正效应和负效应都和自变量X = (x_1, x_2, ..., x_k)是近似线性关系。具体的公式如下,其中,Y^*表示正效应,Y^{\sim}表示负效应,W_i = (w_{i, 1}, w_{i, 2}, ..., w_{i, k})b_i是模型参数,\theta\tau是服从正态分布的随机干扰项。

    Y^* = XW_1^T + b_1 + \theta \\ Y^\sim = XW_2^T + b_2 + \tau \tag{3}

    数学上可以证明,正效应大于负效应的概率可由一个sigmoid函数来近似,如公式(4)所示。

    P(Y^* - Y^\sim) = S(XW^T + b) \tag{4}

    因此在神经元模型里使用sigmoid函数,就相当于给神经元的输出赋予了概率意义,这使得模型的理论基础更加扎实,也使得模型能被用于解决二元分类问题,比如当sigmoid神经元的输出大于0.5时,则预测类别为1,否则预测类别为0。值得注意的是,在这种情况下,sigmoid神经元其实就是二元逻辑回归模型,如图2所示。

    图2

    四、广告时间

    这篇文章的大部分内容参考自我的新书《精通数据科学:从线性回归到深度学习》

    李国杰院士和韩家炜教授在读过此书后,亲自为其作序,欢迎大家购买。


    1. 仿生学(bionics)是模仿生物的特殊本领的一门科学,它在了解生物结构和功能原理的基础上,来研制新的机械和新的技术。以上简介参考自维基百科

    2. 这3种观点的论据和逻辑超出了本书的讨论范围,在此就不做展开,仅列举它们背后的权威支持者。
      机器学习领域重要的学者迈克尔·I.乔丹(Michael I. Jordan)教授就持第一种观点,他认为我们离接近人类水平的人工智能还很远。虽然在某些领域,可以用神经网络来“伪造”智能,但理智来说,这并不是智能。
      另一位很知名的学者吴恩达(Andrew Ng,他是迈克尔·I.乔丹的学生)以及企业家扎克伯格(Mark Zuckerberg)持第二种观点。他们对人工智能的发展表示乐观,主张人工智能是一场新的工业革命,将会像电力一样改变工业以及人类的生活。
      来自业界的比尔·盖茨(Bill Gates)和伊隆·马斯克(Elon Musk)则持第三种观点,他们认为虽然现阶段人工智能并没有表现出直接的危害,但按照现在的发展速度,在不远的将来(5年或者10年之内),我们将直接面对人工智能带来的威胁

    3. 在神经网络中,线性模型里的截距项是有特殊生物含义的,它通常对应着神经元的激活阈值,因此需要单独处理它

    4. Frank Rosenblatt于1957年在Cornell航空实验室(Cornell Aeronautical Laboratory)设计了第一款人工神经网络。这个最初版的神经网络其实是一台机器:由于当时的计算机还处在比较初级的阶段,因此专门设计了一台机器来实现这个模型

    5. 事实上基于工程实现上面的考虑,目前在实际应用中很少会使用sigmoid函数作为激活函数

    相关文章

      网友评论

        本文标题:神经网络(一):神经元模型与逻辑回归

        本文链接:https://www.haomeiwen.com/subject/vpvpoftx.html