एलन ट्युरिङ (Alan Turing) ले आफ्नो शोधपत्रमा युनिभर्सल ट्युरिङ मेसिन (Universal Turing Machine) को व्याख्या गरेका छन्। युनिभर्सल ट्युरिङ मेसिन एक प्रकारको फाइनाइट स्टेट मेसिन (Finite State Machine) हो जसले अन्य फाइनाइट स्टेट मेसिनहरूलाई सिमुलेट (Simulate) गर्न सक्छ।

हामी यो अवधारणालाई विस्तार गर्न सक्छौँ। के मानवहरू पनि फाइनाइट स्टेट मेसिन (Finite State Machine) हुन् त? यसले कम्प्युटरद्वारा मानवलाई सिमुलेट (Simulate) गर्ने सम्भावना तर्फ संकेत गर्दछ। यो हाम्रो सामान्य बुझाइ विपरीत जान सक्छ किनभने मानव अपेक्षाकृत रूपमा अनपेक्षित (Undeterministic) तरिकाले व्यवहार गर्दछ, तर यो मानवसँग हुने ठूलो संख्याको अवस्थाहरू (States) को कारणले मात्र हुन सक्छ।

परम्परागत रूपमा प्रोग्रामिङ (Programming) भनेको कुनै कार्य पूरा गर्नका लागि क्रमिक चरणहरू लेख्ने विधि हो। तर डीप न्युरल नेटवर्क (Deep Neural Network) को उदयसँगै, यो विधि परिवर्तन भएर मानव मस्तिष्कले कुनै काम सम्पन्न गर्न जसरी गणना गर्छ वा जसरी काम गर्छ, त्यसलाई सिमुलेट (Simulate) गर्ने दिशामा अघि बढेको छ।

यो अवधारणा एउटा न्युरोनको नक्कल गर्ने पर्सेप्ट्रोन (Perceptron) को विकाससँगै सुरु भएको हो। सामान्यतया यसले इनपुट (Input) लिन्छ र तिनको वजन (Weighted) अनुसार आउटपुट (Output) उत्पन्न गर्दछ। एउटा मात्र पर्सेप्ट्रोन (Perceptron) ले सबै जटिलताका कार्यहरू मोडेल (Model) गर्न सक्दैन। त्यसैले हामीलाई कार्यको जटिलता बुझ्नका लागि पर्सेप्ट्रोनलाई बहु-तह (Multiple layers) मा जोड्न आवश्यक हुन्छ।

म जस्तै धेरैजसो मानिसहरू पाइटर्च (PyTorch) को मानवले पढ्न सक्ने कोड (Human Readable code) र थोरै लाइनमा विचारहरू व्यक्त गर्न सक्ने क्षमताका कारण यसको मायामा परेका छन्। पाइटर्च (PyTorch) एउटा पाइथन लाइब्रेरी (Python Library) हो जसले डीप लर्निङ नेटवर्क (Deep Learning Network) मा यी सबै विशेषताहरू सक्षम बनाउँछ।

पाइटर्च (PyTorch) लुआ (Lua) मा आधारित लोकप्रिय डीप लर्निङ लाइब्रेरी ‘टर्च’ (Torch) को पाइथन इम्प्लिमेन्टेसन (Python implementation) हो। यसले दुईवटा कुराहरू लागू गर्दछ:

  1. टेन्सर डाटा प्रकार (Tensor data type) जुन नम्पाई एनडी-एरे (Numpy ndarray) जस्तै हो तर यसमा GPU एक्सेलेरेसन (GPU Acceleration) को समर्थन हुन्छ।
  2. टेप-आधारित अटोगाड प्रणाली (Tape-based autograd system) मा निर्मित डीप न्युरल नेटवर्क (Deep Neural Network)।

अटोग्राड प्रणाली (Autograd system) ले इनपुट वेरिएबल (Input Variable) सँग गणना परिणामको निर्भरताको ग्राफ (Graph) बनाएर काम गर्दछ। इनपुट वेरिएबलमा थोरै परिवर्तन गर्दा परिणाममा आउने परिवर्तन अवलोकन गरेर परिणामको ग्रेडियन्ट (Gradient) पत्ता लगाउन सकिन्छ। यसलाई तलको GIF छविबाट देख्न सकिन्छ।

imperative_graph

आउनुहोस् एउटा प्रोग्राम (Linear regression passing through origin - उद्गम बिन्दुबाट जाने रेखीय प्रतिगमन) सिर्जना गर्ने पहिलो चरणहरू हेरौँ:

  1. स्थापना (Installation)
user@ubuntu:~$ conda install pytorch torchvision cuda80 -c soumith
  1. लाइब्रेरी आयात गर्नुहोस् (Import library)
import torch
from torch.autograd import Variable
  1. इनपुट/लेबललाई वेरिएबलमा परिवर्तन गर्नुहोस् (Convert inputs/label to Variables)
x = Variable(torch.from_numpy(numpy_x).type(dtype),requires_grad=False)
y = Variable(torch.from_numpy(numpy_y).type(dtype),requires_grad=False)
  1. मोडेलको वजन घोषणा गर्नुहोस् (Declare model weights)
w1 = Variable(torch.randn(D_in,D_out).type(dtype),requires_grad=True)
  1. मोडेलको आउटपुट प्राप्त गर्नुहोस् (Get the output of the model)
y_pred = torch.matmul(x.t(),w1)
  1. लस (Loss - अर्थात् तपाईले घटाउन चाहेको लक्ष्य) प्राप्त गर्नुहोस् (Get the loss)
loss = (y - y_pred.t()).pow(2).sum()
  1. ग्रेडियन्ट गणना गर्नुहोस् (Calculate gradient)
loss.backward()
  1. गणना गरिएको ग्रेडियन्ट प्रयोग गरेर प्यारामिटरहरू अपडेट गर्नुहोस् (Update parameters using gradient calculated)
w1.data -= learning_rate * w1.grad.data
  1. जिरो ग्रेडियन्ट (Zero gradient)
 w1.grad.data.zero_()
  1. मोडेलको शुद्धता (Accuracy) बाट सन्तुष्ट नभएसम्म चरण ५ दोहोर्‍याउनुहोस् (Repeat Step 5)

डाउनलोड (Download) Link to heading

१. ipython notebook source code २. slide (स्लाइड)

युट्युब टक (Youtube talk) Link to heading