1.M-P神经元
M-P神经元,全称为McCulloch-Pitts神经元,是一种数学模型,用于模拟生物神经元的功能。这个模型是由Warren McCulloch和Walter Pitts在1943年提出的。它是人工智能和计算神经科学领域中非常重要的早期模型。
M-P神经元接收n个输入(通常来自其他神经元),并给各个输入赋予权重计算加权和,然后和自身特有的阈值
θ
\theta
θ进行比较(作减法),最后经过激活函数(模拟“抑制”和“激活”)处理得到输出(通常是给下一个神经元)
y
=
f
(
∑
i
=
1
n
w
i
x
i
−
θ
)
=
f
(
w
T
x
+
b
)
y=f(\sum_{i=1}^nw_ix_i-\theta)=f(w^Tx+b)
y=f(i=1∑nwixi−θ)=f(wTx+b)
单个M-P神经元:感知机(sgn作激活函数)、对数几率回归(sigmoid作激活函数)
多个M-P神经元:神经网路
2.感知机(分类模型)
2.1 sgn函数
sgn 函数,或称为符号函数(sign function):是一个数学函数,用于确定一个实数的符号。sgn 函数的定义如下:
- 当x>0时,sgn(x)=1
- 当x=0时,sgn(x)=0
- 当x<0时,sgn(x)=-1
图像如下:
2.2 感知机
1)模型
其具体公式如下:
y
=
s
g
n
(
w
T
w
−
θ
)
=
{
1
,
w
T
x
−
θ
>
=
0
0
,
w
T
x
−
θ
<
0
y=sgn(w^Tw-\theta) =\begin{cases} 1& ,{w^Tx-\theta>= 0}\\ 0& ,{w^Tx-\theta<0} \end{cases}
y=sgn(wTw−θ)={10,wTx−θ>=0,wTx−θ<0
其中,
x
∈
R
N
x\in \mathbb{R}^N
x∈RN为样本的特征向量,是感知机模型的输入,
w
,
θ
w,\theta
w,θ是感知机模型的参数,
w
∈
R
n
w\in \mathbb{R}^n
w∈Rn为权重,
θ
\theta
θ 为阈值
从几何的角度来说,给定一个线性可分的数据集T,感知机的学习目标是求得能对数据集T中的正负样本完全正确划分的超平面,其中
w
T
x
−
θ
w^Tx-\theta
wTx−θ即为超平面方程。
n维空间的超平面
(
w
T
x
+
b
=
0
,
其中
w
,
x
∈
R
n
)
(w^Tx+b=0,其中w,x \in \mathbb R^n)
(wTx+b=0,其中w,x∈Rn):
- 超平面方程不唯一
- 法向量w垂直于超平面
- 法向量w和位移项b确定一个唯一超平面
- 法向量w指向的那一半空间为正空间,另一半为负空间
缺点: 只能解决线性可分的问题
模型图如下所示,只包含一个输入层和一个输出层。
2)策略
感知机的学习策略是,随机初始化
w
,
b
w,b
w,b,将全体训练样本带入模型找出误分类样本,假设此时误分类样本的集合为
M
⊆
T
M\subseteq T
M⊆T对任意一个误分类样本
(
x
,
y
)
∈
M
(x,y)\in M
(x,y)∈M来说,当
w
T
x
−
θ
>
=
0
w^Tx-\theta >=0
wTx−θ>=0时,模型输出值为
y
^
=
1
\hat y=1
y^=1,样本真实标记为y=0;繁殖,当
w
T
x
−
θ
<
0
w^Tx-\theta<0
wTx−θ<0时,模型输出值为
y
^
\hat y
y^=0,样本真实标记为y=1。综合两种情况可知,以下公式恒成立
(
y
^
−
y
)
(
w
T
x
−
θ
)
>
=
0
(\hat y-y)(w^Tx-\theta)>=0
(y^−y)(wTx−θ)>=0
所以,给定数据集T,其损失函数可以定义为:
L
(
w
,
θ
)
=
∑
x
∈
M
(
y
^
−
y
)
(
w
T
x
−
θ
)
L(w,\theta)=\sum_{x\in M}(\hat y-y)(w^Tx-\theta)
L(w,θ)=x∈M∑(y^−y)(wTx−θ)
此时损失函数是非负的。如果没有误分类点,损失函数值为0.而且,误分类点越少,误分类点离超平面越近,损失函数值就越小。
损失函数还可以进一步优化,将
θ
\theta
θ并入
w
w
w向量中成为第n+1维0,其中x的第n+1维恒为-1。那么损失函数进一步简化为:
L
(
w
)
=
∑
x
∈
M
(
y
^
−
y
)
w
T
x
L(w)=\sum_{x\in M}(\hat y-y)w^Tx
L(w)=x∈M∑(y^−y)wTx
3)算法
当误分类样本集合M固定时,可以球的损失函数
L
(
w
)
L(w)
L(w)的梯度为
∇
w
L
(
w
)
=
∑
x
i
∈
M
(
y
^
i
−
y
i
)
x
i
\nabla_wL(w)=\sum_{x_i\in M}(\hat y_i-y_i)x_i
∇wL(w)=xi∈M∑(y^i−yi)xi
学习算法具体采用的是随机梯度下降法,也即极小化过程中不是一次使M中的所有误分类点的梯度下降,而是一次随机选取一个误分类点使其梯度下降。所以权重
w
w
w的更新公式为:
w
←
w
+
Δ
w
w \leftarrow w+\Delta w
w←w+Δw
Δ
w
=
−
η
(
y
^
i
−
y
i
)
x
i
=
η
(
y
i
−
y
^
i
)
x
i
\Delta w=-\eta(\hat y_i-y_i)x_i=\eta(y_i-\hat y_i)x_i
Δw=−η(y^i−yi)xi=η(yi−y^i)xi
其中
η
\eta
η为学习率,最终解出来的w通常不唯一。
从几何角度方便理解一点,如下图所示,
可以看到红线和绿线都可以把正负样本分开,它们代表了两组
w
w
w,因此说明解不唯一。
3.神经网络
为了解决线性不可分的数据集(其他的当个神经元的模型也可以结局线性不可分的数据集,只是感知机不可以),提出了由多个神经元构成的神经网络,且用通用近似定理可以证明:只需一个包含足够多神经元的隐层,多层前馈网络(最经典的神经网络之一)就能以任意精度逼近任意复杂度的连续函数。
优点:
既能做回归,也能做分类,而且不需要复杂的特征工程。
需要考虑的问题:
- 对于具体场景,神经网络该做多深,多宽?(没有理论支撑,都是实践经验)
- 对于具体场景,神经网络的结构该如何设计才最合理(没有强理论指导)
- 对于具体场景,神经网络的输出结果该如何解释?(模型的可解释性可以用来指导特征调整)
经典神经网络——多层前馈网络:
每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接。
将神经网络(NN)看作一个特征加工函数
x
∈
R
d
→
N
N
(
x
)
→
y
=
x
∗
∈
R
l
x\in R^d \rightarrow NN(x) \rightarrow y=x^* \in R^l
x∈Rd→NN(x)→y=x∗∈Rl
回归:后面接一个
R
l
→
R
R^l \rightarrow R
Rl→R的 神经元
y
=
w
T
x
∗
+
b
y=w^Tx^*+b
y=wTx∗+b
分类:后面接一个
R
l
→
[
0
,
1
]
R^l \rightarrow [0,1]
Rl→[0,1]的神经元,例如激活函数为sigmoid函数的神经元
y
=
1
1
+
e
−
(
w
T
x
∗
+
b
)
y=\frac{1}{1+e^{-(w^Tx^*+b)}}
y=1+e−(wTx∗+b)1
神经网络可以自动提取特征不用人为的手工设计特征。
神经网络训练方法——BP算法:
在20世纪80年代之前,尽管神经网络已经存在一段时间,但其实际应用受到了限制,主要原因在于无法有效地训练多层神经网络。
在这个背景下,1986年,David E. Rumelhart, Geoffrey E. Hinton, 和 Ronald J. Williams在他们的论文《Learning representations by back-propagating errors》中提出了反向传播算法。这一算法为多层前馈神经网络的训练提供了一个有效的方法,使得神经网络可以在更多复杂问题上展现出强大的表现力。
BP算法是一种基于随机梯度下降的参数更新算法。反向传播算法在处理多层神经网络时,通过链式法则有效地计算梯度,而随机梯度下降则用于基于这些梯度更新权重。反向传播算法与随机梯度下降相辅相成,共同实现了多层神经网络的高效训练。
下面是以输入层第i个神经元与隐层第h个神经元之间的连接全
v
i
h
v_{ih}
vih为例推导一下:
损失函数
E
k
=
1
2
∑
j
=
1
l
(
y
^
j
k
−
y
j
k
)
2
E_k=\frac12\sum^l_{j=1}(\hat y^k_j-y^k_j)^2
Ek=21j=1∑l(y^jk−yjk)2
Δ
v
i
h
=
−
η
∂
E
k
∂
v
i
h
\Delta v_{ih}=-\eta \frac{\partial{E_k}}{\partial{v_{ih}}}
Δvih=−η∂vih∂Ek
用链式求导得到
∂
E
k
∂
v
i
h
=
∑
j
=
1
l
∂
E
k
∂
y
^
j
k
∗
∂
y
^
j
k
∂
β
j
∗
∂
β
j
∂
b
h
∗
∂
b
h
∂
α
h
∗
∂
α
h
∂
v
i
h
\frac{\partial{E_k}}{\partial{v_{ih}}}=\sum^l_{j=1}\frac{\partial{E_k}}{\partial{\hat y^k_j}}*\frac{\partial{\hat y^k_j}}{\partial{\beta_j }}*\frac{\partial{\beta_j }}{\partial{b_h}}*\frac{\partial{b_h}}{\partial{\alpha_h}}*\frac{\partial{\alpha_h}}{\partial{v_{ih}}}
∂vih∂Ek=j=1∑l∂y^jk∂Ek∗∂βj∂y^jk∗∂bh∂βj∗∂αh∂bh∗∂vih∂αh