تنسور
فلو (TensorFlow)
یک
کتابخانهی
برنامهنویسی
رایگان
و متن باز (open
source) برای
یادگیری ماشین و هوش مصنوعی است که
طیف
وسیعی از وظایف را انجام میدهد.
ولی
بیشتر
بر
آموزش
و استنتاج شبکههای عصبی عمیق تمرکز
دارد.
تنسورفلو
توسط تیم Google
Brain برای
استفادهی داخلی گوگل در تحقیقات و تولید
محصولات نرمافزاری توسعه داده شده و
در نهم نوامبر ۲۰۱۵ تحت گواهینامهی
آپاچی ۲ به صورت عمومی منتشر شد.
از
آن زمان تاکنون تنسورفلو به یکی از
محبوبترین چارچوبهای کاری (framework)
برای
پروژههای یادگیری عمیق تبدیل شده است.
درواقع پیدایش تنسورفلو را باید در سال ۲۰۱۱ جستجو کرد. زمانی که Google Brain سیستم DistBelief را به عنوان یک سیستم یادگیری ماشین اخصاصی بر اساس شبکههای عصبی عمیق ساخت. استفاده از این سیستم در برنامههای تجاری و تحقیقاتی به سرعت رشد کرد. گوگل تیمی از دانشمندان کامپیوتر را مامور کرد که پایگاه کد DistBelief را به یک کتابخانهی سریعتر و قویتر برای یادگیری ماشین تبدیل کنند. به این ترتیب تنسورفلو متولد شد. Jeff Dean نیز که اکنون سرپرست بخش هوش مصنوعی گوگل است در این تیم حضور داشت.
Jeff Dean
قبل از آن در سال ۲۰۰۹ تیمی به رهبری Geffrey Hinton، الگوریتم پسانتشار تعمیم یافته و پیشرفتهای دیگر را پیادهسازی کرده بودند که امکان تولید شبکههای عصبی را فراهم میکرد که دقت آنها نسبت به قبل به صورت قابل توجهی بالاتر بود. با استفاده از این الگوریتمها و دستاوردهایی که تحقیقات Hinton و تیمش داشت این امکان فراهم شد که تیم Google Brain بتواند یک کتابخانهی با سرعت و دقت بالا تولید کند.
نسخهی ۱.۰.۰ تنسورفلو، یازدهم فوریه سال ۲۰۱۷ منتشر شد. با وجود آنکه پیادهسازی مرجع (Reference Implementation) این کتابخانه در دستگاههای منفرد (Single Devices) اجرا میشد، این نسخه قابل اجرا روی چندین CPU و GPU (با افزونههای اختیاری CUDA و SYCL برای انجام پردازشهای همه منظوره روی واحد پردازندهی گرافیکی) بود. کتابخانهی تنسورفلو برای سیستمعاملهای ۶۴ بیتی لینوکس، ویندوز، macOS و پلتفرمهای موبایل مانند اندروید و iOS موجود است.
این کتابخانه دارای معماری انعطافپذیری است که امکان توسعهی آسان آن را برای پلتفرمهای گوناگون (GPU ،CPU و TPU)، و از دسکتاپ گرفته تا خوشهای از سرورها، موبایلها و هاستهای شبکه فراهم میکند. محاسبات تنسورفلو به صورت گرافهای جریان دادهی حالتمند (Stateful Dataflow Graphs) بیان میشود. نام تنسورفلو از عملیاتی گرفته شده است که شبکههای عصبی روی آرایههای دادهی چندبعدی که از آنها با عنوان تانسور یاد میشود، انجام میدهند. در کنفرانس گوگل I/O که در ژوئن ۲۰۱۸ برگزار شد، Jeff Dean بیان کرد که ۱۵۰۰ مخزن در گیتهاب (GitHub)، از تنسورفلو نام بردهاند (آن را منشن کردهاند) که تنها پنج مورد از آنها توسط گوگل بوده است.
در می ۲۰۱۶، گوگل از واحد پردازش تانسور (Tensor Processing Unit - TPU) پردهبرداری کرد که یک مدار مجتمع (Integrated Circuit) یا تراشهی کامپیوتری با کاربردی خاص است. این تراشه، برای کاربردهای یادگیری ماشین و تنسورفلو طراحی شده بود.TPU یک شتابدهندهی هوش مصنوعی (AI accelerator) قابل برنامهریزی است که برای فراهم کردن توان عملیاتی (Throughput) بالا برای محاسبات دقت پایین (Low-Precision Arithmetic) (برای مثال ۸ بیتی) طراحی شده است. این شتابدهنده، عملکرد بهینهسازی بهتری را برای یادگیری ماشین فراهم کرده است.
در می ۲۰۱۷، گوگل انتشار نسل دوم TPUها را اعلام کرد که برای موتور محاسبهی گوگل (Google Compute Engine) ارائه شده بودند. TPUهای نسل دوم، کارایی تا ۱۸۰ ترافلاپس (Teraflops) را فراهم میکردند و هنگامی که در خوشههای ۶۴ تایی قرار میگرفتند، تا ۱۱.۵ پتافلاپس (petaflops) کارایی را رقم میزدند. در فوریه ۲۰۱۸، گوگل اعلام کرد که در حال ساخت نسخهی جدید TPU برای پلتفرم گوگل کلود (Google Cloud Platform) هستند. در جولای ۲۰۱۸، Edge TPU منتشر شد.Edge TPU، یک تراشهی ASIC ساخته شده برای هدف خاص است که برای اجرا روی مدلهای یادگیری ماشینTensorFlow Lite در دستگاههای محاسباتی کوچک مانند گوشیهای هوشمند کوچک طراحی شده است. این موضوع با عنوان رایانش لبهای (Edge Computing) شناخته شده است.
یکی از ویژگیهای تنسورفلو تمایز خودکار (AutoDifferentiation) است. این ویژگی به فرایند محاسبهی خودکار بردار شیب یک مدل اشاره دارد. با این ویژگی تنسورفلو به صورت خودکار شیبها را برای پارامترهای یک مدل محاسبه میکند. این کار برای الگوریتمهایی مثل پسانتشار که برای بهینه کردن عملکرد به شیب نیاز دارند مفید است.
تنسورفلو یک حالت اجرای مشتاقانه (eager execution) دارد که در آن اعمال مختلف بلافاصله مورد ارزیابی قرار میگیرند. یعنی بجای اینکه به یک نمودار محاسباتی اضافه شده و بعد از تکمیل نمودار محاسباتی اجرا شوند، بلافاصله ارزیابی شده و اجرا میشوند. کدهایی را که به صورت مشتاقانه اجرا میشوند، میتوان مرحله به مرحله از نظر وجود اشکال بررسی کرد که به دلیل شفافیت کار اشکال زدایی را آسانتر میکند.
مدلهای یادگیری ماشین، مخصوصاً شبکههای عصبی عمیق در اغلب مواقع نیازمند محاسبات حجیم هستند. یک راهکار عملی و مناسب برای اجرای سریعتر محاسبات حجیم پردازش موازی روی چندین دستگاه است. تنسورفلو در هر دو حالت اجرای گراف (graph execution) و اجرای مشتاقانه (eager execution) یک API برای توزیع محاسبات روی چندین دستگاه ارائه میکند. این محاسبات توزیع شده سرعت آموزش و ارزیابی مدلهای یادگیری ماشین را به شکل چشمگیری افزایش میدهد.
تنسورفلو مجموعهای از توابع ضرر ارائه میکند؛ به عنوان مثال تابع میانگین مربعات خطا MSE و آنتروپی مقطع باینری BCE. این توابع تفاوت خروجی مدل و خروجی مورد انتظار را محاسبه میکنند. بسته به کاربرد مورد نظر و با توجه به مجموعهدادهها، برای مدلهای یادگیری ماشین مختلف توابع ضرر مختلفی برای اولویتبندی جنبههای خاصی از عملکرد استفاده میشوند. از این رو در تنسورفلو توابع ضرر مختلفی ارائه شده است.
پس از طراحی مدل و آموزش آن با مجموعه دادههای آموزشی لازم است که عملکرد مدل یادگیری ماشین مورد ارزیابی قرار گیرد. برای ارزیابی عملکرد مدلهای یادگیری ماشین، تنسورفلو معیارهای رایج را استفاده میکند. معیارهای دقت (Accuracy) مختلف دودویی، دستهبندی و دستهبندی پراکنده در کنار معیارهای دیگر مثلPrecision، Recall و Intersection-over-Union (IoU) در تنسورفلو برای استفاده ارائه شدهاند.
تنسورفلو مجموعهای از بهینهسازها را برای آموزش شبکههای عصبی از جمله ADAGRAD، ADAM و Stochastic Gradient Decent (SED) ارائه میکند. در زمان آموزش یک مدل، بهینهسازهای مختلف حالتهای مختلف تنظیم پارامترها را ارائه میکنند. تنظیم این پارامترها بر همگرایی و عملکرد مدل تاثیرگذار است.
ویژگی دیگر تنسورفلو این است که میتواند در طیف گستردهای از زبانهای برنامهنویسی استفاده شود. کتابخانهی تنسورفلو دارای رابطهای برنامهنویسی کاربردی (Application programming interface - API) پایدار برای زبان برنامهنویسی پایتون و زبان C است. همچنین، رابطهای فاقد تضمین سازگاری رو به عقب (backward compatible) برای زبانهای ++C، Go، Java، JavaScript و Swift است. علاوه بر اینها، دارای بستههای شخص ثالث (Third Party Packages) برای #C، Haskell، Julia، R، Scala، Rust، OCaml و Crystal است. با توجه به این گوناگونی، تنسورفلو در کاربردهای بسیار متنوع مورد استفاده قرار میگیرد.
حوزههای کاربردی تنسورفلو به وسعت و تنوع کاربردهای هوش مصنوعی و یادگیری ماشین است. مثل حوزهی سلامت، رسانههای اجتماعی، موتورهای جستجو، آموزش، تجارت، صنعت، تحقیقات و پژوهشهای علمی و هر جایی که نیاز به استفاده از یادگیری ماشین باشد.
به عنوان نمونه در حوزهی سلامت، GE Healthcare برای افزایش سرعت و دقت MRI در تشخیص اعضای خاص بدن از تنسورفلو استفاده میکند. به عنوان مثالی دیگر در این زمینه، یک برنامهی رایگان موبایل به نام DreamAssist توسط گوگل با تنسورفلو ساخته شده است. با این برنامه کاربران از پوست خود عکس میگیرند و برنامه عوارض بالقوهی سلامتی را شناسایی میکند. نمونهی دیگر Sinovation Ventures است که برای شناسایی و طبقهبندی بیماریهای چشمی، با استفاده از اسکنهای توموگرافی انسجام نوری (OCT)، از تنسورفلو استفاده میکند.
در حوزهی رسانههای اجتماعی توییتر برای رتبهبندی توییتها بر اساس اهمیت آنها برای یک کاربر معین از تنسورفلو استفاده کرده است. ترتیب نمایش توییتها به کاربر بر اساس همین اهمیتی است که از طریق تنسورفلو کشف شده. قبل از آن توییتها به ترتیب معکوس زمانی به کاربر نشان داده میشدند. برنامهی اشتراکی عکس VSCO نیز از تنسورفلو برای کمک به پیشنهاد فیلترهای سفارشی برای عکسها استفاده میکند.
یک پلتفرم آموزش مجازی به نام InSpace از تنسورفلو برای فیلتر کردن پیامهای چت رسمی در کلاسهای درس استفاده میکند. Liulishuo نیز که یک پلتفرم آموزش آنلاین انگلیسی است از تنسورفلو استفاده میکند تا برای هر دانشآموز یک برنامهی تطبیقی ایجاد نماید. این پلتفرم با استفاده از تنسورفلو تواناییهای فعلی دانشآموزان را ارزیابی میکند. سپس تنسورفلو بر اساس قابلیتهای دانشآموز، برای بهترین محتوایی که میتوان در آینده به وی نمایش داد تصمیمگیری میکند.
پلتفرم تجارت الکترونیک Carousell از تنسورفلو استفاده کرده تا برای مشتریانش توصیههای شخصی داشته باشد. از طرف دیگر یک شرکت لوازم آرایشی به نام ModiFace از تنسورفلو برای ایجاد یک تجربهی واقعیت افزوده برای مشتریان استفاده میکند. مشتریان با استفاده از این واقعیت افزوده میتوانند مواد مختلف آرایشی، مثلاً سایههای مختلف را روی صورت خود آزمایش کنند.
به عنوان آخرین حوزهی کاربردی تنسورفلو در این نوشتار به نمونههایی در تحقیقات و پژوهش میپردازیم. امروزه علوم مختلف از هوش مصنوعی و یادگیری ماشین برای شبیهسازیهای مورد نظر و تحلیل دادههای جمعآوری شده استفاده میکنند و ممکن است که یک مدل یادگیری عمیق را پیادهسازی و اجرا نمایند. در چنین مواقعی اولین چارچوب کاری یادگیری عمیق که ممکن است برای پیادهسازی انتخاب شود تنسورفلو است. به عنوان مثال تنسورفلو پایه و اساس نرمافزار DeepDream برای درک تصویر (image captioning) خودکار است.
همانگونه که تا امروز اینگونه بوده تنسورفلو با گستردگی پشتیبانی از زبانهای برنامهنویسی و پلتفرمهای مختلف و با توجه به امکانات و ویژگیهای فوقالعادهای که دارد، میتواند در تولید نرمافزارهای هوشمند و انجام تحقیقات پژوهشی مورد استفاده قرار گرفته و سرعت، دقت و کیفیت محصولات نرمافزاری را افزایش دهد.