【数据挖掘】神经网络 后向传播算法 ( 梯度下降过程 | 梯度方向说明 | 梯度下降原理 | 损失函数 | 损失函数求导 | 批量梯度下降法 | 随机梯度下降法 | 小批量梯度下降法 )

2023-03-27 19:41:03 浏览数 (1)

文章目录
  • I . 梯度下降 Gradient Descent 简介 ( 梯度下降过程 | 梯度下降方向 )
  • II . 梯度下降 示例说明 ( 单个参数 )
  • III . 梯度下降 示例说明 ( 多个参数 )
  • IV . 梯度下降 总结 ( 定义损失函数 | 损失函数求导 )
  • V . 梯度下降 方法
  • VI . 批量梯度下降法
  • VII . 随机梯度下降法
  • VIII . 小批量梯度下降法

I . 梯度下降 Gradient Descent 简介 ( 梯度下降过程 | 梯度下降方向 )

1 . 后向传播算法 : 针对每个数据样本 , 从输入层到输出层传播输入 , 这是向前传播输入 , 然后从输出层向输入层传播误差 , 这是向后传播误差 ;

② 权重和偏置更新 : 传播误差过程中 , 对神经元网络中 , 单元连接的权重 , 和单元本身的偏置 , 进行更新 ;

③ 单元连接权重增量 :

Delta w_{ij} = (l) Err_j O_i

③ 单元偏置增量 :

Delta theta_j = (l) Err_j

2 . 权重和偏置更新要求 : 更新的时候 , 涉及到 权重 和 偏置的增量 , 分别是

Delta w_{ij}

Delta theta_j

, 这两个增量值要使损失函数取最小值 , 并且该最小值越来越小 ;

3 . 权重和偏置更新方向 : 这两个增量的方向要求是 , 损失函数不仅要下降 , 并且损失函数下降的速度越快越好 , 这个损失函数下降最快的方向 , 就是梯度的反方向 , 梯度通常是对损失函数进行求导得到的 ;

损失函数 下降最快的方向 , 是梯度的反方向 ;

梯度通常是对损失函数进行求导得来的 ;

在某一点求导 , 就是这一点的曲线的切线的方向 ;

这里的方向只有两个 , 坐标轴正向 ( 从左到右 | 从负数到正数 | 增加 ) , 坐标轴反向 ( 从右到左 | 从负数到正数 | 减小 ) ;

4 . 权重和偏置更新步长 : 有了梯度以后 , 对 单元连接权重 和 单元偏置 参数进行更新时 , 还涉及到学习率

l

, 这个学习率

l

又叫做超参数 ;

II . 梯度下降 示例说明 ( 单个参数 )

1 . 坐标轴说明 : 下图是损失函数

f(theta)

, 横轴

theta

是指需要更新的 权重 或 偏置 参数 , 纵轴是损失函数

f(theta)

的计算结果 ;

2 . 损失函数最小值 : 取一个合适的

theta

值 , 使损失函数值

f(theta)

大小最小 , 此时是图中黄色的点对应的

hat{theta}

值 ;

3 . 初始值 : 图中最左侧的值 , 标注为 Radom initial value , 即 随机初始值 ;

4 . 初始值变化趋势 : 每次对初始值进行一次变化 , 变化的方向是逐步使损失函数趋于最小 , 就是图中初始值开始到最小值的箭头方向 ;

5 . 梯度下降算法 : 梯度下降算法的目的是为了使损失函数

f(theta)

达到最小值 ;

6 . 梯度本质 : 梯度 或 求导 , 本质上是求某一点在曲线上的切线 , 切线的斜率表示的就是导数 ;

7 . 初始值累加方向 :

theta

是初始值时 , 切线的斜率是负数 ,

theta

是向右走 , 每次累加的

Deltatheta

是正数 , 因此

theta

值需要减去梯度的值 , 相当于加上了一个正数 , 因此说

theta

的方向与斜率是反方向 ( 方向指的是符号的正负号方向 ) , 即与梯度是反向方的 ; 每次累加的

Deltatheta

就是在

x

轴上的两点之间的距离 ;

8 . 方向说明 ( 重点 ) :

损失函数 下降最快的方向 , 是梯度的反方向 ;

梯度通常是对损失函数进行求导得来的 ;

在某一点求导 , 就是这一点的曲线的切线的方向 ;

这里的方向只有两个 , 坐标轴正向 ( 从左到右 | 从负数到正数 | 增加 ) , 坐标轴反向 ( 从右到左 | 从负数到正数 | 减小 ) ;

9 . 学习步长 : 由初始值开始迭代 , 对

theta

参数进行更新 , 最终取得使损失函数值最小 , 即横轴坐标轴参数等于

hat{theta}

; 该步长代表了该操作的效率 , 步长越大 , 速度越快 ;

10 . 梯度下降算法本质 : 对于当前的参数

theta

值 , 计算

f(theta)

的梯度 , 即导数 / 斜率 ( 负的 ) , 在梯度的反方向 ( 正数方向 ) 走一个步长 , 然后继续向前传播输入 , 再次向后传播误差时 , 继续计算其

theta

值对应的梯度值 , 迭代

N

多次 , 即可得到使损失函数最小的参数值 ;

上图是一个凸函数 , 最小值只有一个 , 比较好分析 , 实际情况是 , 同时存在多个甚至无数个能使 损失函数

f(theta)

取到最小值的

theta

值 ;

III . 梯度下降 示例说明 ( 多个参数 )

1 . 两个参数的损失函数 : 下图是有两个参数的情况下的损失函数情况 ;

2 . 损失函数示例 :

z = x^2 2y^2

① 分析基础 : 该损失函数

z

有两个参数 , 该函数就不能再二维坐标轴中进行分析了 , 需要在三维坐标空间中进行分析 ;

② 坐标轴说明 :

z

轴是损失函数值 ,

x

轴是

x

参数的取值 ,

y

轴是

y

参数的取值 ;

③ 梯度下降要求 : 不仅要在

x

轴损失函数下降最快 , 在

y

轴损失函数也要下降最快 ; 如下图中的蓝色箭头方向 ;

3 . 参数说明 :

如果有

1

个参数 , 就是在二维空间中进行分析 , 如在

x

轴 和

y

轴平面上分析 ;

如果有

2

个参数 , 就是在

3

维空间中进行分析 , 如在

x

,

y

轴 和

z

轴 三维空间上分析 ;

vdots

如果有

n

个参数 , 就是在

n 1

维空间中进行分析 ;

最终的效果可能不是这样的 , 实际可能会存在很多弯曲波折 ,

x , y

参数数值 , 在各轴上 , 按照锯齿形状下降 , 但是大概的趋势是这样的 ;

IV . 梯度下降 总结 ( 定义损失函数 | 损失函数求导 )

1 . 单个参数的梯度下降算法公式表示 :

theta^{new}_j = theta^{old}_j - alpha frac{ partial }{ partial theta^{old}_j} J (theta)
theta_j

表示第

j

个参数 ;

theta^{new}_j

表示新的第

j

个参数 ;

theta^{old}_j

表示旧的第

j

个参数 ;

alpha

指的是学习率 , 或梯度下降的步长 ;

如果是单个参数值 , 是对 目标函数 / 损失函数

J (theta)

关于当前的第

j

个参数

theta_j

进行求导 , 只对一个参数进行求导 ;

2 . 使用矩阵的形式表示多个参数的梯度下降算法 :

theta^{new} = theta^{old} = alpha nabla_theta J (theta)
theta

表示很多参数的矩阵 ;

theta^{new}

表示新的参数的矩阵 ;

theta^{old}

表示旧的参数矩阵 ;

alpha

指的是学习率 , 或梯度下降的步长 ;

nabla_theta J (theta)

表示梯度的反向方 , 这是对 目标函数 / 损失函数

J (theta)

关于

theta

进行求导 , 注意

theta

是很多参数组成的矩阵 , 需要对每个参数进行求导 , 即偏导 , 然后将这些偏导整合起来 ;

3 . 梯度下降算法实现 :

① 定义损失函数 : 先定义损失函数 , 一般是误差平方和 ;

② 求参数增量 : 对损失函数进行求导 , 使用导数 乘以 学习率 ( 步长 ) , 得到一个 参数增量 , 这里的参数指的是 权值 和 偏置 ;

③ 伪代码实现 :

代码语言:javascript复制
//迭代循环执行下面的代码 , 每循环一次 , 梯度下降一次 , 损失函数的值就会变小一次
while true : 
	//对损失函数进行求导 , 也就是评估梯度 , J 代表损失函数 , theta 代表参数值 
	//	本质是 对损失函数 J 关于 theta 求导
	theta_gradient = evaluate_gradient ( J , corpus , theta )
	
	//左侧的 theta 是新的 theta , 右侧的 theta 是旧的 theta 
	//	alpha 是学习率 , 也是梯度的步长 , theta_gradient 是损失函数导数
	theta = theta - alpha * theta_gradient 
V . 梯度下降 方法

1 . 常用的梯度下降方法 :

① 批量梯度下降法 : Batch Gradient Descent ;

② 随机梯度下降法 : Stochastic Gradient Descent ;

③ 小批量梯度下降法 : Mini-batch Gradient Descent ; 介于上述两者之间 ;

VI . 批量梯度下降法

批量梯度下降法 : 梯度下降的最常用方法 , 反向传播误差时 , 使用误差更新参数时 , 参考所有样本的误差更新 权值 和 偏置参数 , 如果有

n

个样本 , 每次迭代时 , 将这

n

个样本全部处理一遍 , 每次迭代都要使用所有的样本进行参数更新 ; 公式如下 :

theta' = theta - alpha sum_{j=1}^n( h_theta ( x_0^{(j)}, x_1^{(j)}, cdots , x_n^{(j)} ) - y_j) x_i^{(j)}

样本个数 :

n

代表样本个数 ;

梯度计算 : 此处计算梯度 , 使用了所有的样本的梯度数据 ;

VII . 随机梯度下降法

随机梯度下降法 : 求梯度的时候 , 随机选择一个样本进行 , 使用该样本的误差更新参数 ; 公式如下 , 相对于批量梯度下降法的公式只是删除了 总和 符号 , 不再累加所有的样本误差数据 ;

theta' = theta - alpha ( h_theta ( x_0^{(j)}, x_1^{(j)}, cdots , x_n^{(j)} ) - y_j) x_i^{(j)}
VIII . 小批量梯度下降法

小批量梯度下降法 :

① 方法引入 : 上述的批量梯度下降法 , 使用所有的样本 , 训练时间很长 , 但是预测准确度很高 ; 随机梯度下降法 , 训练速度很快 , 准确度无法保证 ; 这里引入一种介于上述两个方法之间的一种方法 , 即小批量梯度下降方法 ;

② 参数更新方式 : 数据集有

n

个样本 , 采用其中的

m

个样本的子数据集 进行迭代更新参数 ;

③ 公式 :

theta' = theta - alpha sum_{j=1}^m( h_theta ( x_0^{(j)}, x_1^{(j)}, cdots , x_n^{(j)} ) - y_j) x_i^{(j)}

注意上述 求和的是 子数据集的

1

m

索引 ;

0 人点赞