ضمیمه A: چک‌لیست پروژه یادگیری ماشین و ضمیمه B: Autodiff (مشتق‌گیری خودکار)

ضمیمه A: چک‌لیست پروژه یادگیری ماشین و ضمیمه B: Autodiff (مشتق‌گیری خودکار)

توسط admin | گروه هوش مصنوعی | 1405/06/02

نظرات 0

ضمیمه A: چک‌لیست پروژه یادگیری ماشین و ضمیمه B: Autodiff (مشتق‌گیری خودکار)

کتاب
Hands-On Machine Learning with Scikit-Learn, Keras & TensorFlow
بخش منبع
Appendix A: Machine Learning Project Checklist; Appendix B: Autodiff
صفحات این PDF
1-14
صفحات چاپی کتاب
779-792
جایگاه در مجموعه
76 / Machine_Learning_405_06; parent: Machine_Learning_405_06_01.html

ضمیمه A: چک‌لیست پروژه یادگیری ماشین

این چک‌لیست می‌تواند شما را در اجرای پروژه‌های یادگیری ماشین راهنمایی کند. فرایند اصلی از هشت گام تشکیل می‌شود:

  1. مسئله را صورت‌بندی کنید و تصویر کلی را ببینید.
  2. داده‌ها را به‌دست آورید.
  3. برای کسب بینش، داده‌ها را کاوش کنید.
  4. داده‌ها را آماده کنید تا الگوهای زیربنایی آن‌ها برای الگوریتم‌های یادگیری ماشین آشکارتر شوند.
  5. مدل‌های گوناگون را بررسی کنید و بهترین گزینه‌ها را در فهرست کوتاه قرار دهید.
  6. مدل‌ها را تنظیم دقیق کنید و آن‌ها را برای رسیدن به یک راه‌حل قوی با هم ترکیب کنید.
  7. راه‌حل خود را ارائه کنید.
  8. سامانه را راه‌اندازی، پایش و نگهداری کنید.

بدیهی است که می‌توانید این چک‌لیست را متناسب با نیازهای خود تغییر دهید.

صورت‌بندی مسئله و دیدن تصویر کلی

  1. هدف را با اصطلاحات کسب‌وکار تعریف کنید.
  2. راه‌حل شما چگونه استفاده خواهد شد؟
  3. راه‌حل‌ها یا راهکارهای موقت فعلی، در صورت وجود، کدام‌اند؟
  4. مسئله را چگونه باید صورت‌بندی کرد: نظارت‌شده یا بدون نظارت، برخط یا برون‌خط و مانند آن؟
  5. کارایی چگونه باید اندازه‌گیری شود؟
  6. آیا معیار کارایی با هدف کسب‌وکار هم‌راستا است؟
  7. حداقل کارایی لازم برای رسیدن به هدف کسب‌وکار چقدر است؟
  8. چه مسائل مشابهی وجود دارند؟ آیا می‌توانید تجربه یا ابزارهای پیشین را دوباره به‌کار ببرید؟
  9. آیا تخصص انسانی در دسترس است؟
  10. اگر مجبور بودید مسئله را دستی حل کنید، چه روشی به‌کار می‌بردید؟
  11. فرض‌هایی را که تاکنون شما یا دیگران مطرح کرده‌اید فهرست کنید.
  12. در صورت امکان، فرض‌ها را راستی‌آزمایی کنید.

به‌دست‌آوردن داده‌ها

  1. داده‌های موردنیاز و مقدار لازم از هرکدام را فهرست کنید.
  2. مشخص و مستند کنید داده‌ها را از کجا می‌توانید به‌دست آورید.
  3. بررسی کنید چه مقدار فضا اشغال خواهند کرد.
  4. الزامات قانونی را بررسی کنید و در صورت لزوم مجوز بگیرید.
  5. مجوزهای دسترسی را دریافت کنید.
  6. یک فضای کاری با فضای ذخیره‌سازی کافی ایجاد کنید.
  7. داده‌ها را دریافت کنید.
  8. داده‌ها را، بدون تغییر خود داده، به قالبی تبدیل کنید که به‌سادگی قابل پردازش باشد.
  9. اطمینان حاصل کنید اطلاعات حساس حذف یا محافظت شده‌اند؛ برای نمونه، ناشناس‌سازی شده‌اند.
  10. اندازه و نوع داده را بررسی کنید؛ مانند سری زمانی، نمونه‌ای، جغرافیایی و مانند آن.
  11. یک مجموعه آزمون نمونه‌گیری کنید، آن را کنار بگذارید و هرگز به آن نگاه نکنید؛ از کنکاش داده‌ای در مجموعه آزمون بپرهیزید.

کاوش داده‌ها

  1. یک نسخه از داده‌ها برای کاوش ایجاد کنید و در صورت نیاز آن را تا اندازه‌ای قابل مدیریت نمونه‌گیری کنید.
  2. یک دفترچه Jupyter ایجاد کنید تا سابقه کاوش داده‌ها را ثبت کند.
  3. هر ویژگی و مشخصات آن را بررسی کنید:
    • نام؛
    • نوع، مانند دسته‌ای، عدد صحیح/اعشاری، کراندار/بی‌کران، متن، ساخت‌یافته و مانند آن؛
    • درصد مقادیر گمشده؛
    • میزان نویز و نوع آن، مانند تصادفی، نقاط پرت، خطاهای گردکردن و مانند آن؛
    • میزان مفیدبودن برای مسئله؛
    • نوع توزیع، مانند گاوسی، یکنواخت، لگاریتمی و مانند آن.
  4. در مسائل یادگیری نظارت‌شده، ویژگی یا ویژگی‌های هدف را مشخص کنید.
  5. داده‌ها را مصورسازی کنید.
  6. همبستگی میان ویژگی‌ها را بررسی کنید.
  7. بررسی کنید اگر قرار بود مسئله را دستی حل کنید، چه می‌کردید.
  8. تبدیل‌های امیدبخشی را که ممکن است بخواهید اعمال کنید مشخص کنید.
  9. داده‌های اضافی مفیدی را که نیاز دارید مشخص کنید و در صورت لزوم به بخش «به‌دست‌آوردن داده‌ها» بازگردید.
  10. آنچه آموخته‌اید مستند کنید.

آماده‌سازی داده‌ها

  1. پاک‌سازی داده:
    • نقاط پرت را اصلاح یا حذف کنید؛ این کار اختیاری است.
    • مقادیر گمشده را، برای نمونه با صفر، میانگین یا میانه، پر کنید یا ردیف‌ها یا ستون‌های مربوط را حذف کنید.
  2. انتخاب ویژگی را در صورت نیاز انجام دهید:
    • ویژگی‌هایی را که برای مسئله اطلاعات مفیدی فراهم نمی‌کنند حذف کنید.
  3. مهندسی ویژگی را هرجا مناسب است انجام دهید:
    • ویژگی‌های پیوسته را گسسته‌سازی کنید.
    • ویژگی‌ها را تجزیه کنید؛ برای نمونه ویژگی‌های دسته‌ای، تاریخ/زمان و مانند آن.
    • تبدیل‌های امیدبخش ویژگی‌ها را اضافه کنید؛ مانند log(x)، sqrt(x)، و مانند آن.
    • ویژگی‌ها را در ویژگی‌های جدید و امیدبخش تجمیع کنید.
  4. مقیاس‌بندی ویژگی‌ها:
    • ویژگی‌ها را استانداردسازی یا نرمال‌سازی کنید.

فهرست کوتاه مدل‌های امیدبخش

  1. مدل‌های سریع و آزمایشی زیادی از رده‌های مختلف، مانند خطی، Naive Bayes، SVM، جنگل تصادفی، شبکه عصبی و مانند آن، با پارامترهای استاندارد آموزش دهید.
  2. کارایی آن‌ها را اندازه‌گیری و مقایسه کنید:
    • برای هر مدل، اعتبارسنجی متقاطع N-بخشی را اجرا کنید و میانگین و انحراف معیار معیار کارایی را روی N بخش محاسبه کنید.
  3. برای هر الگوریتم، مهم‌ترین متغیرها را تحلیل کنید.
  4. نوع خطاهایی را که مدل‌ها مرتکب می‌شوند تحلیل کنید:
    • یک انسان برای جلوگیری از این خطاها از چه داده‌ای استفاده می‌کرد؟
  5. یک دور سریع انتخاب ویژگی و مهندسی ویژگی انجام دهید.
  6. یک یا دو تکرار سریع دیگر از پنج گام قبلی انجام دهید.
  7. سه تا پنج مدل امیدبخش‌تر را در فهرست کوتاه قرار دهید و مدل‌هایی را ترجیح دهید که انواع متفاوتی از خطا ایجاد می‌کنند.

تنظیم دقیق سامانه

  1. ابرپارامترها را با اعتبارسنجی متقاطع تنظیم دقیق کنید:
    • انتخاب‌های مربوط به تبدیل داده را نیز ابرپارامتر در نظر بگیرید، مخصوصاً وقتی درباره آن‌ها مطمئن نیستید؛ برای نمونه، اینکه مقادیر گمشده را با صفر یا میانه جایگزین کنید یا ردیف‌ها را حذف کنید.
    • مگر اینکه فقط تعداد بسیار کمی مقدار ابرپارامتر برای بررسی وجود داشته باشد، جست‌وجوی تصادفی را بر جست‌وجوی شبکه‌ای ترجیح دهید. اگر آموزش بسیار طولانی است، می‌توانید رویکرد بهینه‌سازی بیزی، برای نمونه با پیشین‌های فرایند گاوسی، را ترجیح دهید؛ همان‌گونه که Jasper Snoek و همکاران توضیح داده‌اند.1
  2. روش‌های تجمیعی را امتحان کنید. ترکیب بهترین مدل‌ها اغلب از اجرای جداگانه آن‌ها کارایی بهتری ایجاد می‌کند.
  3. وقتی از مدل نهایی مطمئن شدید، کارایی آن را روی مجموعه آزمون اندازه بگیرید تا خطای تعمیم را برآورد کنید.

ارائه راه‌حل

  1. آنچه انجام داده‌اید مستند کنید.
  2. یک ارائه مناسب بسازید:
    • ابتدا تصویر کلی را برجسته کنید.
  3. توضیح دهید چرا راه‌حل شما به هدف کسب‌وکار می‌رسد.
  4. نکات جالبی را که در مسیر مشاهده کرده‌اید فراموش نکنید:
    • شرح دهید چه چیزهایی کار کردند و چه چیزهایی کار نکردند.
    • فرض‌ها و محدودیت‌های سامانه را فهرست کنید.
  5. مطمئن شوید یافته‌های کلیدی با مصورسازی‌های زیبا یا جمله‌های به‌یادماندنی منتقل می‌شوند؛ برای نمونه: «درآمد میانه، پیش‌بینی‌کننده شماره یک قیمت مسکن است.»

راه‌اندازی

  1. راه‌حل را برای محیط عملیاتی آماده کنید؛ آن را به ورودی‌های داده عملیاتی متصل کنید، آزمون‌های واحد بنویسید و مانند آن.
  2. برای بررسی دوره‌ای کارایی زنده سامانه، کد پایش بنویسید و هنگامی که کارایی افت می‌کند هشدار فعال کنید:
    • مراقب افت تدریجی باشید؛ مدل‌ها با تغییر داده‌ها تمایل دارند به‌مرور «فرسوده» شوند.
    • اندازه‌گیری کارایی ممکن است به یک خط لوله انسانی نیاز داشته باشد؛ برای نمونه با استفاده از یک خدمت جمع‌سپاری.
    • کیفیت ورودی‌ها را نیز پایش کنید؛ برای نمونه حسگری که خراب شده و مقادیر تصادفی می‌فرستد، یا خروجی تیم دیگری که کهنه شده است. این موضوع برای سامانه‌های یادگیری برخط اهمیت ویژه دارد.
  3. مدل‌ها را به‌صورت منظم با داده‌های تازه دوباره آموزش دهید و تا حد امکان این کار را خودکار کنید.

1 Jasper Snoek و همکاران، «Practical Bayesian Optimization of Machine Learning Algorithms»، مجموعه مقالات بیست‌وپنجمین کنفرانس بین‌المللی Neural Information Processing Systems، جلد ۲، سال ۲۰۱۲، صفحات ۲۹۵۱ تا ۲۹۵۹.

ضمیمه B: Autodiff (مشتق‌گیری خودکار)

این ضمیمه توضیح می‌دهد قابلیت Autodiff (مشتق‌گیری خودکار) در TensorFlow چگونه کار می‌کند و با راه‌حل‌های دیگر چه تفاوتی دارد.

فرض کنید تابع f(x, y) = x²y + y + 2 را تعریف کرده‌اید و به مشتق‌های جزئی ∂f/∂x و ∂f/∂y نیاز دارید؛ معمولاً برای اجرای گرادیان نزولی یا الگوریتم بهینه‌سازی دیگری. گزینه‌های اصلی شما عبارت‌اند از مشتق‌گیری دستی، تقریب تفاضل محدود، مشتق‌گیری خودکار حالت رو‌به‌جلو و مشتق‌گیری خودکار حالت معکوس. TensorFlow حالت معکوس را پیاده‌سازی می‌کند، اما برای درک آن بهتر است ابتدا گزینه‌های دیگر را بررسی کنیم.

مشتق‌گیری دستی

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

  • مشتق یک ثابت برابر ۰ است.
  • مشتق λx برابر λ است، اگر λ ثابت باشد.
  • مشتق x^λ برابر λx^(λ−1) است؛ بنابراین مشتق برابر 2x است.
  • مشتق مجموع چند تابع، مجموع مشتق‌های آن توابع است.
  • مشتق حاصل‌ضرب یک ثابت λ در یک تابع، برابر همان ثابت ضربدر مشتق تابع است.

از این قواعد می‌توان معادله B-1 را به‌دست آورد.

Equation B-1 — Partial derivatives of f(x, y)
∂f/∂x = ∂(x²y)/∂x + ∂y/∂x + ∂2/∂x = y·∂(x²)/∂x + 0 + 0 = 2xy
∂f/∂y = ∂(x²y)/∂y + ∂y/∂y + ∂2/∂y = x² + 1 + 0 = x² + 1

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

تقریب تفاضل محدود

به یاد بیاورید مشتق h′(x₀) تابع h(x) در نقطه x₀ همان شیب تابع در آن نقطه است. دقیق‌تر، مشتق به‌صورت حد شیب خط مستقیمی تعریف می‌شود که از نقطه x₀ و نقطه دیگری x روی تابع می‌گذرد، هنگامی که x بی‌نهایت به x₀ نزدیک می‌شود.

Equation B-2 — Definition of the derivative of h(x) at x₀
h′(x₀) = limx→x₀ [h(x) − h(x₀)] / (x − x₀) = limε→0 [h(x₀ + ε) − h(x₀)] / ε

برای محاسبه مشتق جزئی f(x,y) نسبت به x در x=3 و y=4، می‌توان f(3+ε,4)−f(3,4) را با مقدار بسیار کوچکی برای ε محاسبه و نتیجه را بر ε تقسیم کرد. این نوع تقریب عددی مشتق «تقریب تفاضل محدود» نام دارد و این معادله خاص «خارج‌قسمت تفاضل نیوتن» است. کد زیر دقیقاً همین کار را انجام می‌دهد:

def f(x, y):
    return x**2*y + y + 2

def derivative(f, x, y, x_eps, y_eps):
    return (f(x + x_eps, y + y_eps) - f(x, y)) / (x_eps + y_eps)

df_dx = derivative(f, 3, 4, 0.00001, 0)
df_dy = derivative(f, 3, 4, 0, 0.00001)

نتیجه دقیق نیست و برای توابع پیچیده‌تر وضعیت بدتر می‌شود. پاسخ درست به‌ترتیب ۲۴ و ۱۰ است، اما خروجی به‌شکل زیر است:

>>> df_dx
24.000039999805264
>>> df_dy
10.000000000331966

برای محاسبه هر دو مشتق جزئی، باید تابع f() را دست‌کم سه بار فراخوانی کنیم؛ در کد بالا چهار بار فراخوانی شده، هرچند قابل بهینه‌سازی است. اگر ۱۰۰۰ پارامتر داشته باشیم، دست‌کم ۱۰۰۱ بار فراخوانی تابع لازم است. برای شبکه‌های عصبی بزرگ، این موضوع تقریب تفاضل محدود را بسیار ناکارآمد می‌کند.

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

تا اینجا دو روش محاسبه گرادیان را دیدیم: مشتق‌گیری دستی و تقریب تفاضل محدود. هر دو برای آموزش شبکه عصبی در مقیاس بزرگ نقص بنیادی دارند. اکنون به Autodiff می‌رسیم و از حالت رو‌به‌جلو آغاز می‌کنیم.

Forward-Mode Autodiff (مشتق‌گیری خودکار حالت رو‌به‌جلو)

شکل B-1 نشان می‌دهد مشتق‌گیری خودکار حالت رو‌به‌جلو روی تابع ساده‌تر g(x,y)=5+xy چگونه کار می‌کند. سمت چپ گراف تابع و سمت راست گراف مشتق جزئی ∂g/∂x = 0 + (0×x + y×1) = y را نشان می‌دهد. به همین ترتیب می‌توان مشتق نسبت به y را نیز به‌دست آورد.

الگوریتم گراف محاسباتی را از ورودی‌ها به سمت خروجی‌ها طی می‌کند؛ از همین رو «حالت رو‌به‌جلو» نامیده می‌شود. ابتدا مشتق‌های جزئی گره‌های برگ محاسبه می‌شوند. گره ثابت ۵ مقدار ۰ بازمی‌گرداند، چون مشتق ثابت همیشه صفر است. متغیر x مقدار ۱ بازمی‌گرداند، زیرا ∂x/∂x=1، و متغیر y مقدار ۰ بازمی‌گرداند، زیرا ∂y/∂x=0. اگر مشتق نسبت به y را می‌خواستیم، وضعیت این دو متغیر برعکس می‌شد.

اکنون می‌توانیم در گراف به گره ضرب تابع g برسیم. حساب دیفرانسیل می‌گوید مشتق حاصل‌ضرب دو تابع u و v برابر ∂(u×v)/∂x = ∂v/∂x×u + v×∂u/∂x است. بنابراین بخش بزرگی از گراف سمت راست، یعنی 0×x + y×1، ساخته می‌شود.

در پایان به گره جمع می‌رسیم. مشتق مجموع توابع، مجموع مشتق‌های آن‌هاست؛ پس با افزودن یک گره جمع به بخش‌های محاسبه‌شده، مشتق درست ∂g/∂x = 0 + (0×x + y×1) حاصل می‌شود.

مشتق‌گیری خودکار حالت رو‌به‌جلو
شکل B-1. مشتق‌گیری خودکار حالت رو‌به‌جلو

این معادله را می‌توان بسیار ساده کرد. با هرس چند عمل غیرضروری از گراف محاسباتی، گراف بسیار کوچکی با فقط یک گره می‌ماند: ∂g/∂x = y. در این مثال ساده‌سازی آسان است، اما برای توابع پیچیده‌تر، مشتق‌گیری خودکار حالت رو‌به‌جلو ممکن است گرافی بسیار بزرگ تولید کند که ساده‌سازی آن دشوار و کارایی آن نامطلوب باشد.

از یک گراف محاسباتی شروع کردیم و مشتق‌گیری خودکار حالت رو‌به‌جلو گراف محاسباتی دیگری تولید کرد. این روش «مشتق‌گیری نمادین» نام دارد و دو مزیت مهم دارد: پس از تولید گراف مشتق می‌توان آن را بارها برای مقادیر مختلف x و y اجرا کرد؛ همچنین می‌توان دوباره مشتق‌گیری خودکار را روی همان گراف اجرا کرد تا مشتق مرتبه دوم، سوم و بالاتر به‌دست آید.

البته حالت رو‌به‌جلو را می‌توان بدون ساخت گراف، یعنی به‌صورت عددی، نیز اجرا کرد و نتایج میانی را در لحظه محاسبه نمود. یکی از راه‌ها استفاده از «اعداد دوگان» است: اعداد جالبی به‌شکل a+bε که در آن a و b حقیقی‌اند و ε عددی بی‌نهایت کوچک با ویژگی ε²=0 و درعین‌حال ε≠0 است. عدد دوگان 42+24ε را می‌توان برای تقریب ذهنی شبیه 42.0000…000024 با بی‌نهایت صفر تصور کرد، هرچند این فقط برای ایجاد شهود است.

در حافظه، عدد دوگان به‌صورت یک جفت عدد اعشاری ذخیره می‌شود؛ برای نمونه 42+24ε با جفت (42.0, 24.0) نمایش داده می‌شود. اعداد دوگان را می‌توان جمع و ضرب کرد:

Equation B-3 — Operations with dual numbers
λ(a+bε)=λa+λbε
(a+bε)+(c+dε)=(a+c)+(b+d)ε
(a+bε)(c+dε)=ac+(ad+bc)ε+bdε²=ac+(ad+bc)ε

مهم‌تر از همه، می‌توان نشان داد h(a+bε)=h(a)+b×h′(a)ε؛ بنابراین محاسبه h(a+ε) در یک مرحله هم h(a) و هم مشتق h′(a) را به ما می‌دهد. شکل B-2 نشان می‌دهد مشتق جزئی ∂f/∂x(3,4) با اعداد دوگان چگونه محاسبه می‌شود. کافی است f(3+ε,4) را حساب کنیم؛ خروجی یک عدد دوگان است که مؤلفه نخست آن f(3,4) و مؤلفه دوم آن ∂f/∂x(3,4) است.

مشتق‌گیری خودکار حالت رو‌به‌جلو با اعداد دوگان
شکل B-2. مشتق‌گیری خودکار حالت رو‌به‌جلو با استفاده از اعداد دوگان

برای محاسبه ∂f/∂y(3,4) باید دوباره گراف را طی کنیم، اما این‌بار با x=3 و y=4+ε.

پس حالت رو‌به‌جلو از تقریب تفاضل محدود بسیار دقیق‌تر است، اما وقتی تعداد ورودی‌ها زیاد و تعداد خروجی‌ها کم باشد، همان ضعف اصلی را دارد. اگر ۱۰۰۰ پارامتر وجود داشته باشد، برای محاسبه همه مشتق‌های جزئی باید ۱۰۰۰ بار گراف طی شود. اینجاست که حالت معکوس برتری خود را نشان می‌دهد: همه آن‌ها را تنها با دو بار پیمایش گراف محاسبه می‌کند.

Reverse-Mode Autodiff (مشتق‌گیری خودکار حالت معکوس)

حالت معکوس همان راه‌حلی است که TensorFlow پیاده‌سازی می‌کند. ابتدا گراف را در جهت رو‌به‌جلو، از ورودی‌ها به خروجی، طی می‌کند تا مقدار هر گره محاسبه شود. سپس بار دوم گراف را در جهت معکوس، از خروجی به ورودی‌ها، طی می‌کند تا همه مشتق‌های جزئی به‌دست آیند. نام «حالت معکوس» از همین پیمایش دوم گرفته شده است که در آن گرادیان‌ها در جهت معکوس جریان می‌یابند.

شکل B-3 پیمایش دوم را نشان می‌دهد. در پیمایش نخست همه مقادیر گره‌ها با شروع از x=3 و y=4 محاسبه شده‌اند؛ این مقادیر در پایین سمت راست هر گره دیده می‌شوند، برای نمونه x×x=9. برای وضوح، گره‌ها از n1 تا n7 نام‌گذاری شده‌اند. گره خروجی n7 است و f(3,4)=n7=42.

مشتق‌گیری خودکار حالت معکوس
شکل B-3. مشتق‌گیری خودکار حالت معکوس

ایده این است که به‌تدریج در گراف پایین برویم و مشتق جزئی f(x,y) را نسبت به هر گره پیاپی محاسبه کنیم تا به گره‌های متغیر برسیم. حالت معکوس برای این کار به‌شدت به «قاعده زنجیره‌ای» متکی است.

Equation B-4 — Chain rule
∂f/∂x = (∂f/∂nᵢ) × (∂nᵢ/∂x)

چون n7 گره خروجی است و f=n7، پس ∂f/∂n7=1. اکنون به n5 می‌رویم. میزان تغییر f در برابر تغییر n5 برابر ∂f/∂n5 = ∂f/∂n7 × ∂n7/∂n5 است. می‌دانیم ∂f/∂n7=1 و چون n7=n5+n6، داریم ∂n7/∂n5=1؛ بنابراین ∂f/∂n5=1×1=1.

سپس به n4 می‌رسیم: ∂f/∂n4 = ∂f/∂n5 × ∂n5/∂n4. چون n5=n4×n2، داریم ∂n5/∂n4=n2، پس ∂f/∂n4 = 1×n2 = 4.

این فرایند تا پایین گراف ادامه می‌یابد. در پایان همه مشتق‌های جزئی f(x,y) را در نقطه x=3 و y=4 محاسبه کرده‌ایم: ∂f/∂x=24 و ∂f/∂y=10.

حالت معکوس روشی بسیار قدرتمند و دقیق است، به‌ویژه وقتی ورودی‌ها بسیار و خروجی‌ها کم‌اند. برای هر خروجی فقط یک پیمایش رو‌به‌جلو و یک پیمایش معکوس لازم است تا همه مشتق‌های جزئی نسبت به همه ورودی‌ها محاسبه شوند. هنگام آموزش شبکه عصبی معمولاً تنها یک خروجی، یعنی مقدار تابع زیان، را کمینه می‌کنیم؛ در نتیجه برای محاسبه گرادیان‌ها فقط دو پیمایش گراف لازم است. این روش همچنین می‌تواند با توابعی که همه‌جا مشتق‌پذیر نیستند کار کند، مشروط بر اینکه مشتق را در نقاط مشتق‌پذیر بخواهیم.

در شکل B-3 نتایج عددی در هر گره و در لحظه محاسبه شده‌اند؛ اما TensorFlow دقیقاً این کار را انجام نمی‌دهد. در عوض یک گراف محاسباتی جدید می‌سازد؛ یعنی «مشتق‌گیری نمادین حالت معکوس» را پیاده‌سازی می‌کند. در نتیجه گراف محاسبه گرادیان زیان نسبت به همه پارامترهای شبکه فقط یک‌بار ساخته می‌شود و سپس هر بار که بهینه‌ساز به گرادیان‌ها نیاز دارد، بارها اجرا می‌شود. این روش امکان محاسبه مشتق‌های مرتبه بالاتر را نیز فراهم می‌کند.

امتیاز کاربران به این مقاله

☆☆☆☆☆

0 نفر امتیاز داده اند. میانگین: 0.0 از 5

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

0 / 500

اطلاعات تماس

  • آدرس:اصفهان-خیابان ام کلثوم غربی - بعد خیابان تخم چی - بیست متر بعد از پیتزا ننه شب - کوچه تعمیر گاه سمار زغالی - پلاک 354 - درب مشکی - طبقه هفتم
  • آدرس ایمیل:najafzade@gmail.com
  • وب سایت:http://www.a00b.com/
  • تلفن ثابت:(+98)9131253620
  • تلفن همراه:09131253620