DPO介紹+公式推理

1. 什么是DPO?

DPO(Direct Preference Optimization)是一種用于對齊大語言模型(LLMs)的新型方法,旨在高效地將人類偏好融入模型訓練中。它提供了一種替代強化學習(如 RLHF, Reinforcement Learning with Human Feedback)的方式,能夠直接優化偏好數據,而無需顯式地引入獎勵模型(Reward Model)或策略梯度方法。

所以DPO到底是什么?

我們先看看訓練DPO需要的數據集形式:

{"prompt": "What are the benefits of meditation?","chosen": "Meditation helps reduce stress, improve focus, and enhance emotional well-being.","rejected": "Meditation is sitting quietly for a while, but it may not help everyone."
}

給一個提示詞,給兩個選擇,chosen是人選的,rejected是人不選的,現在希望LLM也能像人一樣選對,這就是對齊人類偏好。

之前的解決方案是RLHF,但是RLHF需要用到PPO算法,而PPO算法需要訓練策略網絡和價值網絡,訓練成本過高,而PPO是一種成本低很多,而且很簡單的方式。

2. 具體算法

2.1 KL散度

先上公式:
K L ( P ∣ ∣ Q ) = ∑ x ∈ X P ( x ) log ? ( P ( x ) Q ( x ) ) KL(P||Q)=\sum_{x\in X}P(x)\log\left(\frac{P(x)}{Q(x)}\right) KL(P∣∣Q)=xX?P(x)log(Q(x)P(x)?)
這個在LLM訓練中很常見,在PPO算法中也介紹過,主要約束模型在參數更新過程中不能變化太大,保證模型基本的能力。

2.2 Bradley-Terry模型

先說這個模型的作用就是根據成對比較的勝負結果估計選項的相對偏好或勝率。也就是通過兩兩比較來估計該模型中每一個相對元素的實力。

舉個例子:

已知,

對戰
A 對 B84
A 對 C35

顯然可以看出A比B強點,A比C弱一點,所以強度排名:C > A > B,但是我再問一句,A打敗B的概率又是多少呢?

是這樣的呢:

對戰
A 對 B47
A 對 C712

能不能評估出B和C誰更強一點?如果再加入D,E,F,G這些別的選手呢,對局的場數非常非常多了,有沒有什么辦法能給這些角色排個名呢?那如果我能用一個數字來量化每個角色強度的話,排名是不是就很容易了?Bradley-Terry就是用來做這個的。

首先我們用 α \alpha α來表示一個角色的實力, α i \alpha_i αi?來表示第 i i i個角色的實力,如果A比B強,那么 P ( A > B ) = α A α A + α B P(A > B)=\frac{\alpha_A}{\alpha_A+\alpha_B} P(A>B)=αA?+αB?αA??是不是就應該越大越好,最起碼得大于0.5,那這個 P ( A > B ) P(A > B) P(A>B)?就表示A打敗B的概率,回憶一下學過的最大似然估計,這個時候是不是就能派上用場了。

這里直接快進到求完對數的步驟:
ln ? L = 8 ln ? ( α A α A + α B ) + 4 ln ? ( α B α A + α B ) + 3 ln ? ( α A α A + α C ) + 5 ln ? ( α C α A + α C ) \ln L = 8\ln\left(\frac{\alpha_A}{\alpha_A+\alpha_B}\right)+4\ln\left(\frac{\alpha_B}{\alpha_A+\alpha_B}\right)+3\ln\left(\frac{\alpha_A}{\alpha_A+\alpha_C}\right)+5\ln\left(\frac{\alpha_C}{\alpha_A+\alpha_C}\right) lnL=8ln(αA?+αB?αA??)+4ln(αA?+αB?αB??)+3ln(αA?+αC?αA??)+5ln(αA?+αC?αC??)
其中 L L L是我們要估計的似然值,在這里,既然只需要量化實力,那就需要一個參照值,我們將A的實力設置為1,也就是 α A \alpha_A αA?為1,那我們分別對 α B \alpha_B αB? α C \alpha_C αC?求偏導等于0可以算出 α B = 0.5 \alpha_B=0.5 αB?=0.5 α C = 5 3 \alpha_C=\frac{5}{3} αC?=35?,這樣就能算出B戰勝C的概率, P ( B > C ) = α B α B + α C ≈ 0.23 P(B > C)=\frac{\alpha_B}{\alpha_B+\alpha_C}\approx0.23 P(B>C)=αB?+αC?αB??0.23

這個 α \alpha α值對應到PPO算法里面就是獎勵值 r r r,下標也不用 i i i了換一種表示形式 α i \alpha_i αi?變成了 r ( x , y l ) r(x, y_l) r(x,yl?) r ( x , y w ) r(x, y_w) r(x,yw?),其中 x x x表示prompt, y l y_l yl?表示人類不是很偏向的回答, y w y_w yw?表示人類偏好的回答,因此 P ( A > B ) = α A α A + α B P(A > B)=\frac{\alpha_A}{\alpha_A+\alpha_B} P(A>B)=αA?+αB?αA??就變成了
P ( y w > y l ) = r ( x , y w ) r ( x , y w ) + r ( x , y l ) P(y_w > y_l)=\frac{r(x,y_w)}{r(x,y_w)+r(x,y_l)} P(yw?>yl?)=r(x,yw?)+r(x,yl?)r(x,yw?)?
我們不喜歡負數,不妨都加一個指數,式子就變成了
P ( y w > y l ) = exp ? ( r ( x , y w ) ) exp ? ( r ( x , y w ) ) + exp ? ( r ( x , y l ) ) P(y_w > y_l)=\frac{\exp(r(x,y_w))}{\exp(r(x,y_w))+\exp(r(x,y_l))} P(yw?>yl?)=exp(r(x,yw?))+exp(r(x,yl?))exp(r(x,yw?))?
做最大似然估計,目標就變成了
E ( x , y w , y l ) ~ D [ ln ? exp ? ( r ( x , y w ) ) exp ? ( r ( x , y w ) ) + exp ? ( r ( x , y l ) ) ] \mathbb{E}_{(x,y_w,y_l)\sim D}\left[\ln\frac{\exp(r(x,y_w))}{\exp(r(x,y_w))+\exp(r(x,y_l))}\right] E(x,yw?,yl?)D?[lnexp(r(x,yw?))+exp(r(x,yl?))exp(r(x,yw?))?]
要讓它最大化,但是我們的 l o s s loss loss值一般是最小化,所以加個負號就行。

由于sigmod函數表達式為:
σ ( x ) = 1 1 + exp ? ( ? x ) \sigma(x)=\frac{1}{1 + \exp(-x)} σ(x)=1+exp(?x)1?
因此,可以做如下變化:
Loss = ? E ( x , y w , y l ) ~ D [ ln ? exp ? ( r ( x , y w ) ) exp ? ( r ( x , y w ) ) + exp ? ( r ( x , y l ) ) ] = ? E ( x , y w , y l ) ~ D [ ln ? 1 1 + exp ? ( r ( x , y l ) ? r ( x , y w ) ) ] = ? E ( x , y w , y l ) ~ D [ ln ? σ ( r ( x , y w ) ? r ( x , y l ) ) ] = ? ln ? σ ( r ( x , y w ) ? r ( x , y l ) ) \begin{align*} \text{Loss}&=-\mathbb{E}_{(x,y_w,y_l)\sim D}\left[\ln\frac{\exp(r(x,y_w))}{\exp(r(x,y_w))+\exp(r(x,y_l))}\right]\\ &=-\mathbb{E}_{(x,y_w,y_l)\sim D}\left[\ln\frac{1}{1 + \exp(r(x,y_l)-r(x,y_w))}\right]\\ &=-\mathbb{E}_{(x,y_w,y_l)\sim D}\left[\ln\sigma(r(x,y_w)-r(x,y_l))\right]\\ &=-\ln\sigma(r(x,y_w)-r(x,y_l)) \end{align*} Loss?=?E(x,yw?,yl?)D?[lnexp(r(x,yw?))+exp(r(x,yl?))exp(r(x,yw?))?]=?E(x,yw?,yl?)D?[ln1+exp(r(x,yl?)?r(x,yw?))1?]=?E(x,yw?,yl?)D?[lnσ(r(x,yw?)?r(x,yl?))]=?lnσ(r(x,yw?)?r(x,yl?))?
到此,Bradley-Terry模型就介紹完了。其中的 r r r我們可以類比成PPO里的獎勵值。

2.3. DPO

我們先看DPO的訓練目標是什么,肯定就是在盡可能拿多獎勵的同時又不至于變化太大,也就是最大化以下目標:
E x ~ D , y ~ π [ r ( x , y ) ] ? β D K L [ π ( y ∣ x ) ∣ ∣ π r e f ( y ∣ x ) ] \mathbb{E}_{x\sim D,y\sim\pi}[r(x,y)] - \beta\mathbb{D}_{KL}[\pi(y|x)||\pi_{ref}(y|x)] ExD,yπ?[r(x,y)]?βDKL?[π(yx)∣∣πref?(yx)]
再做一些數學變換:
max ? π E x ~ D , y ~ π [ r ( x , y ) ] ? β D K L [ π ( y ∣ x ) ∣ ∣ π r e f ( y ∣ x ) ] = max ? π E x ~ D , y ~ π [ r ( x , y ) ] ? E x ~ D , y ~ π [ β log ? π ( y ∣ x ) π r e f ( y ∣ x ) ] = max ? π E x ~ D , y ~ π [ r ( x , y ) ? β log ? π ( y ∣ x ) π r e f ( y ∣ x ) ] = min ? π E x ~ D , y ~ π [ log ? π ( y ∣ x ) π r e f ( y ∣ x ) ? 1 β r ( x , y ) ] \begin{align*} &\max_{\pi} \mathbb{E}_{x\sim D,y\sim\pi}[r(x,y)] - \beta\mathbb{D}_{KL}[\pi(y|x)||\pi_{ref}(y|x)]\\ =&\max_{\pi} \mathbb{E}_{x\sim D,y\sim\pi}[r(x,y)] - \mathbb{E}_{x\sim D,y\sim\pi}\left[\beta\log\frac{\pi(y|x)}{\pi_{ref}(y|x)}\right] \tag{1}\\ =&\max_{\pi} \mathbb{E}_{x\sim D,y\sim\pi}\left[r(x,y) - \beta\log\frac{\pi(y|x)}{\pi_{ref}(y|x)}\right] \tag{2}\\ =&\min_{\pi} \mathbb{E}_{x\sim D,y\sim\pi}\left[\log\frac{\pi(y|x)}{\pi_{ref}(y|x)}-\frac{1}{\beta}r(x,y)\right] \tag{3} \end{align*} ===?πmax?ExD,yπ?[r(x,y)]?βDKL?[π(yx)∣∣πref?(yx)]πmax?ExD,yπ?[r(x,y)]?ExD,yπ?[βlogπref?(yx)π(yx)?]πmax?ExD,yπ?[r(x,y)?βlogπref?(yx)π(yx)?]πmin?ExD,yπ?[logπref?(yx)π(yx)??β1?r(x,y)]?(1)(2)(3)?
步驟(1)是對KL散度的展開,步驟(3)是加了個負號然后除了一個 β \beta β,除以一個常數不影響參數更新,雖然寫的等號但是其實不相等,不過這樣做對結果沒有影響。

后續步驟:
= min ? π E x ~ D , y ~ π [ log ? π ( y ∣ x ) π r e f ( y ∣ x ) ? log ? exp ? ( 1 β r ( x , y ) ) ] = min ? π E x ~ D , y ~ π [ log ? π ( y ∣ x ) π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) ] = min ? π E x ~ D , y ~ π [ log ? π ( y ∣ x ) π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) 1 Z ( x ) Z ( x ) ] = min ? π E x ~ D , y ~ π [ log ? π ( y ∣ x ) 1 Z ( x ) π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) ? log ? Z ( x ) ] \begin{align*} &=\min_{\pi} \mathbb{E}_{x\sim D,y\sim\pi}\left[\log\frac{\pi(y|x)}{\pi_{ref}(y|x)}-\log\exp\left(\frac{1}{\beta}r(x,y)\right)\right] \tag{4}\\ &=\min_{\pi} \mathbb{E}_{x\sim D,y\sim\pi}\left[\log\frac{\pi(y|x)}{\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)}\right] \tag{5}\\ &=\min_{\pi} \mathbb{E}_{x\sim D,y\sim\pi}\left[\log\frac{\pi(y|x)}{\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)\frac{1}{Z(x)}Z(x)}\right] \tag{6}\\ &=\min_{\pi} \mathbb{E}_{x\sim D,y\sim\pi}\left[\log\frac{\pi(y|x)}{\frac{1}{Z(x)}\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)}-\log Z(x)\right] \tag{7} \end{align*} ?=πmin?ExD,yπ?[logπref?(yx)π(yx)??logexp(β1?r(x,y))]=πmin?ExD,yπ? ?logπref?(yx)exp(β1?r(x,y))π(yx)? ?=πmin?ExD,yπ? ?logπref?(yx)exp(β1?r(x,y))Z(x)1?Z(x)π(yx)? ?=πmin?ExD,yπ? ?logZ(x)1?πref?(yx)exp(β1?r(x,y))π(yx)??logZ(x) ??(4)(5)(6)(7)?

步驟(4)對 r ( x , y ) r(x, y) r(x,y)同時取指數和對數,步驟(5)利用對數函數的性質,步驟(6)引入了一個 Z ( x ) Z(x) Z(x),由于是恒等變換,只要這個 Z ( x ) Z(x) Z(x)不等于0,取什么都是可以的,因此作者取 Z ( x ) = ∑ y π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) Z(x)=\sum_y \pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right) Z(x)=y?πref?(yx)exp(β1?r(x,y)),為什么這么取,因為這么取完之后 π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) ∑ y π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) \frac{\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)}{\sum_y\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)} y?πref?(yx)exp(β1?r(x,y))πref?(yx)exp(β1?r(x,y))?是一個概率, ∑ y π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) ∑ y π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) = 1 \sum_y{\frac{\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)}{\sum_y\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)}} = 1 y?y?πref?(yx)exp(β1?r(x,y))πref?(yx)exp(β1?r(x,y))?=1

現在我們處理步驟(7)第一個log下面那一坨復雜的東西,不妨給它一個代號 π ? \pi^* π?,即:
1 Z ( x ) π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) = π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) ∑ y π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) = π ? ( y ∣ x ) \frac{1}{Z(x)}\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)=\frac{\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)}{\sum_y\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)}=\pi^*(y|x) Z(x)1?πref?(yx)exp(β1?r(x,y))=y?πref?(yx)exp(β1?r(x,y))πref?(yx)exp(β1?r(x,y))?=π?(yx)
先往下推理:
= min ? π E x ~ D , y ~ π [ log ? π ( y ∣ x ) π ? ( y ∣ x ) ? log ? Z ( x ) ] = min ? π E x ~ D , y ~ π [ log ? π ( y ∣ x ) π ? ( y ∣ x ) ] = min ? π E x ~ D [ D K L ( π ( y ∣ x ) ∣ ∣ π ? ( y ∣ x ) ) ] ? π ( y ∣ x ) = π ? ( y ∣ x ) = 1 Z ( x ) π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) \begin{align} &=\min_{\pi} \mathbb{E}_{x\sim D,y\sim\pi}\left[\log\frac{\pi(y|x)}{\pi^*(y|x)}-\log Z(x)\right] \tag{8}\\ &=\min_{\pi} \mathbb{E}_{x\sim D,y\sim\pi}\left[\log\frac{\pi(y|x)}{\pi^*(y|x)}\right] \tag{9}\\ &=\min_{\pi} \mathbb{E}_{x\sim D}\left[\mathbb{D}_{KL}(\pi(y|x)||\pi^*(y|x))\right]\Rightarrow \pi(y|x)=\pi^*(y|x)=\frac{1}{Z(x)}\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right) \tag{10} \end{align} ?=πmin?ExD,yπ?[logπ?(yx)π(yx)??logZ(x)]=πmin?ExD,yπ?[logπ?(yx)π(yx)?]=πmin?ExD?[DKL?(π(yx)∣∣π?(yx))]?π(yx)=π?(yx)=Z(x)1?πref?(yx)exp(β1?r(x,y))?(8)(9)(10)?
對于步驟9,我們要更新的是策略 π \pi π的參數,而 π r e f \pi_{ref} πref?是參照模型,是不需要更新參數的,也就是說在優化目標式中它是一個常數,可以直接丟掉,對于步驟(10),我們發現步驟(9)就是符合KL散度定義的,其實不這么引入也行,要最小化步驟(9)的式子,我們使 π ( y ∣ x ) = π ? ( y ∣ x ) \pi(y|x)=\pi^*(y|x) π(yx)=π?(yx)即可。因此得到了步驟(10)的最后一個式子也就是
π ( y ∣ x ) = π ? ( y ∣ x ) = 1 Z ( x ) π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) \pi(y|x)=\pi^*(y|x)=\frac{1}{Z(x)}\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right) π(yx)=π?(yx)=Z(x)1?πref?(yx)exp(β1?r(x,y))
也就是
π ( y ∣ x ) = 1 Z ( x ) π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) \pi(y|x)=\frac{1}{Z(x)}\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right) π(yx)=Z(x)1?πref?(yx)exp(β1?r(x,y))
推理一下:
π ( y ∣ x ) = 1 Z ( x ) π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) ? exp ? ( 1 β r ( x , y ) ) = π ( y ∣ x ) π r e f ( y ∣ x ) Z ( x ) ? r ( x , y ) = β ln ? ( π ( y ∣ x ) π r e f ( y ∣ x ) Z ( x ) ) ? r ( x , y ) = β ln ? π ( y ∣ x ) π r e f ( y ∣ x ) + β ln ? Z ( x ) \begin{align*} \pi(y|x)&=\frac{1}{Z(x)}\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)\tag{1}\\ \Rightarrow\exp\left(\frac{1}{\beta}r(x,y)\right)&=\frac{\pi(y|x)}{\pi_{ref}(y|x)}Z(x)\tag{2}\\ \Rightarrow r(x,y)&=\beta\ln\left(\frac{\pi(y|x)}{\pi_{ref}(y|x)}Z(x)\right)\tag{3}\\ \Rightarrow r(x,y)&=\beta\ln\frac{\pi(y|x)}{\pi_{ref}(y|x)}+\beta\ln Z(x)\tag{4} \end{align*} π(yx)?exp(β1?r(x,y))?r(x,y)?r(x,y)?=Z(x)1?πref?(yx)exp(β1?r(x,y))=πref?(yx)π(yx)?Z(x)=βln(πref?(yx)π(yx)?Z(x))=βlnπref?(yx)π(yx)?+βlnZ(x)?(1)(2)(3)(4)?
那我們現在知道 r ( x , y ) r(x,y) r(x,y)了,我們之前提到過 P ( y w > y l ) = r ( x , y w ) r ( x , y w ) + r ( x , y l ) P(y_w > y_l)=\frac{r(x,y_w)}{r(x,y_w)+r(x,y_l)} P(yw?>yl?)=r(x,yw?)+r(x,yl?)r(x,yw?)??,那給了我們很多偏好數據,也就是兩兩比較的數據,我們是不是也能對他們做一個最大似然估計呢?之前我們提到的Bradley-Terry模型的損失函數:
L o s s = = ? ln ? σ ( r ( x , y w ) ? r ( x , y l ) ) Loss = =-\ln\sigma(r(x,y_w)-r(x,y_l)) Loss==?lnσ(r(x,yw?)?r(x,yl?))
這里將 r ( x , y ) r(x, y) r(x,y)帶入
? ln ? σ ( r ( x , y w ) ? r ( x , y l ) ) = ? ln ? σ ( β ln ? π ( y w ∣ x ) π r e f ( y w ∣ x ) + β ln ? Z ( x ) ? β ln ? π ( y l ∣ x ) π r e f ( y l ∣ x ) ? β ln ? Z ( x ) ) = ? ln ? σ ( β ln ? π ( y w ∣ x ) π r e f ( y w ∣ x ) ? β ln ? π ( y l ∣ x ) π r e f ( y l ∣ x ) ) \begin{align*} &-\ln\sigma(r(x,y_w)-r(x,y_l))\\ =&-\ln\sigma\left(\beta\ln\frac{\pi(y_w|x)}{\pi_{ref}(y_w|x)}+\beta\ln Z(x)-\beta\ln\frac{\pi(y_l|x)}{\pi_{ref}(y_l|x)}-\beta\ln Z(x)\right)\\ =&-\ln\sigma\left(\beta\ln\frac{\pi(y_w|x)}{\pi_{ref}(y_w|x)}-\beta\ln\frac{\pi(y_l|x)}{\pi_{ref}(y_l|x)}\right) \end{align*} ==??lnσ(r(x,yw?)?r(x,yl?))?lnσ(βlnπref?(yw?x)π(yw?x)?+βlnZ(x)?βlnπref?(yl?x)π(yl?x)??βlnZ(x))?lnσ(βlnπref?(yw?x)π(yw?x)??βlnπref?(yl?x)π(yl?x)?)?

就得到了DPO的最終優化目標。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/75920.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/75920.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/75920.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言基礎—構造類型

數據類型 1.基本類型/基礎類型 整型 短整型:short[int] --2字節 基本整型:int --4字節 長整型:long[int] --32位4字節/64位8字節 長長整型:long long [int] (C99) 注意:以上類型又都分為sig…

2025年高壓電工考試真題分享

以下是一些高壓電工考試題: 單選題 1、高壓架空線路的檔距一般為( )。 A. 20 - 30m B. 30 - 50m C. 50 - 80m D. 80 - 100m 答案:B。解析:高壓架空線路檔距一般在 30 - 50m,這樣的檔距能較好地保證線…

什么是SQL作業

SQL作業是在數據庫服務器上按特定時間或間隔自動執行的計劃任務或流程,這些作業由Microsoft SQL Server中的SQL Server代理管理,對于自動執行日常任務(如數據庫系統中的備份、數據導入和報告生成)以及確保及時準確地處理和更新數據…

【數據分享】基于聯合國城市化程度框架的全球城市邊界數據集(免費獲取/Shp格式)

在全球城市化進程不斷加快的今天,如何精準定義和測量“城市”成為關鍵問題。不同國家和機構采用不同的標準,導致全球城市化水平的統計結果存在較大差異。同時,由于數據來源分散、標準不統一,獲取一套完整、可比的全球城市邊界數據…

劉火良FreeRTOS內核實現與應用學習之6——多優先級

在FreeRTOS中,數字優先級越小,邏輯優先級也越小;在任務創建時,會根據任務的優先級將任務插入就緒列表不同的位置。 List_t pxReadyTasksLists[ configMAX_PRIORITIES ] 就緒列表是一個數組,數組中存儲的是就緒任務TCB(…

生成信息提取的大型語言模型綜述

摘要 信息提取(IE)旨在從簡單的自然語言文本中提取結構知識。最近,生成型大型語言模型(LLMs)在文本理解和生成方面表現出了顯著的能力。因此,已經提出了許多基于生成范式將LLM集成到IE任務中的工作。為了對…

簡單談談很火的MCP( Model Context Protocol,模型上下文協議)

MCP( Model Context Protocol,模型上下文協議)是由Anthropic推出的開放協議,并非獨立的大模型,而是連接大模型與外部工具/數據源的標準化接口?,旨在解決AI工具開發中接口不統一、跨模型共享困難等問題。? 一、工作原理 MCP 協…

解決linux centos ubuntu等無法啟動谷歌chrome瀏覽器問題

命令啟動chrome時候提示: Running as root without --no-sandbox is not supported. See https://crbug.com/638180. 解決無法啟動谷歌chrome瀏覽器: cd /usr/bin 發現目錄下有 google-chrome google-chrome-stable 執行: vim go…

深入解析緩沖區:計算機世界的“蓄水池”與“加速器”

引言 想象這樣一個場景: 你的手機正在播放4K視頻,同時下載大型文件 視頻畫面流暢無卡頓,下載速度穩定在滿帶寬 但手機的內存只有8GB,下載文件的大小卻超過20GB 這看似矛盾的現象背后,緩沖區(Buffer&am…

網絡故障診斷

一 網絡故障診斷的方法 1 試錯法:通過推測提出解決方案,最后得出故障原因的方法。 2 參照法:是一種比較快速解決網絡故障的方法,只有當故障設備與正常工作設備具有相近的條件時,才可以使用參照法。 3 替換法&#xff1…

界面控件Telerik和Kendo UI 2025 Q1亮點——AI集成與數據可視化

Telerik DevCraft包含一個完整的產品棧來構建您下一個Web、移動和桌面應用程序。它使用HTML和每個.NET平臺的UI庫,加快開發速度。Telerik DevCraft提供完整的工具箱,用于構建現代和面向未來的業務應用程序,目前提供UI for ASP.NET MVC、Kendo…

ollama遷移已下載的單個模型到服務器

ollama遷移已下載的單個模型到服務器 場景 ollama是面向用戶級的,部署和運行都很簡單,是否高效就另說了。但最起碼,他能充分利用用戶的硬件設備,在GPU不足也能調用cpu和內存去加持。 ollama運行的模型基本是量化版本的&#xf…

怎么對asp.web api進行單元測試?

在 ASP.NET Web API 中進行單元測試是一種確保代碼質量和功能正確性的重要實踐。單元測試的重點是針對 API 控制器中的邏輯進行測試,而不依賴于外部依賴(如數據庫、文件系統或網絡請求)。以下是實現 ASP.NET Web API 單元測試的步驟和方法&am…

UDP視頻傳輸中的丟包和播放花屏處理方法

在處理UDP視頻傳輸中的丟包和花屏問題時,需要結合編碼優化、網絡傳輸策略和接收端糾錯技術。以下是分步驟的解決方案: 1. 前向糾錯(FEC,Forward Error Correction) 原理:在發送數據時附加冗余包,接收方通過冗余信息恢復丟失的數據包。 實現方法: 使用Reed-Solomon、XO…

WebGL圖形編程實戰【3】:矩陣操控 × 從二維到三維的跨越

上一篇文章:WebGL圖形編程實戰【2】:動態著色 紋理貼圖技術揭秘 倉庫地址:github…、gitee… 矩陣操控 矩陣變換 回到前面關于平移縮放、旋轉的例子當中,我們是通過改變傳遞進去的xy的值來改變的。 在進行基礎變換的時候&…

并發編程--共享內存SHM

共享內存SHM 文章目錄 共享內存SHM1. 基本概念2. 函數接口2.1 創建或打開SHM對象2.2 映射 / 解除映射SHM對象2.3 其余操作2.4示例代碼 1. 基本概念 共享內存,顧名思義,就是通過不同進程共享一段相同的內存來達到通信的目的,由于SHM對象不再交…

Redis中的數據類型與適用場景

目錄 前言1. 字符串 (String)1.1 特點1.2 適用場景 2. 哈希 (Hash)2.1 特點2.2 適用場景 3. 列表 (List)3.1 特點3.2 適用場景 4. 集合 (Set)4.1 特點4.2 適用場景 5. 有序集合 (Sorted Set)5.1 特點5.2 適用場景 6. Redis 數據類型的選型建議結語 前言 Redis 作為一款高性能的…

科技賦能建筑業變革:中建海龍創新引領高質量發展新路徑

在建筑工業化浪潮中,中建海龍科技有限公司(以下簡稱“中建海龍”)憑借深厚的技術積累與持續創新,成為推動行業轉型升級的標桿企業。作為中國建筑國際集團旗下核心科技力量,中建海龍深耕模塊化集成建筑(MiC&…

Vue下 Sortable 實現 table 列表字段可拖拽排序,顯示隱藏組件開發

vue 開發table 列表時&#xff0c;需要動態調整列字段的順序和顯示隱藏 實現效果如圖所示&#xff1a; vue 組件代碼 <template><div style"width: 90%; margin: 0 auto;"><el-table :data"tableData" border"" ref"table…

故障扭曲棱鏡反射照片效果ps特效濾鏡樣機 Distorted Mirror Poster Effect

只需單擊幾下即可執行令人著迷的高質量圖像和攝影&#xff01;此照片效果包含智能對象圖層&#xff0c;提供完全自定義、易用性和多功能性的工作流程。只需雙擊其縮略圖打開所需的圖層&#xff0c;刪除占位符鏡頭&#xff0c;添加圖形&#xff0c;保存它&#xff0c;然后觀看 P…