Hoe werken LLM’s? Een taalmodel van binnen bekeken
· 15 min lezen
Wie een taalmodel als ChatGPT of Claude een juridische vraag stelt, krijgt binnen enkele seconden een antwoord in verzorgd Nederlands. Dat antwoord kan uitstekend zijn. Het kan ook een uitspraak noemen die nooit is gewezen, met een ECLI-nummer dat er precies zo uitziet als een echt. Beide uitkomsten komen uit hetzelfde mechanisme. Wie dat mechanisme kent, ziet beter wanneer een antwoord vertrouwen verdient en wanneer het eerst moet worden nagezien.
Dit stuk legt uit wat er gebeurt tussen uw vraag en het antwoord. Het volgt de lijn van drie video’s van de wiskundige Grant Sanderson, bekend van het YouTube-kanaal 3Blue1Brown: over de transformer, over het aandachtsmechanisme en over de vraag waar een model feiten opslaat. Die video’s laten met animaties zien wat hier in woorden staat, en ze zijn het kijken waard; de links staan onderaan. Waar dit stuk iets beweert over hoe taalmodellen werken, verwijst het naar het onderzoek waarop die bewering rust.
De rekenvoorbeelden gaan over GPT-3, het model van OpenAI uit 2020. Dat is niet het nieuwste model, maar de afmetingen ervan zijn gepubliceerd[1], en het is het model dat Sanderson in zijn video’s doorrekent. Nieuwere modellen zijn groter en op onderdelen anders opgebouwd. De grondgedachte die hier volgt, geldt voor vrijwel alle grote taalmodellen van dit moment.
Eén stukje tekst tegelijk
Een taalmodel doet in de kern één ding: het krijgt een stuk tekst en berekent voor elk mogelijk volgend stukje tekst hoe waarschijnlijk het is. Daaruit wordt er één gekozen, dat wordt achter de tekst gezet, en de berekening begint opnieuw, nu met een stukje meer. Een antwoord van driehonderd woorden is zo het resultaat van honderden rondes achter elkaar. Er is geen aparte stap waarin het antwoord eerst als geheel wordt opgesteld en daarna uitgeschreven: elk volgend stukje is een nieuwe voorspelling, op basis van alles wat er al staat.
De afkorting GPT vat het samen. Generative: het model maakt nieuwe tekst. Pre-trained: het heeft dat geleerd uit een enorme hoeveelheid bestaande tekst. Transformer: de bouw van het netwerk dat de berekening uitvoert, in 2017 beschreven door onderzoekers van Google[2].
Een chatgesprek is voor het model ook gewoon tekst. Uw vraag wordt, samen met instructies van de aanbieder en de eerdere beurten, in een vast format gezet, en het model verlengt dat document met de beurt van ‘de assistent’. Dat het zich als behulpzame assistent gedraagt en niet als willekeurige tekstvoortzetter, komt uit een tweede trainingsfase. Daarin schrijven mensen voorbeeldantwoorden, rangschikken ze antwoorden van het model, en wordt het model bijgestuurd naar de antwoorden die zij verkiezen[3].
Dat leren gebeurt niet met regels die iemand heeft opgeschreven. Een model bestaat uit getallen, parameters of gewichten genoemd; GPT-3 heeft er 175 miljard[1]. Tijdens de training leest het model honderden miljarden stukjes tekst en voorspelt het steeds het volgende. Na elke reeks voorspellingen worden alle gewichten een klein beetje bijgesteld, in de richting die de fouten verkleint. De methode om die richting voor alle gewichten tegelijk uit te rekenen heet backpropagation[4]. Niemand heeft het model verteld dat na ‘Hoge’ vaak ‘Raad’ komt. Dat zit na de training ergens in die 175 miljard getallen. Waar precies, is de vraag van de rest van dit stuk.
Van tekst naar getallen
Een netwerk rekent met getallen, niet met woorden. De eerste stap is daarom de tekst in stukjes knippen, tokens. Een token is een woord, een deel van een woord of een leesteken. De lijst van mogelijke tokens ligt vast; die van GPT-3 telt er 50.257. Veelvoorkomende woorden zijn één token, een lang samengesteld woord als ‘aansprakelijkheidsverzekering’ valt in meerdere stukken uiteen. Zo’n lijst wordt samengesteld door de meest voorkomende reeksen tekens stap voor stap samen te voegen[5]; GPT-2 en GPT-3 gebruiken daar een variant van[6].
Elk token wordt vervolgens vervangen door een lange rij getallen, een vector. Bij GPT-3 is die rij 12.288 getallen lang. De vectoren staan in een grote tabel met één rij per token, de embeddingmatrix, en ook die getallen zijn geleerd. Alleen deze tabel is al goed voor 617,6 miljoen parameters.
Tekst
uw vraag en alles wat ervoor staat
Tokens
stukjes uit een vaste lijst van 50.257
Vectoren
12.288 getallen per token
96 lagen
elk: aandacht, dan MLP
Kansen
voor elk mogelijk volgend token
Betekenis als richting
U kunt zo’n vector zien als een pijl in een ruimte met 12.288 dimensies. Dat is niet voor te stellen, maar het idee werkt al in twee of drie: woorden met een verwante betekenis komen tijdens de training dicht bij elkaar te liggen, en bepaalde richtingen in de ruimte krijgen een betekenis. Het bekendste voorbeeld komt uit onderzoek naar woordvectoren uit 2013. Neem de vector van king, trek die van man eraf en tel die van woman erbij op, en u komt uit in de buurt van queen[7, 8]. Het verschil tussen man en vrouw blijkt daar een richting die voor veel woordparen ongeveer gelijk is.
Om te meten hoe sterk twee vectoren dezelfde kant op wijzen, gebruikt het netwerk het inwendig product: vermenigvuldig de getallen paarsgewijs en tel de uitkomsten op. Wijzen ze dezelfde kant op, dan is de uitkomst groot en positief; staan ze loodrecht op elkaar, dan is hij nul. Die ene bewerking komt in de rest van het verhaal steeds terug.
De vector waarmee een token begint, weet alleen iets over dat token zelf. Neem het woord ‘beslag’. In ‘de deurwaarder legt conservatoir beslag’, in ‘het beslag voor de pannenkoeken’ en in ‘de smid vernieuwt het beslag van het paard’ begint het met precies dezelfde vector. Het werk van het netwerk is die vectoren aan hun context aan te passen, laag na laag, totdat de vector van het laatste token genoeg informatie bevat om het volgende te voorspellen. Daarbij krijgt elke vector ook informatie over zijn plaats in de tekst mee, want ‘de koper sommeert de verkoper’ is iets anders dan ‘de verkoper sommeert de koper’.
Hoeveel tekst het model tegelijk kan overzien, ligt ook vast: het contextvenster. Bij GPT-3 was dat 2.048 tokens, een paar pagina’s tekst. Huidige modellen verwerken honderdduizenden tokens tegelijk. Wat buiten het venster valt, bestaat voor het model niet.
Van vector naar voorspelling
Na de laatste laag wordt de vector van het laatste token vermenigvuldigd met nog een grote tabel, die voor elk van de 50.257 tokens één getal oplevert: een score, in vaktaal een logit. Een functie die softmax heet, zet die scores om in kansen die samen optellen tot honderd procent. Hoe hoger de score, hoe groter de kans; lage scores krijgen een kans dicht bij nul.
Bij die omzetting hoort een knop: de temperatuur. Bij een lage temperatuur krijgt het token met de hoogste score vrijwel alle kans en wordt de tekst voorspelbaar. Bij een hoge temperatuur worden de kansen gelijker en de tekst gevarieerder, maar ook grilliger. Altijd het meest waarschijnlijke token kiezen klinkt verstandig, maar levert in de praktijk vaak eentonige, zichzelf herhalende tekst op; daarom wordt er meestal gekozen met een zekere mate van toeval[9]. Een verzonnen voorbeeld: het model vult ‘Het hof bekrachtigt het vonnis van de …’ aan, met drie kandidaten in plaats van 50.257, bij drie temperaturen (T):
| Volgend token | Score | T = 0,5 | T = 1 | T = 2 |
|---|---|---|---|---|
| ‘rechtbank’ | 4 | 95% | 77% | 57% |
| ‘kantonrechter’ | 2,5 | 5% | 17% | 27% |
| ‘voorzieningenrechter’ | 1,5 | 1% | 6% | 16% |
Dat dezelfde vraag de tweede keer een ander antwoord kan opleveren, komt hier vandaan. Het laat ook iets anders zien: het model kiest een woord omdat het waarschijnlijk is, niet omdat het waar is. Meestal valt dat samen. Bij een feit dat het model maar zwak heeft opgeslagen, valt het soms niet samen, en dan staat er even vloeiend een fout.
Aandacht: hoe woorden elkaar betekenis geven
De transformer bestaat uit een reeks lagen; GPT-3 heeft er 96. Elke laag heeft twee onderdelen: een aandachtsblok, waarin de vectoren informatie met elkaar uitwisselen, en een blok waarin elke vector afzonderlijk wordt bewerkt, het MLP. Het aandachtsblok is de vinding waar de transformer om draait, en het onderwerp van de tweede video.
Terug naar ‘beslag’. Om te weten welk beslag bedoeld is, moet de vector van dat woord informatie opnemen van de woorden eromheen: ‘deurwaarder’, ‘conservatoir’ of ‘pannenkoeken’. Aandacht regelt dat in drie stappen[2].
- Elke vector stelt een vraag. Een geleerde matrix maakt van elke vector een kortere vector, de query. Sanderson geeft een vereenvoudigd voorbeeld: een zelfstandig naamwoord dat als het ware vraagt of er bijvoeglijke naamwoorden voor hem staan.
- Elke vector biedt een antwoord aan. Een tweede matrix maakt van elke vector een key, in dezelfde korte ruimte. Het inwendig product van een query met een key meet hoe goed ze bij elkaar passen: is ‘conservatoir’ het soort woord waar ‘beslag’ naar zoekt? Softmax zet die uitkomsten per token om in gewichten die samen één zijn. Die verdeling heet het aandachtspatroon.
- Elke vector levert een bijdrage. Een derde matrix bepaalt wat een token doorgeeft, de value. Elk token telt de values van de andere tokens bij zijn eigen vector op, gewogen naar het aandachtspatroon. Daarna wijst de vector van ‘beslag’ in ‘conservatoir beslag’ een andere kant op dan in ‘pannenkoekenbeslag’.
Het mechanisme is ouder dan de transformer. Het werd in 2014 beschreven om vertaalmodellen bij elk woord terug te laten kijken naar de relevante woorden in de brontekst[10]. De stap van de transformer was het hele netwerk op aandacht te bouwen, zodat de berekening voor alle tokens tegelijk kan worden uitgevoerd en goed te verdelen is over duizenden rekenkernen[2]. Die parallellisatie is een belangrijke reden dat modellen op deze schaal te trainen zijn.
Eén regel is wezenlijk: een token mag alleen aandacht geven aan tokens die vóór hem staan. Latere woorden worden weggemaskeerd. Dat lijkt een beperking, maar het maakt de training efficiënt. Uit één tekst leert het model op elke positie tegelijk wat er daarna kwam, zonder dat het antwoord al in beeld is.
Het aandachtspatroon vergelijkt elk token met elk ander token. Het aantal vergelijkingen groeit daarom met het kwadraat van de lengte van de tekst: bij 2.048 tokens zijn dat er 4.194.304 per aandachtspatroon. Daarom is een groot contextvenster duur. En een groot venster betekent niet dat alles erin even goed wordt gebruikt: modellen benutten informatie aan het begin en aan het eind van een lange context beter dan informatie in het midden[11]. Voor wie een dik dossier in één keer aan een model geeft, is dat goed om te weten.
Eén aandachtspatroon kan maar één soort verband volgen. Daarom heeft elke laag er vele naast elkaar, aandachtskoppen genoemd, elk met eigen matrices: bij GPT-3 96 per laag, met query’s en keys van 128 getallen. Welk verband een kop volgt, wordt niet ontworpen maar geleerd. Soms is dat te achterhalen. Onderzoekers van Anthropic vonden koppen die een eerder patroon in de tekst opzoeken en voortzetten, en vermoeden dat die een groot deel verklaren van het vermogen om van voorbeelden in de vraag te leren[12]. Van veel koppen is de rol veel minder goed te benoemen. Alle aandachtskoppen van GPT-3 samen tellen 58,0 miljard parameters, ongeveer een derde van het totaal.
De uitkomst van een aandachtsblok vervangt de vector niet, maar wordt erbij opgeteld. Elke laag schrijft zo bij in dezelfde vector, die onderzoekers daarom de residual stream noemen: de doorgaande stroom waaruit elke laag leest en waarin elke laag schrijft[13, 14]. Na 96 lagen draagt de vector van het laatste token alles wat het netwerk over de tekst heeft samengebracht.
Waar het model feiten bewaart
Vul aan: ‘De Hoge Raad der Nederlanden zetelt in …’. Een taalmodel zegt ‘Den Haag’, terwijl geen woord in de vraag dat antwoord bevat. Het moet dus in de gewichten zitten. De derde video gaat over de vraag waar, en het antwoord dat het onderzoek suggereert is: grotendeels in de MLP-blokken.
Een MLP-blok (multilayer perceptron) bewerkt elke vector afzonderlijk, zonder naar de andere tokens te kijken, in drie stappen:
- Omhoog. De vector wordt vermenigvuldigd met een matrix die er een veel langere vector van maakt: bij GPT-3 49.152 getallen, vier keer zo lang. Elke rij van die matrix kunt u lezen als een vraag aan de vector, bijvoorbeeld: gaat dit over de Hoge Raad? Er komt een vast getal bij, de bias, die bepaalt hoe sterk het signaal moet zijn om mee te tellen.
- Aan of uit. Op elk van die getallen wordt een eenvoudige functie toegepast. In Sandersons uitleg is dat ReLU: negatieve getallen worden nul, positieve blijven staan. GPT-modellen gebruiken een gladde variant, GELU[15]. Zo’n positie die aan of uit gaat, heet een neuron.
- Terug. Een tweede matrix brengt het resultaat terug naar 12.288 getallen. Elk actief neuron telt daarbij een eigen richting op bij de vector, bijvoorbeeld de richting ‘Den Haag’. Ook die uitkomst wordt opgeteld bij wat er al stond.
Samen werkt dat als een enorme verzameling als-dan-regels: als de vector over de Hoge Raad gaat, tel er dan ‘Den Haag’ bij op. Onderzoek ondersteunt dat beeld. Geva en collega’s lieten zien dat MLP-lagen zich gedragen als een geheugen van sleutels en waarden: de eerste matrix herkent patronen in de tekst, de tweede schrijft op wat er vaak op volgt[16]. Meng en collega’s spoorden in GPT-modellen op waar een feitelijke associatie wordt opgehaald, vonden die in MLP-lagen halverwege het netwerk, en konden door alleen daar gewichten aan te passen een feit gericht veranderen[17].
Zo netjes als in het voorbeeld is het zelden. Toen onderzoekers van Google DeepMind uitzochten hoe een model feiten over sporters ophaalt, het onderzoek waar Sanderson naar verwijst, vonden ze geen afzonderlijk neuron per feit. De berekening bleek verdeeld over veel neuronen in meerdere lagen, en liet zich op het niveau van afzonderlijke neuronen niet goed ontrafelen[18].
De MLP-blokken zijn ook het grootste deel van het model. Per laag zijn het twee matrices van 12.288 bij 49.152 getallen, en over 96 lagen komt dat op 116,0 miljard parameters: twee derde van GPT-3. De optelling, zoals Sanderson die maakt:
| Onderdeel van GPT-3 | Parameters | Aandeel |
|---|---|---|
| Embedding: van token naar vector | 617,6 miljoen | 0,4% |
| Aandacht: 96 lagen van 96 koppen | 58,0 miljard | 33,1% |
| MLP: 96 lagen | 116,0 miljard | 66,2% |
| Unembedding: van vector naar scores | 617,6 miljoen | 0,4% |
| Totaal | 175,2 miljard | 100% |
Meer begrippen dan dimensies
Hier wringt iets. Een vector van GPT-3 heeft 12.288 getallen. Als elk begrip een eigen richting nodig had, loodrecht op alle andere, dan pasten er precies 12.288 begrippen in. Een model kent er veel meer: personen, plaatsen, rechtsgebieden, schrijfstijlen, de toon van een sommatiebrief.
De uitweg zit in een eigenschap van ruimtes met veel dimensies. Wie niet exact loodrecht eist, maar ‘bijna loodrecht’ goed genoeg vindt, bijvoorbeeld een hoek tussen 85 en 95 graden, kan er veel meer richtingen in kwijt, en dat aantal groeit exponentieel met het aantal dimensies. Dat volgt uit een wiskundig resultaat uit 1984, het lemma van Johnson en Lindenstrauss[19]. Taalmodellen lijken daar gebruik van te maken: ze slaan meer kenmerken op dan ze dimensies hebben, door die in bijna loodrechte richtingen over elkaar heen te leggen. Onderzoekers noemen dat superpositie[20].
Dat heeft een prijs. Een afzonderlijk neuron reageert daardoor zelden op één begrip, en meestal op een mengsel van dingen die niets met elkaar te maken hebben. Dat maakt modellen moeilijk te lezen, en het is een reden dat de vraag ‘waarom zei het model dit?’ zo lastig te beantwoorden is. Er is vooruitgang: met zogeheten sparse autoencoders zijn uit een klein model duizenden goed te benoemen kenmerken gehaald[21], en later miljoenen uit Claude 3 Sonnet, een model dat in productie werd gebruikt, waaronder kenmerken voor de Golden Gate Bridge en voor fouten in programmacode[22]. Van een volledig begrip van wat er in een groot model gebeurt, is nog geen sprake.
Wat dit betekent voor juridisch werk
Uit het voorgaande volgen een paar dingen die in de praktijk tellen.
Kennis in de gewichten heeft geen bron. Wat een model uit zijn training weet, zit verspreid over miljarden gewichten, over elkaar heen gelegd met andere kennis. Er is geen register waarin staat uit welke tekst een feit komt, of van wanneer. Het model kan dus niet nakijken waar het iets van weet. Wat na de training is gebeurd, weet het niet, tenzij het in het contextvenster wordt aangereikt. En wat zelden in de trainingsteksten voorkomt, wordt slechter onthouden: hoe minder documenten over een onderwerp, hoe vaker een model er een vraag over fout beantwoordt[23]. Voor juridisch werk betekent dat: een veelbesproken arrest kent een model doorgaans beter dan een uitspraak die nauwelijks is besproken.
Waarschijnlijk is niet hetzelfde als waar. Het model kiest elk volgend token omdat het waarschijnlijk is. Een ECLI-nummer, een artikelnummer of een citaat dat er geloofwaardig uitziet, maakt het even gemakkelijk als een echt. Hoe vaak dat misgaat, is gemeten. In een studie naar Amerikaanse rechtspraak gaven algemene taalmodellen op controleerbare vragen over willekeurige federale uitspraken in 58 tot 88 procent van de gevallen een onjuist antwoord[24]. Hoe lager de rechter en hoe minder bekend de zaak, hoe vaker het misging. Onderzoekers van onder meer OpenAI betogen dat zulke fouten mede voortkomen uit de manier waarop modellen worden getraind en beoordeeld: wie gokt, scoort op de gangbare toetsen beter dan wie zegt het niet te weten[25].
Bronnen in de context helpen, en vervangen het nalezen niet. De meest gebruikte remedie is het model niet uit het geheugen te laten antwoorden, maar eerst relevante bronnen op te zoeken en die in het contextvenster te zetten. Het aandachtsmechanisme kan die tekst dan bij het schrijven direct gebruiken. Die aanpak heet retrieval-augmented generation[26]. Hij verkleint het probleem, maar lost het niet op: in een onderzoek naar commerciële juridische zoektools die zo werken, bevatte nog steeds 17 tot 33 procent van de antwoorden een onjuiste of slecht onderbouwde bewering[27].
Daarom werkt Fermat 360 zoals het werkt. De assistent zoekt eerst in rechtspraak en wetgeving en zet de gevonden passages in de context. Het antwoord bevat genummerde verwijzingen naar die passages, die u openklapt en naleest. Een vervolgvraag kan niet worden beantwoord zonder opnieuw te zoeken, en uitspraken en artikelen uit de grote wetboeken die in een antwoord worden genoemd, worden automatisch tegen het corpus gecontroleerd. Dat maakt fouten minder waarschijnlijk, niet onmogelijk. Het belangrijkste is dat u een bewering niet op gezag hoeft aan te nemen: u ziet waar zij op rust.
Werkt u met een taalmodel, of dat nu Fermat 360 is of een ander, dan volgen uit het mechanisme een paar vuistregels:
- Een verwijzing zonder de tekst waar zij naar verwijst, bewijst niets. Ook een echte ECLI kan onder een bewering staan die er niet in staat. Lees de passage.
- Wantrouw vooral het specifieke detail over een weinig besproken bron: een datum, een rechtsoverweging, een nummer. Daar is de opgeslagen kennis het zwakst.
- Geeft u een lang document mee, stel dan gerichte vragen over het onderdeel waar het om gaat, in plaats van één vraag over het geheel. Wat in het midden staat, wordt minder goed benut.
- Stel een twijfelachtige vraag gerust nog eens. Een antwoord dat bij elke poging anders luidt, is een waarschuwingssignaal: onderzoekers gebruiken juist die wisseling in betekenis tussen pogingen om verzonnen antwoorden op te sporen[28].
Verder kijken
Wie dit liever ziet dan leest: de drie video’s van Grant Sanderson (3Blue1Brown) waarop dit stuk is gebaseerd, uit zijn reeks over deep learning. Bij elke video hoort een uitgeschreven versie met de correcties die hij na publicatie heeft aangebracht.
- Hoofdstuk 5: Transformers, the tech behind LLMs (uitgeschreven les)
- Hoofdstuk 6: Attention in transformers, step-by-step (uitgeschreven les)
- Hoofdstuk 7: How might LLMs store facts (uitgeschreven les)
Wilt u zien hoe dat in de praktijk uitpakt bij juridische vragen? Probeer Fermat 360 een week gratis.
Bronnen
- Brown, T. B., e.a. (2020). Language Models are Few-Shot Learners. Advances in Neural Information Processing Systems 33 (NeurIPS 2020). arxiv.org/abs/2005.14165
- Vaswani, A., e.a. (2017). Attention Is All You Need. Advances in Neural Information Processing Systems 30 (NeurIPS 2017). arxiv.org/abs/1706.03762
- Ouyang, L., e.a. (2022). Training language models to follow instructions with human feedback. Advances in Neural Information Processing Systems 35 (NeurIPS 2022). arxiv.org/abs/2203.02155
- Rumelhart, D. E., Hinton, G. E. & Williams, R. J. (1986). Learning representations by back-propagating errors. Nature, 323, 533–536. doi.org/10.1038/323533a0
- Sennrich, R., Haddow, B. & Birch, A. (2016). Neural Machine Translation of Rare Words with Subword Units. Proceedings of the 54th Annual Meeting of the ACL. aclanthology.org/P16-1162/
- Radford, A., Wu, J., Child, R., Luan, D., Amodei, D. & Sutskever, I. (2019). Language Models are Unsupervised Multitask Learners. OpenAI, technisch rapport. cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf
- Mikolov, T., Chen, K., Corrado, G. & Dean, J. (2013). Efficient Estimation of Word Representations in Vector Space. arXiv:1301.3781. arxiv.org/abs/1301.3781
- Mikolov, T., Yih, W. & Zweig, G. (2013). Linguistic Regularities in Continuous Space Word Representations. Proceedings of NAACL-HLT 2013. aclanthology.org/N13-1090/
- Holtzman, A., Buys, J., Du, L., Forbes, M. & Choi, Y. (2020). The Curious Case of Neural Text Degeneration. International Conference on Learning Representations (ICLR 2020). arxiv.org/abs/1904.09751
- Bahdanau, D., Cho, K. & Bengio, Y. (2015). Neural Machine Translation by Jointly Learning to Align and Translate. International Conference on Learning Representations (ICLR 2015). arxiv.org/abs/1409.0473
- Liu, N. F., e.a. (2024). Lost in the Middle: How Language Models Use Long Contexts. Transactions of the Association for Computational Linguistics, 12, 157–173. doi.org/10.1162/tacl_a_00638
- Olsson, C., e.a. (2022). In-context Learning and Induction Heads. Transformer Circuits Thread. transformer-circuits.pub/2022/in-context-learning-and-induction-heads/index.html
- He, K., Zhang, X., Ren, S. & Sun, J. (2016). Deep Residual Learning for Image Recognition. IEEE Conference on Computer Vision and Pattern Recognition (CVPR 2016). arxiv.org/abs/1512.03385
- Elhage, N., e.a. (2021). A Mathematical Framework for Transformer Circuits. Transformer Circuits Thread. transformer-circuits.pub/2021/framework/index.html
- Hendrycks, D. & Gimpel, K. (2016). Gaussian Error Linear Units (GELUs). arXiv:1606.08415. arxiv.org/abs/1606.08415
- Geva, M., Schuster, R., Berant, J. & Levy, O. (2021). Transformer Feed-Forward Layers Are Key-Value Memories. Proceedings of EMNLP 2021. arxiv.org/abs/2012.14913
- Meng, K., Bau, D., Andonian, A. & Belinkov, Y. (2022). Locating and Editing Factual Associations in GPT. Advances in Neural Information Processing Systems 35 (NeurIPS 2022). arxiv.org/abs/2202.05262
- Nanda, N., Rajamanoharan, S., Kramár, J. & Shah, R. (2023). Fact Finding: Attempting to Reverse-Engineer Factual Recall on the Neuron Level. AI Alignment Forum (Google DeepMind). www.alignmentforum.org/posts/iGuwZTHWb6DFY3sKB/fact-finding-attempting-to-reverse-engineer-factual-recall
- Johnson, W. B. & Lindenstrauss, J. (1984). Extensions of Lipschitz mappings into a Hilbert space. Contemporary Mathematics, 26, 189–206. doi.org/10.1090/conm/026/737400
- Elhage, N., e.a. (2022). Toy Models of Superposition. Transformer Circuits Thread. transformer-circuits.pub/2022/toy_model/index.html
- Bricken, T., e.a. (2023). Towards Monosemanticity: Decomposing Language Models With Dictionary Learning. Transformer Circuits Thread. transformer-circuits.pub/2023/monosemantic-features/index.html
- Templeton, A., e.a. (2024). Scaling Monosemanticity: Extracting Interpretable Features from Claude 3 Sonnet. Transformer Circuits Thread. transformer-circuits.pub/2024/scaling-monosemanticity/index.html
- Kandpal, N., Deng, H., Roberts, A., Wallace, E. & Raffel, C. (2023). Large Language Models Struggle to Learn Long-Tail Knowledge. Proceedings of the 40th International Conference on Machine Learning (ICML 2023). arxiv.org/abs/2211.08411
- Dahl, M., Magesh, V., Suzgun, M. & Ho, D. E. (2024). Large Legal Fictions: Profiling Legal Hallucinations in Large Language Models. Journal of Legal Analysis, 16(1), 64–93. doi.org/10.1093/jla/laae003
- Kalai, A. T., Nachum, O., Vempala, S. S. & Zhang, E. (2025). Why Language Models Hallucinate. arXiv:2509.04664. arxiv.org/abs/2509.04664
- Lewis, P., e.a. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. Advances in Neural Information Processing Systems 33 (NeurIPS 2020). arxiv.org/abs/2005.11401
- Magesh, V., Surani, F., Dahl, M., Suzgun, M., Manning, C. D. & Ho, D. E. (2025). Hallucination-Free? Assessing the Reliability of Leading AI Legal Research Tools. Journal of Empirical Legal Studies, 22(2), 216–242. doi.org/10.1111/jels.12413
- Farquhar, S., Kossen, J., Kuhn, L. & Gal, Y. (2024). Detecting hallucinations in large language models using semantic entropy. Nature, 630, 625–630. doi.org/10.1038/s41586-024-07421-0