Gisteravond heb ik nanochat d32 geleerd hoe je 'r' in aardbei (of vergelijkbare variaties) telt. Ik dacht dat dit een goed/leuk voorbeeld zou zijn van hoe je mogelijkheden aan nanochat kunt toevoegen en ik heb hier een volledige gids geschreven: Dit gebeurt via een nieuwe synthetische taak `SpellingBee` die voorbeelden genereert van een gebruiker die om dit soort probleem vraagt, en een ideale oplossing van een assistent. We trainen vervolgens door middel van midtrain/SFT finetuning op deze voorbeelden om het LLM de mogelijkheid te geven, of we trainen verder met RL om het robuuster te maken. Er zijn veel details die goed moeten zijn, vooral bij kleinere modelgroottes, en de gids loopt hier doorheen. Als een kort overzicht: - Je moet zorgen voor diversiteit in gebruikersprompts/vragen - Voor kleine modellen zoals nanochat, moet je echt voorzichtig zijn met de tokenisatie-details om de taak gemakkelijk te maken voor een LLM. In het bijzonder moet je voorzichtig zijn met witruimtes, en dan moet je de redeneertaken verspreiden over veel tokens van gedeeltelijke oplossingen: eerst standaardiseren we het woord in aanhalingstekens, dan spellen we het (om tokens op te splitsen), dan itereren we en houden we een expliciete teller bij, enz. - Ik moedig het model aan om het probleem op twee verschillende manieren op te lossen: een handmatige manier (mentale rekenkunde in zijn hoofd) en ook via het gebruik van de Python-interpreter waar nanochat toegang toe heeft. Dit is een beetje "rook en spiegels" omdat elke oplossing op dit moment "schoon" is, zonder fouten. Men zou de taak kunnen aanpassen om fouten te simuleren en herstel door middel van voorbeelden te demonstreren, of RL uitvoeren. Waarschijnlijk werkt een combinatie van beide het beste, waarbij de eerste als de prior voor de RL fungeert en het dingen geeft om mee te werken. Als nanochat een veel groter model was, zou je verwachten of hopen dat deze mogelijkheid op een gegeven moment gemakkelijker "tevoorschijn" zou komen. Maar omdat de "hersenen" van nanochat d32 de grootte van een ~bij zijn, als we willen dat het r's in aardbei telt, moeten we dit doen door het in de data te over-representeren, om het model aan te moedigen het eerder te leren. Maar het werkt! :)