آموزش هوش مصنوعی

اتوانکودر چیست؟ خودرمزگذار، بازنمایی فشرده و VAE با مثال پایتون

متوسط مطالعه در ۸ دقیقه بخش ۳۶ از ۳۶ در مبانی هوش مصنوعی و علم داده
mahdyar
اتوانکودر چیست؟ خودرمزگذار، بازنمایی فشرده و VAE با مثال پایتون

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

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

اتوانکودر چیست و چطور کار می‌کند؟

آموزش CNN به داده‌ی برچسب‌خورده‌ی زیادی نیاز دارد. اما داده‌ی بدون برچسب تقریباً همیشه فراوان است. اتوانکودر نوعی شبکه‌ی عصبی است که بدون برچسب، بازنمایی کارآمدی از داده یاد می‌گیرد.

رمزگذار، فضای نهفته و رمزگشا

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

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

چرا گلوگاه مهم است؟

اگر کد نهفته به بزرگی ورودی باشد، شبکه می‌تواند بدون یادگیری چیزی، فقط ورودی را کپی کند. گلوگاه باریک این راه را می‌بندد. مثلاً تصویر ۷۸۴ پیکسلی MNIST باید در یک بردار ۱۶ عددی فشرده شود.

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

کاربردهای اتوانکودر

بازسازی تصویر به‌خودی‌خود شاید بی‌فایده به نظر برسد. اما چند سناریوی مهم وجود دارد که اتوانکودر در آن‌ها بسیار کاربردی است. نمودار زیر مسیر آموزش و استفاده از اتوانکودر را نشان می‌دهد.

مسیر آموزش و استفاده از اتوانکودر از رمزگذار تا فضای نهفته و رمزگشا

کاهش ابعاد و حذف نویز

کد نهفته بازنمایی فشرده‌ای از داده است. اگر فضای نهفته دو یا سه بعد داشته باشد، می‌شود داده را روی نمودار مصورسازی کرد. معمولاً نمونه‌های شبیه در فضای نهفته کنار هم قرار می‌گیرند. این کاهش ابعاد غیرخطی است و گاهی از روش‌های خطی مثل PCA بهتر عمل می‌کند.

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

تشخیص ناهنجاری

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

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

بیشتر بخوانید: لایه‌های کانولوشن و ادغام که رمزگذار اتوانکودر تصویری از آن‌ها ساخته می‌شود، در شبکه عصبی کانولوشنی (CNN) چیست؟ توضیح داده شده است.

ساخت اتوانکودر حذف نویز با PyTorch

حالا یک اتوانکودر کانولوشنی کوچک برای حذف نویز از ارقام MNIST می‌سازیم. رمزگذار با دو لایه‌ی کانولوشن اندازه را کوچک می‌کند و رمزگشا با کانولوشن ترانهاده آن را بزرگ می‌کند.

کد مدل و آموزش

در هر گام، به تصویر اصلی نویز گاوسی اضافه می‌کنیم. ورودی مدل تصویر نویزی است و هدف تصویر تمیز:

python
import torch
from torch import nn

class DenoisingAE(nn.Module):
    def __init__(self):
        super().__init__()
        self.encoder = nn.Sequential(
            nn.Conv2d(1, 16, 3, stride=2, padding=1), nn.ReLU(),   # 28 -> 14
            nn.Conv2d(16, 32, 3, stride=2, padding=1), nn.ReLU(),  # 14 -> 7
        )
        self.decoder = nn.Sequential(
            nn.ConvTranspose2d(32, 16, 3, stride=2, padding=1, output_padding=1), nn.ReLU(),
            nn.ConvTranspose2d(16, 1, 3, stride=2, padding=1, output_padding=1), nn.Sigmoid(),
        )

    def forward(self, x):
        return self.decoder(self.encoder(x))

model, loss_fn = DenoisingAE(), nn.MSELoss()
opt = torch.optim.Adam(model.parameters(), lr=1e-3)
for x, _ in train_dl:                        # برچسب‌ها استفاده نمی‌شوند
    noisy = (x + 0.3 * torch.randn_like(x)).clamp(0, 1)
    loss = loss_fn(model(noisy), x)
    opt.zero_grad(); loss.backward(); opt.step()

ویژگی‌های اتوانکودر

به for x, _ دقت کنید؛ برچسب‌ها کاملاً نادیده گرفته می‌شوند. اتوانکودر دو ویژگی مهم دیگر هم دارد. اول، وابسته به داده است. فقط روی نوع داده‌ای خوب کار می‌کند که با آن آموزش دیده است. اتوانکودری که روی ارقام آموزش دیده، عکس گل را خوب بازسازی نمی‌کند.

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

اتوانکودر واریاسیونی (VAE)

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

یادگیری توزیع به جای نقطه

اتوانکودر واریاسیونی یا VAE به جای یک نقطه، یک توزیع یاد می‌گیرد. رمزگذار برای هر ورودی دو بردار پیش‌بینی می‌کند؛ میانگین و لگاریتم واریانس. سپس یک نمونه از این توزیع نرمال برداشته می‌شود و به رمزگشا داده می‌شود.

تابع خطای VAE دو بخش دارد. خطای بازسازی مثل قبل فاصله‌ی ورودی و خروجی را می‌سنجد. خطای KL فاصله‌ی توزیع نهفته از توزیع نرمال استاندارد را می‌سنجد. این بخش دوم فضای نهفته را پیوسته و منظم نگه می‌دارد.

ساختن داده‌ی تازه

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

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

تمرین عملی؛ اتوانکودر برای تشخیص ناهنجاری

این تمرین کاربرد عملی اتوانکودر را نشان می‌دهد:

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

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

سخن پایانی

اتوانکودر با رمزگذار ورودی را از یک گلوگاه باریک عبور می‌دهد و با رمزگشا دوباره می‌سازد. این کار بدون برچسب، بازنمایی فشرده و معناداری از داده یاد می‌گیرد. کاهش ابعاد، حذف نویز، افزایش وضوح و تشخیص ناهنجاری از کاربردهای اصلی آن‌اند.

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

این آموزش بر پایه‌ی درس Autoencoders از مجموعه‌ی آزاد AI for Beginners مایکروسافت (مجوز MIT) به فارسی بازنویسی و تکمیل شده است.

پرسش‌های پرتکرار

اتوانکودر چیست؟

اتوانکودر یا خودرمزگذار شبکه‌ی عصبی‌ای است که ورودی را به یک بردار کوچک به نام کد نهفته فشرده می‌کند و بعد از روی همان کد، ورودی را دوباره می‌سازد. چون هدف بازسازی خود ورودی است، به برچسب نیاز ندارد و روی داده‌ی بدون برچسب آموزش می‌بیند.

کاربردهای اتوانکودر چیست؟

کاهش ابعاد و مصورسازی داده، حذف نویز از تصویر، افزایش وضوح تصویر، تشخیص ناهنجاری با خطای بازسازی بالا، و ساخت نمونه‌ی تازه در نسخه‌ی مولد آن یعنی VAE.

تفاوت اتوانکودر و VAE چیست؟

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

چطور با اتوانکودر ناهنجاری تشخیص دهیم؟

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

دیدگاه‌ها

هنوز دیدگاهی ثبت نشده است. شروع‌کننده باشید — پرسش و اصلاح را با آغوش باز می‌پذیریم.

دیدگاه بگذارید

برای **پررنگ**، *مورب*، `کد` و لینک از Markdown استفاده کنید. لینک‌ها nofollow هستند.

پنج رقم داخل تصویر را وارد کنید. اعداد فارسی و انگلیسی پذیرفته می‌شوند.

تصویر کد امنیتی پنج‌رقمی

در حال دریافت کد امنیتی…

مهلت کد تمام شد. روی «کد جدید» بزنید.