Machine Learning – 31 – Artificial Neural Networks

ஒரு நியூரான் கற்றுக் கொள்வதை அடிப்படையாக வைத்து கற்றுக் கொள்வது perceptron என்றால், பல்வேறு நியூரான்களைக் கொண்ட மனித மூளை கற்றுக் கொள்வதை அடிப்படையாக வைத்து கற்றுக் கொள்வது Multi-layer perceptron ஆகும். அதாவது செயல்களை அடிப்படையாகக் கொண்டு நியூரான்கள் கற்கின்றன. நியூரான்கள் கற்றுக் கொண்டதை வைத்து மனித மூளை கற்கிறது. இதே முறையில் தரவுகளை அடிப்படையாகக் கொண்டு perceptron கற்கின்றன. Perceptron-களை வைத்து directed acyclic graph-ஐ உருவாக்கி MLP கற்கிறது. இதுவே Artificial neural network என்று அழைக்கப்படுகிறது.

Perceptron என்பது நேர்கோடு மூலம் பிரிக்கக்கூடிய தரவுகளை வகைப்படுத்த உதவும் என்று ஏற்கெனவே பார்த்தோம். Non-linear முறையில் அமைந்துள்ள தரவுகளைப் பிரிப்பதற்கு MLP-ஐப் பயன்படுத்தலாம். எனவேதான் இது universal function approximator என்று அழைக்கப்படுகிறது. இது தவிர kernalization என்ற தத்துவமும் non-linear முறையில் அமைந்துள்ள தரவுகளைப் பிரிப்பதற்கு உதவும். இதைப்பற்றி SVM என்ற பகுதியில் ஏற்கெனவே பார்த்து விட்டோம்.

கீழ்க்கண்ட எடுத்துக்காட்டில், 16 பயிற்சித் தரவுகள் கொடுக்கப்பட்டுள்ளன. X -ல் அதனுடைய 2 features-ம், y-ல் அவை எந்த வகையின் கீழ் பிரிக்க வேண்டும் எனும் விவரமும் பயிற்சிக்கு அளிக்கப்பட்டுள்ளன. 1,2,3 எனும் மூன்று வகைகளின் கீழ் தரவுகள் பிரிக்கப்படுவதால் இது multi-class classification-க்கான உதாரணம் ஆகும்.


from mlxtend.classifier import MultiLayerPerceptron as MLP
from mlxtend.plotting import plot_decision_regions
import matplotlib.pyplot as plt
import numpy as np
X = np.asarray([[6.1,1.4],[7.7,2.3],[6.3,2.4],[6.4,1.8],[6.2,1.8],[6.9,2.1],
[6.7,2.4],[6.9,2.3],[5.8,1.9],[6.8,2.3],[6.7,2.5],[6.7,2.3],[6.3,1.9],[6.5,2.1 ],[6.2,2.3],[5.9,1.8]] )
X = (X – X.mean(axis=0)) / X.std(axis=0)
y = np.asarray([0,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2])
nn = MLP(hidden_layers=[50],l2=0.00,l1=0.0,epochs=150,eta=0.05,
momentum=0.1,decrease_const=0.0,minibatches=1,random_seed=1,print_progress=3)
nn = nn.fit(X, y)
fig = plot_decision_regions(X=X, y=y, clf=nn, legend=2)
plt.show()
print('Accuracy(epochs = 150): %.2f%%' % (100 * nn.score(X, y)))
nn.epochs = 250
nn = nn.fit(X, y)
fig = plot_decision_regions(X=X, y=y, clf=nn, legend=2)
plt.title('epochs = 250')
plt.show()
print('Accuracy(epochs = 250): %.2f%%' % (100 * nn.score(X, y)))
plt.plot(range(len(nn.cost_)), nn.cost_)
plt.title('Gradient Descent training (minibatches=1)')
plt.xlabel('Epochs')
plt.ylabel('Cost')
plt.show()
nn.minibatches = len(y)
nn = nn.fit(X, y)
plt.plot(range(len(nn.cost_)), nn.cost_)
plt.title('Stochastic Gradient Descent (minibatches=no. of training examples)')
plt.ylabel('Cost')
plt.xlabel('Epochs')
plt.show()

பயிற்சித் தரவுகளைக் கொண்டு MLP-க்குப் பயிற்சி அளிக்கும்போது, அது பின்வருமாறு தரவுகளைப் பிரிக்கிறது. இதில் 1 எனும் வகையின் கீழ் பிரிக்கப்பட வேண்டியது அதற்குரிய இடத்தில் சரியாக அமையாமல், 0 எனும் வகையின்கீழ் பிரிக்கப்பட்டிருப்பதைக் காணலாம்.

எனவே MLP-க்குப் பயிற்சி அளிக்கும்போது கொடுக்கப்பட்டுள்ள epochs-ன் எண்ணிக்கையை 150-லிருந்து 250-என மாற்றி பயிற்சி அளித்துப் பார்க்கவும். இப்போது அனைத்துத் தரவுகளும் சரியாக வகைப்படுத்தப்பட்டிருப்பதைக் காணலாம்.

nn.epochs = 250
nn = nn.fit(X, y)
fig = plot_decision_regions(X=X, y=y, clf=nn, legend=2)
plt.title(‘epochs = 250’)
plt.show()

எனவேதான் 150 எனும்போது அதன் accuracy 93.75% எனவும், 250 எனும்போது அதன் accuracy 100.00% எனவும் உயர்ந்திருப்பதைக் காணலாம்.

Iteration: 150/150 | Cost 0.06 | Elapsed: 0:00:00 | ETA: 0:00:00Accuracy(epochs = 150): 93.75%
Iteration: 250/250 | Cost 0.04 | Elapsed: 0:00:00 | ETA: 0:00:00Accuracy(epochs = 250): 100.00%

அடுத்ததாக ஒவ்வொரு epoch-லும் அதன் cost மதிப்பு எவ்வாறு குறைகிறது என்பது வரைபடமாக வரைந்து காட்டப்படுகிறது. MLP-க்குப் பயிற்சி அளிக்கும்போது கொடுக்கப்பட்டுள்ள parameter-களில் ஒன்றான minibatches -ன் மதிப்பு 1 என அமைந்தால் gradient descent முறையில் தரவுகளுக்குப் பயிற்சி அளிக்கும். இதைப் பற்றித்தான் perceptron-ல் கற்றோம்.

அதுவே minibatches -ன் மதிப்பு கொடுக்கப்பட்டுள்ள மாதிரித் தரவுகளின் எண்ணிக்கையாக அமைந்தால், அது stochastic gradient descent முறையில் தரவுகளுக்குப் பயிற்சி அளிக்கும். அதாவது ஒவ்வொரு தரவுகளாக சோதித்து gradient முறையில் cost மதிப்பை குறைத்து வராமல், மொத்தமாக அனைத்துப் பயிற்சித் தரவுகளையும் எடுத்துக் கொண்டு குறைந்த cost-ஐக் கண்டுபிடிக்க உதவுவதே stochastic gradient descent ஆகும். எனவேதான் கீழ்க்கண்ட வரைப்படத்தில், ஒவ்வொரு epoch-லும் அதனுடைய cost மதிப்பு அனைத்துப் பயிற்சித் தரவுகளையும் சேர்த்து கணக்கிடப்படுவதால், அவை zig-zag வடிவில் அமைந்திருப்பதைக் காணலாம். மிக அதிக அளவு எண்ணிக்கையில் பயிற்சித் தரவுகள் இருக்கும்போது, gradient descent அவை அனைத்தையும் ஒவ்வொன்றாக ஆராய்ந்து global optimum சென்றடைய மிகுந்த நேரம் பிடிக்கும். ஆகையால், இது போன்ற தருணங்களில் stochastic-ஐப் பயன்படுத்தலாம். இதுவே batch gradient descent என்றும் அழைக்கப்படுகிறது.

 

 

 

%d bloggers like this: