پایتورچ چیست؟
آگوست 16, 2023یادگیری تنسور در پایتورچ
آگوست 16, 2023آشنایی کامل با پایتورچ
PyTorch چیست؟
PyTorch یک کتابخانه یادگیری ماشین منبع باز است که در محاسبات تانسور، تمایز خودکار و شتاب GPU تخصص دارد. به همین دلایل، PyTorch یکی از محبوبترین کتابخانههای یادگیری عمیق است که با Keras و TensorFlow برای دریافت جایزه «پرکاربردترین» بسته یادگیری عمیق رقابت میکند.
PyTorch به دلیل ماهیت پایتونیک و سهولت توسعه پذیری (به عنوان مثال، پیاده سازی انواع لایه های مرسوم، معماری شبکه و غیره) در میان جامعه تحقیقاتی محبوبیت خاصی دارد.
در این آموزش، اصول اولیه کتابخانه یادگیری عمیق PyTorch را مورد بحث قرار خواهیم داد. از هفته آینده، تجربه عملی با استفاده از PyTorch برای آموزش شبکههای عصبی، انجام طبقهبندی تصاویر، و اعمال تشخیص اشیا بر روی تصاویر و ویدیوهای بلادرنگ به دست خواهید آورد.
بیایید شروع به یادگیری در مورد PyTorch کنیم!
PyTorch بر اساس Torch، یک چارچوب محاسباتی علمی برای Lua است. قبل از PyTorch و Keras/TensorFlow، بستههای یادگیری عمیق مانند Caffe و Torch محبوبترین بستهها بودند.
با این حال، از آنجایی که یادگیری عمیق تقریباً باعث تحول در خیلی اززمینههای علوم رایانه شد، توسعهدهندگان و محققان خواستار یک کتابخانه کارآمد و آسان برای ساخت، آموزش و ارزیابی شبکههای عصبی در زبان برنامهنویسی پایتون بودند.
پایتون، همراه با R، دو زبان برنامهنویسی محبوب برای دانشمندان داده و یادگیری ماشین هستند، بنابراین طبیعی است که محققان الگوریتمهای یادگیری عمیق را در اکوسیستم پایتون خود بخواهند.
François Chollet، محقق هوش مصنوعی گوگل، Keras را در مارس 2015 توسعه و منتشر کرد، یک کتابخانه منبع باز که یک API Python برای آموزش شبکه های عصبی ارائه می دهد. Keras به دلیل استفاده آسان API که نحوه عملکرد scikit-learn، کتابخانه استاندارد یادگیری ماشینی واقعی برای پایتون، را مدلسازی می کرد، به سرعت محبوبیت پیدا کرد.
گوگل اولین نسخه TensorFlow خود را در نوامبر 2015 منتشر کرد. TensorFlow نه تنها به پشتوانه/موتور پیشفرض برای کتابخانه Keras تبدیل شد، بلکه تعدادی از ویژگیهای سطح پایینتر را نیز پیادهسازی کرد که متخصصان و محققان پیشرفته یادگیری عمیق به آن نیاز داشتند .
با این حال، مشکلی وجود داشت – API TensorFlow v1.x خیلی پایتونیک نبود و استفاده از آن بصری و آسان نبود. برای حل این مشکل PyTorch، با حمایت مالی فیس بوک و تایید شده توسط Yann LeCun (یکی از پدربزرگ های تجدید حیات شبکه عصبی مدرن، و محقق هوش مصنوعی در فیس بوک)، در سپتامبر 2016 منتشر شد.
PyTorch بسیاری از مشکلاتی که محققان با Keras و TensorFlow داشتند را حل کرد. با این که Keras بسیار آسان برای استفاده است،اما به دلیل ماهیت و طراحی خود برخی از عملکردهای سطح پایین و مرسوم مورد نیاز محققان را نشان نمی دهد.
نکته دیگر اینکه اغلب سخت بود که اسناد TensorFlow را بررسی کرد تا دقیقاً به چه تابعی نیاز است. به طور خلاصه، Keras API سطح پایین مورد نیاز محققان را ارائه نکرد و API TensorFlow آنقدرها هم دوستانه نبود.
PyTorch این مشکلات را با ایجاد یک API که هم پایتونیک بود و هم سفارشیسازی آن آسان بود، حل کرد و اجازه میداد انواع لایههای جدید، بهینهسازها و معماریهای جدید پیادهسازی شوند. گروه های تحقیقاتی به آرامی شروع به پذیرش PyTorch کردند و از TensorFlow تغییر مکان دادند. در اصل، به همین دلیل است که امروزه بسیاری از محققان از PyTorch در آزمایشگاه های خود استفاده می کنند.
کتابخانه PyTorch را می توان با استفاده از pip و cmd نصب کرد:
pip install torch torchvision
پایتورچ و تنسور
تبریک می گویم که اکنون PyTorch را روی دستگاه خود نصب کرده اید!
PyTorch داده ها را به صورت آرایه های چند بعدی NumPy مانند به نام تانسور نشان می دهد. تانسورها ورودیهای شبکه عصبی، نمایشهای لایه پنهان و خروجیها را ذخیره میکنند.
در اینجا مثالی از مقداردهی اولیه یک آرایه با NumPy آورده شده است:
import numpy as np
np.array([[0.0, 1.3], [2.8, 3.3], [4.1, 5.2], [6.9, 7.0]])
array([[0. , 1.3],
[2.8, 3.3],
[4.1, 5.2],
[6.9, 7. ]])
ما می توانیم همان آرایه را با استفاده از PyTorch به صورت زیر مقداردهی کنیم:
import torch
torch.tensor([[0.0, 1.3], [2.8, 3.3], [4.1, 5.2], [6.9, 7.0]])
tensor([[0.0000, 1.3000],
[2.8000, 3.3000],
[4.1000, 5.2000],
[6.9000, 7.0000]])
به نظر نمیرسد که این مسئله مهمی باشد، اما PyTorch میتواند به صورت پویا یک گراف از این تانسورها تولید کند و سپس تمایز خودکار را در آنها اعمال کند:
PyTorch قادر است:
- یک گراف از یک شبکه عصبی جمع آوری کند
- یک پاس رو به جلو انجام دهید (یعنی پیش بینی کنید)
- ضرر/خطا را محاسبه کند
- شبکه را به سمت عقب طی کند (یعنی پس انتشار) و پارامترهای شبکه را طوری تنظیم کند که (در حالت ایده آل) پیش بینی های دقیق تری را بر اساس تلفات/خروجی محاسبه شده انجام دهد.
گام شماره 4 همیشه خسته کننده ترین و زمان برترین مرحله برای اجرای دستی است. خوشبختانه برای ما، PyTorch به طور خودکار از آن مرحله مراقبت می کند.
توجه: کاربران Keras معمولاً فقط model.fit را برای آموزش شبکه فراخوانی می کنند در حالی که کاربران TensorFlow از کلاس GradientTape استفاده می کنند. PyTorch از ما می خواهد که حلقه آموزشی خود را با دست پیاده سازی کنیم، بنابراین این واقعیت که torch.autograd برای ما در زیر کاپوت کار می کند کمک بزرگی است.
پایتورچ و جی پی یو
کتابخانه PyTorch در درجه اول از پردازندههای گرافیکی مبتنی بر NVIDIA CUDA پشتیبانی میکند. شتاب GPU به شما امکان می دهد شبکه های عصبی را در کسری از زمان آموزش دهید.
علاوه بر این، PyTorch از آموزش های توزیع شده پشتیبانی می کند که به شما امکان می دهد مدل های خود را حتی سریع تر آموزش دهید.
چرا PyTorch در بین محققان محبوب است؟
PyTorch بین سالهای 2016 (زمانی که PyTorch منتشر شد) و 2019 (قبل از انتشار رسمی TensorFlow 2.x) جایگاهی در جامعه تحقیقاتی به دست آورد.
دلایلی که PyTorch توانست این جایگاه را به دست آورد بسیار است، اما دلایل غالب عبارتند از:
- Keras، در حالی که استفاده از آن بسیار آسان بود، دسترسی به عملکردهای سطح پایینی را که محققان برای انجام تحقیقات یادگیری عمیق جدید به آن نیاز داشتند، فراهم نمی کرد.
- Keras اجرای بهینه سازهای سفارشی، انواع لایه ها و معماری مدل را برای محققان سخت کرد.
- TensorFlow 1.x این دسترسی سطح پایین و پیاده سازی سفارشی را فراهم کرد. با این حال، استفاده از API سخت بود و خیلی پایتونیک نبود
- PyTorch و به طور خاص پشتیبانی از autograd آن، به حل بسیاری از مشکلات مربوط به TensorFlow 1.x کمک کرد، و این کار را برای محققان آسانتر کرد تا روشهای سفارشی خود را پیادهسازی کنند.
- علاوه بر این، PyTorch به تمرینکنندگان یادگیری عمیق کنترل کاملی بر حلقه آموزشی میدهد.
البته بین این دو دوگانگی وجود دارد. Keras آموزش یک شبکه عصبی با استفاده از یک فراخوانی به model.fit را ساده می کند، مشابه نحوه آموزش یک مدل یادگیری ماشین استاندارد در داخل scikit-learn.
نکته منفی این است که محققان نمی توانند (به راحتی) این فراخوان model.fit را تغییر دهند، بنابراین مجبور شدند از توابع سطح پایین تر TensorFlow استفاده کنند. اما این روشها, پیادسازی آموزش شبکه های عصبی را برای آنها آسان نمیکرد
PyTorch این مشکل را حل کرد، که از این نظر خوب است که ما کنترل کامل داریم، اما بد است زیرا می توانیم به راحتی با PyTorch به پای خود شلیک کنیم (هر کاربر PyTorch فراموش کرده است که گرادیان های خود را قبلا صفر کند).
همه آنچه گفته شد، و بسیاری از بحث ها در مورد اینکه PyTorch یا TensorFlow برای تحقیق “بهتر” هستند در حال پایان یافتن است. APIهای PyTorch 1.x و TensorFlow 2.x ویژگیهای بسیار مشابهی را پیادهسازی میکنند، آنها فقط به روشی متفاوت از آن استفاده میکنند، به نوعی مانند یادگیری یک زبان برنامهنویسی در مقابل زبان دیگر. هر زبان برنامه نویسی مزایای خود را دارد، اما هر دو نوع دستورات و کنترلهای یکسانی را پیادهسازی میکنند (یعنی عبارتهای «if»، حلقههای «for» و غیره).
آیا پایتورچ بهتر از تنسورفلو و کراس است ؟
این سوال اشتباهی است ، به خصوص اگر در یادگیری عمیق تازه کار هستید. هیچ کدام بهتر از دیگری نیست. Keras و TensorFlow مانند PyTorch کاربردهای خاصی دارند. به عنوان مثال، شما نمی توانید یک بیانیه عمومی بگویید که جاوا به طور واضح بهتر از پایتون است. هنگام کار با یادگیری ماشین و علم داده، استدلال قوی برای پایتون در مورد جاوا وجود دارد. اما اگر قصد دارید برنامههای سازمانی را توسعه دهید که روی چندین معماری با قابلیت اطمینان بالا اجرا میشوند، جاوا احتمالاً انتخاب بهتری است.
اگر در یادگیری عمیق تازه کار هستید، واقعاً مهم نیست که از کدام کتابخانه شروع کنید. APIهای PyTorch 1.x و TensorFlow 2.x همگرا شدهاند – هر دو عملکردهای مشابهی را اجرا میکنند که فقط به روشهای مختلف انجام میشوند. آنچه در یک کتابخانه یاد می گیرید، درست مانند یادگیری یک زبان برنامه نویسی جدید، به کتابخانه دیگر منتقل می شود. اولین زبانی که یاد می گیرید اغلب سخت ترین است زیرا نه تنها نحو زبان را یاد می گیرید، بلکه ساختارهای کنترلی و طراحی برنامه را نیز یاد می گیرید.
زبان برنامه نویسی دوم شما اغلب برای یادگیری آسان تر است زیرا تا آن مرحله شما اصول اولیه کنترل و طراحی برنامه را درک کرده اید. همین امر در مورد کتابخانه های یادگیری عمیق نیز صادق است. فقط یکی را انتخاب کنید و یاد بگیرید. اگر در انتخاب مشکل دارید، سکه بندازید – واقعاً مهم نیست.
انتخاب بین Keras/TensorFlow و PyTorch مستلزم بیان عبارات عمومی مانند:
“اگر در حال انجام تحقیق هستید، باید حتما از PyTorch استفاده کنید.”
“اگر مبتدی هستید، باید از Keras استفاده کنید.”
“اگر در حال توسعه یک برنامه کاربردی صنعتی هستید، از TensorFlow و Keras استفاده کنید.”
بسیاری از مجموعههای ویژگی بین PyTorch/Keras و TensorFlow همگرا هستند – هر دو اساساً دارای مجموعهای از ویژگیها هستند که فقط به روشهای مختلف انجام میشوند.