AI-mallit ja alustat
Direkti Preferenssi-Optimointi: Täydellinen Opas
Suurten kielen mallien (LLM) kohdistaminen ihmisten arvoihin ja preferensseihin on haastavaa. Perinteiset menetelmät, kuten vahvistusoppiminen ihmisten palautteesta (RLHF), ovat avaaneet tien integroimalla ihmisten syötteet jalostamaan mallin tulosteita. RLHF voi kuitenkin olla monimutkainen ja resursseja vaativa, vaatiessaan merkittävää laskentatehoa ja tietojen käsittelyä. Direkti Preferenssi-Optimointi (DPO) on uusi ja suoraviivaisempi lähestymistapa, joka tarjoaa tehokkaan vaihtoehdon perinteisille menetelmille. Yksinkertaisemalla optimointiprosessilla DPO vähentää laskennallista taakkaa ja parantaa mallin kykyä sopeutua nopeasti ihmisten preferensseihin
Tässä opasemme perehdytään DPO:n perusteisiin, toteutukseen ja käytännön sovelluksiin.
Preferenssien Kohdistamisen Tarve
DPO:n ymmärtämiseksi on tärkeää ymmärtää, miksi LLMien kohdistaminen ihmisten preferensseihin on niin tärkeää. Vaikka LLM:t ovat vaikuttavia, ne voivat tuottaa tulosteita, jotka ovat epäjohdonmukaisia, sisältävät harhaa tai ovat ristiriidassa ihmisten arvojen kanssa. Tämä ristiriita voi ilmetä monin tavoin:
- Tuottaa vaarallista tai haitallista sisältöä
- Tarjoaa epätarkkaa tai harhaanjohtavaa tietoa
- Näyttää harhaa, jotka ovat läsnä koulutusdatassa
Tätä varten tutkijat ovat kehittäneet tekniikoita LLMien hienosäätöön käyttäen ihmisten palautetta. Näistä lähestymistavoista merkittävin on RLHF.
Ymmärtäminen RLHF: DPO:n Edeltäjä
Vahvistusoppiminen ihmisten palautteesta (RLHF) on ollut menetelmä LLMien kohdistamiseen ihmisten preferensseihin. Tarkastellaan RLHF-prosessia ymmärtääksemme sen monimutkaisuutta:
a) Valvottu Hienosäätö (SFT): Prosessi alkaa hienosäätämällä esikoulutettua LLM:iä laadukkaan vastauksien datassa. Tämä vaihe auttaa mallia tuottamaan relevantimpiä ja yhtenäisempiä tulosteita kohde-tehtävälle.
b) Palkkio-mallinnus: Erillinen palkkio-malli koulutetaan ennustamaan ihmisten preferenssejä. Tämä sisältää:
- Vastausparien generointi annetuille kehotuksille
- Ihmisten arviointi, kumpi vastaus he pitävät parempana
- Mallin koulutus näiden preferenssien ennustamiseen
c) Vahvistusoppiminen: Hienosäätöön käytetty LLM optimoidaan edelleen vahvistusoppimisen avulla. Palkkio-malli tarjoaa palautetta, johdaten LLM:iä tuottamaan vastauksia, jotka ovat lähellä ihmisten preferenssejä.
Tässä on yksinkertainen Python-pseudokoodi RLHF-prosessin havainnollistamiseksi:
Vaikka RLHF on tehokas, sillä on useita heikkouksia:
- Se vaatii useiden mallien koulutuksen ja ylläpitämisen (SFT, palkkio-malli ja RL-optimoidun mallin)
- RL-prosessi voi olla epävakaa ja herkkä hyperparametreille
- Se on laskennallisesti vaativa, vaatiessaan useita eteen- ja taaksepäin kulkua malleissa
Nämä rajoitukset ovat innoittaneet yksinkertaisempien ja tehokkaampien vaihtoehtojen etsintää, johtaen DPO:n kehittymiseen.
Direkti Preferenssi-Optimointi: Ydin Käsitteet
Tämä kuva esittää kaksi erilaista lähestymistapaa LLMien tulosteiden kohdistamiseen ihmisten preferensseihin: Vahvistusoppiminen ihmisten palautteesta (RLHF) ja Direkti Preferenssi-Optimointi (DPO). RLHF perustuu palkkio-malliin, joka ohjaa kielen mallin politiikkaa iteratiivisilla palauteprosesseilla, kun taas DPO optimoi suoraan mallin tulosteita vastaamaan ihmisten preferenssejä preferenssien avulla. Tämä vertailu korostaa kunkin menetelmän vahvuuksia ja mahdollisia sovelluksia, tarjoten näkymän siihen, miten tulevaisuuden LLM:t voivat koulutuksella paremmin vastata ihmisten odotuksiin.
DPO:n Avain Käsitteet:
a) Implisiittinen Palkkio-Mallinnus: DPO poistaa tarpeen erilliselle palkkio-mallille kohdellaen kielen mallia itsessään implisiittisenä palkkio-funktiona.
b) Politiikka-Pohjainen Formulointi: Sen sijaan, että optimoidaan palkkio-funktiota, DPO optimoi suoraan politiikkaa (kielen mallia) maksimoimaan suosittujen vastausten todennäköisyyttä.
c) Suljettu Muoto-Ratkaisu: DPO hyödyntää matemaattista oivallusta, joka mahdollistaa suljetun muodon ratkaisun optimaaliseen politiikkaan, välttäen tarpeen iteratiivisille RL-päivityksille.
DPO:n Toteutus: Käytännön Koodi-Esimerkki
Alla oleva kuva esittää koodi-palikan, joka toteuttaa DPO:n tappio-funktion PyTorchilla. Tämä funktio on avainasemassa kielen mallien tulosteiden jalostamisessa ihmisten preferenssien mukaan. Tässä on lyhyt katsaus tärkeistä osista:
- Funktion Signatuuri:
dpo_loss-funktiota käytetään useiden parametreiden kanssa, mukaan lukien politiikan logaritmiset todennäköisyydet (pi_logps), viite-mallin logaritmiset todennäköisyydet (ref_logps) ja indeksit, jotka edustavat suosittuja ja epäsuosittuja täydennyksiä (yw_idxs,yl_idxs). Lisäksibeta-parametri säätää KL-rangaistuksen voimakkuutta. - Logaritminen Todennäköisyys: Koodi poimii logaritmiset todennäköisyydet suosituille ja epäsuosituille täydennyksille sekä politiikasta että viite-mallista.
- Logaritminen Suhde: Lasketaan logaritminen suhde suosittujen ja epäsuosittujen täydennyksien välillä sekä politiikassa että viite-mallissa. Tämä suhde on ratkaiseva optimoinnin suunnan ja suuruuden määrittämisessä.
- Tappio- ja Palkkio-Laskelma: Tappio lasketaan
logsigmoid-funktiolla, kun taas palkkio määritetään skaalaamalla eroa politiikan ja viite-mallin logaritmisissa todennäköisyyksissäbeta:lla.
Syvennymme DPO:n matemaattiseen taustaan ymmärtääksemme, miten se saavuttaa nämä tavoitteet.
DPO:n Matematiikka
DPO on älykäs uudelleenmuotoilu preferenssioppimisen ongelmaa. Tässä on askelkohtainen purku:
a) Lähtökohta: KL-Rajoitettu Palkkio-Maksimointi
Alkuperäinen RLHF-objektiivi voidaan ilmaista seuraavasti:
- πθ on politiikka (kielen malli), jota optimoidaan
- r(x,y) on palkkio-funktiota
- πref on viite-politiikka (yleensä alkuperäinen SFT-malli)
- β säätää KL-ero-rajoituksen voimakkuutta
b) Optimaalinen Politiikka-Muoto: Voidaan osoittaa, että tämän objektiivin optimaalinen politiikka on muotoa:
π_r(y|x) = 1/Z(x) * πref(y|x) * exp(1/β * r(x,y))Missä Z(x) on normalisointivakio.
c) Palkkio-Politiikka-Dualiteetti: DPO:n avain-oivallus on ilmaista palkkio-funktiota optimaalisen politiikan avulla:
r(x,y) = β * log(π_r(y|x) / πref(y|x)) + β * log(Z(x))d) Preferenssi-Malli Oletetaan, että preferenssit noudattavat Bradley-Terry-mallia, voidaan ilmaista suosituksen todennäköisyys y1:n suhteen y2:een seuraavasti:
p*(y1 ≻ y2 | x) = σ(r*(x,y1) - r*(x,y2))Missä σ on logistinen funktio.
e) DPO-Objektiivi Korvaamalla palkkio-politiikka-dualiteetti preferenssi-malliin, saavutamme DPO-objektiivin:
L_DPO(πθ; πref) = -E_(x,y_w,y_l)~D [log σ(β * log(πθ(y_w|x) / πref(y_w|x)) - β * log(πθ(y_l|x) / πref(y_l|x)))]Tätä objektiivia voidaan optimoida standardien gradient-laskeutumis-menettelyjen avulla ilman RL-algoritmeja.
DPO:n Toteutus
Nyt, kun ymmärrämme DPO:n teorian, tarkastelemme, miten sitä voidaan toteuttaa käytännössä. Käytämme Pythonia ja PyTorchia tässä esimerkissä:
import torch
import torch.nn.functional as F
<p>class DPOTrainer:
def __init__(self, model, ref_model, beta=0.1, lr=1e-5):
self.model = model
self.ref_model = ref_model
self.beta = beta
self.optimizer = torch.optim.AdamW(self.model.parameters(), lr=lr)</p>
<p>def compute_loss(self, pi_logps, ref_logps, yw_idxs, yl_idxs):
"""
pi_logps: politiikan logaritmiset todennäköisyydet, muoto (B,)
ref_logps: viite-mallin logaritmiset todennäköisyydet, muoto (B,)
yw_idxs: suosittujen täydennyksien indeksit [0, B-1], muoto (T,)
yl_idxs: epäsuosittujen täydennyksien indeksit [0, B-1], muoto (T,)
beta: lämpötila, joka säätää KL-rangaistuksen voimakkuutta</p>
<p>Each pair of (yw_idxs[i], yl_idxs[i]) represents the indices of a single preference pair.
"""</p>
<p># Extract log probabilities for the preferred and dispreferred completions
pi_yw_logps, pi_yl_logps = pi_logps[yw_idxs], pi_logps[yl_idxs]
ref_yw_logps, ref_yl_logps = ref_logps[yw_idxs], ref_logps[yl_idxs]</p>
<p># Calculate log-ratios
pi_logratios = pi_yw_logps - pi_yl_logps
ref_logratios = ref_yw_logps - ref_yl_logps</p>
<p># Compute DPO loss
losses = -F.logsigmoid(self.beta * (pi_logratios - ref_logratios))
rewards = self.beta * (pi_logps - ref_logps).detach()</p>
return losses.mean(), rewards
<p>def train_step(self, batch):
x, yw_idxs, yl_idxs = batch
self.optimizer.zero_grad()</p>
<p># Compute log probabilities for the model and the reference model
pi_logps = self.model(x).log_softmax(-1)
ref_logps = self.ref_model(x).log_softmax(-1)</p>
<p># Compute the loss
loss, _ = self.compute_loss(pi_logps, ref_logps, yw_idxs, yl_idxs)
loss.backward()
self.optimizer.step()</p>
return loss.item()
<p># Usage
model = YourLanguageModel() # Initialize your model
ref_model = YourLanguageModel() # Load pre-trained reference model
trainer = DPOTrainer(model, ref_model)</p>
<p>for batch in dataloader:
loss = trainer.train_step(batch)
print(f"Loss: {loss}")
Haasteet ja Tulevaisuuden Suunta
Vaikka DPO tarjoaa merkittäviä etuja perinteisiin RLHF-lähestymistapoihin verrattuna, on edelleen haasteita ja alueita, joissa voidaan tehdä lisätutkimuksia:
a) Mittakaava Suurempiin Malleihin:
Kun kielen mallit jatkavat kasvamistaan, DPO:n soveltaminen tehokkaasti malleihin, joissa on satoja miljardeja parametreja, on avoin haaste. Tutkijat tutkivat tekniikoita, kuten:
- Tehokkaita hienosäätömenetelmiä (esim. LoRA, prefix-tuning)
- Jakautuneen koulutuksen optimointeja
- Gradientin checkpointing ja sekä täsmällinen koulutus
Esimerkki LoRA:n käytöstä DPO:ssa:
<p>from peft import LoraConfig, get_peft_model</p> <p>class DPOTrainerWithLoRA(DPOTrainer): def __init__(self, model, ref_model, beta=0.1, lr=1e-5, lora_rank=8): lora_config = LoraConfig( r=lora_rank, lora_alpha=32, target_modules=["q_proj", "v_proj"], lora_dropout=0.05, bias="none", task_type="CAUSAL_LM" ) self.model = get_peft_model(model, lora_config) self.ref_model = ref_model self.beta = beta self.optimizer = torch.optim.AdamW(self.model.parameters(), lr=lr)</p> <p># Usage base_model = YourLargeLanguageModel() dpo_trainer = DPOTrainerWithLoRA(base_model, ref_model)
b) Monitehtäväinen ja Vähä-Äly-Adaptiivisuus:
DPO-tekniikoiden kehittäminen, joilla voidaan tehokkaasti sopeutua uusiin tehtäviin tai domeeneihin rajatulla preferenssiaineistolla, on aktiivinen tutkimusalue. Lähestymistapoja, joita tutkitaan, ovat:
- Meta-oppimisen kehykset nopeaan sopeutumiseen
- Prompt-pohjainen hienosäätö DPO:lle
- Siirtäminen yleisistä preferenssi-malleista erityisiin domeeneihin
c) Epäselvien tai Ristiriitaisten Preferenssien Käsittely:
Reaalielämän preferenssiaineistot sisältävät usein epäselvyyksiä tai ristiriitoja. DPO:n kestävyyden parantaminen tällaisia aineistoja vastaan on tärkeää. Mahdollisia ratkaisuja ovat:
- Todennäköisyys-pohjainen preferenssi-mallinnus
- Aktiivinen oppiminen epäselvyyksien ratkaisemiseen
- Moni-agenttinen preferenssi-aggregointi
Esimerkki todennäköisyys-pohjaisesta preferenssi-mallinnuksesta:
<p>class ProbabilisticDPOTrainer(DPOTrainer): def compute_loss(self, pi_logps, ref_logps, yw_idxs, yl_idxs, preference_prob): # Compute log ratios pi_yw_logps, pi_yl_logps = pi_logps[yw_idxs], pi_logps[yl_idxs] ref_yw_logps, ref_yl_logps = ref_logps[yw_idxs], ref_logps[yl_idxs]</p> <p>log_ratio_diff = pi_yw_logps.sum(-1) - pi_yl_logps.sum(-1) loss = -(preference_prob * F.logsigmoid(self.beta * log_ratio_diff) + (1 - preference_prob) * F.logsigmoid(-self.beta * log_ratio_diff)) return loss.mean()</p> <p># Usage trainer = ProbabilisticDPOTrainer(model, ref_model) loss = trainer.compute_loss(pi_logps, ref_logps, yw_idxs, yl_idxs, preference_prob=0.8) # 80% confidence in preference
d) DPO:n Yhdistäminen Muihin Kohdistusmenetelmiin:
DPO:n yhdistäminen muihin kohdistuslähestymistapoihin voi johtaa entistä kestävämmäksi ja kykyisemmäksi järjestelmiksi:
- Perustuslainen AI-periaatteet eksplisiittisten rajoitusten toteuttamiseksi
- Debatti ja rekursiivinen palkkio-mallinnus monimutkaisen preferenssin ilmenemiseen
- Käänteinen vahvistusoppiminen sisäänrakennettujen palkkio-funktioiden tunnistamiseen
Esimerkki DPO:n yhdistämisestä perustuslaiseen AI:hen:
<p>class ConstitutionalDPOTrainer(DPOTrainer): def __init__(self, model, ref_model, beta=0.1, lr=1e-5, constraints=None): super().__init__(model, ref_model, beta, lr) self.constraints = constraints or []</p> <p>def compute_loss(self, pi_logps, ref_logps, yw_idxs, yl_idxs): base_loss = super().compute_loss(pi_logps, ref_logps, yw_idxs, yl_idxs)</p> <p>constraint_loss = 0 for constraint in self.constraints: constraint_loss += constraint(self.model, pi_logps, ref_logps, yw_idxs, yl_idxs)</p> return base_loss + constraint_loss <p># Usage def safety_constraint(model, pi_logps, ref_logps, yw_idxs, yl_idxs): # Implement safety checking logic unsafe_score = compute_unsafe_score(model, pi_logps, ref_logps) return torch.relu(unsafe_score - 0.5) # Penalize if unsafe score &gt; 0.5</p> <p>constraints = [safety_constraint] trainer = ConstitutionalDPOTrainer(model, ref_model, constraints=constraints)</p>
Käytännön Huomioita ja Parhaita Käytäntöjä
Kun toteutetaan DPO:a käytännön sovelluksissa, on tärkeää huomioida seuraavat ohjeet:
a) Laadukas Aineisto: Aineiston laatu on ratkaiseva. Varmista, että aineistosi:
- Kattaa laajan valikoiman syötteitä ja toivottuja käyttäytymisiä
- On johdonmukaista ja luotettavaa preferenssien suhteen
- Sisältää tasapainoisen sekoituksen erilaisia preferenssejä (esim. faktualisuus, turvallisuus, tyyli)
b) Hyperparametrien Säätö: Vaikka DPO:lla on vähemmän hyperparametreja kuin RLHF:llä, säätö on edelleen tärkeää:
- β (beta): Säätää tasapainon preferenssien täyttymisen ja viite-mallista poikkeamisen välillä. Käytä arvoja välillä 0.1-0.5.
- Opastusnopeus: Käytä alempaa opastusnopeutta kuin standardi-hienosäätössä, yleensä välillä 1e-6 ja 1e-5.
- Puskurin koko: Suuremmat puskurikoot (32-128) toimivat usein hyvin preferenssioppimisessa.
c) Iteratiivinen Jalostus: DPO voidaan soveltaa iteratiivisesti:
- Kouluta alku-malli DPO:lla
- Generoi uusia vastauksia koulutetulla mallilla
- Kerää uutta preferenssi-aineistoa näistä vastauksista
- Kouluta uudelleen laajennetulla aineistolla
Tämä kuva osoittaa LLMien, kuten GPT-4, suorituskyvyn verrattuna ihmisten arviointeihin eri koulutusmenetelmien, mukaan lukien Direkti Preferenssi-Optimointi (DPO), valvottu hienosäätö (SFT) ja Proximal Policy Optimization (PPO), avulla. Taulukko paljastaa, että GPT-4:n tulosteet ovat yhä enemmän lähellä ihmisten preferenssejä, erityisesti yhteenvedon tehtävissä. GPT-4:n ja ihmisten arvioijien välinen sopimus osoittaa mallin kyvyn tuottaa sisältöä, joka vastaa ihmisten arvioijien sisältöä lähes yhtä hyvin kuin ihmisten tuottama sisältö.
Käytännön Esimerkit ja Sovellukset
Osoittaaksemme DPO:n tehokkuutta, tarkastelemme joitakin todellisia sovelluksia ja sen variantteja:
- Iteratiivinen DPO: Snorkel (2023) kehitti tämän variantin, joka yhdistää DPO:n hylkäys-näytteiden kanssa, mahdollistaen jalostetun valintaprosessin koulutusaineistolle. Toistamalla useita kierroksia preferenssi-näytteistystä, malli pystyy yleistämään ja välttämään ylikoulutuksen meluisiin tai harhaanjohtaviin preferensseihin.
- IPO (Iteratiivinen Preferenssi-Optimointi): Azar et al. (2023) esitteli tämän laajennuksen, joka lisää säännöllistymistermin rajoittamaan ylikoulutuksen, joka on yleinen ongelma preferenssi-pohjaisessa optimoinnissa. Tämä laajennus mahdollistaa mallien säilyttämisen tasapainon preferenssien noudattamisen ja yleistymiskyvyn välillä.
- KTO (Tietämyksen Siirto-Optimointi): Ethayarajh et al. (2023) esitteli tämän uusimman variantin, joka poistaa binääriset preferenssit kokonaan. Sen sijaan se keskittyy tietämyksen siirtämiseen viite-mallista politiikka-malliin, optimoimalla sileämpää ja johdonmukaisempaa kohdistumista ihmisten arvoihin.
- Monimodaalinen DPO Monialaisen Oppimiseen Xu et al. (2024): Tässä lähestymistavassa DPO sovelletaan useille modaalille – teksti, kuva, ääni – osoittaen sen monipuolisuutta kohdistamalla malleja ihmisten preferensseihin eri datatyyppien yli. Tämä tutkimus korostaa DPO:n potentiaalia luomaan kattavampia AI-järjestelmiä, jotka voivat käsitellä monimutkaisia, monimodaaalisia tehtäviä.
















