Včera večer jsem učil nanochat d32, jak počítat 'r' v jahodě (nebo v podobných variantách). Myslel jsem si, že by to mohl být dobrý/zábavný příklad toho, jak přidat schopnosti do nanochatu a napsal jsem zde kompletního průvodce: To se provádí pomocí nové syntetické úlohy 'SpellingBee', která generuje příklady uživatele, který žádá o tento druh problému, a ideální řešení od asistenta. Poté je dolaďujeme v midtrain/SFT, abychom vybavili LLM schopnostmi, nebo dále trénujeme s RL, aby byl robustnější. Existuje mnoho detailů, které je třeba správně vyřešit, zejména u menších velikostí modelů, a průvodce je provede. Jako stručný přehled: - Musíte zajistit rozmanitost uživatelských výzev/dotazů - Zejména u malých modelů, jako je nanochat, musíte být opravdu opatrní s detaily tokenizace, aby byl úkol pro LLM snadný. Konkrétně musíte být opatrní s bílými znaky a pak musíte rozložit výpočet usuzování na mnoho tokenů částečného řešení: nejprve standardizujeme slovo do uvozovek, pak ho vypíšeme (abychom rozdělili tokeny), pak iterujeme a ponecháme explicitní počítadlo, atd. - Doporučuji modelu, aby model řešil dvěma samostatnými způsoby: manuálním způsobem (mentální aritmetika v jeho hlavě) a také pomocí nástroje pomocí interpretu Pythonu, ke kterému má nanochat přístup. To je trochu "kouř a zrcadla", protože každý bankomat s roztokem je "čistý", bez chyb. Člověk by mohl buď upravit úlohu tak, aby simuloval chyby a demonstroval zotavení na příkladu, nebo spustit RL. S největší pravděpodobností nejlépe funguje kombinace obou, kdy první z nich funguje jako apriorní pro RL a dává mu věci, se kterými může pracovat. Pokud by byl nanochat mnohem větším modelem, očekávali byste nebo doufali, že tato schopnost v určitém okamžiku snadněji "vyskočí". Ale protože "mozek" nanochat d32 je velký jako ~včela, pokud chceme, aby počítal r v jahodě, musíme to udělat tak, že ho nadměrně reprezentujeme v datech, abychom povzbudili model, aby se to naučil dříve. Ale funguje to! :)