Maksim Sekretov Node.js-ൽ പ്രവർത്തിക്കുന്ന, വളരെ ചെറിയ ഒരു പ്യുവർ-ജാവാസ്ക്രിപ്റ്റ് (pure-JavaScript) ട്രാൻസ്ഫോർമർ പുറത്തിറക്കി. ഇത് പരിശീലനം നടത്തുമ്പോൾ ഓരോ സ്കെയിലറും (scalar), വെയിറ്റും (weight), ഗ്രേഡിയന്റും (gradient) കാണിച്ചുതരുന്നു. tiny-language-model-neuro-js എന്ന റെപ്പോസിറ്ററി ഉപയോഗിച്ച് ആർക്കും ഒരു റാൻഡം മോഡലിൽ നിന്ന് തുടങ്ങാം, "can human read ?" എന്നൊരു പ്രോംപ്റ്റ് നൽകി അത് പരാജയപ്പെടുന്നത് കാണാം, തുടർന്ന് ഒരു സിംഗിൾ കമാൻഡ് ട്രെയിനിംഗ് റൺ ചെയ്ത് ഉത്തരം ശരിയാകുന്നത് നേരിട്ട് കാണാം.

എന്തുകൊണ്ടാണ് മിക്ക LLM ഡെമോകളും ഗണിതം മറച്ചുവെക്കുന്നത്

സാധാരണ ലാംഗ്വേജ് മോഡൽ ട്യൂട്ടോറിയലുകൾ TensorFlow അല്ലെങ്കിൽ PyTorch എന്നിവയെയാണ് ആശ്രയിക്കുന്നത്. ഈ ഫ്രെയിംവർക്കുകൾ കമ്പ്യൂട്ടേഷൻ ഗ്രാഫുകൾ സ്വയം നിർമ്മിക്കുകയും ഗ്രേഡിയന്റുകൾ പിന്നണിയിൽ കണക്കാക്കുകയും ചെയ്യുന്നു, അതിനാൽ പഠിതാക്കൾക്ക് ഉയർന്ന തലത്തിലുള്ള കോഡും ലോസ് കർവുകളും (loss curves) മാത്രമേ കാണാൻ കഴിയൂ. ഓരോ ടോക്കണും എങ്ങനെ ഒരു എംബെഡിംഗ് ആകുന്നു, അറ്റൻഷൻ സ്കോറുകൾ എങ്ങനെ കണക്കാക്കുന്നു, ഓരോ മാട്രിക്സിലൂടെയും ഗ്രേഡിയന്റുകൾ എങ്ങനെ പിന്നിലേക്ക് ഒഴുകുന്നു തുടങ്ങിയ അടിസ്ഥാന പ്രവർത്തനങ്ങൾ ഇതിൽ അദൃശ്യമായി തുടരുന്നു.

ജാവാസ്ക്രിപ്റ്റ് മോഡൽ വ്യത്യസ്തമായി ചെയ്യുന്നത് എന്താണ്

Sekretov-ന്റെ ഈ ഇംപ്ലിമെന്റേഷൻ എല്ലാറ്റിനെയും ഒരു ഡിപെൻഡൻസി ഇല്ലാത്ത (dependency-free) സിംഗിൾ Node.js സ്ക്രിപ്റ്റിലേക്ക് ചുരുക്കുന്നു. ഇതിന്റെ ട്രെയിനിംഗ് പൈപ്പ്‌ലൈൻ ലളിതമായ ഒരു ക്രമം പിന്തുടരുന്നു:

  • ടോക്കണൈസേഷൻ (Tokenization)
  • എംബെഡിംഗുകൾ (Embeddings)
  • കോസൽ ട്രാൻസ്ഫോർമർ ബ്ലോക്കുകൾ (Causal transformer blocks)
  • മൾട്ടി-ഹെഡ് സെൽഫ്-അറ്റൻഷൻ (Multi-head self-attention)
  • ഫീഡ്-ഫോർവേഡ് നെറ്റ്‌വർക്കുകൾ (FFN)
  • ലാംഗ്വേജ്-മോഡൽ ഹെഡ്, സോഫ്റ്റ്‌മാക്സ് (Language-model head and softmax)
  • ക്രോസ്-എൻട്രോപ്പി ലോസ് (Cross-entropy loss)
  • ബാക്ക്പ്രൊപ്പഗേഷൻ (Backpropagation)

node src/train.js --generalize --adaptive-teach എന്ന കമാൻഡ് പ്രവർത്തിപ്പിക്കുന്നത് മുഴുവൻ ട്രെയിനിംഗ് ലൂപ്പും ആരംഭിക്കും. കോഡ് പ്ലെയിൻ ജാവാസ്ക്രിപ്റ്റ് ആയതുകൊണ്ട്, ഓരോ ടെൻസറും (tensor) ഒരു ലളിതമായ അറേയും, ഓരോ മാട്രിക്സ് മൾട്ടിപ്ലിക്കേഷനും ഒരു വ്യക്തമായ ലൂപ്പും, ഓരോ ഗ്രേഡിയന്റും അതിന്റെ സ്രോതസ്സ് വെയിറ്റിന് തൊട്ടടുത്തും ആയിരിക്കും.

റാൻഡം ഊഹങ്ങളിൽ നിന്ന് ശരിയായ ഉത്തരങ്ങളിലേക്ക്

മോഡൽ ആരംഭിക്കുമ്പോൾ എല്ലാ പാരാമീറ്ററുകളും റാൻഡം ആയിരിക്കും. "can human read ?" എന്ന് ചോദിച്ചാൽ അർത്ഥശൂന്യമായ ഉത്തരങ്ങൾ ലഭിക്കും. ഒരു ചെറിയ പ്രീ-ട്രെയിനിംഗ് ഘട്ടത്തിനും സൂപ്പർവൈസ്ഡ് ഫൈൻ-ട്യൂണിംഗിനും (SFT) ശേഷം, അതേ പ്രോംപ്റ്റിന് യുക്തിസഹമായ ഒരു ഉത്തരം ലഭിക്കും. ലോസ് ഫംഗ്ഷനിലൂടെ നൽകുന്ന ശരിയായ ടോക്കൺ ക്രമങ്ങൾ (teacher signal) എംബെഡിംഗുകൾ, അറ്റൻഷൻ ഹെഡുകൾ, FFN ലെയറുകൾ എന്നിവയിലൂടെ പിന്നിലേക്ക് പടരുകയും ഓരോ സ്കെയിലറും ക്രമമായി അപ്‌ഡേറ്റ് ചെയ്യുകയും ചെയ്യുന്നു.

കാറ്റാസ്ട്രോഫിക് ഫോർഗെറ്റിംഗ് (Catastrophic forgetting) നേരിടുന്നു

ആദ്യകാല പരീക്ഷണങ്ങളിൽ ഒരു പ്രധാന പ്രശ്നം കാണപ്പെട്ടു: പുതിയ കാര്യങ്ങൾ പഠിക്കുമ്പോൾ നേരത്തെ പഠിച്ചവ മറന്നുപോകുന്നു. പുതിയ ഡാറ്റാ പരിചയപ്പെടുത്തുന്നതിനൊപ്പം പഴയ ഉദാഹരണങ്ങളും വീണ്ടും അവതരിപ്പിക്കുന്നതിലൂടെ (rehearsal) Sekretov ഇത് പരിഹരിച്ചു. ഓരോ ടാർഗെറ്റ് ടോക്കണും കുറഞ്ഞത് 95% പ്രോബബിലിറ്റിയിൽ എത്തുകയും പത്ത് തവണ തുടർച്ചയായി പരിശോധനകളിൽ വിജയിക്കുകയും ചെയ്യുമ്പോൾ മാത്രമാണ് ട്രെയിനിംഗ് അവസാനിക്കുന്നത്. ബാഹ്യ ലൈബ്രറികളില്ലാതെ തന്നെ ഗവേഷണത്തിലെ ഒരു പ്രധാന വെല്ലുവിളി ഈ ലളിതമായ ലൂപ്പ് കാണിച്ചുതരുന്നു.

ആർക്കൊക്കെ ഇതിന്റെ ഗുണം ലഭിക്കും, ആർക്കൊക്കെ ഇത് വിട്ടുപോകും

കോടിക്കണക്കിന് പാരാമീറ്ററുകളും GPU ക്ലസ്റ്ററുകളും ഉപയോഗിച്ച് പ്രവർത്തിക്കുന്ന കൊമേഴ്‌സ്യൽ LLM-കളുമായി ഈ പ്രോജക്റ്റ് മത്സരിക്കുന്നില്ല. ആ പ്രകടന വ്യത്യാസം ഇതിനെ പ്രൊഡക്ഷൻ വർക്ക്ലോഡുകൾക്ക് അനുയോജ്യമല്ലാതാക്കുന്നുണ്ടെങ്കിലും, ഒരു സുതാര്യമായ പഠന സഹായിയായി ഇത് മാറ്റുന്നു. ഒരു 'ബ്ലാക്ക് ബോക്സ്' ഫ്രെയിംവർക്കിനുള്ളിൽ എന്താണ് സംഭവിക്കുന്നതെന്ന് മനസ്സിലാക്കാൻ ബുദ്ധിമുട്ടുന്ന വിദ്യാർത്ഥികൾക്കും ഹോബിസ്റ്റുകൾക്കും ഗവേഷകർക്കും ഗണിതം നേരിട്ട് കോഡായി കാണാൻ കഴിയുന്ന ഒരു സാൻഡ്ബോക്സ് ഇപ്പോൾ ലഭ്യമാണ്.

എന്തൊക്കെയാണ് കുറവുള്ളത്, ഈ പ്രോജക്റ്റിന് എങ്ങോട്ട് പോകാം

ഇതിന്റെ ഇംപ്ലിമെന്റേഷൻ മനഃപൂർവ്വം ലളിതമാക്കിയതിനാൽ, കോഡ് വായിക്കാൻ എളുപ്പമാണെങ്കിലും സ്കെയിലബിലിറ്റി (scalability) പരിമിതമാണ്.

അടുത്തതായി ശ്രദ്ധിക്കേണ്ടത്

ഈ റെപ്പോസിറ്ററി ഇപ്പോൾ GitHub-ൽ ലഭ്യമാണ്.

ചുരുക്കത്തിൽ: ഒരു ട്രാൻസ്ഫോർമറിനെ പ്യുവർ ജാവാസ്ക്രിപ്റ്റിലേക്ക് ചുരുക്കിയതിലൂടെ, അതീവ സങ്കീർണ്ണമായ ഒരു സാങ്കേതികവിദ്യയെ വായിക്കാവുന്നതും എഡിറ്റ് ചെയ്യാവുന്നതുമായ ഒരു സ്ക്രിപ്റ്റാക്കി Sekretov മാറ്റിയിരിക്കുന്നു. വേഗത കുറവാണെന്നത് ഒരു പോരായ്മയാണെങ്കിലും, ഇതിലൂടെ ലഭിക്കുന്ന ഉൾക്കാഴ്ച വലുതാണ്—ഒരു ലാംഗ്വേജ് മോഡൽ എങ്ങനെ പഠിക്കുന്നു, മറക്കുന്നു, വീണ്ടും പഠിക്കുന്നു എന്നത് ഓരോ സ്കെയിലറിലൂടെയും ഇനി ആർക്കും നേരിട്ട് കാണാൻ കഴിയും.