شاید برای خیلیها عجیب باشد، ساخت شبکه عصبی با javascript ؟ چطور ممکن است با زبانی که عموم ترین استفاده آن در صنعت وب است چنین کاری کرد.
در جواب این جمله باید گفت که ما قصد داریم ساده ترین حالت شبکه عصبی مصنوعی، یک شبکه XOR را طراحی کنیم. قبل از شروع کار پیشنهاد میکنم ابتدا پست ساختار شبکههای عصبی مصنوعی به زبان ساده (Artificial Neural Network) را مطالعه کنید تا بیشتر با شبکه های عصبی آشنا بشید.
شروع برنامه نویسی
فرض را بر این میگیریم که شما ابتدا ساختار شبکه های عصبی را مطالعه کرده اید و آن را فرا گرفته اید. پس مستقیما به سراغ کد نویسی میرویم. ابتدا باید کتابخانه Synaptic js را دانلود کرده و آن را فراخوانی کنید. این کار برای برنامه نویسان وب بسیار معمول است. و دوستانی که تا به حال اینکار را انجام نداده اند، مراحل زیر را به ترتیب انجام دهند:
1- ابتدا یک فایل html در سیستم خود بسازید.
2- کتابخانه Synaptic js را با دستور script به فایل html فراخوانی کنید.
3- کدهای جاوااسکریپت که در ادامه خدمتتان عرض میکنم را هم نیز باید در تگ های <script></script> بنویسید.
برای ساخت لایه های شبکه عصبی میتونید از دستور ()new Layer که یک function در Synaptic است استفاده کنید.
عدد درون پرانتز نشان دهنده این است که هر لایه شما باید دارای چند نورون باشد.
const { Layer, Network } = window.synaptic;
var inputLayer = new Layer(2); var hiddenLayer = new Layer(3); var outputLayer = new Layer(1);
در مرحله بعد این لایه ها را به هم متصل میکنیم و یک شبکه به صورت زیر می سازیم :
inputLayer.project(hiddenLayer); hiddenLayer.project(outputLayer);
var myNetwork = new Network({ input: inputLayer, hidden: [hiddenLayer], output: outputLayer });
حالا یک شبکه عصبی با 2 لایه ورودی، 3 لایه مخفی و یک لایه خروجی داریم که شکل آن را می توان به صورت زیر ترسیم کرد:
حالا میتوانیم شبکه خود را train کنیم
// train the network - learn XOR
var learningRate = .3;
for (var i = 0; i < 20000; i++) { // 0,0 => 0 myNetwork.activate([0,0]); myNetwork.propagate(learningRate, [0]);
// 0,1 => 1 myNetwork.activate([0,1]); myNetwork.propagate(learningRate, [1]);
// 1,0 => 1 myNetwork.activate([1,0]); myNetwork.propagate(learningRate, [1]);
// 1,1 => 0 myNetwork.activate([1,1]); myNetwork.propagate(learningRate, [0]); }
در این مرحله ما داریم شبکه خودمون رو 20 هزار بار train میکنیم، توی هر دوره ما چهار مقدار احتمالی [0,0] [0,1] [1,0] [1,1] را به شبکه وارد میکنیم.
train را با ([myNetwork.activate([0,0 شروع کردیم که [0,0] در واقع همان ورودی اولیه ما به شبکه است. به این عمل forward propagation گفته میشود.
بعد از هر دوره forward propagation باید Back propagation نیز انجام داد، و دلیل آن هم به روز رسانی وزن ها و بایاس های شبکه است.
عملیات back Propagation را با تکه کد ([myNetwork.propagate(learningRate, [0 انجام دادیم که learningRate یک ثابت است که به شبکه میگوید وزنها را در هر دوره باید بر روی چه مقداری تنظیم کرد.
چطور شبکه عصبی را تست کنیم؟
بعد از اینکه شبکه ما 20 هزار بار train شد، میتوانیم شبکه را با 4 مقدار احتمالی به مانند زیر تست کنیم:
console.log(myNetwork.activate([0,0])); -> [0.015020775950893527]
console.log(myNetwork.activate([0,1])); ->[0.9815816381088985]
console.log(myNetwork.activate([1,0])); -> [0.9871822457132193]
console.log(myNetwork.activate([1,1])); -> [0.012950087641929467]
برای درک بهتر این پست پیشنهاد میکنم لینک زیر را نیز مشاهده کنید: