پرش به محتوای اصلی

micrograd؛ فهم backpropagation با یک پیاده‌سازی کوچک

خواندن هدایت‌شده یک پیاده‌سازی عمومی کوچک که reverse-mode automatic differentiation و یک کتابخانه ساده شبکه عصبی را قابل بررسی می‌کند.

پروژه اصلی — GitHubبرنامه‌نویسی و محاسبات علمیمتوسط

منبع اصلی

پروژه اصلی — GitHub

مخزن micrograd از Andrej Karpathy.

مشاهده منبع اصلی

هدف یادگیری

ردگیری کنید که چگونه مشتق‌های محلی روی یک گراف محاسباتی از طریق reverse-mode automatic differentiation به گرادیان پارامترها تبدیل می‌شوند.

پیش‌نیازها

  • مشتق‌های مقدماتی
  • آشنایی مقدماتی با شبکه عصبی

چرا پیاده‌سازی را کوچک کنیم؟

وقتی automatic differentiation در یک framework بزرگ پنهان است، سازوکار آن می‌تواند انتزاعی به نظر برسد. یک پیاده‌سازی کوچک data structure، مشتق‌های محلی و ترتیب propagation گرادیان را آشکار می‌کند.

گراف محاسباتی

هر مقدار اسکالر می‌تواند مقادیری را که آن را ساخته‌اند و عملیاتی که روی آن انجام شده نگه دارد. forward pass یک گراف جهت‌دار بدون دور می‌سازد که بعداً می‌توان آن را در جهت معکوس پیمود.

قاعده زنجیره روی گراف محاسباتی
y=f(g(x)),dydx=dydgdgdxy=f(g(x)),\qquad\frac{dy}{dx}=\frac{dy}{dg}\frac{dg}{dx}

مشتق‌های محلی

هر عملیات یک مشتق محلی دارد. backpropagation نیازی به ساخت یک مشتق نمادین جدید برای کل شبکه ندارد؛ همین قوانین محلی با قاعده زنجیره ترکیب می‌شوند.

تجمع گرادیان در مسیر معکوس

از خروجی اسکالر شروع می‌کنیم و تغییر خروجی نسبت به مقادیر میانی را به عقب منتقل می‌کنیم. اگر چند مسیر به یک مقدار برسند، سهم گرادیان‌ها با هم جمع می‌شود.

از اسکالرها تا یک شبکه عصبی کوچک

بعد می‌توان یک لایه ساده شبکه عصبی را از همین مقادیر اسکالر ساخت. نورون یک مجموع وزن‌دار به‌علاوه bias و سپس یک activation محاسبه می‌کند و موتور autograd گرادیان پارامترها را فراهم می‌کند.

این پروژه چه چیزی یاد می‌دهد؟

  • Backpropagation در اصل اجرای مکرر قاعده زنجیره روی یک گراف محاسباتی است.
  • پشت automatic differentiation نیز مشتق‌های محلی صریح وجود دارند.
  • پیاده‌سازی کوچک برای فهم مفید است، اما جایگزین tensor libraryهای بهینه برای کار مقیاس‌بالا نیست.
  • فهم سازوکار اسکالر کمک می‌کند علت نیاز به batch، memory management و ملاحظات عددی در پیاده‌سازی‌های ماتریسی و tensor را بهتر بفهمیم.

ارتباط با مسیر یادگیری AI در سایت

این توضیح بین درس‌های ریاضی درباره گرادیان و مباحث بزرگ‌تر Transformer قرار می‌گیرد. عادت مشترک این است: از عملیات ریاضی شروع کنیم، data flow را روشن کنیم و بعد ببینیم نرم‌افزار چه چیزی به آن اضافه می‌کند.

می‌خواهید یک سازوکار AI یا عددی را قابل فهم و قابل بررسی کنید؟

می‌توان از ریاضیات شروع کرد و توضیح را تا یک مسیر پیاده‌سازی مشخص ادامه داد.