1.神经元模型
神经元模型是人工神经网络中的基本计算单元,它模仿了生物神经网络中的神经元。神经元模型接收来自其他神经元或外部环境的输入信号,然后根据这些信号产生输出。神经元模型的核心思想是使用激活函数(activation function)来模拟神经元的激活和抑制过程
一个典型的简单神经元模型如下图所示
在神经元模型中,主要有以下几个部分:
- 输入 x i x_i xi(Input):神经元从其他神经元或外部环境接收输入信号。这些输入可以是数值,也可以是向量,而输入信号的数量称为神经元的输入维度
- 权重 w i w_i wi(Weight):权重是神经元之间的连接强度,决定了输入信号对神经元输出的影响。权重通常是可学习的参数,通过训练算法进行调整以优化模型性能
- 偏置项(Bias):偏置项是一个额外的输入,用于调整神经元的激活阈值 θ \theta θ
- 激活函数(Activation Function) f ( ) f() f():激活函数将神经元的净输入(输入信号与权重和偏置项的加权和)转换为输出信号
- 输出 y y y(Output):神经元的输出信号,可以是数值或向量。输出信号通常作为下一个神经元的输入,或者在输出层作为模型的预测结果,在此处定义为 y = f ( ∑ i = 1 n w i x i − θ ) y=f\left(\sum_{i=1}^nw_ix_i-\theta\right) y=f(i=1∑nwixi−θ)
上述部分中,激活函数在理想中通常是阶跃函数,但是由于它具有不连续、不光滑等性质,因此使用Sigmoid函数作为激活函数,也被称为“挤压函数”。两个函数的图像如下所示
将一个个简单的神经元按一定的层次结构连接就形成了神经网络,在计算机中,这样的神经网络就是一个包含了许多许多参数的数学模型,而这个模型就是若干函数的组合
2.感知机与多层网络
感知机由两层神经元组成,如下图所示,输入层接收外界输入信号后传递给输出层,输出层是M-P神经元,也称“阈值逻辑单元”,通过感知器可实现输入
x
1
x_1
x1和
x
2
x_2
x2的逻辑线性运算,再通过输出层进行非线性变换得到输出
之前已经说过,权重
w
i
w_i
wi和阈值
θ
\theta
θ可以通过学习得到,感知器的学习规则主要概括就是通过修正当前输出值
y
^
\hat y
y^与函数得到的输出值
y
y
y来调整权重
w
i
w_i
wi,实现方式就是通过类似于梯度下降的方法,根据两个输出值的差值确定下降的方向和距离。公式定义为
w
i
←
w
i
+
Δ
w
i
w_i\gets w_i+\Delta w_i
wi←wi+Δwi
Δ
w
i
=
η
(
y
−
y
^
)
x
i
\Delta w_i=\eta(y-\hat y)x_i
Δwi=η(y−y^)xi其中
η
∈
(
0
,
1
)
\eta\in(0,1)
η∈(0,1)为学习率,只当
y
=
y
^
y=\hat y
y=y^时感知机不发生变化,否则根据偏差程度进行权重调整
感知机只有输出层神经元能进行激活函数处理,上述的与、或、非线性问题都在学习过程中达到收敛,即达到误差为零或者达到一定的误差条件,否则在学习过程中会产生振荡,即权重时增时减,难以达到稳定状态。要解决这个问题可以考虑多层功能神经元,如在输入层与输出层间加一层隐含层,它也具有激活函数的功能。更常见的神经网络是“多层前馈神经网络”,“前馈”是指网络拓扑结构上不存在环或回路。这种神经网络中相邻两层的神经元全互连,而同层和跨层间则无相连,如下图所示
只包含一层隐含层的称为“单隐层前馈网络”或者“两层网络”,两层是指有两层具有激活函数功能的神经元。神经网络的学习过程就是根据训练数据调整神经元间的“连接权”以及每个功能神经元的阈值
3.误差逆传播算法
显然多层的神经网络学习力比单层的感知器强的多,训练的规则也更复杂,**误差逆传播算法(BP)**就是训练多层前馈神经网络的一种算法,这种算法说白了就是按照梯度下降的方法使预测结果与实际结果的误差达到最小,其中使用很多中间变量参数进行求偏导简化学习过程
该算法的核心思想是通过比较神经网络的输出与真实标签之间的误差,然后反向传播这个误差,并根据误差梯度来更新网络中的权重,以使网络的输出更接近真实标签,从而最小化预测误差
给定的数据集
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
.
,
(
x
m
,
y
m
)
}
,
x
i
∈
R
d
,
y
i
∈
R
l
D=\{(x_1,y_1),(x_2,y_2),....,(x_m,y_m)\},x_i\in\mathbb{R^d},y_i\in\mathbb{R^l}
D={(x1,y1),(x2,y2),....,(xm,ym)},xi∈Rd,yi∈Rl,表示有
d
d
d个属性描述,输出为
l
l
l维实值向量。上图表示了一个
d
d
d个输入神经元、
l
l
l个输出神经元、
q
q
q个隐层神经元的前馈神经网络结构。假设隐层和输出层神经元使用的激活函数是
S
i
g
m
o
i
d
Sigmoid
Sigmoid函数。所示的网络有几个参数要确定:输入层到隐层的
d
×
q
d\times q
d×q个权值、隐层到输出层的
q
×
l
q\times l
q×l个权值,
q
q
q个隐层神经元的阈值、
l
l
l个输出层神经元的阈值
记隐层的第 j j j个神经元接收到的输入为 α h = ∑ i = 1 d v i h x i \alpha_h=\sum_{i=1}^dv_{ih}x_i αh=∑i=1dvihxi输出层第i个神经元接受的输入为 β j = ∑ h = 1 q w h j x h \beta_j=\sum_{h=1}^qw_{hj}x_h βj=∑h=1qwhjxh, b h b_h bh为隐层第 h h h个神经元的输出,则总的输出定义为 y ^ j k = f ( β j − θ j ) \hat y_j^k=f(\beta_j-\theta_j) y^jk=f(βj−θj)网络的均方误差为 E k = 1 2 ∑ j = 1 l ( y ^ j k − y j k ) 2 E_k=\frac{1}{2}\sum_{j=1}^l(\hat y_j^k- y_j^k)^2 Ek=21j=1∑l(y^jk−yjk)2与前面的类似,根据感知器规则设置参数更新使 v ← v + Δ v v\gets v+\Delta v v←v+Δv给定学习率 η \eta η后可以得到 Δ w h j = − η ∂ E k ∂ w h j \Delta w_{hj}=-\eta\frac{\partial E_k}{\partial w_{hj}} Δwhj=−η∂whj∂Ek ∂ E k ∂ w h j = ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j ⋅ ∂ β j ∂ w h j \frac{\partial E_k}{\partial w_{hj}}=\frac{\partial E_k}{\partial\hat y_j^k}·\frac{\partial\hat y_j^k}{\partial\beta_j}·\frac{\partial\beta_j}{\partial w_{hj}} ∂whj∂Ek=∂y^jk∂Ek⋅∂βj∂y^jk⋅∂whj∂βj且有 ∂ β j ∂ w h j = b h \frac{\partial\beta_j}{\partial w_{hj}}=b_h ∂whj∂βj=bh g j = − ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j = − ( y ^ j k − y j k ) f ′ ( β j − θ j ) = y ^ j k ( 1 − y ^ j k ) ( y j k − y ^ j k ) \begin{alignedat}{3} g_j& =- \frac{\partial E_k}{\partial\hat y_j^k}·\frac{\partial\hat y_j^k}{\partial\beta_j}\\ & = -(\hat y_j^k-y_j^k)f'(\beta_j-\theta_j) \\ & = \hat y_j^k(1-\hat y_j^k)(y_j^k-\hat y_j^k) \\ \end{alignedat} gj=−∂y^jk∂Ek⋅∂βj∂y^jk=−(y^jk−yjk)f′(βj−θj)=y^jk(1−y^jk)(yjk−y^jk)就可以得到 Δ w h j = n g j b h \Delta w_{hj}=ng_jb_h Δwhj=ngjbh类似分别得到 Δ θ j 、 Δ v i h 、 Δ γ h \Delta\theta_j、\Delta v_{ih}、\Delta\gamma_h Δθj、Δvih、Δγh,整体的流程概括一下就是下图
标准BP算法的目标是最小化训练集
D
D
D的累积误差
E
=
1
m
∑
k
=
1
m
E
k
E=\frac{1}{m}\sum_{k=1}^mE_k
E=m1k=1∑mEk,每次针对一个训练样例进行更新,即它是基于单个
E
k
E_k
Ek推导而得的,而基于累积误差最小化的算法被称为累积误差逆传播算法,也就是累积BP算法,它读取全部数据样本一次后才对参数进行更新
由于BP神经网络具有强大的学习表示能力,容易造过拟合,可以通过“早停”或者“正则化”的方式。前者是将数据集 D D D分成训练和测试集,训练集误差降低但测试集误差增高则停止训练;后者通过在损失函数中增加参数的绝对值之和,以惩罚模型中不重要的特征,使其权重趋向于稀疏化。在训练过程中,L1 正则化使得一些特征的权重变得非常小或者为零,从而实际上起到了特征选择的作用。这有助于提高模型的泛化能力,同时减少了模型的复杂性,误差目标函数就变成了 E = 1 m ∑ k = 1 m E k + ( 1 − λ ) ∑ i w i 2 E=\frac{1}{m}\sum_{k=1}^mE_k+(1-\lambda)\sum_iw_i^2 E=m1k=1∑mEk+(1−λ)i∑wi2
4.全局最小与局部最小
在上述参数优化问题中,我们常常遇到两个重要的概念:全局最小和局部最小。这些概念涉及到寻找函数的最小值点
- 全局最小(Global Minimum):
全局最小指的是函数在整个定义域范围内取得的最小值。形式化地说,对于一个函数 f(x),如果对于所有 x 属于定义域 D,有 f(x) ≤ f(y) 对于所有 y 属于 D 成立,那么 f(x) 就是全局最小值。换句话说,全局最小是函数在整个范围内的最小值,它代表着整个函数的最优解 - 局部最小(Local Minimum):
局部最小指的是函数在某个局部范围内取得的最小值,但并不一定是在整个定义域中的最小值。形式化地说,对于一个函数 f(x),如果存在某个局部区间 I,使得对于所有 x 属于 I,有 f(x) ≤ f(y) 对于所有 y 属于 I 成立,那么 f(x) 就是局部最小值。换句话说,局部最小是函数在某个特定范围内的最优解,但不一定是整个函数的最优解
寻找全局最小是优化问题中最理想的情况,因为它表示我们找到了函数的最优解,无论初始点在哪里,优化算法都能收敛到这个全局最小值。而局部最小存在的问题是优化算法可能会陷入局部最小点而无法跳出。这意味着算法可能无法找到全局最小值,而只能找到一个局部最小值,这在优化问题中可能会导致得到次优解
为了解决局部最小而采取的方法有以下几种:
- 用多组不同参数初始化多个神经网络取误差最小的作为最终参数
- 使用“模拟退火”技术,其核心思想是允许算法在搜索过程中在一定程度上接受较差的解,以避免陷入局部最优解
- 使用随机梯度下降,加入随机因素,有机会跳出局部最小继续搜索
- 遗传算法使用交叉和变异操作来搜索解空间,从而更可能找到全局最小值
5.其他常见的神经网络
神经网络的模型算法繁多,但以下几种算法在实际中并不常用,它们可以看成是对原有BP算法的改进思路,主要有RBF网络、ART网络、SOM网络、级联相关网络、Elman网络和Boltzmann机
- RBF网络:RBF网络为单隐层前馈网络,它使用径向基函数作为激活函数,假定输出为 d d d维向量 x x x,输出为实数,RBF网络表示为 φ ( x ) = ∑ i = 1 q w i ρ ( x , c i ) \varphi(x)=\sum_{i=1}^qw_i\rho(x,c_i) φ(x)=i=1∑qwiρ(x,ci)径向基函数为 ρ ( x , c i ) = e − β i ∣ ∣ x − c i ∣ ∣ 2 \rho(x,c_i)=e^{-\beta_i||x-c_i||^2} ρ(x,ci)=e−βi∣∣x−ci∣∣2这个函数越接近某一值则越大,而Sigmoid函数是输入越大值越大,同时径向基函数也证明具有足够多的隐层神经元的RBF网络能以任意精度逼近任意连续函数,这也是所有神经网络函数具有的性质
- ART网络:竞争型学习是ART网络的一大特征,即每时刻仅有一个获胜的神经元被激活,其他的神经元被抑制,ART网络中的识别层神经元进行距离方式的竞争,距离最小的获胜。ART网络也缓解了“可塑性-稳定性窘迫”,有学习新知识能力的同时不忘记旧知识的记忆,这使得ART网络可以进行增量学习或在线学习,扩展的方式
- SOM网络:SOM网络能将高维输入数据映射到低维空间,同时保持输入数据高维的拓扑结构,通过权重计算间接实现分类问题,下图可以看到三维的输入层输出为二维
-
级联相关网络:它主要有俩部分,“级联”和“相关”,级联是指建立层次连接的层级结构,刚开始训练时网络只有输入层和输出层,是最小拓扑结构,随着训练的进行,加入新的隐层神经元,其输入端连接权值是固定的。相关是指通过最大化新神经元的输出与网络误差之间的相关性来训练相关的参数
实际上是跨层连接,原来不直接连接的进行了相连,从复杂变得简单,避免了过拟合 -
Elman网络:简单说就是第一层的输出 t 1 t_1 t1作为第二层的输入,第二层的输出 t 2 t_2 t2和第一层的输出 t 1 t_1 t1作为第三层的输入,因此具有循环的意思
-
Boltzmann机:Boltzmann机具有通用性强的特点,它里面的神经元都是布尔值,即输入的参数都要经过布尔处理,如瓜的颜色是否为某色分成0和1两种状态,再将多个属性形成的布尔串的联合概率拟合出来,最后进行更新
令向量 s ∈ { 0 , 1 } n s\in\{0,1\}^n s∈{0,1}n表示 n n n个神经元的状态, w i j 表示神经元 w_{ij}表示神经元 wij表示神经元 i i i与 j j j间的连接权, θ i \theta_i θi表示阈值,状态向量对应的Boltzmann机定义为 E ( s ) = − ∑ i = 1 n − 1 ∑ j = i + 1 n w i j s i s j − ∑ i = 1 n θ i s i E(s)=-\sum_{i=1}^{n-1}\sum_{j=i+1}^nw_{ij}s_is_j-\sum_{i=1}^n\theta_is_i E(s)=−i=1∑n−1j=i+1∑nwijsisj−i=1∑nθisi概率的拟合表示为 P ( s ) = e − E ( s ) ∑ t e − E ( t ) P(s)=\frac{e^{-E(s)}}{\sum_te^{-E(t)}} P(s)=∑te−E(t)e−E(s)由于Boltzmann机的比较复杂,因此一般使用受限Boltzmann机,用“对比散度”算法训练
6.深度学习
典型深度学习是一种机器学习方法,它通过构建多层神经网络来学习数据的抽象表示和特征,并在训练过程中逐渐调整网络参数以最小化损失函数,从而实现模型的优化和预测任务
“预训练+微调"和"权共享” 是两种优化深度学习的策略,常用于在大规模数据集上进行预训练,在特定任务上进行微调,或者在多个相关任务之间共享模型权重来提高模型效果
- 预训练+微调:
预训练阶段:在大规模数据集上,通常是无监督的方式进行预训练。这个过程可以使用自编码器、对抗生成网络 (GAN) 或者变分自编码器等。预训练的目标是使得模型学习到数据的一般特征和表示
微调阶段:在预训练的基础上,使用特定的标记数据集对模型进行有监督的训练,来适应特定任务。这个阶段只会微调预训练模型的一小部分参数,通常是输出层和少数几层。这样做的好处是可以利用预训练模型已学习到的一般特征,从而在较小的标记数据集上表现更好 - 权共享:
权共享是指在多个相关任务之间共享模型的权重参数。这些任务通常有一些共同的特征,通过在这些任务中共享权重,可以提高模型在每个任务上的性能,同时减少了模型训练的参数数量和计算成本
权共享的关键在于找到适合多个任务的共享表示。一种常见的做法是设计一个多任务学习模型,共享一部分网络层,然后各自拥有独立的任务特定层
卷积神经网络(CNN) 就是一种深度学习模型,用于处理图像等网格状数据。它通过卷积层提取局部特征,池化层减小特征图尺寸,激活函数引入非线性,全连接层映射高级特征,最后通过输出层实现任务目标。在训练过程中,CNN通过反向传播算法优化参数,使得模型能够自动学习图像中的抽象特征,从而在图像分类、目标检测等任务中取得优秀的表现