برنامه نویسی شبکه های عصبی عمیق پیچشی
دوره تخصصی آموزش شبکه های عصبی پیچشی cnn » دکتر عباسعلی رضایی
در قطعه کد زیر، نحوه استفاده از توابع و پارامترهای ذکر شده در بالا را با فریمورک تنسورفلو در پایتون ملاحظه میکنید. پس از تعریف ساختار شبکه عصبی CNN با تنسورفلو ، با استفاده از توابع compile()و fit()میتوان تنظیمات مختلفی را برای آموزش مدل مشخص کرد. پس از آمادهسازی دادهها در قالب مناسب شبکه عصبی، باید مدل را پیادهسازی کنیم. با استفاده از این کلاس میتوان هر لایه شبکه را با تابع add()به مدل اضافه کنیم. چنانچه بر روی سیستم خود این فریمورک را تاکنون نصب نکردهاید، میتوانید از دستور pip در خط فرمان سیستم عامل خود استفاده کنید و پس از آن نام فریمورک را بنویسید. پس از نصب فریمورک تنسورفلو، میتوانید فایل پایتونی را ایجاد کنید و این فریمورک را با دستور در برنامه خود فراخوانی کنید.
هرچه تعداد لایهها بیشتر باشد یعنی شبکه عصبی عمیقتر بوده و هر لایه وظیفه متفاوتی در فرایند آموزش برعهده دارد. مغز ما بهجای یادگیری ساختار هر چهره بهصورت مجزا، تنها یک چهره اولیه و پایه را به عنوان مدل، مبنا قرار داده و دیگر چهرهها را مطابق با آن شناسایی میکند. به همین خاطر، ویژگیهایی مانند چشمها، گوشها یا ابروها در کسری از ثانیه بررسی میشوند. اختلاف میان چهره جدید و مدل پایه بر اساس نوعی سیگنال الکتریکی با شدت متغیر اندازهگیری شده و نتیجه نهایی از ترکیب تفاوتها بهدست میآید. آموزش شبکههای عصبی و یادگیری عمیق، اولین دوره از مجموعه تخصص یادگیری عمیق اندرو میباشد. در این دوره شما با مفاهیم بنیادی شبکه عصبی و یادگیری عمیق آشنا خواهید شد.
گام در یک عملیات ادغام یا پیچشی، اندازه گام S به تعداد پیکسلهایی که پنجره بعد از هر عملیات جابهجا میشود، اشاره دارد. بعد از فرآیند یادگیری، کافیست وزنها و معماری شبکه ذخیره شود تا تصاویرِ جدید بتوانند توسط این الگوریتم تشخیص دادهشوند. معمولاً این نمونه را بهصورت بردار x ∈ Rn نمایش میدهیم که هر مؤلفه xi خود یک بردار ویژگی است. برای مثال ویژگیهای یک تصویر معمولاً مقادیر پیکسلهایی هستند که در آن تصویر وجود دارند. با استفاده از تابع model.summary()میتوان خلاصهای از معماری تعریف شده برای مدل را در خروجی ملاحظه کرد. برای یادگیری بیشتر و بهتر میتوانید از دوره آموزشی زیر استفاده کنید.
نقشهکش طرح دستورها تولید شده در مرحله قبل را به عنوان ورودی میگیرد و با کمک الگوریتم بهینهسازی منابع الگو قالبهای سختافزاری را برای FPGA مقصد بهینه میکند. نقشهکش طرح محاسبات هر لایه را به گروههایی از عملگرها بخشبندی میکند که دادهها را به اشتراک میگذارند یا استفاده مجدد میکنند. هر تکه بعد از محاسبه در حافظه ریخته میشود و FPGA به سراغ محاسبه تکه بعدی میرود. بعد از کانولوشن نیز میتوانیم یک تابع فعالسازی مانند ReLU را بر روی مقادیر خروجی هر کدام از فیلترها اعمال کنیم. توجه کنید که ابعاد و تعداد فیلترها به عنوان پارامتر به الگوریتم داده میشود و مقادیر موجود در این فیلترها توسط خود الگوریتم در هنگام آموزش تغییر پیدا کرده و بهینه میشوند. شبکه عصبی CNN یا ConvNet یکی از الگوریتم های یادگیری عمیق به حساب میآید که از آن به منظور شناسایی شی در مسائلی نظیر دستهبندی تصاویر، تشخیص تصاویر یا تقسیمبندی تصاویر استفاده میشود.
بهروزرسانی وزنهای پرسپترون بدین معنی است که مقادیر w باید کاهش یا افزایش داشته باشند. در نهایت در فصل چهارم کاربردهای مختلف سیستم عصبی کانولوشن به شما آموزش داده خواهد شد. این کاربردها شامل مواردی مثل تشخیص چهره، سیستمهای پیشبینی وضعیت آب و هوا، انجام طراحیهای هنری و غیره است و در این بخش شما با مواردی مثل شبکه سیامی، انتقال استایل عصبی هزینه استایل، هزینه محتوا و غیره آشنا خواهید شد. در این بخش قصد داریم تمامی مفاهیمی را که تا به اینجا در مطلب حاضر یاد گرفتیم، برای پیادهسازی شبکه عصبی CNN با تنسورفلو به کار ببریم. امکان دارد مدل در طول فرایند آموزش با مشکلاتی چون کمبرازش یا بیشبرازش مواجه شود. مشکل کمبرازش زمانی پیش میآید که دادههای کمی در دسترس باشند و از طرف دیگر، اگر مدل بیش از حد به مجموعه آموزشی وابسته شود و قادر به تشخیص دادههای جدید نباشد، میگوییم بیشبرازش شده است.
به این صورت، کاربران میتوانند خود نوع ترسیم، تجزیه و تحلیل و تفسیر نتایج را انتخاب کنند. از طرف دیگر، یکپارچه شدن کتابخانه Keras با TensorFlow امکان کدنویسی سادهتر شبکههای عصبی را مهیا ساخته و آن را به گزینهای ایدهال برای طراحی و توسعه پروژههای بلندمدت تبدیل کرده است. شبکههای عصبی دستهای از مدلهایی هستند که با لایهبندی ساخته میشوند (ساختاری چند لایه دارند). شبکههای عصبی پیچشی ( کانولوشنی (CNN)) و شبکههای عصبی بازگشتی (RNN) انواع رایج شبکههای عصبی هستند. برای مثال ربات (Willow Garage PR2) میتواند بهعنوان یک پیشخدمت عمل کند.
علاوهبر دسترسی به دادههای فراوان، باید هزینه محاسباتی بالا شبکههای عصبی را نیز در نظر گرفت. به عنوان مثال، مدلی مانند GPT-3 از ۱۷۵ میلیارد پارامتر تشکیل شده است. آموزش دادن مدلهای یادگیری عمیق برای کاربردهای پیچیده، به واحدهای پردازش گرافیکی (GPUs) توانمندی نیاز دارد. برای آموزش این مدلها پیشنهاد میشود بهجای CPU از پردازندههایی مانند GPU و TPU استفاده شود. باید توجه داشت که هر چه پروژه پیچیدهتر باشد به منابع محاسباتی بیشتری نیاز است.
پیشرفتهای حاصل شده در «بینایی کامپیوتری» (Computer Vision) با ظهور «یادگیری عمیق» (Deep Learning) در طول زمان ایجاد و کامل شده و در درجه اول برمبنای الگوریتم خاصی به نام «شبکه عصبی پیچشی» (Convolutional Neural Network) بوده است. کاربرد یک شبکه عصبی مصنوعی یا همان شبکه عصبی ساده در حل مسائل جزئی خلاصه میشود. تا حدودی میتوان ساختار شبکههای عصبی را شبیه به شبکههای عصبی زیستی در نظر گرفت. هر لایه متشکل از مجموعهای از موجودیتها با عنوان «گره» یا node است که با یکدیگر در تعامل هستند. این شبکهها اغلب از یک لایه ورودی، یک یا چند لایه پنهان و یک لایه خروجی تشکیل میشوند. در حالی که همچنان میتوان از روشهای قدیمی و «جداول درستی» (Truth tables) برای حل مسائل ریاضیاتی ساده استفاده کرد، یافتن راهحل برای پردازش تصویر، بینایی کامپیوتر و پردازش زبان طبیعی به اتخاذ رویکرد پیچیدهتری نیاز دارد.
به بیان سادهتر، حداقل در یک لایه به جای ضرب ماتریسی، دو تابع در ورودی دریافت شده و یک تابع در خروجی برگردانده میشود. این موضوع هنگامی که با تعداد کمی از تصاویر سرو کار داشته باشیم؛ یا تصاویری که قصد پردازش آنها را داریم ساده باشند؛ چندان به چشم نمیآید اما در مورد تصاویر پیچیده یا حجم زیاد تصاویر، تفاوت مهمی خواهد بود. ماتریس خروجی حاصل از لایه غیرخطی، به عنوان ورودی به لایه فشردهساز ارسال میشود. چنانچه لایه فشردهساز از نوع بیشینه باشد، بزرگترین مقادیر از اعداد ماتریس استخراج میشوند. در لایه فشردهساز از نوع کمینه و میانگین نیز، به ترتیب، کوچکترین مقادیر و میانگین مقادیر اعداد ماتریس محاسبه میشوند. در تصویر زیر، نمونهای از عملکرد لایه فشردهساز در شبکه عصبی CNN را ملاحظه میکنید.
لایههای ادغام تلاش میکنند تا حجم تصویر را به نحوی کاهش دهند که ویژگیهای اصلی در تصویر باقی بماند. این موضوع در واقع همان فیلترهایی است که باعث میشود سرعت و هزینه پردازش در شبکههای عصبی کانولوشنالی به مراتب کاهش پیدا کند و علاوه بر این، دادهها به فرم مطلوبی برای پردازش دربیایند. در آموزش شبکه عصبی کانولوشنالی، یکی از مهمترین سرفصلها، آشنایی با لایههایی است که این شبکه عصبی را شکل میدهند. در حقیقت ارتباط این لایهها در شبکه کانولوشن مانند ارتباط مجموعه نورونها بوده و باعث میشود که ماشین بتواند عملکردی مشابه با عملکرد بینایی انسان، داشته باشد. در مطلب حاضر، قصد داشتیم به معرفی مدل CNN بپردازیم و اجزای اصلی داخلی آن را به زبان ساده توضیح دهیم. در نهایت نیز، با ارائه یک مثال کاربردی، نحوه پیادهسازی شبکه عصبی CNN با تنسورفلو با زبان پایتون را آموزش دادیم.
برای انجام این کار یادگیری ماشینی معمولاً برای تولید یک تابع بهصورت زیر استفاده میشود. در قطعه کد زیر، نحوه استفاده از کلاس Sequential()و تابع add()ملاحظه میشود. میتوان از قطعه کد زیر به منظور بررسی چند نمونه از دادههای موجود در مجموعه داده استفاده کرد. افزودن یک «لایه کاملا متصل» (Fully-Connected layer) (معمولا) راهی ارزان برای یادگیری ترکیبهای غیر خطی سطح بالای ویژگیها به صورتی است که به وسیله خروجی لایه پیچشی ارائه شد. کتابخانهای محبوب و کاربردی در یادگیری ماشین که بسیار در توسعه پروژههای صنعتی و تحقیقاتی بهکار گرفته میشود. اگرچه این کتابخانه کمی در زمینه مصورسازی دارای ضعف و محدودیت است، در عوض نسبت به سایر فریمورکها پیچیدگی کمتری داشته و علاوهبر عملکرد سریعتر، طریقه نصب و راهاندازی آسانتری نیز دارد.
در قطعه کد زیر نحوه فراخوانی تنسورفلو و بررسی ورژن آن را ملاحظه میکنید. عنصری که در نگهداری عملیات پیچشی در اولین بخش از لایه پیچشی قرار دارد کرنل/فیلتر، K نامیده میشود و به رنگ زرد نشان داده شده است. ترجمهگر شبکه عمیق توصیفشده را به معماری مجموعه دستورها خاصی که مسیر داده را مشخص میکند تبدیل میکند. هر دستور در این مجموعه نشان دهنده یک گره در گراف مسیر داده شبکه است. کامپایلر DNNWEAVER این دستورها را به سیگنالهای کنترلی FPGA مینگارد و یک تقویم اجرا را درست میکند. این روش یک واسط نرمافزار-سختافزار یکپارچه را فراهم میکند؛ بنابراین به کمک این معماری مجموعه دستورها انواع گوناگونی از پیادهسازی شتابدهندهها را که با محدودیتهای FPGA مقصد سازگار است، امکانپذیر میکند.
ورودی این شبکه تمامیِ پیکسلهایی است که توسط لایهی ادغامِ آخر ایجاد شدهاند. در واقع بعد از لایهی ادغامِ آخر، تمامی پیکسلهای تمامی تصاویرِ فیلتر و ادغام شده از یک نمونه را، پشت سر هم به ترتیب قرار میدهیم و هر کدام به یک نورون ورودی از شبکهی عصبی غلیظ متصل میشوند. در شبکههای CNN معمولاً بعد از لایهی پیچش یا همان کانولوشن، یک مرحله ادغام (pooling) بر روی هر کدام از تصاویر فیلتر شده اجرا میشود. این کار به این دلیل است که مقادیر زائد و دارای اطلاعاتِ کم که ممکن است توسط عملیات کانولوشن در تصویر ایجاد شده باشد از بین برود و اطلاعاتِ سادهتر و مفیدتری به لایههای بعدی ارسال شود. لایههای ادغام یا polling وظیفه اصلی این لایهها، کاهش حجم تصویر است.
این دوره به شما کمک میکند که قابلیتها، چالشها و پیامدهای یادگیری عمیق را درک کنید. همچنین آموزش یادگیری عمیق شما را برای مشارکت در توسعه فناوری پیشرفته هوش مصنوعی آماده میکند. شبکه عصبی پیچشی (CNN) یکی از روشهای عمیق یادگیری ماشین است که با توجه به کارایی بالای آن، امروزه استفاده از آن در استخراج ویژگی و دستهبندی تصاویر امر بسیار رایجی شده است. در این مقاله برای آشنایی بیشتر پژوهشگران با این حوزه و نوآوریهای مرتبط با این شبکه، ساختار اصلی این شبکه و تعداد 10 معماری مهم و رایج آن مرور شده است. با مطالعه مقالات اصلی ارایهدهنده هر یک از معماریهای شبکه پیچشی، نکات مهم و اصلی هر معماری که موجب بهبود عملکرد آن نسبت به موارد پیشین خود شده، جمعآوری و بررسی شده است.
در ادامه، قصد داریم به پیادهسازی یک شبکه عصبی CNN با تنسورفلو در زبان برنامه نویسی پایتون بپردازیم. پیش از پرداختن به این آموزش، مقدمه کوتاهی از کتابخانه تنسورفلو را ارائه میکنیم و به نحوه استفاده از آن در زبان پایتون اشاره خواهیم کرد. لایههای پیچشی برای درک الگو دادهها، عملیات ریاضیاتی کانولوشن را بر روی تصاویر اعمال میکنند. اندازه هر فیلتر در لایه پیچشی بر ویژگیهای استخراج شده از ورودی تاثیر مستقیم دارد. از طرف دیگر، لایه بیشینههموار، تنها بزرگترین مقادیر را از خروجی لایه قبل جدا کرده و باعث کاهش اندازه ویژگیها میشود. شبکهی عصبی پیچشی یا به اختصار CNN که به آن شبکهی عصبی کانولوشنی نیز گفته میشود، نوعی از شبکههای عصبی است که عموماً برای یادگیری بر روی مجموعه دادههای بصری (مانند تصاویر و عکسها) استفاده میشود.
با این حال استفاده از شبکههای عصبی در پروژههای مختلف با چالشهای خاصی همراه است که هر توسعهدهنده باید از آنها مطلع باشد. ما kernel را در ابتدای تصویر قرار داده از چپ به راست در تصویر حرکت میکنیم. بعد از اتمام یک مرحله تعداد یک پیکسل به جلو رفته و مجدداً عملیات کانولوشن را انجام میدهیم. اما چرا مقدار یک؟ معمولاً به صورت default مقدار stride برابر با یک قرار میدهند. اما این مقدار میتواند بیشتر شود و با توجه به مسئله و تصویر ورودی میتوان آن را تنظیم نمود. این شبکهی عصبی غلیظ با وزنها یادگیری را انجام داده و در خروجی، برای مثال در صورت مرد بودنِ تصویرِ ورودی، نورون مربوط به مرد را عدد بالاتری میدهد.
از جمله محبوبترین کتابخانههای یادگیری عمیق برای ساخت شبکههای عصبی میتوان به TensorFlow، Keras و PyTorch اشاره داشت. البته نسخه دوم کتابخانه TensorFlow با کتابخانه Keras یکپارچه بوده و نیازی به نصب جداگانه هر کدام نیست. شبکههای عصبی گراف، دستهای از روشهای یادگیری عمیق هستند که بهطور خاص، برای استنباط بر دادههای توصیفشده توسط گرافها طراحی شدهاند. چراکه، میتوانیم اطلاعات بیشتری در مورد ساختار و خصوصیات آنها را بهدست آوریم. همانطور که از نام شبکه عصبی پیچشی (convolutional neural networks) مشخص است برای ایجاد این شبکه نیاز است با عملیات convolution آشنا باشیم. روش انجام این عملیات بدین صورت است که ما یک Kernel داریم و میخواهیم عملیات convolution انجام دهیم.
در پردازش تصویر، پیش پردازش دادهها یکی از گامهای مهم محسوب میشود که باعث میشود همگرایی شبکه سریعتر اتفاق بیفتد. نخستین بخش از ساختار شبکه عصبی CNN، لایه پیچشی است که در آن، اصلیترین عملیات ریاضی انجام میشود. به بیان دیگر، این لایه، وظیفه اصلی استخراج ویژگی از دادههای ورودی را بر عهده دارد. لایه پیچشی میتواند دارای چندین فیلتر باشد که هر یک از این فیلترها، اطلاعات خاصی را از دادهها استخراج میکنند. در بسیاری از موارد و برای جلوگیری از وقوع مشکلاتی همچون بیشبرازش، شبکههای عصبی عمیق نیازمند حجم گستردهای از دادهها هستند.
بر اساس این منحنی، تابع ReLU مقادیر ورودی منفی خود را به مقدار عددی صفر نگاشت میکند و بر روی سایر اعداد ورودی بزرگتر از صفر، تغییری اعمال نمیکند. لایه پیچشی و لایه تجمعی باهم از iاُمین لایه از شبکه عصبی پیچشی هستند. بسته به پیچدگی تصاویر، تعداد این لایهها ممکن است برای ثبت جزئیات سطح پایین بیشتر افزایش یابد. در ادامه، به مسطحسازی خروجی نهایی و خوراندن آن به یک شبکه عصبی با قاعده به منظور دستهبندی پرداخته خواهد شد. Tabla[۴۶] یک شتابدهنده FPGA برای فاز آموزش الگوریتمهای یادگیری ماشین ارائه میکند در حالی که DNNWEAVER رو رابط شبکههای عصبی تمرکز دارد. Tabla از زبان ریاضیاتی مختص به خودش استفاده میکند در حالی که DNNWEAVER از زبان Caffe برای مشخص کردن مدل استفاده میکند.
مدل پرسپترون خودمان را با انتساب مقادیر تصادفی برای وزنها آغاز میکنیم. زمانی که مشغول تمرین دادن هر مدلی هستیم همواره زیان تعریفشده داریم که وزنها بر روی آن بهینه میشوند.
خروجی قطعه کد بالا را در تصویر زیر ملاحظه میکنید که هر تصویر با برچسب مشخص شدهاند. پس از این که خروجی لایه فشردهساز شبکه CNN مسطح شد و به شکل یک بردار درآمد، بردار حاصل به یک شبکه تمام متصل ارسال میشود تا در نهایت بتوان از ویژگیهای استخراج شده به منظور حل مسئله دستهبندی استفاده کرد. در تصاویری با چندین کانال (برای مثال تصاویر RGB)، کرنل دارای عمق مشابهی با تصویر ورودی میشود. ضرب ماتریسها بین پشته Kn و In (به صورت [K1, I1]; [K2, I2]; [K3, I3]) انجام میشود و نتایج با بایاس جمع میشوند تا یک ویژگی کانال با عمق یک پیچانده شده را در خروجی ارائه کند. مقادیر وزنی که میزان تاثیرگذاری دادهها را بر نتایج لایه بعدی و در نهایت نتایج نهایی مشخص میکنند. این معماریها تنها بخشی از تنوع گسترده از شبکههای پیچشی هستند که هر یک با ویژگیها و مزایای خاص خود، در حوزههای مختلفی از تشخیص تصویر، ترجمه ماشینی، و غیره استفاده میشوند.
در نتیجه دقت آموزش بالا بوده اما دقت آزمون پایین است و نتایج قابل قبولی بهدست نمیآیند. Caffe یکی از پراستفادهترین چارچوبهای یادگیری عمیق است که توصیف شبکه را به عنوان ورودی میگیرد و به مدلی قابل اجرا روی CPU یا GPU تبدیل میکند. تحلیل صدای ورودی برای یک سامانه هوش مصنوعی بسیار سخت است؛ زیرا که عوامل متعددی در تشخیص درست صدا نقش دارند. در تصویر بالا ابعاد feature map را با with و height نمایش داده و تعداد آنها را با depth نشان دادهایم. ادغام حالات مختلفی دارند که یکی از معروفترین آنها «ادغام بیشینه» یا «max pooling» است. در این ادغام، مقدار بیشینه از تعدادی از پیکسلها انتخاب شده و بقیه حذف میشوند.
یکی از نخستین زمینههای بسیار موفق برای یادگیری عمیق که پتانسیل بالقوهٔ این روش در حل مسائل را نشان داد، در حوزهٔ بازشناسی تصویر رخ داد. شبکهی Inception این معماری از ماژولهای inception استفاده میکند و هدفش فرصت دادن به (عملیات) کانولوشنی مختلف برای افزایش کارایی از طریق تنوعبخشی ویژگیها است. به طور خاص، این معماری از ترفند کانولوشنی $1\times1$ برای محدود سازی بار محاسباتی استفاده میکند. لایه ادغام (POOL) لایه ادغام (POOL) یک عمل نمونهکاهی است، که معمولا بعد از یک لایه کانولوشنی اعمال میشود، که تا حدی منجر به ناوردایی مکانی میشود. به طور خاص، ادغام بیشینه و میانگین انواع خاص ادغام هستند که به ترتیب مقدار بیشینه و میانگین گرفته میشود. روشهای ادغام دیگر مانند «ادغام میانگین» یا همان «average pooling» نیز وجود دارد.
هوش مصنوعیای که به خوبی با کاربر خود تطابق یافته باشد، میتواند اطلاعات غیر مرتبط را نادیده گرفته و برای کاربر اطلاعات مرتبط ارائه کند. بوت کمپ برنامهنویسی MapsaHR از معتبرترین برگزارکنندگان دورههای آموزشی معتبر در حوزه برنامهنویسی و فناوری است که توسط مجموعه MapsaHR و با همکاری با دانشگاهها و صنایع فناوری اطلاعات برگزار میشود. این بوت کمپ با هدف آموزش مهارتهای عملی و تخصصی در زمینه برنامهنویسی و توسعه نرمافزار برای شرکتهای فناوری و استارتاپها طراحی شده است. شرکتکنندگان در این دورهها از طریق کلاسهای آموزشی تئوری و کارگاههای عملی، با مفاهیم و ابزارهای مدرن برنامهنویسی آشنا میشوند و فرصت دارند تا پروژههای عملی را پیادهسازی کنند. مشاهده میشود که در نهایت با یک شبکهی عصبی غلیظ (fully connected) و سپس تابع فعالسازی softmax، میتوان خروجی مورد نظر را تولید کرد و یا با محاسبهی خطا و پسانتشار آن، وزنها را در شبکه آپدیت نمود. بعد از ادغام بار دیگر یک پیچش با ۶۴ فیلتر بر روی تصاویری که از خروجیِ ادغام به دست آمدهاند اعمال شده است.
پس از آموزش مقدماتی با شبکههای عصبی کمعمق و سپس عمیق آشنا میشوید و انتظار میرود که بتوانید آنها را در عمل به کار ببرید. نکته بسیار مهم که آموزش شبکه های عصبی کانولوشنالی را در اولویت بالاتری نسبت به سایر روشها قرار میدهد؛ جلوگیری از بیش پردازش است. لایههای شبکه عصبی کانولوشنال یا شبکه عصبی پیچشی، از یک لایه ورودی، یک لایه خروجی و یک لایه پنهان تشکیل شده است که شامل چندین لایه کانولوشن میشود. حذف محدودیتها و افزایش کارایی منجر به تشکیل سیستمی میشود که بسیار از حالت عادی اثربخشتر است و همچنین برای پردازش تصویر و زبان طبیعی قدرت بیشتری خواهد داشت. شبکه عصبی کانولوشنال یا پیچشی (CNN) نوعی شبکه عصبی مصنوعی است که برای شناسایی و پردازش تصویر استفاده میشود. تا اینجا، به معرفی ساختار درونی شبکه عصبی پیچشی یا همان کانولوشن پرداختیم تا به درک نحوه پیادهسازی این مدل با استفاده از زبان برنامه نویسی کمک کند.
البته کاهش ابعاد در این لایه به نحوی صورت میگیرد که اطلاعات مهم دادهها از دست نروند. چندین نوع لایه فشردهساز در شبکه عصبی CNN وجود دارند که رایجترین آنها، «فشردهسازی بیشینه» (Max Pooling)، «فشردهسازی کمینه» (Min Pooling) و «فشردهسازی میانگین» (Average Pooling) هستند. در الگوریتم ConvNet در مقایسه با دیگر الگوریتمهای دستهبندی به «پیشپردازش« (Pre Processing) کمتری نیاز است. در حالیکه فیلترهای روشهای اولیه به صورت دستی مهندسی شدهاند، شبکه عصبی پیچشی (ConvNets)، با آموزش دیدن به اندازه کافی، توانایی فراگیری این فیلترها/مشخصات را کسب میکند. فریمورک TensorFlow امکانات مصورسازی گستردهای را برای کاربردهای یادگیری عمیق در اختیار توسعهدهندگان قرار میدهد.
این کار با هدف کاهش قدرت محاسباتی مورد نیاز برای پردازش دادهها از طریق کاهش ابعاد، انجام میشود. علاوه بر این، برای استخراج ویژگیهای «غالبی» (Dominant) مفید است که چرخش و موقعیت بدون تغییر دارند (ثابت)، بنابراین منجر به حفظ فرآیند آموزش موثر میشوند. هنگامی که تصویر 5x5x1 به یک تصویر 6x6x1 تقویت میشود و سپس کرنل 3x3x1 بر فراز آن اعمال میشود، ماتریس پیچانده شده به ابعاد 5x5x1 تبدیل میشود. از سوی دیگر، اگر عملیات مشابهی بدون پدگذاری انجام شود، ماتریسی حاصل میشود که دارای ابعاد کرنل (3x3x1) است و به آن Valid Padding گفته میشود. مخزن گیتهاب vdumoulin (+) شامل تعداد زیادی از تصاویر متحرک (Gif) مشابه آنچه در بالا وجود دارد است که به درک بهتر چگونگی پدگذاری و طول گام کمک میکند.
اندرو انگ استاد دانشکده علوم کامپیوتر دانشگاه استنفورد و سرپرست آزمایشگاه هوش مصنوعی استنفورد است. وی هم چنین بنیانگذار کورسرا (coursera.org) است و بر اساس گزارش تکنولوژی دانشگاه ام ای تی یکی از 35 مخترع برتر جوان دنیا است.او دکتری خود را از دانشگاه کالیفرنیا برکلی گرفته و زمینههای پژوهش او هوش مصنوعی و علوم رباتیک است. در تصویر زیر، منحنیهای مربوط به دو معیار accuracyو precisionرا ملاحظه میکنید. به منظور استفاده از مجموعه داده CIFAR-10 و بارگذاری آن در پروژه، از قطعه کد زیر استفاده میکنیم. هر چند که DNNWEAVER یک شتابدهنده نیست، بلکه تولیدکننده کد یک شتابدهنده است.
به عنوان مثال حجم دادهها و تصاویر قابل محاسبه در کاربردهایی همچون دستهبندی تصاویر و تشخیص اشیاء بالا بوده و شبکههای عصبی پیچشی (CNN) راهکار مناسبی برای این موضوع ارائه میدهند. شما با شرکت در این دورهها، نه تنها دانش نظری خود را تقویت میکنید، بلکه با انجام پروژههای عملی، مهارتهای لازم برای ورود به بازار کار در حوزه هوش مصنوعی و یادگیری عمیق را کسب خواهید کرد. این دورهها فرصتی عالی برای یادگیری از متخصصان و کسب تجربه در زمینه طراحی و پیادهسازی شبکههای عصبی هستند. در این مطلب ابتدا یاد میگیریم منظور از شبکه عصبی عمیق چیست و چگونه کار میکند. سپس به معرفی ابزارها و کتابخانههای یادگیری عمیق میپردازیم و نحوه ساخت یک شبکه عصبی عمیق را شرح میدهیم. در انتها این مطلب از مجله فرادرس، با دو مورد از رایجترین مدلهای یادگیری عمیق آشنا میشویم و چند نمونه از چالشهای مربوط به این حوزه را بررسی میکنیم.
برنامه نویسی لوگو