【转载】梯度下降算法的参数更新公式

article/2025/7/22 6:10:57

NN这块的公式,前馈网络是矩阵乘法。损失函数的定义也是一定的。

但是如何更新参数看了不少描述,下面的叙述比较易懂的:

 

1、在吴恩达的CS229的讲义的第四页直接给出参数迭代公式

 

在UFLDL中反向传导算法一节也是直接给出的公式

 

2、例子:

第一步:随机对比重(a,b)赋值并计算误差平方和(SSE)

第二步:通过对误差比重(a,b)求导计算出误差梯度(注:YP即Ypred)

∂SSE/∂a = – (Y-YP)

∂SSE/∂b = – (Y-YP)X

误差公式:SSE=½ (Y-YP)^2 = ½(Y-(a+bX))^2

这里涉及到一些微积分,不过仅此而已。∂SSE/∂a 和 ∂SSE/∂b 就被称之为梯度,他们代表a,b相对SSE移动的方向。

第三步:通过梯度调整a,b,使得a,b最佳即所得SSE最小

(右上角是我们随机的a,b所取得的SSE值,我们需要找到图中黑虚线所指的SSE最小值)

我们通过改变a,b来确保我们的SSE会向最小值方向移动,即沿黄线所指方向。至于改变a,b的规则:

  • a – ∂SSE/∂a

  • b – ∂SSE/∂b


所以,具体的公式就是:

  • New a = a – r * ∂SSE/∂a = 0.45 - 0.01 * 3.300 = 0.42

  • New b = b – r * ∂SSE/∂b = 0.75 - 0.01 * 1.545 = 0.73

在这里,r代表学习率 = 0.01,可以自设,是用来决定调整a,b快慢的。越大调整的越快,但越容易漏掉收敛的最佳点。

第四步:用新的a,b来求出新的SSE

大家可以从图上看出,总的SSE值(Total SSE)从原来的0.677变为0.553。代表着我们的预测准度正在增加。

第五步:重复三四步直到调整a,b不会明显的影响SSE。到那时我们的预测准度就会达到最高

3、这就是梯度下降法,梯度更新公式不是推导而是创造然后定义出来的。

 

设想下有个函数,你的目标是:找到一个参数 \theta 使得它的值 Y 最小。但它很复杂,你无法找到这个参数的解析解,所以你希望通过梯度下降法去猜这个参数。 问题是怎么猜?

对于多数有连续性的函数来说,显然不可能把每个 \theta 都试一遍。所以只能先随机取一个 \theta ,然后看看怎么调整它最有可能使得 Y 变小。把这个过程重复n遍,自然最后得到的 \theta 的估值会越来越小。

现在问题是怎么调整?既然要调整,肯定是基于当前我们拥有的那个参数 \theta_t ,所以有了:

\theta_{t+1}=\theta_t+\Delta

那现在问题是每次更新的时候这个 \Delta 应该取什么值?

我们知道关于某变量的(偏)导数的概念是指当(仅仅)该变量往正向的变化量趋向于0时的其函数值变化量的极限。 所以现在若求 Y 关于\theta_t的导数,得到一个值比如:5,那就说明若现在我们把 \theta_t 往正向(即增大)一点点, Y 的值会变大,但不一定是正好+5。同理若现在导数是-5,那么把 \theta_t 增大一点点 Y 值会变小。 这里我们发现不管导数值 \Delta 是正的还是负的(正负即导数的方向),对于 \theta_t 来说,-\Delta 的最终方向(即最终的正负号,决定是增(+)还是减(-))一定是能将Y值变小的方向(除非导数为0)。所以有了:

\theta_{t+1}=\theta_t+(-\Delta)

但是说到底, \Delta 的绝对值只是个关于Y的变化率,本质上和 \theta_t 没关系。所以为了抹去 \Delta 在幅度上对 \theta_t 的影响,需要一个学习率来控制: \alpha \in (0,1] 。所以有了:

\theta_{t+1}=\theta_t+(-\alpha\Delta)=\theta_t-\alpha\Delta

而这里的 \Delta 就是你1式中的那个偏导,而对于2式,就是有多少个参数,就有多少个不同的 \Delta

现在分析在梯度下降法中最常听到的一句话:“梯度下降法就是朝着梯度的反方向迭代地调整参数直到收敛。” 这里的梯度就是 \Delta ,而梯度的反方向就是 -\Delta 的符号方向---梯度实际上是个向量。所以这个角度来说,即使我们只有一个参数需要调整,也可以认为它是个一维的向量。 整个过程你可以想象自己站在一个山坡上,准备走到山脚下(最小值的地方),于是很自然地你会考虑朝着哪个方向走,方向由 -\Delta方向给出,而至于一次走多远,由 |\alpha\Delta| 来控制。 这种方式相信你应该能理解其只能找到局部最小值,而不是全局的。

参考

1:作者:老董 链接:https://www.zhihu.com/question/57747902/answer/240695458 来源:知乎

2:https://zhuanlan.zhihu.com/p/27297638


http://chatgpt.dhexx.cn/article/1utdYkjE.shtml

相关文章

Java中Comparator的个人简单理解(升序降序)与使用

目录 Java自定义排序返回值简单记忆理解实践LInkedList升序(默认情况)降序 PriorityQueue升序下的小顶堆(默认情况)降序下的大顶堆 总结补充数组类型自定义排序降序排序 数组 Java自定义排序返回值简单记忆理解 默认情况下&#…

深度残差收缩网络(从信号降噪的角度进行理解)

本文探讨了深度残差收缩网络的另一种理解方式。 传统信号降噪算法的常见步骤是: ① 采用某种信号变换方法(例如小波、经验模态分解),将含噪信号变换到另外一种形态(例如小波系数、本征模态分量等)。在这些…

NIPS 2016 深度学习 迁移学习 ---残差转移网络用于无监督领域自适应

深度学习的成功得益于大量的标注数据,而数据标注是非常消耗资源的。当一个问题中缺少标注数据时,可以从另一个源中所学知识迁移过来,并且用于新问题中。 清华大学的学者提出了一种新的方法(https://arxiv.org/pdf/1602.04433.pdf&…

深度残差网络+自适应参数化ReLU激活函数(调参记录21)Cifar10~95.12%

本文在调参记录20的基础上,将残差模块的个数,从27个增加到60个,继续测试深度残差网络ResNet+自适应参数化ReLU激活函数在Cifar10数据集上的表现。 自适应参数化ReLU函数被放在了残差模块的第二个卷积层之后,这与Squeeze-and-Excitation Networks或者深度残差收缩网络是相似…

已知两个长度分别为m 和 n 的升序链表,合并降序链表,求时间复杂度

王道数据结构上一道题: 之前我看到一个电子版的书,上边答案解析写的有点错误, 听说有些同学买的实体书上,答案解析也是这样写的 这个是刊印错误,很显然2Max( m , n )大于等于 m n 而且这个解析也不够清晰。 解析&a…

波束形成 常见自适应波束形成算法信(干)噪比增益影响因素

0、其他补充 均匀线阵波束形成器的信噪比增益上确界可由下式表示: 其中为阵元数,所以为了方便起见,一般的稳健自适应波束形成算法在仿真过程中的阵元数量均设置为10。 阵列的导向矢量可由下式表示: 以首个阵元为参考阵元&#xff…

两个升序链表合并成一个降序链表的时间复杂度

王道考研P7 第六题 【2013年统考真题】已知两个长度分别为m和n的升序链表,若将它们合并为长度为mn的一个降序链表,则最坏情况下的时间复杂度是() A. O(n) B. O(mn) C. O(min(m,n)) D. O(max(m,n)) 答案是D 注意,此题…

无线传感器网络路由优化中的能量均衡LEACH改进算法

文章目录 一、理论基础1、LEACH算法概述2、改进的LEACH算法 二、算法流程图三、仿真实验与分析四、参考文献 一、理论基础 1、LEACH算法概述 请参考这里。 2、改进的LEACH算法 改进的LEACH算法(LEACH-N)主要针对LEACH算法分簇阶段的缺陷而改进的&…

机器学习之自适应增强(Adaboost)

1.Adaboost简介 **Adaptive boosting(自适应增强)是一种迭代算法,其核心思想是针对同一个训练集训练不同的弱分类器,然后把这些弱分类器集合起来,构成一个强分类器,Adaboost可处理分类和回归问题。了解Adaboost算法之前&#xff…

自适应阈值(adaptiveThreshold)分割原理及实现

背景介绍及原理 前面介绍了OTSU算法和最大熵算法,但这两种算法都属于全局阈值法,所以对于某些光照不均的图像,这种全局阈值分割的方法会显得苍白无力,如下图: 显然,这样的阈值处理结果不是我们想要的&…

优化算法+神经网络:神经网络自动参数优化

当智能群优化算法遇上神经网络 优化算法进行神经网络的参数寻优,解放深度调参1.已经实现的Genetic Algorithm优化Neural Network2.已经实现的PSO优化Neural Network3.已实现的SSA[^1]优化Neural Network 三种方法的可视化搜索过程对比三种优化算法性能总结总结目前来…

Java stream().sorted()实现排序(升序、降序、多字段排序)

1 自然排序 sorted()&#xff1a;自然排序&#xff0c;流中元素需实现Comparable接口 package com.entity;import lombok.*;Data ToString AllArgsConstructor NoArgsConstructor public class Student implements Comparable<Student> {private int id;private String …

linux centos查找某个文件,Linux查找命令(文件、文件中的关键字)

1、grep &#xff1a;查找文件中的内容 $ grep [option] pattern [file] 例&#xff1a; $ grep un day Sunday 例: $grep include doulinked.c doulinked1.c doulinked.c:#include doulinked.c:#include doulinked.c:#include doulinked1.c:#include doulinked1.c:#includ…

Linux下查找\命令(收集整理)

以下为总结&#xff0c;其实可直接跳过&#xff0c;查看locate部分&#xff0c;这个是类似windows下verything搜索工具&#xff01; 一.Linux查找文件的相关命令 常 用 命 令 简要中文说明 程序所在目录 whereis 寻找文件工具 /usr/bin find 寻找文件工具 /usr/bin l…

Linux查找命令 which和find命令

目录 前言一、which命令二、find命令 前言 一、which命令 格式&#xff1a; which [选项] 命令|程序名 #默认当找到第一个目标后不再继续查找选项说明-a查找全部内容&#xff0c;而非第一个文件-n<文件名长度>  指定文件名长度&#xff0c;指定的长度必须大于或等于所有…

Linux文件查找的4个命令

1. find find 命令应该是最经典的命令了&#xff0c;谈到搜索工具第一个想到的肯定是 find 命令。但是&#xff0c;find 命令非常强大&#xff0c;想要把它的功能都介绍一遍&#xff0c;恐怕要写好几篇文章。 所以&#xff0c;这里介绍最基本的&#xff0c;根据文件名查找文件…

Linux下的查找命令合集(which/whereis/locate/find)

Linux 下的查找命令有很多&#xff0c;常用的有which、whereis、locate、find。那么这4个命令之间各自有什么特点&#xff0c;又有什么区别&#xff0c;什么时候该用哪个才最合适呢&#xff1f;方便我们在开发和学习中能更加有效的使用。 1、which 该命令主要是用来查找系统P…

【Linux命令】查找文件命令

文章目录 一、查找文件locateupdatedbfind测试条件操作符操作预定义操作自定义操作 find命令选项&#xff08;常用&#xff09; 一、查找文件 locate locate命令会查找其路径名数据库&#xff0c;输出所有包含查找字符串的匹配项&#xff1a; locate settings.xmlupdatedb …

Linux常用查找命令

1、命令名称&#xff1a;which&#xff08;查看命令文件位置和命令可能出现的别名&#xff09; which 命令 2、whereis&#xff08;查找命令及帮助文档所在位置&#xff09; whereis 命令 3、locate&#xff08;按照文件名查找&#xff0c;按照数据库查找&#xff09; locate…

【Linux学习笔记】8. Linux查找命令:find和grep详解

Linux查找命令 find查找文件grep查找字符串 1. find命令 有多种使用方式&#xff1a; 根据文件名搜索根据文件大小搜索根据文件类型搜索根据修改时间搜索根据文件权限搜索根据文件所有者搜索 上面的各种方式可以利用逻辑与或非组合起来使用。 功能一&#xff1a;按文件名…