AI-mallit ja alustat

Direkti Preferenssi-Optimointi: Täydellinen Opas

mm
Lisää Unite.AI suosikkilähteisiisi Google-palvelussa

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

Direkti Preferenssi-Optimointi https://arxiv.org/abs/2305.18290

Direkti Preferenssi-Optimointi https://arxiv.org/abs/2305.18290

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äksi beta-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.
DPO-tappiofunktion toteutus PyTorchilla

DPO-tappiofunktion toteutus PyTorchilla

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:

Kompleksinen matemaattinen kaava seuraavassa kuvassa edustaa DPO:ssa käytettävää tappiofunktiota, joka jalostaa LLMien tulosteita vastaamaan ihmisten preferenssejä.

Missä:
  • πθ 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):
&quot;&quot;&quot;
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.
&quot;&quot;&quot;</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&quot;Loss: {loss}&quot;)

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=[&quot;q_proj&quot;, &quot;v_proj&quot;],
lora_dropout=0.05,
bias=&quot;none&quot;,
task_type=&quot;CAUSAL_LM&quot;
)
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 &amp;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:

  1. Kouluta alku-malli DPO:lla
  2. Generoi uusia vastauksia koulutetulla mallilla
  3. Kerää uutta preferenssi-aineistoa näistä vastauksista
  4. Kouluta uudelleen laajennetulla aineistolla

 

Direkti Preferenssi-Optimointi

Direkti Preferenssi-Optimointi

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ä.

Johtopäätös

Direkti Preferenssi-Optimointi edustaa merkittävää edistystaskua kielen mallien kohdistamisessa ihmisten preferensseihin. Sen yksinkertaisuus, tehokkuus ja vaikuttavuus tekevät siitä voimakkaan työkalun tutkijoille ja käytännön sovelluksille.

Käyttämällä Direkti Preferenssi-Optimointia ja pitämällä nämä periaatteet mielessä, voit luoda kielen malleja, jotka eivät ainoastaan näytä vaikuttavia kykyjä, vaan myös ovat lähellä ihmisten arvoja ja aikomuksia.

Olen viettänyt viimeiset viisi vuotta uppoutumalla kiinnostavaan koneoppimisen ja syvän oppimisen maailmaan. Minun intohimoni ja asiantuntemukseni ovat johtaneet minun osallistumiseen yli 50:een monipuoliseen ohjelmistosuunnitteluhankkeeseen, joissa on erityisesti painottunut AI/ML. Minun jatkuva uteliaisuuteni on myös ohjannut minun luontaisen kielen prosessoinnin pariin, jota haluan tutkia tarkemmin.