uutiset

Tässä on intuitiivinen selitys, kuinka harvat autoenkooderit toimivat

2024-08-05

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina



Koneen sydänraportti

Toimittaja: Panda

Lyhyesti: matriisi → ReLU aktivointi → matriisi

Harvat autoenkooderit (SAE) ovat yhä yleisempi työkalu koneoppimismallien tulkinnassa (vaikka SAE:t ovat olleet käytössä vuodesta 1997).

Koneoppimismalleista ja LLM:istä on tulossa yhä tehokkaampia ja hyödyllisempiä, mutta ne ovat edelleen mustia laatikoita, emmekä ymmärrä, kuinka ne suorittavat tehtävänsä. Niiden toiminnan ymmärtämisen pitäisi olla pitkä.

SAE auttaa meitä jakamaan mallin laskelmat ymmärrettäviin komponentteihin. Äskettäin LLM-tulkintatutkija Adam Karvonen julkaisi blogikirjoituksen selittääkseen intuitiivisesti SAE:n toimintaa.

Tulkinta-ongelma

Hermoverkkojen luonnollisimmat komponentit ovat yksittäisiä hermosoluja. Valitettavasti yksittäinen neuroni ei kätevästi vastaa yhtä käsitettä, kuten akateemista lainausta, englanninkielistä keskustelua, HTTP-pyyntöä ja korealaista tekstiä. Neuraaliverkoissa käsitteet esitetään neuronien yhdistelmien kautta, jota kutsutaan superpositioksi.

Syynä tähän on se, että monet muuttujat maailmassa ovat luonnostaan ​​harvassa.

Esimerkiksi julkkiksen syntymäpaikka voi esiintyä harvemmassa kuin yhdessä miljardista koulutustunnuksesta, mutta nykyaikaiset LLM:t voivat silti oppia tämän tosiasian ja paljon muuta tietoa maailmasta. Harjoitteludatassa on enemmän yksittäisiä faktoja ja käsitteitä kuin mallissa on hermosoluja, minkä vuoksi superpositio todennäköisesti tapahtuu.

Viime aikoina SAE-tekniikkaa on käytetty yhä enemmän hermoverkkojen hajottamiseksi ymmärrettäviksi komponenteiksi. SAE:n suunnittelu on saanut inspiraationsa neurotieteen harvasta koodaushypoteesista. Nykyään SAE:stä on tullut yksi lupaavimpia keinotekoisten hermoverkkojen tulkinnan työkaluja. SAE on samanlainen kuin tavallinen automaattinen kooderi.

Perinteinen autoenkooderi on hermoverkko, jota käytetään syöttötietojen pakkaamiseen ja rekonstruoimiseen.

Esimerkiksi, jos syöte on 100-ulotteinen vektori (100 arvoa sisältävä luettelo, autoenkooderi ohjaa ensin syötteen enkooderikerroksen läpi pakatakseen sen 50-ulotteiseksi vektoriksi ja pakkaa sitten tämän. Koodattu esitys syötetään osoitteeseen); dekooderi 100-ulotteisen lähtövektorin saamiseksi. Rekonstruktioprosessi ei yleensä ole täydellinen, koska pakkausprosessi tekee rekonstruktiosta erittäin vaikeaa.



Kaavio tavallisesta autoenkooderista, jossa on 1x4-tulovektori, 1x2-välitilavektori ja 1x4-lähtövektori. Solun väri edustaa aktivointiarvoa. Tulos on syötteen epätäydellinen rekonstruktio.

Selitetään harvat autoenkooderit

Kuinka harvat autoenkooderit toimivat

Harva autoenkooderi muuntaa tulovektorin välivektoriksi, jonka mitat voivat olla suuremmat, yhtä suuret tai pienemmät kuin tulolla. Kun niitä käytetään LLM:ssä, välivektorit ovat yleensä suurempia kuin tulo. Tässä tapauksessa, ilman lisärajoituksia, tehtävä on yksinkertainen ja SAE voi käyttää identiteettimatriisia rekonstruoidakseen syötteen täydellisesti ilman yllätyksiä. Mutta lisäämme rajoituksia, joista yksi on lisätä harhaisuussakkoa harjoitushäviöön, mikä saa SAE:n luomaan harvaa välivektoreita.

Voimme esimerkiksi laajentaa 100-ulotteisen syötteen 200-ulotteiseksi koodatuksi esitysvektoriksi, ja voimme kouluttaa SAE:n sisältämään vain noin 20 nollasta poikkeavaa elementtiä koodatussa esityksessä.



Kaaviokaavio harvasta autoenkooderista. Huomaa, että väliaktivoinnit ovat harvassa, vain 2 nollasta poikkeavaa arvoa.

Käytämme SAE:tä väliaktivointiin hermoverkoissa, jotka voivat sisältää useita kerroksia. Eteenpäin siirron aikana jokaisen kerroksen sisällä ja jokaisen kerroksen välillä tapahtuu väliaktivaatioita.

Esimerkiksi GPT-3:ssa on 96 kerrosta. Eteenpäin siirron aikana jokaisella syötteen merkillä on 12 288-ulotteinen vektori (12 288 arvon luettelo). Tämä vektori kerää kaiken tiedon, jota malli käyttää ennustamaan seuraavaa merkkiä kullakin käsittelykerroksella, mutta se on läpinäkymätön, mikä vaikeuttaa sen sisältämän tiedon ymmärtämistä.

Voimme käyttää SAE:tä ymmärtääksemme tämän väliaktivoinnin. SAE on periaatteessa "matriisi → ReLU aktivointi → matriisi".

Jos esimerkiksi GPT-3 SAE:n laajennuskerroin on 4 ja sen tuloaktivoinneilla on 12 288 ulottuvuutta, sen SAE-koodatussa esityksessä on 49 512 ulottuvuutta (12 288 x 4). Ensimmäinen matriisi on muodon kooderimatriisi (12,288, 49,512) ja toinen matriisi on muodon dekooderimatriisi (49,512, 12,288). Kertomalla GPT-aktivoinnit enkooderilla ja käyttämällä ReLU:ta voidaan saada 49 512-ulotteinen SAE-koodattu harvaesitys, koska SAE-häviöfunktio edistää harvalukuisuutta.

Yleisesti tavoitteemme on, että SAE-esityksessä on alle 100 nollasta poikkeavaa arvoa. Kertomalla SAE-esitys dekooderilla saadaan 12 288-ulotteinen rekonstruoitu mallin aktivointi. Tämä rekonstruktio ei täysin vastaa alkuperäisiä GPT-aktivointeja, koska harvat rajoitukset tekisivät täydellisen vastaavuuden saavuttamisen vaikeaksi.

Yleisesti ottaen SAE:tä käytetään vain yhteen kohtaan mallissa. Voimme esimerkiksi kouluttaa SAE:n väliaktivointiin kerrosten 26 ja 27 välillä. GPT-3:n kaikkien 96 kerroksen ulostulojen sisältämien tietojen analysoimiseksi voidaan kouluttaa 96 erillistä SAE:tä – yksi kunkin kerroksen ulostulolle. Jos haluaisimme myös analysoida erilaisia ​​väliaktivaatioita kunkin kerroksen sisällä, tarvittaisiin satoja SAE:itä. Näiden SAE:iden harjoitustietojen saamiseksi tähän GPT-malliin on syötettävä suuri määrä erilaista tekstiä ja sitten kerätään väliaktivoinnit jokaisesta valitusta sijainnista.

Alla on SAE:n PyTorch-viitetoteutus. Muuttujat on merkitty muodoilla Tämä idea on peräisin Noam Shazeerilta, katso: https://medium.com/@NoamShazeer/shape-suffixes-good-coding-style-f836e72e24fd. Huomaa, että suorituskyvyn maksimoimiseksi eri SAE-toteutuksissa on usein erilaiset bias-termit, normalisointimenetelmät tai alustusmenetelmät. Yksi yleisimmistä lisäyksistä on jonkinlainen dekooderivektorinormin rajoitus. Katso lisätietoja seuraavista toteutuksista:

  • OpenAI: https://github.com/openai/sparse_autoencoder/blob/main/sparse_autoencoder/model.py#L16
  • SAELens: https://github.com/jbloomAus/SAELens/blob/main/sae_lens/sae.py#L97
  • dictionary_learning: https://github.com/saprmarks/dictionary_learning/blob/main/dictionary.py#L30

tuonti taskulamppu

tuonti taskulamppu.nn nimellä nn

# D = d_malli, F = sanakirjan_koko

# esim. jos d_malli = 12288 ja sanakirjan_koko = 49152

# sitten model_activations_D.shape = (12288,) ja encoder_DF.weight.shape = (12288, 49152)

luokka SparseAutoEncoder (nn.Module):

Yksikerroksinen automaattinen kooderi.

def __init__(self, activation_dim: int, dict_size: int):

super ().__init__()

self.activation_dim = activation_dim

self.dict_size = sanelu_koko

self.encoder_DF = nn.Lineaarinen (activation_dim, dict_size, bias=True)

self.decoder_FD = nn.Lineaarinen (dict_size, activation_dim, bias=True)

def encode (self, model_activations_D: torch.Tensor) -> torch.Tensor:

return nn.ReLU ()(self.encoder_DF (model_activations_D))

def-dekoodaus (itse, koodattu_esitys_F: taskulamppu.Tensori) -> taskulamppu.Tensori:

palauttaa self.decoder_FD (encoded_presentation_F)

def forward_pass (self, model_activations_D: torch.Tensor) -> tuple [torch.Tensor, torch.Tensor]:

encoded_representation_F = self.encode (model_activations_D)

reconstructed_model_activations_D = self.decode (koodattu_esitys_F)

palauttaa reconstructed_model_activations_D, encoded_presentation_F

Normaalin autoenkooderin häviöfunktio perustuu syötteen rekonstruktiotulosten tarkkuuteen. Harvaisuuden käyttöön ottamiseksi yksinkertaisin tapa on lisätä SAE:n tappiofunktioon harvalukuinen sakkotermi. Yleisin tapa laskea tämä sakkotermi on ottaa tämän SAE:n koodatun esityksen L1-häviö (ei SAE-painot) ja kertoa se L1-kertoimella. Tämä L1-kerroin on keskeinen hyperparametri SAE-koulutuksessa, koska se määrittää kompromissin harvalukuisuuden saavuttamisen ja rekonstruktiotarkkuuden ylläpitämisen välillä.

Huomaa, että tätä ei ole optimoitu tulkinnan vuoksi. Sen sijaan tulkittavissa olevat SAE-ominaisuudet ovat sivuvaikutus harvakseltaan ja rekonstruktioinnissa. Alla on referenssihäviötoiminto.

# B = eräkoko, D = d_malli, F = sanakirjan_koko

def Calculate_loss (autoencoder: SparseAutoEncoder, model_activations_BD: torch.Tensor, l1_coeffient: float) -> torch.Tensor:

reconstructed_model_activations_BD, encoded_representation_BF = autoencoder.forward_pass (model_activations_BD)

reconstruction_error_BD = (reconstructed_model_activations_BD - model_activations_BD).pow (2)

reconstruction_error_B = einops.reduce (reconstruction_error_BD, 'BD -> B', 'sum')

l2_tappio = rekonstruktio_virhe_B.keskiarvo ()

l1_tappio = l1_kerroin * encoded_presentation_BF.sum ()

tappio = l2_tappio + l1_tappio

palautustappio



Kaaviokaavio harvan automaattisen kooderin eteenpäinsiirrosta.

Tämä on harvan automaattisen kooderin yksittäinen siirto eteenpäin. Ensimmäinen on mallivektori, jonka koko on 1x4. Tämä kerrotaan sitten 4x8-enkooderimatriisilla, jotta saadaan 1x8-koodattu vektori, ja ReLU:ta käytetään negatiivisten arvojen muuttamiseksi nollaksi. Tämä koodattu vektori on harvassa. Kerro se sitten 8x4 dekooderimatriisilla saadaksesi 1x4 epätäydellisesti rekonstruoidun mallin aktivoinnin.

Hypoteettinen SAE-ominaisuuden esittely

Ihannetapauksessa jokainen merkittävä numeerinen arvo SAE-esityksessä vastaa jotakin ymmärrettävää komponenttia.

Tässä oletetaan esimerkkitapausta. Oletetaan, että 12 288-ulotteinen vektori [1,5, 0,2, -1,2, ...] edustaa "kultaistanoutajaa" GPT-3:n näkemyksessä. SAE on muotomatriisi (49 512, 12 288), mutta voimme ajatella sitä myös 49 512 vektorin joukkona, joista jokaisella on muoto (1, 12 288). Jos SAE-dekooderin 317-vektori oppii saman "kultaisen noutajan" käsitteen kuin GPT-3, niin dekooderivektori on suunnilleen yhtä suuri kuin [1.5, 0.2, -1.2, ...].

Aina kun SAE-aktivoinnin 317-elementti on muu kuin nolla, niin "kultaista noutajaa" vastaava vektori (ja 317-elementin suuruuteen perustuen) lisätään rekonstruoituun aktivointiin. Mekaanisen tulkittavuuden termein tätä voidaan kuvata ytimekkäästi seuraavasti: "dekooderivektori vastaa jäännösvirtausavaruuden ominaisuuksien lineaarista esitystä".

Voidaan myös sanoa, että SAE:ssä, jossa on 49 512 koodatun esityksen ulottuvuutta, on 49 512 ominaisuutta. Ominaisuudet koostuvat vastaavista kooderi- ja dekooderivektoreista. Kooderivektorin tehtävänä on havaita mallin sisäiset käsitteet ja minimoida muiden käsitteiden häiriöt, kun taas dekooderivektorin tehtävänä on edustaa "todellista" piirteen suuntaa. Tutkijoiden kokeissa havaittiin, että kunkin ominaisuuden kooderin ja dekooderin ominaisuudet ovat erilaisia ​​ja kosinin samankaltaisuuden mediaani on 0,5. Alla olevassa kuvassa kolme punaista laatikkoa vastaavat yksittäisiä ominaisuuksia.



Kaaviokuva harvasta autoenkooderista, jossa kolme punaista ruutua vastaavat SAE-ominaisuutta 1 ja vihreä laatikko vastaa ominaisuutta 4. Jokaisessa ominaisuudessa on 1x4-enkooderivektori, 1x1-toimintojen aktivointi ja 1x4-dekooderivektori. Rekonstruoidut aktivaatiot rakennettiin käyttämällä vain SAE-ominaisuuksien 1 ja 4 dekooderivektoreita. Jos punainen laatikko edustaa "punaista väriä" ja vihreä laatikko "palloa", malli voi edustaa "punaista palloa".

Joten mistä tiedämme, mitä hypoteesi ominaisuus 317 edustaa? Tällä hetkellä käytäntönä on etsiä syötteitä, jotka maksimoivat toimintojen aktivoinnin ja antavat intuitiivisen vastauksen niiden tulkittavuuteen. Kunkin ominaisuuden aktivoivat tulot ovat yleensä tulkittavissa.

Esimerkiksi Anthropic koulutti SAE:tä Claude Sonnetilla ja havaitsi, että Golden Gate -sillalle, neurotieteeseen ja suosittuihin turistikohteisiin liittyvät tekstit ja kuvat aktivoivat erilaisia ​​SAE-ominaisuuksia. Muut ominaisuudet aktivoituvat käsitteillä, jotka eivät ole ilmeisiä. Esimerkiksi Pythialla koulutetun SAE:n ominaisuus aktivoituu "lauseen aiheen muokkaamiseen käytetyn suhteellisen lauseen tai prepositiolauseen viimeinen merkki". "

Koska SAE-dekooderivektorilla on sama muoto kuin LLM:n väliaktivaatioilla, syy-interventio voidaan suorittaa yksinkertaisesti lisäämällä dekooderivektori mallin aktivointiin. Tämän toimenpiteen voimakkuutta voidaan säätää kertomalla tämä dekooderivektori hajautuskertoimella. Kun Anthropic-tutkijat lisäsivät "Golden Gate Bridge" SAE -dekooderivektorin Clauden aktivointiin, Claude pakotettiin mainitsemaan "Golden Gate Bridge" jokaisessa vastauksessa.

Alla on viitetoteutus syy-interventioon käyttämällä oletettua ominaisuutta 317. Kuten "Golden Gate Bridge" Claude, tämä hyvin yksinkertainen toimenpide pakottaa GPT-3-mallin mainitsemaan "kultaisen noutajan" jokaisessa vastauksessa.

def perform_intervention (model_activations_D: taskulamppu.Tensori, dekooderi_FD: taskulamppu.Tensori, mittakaava: float) -> taskulamppu.Tensori:

interventiovektori_D = dekooderi_FD [317, :]

skaalattu_intervention_vektori_D = interventiovektori_D * asteikko

modified_model_activations_D = malli_aktivaatiot_D + skaalattu_intervention_vektori_D

palauttaa modified_model_activations_D

Harvaiden autoenkooderien arviointipulma

Yksi SAE:n käytön suurimmista haasteista on arviointi. Voimme kouluttaa harvat autoenkoodaajat tulkitsemaan kielimalleja, mutta meillä ei ole mitattavissa olevaa luonnollisten kielten esitysten taustalla olevaa totuutta. Tällä hetkellä arviointi on hyvin subjektiivinen, pohjimmiltaan "tutkimme toimintosarjan aktivointisyötettä ja selitämme sitten intuitiivisesti näiden ominaisuuksien tulkittavuuden." Tämä on tulkintakentän tärkein rajoitus.

Tutkijat ovat löytäneet joitain yleisiä välityspalvelimia, jotka näyttävät vastaavan ominaisuuden tulkittavuutta. Yleisimmin käytetyt ovat L0 ja Loss Recovered. L0 on nollasta poikkeavien elementtien keskimääräinen määrä SAE:n koodatussa väliesityksessä. Loss Recovered korvaa alkuperäiset GPT-aktivoinnit rekonstruoiduilla aktivaatioilla ja mittaa epätäydellisten jälleenrakennustulosten lisähäviöitä. Yleensä näiden kahden mittarin välillä on kompromissi, koska SAE voi valita ratkaisun, joka johtaa rekonstruoinnin tarkkuuden heikkenemiseen parantaakseen harvaa.

Kun verrataan SAE:ta, yleinen lähestymistapa on piirtää kaksi muuttujaa ja tarkastella sitten niiden välisiä kompromisseja. Parempien kompromissien saavuttamiseksi monet uudet SAE-menetelmät (kuten DeepMind's Gated SAE ja OpenAI:n TopK SAE) ovat muuttaneet harvalukuisyyttä. Alla oleva kuva on DeepMindin Gated SAE -paperista. Aidattua SAE:tä edustaa punainen viiva, joka sijaitsee kaavion vasemmassa yläkulmassa, mikä osoittaa, että se toimii paremmin tässä kompromississa.



Aidattu SAE L0 ja tappio korjattu

SAE:n mittaamisessa on useita vaikeustasoja. L0 ja Loss Recovered ovat kaksi välityspalvelinta. Emme kuitenkaan käytä niitä koulutuksen aikana, koska L0 ei ole erotettavissa ja SAE-koulutuksen aikana palautuneiden tappioiden laskeminen on laskennallisesti erittäin kallista. Sen sijaan harjoitushäviömme määräytyy L1-rangaistuksen ja sisäisten aktivointien rekonstruoinnin tarkkuuden perusteella, eikä sen vaikutuksesta loppupään menetykseen.

Harjoitteluhäviöfunktio ei vastaa suoraan korvikemetriikkaa, ja korvaava metriikka on vain välityspalvelin ominaisuuden tulkittavuuden subjektiiviselle arvioinnille. Koska todellinen tavoitteemme on "ymmärtää, kuinka malli toimii" ja subjektiiviset tulkinnallisuusarvioinnit ovat vain välityspalvelin, syntyy toinen epäsuhta. Joitakin tärkeitä käsitteitä LLM:ssä ei ehkä ole helppo tulkita, ja saatamme jättää nämä käsitteet huomioimatta, kun optimoimme sokeasti tulkinnan kannalta.

Tee yhteenveto

Selitettävyyden alalla on vielä pitkä matka kuljettavana, mutta SAE on todellista edistystä. SAE mahdollistaa mielenkiintoisia uusia sovelluksia, kuten ohjaamattoman menetelmän ohjausvektorien, kuten Golden Gate Bridge -ohjausvektorin, löytämiseen. SAE voi myös auttaa meitä löytämään kielimalleista helpommin silmukoita, joita voidaan käyttää poistamaan tarpeettomia harhoja mallin sisällä.

Se tosiasia, että SAE:t voivat löytää tulkittavia piirteitä (vaikka tavoitteena on vain tunnistaa aktivointimalleja), viittaa siihen, että ne voivat paljastaa jotain merkityksellistä. On myös todisteita siitä, että LLM voi todellakin oppia jotain merkityksellistä sen sijaan, että se muistaisi pinnallisia tilastollisia malleja.

SAE voisi myös olla varhainen virstanpylväs, johon Anthropicin kaltaiset yritykset pyrkivät, nimittäin "MRI (magneettinen resonanssikuvaus) koneoppimismalleille". SAE ei vielä tarjoa täydellistä ymmärrystä, mutta sen avulla voidaan havaita huono käyttäytyminen. SAE:n ja SAE-arvioinnin suuret haasteet eivät ole ylitsepääsemättömiä, ja monet tutkijat työskentelevät jo tämän aiheen parissa.

Katso lisätietoja harvaista automaattikoodereista Callum McDougalin Colab-muistikirjasta: https://www.lesswrong.com/posts/LnHowHgmrMbWtpkxx/intro-to-superposition-and-sparse-autoencoders-colab

https://www.reddit.com/r/MachineLearning/comments/1eeihdl/d_an_intuitive_explanation_of_sparse_autoencoders/

https://adamkarvonen.github.io/machine_learning/2024/06/11/sae-intuitions.html