یادگیری ماشین در جاوا اسکریپت – به زبان ساده


در جریان گردهمایی TensorFlow Developer Summit در سال 2018، تیم توسعه کتابخانه TensorFlow، از نسخه جدیدی از کتابخانه TensorFlow برای «زبان برنامهنویسی جاوا اسکریپت» (JavaScript Programming Language) پرده برداشتند؛ کتابخانه TensorFlow.js. این کتابخانه، ابزاری «منبع باز» (Open Source) برای تعریف، «آموزش» (Train) و اجرای مدلهای یادگیری ماشین در جاوا اسکریپت محسوب میشود.
به عبارت دیگر، این کتابخانه به کاربران، برنامهنویسان و توسعهدهندگان اجازه میدهد تا با استفاده از زبان جاوا اسکریپت و یک «واسط برنامهنویسی کاربردی» (Application Programming Interfaces | API) سطح بالا برای لایههای برنامهنویسی، مدلهای «یادگیری ماشین» (Machine Learning) را به طور کامل در مرورگرهای صفحات وب اجرا کنند.
در این مطلب، بررسی اجمالی از کتابخانه یادگیری ماشین در جاوا اسکریپت یا TensorFlow.js ارائه خواهد شد.
کتابخانه یادگیری ماشین در جاوا اسکریپت (TensorFlow.js)
کتابخانه یادگیری ماشین در جاوا اسکریپت (TensorFlow.js)، به برنامهنویسان جاوا اسکریپت و تازه وارد به حوزه یادگیری ماشین اجازه میدهد تا به بهترین شکل ممکن با توسعه نرمافزارهای تحت وب هوشمند، توسط زبان جاوا اسکریپت و کتابخانه TensorFlow.js آشنا شوند. همچنین، کتابخانه یادگیری ماشین در جاوا اسکریپت، نقطه شروع مناسبی جهت یادگیری مباحث مرتبط با «یادگیری عمیق» (Deep Learning) و «بینایی کامپیوتر» (Computer Vision) برای برنامهنویسان مبتدی و علاقهمندان به زبان جاوا اسکریپت محسوب میشود.
از سوی دیگر، کتابخانه یادگیری ماشین در جاوا اسکریپت (TensorFlow.js)، دستهای از برنامهنویسان و توسعهدهندگان یادگیری ماشین را هدف قرار میدهد که به تازگی از دیگر زبانهای برنامهنویسی به زبان جاوا اسکریپت مهاجرت کردهاند. کتابخانه TensorFlow.js به چنین برنامهنویسانی اجازه میدهد که مدلهای یادگیری ماشین را توسط زبان جاوا اسکریپت طراحی و در مرورگرهای صفحات وب اجرا کنند.
کتابخانه TensorFlow.js: یادگیری ماشین در مرورگر
اجرای مدلها و برنامههای یادگیری ماشین، به صورت سرویسهای «سمت کاربر» (Client-Side) در مرورگرها، فرصتهای جدیدی برای محققان پدید میآورد و پلتفرم توسعه نرمافزار جدیدی برای توسعه دهندگان یادگیری ماشین ایجاد میکند؛ با به وجود آمدن قابلیت اجرای مدلهای یادگیری ماشین در مرورگرها، حوزه تحقیقاتی و برنامهنویسی جدیدی به نام سیستمهای «یادگیری ماشین تعاملی» (Interactive Machine Learning) پدید میآید.
در جریان گردهمایی TensorFlow Developer Summit در سال 2018، دو نفر از افراد شاغل در تیم توسعه کتابخانه TensorFlow، «آموزش» (Train) یک مدل یادگیری ماشین را برای کنترل بازی PAC-MAN با استفاده از بینایی کامپیوتر و «وبکم» (WebCam) به نمایش گذاشتند.
ویژگی مهم نمایش ارائه شده از نحوه عملکرد کتابخانه یادگیری ماشین در جاوا اسکریپت (TensorFlow.js) این بود که تمامی مراحل اجرای برنامه (آموزش مدل و کنترل بازی PAC-MAN با استفاده از تکنیکهای بینایی کامپیوتر و وبکم)، به طور کامل، در مرورگر صفحات وب انجام شده بود.
تیم توسعه کتابخانه TensorFlow.js این امکان را برای کاربران و توسعهدهندگان مختلف فراهم آوردهاند تا قابلیتهای کتابخانه یادگیری ماشین در جاوا اسکریپت و نحوه عملکرد آن در کنترل بازی PAC-MAN را از طریق لینک [+] مشاهده کنند.

آموزش مدل با استفاده از کتابخانه یادگیری ماشین در جاوا اسکریپت
از دیدگاه کاربر عادی، اجرای مدلهای یادگیری ماشین در مرورگر وب بدین معنی است که دیگر نیازی به نصب کتابخانههای برنامهنویسی و برنامههای راهاندازی دستگاه (Drivers) روی سیستم وجود ندارد. تنها کاری که کاربر باید انجام دهد این است که مرورگر سیستم خود را باز، صفحه وب مرتبط با برنامهکاربردی تحت وب (برنامهای که مدل یادگیری ماشین در جاوا اسکریپت را اجرا میکند) را بارگذاری و برنامه کاربردی پیادهسازی شده را اجرا کند.
یکی از ویژگیهای مهم کتابخانه یادگیری ماشین در جاوا اسکریپت (TensorFlow.js)، امکان استفاده از شتاب پردازشی «واحدهای پردازش گرافیکی» (Graphical Processing Units | GPUs) برای آموزش و اجرای مدلهای یادگیری ماشین است. کتابخانه یادگیری ماشین در جاوا اسکریپت (TensorFlow.js)، به طور خودکار از قابلیتهای WebGL پشتیبانی میکند؛ به عبارت دیگر، زمانی که سیستم، وجود یک واحد پردازش گرافیکی را تشخیص دهد، اجرای کدهای نوشته شده، به صورت خودکار و بدون درگیر کردن کاربر با جزئیات، توسط واحد پردازش گرافیکی شتاب پیدا میکند.
یکی از قابلیتهای مهم هنگام استفاده از کتابخانه TensorFlow.js در پلتفرمهای همراه، امکان استفاده از اطلاعات و «دادههای حسگرها» (Sensor Data) برای مدلسازی روشهای یادگیری ماشین است. به بیان سادهتر، زمانی که کاربران یک صفحه وبِ اجرا کننده مدل یادگیری ماشین در جاوا اسکریپت را باز میکنند، مدل یادگیری ماشین (آموزش داده شده و یا در حال آموزش) قادر خواهد بود تا از دادههای حس شده توسط حسگرهایی نظیر «ژیروسکوپ» (Gyroscope) و «شتابسنج» (Accelerometer) بهره ببرد.
همچنین، تمامی دادههای واکشی یا حس شده (توسط سنسورها)، به صورت «سمت کاربر» (Client-Side) ذخیرهسازی و نگهداری میشوند. چنین قابلیت مهمی در کتابخانه یادگیری ماشین در جاوا اسکریپت، دو ویژگی بسیار مفید را برای TensorFlow.js و مدلهای یادگیری ماشین توسعه داده توسط این کتابخانه فراهم میآورد:
- کتابخانه TensorFlow.js را به یکی از مهمترین ابزارهای زبان جاوا اسکریپت جهت انجام عملیات «استنتاج کمتأخیر» (Low-Latency Inference) در پلتفرمهای همراه تبدیل میکند.
- امنیت کاربران را تأمین و از حریم خصوصی آنها محافظت میکند.
کاربردهای کتابخانه یادگیری ماشین در جاوا اسکریپت (TensorFlow.js)
در صورتی که برنامهنویسان و توسعهدهنگان، به توسعه مدلهای یادگیری ماشین در جاوا اسکریپت علاقهمند باشند، سه «جریان کاری» (Workflow) زیر را میتوانند برای توسعه برنامههای کاربردی هوشمند در نظر بگیرند:
- برنامهنویسان و توسعهدهندگان یادگیری ماشین میتوانند مدلهای موجود و «از پیش آموزش داده شده» (Pre-Trained Models) را برای انجام استنتاج، در برنامههای جاوا اسکریپت نوشته شده توسط TensorFlow.js وارد (import) کنند. به عبارت دیگر، در صورتی که یک مدل TensorFlow یا Keras از پیش آموزش داده شده موجود باشد، این امکان برای برنامهنویسان و توسعهدهندگان جاوا اسکریپت فراهم شده است تا این مدلها را به قالب پشتیبانی شده توسط جاوا اسکریپت تبدیل و برای انجام استنتاج، در مرورگر خود بارگیری (Load) کنند.
- این امکان برای برنامهنویسان و توسعهدهندگان زبان جاوا اسکریپت فراهم شده است تا یک مدل یادگیری ماشین وارد شده به سیستم را دوباره آموزش دهند (Re-Train). مانند نمایش ارائه شده از آموزش مدل یادگیری ماشین و کنترل بازی PAC-MAN با استفاده از بینایی کامپیوتر و وبکم، برنامهنویسان و توسعهدهندگان میتوانند با استفاده از تکنیکهای «یادگیری انتقال» (Transfer Learning)، یک مدل از پیش آموزش داده شده را دادههای اندکی آموزش دوباره دهند و آن را برای استنتاج در دامنه جدید آماده کنند.
- برای چنین کاری، از تکنیکی به نام «آموزش دوباره دستهبندهای تصویر» (Re-training Image Classifiers) استفاده میشود. در این تکنیک، از حجم کمی از دادههای جمعآوری شده در مرورگر، برای آموزش دوباره مدل از پیش آموزش داده شده، در دامنه کاربردی جدید استفاده میشود.
- ویژگی مهم چنین تکنیکهایی، صرفهجویی در زمان (لازم برای آموزش دوباره مدل با حجم عظیمی از دادهها) است. به عبارت دیگر، با استفاده از حجم بسیار کمی از دادههای آموزشی جدید، میتوان مدل از پیش آموزش داده شده را دوباره آموزش داد تا یک مدل دقیق یادگیری ماشین برای استنتاج در دامنههای کاربری جدید تولید شود.
- میتوان مدل یادگیری ماشین را به طور مستقیم در مرورگرها اجرا کرد. این امکان برای توسعهدهنگان و برنامهنویسان جاوا اسکریپت فراهم شده است تا عملیات طراحی، آموزش و اجرای مدلهای یادگیری ماشین را با استفاده از زبان جاوا اسکریپت و APIهای (واسطهای برنامهنویسی کاربردی) سطح بالا برای لایههای برنامهنویسی، به طور کامل در مرورگر انجام دهند.
- در صورتی که برنامهنویس با کتابخانه Keras آشنایی داشته باشد، بدون شک، با مبحث APIهای سطح بالا برای لایههای برنامهنویسی نیز آشنایی خواهد داشت.
مؤلفههای کد نویسی مدلهای یادگیری ماشین با کتابخانه TensorFlow.js
همانطور که پیش از این نیز اشاره شد، برنامهنویسان و توسعهدهندگان یادگیری ماشین میتوانند مدلهایTensorFlow یا Keras از پیش آموزش داده شده را برای انجام استنتاج، در برنامههای جاوا اسکریپت نوشته شده توسط TensorFlow.js مورد استفاده قرار دهند. همچنین، این مکان وجود دارد که فرایند طراحی و آموزش مدلهای یادگیری ماشین، به طور کامل، توسط زبان جاوا اسکریپت انجام شود.
در ادامه، بخشی از کدهای لازم برای آموزش مدل یادگیری ماشین و کنترل بازی PAC-MAN با استفاده از تکنیکهای بینایی کامپیوتر و وبکم نمایش داده میشود.
در این قسمت، ابتدا قطعه کد ControllerDataset نمایش داده میشود. در مثال بازی PAC-MAN، از یک «مجموعه داده» (Dataset) برای کنترلهای مبتنی بر وبکم استفاده شده است. این امکان برای کاربران فراهم شده است تا نمایش «تانسوری» (Tensor) از نمونههای مشابه با دادههای دیتاست را توسط قطعه کد زیر به مجموعه داده اضافه کنند.
در ادامه، قطعه کد اصلی برای آموزش مدل یادگیری ماشین و کنترل بازی PAC-MAN توسط وبکم و تکنیکهای بینایی کامپیوتر نمایش داده میشود:
در نهایت، قطعه کدهای مرتبط با پیادهسازی «واسط گرافیکی» (User Interface) جهت اجرای مدل یادگیری ماشین و کنترل بازی PAC-MAN نمایش داده خواهد شد.
قطعهکدهای نمایش داده شده، تنها بخشی از کدهای لازم برای آموزش مدل یادگیری ماشین و کنترل بازی PAC-MAN توسط وبکم و تکنیکهای بینایی کامپیوتر است. به عبارت دیگر، تنها کدهای زبان جاوا اسکریپت در این بخش نمایش داده شده است. قطعه کدهای لازم برای طراحی صفحه وب و کدهای مورد نیاز برای نمونهسازی یا قالبسازی محتویات، در این مطلب نمایش داده نشده است. برای مشاهده مجموعه کامل کدهای لازم برای پیادهسازی مثال بازی PAC-MAN و دانلود آنها، به لینک [+] مراجعه کنید.
کتابخانه یادگیری ماشین در جاوا اسکریپت (TensorFlow.js)، یک واسط برنامهنویسی کاربردی سطح پایین (که پیش از این با نام deeplearn.js شناخته میشد) را نیز شامل میشود. همچنین، کتابخانه یادگیری ماشین در جاوا اسکریپت از الگوی کد نویسی «اجرای مشتاقانه» (Eager Execution) نیز پشتیبانی میکند.
الگوی کد نویسی اجرای مشتاقانه، یک «واسط دستوری» (Imperative Interface) برای کتابخانه TensorFlow تعریف میکند؛ الگوی کد نویسی اجرای مشتاقانه، کد نویسی TensorFlow در زبان جاوا اسکریپت را سادهتر و زمان اجرای کدها را به شدت کاهش میدهد. به عنوان نمونه، قطعه کد زیر برای انجام یک عمل محاسباتی ساده در TensorFlow میتواند مورد استفاده قرار بگیرد:
با استفاده از الگوی کد نویسی اجرای مشتاقانه، قطعه کد بالا به فرم ساده زیر تبدیل میشود:
وجه شباهت TensorFlow.js و deeplearn.js
کتابخانه TensorFlow.js، که به عنوان اکوسیستمی از ابزارهای زبان جاوا اسکریپت برای یادگیری ماشین محسوب میشود، جانشین deeplearn.js محسوب و هماکنون، با نام TensorFlow.js Core شناخته میشود.
همچنین، کتابخانه TensorFlow.js یک واسط برنامهنویسی کاربردی لایهها (Layers API) را نیز شامل میشود که یک کتابخانه سطح بالاتر برای ساختن مدلهای یادگیری ماشین محسوب میشود. این واسط برنامهنویسی کاربردی لایهها از TensorFlow.js Core و دیگر ابزارها برای «پورت کردن» (Porting) خودکار مدلهای ذخیره شده TensorFlow و مدلهای hdf5 کتابخانه Keras استفاده میکند.
کتابخانه TensorFlow.js، از کتابخانه WebGL برای ارائه بسیاری از قابلیتهای خود به برنامهنویسان و توسعهدهندگان استفاده میکند. این کتابخانه، یک واسط برنامهنویسی کاربردی سطح بالا برای لایههای برنامهنویسی، جهت طراحی مدلهای یادگیری ماشین و یک واسط برنامهنویسی کاربردی سطح پایین، برای «جبر خطی» (Linear Algebra) و «مشتقگیری یا دیفرانسیلگیری خودکار» (Automatic Differentiation) فراهم میکند.
در حال حاضر، در کتابخانه TensorFlow.js، امکان import کردن مدلهای ذخیره شده TensorFlow و مدلهای Keras، برای برنامهنویسان و توسعهدهندگان جاوا اسکریپت فراهم شده است.
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای دادهکاوی و یادگیری ماشین
- مجموعه آموزشهای برنامهنویسی جاوا اسکریپت
- آموزش اصول و روشهای دادهکاوی (Data Mining)
- مجموعه آموزشهای هوش مصنوعی
- پرسپترون چند لایه در پایتون — راهنمای کاربردی
- نقشه دانش فناوریهای هوش مصنوعی و دسته بندی آنها — راهنمای جامع
- کد نویسی شبکه های عصبی مصنوعی چند لایه در پایتون — راهنمای کامل
- یادگیری عمیق (Deep Learning) با پایتون — به زبان ساده
^^
سلام با توجه به تحریم بودن میشه از کتابخانه تنسور فلو استفاده کرد؟؟