(《机器学习》完整版系列)第5章 神经网络——5.1 误差逆传播算法(BP算法是梯度下降法的应用)

神经网络的概念来源于生物学(仿生),并受其启发,但神经网络的发展早已摆脱了仿生物学的思路。 该领域现在研究的热门方向为深度神经网络。
“标准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=1nwixiθ)=f(i=1n+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 ykRl,参见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^jkEkβjy^jk定义gjgj=y^jkyjk(由【西瓜书式(5.4))】=(βjθj)f(βjθj)(由【西瓜书式(5.3)】)=f(βjθj)=f(βjθj)[1f(βjθj)](由【西瓜书式(5.9))】=y^jk(1y^jk)(由【西瓜书式(5.3)】)=defy^jkEkβjy^jk=y^jk(1y^jk)(y^jkyjk)(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=1mEk(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} whjEkΔwhj=gjkbh(由【西瓜书式(5.6)(5.11)】)=ηwhjE=ηm1k=1mwhjEk(由式(5.5)=ηm1k=1m(gjkbh)(由式(5.6)=ηmbhk=1mgjk(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=1mEk+(1λ)m1k=1m[i(wik)2]=m1k=1m[λEk+(1λ)i(wik)2]=defm1k=1mE~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=1l(y^jkyjk)2+2(1λ)i(wik)2=2λj=1l(y^jkyjk)2+2(1λ)j=1l+1h=1q(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+1h=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网络(实现“自适应谐振”)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
梯度下降算法机器学习一种广泛应用的最优化算法,其主要目的是通过迭代找到目标函数的最小值,或者收敛到最小值。梯度下降算法的原理可以从一个下山的场景开始理解。算法的基本思想是沿着目标函数梯度的方向更新参数值,以期望达到目标函数的最小值。 在机器学习,梯度下降算法常常用于求解损失函数的最小值。在简单的线性回归,我们可以使用最小二乘法来求解损失函数的最小值。然而,在绝大多数情况下,损失函数是非线性的且复杂。因此,梯度下降算法机器学习领域得到了广泛的应用。实际上,许多优秀的算法都是在梯度下降算法的启发下诞生的,例如AdaGrad、RMSProp、Momentum等等。 梯度下降算法的核心思想是通过计算目标函数的梯度来确定参数更新的方向。梯度表示了函数在某一点上的变化率,沿着梯度的方向可以使函数值快速减小。因此,梯度下降算法沿着梯度的反方向更新参数值,朝着目标函数的最小值靠近。算法的迭代过程会持续更新参数值,直到收敛到最小值或达到停止条件。 在实际应用,为了提高算法的效率和准确性,通常会对梯度下降算法进行改进和优化。例如,可以使用学习率来控制参数值的更新步长,或者采用批量梯度下降来同时计算多个样本的梯度。这些改进可以帮助算法更快地收敛并找到更好的解。 总之,梯度下降算法是一种重要的最优化算法,在机器学习被广泛应用。其原理是通过计算目标函数的梯度来更新参数值,以期望达到最小值。通过迭代的方式,梯度下降算法可以找到目标函数的最优解或者接近最优解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值