مشتق بگیر و راحت باش!

مشتق گیری در مرکز تقریبا تمام الگوریتم های یادگیری ماشین وجود دارد. در بسیاری از مواقع مانند شبکه های عصبی (در backpropagation) مشتق های مرتبه اول کافی هستند. بیشتر کتابخانه های معروف هم برای همین منظور بهینه شده اند. اما گاهی مشتق های مراتب بالاتر هم مهم می شوند. به صورت سنتی روش های زیادی برای چنین مشتق هایی ایجاد شده بود که برخی از آن ها کند بودند. اکنون که استفاده از GPU همه گیر شده است باز هم جان تازه ای به این روش ها دمیده شده است. دو کتابخانه معروف در این زمینه autograd ‌و jax هستند. یادگیری این کتابخانه ها از دو جهت اهمیت دارد:
۱- این کتابخانه ها به صورت بسیار ساده نشان می دهند که چگونه می توان روش های یادگیری ماشین را پیاده سازی کرد. در عمل بسیاری از مکانیزم های مورد استفاده از چشم پنهان هستند ولی اینجا می توان پیاده سازی سطح پایین را دید که از لحاظ یادگیری بسیار مهم است.


۲- آینده ی کتابخانه هایی که بر اساس مشتقات مرتبه اول کار میکنند هنوز روشن نیست. بعید نیست در آینده نیاز به مشتقات مراتب بالاتر بخصوص محاسبه ماتریس هسین برای محاسبات سریع تر یا دقیق تر باشیم.


برخلاف خود تنسرفلو jax بسیار پایتونیک نوشته شده است. به این معنا که تا جای ممکن استانداردهای نوشتن کد در پایتون و بخصوص numpy را رعایت کرده است. همین باعث می شود کار کردن با آن ساده و یادگیری سریعی داشته باشد.


پروژه jax توسط google
https://github.com/google/jax


یک کولب برای کار با jax:
https://colab.research.google.com/github/google/jax/blob/master/docs/notebooks/How_JAX_primitives_work.ipynb


یک پست وبلاگی بسیار جالب در مورد استفاده از jax
https://colindcarroll.com/2019/04/06/exercises-in-automatic-differentiation-using-autograd-and-jax/