TensorFlow چیست و چگونه کار میکند؟
TensorFlow که توسط نخبگان گوگل ساخته شده یک کتابخانه منبعباز برای محاسبات عددی و یادگیری ماشین در مقیاس بزرگ است. تنسورفلو مدلها و الگوریتمهای یادگیری ماشین و یادگیری عمیق (با نام مستعار شبکههای عصبی) را درهم آمیخته و آنها را به شکل مفید و قابل استفادهای تبدیل میکند. این کتابخانه از پایتون برای فراهم کردن یک API خوش ساخت برای ساخت اپلیکیشنها استفاده میکند که این اپلیکیشنها با عملکرد سطح بالایی اجرا میشوند. تنسورفلو میتواند شبکههای عصبی عمیق را برای طبقهبندی ارقام دستنویس شده، تشخیص تصویر، شبکههای عصبی بازگشتی (Recurrent Neural Networks)، مدلهای دنباله به دنباله برای ترجمه ماشین، پردازش زبان طبیعی و شبیهسازیهای مبتنی بر معادله دیفرانسیل با مشتقات پارهای (PDE) سرنام Partial Differential Equation آموزش داده و اجرا کند.
TensorFlow چگونه کار میکند
تنسورفلو به توسعهدهندگان اجازه میدهد تا نمودارهای گردش داده (dataflow graphs) ساختارهایی که چگونگی حرکت دادهها از طریق نمودار را توصیف میکنند یا مجموعهای از گرههای پردازشی را ایجاد کنند. هر گره در این نمودار یک عمل ریاضی را نشان میدهد و هر اتصال یا لبه بین گرهها بیانگر یک آرایه داده چندبعدی یا یک تنسور است. TensorFlow تمامی این امکانات را با زبان برنامهنویسی پایتون در اختیار برنامهنویسان قرار میدهد. یادگیری و کار با پایتون ساده است و روشهای مناسبی برای بیان چگونگی ترکیب انتزاعات سطح بالا (high-level abstractions) با یکدیگر فراهم میکند. گرهها و تنسورها در تنسورفلو اشیا پایتون هستند و اپلیکیشنهای تنسورفلو خودشان اپلیکیشنهای پایتون هستند. با این حال ، عملیات ریاضی واقعی در پایتون انجام نمیشود. کتابخانههایی که تنسورفلو ارائه میکند به زبان قدرتمند سی پلاسپلاس نوشته شدهاند. گوگل برای آنکه عملکرد این کتابخانهها را افزایش دهد به بهترین شکل آنها را بهینهسازی کرده است. پایتون تنها ترافیک بین مولفهها را هدایت میکند و انتزاعات برنامهنویسی سطح بالایی را برای اتصال آنها به یکدیگر فراهم میکند.
اپلیکیشنهای TensorFlow را میتوان روی اکثر پلتفرمهای موجود از قبیل یک ماشین محلی، یک کلاستر در ابر، دستگاههای اندروید و iOS و همچنین پردازندههای مرکزی و پردازندههای گرافیکی اجرا کرد. اگر از ابر اختصاصی گوگل استفاده میکنید این قابلیت را در اختیار دارید تا برای شتاب بیشتر، تنسورفلو را روی واحد پردازش تنسور (TPU) سرنام TensorFlow Processing Unit گوگل که یک مدار مجتمع با کاربرد خاص است اجرا کنید. TPU یک شتابدهنده هوش مصنوعی قابل برنامهریزی است که برای فراهم کردن توان عملیاتی بالا در محاسبات دقت پایین طراحی شده است. در فوریه ۲۰۱۸، گوگل اعلام کرد که در حال ساخت نسخه ویژهای از TPU برای پلتفرم گوگل کلاود است. مدلهای ساخته شده توسط تنسورفلو در اغلب دستگاههایی که برای انجام پیشبینیها به کار گرفته میشوند، قابل استفاده هستند.
TensorFlow 2.0 که نسخه بتای آن ژوئن ۲۰۱۹ منتشر شد با تغییرات نسبتا زیادی همراه بود. این تغییرات بر مبنای بازخوردهای کاربران اعمال شد که برخی از ویژگیهای نسخه پیشین (مثل استفاده از Keras API برای مدل آموزشی) دستخوش تغییرات زیربنایی شدند تا کار با این چهارچوب یادگیری ماشینی راحتتر و قدرتمندتر شود. به لطف یک API جدید آموزش توزیع شده سادهتر شده و با پشتیبانی از TensorFlow Lite که بهطور ویژه برای توسعه موبایل معرفی شده این امکان فراهم شده تا به توان مدلها را در انواع بیشتری از پلتفرمها پیادهسازی کرد. اما کدهای نوشته شده برای نسخههای قبلی تنسورفلو را باید از نو بنویسید (گاهی اوقات با کمی تغییر، گاهی اوقات بهطور کامل) تا بتوانید از تمام مزایای TensorFlow 2.0 بهرهمند شوید.
مزایای تنسورفلو
بزرگترین مزیتی که تنسورفلو برای توسعه یادگیری ماشین فراهم میکند انتزاع (abstraction) است. در دنیای محاسبات کامپیوتری و مهندسی نرمافزار انتزاع به معنای تفکیک مباحث مربوط به هم و نگریستن به موضوع جدای از مباحث وابسته به آن است. انتزاع در مهندسی نرمافزار به مدیریت دقیقتر پیچیدگیها کمک کرده و مانع از آن میشود که مولفههای یک سیستم وابستگی شدید به یکدیگر پیدا کنند. به جای پرداختن به جزییات زیربنایی اجرای الگوریتمها یا کشف راههای مناسب برای وصل کردن خروجی یک تابع به ورودی تابع دیگر، توسعهدهنده میتواند روی منطق کلی برنامه تمرکز کند در حالیکه تنسورفلو در پشت صحنه به جزییات رسیدگی خواهد کرد.
تنسورفلو امکانات دیگری را برای سهولت کار در اختیار توسعه دهندگانی قرار میدهد که میخواهند اپلیکیشنهای تنسورفلو را اشکالزدایی کنند. تاکنون، اشکالزدایی (Debugging) در TensorFlow فرآیند خیلی سختی بود. ساعتهای زیادی زمان میبرد تا به توان کدهای تنسورفلو را اشکالزدایی کرد. اما در نسخه دوم این چهارچوب اشکالزدایی به مراتب سادهتر شده است.
حالت اجرای حریصانه (eager execution) که برای همه دانشجویان رشته هوش مصنوعی نام آشنا است، این امکان را میدهد تا به جای ساخت کل نمودار به عنوان یک شی کدر و مات و ارزیابی یکباره آن، همه عملکردهای نمودار را بهطور جداگانه و شفاف ارزیابی و اصلاح کنید. برای ساخت یک شبکه عصبی در نسخه ۱.x این فریم ورک باید یک ساختار داده انتزاعی بهنام نمودار (Graph) را تعریف میکردید. همچنین اگر شما تلاش میکردید از یکی از گرههای این نمودار خروجی بگیرید، مقادیری که انتظار داشتید را به دست نمیآوردید. برای اجرای این Graph به یک خلاصهساز بهنام Session نیاز داشتیم و با استفاده از متد Session.run() میتوانستیم دادههای پایتون را به این Graph وارد کنیم. eager execution این رویه را تغییر داد. اکنون کدهای تنسورفلو میتوانند مثل کدهای عادی پایتون اجرا شوند. کدهای TensorFlow 2.0 شباهت زیادی به کدهای NumPy دارند. اشیا NumPy و TensorFlow را میتوان به سادگی با یکدیگر مبادله کرد.
مصورسازی TensorBoard اجازه میدهد تا نحوه عملکرد نمودارها را از طریق یک داشبورد تعاملی و مبتنی بر وب بررسی و نمایهسازی کنید. توسعهدهندگان میتوانند در نسخه جدید از متد fit() برای تعریف و تنظیم یک نمونه از TensorBoard استفاده کنند. توسعهدهنده TensorBoard را به صورت بازگشتی به متد fit اضافه میکند. مادامی که از متد fit() استفاده میشود، متد فوق به هر دو صورت رابط کاربردی برنامهنویسی متوالی (Sequential) و رابط کاربری برنامهنویسی فرعی (Subclassing) کار خواهد کرد.
امکانات جانبی همراه با تنسورفلو
تنسورفلو به پشتوانه فهرستی از محصولات تجاری توسعه یافته در گوگل (A-list) مزایای زیادی به دست آورد. این محصولات تجاری توانستند به خوبی قدرت تنسورفلور را نشان دهند. گوگل نه تنها به روند پیشرفت این پروژه سرعت بخشیده، بلکه قابلیتهای جانبی قابلملاحظهای برای تنسورفلو ارائه کرده که امکان استقرار و استفاده از این چهارچوب را آسانتر میکند. از مهمترین قابلیتهای جانبی پیرامون تنسورفلو به موارد زیر میتوان اشاره کرد:
- واحد پردازش تنسور (TPU) که عملکرد گوگل کلاود را بهبود بخشیده و سریعتر کرده
- یک هاب آنلاین برای بهاشتراکگذاری مدلهای ساخته شده با این چهارچوب
- ارائه یک ساختار کاربردی مبتنی بر مرورگر و موبایل برای سهولت دسترسی به این چهارچوب و…. از جمله خدماتی هستند که گوگل ارائه کرده است.
بهینهسازی API
قوانین نامگذاری خاص متعددی برای تنسورفلو وجود دارد که در بسیاری از موارد، کاربران هنگام استفاده از TensorFlow نمیدانند که دقیقا از کدام API استفاده کنند. این مساله معمولا به دلایلی مثل اضافه شدن بیش از حد بستههای جدید، منسوخ شدن رابطهای کاربردی برنامهنویسی و تغییر نام متعدد رابطهای کاربردی برنامهنویسی رخ میدهد. در آخرین نسخه از تنسورفلو بسیاری از رابطهای کاربردی برنامهنویسی شبیه به tf.gans، tf.app، tf.contrib، tf.flags یا حذف شده یا به مخازن جدید منتقل شدهاند. برخی از رابطهای کاربردی برنامهنویسی نیز با معادل ۲.۰ خود جایگزین شدهاند که از آن جمله میتوان به tf.keras.metrics ، tf.summary و tf.keras.optimizers اشاره کرد. اما یکی از مهمترین اصلاحات صورت گرفته مربوط به نحوه ساخت مدلها است.
رابط کاربردی برنامهنویسی مقدماتی از نسخه ۱.x به ۲.۰ تغییر چندانی نداشت، اما حالا Keras به رابط کاربردی برنامهنویسی پیشفرض تبدیل شده است. Keras مجموعهای از لایهها است که نحوه ساخت شبکههای عصبی با استفاده از یک استاندارد مشخص را توصیف میکند. Keras-tuner
نیز یک کتابخانه اختصاصی برای افزایش پارامترهای بهینهسازی مدلهای Keras است که در حال حاضر مراحل مقدماتی خود را پشت سر میگذارد و به خوبی با نسخه بتای Tensorflow 2.0 سازگار است.
تنسورفلو در مقابل رقبایش
تنسورفلو با تعداد دیگری از چهارچوبهای یادگیری ماشین در حال رقابت است. PyTorch، CNTK و MXNet سه نمونه از اصلیترین رقبای آن هستند که خدمات تقریبا یکسانی را ارائه میکنند:
- PyTorch: علاوه بر ساخته شدن توسط پایتون، شباهتهای زیادی با تنسورفلو دارد. تجهیزات شتابدهنده سختافزاری، یک مدل توسعه تعاملی که امکان طراحی رابطهای کاربردی را فراهم میکند و امکانات مفید دیگری که این چهارچوب ارائه میکند دست کمی از تنسورفلو ندارند. اساسا PyTorch انتخاب بهتری برای توسعه سریع پروژههایی است که در کوتاه مدت نیاز به پیادهسازی و اجرا دارند، اما تنسورفلو برای پروژههای بزرگتر و پیچیدهتر بهتر عمل میکند.
- CNTK، جعبه ابزار شناختی مایکروسافت نیز مثل تنسورفلو از یک ساختار نمودار برای توصیف جریان داده استفاده میکند، اما بیشتر روی ساخت شبکههای عصبی یادگیری عمیق تمرکز دارد. CNTK خیلی از کارهای شبکه عصبی را با سرعت بیشتری مدیریت میکند و از مجموعه رابطهای کاربردی برنامهنویسی گستردهتری (پایتون، سیپلاسپلاس، سیشارپ و جاوا) پشتیبانی میکند، اما در حال حاضر یادگیری و پیادهسازی CNTK به راحتی TensorFlow نیست.
- Apache MXNet، این چهارچوب که توسط آمازون به عنوان چهارچوب اصلی یادگیری عمیق در AWS ارائه شده، قادر است از چند پردازنده گرافیکی و چند ماشین استفاده کند. همچنین از طیف نسبتا گستردهای از زبانها شبیه به پایتون، سیپلاسپلاس، اسکالا، آر، جاوااسکریپت، جولیا، پرل و گو پشتیبانی میکند. هر چند کار با رابطهای کاربردی برنامهنویسی اصلی آن به راحتی رابطهای کاربردی برنامهنویسی TensorFlow نیست.
منبع:شبکه-مگ