Payamvdn/NorthPersian_fa_wiki huggingface dataset:
پردازش تصویر ایجاد کرده اند. در حقیقت عبارت یادگیری عمیق، بررسی روش های تازه برای شبکه عصبی مصنوعی است. تعریف. یادگیری عمیق، رده ای از الگوریتم های یادگیری ماشین است که از چندین لایه برای استخراج ویژگی های سطح بالا از ورودی خام استفاده می کنند. به بیانی دیگر، رده ای از تکنیک های یادگیری ماشین که از چندین لایهٔ پردازش اطلاعات و به ویژه اطلاعات غیرخطی بهره می برد تا عملیات تبدیل یا استخراج ویژگی نظارت شده یا نظارت نشده را عموماً با هدف تحلیل یا بازشناخت الگو، کلاس بندی، خوشه بندی انجام دهد. برای نمونه، در پردازش تصویر، لایه های پست تر می توانند لبه ها را تشخیص دهند، در حالی که لایه های عالی تر ممکن است ویژگی های پرمعناتر برای انسان، همچون حروف یا چهره ها، را تشخیص دهند. مفهوم. یادگیری عمیق زیرشاخه ای از یادگیری ماشین است که از لایه های متعدد تبدیلات خطی به منظور پردازش سیگنال های حسی مانند صدا و تصویر استفاده می کند. ماشین در این روش هر مفهوم پیچیده را به مفاهیم ساده تری تقسیم می کند، و با ادامهٔ این روند به مفاهیم پایه ای می رسد که قادر به تصمیم گیری برای آن ها است و بدین ترتیب نیازی به نظارت کامل انسان برای
مشخص کردن اطلاعات لازم ماشین در هر لحظه نیست. موضوعی که در یادگیری عمیق اهمیت زیادی دارد، نحوهٔ ارائهٔ اطلاعات است. ارائه دادن اطلاعات به ماشین باید به شیوه ای باشد که ماشین در کمترین زمان اطلاعات کلیدی را که می تواند با استناد به آن ها تصمیم بگیرد را دریافت کند. هنگام طراحی الگوریتم های یادگیری عمیق می بایست به عوامل دگرگونی (به انگلیسی: factors of variation) که اطلاعات مشاهده شده را توضیح می دهند توجه کنیم، این عوامل معمولاً عوامل قابل مشاهده ای نیستند بلکه عواملی هستند که بر روی دستهٔ قابل مشاهده تأثیرگذار بوده یا زادهٔ ساختارهای ذهنی انسان برای ساده تر کردن مسائل هستند. برای مثال در هنگام پردازش گفتار عوامل دگرگونی می توانند لهجهٔ گوینده، سن یا جنسیت او باشند. در هنگام پردازش تصویر یک ماشین، میزان درخشش خورشید یک عامل دگرگونی است. یکی از مشکلات هوش مصنوعی تأثیر زیاد عوامل دگرگونی بر روی اطلاعات دریافتی است. برای مثال بسیاری از پیکسل های دریافتی از یک ماشین قرمز در شب ممکن است سیاه دیده بشوند. برای حل این مشکلات بعضاً به درک بالای اطلاعات (در حدود انسان) نیازمندیم و در واقع گاهی یافتن نحوهٔ مناسب نمایش اطل
اعات به اندازهٔ خود مسئله سخت و زمان بر است. مبانی ریاضیاتی. اگرچه شبکه های عصبی (و شبکه های عصبی عمیق) در ابتدا به عنوان یک رویکرد عملگرایانه (و کمتر مبتنی بر طرح ریزی نظریاتی) مورد استفاده و پذیرش قرار گرفتند، ولی هم در قرن بیستم (در کارهای امثال کلمگرفو دیگران) و هم در دهه سوم قرن بیست و یکم، مبانی نظری برای توصیف عمیقِ مفاهیمِ ساختار، عملکرد و رفتار این شبکه ها توسط محققین فراهم آمد. تاریخچه. نخستین الگوریتم عملی یادگیرنده برای پرسپترون های چندلایهٔ نظارت شده، عمیق و پیش خور، در دههٔ ۱۹۶۰ توسط الکسی ایواخننکو - معروف به «پدر یادگیری عمیق» - و والنتن لاپا منتشر شد. در سال ۱۹۷۱، مقاله ای یک شبکهٔ عمیق با هشت لایه را توصیف کرد که عملیات یادگیری را با متد گروهی مدیریت داده (GMDH) انجام داده بود. سایر معماری های یادگیری عمیق و به ویژه آن هایی که برای بینایی رایانه ساخته شده بودند، در ۱۹۸۰ و با Neocognitron معرفی شده توسط کونیهیکو فوکوشیما آغاز گشتند. لفظ "یادگیری عمیق"، نخستین بار در ۱۹۸۶ و توسط رینا دِختِر در زمینهٔ یادگیری ماشین به کار رفت؛ وی در مقاله ای تحت عنوان "یادگیری به هنگام جستجو در مسائل ارضای محدو
دیت" (Learning While Searching in Constraint-Satisfaction-Problems) از این لفظ برای پروسه ای استفاده کرد که در آن تمامی راه حل ها در یک فضای جستجو که به پاسخ مناسب نمی رسیدند نیز ذخیره می شدند. تحلیل این راه حل های ذخیره شده امکان کنترل بهتر در تلاش های بعدی را ممکن می ساخت، و به دنبال آن در همان مراحل نخستین از گیر کردن در بن بست های احتمالی نیز جلوگیری می کرد. با این وجود امروزه لفظ یادگیری عمیق عموماً در حوزهٔ شبکه های عصبی مصنوعی به کار می رود که نخستین بار در سال ۲۰۰۰ و توسط ایگور آیزنبرگ و همکاران در حوزهٔ یادشده استفاده شد؛ به طور دقیق تر، در کتاب "نورون های دودویی چندمقداری و جهانی: نظریه، یادگیری و کاربردها" (Multi-Valued and Universal Binary Neurons: Theory, Learning and Applications) و در زمینهٔ نورون های حدآستانهٔ بولی. در سال ۱۹۸۹، یان لی کان و همکاران الگوریتم استاندارد پس انتشار را برای یک شبکهٔ عصبی عمیق با هدف تشخیص متن های دست نویس (به طور خاص با هدف بازشناسی کدهای پستی دست نویس روی نامه های پستی) به کار بست. درحالی که الگوریتم کار می کرد، عملیات یادگیری آن به سه روز زمان نیاز داشت. مدل مورد
استفاده از یک لایهٔ ورودی با ۲۵۶ واحد (پیکسل های یک تصویر مربعی ۱۶×۱۶)، یک لایهٔ خروجی با ۱۰ واحد (که مشخص می کرد تصویر رقمی که به ورودی داده شده است، کدام یک از ارقام ۰ تا ۹ است) و سه لایهٔ پنهان در میان این دو تشکیل شده بود. با ارزیابی مدل بر روی مجموعه دادهٔ تست، ۸/۱٪ رده بندی اشتباه و ۱۹/۴٪ بازپس زنی برای ۱٪ نرخ خطا در میان الگوهای تست باقی مانده به دست آمد که نشان می داد که این مدل نسبت به مدل های ارائه شدهٔ پیشین از دقت بالاتری برخوردار است و استفاده از الگوریتم پس انتشار، روشی مناسب در فرایند تعلیم شبکه های عصبی عمیق است. لازم است ذکر شود که خود الگوریتم پس انتشار، از پیش و از ۱۹۷۰ نیز به عنوان حالت معکوس مشتق خودکار وجود داشت. تا سال ۱۹۹۱، چنین سامانه هایی عموماً برای تشخیص ارقام دوبُعدی دست نویس ایزوله شده (به این معنا که ارقام به صورت تنها و بدون جزئیات و ویژگی های اضافهٔ دیگری در پس زمینه - مثلاً متن و حروف اضافه - نوشته شده اند) به کار می رفتند؛ درحالی که بازشناسی اجسام سه بُعدی همچنان یک چالش بود. در سال ۱۹۹۲، پژوهشی از جان ونگ و همکاران با توضیح معایب و محدودیت های شبکه های عصبی سه لایه ای که ب
رای این منظور به کار می رفتند، از مفهوم "شبکهٔ سلسله مراتبی" (به انگلیسی: hierarchical network) استفاده کرده و مدلی موسوم به Cresceptron را ارائه دادند که قادر بود اجسام سه بعدی در محیط های شلوغ را نیز تشخیص دهد. مفهوم تجمیع حداکثری (به انگلیسی: max pooling) نیز نخستین بار در همین پژوهش پیاده سازی شد. از آن جایی که این مدل می توانست مستقیماً تصاویر طبیعی (سوژه های سه بعدی، با حضور عناصر دیگر در پس زمینه) را به عنوان ورودی دریافت کند، تبدیل به بنیانی برای یادگیری بصری همه منظوره شد. در سال ۱۹۹۴، آندره د کاروالیو به همراه مایک فیرهورست و دیوید بیسیت، معماری ای مبتنی بر یک شبکهٔ عصبی بولی چندلایه را ارائه داد که تحت عنوان شبکهٔ عصبی بی وزن نیز شناخته می شد. این معماری از یک ماژول شبکهٔ عصبی سه لایه ای خودسامان دهندهٔ استخراج ویژگی (به انگلیسی: self-organising feature extraction یا SOFT) به همراه یک ماژول شبکهٔ عصبی چندلایهٔ رده بندی (به طور خاص یک شبکه با معماری GSN یا goal-seeking network) تشکیل شده بود که به صورت مستقل عملیات یادگیری را انجام می دادند. در ماژول استخراج ویژگی، تصویر ورودی به چند زیرمجموعه تقسیم
شده و هر قسمت به یک بلاک از نورون ها (که دارای سلسله مراتب بوده و در چند لایه تقسیم شده بودند) داده می شد و هر بلاک به صورت موازی با دیگر بلاک ها و مستقل از آن ها آموزش می دید. در سال ۱۹۹۵، یوزف زِپ هُخ رایتر که پیش تر و در ۱۹۹۱ در پایان نامهٔ خود - تحت عنوان: "بررسی هایی در شبکه های عصبی پویا" (به آلمانی: Untersuchungen zu dynamischen neuronalen Netzen) - به بررسی مسئلهٔ گرادیان کاهشی پرداخته بود (که خود پیش تر و در ۱۸۴۷مطرح شده و در ۱۹۴۴ نیز برای مسائل بهینه سازی غیرخطی مورد مطالعه قرار گرفته بود) به همراه یورگن اشمیدهوبر، معماری ال اس تی ام را ارائه داد و در مقالهٔ دیگری در سال ۱۹۹۷، آن را بهبود بخشید که زمینهٔ بزرگی را برای پیشرفت شبکه های عصبی بازگشتی فراهم ساخت. در همان سال ۱۹۹۵، برندن فرِی به همراه جفری هینتون و پیتر دایان نشان دادند که می توان با استفاده از الگوریتم بیدار-خواب، شبکه ای تشکیل شده از شش لایهٔ کاملاً هم بند و با چندصد واحد پردازشی مخفی را آموزش داد. علت محبوبیت یادگیری عمیق. تا قبل از پیدایش یادگیری عمیق، روش های یادگیری ماشین سنتی، بیش از حد به بازنمایی هایی (انتخاب ویژگی ها) که از داد
ه ها به دست می آورند، وابسته بودند. این روش ها، نیاز به یک متخصص در دامنه موضوع داشت تا استخراج ویژگی ها را به صورت دستی انجام دهد. حال آن که، این استخراج ویژگی ها به صورت دستی فرآیندی چالش انگیز و زمان بر است. پیدایش یادگیری عمیق توانست به سرعت جایگزین این روش های سنتی شود. چرا که می توانست استخراج ویژگی ها را به صورت خودکار متناسب با هر مسئله به دست آورد. یادگیری عمیق هندسی. در حالی که مدل های یادگیری عمیق در دهه گذشته، در برخورد با ورودی هایی به شکل تصاویر، گفتار یا ویدیو که اساس ساختار آن ها اقلیدسی است، موفقیت آمیز عمل کرده، اخیراً، علاقه محققان در تلاش برای استفاده از یادگیری بر روی داده های غیراقلیدسی افزایش یافته است. یادگیری عمیق هندسی، زمینه نوظهور تحقیقاتی است که سعی در تعمیم معماری یادگیری عمیق برای کار با داده های غیراقلیدسی دارد، تا این شکاف را پر کند. شبکه عصبی گراف. شبکه های عصبی گراف، دسته ای از روش های یادگیری عمیق هستند که به طور خاص، برای استنباط بر داده های توصیف شده توسط گراف ها طراحی شده اند. ایجاد مدل هایی که مستقیماً بروی گراف ها کار می کنند، مطلوب تر است. چراکه، می توانیم اطلاعات بیش
تری در مورد ساختار و خصوصیات آن ها را به دست آوریم. شبکه های عصبی گراف، به طور مستقیم برروی گراف ها اعمال می شوند و روشی آسان برای انجام وظایفی همانند، پیش بینی سطح گره، یال و گراف ارائه می کنند. تا پیش از، توسعه شبکه های عصبی گراف، روش های یادگیری عمیق توانایی اعمال برروی یال ها در جهت استخراج دانش و پیش بینی را نداشتند. در عوض، تنها بر اساس ویژگی های گره عمل می کردند. کاربردها. بینایی رایانه. یکی از نخستین زمینه های بسیار موفق برای یادگیری عمیق که پتانسیل بالقوهٔ این روش در حل مسائل را نشان داد، در حوزهٔ بازشناسی تصویر رخ داد. از سال ۲۰۱۰ و در پروژه ای موسوم به ایمیج نت مسابقه ای سالانه برگزار می شود که شرکت کنندگان با ارائهٔ الگوریتم های کامپیوتری گوناگون، تلاش به بازشناسی تصاویر دیجیتالی در مقیاس کلان کرده و بر سر دست یابی به دقّت های بالاتر با یک دیگر رقابت می کنند. حال در سال ۲۰۱۲، یک شبکهٔ عصبی هم گشتی به نام الکس نت در این رقابت به کار رفت و با کسب نتایجی بسیار چشم گیر، توجه های گسترده ای را به سوی روش یادگیری عمیق جلب کرد؛ به شکلی که به باور برخی، در این سال «انقلاب یادگیری عمیق» رخ داد. لازم است ذکر
شود که دقت الکس نت در تشخیص تصاویر پایگاه داده ی ایمیج نت از دقت انسان نیز فراتر بود (هرچند البته حتی پیش از ارائهٔ الکس نت نیز الگوریتم های دیگری به عملکرد فراانسانی دست پیدا کرده بودند). امروزه نیز شبکه های عصبی در بینایی رایانه دارای نقشی کلیدی بوده و برای اهداف گوناگونی چون بازشناسی تصویر، تشخیص چهره، رهگیری اجسام، حذف نویز، رنگی کردن تصاویر سیاه و سفید، ترمیم تصاویر آسیب دیده، رده بندی تصاویر پزشکی و… به کار می رود. بازشناسی خودکار گفتار. از دیگر زمینه های موفق برای یادگیری عمیق، تشخیص و بازشناسی خودکار گفتار در مقیاس گسترده است که معمولاً توسط مدل های مبتنی بر شبکه عصبی بازگشتی (به ویژه از نوع ال اس تی ام) و شبکه عصبی هم گشتی انجام می گیرد. پردازش زبان های طبیعی. یادگیری عمیق اثر بزرگی در پیشرفت شاخهٔ پردازش زبان های طبیعی ایجاد کرده و با ایجاد یک چهارچوب مدل سازی قدرتمند، به نتایج چشم گیری دست یافته است. به عنوان نمونه، مدل زبانی جی پی تی-۳ از اوپن ای آی با بهره گیری روش های یادگیری عمیق قادر به تولید متونی مشابه متون نوشته شده توسط انسان است. تشخیص الکترومیوگرافی. سیگنال های الکترومیوگرافی می توانند
به عنوان رابطی میان انسان و ماشین عمل کرده و با تحلیل آن ها از مقصود کاربر جهت کنترل تجهیزات گوناگون بهره برد. به عنوان نمونه، افراد دچار نقص عضو می توانند اعضایی مصنوعی را جایگزین عضو قطع شدهٔ خود کرده و آن ها را به شیوهٔ مؤثری کنترل کنند. یا با همین روش می توان اعضایی کمکی و تقویت کننده همچون اسکلت خارجی را کنترل کرد. برای تحلیل این سیگنال های خام و ارائهٔ خروجی مناسب برای کنترل دستگاه، بهره گیری از روش یادگیری عمیق می تواند بسیار کاربردی باشد. سامانهٔ پیشنهادگر. سامانه های پیشنهادگر از یادگیری عمیق جهت استخراج ویژگی های معنادار برای یک مدل فاکتورهای پنهان به منظور پیشنهادهای محتوا-محور موسیقی و مجله بهره برده اند. یادگیری عمیق چنددیدگاهی (به انگلیسی: multi-view deep learning) جهت یادگیری ترجیح های کاربر از چندین دامنه به کار می رود. سرمایه گذاری. در طرح های سرمایه گذاری، از یادگیری عمیق برای افزایش میزان بازده استفاده می شود. خودروی خودران. گوگل و تسلا امروزه ثابت کرده اند که خودروهای بدون سرنشین یا خودران امکان پذیر هستند. اما به هرحال باید گفت این خودروها هنوز نیاز به یادگیری بیشتر و تمرین و آزمایش های م
تفاوتی هستند و فعالیت ها و متغیرهای بسیاری باید مورد بررسی قرار بگیرد. تشخیص صدا. تشخیص صدا جزئی جدانشدنی از فرایند زبان است. تحلیل صدای ورودی برای یک سامانه هوش مصنوعی بسیار سخت است؛ زیرا که عوامل متعددی در تشخیص درست صدا نقش دارند. به طور مثال وجود نویز در پیش زمینه، لهجه ها، خلاقیت ها و بازی های زبانی افراد و همچنین ناتوانی های خاص گفتاری و عوامل دیگر تشخیص دقیق واژه های به کار رفته در صدای به چیزی که رایانه بتواند آن را تحلیل کند، سخت می کند. تشخیص الگو. استفاده از شبکه های «یادگیری عمیق» می تواند در نرم افزارهای متعددی با تشخیص الگوی به کار رفته توسط کاربر، کیفیت ارائهٔ خدمات را بالا ببرد. هوش مصنوعی ای که به خوبی با کاربر خود تطابق یافته باشد، می تواند اطلاعات غیر مرتبط را نادیده گرفته و برای کاربر اطلاعات مرتبط ارائه کند. تشخیص الگو همچنین می تواند تحلیل کلان داده را موثرتر سازد. برنامه نویسی کامپیوتری. هوش مصنوعی ضعیف، موفقیت هایی در حوزه تولید متن با معنا و پیشرفت در حوزه کدنویسی داشته است. به طور مثال GPT-۳ از شرکت OpenAI یک نرم افزار اوپن سورس زبان تولیدکننده است که می تواند با کمترین دستورالعمل از
سوی کاربر، کدنویسی کرده یا برنامه های ساده کامپیوتری ایجاد کند. در آینده احتمالاً شاهد حضور نرم افزارهای بیشتری که از این نوع فناوری ها بهره مندند خواهیم بود و کار با نرم افزارهای تخصصی رنگ و بوی دیگری به خود خواهد گرفت. امنیت سایبری. هوش مصنوعی نقش مهم تری در معیارهای امنیت سایبری سازمان ها، افراد و دولت ها به عهده خواهد گرفت که شامل نظارت، شناسایی تهدیدهای اطلاعاتی، اطلاع از نفوذ امنیتی، پاسخ به اتفاقات و تحلیل ریسک خواهد بود. هوش مصنوعی همچنان می تواند ابزارهای نظارتی قدرتمندی در اختیار دولت ها قرار دهد تا به طور راحت تری مخالفان خود را شناسایی کنند. حوزه سرگرمی و تولید محتوا. برنامه های رایانه ای روزبه روز در تولید محتوا بهتر می شوند و هوش مصنوعی هم اکنون نیز در شناسایی موارد تخلف قانون حق نشر، ساخت بازی های ویدیویی و فیلم های سینمایی نقش مهمی دارند و در آینده این نقش برجسته تر خواهد شد. تصویربرداری پزشکی. الگوریتم های یادگیری عمیق تجزیه و تحلیل داده های پیچیده را ساده می کنند و دقت تشخیص ناهنجاری را افزایش می دهند. شبکه های عصبی کانولوشنال (CNN) بینش هایی را ارائه می کنند که به متخصصان پزشکی در شناسایی
به موقع و دقیق مسائل بهداشتی کمک می کند. در یک مطالعه در سال ۲۰۱۸، CNNها بیش از ۱۰ درصد دقت بالاتری را در شناسایی ملانوم در مقایسه با متخصصان نشان دادند. نساج شبکه های عصبی. شبکه های عصبی عمیق (DNNs) مدل های یادگیری هستند که دارای محاسبات خیلی زیادی اند. این مدل ها کاربردهای روزافزونی در بخش های مختلف دارند. از آنجا که FPGAها یک زیرساخت قابل برنامه نویسی برای شتاب دادن به محاسبات می دهند و همچنین امروزه در بیشتر دنیا به سادگی قابل دسترس اند، FPGAها یک انتخاب خیلی خوب برای پیاده سازی مدل های DNN هستند. اما استفاده از FPGAها به دلیل اینکه به دست آوردن کارایی و مصرف انرژی کم آنها به طور همزمان کار خیلی سختی است و همچنین DNNها به حافظه زیادی نیاز دارند (در FPGA معمولاً حافظه روی برد کم است)، پیاده سازی مدل ها با FPGA بسیار دشوار است. نساج یا بافنده شبکه های عصبی (DNNWEAVER) یک چارچوب است که به صورت خودکار یک کد قابل سنتز برای یک زوج مرتب (DNN, FPGA) تولید می کند. مدل DNN را به صورتی که در Caffe معرفی می کنند به عنوان ورودی می دهند. روند کلی کار این برنامه به این صورت است که ابتدا مدل ورودی را به یک زبان میانی تبد
یل می کند که یک گراف از جریان داده کلی را نشان می دهد. در این مرحله با الگوریتمهای مختلف مدل داده شده را گروه بندی می کند تا با توجه به حافظه FPGA و دیگر منابع موجود روی FPGA به حداکثر استفاده مجدد از داده ها و بالاترین سطح کارایی برسد. بعد از آن نتیجه نهایی یک کد سنتزپذیر است که با بالاترین کارایی روی FPGA موردنظر تمامی نیازهای مدل ورودی را برآورده می سازد. دید کلی از نساج شبکه های عصبی. این کار کمک می کند تا چرخه طولانی لازم برای استفاده از FPGA در شبکه های عصبی عمیق کوتاه تر شود. هدف از این کار تولید یک چارچوب خودکار است که اولاً برنامه نویس را از جزئیات مربوط به طراحی و بهینه سازی سخت افزار جدا می کند. دوماً خود چارچوب به منابع محدود موجود روی FPGA دست و پنجه نرم می کند؛ و در نهایت چارچوب پایدار برای FPGA فراهم می کند که کارایی بالایی را برای پیاده سازی مدل های مختلف شبکه های عصبی عمیق روی FPGAهای گوناگون ارائه می کند. برای رسیدن به چنین هدف هایی DNNWEAVER طراحی شده است. در مرحله اول DNNWEAVER نیاز به یک مدل شبکه عصبی عمیق دارد که با استفاده از یک رابط سطح بالا مشخص شده است. رابط مدل دادن. ورودی برنامه DN
NWEAVER یک توصیف گر سطح بالا از شبکه های عصبی عمیق است که در دانشگاه برکلی با نام قالب Caffe درست شده است. Caffe یکی از پراستفاده ترین چارچوب های یادگیری عمیق است که توصیف شبکه را به عنوان ورودی می گیرد و به مدلی قابل اجرا روی CPU یا GPU تبدیل می کند. DNNWEAVER به صورت خودکار مدل ورودی را به کد سنتزپذیر زبان وریلاگ تبدیل می کند. DNNWEAVER از چهار بخش نرم افزاری تشکیل شده است: ترجمه گر. ترجمه گر شبکه عمیق توصیف شده را به معماری مجموعه دستورها خاصی که مسیر داده را مشخص می کند تبدیل می کند. هر دستور در این مجموعه نشان دهنده یک گره در گراف مسیر داده شبکه است. توجه کنید که FPGA مستقیماً این دستورها را اجرا نمی کند. کامپایلر DNNWEAVER این دستورها را به سیگنال های کنترلی FPGA می نگارد و یک تقویم اجرا را درست می کند. این روش یک واسط نرم افزار-سخت افزار یکپارچه را فراهم می کند؛ بنابراین به کمک این معماری مجموعه دستورها انواع گوناگونی از پیاده سازی شتاب دهنده ها را که با محدودیت های FPGA مقصد سازگار است، امکان پذیر می کند. نقشه کش طرح. نقشه کش طرح دستورها تولید شده در مرحله قبل را به عنوان ورودی می گیرد و با کمک الگوری
تم بهینه سازی منابع الگو قالب های سخت افزاری را برای FPGA مقصد بهینه می کند. نقشه کش طرح محاسبات هر لایه را به گروه هایی از عملگرها بخش بندی می کند که داده ها را به اشتراک می گذارند یا استفاده مجدد می کنند. به هرکدام این بخش ها تکه می گوییم. هر تکه بعد از محاسبه در حافظه ریخته می شود و FPGA به سراغ محاسبه تکه بعدی می رود. شتاب دهنده شبکه های عصبی مشکل اساسی با مقدار زیاد حافظه موردنیاز برخلاف حافظه کم FPGA دارد که DNNWEAVER این مشکل را با استفاده از الگوریتم بهینه سازی منابع الگو بهبود می دهد و به کمک آن یک تعادل بین عملگرهای موازی و استفاده مجدد از داده ها با توجه به محدودیت های FPGA مقصد برقرار می کند. نسّاج طرح. نسّاجی طرح مرحله یکی مانده به آخر از DNNWEAVER است که ورودی آن مقدار منابع موردنیاز و تقویم اجرای تولید شده در مرحله قبل است و به کمک آن هسته شتاب دهنده را تولید می کند. DNNWEAVER از تعدادی قالب بهینه سازی دستی استفاده می کند که با توجه به گرفتن منابع و سازمان دهی سخت افزار که در مرحله قبل تولید شده از آن قالب ها استفاده می کند. مجتمع کننده. آخرین قسمت DNNWEAVER مجتمع کننده است. در این مرحله کدهای
رابط حافظه به کدهای شتاب دهنده اضافه می شود. از آنجایی که FPGAهای مختلف از رابط های مختلفی برای ارتباط با DRAM خارجی استفاده می کنند، این بخش شامل کتابخانه هایی از رابط های DRAM است که در هر بار کد لازم را اضافه می کند. دیگر کارهای مربوط. در این حوزه کاری چندین سخت افزار با اهداف مختلف ایجاد شده است. هر چند که DNNWEAVER یک شتاب دهنده نیست، بلکه تولیدکننده کد یک شتاب دهنده است. Tabla یک شتاب دهنده FPGA برای فاز آموزش الگوریتم های یادگیری ماشین ارائه می کند در حالی که DNNWEAVER رو رابط شبکه های عصبی تمرکز دارد. Tabla از زبان ریاضیاتی مختص به خودش استفاده می کند در حالی که DNNWEAVER از زبان Caffe برای مشخص کردن مدل استفاده می کند. کار انجام شده توسط چن و همکارانش روی طرحی تحلیلی بر اساس مدل خط بیشترین کار می کند تا با استفاده از آن سریع ترین طرح را برای شبکه عصبی عمیق مربوط روی FPGA بیابند. اما این کار برخی لایه ها مثل ائتلافی (Pooling) را دربر نمی گیرد.
جدول کنترل به دسته ای از جداول گفته می شود که اطلاعات لازم برای کنترل جریان برنامه یا بخشی از این اطلاعات را در خود ذخیره کرده است. اطلاعات این جدول جزء اطلاعات سطح بالای سیستم تعریف می شود و معمولاً فقط برنامه نویس متخصص یا مدیر سیستم دسترسی تغییر در ساختار آن را دارد. جدول کنترل معمولاً به صورت جدول نشان داده می شود زیرا دیدن اطلاعات در جدول آسانتر است و ساختار دو بعدی آن مناسب نشان دادن رابطه اطلاعات است، اما جدول کنترل محدود به فقط جدول نیست می توان جدول را با استفاده از ماشین حالات متناهی یا ماشین حالات UML نشان داد. در جدول های کنترل ساختار مشابه با ساختار شرطی و صدا زدن تابع وجود دارد و با استفاده از این جدول می توان از تکرار ساختارهای تکراری جلوگیری کرد. ساختار کلی. جدول کنترل می تواند یک بعدی، دو بعدی یا چند بعدی باشد. اندازه جدول می تواند ثابت یا متغیر باشد. همچنین این امکان وجود دارد که بتوان جدول را برای دستگاه های متعدد ساخت به این صورت که الگوریتم در جدول کنترل قرار بگیرد و برای هر دستگاه متناسب با آن دستگاه مفسر مناسب ساخته شود. برای ساخت این جدول می توان از روش های مختلفی مانند درهم سازی یا آد
رس دهی مستقیم استفاده کرد و برای برنامه جدول می توان از هر زبانی از جمله زبان های سطح بالا نیز استفاده کرد. می توان جدول را روی حافظه اصلی یا حافظه های جانبی ذخیره کرد ولی مکان جدول برای اجرای مفسر روی آن باید در کل زمان اجرای برنامه ثابت باشد. برای رسیدن به سرعت مناسب جدول کنترل باید در حافظه اصلی ذخیره شود. از این جدول برای تصمیم گیری سریع استفاده می کنند که سرعت اجرا را بسیار بالا می برد ولی نیاز به حافظه زیاد دارد و ساختارهای پیچیده را نمی توان با استفاده از آن تفسیر کرد. معمولاً جدول های ساخته شده برای تفسیر زبان ها نیاز به مهارت زیادی دارند و قابل استفاده در سیستم های مختلف نیستند و برای یک سیستم خاص طراحی می شوند، اما در صورت ساخته شدن جدول کنترل کوچک سرعت اجرای برنامه می تواند بسیار بهتر شود. جدول اسکی یک نمونه از جدول کنترل یک بعدی است، این جدول اطلاعات خام عددی را به نمادها و کاراکترها تبدیل می کند. همچنین جدول شاخه ای که کد زبان ماشین و شاخه ها در آن نوشته می شود یک نمونه از جدول کنترل یک بعدی است. از جدول های کنترل چند بعدی می توان برای پیاده سازی درخت های تصمیم و تصمیم های چند مرحله ای استفاده کر
د. کاربردها. جداول کنترل کاربردهای متعددی دارند، یک کاربرد اصلی آن هادر طراحی پردازنده ها و مفسرهاست، پردازنده ها و مفسرها می توانند از جداول کنترل برای مدیریت برنامه و کنترل جریان برنامه استفاده کنند. به طراحی پردازنده ها و مفسرها از این طریق طراحی با استفاده از جدول می گویند. در موارد دیگر می توان از جدول کنترل برای پیاده سازی زبان های مبتنی بر ماشین های حالت متناهی و پیاده سازی درخت های تصمیم گیری استفاده کرد. از جدول کنترل برای ساختن جدول جستجو نیز استفاده می شود. صفحات گسترده که برای ذخیره اطلاعات استفاده می شوند نیز می توانند یک نمونه از جدول کنترل باشند. مثال ها. می توان ساختار switch که در زبان های برنامه نویسی متعددی استفاده می شود را با استفاده از جدول جستجو که یک مثال از جدول کنترل است ساخت. مثلاً اگر برنامه بخواهد یک حرف ورودی از کنسول بخواند و بر حسب آن تصمیم بگیرد چه عملی انجام بدهد جدول زیر می تواند برای انجام این کار کمک کند: CT1 یک مثال دیگر از کاربرد این زبان ماشین IBM/360 است. این ماشین ۱۶MB حافظه قابل آدرس دهی دارد و برای بررسی کردن یک کاراکتر ۲۵۶ حالت مختلف وجود دارد که با استفاده از جدول
کنترل بررسی کاراکترها در ۲۶۵ خط کد قابل انجام است اما با استفاده از دستورهای مقایسه و شاخه شاخه کردن نیاز به ۵۱۲ خط کد دارد که با توجه به حجم کم حافظه در این ماشین روش اول بسیار بهتر است. * ---- interpreter ----* LM R14,R0,=A(4,CT1,N) Set R14=4, R15 --&gt; table, and R0 =no. of entries in table (N) TRY CLC INPUT1,0(R15) ********* Found value in table entry ? BE ACTION * loop * YES, Load register pointer to sub-routine from table AR R15,R14 * * NO, Point to next entry in CT1 by adding R14 (=4) BCT R0,TRY ********* Back until count exhausted, then drop through . default action … none of the values in table match, do something else LA R15,4(R15) point to default entry (beyond table end) ACTION L R15,0(R15) get pointer into R15,from where R15 points BALR R14,R15 Perform the sub-routine ("CALL" and return) B END go terminate this program * ---- control table ----* * | this column of allowable EBCDIC or ASCII values is tested '=' against variable 'input1' * | | this column is the 3-byte address of the appropriate
subroutine * v v CT1 DC C'A',AL3(ADD) START of Control Table (4 byte entry length) DC C'S',AL3(SUBTRACT) DC C'M',AL3(MULTIPLY) DC C'D',AL3(DIVIDE) N EQU (*-CT1)/4 number of valid entries in table (total length / entry length) DC C'?',AL3(DEFAULT) default entry - used on drop through to catch all INPUT1 DS C input variable is in this variable * ---- sub-routines ----* ADD CSECT sub-routine #1 (shown as separate CSECT here but might . alternatively be in-line code) . instruction(s) to add BR R14 return SUBTRACT CSECT sub-routine #2 . instruction(s) to subtract BR R14 return . etc.. مزایا و معایت. از مزایای جدول کنترل می توان به تمیز بودن و واضح بودن برنامه، قابلیت پیاده سازی روی دستگاه های متفاوت، انعطاف پذیری زیاد، استفاده مجدد و بهینه از ساختارهای تکراری، قابلیت گسترش، قابلیت فشرده سازی و میزان حافظه مورد نیاز کمتر اشاره کرد. اما در کنار این مزایا این جدول ها برخی معایب نیز دارند از جمله این که طراحی جدول ها بسیار سخت و وقت گیر است و نیاز به مهارت زیادی دارد، برخی تغییرات کوچک برنامه می تواند باعث ایجاد تغییر
ات عمده در ساختار جدول شود، همچنین همه ساختارهای پیچیده قابل پیاده سازی با استفاده از جدول کنترل نیستند.