神经网络的概念来源于生物学(仿生),并受其启发,但神经网络的发展早已摆脱了仿生物学的思路。 该领域现在研究的热门方向为深度神经网络。
“标准BP算法”并不“标准”,真正使用的是累计BP算法(目标为最小化训练集
D
D
D上的累计误差)。
BP算法是梯度下降法的应用。
梯度下降算法:在参数寻优的过程中需要避免目标函数陷入局部极小。生活中的例子:盲人下山很有可能下到半山上的一个深坑中,这个“坑”就是局部极小。 梯度下降法的每一步只能感觉当前下降最快的方向,这一点很像盲人,没有全局视野,“入坑”难免。
模拟退火法:不是防止“入坑”而是考虑如何“跳出坑”,策略是加入“碰运气”成份(随机扰动)
在梯度下降算法中每次随机地从训练集中取小批量进行训练,这种方法称为随机梯度下降法。
神经元模型
【西瓜书图5.1】所示为神经元模型的一种(M-P神经元模型)。
设激活函数为
f
f
f,则该神经元的数学模型为
y
=
f
(
∑
i
=
1
n
w
i
x
i
−
θ
)
=
f
(
∑
i
=
1
n
+
1
w
i
x
i
)
\begin{align} y & =f\left(\sum_{i=1}^nw_ix_i-\theta \right)\tag{5.1} \\ & =f\left(\sum_{i=1}^{n+1}w_ix_i \right)\tag{5.2} \end{align}
y=f(i=1∑nwixi−θ)=f(i=1∑n+1wixi)(5.1)(5.2)
其中,式(5.1)变为式(5.2)是将阈值
θ
\theta
θ作为
w
n
+
1
w_{n+1}
wn+1,对应为固定输入
x
n
+
1
=
−
1
x_{n+1}=-1
xn+1=−1,即将
x
\boldsymbol{x}
x扩一维后公式变简洁了,参考3.1 线性回归中式(5)的推导。
因生物学中的神经元的状态为兴奋与抑制,以1和0表示,故取标记为 y i ∈ { 1 , 0 } y_i \in \{1,0\} yi∈{1,0},对应的神经元输出为符号 s g n \mathrm{sgn} sgn函数【西瓜书图5.2(a)】,然而, s g n \mathrm{sgn} sgn函数(也叫 s i g n \mathrm{sign} sign函数)的数学性质不好(不连续),通常以 s i g m o i d \mathrm{sigmoid} sigmoid函数逼近它【西瓜书图5.2(b)】,即式(5.1)与式(5.2)中取激活函数为 f ( x ) = s i g m o i d ( x ) f(x)=\mathrm{sigmoid}(x) f(x)=sigmoid(x)。
注意调整字母:设数据集 { ( x i , y i ) } i = 1 m \{(\boldsymbol{x}_i,y_i)\}_{i=1}^m {(xi,yi)}i=1m,其中,样本 x i = ( x i 1 ; x i 2 ; ⋯ ; x i n ) \boldsymbol{x}_i=(x_{i1};x_{i2};\cdots;x_{in}) xi=(xi1;xi2;⋯;xin),二分类中对应的标记 y i ∈ { 0 , 1 } y_i \in \{0,1\} yi∈{0,1}(或 y i ∈ { − 1 , 1 } y_i \in \{-1,1\} yi∈{−1,1}),这时,由样本 x i \boldsymbol{x}_i xi在上述神经元中产生的输出值通常不记为 y i y_i yi,而是记为 y ^ i \hat{y}_i y^i,因为, y i y_i yi已被标记所占用,即标记为 y i ∈ { 0 , 1 } y_i \in \{0,1\} yi∈{0,1}(这是二元素的集合),神经元输出值为 y ^ i ∈ ( 0 , 1 ) \hat{y}_i\in(0,1) y^i∈(0,1)(这是区间)。
另外,回顾3.2 对数几率回归(逻辑回归)【西瓜书式(3.18)(3.19)】就可用这里的神经元模型(【西瓜书图5.1】右上角公式及【西瓜书图5.2(b)】的公式)来表达, 比较二者知:公式是一致的(记 θ = − b \theta =-b θ=−b)。 即实际上对数几率回归是一个激活函数为 s i g m o i d \mathrm{sigmoid} sigmoid的神经元模型。 然而,二者的解释意义反映不同的侧面:一个是从概率角度,一个是从神经元角度。 结合二者就是:神经元的输出可以视为样本为正例的概率。
感知机与多层网络
感知机实际上就是一个神经元【西瓜书图5.3】所示,只不过是将样本输入用一组结点表示(一个属性对应一个结点),形成输入层,而神经元(一个)充当了输出层。
设数据集 { ( x i , y i ) } i = 1 m \{(\boldsymbol{x}_i,y_i)\}_{i=1}^m {(xi,yi)}i=1m, f f f取阶跃函数,现在我们对感知机进行训练:
(1)先任意初始化参数 w \boldsymbol{w} w(含 θ \theta θ的),记为 w 0 \boldsymbol{w}_0 w0;
(2)任取一样本 x \boldsymbol{x} x,将其输入到感知机(代入式(5.2))得到 y ^ \hat{y} y^,比较 y ^ \hat{y} y^与 y {y} y,若不符,则调整参数为 w 1 \boldsymbol{w}_1 w1;
(3)再任取一样本 x \boldsymbol{x} x,将其输入到感知机(代入式(5.2))得到 y ^ \hat{y} y^,比较 y ^ \hat{y} y^与 y {y} y,若不符,则再调整参数为 w 2 \boldsymbol{w}_2 w2;
(4)以此类推,直到 w \boldsymbol{w} w收敛。
上述调整 w \boldsymbol{w} w的迭代式为【西瓜书式(5.1)(5.2)】,如果是线性可分的问题,则迭代式是收敛的,即经过足够的“时间步”之后, w \boldsymbol{w} w会(趋于)保持不变,其数学证明从略。 感知机视为两层(输入层和输出层)神经网络或一层功能层神经网络(输入层不运算),它适用于线性可分情况。
如果不是线性可分的问题,则迭代式不收敛,但可以构造含隐层的网络来解决(【西瓜书p.106】指出只需含足够多结点的单隐层即可)。 只要有隐层即称为多层,有足够多的层则称为深度学习网络。
误差逆传播算法
标准BP算法
【西瓜书图5.7】描述的是只含一个隐层(最简单的情况)的BP网络,除输入结点外,其余每个结点均为一个神经元。 为便于理解下面补充如下描述,一些约定俗成的知识可供读者作神经网络图时参照。
我们先改造样例的表示:设数据集
{
(
x
k
,
y
k
)
}
k
=
1
m
,
(
y
k
∈
{
1
,
2
,
⋯
,
l
}
)
\{(\boldsymbol{x}_k,y_k)\}_{k=1}^m,\quad (y_k \in \{1,2,\cdots,l\})
{(xk,yk)}k=1m,(yk∈{1,2,⋯,l}),将
l
l
l个类别标识
{
1
,
2
,
⋯
,
l
}
)
\{1,2,\cdots,l\})
{1,2,⋯,l})对应成
l
l
l维向量:类1对应为
(
1
;
0
;
⋯
;
0
)
(1;0;\cdots;0)
(1;0;⋯;0)(第1位为1,其余全为0),类2对应为
(
0
;
1
;
⋯
;
0
)
(0;1;\cdots;0)
(0;1;⋯;0)(第2位为1,其余全为0),
⋯
\cdots
⋯,类
l
l
l对应为
(
0
;
0
;
⋯
;
1
)
(0;0;\cdots;1)
(0;0;⋯;1)(第
l
l
l位为1,其余全为0),这组向量记为:
{
y
j
}
j
=
1
l
\{\boldsymbol{y}_j\}_{j=1}^l
{yj}j=1l,其中
y
j
\boldsymbol{y}_j
yj表是第
j
j
j行为1其余全为0的“独1”列向量。 这里为明确区别,将标记改为上标表示,即
y
j
\boldsymbol{y}_j
yj表示类别
j
j
j的标识向量,
y
k
\boldsymbol{y}^k
yk表示样本
x
k
\boldsymbol{x}_k
xk的标记向量。 在此改造下,数据集变为
{
(
x
k
,
y
k
)
}
k
=
1
m
,
(
y
k
∈
{
y
j
}
j
=
1
l
)
\{(\boldsymbol{x}_k,\boldsymbol{y}^k)\}_{k=1}^m,\ (\boldsymbol{y}^k \in \{\boldsymbol{y}_j\}_{j=1}^l)
{(xk,yk)}k=1m, (yk∈{yj}j=1l)。 即样本是向量,标记也是向量(且为“独1”向量),对应到神经网络即是:输入是向量,输出也是向量。
再看图形特征:
(1)网络结构
- 输入层对应于样本 x \boldsymbol{x} x向量,即输入层的结点数对应于样本 x \boldsymbol{x} x的属性数 d d d,每个属性对应一个结点,用属性 x i x_i xi标识该结点;
- 输出层对应于输出向量,即输出层的结点数对应于上述类别向量的维度数 l l l,用对应的类别标识 y j y_j yj代表该结点数;
- 只有一个隐层,隐层的结点数没有限制,通常大于输入层和输出层结点;
- 从图形上看,层的编号是从底往上数的,输入层画在最底层。
(2)网络结点
- 不同层用不同的字母表示:输入层用 x x x,输出层用 y y y,隐层用 b b b;
- 下标表示结点的序号;
- 下标变量也依层而异: i , j , h i,j,h i,j,h对应到 x i , y j , b h x_i,y_j,b_h xi,yj,bh。
(3)网络连线
- 同层内没有连线;
- 邻层间“全连接”,且为有向连接线(从低层指向高层,常省略箭头);
- 每条连线上都有权重,如,第一层线的权重用字母 v v v表示,第二层线的权重用字母 w w w表示;
- 权重字母下标标识连接线的起点与终点,如, w h j w_{hj} whj表示 b h b_h bh到 y j y_j yj的有向连线上的权重。
(4)神经元
- 除输入结点外,每个结点都为一个神经元;
- 神经元的输入:从有向连线的视角来看,结点的输入为每条入线之和,而每条入线的值为该线的起点值乘以该线的权重。 即每个神经元都有一个加权输入:如, y j y_j yj的加权输入为 ∑ h = 1 q w h j b h \sum_{h=1}^qw_{hj}b_h ∑h=1qwhjbh,【西瓜书图5.7右上角】记为 β j {\beta}_j βj;
- 神经元的阈值:同层的神经元的阈值用同一字母,如,隐层的为 θ {\theta } θ,输出层的为 γ \gamma γ,阀的下标与该结点的下标一致,如, θ j {\theta }_j θj表示结点 y j y_j yj的阈值, γ h {\gamma }_h γh表示结点 b h b_h bh的阈值;
- 神经元的输出:神经元依输入(加权和)、阈值经过激活函数产生输出【西瓜书图5.1右上角公式】,所有神经元的激活函数均使用对数几率函数【西瓜书图5.2(b)】。
前述我们知道:样本向量的标记为向量,神经网络的输出(一组神经元的输出)也是向量,那么,这个向量有什么要求?
y
^
k
=
(
y
^
1
k
;
y
^
2
k
;
⋯
;
y
^
l
k
)
\begin{align} \hat{\boldsymbol{y}}^k=(\hat{y}_1^k;\hat{y}_2^k;\cdots;\hat{y}_l^k) \tag{5.3} \end{align}
y^k=(y^1k;y^2k;⋯;y^lk)(5.3)
由于所有神经元的激活函数均使用对数几率函数,故
y
^
j
k
\hat{y}_j^k
y^jk为连续值,训练的目标就是希望以连续型向量
y
^
k
\hat{\boldsymbol{y}}^k
y^k式(5.3)预测离散型的“独1”向量
y
k
{\boldsymbol{y}}^k
yk,由此构造均方误差
E
k
E_k
Ek【西瓜书式(5.4)】。 将
E
k
E_k
Ek中的
k
k
k视为“时间步”,希望足够的“时间步”后,
E
k
E_k
Ek达到最小值。
注:(1)这里将
y
k
{\boldsymbol{y}}^k
yk视为样本
x
k
{\boldsymbol{x}}^k
xk的真值,而不是观察值;(2)前面以分类导出
y
k
{\boldsymbol{y}}^k
yk为“独1”向量,其实
y
k
{\boldsymbol{y}}^k
yk推广到了一般情形:
y
k
∈
R
l
{\boldsymbol{y}}^k \in \mathbb{R}^l
yk∈Rl,参见3.3 线性判别分析LDA中的多分类LDA。
在实际训练中, k k k亦可为样本的编号,当样本足够多时,依样本的次序对 E k E_k Ek进行训练,直至收敛到最小值即可。 然而,通常样本数小于训练所需的“时间步”数,这就要重复使用样本了。
用 ( x k , y k ) (\boldsymbol{x}_k,\boldsymbol{y}^k) (xk,yk)训练 E k E_k Ek的基本思路即为误差逆向传播(BP算法),要点为:
(1)用梯度下降法寻找目标 E k E_k Ek的负梯度方向(下降最快的方向),即【西瓜书式(5.6)】,参见【西瓜书第B.4节梯度下降法】,其中 η ∈ ( 0 , 1 ) \eta \in (0,1) η∈(0,1)为学习率,它控制更新的步长:步子太大可能会越过最优点,步子太小则收敛速度太慢;
(2)利用偏导数的链式法则,将上述梯度化为沿“逆向路径”的偏导数。
(3)利用对数几率函数求导的良好性质,得到更新公式【西瓜书式(5.11) ∼ \,\thicksim ∼(5.14)】。
我们重点推导【西瓜书式(5.10)】:
∂
E
k
∂
y
^
j
k
=
y
^
j
k
−
y
j
k
(由【西瓜书式(5.4))】
∂
y
^
j
k
∂
β
j
=
∂
f
(
β
j
−
θ
j
)
∂
(
β
j
−
θ
j
)
(由【西瓜书式(5.3)】)
=
f
′
(
β
j
−
θ
j
)
=
f
(
β
j
−
θ
j
)
[
1
−
f
(
β
j
−
θ
j
)
]
(由【西瓜书式(5.9))】
=
y
^
j
k
(
1
−
y
^
j
k
)
(由【西瓜书式(5.3)】)
定义
g
j
=
d
e
f
−
∂
E
k
∂
y
^
j
k
⋅
∂
y
^
j
k
∂
β
j
则
g
j
=
y
^
j
k
(
1
−
y
^
j
k
)
(
y
^
j
k
−
y
j
k
)
\begin{align} \frac{\partial E_k}{\partial{\hat y}_j^k} & ={\hat y}_j^k-y_j^k \qquad \text{(由【西瓜书式(5.4))】}\notag \\ \frac{\partial {\hat y}_j^k}{\partial {\beta}_j } & =\frac{\partial f({\beta }_j-{\theta }_j)}{\partial ({\beta }_j-{\theta }_j )} \qquad \text{(由【西瓜书式(5.3)】)}\notag \\ & =f'({\beta }_j-{\theta }_j)\notag \\ & =f({\beta }_j-{\theta }_j)[1-f({\beta }_j-{\theta }_j)]\qquad \text{(由【西瓜书式(5.9))】}\notag \\ & ={\hat y}_j^k(1-{\hat y}_j^k)\qquad \text{(由【西瓜书式(5.3)】)}\notag \\ \text{定义\qquad}g_j & \mathop{=} \limits^{\mathrm{def}} -\frac{\partial E_k}{\partial{\hat y}_j^k}\cdot\frac{\partial {\hat y}_j^k}{\partial {\beta}_j }\notag \\ \text{则\qquad}g_j & ={\hat y}_j^k(1-{\hat y}_j^k)({\hat y}_j^k-y_j^k) \tag{5.4} \end{align}
∂y^jk∂Ek∂βj∂y^jk定义gj则gj=y^jk−yjk(由【西瓜书式(5.4))】=∂(βj−θj)∂f(βj−θj)(由【西瓜书式(5.3)】)=f′(βj−θj)=f(βj−θj)[1−f(βj−θj)](由【西瓜书式(5.9))】=y^jk(1−y^jk)(由【西瓜书式(5.3)】)=def−∂y^jk∂Ek⋅∂βj∂y^jk=y^jk(1−y^jk)(y^jk−yjk)(5.4)
综上,得到“标准BP算法”【西瓜书图5.8】。
神经网络的输入为数字特征,然而,有时数据集(如,【西瓜书表4.3】中,“色泽” ∈ { 青绿,乌黑,㳀白 } \in\{ \text {青绿},\text{乌黑},\text{㳀白}\} ∈{青绿,乌黑,㳀白})包含有非数字特征,需要进行数字化。 我们将这种“数据字典式”的特征改造为“判断式”(1表示是,0表示不是),即以(1,0,0)、(0,1,0)、(0,0,1)分别表示这三种色泽,这样,特征“色泽”由一维扩展成了三维,实现了数字化。 相应地增加输入层的结点数 。
累计BP算法
其实,“标准BP算法”并不“标准”,因为,训练的真正目标应是最小化训练集
D
D
D上的累计误差,即目标函数为
E
=
1
m
∑
k
=
1
m
E
k
\begin{align} E=\frac{1}{m}\sum_{k=1}^mE_k \tag{5.5} \end{align}
E=m1k=1∑mEk(5.5)
对网络训练时,每一时间步用全体
D
D
D数据(批量),这显然与“标准BP算法”每一时间步使用
D
D
D中一个样本(编号为
k
k
k的)不同。 即“标准BP算法”是一个变通做法。
这里,我们推导和讨论累计BP算法。
【西瓜书式(5.7)】与
k
k
k有关,为不丢失这个特点,可将【西瓜书式(5.10)】中的
g
j
g_j
gj改记为
g
j
k
g_j^k
gjk(
k
k
k为样本编号,不是指数。另外,这里涉及样本编号标识
k
k
k、网络结点编号标识,如
j
j
j,其实,还有参数训练的轮次标识,这个通常省略),这样就有:
∂
E
k
∂
w
h
j
=
−
g
j
k
b
h
(由【西瓜书式(5.6)(5.11)】)
Δ
w
h
j
=
−
η
∂
E
∂
w
h
j
=
−
η
1
m
∑
k
=
1
m
∂
E
k
∂
w
h
j
(由式(5.5))
=
−
η
1
m
∑
k
=
1
m
(
−
g
j
k
b
h
)
(由式(5.6))
=
η
b
h
m
∑
k
=
1
m
g
j
k
\begin{align} \frac{\partial E_k}{\partial w_{hj}} & =-g_j^kb_h\qquad \text{(由【西瓜书式(5.6)(5.11)】)} \tag{5.6} \\ \Delta w_{hj} & =-\eta \frac{\partial E}{\partial w_{hj}}\notag \\ & =-\eta \frac{1}{m} \sum_{k=1}^m\frac{\partial E_k}{\partial w_{hj}}\qquad \text{(由式(5.5))}\notag \\ & =-\eta \frac{1}{m} \sum_{k=1}^m(-g_j^kb_h) \qquad \text{(由式(5.6))}\notag \\ & =\eta \frac{b_h}{m} \sum_{k=1}^mg_j^k \tag{5.7} \end{align}
∂whj∂EkΔwhj=−gjkbh(由【西瓜书式(5.6)(5.11)】)=−η∂whj∂E=−ηm1k=1∑m∂whj∂Ek(由式(5.5))=−ηm1k=1∑m(−gjkbh)(由式(5.6))=ηmbhk=1∑mgjk(5.6)(5.7)
用同样方法去推导 Δ θ j , Δ v i h , Δ γ h \Delta {\theta}_j,\Delta v_{ih},\Delta {\gamma}_h Δθj,Δvih,Δγh。 由此即可得到相关的迭代更新公式。 公式中的 ∑ k = 1 m \sum_{k=1}^m ∑k=1m表示使用完训练集中的全部数据之后,才做一次参数更新,称为“一轮”(epoch),算法需要一轮一轮地使用训练集,直至参数迭代式收敛。
另外,也可以每轮并不使用训练集的全量数据,而仅从训练集中随机地取固定大小的小批量数据进行训练,在训练集非常大时常这样做。
正则化
为避免过拟合问题,常将式(5.5)进行正则化,得到目标函数【西瓜书式(5.17)】,进一步可将其第二项改为在一轮中的平均值( 1 m ∑ \frac{1}{m}\sum m1∑)。
E = λ 1 m ∑ k = 1 m E k + ( 1 − λ ) 1 m ∑ k = 1 m [ ∑ i ( w i k ) 2 ] = 1 m ∑ k = 1 m [ λ E k + ( 1 − λ ) ∑ i ( w i k ) 2 ] = d e f 1 m ∑ k = 1 m E ~ k \begin{align} E & =\lambda \frac{1}{m}\sum_{k=1}^mE_k+(1-\lambda) \frac{1}{m}\sum_{k=1}^m[\sum_i(w_i^k)^2]\notag \\ & =\frac{1}{m}\sum_{k=1}^m\left[\lambda E_k+ (1-\lambda)\sum_i(w_i^k)^2\right]\notag \\ & \mathop{=} \limits^{\mathrm{def}} \frac{1}{m}\sum_{k=1}^m\tilde{E}_k \tag{5.8} \end{align} E=λm1k=1∑mEk+(1−λ)m1k=1∑m[i∑(wik)2]=m1k=1∑m[λEk+(1−λ)i∑(wik)2]=defm1k=1∑mE~k(5.8)
比较式(5.8)与式(5.5),知 E ~ k \tilde{E}_k E~k的地位等同于 E k {E}_k Ek的地位,如是可以将前述“标准BP算法”改造为正则化的“标准BP算法”:
(1)对应于【西瓜书式(5.4)】的
E
k
{E}_k
Ek, 为二次式的求导方便,将
E
~
k
\tilde{E}_k
E~k的式子配上
1
2
\frac{1}{2}
21,则
E
~
k
=
λ
2
∑
j
=
1
l
(
y
^
j
k
−
y
j
k
)
2
+
(
1
−
λ
)
2
∑
i
(
w
i
k
)
2
=
λ
2
∑
j
=
1
l
(
y
^
j
k
−
y
j
k
)
2
+
(
1
−
λ
)
2
∑
j
=
1
l
+
1
∑
h
=
1
q
(
w
h
j
k
)
2
\begin{align} \tilde{E}_k & = \frac{\lambda}{2}\sum_{j=1}^l ({\hat y}_j^k-y_j^k)^2+ \frac{(1-\lambda)}{2}\sum_i(w_i^k)^2\notag \\ & = \frac{\lambda}{2}\sum_{j=1}^l ({\hat y}_j^k-y_j^k)^2+ \frac{(1-\lambda)}{2}\sum_{j=1}^{l+1}\sum_{h=1}^q(w_{hj}^k)^2\tag{5.9} \end{align}
E~k=2λj=1∑l(y^jk−yjk)2+2(1−λ)i∑(wik)2=2λj=1∑l(y^jk−yjk)2+2(1−λ)j=1∑l+1h=1∑q(whjk)2(5.9)
其中,
λ
\lambda
λ为超参数,
∑
i
(
w
i
k
)
2
\sum_i(w_i^k)^2
∑i(wik)2是针对所有
w
∗
w_*
w∗权重,即为
∑
j
=
1
l
+
1
∑
h
=
1
q
(
w
h
j
k
)
2
\sum_{j=1}^{l+1}\sum_{h=1}^q(w_{hj}^k)^2
∑j=1l+1∑h=1q(whjk)2,其中
l
+
1
l+1
l+1表示
θ
\theta
θ并入了
w
∗
w_*
w∗。
(2)将梯度下降从应用于 E k E_k Ek改为应用于 E ~ k \tilde{E}_k E~k,类似地得到各网络参数的迭代更新公式。
(3)用上述迭代更新公式取代BP算法【西瓜书图5.8】中对应的迭代式,其中,除学习率 η \eta η外,新增超参数 λ \lambda λ。
为确定超参数 λ \lambda λ,取若干不同的 λ \lambda λ值,视为不同的模型,记为 B P λ \mathrm{BP}_{\lambda } BPλ,使用第2章的评估方法(如,交叉验证法),对各 B P λ \mathrm{BP}_{\lambda } BPλ进行性能评估,从而找出最优的 λ ∗ {\lambda }_* λ∗,则 B P λ ∗ \mathrm{BP}_{{\lambda}_*} BPλ∗网络即为所求。
“跳出”局部极小
在参数寻优的过程中需要避免目标函数陷入局部极小。
生活中的例子:盲人下山很有可能下到半山上的一个深坑中,这个“坑”就是局部极小。 梯度下降法的每一步只能感觉当前下降最快的方向,这一点很像盲人,没有全局视野,“入坑”难免,因此,不是防止“入坑”而是考虑如何“跳出坑”,策略是加入“碰运气”成份(随机扰动):
- 让多个盲人各自从不同的点下山(即不同的随机起点),有一人到达山脚即可。 这就是对参数进行不同的初始化,依每个初始化训练出不同的神经网络模型实例(不同的盲人),然后比较各自的最优目标函数值,找到最小者(到达山脚的盲人);
- 每一步以一定的概率接受比当前更差的结果,即盲人本来是下山,但在每一步以一定的概率“上山”(在下山过程中偶尔“斜上”走一步),不时地改变一下路径,借用冶炼中的术语“退火法”,叫它为“模拟退火法”;
- 在计算梯度时,加入随机因素,在大方向的指引下,每步都被“干扰”地走偏,曲折地前行。 如,在梯度下降算法中每次随机地从训练集中取小批量进行训练,这种方法称为随机梯度下降法。
本文为原创,您可以:
- 点赞(支持博主)
- 收藏(待以后看)
- 转发(他考研或学习,正需要)
- 评论(或讨论)
- 引用(支持原创)
- 不侵权
上一篇:4.5 决策树算法中涉及的准则(叶子、划分、剪枝)
下一篇:5.2 RBF网络(单层RBF就可解决异或问题)与ART网络(实现“自适应谐振”)