继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

青春有我
关注TA
已关注
手记 1072
粉丝 205
获赞 1007

一、仿生学

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

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

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

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

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

二、神经元

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

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

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

  • 树突:一个神经元有若干个树突,它们能接收来自其他神经元的信号,并将信号传递给细胞体。

  • 细胞体:细胞体是神经元的核心,它把各个树突传递过来的信号加总起来,得到一个总的刺激信号。

  • 轴突:当细胞体内的刺激信号超过一定阈值之后,神经元的轴突会对外发送信号。

  • 突触:该神经元发送的信号(若有)将由突触向其他神经元或人体内的其他组织(对神经信号做出反应的组织)传递。需要注意的是,神经元通常有多个突触,但它们传递的信号都是一样的。

webp

图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所示。

webp

图2



作者:tgbaggio
链接:https://www.jianshu.com/p/f5d8f22a9504


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP