直接偏好優(yōu)化技術(shù)DPO基礎(chǔ)理論及推導(dǎo)

論文標(biāo)題:Direct Preference Optimization: Your Language Model is Secretly a Reward Model
論文鏈接:https://arxiv.org/abs/2305.18290
論文來源:NeurIPS 2023

一、概述

為了能夠?qū)⒄Z言模型的行為與人類偏好對齊,現(xiàn)有的方法使用精心設(shè)計的人類偏好數(shù)據(jù)集集,將期望的行為灌輸?shù)秸Z言模型中,這些偏好數(shù)據(jù)集代表了人類認為安全和有益的行為類型。目前的大模型偏好對齊主要依賴于基于人類反饋的強化學(xué)習(xí)技術(shù)(Reinforcement Learning from Human Feedback, RLHF),RLHF方法利用獎勵模型(Reward Model)擬合人類偏好數(shù)據(jù)集,然后使用強化學(xué)習(xí)技術(shù)優(yōu)化語言模型策略(policy),以使其能夠產(chǎn)生高獎勵的響應(yīng),且不會偏離原始模型太遠。雖然RLHF訓(xùn)練的模型具有令人印象深刻的對話和編碼能力,但RLHF pipeline比監(jiān)督學(xué)習(xí)要復(fù)雜得多,涉及在訓(xùn)練循環(huán)中訓(xùn)練多個語言模型并從語言模型策略中采樣,這會造成巨大的計算成本。

本文研究驗證了現(xiàn)有方法使用的基于強化學(xué)習(xí)的目標(biāo)可以用一個簡單的二元交叉熵目標(biāo)來直接優(yōu)化,無需獎勵模型與強化學(xué)習(xí),由此簡化了偏好學(xué)習(xí)的pipeline。本文提出直接偏好優(yōu)化(Direct Preference Optimization, DPO)技術(shù),能夠隱式地優(yōu)化與現(xiàn)有RLHF算法相同的目標(biāo)(即在一個KL散度約束下最大化獎勵),且很容易實現(xiàn)和能夠直接訓(xùn)練。DPO更新過程會增大偏好響應(yīng)相較于不偏好響應(yīng)的log概率,同時其包含一個動態(tài)的、每個樣本上的重要性權(quán)重,以避免模型退化(這種退化在使用樸素的概率比值目標(biāo)時會發(fā)生)。

與現(xiàn)有的方法類似,DPO依賴于一種理論偏好模型(比如Bradley-Terry模型),這一類模型度量一個給定的獎勵函數(shù)(Reward Function)對齊經(jīng)驗偏好數(shù)據(jù)的好壞程度。不同的是,DPO并沒有采用訓(xùn)練獎勵模型以及強化學(xué)習(xí)的方式,而是利用一種獎勵模型的重參數(shù)化技巧,使得能夠閉式地(in close form)獲取最優(yōu)的策略模型。給定模型響應(yīng)的人類偏好數(shù)據(jù)集,DPO可以使用簡單的二元交叉熵目標(biāo)來優(yōu)化策略,得到適合偏好數(shù)據(jù)的隱式獎勵函數(shù)的最優(yōu)策略。

二、前提

RLHF pipeline通常包含三個階段:1)監(jiān)督微調(diào)(Supervised Fine-Tuning, SFT);2)偏好采樣和獎勵學(xué)習(xí);3)強化學(xué)習(xí)優(yōu)化。

  1. SFT階段

RLHF通常從在一個預(yù)訓(xùn)練語言模型上利用下游任務(wù)(如對話、總結(jié)等)的高質(zhì)量演示數(shù)據(jù)監(jiān)督微調(diào)開始,來獲得一個模型\pi ^{\text{SFT}}。

  1. 獎勵建模階段

在第二階段,利用promptx來使得SFT模型產(chǎn)生成對的響應(yīng)(y_{1},y_{2})\sim \pi ^{\text{SFT}}(y|x)。這些響應(yīng)接著將由人類標(biāo)注更加偏好哪一個,標(biāo)注為y_w\succ y_l|x,這里的y_wy_l分別表示(y_{1},y_{2})偏好的和不偏好的補全?,F(xiàn)在假設(shè)這些偏好符合某個隱式獎勵模型r^*(x,y),也就是我們無法直接訪問的獎勵函數(shù)的真實分布。

通常有一些可用于建模偏好的模型,例如Bradley-Terry (BT)模型(如果我們有幾個排名的答案的話,可以采用更一般的Plackett-Luce排名模型)。BT模型的基本思想是,通過對各個對象進行配對比較,可以估計出每個對象的“實力”或“能力”,從而計算出在任意一對對象之間進行比較時,某個對象獲勝的概率。具體來說,假設(shè)有n個對象(例如運動員、產(chǎn)品等),我們用\theta_i表示對象i的實力參數(shù)。對于兩個對象ij,對象i在比較中獲勝的概率P(i\succ j)可以表示為:

P(i\succ j) = \frac{\theta_i}{\theta_i + \theta_j} \tag{1}

其中,\theta_i\theta_j都是正的實力參數(shù)。BT模型廣泛應(yīng)用于競技體育排名、音樂和藝術(shù)競賽、市場研究中的產(chǎn)品比較等領(lǐng)域。通過配對比較,Bradley-Terry模型能夠提供一個相對簡單但有效的框架來比較多個對象的相對實力或偏好。

在偏好對齊的場景下,BT模型可將真實的人類偏好分布p^*建模為:

p^*(y_1\succ y_2|x)=\frac{\text{exp}(r^*(x,y_1))}{\text{exp}(r^*(x,y_1))+\text{exp}(r^*(x,y_2))} \tag{2}

真實的獎勵函數(shù)r^*與真實的偏好分布p^*都是不可訪問的,不過我們可以通過人類標(biāo)注的方式獲得從p^*中采樣的人類偏好數(shù)據(jù)集\mathcal{D}=\left \{x^{(i)},y_{w}^{(i)},y_{l}^{(i)}\right \}_{i=1}^{N},然后利用這個數(shù)據(jù)集即可參數(shù)化一個獎勵模型r_\phi (x,y),并根據(jù)極大似然估計來估計其參數(shù)。將這個問題作為一個二分類問題的話,我們便有了RLHF中建模獎勵函數(shù)的負對數(shù)似然損失:

\mathcal{L}_{R}(r_\phi ,\mathcal{D})=-\mathbb{E}_{(x,y_w,y_l)\sim \mathcal{D}}\left [\text{log}\, \sigma (r_\phi (x,y_w)-r_\phi (x,y_l))\right ] \tag{3}

其中\sigma為Logistic函數(shù)。在語言模型的場景下,獎勵函數(shù)r_\phi (x,y)通常從SFT模型\pi ^{\text{SFT}}(y|x)初始化而來,在其最后一個transformer層的頂部添加一個線性層,使其輸出一個標(biāo)量預(yù)測值作為獎勵值。為了確保這個獎勵函數(shù)具有低方差,現(xiàn)有方法通常會標(biāo)準(zhǔn)化獎勵值,即\mathbb{E}_{(x,y)\sim \mathcal{D}}[r_\phi (x,y)]=0。

  1. 強化學(xué)習(xí)微調(diào)階段

在強化學(xué)習(xí)階段,我們使用前一階段學(xué)習(xí)到的獎勵函數(shù)來為語言模型提供反饋,通常強化學(xué)習(xí)階段相當(dāng)于以下優(yōu)化問題:

\max_{\pi _{\theta }}\mathbb{E}_{x\sim \mathcal{D},y\sim \pi _{\theta }(y|x)}\left [r_\phi (x,y)\right ]-\beta \mathbb{D}_{KL}\left [\pi _{\theta }(y|x)\parallel \pi _{\text{ref}}(y|x)\right ] \tag{4}

這里的\beta是一個超參數(shù),用于控制偏離基礎(chǔ)參考策略(reference policy)\pi _{\text{ref}}的程度,\pi _{\text{ref}}也就是初始的SFT模型\pi ^{\text{SFT}}(y|x),在優(yōu)化過程中其參數(shù)是固定的。\pi _{\theta }為實際優(yōu)化的策略模型,通常策略模型也由\pi ^{\text{SFT}}(y|x)初始化而來。上式的KL散度約束是很重要的,因為獎勵模型r_\phi (x,y)是在SFT模型\pi ^{\text{SFT}}(y|x)的輸出分布上訓(xùn)練得到的,因此只有在這個分布上獎勵模型的預(yù)測值才是準(zhǔn)確的,這個KL散度約束防止了策略模型的輸出分布偏離\pi ^{\text{SFT}}(y|x)的輸出分布,同時也保持了生成內(nèi)容的多樣性并且防止模式坍塌到單一的高獎勵答案。

由于語言生成的離散性,上面的目標(biāo)是不可微的,因此通常使用強化學(xué)習(xí)來優(yōu)化這個目標(biāo)。標(biāo)準(zhǔn)的方法將獎勵函數(shù)構(gòu)造成r(x,y)=r_\phi (x,y)-\beta (\text{log}\, \pi _{\theta }(y|x)-\text{log}\, \pi _{\text{ref}}(y|x)),然后使用PPO來最大化這個獎勵函數(shù)。RLHF的詳細流程可參考生成式大模型的RLHF技術(shù)(一):基礎(chǔ)。

三、方法

本文的目標(biāo)是推導(dǎo)出一種直接使用偏好的策略優(yōu)化方法,不像之前的RLHF方法需要學(xué)習(xí)一個獎勵模型然后利用強化學(xué)習(xí)來優(yōu)化策略模型,本文的方法利用一種特殊的獎勵模型參數(shù)化,使得能夠閉式地獲取最優(yōu)的策略模型,而不需要一個強化學(xué)習(xí)的訓(xùn)練過程。DPO利用從獎勵函數(shù)到最優(yōu)策略的解析映射推導(dǎo),使得我們能夠?qū)ⅹ剟詈瘮?shù)上的損失轉(zhuǎn)換為策略模型上的損失。這種變量改變方法避免了擬合一個顯式的、獨立的獎勵模型,同時仍然在現(xiàn)有的人類偏好模型下(即BT模型)進行優(yōu)化。本質(zhì)上,策略模型同時代表了語言模型和(隱式的)獎勵模型。

  1. DPO目標(biāo)的推導(dǎo)

對于前面的KL散度約束的獎勵最大化目標(biāo)公式(4),其在一般的獎勵函數(shù)r(x,y)下的最優(yōu)解\pi _{r}(y|x)為:

\pi _{r}(y|x)=\frac{1}{Z(x)}\pi _{\text{ref}}(y|x)\text{exp}\left (\frac{1}{\beta }r(x,y)\right ),\; \text{for all }x\in \mathcal{D} \tag{5}

這里的Z(x)=\sum _{y}\pi _{\text{ref}}(y|x)\text{exp}\left (\frac{1}{\beta }r(x,y)\right ),詳細推導(dǎo)請參看本文最后一個章節(jié)的第1小節(jié)。對于Z(x)而言,其中的r(x,y)我們可以通過ground-truth獎勵函數(shù)r^*的極大似然估計r_{\phi}來得到,但配分函數(shù)Z(x)的估計仍然是unfeasible的。這是因為xy作為語言模型的輸入輸出文本,其狀態(tài)空間非常地廣闊。因此這個最優(yōu)解的表示在實踐中是很難計算的。不過我們可以重新排列公式(5)來用最優(yōu)策略\pi _{r}、參考策略\pi _{\text{ref}}以及未知的配分函數(shù)Z(x)來重參數(shù)化獎勵函數(shù)r(x,y)

r(x,y)=\beta \, \text{log}\frac{\pi _{r}(y|x)}{\pi _{\text{ref}}(y|x)}+\beta \, \text{log}Z(x) \tag{6}

公式(6)中的重參數(shù)化設(shè)計可以應(yīng)用到ground-truth獎勵r^{*}和對應(yīng)的最優(yōu)策略模型\pi ^{*}上。幸運的是,BT模型只依賴于兩個補全的獎勵的差值p^*(y_1\succ y_2|x)=\sigma (r^*(x,y_1)-r^*(x,y_2)),詳細推導(dǎo)請參看本文最后一個章節(jié)的第2小節(jié)。用r^{*}(x,y)\pi ^{*}(y|x)替換公式(6)中的r(x,y)\pi _{r}(y|x),然后將r^{*}(x,y)代入BT模型,即可使用最優(yōu)策略模型\pi ^{*}和參考模型\pi _{ref}來表示人類偏好概率,也就是說BT模型下的最優(yōu)的RLHF策略模型\pi ^{*}滿足以下偏好模型:

p^*(y_1\succ y_2|x)=\frac{1}{1+exp\left (\beta \, \text{log}\frac{\pi ^{*}(y_{2}|x)}{\pi _{\text{ref}}(y_{2}|x)}-\beta \, \text{log}\frac{\pi ^{*}(y_{1}|x)}{\pi _{\text{ref}}(y_{1}|x)}\right )} \tag{7}

現(xiàn)在我們有了以最優(yōu)策略模型表示(而非以獎勵模型表示)的人類偏好概率,因此我們就可以使用一個面向一個參數(shù)化策略模型\pi _{\theta }的極大似然目標(biāo)。類似于公式(3)中的獎勵建模過程,我們的策略目標(biāo)函數(shù)變?yōu)榱耍?/p>

\mathcal{L}_{\text{DPO}}(\pi _{\theta };\pi _{\text{ref}})=-\mathbb{E}_{(x,y_{w},y_{l})\sim \mathcal{D}}\left [\text{log}\, \sigma \left (\beta \, \text{log}\frac{\pi _{\theta }(y_{w}|x)}{\pi _{\text{ref}}(y_{w}|x)}-\beta \, \text{log}\frac{\pi _{\theta }(y_{l}|x)}{\pi _{\text{ref}}(y_{l}|x)}\right )\right ] \tag{8}

于是,我們現(xiàn)在利用一個替代參數(shù)化來擬合隱式獎勵,其最佳策略為優(yōu)化后的\pi _{\theta }。此外,由于該過程等價于擬合一個重新參數(shù)化的BT模型,因此該過程具有一定的理論性質(zhì),比如在適當(dāng)?shù)钠脭?shù)據(jù)分布假設(shè)下的一致性。

  1. DPO更新做了什么?

為了更好地理解DPO,我們可以分析一下DPO損失函數(shù)\mathcal{L}_{\text{DPO}}的梯度,其在參數(shù)\theta上的梯度可以寫作:

\nabla _{\theta }\mathcal{L}_{\text{DPO}}(\pi _{\theta };\pi _{\text{ref}})=-\beta \mathbb{E}_{(x,y_{w},y_{l})\sim \mathcal{D}}\left [\underbrace{\sigma (\hat{r}_{\theta }(x,y_{l})-\hat{r}_{\theta }(x,y_{w}))}_{\text{higher weight when reward estimate is wrong}}\left [\underbrace{\nabla _{\theta }\, \text{log}\, \pi _{\theta }(y_{w}|x)}_{\text{increase likelihood of }y_{w}}-\underbrace{\nabla _{\theta }\, \text{log}\, \pi _{\theta }(y_{l}|x)}_{\text{decrease likelihood of }y_{l}}\right ] \right ] \tag{9}

這里的\hat{r}_{\theta }(x,y)=\beta \, \text{log}\frac{\pi _{\theta }(y|x)}{\pi _{\text{ref}}(y|x)}是由語言模型\pi _{\theta }和參考模型\pi _{\text{ref}}隱式定義的獎勵。直觀來看,損失函數(shù)\mathcal{L}_{\text{DPO}}的梯度增加了偏好補全y_{w}的似然,并降低了不偏好補全y_{l}的似然。需要注意的是,這些樣本的權(quán)重取決于隱式獎勵模型\hat{r}_{\theta }對不偏好的補全進行評分的高低程度,縮放因子為\beta,即隱式獎勵模型對這些補全排序的錯誤程度,同時考慮到KL散度約束的強度。本文的實驗表明了這種加權(quán)的重要性,因為這種方法的樸素版本如果沒有加權(quán)系數(shù),可能會導(dǎo)致語言模型退化。

  1. DPO pipeline

DPO的整體pipeline為:
①對每個promptx采樣補全y_{1},y_{2}\sim \pi _{\text{ref}}(\cdot |x),并由人類標(biāo)注以獲得離線偏好數(shù)據(jù)集\mathcal{D}=\left \{x^{(i)},y_{w}^{(i)},y_{l}^{(i)}\right \}_{i=1}^{N};
②對于給定的\pi _{\text{ref}}、\mathcal{D}\beta,優(yōu)化\pi _{\theta }來最小化\mathcal{L}_{\text{DPO}}。

在DPO方法中,由于偏好數(shù)據(jù)集是從\pi ^{\text{SFT}}采樣而來,因此我們設(shè)置\pi _{\text{ref}}=\pi ^{\text{SFT}}。在實踐中,人們可能會希望直接使用公開可用的偏好數(shù)據(jù)集,而不是自己生成樣本并收集人類的偏好。在這種情況下\pi ^{\text{SFT}}是不可訪問的,因此我們通過最大化偏好補全(x,y_{w})的似然來初始化\pi _{\text{ref}},即\pi _{\text{ref}}=\text{arg}\,\max_{\pi }\mathbb{E}_{x,y_{w}\sim \mathcal{D}}[\text{log}\, \pi (y_{w}|x)]。這一設(shè)置有助于緩解DPO在不可用的真實參考分布和\pi _{\text{ref}}之間的分布偏移。

推導(dǎo)

本節(jié)補充一些前文省略的公式推導(dǎo)過程。

  1. 推導(dǎo)KL散度約束的獎勵最大化目標(biāo)的最優(yōu)解

首先對于前面的公式(4),其在任意獎勵函數(shù)r(x,y)和一般的非參數(shù)化策略類\pi (y|x)下的一般形式為:

\max_{\pi }\mathbb{E}_{x\sim \mathcal{D},y\sim \pi (y|x)}\left [r(x,y)\right ]-\beta \mathbb{D}_{KL}\left [\pi (y|x)\parallel \pi _{\text{ref}}(y|x)\right ] \tag{10}

在該式基礎(chǔ)上,有以下推導(dǎo)過程:

\begin{align} &\max_{\pi }\mathbb{E}_{x\sim \mathcal{D},y\sim \pi (y|x)}\left [r(x,y)\right ]-\beta \mathbb{D}_{KL}\left [\pi (y|x)\parallel \pi _{\text{ref}}(y|x)\right ]\\ &=\max_{\pi }\mathbb{E}_{x\sim \mathcal{D}}\mathbb{E}_{y\sim \pi (y|x)}\left [r(x,y)\right ]-\mathbb{E}_{x\sim \mathcal{D}}\mathbb{E}_{y\sim \pi (y|x)}\left [\beta \, \text{log}\frac{\pi (y|x)}{\pi _{\text{ref}}(y|x)}\right ]\\ &=\max_{\pi }\mathbb{E}_{x\sim \mathcal{D}}\mathbb{E}_{y\sim \pi (y|x)}\left [r(x,y)-\beta \, \text{log}\frac{\pi (y|x)}{\pi _{\text{ref}}(y|x)}\right ]\\ &=\min_{\pi }\mathbb{E}_{x\sim \mathcal{D}}\mathbb{E}_{y\sim \pi (y|x)}\left [\beta \, \text{log}\frac{\pi (y|x)}{\pi _{\text{ref}}(y|x)}-r(x,y)\right ]\\ &=\min_{\pi }\mathbb{E}_{x\sim \mathcal{D}}\mathbb{E}_{y\sim \pi (y|x)}\left [\text{log}\frac{\pi (y|x)}{\pi _{\text{ref}}(y|x)}-\frac{1}{\beta }r(x,y)\right ]\\ &=\min_{\pi }\mathbb{E}_{x\sim \mathcal{D}}\mathbb{E}_{y\sim \pi (y|x)}\left [\text{log}\frac{\pi (y|x)}{\pi _{\text{ref}}(y|x)\text{exp}\left (\frac{1}{\beta }r(x,y)\right )}\right ]\\ &=\min_{\pi }\mathbb{E}_{x\sim \mathcal{D}}\mathbb{E}_{y\sim \pi (y|x)}\left [\text{log}\frac{\pi (y|x)}{\frac{1}{Z(x)}\pi _{\text{ref}}(y|x)\text{exp}\left (\frac{1}{\beta }r(x,y)\right )}-\text{log}\, Z(x)\right ] \end{align}

這里的Z(x)為配分函數(shù):

Z(x)=\sum _{y}\pi _{\text{ref}}(y|x)\text{exp}\left (\frac{1}{\beta }r(x,y)\right ) \tag{11}

注意這里的Z(x)只與x和參考策略\pi _{\text{ref}}有關(guān),不依賴于策略\pi。現(xiàn)在我們可以定義:

\pi ^{*}(y|x)=\frac{1}{Z(x)}\pi _{\text{ref}}(y|x)\text{exp}\left (\frac{1}{\beta }r(x,y)\right ) \tag{12}

這里的\pi ^{*}(y|x)滿足\pi ^{*}(y|x)\ge 0\sum _{y}\pi ^{*}(y|x)=1,因此實際上我們是定義了一個有效的概率分布\pi ^{*}(y|x)。由于Z(x)不是y的函數(shù),我們可以重新組織一下公式(11),繼續(xù)以下推導(dǎo)過程:

\begin{align} &\min_{\pi }\mathbb{E}_{x\sim \mathcal{D}}\mathbb{E}_{y\sim \pi (y|x)}\left [\text{log}\frac{\pi (y|x)}{\frac{1}{Z(x)}\pi _{\text{ref}}(y|x)\text{exp}\left (\frac{1}{\beta }r(x,y)\right )}-\text{log}\, Z(x)\right ]\\ &=\min_{\pi }\mathbb{E}_{x\sim \mathcal{D}}\mathbb{E}_{y\sim \pi (y|x)}\left [\text{log}\frac{\pi (y|x)}{\pi ^{*}(y|x)}-\text{log}\, Z(x)\right ]\\ &=\min_{\pi }\mathbb{E}_{x\sim \mathcal{D}}\left [\mathbb{E}_{y\sim \pi (y|x)}\left [\text{log}\frac{\pi (y|x)}{\pi ^{*}(y|x)}\right ]-\text{log}\, Z(x)\right ]\\ &=\min_{\pi }\mathbb{E}_{x\sim \mathcal{D}}\left [\mathbb{D}_{KL}(\pi (y|x)\parallel \pi ^{*}(y|x))-\text{log}\, Z(x)\right ] \end{align}

現(xiàn)在,由于Z(x)并不依賴于\pi,因此上述目標(biāo)的最小值將會在第一個KL散度項最小時達成。由吉布斯不等式可知,當(dāng)且僅當(dāng)兩個概率分布完全相同時KL散度達到最小值0。因此我們所求的\pi (y|x)的最優(yōu)解即為\pi ^{*}(y|x)

\pi (y|x)=\pi ^{*}(y|x)=\frac{1}{Z(x)}\pi _{\text{ref}}(y|x)\text{ep}\left (\frac{1}{\beta }r(x,y)\right ),\; \text{for all }x\in \mathcal{D} \tag{13}

  1. BT模型下DPO目標(biāo)推導(dǎo)

對于公式(2)中展示的BT模型對人類偏好的建模,可以做以下轉(zhuǎn)換:

\begin{align} &p^*(y_1\succ y_2|x)=\frac{\text{exp}(r^*(x,y_1))}{\text{exp}(r^*(x,y_1))+\text{exp}(r^*(x,y_2))}\\ &=\frac{1}{1+\text{exp}(r^*(x,y_2)-r^*(x,y_1))}\\ &=\sigma (r^*(x,y_1)-r^*(x,y_2)) \tag{14} \end{align}

這里的\sigma為sigmoid函數(shù)。根據(jù)公式(6)可知我們可以將不可訪問的ground truth獎勵函數(shù)r^{*}用最優(yōu)的策略\pi ^{*}來表示:

r^{*}(x,y)=\beta \, \text{log}\frac{\pi ^{*}(y|x)}{\pi _{\text{ref}}(y|x)}+\beta \, \text{log}Z(x) \tag{15}

將公式(15)代入公式(14)即可得:

p^*(y_1\succ y_2|x)=\sigma \left (\beta \, \text{log}\frac{\pi ^{*}(y_{1}|x)}{\pi _{\text{ref}}(y_{1}|x)}-\beta \, \text{log}\frac{\pi ^{*}(y_{2}|x)}{\pi _{\text{ref}}(y_{2}|x)}\right ) \tag{16}

這個概率即是公式(8)中所采用的單實例損失。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容