1. 感知机模型
感知机(Perceptron)是一种简单的神经网络模型,主要用于解决 线性可分 的分类问题。它的基本结构如图所示,包括多个输入、权重、阈值和一个激活函数。在感知机的工作过程中,来自每个输入节点 x i x_i xi 的信号被赋予对应的权重 w i w_i wi ,然后汇聚到感知机内。
图来自《机器学习(西瓜书)》_周志华:第五章:神经网络
图中展示了第 i i i 个神经元的计算过程:首先计算所有输入的加权和,即 ∑ i = 1 n w i x i \sum_{i=1}^{n} w_i x_i ∑i=1nwixi 。接着,这个加权和会减去一个阈值 θ \theta θ ,并传递给激活函数 f f f 进行处理,从而生成输出 y y y 。感知机的输出公式可以描述为:
y = f ( ∑ i = 1 n w i x i + θ ) y = f\left(\sum_{i=1}^{n} w_i x_i + \theta \right) y=f(i=1∑nwixi+θ)
阈值 - θ \theta θ
在这个公式中,阈值 θ \theta θ 扮演着重要的角色,决定了神经元的激活情况。我们可以将阈值 θ \theta θ 转换成一个“偏置”项,以更直观的方式来理解感知机的结构。具体来说,阈值 θ \theta θ 可以被视作一个固定的输入值,例如 − 1 -1 −1,并设置一个对应的权重 w n + 1 w_{n+1} wn+1。在这种表示方式下,神经元的输出公式可以改写为:
y = f ( ∑ i = 1 n w i x i + w n + 1 x n + 1 ) y = f\left(\sum_{i=1}^{n} w_i x_i + w_{n+1} x_{n+1}\right) y=f(i=1∑nwixi+wn+1xn+1)
其中 x n + 1 = − 1 x_{n+1} = -1 xn+1=−1 且 w n + 1 = θ w_{n+1} = \theta wn+1=θ 。这种表达方式将阈值 θ \theta θ 转化为一个偏置项,使得感知机可以统一表示为一个加权求和操作,这样,阈值 θ \theta θ 就相当于一个“偏置权重” w n + 1 w_{n+1} wn+1,它能够灵活地调整神经元的激活条件。
激活函数 - f f f
在这个公式中,激活函数 f f f 的作用是 将神经元的加权输入映射到输出空间 。激活函数可以是简单的阶跃函数(用于传统的二分类感知机),也可以是现代神经网络中常见的Sigmoid、ReLU或Tanh函数。不同的激活函数可以产生不同的特性,例如Sigmoid可以将输出值映射到 ( 0 , 1 ) (0,1) (0,1) 范围,适用于概率输出;而ReLU函数则可以引入非线性,使网络更具表达能力。
通过对输入加权和与阈值的比较,感知机可以做出决策——输出 y y y 的值将决定输入属于哪个类别。因此,感知机模型的核心就是利用权重和阈值来调整决策边界,从而实现分类功能。
2. 感知机实现基本逻辑运算
感知机可以通过合适的权重和阈值组合,来实现简单的逻辑运算,例如“与”(AND)、“或”(OR)和“非”(NOT)。下面我们将详细介绍如何使用感知机模型及其输出公式来实现这些逻辑运算。每种运算的实现都基于感知机的基本公式:
y = f ( ∑ i = 1 n w i x i − θ ) y = f\left(\sum_{i=1}^{n} w_i x_i - \theta \right) y=f(i=1∑nwixi−θ)
其中, f f f 通常是一个阶跃函数,即如果加权和超过阈值则输出1,否则输出0。
2.1 与运算(AND)
对于“与”运算,要求两个输入同时为1时输出1,否则输出0。因此感知机的设定如下:
-
权重: w 1 = w 2 = 1 w_1 = w_2 = 1 w1=w2=1
-
阈值: θ = 2 \theta = 2 θ=2
-
输出方程:
y = f ( 1 ⋅ x 1 + 1 ⋅ x 2 − 2 ) y = f(1 \cdot x_1 + 1 \cdot x_2 - 2) y=f(1⋅x1+1⋅x2−2)
计算过程分析
根据感知机的输出公式:
-
当 x 1 = 1 x_1 = 1 x1=1 且 x 2 = 1 x_2 = 1 x2=1 时,输入的加权和为:
1 ⋅ 1 + 1 ⋅ 1 − 2 = 0 1 \cdot 1 + 1 \cdot 1 - 2 = 0 1⋅1+1⋅1−2=0
使用阶跃函数 f f f,当输入等于阈值时仍然可以输出1,因此 y = 1 y = 1 y=1 。 -
当 x 1 x_1 x1 和 x 2 x_2 x2 中任意一个为0时,加权和小于阈值2,输出为0。具体来说:
- x 1 = 0 , x 2 = 1 x_1 = 0, x_2 = 1 x1=0,x2=1 或 x 1 = 1 , x 2 = 0 x_1 = 1, x_2 = 0 x1=1,x2=0 时,加权和为 1 − 2 = − 1 1 - 2 = -1 1−2=−1 。
- x 1 = 0 , x 2 = 0 x_1 = 0, x_2 = 0 x1=0,x2=0 时,加权和为 0 − 2 = − 2 0 - 2 = -2 0−2=−2 。
因此,感知机可以正确地实现“与”运算。
2.2 或运算(OR)
对于“或”运算,只要任一输入为1,则输出1;只有两个输入都为0时,输出0。因此感知机的设定如下:
-
权重: w 1 = w 2 = 1 w_1 = w_2 = 1 w1=w2=1
-
阈值: θ = 0.5 \theta = 0.5 θ=0.5
-
输出方程:
y = f ( 1 ⋅ x 1 + 1 ⋅ x 2 − 0.5 ) y = f(1 \cdot x_1 + 1 \cdot x_2 - 0.5) y=f(1⋅x1+1⋅x2−0.5)
计算过程分析
根据感知机的输出公式:
- 当 x 1 = 1 x_1 = 1 x1=1 或 x 2 = 1 x_2 = 1 x2=1 时,加权和至少为 1 − 0.5 = 0.5 1 - 0.5 = 0.5 1−0.5=0.5 ,大于等于0.5,因此输出 y = 1 y = 1 y=1。
- 当 x 1 = x 2 = 0 x_1 = x_2 = 0 x1=x2=0 时,加权和为 0 − 0.5 = − 0.5 0 - 0.5 = -0.5 0−0.5=−0.5 ,小于0.5,因此输出 y = 0 y = 0 y=0 。
因此,感知机可以正确地实现“或”运算。
2.3 非运算(NOT)
对于“非”运算,我们只有一个输入,当输入为1时输出0,当输入为0时输出1。因此感知机的设定如下:
-
权重: w 1 = − 0.6 w_1 = -0.6 w1=−0.6, w 2 = 0 w_2 = 0 w2=0(这里 x 2 x_2 x2 可以看作一个虚拟输入,总是等于0)
-
阈值: θ = − 0.5 \theta = -0.5 θ=−0.5
-
输出方程:
y = f ( − 0.6 ⋅ x 1 + 0.5 ) y = f(-0.6 \cdot x_1 + 0.5) y=f(−0.6⋅x1+0.5)
计算过程分析
根据感知机的输出公式:
- 当 x 1 = 1 x_1 = 1 x1=1 时,加权和为 − 0.6 ⋅ 1 + 0.5 = − 0.1 -0.6 \cdot 1 + 0.5 = -0.1 −0.6⋅1+0.5=−0.1 ,小于0,因此输出 y = 0 y = 0 y=0 。
- 当 x 1 = 0 x_1 = 0 x1=0 时,加权和为 − 0.6 ⋅ 0 + 0.5 = 0.5 -0.6 \cdot 0 + 0.5 = 0.5 −0.6⋅0+0.5=0.5,大于0,因此输出 y = 1 y = 1 y=1 。
因此,感知机可以正确地实现“非”运算。
2.4 无法实现异或运算(XOR)
在逻辑运算中,异或(XOR)运算的定义是:当两个输入不同时,输出为1;当两个输入相同时,输出为0。它的输出情况如下:
- x 1 = 0 , x 2 = 0 x_1 = 0, x_2 = 0 x1=0,x2=0 时,输出 y = 0 y = 0 y=0
- x 1 = 1 , x 2 = 0 x_1 = 1, x_2 = 0 x1=1,x2=0 时,输出 y = 1 y = 1 y=1
- x 1 = 0 , x 2 = 1 x_1 = 0, x_2 = 1 x1=0,x2=1 时,输出 y = 1 y = 1 y=1
- x 1 = 1 , x 2 = 1 x_1 = 1, x_2 = 1 x1=1,x2=1 时,输出 y = 0 y = 0 y=0
为什么感知机无法实现异或运算?
感知机只能解决线性可分的问题,而异或运算的输入与输出之间不存在一个简单的线性决策边界。换句话说,无法找到一条直线将“异或”运算中的正类( y = 1 y=1 y=1 )和负类( y = 0 y=0 y=0 )完全分开。因此,单层感知机无法实现“异或”运算。
图来自《机器学习(西瓜书)》_周志华:第五章:神经网络
从数学角度上讲,在异或问题中,四个输入的分布模式在二维空间中形成一个“X”形状——没有任何一条直线能够将这四个点正确划分。而感知机的输出公式
y = f ( ∑ i = 1 n w i x i − θ ) y = f\left(\sum_{i=1}^{n} w_i x_i - \theta \right) y=f(i=1∑nwixi−θ)
是线性的,只能通过调整权重和阈值实现直线的划分。因此,单层感知机的线性模型无法表达异或问题的非线性特征。为了解决异或问题,需要引入多层感知机(例如增加隐藏层)或更复杂的网络结构,以引入非线性映射。
3. 多层感知机(MLP)
尽管单层感知机能够实现基本的逻辑运算,但它无法处理非线性可分的问题,例如异或(XOR)问题。为了解决这一局限性,我们引入了多层感知机(MLP)模型。MLP通过引入隐藏层,使其具备处理复杂数据关系的能力。
3.1 MLP 结构
MLP通常由多个神经元层组成,包括输入层、一个或多个隐藏层和输出层。其基本计算过程为:
- 输入层:接收原始输入数据。
- 隐藏层:通过多个神经元进行特征提取和非线性变换。
- 输出层:根据隐藏层的输出生成最终结果。
3.2 通过两层感知机解决异或问题
两层感知机模型能够有效解决异或问题,其结构如下:
- 输入层:两个输入 x 1 x_1 x1和 x 2 x_2 x2。
- 隐藏层:两个神经元 f 11 f_{11} f11和 f 12 f_{12} f12。
- 输出层:一个输出 y y y。
3.3 计算过程
在该模型中,隐藏层的神经元输出通过以下方程计算:
-
对于 f 11 f_{11} f11:
f 11 = f ( 1 ⋅ x 1 + 1 ⋅ x 2 − 0.5 ) f_{11} = f(1 \cdot x_1 + 1 \cdot x_2 - 0.5) f11=f(1⋅x1+1⋅x2−0.5)
-
对于 f 12 f_{12} f12:
f 12 = f ( − 1 ⋅ x 1 + 1 ⋅ x 2 + 1.5 ) f_{12} = f(-1 \cdot x_1 + 1 \cdot x_2 + 1.5) f12=f(−1⋅x1+1⋅x2+1.5)
最后,输出层的计算为:
y = f ( 1 ⋅ f 11 + 1 ⋅ f 12 − 1 ) y = f(1 \cdot f_{11} + 1 \cdot f_{12} - 1) y=f(1⋅f11+1⋅f12−1)
3.4 计算表
x 1 x_1 x1 | x 2 x_2 x2 | f 11 f_{11} f11 | f 12 f_{12} f12 | y y y |
---|---|---|---|---|
0 | 0 | f ( 0 + 0 − 0.5 ) = 0 f(0 + 0 - 0.5) = 0 f(0+0−0.5)=0 | f ( − 0 + 0 + 1.5 ) = 1 f(-0 + 0 + 1.5) = 1 f(−0+0+1.5)=1 | 0 |
0 | 1 | f ( 0 + 1 − 0.5 ) = 1 f(0 + 1 - 0.5) = 1 f(0+1−0.5)=1 | f ( − 0 + 1 + 1.5 ) = 1 f(-0 + 1 + 1.5) = 1 f(−0+1+1.5)=1 | 1 |
1 | 0 | f ( 1 + 0 − 0.5 ) = 1 f(1 + 0 - 0.5) = 1 f(1+0−0.5)=1 | f ( − 1 + 0 + 1.5 ) = 1 f(-1 + 0 + 1.5) = 1 f(−1+0+1.5)=1 | 1 |
1 | 1 | f ( 1 + 1 − 0.5 ) = 1 f(1 + 1 - 0.5) = 1 f(1+1−0.5)=1 | f ( − 1 + 1 + 1.5 ) = 0 f(-1 + 1 + 1.5) = 0 f(−1+1+1.5)=0 | 0 |
在这种配置下,隐藏层通过组合两个神经元的输出,实现了异或运算的逻辑。隐藏层的每个神经元构成不同的“特征”,这些特征通过组合实现了异或的非线性决策边界。
4. 网络参数更新
在神经网络中,随着层数和神经元数量的增加,参数的数量将显著增加,从而提高了网络训练的复杂度。对于一个包含 d d d 个输入节点、 q q q 个隐藏层神经元和 l l l 个输出节点的神经网络,其参数更新量可以表示为:
( d + l + 1 ) q + l (d + l + 1)q + l (d+l+1)q+l
具体而言,参数的构成包括以下几个部分:
- 输入层到隐藏层的连接权重:共有 d × q d \times q d×q 个参数,表示从每个输入节点到每个隐藏层节点的连接权重。
- 隐藏层到输出层的连接权重:共有 q × l q \times l q×l 个参数,表示从每个隐藏层节点到每个输出节点的连接权重。
- 隐藏层的偏置项:共有 q q q 个参数,对应于每个隐藏层节点的偏置项。
- 输出层的偏置项:共有 l l l 个参数,对应于每个输出节点的偏置项。
因此,神经网络总参数的更新量可以表示为:
d × q + q × l + q + l = ( d + l + 1 ) q + l d \times q + q \times l + q + l = (d + l + 1)q + l d×q+q×l+q+l=(d+l+1)q+l
随着网络层数的增加和神经元数量的提升,参数的数量将迅速增加,这导致计算量增大,使得网络训练的复杂度提升。因此,在设计神经网络时,网络结构的合理性和参数数量的可控性至关重要。
5. 对非分类任务的扩展
虽然感知机最初是设计用于分类任务的,但它同样可以扩展用于非分类任务,如回归问题。在回归任务中,感知机的输出不再是离散的类别标签,而是一个连续值。
阈值在回归任务中的作用
在分类问题中,感知机通过阈值( θ \theta θ )来判断输出类别。在回归任务中,阈值依然起到重要作用,但其意义有所不同。回归任务的目标是最小化输出值与目标值之间的差距,而不是做出二元决策。因此,在回归任务中,阈值可以理解为影响预测值偏移量的一部分。
通过调整权重和阈值,网络可以学习到数据中的模式,以最小化输出与目标值之间的误差。具体来说,训练过程会利用误差反馈不断调整网络的权重和阈值,从而逐渐逼近目标值。这通常通过损失函数(如均方误差)来衡量误差大小,并通过梯度下降或其他优化算法逐步减小误差。
回归任务的实现
在回归任务中,我们通常会将输出层的激活函数设为线性函数(或其他适合连续值的激活函数)来生成连续输出值。例如,输出层可以直接使用线性激活函数 f ( x ) = x f(x) = x f(x)=x ,而不再是阶跃或sigmoid激活函数。这样,网络的输出将不受限于二元决策,而是可以产生连续值,从而适应回归任务的需求。
通过这种调整,感知机及神经网络可以在分类任务之外拓展至回归任务,在实践中广泛应用于数值预测、时间序列分析等领域。