前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【数据挖掘】神经网络 后向传播算法 ( 梯度下降过程 | 梯度方向说明 | 梯度下降原理 | 损失函数 | 损失函数求导 | 批量梯度下降法 | 随机梯度下降法 | 小批量梯度下降法 )

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

作者头像
韩曙亮
发布2023-03-27 19:41:03
9760
发布2023-03-27 19:41:03
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

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

是向右走 , 每次累加的

\Delta\theta

是正数 , 因此

\theta

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

\theta

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

\Delta\theta

就是在

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

索引 ;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
    • I . 梯度下降 Gradient Descent 简介 ( 梯度下降过程 | 梯度下降方向 )
      • II . 梯度下降 示例说明 ( 单个参数 )
        • III . 梯度下降 示例说明 ( 多个参数 )
          • IV . 梯度下降 总结 ( 定义损失函数 | 损失函数求导 )
            • V . 梯度下降 方法
              • VI . 批量梯度下降法
                • VII . 随机梯度下降法
                  • VIII . 小批量梯度下降法
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档