Stochastic Approximation —Stochastic gradient descent 随机近似方法的详解之(四)随机梯度下降

news2025/1/15 6:31:55

Stochastic Approximation —Stochastic gradient descent 随机近似方法的详解之(四)随机梯度下降

郑重声明:本系列内容来源 赵世钰(Shiyu Zhao)教授的强化学习数学原理系列,本推文出于非商业目的分享个人学习笔记和心得。如有侵权,将删除帖子。原文链接:https://github.com/MathFoundationRL/Book-Mathmatical-Foundation-of-Reinforcement-Learning

SGD算法在机器学习领域被广泛应用。We will show that SGD is a special RM algorithm and the mean estimation algorithm is a special SGD algorithm. 假定我们要解决下面这个优化问题:
20230303141603-2023-03-03

w w w 是要被优化的参数, X X X是个随机变量,两者都可以是向量。

在函数f是凸函数的情况下,求解上述问题的直接方法是梯度下降。

右边式子的期望的梯度是什么呢?

于是有下面的式子:

然而,这个期望的梯度实际中很难求到。
Another way is to collect a large number of iid samples { x i } i n = 1 \{x_i\}^n_i=1 {xi}in=1 of X so that the expected value can be approximated as :

E [ ∇ w f ( w k , X ) ] ≈ 1 n ∑ i = 1 n ∇ w f ( w k , x i ) \mathbb{E}\left[\nabla_w f\left(w_k, X\right)\right] \approx \frac{1}{n} \sum_{i=1}^n \nabla_w f\left(w_k, x_i\right) E[wf(wk,X)]n1i=1nwf(wk,xi)

通过这样的近似,(6.11)公式就变成了:

This algorithm is called batch gradient descent (BGD) because it uses all the samples as
a single batch in every iteration. 注意,BGB(批梯度)算法的每一次迭代用的都是全部的样本。

然而事实上样本是一个一个被收集的。我们希望 w w w能够实时的随着抽样的进行而更新。于是有了下面的随机梯度算法:

随机二字的含义是抽样过程的随机性,也就是说,这个方法依赖于随机抽样。

这个梯度项的替换,能否保证最优解的收敛性呢?

看了上面的解释,豁然开朗,原来二者之间差了一个噪声项, α k η k \alpha_k\eta_k αkηk这一个扰动项是收敛到0的。所以这个扰动项的加入并没有破坏收敛性。

SGD‘s apply to mean estimation

我们来说明 mean estimation 其实是一种特殊的SGD。

首先,把mean estimation表示成如下的优化问题:

在这种情况下,期望的表达式,或者说样本的分布情况并不知道,自然就无法求 E \mathbb{E} E 对于w的导数了。

sgd的做法是什么呢?

SGD收敛性的分析

由于抽样是随机的,所以估计是不准确的。问题是,SGD的收敛是随机的吗,是缓慢的吗?

先来看看批梯度和随机梯度之间的相对误差:

如果 δ k \delta_k δk很小,那么我们可以认为随机梯度的效果和标准梯度下降相似。注意,下面公式中,分母上新增加的那个项,因为是在最优解处,所以梯度值为0。第二个等号成立是因为中值定理。

如何理解最后这个结论呢?

也就是说,w的初始值离最优值距离比较远的时候,SGD的算法的表现会更像梯度下降;而w的初始值离最优值距离比较接近的时候,SGD的算法的收敛会表现出一定的随机性。

在下面这个均值估计问题中,随机变量 X {X} X代表二维空间的随机变量。注意是二维哦!!
我们可以看到不同的梯度下降算法的收敛过程。

下面描述了实验的设定:

可以看到,SGD确实在接近最优值的时候,展示出了一定程度的随机性。

SGD的确定性公式

在这种情况下,解决这个问题的梯度下降算法就变成了下面的形式:

假定集合很大并且我们一次只能抽一个样本,这种情况下,我们肯定还是希望能够渐进地实时更新最优解。
然后,我们就可以用下面的迭代算法了:

解决的办法是什么呢?
通过引入样本集合上的随机变量 X X X,可以把确定性的优化问题变成随机形式的:

BGD, SGD, and Mini-batch GD

以均值估计任务为例子来看看三种算法:

需要注意的是当MBGD的m=n的时候,它和BGD仍然不一样。为啥呢:

另外,MBGD的收敛速度一般来说比SGD更快:

Summary

知道为啥要反复讨论均值估计问题吗?
因为在强化学习中,状态价值和动作价值都被定义为随机变量的期望。

强化学习算法相比于其他的问题求解方法的特点优势在哪里呢?

也就是说,强化学习不需要知道目标函数具体的表达是什么。它是一个黑盒方法,只需要知道目标函数的输入和输出。著名的随机梯度下降算法就是一种特殊的强化学习算法。

随机梯度下降的基本要点是什么呢?

image-20230304124431785

它可以在不知道随机变量的分布的情况下通过样本求解到一个无偏的解。

数学直观上看,随机梯度是把梯度下降算法中的期望的梯度替换成了一个随机梯度。

image-20230304123651977

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/387786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【微信小程序】-- 案例 - 本地生活(二十)

💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…

【数据结构初阶】堆排序

目录 前言 概念 堆排序的实现 1.建堆 (1)堆向上调整算法 (2)堆的向下调整算法 2. 利用堆删除思想来进行排序 3.堆排序的时间复杂度 4.源码 总结 前言 前边我们学习了堆的实现,对堆的每个接口都进行了详细的讲…

js中getBoundingClientRect()方法

getBoundingClientRect()返回值是一个 DOMRect 对象,是包含整个元素的最小矩形(包括 padding 和 border-width)。该对象使用 left、top、right、bottom、x、y、width 和 height 这几个以像素为单位的只读属性描述整个矩形的位置和大小。除了 …

高性能网络I/O框架-netmap源码分析

前几天听一个朋友提到这个netmap,看了它的介绍和设计,确实是个好东西。其设计思想与业界不谋而合——因为为了提高性能,几个性能瓶颈放在那里,解决方法自然也是类似的。 netmap的出现,它既实现了一个高性能的网络I/O框…

【Storm】【五】Storm集成Kafka

Storm集成Kafka 一、整合说明二、写入数据到Kafka三、从Kafka中读取数据一、整合说明 Storm 官方对 Kafka 的整合分为两个版本,官方说明文档分别如下: Storm Kafka Integration : 主要是针对 0.8.x 版本的 Kafka 提供整合支持;Storm Kafka …

English Learning - L2-3 英音地道语音语调 小元音 [ʌ] [ɒ] [ʊ] [ɪ] [ə] [e] 2023.02.27 周一

English Learning - L2-3 英音地道语音语调 小元音 [ʌ] [ɒ] [ʊ] [ɪ] [ə] [e] 2023.02.27 周一课前活动练习方法大小元音总结小元音准备工作[ʌ] 中元音发音技巧对应单词的发音对应句子的发音常见的字母组合[ɒ] 后元音发音技巧对应单词的发音对应句子的发音常见的字母组合…

Spring——什么是事务?传播行为?事务隔离级别有哪些?

思维导图一、什么是事务?多条DML要么同时成功,要么同时失败Transaction(tx)二、事务的四个过程:开启事务(start transaction)执行核心业务代码提交事务(如果核心业务处理过程中没有出…

真香,Grafana开源Loki日志系统取代ELK?

一、Loki是什么? Loki是由Grafana Labs开源的一个水平可扩展、高可用性,多租户的日志聚合系统的日志聚合系统。它的设计初衷是为了解决在大规模分布式系统中,处理海量日志的问题。Loki采用了分布式的架构,并且与Prometheus、Graf…

【前端】一个更底层库-React基础知识点

目录Reat是什么?为什么要使用React类库比较容易学习,API非常少。组件内聚,容易组合原生组件和自定义组件融合渲染状态/属性驱动全局更新commonjs生态圈/工具栏完善React基础知识JSX概述JSX嵌入变量Event事件组合组合CHILDREN总结大家好&#…

02-问题思考维度:抓住核心用户、场景化分析、需求收集与辨别、用户故事

文章目录2.1 抓住核心用户2.1.1 为什么要抓住核心用户2.1.2 核心用户的特征根据不同维度,描述核心用户2.1.3 如何抓住核心用户2.2 场景化分析2.2.1 场景五要素2.2.2 场景化分析方法2.2.3 场景化分析方法的应用2.3 需求收集与辨别2.3.1 需求的定义及层次2.3.2 需求收…

汇编相关问题

汇编语言期末复习题DX:单项选择题 DU:多项选择题 TK:填空题 MC:名词解释 v JD:简答题 CXFX:程序分析题 CXTK:程序填空题 BC:编程题第1章:基础知识1、在汇编语言程序的开发…

Vue2.0开发之——购物车案例-axios请求列表数据(45)

一 概述 项目导入axios HTTP 库axios请求数据列表将请求到的数据转存到data中 二 项目导入axios HTTP 库 2.1 axios介绍 Axios是一个基于promise 的 HTTP 库,可以用在浏览器和 node.js中 2.2 axios项目地址 https://www.npmjs.com/package/axios 2.3 axios安装…

excel的Countif函数使用详细教程

excel的Countif函数使用详细教程本教程通过七个示例讲解Countif函数使用教程,其中条件如何设置模糊值,统计固定长度的文本,统计大于某个值,统计等于某个值的,统计日期等。Countif函数作用:对指定单元格区域…

pycharm关联github、新建以及更新仓

此处已经默认你安装了git以及pycharm,这篇文章将会教给大家如何利用pycharm管理自己的github. 目录 pycharm关联github设置 Github创建新的仓 仓库的更新 pycharm:2022。不同版本界面略有不同。 pycharm关联github设置 设置PyCharm,打开File --> Settings -…

SAP 如何批量扩充(复制)科目到其他子公司(T-CODE: FS15)?

SAP 科目主数据管理常用的事务代码: 科目的创建分科目表层(FSP0); 公司代码层(FSS0); 集中创建(FS00)。 现假设我们成立一家新的子公司,需要把母公司的科目批…

博客系统程序(页面设计)

咱们学习javaEE的目的就是完成一个网站.在当前学习的基础上,已经可以完成我们的博客系统的页面的设计了!!!首先我们要进行统筹规划:首先我们的博客页面将会有4个页面:1.博客列表页2.博客详情页显示一个博客的具体内容:3.登录页就是用户输入用户名和页面的地方4.博客编辑页发布新…

1、JAVA 开发环境搭建 - JDK 的安装配置

文章目录一、下载 JDK81、官网地址:[**https://www.oracle.com**](https://www.oracle.com)二、安装 JDK1、鼠标右键安装包,以管理员身份运行(无脑下一步即可)2、细节说明三、配置环境变量1、为啥要配置环境变量呢?2、原因分析3、配置环境变量…

SpringMVC的完整执行流程

Java知识点总结:想看的可以从这里进入 目录2.5、SpringMVC流程2.5、SpringMVC流程 Spring MVC 框架主要由 DispatcherServlet、处理器映射、控制器、视图解析器、视图等组成,它和其他的MVC框架一样,以请求为驱动,围绕Servlet分派…

顺序表(一篇带你掌握顺序表)

目录 一、顺序表是什么 1.1 概念 1.2 分类 1.3 结构 二、顺序表的基本操作 2.1 前绪准备 2.2 初始化 2.3 扩容 2.5 尾插 2.6 打印 2.7 尾删 2.8 头插 2.9 头删 2.10 在pos位置插入 2.11 删除pos位置的数据 2.12 查找 三、完整代码 3.1 Test.c文件 3.2 SeqList.h…

C++之const_cast的用法

C的四种类型转换之const_cast 这里写目录标题前言const_cast1.new type为左值引用2. new type为函数类型的右值引用3.new type为对象类型的右值引用4.指向函数的指针和指向成员函数的指针不受约束5.通过非const访问路径修改const对象导致未定义行为6.const_cast只能用来修改指针…