大模型学习笔记 - LLM 对齐优化算法 DPO

news2024/9/24 19:26:53

LLM - DPO

  • LLM - DPO
    • DPO 概述
    • DPO 目标函数推导
    • DPO 目标函数梯度的推导

DPO 概述

大模型预训练是从大量语料中进行无监督学习,语料库内容混杂,训练的目标是语言模型损失,任务是next token prediction,生成的token 不可控,为了让大模型能生成符合人类偏好的答案(无毒无害等)一般都会进行微调和人类对齐,通常采用的方法是 基于人类反馈的强化学习方法RLHF. RLHF 是一个复杂且经常不稳定的过程,RLHF 分为2个步骤:

  1. 首先,训练一个SFT模型
  2. 然后,训练一个反映人类偏好的奖励模型 (Reward model),
  3. 最后,使用强化学习微调大型无监督 LM,以最大化这种估计奖励,而不会偏离原始模型太远。

DPO论文证明现有方法使用的基于 RL 的目标可以通过简单的二元交叉熵目标精确优化,大大简化了偏好学习管道。我们的方法利用了奖励模型参数化的特定选择,它可以在没有 RL 训练循环的情况下以封闭形式提取其最优策略。DPO是稳定的、高性能的、计算量轻的,在微调或执行显著的超参数调优时不需要从LM中采样。我们的实验表明,DPO可以微调LM,使其与人类偏好保持一致,甚至比现有方法更好。

核心就是:不需要显示地训练一个Reward Model,而是利用 从奖励函数到最优策略的解析映射,从而将 奖励函数上的偏好损失函数转换为策略上的偏好损失函数。
具体做法是给定人类对模型响应的偏好数据集,DPO使用简单的二元交叉熵目标优化策略,而无需在训练期间明确学习奖励函数或从策略中采样

DPO 目标函数推导

首先,DPO的目标函数是根据RLHF的2步骤的目标函数进行推理得到的。我们先看 RLHF步骤中的 目标函数:

一个是RewardModel:
m a x r θ E ( x , y w , y l ) ∈ D [ l o g ( σ ( r ϕ ( x , y w ) − r ϕ ( x , y l ) ) ) ] max_{r_{\theta}}E_{(x,y_w,y_l)\in D}[log(\sigma(r_{\phi}(x,y_w) - r_{\phi}(x,y_l)))] maxrθE(x,yw,yl)D[log(σ(rϕ(x,yw)rϕ(x,yl)))]
一个是RL目标函数:
m a x π θ E ( x ∈ D , y ∈ π θ ( y ∣ x ) ) [ r ϕ ( x , y ) ] − β D K L [ π θ ( y ∣ x ) ∣ ∣ π r e f ( y ∣ x ) ] max_{\pi_{\theta}}E_{(x \in D,y \in \pi_{\theta}(y|x))}[r_{\phi}(x,y)] - \beta D_{KL}[\pi_{\theta}(y|x)||\pi_{ref}(y|x)] maxπθE(xD,yπθ(yx))[rϕ(x,y)]βDKL[πθ(yx)∣∣πref(yx)]

下面我们针对RL的目标函数进行推导,看DPO的目标是如何得到的。

  1. 对于RL目标函数进行展开计算:
    m a x π θ E ( x ∈ D , y ∈ π θ ( y ∣ x ) ) [ r ϕ ( x , y ) ] − β D K L [ π θ ( y ∣ x ) ∣ ∣ π r e f ( y ∣ x ) ] max_{\pi_{\theta}}E_{(x \in D,y \in \pi_{\theta}(y|x))}[r_{\phi}(x,y)] - \beta D_{KL}[\pi_{\theta}(y|x)||\pi_{ref}(y|x)] maxπθE(xD,yπθ(yx))[rϕ(x,y)]βDKL[πθ(yx)∣∣πref(yx)]
    = m a x π θ E ( x ∈ D , y ∈ π θ ( y ∣ x ) ) [ r ϕ ( x , y ) ] − β l o g π θ ( y ∣ x ) π r e f ( y ∣ x ) =max_{\pi_{\theta}}E_{(x \in D,y \in \pi_{\theta}(y|x))}[r_{\phi}(x,y)] - \beta log\frac{\pi_{\theta}(y|x)}{\pi_{ref}(y|x)} =maxπθE(xD,yπθ(yx))[rϕ(x,y)]βlogπref(yx)πθ(yx)
    = m i n π θ E ( x ∈ D , y ∈ π θ ( y ∣ x ) ) [ β l o g π θ ( y ∣ x ) π r e f ( y ∣ x ) − r ϕ ( x , y ) ] =min_{\pi_{\theta}}E_{(x \in D,y \in \pi_{\theta}(y|x))}[\beta log\frac{\pi_{\theta}(y|x)}{\pi_{ref}(y|x)} - r_{\phi}(x,y)] =minπθE(xD,yπθ(yx))[βlogπref(yx)πθ(yx)rϕ(x,y)]
    = m i n π θ E ( x ∈ D , y ∈ π θ ( y ∣ x ) ) [ l o g π θ ( y ∣ x ) π r e f ( y ∣ x ) − 1 β r ϕ ( x , y ) ] =min_{\pi_{\theta}}E_{(x \in D,y \in \pi_{\theta}(y|x))}[log\frac{\pi_{\theta}(y|x)}{\pi_{ref}(y|x)} - \frac{1}{\beta }r_{\phi}(x,y)] =minπθE(xD,yπθ(yx))[logπref(yx)πθ(yx)β1rϕ(x,y)]
    = m i n π θ E ( x ∈ D , y ∈ π θ ( y ∣ x ) ) [ l o g π θ ( y ∣ x ) π r e f ( y ∣ x ) − l o g ( e 1 β r ϕ ( x , y ) ) ] =min_{\pi_{\theta}}E_{(x \in D,y \in \pi_{\theta}(y|x))}[log\frac{\pi_{\theta}(y|x)}{\pi_{ref}(y|x)} - log(e^{\frac{1}{\beta }r_{\phi}(x,y)})] =minπθE(xD,yπθ(yx))[logπref(yx)πθ(yx)log(eβ1rϕ(x,y))]
    = m i n π θ E ( x ∈ D , y ∈ π θ ( y ∣ x ) ) [ l o g π θ ( y ∣ x ) π r e f ( y ∣ x ) e 1 β r ϕ ( x , y ) ] =min_{\pi_{\theta}}E_{(x \in D,y \in \pi_{\theta}(y|x))}[log\frac{\pi_{\theta}(y|x)}{\pi_{ref}(y|x)e^{\frac{1}{\beta }r_{\phi}(x,y)}}] =minπθE(xD,yπθ(yx))[logπref(yx)eβ1rϕ(x,y)πθ(yx)]

  2. 还是针对RL目标函数,假定在奖励函数 r r r下,最优策略为 π r \pi_{r} πr,那么 RL的目标就是要得到最优策略,因此RL的目标可以等价为 最小化 π θ \pi_{\theta} πθ π r \pi_{r} πr的KL散度,即:
    m a x π θ E ( x ∈ D , y ∈ π θ ( y ∣ x ) ) [ r ϕ ( x , y ) ] − β D K L [ π θ ( y ∣ x ) ∣ ∣ π r e f ( y ∣ x ) ] max_{\pi_{\theta}}E_{(x \in D,y \in \pi_{\theta}(y|x))}[r_{\phi}(x,y)] - \beta D_{KL}[\pi_{\theta}(y|x)||\pi_{ref}(y|x)] maxπθE(xD,yπθ(yx))[rϕ(x,y)]βDKL[πθ(yx)∣∣πref(yx)]
    = m i n π θ D K L [ π θ ( y ∣ x ) ∣ ∣ π r ( y ∣ x ) ] =min_{\pi_{\theta}}D_{KL}[\pi_{\theta}(y|x) || \pi_{r}(y|x)] =minπθDKL[πθ(yx)∣∣πr(yx)]
    = m i n π θ E ( x ∈ D , y ∈ π θ ( y ∣ x ) ) [ l o g π θ ( y ∣ x ) π r ( y ∣ x ) ] =min_{\pi_{\theta}}E_{(x \in D,y \in \pi_{\theta}(y|x))}[log\frac{\pi_{\theta}(y|x)}{\pi_{r}(y|x)}] =minπθE(xD,yπθ(yx))[logπr(yx)πθ(yx)]

  3. 综合上面两个推导,可以得到
    m i n π θ E ( x ∈ D , y ∈ π θ ( y ∣ x ) ) [ l o g π θ ( y ∣ x ) π r e f ( y ∣ x ) e 1 β r ϕ ( x , y ) ] = m i n π θ E ( x ∈ D , y ∈ π θ ( y ∣ x ) ) [ l o g π θ ( y ∣ x ) π r ( y ∣ x ) ] min_{\pi_{\theta}}E_{(x \in D,y \in \pi_{\theta}(y|x))}[log\frac{\pi_{\theta}(y|x)}{\pi_{ref}(y|x)e^{\frac{1}{\beta }r_{\phi}(x,y)}}] =min_{\pi_{\theta}}E_{(x \in D,y \in \pi_{\theta}(y|x))}[log\frac{\pi_{\theta}(y|x)}{\pi_{r}(y|x)}] minπθE(xD,yπθ(yx))[logπref(yx)eβ1rϕ(x,y)πθ(yx)]=minπθE(xD,yπθ(yx))[logπr(yx)πθ(yx)]
    从而可知 π r ( y ∣ x ) \pi_r(y|x) πr(yx) π r e f ( y ∣ x ) e 1 β r ϕ ( x , y ) \pi_{ref}(y|x)e^{\frac{1}{\beta }r_{\phi}(x,y)} πref(yx)eβ1rϕ(x,y) 正相关
    因此设 π r ( y ∣ x ) = 1 Z ( x ) π r e f ( y ∣ x ) e 1 β r ϕ ( x , y ) \pi_r(y|x) = \frac{1}{Z(x)}\pi_{ref}(y|x)e^{\frac{1}{\beta }r_{\phi}(x,y)} πr(yx)=Z(x)1πref(yx)eβ1rϕ(x,y)
    其中 Z ( x ) = ∑ y π r e f ( y ∣ x ) e 1 β r ϕ ( x , y ) Z(x) = \sum_y \pi_{ref}(y|x)e^{\frac{1}{\beta }r_{\phi}(x,y)} Z(x)=yπref(yx)eβ1rϕ(x,y)这里 Z ( x ) Z(x) Z(x) 函只和 基线策略 π r e f \pi_{ref} πref有关,而不依赖与策略函数 π \pi π,其目的是使得右边满足取值在[0,1]范围内,相当于起到一个归一化作用。( π r \pi_{r} πr本质是一个概率,概率的特性之一就是归一化的,所以这里要有一个归一化项)

  4. 为了根据最优策略 π r \pi_r πr,基线策略 π r e f \pi_{ref} πref 和位置的分配函数 Z ( x ) Z(x) Z(x),来表示奖励函数,我们对 π r ( y ∣ x ) = 1 Z ( x ) π r e f ( y ∣ x ) e 1 β r ϕ ( x , y ) \pi_r(y|x) = \frac{1}{Z(x)}\pi_{ref}(y|x)e^{\frac{1}{\beta }r_{\phi}(x,y)} πr(yx)=Z(x)1πref(yx)eβ1rϕ(x,y) 进行推导,两边取对数,然后进行推导,得到 r ϕ ( x , y ) r_{\phi}(x,y) rϕ(x,y)

    • l o g π r ( y ∣ x ) = l o g ( 1 Z ( x ) π r e f ( y ∣ x ) e 1 β r ϕ ( x , y ) ) log \pi_r(y|x) = log (\frac{1}{Z(x)}\pi_{ref}(y|x)e^{\frac{1}{\beta }r_{\phi}(x,y)}) logπr(yx)=log(Z(x)1πref(yx)eβ1rϕ(x,y)) (取log)
      l o g π r ( y ∣ x ) = l o g ( π r e f ( y ∣ x ) ) + l o g ( e 1 β r ϕ ( x , y ) ) − l o g ( Z ( x ) ) log \pi_r(y|x) = log (\pi_{ref}(y|x))+log(e^{\frac{1}{\beta }r_{\phi}(x,y)}) - log(Z(x)) logπr(yx)=log(πref(yx))+log(eβ1rϕ(x,y))log(Z(x)) (拆分对数运行)
      l o g ( e 1 β r ϕ ( x , y ) ) = l o g π r ( y ∣ x ) − l o g ( π r e f ( y ∣ x ) ) + l o g ( Z ( x ) ) log(e^{\frac{1}{\beta }r_{\phi}(x,y)}) = log \pi_r(y|x) -log (\pi_{ref}(y|x))+log(Z(x)) log(eβ1rϕ(x,y))=logπr(yx)log(πref(yx))+log(Z(x))
      1 β r ϕ ( x , y ) = l o g π r ( y ∣ x ) − l o g ( π r e f ( y ∣ x ) ) + l o g ( Z ( x ) ) {\frac{1}{\beta }r_{\phi}(x,y)} = log \pi_r(y|x) -log (\pi_{ref}(y|x))+log(Z(x)) β1rϕ(x,y)=logπr(yx)log(πref(yx))+log(Z(x))
      r ϕ ( x , y ) = β l o g π r ( y ∣ x ) − β l o g ( π r e f ( y ∣ x ) ) + l o g ( Z ( x ) ) r_{\phi}(x,y) = \beta log \pi_r(y|x) -\beta log (\pi_{ref}(y|x))+log(Z(x)) rϕ(x,y)=βlogπr(yx)βlog(πref(yx))+log(Z(x))
      r ϕ ( x , y ) = β l o g π r ( y ∣ x ) π r e f ( y ∣ x ) + l o g ( Z ( x ) ) r_{\phi}(x,y) = \beta log \frac{\pi_r(y|x)}{\pi_{ref}(y|x)}+log(Z(x)) rϕ(x,y)=βlogπref(yx)πr(yx)+log(Z(x))

    假定最优奖励函数 r ∗ r* r下对应的最优模型策略是 π ∗ \pi* π,那么
    r ∗ ϕ ( x , y ) = β l o g π ∗ r ( y ∣ x ) π r e f ( y ∣ x ) + l o g ( Z ( x ) ) r*_{\phi}(x,y) = \beta log \frac{\pi*_r(y|x)}{\pi_{ref}(y|x)}+log(Z(x)) rϕ(x,y)=βlogπref(yx)πr(yx)+log(Z(x))

  5. 考虑到最优策略的不确定性,因此使用参数化的策略 π θ \pi_{\theta} πθ来表示,相应的奖励函数则表示为 r θ ( x , y ) = β l o g π θ ( y ∣ x ) π r e f ( y ∣ x ) + l o g ( Z ( x ) ) r_{\theta}(x,y) = \beta log \frac{\pi_{\theta}(y|x)}{\pi_{ref}(y|x)}+log(Z(x)) rθ(x,y)=βlogπref(yx)πθ(yx)+log(Z(x))

  6. 此时,我们可以为策略 π θ \pi_{\theta} πθ构建最大似然目标,类似于奖励建模方法,最大化偏好答案于非偏好答案奖励的差值。那么我们的策略目标变为: L D P O ( θ ) = − E x , y w , y l ∈ D [ l o g σ ( r θ ( x , y w ) − r θ ( x , y l ) ) ] L_{DPO}(\theta) = -E_{{x,y_w,y_l}\in D}[log\sigma(r_{\theta}(x,y_w) - r_{\theta}(x,y_l))] LDPO(θ)=Ex,yw,ylD[logσ(rθ(x,yw)rθ(x,yl))]
    = − E x , y w , y l ∈ D [ l o g σ ( β l o g π θ ( y w ∣ x ) π r e f ( y w ∣ x ) − β l o g π θ ( y l ∣ x ) π r e f ( y l ∣ x ) ) ] = -E_{{x,y_w,y_l}\in D}[log\sigma(\beta log\frac{\pi_{\theta}(y_w|x)}{\pi_{ref}(y_w|x)} - \beta log\frac{\pi_{\theta}(y_l|x)}{\pi_{ref}(y_l|x)})] =Ex,yw,ylD[logσ(βlogπref(ywx)πθ(ywx)βlogπref(ylx)πθ(ylx))]

上面推导出奖励函数 r 与策略 π \pi π的关系,就是为了把 RL 目标函数中的 r 替换掉,从而实现DPO的目标,不需要训练奖励函数。

DPO 这个目标函数的意义:

  • 当一个答案是好的答案时,我们要尽可能增大其被策略模型生成的概率(且这个的概率尽可能大于被基线模型生成的概率,举个例子,既然是好的,就要比初期更大胆的趋近之)
  • 当一个答案是差的答案时,我们要尽可能降低其被策略模型生成的概率(且这个的概率尽可能小于被基线模型生成的概率,换言之,既然是差的,则要比初期尽可能远离之)

由于我们追求的是让目标函数最大(虽说我们一般要求loss最小化,但毕竟整个目标函数的最前面加了个负号),故意味着针对大括号里的这个式子而言 [ l o g σ ( β l o g π θ ( y w ∣ x ) π r e f ( y w ∣ x ) − β l o g π θ ( y l ∣ x ) π r e f ( y l ∣ x ) ) ] [log\sigma(\beta log\frac{\pi_{\theta}(y_w|x)}{\pi_{ref}(y_w|x)} - \beta log\frac{\pi_{\theta}(y_l|x)}{\pi_{ref}(y_l|x)})] [logσ(βlogπref(ywx)πθ(ywx)βlogπref(ylx)πθ(ylx))]

我们希望左边尽可能大,而右边尽可能小,那左边、右边分别意味着什么呢?

  • 左半部分代表生成good response相较于初期生成good response的累积概率差值
  • 右半部分代表生成bad response 相较于初期生成 bad response 的累计概率差值

有三种可能的情况:

  • 左边变大,右边变小,理想情况,good response相对概率提升,bad response相对概率下降
  • 左边变小,右边更小,good response相对概率下降,但是bad response相对概率下降的更多,生成的时候还是倾向于good response
  • 左边变的更大,右边只大了一点点,和上一条 同理

DPO 目标函数梯度的推导

我们看DPO目标函数的梯度如何推导:
L D P O ( θ ) = − E x , y w , y l ∈ D [ l o g σ ( β l o g π θ ( y w ∣ x ) π r e f ( y w ∣ x ) − β l o g π θ ( y l ∣ x ) π r e f ( y l ∣ x ) ) ] L_{DPO}(\theta) = -E_{{x,y_w,y_l}\in D}[log\sigma(\beta log\frac{\pi_{\theta}(y_w|x)}{\pi_{ref}(y_w|x)} - \beta log\frac{\pi_{\theta}(y_l|x)}{\pi_{ref}(y_l|x)})] LDPO(θ)=Ex,yw,ylD[logσ(βlogπref(ywx)πθ(ywx)βlogπref(ylx)πθ(ylx))]

u = ( β l o g π θ ( y w ∣ x ) π r e f ( y w ∣ x ) − β l o g π θ ( y l ∣ x ) π r e f ( y l ∣ x ) ) u = (\beta log\frac{\pi_{\theta}(y_w|x)}{\pi_{ref}(y_w|x)} - \beta log\frac{\pi_{\theta}(y_l|x)}{\pi_{ref}(y_l|x)}) u=(βlogπref(ywx)πθ(ywx)βlogπref(ylx)πθ(ylx))

  • ∇ θ L D P O = − E x , y w , y l ∈ D [ ∇ θ l o g σ ( u ) ] \nabla_{\theta}L_{DPO} = -E_{{x,y_w,y_l}\in D} [\nabla_{\theta} log\sigma(u)] θLDPO=Ex,yw,ylD[θlogσ(u)] = − E x , y w , y l ∈ D [ 1 σ ( u ) ∇ θ σ ( u ) ] = -E_{{x,y_w,y_l}\in D} [\frac{1}{\sigma(u)}\nabla_{\theta} \sigma(u)] =Ex,yw,ylD[σ(u)1θσ(u)] = − E x , y w , y l ∈ D [ σ ′ ( u ) σ ( u ) ∇ θ u ] = -E_{{x,y_w,y_l}\in D} [\frac{\sigma'(u)}{\sigma(u)}\nabla_{\theta} u] =Ex,yw,ylD[σ(u)σ(u)θu]

根据sigmoid函数的性质 σ ′ ( x ) = σ ( x ) ( 1 − σ ( x ) \sigma'(x) = \sigma(x)(1-\sigma(x) σ(x)=σ(x)(1σ(x) 以及 σ ′ ( − x ) = ( 1 − σ ( x ) ) \sigma'(-x) =(1-\sigma(x)) σ(x)=(1σ(x))
可得
在这里插入图片描述

其中 r θ = β l o g π θ ( y w ∣ x ) π r e f ( y w ∣ x ) r_{\theta}=\beta log\frac{\pi_{\theta}(y_w|x)}{\pi_{ref}(y_w|x)} rθ=βlogπref(ywx)πθ(ywx)可以看作对 ( x , y ) (x,y) (x,y)的奖励的估计。红色部分表示当非偏好答案 y l y_l yl的奖励大于偏好答案 y w y_w yw的奖励时,梯度越大。绿色部分会增加偏好答案 y w y_w yw的概率,蓝色部分会减小非偏好答案 y l y_l yl的概率。

参考: DPO: Direct Preference Optimization训练目标推导

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

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

相关文章

MyBatis-Plus分页插件使用详解

一、简述 在使用mybatis开发项目的时候我们通常使用pagehelper来进行分页操作, 但是我们在使用MyBatis-Plus 开发时,MyBatis-Plus内置已经有分页功能了,其实不需要在额外引入pagehelper依赖了,而且两者同时引入有时候还会导致分页…

主流商品API接口在电商跨境电商企业应用/项目中的重要作用

618狂欢已经开启,为了获取更大利益,电商商家应使用价格接口系统。价格接口对电商商家有多方面的好处,主要体现在以下几个方面: 1、价格接口系统可以帮助品牌和商家实现更加科学和精准的定价策略。通过实时获取多个主流电商平台&a…

公众号里面的试卷怎么打印

经过我们的观察发现,微信公众号中的试卷通常有两种形式:图片和文档。如果试卷是以图片的形式嵌入在文章中作为配图,您只需点击图片并长按,选择“保存图片”到手机中。之后,您可以选择任何方便的方式完成打印。 不过&am…

ELK企业级日志分析系统(分布式文件系统与企业级应用)

一、ELK 概述 1、ELK简介 ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。 ElasticSearch 是基于Lucene(一个全文检索引擎的架构…

笔记整理—uboot启动过程(4)BL2干了什么及内存排布

uboot的第一阶段结束于start_armboot,第二阶段的uboot代码主要负责soc外部硬件(inand、网卡、......)、uboot本身构建(uboot指令、环境变量、......)最后进入命令行,等待命令然后倒数,等待bootc…

Pytest框架环境切换实战教程

测试人员每天都跟不同的环境打交道,比如线上环境,测试环境,预上线环境等等,那么作为自动化测试人员写的代码,我们也要具备能自由切换环境的能力,那么今天小编就给大家聊一下,如何能让我们python…

linux 安装kafaka单体服务

1.下载kafka的linux安装包 前往Apache Kafka官方网站下载页面(Apache Kafkahttps://kafka.apache.org/downloads),选择最新稳定版的Kafka二进制分发文件,通常是以.tgz结尾的文件。 手动下载kafka_2.13-3.8.0.tgz到本地&#xff0…

Spring Boot 与 Spring Security 的集成及 OAuth2 实现

我的主页:2的n次方_ 在现代 Web 应用开发中,安全性是至关重要的。无论是保护用户的敏感数据,还是确保 API 只允许经过授权的请求访问,开发者都需要一个强大且灵活的安全框架来实现这些需求。Spring Security 作为 Spring 框架的…

MATLAB 生成指定范围、角度、厚度的含噪平面点云(77)

模拟生成点云并可视化显示,可以验证算法有效性,尤其是针对验证算法的某方面 MATLAB 生成指定范围、角度、厚度的含噪平面点云(77) 一、算法介绍二、使用步骤1.代码2.效果一、算法介绍 如题,模拟生成一组平面点云,含有噪声点,确定算法稳定性,可以指定生成平面的范围,厚…

混合A*算法

混合A*算法是一种改进版的A*算法,特别针对车辆动力学进行了优化。这种算法在经典A*的基础上引入了新的维度和概念,以生成更加实际可行的路径。 首先,混合A*算法不仅考虑x和y的位置,还引入了θ维度来表示车辆的朝向。这意味着搜索…

Unity视频播放插件-VideoPro(Windows)

Unity视频播放插件-VideoPro-windows 🌮介绍🍤使用方法🥙示例🌳rtsp🌳本地视频🌳网络视频 🌮介绍 1.支持播放格式:rtsp、http、本地视频。 2.exe试用🌈 3.经测试i9 cpu 空…

【STM32开发笔记】搭建基于ST官方VSCode扩展的STM32开发环境

搭建基于ST官方VSCode扩展的STM32开发环境 一、安装软件1.1 安装VSCode1.2 安装STM32CubeMX1.3 安装STM32CubeCLT1.4 安装ST-MCU-FINDER-PC 二、安装插件2.1 安装 STM32 VS Code Extension 三、创建项目3.1 创建STM32CubeMX项目3.2 查阅原理图3.3 修改引脚功能3.4 生成CMake项目…

完成单位信息宣传工作考核投稿别输在投稿方法上

在信息化迅速发展的今天,弘扬社会正能量已经成为各个企事业单位的重要使命。作为单位的信息宣传员,我深知信息宣传工作的重要性和复杂性。每个月,我们都肩负着信息宣传考核的任务,需要在指定的媒体上投稿发表文章。然而,刚接触这一工作时,我却经历了一段艰辛而焦虑的历程。 我一…

ubuntu install Miniconda3(轻量级conda)

ubuntu install Miniconda3(轻量级conda) Miniconda3 是一个包含 conda 和 Python 的小型发行版,适合需要灵活定制python环境的用户。 一、下载Miniconda3 sudo apt-get update wget https://repo.anaconda.com/miniconda/Miniconda3-latest…

elasticsearch快照存储到linux本地路径或分布式存储系统mioio

一、使用linux本地目录做快照存储 1.编辑 elasticsearch.yml 文件,添加以下配置: path.repo: ["/path/to/your/backup/dir"]2.创建一个文件系统类型的快照仓库 PUT /_snapshot/my_local_repository {"type": "fs",&quo…

WIN 10 注册表损坏怎么办

系统修复功能 打开“设置”-“更新和安全”-“恢复”-“立即重新启动” 然后就会进入到恢复模式,在里面点“疑难解答”-“高级选项”-“启动修复” SFC工具 在电脑搜索框中输入“命令提示符”,右键点击“命令提示符”选择“以管理员身份运行”。随后在…

前端算法 === 计数排序

目录 计数排序算法的起源 算法的基本原理 算法的实现 代码示例 算法的优势与局限性 计数排序的应用场景 计数排序是一种简单而高效的排序算法,特别适合于处理一定范围内的整数排序问题。它的核心思想是利用额外的存储空间来记录数组中每个元素出现的次数&…

Ansible远程自动化运维

目录 概念 安装ansible modules模块和语法 命令行语法 模块 1. command 基础模块 常用的参数 2. shell模块 3. cron定时任务模块 4. user用户管理模块 参数 5. copy复制模块 参数 6. file模块 设置文件属性 参数 实验:批量创建目录 7…

staticHeader(静态标头)

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>staticHeader(静态标头)</title> </head…

C语言函数介绍(上)

函数概念库函数标准库和头文件库函数的使用方法头文件包含库函数文档的一般格式 自定义函数函数的语法形式函数例子 形参和实参实参形参实参和形参的关系 return 语句数组做函数参数 函数概念 数学中我们其实就见过函数的概念&#xff0c;比如&#xff1a;一次函数 ykxb &…