در یادگیری ماشین و یادگیری عمیق، مدلها گاهی اوقات بیشبرازش پیدا میکنن، به این معنی که بیش از حد به دادههای آموزشی وابسته میشن و قابلیت تعمیمشون به دادههای جدید کاهش پیدا میکنه. برای حل این مشکل، از تکنیکهای تنظیم استفاده میشه.
تنظیم L1 (معروف به Lasso) و L2 (معروف به Ridge) دو روش رایج برای جلوگیری از بیشبرازش هستن. هر دو این روشها با اضافه کردن یک جمله تنظیم به تابع هزینه کار میکنن که به وزنهای مدل جریمه اعمال میکنه.
روش دیگهاش که برای جلوگیری از بیشبرازش استفاده میشه، Dropout هست. در این روش، در هر دور آموزش، بعضی از نورونها به طور تصادفی انتخاب و حذف میشن.
این کار باعث میشه که مدل نتونه به طور کامل به دادههای آموزشی وابسته شه و مجبور به یادگیری ویژگیهای معنادارتر از دادهها میشه. Dropout به عنوان یک روش موثر در شبکههای عصبی عمیق شناخته شده.
نرمال سازی دسته ای یک تکنیک دیگه برای بهبود عملکرد و ثبات شبکههای عصبی عمیقه. این روش به نرمال سازی خروجی هر لایه با استفاده از میانگین و انحراف معیار خروجیهای اون دسته کار میکنه.
این کار باعث میشه که توزیع ورودیها به لایههای بعدی نسبتاً ثابت باقی بمونه و مشکل محوشدگی کاهش پیدا کنه.
در حالی که تنظیم L1، L2، Dropout و Batch Normalization روشهای رایج برای جلوگیری از بیشبرازش و بهبود عملکرد مدل هستن، روشهای جدیدی به طور مداوم درحال معرفی هستن.
برای مثال، نرمالسازی وزن و تنظیم خودکار (AutoML)، که هدفشون بهینهسازی هایپرپارامترها و رویکردهای تنظیمه، در حال توسعه هستن.
#Deep_Learning
#Artificial_Neural_Networks
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4👌2👨💻2
❓کوییز شماره ۹۶: تکنیک Batch Normalization چطور به بهبود کارایی شبکههای عصبی عمیق کمک میکنه، به ویژه در شبکههای با لایههای زیاد؟
Anonymous Quiz
13%
با کاهش تاثیر نورونهای فعال روی خروجی نهایی مدل.
9%
افزایش دقت مدل فقط در مواردی که دادهها دارای توزیع یکنواخت باشن.
47%
بهبود ثبات فرایند آموزش با کاهش مشکل انتشار گرادیان ناپایدار و کمک به تنظیم خودکار سرعت یادگیری.
31%
تاثیر مستقیم روی کاهش زمان آموزش با کاهش تعداد دورههای لازم برای رسیدن به همگرایی.
❤3👌2😎2👍1
تکنیکهای Dropout و DropConnect هر دو برای جلوگیری از بیشبرازش در مدلهای یادگیری عمیق استفاده میشن، اما در نحوه عملکرد باهم متفاوتن.
تفاوت اصلی بین این دو در اینکه Dropout کل نورونها رو حذف میکنه، در حالی که DropConnect تنها بعضی از وزنهای مرتبط با نورونها رو حذف میکنه.
این تفاوت در نحوهی ایجاد تنوع و مقاومت در برابر بیشبرازش موثره. DropConnect میتونه به مدل اجازه بده که وابستگیهای پیچیدهتری رو یادبگیره، چون فقط بعضی از وزنها حذف میشن، نه کل نورون.
#Deep_Learning
#Artificial_Neural_Networks
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4👌2❤1🔥1
#Weekend
#Deep_Learning
#Artificial_Neural_Networks
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👏2👍1👨💻1
در این وبینار شما با زمینههای متأثر از ماشین لرنینگ آشنا میشین. همچنین اپلیکیشنها و محصولات موفق این حوزههای مختلف معرفی خواهند شد.
@DSLanders | دیاسلندرز
Please open Telegram to view this post
VIEW IN TELEGRAM
👏3❤2👍1👨💻1
#Deep_Learning
#CNNs
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2🔥1
آموزش دیتاساینس و ماشینلرنینگ
Audio
@DSLanders | دیاسلندرز
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3🔥2
شبکههای عصبی پیچشی (Convolutional Neural Networks یا CNNs) با الهام از ساختار بینایی موجودات زنده طراحی شدن و توانایی شگفتانگیزی در استخراج ویژگیهای مهم از تصاویر با حداقل پیشپردازش دارن.
ایدهی اصلی پشت شبکههای عصبی پیچشی به مطالعهی چگونگی پردازش اطلاعات تصویری توسط مغز انسان و سایر موجودات زنده برمیگرده.
این کشف انگیزهای شد برای طراحی مدلهای مصنوعی که میتونن الگوهای مشابهی از دادهها رو با استفاده از فیلترهای پیچشی تشخیص بدن.
یکی از اولین کاربردهای عملی این ایده در شبکه نورونی لایه پیچشی (LeNet) توسط یان لیکان در دهه ۱۹۹۰ معرفی شد.
از نوآوریهای مهم در این حوزه، معرفی تکنیکهایی مثل انتقال یادگیری (Transfer Learning)، تکنیکهای افزایش داده (Data Augmentation) و شبکههای پیچشی عمیق با لایههای باقیمانده (Residual Networks) بود که توانایی مدلها در آموزش عمیقتر و کارآمدتر کردن فرآیند یادگیری رو افزایش داد.
با پیچیدهتر شدن شبکهها، مسائل جدیدی مثل بیشبرازش، نیاز به دادههای آموزشی زیاد و محدودیتهای محاسباتی به وجود اومد.
#Deep_Learning
#CNNs
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👌5❤4👍3👨💻1
❓کوییز شماره ۹۷: در یک شبکهی CNN، اصطلاح کرنل (Kernel) به چه معنی هست و کدوم یک از موارد زیر توصیفکنندهی عملکرد کرنل سوبل (Sobel Kernel) در تصاویره؟
Anonymous Quiz
51%
وزنهایی که به طور تصادفی اولیهسازی شده و در طول آموزش بهروزرسانی میشن. تشخیص لبههای عمودی تصویر
20%
تابع فعالسازی که روی خروجی هر لایه اعمال میشه. تشخیص تغییرات رنگ در سراسر تصویر
8%
مقدار خطای محاسبه شده در هر دور از آموزش. تخمین زاویههای موجود در تصویر
20%
الگوهای اولیه که شبکه قبل از آموزش شناسایی میکنه. ایجاد نقشهی حرارتی از ویژگیهای تصویر
😎5👍3❤2👨💻1
CNN
نوید حقوقی
حوزه بینایی ماشین یکی از حوزههای پرطرفدار هوش مصنوعیه و شبکه عصبی کانولوشنی یا CNN یکی از الگوریتمهای معروفیه که تو این حوزه خیلی استفاده میشه.
#Machine_Learning
#Podcast
@DSLanders | دیاسلندرز
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2🔥2
فیلترها، هستههایی هستن که روی تصاویر ورودی اعمال میشن تا ویژگیهای خاصی رو استخراج کنن. هر فیلتر، یک آرایهای از وزنها (مقادیر) هست که با حرکت روی همه نقاط تصویر، یک نقشه ویژگی (feature map) تولید میکنه. این فرآیند، کانولوشن نام داره و به ما امکان میده تا ویژگیهایی مثل لبهها، بافتها و شکلها رو در تصویر شناسایی کنیم.
- فیلتر Sobel: برای تشخیص لبهها در تصاویر استفاده میشه. این فیلتر از ماتریسهای 3x3 تشکیل شده و لبههای عمودی، افقی و مورب رو در تصویر تشخیص میده.
- فیلتر Gaussian: برای تار کردن تصاویر و حذف نویز استفاده میشه. این فیلتر از ماتریسهای گاوسی تشکیل شده و نویز رو در تصویر با حفظ جزئیات مهم، حذف میکنه.
در طول فرآیند آموزش شبکه، شبکه با دریافت تصاویر ورودی و برچسبهای مربوطه، به طور خودکار فیلترهایی رو یاد میگیره که ویژگیهای مهم تصاویر رو برای تشخیص اشیاء یا طبقهبندی تصاویر استخراج کنن.
استراید، تعداد پیکسلهایی هست که فیلتر بین هر اعمال کانولوشن حرکت میکنه. اگه Stride برابر ۱ باشه، فیلتر بعد از هر اعمال، یک پیکسل حرکت میکنه.
اگه Stride بزرگتر باشه، فیلتر فواصل بیشتری رو پوشش میده، که منجر به کاهش ابعاد نقشه ویژگی میشه؛ در نتیجه به کاهش پیچیدگی محاسباتی و حافظه شبکه کمک شده.
پدینگ، فرآیندیه که در اون حاشیههای اطراف تصویر ورودی با مقادیر خاصی (معمولاً صفر) پر میشن تا ابعاد نقشه ویژگی نهایی تنظیم یا از کاهش شدید ابعاد جلوگیری شه.
- تکنیک Dilated Padding امکان افزایش فیلد دید فیلترها بدون افزایش تعداد پارامترها رو فراهم میکنه. این تکنیک به شبکهها اجازه میده که ویژگیهای موجود در دادهها رو بهتر استخراج کنن.
- در روش پدینگ انعطافپذیر یا Adaptive Padding، پدینگ بر اساس ویژگیهای خاص دادهها یا لایههای شبکه تنظیم میشه تا بهترین نحوه استفاده از پدینگ رو برای استخراج ویژگیها انتخاب کنه.
#Deep_Learning
#CNNs
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4👌4👨💻2❤1
❓کوییز شماره ۹۸: استفاده از پدینگ Same در یک لایه کانولوشنی با استراید ۱ چه تاثیری روی ابعاد نقشه ویژگی خروجی داره؟
Anonymous Quiz
13%
ابعاد نقشه ویژگی خروجی کاهش پیدا میکنه.
73%
ابعاد نقشه ویژگی خروجی نسبت به تصویر ورودی بدون تغییر باقی میمونه.
7%
ابعاد نقشه ویژگی خروجی پیدا میکنه.
7%
تنها تعداد کانالهای نقشه ویژگی خروجی تغییر میکنه.
😎4👌2❤1👍1🤔1
آموزش دیتاساینس و ماشینلرنینگ
#Deep_Learning
#CNNs
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🔥2
ابتدا باید کتابخانههای لازم رو نصب و وارد کنیم. Keras بخشی از TensorFlow هست و با نصب TensorFlow به Keras هم دسترسی داریم.
import tensorflow as tf
from tensorflow.keras import layers, models
یک CNN ساده معمولا شامل لایههای کانولوشن، لایههای فعالساز (Activation)، لایههای ادغام (Pooling) و در نهایت لایههای کاملا متصل (Dense) میشه. برای مثال یک CNN برای شناسایی اعداد دستنویس (MNIST) ایجاد کردیم.
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
مدل بعد از ایجاد باید کامپایل شه و آموزش ببینه. این مرحله شامل تعیین optimizer، تابع هزینه و معیارهایی برای ارزیابی مدله.
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
mnist = tf.keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
train_images = train_images.reshape((60000, 28, 28, 1))
train_images, test_images = train_images / 255.0, test_images / 255.0
model.fit(train_images, train_labels, epochs=5)
بعد از آموزش، مدل با دادههای تست ارزیابی و برای پیشبینیهای جدید استفاده میشه.
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print('\nTest accuracy:', test_acc)
predictions = model.predict(test_images)
#Deep_Learning
#CNNs
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👌2❤1
کدوم تابع فعالساز معمولاً برای لایههای کانولوشن در CNN استفاده میشه؟
Anonymous Quiz
19%
Sigmoid
6%
Tanh
71%
ReLU
4%
Linear
😎7👍3❤1🤔1
#Deep_Learning
#CNNs
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👌2👍1👨💻1
شبکههای CNN از لایههای مختلفی تشکیل شدن که هر کدوم ویژگیهایی از دادههای ورودی رو استخراج میکنن.
این لایهها عبارتند از لایههای پیچشی (Convolutional Layers)، لایههای تجمعی (Pooling Layers) و لایههای کاملا متصل (Fully Connected Layers).
تعداد پارامترها در یک شبکه CNN تاثیر مستقیمی روی ظرفیت یادگیری و تعداد محاسبات لازم برای آموزش و اجرا دارن. برای محاسبه تعداد پارامترها در یک لایه پیچشی، میشه از فرمول زیر استفاده کرد:
برای مثال، اگه یک لایه کانولوشنی 32 فیلتر با ابعاد 3x3x3 داشته باشه، تعداد کل پارامترها به این صورت میشه: 32×(3×3×3+1)
این فرمول شامل وزنهای فیلترها و یک بایاس برای هر فیلتره. "+1" در فرمول نشوندهنده بایاس اضافه شده به هر فیلتره.
import torch
import torch.nn as nn
conv_layer = nn.Conv2d(in_channels=3, out_channels=32, kernel_size=3, stride=1, padding=1)
print(f"تعداد پارامترها: {sum(p.numel() for p in conv_layer.parameters() if p.requires_grad)}")
با پیشرفت در زمینه یادگیری عمیق، معماریهای پیچیدهتری مثل ResNet، Inception و DenseNet طراحی شدن که با استفاده از روشهایی مثل Skip Connections و ماژولهای پیچیده، دقت و کارایی شبکههای CNN رو بهبود بخشیدن.
#Deep_Learning
#CNNs
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👌6❤3👏2👍1👨💻1
❓کوییز شماره ۱۰۰: فرض کنید یک لایه کانولوشنی در یک شبکه CNN دارای فیلترهایی با اندازه 3x3 هست، تعداد کانالهای ورودی 3 (برای تصاویر RGB) و تعداد فیلترها 64 باشه. تعداد کل پارامترها در این لایه کانولوشنی چنده؟
Anonymous Quiz
25%
576
33%
1792
31%
1728
11%
640
❤4😎3🤔2👍1👌1
در لایههای کانولوشنی، اشتراکگذاری پارامتر (Parameter Sharing) به این معنی هست که یک فیلتر (یا کرنل) وزنهای یکسانی رو در همه موقعیتهایی که روی تصویر ورودی حرکت میکنه به کار میبره.
به جای داشتن وزنهای منحصر به فرد برای هر پیکسل یا منطقه از تصویر، یک مجموعه وزن (یعنی یک فیلتر) به صورت مکرر برای استخراج ویژگیهای محلی از ورودیهای مختلف استفاده میشه.
این رویکرد به شدت تعداد پارامترهای مورد نیاز رو کاهش میده و باعث میشه تا شبکه بتونه از دادههای آموزشی به شکل موثرتری یاد بگیره و همچنین مقاومت بیشتری در برابر بیشبرازش داشته باشه.
مزیت اشتراکگذاری پارامتر همچنین اجازه میده تا ویژگیهای استخراج شده توسط یک فیلتر، به مکان خاصی وابستگی نداشته باشن. یعنی ویژگیهای مشابه در نقاط مختلف تصویر توسط همون فیلتر شناسایی میشن.
#Deep_Learning
#CNNs
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👌1👨💻1