ویرگول
ورودثبت نام
Mahdi Pakravan | مهدی پاکروان
Mahdi Pakravan | مهدی پاکروانهمون پسره که تو کلاس نمیفهمید ، روش نمیشد بگه میرفت به زبون خودش یاد میگرفت و به زبون خودش مینوشت تو ویرگول :)
Mahdi Pakravan | مهدی پاکروان
Mahdi Pakravan | مهدی پاکروان
خواندن ۵ دقیقه·۸ ماه پیش

یادگیری ماشین به زبان من ( مرحله 7 - گرادیان کاهشی Gradient Decent)

قسمت 7
قسمت 7

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

تاثیر و ارتباط گرادیان نزولی و رگرسیون
تاثیر و ارتباط گرادیان نزولی و رگرسیون

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

گرادیان کاهشی Gradient Decent
گرادیان کاهشی Gradient Decent

اگه احساس میکنی مطالب داره سخت میشه این ۵ پاراگراف زیر رو بخون یکم انگیزه بگیری اگرم نه بیا ادامه مطلب .

ما داریم وارد بخش‌هایی از یادگیری ماشین می‌شیم که ممکنه فرمول‌ها و مفاهیم ریاضی یه‌کم سنگین به‌نظر برسن. شاید به خودتون بگید که «من اصلاً برای این چیزا ساخته نشدم!»
خب راستش... منم همین حس رو داشتم.
من از همون روز اول برای ریاضیات ساخته نشده بودم! هنوزم نیستم :) نمره‌های ریاضی‌م توی مدرسه همیشه ته جدول بودن. وقتی برای اولین بار با گرادیان نزولی و ماتریس و مشتق و تابع خطا آشنا شدم، ته دلم گفتم «نه دیگه، این یکی مال من نیست».

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

بد نیست بدونی خیلی از بزرگان حوزه 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 در پیاده سازی گرادیان کاهشی
تاثیر Learning Rate در پیاده سازی گرادیان کاهشی

برای اینکه خیلی بهتر درک کنید Learning Rate رو شدیدا این منبع رو پیشنهاد میکنم :

https://alwaysai.co/blog/what-is-gradient-descent

اما خیلی ساده بخوایم بگیم بیشترین تاثیر Learning Rate رو سرعت و دقته . که باید بر اساس نوع مسئلمون بهترین عدد رو براش انتخاب کنیم .

تاثیر نرخ یادگیری بر روی گرادیان کاهشی
تاثیر نرخ یادگیری بر روی گرادیان کاهشی


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


انواع گرادیان کاهشی

انواع گرادیان کاهشی
انواع گرادیان کاهشی

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

انواع گرادیان کاهشی
انواع گرادیان کاهشی


1. Batch Gradient Descent (گرادیان‌دسنت دسته‌ای)

در این روش در هر تکرار، کل مجموعهٔ آموزش را یک‌جا وارد فرمول هزینه (Cost Function) می‌کنیم، گرادیان را حساب می‌کنیم و سپس پارامترها را به-روز می‌کنیم.

  • مزیت‌: گرادیان دقیق است و مسیر نزول کاملاً یکنواخت پیش می‌رود؛ برای مسائل محدب (Convex) معمولاً به جواب پایدار می‌رسد.

  • عیب‌: روی دیتاست‌های بزرگ به حافظه و زمان زیادی نیاز دارد؛ تا همهٔ داده‌ها پردازش نشوند، هیچ به‌روزرسانی‌ای انجام نمی‌شود، پس هر «ایپوک» طولانی است.

2. Stochastic Gradient Descent – SGD (گرادیان‌دسنت تصادفی)

در SGD هر بار فقط یک نمونه از داده‌ها انتخاب می‌شود، گرادیان همان نمونه حساب می‌شود و بلافاصله پارامترها تغییر می‌کند.

  • مزیت‌: بسیار سریع و کم‌هزینهٔ حافظه است؛ می‌تواند از مینیمم‌های‌ محلی فرار کند چون به‌دلیل تصادفی‌بودن، مسیرش پرنوسان است.

  • عیب‌: همین نوسان باعث می‌شود مسیر هموار نباشد و نرخ یادگیری باید کوچک باشد تا میانگین حرکت رو به پایین بماند؛ نزدیکی به مینیمم سراسری زمان می‌برد.

3. Mini-batch Gradient Descent (گرادیان‌دسنت مینی‌بچ)

اینجا دیتاست به زیرمجموعه‌های کوچک (مینی‌بچ‌ها) تقسیم می‌شود (مثلاً ۳۲ یا ۶۴ نمونه). هر مینی‌بچ گرادیان خودش را می‌دهد و پارامترها بعد از هر کدام به‌روز می‌شوند. این روش حدّ واسط Batch و SGD است.

  • مزیت‌:
    از دید حافظه مثل SGD سبک است، چون فقط یک مینی‌بچ در RAM قرار می‌گیرد.
    نسبت به SGD نوسان کمتری دارد، چون به‌جای یک نمونه، میانگینی از چند نمونه را می‌بیند.
    روی GPUها/TPUها عالی مقیاس‌پذیر است (موازی‌سازی).

  • عیب‌: انتخاب اندازهٔ مینی‌بچ حساس است: خیلی بزرگ شود ≈ Batch، خیلی کوچک شود ≈ SGD.

خلاصه اینکه از چه نوع گرادیان کاهشی استفاده کنیم :

چه نوع گرادیان کاهشی استفاده کنیم
چه نوع گرادیان کاهشی استفاده کنیم


منابع :

https://alwaysai.co/blog/what-is-gradient-descent

این بود کلیت گرادیان کاهشی , به انتهای این مطلب رسیدیم خوشحال میشم نظرتون رو درمورد این مطلب بدونم و از شما دعوت میکنم قسمت های قبلی و بعدی این سری مقالات رو مشاهده کنید .

ممنونم و با تشکر .

گرادیان کاهشییادگیری ماشین
۱
۰
Mahdi Pakravan | مهدی پاکروان
Mahdi Pakravan | مهدی پاکروان
همون پسره که تو کلاس نمیفهمید ، روش نمیشد بگه میرفت به زبون خودش یاد میگرفت و به زبون خودش مینوشت تو ویرگول :)
شاید از این پست‌ها خوشتان بیاید