- Intro
- Part - 1 - Simple Neural Network
- Part - 2 - Backpropagation
- Part - 3 - Gradient Descent
- Part - 4 - Text Classifier
áĄááŻááąáŹááşáááŻááşá¸ Machine Learning, Deep Learning, Artificial Neural Network (ANN), Convolutional Neural Network (CNN) á áááźááˇáş AI áááŻááşá¸áááŻááşáᏠáááşá¸áááŹááťáŹá¸ ááąááşá áŹá¸áážáááşá á áŹááąá¸áá°áĄááąáážááˇáş á¤ááášááá˝ááş áá áşá ááŻááşáááşáááş ááąáˇááŹááąááąáŹ áá˝ááşááťá°ááŹáááášááśáááŹá¸ áááŻááşááźááşá¸ááźáąáŹááşáˇ áááşááąáŹááşá¸á ááąááşá áŹá¸ááŤá áááşá¸áááŹááťáŹá¸ááᯠááťááşááźááşá¸ ááąáˇááŹáĄááŻáśá¸ááťááźááşá¸ áááźáŻáᲠáááşááźáááşáááŻááşááŹáážáŻááᯠááážáááŹáááˇáş áĄááťáááşáá á áąáŹááˇáşááąáˇáážáááąáŹ áĄááąáˇáĄáááźáąáŹááˇáş áááşááąáŹááşá¸ áááŻáĄááťáááşáá áááŻáááşá¸áááŹááťáŹá¸ááᯠááąáŹááşá¸áá˝ááşáážáśáˇá ááşá á˝áŹ áááážáááźááşá¸ ááážáááąá¸ááťáąá
áĄáááşááźáąáŹááˇáş ááąááşá áŹá¸á áááşá¸áááŹáá áşááťáŹá¸ááᯠááťááşááźááşá¸ áááąáˇááŹááááşá¸áá°áá°á ááąááşá áŹá¸á áĄááťááŻáˇááąáŹ áááşá¸áááŹááťáŹá¸áááş áá°áˇááąáŹááş ááąáŹáááźáŽá¸ áá áşááŻááŻáśá¸ áá áşááąááşáááşá¸ áá˝áŹá¸á áąááąáŹááşáĄáąáŹááş áááşáááşáá˝ááşá¸ááąáŤááş áĄáąáŹááşááźááşáá˝áŹá¸ááźááąáŹáşáááşá¸ áĄááťááŻáˇááá° ááąáˇááźááşááááťáąáŹááş ááááşááźááş áááşááąáŹááşáá˝áŹá¸áážááşá¸ááá ááźá áşáááşááźááąáááşá áááŻáˇááźáąáŹááˇáş áááŻááşááąá¸áááŻááşáᏠááťáŹá¸áážáááˇáşáĄááźááş áĄááťááşá¸áá°áážááąáŹ á áŹááąá¸áá°áááş ááąááşá áŹá¸áááŻááşá¸ áááąáˇááŹáᲠááąáˇááźááşáááťáąáŹááş áááŻááşáᏠááąááťáŹááźáŽáááŻááž á ááąáˇááŹáááˇáş áĄááąáˇáĄááťááˇáş áážáááąáááşá
áááŻáĄááŤáá˝ááş ML/DL áĄá áážáááąáŹ AI áážááˇáş áááşá ááşáááşá¸áááŹááťáŹá¸áááş ááąááşá áŹá¸á áĄáááˇáşááᯠááťáąáŹáşáá˝ááşá áá áşááąááşáááşá¸á áąáááˇáş áĄáááˇáşááᯠááąáŹááşáážáááŹááźááąááźáŽá áááŻáˇááźáąáŹááˇáş á áááşááąáˇááŹáááş áááˇáşááźáŽááŻáá°áá áĄáááşá¸áááş á áááşááąáˇááŹááźááˇáşáááááşá áááŻáˇáááŻáˇ ááąáˇááŹááźááˇáşááŹáá˝ááş "Hello World" áĄáááˇáş áĄáá˝ááşáááŻá¸áážááşá¸á áĄááźáąááśááťáážááąáŹ Neural Network ááŻáśá¸ Machine Learning ááááŻááááşáááşáá áşááŻááᯠPython áĄááŻáśá¸ááźáŻ ááąá¸ááŹá¸ááźááŹá¸áááˇáş ááá°ááŹáá áşááŻáĄáŹá¸ ááąáˇááŹááááąáááşá
áááŻáááŻáˇááąáˇááŹááááŹáá˝ááş.. á áááşáá°á¸ááąáŤááşááąáŤááşáážááˇáş áĄáááŻá፠Python ááááŻááááşááᯠááá°ááŹáá°á áááá áááşá¸áážáŽá¸ááťá˝ááşá¸ááťááşáᏠJavaScript ááźááˇáş áĄááŹá¸áá° ááááŻááááşáááşáá áşáᯠá ááşá¸áááşááąá¸ááŹá¸ ááźááˇáşáááááşá áááŻáááŻáˇ ááąá¸ááŹá¸ááŹá¸áááˇáş ááááŻááááşááᯠá áááşáááşá áŹá¸áá°ááťáŹá¸ ááąáˇááŹá ááşá¸áááşáááŻááşáááş ááźááşáááş ááťážááąáááŻá áááş ááźá áşáááááşá á¤ááąááŹáá˝ááş Machine Learning áážááˇáş Neural Network áááŻáˇáĄááźáąáŹááşá¸ áĄááťááş ááťá˛áˇáááŻááşáááş áááŻááşááąá ááťá˛áˇáááŻááşááąáŹááşáááˇáş áááŻááŻá á áŹááąá¸áá°áááŻááşáááŻááşáá˝ááş ááźááˇáşá áŻáśááźááşá¸ ááážáááąá¸á á¤ááąááŹáá˝ááş ááąá¸ááŹá¸ááŹá¸áááˇáş ááááŻááááş áĄááźáąáŹááşá¸áááŻáᏠáĄáááşá¸áááş áážááşá¸ááźáááŻááźááşá¸ ááźá áşááąáááşá
áĄáąáŹááşá፠Array ááᯠááąáˇááŹááźááˇáşááŤá
var inputs = [
[0, 0, 1], // -> 0
[1, 1, 1], // -> 1
[1, 0, 1], // -> 1
[0, 1, 1] // -> 0
];
ᤠArray ááᯠMatrix áá
áşááŻáᯠáážáŻááźááşáááˇáşáááşá áááŻáˇáááŻááş áááŻá¸áááŻá¸ Array áá
áşááŻáááŻáᏠáááąáŹááŹá¸áááŻááááşá¸ ááŹá¸áááŻááşáááşá ááá Row áá˝ááş ááŤáááşááąáŹ 0, 0, 1
á ááááşáááş 0
ááźá
áşáááşá ááŻááá 1, 1, 1
á ááááşáááş 1
ááźá
áşáááşá 1, 0, 1
áĄáá˝ááş ááááş 1
ááźá
áşááźáŽá¸ 0, 1, 1
áĄáá˝ááş ááááş 0
ááźá
áşáááşá áááŻáˇáááŻááťážááş á¤á
áŹáááşá¸áá˛áá˝ááş áááŤáááşááąá¸ááąáŹ 1, 0, 0
(áááŻáˇ) 0, 1, 0
áááááş áááşáááŻáˇ ááźá
áşáááşáááşá¸? á¤áááşááᯠáážáŹáá˝áą áĄááźáąááŻááşááąá¸áááŻááşááąáŹ Neural Network ááŻáśá¸ ááááŻááááşáááşáá
áşááŻááᯠááąá¸ááŹá¸ááŹá¸ááźááşá¸ ááźá
áşáááşá
ááááĽáŽá¸á á˝áŹ - áĄááźáąá áŹáááşá¸ááᯠá¤áááŻáˇ ááźááŻáááşááźááşáááşááŹá¸áážááááşá
var test_result = [0, 1, 1, 0];
áááŻááźáąáŹááˇáş áááŻáĄá፠ááá°ááŹááąááŹááźá
áşááąáŹ inputs
áážááˇáş áááşá¸ááĄááźáąááźá
áşááąáŹ test_result
áááŻáˇááᯠááážáááąááźáŽá áááşáááşá Synaptic Weights ááąáŤáş á
áážááşáááşáááŻá¸áá
áşáᯠáááŻáĄááşáááşá áá°áááąáŹáĄáážááşááᯠááąáŹááşáážááąáˇááŹááŤá á¤ááąááŹáá˝ááşááąáŹáˇ áĄáááŻá፠Weights ááᯠ"áĄá
ááşá¸áĄááźáą" áᯠáááąáŹááŹá¸ááŤááąá inputs
áážááˇáş weights
ááᯠááąáŹáşááźá°ááŹáá
áşááŻáá˝ááş áááˇáşááźááˇáşáááŻááşááťážááş áĄááźáąáá˝ááşááŹáááşá áĄááźáąá áážáŹá¸ááťááşá¸áááşá¸ áážáŹá¸áááşá áážááşááťááşáááşá¸áážááşáááşá áážáŹá¸áááˇáş weights
ááťáŹá¸ááᯠáááşá áážááşáááˇáş weights
ááᯠáá°áááş ááźá
áşáááşá
var weights = [ rand(), rand(), rand() ];
á¤áĄá
ááşá¸áĄááźáą weights
á
áŹáááşá¸áááş Random áááşáááŻá¸ááťáŹá¸ ááźá
áşáááźááˇáş ᤠweights
ááťáŹá¸ááᯠááŻáśá¸á áá˝ááşááźááˇáşááťážááş áážáŹá¸áážáŹ ááąááťáŹááąáááşá áááŻáˇááąáŹáş ááá
ášá
ááážáá áážááşáááˇáş (áááŻáˇ) áĄáážááşáážááˇáş ááŽá¸á
ááşáááˇáş weights
ááťáŹá¸ááźá
áşááŹáĄáąáŹááş áááŻáááŻá¸áááŻááťážáąáŹáˇ ááŻááşááźááˇáşáá˝áŹá¸áááş ááźá
áşáááşá áážááşááťááş - rand()
áááş -1
áážááˇáş 1
ááźáŹá¸ Random ááááşá¸ááááşá¸áá
áşááŻááᯠááŻááşááąá¸áĄáąáŹááş ááźááŻáááşááąá¸ááŹá¸ááŹá¸ááąáŹ Function ááźá
áşáááşá á¤ááąááŹáá˝ááş ááᯠFunction ááᯠáááˇáşáááąáŹáşááźááąáŹáˇááŤá rand()
Function á -1
áážááˇáş 1
ááźáŹá¸ ááťáááşá¸ááááşá¸ááááşá¸ááᯠááźááşááąá¸áááşááŻáᏠáážááşááŤááąá
function train(inputs, test_result, iterations) {
for(var i = 0; i < iterations; i++) {
var output = sigmoid( dot( inputs, weights ) );
var error = array_sub(test_result, output);
var adjustment = dot(
T(inputs),
array_multi(
error,
sigmoid_derivative(output)
)
);
weights = array_add(weights, adjustment);
}
}
ááąáŹáşááźááŹá¸ááąáŹ train()
Function áááşá ááá°ááŹááąááŹááźá
áşááąáŹ inputs
, áĄááźáąá
áŹáááşá¸ááźá
áşááąáŹ test_result
áážááˇáş ááąáˇááťááˇáşááááˇáş áĄááźáááşááą iterations
áááŻáˇááᯠáááşááśáááşá áááŻáˇááąáŹááş iterations
áááşáážááşááťááşáĄáááŻááşá¸ áĄááźáááşááźáááş ááąáˇááťááˇáşáááşá áááŻáááŻáˇááąáˇááťááˇáşááŹáá˝ááş ááŻáśá¸ááąáŹ sigmoid()
Function áááş ááąá¸áááŻááşááąáŹ áááşá¸áááŻá¸áĄáŹá¸ 1
áážááˇáş 0
ááźáŹá¸áááşáááŻá¸ááźá
áşáĄáąáŹááş ááźáąáŹááşá¸ááąá¸ááąáŹ Function ááźá
áşáááşáᯠáĄáá˝ááşáážááşááŤá
áĽááᏠ- sigmoid(5)
ááŻáááŻááťážááş 0.9933071490757153
áááŻááážáááąáááşá 1
áážááˇáş 0
ááźáŹá¸ áááşáááŻá¸áá
áşááŻááźá
áşáááşá
dot()
Function áááş Array Matrix áážá
áşááŻááᯠááźážáąáŹááşááąá¸áááŻááşááąáŹ Matrix Multiplication ááŻááşáááşá¸ááᯠááąáŹááşáá˝ááşááąá¸áááşá
ááťá˝ááşáŻááşáááŻáˇ áĄáááşáááşá¸áĄáááˇáş áááşášááťáŹáá˝ááş áááşáá˛áˇááźáá°á¸áááşá áááŻáˇááąáŹáş.. á
áŹáááşáá°ááąáŹáˇááá.. á
áŹááąá¸áá°ááąáŹáˇ ááąáˇááąááąááźáŽá ááąáŹááąáŹáááş ááźááşáááąáˇáᏠáááŻááąá¸ááťážááşá ááá Array ááźá
áşááąáŹ inputs
á Row áážááˇáş ááŻááá Random Array ááźá
áşááąáŹ weights
á Column áááŻáˇááᯠááźážáąáŹááşááąá¸áááşáᯠáĄáá˝ááşáážááşáááŻááşáááşá
á¤áááŻáˇááźážáąáŹááşááááŹááąáŹ áááşáááŻá¸ááᯠsigmoid()
áĄáá°áĄááŽááźááˇáş 1
áážááˇáş 0
ááźáŹá¸áááşáááŻá¸ááźá
áşáĄáąáŹááş ááźáąáŹááşá¸ááźáŽá¸ áááŹááąáŹ áááşáááŻá¸ áážááşááážááş ááąáŹááşáá
áşáááˇáşáá˝ááş á
á
áşááąá¸ááŹá¸ááźááşá¸ ááźá
áşáááşá áááŻáááşá¸áážáŹ.. ááážááşááťážááş weights
áááşáááŻá¸ááᯠáĄáááŻá¸áĄááťážáąáŹáˇ ááŻááşá ááąáŹááşáá
áşááźáááş á
ááşá¸áááşá áĄááźáááşááźáááş á
ááşá¸áááşá ááážááşáááťááşá¸ á
ááşá¸áá˝áŹá¸áááşá ááąáŹááşááŻáśá¸áá˝ááş ááźááŻááąá¸ááŹá¸áááˇáş áĄááźáąáážááşáážááˇáş áááŻááşááŽááąáŹ (áááŻáˇ) ááŽá¸á
ááşááąáŹ weights
áááŻááážááááş ááźá
áşááąááąáŹáˇáááşá
weights
áááşá¸áááŻá¸ááᯠáááŻáááŻá¸áááŻááťážáąáŹáˇ ááźáąáŹááşá¸ááŹáá˝ááş ááźá
áşáááŻááşááźáą áážááááťáž áážááážááááťáž áááşáááŻá¸áĄáŹá¸ááŻáśá¸ áá
áşááŻááźáŽá¸áá
áşáᯠáááŻááşááźáąáŹááşá¸ááźááşá¸ áááŻááşááąá Sigmoid Curve ááąáŤáş S ááŻáśááášááŹááş ááťááşá¸áá˝áąá¸áá˝ááşáĄáąáŹááş áá˝ááşá áááşáááŻá¸áĄáááŻá¸ áĄááťáąáŹáˇáááş áááŻááťááşá¸áá˝áąá¸ááąáŹááşáá˛áá˝ááş áááşááąáĄáąáŹááş ááźáąáŹááşá¸ááźááşá¸ááźá
áşáááşá sigmoid_derivative()
Function á weights
áĄáá
áşáááş S Curve ááąáŹááşááᯠáááťáąáŹáşáĄáąáŹááş ááááşá¸ááąá¸áááˇáş Function ááźá
áşáááşá
ááťááş Function áá
áşááŻááźá
áşááąáŹ T()
áááş Array Matrix á Row ááťáŹá¸ááᯠColumn ááźá
áşáĄáąáŹááş Transpose ááŻááşááąá¸ááąáŹ Function ááźá
áşáááşá
áĄááąá¸á
áááş áááážááááŻááŤá áááşáááş ááąáˇááŹáááąáááşá á¤ááąááŹáá˝ááşááąáŹáˇ áá°ááĄá
Random weight ááźááˇáşá
á ááá°ááŹááąááŹáĄáá˝ááş ááźááŻááąá¸ááŹá¸ááąáŹ áĄááźáąáážááşáážááˇáş áááŽá¸á
ááşáááťááşá¸ ááᯠweights
áááşáááŻá¸ááᯠáááşááŤáááşá፠áááŻáááŻá¸áááŻááťážáąáŹáˇ ááźááşááźááˇáşáááşááŻáᏠáĄáá˝ááşáážááşáááŻááşáááşá ááąáŹááşááŻáśá¸ ááážáááŹááąáŹ weights
ááᯠáĄááŻáśá¸ááźáŻááźááşá¸áĄáŹá¸ááźááˇáş áá°áááąááŹáá˝ááş áááŤáááşááąáŹ áĄááŹá¸áá° ááąááŹááťáŹá¸ááᯠá
áŽá
á
áşáááŻááşááąááąáŹáˇáááşá ááá°ááŹááąááŹáážááˇáş weights
ááᯠááąáŹáşááźá°ááŹáᲠáááˇáşáááŻááşááąáŹáĄá፠ááźááŻáááşááąá¸ááŹá¸ááąáŹ áĄááźáąáážááşáážááˇáş áááŻááşáᎠ(áááŻáˇ) ááŽá¸á
ááşááá˛áˇáááŻáˇ áĄáá
áşááąá¸áááŻááşááąáŹ ááąááŹáážááˇáş ááážáááŹá¸ááąáŹ weights
ááᯠááąáŹáşááźá°ááŹáᲠáááˇáşáááŻááşááťážááşáááşá¸ áĄááźáąáážááş (áááŻáˇ) ááŽá¸á
ááşááąáŹ áĄááźáąáážááşááᯠááážááá˝áŹá¸áááˇáşáááąáŹ ááźá
áşáááşá ááąáŹáşááźá°ááŹáážáŹ áĄáąáŹááşááŤáĄáááŻááşá¸ ááźá
áşáááşá
function think(inputs) {
return sigmoid(dot(inputs, weights));
}
áááŻá¸áĄáááşáá˝ááş ááąáŹáşááźáá˛áˇááąáŹ train()
Function áááŻááŻáśá¸á weights
ááᯠááážáááźáŽá¸ ááźá
áşááŤá ᤠthink()
Function ááᯠááŻáśá¸á áá°áááąááŹáá˝ááş áááŤáááşááąáŹ áĄááťááşáĄáááşááťáŹá¸ááᯠá
ááşá¸áááşáááŻá á
áááşá
ááşá¸áááş ááźááˇáşáááŻááşááźáŽááźá
áşáááşá áĽááᏠ-
console.log("Initial Weights: " + weights + "\n");
// Output Example => Initial Weights: -0.30,-0.73,0.37
train(inputs, test_result, 10000);
console.log("Trained Weights: " + weights + "\n");
// Output Example => Trained Weights: 9.67,-0.20,-4.62
ááá°ááŹáĄá áá°á wights
áááş Random ááźá
áşááąáŹáşáááşá¸ áĄááźáááş 10,000
Train ááźáŽá¸ááąáŹ ááąáŹááşáá˝ááş ááážáááŹááąáŹ weights
ááźáąáŹááşá¸áá˛áá˝áŹá¸áááşááᯠáá˝áąáˇáááąáááşá á¤áá˛áˇáááŻáˇ ááážáááŹááąáŹ weights
ááᯠááŻáśá¸á ááąááŹáá
áşááťáŹá¸ááᯠá
ááşá¸áááşááźááˇáşáááŻááşáááşá
console.log( think( [[1, 0, 0], [0, 1, 0]] ) );
// Output Example => [ 0.99, 0.44 ]
ááá°ááŹáĄá 1, 0, 0
áĄáá˝ááş áĄááźáąáááş 0.99
ááźá
áşá 0, 1, 0
áĄáá˝ááş áĄááźáąááá° 0.44
ááźá
áşááąáááşááᯠáá˝áąáˇáááąáááşá áĄááŽá¸ááŻáśá¸áá°áááŻááşááťážááş 1, 0, 0
áĄáá˝ááş áĄááźáą 1
ááźá
áşá 0, 1, 0
áĄáá˝ááş áĄááźáą 0
ááźá
áşáááşá áááŻáĄá፠ááąáˇááťááşáˇááźáŽá¸ááźá
áşááąáŹ weights
á áĄáá°áĄááŽááźááˇáş áá°áááá°áᏠááąááŹáá˝ááş áááŤááąáŹ ááąááŹáá
áşááťáŹá¸áááŻáááş áĄááźáąáážááş ááŻááşááąá¸áááŻááşááąáŹ ááááŻááááşáááşáá
áşááŻááᯠááážááá˝áŹá¸ááąááąáŹáˇáááşá áĄáśáˇáá˝ááş ááąáŹááşá¸ááąá
á˝áááŹá¸...
- áá°áááşá¸ Python ááá°ááŹááᯠá¤ááąááŹáá˝ááş ááąáˇááŹáááŻááşáááşá
- ááťá˝ááşáŻááşá JavaScript ááŻááşáĄááźááˇáşáĄá áŻáśááᯠá¤ááąááŹáá˝ááş ááąáˇááŹáááŻááşáááşá
áá°áááşá¸ Python ááá°ááŹáá˝ááş áááşášááťáŹáááŻááşáᏠáá˝ááşááťááşáážáŻááťáŹá¸áĄáá˝ááş Numpy ááąáŤáş library ááᯠáĄááŻáśá¸ááźáŻá ááąáŹáşááźááŹá¸áááźááˇáş á ááşá¸áááş ááźááˇáşáááŻááşáááş Numpy áááŻáĄááşááąááááˇáşáááşá á áŹááąá¸áá°á JavaScript áá˝ááşáá° á¤áá˛áˇáááŻáˇ Library ááťááŻá¸ááᯠáĄááŻáśá¸áááźáŻáᲠMatrix Multiplication, Transpose á áááˇáş áááŻáĄááşáááˇáş ááŻááşááąáŹááşááťááşááťáŹá¸ááᯠááąáŹááşáá˝ááşááąá¸áááŻááşááąáŹ Helper Function ááťáŹá¸ááᯠáá áşááŤáááşá¸ áááˇáşáá˝ááşá¸ ááąá¸ááŹá¸ááŹá¸áááźááˇáş áááŻááşáááŻááşá ááşá¸áááŻááşáááşá
áááşáážáááá°ááŹááąáᏠinputs
áážááˇáş ááááş test_result
áááŻáˇáážáŹ áĄáąáŹááşááŤáĄáááŻááşá¸ááźá
áşáááşá
var inputs = [
[0, 0, 1], // -> 0
[1, 1, 1], // -> 1
[1, 0, 1], // -> 1
[0, 1, 1] // -> 0
];
ááąááťáŹááąáˇááŹááźááˇáşáááŻááşááŤá Matrix á ááá Column áááşáááŻá¸ 1
ááźá
áşááťážááş áĄááźáą 1
ááźá
áşááąáááşá ᤠPattern ááᯠááťá˝ááşáŻááşáááŻáˇ áĽáŽá¸áážáąáŹááşá áĄáá˝ááşáá
áşáá° áá˝áąá¸ááá˝áąáˇááźááşáááş ááááşáá˛ááá˛áˇáááŻáˇ ááááŻááááşáĄáá˝ááşáááşá¸ ááááşáá˛áááˇáşáááąáŹ ááźá
áşáááşá áááŻááá°ááŹááąááŹáĄáá˝ááş ááááşááᯠá¤áááŻáˇ ááźááşáááşááźááˇáşáááŻááşáááşá
var inputs = [
[0, 0, 1], // -> 0
[1, 1, 1], // -> 0
[1, 0, 1], // -> 1
[0, 1, 1] // -> 1
];
áá°ááá˛áˇáááŻáˇ áĄááźáąá ááá Column ááąáŤáşáááŻáˇ áááŻááşáááŻááşáááşááąáŹááşááąááźááşá¸ ááážáááąáŹáˇá ááťá˝ááşáŻááşáááŻáˇ áĽáŽá¸áážáąáŹááşáĄáá˝ááş áá˝áąá¸áááźááˇáşáááş áááşáá˛áá˝áŹá¸ááá˛áˇáááŻáˇ ááááŻááááşáĄáá˝ááşáááşá¸ áĄááźáąáážááş ááŻááşááąá¸áááŻááşáááş áááŻáááŻáááşáá˛áá˝áŹá¸ááąááźáŽá áááŻáĄáááŻááşá¸ ááźááşá ááşá¸ááźááˇáşááťážááş ááťá˝ááşáŻááşáááŻáˇá ááááŻááááşá ááźááşááąá¸ááąáŹáĄááźáą ááážááşááąáŹáˇáááşááᯠáá˝áąáˇááááşááźá áşáááşá
ááąááŹáážááˇáş áĄááźáą ááŻáśá¸á áááşáááŻááşááźááşá¸ ááážááááşááąáŹáˇ áááŻááşá ááąáŹááşáá
áşááźáááş ááąááťáŹááźááşááźááˇáşááťážááş áá˝áąáˇááááŻááşááąáááşá ááá Column áážááˇáş ááŻááá Column áááşáááŻá¸áááŻáˇ áá°ááťážááş áĄááźáą 0
ááźá
áşá ááá°ááťážááş áĄááźáą 1
ááźá
áşááąááźááşá¸ááźá
áşáááşá ᤠPattern ááᯠááťá˝ááşáŻááşáááŻáˇ áĽáŽá¸áážáąáŹááşá áá˝áąá¸ááááŻááşááá˛áˇáááŻáˇ ááááŻááááşááááşá¸ áĄááźáąáážááş ááŻááşááąá¸áááŻááşáĄáąáŹááş ááźááşáááşááźááˇáşáááş ááźá
áşáááşá
áá°áááááŻááááşáá˝ááş Neuron áá áşááŻáážááˇáş Layer áá áşááŻáᏠááŤáááşáááşá áááşáá˝áąáˇáá˝ááş Artificial Neural Network áá áşááŻá áá˝á˛áˇá ááşá¸ááŻáśáážáŹ áĄáąáŹááşááŤáĄáááŻááşá¸ ááźá áşáááŻááşáááşá
Neuron ááąáŤááşá¸ááťáŹá¸á
á˝áŹááŤáááşá Layer áĄáááˇáşáááˇáşááᯠááźááşáááşá¸ á
áŽá
á
áşááááşáˇáááąáŹ ááźá
áşáááşá áĄáááşáá˝ááş áááŻáá˛áˇááźáŽá¸ááá˛áˇáááŻáˇáááşá á¤ááąááŹáá˝ááş áááŻáááąáŹáááŹáááťáŹá¸ááᯠáážááşá¸áááşá¸ ááąáŹáşááźáááŻááşáááş áááŻááşááąá ááąá¸ááŹá¸ááŹá¸áááˇáş ááŻááşáĄááźáąáŹááşá¸áááŻáᏠá
áááşáááşá
áŹá¸áá°ááťáŹá¸ ááŻááşáážááˇáş á¤á
ᏠáážááŻááşá¸áážááşááąáˇááŹáááŻááşá
áąáááş áážááşá¸áááşá¸ ááąáŹáşááźáááşááźá
áşáááşá Layer áá
áşááŻáᏠááŻáśá¸ááŹá¸ááąáŹ áá°áááá°ááŹáá˝ááş weights
áá
áşááŻáᏠááŤáááşááąáŹáşáááşá¸ Layer áážá
áşáᯠáĄááŻáśá¸ááźáŻáááˇáş áááŻááá°ááŹáá˝ááş weights
áážá
áşáᯠááŤáááşááááşááźá
áşáááşá
var weights_zero = nj.array( rand(3, 4) );
var weights_one = nj.array( rand(4, 1) );
ááá°ááŹááąááŹáááş Row (á) ááŻáážááˇáş Column (á) ááŻááŤáááşááąáŹ Array Matrix áá
áşááŻááźá
áşáááşá ááᯠááąáᏠMatrix ááᯠá
áŽá
á
áşáááŻááşáááş weights_zero
áĄáŹá¸ Row (á) ááŻáážááˇáş Column (á) ááŻááŤáááşááąáŹ Random Array Matrix áĄááźá
áş áááşáážááşááŹá¸áááşá áááááá°ááŹá Weight áá˛áˇáááŻáˇ Flat Array áááŻááşááąáŹáˇáᲠArray Matrix ááźá
áşáá˝áŹá¸áááşá á¤áááąáŹááᯠHidden Layers áᯠááąáŤáşáááşá áááşáá˝áąáˇá
ááşá¸áááşááźááˇáşááŹá Hidden Layers ááťáŹá¸ááťážááş áĄááźáąáááŻááááťááŹáááşááᯠáá˝áąáˇááááşá
weights_zero
áážááˇáş inputs
ááąááŹááᯠMatrix Multiplication áážááˇáş ááźážáąáŹááşáááŻááşáááˇáşáĄá፠Row (á) ááŻáážáá Column (á) ááŻáážáááąáŹ ááááşááᯠááážááááşááźá
áşáááşá áááŻááááşáážááˇáş áááşáááşáá˝á˛áááş áĄááŻááşááŻááşáááş weights_one
ááᯠRow (á) ááŻáážááˇáş Column (á) ááŻáážáááąáŹ Random Array Matrix áá
áşááŻáĄááźá
áş áááşáááşááźáąááźáŹ áááşáážááşááŹá¸áááşááᯠáá˝áąáˇáááŻááşáááşá áĄáááşá weights_zero áá˝ááş Hidden Layers ááťáŹá¸ áááşáááŻá¸áá˛áˇááŤá weights_one áááŻáááşá¸ áááŻááşáááşáĄáąáŹááş áááŻá¸ááąáááş áááŻáĄááşááąáááşá áĽááᏠ-
var weights_zero = nj.array( rand(3, 8) );
var weights_one = nj.array( rand(8, 1) );
áážááşááťááş - ááá°ááŹááŻááşáá˝ááş áá˝áąáˇáááąáŹ nj
áááŻáááşáážáŹ Numpy ááᯠááá°ááŹáá° áááşááŽá¸ááŹá¸ááąáŹ NumJs ááąáŤáş JavaScript Library ááźá
áşáááşá áá°áááá°ááŹáá˝ááş áááşášááťáŹáááŻááşáᏠáá˝ááşááťááşáážáŻááťáŹá¸áĄáá˝ááş áááŻáĄááşáááˇáş Function ááťáŹá¸ááᯠáá
áşááŤáááşá¸ áááˇáşáá˝ááşá¸ááąá¸ááŹá¸ááąáŹáşáááşá¸á ᤠáááşáááşááąáŹáşááźáááşáˇ ááá°ááŹáá˝ááş áááŻááşáááŻááş áááąá¸ááąáŹáˇáᲠNumJs ááᯠáĄááŻáśá¸ááźáŻááŹá¸áááşá
function train(inputs, test_result, iterations) {
for(var i = 0; i < iterations; i++) {
var layer_zero = inputs;
var layer_one = nj.sigmoid( layer_zero.dot(weights_zero) );
var layer_two = nj.sigmoid( layer_one.dot(weights_one) );
var layer_two_error = test_result.subtract(layer_two);
// Backpropagation (sending back layer_two errors to layer_one)
var layer_two_delta = layer_two_error.multiply( curve(layer_two) );
var layer_one_error = layer_two_delta.dot( weights_one.T );
var layer_one_delta = layer_one_error.multiply( curve(layer_one) );
// Adjusting weights
weights_one = weights_one.add( layer_one.T.dot(layer_two_delta) );
weights_zero = weights_zero.add( layer_zero.T.dot(layer_one_delta) );
}
}
train()
Function áá˝ááş áááşáááˇáş á
áŽá
á
áşáážáŻááťáž áááŻááşáááąá¸áááˇáş inputs
ááᯠlayer_zero
áᯠáááşáážááşááŹá¸áááşá áááŻáˇááąáŹááşá ááᯠlayer_zero
ááᯠweights_zero
áážááˇáş ááźážáąáŹááşááťáááŻááşáááşá ááááş Matrix ááᯠsigmoid()
Function áĄáá°áĄááŽááźááˇáş 0
áážááˇáş 1
ááźáŹá¸áááşáááŻá¸ááťáŹá¸áᏠááŤáááşááąáŹ Matrix ááźá
áşáĄáąáŹááş ááźáąáŹááşá¸áááşá áááŻááááş Matrix ááᯠlayer_one
áᯠáááşáážááşááŹá¸áááşá áááşáááşá layer_one
ááᯠweights_one
áážááˇáş ááźážáąáŹááşááźáŽá¸ ááááşááᯠlayer_two
áᯠáááşáážááşáááşá
áááŻáˇááąáŹááşá layer_two
áĄáŹá¸ test_result
áážááˇáş áážááŻááşá¸áážááşá (áážáŻááşá) á
áŽá
á
áşáááşá ááážáááŹáááˇáş error
Matrix ááᯠS Curve ááąáŹááşáááťáąáŹáşáĄáąáŹááş curve()
Function ááźááˇáş ááźážáąáŹááşáááşá ááźáŽá¸ááąáŹááş ááᯠlayer_two
á error
áážááˇáş weight_one
ááᯠááźážáąáŹááşááźááşá¸áĄáŹá¸ááźááˇáş layer_one
áĄáá˝ááş error
áááŻááážááááşá á¤áááşá¸á
áá
áşááᯠBackpropagation áᯠááąáŤáşáááşá áááŻáááşá¸áážáŹá Layer Two á Error áĄáŹá¸ Layer One ááś ááąáŹááşááźááşááąá¸áááŻáˇá áĄááŻááşááŻááşá
áąááźááşá¸ ááźá
áşáááşá
áážááşááťááş - substract()
, add()
, multiply()
á
áááˇáş Array Matrix ááťáŹá¸ááᯠááąáŤááşá¸ áážáŻááşááźážáąáŹááşá
áŹá¸ ááŻááşááąá¸áááŻááşááąáŹ Function ááťáŹá¸áážááˇáş sigmoid
Function áááŻáˇááᯠNumJs ááž ááá° áĄááŻáśá¸ááźáŻááŹá¸áááşá curve()
Function áážáŹáá° NumJs áá˝ááş ááŤáááşááźááşá¸ááážáá ááŽá¸ááźáŹá¸ Function áá
áşááŻáĄááźá
áş áááˇáşáá˝ááşá¸ ááąá¸ááŹá¸ááŹá¸áááşááᯠááŻááşáĄááźááˇáşáĄá
áŻáś ááąáˇááŹááŹáá˝ááş áááááźáŻááŤá
áááŻáˇááąáŹááş áááááá°ááŹáá˛áˇáááŻáˇáááş ááážáááŹááąáŹ ááááşááᯠáĄááŻáśá¸ááźáŻá Weights ááťáŹá¸ááᯠááźáŻááźááşáážááážááŻááşá¸ áááŻááşáááşá á¤áááşá¸ááźááˇáş áĄááźáááşááźáááş á
áŽá
á
áşáááŻááş áážááážááŻááşá¸áááŻááşáážááˇáş ááąáŹááşááŻáśá¸áá˝ááş áĄááźáąáážááşáážááˇáş áĄááŽá¸á
ááşááŻáśá¸ ááŻááşááąá¸áááŻááşááąáŹ Weights ááťáŹá¸ááᯠááážááááşááźá
áşáááşá ááážáááŹáááˇáş Weight ááťáŹá¸ááᯠááŻáśá¸á á
ááşá¸áááşáááŻááşáááş think()
Function ááᯠáĄáąáŹááşááŤáĄáááŻááşá¸ ááąá¸ááŹá¸ááŹá¸áááşá
function think(inputs) {
var layer_one = nj.sigmoid( inputs.dot(weights_zero) );
var layer_two = nj.sigmoid( layer_one.dot(weights_one) );
return layer_two;
}
áá
ááşá¸áááşáážáŽ train()
Function ááᯠááŻáśá¸á Iteration áĄááźáááşááą 60,000
áááˇáşááźááˇáş Weight áĄáážááşááťáŹá¸ ááĄáąáŹááş ááąáˇááťááˇáşáááąáááşá
train(inputs, test_result, 60000);
áááŻáˇááąáŹááş áĄáąáŹááşááŤáĄáááŻááşá¸ á ááşá¸áááşááźááˇáşáááŻááşáááşááźá áşáááşá
var test_data = [
[1, 0, 0],
[1, 1, 0]
];
console.log( think( nj.array(test_data) ) );
// Output Example => array([[0.94562], [0.00223]])
1, 0, 0
áĄáá˝ááş áĄááźáąáážááş 1 (0.95)
ááźá
áşá 1, 1, 0
áĄáá˝ááş áĄááźáąáážááş 0 (0.002)
ááźá
áşááźáąáŹááşá¸ áážááşáááşá
á˝áŹ á
áŽá
á
áşáááŻááşáááˇáş ááááŻááááşáá
áşááŻááᯠááážááá˝áŹá¸ááźáŽ ááźá
áşááąááąáŹáˇáááşá
- áĄáááŻááşá¸ (á) JavaScript ááŻááşáĄááźááˇáşáĄá áŻáśááᯠá¤ááąááŹáá˝ááş ááąáˇááŹáááŻááşáááşá
- áĄáááŻááşá¸ (á) áĄáá˝ááş áááŻá¸ááŹá¸ááąáŹááşá¸ááŤá¸ááᯠá¤ááąááŹáá˝ááş ááąáˇááŹáááŻááşáááşá
- ááá°ááŹáá˝ááş áĄááŻáśá¸ááźáŻááŹá¸ááąáŹ NumJs ááᯠá¤ááąááŹáá˝ááş ááąáˇááŹáááŻááşáááşá
áááşáážáááááŻááááşáĄáŹá¸ á á˝ááşá¸ááąáŹááşáááşáááŻááᯠááąáŹááşá¸áá˝ááşá áąáááş Optimize ááŻááşáááááŻááşáááˇáş áááşá¸á áá áşáĄááťááŻá¸ááťááŻá¸ áážáááąá¸áááşá áááşá¸áááŻáˇáá˛ááž Gradient Descent áááşá¸á áá áşáĄáŹá¸ áĄááŻáśá¸ááźáŻá áááŻááĄáážáŹá¸áááşá¸ááąáŹ á áá áşáá áşáᯠááźá áşááŹá áąáááş ááźááşáááşááźááˇáşá á˝ááşáááşá
Gradient Descent áááş ááŽáĄááŻááŽáááąáŹáĄá ááťááşááźááˇáşááąáŹáşáááşá¸ áááşáá˝áąáˇ áááąáŹáĄáážá
áşááťáŻááşáážáŹ áááşáááŻá¸ááᯠáĄáááŻá¸áĄááťážáąáŹáˇ ááźáŻááŻááşááźááˇáşááźááşá¸áĄáŹá¸ááźááˇáş áááŻáááŻááąáŹááşá¸áá˝ááşáááˇáş ááááşááᯠááážáá
áąááźááşá¸ááźá
áşáááşá Part - 2 áá˝ááş ááąá¸ááŹá¸áá˛áˇáááˇáş ááŻááşáááŻáááş áááşáááş áĄááŻáśá¸ááźáŻáááşááźá
áşááźáŽá¸ áááááŻáśá¸ááźááşáááşááťááşáážáŹ alpha
ááąáŤáş áááşáááŻá¸áá
áşáᯠáááşáážááşáááŻááşááźááşá¸áááş ááźá
áşáááşá Weights áááşáááŻá¸ááťáŹá¸ ááťáááşáážáááŹáá˝ááş áá°áááá˛áˇáááŻáˇ Matrix Multiplication áááşáááş áááŻááşááąáŹáˇáᲠalpha
áááşáááŻá¸ááᯠáááˇáşáá
áŹá¸áá˝áŹá¸áááş áááşáá˝ááşáááşá
var alpha = 10;
áááşáážáááá°ááŹáĄáá˝ááş áĄááąáŹááşá¸ááŻáśá¸ááááşáááŻááąá¸áááˇáş alpha
áááşáááŻá¸áážáŹ 10
ááźá
áşáááşááᯠá
ááşá¸áááşáááážáááźáŽá¸ááźá
áşáááˇáşáĄáá˝ááş áĄááŻáśá¸ááźáŻááŹá¸ááźááşá¸ááźá
áşáááşá áááşáá˝áąáˇáá˝ááş alpha
áááşáááŻá¸ áĄáááŻá¸áĄááťážáąáŹáˇ ááźáŻááŻááşá áĄááąáŹááşá¸ááŻáśá¸ááááş ááážáá
áąáááˇáş áááşáááŻá¸ááᯠá
ááşá¸áááşááąáŹáşááŻááşáááş áááŻáĄááşááąáááşá
áááŻáˇááąáŹááş Weights ááťáŹá¸ ááťáááşáážááážáŻááᯠáááŻáá˛áˇáááŻáˇ ááźááşáááşáááŻááşáááşá
weights_one = weights_one.add(
layer_one.T.dot(layer_two_delta).multiply(alpha)
);
weights_zero = weights_zero.add(
layer_zero.T.dot(layer_one_delta).multiply(alpha)
);
áá°áá Weights ááťáŹá¸ááťáááşáážáááŹáá˝ááş áááşáážá Weights Matrix áá˝ááş áĄáá
áşááážáááŹáááˇáş áááşáááŻá¸ááťáŹá¸ááᯠááąáŤááşá¸áááˇáşááźááşá¸ ááźá
áşááąáŹáşá áááŻáááşáááŻá¸áááŻáááş alpha
áážááˇáş ááźážáąáŹááşáááŻááşááźááşá¸ ááźá
áşáááşá
á
áŹááąá¸áá°á á
ááşá¸áááşáážáŻáĄá áá°á Part 2 áá˝ááş ááąáŹáşááźáá˛áˇáááˇáş ááááŻááááşááźááˇáş ááąáˇááťááˇáşááŹáá˝ááş ááážááááˇáş error
ááťáŹá¸áážáŹ áĄáąáŹááşááŤáĄáááŻááşá¸ááźá
áşáááşá
00000 - Error: 0.5000135194530013
10000 - Error: 0.010626371915259706
20000 - Error: 0.00726000807089573
30000 - Error: 0.005833823291177704
40000 - Error: 0.005001455307140716
50000 - Error: 0.004440934900653816
áĄááááşáˇááŻáśá¸ Error áážáŹ 0.004
ááźá
áşáááşá Gradient Descent áááşá¸á
áá
áşááźááˇáş ááźááşáááşá Optimize ááźáŻááŻááşááŹá¸áááˇáş á¤ááááŻááááşáá
áşááźááˇáş ááąáˇááťááˇáşááŹáá˝ááş ááážááááˇáş error
ááťáŹá¸áážáŹ áĄáąáŹááşááŤáĄáááŻááşá¸ááźá
áşáááşá
00000 - Error: 0.49890257729692866
10000 - Error: 0.0028158347351834893
20000 - Error: 0.0017176682103336883
30000 - Error: 0.0013349032801991025
40000 - Error: 0.0011258896811994434
50000 - Error: 0.000989941835100877
áĄááááˇáşááŻáśá¸ Error áážáŹ 0.0009
ááźá
áşá ááááááŹáᏠáááŻá áĄáážáŹá¸áááşá¸áá˝áŹá¸áááˇáş áááąáŹáááşááźá
áşááąáŹáˇáááşá
- áĄáááŻááşá¸ (á) JavaScript ááŻááşáĄááźááˇáşáĄá áŻáśááᯠá¤ááąááŹáá˝ááş ááąáˇááŹáááŻááşáááşá
- áĄáááŻááşá¸ (á) áĄáá˝ááş áááŻá¸ááŹá¸ááąáŹááşá¸ááŤá¸ááᯠá¤ááąááŹáá˝ááş ááąáˇááŹáááŻááşáááşá
á¤ááąááŹáá˝ááşááąáŹáşááźááŹá¸ áááşá¸á áá áşáááŻáˇáááŻáááş áĄááŻáśá¸ááźáŻá Text Classification ááááŻááááşáá áşááŻááᯠáááşááŽá¸áááşááąáŹááşááŹá¸áááşá ááąáˇááŹááźááˇáşááŤá
áááŻááááŻááááşáá˝ááş ááá°ááŹááąááŹááᯠ(Sentence) ááťáŹá¸áážááˇáş ááá°ááŹáĄááźáą Class ááťáŹá¸ááᯠáĄááśáá˝ááşáĄáááŻááş (Syllable) áááŻááşá¸ááźááşá áááŻáĄááşáááˇáş Input/Output Matrix ááťáŹá¸ááźá áşáĄáąáŹááş áááşááąáŹááşááźáŽá¸ááąáŹááş Matrix Multiplication, Backpropagation, Gradient Descent á áááşáááŻáˇáááŻáááş áĄááŻáśá¸ááźáŻááŹá¸áááşá
ááąá¸ááŹáááˇáş á áŹáĄááźáąáŹááşá¸ (Sentence) áááş áááşáááˇáşá áŹáĄááťááŻá¸áĄá áŹá¸ (Class) ááźá áşááááşá¸ áá˝á˛ááźáŹá¸ááąá¸áááŻááşááąáŹ áááşáá˝áąáˇáĄááŻáśá¸ááťáááŻááşáááˇáş á áá áşáá áşááŻááźá áşáááşá
ááťáąá¸áá°á¸áááşááŤáááşá