رفتن به محتوا

تابع هزینه: MAE، MSE و آنتروپی متقاطع (Cross-Entropy)

برای اینکه شبکه را به صورت خودکار بهتر کنیم، اول باید بدانیم «بد بودن» یعنی چه و چقدر است. تابع هزینه (cost function یا loss function) عددی است که همین را می‌گوید: اگر صفر باشد، شبکه همه‌چیز را درست می‌گوید؛ هرچه بزرگ‌تر باشد، اوضاع بدتر است. آموزش یعنی پیدا کردن وزن‌ها و بایاس‌هایی که این عدد را کمینه کنند.

  • y′y': خروجی مورد انتظار، یعنی برچسب واقعی (true value).
  • yy: تخمین شبکه. برای هر نورون، z=w⋅x+bz = w \cdot x + b و y=σ(z)y = \sigma(z) که σ\sigma تابع فعالیت است.

شبکه‌ای داریم که تصویر را می‌گیرد و سه خروجی دارد: گربه، سگ، انسان. وزن‌ها هنوز تصادفی‌اند و برای عکس یک سگ این را پیش‌بینی می‌کند:

گربهسگانسان
پیش‌بینی شبکه (yy)۰٫۲۰٫۶۰٫۲
برچسب واقعی (y′y')۰۱۰
اختلاف۰٫۲-۰٫۴۰٫۲-

خروجی شبکه احتمال هر کلاس است و جمعشان ۱ می‌شود (چطور، در جلسه‌ی بعد با تابع softmax می‌بینیم). برچسب واقعی به شکل one-hot است: فقط کلاس درست ۱ است و بقیه صفر. سگ است؛ پس نه گربه است و نه انسان.

حالا یک تابع پیوسته می‌خواهیم که از این اختلاف‌ها یک عدد بسازد. پیوسته بودن مهم است، چون روش آموزش بر پایه‌ی مشتق است.

میانگین قدرمطلق خطا (MAE)

Section titled “میانگین قدرمطلق خطا (MAE)”

ساده‌ترین ایده: اختلاف‌ها را حساب کن، علامتشان را بینداز و میانگین بگیر.

MAE=1n∑i=1n∣yi′−yi∣\text{MAE} = \frac{1}{n} \sum_{i=1}^{n} |y'_i - y_i|

برای مثال بالا: (0.2+0.4+0.2)/3≈0.27(0.2 + 0.4 + 0.2) / 3 \approx 0.27

به جای قدرمطلق، اختلاف را به توان دو برسان:

MSE=1n∑i=1n(yi′−yi)2\text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y'_i - y_i)^2

برای مثال بالا: (0.04+0.16+0.04)/3=0.08(0.04 + 0.16 + 0.04) / 3 = 0.08

هر دو علامت خطا را حذف می‌کنند و هر دو قابل استفاده‌اند. ولی یک فرق مهم دارند. یک خودروی خودران را تصور کنید که باید با دیدن عابر ترمز کند. از ده عابری که می‌بیند:

  • حالت الف: نُه نفر را با اطمینان ۰٫۸ (به جای ۱) عابر تشخیص می‌دهد؛ خطای هر کدام ۰٫۲.
  • حالت ب: یک نفر را فقط با اطمینان ۰٫۴ عابر تشخیص می‌دهد و ۰٫۶ احتمال می‌دهد آسفالت باشد؛ خطا ۰٫۶.

کدام را باید اول درست کرد؟ حالت ب. وقتی مدل ۰٫۸ می‌گوید، بین کلاس‌ها باز هم «عابر» برنده است و ترمز گرفته می‌شود. ولی وقتی ۰٫۴ می‌گوید، ممکن است کلاس دیگری برنده شود و خودرو از روی عابر رد شود. هرچه احتمال کلاس درست از ۱ دورتر شود، خطر بسیار سریع‌تر بیشتر می‌شود.

جمع قدرمطلق خطاهاجمع مجذور خطاها
الف: نُه خطای ۰٫۲9×0.2=1.89 \times 0.2 = 1.89×0.04=0.369 \times 0.04 = 0.36
ب: یک خطای ۰٫۶0.60.60.360.36

با MAE، نُه خطای کوچک سه برابر مهم‌تر از آن یک خطای بزرگ دیده می‌شوند، چون تعدادشان بیشتر است. با MSE دست‌کم هم‌وزن شده‌اند. توان دو خطاهای بزرگ را برجسته‌تر می‌کند: ۰٫۱ می‌شود ۰٫۰۱، ولی ۰٫۶ می‌شود ۰٫۳۶. پس در میانگین نهایی، نمونه‌ای که از برچسبش فاصله‌ی بیشتری گرفته وزن بیشتری دارد.

با این حال، MSE برای طبقه‌بندی آموزش را کند می‌کند. امروز MAE و MSE بیشتر برای رگرسیون (مثل پیش‌بینی قیمت خانه) استفاده می‌شوند و برای طبقه‌بندی سراغ تابع دیگری می‌رویم.

آنتروپی متقاطع (Cross-Entropy)

Section titled “آنتروپی متقاطع (Cross-Entropy)”

این تابع از فیزیک و نظریه‌ی اطلاعات آمده و فرمولش در نگاه اول ترسناک است:

C=−∑iyi′log⁡(yi)C = -\sum_{i} y'_i \log(y_i)

ولی بیایید ببینیم واقعاً چه می‌کند. y′y' برچسب one-hot است؛ یعنی همه‌ی yi′y'_iها صفرند جز یکی. صفر ضرب در هر چیزی صفر است، پس از کل این جمع فقط یک جمله باقی می‌ماند: جمله‌ی کلاس درست.

C=−log⁡(yکلاس درست)C = -\log(y_{\text{کلاس درست}})

این همان کاری است که می‌شد با یک if نوشت («فقط به احتمال کلاس درست نگاه کن»)، ولی به شکل یک فرمول ریاضی که بشود از آن مشتق گرفت.

احتمال کلاس درست باید به ۱ نزدیک باشد. لگاریتمِ ۱ صفر است: خطایی نداریم. لگاریتم عددهای کمتر از ۱ منفی است، برای همین یک منفی پشت فرمول هست تا خطا مثبت شود. ویژگی اصلی لگاریتم این است که هرچه به صفر نزدیک‌تر شویم، خیلی سریع بزرگ می‌شود:

00.250.50.751012345p=0.9 → 0.11p=0.5 → 0.69p=0.1 → 2.30p=0.01 → 4.61احتمالی که مدل به کلاس درست داده (p)−log(p)
هرچه احتمالی که مدل به کلاس درست داده کمتر باشد، خطا با سرعت بیشتری بالا می‌رود. احتمال ۰٫۹ خطای کوچک ۰٫۱ دارد، ولی احتمال ۰٫۰۱ خطای ۴٫۶.

برای مثال سگ: −log⁡(0.6)≈0.51-\log(0.6) \approx 0.51. اگر شبکه با اطمینان ۰٫۹ سگ می‌گفت، خطا 0.110.11 می‌شد؛ و اگر فقط ۰٫۰۱ به سگ احتمال می‌داد، 4.64.6.

پس آنتروپی متقاطع هم مثل MSE خطاهای بزرگ را برجسته می‌کند، ولی خیلی قوی‌تر: نمونه‌ای که مدل تقریباً هیچ احتمالی به کلاس درستش نداده، بیشترین اولویت را برای اصلاح پیدا می‌کند. و هرچه خطا بزرگ‌تر باشد، نورون سریع‌تر یاد می‌گیرد.

نیازی نیست این فرمول را خودتان پیاده کنید؛ فریم‌ورک‌هایی مثل Keras آن را آماده دارند. کافی است بدانید برای طبقه‌بندی، تابع هزینه‌ی پیش‌فرض آنتروپی متقاطع است.

دو جزء کلیدی آموزش شبکه‌ی عصبی را دیدیم:

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

یک گام کلیدی کم داریم: یادگیری. یعنی روشی که وزن‌ها و بایاس‌های تصادفی اولیه را طوری تغییر دهد که تابع هزینه کم شود. این کار با گرادیان کاهشی و پس‌انتشار خطا انجام می‌شود؛ موضوع جلسه‌ی بعد.

  • تابع هزینه میزان بد بودن مدل را با یک عدد پیوسته نشان می‌دهد؛ آموزش یعنی کمینه کردن آن.
  • MAE میانگین قدرمطلق خطاهاست و MSE میانگین مجذور آن‌ها؛ MSE خطاهای بزرگ را برجسته‌تر می‌کند. هر دو بیشتر برای رگرسیون به کار می‌روند.
  • آنتروپی متقاطع با برچسب one-hot همان −log⁡-\log احتمال کلاس درست است و برای طبقه‌بندی استفاده می‌شود.

مقدمه‌ای بر یادگیری عمیق، آموزش رایگان و فارسی یادگیری عمیق.