AI-modeller och plattformar
En komplett guide till finjustering av stora språkmodeller

Av
Aayush Mittal Mittal
Stora språkmodeller (LLM) som GPT-4, LaMDA, PaLM och andra har tagit världen med storm med sin anmärkningsvärda förmåga att förstå och generera mänsklig text på ett stort antal ämnen. Dessa modeller är förtränade på enorma datamängder som består av miljarder ord från internet, böcker och andra källor.
Denna förträningsfas ger modellerna omfattande allmän kunskap om språk, ämnen, resonemang och till och med vissa fördomar som finns i träningsdata. Men trots deras otroliga bredd saknar dessa förtränade LLM specialiserad expertis för specifika domäner eller uppgifter.
Här kommer finjustering in – processen att anpassa en förtränad LLM för att excellerera i en specifik applikation eller användningsfall. Genom att ytterligare träna modellen på en mindre, uppgiftsspecifik datamängd kan vi justera dess förmågor för att motsvara nyanserna och kraven i den domänen.
Finjustering är analogt med att överföra den breda kunskapen från en högt utbildad generalist till att skapa en ämnesexpert som är specialiserad inom ett visst område. I den här guiden kommer vi att utforska vad, varför och hur man finjusterar LLM.
Vad är finjustering?
I sin kärna handlar finjustering om att ta en stor förtränad modell och uppdatera dess parametrar med en andra träningsfas på en datamängd som är anpassad till din måluppgift eller domän. Detta tillåter modellen att lära sig och internalisera nyanserna, mönstren och målen som är specifika för det smalare området.
Medan förträning fångar en bred språkförståelse från en enorm och diversifierad textkorpus, specialiserar finjustering den allmänna kompetensen. Det är likt att ta en renässansman och forma honom till en industrispecialist.
De förtränade modellens vikter, som kodar dess allmänna kunskap, används som startpunkt eller initiering för finjusteringsprocessen. Modellen tränas sedan ytterligare, men den här gången på exempel som är direkt relevanta för slutapplikationen.
Genom att exponera modellen för denna specialiserade datafördelning och justera modellparametrarna därefter, gör vi LLM mer exakt och effektiv för målanvändningsfallet, samtidigt som vi fortfarande drar nytta av de breda förtränade förmågorna som en grund.
Varför finjustera LLM?
Det finns flera nyckelskäl till varför du kan vilja finjustera en stor språkmodell:
- Domänanpassning: Varje fält, från juridik till medicin till programvaruutveckling, har sina egna nyanserade språkkonventioner, jargong och sammanhang. Finjustering tillåter dig att anpassa en allmän modell för att förstå och producera text som är anpassad till den specifika domänen.
- Uppgiftsspecialisering: LLM kan finjusteras för olika naturligspråksbehandlingsuppgifter som textsummering, maskinöversättning, frågesvar och så vidare. Denna specialisering förbättrar prestanda på måluppgiften.
- Dataöverensstämmelse: Högst reglerade branscher som hälsovård och finans har strikta dataintegritetskrav. Finjustering tillåter tränings-LLM på företagsdata samtidigt som känslig information skyddas.
- Begränsad märkt data: Att erhålla stora märkta datamängder för att träna modeller från scratch kan vara utmanande. Finjustering tillåter att uppnå stark uppgiftsprestanda från begränsade övervakade exempel genom att utnyttja den förtränade modellens förmågor.
- Modelluppdatering: När ny data blir tillgänglig över tid i en domän kan du finjustera modeller ytterligare för att inkorporera den senaste kunskapen och förmågorna.
- Minskning av fördomar: LLM kan plocka upp samhälleliga fördomar från bred förträning. Finjustering på kuraterade datamängder kan hjälpa till att minska och korrigera dessa önskvärda fördomar.
I själva verket brottas finjustering gapet mellan en allmän, bred modell och de fokuserade kraven i en specialiserad applikation. Det förbättrar noggrannheten, säkerheten och relevansen för modellutdata för målanvändningsfall.
Den tillhandahållna diagrammen beskriver processen för att implementera och använda stora språkmodeller (LLM) för företagsapplikationer. Initialt matas en förtränad modell som T5 med strukturerad och ostrukturerad företagsdata, som kan komma i olika format som CSV eller JSON. Denna data genomgår övervakad, ostrukturerad eller överföringsfinjustering, vilket förbättrar modellens relevans för företagets specifika behov.
När modellen är finjusterad med företagsdata uppdateras viktorna enligt. Den tränade modellen itererar sedan genom ytterligare träningscykler, kontinuerligt förbättrar sina svar över tid med ny företagsdata. Processen är iterativ och dynamisk, med modellen som lär sig och omtränar för att anpassa sig till utvecklande data mönster.
Utmatningen från denna tränade modell – token och inbäddningar som representerar ord – distribueras sedan för olika företagsapplikationer. Dessa applikationer kan sträcka sig från chattbotar till hälsovård, var och en kräver att modellen förstår och svarar på industrispecifika frågor. I finans kan applikationer inkludera bedrägeridetektering och hotanalys; i hälsovård kan modeller hjälpa till med patientförfrågningar och diagnostik.
Den tränade modellens förmåga att bearbeta och svara på ny företagsdata över tid säkerställer att dess användbarhet upprätthålls och växer. Som ett resultat kan företagsanvändare interagera med modellen genom applikationer, ställa frågor och få informerade svar som reflekterar modellens tränings- och finjusteringsdata.
Denna infrastruktur stöder ett brett utbud av företagsapplikationer, som visar flexibiliteten och anpassningsförmågan hos LLM när de implementeras och underhålls inom ett företagssammanhang.
Finjusteringsmetoder
Det finns två primära strategier när det gäller finjustering av stora språkmodeller:
1) Fullständig modellfinjustering
I fullständig finjusteringsmetod uppdateras alla parametrar (vikter och fördomar) i den förtränade modellen under den andra träningsfasen. Modellen exponeras för uppgiftsspecifika märkta datamängder, och den standardträningsprocessen optimerar hela modellen för den datafördelningen.
Detta tillåter modellen att göra mer omfattande justeringar och anpassa sig holistiskt till måluppgiften eller domänen. Men fullständig finjustering har några nackdelar:
- Det kräver betydande beräkningsresurser och tid för att träna, liknande förträningsfasen.
- Lagringskraven är höga, eftersom du behöver underhålla en separat finjusterad kopia av modellen för varje uppgift.
- Det finns en risk för “katastrofalt glömska”, där finjustering orsakar att modellen förlorar vissa allmänna förmågor som lärts under förträning.
Trots dessa begränsningar förblir fullständig finjustering en kraftfull och allmänt använd teknik när resurser tillåter och måluppgiften avviker betydligt från allmänt språk.
2) Effektiva finjusteringsmetoder
För att övervinna de beräkningsmässiga utmaningarna med fullständig finjustering har forskare utvecklat effektiva strategier som endast uppdaterar en liten delmängd av modellens parametrar under finjustering. Dessa parametriskt effektiva tekniker balanserar specialisering och minskar resurskraven.
Några populära effektiva finjusteringsmetoder inkluderar:
Prefix-Tuning: Här introduceras och tränas en liten mängd uppgiftsspecifika vektorer eller “prefix” för att konditionera den förtränade modellens uppmärksamhet för måluppgiften. Endast dessa prefix uppdateras under finjustering.
LoRA (Low-Rank Adaptation): LoRA injicerar tränbara låg-rankmatriser i varje lager av den förtränade modellen under finjustering. Dessa små rangjusteringar hjälper till att specialisera modellen med betydligt färre tränbara parametrar än fullständig finjustering.
Jag kan tillhandahålla en detaljerad förklaring av LoRA (Low-Rank Adaptation) tillsammans med den matematiska formuleringen och kodexemplen. LoRA är en populär parameter-effektiv finjusteringsteknik som har fått betydande uppmärksamhet inom området för stor språkmodelladaptation.
Vad är LoRA?
LoRA är en finjusteringsmetod som introducerar en liten mängd tränbara parametrar i den förtränade LLM, vilket möjliggör effektiv anpassning till nedströmsuppgifter samtidigt som den stora delen av den ursprungliga modellens kunskap bevaras. Istället för att finjustera alla parametrar i LLM, injicerar LoRA uppgiftsspecifika låg-rankmatriser i modellens lager, vilket möjliggör betydande beräknings- och minnesbesparingar under finjusteringsprocessen.
Matematisk formulering
LoRA (Low-Rank Adaptation) är en finjusteringsmetod för stora språkmodeller som introducerar en låg-rankuppdatering till viktmatrixerna. För en viktmatrix 0∈W0∈Rd×k, LoRA lägger till en låg-rankmatris BA, med A∈Rr×k och B∈Rd×r, där r är rangen. Denna metod minskar betydligt antalet tränbara parametrar, vilket möjliggör effektiv anpassning till nedströmsuppgifter med minimala beräkningsresurser. Den uppdaterade viktmatrixen ges av W=W0+B⋅A.
Denna låg-rankuppdatering kan tolkas som att modifiera den ursprungliga viktmatrixen $W_{0}$ genom att lägga till en låg-rankmatris $BA$. Den viktigaste fördelen med denna formulering är att istället för att uppdatera alla $d \times k$ parametrar i $W_{0}$, behöver LoRA endast optimera $r \times (d + k)$ parametrar i $A$ och $B$, vilket betydligt minskar antalet tränbara parametrar.
Här är ett exempel i Python med peft-biblioteket för att tillämpa LoRA på en förtränad LLM för textklassificering:
</div> <div> <div class="code-block__code !my-0 !rounded-t-lg !text-sm !leading-relaxed" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><code class="language-python" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><span class="token" data-darkreader-inline-color="">from</span> transformers <span class="token" data-darkreader-inline-color="">import</span> AutoModelForSequenceClassification </code></div> <div class="code-block__code !my-0 !rounded-t-lg !text-sm !leading-relaxed" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><code class="language-python" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><span class="token" data-darkreader-inline-color="">from</span> peft <span class="token" data-darkreader-inline-color="">import</span> get_peft_model<span class="token" data-darkreader-inline-color="">,</span> LoraConfig<span class="token" data-darkreader-inline-color="">,</span> TaskType </code></div> <div data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""></div> <div class="code-block__code !my-0 !rounded-t-lg !text-sm !leading-relaxed" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><code class="language-python" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><span class="token" data-darkreader-inline-color=""># Ladda förtränad modell</span> </code></div> <div class="code-block__code !my-0 !rounded-t-lg !text-sm !leading-relaxed" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><code class="language-python" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color="">model <span class="token" data-darkreader-inline-color="">=</span> AutoModelForSequenceClassification<span class="token" data-darkreader-inline-color="">.</span>from_pretrained<span class="token" data-darkreader-inline-color="">(</span><span class="token" data-darkreader-inline-color="">"bert-base-uncased"</span><span class="token" data-darkreader-inline-color="">,</span> num_labels<span class="token" data-darkreader-inline-color="">=</span><span class="token" data-darkreader-inline-color="">2</span><span class="token" data-darkreader-inline-color="">)</span> </code></div> <div data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""></div> <div class="code-block__code !my-0 !rounded-t-lg !text-sm !leading-relaxed" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><code class="language-python" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><span class="token" data-darkreader-inline-color=""># Definiera LoRA-konfiguration</span> </code></div> <div class="code-block__code !my-0 !rounded-t-lg !text-sm !leading-relaxed" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><code class="language-python" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color="">peft_config <span class="token" data-darkreader-inline-color="">=</span> LoraConfig<span class="token" data-darkreader-inline-color="">(</span>task_type<span class="token" data-darkreader-inline-color="">=</span>TaskType<span class="token" data-darkreader-inline-color="">.</span>SEQ_CLS<span class="token" data-darkreader-inline-color="">, </span>r<span class="token" data-darkreader-inline-color="">=</span><span class="token" data-darkreader-inline-color="">8</span><span class="token" data-darkreader-inline-color="">,</span> <span class="token" data-darkreader-inline-color=""># Rang av låg-rankuppdatering</span> lora_alpha<span class="token" data-darkreader-inline-color="">=</span><span class="token" data-darkreader-inline-color="">16</span><span class="token" data-darkreader-inline-color="">,</span></code><code class="language-python" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><span class="token" data-darkreader-inline-color=""># Skalningsfaktor för låg-rankuppdatering</span> </code></div> <div class="code-block__code !my-0 !rounded-t-lg !text-sm !leading-relaxed" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><code class="language-python" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""> target_modules<span class="token" data-darkreader-inline-color="">=</span><span class="token" data-darkreader-inline-color="">[</span><span class="token" data-darkreader-inline-color="">"q_lin"</span><span class="token" data-darkreader-inline-color="">,</span> <span class="token" data-darkreader-inline-color="">"v_lin"</span><span class="token" data-darkreader-inline-color="">]</span><span class="token" data-darkreader-inline-color="">,</span> <span class="token" data-darkreader-inline-color=""># Tillämpa LoRA på fråge- och värdevärden</span> <span class="token" data-darkreader-inline-color="">)</span> </code></div> <div data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""></div> <div class="code-block__code !my-0 !rounded-t-lg !text-sm !leading-relaxed" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><code class="language-python" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><span class="token" data-darkreader-inline-color=""># Skapa LoRA-aktiverad modell</span> </code></div> <div class="code-block__code !my-0 !rounded-t-lg !text-sm !leading-relaxed" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><code class="language-python" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color="">model <span class="token" data-darkreader-inline-color="">=</span> get_peft_model<span class="token" data-darkreader-inline-color="">(</span>model<span class="token" data-darkreader-inline-color="">,</span> peft_config<span class="token" data-darkreader-inline-color="">)</span> </code></div> <div class="code-block__code !my-0 !rounded-t-lg !text-sm !leading-relaxed" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><code class="language-python" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><span class="token" data-darkreader-inline-color=""># Finjustera modellen med LoRA</span> </code></div> <div data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""></div> <div class="code-block__code !my-0 !rounded-t-lg !text-sm !leading-relaxed" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><code class="language-python" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><span class="token" data-darkreader-inline-color=""># ... (träningskod utelämnad för överskådlighet)</span></code></div> </div> <div data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color="">
I det här exemplet laddar vi en förtränad BERT-modell för sekvensklassificering och definierar en LoRA-konfiguration. Parametern r specificerar rangen för den låg-rankuppdateringen, och lora_alpha är en skalningsfaktor för uppdateringen. Parametern target_modules anger vilka lager av modellen som ska ta emot de låg-rankuppdateringarna. Efter att ha skapat den LoRA-aktiverade modellen kan vi fortsätta med finjusteringsprocessen med den standardträningsproceduren.
Adapterlager: Liknande LoRA, men istället för låg-rankuppdateringar, införs tunna “adapter”-lager inom varje transformerblock i den förtränade modellen. Endast parametrarna i dessa få nya kompakta lager tränas.
Prompt-tuning: Denna metod håller den förtränade modellen helt frusen. Istället införs tränbara “prompt”-inbäddningar som indata för att aktivera modellens förtränade kunskap för måluppgiften.
Dessa effektiva metoder kan ge upp till 100x beräkningsreduceringar jämfört med fullständig finjustering, samtidigt som de uppnår konkurrenskraftig prestanda på många uppgifter. De minskar också lagringsbehoven genom att undvika fullständig modellkopiering.
Men deras prestanda kan ligga efter fullständig finjustering för uppgifter som är väsentligt annorlunda än allmänt språk eller kräver mer holistisk specialisering.
Finjusteringsprocessen
Oavsett finjusteringsstrategi, följer den övergripande processen för att specialisera en LLM en allmän ram:
- Datapreparation: Du behöver erhålla eller skapa en märkt datamängd som kartar indata (prompt) till önskade utdata för din måluppgift. För textgenereringsuppgifter som summering, är detta indata-text till summerad utdata-par.
- Datadelning: Följande bästa praxis, dela din märkta datamängd i tränings-, validerings- och testuppsättningar. Detta separerar data för modellträning, hyperparametertuning och slutlig utvärdering.
- Hyperparametertuning: Parametrar som inlärningshastighet, batchstorlek och tränings-schema behöver justeras för den mest effektiva finjusteringen på din data. Detta innefattar vanligtvis en liten valideringsuppsättning.
- Modellträning: Med de justerade hyperparametrarna, kör finjusteringsoptimeringsprocessen på hela träningsuppsättningen tills modellens prestanda på valideringsuppsättningen slutar förbättras (tidig stoppning).
- Utvärdering: Utvärdera den finjusterade modellens prestanda på den avsatta testuppsättningen, idealiskt bestående av verkliga exempel för målanvändningsfallet, för att uppskatta verklig effektivitet.
- Distribution och övervakning: När tillfredsställande, kan den finjusterade modellen distribueras för inferens på nya indata. Det är viktigt att övervaka dess prestanda och noggrannhet över tid för konceptdrift.
Medan detta beskriver den övergripande processen, kan många nyanser påverka finjusteringens framgång för en specifik LLM eller uppgift. Strategier som curriculum learning, multi-uppgiftsfinjustering och få-skottspromptning kan ytterligare förbättra prestanda.
Dessutom innefattar effektiva finjusteringsmetoder extra överväganden. Till exempel kräver LoRA tekniker som konditionerar de förtränade modellutdata genom en kombineringslager. Prompt-tuning behöver noggrant utformade prompt för att aktivera rätt beteenden.
Avancerad finjustering: Inkorporering av mänsklig återkoppling
Medan standardiserad övervakad finjustering med märkta datamängder är effektiv, är en spännande gräns att träna LLM direkt med mänskliga preferenser och återkoppling. Denna mänskliga-i-loopen-approach utnyttjar tekniker från förstärkt inlärning:
PPO (Proximal Policy Optimization): Här behandlas LLM som en förstärkt inlärningsagent, med dess utdata som “åtgärder”. En belöningsmodell tränas för att förutsäga mänskliga betyg eller kvalitetsscore för dessa utdata. PPO optimerar sedan LLM för att generera utdata som maximalt belöningsmodellens poäng.
RLHF (Reinforcement Learning from Human Feedback): Detta utvidgar PPO genom att direkt inkorporera mänsklig återkoppling i inlärningsprocessen. Istället för en fast belöningsmodell, kommer belöningarna från iterativa mänskliga utvärderingar av LLM:s utdata under finjustering.
Medan det är beräkningsintensivt, tillåter dessa metoder att forma LLM-beteende mer exakt baserat på önskade egenskaper som utvärderas av människor, bortom vad som kan fångas i en statisk datamängd.
Företag som Anthropic använde RLHF för att ge deras språkmodeller som Claude förbättrad sanning, etik och säkerhetsmedvetenhet bortom bara uppgiftskompetens.
Potentiella risker och begränsningar
Medan otroligt kraftfull, är finjustering av LLM inte utan risker som måste hanteras noggrant:
Fördomsförstärkning: Om finjusteringsdata innehåller samhälleliga fördomar kring kön, ras, ålder eller andra attribut, kan modellen förstärka dessa önskvärda fördomar. Kuratering av representativa och fördomsfria datamängder är avgörande.
Faktuell drift: Även efter finjustering på högkvalitetsdata kan språkmodeller “hallucinera” felaktiga fakta eller utdata som är inkonsekventa med träningsexemplen över längre konversationer eller prompt. Faktaåtervinningsmetoder kan behövas.
Skalbarhetsutmaningar: Fullständig finjustering av enorma modeller som GPT-3 kräver enorma beräkningsresurser som kan vara ogenomförbara för många organisationer. Effektiva finjusteringsmetoder mildrar delvis detta men har kompromisser.
Katastrofalt glömska: Under fullständig finjustering kan modeller uppleva katastrofalt glömska, där de förlorar vissa allmänna förmågor som lärts under förträning. Multi-uppgiftslärande kan behövas.
IP- och sekretessrisker: Proprietär data som används för finjustering kan läcka in i offentligt släppta språkmodellutdata, vilket medför risker. Differensial sekretess och informationshazardmitigeringsmetoder är aktiva forskningsområden.
Sammantaget, medan exceptionellt användbara, är finjustering en nyanserad process som kräver omsorg kring datakvalitet, identitetsaspekter, riskhantering och prestanda-effektivitetsavvägningar baserat på användningsfallskrav.
Framtiden: Språkmodellanpassning i stor skala
Blickande framåt, kommer framsteg inom finjustering och modellanpassningstekniker att vara avgörande för att låsa upp det fulla potentialen hos stora språkmodeller över olika applikationer och domäner.
Mer effektiva metoder som möjliggör finjustering av ännu större modeller som PaLM med begränsade resurser kan demokratisera tillgång. Automatisering av dataskapande pipelines och promptteknik kan strömlinjeforma specialisering.
Självständiga tekniker för att finjustera från rådata utan märkning kan öppna upp nya gränser. Och kompositionella metoder för att kombinera finjusterade submodeller tränade på olika uppgifter eller data kan tillåta konstruktion av högt anpassade modeller på begäran.
Slutligen, när LLM blir alltmer allmänt, kommer förmågan att anpassa och specialisera dem smidigt för varje tänkbart användningsfall att vara avgörande. Finjustering och relaterade modellanpassningsstrategier är avgörande steg i att förverkliga visionen om stora språkmodeller som flexibla, säkra och kraftfulla AI-assistent som förstärker mänskliga förmågor över alla domäner och företag.
Jag har tillbringat de senaste fem åren med att dyka djupt in i den fascinerande världen av Maskinlärning och Djupinlärning. Min passion och expertis har lett mig till att bidra till över 50 olika mjukvaruprojekt, med särskild fokus på AI/ML. Min pågående nyfikenhet har också lett mig mot Naturlig Språkbehandling, ett område som jag är angelägen om att utforska vidare.
Upptäck mer


Laboratorierna just bevisade att din agents sandlåda bara är ett förslag


New York har just gjort AI:s riktiga flaskhals till en markanvändningsstrid


Varför AI-agenter passerar QA men fortfarande misslyckas i produktion


OpenAIs bästa modell har just släppts bakom en regeringsgrind


AI:s försummelse på grund av överträning, inte finjustering, visar forskning


Thinking Machines Lab Skickar Ut Sitt Första Modell Med 200ms Realtidsinteraktion

