【强化学习的数学原理】第08课-值函数近似-笔记
学习资料:bilibili 西湖大学赵世钰老师的【强化学习的数学原理】课程。链接:强化学习的数学原理 西湖大学 赵世钰
文章目录
- 一、例子:曲线拟合
- 二、原理-目标函数介绍
- 三、原理-优化算法和函数选择
- 四、原理-示例与分析
- 五、Sarsa和Q-learning
- 六、Deep Q-learning (DQN) 基本原理
- 七、Deep Q-learning (DQN) Experience replay(经验回放)
- 八、Deep Q-learning (DQN) 代码与例子
一、例子:曲线拟合
截止到目前为止,我们所介绍的state value和action value都是以表格的形式呈现的(如下图所示)。这种呈现方式虽然清晰简单,但难以处理很大/连续的状态空间、动作空间。
下面通过一个例子来介绍value function approaximation的基本思想。
假设现在有 ∣ S ∣ |S| ∣S∣个状态,基于给定的策略,每个状态都有一个state value(用下图中的离散点表示,每一个离散点代表状态s对应的state value v(s))。如果状态s的数量非常多,那么储存就耗费很大空间,因此希望用一个函数来拟合这些点。
首先,用一个直线来拟合这些点。如下图所示。 w w w里面包含a和b,是parameter vector; ϕ ( s ) \phi(s) ϕ(s)是特征向量。
用直线进行拟合的好处:节约存储空间。现在不用存储很多状态s的state value,只需要存储两个参数a和b。但缺点是,拟合后的结果只是一个近似值,不那么精确了。
下面是一个非线性的拟合方式,这种方法使用的参数多一些,提高了拟合精度。
简单总结:总体思想是用参数化的函数来拟合状态s的state value。
优点:
(1)节省存储空间
(2)提高泛化性。假如s1/s2/s3是相邻的三个状态,现在episode访问到了s2,需要更新s2的state value,更新后的state value变大。在表格的形式中,s1和s3的state value值是保持不变的。但是在函数的形式中,s2的state value变化后,拟合的函数发生变化(w变化),此时对s1和s3的state value的估计值也更准确。
二、原理-目标函数介绍
v π ( s ) v_{\pi}(s) vπ(s)是state value的真实值, v ^ ( s , w ) \hat{v}(s,w) v^(s,w)是state value的近似值。
我们的目标是找到一个最优的 w w w,使得对于每一个状态 s s s, v ^ ( s , w ) \hat{v}(s,w) v^(s,w)都能最好地近似 v π ( s ) v_{\pi}(s) vπ(s)。
为了寻找最优的 w w w,我们定义如下目标函数:
值得指出的是, S S S是一个随机变量,既然是一个随机变量,这个随机变量就是有概率分布的。那么S的概率分布是什么呢?有几种方式来定义S的概率分布。
第一种方式是均匀分布。这种方式下,每一个状态的权重都是一样的,一共有 ∣ S ∣ |S| ∣S∣个状态,那每一个状态的权重就是 1 / ∣ S ∣ 1/|S| 1/∣S∣。但这样的缺点在于,并不是每一个状态都是同等重要,有的状态更重要,我们需要这样的状态权重高一点,计算的误差小一点。
第二种方式是stationary distribution。在这种方式下,从某一个状态开始,不断地和环境进行交互,交互很多次之后,就达到了一种平稳的状态,在这种平稳的状态下,能够计算出,每一个状态出现的概率是多少。这个概率分布用 d π ( s ) d_{\pi}(s) dπ(s)来表示,基于 d π ( s ) d_{\pi}(s) dπ(s)可以把目标函数写成如下图所示的形式。 d π ( s ) d_{\pi}(s) dπ(s)实际上扮演了权重的角色。
stationary distribution是状态state 的概率分布,从当前状态出发,跑了很多很多步之后达到的一种平稳的分布。它也被称作steady-state distribbution或者limiting distribution。
下图展示了一个例子。用 n π ( s ) n_{\pi}(s) nπ(s)表示在基于 π \pi π的策略基础上,在一个很长的episode中,访问s的次数。 d π ( s ) d_{\pi}(s) dπ(s)是比值结果,表示状态被访问的概率。右下角的图表示,随着步长越来越长,比值逐渐趋于稳定。
三、原理-优化算法和函数选择
优化算法
用梯度下降方法求解优化目标。下图给出了梯度下降算法,以及计算了目标函数 J ( w ) J(w) J(w)的梯度。
而这个梯度算出来是有期望的,期望不太好算,所以下面使用随机梯度来代替真实的梯度。
但是这个算法仍然是不好实施的,因为 v π ( s t ) v_{\pi}(s_t) vπ(st)的值是不知道的。可以用其他量来代替 v π ( s t ) v_{\pi}(s_t) vπ(st)。
第一种方法:Monte Carlo的方法。用 g ( t ) g(t) g(t)来代替 v π ( s t ) v_{\pi}(s_t) vπ(st), g ( t ) g(t) g(t)是在某一个episode中从状态 s t s_t st出发所得到的discounted return。(这个思想就是和蒙特卡洛方法一致的)
第二种方法:TD learning的方法。把 v π ( s t ) v_{\pi}(s_t) vπ(st)用下式来代替。
TD learning算法的伪代码如下。(分为general case和linear case两种情况)值函数估计的目标还是计算给定策略的state value。
函数选择
如何选择函数 v ^ ( s , w ) \hat{v}(s,w) v^(s,w)呢?
第一种方法,是用线性函数linear function作为 v ^ ( s , w ) \hat{v}(s,w) v^(s,w)。(以前常用)
第二种方法,是用神经网络作为一种非线性函数近似。神经网络的输入是状态state,输出是近似的结果 v ^ ( s , w ) \hat{v}(s,w) v^(s,w)。网络权重是 w w w。(现在常用)
下面看一下线性的情况。如果 v ^ ( s , w ) \hat{v}(s,w) v^(s,w)用线性函数表示,则其梯度为 ϕ ( s ) \phi(s) ϕ(s),把这个梯度应用到TD算法中,就得到如下图3所示的结果。这也被称作TD-Linear。
Linear function approximation的优劣势:
劣势:很难去选择一个好的feature vector。(好的拟合函数)
优势:相对于非线性函数,线性函数的理论性质能被很好地分析;线性函数的表征能力相对还是比较强的。
四、原理-示例与分析
例1:
下面是一个5*5的网格世界的例子,目标是用函数拟合的方法,在给定策略的基础上计算25个状态的state value。
下图展示了Ground truth。我们收集了500个episode,每个episode有500步。每个episode出发的state action pair是随机选择的,并服从均匀分布。
1.用一个平面来拟合
下面用TD-Linear算法来求解。所选择的feature vector实际上是一个平面(有x、y)。
下图(中间)给出了TD Linear的计算结果,下图(左边)是ground truth。可以看出,趋势是对的,但对于某些状态估计得不太准确。因为我的拟合函数只是一个平面,而真实结果是一个复杂的曲面。
2.用更高阶的曲面来拟合
从拟合结果中可以看出来,用更高阶的曲面来拟合,效果更好了。
小结:
PS:从(2)到(3)的替换在数学上是不严谨的。更详细的分析可以见赵老师的书。
五、Sarsa和Q-learning
Sarsa with function approximation
下图是Sarsa和value function approaximation相结合后的算法。和上一节讲到的TD算法相比,就是把 v ^ ( s t ) \hat{v}(s_t) v^(st)换成 q ^ ( s t , a t ) \hat{q}(s_t,a_t) q^(st,at)。这里本质上仍然是在做policy evaluation,action value q ^ = ϕ T w \hat{q}=\phi^Tw q^=ϕTw。
下图是伪代码。首先在当前状态 s t s_t st的情况下遵循策略选择动作 a t a_t at,产生 r t + 1 r_{t+1} rt+1和 s t + 1 s_{t+1} st+1,然后在新的状态下遵循策略选择新的动作 a t + 1 a_{t+1} at+1。然后进行value update 过程,对参数w进行更新,这里本质上仍然是在做policy evaluation。再进行policy update过程,这里采用的是 ϵ \epsilon ϵ-greedy的方法。
下图展示了将Sarsa和linear function approximation结合的例子。任务是从某一状态出发,到达目标状态。
Q-learning with function approximation
算法如下:
这是Q-learning with function approximation(on policy)版本的伪代码。
下图展示了将Q-learning和linear function approximation结合的例子。任务是从某一状态出发,到达目标状态。
六、Deep Q-learning (DQN) 基本原理
DQN把深度神经网络引入到强化学习中。下图的 J ( w ) J(w) J(w)展示了DQN的目标函数/损失函数。如果达到最优的话,loss function应该是等于0。
然后用梯度下降法对目标函数进行优化。但对这个目标函数求梯度有点困难。因为第二部分的梯度好求,但是第一部分的梯度有点难求。可以把第一部分+R看作一个整体y。
设计两个网络,在main network中,参数是w,w是一直被更新的,有新的采样进来的时候,就会被更新。但在target network中,参数是 w T w_T wT,这个参数不是一直被更新的,隔一段时间之后,会把main network中的参数w的值给赋值过来。最后, w w w和 w T w_T wT都能收敛到最优的值。
所以它的梯度公式最终是写成这样的:
值得强调的是,DQN使用了两个网络,main network和target network,其参数分别是 w w w和 w T w_T wT。在每次迭代中,从replay buffer中提取一些sample,使得输出的结果尽量接近 y T y_T yT。训练一段时间后,参数 w w w的值变化了,把这个值赋给 w T w_T wT, w T w_T wT再用来训练这个 w w w。
七、Deep Q-learning (DQN) Experience replay(经验回放)
什么是经验回放?
在收集数据experience samples的时候,是有一定的先后顺序的,但是在使用数据的时候,并不一定要遵循这个顺序。我们把这些数据存到一个 B B B集合中(从状态s出发,采取action a,得到reward r,跳转到下一个状态s’),这个集合的名字叫replay buffer。
每次训练神经网络的时候,从这个replay buffer中抽取一些mini-batch的随机样本。这些样本的抽取叫做experience replay,这需要遵循均匀分布。
为什么要经验回放?
为什么要在deep Q-learning中使用experience replay?为什么这个replay必须遵循均匀分布呢?
把 ( S , A ) (S,A) (S,A)当成一个索引,将其当成一个随机变量。给定 ( S , A ) (S,A) (S,A)后, R R R和 S ′ S' S′都服从系统的模型。假设 ( S , A ) (S,A) (S,A)服从均匀分布(因为我们没有先验知识,无法判断哪些 ( s , a ) (s,a) (s,a)重要,哪些不重要,所以我们只能让它服从均匀分布)。
为了不按照采集experience的顺序使用数据,采用了experience replay经验回放的方法,把数据打散,然后再均匀地从中抽取数据。
八、Deep Q-learning (DQN) 代码与例子
下面是Deep Q-learning的伪代码,off-policy 版:
初始的策略 π b \pi_b πb产生了很多sample,这些sample被存在集合 B B B中。下面在每一个iteration中,首先从集合 B B B中进行随机的采样,然后对采样进行进一步的处理,计算 y T y_T yT(希望近似值 q ^ \hat{q} q^尽可能地接近 y T y_T yT)。然后把 ( s , a , y T ) (s,a,y_T) (s,a,yT)送入到神经网络中进行训练。每经过C次迭代,就把 w w w赋值给 w T w_T wT。
例子:
任务是对所有的state action pair,去找到其optimal action value。一些具体的设置如下图所示。需要注意的是,这里设计的神经网络很简单,只有三层:隐藏层、输入层、输出层,隐藏层只有100个神经元。
下面是结果。可以看到TD error和state value error逐渐收敛到0。
相关文章:
【强化学习的数学原理】第08课-值函数近似-笔记
学习资料:bilibili 西湖大学赵世钰老师的【强化学习的数学原理】课程。链接:强化学习的数学原理 西湖大学 赵世钰 文章目录 一、例子:曲线拟合二、原理-目标函数介绍三、原理-优化算法和函数选择四、原理-示例与分析五、Sarsa和Q-learning六、…...
基于css实现正六边形的三种方案
方案一:通过旋转三个长方形生成正六边形 分析: 如下图所示,我们可以通过旋转三个长方形来得到一个正六边形。疑问: 1. 长方形的宽高分别是多少? 设正六边形的边长是100,基于一些数学常识,可以…...
React VS Vue
React 和 Vue 是目前最流行的两个前端框架,它们在设计理念、生态系统和开发体验上各有特点。以下是对 React 和 Vue 的全方位对比: 1. 核心设计理念 React 库而非框架:React 是一个用于构建 UI 的库,专注于视图层,其…...
CMake 编译工具
在使用 CMake 时,你可以通过指定工具链文件来设置编译器(如 GCC、G 或 Clang)。以下是具体步骤: 1. 创建工具链文件 首先,创建一个工具链文件(例如 toolchain.cmake),并在其中指定…...
el-tree选中数据重组成树
vueelement-ui 实现el-tree选择重新生成一个已选中的值组成新的数据树,效果如下 <template><div class"flex"><el-tree class"tree-row" :data"list" ref"tree" :props"{children: children, label: …...
IO、NIO解读和不同点,以及常用的文件流操作方法
java高级——IO、NIO解读和不同点,以及常用的文件流操作方法 前情提要文章介绍1. 什么是IO1.1 节点的分类1.2 传输方式 2. 七大传输方式解读2.1 File类解读2.1.1 创建文件的三种方式2.2.2 File的常用方法2.2.3 如何正确认识FileUtils 2.2 字节流(核心&am…...
51单片机-按键
1、独立按键 1.1、按键介绍 轻触开关是一种电子开关,使用时,轻轻按开关按钮就可使开关接通,当松开手时,开关断开。 1.2、独立按键原理 按键在闭合和断开时,触点会存在抖动现象。P2\P3\P1都是准双向IO口,…...
Spring Boot Actuator 监控✨
Spring Boot Actuator 是 Spring Boot 提供的一个强大的监控和管理工具,它可以帮助你深入了解和监控你的应用程序的运行状态。通过 Actuator,你可以获取应用程序的健康状况、内存使用情况、线程信息、HTTP 请求跟踪等。🚀 核心知识点 &#…...
SpringBoot论坛网站 – 功能详解与部署教程
项目概述 《SpringBoot的论坛网站》是一个基于SpringBoot框架开发的现代化论坛平台,旨在为用户提供一个便捷的交流空间。该项目不仅功能丰富,还具备良好的扩展性和易用性,适合用于学习、分享和讨论各类话题。以下是项目的核心功能模块和部署…...
俄罗斯方块游戏完整代码示例
以下是一个基于Cocos Creator引擎开发的俄罗斯方块游戏的完整代码示例。该游戏实现了俄罗斯方块的基本功能,并且代码整合在单个文件中,无需任何外部依赖,可以直接在浏览器中运行。 1. 创建Cocos Creator项目 首先,确保你已经安装了…...
【设计模式】【结构型模式】组合模式(Composite)
👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 👍 欢迎点赞、收藏、关注,跟上我的更新节奏 🎵 当你的天空突…...
【设计模式】03-理解常见设计模式-行为型模式(专栏完结)
前言 前面我们介绍完创建型模式和创建型模式,这篇介绍最后的行为型模式,也是【设计模式】专栏的最后一篇。 一、概述 行为型模式主要用于处理对象之间的交互和职责分配,以实现更灵活的行为和更好的协作。 二、常见的行为型模式 1、观察者模…...
Qt 6.8版本 自制windows下运行软件<一>——串口调试助手
自制串口调试助手 哔哩哔哩效果展示 一、 说明 本人在读学生,跟随哔哩哔哩网站北京迅为公司的教学视频,进行学习qt,由于视频中的实现过程是利用ui界面的实现,本人在学习过程中,通过完全敲代码的形式,实现同…...
Qt——静态函数中发送信号方法总结(不需要通过类内部信号与槽实现,关键是清楚你发送的信号源自哪个对象)
【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实战》...
深入解析 vLLM:高性能 LLM 服务框架的架构之美(一)原理与解析
修改内容时间2.4.1处理请求的流程,引用更好的流程图2025.02.11首发2025.02.08 深入解析 vLLM:高性能 LLM 服务框架的架构之美(一)原理与解析 深入解析 vLLM:高性能 LLM 服务框架的架构之美(二)…...
关于视频去水印的一点尝试
一. 视频去水印的几种方法 1. 使用ffmpeg delogo滤镜 delogo 滤镜的原理是通过插值算法,用水印周围的像素填充水印的位置。 示例: ffmpeg -i input.mp4 -filter_complex "[0:v]delogox420:y920:w1070:h60" output.mp4 该命令表示通过滤镜…...
前端常见面试题-2025
vue4.0 Vue.js 4.0 是在 2021 年 9 月发布。Vue.js 4.0 是 Vue.js 的一个重要版本,引入了许多新特性和改进,旨在提升开发者的体验和性能。以下是一些关键的更新和新特性: Composition API 重构:Vue 3 引入了 Composition API 作为…...
JavaEE-SpringBoot快速入门
文章目录 本节目标Maven什么是Maven创建一个Maven项目maven项目功能maven的依赖管理全球仓库, 私服, 本地服务器, 配置国内镜像 第一个SpringBoot项目创建项目运行SpringBoot程序 SpringBoot原理初步Web服务器 总结 本节目标 了解什么是maven, 配置国内源使用Springboot创建项…...
盛铂科技 SMF106 低相位噪声贴片式频率综合器模块
在现代通信和电子设备领域,频率综合器作为关键组件,其性能优劣直接影响系统的整体表现。盛铂科技的 SMF106 低相位噪声贴片式频率综合器,以其卓越的性能和独特设计,成为众多高性能系统的选择。 一、频率覆盖范围广,步进…...
前端【技术方案】重构项目
1. 明确重构目标 优化性能 减少页面加载时间降低资源占用 提升代码可维护性 更规范的代码风格更清晰的代码结构更明确的模块设计 扩展功能 为项目添加新功能改进现有功能 2. 评估项目现状 审查代码 全面检查现有代码,找出代码中的问题,如代码冗余、耦合…...
第十六天 HarmonyOS WebView开发实战:从加载网页到与JavaScript交互
HarmonyOS WebView开发实战:从加载网页到与JavaScript交互 一、WebView基础与HarmonyOS特性解析 在移动应用开发中,WebView作为内嵌浏览器组件,在HarmonyOS(鸿蒙系统)中扮演着重要角色。它不仅能够加载本地和远程网页…...
Unity学习part2
为bilibili教程【【Unity教程】零基础带你从小白到超神】 https://www.bilibili.com/video/BV1gQ4y1e7SS/?p50&share_sourcecopy_web&vd_source6e7a3cbb802eb986578ad26fae1eeaab的笔记 1、灯光的使用 定向光模拟太阳,是平行光。旋转定向光,光…...
贪吃蛇游戏
贪吃蛇 一、html <div class"container" id"app"></div><script src"./js/index.js"></script>二、css * {margin: 0;top: 0;} .set {margin: 15px auto;width: 600px; } .container {width: 600px;height: 600px;bac…...
docker修改镜像默认存储路径(基于 WSL2 的迁移方法)
打开powershell窗口 任意地方shift右键 1、停止 WSL wsl --shutdown2、导出数据 wsl --export docker-desktop-data E:\docker\DockerDesktopdata\docker-desktop-data.tar wsl --export docker-desktop E:\docker\DockerDesktop\docker-desktop.tar3、取消注册 wsl --un…...
C#+SqlSugar实现主从库读写分离
在使用 **SqlSugar** 进行分库操作时,可以通过配置多个数据库连接,并根据业务逻辑动态切换数据库。以下是一个完整的分库示例,展示如何实现分库功能。 --- ### **1. 安装 NuGet 包** 安装 SqlSugarCore: bash dotnet add packag…...
从无序到有序:上北智信通过深度数据分析改善会议室资源配置
当前企业普遍面临会议室资源管理难题,预约机制不完善和临时会议多导致资源调度不合理,既有空置又有过度拥挤现象。 针对上述问题,上北智信采用了专业数据分析手段,巧妙融合楼层平面图、环形图、折线图和柱形图等多种可视化工具&a…...
以太网详解(八)传输层协议:TCP/UDP 协议
文章目录 传输层协议概述为什么需要传输层?传输层功能网络层与传输层在实现 “端到端” 传输的异同两类服务:面向连接/无连接服务 传输控制协议 TCPTCP 协议数据单元格式TCP 的重传机制快重传和快恢复快重传举例快恢复算法 用户数据报协议 UDPUDP 概述UDP 基本工作过…...
CentOS 8 配置bond
CentOS 8 网络配置的详细步骤和对应的配置文件内容。 1. 配置聚合网卡(Bonding) 配置intranet聚合网卡 在/etc/sysconfig/network-scripts/目录下创建ifcfg-intranet文件,内容如下: TYPE=Bond NAME=intranet DEVICE=intranet ONBOOT=yes BOOTPROTO=none IPADDR=10.2.1.22…...
C语言基础16:二维数组、字符数组
二维数组 定义 二维数组本质上是一个行列式的组合,也就是说二维数组由行和列两部分组成。属于多维数组,二维数组数据是通过行列进行解读。 二维数组可被视为一个特殊的一维数组,相当于二维数组又是一个一维数组,只不过它的元素…...
Java 同步锁性能的最佳实践:从理论到实践的完整指南
目录 一、同步锁性能分析 (一)性能验证说明 1. 使用同步锁的代码示例 2. 不使用同步锁的代码示例 3. 结果与讨论 (二)案例初步优化分析说明 1. 使用AtomicInteger原子类尝试优化分析 2. 对AtomicInteger原子类进一步优化 …...
思科、华为、H3C常用命令对照表
取消/关闭 思科no华为undo华三undo 查看 思科show华为display华三display 退出 思科exit华为quit华三quit 设备命名 思科hostname华为sysname华三sysname 进入全局模式 思科enable、config terminal华为system-view华三system-view 删除文件 思科delete华为delete华…...
[qt5学习笔记]Application Example示例程序源码解析
开发环境问题 vs2022下直接打开ui、ts文件失败 解决办法如下图, 设置designer独立运行。估计是嵌入运行存在些许bug。 同理,ts编辑工具linguist也存在这个问题。 qrc rc的编辑嵌入编辑都正常,但分离式更稳定可靠。 qt creator编译失败 原…...
华为交换机堆叠技术简介配置
目录 一、华为堆叠技术简介(一)提高可靠性(二)扩展端口数量(三)增大带宽(四)简化组网(五)长距离堆叠 二、华为交换机堆叠技术的案例及命令配置(一…...
腿足机器人之四- 卡尔曼滤波
腿足机器人之四卡尔曼滤波 概率学基础贝叶斯准则熵 卡尔曼滤波扩展卡尔曼滤波信息滤波器 在机器人(四足、人形)领域,感知和行动的不确定性可能由多种因素引起,如传感器噪声、外部环境的变化、非精确控制以及实时性算力限制等。 和…...
nginx 部署前端vue项目
👨⚕ 主页: gis分享者 👨⚕ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕ 收录于专栏:前端工程师 文章目录 一、🍓什么是nginx?二、🍓nginx 部署…...
【第1章:深度学习概览——1.6 深度学习框架简介与选择建议】
嘿,各位老铁们,今天咱们来一场深度学习框架的深度探索之旅。在这个充满无限可能的深度学习时代,深度学习框架就像是连接理论与实践的桥梁,帮助我们从算法设计走向实际应用。随着技术的飞速发展,深度学习框架的选择变得越来越多样化,每一种框架都有其独特的优势和适用场景…...
NLLB 与 ChatGPT 双向优化:探索翻译模型与语言模型在小语种应用的融合策略
作者:来自 vivo 互联网算法团队- Huang Minghui 本文探讨了 NLLB 翻译模型与 ChatGPT 在小语种应用中的双向优化策略。首先介绍了 NLLB-200 的背景、数据、分词器和模型,以及其与 LLM(Large Language Model)的异同和协同关系。接着…...
C#的委托delegate与事件event
在C#中,delegate(委托)和 event(事件)是两个非常重要的概念,它们主要用于实现回调机制和事件驱动编程。下面详细介绍它们的原理和使用场景。 1. Delegate(委托) 1.1 委托的原理 委托…...
Spring Boot 集成MyBatis-Plus
文章目录 一、背景说明二、集成过程 2.1 引入 maven 依赖2.2 增加属性配置2.3 自动配置类 三、验证集成 3.1 控制器3.2 服务类3.3 Mapper接口类3.4 实体类3.4 不要忘记XML文件3.5 发起请求 四、技巧拓展 4.1 如何打印sql语句?4.2 如何对参数增加非空验证?…...
javacv将视频切分为m3u8视频并播放
学习链接 ffmpeg-demo 当前对应的 gitee代码 Spring boot视频播放(解决MP4大文件无法播放),整合ffmpeg,用m3u8切片播放。 springboot 通过javaCV 实现mp4转m3u8 上传oss 如何保护会员或付费视频?优酷是怎么做的? - HLS 流媒体加密 ffmpe…...
Docker 入门与实战:从安装到容器管理的完整指南
🚀 Docker 入门与实战:从安装到容器管理的完整指南 🌟 📖 简介 在现代软件开发中,容器化技术已经成为不可或缺的一部分。而 Docker 作为容器化领域的领头羊,以其轻量级、高效和跨平台的特性,深…...
计算机视觉:卷积神经网络(CNN)基本概念(二)
第一章:计算机视觉中图像的基础认知 第二章:计算机视觉:卷积神经网络(CNN)基本概念(一) 第三章:计算机视觉:卷积神经网络(CNN)基本概念(二) 第四章:搭建一个经典的LeNet5神经网络 接上一篇《计算机视觉&am…...
SQL SERVER的PARTITION BY应用场景
SQL SERVER的PARTITION BY关键字说明介绍 PARTITION BY关键字介绍具体使用场景排名计算累计求和分组求最值分组内百分比计算分组内移动平均计算分组内数据分布统计分组内数据偏移计算 总结 PARTITION BY关键字介绍 在SQL SERVER中,关键字PARTITION BY主要用于窗口函…...
【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十二节】
ISO 14229-1:2023 UDS诊断服务测试用例全解析(TesterPresent_0x3E服务) 作者:车端域控测试工程师 更新日期:2025年02月14日 关键词:UDS协议、0x3E服务、会话保持、ISO 14229-1:2023、ECU测试 一、服务功能概述 0x3E服…...
gsoap实现webservice服务
gsoap实现webservice服务 在实现Web服务时,使用gSOAP是一个很好的选择,因为它提供了强大的工具和库来创建SOAP和RESTful服务。gSOAP是一个C和C语言开发的库,它支持SOAP协议的各种版本,包括SOAP 1.1和SOAP 1.2。下面是如何使用gSO…...
达梦:dmserver占用io高排查
目录标题 1. 使用达梦数据库的性能视图查询当前活动会话查询执行时间较长的 SQL 2. 使用 DM 性能监视工具3. 使用操作系统工具监控 I/Oiostat 工具dstat 工具 4. 优化查询和索引审查 SQL 执行计划优化索引 5. 调整数据库参数6. 分析数据库日志7. 硬件和存储检查总结 针对达梦数…...
MoE架构中的专家选择门控机制:稀疏激活如何实现百倍效率突破?
技术原理(数学公式与核心逻辑) 核心公式 门控网络输出: G ( x ) Softmax ( W g ⋅ x b g ) G(x) \text{Softmax}(W_g \cdot x b_g) G(x)Softmax(Wg⋅xbg) 最终输出: y ∑ i 1 n G i ( x ) ⋅ E i ( x ) (仅保留Top-…...
用python写一个聊天室程序
下面是一个简单的基于Socket的Python聊天室程序示例,包括服务器端和客户端: 服务器端代码: import socket import threadingdef handle_client(client, address):print(f"New connection from {address}")while True:msg client…...
七星棋牌全开源修复版源码解析:6端兼容,200种玩法全面支持
本篇文章将详细讲解 七星棋牌修复版源码 的 技术架构、功能实现、二次开发思路、搭建教程 等内容,助您快速掌握该棋牌系统的开发技巧。 1. 七星棋牌源码概述 七星棋牌修复版源码是一款高度自由的 开源棋牌项目,该版本修复了原版中的多个 系统漏洞&#…...
Vulhub靶机 ActiveMQ任意 文件写入(CVE-2016-3088)(渗透测试详解)
一、开启vulhub环境 docker-compose up -d 启动 docker ps 查看开放的端口 漏洞版本:ActiveMQ在5.14.0之前的版本(不包括5.14.0) 二、访问靶机IP 8161端口 默认账户密码都是admin 1、利用bp抓包,修改为PUT方法并在fileserver…...