شبکه اتوانکدر
شبکه اتوانکدر (Autoencoder) یک نوع شبکه عصبی است که برای فشردهسازی (کدگذاری) دادههای بهکار میرود. تا الان در هوسم درباره آن آموزشی ننوشته بودم! گناه بزرگی هست! 🙁 با من و هوسم در آموزش شبکه اتوانکدر همراه باشید…
شبکه اتوانکدر چیست؟
شبکه اتوانکدر (autoencoder) یک شبکه عصبی بدون ناظر (Unsupervised) است که از دو بخش اصلی انکدر (Encoder) و دیکدر (Decoder) تشکیل شده است؛ انکدر (Encoder) دادههای ورودی را به یک نمایش فشرده تبدیل میکند و دیکدر (Decoder) تلاش میکند دادههای فشردهشده را به شکل اصلی بازسازی کند. شکل زیر نشان میدهد که چگونه انکدر یک نمایش فشرده از تصویر ورودی ارائه کرده است. همچنین، این نمایش فشرده به دیکدر داده شده تا نسخه بازسازیشده ورودی حاصل شود.

ساختار شبکه اتوانکدر
با شبکه اتوانکدر آشنا شدید. حالا میخواهم اجزای شبکه اتوانکدر و اصطلاحات مرتبط با این شبکه را به شما توضیح دهم.
- انکدر (Encoder): داده ورودی (x) را به یک نمایش فشرده با ابعاد پایین (h) تبدیل میکند. وظیفه انکدر کاهش ابعاد داده است تا تنها اطلاعات مهم از داده حفظ شود. این بخش معمولا شامل چند لایه شبکه عصبی (فولی کانکتد، کانولوشنی و غیره) متوالی است که به مرور اطلاعات ورودی را فشرده و ویژگیهای کلیدی را استخراج میکنند.
- فضای نهفته (Latent Space): به خروجی انکدر (h) بردار ویژگی نهفته گفته میشود. چون، ویژگیهای مهم استخراجشده از داده ورودی در آن نهفته شده است. در واقع، بردار نهفته نمایانگر خلاصهای از اطلاعات ورودی است که ویژگیهای اصلی و کلیدی آن را در یک فضای کمبعد نگهداری میکند. همچنین، فضای نهفته جایی است که دادهها با کمترین ابعاد ممکن اما حاوی اطلاعات ضروری ذخیره میشوند. هدف این است که این بردار فشرده ویژگیهای مهم داده را حفظ کند، به طوری که بازسازی داده از طریق دیکدر به درستی انجام شود.
- دیکدر (Decoder): دادههای ورودی را بر اساس بردار نهفته بازسازی میکند (r). این بخش نیز شامل چند لایه عصبی است که به مرور دادههای فشرده را به ابعاد اصلی بازمیگرداند.
آموزش شبکه اتوانکدر
شبکه اتوانکدر مانند سایر شبکههای عصبی از پسانتشار خطا (Backpropagation Error) برای بروزرسانی وزنهای خود در فرآیند آموزش استفاده میکند. این روش، از دو مولفه اصلی بهره میگیرد:
- تابع اتلاف (Loss Function): تابع اتلاف، اختلاف بین دادههای ورودی (x) و خروجی بازسازیشده (r) را محاسبه میکند. دقت کنید، بالاتر گفتم که شبکه اتوانکدر بهصورت بدون ناظر (Unsupervised) آموزش میبیند. هدف اتوانکدر کاهش این تفاوت است تا خروجی هرچه بیشتر شبیه ورودی باشد. توابع اتلاف رایجی مانند MSE یا Cross-Entropy در اینجا به کار میروند.
- بهینهسازی (Optimization): فرآیندی است که در آن وزنهای شبکه به گونهای تنظیم میشوند که مقدار تابع اتلاف به حداقل برسد. این کار با استفاده از الگوریتمهایی مانند Adam یا SGD انجام میشود که با استفاده از گرادیان (Gradient)، وزنها را بهروزرسانی میکنند.

تا اینجا، آشنایی اولیه و خوبی با شبکه اتوانکدر بدست آوردهاید. اما قبل از شروع مباحث عمیقتر، میخواهم بریدههایی از منابع خوب درباره اتوانکدر را با شما اشتراک بگذارم!
اتوانکدرها در کتاب دیپ لرنینگ آقای Goodfellow
با کتاب گودفلو شروع کنیم! یا الله! 🙌 فصل 14 کتاب با پاراگراف زیر شروع میشود. اتوانکدر یک شبکه عصبی است که آموزش میبیند تا ورودی خود را به خروجیاش کپی کند. منظورش از کپی چیست؟ چند جمله بعد توضیح داده: اگر اتوانکدر یاد بگیرد که خروجی را دقیقا برابر با ورودی قرار دهد، خاصیت چندان مفیدی محسوب نمیشود! بله، اینکه دقیقا خروجی برابر با ورودی باشد که نیازی به این همه شبکه عصبی، انکدر و دیکدر ندارد! در عوض، اتوانکدرها به گونهای طراحی شدهاند که نتوانند ورودی را به طور کامل کپی کنند. معمولا، اتوانکدرها به شکلی محدود میشوند که تنها بتوانند ورودی را به صورت تقریبی کپی کنند. حالا دوباره، به شکل بالا نگاه کنید! خروجی و ورودی دقیقا یکی نیستند، نه؟! بازسازی شده، اما کپی دقیق نه!
اتوانکدر در سایت Keras
آقای شولت با یک معرفی سنگین و پرنکته از اتوانکدر شروع کرده! بخشی از متن را در تصویر زیر آوردم. با عبارت Autoencoding شروع کرده؛ اتوانکدینگ یک الگوریتم فشردهسازی داده هست که شامل توابع compression و decompression هست. همان انکدر و دیکدری که بالاتر دیدیم! تقریبا در همه زمینههایی که از عبارت اتوانکدر استفاده میشود، توابع compression و decompression مبتنی بر شبکههای عصبی هستند. توابع compression و decompression سه خاصیت مهم دارند:
- Data-specific: یعنی، اتوانکدرها تنها قادر به فشردهسازی دادههای مشابه با دادههای آموزشی (Train data) هستند. مثلا، یک اتوانکدر که روی تصاویر چهره آموزش دیده، در فشردهسازی تصاویر درخت نسبتا ضعیف خواهد بود. چون، ویزگیهایی که اتوانکدر آموخته، خاص چهره هستند.
- Lossy: فرآیند decompression در اتوانکدر از جنس با اتلاف (Lossy) هست. یعنی، خروجی یک نسخه تنزل یافته (Degraded) از ورودی هست. همین حرف را آقای گودفلو هم گفته بود.
- Learned automatically from examples: به همان ساختار شبکه عصبی و آموزش دیدن آنها اشاره میکند. این در مقابل روش مهندسی ویژگی است که من و شما باید آچار به دست باشیم!
بریم سراغ یک منبع دیگه؟! بسه دیگه! حالا با این آشنایی خوبی که بدست آوردید، وارد مباحث عمیقتر شویم…
انواع شبکه اتوانکدر
اتوانکدرها انواع مختلفی دارند که عبارت است از:
- اتوانکدر ناقص (Undercomplete Autoencoder)
- اتوانکدر تنظیمشده (Regularized Autoencoder)
- اتوانکدر اسپارس (Sparse Autoencoder)
- اتوانکدر متغیر (Variational Autoencoder)
با اتوانکدر ناقص شروع کنیم…
اتوانکدر ناقص (Undercomplete Autoencoder)
اتوانکدر ناقص (Undercomplete Autoencoder) سادهترین نوع اتوانکدر است که خروجی انکدر (h) ابعاد کوچکتری نسبت به ورودی (x) دارد. این کاهش ابعاد باعث میشود که شبکه مجبور شود ویژگیهای اصلی و مهم داده را یاد بگیرد، به جای اینکه دادهها را صرفا کپی کند. میدانید که ما کپی کردن کامل ورودی در خروجی را در اتوانکدر نمیپسندیم! خلاصه اینکه، ساختار اتوانکدر ناقص باعث میشود داده به طور موثر فشردهسازی و اطلاعات غیرضروری حذف شود. همچنین، ویژگیهای مهم برای بازسازی دادهها در مرحله دیکدر حفظ شود.
من یک نمونه کد تنسورفلو از اتوانکدر ناقص برای شما آوردم. اگر تنسورفلو بلد نیستید، مهم نیست. هدفم آموزش کدنویسی اتوانکدر نیست. صرفا میخواهم دید شما نسبت به اتوانکدر افزایش یابد. فکر کنید اینها شبهکد هست! اما در کدهای زیر چه اتفاقی میافتد؟
- خطوط 1 الی 4 که ایمپورت هست!
- خطوط 6 الی 11 مربوط به فراخوانی دیتاست MNIST، نرمالیزه به بازه [0,1] و تبدیل به بردار بهطول 768 هست.
- خطوط 13 الی 22 یک مدل اتوانکدر ناقص بر پایه لایه فولی کانکتد ساخته شده است.
- در خط 18، انکدر با یک لایه فولی کانکتد و تابع فعالساز ReLU ساخته شده است.
- خروجی انکدر (بردار نهفته) به طول 32 هست. در اتوانکدر ناقص، ابعاد h کوچکتر از x هست.
- در خط 20، دیکدر با یک لایه فولی کانکتد و تابع فعالساز Sigmoid ساخته شده است.
- خروجی دیکدر برداری به طول 768 هست. سایز بردار r برابر با x شده است.
- نهایتا در خط 22، انکدر و دیکدر به هم متصل شده و اتوانکدر تشکیل شده است.
- در خط 25، بهینهساز Adam و تابع اتلاف باینری کراس آنتروپی تنظیم شده است.
- در خط 28، دستور fit برای آموزش مدل برای 50 ایپاک قرار دارد.
- خط 35 مربوط به گرفتن خروجی از مدل اتوانکدر آموزشدیده هست (Inference).
import tensorflow as tf from tensorflow.keras import layers, models from tensorflow.keras.datasets import mnist import numpy as np # Load MNIST dataset (x_train, _), (x_test, _) = mnist.load_data() x_train = x_train.astype('float32') / 255. x_test = x_test.astype('float32') / 255. x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:]))) # Flatten to 784 x_test = x_test.reshape((len(x_test), np.prod(x_test.shape[1:]))) # Autoencoder model input_dim = 784 # 28*28 flattened images encoding_dim = 32 # Dimension of the latent space (compressed representation) # Encoder input_img = layers.Input(shape=(input_dim,)) encoded = layers.Dense(encoding_dim, activation='relu')(input_img) # Decoder decoded = layers.Dense(input_dim, activation='sigmoid')(encoded) # Full autoencoder autoencoder = models.Model(input_img, decoded) # Compile model autoencoder.compile(optimizer='adam', loss='binary_crossentropy') # Train the model autoencoder.fit(x_train, x_train, epochs=50, batch_size=256, shuffle=True, validation_data=(x_test, x_test)) # After training, use the autoencoder to make predictions (compression and decompression) reconstructed_imgs = autoencoder.predict(x_test)
متغیر reconstructed_imgs شامل تصاویر بازسازیشده x_test هست. آنها را از ابعاد 768 به یک تصویر 32×32 تبدیل میکنیم. حالا میتوانیم، ورودی (x_test) و تصویر بازسازیشده (reconstructed_imgs) را نمایش دهیم و مقایسه کنیم.
کدهای بالا را بهصورت کامل در گیتهاب هوسم گذاشتم و میتوانید از آن استفاده کنید. ⭐
کدهای شبکه اتوانکدر در گیتهاب هوسم
خب، فعلا همین اندازه کافی هست! ببینیم نظرات شما به چه شکلی هست. اگر مثبت بود و دوست داشتید، ادامه میدیم. فعلا! ✋😊
مطالب زیر را حتما مطالعه کنید
یادگیری انتقالی
شبکه VGG
مهندسی پرامپت
مدل nanoGPT
شگفتانگیزترین ایده هوش مصنوعی از نظر Andrej Karpathy
شبکه ویژن ترنسفورمر
16 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام
برای بازیابی داده با استفاده از شبکه های عصبی عمیق هم میشه از این مورد استفاده کرد ؟ به عنوان مثال یه منطقع ای که اتش سوزی شده و نیاز هست که یه سری از تصاویر وارد شبکه عصبی کنیم تا بخش هایی که پوشش ابر داره و خوب دید نداریم رو تصحیح کنیم تا بازیابی داده صورت بگیره .
سلام
بله، چنین کاربردی داره.
واقعا قشنگه ⚘
ممنون 🙏🌹😊
سلام
خیلی توضیحاتتون کامل بود.
خیلی ممنون
یک سوال داشتم
الان keras دیگه زیر مجموعه tenseorflow و باید جدا نصب بشه؟
سلام
خوشحالیم که آموزش شبکه اتوانکدر براتون مفید بوده.
با نصب تنسورفلو، کراس هم نصب میشه.
اما، الان دیگه کراس از backend-های مختلفی ساپورت میکنه؛ مثلا، کراس با backend پایتورچ یا Jax. مثلا میتونید با دستور pip install –upgrade keras اول کراس رو نصب کنید؛ بعد هم یکی از بکندهای تنسورفلو، پایتورچ یا جکس رو نصب کنید.
https://keras.io/getting_started/
با سلام مطالب صفحه تون خیلی کامله راجب اون چیزی ک من میخواستم خیلی لطف کردین به اشتراک گذاشتین راجب چگونگی کار کردن و اینکه llm کلا چیه هم مطالب زیاد بزارین
سلام
خوشحالیم که مطالب سایت بهتون کمک کرده.
برای بحث مدل زبانی بزرگ یا LLM محتواهایی در سایت منتشر کردیم. مثلا میتونید موارد زیر رو در سایت هوسم مطالعه بفرمایید:
مدل زبانی چیست
LLM چیست؟
مدل MobileLLM
درحال تهیه یک دوره ویدئویی آموزش LLM هم هستیم.
موفق باشید 🌹
ممنون عالی بود
ممنون 🌹🙏
عاااااااالی بود من بارها و بارها آموزش های شما رو میخونم بینظیرید
خوشحالیم که چنین حسی نسبت به آموزشهای هوسم دارید. 😊
ممنون 🌹🙏
سلام خیلی عالی بود
سلام
ممنون 🙏🌹
سلام عالی بود
کاش مباحث پیشرفته ترش مثل وری ایشنال اتوانکدر رو هم در ادامه میگفتید
ممنون
سپاس 🌹🙏