Reinfocement Learning 学习笔记PartⅡ

news2024/11/16 5:53:50

文章目录

  • Reinfocement Learning
    • 六、随机近似与随机梯度下降(Stochastic Approximation & Stochastic Gradient Descent)
      • 6.1 Robbins-Monro Algorithm
      • 6.2 随机梯度下降
    • 七、时序差分方法(Temporal-Difference Learning)
      • 7.1 TD算法介绍
      • 7.2 TD算法的收敛性
      • 7.3 TD算法与MC算法的比较
      • 7.4 Sarsa及其变种
      • 7.5 Q-learning
      • 7.6 on-policy learning & off-policy learning
      • 7.7 summary

Reinfocement Learning

六、随机近似与随机梯度下降(Stochastic Approximation & Stochastic Gradient Descent)

6.1 Robbins-Monro Algorithm

Stochastic approximation (SA) 是指一大类求根和优化问题的随机迭代算法,与许多其他求根算法相比,SA 的强大之处在于它无需知道目标函数的表达式或其导数。Robbins-Monro算法是SA领域的开创工作。

假定我们想要此等式的根 w w w g ( w ) = 0 g(w)=0 g(w)=0

当函数 g g g 的表达式已知或者它的导数已知的时候,求解当然很简单。但是当 g g g 未知的时候,问题就困难起来了。Robbins-Monro 算法是这样解决的:
w k + 1 = w k − a k g ∼ ( w k , η k ) w_{k+1}=w_k-a_k {\overset{\sim}{g}}(w_k,\eta_k) wk+1=wkakg(wk,ηk)
其中 w k w_k wk 是对第 k k k 次根的估计, g ∼ ( w k , η k ) = g ( w k ) + η k {\overset{\sim}{g}}(w_k,\eta_k)=g(w_k)+\eta_k g(wk,ηk)=g(wk)+ηk 是第 k k k 个带有噪声(误差)的观测(输出), a k a_k ak 是正系数。

显然这个算法并不依赖于函数 g g g,但依赖于输入序列 w k w_k wk 和带有噪声输出序列 g ∼ ( w k , η k ) {\overset{\sim}{g}}(w_k,\eta_k) g(wk,ηk),框图如下:

image-20231214133817850

最终 w k + 1 w_{k+1} wk+1 能收敛到根 w ∗ w^* w。收敛性在此不做证明。

来看一个平均值求解的例子。如何求平均值,把所有数加起来除以个数当然能求得。但这样做的弊端是我必须要获取所有的数据后才能求其均值,如何使用迭代的方式求解呢?

我们可以假设 w k + 1 = 1 k ∑ k i = 1 x i w_{k+1}=\frac{1}{k}\underset{i=1}{\overset{k} \sum} x_i wk+1=k1i=1kxi,则 w k = 1 k − 1 ∑ k − 1 i = 1 x i w_{k}=\frac{1}{k-1}\underset{i=1}{\overset{k-1} \sum} x_i wk=k11i=1k1xi,所以 w k + 1 w_{k+1} wk+1 可以由 w k w_k wk 表示:
w k + 1 = 1 k ∑ k i = 1 x i = 1 k ( ∑ k − 1 i = 1 x i + x k ) = 1 k ( ( k − 1 ) w k + x k ) = w k − 1 k ( w k − x k ) w_{k+1}=\frac{1}{k}\underset{i=1}{\overset{k} \sum} x_i=\frac{1}{k}(\underset{i=1}{\overset{k-1} \sum}x_i+x_k)=\frac{1}{k}((k-1)w_k+x_k)=w_k-\frac{1}{k}(w_k-x_k) wk+1=k1i=1kxi=k1(i=1k1xi+xk)=k1((k1)wk+xk)=wkk1(wkxk)
就像这样:

image-20231214140823822

如果把 1 k \frac{1}{k} k1 变为 α k \alpha_k αk 还能成立吗?可以用上述的 Robbins-Monro Algorithm 来证明 w k + 1 w_{k+1} wk+1 仍然能收敛到期望。

问题转换为当 α k ≠ 1 k \alpha_k \neq \frac{1}{k} αk=k1 时, w k + 1 w_{k+1} wk+1 还能收敛到期望 E [ X ] \mathbb{E}[X] E[X] 吗?

我们有 w k + 1 = w k − α k ( w k − x k ) w_{k+1}=w_k-\alpha_k(w_k-x_k) wk+1=wkαk(wkxk)

建立如下函数 g ( w ) = w − E [ X ] g(w)=w-\mathbb{E}[X] g(w)=wE[X],如果 g ( w ) = 0 g(w)=0 g(w)=0,根即为期望。

现输入一个 w w w,如何得到其噪音的观测呢?
g ∼ ( w , η ) = g ( w ) + η = ( w − E [ X ] ) + ( E [ X ] − x ) = w − x {\overset{\sim}{g}}(w,\eta)=g(w)+\eta=(w-\mathbb{E}[X])+(\mathbb{E}[X]-x)=w-x g(w,η)=g(w)+η=(wE[X])+(E[X]x)=wx
现考虑 w k w_k wk 序列并带入到 Robbins-Monro 公式中得:
w k + 1 = w k − α k ( w k − x k ) w_{k+1}=w_k-\alpha_k(w_k-x_k) wk+1=wkαk(wkxk)
即得到证明:即使 α k ≠ 1 k \alpha_k \neq \frac{1}{k} αk=k1 时, w k + 1 w_{k+1} wk+1 仍能收敛到期望 E [ X ] \mathbb{E}[X] E[X]

6.2 随机梯度下降

Stochastic gradient descent(SGD)被广泛应用于机器学习和强化学习,但后面可以发现它实际上就是一种特殊的 Robbins-Monro 算法。

假设我们要求解一个最优化问题 w w w 何值时, J ( w ) J(w) J(w) 最小:
min ⁡ w J ( w ) = E [ f ( w , X ) ] \underset{w}{\min}\quad J(w)=\mathbb{E}[f(w,X)] wminJ(w)=E[f(w,X)]
image-20231214144946062

α k \alpha_k αk 是学习率(步长), ∇ \nabla 表示梯度,采用梯度下降的方法一定能找到一个局部极小值

期望很难求,用蒙特卡洛估计依靠数据近似期望

image-20231214145951576

但每一次更新 w k w_k wk 时,都需要进行多次采样,现实中可能行不通

image-20231214150222648

与 GD 相比使用随机梯度来代替真实的梯度,与 BGD 相比,使 n = 1 n=1 n=1,即采样一次。

例子:

image-20231214150614741 image-20231214151150422

为什么 SGD 是可以收敛的呢?同样时使用 Robbins-Monro 证明。

现在有目标函数 J ( w ) = E [ f ( w , X ) ] J(w)=\mathbb{E}[f(w,X)] J(w)=E[f(w,X)]

我想让它取得最小值,那么一个必要条件时取得最小值时的梯度为0,即 ∇ w J ( w ) = E [ ∇ w f ( w , X ) ] = 0 \nabla_wJ(w)=\mathbb{E}[\nabla_w f(w,X)]=0 wJ(w)=E[wf(w,X)]=0

g ( w ) = ∇ w J ( w ) = E [ ∇ w f ( w , X ) ] g(w)=\nabla_wJ(w)=\mathbb{E}[\nabla_w f(w,X)] g(w)=wJ(w)=E[wf(w,X)],此时变成了 g ( w ) = 0 g(w)=0 g(w)=0 的求根问题

image-20231214152331509

image-20231214152355128

七、时序差分方法(Temporal-Difference Learning)

7.1 TD算法介绍

TD 算法是 m o d e l − f r e e model-free modelfree 的算法

由给定的策略 π \pi π t t t 时刻可以得到序列 { ( s t , r t + 1 , s t + 1 ) } t \{(s_t,r_{t+1},s_{t+1})\}_t {(st,rt+1,st+1)}t s t s_t st 表示 t t t 时刻所在的状态

image-20231214162807099

式中 v t v_t vt 代表在 t t t 时刻状态 s s s s t a t e   v a l u e state \ value state value (即 v π v_{\pi} vπ)的估计值,这个式子就是要用 v t v_t vt 来不断逼近 s t a t e   v a l u e state \ value state value

( 1 ) (1) (1) 式表示更新当前状态 s t s_t st s t a t e   v a l u e state \ value state value 估计值 v t + 1 ( s t ) v_{t+1}(s_t) vt+1(st)

( 2 ) (2) (2) 式表示其余状态的的 s t a t e   v a l u e state \ value state value 估计值不进行更新

image-20231214163154558

q u e s t i o n 1 question1 question1:为什么 v − t \overset{-}v_t vt 被称作 T D   t a r g e t TD \ target TD target

a n s w e r 1 answer1 answer1:因为此算法是要把 v t ( s t ) v_t(s_t) vt(st) 朝着 v − t \overset{-}v_t vt 的方向改进

image-20231214164326703

q u e s t i o n 2 question2 question2 T D   e r r o r TD \ error TD error 是什么?

a n s w e r 2 answer2 answer2

  • 两个时刻的差值
  • 描述了 v t v_t vt v π v_{\pi} vπ 之间的误差

T D   A l g o r i t h m   p r o p e r t i e s TD \ Algorithm \ properties TD Algorithm properties

  1. 对给定的策略进行 p o l i c y   e v a l u a t i o n policy \ evaluation policy evaluation ,即计算 s t a t e   v a l u e state \ value state value(不能估计 a c t i o n   v a l u e action \ value action value,不能寻找最优策略)
  2. 核心思想就是对于给定的策略,我对状态 s s s v π v_{\pi} vπ 有一个估计,这可能是不准确的,此时将得到的 { ( s t , r t + 1 , s t + 1 ) } t \{(s_t,r_{t+1},s_{t+1})\}_t {(st,rt+1,st+1)}t 与估计联系到一起,得到 T D   e r r o r TD \ error TD error,这说明了此时的估计是不准确的,并利用 T D   e r r o r TD \ error TD error 来改进当前的估计。

7.2 TD算法的收敛性

TD 算法其实是求解了这样一个贝尔曼公式:

image-20231215121843563

就是把原来的 G t + 1 G_{t+1} Gt+1 替换成了 v π ( S ′ ) v_{\pi}(S') vπ(S) ,这是由 s t a t e   v a l u e state \ value state value 最初始的定义得到的。

可以用 Robbins-Monro Algorithm 来求解这个公式,首先定义:

image-20231215122233806

如果 g ( v ( s ) ) = 0 g(v(s))=0 g(v(s))=0,那么 v ( s ) = E [ R + γ v π ( S ′ ∣ s ) ] v(s)=\mathbb{E}[R+\gamma v_{\pi}(S'|s)] v(s)=E[R+γvπ(Ss)] 成立,就可以用 v ( s ) v(s) v(s) 来逼近 v π ( s ) v_{\pi}(s) vπ(s)。我们有大量 R , S ′ R,S' R,S 的数据采样 r , s ′ r,s' r,s

image-20231215122504113

得到:

image-20231215122532778

此式存在两个问题。

q u e s t i o n 1 question1 question1:式子是由 { ( s , r , s ′ ) } \{(s,r,s')\} {(s,r,s)} 的得到的,如何确保它是按序的呢?

a n s w e r 1 answer1 answer1:将 { ( s , r , s ′ ) } \{(s,r,s')\} {(s,r,s)} 替换为一个 t r a j e c t o r y trajectory trajectory 中的 { ( s t , r t + 1 , s t + 1 ) } \{(s_t,r_{t+1},s_{t+1})\} {(st,rt+1,st+1)}

q u e s t i o n 2 question2 question2:式中的 v π ( s k ′ ) v_{\pi}(s_k') vπ(sk) 是不知道的

a n s w e r 2 answer2 answer2:用 v k ( s k ′ ) v_{k}(s_k') vk(sk) v π ( s k ′ ) v_{\pi}(s_k') vπ(sk) 的估计值来代替 v π ( s k ′ ) v_{\pi}(s_k') vπ(sk) ,仍能使得 v k ( s ) v_k(s) vk(s) 收敛

7.3 TD算法与MC算法的比较

TD LearningMC Learning
O n l i n e Online Online:能够在收到一个 r e w a r d reward reward 后立即更新 s t a t e / a c t i o n   v a l u e state/action \ value state/action value O f f l i n e Offline Offline:必须要等到一个 e p i s o d e episode episode 结束才能计算 r e t u r n return return
C o n t i n u i n g   t a s k s Continuing \ tasks Continuing tasks:可以处理连续的任务( e p i s o d e episode episode 无限长) E p i s o d i c   t a s k s Episodic \ tasks Episodic tasks:只能处理一个 e p i s o d e episode episode t e r m i n a l   s t a t e terminal \ state terminal state 的任务
B o o t s t r a p p i n g Bootstrapping Bootstrapping:更新 v a l u e value value 依赖于先前 v a l u e value value 的估计值 N o n − b o o t s t r a p p i n g Non-bootstrapping Nonbootstrapping:可以直接估计 s t a t e / a c t i o n   v a l u e state/action \ value state/action value
L o w   e s t i m a t i o n   v a r i a n c e Low \ estimation \ variance Low estimation variance:相较于 MC 有较少的随机变量,但是是有偏估计(由初始的估计造成) H i g h   e s t i m a t i o n   v a r i a n c e High \ estimation \ variance High estimation variance:为估计 q π k ( s , a ) q_{\pi_k}(s,a) qπk(s,a) 涉及到的随机变量较多,采样数量少的情况下方差较大,是无偏估计

7.4 Sarsa及其变种

S a r s a Sarsa Sarsa 可以给出给定策略 π \pi π a c t i o n   v a l u e action \ value action value

假设有集合 { ( s t , a t , r t + 1 , s t + 1 , a t + 1 ) } t \{(s_t,a_t,r_{t+1},s_{t+1},a_{t+1})\}_t {(st,at,rt+1,st+1,at+1)}t

image-20231215130620423

形式上跟 T D TD TD 算法是一样的,只是 T D TD TD 得到的是 s t a t e   v a l u e state \ value state value 的估计值,而 S a r s a Sarsa Sarsa a c i t o n   v a l u e aciton \ value aciton value 的估计值

S a r s a Sarsa Sarsa 求解的是这样的贝尔曼公式:

在这里插入图片描述

在求得 a c t i o n   v a l u e action \ value action value 之后,使用 ϵ − g r e e d y \epsilon-greedy ϵgreedy 的策略进行 p o l i c y   i m p r o v e m e n t policy \ improvement policy improvement

算法存在的问题是:如果 e p i s o d e episode episode 不足以覆盖全部的 ( s , a ) (s,a) (s,a),那么可能找不到全局的最优策略。

E x p e c t e d   S a r s a Expected \ Sarsa Expected Sarsa

image-20231215132900346

不需要再对 a t + 1 a_{t+1} at+1 进行采样, E x p e c t e d   S a r s a Expected \ Sarsa Expected Sarsa 求解的是这样的贝尔曼公式:

在这里插入图片描述

n − s t e p   S a r s a n-step\ Sarsa nstep Sarsa 需要的集合为 { ( s t , a t , r t + 1 , s t + 1 , a t + 1 ) , . . . , r t + n , s t + n , a t + n } t \{(s_t,a_t,r_{t+1},s_{t+1},a_{t+1}),...,r_{t+n},s_{t+n},a_{t+n}\}_t {(st,at,rt+1,st+1,at+1),...,rt+n,st+n,at+n}t,而 M C MC MC 是需要整个的 e p i s o d e episode episode,即所有的 s t a t e − a c t i o n   p a i r state-action \ pair stateaction pair

image-20231215133651194

区别在于后面的 T D   t a r g e t TD \ target TD target 不同

image-20231215133734213

7.5 Q-learning

image-20231215140030458

S a r s a Sarsa Sarsa 相比也是 T D   t a r g e t TD \ target TD target 不同, Q − l e a r n i n g Q-learning Qlearning 取的是让状态 s t + 1 s_{t+1} st+1 a c t i o n   v a l u e action \ value action value 取得最大值时的动作 a a a,而 S a r s a Sarsa Sarsa 是随机采样一个 a a a

Q − l e a r n i n g Q-learning Qlearning 求解的是贝尔曼最优方程:

image-20231215140438341

得到的值是最优的 a c t i o n   v a l u e action \ value action value,当然对应的是最优策略

7.6 on-policy learning & off-policy learning

T D   L e a r n i n g TD \ Learning TD Learning 中有两种策略:

  • b e h a v i o r   p o l i c y behavior \ policy behavior policy:用于生成 e x p e r i e n c e   s a m p l e s experience \ samples experience samples(即前面所说的 { ( s t , a t , r t + 1 , s t + 1 , a t + 1 ) } t \{(s_t,a_t,r_{t+1},s_{t+1},a_{t+1})\}_t {(st,at,rt+1,st+1,at+1)}t 这样的序列)
  • t a r g e t   p o l i c y target \ policy target policy:持续向最优策略更新

由此引出 o n − p o l i c y on-policy onpolicy o f f − p o l i c y off-policy offpolicy

  • o n − p o l i c y on-policy onpolicy b e h a v i o r   p o l i c y behavior \ policy behavior policy t a r g e t   p o l i c y target \ policy target policy 相同,即用一个策略 π \pi π 与环境交互得到 e x p e r i e n c e experience experience 同时改进这个策略 π \pi π ,再用改进的策略 π ′ \pi' π 与环境交互然后再改进直到得到最优策略 π ∗ \pi^* π
  • o f f − p o l i c y off-policy offpolicy b e h a v i o r   p o l i c y behavior \ policy behavior policy t a r g e t   p o l i c y target \ policy target policy 不相同,即用一个策略 π \pi π 与环境交互得到 e x p e r i e n c e experience experience 同时改进另外一个策略 π ′ \pi' π ,再用策略 π \pi π 与环境交互然后再改进 π ′ \pi' π 直到得到最优策略 π ∗ \pi^* π

S a r s a Sarsa Sarsa o n − p o l i c y on-policy onpolicy π t → e x p e r i e n c e → a c t i o n   v a l u e   e s t i m a t i o n → π t + 1 \pi_t \rightarrow experience \rightarrow action \ value \ estimation \rightarrow \pi_{t+1} πtexperienceaction value estimationπt+1 π t \pi_t πt 既是 b e h a v i o r   p o l i c y behavior \ policy behavior policy 也是 t a r g e t   p o l i c y target \ policy target policy

M o n t e − C a r l o Monte-Carlo MonteCarlo o n − p o l i c y on-policy onpolicy π t → e x p e r i e n c e / t r a j e c t o r y → a c t i o n   v a l u e   e s t i m a t i o n → π t + 1 \pi_t \rightarrow experience / trajectory \rightarrow action \ value \ estimation \rightarrow \pi_{t+1} πtexperience/trajectoryaction value estimationπt+1 π t \pi_t πt 既是 b e h a v i o r   p o l i c y behavior \ policy behavior policy 也是 t a r g e t   p o l i c y target \ policy target policy

Q − l e a r n i n g Q-learning Qlearning o f f − p o l i c y off-policy offpolicy: 由 s t s_t st 选择动作 a t a_t at b e h a v i o r   p o l i c y behavior \ policy behavior policy 可以是任意策略, t a r g e t   p o l i c y target\ policy target policy 是根据最大 a c t i o n   v a l u e action \ value action value 确定的最优策略

Q − l e a r n i n g Q-learning Qlearning 可以是 o n − p o l i c y on-policy onpolicy 的,也可以是 o f f − p o l i c y off-policy offpolicy

image-20231215144254887

用更新的 π t + 1 \pi_{t+1} πt+1 继续生成 e x p e r i e n c e experience experience,在 p o l i c y   i m p r o v e m e n t policy \ improvement policy improvement 阶段采用 ϵ − g r e e d y \epsilon-greedy ϵgreedy 是希望策略具有一定的探索性,希望能覆盖到所有的 ( s , a ) (s,a) (s,a)

image-20231215144400046

π b \pi_b πb (此策略生成的 e p i s o d e episode episode 会对 Q − l e a r n i n g Q-learning Qlearning 的结果产生影响)来生成 e x p e r i e n c e experience experience,在 p o l i c y   i m p r o v e m e n t policy \ improvement policy improvement 阶段采用 g r e e d y greedy greedy 是因为我不会用改进的策略来生成 e x p e r i e n c e experience experience,所以选最优的即可

7.7 summary

前面介绍的 T D TD TD 算法其实都可以用下面的式子统一表示:

image-20231215150359580

不同点在于 q t − \overset{-}{q_t} qt

image-20231215150431266

所有的算法也可以看作是求解贝尔曼公式或者贝尔曼最优公式的随即近似算法:

image-20231215150547040

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

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

相关文章

[算法总结] 十大排序算法

[算法总结] 十大排序算法 简介: 本文首发于我的个人博客:尾尾部落排序算法是最经典的算法知识。因为其实现代码短,应该广,在面试中经常会问到排序算法及其相关的问题。一般在面试中最常考的是快速排序和归并排序等基本的排序算法…

想做游戏开发,我应该会点啥?

在知乎上,经常能看到类似“如何入门游戏开发”这样的问题,这篇文章,我试着概括性的对游戏开发所需要的技能做一个总结,希望大家对游戏开发能有一个基本的认识~ 游戏开发基础要求高么? 和其他程序猿一样,要…

[MySQL]数据库概述

目录 1.什么是数据库 2.数据库分类 2.1关系型数据库 2.2非关系型数据库 1.什么是数据库 我们知道,存储数据可以使用文件来存储。那么为什么我们还要大费周章的去设计和使用数据库呢? 因为文件保存数据有以下几个缺点: 1.文件的安全性不…

Failed to install one or more provisioning profiles on the device

把provision文件导入mac,双击安装provision的时候,提示:Failed to install one or more provisioning profiles on the device。 大体意思是: 未能在设备上安装一个或多个配置配置文件。请确保为此设备配置配置文件。如果没有&am…

FGSM、PGD、BIM对抗攻击算法实现

本篇文章是博主在AI、无人机、强化学习等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在AI学…

代码随想录算法训练营 | day52 动态规划 300.最长递增子序列,674.最长连续递增子序列,718.最长重复子数组

刷题 300.最长递增子序列 题目链接 | 文章讲解 | 视频讲解 题目:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。…

vue脚手架安装及使用

准备工作 安装node安装cnpm cnpm是npm的“廉价平替” 提高安装速度 npm install -g cnpm --registryhttps://registry.npm.taobao.org 安装脚手架 安装Vue脚手架 cnpm install -g vue/cli 用vue脚手架创建vue项目 找好创建项目的位置 创建项目 vue create test (test为项…

磁盘及文件系统(上)

这次博客我们将重点理解Ext2文件系统。 首先我们要理解什么是文件系统。 在之前我们一直理解的文件都是一个被打开的文件,而os为了能够管理这样的文件创建了struct_file这样的结构体对象在内核中描述被打开的文件,这个结构体对象中包含了被打开文件的基…

【PostgreSQL】从零开始:(一)初识PostgreSQL

从零开始:(一)初识PostgreSQL PostgreSQL数据库介绍为什么使用 PostgreSQL?那么多最终用户,云厂商为什么要贡献核心代码?基于PostgreSQL底层开发的好处:为什么要学习PostgreSQL?截止本文发布之日&#xff0…

鸿蒙系统(HarmonyOS)之方舟框架(ArkUI)介绍

鸿蒙开发官网:HarmonyOS应用开发官网 - 华为HarmonyOS打造全场景新服务 方舟开发框架(简称:ArkUI),是一套构建HarmonyOS应用界面的UI开发框架,它提供了极简的UI语法与包括UI组件、动画机制、事件交互等在内…

鸿蒙app获取文本控件按钮控件_修改控件名称_按钮触发事件_提示信息显示

鸿蒙app获取文本控件按钮控件_修改控件名称_按钮触发事件_ 点击启动:提示信息显示 package com.example.myapplication.slice;import com.example.myapplication.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; impor…

linux 文本信息查询grep;控制命令执行和管道操作符号

1、grep grep "keyword" /path/to/logfile获取查询结果最后一行 grep "runs/detect/train" test4.log | tail -n 12、linux控制命令执行和管道操作符号 &、|、; 和 &&、》、>、< ##例子&#xff1b;wandb disabled && yolo …

synchronized关键字的使用和原理

synchronized关键字的使用和原理 synchronized&#xff1a;对象锁&#xff0c;保证了临界区内代码的原子性&#xff0c;采用互斥的方式让同一时刻至多只有一个线程能持有对象锁&#xff0c;其它线程获取这个对象锁时会阻塞&#xff0c;保证拥有锁的线程可以安全的执行临界区内…

vue-实现高德地图-省级行政区地块显示+悬浮显示+标签显示

<template><div><div id"container" /><div click"showFn">显示</div><div click"removeFn">移除</div></div> </template><script> import AMapLoader from amap/amap-jsapi-load…

SpringBoot - application.yml 多环境切换解决方案

问题描述 这个问题玩过 SpringCloud 的小伙伴估计会想到用 bootstrap.yml 来解决这个问题。但是如果说为了解决这个问题引入了一堆的 SpringCloud Jar&#xff0c;就感觉杀鸡用牛刀。 于是今天我们想只有 application.yml 自己就可以解决这个问题&#xff0c;如何搞定&#x…

真正可行的vue3迁移到nuxt3方法(本人亲测,完全避坑)

终于到了总结经验的时候了&#xff0c;这绝对是全网唯一、完全真正可行的干货。 在我看来&#xff0c;知识就是要拿来分享的&#xff0c;分享给他人也是在提高自己。我绝对不会搞什么订阅或者vip专栏来搞钱坑害各位&#xff0c; 因为我在csdn写文章最主要的目的是为了记录和总…

Chrome限制第三方Cookie:未来无法再追踪你看过哪些敏感的“色色”内容了

当我们在浏览网络的时候&#xff0c;常听到「Cookie」这个词&#xff0c;但许多人可能不太清楚它到底是什么。最近&#xff0c;Google 宣布了一项重要更新&#xff0c;Google Chrome 将减少对第三方cookie 的支持&#xff0c;以提高用户隐私保护。 下面我会解释一下这个改变对…

华为数通——路由冗余和备份

注&#xff1a;当一条路由的出接口down时&#xff0c;该路由会自动失效。 要求&#xff1a;数据优先走千兆链路。 R1 [ ]ip route-static 172.16.1.0 24 12.1.1.2 目的地址 掩码 下一条 [ ]ip route-static 172.16.1.0 24 21.1.1.2 preference 50 目的地址 …

ETLCloud的应用策略——实时数据处理是关键

一、ETLCloud是什么&#xff1f; ETLCloud又称数据集成&#xff08;DataOps&#xff09;&#xff0c;是RestCloud旗下的一款数据仓库管理工具&#xff0c;通过自动化数据转换和集成来实现企业内部和外部数据的无缝对接&#xff0c;从而帮助企业快速获取准确的数据信息&#xff…

vue3+leaflet天地图开发

<script setup> import { onMounted, onUnmounted, ref } from "vue"; // todo 项目使用请放开 leaflet 引入 // import L from leaflet;const emit defineEmits(["mapLoad"]);var markers ref([]); const mapRef ref(); const marker ref(); co…