文章目录- I . 梯度下降 Gradient Descent 简介 ( 梯度下降过程 | 梯度下降方向 )
- II . 梯度下降 示例说明 ( 单个参数 )
- III . 梯度下降 示例说明 ( 多个参数 )
- IV . 梯度下降 总结 ( 定义损失函数 | 损失函数求导 )
- V . 梯度下降 方法
- VI . 批量梯度下降法
- VII . 随机梯度下降法
- VIII . 小批量梯度下降法
I . 梯度下降 Gradient Descent 简介 ( 梯度下降过程 | 梯度下降方向 )
1 . 后向传播算法 : 针对每个数据样本 , 从输入层到输出层传播输入 , 这是向前传播输入 , 然后从输出层向输入层传播误差 , 这是向后传播误差 ;
② 权重和偏置更新 : 传播误差过程中 , 对神经元网络中 , 单元连接的权重 , 和单元本身的偏置 , 进行更新 ;
③ 单元连接权重增量 :
③ 单元偏置增量 :
2 . 权重和偏置更新要求 : 更新的时候 , 涉及到 权重 和 偏置的增量 , 分别是
和
, 这两个增量值要使损失函数取最小值 , 并且该最小值越来越小 ;
3 . 权重和偏置更新方向 : 这两个增量的方向要求是 , 损失函数不仅要下降 , 并且损失函数下降的速度越快越好 , 这个损失函数下降最快的方向 , 就是梯度的反方向 , 梯度通常是对损失函数进行求导得到的 ;
损失函数 下降最快的方向 , 是梯度的反方向 ;
梯度通常是对损失函数进行求导得来的 ;
在某一点求导 , 就是这一点的曲线的切线的方向 ;
这里的方向只有两个 , 坐标轴正向 ( 从左到右 | 从负数到正数 | 增加 ) , 坐标轴反向 ( 从右到左 | 从负数到正数 | 减小 ) ;
4 . 权重和偏置更新步长 : 有了梯度以后 , 对 单元连接权重 和 单元偏置 参数进行更新时 , 还涉及到学习率
, 这个学习率
又叫做超参数 ;
II . 梯度下降 示例说明 ( 单个参数 )
1 . 坐标轴说明 : 下图是损失函数
, 横轴
是指需要更新的 权重 或 偏置 参数 , 纵轴是损失函数
的计算结果 ;
2 . 损失函数最小值 : 取一个合适的
值 , 使损失函数值
大小最小 , 此时是图中黄色的点对应的
值 ;
3 . 初始值 : 图中最左侧的值 , 标注为 Radom initial value , 即 随机初始值 ;
4 . 初始值变化趋势 : 每次对初始值进行一次变化 , 变化的方向是逐步使损失函数趋于最小 , 就是图中初始值开始到最小值的箭头方向 ;
5 . 梯度下降算法 : 梯度下降算法的目的是为了使损失函数
达到最小值 ;
6 . 梯度本质 : 梯度 或 求导 , 本质上是求某一点在曲线上的切线 , 切线的斜率表示的就是导数 ;
7 . 初始值累加方向 : 当
是初始值时 , 切线的斜率是负数 ,
是向右走 , 每次累加的
是正数 , 因此
值需要减去梯度的值 , 相当于加上了一个正数 , 因此说
的方向与斜率是反方向 ( 方向指的是符号的正负号方向 ) , 即与梯度是反向方的 ; 每次累加的
就是在
轴上的两点之间的距离 ;
8 . 方向说明 ( 重点 ) :
损失函数 下降最快的方向 , 是梯度的反方向 ;
梯度通常是对损失函数进行求导得来的 ;
在某一点求导 , 就是这一点的曲线的切线的方向 ;
这里的方向只有两个 , 坐标轴正向 ( 从左到右 | 从负数到正数 | 增加 ) , 坐标轴反向 ( 从右到左 | 从负数到正数 | 减小 ) ;
9 . 学习步长 : 由初始值开始迭代 , 对
参数进行更新 , 最终取得使损失函数值最小 , 即横轴坐标轴参数等于
; 该步长代表了该操作的效率 , 步长越大 , 速度越快 ;
10 . 梯度下降算法本质 : 对于当前的参数
值 , 计算
的梯度 , 即导数 / 斜率 ( 负的 ) , 在梯度的反方向 ( 正数方向 ) 走一个步长 , 然后继续向前传播输入 , 再次向后传播误差时 , 继续计算其
值对应的梯度值 , 迭代
多次 , 即可得到使损失函数最小的参数值 ;
上图是一个凸函数 , 最小值只有一个 , 比较好分析 , 实际情况是 , 同时存在多个甚至无数个能使 损失函数
取到最小值的
值 ;
III . 梯度下降 示例说明 ( 多个参数 )
1 . 两个参数的损失函数 : 下图是有两个参数的情况下的损失函数情况 ;
2 . 损失函数示例 :
① 分析基础 : 该损失函数
有两个参数 , 该函数就不能再二维坐标轴中进行分析了 , 需要在三维坐标空间中进行分析 ;
② 坐标轴说明 :
轴是损失函数值 ,
轴是
参数的取值 ,
轴是
参数的取值 ;
③ 梯度下降要求 : 不仅要在
轴损失函数下降最快 , 在
轴损失函数也要下降最快 ; 如下图中的蓝色箭头方向 ;
3 . 参数说明 :
如果有
个参数 , 就是在二维空间中进行分析 , 如在
轴 和
轴平面上分析 ;
如果有
个参数 , 就是在
维空间中进行分析 , 如在
,
轴 和
轴 三维空间上分析 ;
如果有
个参数 , 就是在
维空间中进行分析 ;
最终的效果可能不是这样的 , 实际可能会存在很多弯曲波折 ,
参数数值 , 在各轴上 , 按照锯齿形状下降 , 但是大概的趋势是这样的 ;
IV . 梯度下降 总结 ( 定义损失函数 | 损失函数求导 )
1 . 单个参数的梯度下降算法公式表示 :
表示第
个参数 ;
表示新的第
个参数 ;
表示旧的第
个参数 ;
指的是学习率 , 或梯度下降的步长 ;
如果是单个参数值 , 是对 目标函数 / 损失函数
关于当前的第
个参数
进行求导 , 只对一个参数进行求导 ;
2 . 使用矩阵的形式表示多个参数的梯度下降算法 :
表示很多参数的矩阵 ;
表示新的参数的矩阵 ;
表示旧的参数矩阵 ;
指的是学习率 , 或梯度下降的步长 ;
表示梯度的反向方 , 这是对 目标函数 / 损失函数
关于
进行求导 , 注意
是很多参数组成的矩阵 , 需要对每个参数进行求导 , 即偏导 , 然后将这些偏导整合起来 ;
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 . 批量梯度下降法
批量梯度下降法 : 梯度下降的最常用方法 , 反向传播误差时 , 使用误差更新参数时 , 参考所有样本的误差更新 权值 和 偏置参数 , 如果有
个样本 , 每次迭代时 , 将这
个样本全部处理一遍 , 每次迭代都要使用所有的样本进行参数更新 ; 公式如下 :
样本个数 :
代表样本个数 ;
梯度计算 : 此处计算梯度 , 使用了所有的样本的梯度数据 ;
VII . 随机梯度下降法
随机梯度下降法 : 求梯度的时候 , 随机选择一个样本进行 , 使用该样本的误差更新参数 ; 公式如下 , 相对于批量梯度下降法的公式只是删除了 总和 符号 , 不再累加所有的样本误差数据 ;
VIII . 小批量梯度下降法
小批量梯度下降法 :
① 方法引入 : 上述的批量梯度下降法 , 使用所有的样本 , 训练时间很长 , 但是预测准确度很高 ; 随机梯度下降法 , 训练速度很快 , 准确度无法保证 ; 这里引入一种介于上述两个方法之间的一种方法 , 即小批量梯度下降方法 ;
② 参数更新方式 : 数据集有
个样本 , 采用其中的
个样本的子数据集 进行迭代更新参数 ;
③ 公式 :
注意上述 求和的是 子数据集的
到
索引 ;