در یادگیری ماشین، هدف اصلی آموزش مدلها، کاهش خطا و بهبود دقت پیشبینیها است. برای رسیدن به این هدف، یکی از روشهای مؤثر ریاضیات بک پروپگیشن (Backpropagation) است که بهطور گستردهای در شبکههای عصبی استفاده میشود. این تکنیک فرآیندی است که در آن مدل از طریق محاسبه و تخصیص اشتباهات به لایههای مختلف شبکه، وزنها را بهروز میکند تا پیشبینیها دقیقتر شوند. برای انجام این کار، از محاسبات خودکار مشتقها (Autodiff) استفاده میشود تا مشتقات تابع خطا نسبت به هر پارامتر مدل بهطور کارآمد و سریع محاسبه گردد. در ادامه در قالب مثالی واقعی، به ساده سازی ریاضیات بکپراپگیشن خواهیم پرداخت.
ریاضیات بک پروپگیشن چیست؟
بک پراپگیشن روشی برای بهینهسازی وزنها در مدلهای یادگیری ماشین است که از گرادیان نزولی (Gradient Descent) و قانون زنجیرهای (Chain Rule) در مشتقگیری استفاده میکند. هدف اصلی این فرآیند کاهش خطای پیشبینی مدل با تنظیم وزنها است.
این فرآیند دو مرحله اصلی دارد:
- مرحله پیشرو (Forward Pass): در این مرحله، مدل با استفاده از وزنهای فعلی، خروجی پیشبینی را محاسبه میکند و خطای پیشبینی را ارزیابی میکند.
- مرحله پسرو (Backward Pass): در این مرحله، مدل خطا را از خروجی به ورودی منتقل میکند و تأثیر هر وزن را بر خطا اندازهگیری میکند تا وزنها بهروزرسانی شوند.

مسئله: پیشبینی عمر مفید ماشینآلات و محاسبات بک پروپگیشن
فرض کنید یک شرکت صنعتی میخواهد عمر مفید یک دستگاه را بر اساس سه ویژگی زیر پیشبینی کند:
- دمای متوسط کارکرد دستگاه ($x_1$)
- سطح لرزش در زمان کارکرد ($x_2$)
- فشار کاری دستگاه ($x_3$)
مدل ما از وزنهایی ($w_1$, $w_2$, $w_3$) برای پیشبینی عمر مفید دستگاه ($y_{\text{pred}}$) استفاده میکند:
$$
y_{\text{pred}} = w_1 \cdot x_1 + w_2 \cdot x_2 + w_3 \cdot x_3
$$
مرحله اول: محاسبه پیشبینی و خطا برای یک دستگاه
فرض کنید برای یک دستگاه صنعتی دادههای زیر موجود است:
- دمای متوسط کارکرد: $x_1 = 30$
- سطح لرزش: $x_2 = 50$
- فشار کاری: $x_3 = 20$
- عمر واقعی دستگاه: $y_{\text{true}} = 500$
وزنهای اولیه به صورت تصادفی مقداردهی شدهاند:
$$
w_1 = 0.1, \quad w_2 = 0.2, \quad w_3 = 0.3
$$
- مرحله پیشرو (Forward Pass):
مدل عمر پیشبینیشده دستگاه را محاسبه میکند: $$
y_{\text{pred}} = (0.1 \cdot 30) + (0.2 \cdot 50) + (0.3 \cdot 20)
$$ $$
y_{\text{pred}} = 3 + 10 + 6 = 19
$$ - محاسبه خطا:
برای محاسبه تابع خطای میانگین مربعات (MSE)، از فرمول زیر استفاده میکنیم:
$$
E = \frac{1}{2} (y_{\text{pred}} – y_{\text{true}})^2
$$
با جایگذاری مقادیر بهصورت زیر:
$$
E = \frac{1}{2} (19 – 500)^2
$$
این معادله بهطور کاملتر به شکل زیر محاسبه میشود:
$$
E = \frac{1}{2} \cdot (-481)^2 = \frac{1}{2} \cdot 231361
$$
در نهایت، مقدار خطا برابر با:
$$
E = 115680.5
$$
مرحله دوم: بکپراپگیشن و بهروزرسانی وزنها
برای کاهش خطا، باید وزنها را بهروزرسانی کنیم. این کار با استفاده از قانون زنجیرهای انجام میشود.
- مشتق خطا نسبت به وزن $w_1$
- محاسبه مشتقات:
- $\frac{\partial E}{\partial y_{\text{pred}}} = (y_{\text{pred}} – y_{\text{true}}) = 19 – 500 = -481$
- $\frac{\partial y_{\text{pred}}}{\partial w_1} = x_1 = 30$ بنابراین: $$
\frac{\partial E}{\partial w_1} = -481 \cdot 30 = -14430
$$
- بهروزرسانی وزن $w_1$: با استفاده از فرمول گرادیان نزولی: $$
w_1^{\text{new}} = w_1^{\text{old}} – \eta \cdot \frac{\partial E}{\partial w_1}
$$ اگر نرخ یادگیری ($\eta$) برابر با $0.001$ باشد: $$
w_1^{\text{new}} = 0.1 – 0.001 \cdot (-14430) = 0.1 + 14.43 = 14.53
$$ - محاسبه برای $w_2$ و $w_3$: برای $w_2$:
- $\frac{\partial y_{\text{pred}}}{\partial w_2} = x_2 = 50$
- $\frac{\partial E}{\partial w_2} = -481 \cdot 50 = -24050$
- $w_2^{\text{new}} = 0.2 – 0.001 \cdot (-24050) = 0.2 + 24.05 = 24.25$ برای $w_3$:
- $\frac{\partial y_{\text{pred}}}{\partial w_3} = x_3 = 20$
- $\frac{\partial E}{\partial w_3} = -481 \cdot 20 = -9620$
- $w_3^{\text{new}} = 0.3 – 0.001 \cdot (-9620) = 0.3 + 9.62 = 9.92$
گسترش محاسبات بک پراپگیشن به چند دستگاه
در ادامه، مراحل پیشبینی و بهروزرسانی وزنها را برای سه دستگاه صنعتی به طور کامل بررسی میکنیم. دادهها به شرح زیر است:
| دستگاه | $x_1$ (دمای متوسط) | $x_2$ (سطح لرزش) | $x_3$ (فشار کاری) | $y_{\text{true}}$ (عمر واقعی) |
|---|---|---|---|---|
| 1 | 30 | 50 | 20 | 500 |
| 2 | 40 | 60 | 25 | 600 |
| 3 | 35 | 55 | 22 | 550 |
وزنهای اولیه مدل به صورت زیر است:
$$
w_1 = 0.1, \quad w_2 = 0.2, \quad w_3 = 0.3
$$
محاسبات برای دستگاه اول
- مرحله پیشرو:
$$
y_{\text{pred}}^{(1)} = w_1 \cdot x_1^{(1)} + w_2 \cdot x_2^{(1)} + w_3 \cdot x_3^{(1)}
$$ $$
y_{\text{pred}}^{(1)} = (0.1 \cdot 30) + (0.2 \cdot 50) + (0.3 \cdot 20)
$$ $$
y_{\text{pred}}^{(1)} = 3 + 10 + 6 = 19
$$ - محاسبه خطا:
$$
E^{(1)} = \frac{1}{2}(y_{\text{pred}}^{(1)} – y_{\text{true}}^{(1)})^2
$$ $$
E^{(1)} = \frac{1}{2}(19 – 500)^2 = \frac{1}{2} \cdot (-481)^2 = 115680.5
$$ - گرادیانها: برای $w_1$:
$$
\frac{\partial E^{(1)}}{\partial w_1} = (y_{\text{pred}}^{(1)} – y_{\text{true}}^{(1)}) \cdot x_1^{(1)}
$$ $$
\frac{\partial E^{(1)}}{\partial w_1} = (-481) \cdot 30 = -14430
$$ برای $w_2$:
$$
\frac{\partial E^{(1)}}{\partial w_2} = (y_{\text{pred}}^{(1)} – y_{\text{true}}^{(1)}) \cdot x_2^{(1)}
$$ $$
\frac{\partial E^{(1)}}{\partial w_2} = (-481) \cdot 50 = -24050
$$ برای $w_3$:
$$
\frac{\partial E^{(1)}}{\partial w_3} = (y_{\text{pred}}^{(1)} – y_{\text{true}}^{(1)}) \cdot x_3^{(1)}
$$ $$
\frac{\partial E^{(1)}}{\partial w_3} = (-481) \cdot 20 = -9620
$$
محاسبات برای دستگاه دوم
- مرحله پیشرو:
$$
y_{\text{pred}}^{(2)} = w_1 \cdot x_1^{(2)} + w_2 \cdot x_2^{(2)} + w_3 \cdot x_3^{(2)}
$$ $$
y_{\text{pred}}^{(2)} = (0.1 \cdot 40) + (0.2 \cdot 60) + (0.3 \cdot 25)
$$ $$
y_{\text{pred}}^{(2)} = 4 + 12 + 7.5 = 23.5
$$ - محاسبه خطا:
$$
E^{(2)} = \frac{1}{2}(y_{\text{pred}}^{(2)} – y_{\text{true}}^{(2)})^2
$$ $$
E^{(2)} = \frac{1}{2}(23.5 – 600)^2 = \frac{1}{2} \cdot (-576.5)^2 = 166097.125
$$ - گرادیانها: برای $w_1$:
$$
\frac{\partial E^{(2)}}{\partial w_1} = (y_{\text{pred}}^{(2)} – y_{\text{true}}^{(2)}) \cdot x_1^{(2)}
$$ $$
\frac{\partial E^{(2)}}{\partial w_1} = (-576.5) \cdot 40 = -23060
$$ برای $w_2$:
$$
\frac{\partial E^{(2)}}{\partial w_2} = (y_{\text{pred}}^{(2)} – y_{\text{true}}^{(2)}) \cdot x_2^{(2)}
$$ $$
\frac{\partial E^{(2)}}{\partial w_2} = (-576.5) \cdot 60 = -34590
$$ برای $w_3$:
$$
\frac{\partial E^{(2)}}{\partial w_3} = (y_{\text{pred}}^{(2)} – y_{\text{true}}^{(2)}) \cdot x_3^{(2)}
$$ $$
\frac{\partial E^{(2)}}{\partial w_3} = (-576.5) \cdot 25 = -14412.5
$$
بهروزرسانی وزنها
مجموع گرادیانها برای هر وزن برابر است با جمع گرادیانهای مربوط به هر دستگاه.
مثلاً برای $w_1$:
$$
\frac{\partial E_{\text{total}}}{\partial w_1} = -14430 + (-23060) = -37490
$$
بهروزرسانی وزن $w_1$ با استفاده از گرادیان نزولی:
$$
w_1^{\text{new}} = w_1^{\text{old}} – \eta \cdot \frac{\partial E_{\text{total}}}{\partial w_1}
$$
با نرخ یادگیری $\eta = 0.001$:
$$
w_1^{\text{new}} = 0.1 – 0.001 \cdot (-37490) = 0.1 + 37.49 = 37.59
$$

محاسبات بک پروپگیشن در شبکه های عصبی چند لایه
برای ارائهی محاسبات در قالب مثال، فرض میکنیم یک شبکه عصبی ساده داریم که شامل:
- یک لایه ورودی با دو ویژگی: $x_1$ (دمای متوسط) و $x_2$ (سطح لرزش).
- یک لایه مخفی با دو نورون.
- یک لایه خروجی با یک نورون (پیشبینی عمر دستگاه: $y_{\text{pred}}$).
وزنها و بایاسها بهصورت فرضی داده میشوند. فرآیند شامل محاسبات پیشرو (Forward Pass) و سپس بازگشتی (Backward Pass) است.
تعریف مفروضات و پارامترها
- ورودیها:
$$
x_1 = 1.5, \quad x_2 = 2.0
$$ - وزنها و بایاسها:
برای لایه مخفی:
$$
w_{1,1} = 0.8, \, w_{2,1} = 0.4, \, b_1^{(h)} = 0.1
$$
$$
w_{1,2} = 0.2, \, w_{2,2} = 0.9, \, b_2^{(h)} = 0.2
$$ برای لایه خروجی:
$$
w_{1}^{(o)} = 0.5, \, w_{2}^{(o)} = 0.3, \, b^{(o)} = 0.4
$$ - مقدار هدف:
$$
y_{\text{true}} = 5.0
$$ - تابع فعالسازی: سیگموید:
$$
\sigma(z) = \frac{1}{1 + e^{-z}}
$$ - تابع خطا: میانگین مربعات:
$$
E = \frac{1}{2} (y_{\text{pred}} – y_{\text{true}})^2
$$
مرحله ۱: محاسبات پیشرو (Forward Pass)
محاسبات در لایه مخفی
- نورون اول:
$$
z_1^{(h)} = w_{1,1} \cdot x_1 + w_{2,1} \cdot x_2 + b_1^{(h)}
$$
$$
z_1^{(h)} = 0.8 \cdot 1.5 + 0.4 \cdot 2.0 + 0.1 = 1.2 + 0.8 + 0.1 = 2.1
$$
خروجی نورون:
$$
a_1^{(h)} = \sigma(z_1^{(h)}) = \frac{1}{1 + e^{-2.1}} \approx 0.8909
$$ - نورون دوم:
$$
z_2^{(h)} = w_{1,2} \cdot x_1 + w_{2,2} \cdot x_2 + b_2^{(h)}
$$
$$
z_2^{(h)} = 0.2 \cdot 1.5 + 0.9 \cdot 2.0 + 0.2 = 0.3 + 1.8 + 0.2 = 2.3
$$
خروجی نورون:
$$
a_2^{(h)} = \sigma(z_2^{(h)}) = \frac{1}{1 + e^{-2.3}} \approx 0.9089
$$
محاسبات در لایه خروجی
ورودی به نورون خروجی:
$$
z^{(o)} = w_1^{(o)} \cdot a_1^{(h)} + w_2^{(o)} \cdot a_2^{(h)} + b^{(o)}
$$
$$
z^{(o)} = 0.5 \cdot 0.8909 + 0.3 \cdot 0.9089 + 0.4 = 0.4455 + 0.2727 + 0.4 = 1.1182
$$
پیشبینی مدل:
$$
y_{\text{pred}} = \sigma(z^{(o)}) = \frac{1}{1 + e^{-1.1182}} \approx 0.7536
$$
محاسبه خطا
$$
E = \frac{1}{2} (y_{\text{pred}} – y_{\text{true}})^2
$$
$$
E = \frac{1}{2} (0.7536 – 5.0)^2 = \frac{1}{2} \cdot (-4.2464)^2 = 9.0113
$$
مرحله ۲: محاسبات بازگشتی (Backward Pass)
محاسبه گرادیان در لایه خروجی
- مشتق خطا نسبت به خروجی:
$$
\frac{\partial E}{\partial y_{\text{pred}}} = y_{\text{pred}} – y_{\text{true}} = 0.7536 – 5.0 = -4.2464
$$ - مشتق نسبت به $z^{(o)}$:
$$
\frac{\partial E}{\partial z^{(o)}} = \frac{\partial E}{\partial y_{\text{pred}}} \cdot \sigma'(z^{(o)})
$$
$$
\sigma'(z^{(o)}) = y_{\text{pred}} \cdot (1 – y_{\text{pred}}) = 0.7536 \cdot (1 – 0.7536) \approx 0.1857
$$
$$
\frac{\partial E}{\partial z^{(o)}} = -4.2464 \cdot 0.1857 \approx -0.7885
$$ - گرادیان نسبت به وزنهای لایه خروجی:
برای $w_1^{(o)}$:
$$
\frac{\partial E}{\partial w_1^{(o)}} = \frac{\partial E}{\partial z^{(o)}} \cdot a_1^{(h)} = -0.7885 \cdot 0.8909 \approx -0.7022
$$ برای $w_2^{(o)}$:
$$
\frac{\partial E}{\partial w_2^{(o)}} = \frac{\partial E}{\partial z^{(o)}} \cdot a_2^{(h)} = -0.7885 \cdot 0.9089 \approx -0.7165
$$
محاسبه گرادیان در لایه مخفی
برای نورون اول:
$$
\frac{\partial E}{\partial z_1^{(h)}} = \frac{\partial E}{\partial z^{(o)}} \cdot w_1^{(o)} \cdot \sigma'(z_1^{(h)})
$$
$$
\sigma'(z_1^{(h)}) = a_1^{(h)} \cdot (1 – a_1^{(h)}) = 0.8909 \cdot (1 – 0.8909) \approx 0.0976
$$
$$
\frac{\partial E}{\partial z_1^{(h)}} = -0.7885 \cdot 0.5 \cdot 0.0976 \approx -0.0384
$$
جدول بهروزرسانی وزنها
| وزن | مقدار قدیمی | گرادیان | مقدار جدید |
|---|---|---|---|
| $w_1^{(o)}$ | $0.5$ | $-0.7022$ | $0.5 – \eta \cdot (-0.7022)$ |
| $w_2^{(o)}$ | $0.3$ | $-0.7165$ | $0.3 – \eta \cdot (-0.7165)$ |
| $w_{1,1}$ | $0.8$ | $…$ | $0.8 – \eta \cdot (… )$ |
در این جدول، $\eta$ نرخ یادگیری است که باید مقدار آن مشخص شود.
نتیجهگیری: درک ریاضیات بک پروپگیشن
ریاضیات بک پروپگیشن به عنوان یک الگوریتم کلیدی در یادگیری ماشین، نقش حیاتی در بهینهسازی مدلها ایفا میکند. با استفاده از محاسبات خودکار مشتقها (Autodiff)، این فرآیند قادر است بهطور مؤثر و کارآمد خطاها را در تمام لایههای شبکه توزیع کند و وزنها را بهروزرسانی نماید. این بهینهسازی مستمر موجب کاهش خطا و بهبود دقت پیشبینیها میشود. به همین دلیل، بکپراپگیشن به ابزاری اساسی برای آموزش شبکههای عصبی و دیگر مدلهای یادگیری ماشین تبدیل شده است و برای حل مسائل پیچیده و پیشبینیهای دقیق در کاربردهای مختلف بسیار مؤثر است.
نظر شما در مورد این مطلب چیه؟