നിങ്ങളുടെ ആദ്യത്തെ ഡീപ് ലേണിംഗ് ലൈബ്രറി ഒരു മോഡൽ പ്രവർത്തിപ്പിക്കുക എന്നതിലുപരിയായി പ്രവർത്തിക്കുന്നു. അത് ഗ്രേഡിയന്റുകളെ (gradients), ലെയറുകളെ (layers), ഡാറ്റാ ഫ്ലോയെയും (data flow) കുറിച്ചുള്ള നിങ്ങളുടെ ചിന്താഗതിയെ രൂപപ്പെടുത്തുന്നു. തെറ്റായ ഒന്ന് തിരഞ്ഞെടുത്താൽ, ന്യൂറൽ നെറ്റ്വർക്കുകൾ യഥാർത്ഥത്തിൽ എങ്ങനെ പ്രവർത്തിക്കുന്നു എന്ന് പഠിക്കുന്നതിന് പകരം ബോയിലർപ്ലേറ്റ് (boilerplate) കോഡുകൾക്കൊപ്പം പോരാടി ആഴ്ചകൾ ചിലവഴിക്കേണ്ടി വരും. ശരിയായ ഒന്ന് തിരഞ്ഞെടുത്താൽ, കോഡ് നിങ്ങളുടെ തടസ്സങ്ങൾ നീക്കുന്നതിനാൽ ആശയങ്ങൾ പെട്ടെന്ന് മനസ്സിലാക്കാൻ സാധിക്കും.
മിക്ക തുടക്കക്കാരും തങ്ങളുടെ തിരഞ്ഞെടുപ്പ് Keras, PyTorch, TensorFlow എന്നീ മൂന്ന് ലൈബ്രറികളിലേക്ക് മാത്രമായി പരിമിതപ്പെടുത്തുന്നു. JAX എന്നൊരു ലൈബ്രറിയുമുണ്ട്, എന്നാൽ ഒരു Jacobian എന്നാൽ എന്താണെന്ന് അറിയുന്നതുവരെ അത് അവഗണിക്കുന്നതാണ് നല്ലത്.
"Beginner-Friendly" എന്നാൽ യഥാർത്ഥത്തിൽ എന്താണ് അർത്ഥമാക്കുന്നത്?
ഡോക്യുമെന്റേഷൻ (documentation) കട്ടിയുള്ളതുകൊണ്ട് മാത്രം ഒരു ലൈബ്രറി "ഫ്രണ്ട്ലി" ആകണമെന്നില്ല. ട്യൂട്ടോറിയലിൽ നിങ്ങൾ കണ്ട ഗണിതശാസ്ത്രം പോലെ കോഡ് വായിക്കാൻ കഴിയുമ്പോഴും, ഒരു എറർ മെസ്സേജ് (error message) ഒരു C++ ബാക്കെൻഡിൽ നിന്നുള്ള സ്റ്റാക്ക് ട്രാസ് (stack trace) കാണിക്കുന്നതിന് പകരം നിങ്ങളുടെ തെറ്റ് ചൂണ്ടിക്കാണിക്കുമ്പോഴുമാണ് അത് ഫ്രണ്ട്ലി ആകുന്നത്. ഫ്രെയിംവർക്കിന്റെ ആന്തരിക ഘടനയ്ക്കുള്ളിൽ ആഴത്തിൽ ഒളിഞ്ഞിരിക്കുന്ന ടെൻസർ ഷേപ്പ് മിസ്മാച്ചുകളെ (tensor shape mismatches) കുറിച്ച് ചിന്തിക്കുന്നതിന് പകരം, ലേണിംഗ് റേറ്റുകളെയും (learning rates) ആക്ടിവേഷൻ ഫംഗ്ഷനുകളെയും (activation functions) കുറിച്ച് ചിന്തിക്കാനാണ് നിങ്ങൾ ആഗ്രഹിക്കുന്നത്.
Keras: ഫലങ്ങൾ കാണാൻ ഇവിടെ നിന്ന് തുടങ്ങുക
ഒരു ലളിതമായ ആശയത്തിലാണ് Keras നിർമ്മിച്ചിരിക്കുന്നത്. ഒരു കോഫി കുടിക്കുന്ന സമയത്തിനുള്ളിൽ തന്നെ നിങ്ങൾക്ക് ഒരു ആശയത്തിൽ നിന്ന് പരിശീലനം ലഭിച്ച ഒരു മോഡലിലേക്ക് എത്താൻ കഴിയണം എന്നതാണ് അത്. ബാക്ക്പ്രൊപ്പഗേഷൻ (backpropagation), ഗ്രാഫ് ഒപ്റ്റിമൈസേഷൻ (graph optimization) എന്നിവയുടെ സങ്കീർണ്ണതകൾ ഒരു ക്ലീൻ API-ക്ക് പിന്നിൽ ഒളിപ്പിച്ചുവെക്കുന്നതിനാൽ, ഒരു ഇമേജ് ക്ലാസിഫയർ (image classifier) പോലും പന്ത്രണ്ടോളം വരികൾ വരുന്ന പൈത്തൺ (Python) കോഡിൽ തയ്യാറാക്കാൻ സാധിക്കും.
ഒരു Sequential ഒബ്ജക്റ്റിനുള്ളിൽ ലെയറുകൾ അടുക്കിവെച്ചുകൊണ്ട് നിങ്ങൾക്ക് ഒരു മോഡൽ നിർവചിക്കാം, ഒരു ഒപ്റ്റിമൈസറും (optimizer) ലോസ് ഫംഗ്ഷനും (loss function) ചേർക്കാൻ model.compile() വിളിക്കാം, തുടർന്ന് പരിശീലനത്തിനായി model.fit() വിളിക്കാം. ഇതിന്റെ സിന്റാക്സ് (syntax) ഒരു ചെക്ക്ലിസ്റ്റ് പോലെ തോന്നും. ഇൻപുട്ട് ഷേപ്പ് (Input shape)? കഴിഞ്ഞു. ഡെൻസ് ലെയർ (Dense layer)? കഴിഞ്ഞു. ട്രെയിനിംഗ് ലൂപ്പ് (Training loop)? കൈകാര്യം ചെയ്തു. ഇത് പ്രധാനപ്പെട്ട കാര്യങ്ങളിൽ നേരത്തെ തന്നെ പരീക്ഷണങ്ങൾ നടത്താൻ നിങ്ങളെ സഹായിക്കുന്നു. മറ്റൊരു ലെയർ ചേർക്കുന്നത് സഹായിക്കുമോ? ReLU-വിന് പകരം sigmoid ഉപയോഗിക്കണോ? ബാച്ച് സൈസ് (batch size) മാറ്റിയാൽ എന്ത് സംഭവിക്കും?
കോൺഫിഗറേഷൻ ഫയലുകളിൽ മുങ്ങിപ്പോകാതെ ലെയറുകളും ഒപ്റ്റിമൈസറുകളും എന്താണ് ചെയ്യുന്നതെന്ന് പഠിക്കുക എന്നതാണ് നിങ്ങളുടെ ലക്ഷ്യമെങ്കിൽ, Keras ആ തടസ്സങ്ങൾ നീക്കുന്നു. പാക്കേജ് ഇൻസ്റ്റാൾ ചെയ്ത് ഒരു മണിക്കൂറിനുള്ളിൽ തന്നെ യഥാർത്ഥ ചിത്രങ്ങൾ ഉപയോഗിച്ച് ഒരു കൺവല്യൂഷണൽ നെറ്റ്വർക്ക് (convolutional network) പ്രവർത്തിപ്പിക്കാൻ നിങ്ങൾക്ക് കഴിയും. Keras ഡിഫോൾട്ട് ആയി TensorFlow-ന് മുകളിലാണ് പ്രവർത്തിക്കുന്നത് എന്നതിനാൽ, ഹൈ-ലെവൽ API വിട്ടുപോകാതെ തന്നെ പ്രൊഡക്ഷൻ ഗ്രേഡ് ഡാറ്റാ പൈപ്പ്ലൈനുകൾക്കും (production-grade data pipelines) നിങ്ങൾക്ക് പ്രവേശനം ലഭിക്കുന്നു.
എന്നാൽ നിങ്ങൾ നിശ്ചിത പരിധികളിൽ നിന്ന് പുറത്തുകടക്കാൻ ശ്രമിക്കുമ്പോൾ ചില പരിമിതികൾ നേരിടാം. ഇന്റർമീഡിയറ്റ് ആക്ടിവേഷനുകളെ (intermediate activations) ആശ്രയിക്കുന്ന ഒരു കസ്റ്റം ലോസ് ഫംഗ്ഷൻ (custom loss function) എഴുതേണ്ടി വരികയോ, അല്ലെങ്കിൽ ട്രെയിനിംഗിനിടെ ബാക്ക്വേർഡ് പാസ് (backward pass) മാറ്റാൻ ആഗ്രഹിക്കുകയോ ചെയ്താൽ Keras പരിമിതമായി തോന്നാം. ഇതിൽ മറ്റ് വഴികളുണ്ടെങ്കിലും, അവ ഉപയോഗിക്കുക എന്നാൽ ഫ്രെയിംവർക്കിന്റെ റ $\text{raw}$ കോഡിലേക്ക് ഇറങ്ങിച്ചെല്ലുക എന്നാണ് അർത്ഥം. കസ്റ്റം റിസർച്ച് ലോജിക്കിന് (custom research logic) അത് ഒരു വലിയ തടസ്സമാണ്.
PyTorch: ഉള്ളറിഞ്ഞ് പഠിക്കാം
PyTorch ഒരു ന്യൂറൽ നെറ്റ്വർക്കിനെ ഒരു സാധാരണ പൈത്തൺ പ്രോഗ്രാം പോലെയാണ് കാണുന്നത്. torch.nn.Module സബ്ക്ലാസ് ഉപയോഗിച്ച് നിങ്ങൾക്ക് ഒരു മോഡൽ നിർവചിക്കാം. ഇൻപുട്ട് എങ്ങനെ ഔട്ട്പുട്ട് ആകുന്നു എന്ന് വിവരിക്കുന്ന ഒരു പൈത്തൺ മെത്തേഡ് മാത്രമാണ് ഫോർവേഡ് പാസ് (forward pass). നിങ്ങൾ loss.backward() വിളിക്കുമ്പോൾ, PyTorch തത്സമയം ഗ്രേഡിയന്റുകൾ കണക്കാക്കുന്നു.
ഇതിന് കാരണം PyTorch അതിന്റെ കമ്പ്യൂട്ടേഷൻ ഗ്രാഫ് (computation graph) ഡൈനാമിക് ആയി നിർമ്മിക്കുന്നു എന്നതാണ്. ചില ഫ്രെയിംവർക്കുകൾ ഡാറ്റ ഉപയോഗിക്കുന്നതിന് മുമ്പ് തന്നെ മുഴുവൻ മോഡൽ ഘടനയും നിർവചിക്കാൻ ആവശ്യപ്പെടുന്നു. എന്നാൽ ഒരു ബാച്ച് നെറ്റ്വർക്കിലൂടെ കടത്തിവിടുന്നത് വരെ PyTorch കാത്തിരിക്കുന്നു. ബാച്ചുകൾക്കിടയിൽ നിങ്ങളുടെ ഇൻപുട്ട് സൈസ് മാറുന്നുണ്ടെങ്കിൽ, അല്ലെങ്കിൽ ഷേപ്പ് മിസ്മാച്ച് പരിശോധിക്കാൻ ഫോർവേഡ് പാസിന്റെ പകുതിയിൽ ഒരു ടെൻസർ പ്രിന്റ് ചെയ്യണമെന്നുണ്ടെങ്കിൽ, ഫ്രെയിംവർക്ക് പരാതിപ്പെടില്ല. നിങ്ങൾക്ക് ഒരു സ്റ്റാൻഡേർഡ് ഡീബഗ്ഗർ (debugger) ഉപയോഗിക്കാം. നിങ്ങളുടെ മോഡൽ ക്ലാസിനുള്ളിൽ print() സ്റ്റേറ്റ്മെന്റുകൾ ഇടാം. ഓരോ ടെൻസർ ഡൈമെൻഷനും ഒരു പസിൽ പോലെ തോന്നുമ്പോൾ ഈ ലാളിത്യം വളരെ പ്രധാനമാണ്, കാരണം ഇത് ഡീബഗ്ഗിംഗിനെ സാധാരണ പ്രോഗ്രാമിംഗ് പോലെ തോന്നിപ്പിക്കുന്നു.
ട്രെയിനിംഗ് യഥാർത്ഥത്തിൽ എങ്ങനെ പ്രവർത്തിക്കുന്നു എന്ന് നിങ്ങൾക്ക് മനസ്സിലാക്കണമെന്നുണ്ടെങ്കിൽ—ഫോർവേഡ് പാസ് എങ്ങനെ പ്രെഡിക്ഷനുകൾ നൽകുന്നു, ബാക്ക്വേർഡ് പാസ് എങ്ങനെ എറർ വിതരണം ചെയ്യുന്നു, ഒപ്റ്റിമൈസർ എങ്ങനെ വെയ്റ്റുകൾ (weights) അപ്ഡേറ്റ് ചെയ്യുന്നു—അതിനായി PyTorch നിങ്ങളെ ആഴത്തിൽ പഠിക്കാൻ പ്രേരിപ്പിക്കുന്നു. ആ സുതാര്യത കാരണമാണ് ഇത് നിലവിൽ ഗവേഷണ രംഗത്ത് മുന്നിൽ നിൽക്കുന്നതും പുതിയ ഭൂരിഭാഗം AI തൊഴിൽ പരസ്യങ്ങളിലും കാണപ്പെടുന്നതും. നിങ്ങൾ arXiv-ൽ ഒരു പേപ്പർ വായിക്കുമ്പോൾ, അതിന്റെ ഔദ്യോഗിക ഇംപ്ലിമെന്റേഷൻ PyTorch-ൽ എഴുതപ്പെട്ടതാകാൻ വലിയ സാധ്യതയുണ്ട്.
TensorFlow: മോഡൽ എവിടെയാണ് പ്രവർത്തിക്കുന്നത് എന്ന് ചിന്തിക്കുക
TensorFlow അമിതമായി കോഡ് എഴുതേണ്ടി വരുന്നതും (verbose) പഠിക്കാൻ പ്രയാസമുള്ളതുമാണെന്നായിരുന്നു അതിന്റെ പഴയ പേര്. Keras അതിന്റെ ഔദ്യോഗിക ഹൈ-ലെവൽ API ആയി മാറിയതോടെ ഇതിൽ വലിയ മാറ്റങ്ങൾ വന്നു. ആധുനിക പതിപ്പുകളിൽ, നിങ്ങൾ Keras ഇംപോർട്ട് ചെയ്യുമ്പോൾ, നിങ്ങൾ അറിയാതെ തന്നെ TensorFlow ആണ് പ്രവർത്തിക്കുന്നത്. എങ്കിലും, മോഡൽ പരിശീലനം പൂർത്തിയായതിന് ശേഷം എന്ത് സംഭവിക്കുന്നു എന്നതിനെ അടിസ്ഥാനമാക്കി TensorFlow ഇപ്പോഴും ഒരു പ്രത്യേക തിരഞ്ഞെടുപ്പായി നിലനിൽക്കുന്നു.
ഈ ഇക്കോസിസ്റ്റം വിന്യാസത്തിനായി രൂപകൽപ്പന ചെയ്തിട്ടുള്ളതാണ്. ഫോണുകൾ, മൈക്രോകൺട്രോളറുകൾ, പരിമിതമായ മെമ്മറി ശേഷിയുള്ള ഇൻഡസ്ട്രിയൽ സെൻസറുകൾ എന്നിവയിൽ പ്രവർത്തിക്കുന്നതിനായി TensorFlow Lite മോഡലുകളെ കംപ്രസ്സ് ചെയ്യുന്നു. ഡാറ്റ ഒരു സെർവറിലേക്ക് അയക്കാതെ തന്നെ ബ്രൗസറിനുള്ളിൽ നേരിട്ട് ഇൻഫറൻസ് നടത്താൻ TensorFlow.js സഹായിക്കുന്നു. വലിയ പ്രൊഡക്ഷൻ എൻവയോൺമെന്റുകളിൽ മോഡൽ വേർഷനിംഗും ബാച്ച് പ്രിഡിക്ഷനുകളും TensorFlow Serving കൈകാര്യം ചെയ്യുന്നു.
നിങ്ങളുടെ പ്രോജക്റ്റിന് കഠിനമായ ഭൗതികമായ
