سلام.
لطفا تو متن سوال لینک به صفحات حاوی مطالبی که مطرح کردید بدید .
در مورد mlp
همه چیز در قابل یک بردار به شبکه ارائه میشه. شما میتونید یک تصویر رو کامل به شبکه بدید چیزی جلوی شما رو نمیگیره اما قطعا این قضیه کارایی مناسب رو برای شما به همراه نداره برای همین برای جلوگیری از مشکلات اینچنینی سعی بر این بود که ابتدا یک پیش پردازشی انجام شده و بجای تصویر ، برداری از ویژگی های مناسب کار به شبکه ارائه بشه.
در شبکه های کانولوشن هم شما میتونید قبل از اینکه تصویر رو به ورودی بدید خودتون هم کارهایی رو تصویر انجام بدید تا کارایی شما بهتر بشه. هرچند مثل Mlp
نیاز اساسی ای وجود نداره و بخاطر ماهیت شبکه کانولوشن مهندسی ویژگی بصورت خودکار انجام مبشه و نتایج خوبی دریافت میکنید اما میتونید مثلا با کمک یک autoencoder
به یک representation
مناسب از تصویر ورودی برسید و اون رو به شبکه بدید و ادامه کار.
در مورد مطلبی که آخر گفتید اون مساله در مورد شیوه پیاده سازی بهینه فاز forward pass
هست . برای اینکه بشه عملیات رو بصورت موازی و با سرعت و بهینگی هرچه تمام تر انجام داد از تکنیکی بنام Im2col
استفاده میکنن(روشها و تکنیک های دیگه هم برای انجام اینطور عملیاتها وجود داره) که همه عملیات ها بصورت برداری با سرعت بالا توسط کارت گرافیک انجام بشه. اگر این کارو نکنن و بصورت برداری (vectorized) انجام ندن باید با حلقه های for معمولی بصورت سریال (پشت سر هم ) پیکسل به پیکسل و...خروجی ها رو محاسبه کنن که خیلی زمان بر هست.
دقت کنید که برداری یعنی هر چیزی که در قالب بردار ارائه شده باشه . مثلا تو mlp شما میتونید کل تصویرتون رو در قالب یک بردار به شبکه ارائه کنید . همینطور میتونید بیایید یه مهندسی ویژگی انجام بدید و نتایج اون رو در قالب یک بردار ، (بنام بردار ویژگی!) به شبکه اتون بدید. بحث پیاده سازی برداری یا vectorized implementation ربطی به بردار ویژگی و مهندسی ویژگی و.... نداره صرفا اشاره به برداری کردن یک محاسبات داره .
مثلا شما فرض کنید یک معادله دارید بصورت
y = -40 + 5x
حالا فک کنید این معادله شما در اصل فرضیه شما برای حساب کردن(پیش بینی) قیمت منازل هست ! مقادیر x هم دارید که 100 هزار تایی میشن و فرض کنید زیر بنای خونه ها هستن. حالا شما بخوایید قیمت این 100 هزار آیتمی که دارید رو حساب کنید .
راه معمولیش اینه که از حلقه for استفاده کنید!
یک راه دیگه پیاده سازی برداری این معادله هست تا در یک لحظه برای همه ایتم ها محاسبه انجام بشه .
مثلا فرض کنید برای زیر بنای خونه این 4 تا مقدار رو داریم
250
350
100
75
حالا پیاده سازی برداری رو میشه اینطور انجام داد. من یک ماتریس بصورت زیر از ایتم ها میسازم و در یک برداری که از معادله مورد نظرم ساختم ضرب میکنم . به این شکل
1 250
1 350
1 100
1 75
یک ماتریس 4x2
شد .
حالا برای معادله بردارم میشه
-40 5
که ترانهاده اش کنیم میشه
-40
5
که یه ماتریس2x1
شده
حالا براحتی میشه یک ماتریس 4x2
رو در یک ماتریس 2x1
(بردار ترانهاده شده ) ضرب کرد . و همه درایه ها بصورت موازی در یک آن انجام میشن.