محمد جواد نجادی
محمد جواد نجادی
خواندن ۳۴ دقیقه·۹ ماه پیش

اربابان حلقه ! انگشترهای قدرت همان pre-trained model ها در هوش مصنوعی هستند!

# پارت2 : ما مدلهای پیشآموزش دیده مهم در زمینه تصویر (AlexNet ,VGG , GoogLeNet ,ResNet, MobileNet, MobileNetV2) را از ابتدا تا امروز بررسی و با هم مقایسه خواهیم کرد.

"نگاه او ابر، سایه، زمین و جسم را سوراخ میکند. آیا میدانی از چه میگویم، گاندالف؟

سارومان "

چشم سائورون همچنین به نام چشم بزرگ، چشم باراددور،
چشم سائورون همچنین به نام چشم بزرگ، چشم باراددور،


"در این مقاله از توصیف چشم بزرگ سائورون در فیلم ارباب حلقه برای نمایش "بینایی ماشین" استفاده کردم."

این مقاله در 3 پارت در مورد pre-trained model تکمیل خواهد شد که به شرح زیر است:

# پارت 1 : ما مهم ترین pre-trained model برای text, را از آغاز بررسی و مقایسه خواهیم کرد.

# پارت2 : ما مدلهای پیشآموزش دیده مهم در زمینه تصویر (AlexNet ,VGG , GoogLeNet ,ResNet, MobileNet, MobileNetV2) را از ابتدا تا امروز بررسی و با هم مقایسه خواهیم کرد.

# پارت 3 : پارت 3: می خواهیم مدل های پیش آموزش دیده و محیط های شبیه شازی که برای آموزش در رباتیک استفاده می شوند (Atari, OpenAI Gym2, MuJoCo, RoboCup, RoboCup Soccer, Humanoid-Gym) و همچنین با چالش های آنها بیشتر آشنا شویم.

در این سه گانه می خواهیم pre-trained model ها در سه پارت Text ,Image, Robotics بررسی کنیم و مختصری راجع به ایده و چگونگی پیدایش اونها صحبت کنیم و ببینیم که این مدل ها چطور کار می کنند؟ چه معماری دارند ؟ انواع مختلف اونها رو بررسی کنیم. پرقدرت ترین های اونها کدوم ها هستند؟ آیا راز بزرگ و نقطه قوت اصلی LLMs ها همین مدل های pre-trained model و Transformer ها هستند؟ اگر pre-trained model و Transformer نبود الان چت بات قدرتمندی مثل ChatGPTوجود داشت ؟ البته امروزه دیگه چت بات ها هم متفاوت شدن و فقط در حوزه ی NLP نیستند. امروزه می بینیم مثلا GPT-4 چند وجهی است چون که فقط محدود به تولید متن نیست. آیا کارکردی شبیه RL دارند؟ برای Robotics چه pre-trained model هایی داریم؟ برای مدل های Multimodal Models کدام ها بهترهستند ؟ آیا pre-trained model ها الان هم فقط برای NLP کاربرد دارن؟ در حوزه Image قدرتمند ترین مدل ها کدام ها هستند؟ برای استفاده از هر کدام از این مدلها چطور آنها را Fine-tuning کنیم یا Hyperparameter Tuning کنیم؟ با من در این 3 گانه همراه باشید تا با هم به این سوالات پاسخ دهیم.


مقدمه

در پارت 1 راجع به pre-trained model مهم که برای text مناسب هستند یاد گرفتیم و اهمیت بسیار بالای آن را فهمیدیم. در دنیای امروز کاربرد LLMs ها بر کسی پوشیده نیست و همانطور که می دانیم با معرفی GPT-3 و بعد از آن مخصوصا GPT-3.5 محبوبت LLMs ها به شدت افزایش پیدا کرد و بحث AI بیش از پیش مورد توجه قرار گرفت. دیدیم که چه pre-trained model هایی برای ساختن LLMs های قدرتمند وجود دارد. در پارت 2 می خواهیم راجع به مدل هایی که برای image مناسب هستند بیاموزیم. یکی از توانایی های مهم موجودات زنده و ما "دیدن" است.

شاید بتوان گفت که بخش زیادی از یادگیری ما با مشاده کردن انجام می شود. از بدو تولد دو راه اساسی برای یادگیری نوزاد و درک جهان پیرامونش وجود دارد. توانایی لمس کردن و دیدن. یادگیری نوزاد با دیدن هست. جمله بالا در فیلم “Lord of the Rings” مکالمه گاندولف خاکستری و سارومان در مورد یکی از ابزارهای مهم سائرون "چشم بزرگ" برای کنترل بود. "دیدن" با چشم و گوی جهان بین "Palantir” بود. در AI هم حوزه بینایی ماشین بسیار مهم است چرا که یکی از راه هایی که ماشین می تواند با دنیای اطراف ارتباط بگیرد قابلیت دیدن ماشین است.

همچنین می بینیم که این مدل ها دیگر از حالت فقط تولید متن خارج شده اند و قادر به تولید صدا و تصویر هم هست. حتی GPT-4 و gemini قادر به تشخیص تصاویر و آنالیز آنها نیز می باشند و مدلهای تولید کننده تصویر مثلDALLE , Midjourney و اخیرا هم مدل قدرتمتد ideogram. همچنین مدلهای تولید کنند ویدئو اخیرا Open AI مدل فوق قدرتمند Sora را معرفی کرده است. انقلابی بزرگ را ایجاد خواهد کرد در خلق دنیاهای دیگر. البته موضوع بحث ما در حال حاضر این مدل ها نیستند. در اینجا این مدل ها مطرح شدند تا اهمیت روزافزون آنها و تشخیص تصویر را بیشتر درک کنیم.

با یک سوال شروع می کنم. Train کردن یک مدل 1000 کلاسی تشخیص تصویر به غیر از معماری پیچیده ای که داره چقدر زمان و هزینه و سخت افزار نیاز داره؟ آیا این مدل را با کامپیوتر یا لب تاب شخصی می توان Train کرد؟ آیا به راحتی می توان به دقت قابل قبولی در آن دست یافت ؟ در این پارت می خواهیم ببینیم که pre-trained model مربوط به image چه زمانی مطرح شدند؟ در طول زمان که مقدار ERORR در آن ها کاهش یافته است با چه ایده هایی این کار انجام شده است. این مدل ها را با هم مقایسه کنیم که ماهیت آن ها را یاد بگیریم. با فهمیدن این نکته می توان متوجه شد که شاید در خیلی موارد بحث قوی ترین و ضعیف ترین مدل مطرح نیست بلکه استفاده از هر کدام از آنها به تسکی که می خواهیم انجام دهیم بستگی دارد. چرا که در بعضی مواقع مثلا ما می خواهیم تسکی را در تلفن همراه انجام دهیم قاعدتا مدل های سنگینی مثل Inception یا ResNet را نمی توانیم استفاده کنیم. برای اینکه بدانیم چه pre-trained model برای image وجود دارند و چطور مطرح شدند باید در ماشین زمان سفر کنیم! با من به این سفر هیجان انگیز ملحق شوید!

مدل AlexNet

در سال 2012 یکی از اولین مدلهای عمیق CNN به نام AlexNet معرفی شد و به عنوان یک لحظه تاریخی در تاریخ علم داده و یادگیری عمیق محسوب میشود. این مدل توسط Alex Krizhevsky، Ilya Sutskever و Geoffrey Hinton در مسابقه ImageNet Large Scale Visual Recognition Challenge (ILSVRC) با دقت بالایی برنده شد و نشان داد که شبکههای عمیق CNN قابلیت تشخیص تصاویر با دقت بالا را دارند.

https://papers.nips.cc/paper_files/paper/2012/hash/c399862d3b9d6b76c8436e924a68c45b-Abstract.html

مدل AlexNet شامل 8 لایه عصبی عمیق (پنج لایه کانولوشنی و سه لایه Fully Connected) است که از تکنیکهای مهمی مثل تابع فعالسازی ReLU به جای تابع sigmoid یا tanh استفاده کرد که باعث افزایش سرعت آموزش مدل شد. همچنین این مدل از تکنیک Dropout برای جلوگیری از Overfitting استفاده کرد.

مقایسه AlexNet VS LeNet

سمت چپ، میتوانید معماری LeNet را مشاهده کنید و در سمت راست، معماری AlexNet به عنوان مقایسه نمایش داده شده است. منبع
سمت چپ، میتوانید معماری LeNet را مشاهده کنید و در سمت راست، معماری AlexNet به عنوان مقایسه نمایش داده شده است. منبع


در تصویر سمت چپ بالا معماری LeNet را می بینید. مقداری با شبکه CNN ای که اولین بار توسط Yann LeCun در سال 1989 معرفی شد متفاوت است اما پایه و عملکرد آن همین است. این شبکه CNN برای تشخیص ارقام دستنویس در تصاویر مورد استفاده قرار گرفت و اولین شبکه از نوع خود بود که از لایههای کانولوشنال و لایههای ادغام برای استخراج ویژگیهای تصویر استفاده کرد. خوب به تصویر بالا دقت کنید.

معماری LeNet در مقایسه با AlexNet برای تصاویر کوچکتر (28x28x1) و 1 کاناله (خاکستری) طراحی شده است. در حالیکه در AlexNet ابعاد تصاویر 224×224×3 هم ابعاد تصاویر بزرگتر است و هم 3 کاناله هست. LeNet شامل 2 Convolutional layers با Kernel های 5x5 است و پس از آن لایه های average Pooling قرار دارند و AlexNet شامل 5 Convolutional layers با اندازههای مختلف Kernel، که پس از آن لایههای max Pooling قرار دارند انتخاب نوع Pooling به تناسب ویژگیهای مختلف تصاویر و مسائل مورد نظر شبکه است. در AlexNet استفاده از Max Pooling معمولاً باعث افزایش تشخیص ویژگیهای مهم تصویر میشود.

مدل LeNet از تابع فعالساز Sigmoid و AlexNet از ReLU در شبکه استفاده می کند چرا که ReLU برای شبکه های پیچیده تر و با عمق بیشتر مناسب تر است زیرا باعث افزایش سرعت آموزش و جلوگیری از Vanishing Gradient Problem میشود.

مدل LeNetشامل سه لایه چگال یا همان Fully connected layers با تعداد کمتری نورون است: 120، 84 و 10. و لایه اخر 10 نورون دارد چرا که برای ارقام دست نوشت 0-9 است و AlexNet هم داری 3 لایه چگال است که دو لایه هر کدام با 4096 نورون و یک لایه با 1000 نورون چون که 1000 کلاسی است. این تفاوت در تعداد نورونها به اندازهٔ ویژگیهای قابل تشخیص توسط هر شبکه و اندازهٔ دادههای ورودی (تصاویر) مربوط است. استفاده از تعداد نورون بیشتر در شبکههای عمیق مانند AlexNet میتواند به شبکه کمک کند تا ویژگیهای پیچیدهتر را تشخیص دهد.

نکته قابل توجه دیگر این است که به علت پیچیدگی مدل و جلوگیری از Overffiting در AlexNet ازتکنیک های جدید مانند Dropout استفاده شده است.در واقع AlexNet یکی از اولین شبکه های CNN است که از Dropout استفاده کرده است. در حالیکه در LeNet نیازی به استفاده از آن نیست و در زمانی که ارائه شد هنوز تکنیک Dropout مطرح نشده بود.

از آنجا که AlexNet یکی از اولین مدلهای عمیق CNN بوده است، نسبت به مدلهای بعدی که بررسی خواهیم کرد مانند VGG و ResNet، ممکن است برخی محدودیتها و ضعفها داشته باشد. که مهم ترین آنها کم عمق بودن این مدل است چرا که در زمان معرفی این مدل توانایی محاسباتی محدود بود و توانایی آموزش شبکههای عمیق با عمق بیشتر ممکن نبود. نکته بعدی استفاده از Dropout در AlexNet است که از یک جنبه میتواند باعث افزایش پایداری مدل شود، اما از جنبه دیگر ممکن است باعث از دست دادن اطلاعات مفید در فرآیند آموزش شود.

ساختار block

در ساختارهای CNN، block گروهی از لایههای مشابه و متوالی هستند که با هم ترکیب شدهاند. استفاده از بلوکها به معماری شبکه کمک میکند تا بهتر و موثرتر ویژگیها را استخراج کرده و از پیچیدگی مدل کاهش یابد.

در ساختار block ، پارامترها به طور محلی به اشتراک گذاشته می شوند، اشتراک پارامترها باعث کاهش تعداد کل پارامترهای مدل و در نتیجه کاهش پیچیدگی مدل و حافظه مصرفی شبکه میشود. یعنی اگر در یک block هر تعداد Convolutional layers وجود داشته باشد، پارامترهای مربوط به این لایه ها به صورت جداگانه برای هر لایه محاسبه نمیشوند؛ بلکه از یک مجموعه از پارامترها استفاده میکنند و چون پارامترها به طور محلی به اشتراک گذاشته میشوند، گرادیانها نسبت به آن ها محاسبه می شوند. به طور متوسط بر روی همه Convolutional layers ها اعمال می شوند، که این امر میتواند از محو شدن گرادیانها جلوگیری کند. همچنین اغلب در این block ها توابع فعالسازی غیرخطی مانند ReLU استفاده میشود. این توابع، با تبدیل ورودیهای مختلف به خروجیهای غیرخطی، میتوانند باعث شوکهای محلی در گرادیانها شوند که از محو شدن گرادیانها جلوگیری میکنند.

همچنین ویژگیهای مختلف تصویر به صورت hierarchical استخراج میشوند. لایه های پایین تر به دنبال ویژگیهای ساده مانند لبهها یا نقاط و مشخصههای محلی هستند، در حالی که لایههای بالاتر به دنبال ویژگیهای بیشتر و پیچیدهتر مانند الگوها، اشیاء، و نهایتاً کلاسهای مختلف تصویر هستند. این ویژگیها به صورت hierarchical و به عنوان ورودی به لایههای بعدی ارسال میشوند که این باعث افزایش قدرت و کارایی شبکه میشود. اگر این hierarchical structure وجود نداشته باشد و تمام ویژگیها به صورت parallel از تصویر استخراج شوند، ممکن است مدل قادر به تشخیص ویژگیهای پیچیدهتر و معنادارتر در تصاویر نباشد و دقت و کارایی مدل کاهش یابد. در مدلهایی که در قسمت های بعد خواهیم دید این ساختار block هستند که باعث می شوند ما بتوانیم به عمق بروم و شبکه های عصبی را عمیق و عمیق تر کنیم.

مدل VGG (Visual Geometry Group)

ساختار VGG شامل تعداد زیادی از block های تکراری است، درسال 2014 ایده استفاده از بلوک ها برای اولین بار در گروه هندسه بصری دانشگاه آکسفورد برای معماری (VGG) که از سری دیگری از شبکههای CNN هستند. در مقاله ای توسط Karen Simonyan and Andrew Zisserman مطرح شد.

https://arxiv.org/abs/1409.1556

مدل VGG دارای ساختار بلوک های تکراری است که بر اساس تکرار Convolutional layers و لایههای Pooling تشکیل شده است. این block ها به صورت پشت سرهم قرار گرفته و به تدریج اندازه تصویر را کوچکتر میکنند و ویژگیهای آن را استخراج میکنند. این ساختار معمولاً باعث افزایش قدرت و عمق شبکه میشود و به شبکه اجازه میدهد تا الگوها و ویژگیهای پیچیدهتری را در تصاویر شناسایی کند.

این مدل از ساختار ساده و قابل فهمی برخوردار است که از چندین Convolutional layers پشت سر هم تشکیل شده است که هر لایه دارای یک فیلتر کانولوشنی با ابعاد کوچک 3x3 و padding صفر استفاده میکند که باعث میشود که مدل دقت بالاتری در تشخیص ویژگیهای جزئی مانند لبهها داشته باشد.

در این تصویر می توان تفاوت بین معماری VGG16 لایه و VGG19 لایه را ببینیم. منبع
در این تصویر می توان تفاوت بین معماری VGG16 لایه و VGG19 لایه را ببینیم. منبع


همانطور که گفتیم ساختار VGG بر اساس تکرار لایههاست؛ در تصویر بالا به خوبی ساختار لایه ها و block ها را می توان مشاهده کرد که با رنگ های مختلف به خوبی نشان داده شده است. یعنی VGG تعداد زیادی لایه کانولوشنی و لایههای Pooling تشکیل شده است که به ترتیب اعمال میشوند. این لایهها به صورت متناوب به همراه یکدیگر تکرار میشوند، که باعث می شود شبکه ویژگیهای پیچیدهتری از تصاویر را استخراج کند. به عنوان مثال، شبکههای VGG-16 و VGG-19 از 16 و 19 Convolutional layers به همراه لایههای Pooling تشکیل شدهاند.

ضعف های VGG

در معماری VGG از فیلترهای کانولوشنی 3x3 در سراسر شبکه استفاده شده است. این فیلترها یک نقطه در تصویر را با توجه به نقاط اطراف آن تبدیل میکنند. به عبارت دیگر، هر feature map توسط یک لایه کانولوشنی با اندازه 33 x تولید میشود و به لایه بعدی ارسال میشود. این فرآیند تکراری است و در نتیجه اطلاعات مشابهی به صورت مکرر در کل شبکه تکرار میشوند که میتواند منجر به تکرار بیش از حد اطلاعات بین feature map ها و در نتیجه افزایش خطر Overffiting شود. یعنی بخشهایی از تصویر که در لایههای پیشین استخراج شدهاند، مجدداً در لایههای بعدی استخراج شوند. این فرایند می تواند باعث مصرف حافظه اضافی و محاسبات تکراری درشبکه و کاهش کارایی و سرعت آموزش و اجرا شود. در نتیجه به طور مثال نمی توان از این مدل برای برنامه های تلفن همراه استفاده کرد. برای جلوگیری از overfitting در شبکههای عصبی، معمولاً از روشهایی مانند dropout، regularization، و data augmentation استفاده میشود. این روشها به کنترل تعمیم پذیری مدل کمک میکنند و از ایجاد تطبیق غیرمناسب با دادههای آموزشی جلوگیری میکنند.

تفاوتهای اصلی بین VGG و AlexNet در تعداد لایهها و ساختار block ها در VGG است. به علاوه، VGG از فیلترهای کانولوشنی با ابعاد کوچکتر استفاده میکند که این امر باعث میشود که ویژگیهای جزئیتر و دقیقتری را تشخیص دهد. و از همه مهم تر با ساختار VGG می توانیم به عمق بیشتری نفوذ کنیم. با من همراه باشید عمق بیشتر در انتظار ما هست. We need to go deeper!

مدل Inception (GoogLeNet)

تصویر معماری Inception که در مقاله اصلی آورده شده است منبع
تصویر معماری Inception که در مقاله اصلی آورده شده است منبع


مدل Inception، که معمولاً با اسم GoogLeNet نیز شناخته میشود، توسط تیم Google Research در سال 2014 معرفی شد.

https://arxiv.org/abs/1409.4842

این مدل یکی از معروفترین و پیچیدهترین مدلهای عمیق CNN است که برای تشخیص تصاویر استفاده میشود. ساختار اصلی مدل Inception بر اساس مفهوم " Inception block" است. که معمولاً شامل چندین شاخه موازی از عملیات کانولوشن با اندازهها و pooling مختلف است. سپس این شاخهها در امتداد بُعد کانال به یکدیگر متصل میشوند تا خروجی بلوک را تشکیل دهند. اصطلاح بُعد کانال تعداد ویژگیهای استخراج شده در یک لایه کانولوشنی است. به عبارت دیگر، مدل Inception با ترکیب کردن ویژگیهایی از شاخههای مختلف Inception block یک ویژگی کلی و جامعتر از تصویر را تولید میکند. اندازه بُعد کانال به ورودیها و خروجیهای لایهها اشاره دارد. هر لایه در مدل Inception میتواند یک تعداد از فیلترهای کانولوشن را اعمال کند و به عنوان خروجی، یک مجموعه از ویژگیهای نمایش داده شده توسط این فیلترها را ارائه دهد. به عنوان مثال، اگر یک لایه از مدل Inception ورودیهایی با ابعاد 128x32x32 داشته باشد، بُعد کانال در اینجا برابر با 128 خواهد بود.

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

ساختار Inception block

مدل GoogleNet، Inception module دو ورژن مختلف دارد:

تصویر  ورژن  ساده  بلوک اینسپشن که در مقاله اصلی آوردده شده است. منبع
تصویر ورژن ساده بلوک اینسپشن که در مقاله اصلی آوردده شده است. منبع


تصویر بالا یک Inception block ورژن "naïve" را نشان می دهد که شامل چندین عملکرد پردازش تصویر موازی است. درساختار آن از Convolutional Filters با اندازه های مختلف استفاده شده است. همانطور که می دانیم شبکه های عصبی از نظر محاسباتی گران هستند. در این معماری از یک 1x 1 Convolutional قبل از Convolutional 3x3 و 5x5 استفاده شده است. تا از نظر محاسباتی ارزان تر شود. اما این روش معایبی دارد چرا که با زیاد شدن عمق شبکه پیچیدگی و تعداد پارامترها بسیار افزایش می یابد و با این معماری ممکن است مدل به مشکل overfitting دچار شود. همچنین ورژن "naïve" از Max pooling 3x3 که به اندازهگیری ویژگیهای مهم در نواحی مختلف تصویر کمک میکند و که یک روش ساده و موثر برای feature map (height and width) است که باعث می شود تعداد پارامترهای قابل آموزش در شبکه کاهش یابد. این کار می تواند به کاهش مشکل مهم overfitting هم کمک کند. البته به شرایط خاص معماری شبکه، نوع داده و مسئله مورد نظر بستگی دارد. بخاطر این مشکلات معماری دیگری که در شکل زیر می بینید برای Inception block پیشنهاد داده شد که معمولا از آن استفاده می شود.

مدل بعدی Inception module with dimension reductions است که در تصویر زیر می بینید خوب به تصویر دقت کنید:

تصویر  ورژن  2 یا کاهش ابعاد  بلوک اینسپشن که در مقاله اصلی آوردده شده است. منبع
تصویر ورژن 2 یا کاهش ابعاد بلوک اینسپشن که در مقاله اصلی آوردده شده است. منبع


این نسخه از Inception module از مکانیزمهای dimension reductions برای کاهش پیچیدگی محاسباتی و تعداد پارامترها استفاده میکند. برای این کار در معماری آن از convolution 1x1 استفاده شده است. ترتیب اعمال convolution های 1x1، 3x3، 5x5 بر اساس تنظیمات مدل و تنظیمات مسئله است. اما به طور کلی، ابتدا از کانولوشن 1x1استفاده میشود. این رویکرد علاوه بر ویژگی های بالا به مدل امکان میدهد تا اطلاعات را از کانالهای مختلف جمع آوری و ترکیب کند که این امر میتواند به افزایش قدرت توانایی نمایشی مدل کمک کند. سپس از کانولوشنهای 3x3، 5x5 برای feature extraction های پیچیدهتر استفاده میشود. همچنین بعد از عملیات Max Pooling هم از convolution 1x1 استفاده میشود. این convolution 1x1 به عنوان یکی از ابزارهایی است که برای کاهش ابعاد فضایی ویژگیها و کاهش تعداد پارامترها که میتواند در کاهش بار محاسباتی و پیچیدگی مدل و در نتیجه جلوگیری از overfitting موثر باشد.

تفاوت اصلی بین Vs Inception VGG ، AlexNet

تفاوت اصلی بین Inception و مدلهای معروف VGG، AlexNet در ساختار و معماری آنهاست. Inception از Inception block بهره میبرد که ترکیبی از عملیاتهای کانولوشن با اندازهها و پنجرههای مختلف است. VGG، AlexNet هر کدام از ساختارهای خود با ترکیبهای مختلفی از لایههای کانولوشنی و Pooling ساخته شدهاند. Inception به عنوان یک مدل عمیق شناخته میشود و VGG و AlexNet نیز دارای عمق متوسطی هستند. به دلیل پیچیدگی بالای مدل Inception، نیاز به منابع محاسباتی بیشتری نسبت به مدلهای VGG و AlexNet دارد. با این حال، انتخاب بین این مدلها به میزان دقت مورد نظر و میزان منابع محاسباتی موجود بستگی دارد. در قسمت بعد به عمق بیشتر می رویم آماده ای ؟!

مدل ResNet (Residual Network)

قبل از ارئه مقاله ResNet مقاله ای توسط Kaiming He منتشر شد. در این مقاله مطرح شد که لزوما بیشتر شدن لایه ها و رفتن به عمق باعث بهبود عملکرد مدل نخواهد شد. چرا که نتایج به دست آمده در عمق بیشتر نشان می دهد با افزایش لایه ها احتمال overfitting بیشتر می شود چرا که مدل ممکن است سریعتر بتواند دادههای آموزشی را حفظ کند.

مدل ResNet (Residual Network) نیز یک شبکه CNN است. مقاله اصلی معماری ResNet با عنوان "Deep Residual Learning for Image Recognition" توسط Kaiming He، Xiangyu Zhang، Shaoqing Ren، و Jian Sun در سال 2015 منتشر شد. این مقاله در کنفرانس CVPR (Conference on Computer Vision and Pattern Recognition) در سال 2016 ارائه شد.

https://arxiv.org/abs/1512.03385

بعد از این مقاله بود که ResNet مطرح شد که با وجود رفتن به لایه های عمیق تر مشکل overfitting را با ساختارهایی به نام Residual Blocks حل می کند. به طور معمول، یک Residual Blocks دارای دو لایه عمیق CNN است. در هر Residual Blocks، به جای اضافه کردن لایههای جدید از shortcut connections skip connection or استفاده میکند که اطلاعات را از لایههای پایینتر به صورت مستقیم به لایههای بالاتر انتقال میدهد. ورودی به شبکه (مثلاً نقطه ورودی) با یک مسیر مستقیم به نام Identity Path به خروجی لایه اضافه شده است. این shortcut connections مانع از دست رفتن اطلاعات در طول عمق شبکه میشوند و باعث میشوند که گرادیانها به طور موثرتری از لایه به لایه منتقل شوند. این بهبود در انتقال گرادیانها باعث میشود که آموزش شبکه به طور پایدارتر و با دقت بیشتری انجام شود. سپس این مسیر مستقیم با خروجی لایه اضافه شده وارد یک عملیات غیرخطی (مثلاً فعالسازی ReLU) میشود.

بیایید ساختار آن را ببینیم.

تصویر بالا بخشی از یک شبکه باقیمانده را نشان می دهد و تصویر زیر آن به وضوح بلوک های باقیمانده را نشان می دهد.  منبع
تصویر بالا بخشی از یک شبکه باقیمانده را نشان می دهد و تصویر زیر آن به وضوح بلوک های باقیمانده را نشان می دهد. منبع


در شبکههای عمیق با زیاد تر شدن عمق، به دلیل تعداد زیاد لایه ها و پارامترها vanishing gradients problem رخ می دهد. استفاده از Residual Blocks در ResNet باعث میشود که شبکه به راحتی قادر به آموزش مدلهای با عمق بالا باشد، و vanishing gradients problem را در طول عمق شبکه کاهش می دهد. اساسا vanishing gradients problem در هنگام آموزش مدل به دلیل ناپایداری گرادیانها در فرآیند backpropagation رخ میدهد. در فرآیند backpropagation برای محاسبه gradients و بروزرسانی وزن ها مشتق گیری از تابع هدف (معمولاً تابع خطا) نسبت به وزنها انجام می گیرد که باعث می شود در طول این فرآیند گرادیانهای مرتبط با لایههای پایینتر شبکه به طور قابل ملاحظهای کاهش یابند، به طوری که تقریبا به صفر میرسند. در نتیجه ممکن است اطلاعات مهم درلایههای پایینتر به مقدار خیلی زیاد کاهش یا حتی به صورت کامل از بین برود. از جمله روشهایی که برای حل مشکل گرادیان استفاده از ساختارهای خاصی مانند Residual Blocks و Batch Normalization. که به مراتب پایداری و یادگیری موثرتری در شبکههای عمیق کمک میکنند.

از اصلی ترین تفاوت های ResNet با Inception استفاده از Residual Blocks است که باعث می شود. ResNet بتواند به لایه های عمیق تر نیز برود. در نتیجه برای تسک هایی که نیاز به عمق بالا دارند ResNet از Inception بهتر عمل می کند. اما در مواردی که منابع یا زمان آموزش محدود است، Inception به عنوان یک گزینه سادهتر و کارآمد ممکن است مورد استفاده قرار بگیرد.

مدل MobileNet

مدل MobileNet نوعی از شبکههای عصبی کانولوشنی عمیق است که برای دستگاهها و برنامههای تلفن همراه با منابع محاسباتی محدود طراحی شده است. این مدل برای اولین بار در سال 2017 توسط Andrew G. Howard and Diego F. G. S در مقال

https://arxiv.org/abs/1704.04861

مدل MobileNet به دلیل استفاده از تکنیکهای پیشرفته مانند Depthwise Separable Convolution به شهرت رسیده است. این تکنیک امکان میدهد که مدل MobileNet در حالی که تعداد پارامترها و بار محاسباتی را کاهش میدهد، سطوح دقتی قابل مقایسه با مدلهای عمیقتر را برآورده کند. به عبارت دیگر، MobileNet یک گزینه مناسب برای دستگاهها و برنامههای تلفن همراه با منابع محدود است. مرحله اول Convolution Depthwise در این مرحله، هر کانال ورودی به صورت جداگانه با یک فیلتر کانولوشنی پردازش میشود.

شما میتوانید معماری کلی MobileNet را ببینید. (A) معماری کلی MobileNet و (B) توضیحات دقیق در مورد لایه DS (Depthwise convolution). منبع
شما میتوانید معماری کلی MobileNet را ببینید. (A) معماری کلی MobileNet و (B) توضیحات دقیق در مورد لایه DS (Depthwise convolution). منبع


مرحله Depthwise Convolution هر کانال ورودی را به صورت جداگانه با استفاده از فیلتر depthwise convolution پردازش میکند. در مرحله Pointwise Convolution، ویژگیهای استخراج شده از مرحله قبل با استفاده از فیلتر Convolutions 1x1 ترکیب میشوند. این دو مرحله با هم کار میکنند تا تعداد پارامترها و اندازه کلی مدل را کاهش دهند. MobileNetV2 نسخه بهبود یافتهی MobileNet است که بهبودهای قابل توجهی در عملکرد و دقت نشان داده است. این بهبودها با افزایش تعداد پارامترها در مدل به دست آمدهاند.

مدل MobileNetV2

مدل MobileNetV2 در سال 2018 در کنفرانس CVPR (Computer Vision and Pattern Recognition) ارائه شد. اما نسخه نهایی و اصلاح شده آن در سال 2019 منتشر شد.

https://arxiv.org/abs/1801.04381

مدل MobileNetV2 برای برنامهها و پروژههایی که نیاز به تشخیص تصویر یا طبقهبندی شی در دستگاههای تلفن همراه دارند، محبوب شده است. این شامل block های جدیدی مانند Inverted Residuals است که با الهام از ایده Residual Blocks در ResNet، اما با تفاوت های مهم. در MobileNetV2، دو نوع block وجود دارد. یکی از آنها بلوک باقیمانده با stride 1 است و دیگری block با stride 2 برای کوچک کردن اندازه است. "Stride" به معنای گام میباشد و به تعداد پیکسلهایی اشاره دارد که فیلتر بلوک در هر گام از تصویر حرکت میکند. تصویر زیر را ببینید. https://arxiv.org/abs/1801.04381

این تصویر تفاوت بین هر دو نوع بلوک را به صورت کاملا واضح نشان می دهد و از مقاله اصلی MobileNetV2 گرفته شده است. منبع
این تصویر تفاوت بین هر دو نوع بلوک را به صورت کاملا واضح نشان می دهد و از مقاله اصلی MobileNetV2 گرفته شده است. منبع


هر دو نوع بلوک در MobileNetV2 دارای سه لایه هستند. لایه اول یک کانولوشن 1×1 با تابع فعال سازی ReLU6 است. ReLU 6 یک نوع تابع فعالسازی ReLU است که مقادیر منفی را به صفر تبدیل میکند مقدار 6 برای حداکثر خروجی مناسب در نظر گرفته می شود. این تضمین می کند که مقادیر خروجی در محدوده بهینه قرار می گیرند و از مسائل انفجار گرادیان جلوگیری می کند. استفاده از ReLU 6 در MobileNetV2 مقادیر خروجی را بین صفر تا شش محدود می کند و از هرگونه مقدار منفی جلوگیری می کند.

برای مدلهایی که برای موبایلها طراحی میشوند، حجم محاسباتی بسیار مهم است. اما استفاده از ReLU 6 به جای ReLU تنها برای کاهش حجم محاسباتی موثر نیست. استفاده از ReLU 6 به کاهش تعداد پارامترها در مدل و در نتیجه کاهش حجم و حافظه مورد نیاز برای آموزش و اجرا میشود که به معنی افزایش سرعت اجرای مدل است. این موضوع میتواند به عمر باتری دستگاه کمک کند و همچنین به افزایش بازده انرژی مدل منجر شود. در شکل زیر تفاوت ReLU 6 و ReLU را مشاهده می کنید.

نمودار مقایسه ReLU با ReLU 6 که با کد پایتون توسط من رسم شده است.
نمودار مقایسه ReLU با ReLU 6 که با کد پایتون توسط من رسم شده است.


البته در بعضی موارد که مقادیر خروجیها از 6 بیشتر هستند محدودیت ReLU 6 ممکن است باعث از دست رفتن اطلاعات مفید شود که ممکن است باعث پایین آمدن دقت به ویژه در مدلهایی که از توابع فعالسازی غیرخطی استفاده میکنند. به طور کلی، استفاده از ReLU 6 به جای ReLU میتواند مزایا و معایب خاص خود را داشته باشد و بسته به نوع داده، مسئله مورد نظر و محدودیتهای موجود، ممکن است این تغییرات برای مدل مورد نظر مفید یا مضر باشد.

زمانی که ما از یک block با stride 1 استفاده میکنیم، اندازه تصویر خروجی با اندازه تصویر ورودی برابر است. اما هنگامی که از یک بلوک با 2 stride استفاده میکنیم، اندازه تصویر خروجی نصف اندازه تصویر ورودی میشود. به عبارت دیگر، با 2 stride ، فیلتر در هر مرحله دو پیکسل جلوتر حرکت میکند و این باعث کوچک شدن اندازه تصویر میشود. این بلوک ها امکان مدیریت کارآمد منابع محدود دستگاه تلفن همراه را در عین حفظ دقت قابل قبول در تشخیص فراهم می کنند. در نتیجه MobileNetV2 به عنوان یک انتخاب اصلی در این زمینه شناخته می شود.

تفاوت Residual Block و Inverted Residuals

همانطور که بالا در مدل ResNet دیدیم. در Residual Block ورودی لایه اولیه با استفاده از یک مسیر مستقیم و از یک مسیر جانبی (Shortcut Connection) برای اضافه کردن ورودی به خروجی لایههای عمیقتر استفاده می کند. اما در Inverted Residuals معماری Residual Block به گونهای تغییر کرده است.

این تصویر در مقاله MobileNetV2 قرار داده شده است زیرا توضیحات بسیار مفصلی را ارائه میدهد. این تصویر همراه با توضیحاتی است که تفاوتها بین بلوکهای باقیمانده و بلوکهای باقیمانده معکوس را به خوبی نشان میدهد. منبع
این تصویر در مقاله MobileNetV2 قرار داده شده است زیرا توضیحات بسیار مفصلی را ارائه میدهد. این تصویر همراه با توضیحاتی است که تفاوتها بین بلوکهای باقیمانده و بلوکهای باقیمانده معکوس را به خوبی نشان میدهد. منبع


ورودی لایه اولیه از یک Operation Layer اولیه سبکتر بر روی ورودی برای اعمال تغییرات اولیه و تشخیص ویژگیهای سادهتر استفاده میشود. اصطلاح Operation Layer به طور کلی به هر لایهای از شبکههای عصبی که عملیات یا Processing هایی مثل کانولوشن، فعالسازی، نرمالسازی و غیره... روی ورودی انجام می دهند گفته می شود. به همین دلیل به آن Processing Layer هم گفته می شود.

استفاده از یک لایه عمیقتر به عنوان Operation Layer در معماری Inverted Residuals موجب افزایش ابعاد ویژگیها (Increasing feature dimensions) میشود چون که در عمق بیشتر معمولاً ویژگیهای پیچیدهتر و سطح بالاتری از اطلاعات را استخراج میکنند. سپس برای Dimensionality Reduction و ایجاد انعطافپذیری در شبکه، از یک Operation Layer دیگر که معمولاً شامل یک Conv 1x1 استفاده میشود. پس در معماری Inverted Residuals ابتدا از یک لایه سبکتر (نسبت به لایههای عمیقتر در مرکز) برای اعمال تغییرات اولیه استفاده میشود و سپس از لایههای عمیقتر برای انجام تغییرات پیچیدهتر. در نتیجه با استفاده از لایههای عمیقتر به عنوان لایههای اصلی عملیاتی، میتوانیم ویژگیهای پیچیدهتری از دادههای ورودی استخراج کنیم که این میتواند به بهبود عملکرد و دقت شبکههای عصبی کمک کند.

امروزه، مدلهای مبتنی بر شبکههای عصبی عمیق مختلفی برای تشخیص تصاویر وجود دارند که از جمله آنها میتوان به EfficientNet، DenseNet، و NASNet اشاره کرد. برای استفاده از این مدلها، شما میتوانید از کتابخانههای محبوبی مانند TensorFlow یا PyTorch استفاده کنید که مدلهای پیشآموزش دیده از این دسترسی پشتیبانی میکنند و شما میتوانید آنها را با دادههای خود آموزش دهید یا از آنها برای وظایف تشخیص تصاویر استفاده کنید.


مدلهای pre-trained در TensorFlow & PyTorch

مدلهای pre-trained که در بالا مرور کردیم مهم ترین مدل های در حوزه image بودند که اون ها رو با استفاده ازکتابخانه های TensorFlow یا PyTorch در Python می توانیم بارگیری کنیم. به عنوان مثال، در TensorFlow، شما میتوانید از کلاس `tf.keras.applications` برای بارگذاری مدلهای pre-trained استفاده کنید. به کد زیر که از سایت keras.io گرفته شده است دقت کنید.

from keras.applications import MobileNet
model = MobileNet(
input_shape=None,
alpha=1.0,
depth_multiplier=1,
dropout=0.001,
include_top=True,
weights=&quotimagenet&quot,
input_tensor=None,
pooling=None,
classes=1000,
classifier_activation=&quotsoftmax&quot,
)

پارامتر هایی که در کد بالا می بینید قابل تنظیم هستند و برای hyperparameter tuning کاربرد دارند. با استفاده از این کد می توانیم pre-trained model های حوزه Image را فقط با جایگزینی نام آن ها بعد از import صدا بزنیم.

در PyTorch نیز میتوانید از کلاسهای `torchvision.models` برای بارگذاری مدلهای pre-trained استفاده کنید. کد زیر را ببینید.

import torch
import torchvision.models as models
# Load the pre-trained ResNet model
model = models.resnet50(pretrained=True)
# Display the architecture of the model
print(model)

با استفاده از این کد میتوانیم همه pre-trained model های برای حوزه Image را فراخوانی کنیم به غیر از MobileNet. در کتابخانه torchvision مدل MobileNet موجود نیست. اما میتوانید از کتابخانههای دیگری مانند PyTorch Hub یا از سایر منابع خارجی استفاده کنید تا مدل MobileNet را برای استفاده در PyTorchبارگذاری کنید. کد زیر را ببینید:

import torch
model = torch.hub.load('pytorch/vision:v0.10.0', 'mobilenet_v2', pretrained=True)
model.eval()

با استفاده از این کد میتوانیم MobileNet را فراخوانیم کنیم و از آن استفاده کنیم.

چطور می تونیم یک pre-trained model برای image رو Fine-tuningکنیم ؟

همانطور که در پارت 1 برای pre-trained model های Text عملیات Fine-tuning را انجام دادیم . برای pre-trained model های image هم می توانیم این کار را انجام دهیم . در کد های بالا دیدیم که در TensorFlow یا PyTorch چطور می توانیم مدل را فراخوانی و برای تسک خاصی به صورت دقیق Fine-tuning کنیم. اولین مرحله، انتخاب pre-trained model مناسب برای تسک مورد نظرمان است. سپس می توانیم مدل را ترکیب کنیم به طور مثال برخی لایه ها را حذف یا اضافه کنیم. به کلیت انجام این کار Fine-tuning کردن گفته میشود. ما باید داده های آموزشی خود را لیبل گذاری کنیم. همچنین باید داده های ما به اندازه کافی بزرگ باشند چرا که می دانیم شبکه های عصبی عمق در واقع Data hungry هستند.

تنظیم دقیق لایه های بازگشتی

اگر مدل ما شامل لایههای بازگشتی باشد، نیاز به Fine-tuning این لایهها نیز داریم. مثلا LSTM (Long Short-Term Memory) که برای پردازش دنبالههای زمانی مانند متون و تصاویر و همچنین شرح تصاویر با تولید متن یا تشخیص اجزای مختلف تصاویر، کاربرد دارد را Fine-tuning کنیم. مدل BiLSTM (Bidirectional LSTM) یک توسعه از LSTM است. در واقع، BiLSTM همان کارهای LSTM را انجام میدهد اما با این تفاوت که اطلاعات را به دو جهت زمانی مختلف مورد بررسی قرار میدهد. این ویژگی BiLSTM را قادر میسازد تا اطلاعاتی را که در زمان قبل و بعد از یک نقطه مشخص در داده ورودی موجود است در نظر بگیرد، که میتواند برای وظایفی مانند پیشبینی متوالیهای زمانی و یا درک دنبالههای زمانی مفید باشد.

مدل GRU (Gated Recurrent Unit) یک نوع دیگر از شبکههای بازگشتی است که مشابه LSTM عمل میکند اما ساختار کمی سادهتری دارد. GRU همچنین برای وظایف مشابه LSTM مورد استفاده قرار میگیرد. همچنین مدل CNN-LSTM Model این مدلها شبکههای عصبی کانولوشنالی (CNN) را با شبکههای بازگشتی مانند LSTM یا GRU ترکیب میکنند. این ترکیب معمولاً برای تسکی مانند تولید شرح برای تصاویر که یک تسک مهم در حوزه پردازش زبان طبیعی و بینایی کامپیوتر است. در این وظیفه، مدل سعی میکند بر اساس تصویر ورودی، یک جمله یا توالی از کلماتی را تولید کند که شرحی کامل و دقیق از محتوای تصویر ارائه دهد. به عنوان مثال، فرض کنید یک تصویر از یک سگ در حیاط را دارید. وظیفه مدل تولید جملاتی است که ویژگیهای مهم تصویری را توصیف کند، مثلا نوع سگ، موقعیت آن در حیاط. اینها تنها چند مثال از مدلهایی هستند که شامل لایههای بازگشتی هستند و برای پردازش تصاویر استفاده میشوند. بعد از تنظیم مدل، میتوانیم با استفاده از دادههای آموزشی که در اختیار داریم مدل را آموزش دهیم. در قسمت بعد تفاوت ها و مزیت های آموزش مدل از ابتدا یا به وسیله pre-trained model را خواهیم آموخت. با من همراه باشید.

آموزش از ابتدا یا آموزش با Fine-tuning

فرآیند Fine-tuning در مقایسه با آموزش مدل از ابتدا تفاوتهایی دارد. برخی از این تفاوتها عبارتند از:

در Fine-tuning، ما از یک pre-trained model که بر روی یک مجموعه داده بزرگ مانند ImageNet آموزش دیده است و این مدل قبل از Fine-tuning توسط ما دارای وزنها و پارامترهایی است که به طور مستقل از دادههای آموزشی که ما در اختیار داریم آموزش دیده است. ما با Fine-tuning، وزنها و پارامترهای pre-trained model را با دادههای آموزشی خودمان تنظیم میکنیم. به جای اینکه از ابتدا شروع کنیم و وزنها را به صورت تصادفی مقداردهی کنیم، از وزنهای قبلی مدل استفاده میکنیم و آنها را به طور تدریجی با توجه به دادههای آموزشی خودمان تنظیم می کنیم.

معمولاً در Fine-tuning از Learning rate کوچکتری نسبت به آموزش از ابتدا استفاده می کنیم. چون که میخواهیم تغییراتی کوچکتر را در پارامترها اعمال کنیم تا وزنهای pre-trained را به طور تدریجی با دادههای جدید تطبیق دهیم. همچنین تعداد epoch ممکن است نسبت به آموزش از ابتدا کمتر باشد. این به این معنی است که ممکن است نیازی به تعداد زیادی از epoch نباشد. چون که pre-trained model ویژگیهای کلیدی را از دادههای پیشین یاد گرفته است. بنابراین، با تنظیم وزنها و پارامترهای مدل، ممکن است تنها چند epoch کافی باشد تا مدل به دادههای جدید تطبیق پیدا کند و عملکرد مناسبی داشته باشد.

چرا منجمد می کنیم ؟

در Fine-tuning، معمولاً لایههای بالاتر شبکه که بیشتر وظایف خاص را انجام می دهند و ممکن است نیاز به تنظیم مجدد آنها روی دیتاست آموزشی ما برای انجام تسک های جدید داشته باشند. بنابراین، در فرآیند Fine-tuning، معمولاً فقط وزنهای لایههای بالاتر بهروزرسانی میشوند و لایههای پایینی را Freez میکنیم. یعنی وزن های آنها را تغییر نمی دهیم. می دانیم که در لایههای پایینی شبکه های CNN اغلب ویژگی های ساده و اولیه تصاویر مانند لبه ها بافت ها و غیره را از طریق فیلترهای کانولوشنالی در لایههای اولیه شبکه از تصاویر استخراج میشوند. با Freez کردن لایه های آخر در فرآیند Fine-tuning مطمئن می شویم که وزنهای آنها ثابت میمانند، با این کار به مدل این امکان را میدهیم که با حفظ دانش ارزشمند یادگرفته شده در مرحله pre-trained بتواند به مشکلات و ویژگیهای خاص مجموعه داده یا وظیفه جدید پاسخ دهد. این کمک میکند تا ویژگیهای اولیه از دادههای pre-trained را حفظ کنیم. به خصوص اگر دیتا ست آموزشی ما نسبتاً کوچک باشد یا تسکی که می خواهیم انجام دهیم نسبتاً شبیه تسکی باشد که مدل اصلی بر روی آن آموزش دیده شده است.

ارزیابی مدل به روش Fine-tuning

مرحله ارزیابی در مدلهای pre-trained مانند زمانی است که ما مدل را از ابتدا خودمان آموزش می دهیمو میتوانیم تمام آن مراحل را انجام دهیم. از جمله ارزیابی دقت (accuracy)، ماتریس درهمریختگی (confusion matrix)، معیارهای ارزیابی دقت مانند Precision، Recall، و F1-score. تفاوتی که در اینجا با هم دارند این است که در مدلهای pre-trained اغلب قبل از Fine-tuning بر روی مجموعه دادههای بزرگی (مانند ImageNet) آموزش داده شدهاند و از اطلاعات و ویژگیهای عمومی برای شناخت الگوها در تصاویر بهرهمیبرند.

بنابراین، ارزیابی این مدلها باید به گونهای باشد که اطمینان حاصل شود که مدل قادر به استفاده از اطلاعاتی که از پیشآموزش یافته است، در مسئله مورد نظرتان استفاده میشود و عملکرد مناسبی را ارائه میدهد.

در ارزیابی با داده های جدید یعنی داده هایی که مدل تا به حال ندیده است. مثلا برای ارزیابی مدل تصویر سگی را از اینترنت دانلود می کنیم. قبل از دادن تصویر به مدل باید مراحل پردازش و سایز و تعداد کانالها و سایر ویژگیهای تصاویر به گونهای باشند که با ویژگیهای تصاویری که مدل در طول آموزش اولیه دیده است، سازگار باشند. یعنی، اگر مدل روی تصاویر با ابعاد ویژگی 224x224 و با سه کانال آموزش داده شده است، تصویر را باید نرمال سازی کنیم. یعنی باید همان ابعاد و ویژگیها را داشته باشند تا مدل بتواند به درستی پاسخ دهد.

به طور کلی، هدف از استفاده از مدلهای pre-trained در Fine-tuning این است که مدل از اطلاعات و ویژگیهایی که از پیشآموزش دیده مدلی که روی داده های بزرگ با دقت بالا آموزش دیده است، در وظیفه مورد نظر بهره ببرد و عملکرد بهتری نسبت به آموزش مدل از ابتدا داشته باشد.


نتیجه گیری پارت 2

در پارت 2 راجع به مهم ترین pre-trained model های حوزه image تقریبا به صورت کامل آموختیم و معماری و ویژگی های هر کدام را بررسی کردیم. در واقع می توان گفت که ویژگی مهم تر استفاده از pre-trained model علاوه بر مواردی که در مقاله بحث کردیم بالا رفتن سرعت آموزش و تولید مدل های جدید برای تسک های جدید است. چرا که می توان از این مدل ها به صورت ترکیبی هم استفاده کرد. در آغاز مقاله راجع به دیدن و اهمیت بسیار بالای آن بحث کردیم. یکی از حوزه های بسیار مهم و اساسی در AI بینایی ماشین است که علاوه بر کاربرد های خیلی وسیعی که دارد یک یخش حیاتی برای رسیدن به AGI است. حرکت به سوی رسیدن به AGI سریعتر شده است. شاید اگر تا چند سال پیش از کسی سوال می شد که آیا در حال رسیدن به AGI هستیم با جواب "شاید یا امکانش هست! " یا "نه به این زودی ها!" و از این قبیل جواب ها مواجه می شدیم. اما امروز مسئله "چند سال دیگر" می رسیم مطرح است. AGI علاوه بر خطراتی که ممکن است به همراه داشته باشد. از آن سو ممکن است به بهبود بیشتر زندگی بشر بیش از بیش کمک کند. به راحتی می توان گفت که یکی از ستون های اصلی AGI توانایی دیدن ماشین است. کاربرد های دیگر در امنیت و تشخیص چهره و ماشین های خودران هم از این قبیل موضاعات است که با پیشرفت روزافزون AI در حال حرکت سریع به سوی آن هستیم.

در پارت 3 می خواهیم در مورد مدل های مهم حوزه رباتیک صحبت کنیم. حوزه رباتیک یکی از مهم ترین و پرچالش ترین حوزه های AI است. یک موجود زنده را تصور کنید انسان یا حیوان. برای ساختن یک ربات باید تمام ظرافت ها را در نظر گرفت. و کارهای فیزیکی را که موجورات زنده می توانند انجام دهند. البته نگرانی هایی هم برای پیشرفت روز افزون حوزه رباتیک و استفاده از آن ها به عنوان سلاح هم وجود دارد. ممنون که در این پارت هم با من همراه بودید. ممنون می شوم نظرات خود را با من در اشتراک بگذارید . پارت 3 هم بزودی منتشر خواهد شد.


ممنون از شما که در این سفر به دنیای Deeps با من همراه بودید.

لینک پارت 2 به انگلیسی در Medium

# پارت 1 : مهم ترین pre-trained model برای text, را از آغاز بررسی و مقایسه خواهیم کرد.

# پارت2 : ما مدلهای پیشآموزش دیده مهم در زمینه تصویر (AlexNet ,VGG , GoogLeNet ,ResNet, MobileNet, MobileNetV2) را از ابتدا تا امروز بررسی و با هم مقایسه خواهیم کرد.

# پارت 3 : پارت 3: می خواهیم مدل های پیش آموزش دیده و محیط های شبیه شازی که برای آموزش در رباتیک استفاده می شوند (Atari, OpenAI Gym2, MuJoCo, RoboCup, RoboCup Soccer, Humanoid-Gym) و همچنین با چالش های آنها بیشتر آشنا شویم.

لطفا اگر مایل بودید مقاله دیگر من " عمیقتر و عمیقتر در عمق یادگیری عمیق و شبکههای عصبی مصنوعی " رو در ویرگول ببینید .

بهترین جی پی تی های سفارشی GPT Store کداماند و چطور ساخته میشوند؟

امیدوارم از مطالب لذت برده باشید .

بینایی کامپیوترهوش مصنوعیدیتا ساینسیادگیری‌ماشین
جونیور دیتاساینتیتست
شاید از این پست‌ها خوشتان بیاید