
به این تصویر خوب دقت کنید :

ببینید گرادیان کاهشی (نزولی) همانطور که در پست قبل خدمتتون گفتم ; یک الگوریتم آموزشی است که به ما کمک میکند به کمینه خطا ها برسیم . خیلی راحت تر بخوام بگم اگر شما الان بالای یک کوه رو تصور کنید و به سمت پایین حرکت کنید تا به زمین برسید ; زمین حکم کمترین خطا رو داره

اگه احساس میکنی مطالب داره سخت میشه این ۵ پاراگراف زیر رو بخون یکم انگیزه بگیری اگرم نه بیا ادامه مطلب .
ما داریم وارد بخشهایی از یادگیری ماشین میشیم که ممکنه فرمولها و مفاهیم ریاضی یهکم سنگین بهنظر برسن. شاید به خودتون بگید که «من اصلاً برای این چیزا ساخته نشدم!»
خب راستش... منم همین حس رو داشتم.
من از همون روز اول برای ریاضیات ساخته نشده بودم! هنوزم نیستم :) نمرههای ریاضیم توی مدرسه همیشه ته جدول بودن. وقتی برای اولین بار با گرادیان نزولی و ماتریس و مشتق و تابع خطا آشنا شدم، ته دلم گفتم «نه دیگه، این یکی مال من نیست».
اما یه چیزی رو یاد گرفتم: این مفاهیم با تکرار و تمرین، از اون چیزی که بهنظر میرسن خیلی سادهتر میشن. مغز ما شاید عاشق ریاضیات نباشه، اما عاشق یاد گرفتنه. کافیه هر روز یه ذره جلو بریم. همین.
بد نیست بدونی خیلی از بزرگان حوزه AI هم ریاضیدون به دنیا نیومدن.
مثلاً Andrew Ng، یکی از معروفترین استادهای یادگیری ماشین، توی مصاحبهای گفته بود که تو دوران دانشگاه، بارها شده بود که مجبور شده از پایه برگرده و مفاهیم ریاضی رو از اول بخونه چون حس میکرد نفهمیده.
یا Yann LeCun، پدر CNN، توی صحبتهاش بارها گفته که با آزمون و خطا یاد گرفته، نه اینکه از اول نابغه ریاضی بوده باشه.
اگه الان حس میکنی سختته، بدونی که این حس یعنی «داری یاد میگیری».
و این عالیه. منم کنارت هستم. جلو بریم با هم :)
هرجای مقاله هم احساس کردی که متوجه نشدی و نیاز داری به عقب برگردی پایه خودت رو درست کنی میتونی از سیستم های LLM استفاده کنی اونا راهنماییت میکنن

توضیح :

اصلا نیازی نیست این فرمول رو حفظ کنید , من فقط این فرمول ها رو خدمتتون توضیح میدم که بدونید چطوری کار میکنه یک درک ذهنی ازش داشته باشید , اگر ریاضیاتتون خیلی عالیه و میخواید با درک این فرمول ها در مراحل بعدی فرمول های جدید درست کنید که کارتون خیلی درسته و پیشنهاد میکنم در مورد Mathematician ها مطالعه کنید .
حالا بریم کد بزنیم...
این کد رو بنویسید و اجرا کنید :
import numpy as np import matplotlib.pyplot as plt X = np.array([1, 2, 3, 4, 5]) y = np.array([2, 4, 6, 8, 10]) m = 0.5 b = 1 y_pred = m * X + b plt.scatter(X, y, color='blue', label='Real Data') plt.plot(X, y_pred, color='gray', label='Initial Wrong Regression Line') plt.title("Initial Wrong Line") plt.legend() plt.grid(True) plt.show()

حالا در ادامه میایم و گرادیان کاهشی رو پیاده سازی میکنیم :
m = 0.5 b = 1 learning_rate = 0.01 #پایین تر بهتون میگم این چیه epochs = 100 for _ in range(epochs): y_pred = m * X + b error = y - y_pred m_grad = -2 * np.mean(X * error) b_grad = -2 * np.mean(error) m -= learning_rate * m_grad b -= learning_rate * b_grad final_pred = m * X + b plt.scatter(X, y, color='blue', label='Real Data') plt.plot(X, final_pred, color='green', label='Improved Line (Gradient Descent)') plt.title("Line After Gradient Descent") plt.legend() plt.grid(True) plt.show()

دقت کنید تو کد بالا یک متغیر داریم به نام Learning Rate که برای درک بهترش پیشنهاد میکنم این تصویر رو مشاهده کنید :

دقت کنید به فلش های به سمت پایین ; اسمش هست Incremental Step این یعنی قدم هایی که بر میداریم برای رسیدن به پایین این کوه چقدر چقدر باشه . که خیلی کمک میکنه چون اگر زیاد باشه و پایین باشه خیلی تفاوت دارن :

برای اینکه خیلی بهتر درک کنید Learning Rate رو شدیدا این منبع رو پیشنهاد میکنم :
https://alwaysai.co/blog/what-is-gradient-descent
اما خیلی ساده بخوایم بگیم بیشترین تاثیر Learning Rate رو سرعت و دقته . که باید بر اساس نوع مسئلمون بهترین عدد رو براش انتخاب کنیم .

اما یک مسئله دیگر و تمام , این که ما به چه صورتی به سمت مقصد حرکت کنیم , یا چقدر حافظه مصرف کنیم و اینکه آیا دقت برامون مهمه یا خیر هم بسیار مسئله مهمیه . برای همین ما چند نوع گرادیان کاهشی داریم !

یا به شکل بصری تر :

در این روش در هر تکرار، کل مجموعهٔ آموزش را یکجا وارد فرمول هزینه (Cost Function) میکنیم، گرادیان را حساب میکنیم و سپس پارامترها را به-روز میکنیم.
مزیت: گرادیان دقیق است و مسیر نزول کاملاً یکنواخت پیش میرود؛ برای مسائل محدب (Convex) معمولاً به جواب پایدار میرسد.
عیب: روی دیتاستهای بزرگ به حافظه و زمان زیادی نیاز دارد؛ تا همهٔ دادهها پردازش نشوند، هیچ بهروزرسانیای انجام نمیشود، پس هر «ایپوک» طولانی است.
در SGD هر بار فقط یک نمونه از دادهها انتخاب میشود، گرادیان همان نمونه حساب میشود و بلافاصله پارامترها تغییر میکند.
مزیت: بسیار سریع و کمهزینهٔ حافظه است؛ میتواند از مینیممهای محلی فرار کند چون بهدلیل تصادفیبودن، مسیرش پرنوسان است.
عیب: همین نوسان باعث میشود مسیر هموار نباشد و نرخ یادگیری باید کوچک باشد تا میانگین حرکت رو به پایین بماند؛ نزدیکی به مینیمم سراسری زمان میبرد.
اینجا دیتاست به زیرمجموعههای کوچک (مینیبچها) تقسیم میشود (مثلاً ۳۲ یا ۶۴ نمونه). هر مینیبچ گرادیان خودش را میدهد و پارامترها بعد از هر کدام بهروز میشوند. این روش حدّ واسط Batch و SGD است.
مزیت:
از دید حافظه مثل SGD سبک است، چون فقط یک مینیبچ در RAM قرار میگیرد.
نسبت به SGD نوسان کمتری دارد، چون بهجای یک نمونه، میانگینی از چند نمونه را میبیند.
روی GPUها/TPUها عالی مقیاسپذیر است (موازیسازی).
عیب: انتخاب اندازهٔ مینیبچ حساس است: خیلی بزرگ شود ≈ Batch، خیلی کوچک شود ≈ SGD.

منابع :
https://alwaysai.co/blog/what-is-gradient-descent
این بود کلیت گرادیان کاهشی , به انتهای این مطلب رسیدیم خوشحال میشم نظرتون رو درمورد این مطلب بدونم و از شما دعوت میکنم قسمت های قبلی و بعدی این سری مقالات رو مشاهده کنید .
ممنونم و با تشکر .