இயந்திர வழிக் கற்றலின் (Machine Learning) ஒரு பகுதியாக நியூரல் நெட்வொர்க்ஸ் என்பது அமையும். அதாவது மனிதனுடைய மூளை எவ்வாறு கற்கிறது என்பதை முன்னோடியாகக் கொண்டு உருவாக்கப்பட்டதே நியூரல் நெட்வொர்க்ஸ் ஆகும்.முதலில் ஒரு குழந்தை பிறக்கும்போது அதனுடைய மூளைக்கு ஒன்றுமே தெரியாது. சுழியத்திலிருந்து ஆரம்பித்து பின்னர் ஒவ்வொரு விஷயமாகக் கற்கிறது. அதாவது குழந்தையின் மூளையிலுள்ள ஒரு மூளை நரம்பு(நியூரான்) ஒரு புதிய விஷயத்தைக் கற்கிறது. அடுத்ததாக மற்றொரு நரம்பு (மற்றொரு நியூரான்)ஏற்கெனவே கற்றுக் கொண்டுள்ள விஷயத்தோடு சேர்த்து இன்னொரு புதிய விஷயத்தையும் கற்றுக் கொள்கிறது. இவ்வாறே நூறு பில்லியன் எண்ணிக்கையில் இருக்கும் பல்வேறு மூளைநரம்புகள் ஒன்றோடொன்று வலைப்பின்னல் வடிவில் பிணைக்கப்பட்டு (நியூரல் நெட்வொர்க்ஸ்) தொடர்ச்சியாக புதுப்புது விஷயங்களைக் கற்றுக் கொண்டே வருகின்றன. இதை அடிப்படையாக வைத்து உருவாக்கப்பட்டதே நியூரல் நெட்வொர்க்ஸ் எனும் தத்துவம் ஆகும்.
இத்தத்துவமானது பின்வரும் அமைப்பின் மூலம் செயற்கையாக நமது கணினியில் உருவாக்கப்படுகிறது. இவற்றில் முதல்நிலை, இடைநிலை, கடைநிலை எனும் 3 நிலைகளில் பல்வேறு நியூரான்கள் அமைக்கப்படுகின்றன. கணக்கீடுகளுக்காகப் பயன்படுத்தப்படும் முதன்மை அலகு நியூரான் என்று அழைக்கப்படும். ஒவ்வொரு நியூரானும் வெக்டர் எனும் அலகின் மூலம் தங்களுக்கான தரவுகளைப் பெற்றுக் கொள்கின்றன. முதல் நிலையில் உள்ள நியூரான்கள் உள்ளீட்டுக்கானது. கடை நிலையில் உள்ள நியூரான்கள் வெளியீட்டுக்கானது. இடையில் ஒன்று அல்லது அதற்கு மேற்பட்ட மறைமுக அடுக்கில் பல்வேறு நியூரான்களை உருவாக்கி, ஒவ்வொரு அடுக்கிலும் தமக்குரிய அளவுருக்களை தரவுகளுடன் இணைத்து கணக்கீடுகளைத் தொடங்குகின்றன. அதாவது பயிற்ச்சிக்கான தரவுகளைப் பெற்று விளங்குவதே முதல்நிலை உள்ளீட்டு வெக்டர் ஆகும். இவ்வெக்டருடன் weights மற்றும் bias-ஐச் சேர்த்து இடைநிலையின் முதல் அடுக்கில் உள்ள நியூரான்கள் தனது கணக்கீடுகளைத் தொடங்குகின்றன. இம்மதிப்புகளுடன் மீண்டும் weights மற்றும் bias-ஐச் சேர்த்து இடைநிலையில் அடுத்த அடுக்கு காணப்படின், அது தனது கணக்கீடுகளைத் தொடங்கும். இவ்வாறே அடுத்தடுத்த நிலைகளில் கணக்கீடுகள் நிகழ்த்தப்பட்டு கடைசி நிலையில் உள்ள நியூரான் தனது prediction-ஐ வெளியிடுகிறது. இம்முறையிலேயே நியூரல் நெட்வொர்க் தனக்கான புரிதலையும் கற்றலையும் மேற்கொள்கிறது.
Deep Learning என்பது இந்த நியூரல் நெட்வொர்கைப் பல்வேறு விதங்களில் அலசி ஆராய்கிறது. Simple Neural Network, Shallow Neural Network, Deep Neural Network, Convolutional Neural Network, Recurrent Neural Network போன்ற பல்வேறு விதங்களில் இவற்றை உருவாக்கி, தரவுகளை அலசி ஆராய்ந்து கற்றுக் கொள்கிறது. இவற்றை உருவாக்குவதற்கென TensorFlow, PyTorch, Sonnet, Keras, Gluon, Swift, Chainer, DL4J, ONNX போன்ற பல்வேறு கட்டமைப்புகள் deep learning-ல் உள்ளன. இவற்றில் ஒன்றான TensorFlow வழியே deep learning-ல் உள்ள பல்வேறு அமைப்புகளை நாம் உருவாக்கிக் கற்கலாம். இதற்கென முதலில் TensorFlow-ல் உள்ள அடிப்படையான விஷயங்களைப் பற்றிக் கற்றுக்கொள்வோம்.
TensorFlow
Deep Neural Network-ன் பல்வேறு செயல்பாடுகளை ஆராய்வதற்கு உதவும் வகையில் 2011-ல் Google brain குழுவால் உருவாக்கப்பட்ட ஒன்றே Tensorflow ஆகும். இது மிகவும் கடினமான கணித செயல்பாடுகளை சுலபமாக்குவதற்கு ஏற்ற வகையில் உருவாக்கப்பட்ட திறந்த மூல கணித libraryஆகும். இதன் மூலம் தரவுகள் பற்றிய ஆழமான புரிதலை நாம் மேற்கொள்ள முடியும்.
தரவுகள் எந்த அமைப்பில் சேமித்து வைக்கப்படுகின்றதோ அந்த data model-ஆனது டென்சார் என்று அழைக்கப்படும் (Data Model = Tensors). இதுபோன்ற பல்வேறு டென்சார்களுக்கிடையில் தரவுகள் பரிமாறப்பட்டு செயல்பாடுகள் நிகழ்வதையே Tensorflow என்று அழைக்கிறோம் (Data flow = Tensor flow). இத்தகைய பரிமாற்றங்களைக் காண உதவும் கருவியே Tensorboardஆகும் (Dashboard = Tensor board). இக்கருவியில் பல்வேறு டென்சார்களுக்கிடையில் தரவுகள் எவ்விதம் பரிமாறப்படுகின்றன என்பது ஒரு வரைபடம் மூலம் வரைந்து காட்டப்படுகிறது. இதுவே Tensor flow graphஎன்று அழைக்கப்படும். இவ்வரைபடம் nodes மற்றும் edges எனும் இரண்டு அம்சங்களைப் பெற்றிருக்கும். Nodes என்பது கணித செயல்பாடுகளையும் edges என்பது டென்சாரையும் குறிக்கும் (Data flow graph = Tensor flow graph). இது CPU, GPU, Server, Mobile போன்ற கருவிகளில் நிறுவுவதற்கு ஏற்ற வகையில் சுலபமான கட்டமைப்பினைப் பெற்றிருக்கும்.
உதாரண நிரல்:
“hello world” எனும் வாக்கியத்தை வெளிப்படுத்துவதற்கான உதாரணம் பின்வருமாறு அமையும். இதன் மூலம் ஒரு மாதிரி tensor flow நிரலின் அமைப்பு முறையைத் தெரிந்து கொள்ளலாம். இது பொதுவாக 3 நிலைகளை உள்ளடக்கியது.
i) டென்சார்களின் உருவாக்கம் – Construction
ii) டென்சார்களை இயக்கி கணக்கீடுகளை நிகழ்த்துதல் – Running a session
iii) முடிவுகளை ஆராய்தல் – Routing & Analysis
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import tensorflow as tf | |
a = tf.constant("hello world!") | |
print (a) | |
s = tf.Session() | |
print (s.run(a)) | |
s.close() | |
with tf.Session() as s: | |
print(s.run(a)) |
நிரலுக்கான வெளியீடு:
Tensor(“Const:0”, shape=(), dtype=string)
b’hello world!’
b’hello world!’
நிரலுக்கான விளக்கம்:
1. முதலில் tensor flow library-ஐ tf எனும் பெயரில் இறக்குமதி செய்துகொள்ள வேண்டும்.
2. பின்னர் இந்த library-க்குள் உள்ள அனைத்து operators-ஐயும் tf. எனக் கொடுத்து பயன்படுத்த வேண்டும். இங்கு “hello world” எனும் constant-ஐ வெளிப்படுத்த விரும்புகிறோம். எனவே tf.constant() என்பதற்குள் இச்சொற்றொடர் கொடுக்கப்பட்டு a எனும் டென்சார் உருவாக்கப்படுகிறது. print (a) எனக் கொடுக்கும்போது அது constant வகை டென்சாரை கொண்டுள்ளது என்பதை மட்டுமே வெளிப்படுத்தும். அதனுடைய மதிப்பினை வெளிப்படுத்தாது. இதுவே முதல் நிலையான டென்சார்களின் உருவாக்கம் ஆகும்.
3. அடுத்த நிலையில்தான் டென்சாரை இயக்கி மதிப்புகளை வெளிப்படுத்தப் போகிறோம். இதற்கு உதவுவதே session() எனும் operator ஆகும். இதை பின்வரும் இரண்டு விதங்களில் இயக்கலாம்.
விதம்1: tf.session() எனக் கொடுத்து sஎனும் டென்சாரை உருவாக்கவும். பின்னர் s.run() எனக் கொடுத்து constant-ஐக் கொண்டுள்ள டென்சாரை இயக்கி மதிப்பினைக் காணலாம்.. print (s.run(a)) என்பதே அந்த constant கொண்டுள்ள மதிப்பினை வெளிப்படுத்தும். கடைசியாக டென்சார்களை இயக்கி முடித்த பின்னர் நாம் உருவாக்கியுள்ள session-ஐ நிறுத்தி விட வேண்டும் s.close(). இது ஒரு விதம்.
விதம்2: with tf.Session() as s: எனக் கொடுத்து இதற்குள் நாம் இயக்க வேண்டிய அனைத்தையும் கொடுக்கலாம். இது மற்றொரு விதம். இம்முறையில் நாம் இயக்கும்போது கடைசியாக session-ஐ நிறுத்தத் தேவையில்லை.