Tensorflow.js چیه؟
در این فصل نگاهی به مدل های یادگیری تحت نظارت پیاده سازی شده در Tensorflow.js میندازیم. Tensorflow یک کتابخونه یادگیری ماشین منبع باز هست که توسط تیم Google Brain Team شرکت گوگل توسعه داده شده. با این کتابخونه میتونید مدل های یادگیری ماشین خودتون رو ایجاد کنید و آموزش بدید، مدل های از قبل آماده شده قابل استفاده در اپلیکیشنتون رو ایمپورت کنید، و مدل های از قبل آماده شده رو گسترش بدید و دیتای آموزش جدید به اونها اضافه کنید. Tensorflow دسترسی خیلی راحتی به یادگیری ماشین رو برای توسعه دهنده ها فراهم میکنه، و توانایی و قابلیت های خیلی زیادی داره، بنابراین توسعه دهنده های باتجربه یادگیری ماشین مشکل کمبود قابلیت رو نخواهند داشت.
قبل از اینکه بریم سراغ Tensorflow.js، اول بریم یه نگاهی به یک شبکه مصنوعی (Neural Network) و قسمت های مختلفش بندازیم:
یک شبکه عصبی از چندین لایه تشکیل شده: یک لایه ورودی (Input Layer در تصویر بالا) که هر دیتایی که میخوایم روش کار کنیم رو دریافت میکنه؛ یک یا چند لایه مخفی (Hidden Layer) که دیتا رو در node (یا neuron / نورون) های مختلف پردازش میکنن؛ و در نهایت یک لایه خروجی (Output Layer) که خروجی نهایی یک الگوریتم رو تولید میکنه. خروجی هر لایه به عنوان ورودی به لایه بعدی داده میشه. هر نود برای هر دیتای ورودیش یک وزن مشخص میکنه و دیتا رو در یک تابع فعالسازی (Activation Function) پردازش میکنه.
عمل وزن کردن دیتا باعث بیشتر یا کمتر شدن اهمیت اون نود نسبت به کل شبکه میشه و به مرور زمان سیستم یادگیری میتونه تعیین کنه که کدوم وزن ها دقت الگوریتم رو بهتر میکنن و کدومشون مضر هستن.
در یادگیری تحت نظارت ما میتونیم یک مدل رو با دادن مجموعه ای از دیتا های ورودی و خروجی آموزش بدیم و اینجوری روابط بین ورودی ها و خروجی ها رو یاد میگیره. در نهایت بعد از این کار یک مدلی داریم که به خوبی آموزش دیده و میتونه یک ورودی جدید که از قبل ندیده رو بگیره، بر اساس یه سری قوانین که در زمان آموزش وضع کرده اون رو پردازش کنه، و در نهایت یک پیش بینی دقیق در مورد اینکه چه خروجی باید از این ورودی در بیاد بهمون تحویل بده.
در زیر یک مثال ساده از نوع آموزش و مرتب سازی که روی مدل انجام میدیم قرار دادیم:
به صورت چشمی واضحه که این چند نقطه یک خط رو تشکیل میدن. حالا اگه بخوایم زمانی که مقدار X برابر با 5 باشه، مقدار Y رو حدس بزنیم، میتونیم اون رو به دست بیاریم. یک شبکه عصبی هم میتونه این حدس رو انجام بده (اما در یک پروسه متفاوت از کاری که ما انسان ها انجام میدیم، چون اون خط رو نمیبینه). میتونیم اون رو بر اساس دیتایی که در اختیار داریم آموزش بدیم تا بتونه مقدار بعدی رو حدس بزنه. برای این کار میشه دیتای آموزش رو به عنوان لیستی از Xها و Yها، یا بهتره بگیم ورودی ها و خروجی ها، بهش بدیم:
let coordinates = [
[0,0],
[1,2],
[2,4],
[3,6],
[4,8]
]
آرایه دو بعدی بالا ممکنه مثل نقطه هایی روی یک خط مشابه تصویر بالا به نظر برسه، و یجورایی همینطور هم هست، اما همچنین یک رابطه بین ورودی و خروجی هم به شمار میره. این یعنی اینکه اگه مقدار X برابر با 2 باشه مقدار Y برابر با 4 هست، و اگه مقدار X برابر با 4 باشه مقدار Y برابر با 8 میشه. بعد از آموزش دیدن بر اساس این X ها و Yها، مدل میتونه حدس بزنه که زمانی که مقدار X برابر با 5 هست مقدار Y چقدره. اغلب حتی توی ساختار های پیچیده تر دیتا هم ممکنه از Xها و Yها به عنوان مخففی برای ورودی ها و خروجی ها استفاده بشه.