<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های محمد جواد نجادی</title>
        <link>https://virgool.io/feed/@m.javadnejadi</link>
        <description>جونیور دیتاساینتیتست</description>
        <language>fa</language>
        <pubDate>2026-06-16 09:36:48</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/3036442/avatar/PkSfUL.jpg?height=120&amp;width=120</url>
            <title>محمد جواد نجادی</title>
            <link>https://virgool.io/@m.javadnejadi</link>
        </image>

                    <item>
                <title>قلب تپنده پردازش در عصر هوش مصنوعی: GPU</title>
                <link>https://virgool.io/@m.javadnejadi/%D9%82%D9%84%D8%A8-%D8%AA%D9%BE%D9%86%D8%AF%D9%87-%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D8%B4-%D8%AF%D8%B1-%D8%B9%D8%B5%D8%B1-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-gpu-yoitb8le83cf</link>
                <description>نگاهی عمیق به اینکه چگونه واحدهای پردازش گرافیکی، محاسبات پیچیده و دنیای هوش مصنوعی را متحول کردهاند.این تصویر، الهام گرفته از monolith در فیلم « 2001: A Space Odyssey,&#039;»، با استفاده از مدل &quot;ImageFX (Imagen 3)&quot; ایجاد شده است تا قدرت GPUها را به تصویر بکشد.هال: « میترسم، Dave. Dave ، ذهنم دارد از کار میافتد. میتوانم حسش کنم. میتوانم حسش کنم. ذهنم دارد از کار میافتد. هیچ شکی در آن نیست. میتوانم حسش کنم. میتوانم حسش کنم. من... میترسم...»فیلم 2001: A Space Odyssey (1968)چکیدهاین مقاله نقش حیاتی واحدهای پردازش گرافیکی (GPU) را در پیشرفت هوش مصنوعی بررسی میکند. با نگاهی به تاریخچه توسعه GPU از دهه 1980 تا به امروز، مقاله تفاوتهای اساسی بین GPUها و CPUها را برجسته کرده و به معماریهای پیشرفته اخیر مانند NVIDIA Blackwell اشاره میکند. این مقاله نشان میدهد که چگونه  GPUها، با قابلیتهای پردازش موازی گسترده خود، زمان و هزینه آموزش مدلهای پیچیده هوش مصنوعی را به طور قابل توجهی کاهش دادهاند. مقاله همچنین ساختار داخلی GPU ها را، از جمله هسته های پردازشی، واحد های حافظه و واحدهای رندر، را بررسی کرده و نقش آنها در تسریع محاسبات هوش مصنوعی تشریح میکند. در نهایت، این مقاله به چالشهای آینده و نوآوریهای بالقوه در این زمینه، از جمله توسعه تراشه های نورومورفیک و واحدهای پردازش تنسور (TPU)، پرداخته است. در پایان این سوال مطرح است که حرکت بعدی چیست ؟توجه: در پایان این مقاله، میتوانید به نسخه جذاب و شنیدنی پادکست این مقاله که با کمک پلتفرم هوش مصنوعی پیشرفته Notebooklm تولید شده است، دسترسی پیدا کنید. لینک این پادکست که در اسپاتیفای منتشر شده، در انتهای مقاله قرار گرفته است تا تجربهای متفاوت و کامل تر از محتوا را برایتان فراهم کند.مقدمهدر عصر هوش مصنوعی، یک قهرمان پنهان وجود دارد که انقلابی در پردازش دادهها ایجاد کرده است: واحد پردازش گرافیکی یا GPU. اگر در دنیای هوش مصنوعی (AI) فعالیت میکنید، احتمالاً با این مفهوم آشنا هستید. حتی اگر یک گیمر هستید، بدون آنکه بدانید، از قدرت GPUها برای ارتقای کیفیت بازیهای خود بهره بردهاید.در سال 2024، NVIDIA به یکی از مهمترین بازیگران صنعت فناوری تبدیل شده است، و این موفقیت را مدیون قدرت GPUهایش است. این پردازندههای قدرتمند، که قادر به انجام هزاران عملیات به طور همزمان هستند، نقشی حیاتی در آموزش و اجرای مدلهای زبانی بزرگ (LLMs) و بسیاری از الگوریتمهای هوش مصنوعی ایفا میکنند.اما سؤال اینجاست: GPU دقیقاً چیست و چگونه کار میکند؟ چرا برای هوش مصنوعی اینقدر حیاتی است؟ و با وجود قدرت GPUها در انجام محاسبات پیچیده، چرا همچنان برای آموزش مدلهای زبانی بزرگ به آنها نیاز داریم؟برای درک بهتر قدرت GPUها، بیایید یک مثال واقعی را در نظر بگیریم: آموزش مدل GPT-3، یکی از پیشرفتهترین مدلهای زبانی، با استفاده از GPUها حدود 34 روز طول کشید. حال تصور کنید اگر این آموزش با CPUهای معمولی انجام میشد، چقدر زمان میبرد؟ (اسپویلر: بسیار بیشتر!)در این مقاله، به عنوان یک پژوهشگر و نویسنده در حوزه هوش مصنوعی، تصمیم گرفتهام درک عمیقتری از نقش GPUها در این زمینه به دست آورم و نتایج تحقیقاتم را با شما به اشتراک بگذارم. با من همراه شوید تا به این سؤالات پاسخ دهیم و دریابیم چگونه این قطعات کوچک سیلیکونی، آینده هوش مصنوعی را شکل میدهند.تاریخچه GPU و کاربرد آن در هوش مصنوعیپیش از استفاده گسترده از GPUها، اجرای مدل های هوش مصنوعی (AI) عمدتاً بر روی CPU انجام می شد. این روش علاوه بر مصرف انرژی بیشتر، به دلیل محدودیت های پردازشی CPU ها، زمان زیادی برای آموزش مدل های پیچیده نیاز داشت. CPU ها به دلیل تعداد محدود هستهها و عدم توانایی در پردازش موازی گسترده، قادر به مدیریت مدلهای بزرگ و پیچیده نبودند.راهحل این مشکل، استفاده از تراشه های جدید بود: GPU.با رشد سریع مدل های هوش مصنوعی و افزایش نیاز به پردازش های موازی و سنگین، محققان به تدریج دریافتند که GPU ها به دلیل معماری موازی و هزاران هسته پردازشی که دارند، بسیار مناسب تر از  CPU ها برای این نوع پردازش ها هستند. در اواخر دهه 2000، استفاده از GPU ها برای تسریع فرآیند آموزش مدل های هوش مصنوعی رواج یافت و نتایج نشان داد که این تراشه ها می توانند زمان آموزش مدل ها را به طرز چشمگیری کاهش دهند.اما سوال اصلی اینجاست: تفاوت GPU و CPU در چیست و چرا GPU برای هوش مصنوعی بهتر عمل میکند؟تفاوت GPU و CPUسوالی که ممکن است مطرح شود این است که چرا برای کاربردهای هوش مصنوعی و کارهای گرافیکی به GPU نیاز داریم؟ تفاوت اصلی GPU با CPU در چیست؟تفاوت بین معماری CPUو GPU . منبع تصویر NVIDIA در واقع GPU (واحد پردازش گرافیکی) و CPU (واحد پردازش مرکزی) هر دو بخشهای اساسی سیستم های کامپیوتری هستند، اما برای وظایف متفاوتی طراحی شدهاند. CPU ها بیشتر برای اجرای برنامه های روزمره مانند مرور وب، اجرای سیستمعامل، و برنامه های اداری بهینه سازی شدهاند. این واحد ها قابلیت مدیریت وظایف پیچیده و متنوع را دارند و برای اجرای کارهای عمومی و چند وظیفه ای مناسب هستند.تفاوت کلیدی بین این دو، ساختار و تعداد هسته های آن هاست.  CPU ها دارای تعداد کمی هسته پردازشی (معمولاً بین 2 تا 16 هسته) هستند که هر کدام قدرت پردازشی بالایی دارند و میتوانند وظایف را به صورت ترتیبی پردازش کنند. این ویژگی باعث میشود که CPU برای محاسبات ترتیبی و اجرای برنامههای عمومی مناسب باشد.در مقابل، GPU ها به دلیل داشتن تعداد زیادی هسته های کوچک تر (معمولاً هزاران هسته) قادر به انجام پردازشهای موازی هستند. این قابلیت به GPU اجازه می دهد تا همزمان تعداد زیادی وظیفه را پردازش کند، که این امر برای rendering گرافیکی و محاسبات علمی، بهویژه در حوزه هایی مانند هوش مصنوعی و یادگیری ماشین، بسیار کارآمد است. در واقع، این پردازش موازی باعث میشود که GPU ها بتوانند مدلهای هوش مصنوعی را سریع تر و کار آمدتر آموزش دهند.تفاوت دیوانه کننده!برای روشن کردن تفاوت بین GPU و CPU در آموزش مدل های هوش مصنوعی، از یک مثال مستند استفاده می کنیم. یکی از بهترین مثال ها، مدل GPT-3 است که تا سال 2022 یکی از بزرگ ترین مدلهای زبانی شناخته میشد. برای آموزش این مدل، از 10,000 GPU  NVIDIA V100استفاده شد و زمان آموزش آن حدود 34 روز طول کشید. هزینه تخمینی آموزش این مدل حدود 4.6 میلیون دلار بود و حجم محاسبات انجامشده تقریباً 3.14E23 FLOPs (عملیات نقطه شناور) بود.حال تصور کنید که این آموزش قرار بود با CPU انجام شود. نتایج به شکل زیر خواهد بود:سرعت پردازش (FLOPs):- یک GPU NVIDIA V100 قادر است حدود 15.7 ترافلاپس (TFLOPs) در محاسبات FP32 انجام دهد.- یک CPU سرور مدرن (e.g., Intel Xeon Platinum 8180) حدود 0.6 ترافلاپس در محاسبات FP32 دارد.بنابراین، یک GPU حدود 26 برابر سریع تر از یک CPU است (15.7 / 0.6 ≈ 26).زمان آموزش:- آموزش GPT-3 با 10,000 GPU در 34 روز انجام شد.- اگر این کار با CPU انجام می شد، زمان مورد نیاز حدود 26 برابر بیشتر می شد.- بنابراین، زمان آموزش با CPU به طور تقریبی 884 روز یا حدود 2.4 سال خواهد بود (34 روز × 26 = 884 روز).هزینه آموزش:- هزینه آموزش با GPU حدود 4.6 میلیون دلار بود. اگر این آموزش با CPU انجام میشد، با توجه به زمان بیشتر و نیاز به سخت افزارهای اضافی، هزینه به مراتب بیشتر میشد.- اگر هزینه به نسبت زمان افزایش یابد، هزینه آموزش با CPU میتواند حدود 26 برابر بیشتر باشد، یعنی حدود 119.6 میلیون دلار (4.6 میلیون دلار × 26 = 119.6 میلیون دلار).حجم محاسبات (FLOPs):- حجم محاسبات مورد نیاز همان 3.14E23 FLOPs باقی میماند، زیرا حجم دادهها و پارامترهای مدل تغییر نمیکند. اما انجام این محاسبات با CPU نیاز به زمان بسیار بیشتری دارد.این مقایسه نشان میدهد که استفاده از CPU برای آموزش مدلهای بزرگ مانند GPT-3 بسیار ناکارآمدتر است و به مراتب زمان و هزینه بیشتری نیاز دارد. نمودار زیر مقایسه کامل را به نمایش میگذارد و تفاوتهای برجسته بین استفاده از GPU و CPU را به وضوح نشان میدهد.نمودار 1: تفاوت بسیار زیاد از نظر سرعت و هزینه و مقدار محاسبات و زمان برای مقایسه بین استفاده از GPU و CPU برای اموزش LLM ها. منبع : این نمودار توسط خودم و با استفاده از توضیحتی که در بالا ذکر شد رسم شده است.آغاز داستان  GPUهادر دهههای 1980 و 1990، توسعه  GPUها به تدریج آغاز شد. اولین قدمهای مهم در این زمینه توسط شرکت Texas Instruments (TI)  برداشته شد. در سال 1986، TI با معرفی  TMS34010، یکی از اولین پردازندههای گرافیکی برنامه پذیر، آغازگر تحولات اولیه در زمینه GPU ها بود.در سال 1999، 3Dlabs تحول بزرگی را با معرفی GLINT، اولین GPU واقعی طراحی شده برای rendering گرافیک های 3D، به ارمغان آورد. این اقدام به طور چشمگیری به پیشرفت های گرافیکی در صنعت کمک کرد و نقطه عطفی در توسعه GPU ها بود.همان سال، NVIDIA نیز با معرفی GeForce 256 (NV10 ، که به عنوان اولین GPU شناخته میشود، قدم بزرگی برداشت. این GPU شامل پردازش و نورپردازی سختافزاری بود و به طور مشخص اولین نشانه های تجاری بودن  GPUها را به نمایش گذاشت. با این معرفی، NVIDIA به طور مؤثر وارد بازار GPU ها شد و نقش کلیدی در توسعه و گسترش این تکنولوژی ایفا کرد.ورود بازیگران اصلیبا آغاز دهه 2000، NVIDIA بهطور جدی وارد میدان رقابت شد. در سال 2001، NVIDIA با معرفی GeForce3 (NV20)، اولین GPU سازگار با DirectX 8، تغییرات مهمی را در صنعت گرافیک به وجود آورد. این GPU ویژگیهای پیشرفته ای مانند شیدرهای برنامه پذیر را ارائه داد که به توسعه دهندگان بازی اجازه میداد جلوه های بصری پیچیده تر و واقع گرایانه تری ایجاد کنند.سال بعد، NVIDIA با عرضه سری  GeForce4 ، با بهبودهای معماری و پشتیبانی از چندین مانیتور، تجربه کاربری را به سطح جدیدی رساند. این قابلیت به کاربران این امکان را میداد که محیط کاری خود را گسترش دهند و به صورت هم زمان چندین برنامه یا پنجره را اجرا کنند، که به ویژه در محیط های چند وظیفه ای و برای افزایش بهره وری بسیار مفید بود.در سال 2003، NVIDIA با معرفی سری  GeForce FX 5000 ، سازگار با  DirectX 9 ، به بهبود قابل توجهی در rendering گرافیک دست یافت. این سری قابلیت های جدیدی برای افزایش واقع گرایی و کیفیت گرافیکی بازی ها و نرم افزار های گرافیکی ارائه داد.در همین زمان،  ATI  (که اکنون به  AMD  تغییر نام داده است) نیز در سال 2002 با انتشار   Radeon 9700 (R300) ، اولین GPU سازگار با DirectX 9، تحولی بزرگ در زمینه عملکرد گرافیکی ایجاد کرد و استاندارد جدیدی در این صنعت تعیین کرد.ورود به دنیای محاسبات عمومیدر دهه 2000 تا 2010،  GPUها از دنیای صرفاً گرافیکی فراتر رفتند و وارد عرصه محاسبات عمومی شدند. در سال 2006، NVIDIA با معرفی CUDA (Compute Unified Device Architecture)، یک پلتفرم محاسباتی موازی و مدل برنامه نویسی جدید، تحول بزرگی ایجاد کرد. CUDA این امکان را فراهم کرد که توسعه دهندگان بتوانند از قدرت پردازش موازی GPU ها برای اجرای وظایف محاسباتی عمومی مانند شبیه سازیهای علمی، تحلیل دادهها و حتی آموزش مدل های هوش مصنوعی استفاده کنند. این پیشرفت استفاده از  GPU ها در بسیاری از زمینه های غیر گرافیکی را هموار کرد.در همین زمان، ایتیآی/AMD نیز در سال 2007 با معرفی سری Radeon HD 2000، یک گام بزرگ برداشت. آنها با ارائه معماری شیدر های واحد، به  GPU ها این امکان را دادند که همه انواع شیدرها (رأس، پیکسل و هندسه) را تحت یک معماری یکپارچه پردازش کنند. این معماری جدید قابلیت های بهبود یافته ای برای پردازش موازی و محاسبات عمومی فراهم کرد، که به ویژه در کاربردهای علمی و هوش مصنوعی مؤثر بود.این تحولات، GPU ها را به ابزارهای چند کاره تری تبدیل کرد و موجب شد تا در حوزههایی مانند هوش مصنوعی، یادگیری عمیق، و تحلیل داده های بزرگ، به عنوان قطعه های حیاتی و کارآمد مطرح شوند.دوران مدرن و ادغام AIاز دهه 2010 به بعد،  GPU ها وارد دوران جدیدی از تحولات شدند که نقش مهمی در پیشرفت های محاسباتی و هوش مصنوعی ایفا کردند.این تصویر معماری یک GPU از سری &quot;Fermi&quot; انویدیا را به تصویر میکشد و اجزای کلیدی مانند زمانبندهای warp، هستههای پردازش موازی و حافظه مشترک را برجسته میکند. source در سال 2010، NVIDIA با معرفی معماری Fermi (microarchitecture) (GeForce 400 series) تمرکز خود را بهبود دقت دوگانه و محاسبات عمومی معطوف کرد. Fermi اولین بار پردازش موازی و محاسبات پیچیده را به GPU ها معرفی کرد که به طور چشمگیری سرعت پردازش دادهها را افزایش داد.در سال 2016، معماری Pascal (microarchitecture) (GeForce 10 series ) معرفی شد که بهبودهای قابل توجهی در بهره وری انرژی را به همراه داشت.این نمودار معماری داخلی یک چندپردازنده استریمینگ (SM) را در یک واحد پردازش گرافیکی (GPU) مبتنی بر پاسکال انویدیا به تصویر میکشد. SM شامل هستههای پردازشی، واحدهای محاسباتی تخصصی، حافظههای کش و یک سیستم مدیریت دستورات است. این معماری به GPU ها این امکان را داد که با مصرف انرژی کمتر، عملکرد بهتری داشته باشند. همچنین، Pascal به طور خاص برای بارهای کاری مرتبط با هوش مصنوعی (AI Workloads) طراحی شده بود و توانایی پردازش مدلهای پیچیده یادگیری ماشین را بهبود بخشید. این ویژگی ها به توسعه دهندگان کمک کرد تا از GPU ها برای محاسبات علمی و تحقیقاتی پیشرفته بهره برداری کنند.در سال 2019، NVIDIA با معرفی معماری Turing (microarchitecture) (GeForce RTX Super) وارد مرحله جدیدی از پیشرفت شد.ساختار داخلی یک چندپردازنده استریمینگ (SM) در معماری مدرن GPUهای انویدیا. این نمودار اجزای کلیدی مانند حافظه کش دستورات، زمانبند warp، واحد توزیع، فایل ثباتها، هستههای پردازشی متنوع (FP64، INT، FP32)، هستههای تنسور و واحدهای بارگذاری/ذخیرهسازی (LD/ST) را به تصویر میکشد. این معماری با قابلیت ردیابی پرتو در زمان واقعی (Real-Time Ray Tracing) و هستههای Tensor (Tensor Cores)، به تولید تصاویر با کیفیت و واقع گرایانه تر پرداخت و توانایی های AI را بهبود داد. هستههای Tensor برای انجام محاسبات ماتریسی سریع در پردازشهای AI و یادگیری ماشین طراحی شدهاند. همچنین، هستههای RT برای پردازش عملیات های پیچیده ردیابی پرتو و شبیه سازی نور و سایه ها توسعه یافته اند که به تولید تصاویر با کیفیت تر کمک می کند.کمپانی AMD نیز در سال 2013 با معرفی سری Radeon R9 بر روی بازیهای با عملکرد بالا و وظایف گرافیکی حرفهای تمرکز کرد. در سال 2019، معماری RDNA (microarchitecture) (Radeon RX 5000 series) با تمرکز بر عملکرد و بهره وری بازی معرفی شد. سال بعد، RDNA 2 (Radeon RX 6000) با قابلیتهای ردیابی پرتو سخت افزاری و پیشرفت های AI به بازار آمد، که نشان دهنده تعهد AMD به ارائه  GPU های پیشرفته برای کاربردهای مختلف است.در ادامهی بحث دربارهی معماریهای مختلف GPU که پیشتر به آنها پرداختیم، جدول زیر مقایسهای جامع بین پنج معماری کلیدی  Fermi، Pascal، Turing، RDNA و RDNA 2 ارائه میدهد. این جدول به طور خلاصه ویژگیهای اصلی، تمرکز و کاربردهای هر معماری را نشان میدهد.شکل ۶: تحلیل مقایسهای معماریهای GPU از نظر تمرکز اصلی، ویژگیهای کلیدی، بهرهوری انرژی، پشتیبانی از ریتریسینگ، هستههای تنسور و دامنههای کاربردی. (منبع: نویسنده) این تحولات، از جمله پیشرفتهای چشمگیر در سخت افزار و نرمافزار، مشارکت های کلیدی شرکت هایی مثل NVIDIA، AMD و 3Dlabs، نشاندهنده تکامل مداوم GPU ها از شتاب دهنده های گرافیکی ساده به واحدهای محاسباتی عمومی قدرتمند است. با این پیشرفت ها، GPU ها به ابزارهای ضروری برای وظایف مدرن AI و محاسبات با عملکرد بالا تبدیل شدهاند. در قسمت بعدی مقاله، به بررسی نقطه اوج این تحولات خواهیم پرداخت. با من همراه باشید.انفجار محاسباتی تکامل GPU ها در زمینه محاسبات هوش مصنوعی (AI) از اواخر دهه 2000 تا به امروز به طور چشم گیری تغییر کرده است. در سال 2009، محققان دریافتند که GPU ها می توانند سرعت آموزش شبکه های عصبی را تا 70 برابر افزایش دهند. این یافته آغازگر  تحولی بزرگ در استفاده از  GPU ها برای محاسبات علمی و AI بود.در اوایل دهه 2010، NVIDIA نقش مهمی در ترویج پذیرش گستردهی GPU ها در صنعت و تحقیقات علمی ایفا کرد. آنها اولین GPU با هستههای Tensor را معرفی کردند که به طور خاص برای محاسبات علمی و AI طراحی شده بود. معرفی معماری Pascal و کارت گرافیکی P100 در سال 2016 به بهبودهای قابل توجهی در عملکرد و بهینهسازی برای وظایف یادگیری عمیق انجامید.اوایل دهه 2020 نقطه عطف دیگری در این تکامل بود، با طراحی معماریهای پیشرفتهای مانند Volta، Ampere و Hopper که به طور خاص برای کاربردهای AI ساخته شده بودند. V100، که بر اساس معماری Volta و در سال 2017 معرفی شد، به طور قابل توجهی عملکرد هستههای تنسور را برای محاسبات AI بهبود بخشید. سپس در سال 2020، کارت گرافیکی A100 از معماری Ampere جهش بزرگی در قدرت محاسباتی و بهینهسازی برای مدلهای زبانی بزرگ (LLMها) ارائه داد. پس از آن، GPU H100 که در مارس 2022 با معماری Hopper معرفی شد، به طور خاص بر روی AI و یادگیری عمیق متمرکز بود.کارت گرافیک NVIDIA H200 Tensor Core به عنوان جانشین H100 معرفی شده و بهبود های قابل توجهی را برای Generative AI و محاسبات با کارایی بالا (HPC) ارائه میدهد. یکی از ویژگی های برجسته این GPU، حافظه 141 گیگابایتی از نوع HBM3e با پهنای باند 4.8 ترابایت بر ثانیه است، که به طور قابل ملاحظه ای سریع تر از مدل قبلی یعنی H100 است. این افزایش عملکرد به ویژه برای مدل های زبانی بزرگ مانند GPT-3 و LLaMA 2 اهمیت دارد و میتواند سرعت اجرای وظایف مربوط به آن ها را به ترتیب 1.6 برابر و 1.9 برابر افزایش دهد.علاوه بر این، H200 بخشی از پیشرفتهای مستمر NVIDIA در معماری Hopper است و در سوپرچیپ جدید NVIDIA GH200 Grace Hopper Superchip مورد استفاده قرار میگیرد. این سوپرچیپ دارای مدل حافظه یکپارچهای بین CPU و GPU است که از فناوریNVIDIA® NVLink®-C2C برای تسریع در کاربردهای AI و HPC استفاده میکند. این سیستم تا 10 برابر عملکرد بالاتری را برای کاربردهایی که با ترابایتها داده سر و کار دارند، ارائه میدهد. ادغام این GPU با پردازندههای Grace امکان ارتقاء مقیاس پذیر را بدون نیاز به تغییرات عمده در زیر ساخت های موجود فراهم میکند، که آن را به انتخابی مناسب برای افزایش بارهای کاری AI تبدیل میکند.کارت گرافیک NVIDIA GH200 NVL2 به طور کامل دو سوپر چیپ GH200 را با استفاده از فناوری NVLink به طور کامل به هم متصل میکند و تا 288 گیگابایت حافظه با پهنای باند بالا، 10 ترابایت بر ثانیه پهنای باند حافظه، و 1.2 ترابایت حافظه سریع را فراهم میآورد. این سیستم که از امروز در دسترس است، تا 3.5 برابر ظرفیت حافظه GPU و 3 برابر پهنای باند بیشتر از NVIDIA H100 Tensor Core GPU در یک سرور فراهم میکند که برای وظایف با نیاز به حافظه بالا و محاسباتی بسیار سنگین ایدهآل است.معماری NVIDIA Blackwell بهعنوان جانشین معماری Hopper می باشد. این معماری با استفاده از 208 میلیارد ترانزیستور و دو چیپ متصل با پهنای باند 10 ترابایت بر ثانیه، قدرت پردازشی فوقالعادهای را به کاربران ارائه میدهد و به طور ویژه برای پردازش مدلهای پیچیده AI مانند LLMs و مدلهای Mixture-of-Experts (MoE) طراحی شده است. استفاده از نسل دوم Transformer Engine و هستههای Tensor، موجب افزایش دقت و سرعت در پردازش مدلهای بزرگ میشود.یکی دیگر از ویژگیهای برجسته ی Blackwell، امنیت آن است که از طریقConfidential Computing و قابلیت TEE-I/O تضمین میشود. این معماری با بهینه سازی و تسریع در پردازش های شتاب دهی شده، در نسخه های مختلف GB200، B200 و B100 عرضه شده که هرکدام برای نیازهای خاص طراحی شده اند.به گفتهی Jensen Huang، مدیرعامل NVIDIA ، معماری Blackwell میتواند عملکرد استنتاج را تا 50 برابر بهبود دهد و در ترکیب با مدل جدید OpenAI o1، زمان استدلال مدل ها را از چند دقیقه به چند ثانیه کاهش دهد. https://www.youtube.com/live/r-xmUM5y0LQ?si=uw80ajKVSOzUH3SZ در جدول زیر به مقایسهی معماریهای مختلف و تکامل گرافیک پردازشی NVIDIA از سال 2016 تا 2024 پرداختهام. از معماری Pascal تا Blackwell، هر معماری تحسین های قابل توجهی در کارایی، ظرفیت محاسباتی و کاربرد های هدفمند برای هوش مصنوعی و یادگیری عمیق را به نمایش گذاشته است.جدول زمانی و مقایسهی ویژگیهای کلیدی معماریهای GPU از NVIDIA، نشاندهنده پیشرفتهای تکنولوژیکی و کاربردهای متنوع آنها در پردازش هوش مصنوعی و یادگیری عمیق.رشد سریع در توسعه و استفاده از مدلهای زبانی بزرگ (LLMها) و دیگر کاربردهای هوش مصنوعی با نیازهای محاسباتی بالا، به ویژه توسط شرکتهای بزرگ مانند Google، Microsoft و OpenAI که از GPU های NVIDIA برای آموزش مدلهای خود استفاده میکنند، موفقیت NVIDIA در این حوزه را برجسته میکند. علاوه بر این، سرمایه گذاری قابل توجه NVIDIA در تحقیق و توسعه CUDA و کتابخانه های مرتبط به آن کمک کرده است تا این شرکت در صدر بازار GPU های AI باقی بماند. کارت گرافیک GPU چیست؟در بخشهای قبلی، به بررسی تاریخچه و اهمیت GPU پرداختیم. اکنون میخواهیم بررسی کنیم که اجزای GPU چه هستند و چرا این اجزا آن را برای پردازش های سنگین و محاسبات پیچیده بسیار مناسب میسازند.هستههای پردازشی (Cores)هستههای پردازشی در GPU از هزاران هسته کوچک تشکیل شدهاند که به صورت موازی کار میکنند. هر هسته میتواند عملیاتهای ریاضی ساده مانند جمع، تفریق، ضرب و تقسیم ماتریسها و بردارها را به صورت همزمان انجام دهد. این هستهها به طور یکپارچه در یک چیپ سیلیکونی قرار دارند و اجازه میدهند که تعداد زیادی عملیات به صورت همزمان انجام شود.این ویژگی بهویژه برای یادگیری ماشین و AI اهمیت دارد. مدلهای پیچیده مانند شبکه های عصبی عمیق (Deep Neural Networks) به پردازش همزمان و موازی حجم بالایی از دادهها نیاز دارند. برای مثال، در آموزش مدلهای یادگیری عمیق برای تشخیص تصاویر، هر هسته از GPU میتواند بخشی از عملیات پردازش دادههای تصویری را انجام دهد و به این ترتیب هزاران تصویر به طور همزمان پردازش میشود. این توانایی هسته های پردازشی GPU، باعث میشود که سیستم های پیشرفته ای مانند خودروهای خودران یا تشخیص پزشکی از روی تصاویر پزشکی قادر به ارائه نتایج دقیق در زمان کوتاهی باشند.واحدهای حافظه (Memory Units)واحدهای حافظه در GPU ها به منظور دسترسی سریع به دادهها طراحی شدهاند و شامل حافظههای پیشرفتهای مانند GDDR (Graphics Double Data Rate) و HBM (High Bandwidth Memory) هستند. این حافظه ها با پهنای باند بالا، به GPU اجازه می دهند که داده ها را با سرعت بسیار بالا بخواند و پردازش کند، که این ویژگی بهویژه در حوزه هوش مصنوعی حائز اهمیت است.حافظه GDDR، به ویژه GDDR6، به دلیل نرخ دادهای تا 16 گیگابیت بر ثانیه، با طراحی بهینهسازی شده، سرعت بالای انتقال داده ها و زمان تأخیر پایین، به GPU این امکان را می دهد که داده های زیادی را همزمان پردازش کند و بارهای سنگین محاسباتی را مدیریت نماید.منبع: این حافظه برای الگوریتم های یادگیری عمیق و پردازش داده های بزرگ نیز حیاتی است و بهعنوان یک گزینه مقرون به صرفه برای کاربرد های هوش مصنوعی در مقیاس کوچک و میان رده به کار میرود. کارت های گرافیکی مدرن، مانند NVIDIA RTX 30، از GDDR6 استفاده میکنند که نشاندهنده تطابق این نوع حافظه با نیازهای روزافزون محاسباتی است.در مقابل، حافظه HBM با طراحی عمودی و چند لایه ای خود، ظرفیت و پهنای باند بسیار بالاتری را ارائه می دهد. نسلهای فعلی مانند HBM2 و HBM2E قادر به فراهم کردن پهنای باندی بیش از 2.0 ترابایت بر ثانیه هستند. این ویژگی ها باعث می شوند که HBM برای کاربرد های هوش مصنوعی و یاد گیری عمیق ایدهآل باشد، زیرا این حوزه ها نیاز به پردازش سریع حجم بالای داده ها دارند. همچنین، HBM به کاهش مصرف انرژی کمک کرده و سرعت پردازش را افزایش میدهد، که این ویژگیها در سناریوهای محاسباتی با عملکرد بالا بسیار مهم هستند.مقایسه ویژگیهای GDDR و HBM:منبع : perplexityدر نتیجه، GDDR و HBM هر دو نقش های حیاتی در محاسبات هوش مصنوعی ایفا میکنند، اما نیازهای متفاوتی را بر اساس طراحی های ساختاری و ویژگی های عملکردی خود تأمین میکنند. GDDR به دلیل هزینه پایین و عملکرد کافی برای کاربردهای هوش مصنوعی در مقیاس کوچک و میان رده، همچنان مورد استفاده قرار میگیرد. در مقابل، HBM در سناریوهای محاسباتی با عملکرد بالا که در آنها پهنای باند و کارایی برای پردازش مدل های پیچیده هوش مصنوعی، مانند یادگیری عمیق و مدلهای بزرگ زبان، اهمیت بالایی دارند، ترجیح داده میشود. با پیشرفت فناوری، هر دو نوع حافظه به تطابق با نیازهای روزافزون در زمینه هوش مصنوعی ادامه میدهند.واحدهای رندرینگ (Rendering Units)واحدهای Rendering در GPU ها برای تولید تصاویر 3D با کیفیت و سرعت بالا طراحی شدهاند. این واحد ها قادر به تولید تصاویر با جزئیات بسیار دقیق و انیمیشن های روان هستند، که تجربه کاربری در بازی های کامپیوتری را بهبود می بخشد.در زمینه AI، واحدهای Rendering نقش کلیدی در تجسم و تحلیل داده های پیچیده دارند. برای مثال، هنگام آموزش مدل های یادگیری عمیق، نتایج مدل ها ممکن است شامل نقشه های حرارتی یا تجسمات 3D از داده ها باشد. واحد های Rendering امکان تجسم دقیق و در زمان واقعی نتایج را فراهم میکنند. به طور خاص، در شبیه سازی حرکت ذرات یا تجزیه و تحلیل رفتار سیالات، واحد های Rendering به ایجاد و مدیریت مدل های پیچیده 3D کمک میکنند.واحدهای Rendering شامل دو بخش اصلی هستند:- واحدهای پردازش ورتکس (Vertex Processing Units): این واحدها مسئول پردازش نقاط (Vertex) در فضای 3D هستند که با هم ترکیب میشوند تا اشیاء 3D را تشکیل دهند. عملیات هایی که این واحدها انجام می دهند شامل تغییر مکان، چرخش و تغییر مقیاس نقاط است. دادههای 3D به مختصات 2D تبدیل میشوند تا روی صفحه نمایش داده شوند. برای مثال، در محیطهای شبیه سازی و واقعیت مجازی، این واحدها بهطور مؤثر برای ایجاد و مدیریت اشیاء 3D در زمان واقعی استفاده میشوند. بدون وجود این واحدها، ایجاد و مدیریت مدلهای پیچیده 3D در تحلیل دادهها، بهویژه در کاربردهای AI، بسیار دشوار و کند می شود.- واحد های پردازش پیکسل (Pixel Processing Units): این واحد ها وظیفه پردازش و رنگ آمیزی پیکسل ها را دارند. پیکسل ها نقاط کوچکی هستند که در مجموع تصویر نهایی را تشکیل میدهند. واحد های پردازش پیکسل عملیات هایی مانند شیدینگ (Shading) و تکسچر (Texture) را انجام میدهند. عملیات Shading برای ایجاد نمودارها و گرافهای 3D با نورپردازی واقعی است که تحلیل داده ها را تسهیل میکند و به بهبود دقت در شناسایی اشیا کمک میکند. عملیات Texture برای ایجاد محیط های مجازی با جزئیات بالا در تمرین ها و آموزش های شبیه سازی کاربرد دارد و بهبود تحلیل تصاویر با افزودن جزئیات سطحی بیشتر که در تشخیص الگوها مفید است. بدون واحدهای پردازش پیکسل، انجام این عملیات ها به CPU محول میشد که به دلیل کمبود هسته های پردازشی موازی، سرعت و کیفیت Rendering به شدت کاهش می یافت و تجربه کاربری در بازی ها و کاربردهای AI به طور قابل توجهی ضعیف تر می شد.واحدهای محاسباتی (Compute Units)واحدهای محاسباتی (Compute Units) در GPUها برای اجرای پردازشهای سنگین و پیچیده طراحی شدهاند. این واحدها توانایی انجام محاسبات موازی و همزمان دارند که در زمینههای مختلف، از جمله یادگیری ماشین، شبیه سازی های فیزیکی و هوش مصنوعی کاربرد دارند. برای مثال، در آموزش مدلهای یادگیری عمیق مانند  GPT-4، هزاران GPU به صورت همزمان حجم عظیمی از دادههای متنی را پردازش میکنند. این پردازش موازی امکان آموزش سریعتر مدلها را فراهم میکند.بدون قدرت محاسباتی موازی  GPUها، آموزش مدلهای پیچیدهای مانند GPT-4 ممکن است سالها طول بکشد. با این حال، استفاده از GPUها باعث میشود که این فرآیند در عرض چند ماه تکمیل شود. این واحدها علاوه بر افزایش سرعت پردازش، بهینهسازی مصرف انرژی را نیز در نظر میگیرند تا بتوانند در کنار سرعت بالا، کارایی مناسبی ارائه دهند.واحدهای محاسباتی همچنین با واحدهای حافظه و رندرینگ در GPU همکاری میکنند تا انتقال دادهها با سرعت بالا و بدون تأخیر صورت گیرد. این تعاملات پیچیده میان واحدهای مختلف GPU باعث میشود که آموزش مدلهای هوش مصنوعی، شبیهسازیهای پیشرفته و پردازش دادههای پیچیده به صورت مؤثر انجام شوند.نتیجه گیریدر این مقاله، به بررسی GPU ها و نقش حیاتی آنها در محاسبات مدرن، به ویژه در زمینه هوش مصنوعی (AI) پرداختیم. موفقیت مدلهای زبان بزرگ (LLM) و مدلهای تولید تصویر و ویدئو به توانایی پردازش سریع دادهها وابسته است. بهعنوان مثال، کارایی مدل  OpenAI-o1 با افزایش سرعت پردازندهها و کاهش زمان پاسخها، به طرز چشمگیری بهبود میابد . همچنین، مدل جدید Llama 3.2 از متا با استفاده از GPU های بیشتراموزش دیده و مدل بزرگتر شده است و قابلیت های آن افزایش یافته است. همچنین معماری Blackwell سرعت پردازش را به شدت افزایش خواهد داد.آیندهی هوش مصنوعی با توسعه تراشه های نورومورفیک که شبیه به عملکرد مغز انسان عمل میکنند، میتواند مرزهای قابلیتهای AI را گسترش دهد. OpenAI نیز در حال تولید تراشههای اختصاصی خود با همکاری TSMC است تا نیازهای محاسباتی فزایندهاش را برآورده کند. واحد پردازش تنسور (TPU) گوگل نیز به عنوان یک بازیگر مهم در محاسبات یادگیری عمیق شناخته می شود. که با تکنولوژی AlphaChip، که توسط شرکت DeepMind  توسعه یافته یافته که بهعنوان ابزاری برای طراحی و تولید تراشه های بهینه و کارآمد در زمینه هوش مصنوعی در نظر گرفته شده، به تحقق قابلیتهای جدید در محاسبات هوش مصنوعی کمک میکند. این فناوری میتواند به توسعه معماری های جدید و بهبود کارایی مدلهای یادگیری عمیق کمک شایانی کند.در نهایت، تغییر به سمت معماریهای نورومورفیک و فناوریهای جدید نمایانگر تحولی در طراحی محاسباتی است که ممکن است دستیابی به هوش عمومی مصنوعی (AGI) را تسهیل کند. با هر پیشرفت در این فناوریها، به آیندهای نزدیکتر میشویم که ماشینهای هوشمند قادر به یادگیری و استدلال مانند انسانها هستند.از اینکه در این سفر به دنیای محاسبات و سختافزار هوش مصنوعی با من همراه بودید، سپاسگزارم و منتظر نظرات شما درباره این مقاله هستم! https://open.spotify.com/show/7kZxWPAnHHJQ6btZzVk6g0 ممنون از شما که در این سفر به دنیای Deeps با من همراه بودید.لینک انگلیسی  مقاله در  Mediumلطفا اگر مایل بودید مقاله دیگر من&quot; شکستن  مرزها با LLM-T-B: توسعه کد و یک مفهوم جامع برای ساخت یک ربات تلگرام که  میتواند برای وظایف مختلف در تمامی کسب و کارها استفاده شود.&quot; رو در ویرگول ببینید .مرز باریک بین واقعیت و خیال: با ۱۰ مدل استخراجشده از GANs آشنا شوید!امیدوارم از مطالب لذت برده باشید .</description>
                <category>محمد جواد نجادی</category>
                <author>محمد جواد نجادی</author>
                <pubDate>Sat, 28 Sep 2024 13:32:06 +0330</pubDate>
            </item>
                    <item>
                <title>شکستن مرزها با LLM-T-B: توسعه کد و یک مفهوم جامع برای ساخت یک ربات تلگرام که می‌تواند برای وظایف مختلف در تمامی کسب و کارها استفاده شود.</title>
                <link>https://virgool.io/@m.javadnejadi/%D8%B4%DA%A9%D8%B3%D8%AA%D9%86-%D9%85%D8%B1%D8%B2%D9%87%D8%A7-%D8%A8%D8%A7-llm-t-b-%D8%AA%D9%88%D8%B3%D8%B9%D9%87-%DA%A9%D8%AF-%D9%88-%DB%8C%DA%A9-%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%AC%D8%A7%D9%85%D8%B9-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%B3%D8%A7%D8%AE%D8%AA-%DB%8C%DA%A9-%D8%B1%D8%A8%D8%A7%D8%AA-%D8%AA%D9%84%DA%AF%D8%B1%D8%A7%D9%85-%DA%A9%D9%87-%D9%85%DB%8C-%D8%AA%D9%88%D8%A7%D9%86%D8%AF-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%88%D8%B8%D8%A7%DB%8C%D9%81-%D9%85%D8%AE%D8%AA%D9%84%D9%81-%D8%AF%D8%B1-%D8%AA%D9%85%D8%A7%D9%85%DB%8C-%DA%A9%D8%B3%D8%A8-%D9%88-%DA%A9%D8%A7%D8%B1%D9%87%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%B4%D9%88%D8%AF-nkl0kkvojbmq</link>
                <description>ما با بهره‌گیری از هوش مصنوعی نوآورانه، به ویژه LLMها، مراکز تماس و ارتباطات مشتریان را به سطح جدیدی از پیشرفت می‌رسانیم.این تصویر در Ideogram با پرامپت من تولید شده است. قدرت LLM-T-B را در آن مشاهده می کنید.نکته: قبل از شروع این مقاله این نکته مهم را باید بیان کنم که هدف از مطرح کردن این ایده و تلاش برای توسعه آن از بین بردن شغل Call Center و یا هر شغل دیگری را که می توان با آن تحت تاثیر قرار داد نیست و تنها هدف این ایده بالا برده بهره وری با استفاده از ابزارهای جدید در AI است. این امر باعث بهتر شدن وضعیت کاری افراد شاغل در Call Center و یا هر شغل دیگری که از LLM-T-B استفاده کند و رضایت بیشتر مشتریان را به همراه خواهد داشت.&quot;از همه کسانی که این مقاله را مطالعه کردند و همه توسعه دهندگان و مشتاقان یادگیری AI درخواست میکنم  که در صورتی که تمایل به کار و توسعه LLM-T-B  دارند. در مدیوم یا لینکدین با من در ارتباط باشند تا بتوانیم محصولی را توسعه دهیم که در آینده نزدیک بازی را تغییر دهد. کد کامل LLM-T-B که در این مقاله مطرح شد را بزودی در گیت هاب خودم منتشر خواهد شد. &quot;مقدمهیکی از مهم ترین و پر اهمیت ترین بخش های سازمان های بزرگ و کوچک Call Center ها هستند. Call Center مانند بخش اورژانس بیمارستان هاست. نوک پیکان ارتباط مشتریان با کمپانی ها. قیاس آن با اورژانس به این خاطر است که اکثر Call Center ها مانند اورژانس 24 ساعته هستند. از طرفی اولین مرکز برای پیدا کردن مشکلات است. بنابراین ماهیتی بسیار استرس زا می تواند داشته باشد. خیلی از اوقات شاید مورد بی مهری زیاد قرار می گیرند. اولین تصویر ذهنی از شخصی که در Call Center مشغول است هدفونی در گوش خود دارد و پشت میز کار خود همزمان که در حال صرف چای و نوشیدنی است پاسخگوی مشتریان است. از طرفی سیستمی که در اختیار دارد با برقراری تماس از سمت مشترک تمام دسترسی های او باز هستند و درخواست هایی که از کارشناس می شود را فقط با زدن یک دکمه می تواند انجام دهد. در صورتی که اینگونه نیست. مهم ترین بحثی که در Call Center ها مطرح است بحث سرعت و زمان است. یکی از مهم ترین کارهایی که باعث بالا رفتن سرعت پاسخگویی و کم شدن زمان مکالمات چه به صورت چت کردن و چه به صورت تماس صوتی است. دسترسی سریع و صحیح به اطلاعاتی است که منجر به حل شدن مشکل می شود. از طرفی معمولا تعداد نفرات مخصوصا در Call Center کمپانی های بزرگ بالاست. مدیریت افراد حاضر و دورکار (چرا که Call Center یکی از مشاغلی است که قابلیت کار ریموت را دارد.) مخصوصا پیدا کردن پاسخ مشکل در کمترین زمان ممکن می تواند بزرگترین مزیت برای یک Call Center باشد. حال در این مقاله ما می خواهیم روی سیستمی کار کنیم که با استفاده و کمک از AI و مخصوصا LLM ها بتوانیم سرعت را بالا برده و زمان پاسخگویی که منجر به حل مشکل شود را کاهش دهیم. برای شروع می خواهیم با استفاده از LLMها و BOTتلگرام محصولی را توسعه دهیم که من آن را LLM-T-B می نامم. این کار را انجام دهیم. در واقع با این BOT سیستمی مرجع برای شرکت ایجاد می کنیم که بتواند واحد های دیگر را هم شامل شود. به عبارت دیگر فقط مخصوص Call Center نیست. همچنین از طریق آن بتوانیم به طور مستقیم با مشترین تعامل داشته باشیم. با من همراه باشید!اولین وظیفه BOT تلگرامی!اولین وظیفه ای که می توان برای این LLM-T-B تعریف کنیم. کنترل وضعیت لحظه ای Call Center و مدیریت استراحت افراد حاظر در شیفت است. البته باید این نکته رو ذکر کرد مواردی که الان بین می شود optional است. در شرکت های مختلف می تواند متفاوت باشد. معمولا Call Center ها 24 ساعته هستند. بنابراین برای  3 شیف LLM-T-B را تعریف می کنیم وافراد حاظر در هر شیفت را برای LLM-T-B مشخص می کنیم. تابعی هم تعریف کنیم که اگر فردی به هر دلیل اضافه کاری یا تغییر شیفت قصد حضور در شیفت دیگر را داشته باشد بتوان فرد را به آن شیفت اضافه نمود. قوانین تعریف شده برای آن می تواند شناور باشد و بسته به شرایط لحظه ای تغییر کند. این به چه معناست؟ هر شرکتی سیستمی برای پاسخگویی به تماس ها دارد. ما می خواهیم LLM-T-B را با استفاده از API به سیستم متصل کنیم. و قوانینی برای آن تعریف کنیم که LLM-T-B با تشخیص خود و با توجه به تعداد تماس ورودی افراد مجاز برای استراحت را تعیین کند. زمان های استراحت مجاز می تواند بسته به تصمیم کمپانی مثلا &quot;n&quot; دقیقه ای و به صورت زمان فوری &quot;x&quot; دقیقه ای باشد. قوانین به این صورت است که به طور مثال به ازای هر &quot;a&quot; نفر حاظر در شیفت &quot;b&quot; نفر زمان استراحت در نظر بگیرد (این مورد می تواند بسته به شرایط کمپانی ها و نوع تماس ها متفاوت باشد) چرا که LLM-T-B به ازای تعداد تماس ورودی ظرفیت را تغییر می دهد. اما یک آستانه برای آن تعریف کنیم که هیچوقت تعداد استراحت ها را به 0 نرساند. قانون بعدی این است که اگر شخصی در حالت استفاده از زمان استراحت باشد و با تاخیر بازگردد بعد از 1 دقیقه اولین اخطار برای او ارسال شود و سپس مجددا در دقیقه 3 هم اخطار بعدی برای او به صورت نوتیف در ربات ارسال گردد. حال خود شرکت می تواند برای اینکه چه تعداد اخطار را فرد می تواند در روز داشته باشد یا در صورت تکرار چه اقدامی انجام می شود تصمیم بگیرد. دکمه ای به نام &quot;Rest(dnd)&quot; در ربات تعبیه می کنیم. با زدن این دکمه یه پیغام &quot;زمان استراحت شما به پایان رسید&quot; ظاهر می شود و در آخر این پیغام ظرفیت در لحظه به کارشناس اعلام گردد.اگر ظرفیت تکمیل بود ربات پیغام دهد که شمارنده بیش از حد مجاز است و اجازه ثبت آن را ندهد. همچنین می توان ربات را تنظیم کرد که به صورت لحظه ای ظرفیت را اعلان دهد. ظرفیت اضطراری را می تواند تعریف کرد به نحوی که هر فرد در طول روز بتواند یکبار استفاده کند البته آن را با تابعی بنویسیم که اگر فرد از ظرفیت اظطراری برای خود استفاده کرد دیگر تا اخر شیفت نتواند از ظرفیت اضطراری دوم استفاده کند و در هر لحظه هم فقط یک ظرفیت اظطراری باز باشد. همچنین این ظرفیت تایمی 10 دقیقه ای دارد.تایمی برای شام / نهار هم برای شیفت های مختلف در بازه های زمانی مختلف می توان در نظر گرفت. تایم استراحت در این بازه به مدت &quot;n+d&quot; دقیقه افزایش دهد که بدون تایم فوری است. ربات بتواند طبق تعداد افراد حاظر در شیفت زمانبندی کرده و مثلا تایم صرف غذا را &quot;H&quot; ساعت در نظر بگیرد و هر کارشناس در این تایم فقط یکبار بتواند از ظرفیت استفاده کند. اگر کارشناسی در این بازه دو بار از ظرفیت استفاده کرد. برای او اخطار ارسال کرده و اجازه ثبت شمارنده را به او ندهد. همچنین در تایمی که برای شام / نهار در نظر گرفته شده هم اگر فردی بیش از حد مجاز در حالت استراحت بود پیغام های خطا را دریافت کند. اگر ظرفیت خالی بود به افرادی که در تماس نیستند و امکان استفاده از زمان را دارند نوتیف استفاده از تایم نهار / شام را ارسال کند و تاکید کند که تایم مقرر شده شام / نهار تمدید نخواهد شد و در ساعت مقرر بسته خواهد شد. بعد از ساعت مقرر شده برای نهار / شام پیغام اتمام تایم نهار / شام برای همه افراد حاظر در شیفت ارسال شود و ظرفیت جدید اعلان گردد. همچنین تابعی برای گزارش گیری تعریف می کنیم که در پایان شیفت گزارشی از استراحت های ثبت شده را در Database ی ذخیره کند.مواردی که در بالا ذکر شد به عنوان نمونه و سمبلیک است . هر شرکتی با توجه به شرایطی که دارد و قوانین داخلی خود می تواند آن را تغییر دهد. حتی برای اینکه در موارد خیلی خاص و در لحظه بتوان از تمام ظرفیت های موجود استفاده کرد می توان برای ربات دسترسی ادمین تعریف کرد که اپراتور انسانی بتواند مثلا ظرفیت ها را در موارد خیلی خاص تغییر دهد. همه مواردی که در بالا ذکر شد کاملا شناور هستند و بسته به تصمیمات شرکت و سیاست های هر مرکزی به راحتی می توان آنها را تغییر داد و هدف از بازگو کردن آن اشاره به این نکته است که از این پتانسیل ها به خوبی و با بهره بری بسیار بالا میتوان استفاده کرد. تا اینجا قوانین خیلی ساده و اولیه ای را برای ربات تعریف کند. در قسمت بعد می خواهیم با استفاده از BotFather تلگرام و کد در پایتون این ربات ساده را پیاده سازی کنیم.پیاده سازی Botدر این مرحله می خواهیم Bot خود را بسازیم . ابتدا باید وارد تلگرام شویم و BotFather را جست و جو کنیم وارد صفحه آن می شویم و روی دکمه Start/ می زنیم بعد راهنمایی برای ما نمایش داده می شود گزینه newbot/  را انتخاب می کنیم. BotFather از ما می‌خواهد یک Name و یک Username (Username) برای Bot خود انتخاب کنید. Name می‌تواند هر چیزی باشد، اما Username باید منحصر به ‌فرد باشد و با کلمه &quot;bot&quot; تمام شود. Name را ManagerBot انتخاب و Username را CallCenterManagerBot تعیین کردیم. پس از ایجاد Bot ، BotFather یک Access Token برای ما ارسال می‌کند. این توکن مهم است و برای ارتباط با API تلگرام استفاده می‌شود. آن را در جای امنی نگه دارید.برای تعریف کردن قوانین مختلفی که در بالا تعیین کردیم می خواهیم از کد پایتون استفاده کنیم. برای این کار من از https://colab.research.google.com استفاده کردم. برای برقراری ارتباط با Bot و استفاده از Access Token که در اختیار داریم برای اعمال تغییرات ابتدا باید کتابخانه python-telegram-bot را با استفاده از دستور زیر نصب کنیم.!pip install python-telegram-botبعد از انجام مراحل اولیه ساختن BOT و ثبت آن با سرچ کردن نام BOT در تلگرام می توانیم وارد آن شویم و با زدن دکمه start BOT شروع به فعالیت می کند. در BotFather هم رابط کاربری وجود دارد که تنظیمات اولیه BOT را می توان با آن انجام داد. یک سری از دسترسی ها را باید در تنظیمات  BotFather باز کنیم تا بتوانیم تغییرات لازم را روی BOT اعمال کنیم. مواردی که در بالا ذکر شد و کدی که برای ساختنش لازم است را احتمالا در ورژن های بعدی این مقاله تکمیل کنم. تا اینجا مراحلی که ذکر شد خیلی ارتباطی با AI ندارد و به راحتی با تلگرام قابل پیاده سازی است. در قسمت بعد می خواهیم وارد مبحث اصلی شویم. قلب تپنده BOT و کارهای شگفت انگیزی که با LLM-T-B انجام خواهیم داد. با من همراه باشید که آن را توسعه دهیم.از من بپرس! (Ask me!)یکی از مهم ترین بخش هایی که می خواهیم این Bot داشته باشد. بخشی به نام &quot; Ask me! &quot; است. یکی از دغدغه هایی که افراد شاغل در Center Call دارند این است که در کوتاه ترین زمان ممکن جواب سوال هایی که از سوی مشترک مطرح می شود را بیابند. برای شرکت های دیگر هم وضع به همین منوال است. فرض کنید شرکتی دارید که کارهای نرم افزاری را انجام می دهد یا مجموعه ای خاص دارید که داری یکسری روال های اداری یا قوانین و پروسه های داخلی هستید. مخصوصا برای شرکت هایی که افرادی را به صورت کارآموز استخدام میکنند یا حتی برای کسانی که تازه وارد در شرکتی هستند و هنوز به روال عادی و قوانین کامل انجام کار آشنا نیستند.  پس Ask me! همه جا می تواند کاربرد داشته باشد. معمولا کارشناسان در Center Call ها منابع و اسناد زیادی را در اختیار دارند که در زمان تماس برای رسیدن به جواب سوالات از آن استفاده می کنند. در Center Call های فنی پیدا کردن بهترین جواب مخصوصا برای افرادی که تازه به جمع کارشناسان پیوسته اند همیشه یک دغدغه بزرگ است و اگر صرفا از نیروی انسانی یا اسناد زیاد که گاهی در بخش های مختلف هستند برای جواب به سوالات استفاده شود باعث می شود ثانیه به ثانیه به زمان پاسخ به سوال افزوده شده و در نتیجه زمان مکالمه طولانی تر و کیفیت انجام پروسه فرایند کم و کمتر شود.از من بپرس! حتی برای تعامل با مشتریان هم بسیار سودمند است. به این صورت که مثلا BOT تلگرامی را در اختیار عموم و مشتریان قرار دهیم (چون خود من در شرکت ISP کار می کنم مثال آن را خواهم زد ) و اطلاع رسانی به این صورت باشد که با این BOT خیلی راحت می توانید سوال هایی که راجع به مودم خود دارید و یا مودم های دیگر شرکت را مطرح و پاسخ بگیرید. حتی نوع مودم ها و خیلی از پروسه هایی که ممکن است برای رسیدن به جواب آنها مجبور باشید تماس گرفته و گاها در صف تماس قرار بگیرید را فقط با گفتگوی ساده ای با BOT می فهمید. و این را می توان به بخش هایی مثل فروش و یا خدمات سازمانی یا هر محصولی که شرکت ارائه می دهد تعمیم داد. تصور کنید مشتریان بالقوه یعنی افرادی که قصد خرید مثلا مودم را دارند. بدون تماس مستقیم که باعث هدر رفتن وقت هم برای مشتری و هم کارشناسان حاظر در فروش باشد. با تنها چند سوال از BOT اطلاعات بسیار خوبی را از مودم ها به دست بیاورند و بعد با برقراری تماس با واحد فروش با دانش قبلی که از مودم های شرکت یا هر محصول از هر شرکتی که از آن استفاده می کنند بسیار راحت تر و با فهم بیشتر با کارشناسان فروش تعامل کنند. تصور کنید که مشتریان احساس نکنند که با BOT در حال چت هستند. چرا که Ask me! از زبان طبیعی و نزدیک به زبان انسان با مشتریان صحبت خواهد کرد.کاربرد های LLM-T-Bتصور کنید که همه قوانین داخلی و پروسه های شرکت شما برای LLM ها به اندازه یک وعده صبحانه باشد. این در صورتی که شرکت شما یک شرکت متوسط رو به بالا باشد! بعد از در اختیار گرفتن مدل LLM  علاوه بر اطلاعات مدل آن را با داده ها و اسناد و تسک های شرکت Train می کنیم. تمام پروسه ها و تمام قوانین را می توان به راحتی برای مدل توکنایز کرد و به مدل آموزش داد. بعد می توان از آن برای کارهای درون سازمانی و سوالاتی که از طرف مشتریان مطرح می شود استفاده کرد. مثلا یکی از بیشترین سوالات مطرح شده در شرکت های ISP که اینترنتLTE  ارائه می دهند بحث پوشش دهی است. تصور کنید که از LLM-T-B برای دپارتمان فروش استفاده کنیم و یکی از سوالات اولیه LLM-T-B درخواست دریافت لوکیشن افرادی که قصد خرید مودم را دارند باشد به راحتی پوشش دهی آنها را چک کند و به مشتری اعلام نماید. نکته مهم تر اینکه از آنالیز این داده های ارزشمند متوجه مناطقی که بیشترین درخواست و کمترین درخواست برای خرید از شرکت را دارند می شویم در نتیجه از آن برای سرمایه گذاری بیشتر یا کمتر و تبلیغات هدفمند در این مناطق استفاده کرد.از آنالیز سوالات پرتکرار مشتریان داده های بسیار ارزشمندی به دست می آوریم. منظور من چیزی مثل سوالات پرتکرار در بخشی از سایت قرار داده می شود نیست. در تماس های Call Center ها سوالات پرتکرار بی شماری وجود دارد. از این سوالات و سوالاتی که معمولا کارشناسان ضعف در پاسخگویی دارند برای بهبود هر چه بیشتر LLM-T-B استفاده می کنیم در نتیجه زمانی که مشتری این سوالات را مطرح می کند بیش از پیش و حتی طبیعی تر از انسان می تواند به آنها پاسخ دهد. مثلا تغییر اسم و رمز مودم یا مثلا مشترک چگونه می تواند در پنل مشترکین ثبت نام کند؟ یا مطرح کند که مودم مدل فلان را دارد و می خواهد امنیت آن را بیشتر کند چه باید بکند؟ حتی سوالات دیگری که روتین هستند. تمدید طرح ها چگونه است؟ برای تغییر مالکیت یا هر تیکت دیگری چگونه باید انجام شود؟ سوالاتی از این قبیل را خیلی واضح و راحت و مرحله به مرحله میتوان با LLM-T-B پاسخ داد به نحوی که مشترک نیاز زیادی به برقراری تماس پیدا نکند. هدف این است که مشترک بدون انجام پروسه های تو در تو  بتواند به مقصود خود برسد. این موارد نه تنها باعث تعامل و رضایت بیشتری مشتریان خواهد شد. بلکه حجم کاری خیلی از بخش های سازمان را می تواند به راحتی کاهش دهد و باعث بالا رفتن بهره وری هر چه بیشتر پرسنل گردد. پرتکرارترین سوال در سازمان شما چیست؟ یا در Center Call پرتکرار ترین سوال خود کارشناسان فنی مخصوصا کارشناسان تازه کار چیست ؟ پیدا کردن جواب این سوال می تواند اطلاعات ارزشمندی به ما ارائه دهد. این نکته را هم باید ذکر کنیم که با Ask me! کارشناسان می توانند سوال هایی که لازم است با سرچ کردن به آنها برسد را با یک سوال ساده از BOT به دست بیاورد. اینها تنها بخش کوچکی از بی شمار کاربردهای LLM-T-B امروزه می دانیم که LLM ها رو به روز قدرتمند تر می شوند و در نتیجه تسک های بی شمارتری را می توان با آن انجام داد.چرا LLM ؟ما می توانیم به صورت روزانه سوال های مطرح شده توسط کارشناسان یا مشتریان را در Database که برای LLM-T-B  طراحی کرده ایم آنالیز کنیم. آنالیز این اطلاعات می تواند بسیار برای شرکت کمک کننده باشد. چرا که هم می توانیم بفهمیم که بیشترین مشکلات در طول روز هم برای مشتریان و کارشناسان چیست و هم اینکه بیشتر تماس ها برای چه مواردی است. از طرف دیگر اینکه بدانیم که بیشترین ضعف های کارشناسان در پاسخگویی به سوالات به خصوص برای کارشناسان جدید چه چیزی است. چرا که هر چه کارشناسان قوی تر باشند پروسه ها با سرعت بیشتری انجام می شود. راه حل چیست؟ بدون شک LLM ها. حتی نیاز به LLM خیلی بزرگ و قوی ای نداریم. چرا که اسنادی که در سازمان ها وجود دارند برای LLM ها خیلی بزرگ نیستند. بعد از مدتی که از این LLM استفاده کردیم اطلاعات ارزشمندتری داریم که برای بالا بردن بهره وری و سرعت می توانیم LLM خود را با آنها مجدد Train کنیم در نتیجه مدل ما بیش از پیش قدرتمند تر خواهد شد.کدام LLM ؟برای استفاده از LLM ها چندین راه وجود دارد. راه اول ساختن یک مدل جدید از ابتدا است. LLM ها گرسنه دیتا هستند. با توجه به اینکه این کار به منابع اطلاعاتی و محاسباتی بسیار بزرگ نیاز دارد. منظورم منابعی است که فقط شرکت های خیلی بزرگ در اختیار دارند. از طرفی نیازی به این کار نیست چرا که &quot;چرخ اختراع شده است&quot; راه های زیادی برای استفاده از آن وجود دارد.یک راه گرفتن یک API از LLM های کمپانی های بزرگ مثل ChatGPT و یا Anthropic است. این API منجر به دسترسی ما به LLM مورد نظرمان می شود. راه بعد این است که از مدل های Open Source مثل LlaMa3 استفاده کنیم. با این کار معماری عظیمی را در اختیار می گیریم و از طرفی به بانک بسیار عظیمی از اطلاعات هم دسترسی پیدا کنیم. اما باز هم آموزش مدلی مثل LlaMa3 می تواند بسیار سنگین و گرانقیمت باشد. روش دیگر استفاده از مدل های سبک تر است. برخی منابع برای آن وجود دارد یکی از آنها که مخصوصا در سالهای اخیر بسیار مورد توجه قرار گرفته پلتفرم Hugging Face است. تقریبا تمام مدل ها در آن وجود دارد. فقط کافی است که API از Hugging Face را داشته باشیم و از مدل های pre-trained (از پیش آموزش دیده ) موجود در آن استفاده کنیم. مزیت آنها چیست؟ پر اهمیت ترین مزیت آن بالا رفتن امنیت است. چرا که برای استفاده از مدل های pre-trained آنها را دانلود و در local سیستم خودمان استفاده می کنیم. فقط کافی است که آنها را fine-tune (تنظیم مجدد) کرده و روی داده هایی که می خواهیم BOT برای پاسخ دهی بهتر بیاموزد Train کنیم. در قسمت بعد می خواهیم نحوه پیاده سازی و Train کردن و وصل کردن LLM خود به BOT تلگرامی را بیاموزیم . با من همراه باشید!نکته: مدلی که در اینجا استفاده خواهیم کرد آزمایشی بوده و برای بیان این نکته هست که می توان این کار را انجام داد. برای پروژه های اصلی می توانیم از مدل های بهتر و امن تر هم استفاده کرد.پیاده سازی LLM-T-Bبرای پیاده سازی و آموزش و استفاده از LLM بعد از تست چندین مدل و استفاده از API های مختلف برای آنها تصمیم گرفتم که از مدل هایی که در Hugging Face موجود است استفاده کنم بعد از تلاش های فراوان برای این کار متوجه شدم که باز هم استفاده از مدلی که بتواند نیازهای ما را فراهم کند و منابع ما را پوشش دهد ممکن است هزینه بر و از لحاظ محاسباتی گرانقیمت باشد. بنابراین مدلی را از گیت هاب پیدا کرده و استفاده کردم .مدلی که قرار است توسعه دهیم از معماری GPT-4 استفاده می کند و نام آن &quot; gpt4all-13b-snoozy-q4_0.gguf &quot; است.  https://github.com/Fatal3xcept10n/LLM-Telegram-Chatbot?tab=readme-ov-file در وحله اول با کد هایی که در گیت هاب بود مدل را روی سیستم خودم در google colab دانلود کردم. حال اصل مدل را در اختیار داریم که آموزش اولیه دارد. می خواهیم آن را به BOT خود متصل کنیم. برای این کار اول باید API_KEY مربوط به BOT تلگرامی خودمان را از BotFather به دست بیاوریم تا بتوایم ارتباط بین کد های پایتونی که قرار است توسعه دهیم را با BOT خود برقرار کنیم. در اسنادی که روی گیت هاب هست برای استفاده از این مدل به دو کتابخانه نیاز داریم که در زیر مشاهده می کنید.# Import the telegram bot API!pip install python-telegram-bot==13.7!pip install gpt4all==2.0.2برای استفاده از BOT باید چندین کتابخانه را فراخوانی کنیم که هر کدام برای اجرای قسمتی از کد ضروری هستند و با مطالعه اونها خیلی واضح می تونیم متوجه شویم که چرا و برای چه تسکی از اینها استفاده خواهیم کرد. این کتابخانه ها را من به مرور زمان و اضافه شدن تسک های مختلف اضافه کردم در زیر تعدادی از آنها را با توضیحات کامل مشاهده می کنید.# Importing necessary classes and modules from telegram.ext for managing a Telegram botfrom telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackQueryHandler# Importing necessary classes and modules from telegram for managing inline buttons and keyboardfrom telegram import InlineKeyboardButton, InlineKeyboardMarkup, ReplyKeyboardMarkup, KeyboardButton# Importing GPT4All library to use the GPT-4 language modelfrom gpt4all import GPT4All# Importing threading module for running concurrent threadsimport threading# Importing googletrans library for translating textfrom googletrans import Translator# Importing langid library for detecting language of the textimport langid# Importing logging module to log messages and eventsimport logging# Importing sqlite3 module to interact with SQLite databasesimport sqlite3# Importing os module for interacting with the operating systemimport os# Importing queue module to create and manage queuesimport queueحتما به خاطر داشته باشید که در کدی که در حال توسعه هستید توکن API_KEY تلگرام را قرار دهید. خب برای استفاده از BOT اول نیاز داریم که مدل را فراخوانی کنیم.# Telegram bot token (replace with your bot token obtained from BotFather)TOKEN = &#039;YOUR_BOT_TOKEN&#039;# Select LLM model from gpt4allmodel = GPT4All(&amp;quotgpt4all-13b-snoozy-q4_0.gguf&amp;quot)با این کد هم به BOT تلگرام متصل می شویم و هم LLM مورد نظر روی سیستم ما دانلود خواهد شد و اون رو در اختیار می گیریم. حال تسک هایی را به LLM-T-B خود اضافه می کنیم. اولین تسکی که مورد توجه من قرار گرفت این است که BOT قابلیت ترجمه به زبانی که کاربر استفاده می کند را داشته باشد. مثلا این مدل ما به انگلیسی مسلط است. و زبان فارسی را هم می فهمد اما نمی تواند به فارسی پاسخ ها را ارائه کند. دو راه وجود دارد راه اول اینکه ما می توانیم با یک dataset فارسی به انگلیسی مدل را با dataset که شامل جملات فارسی و ترجمه آنها باشد آموزش دهیم. این روش چالش برانگیز است. چرا که برای این کار به منابع نیاز داریم. سخت افزار قوی با GPU  قوی و یا حتی استفاده از سرورهای GPU که به صورت کلاود هستند. اما این کار می تواند برای ما هزینه بر هم باشد . راه دوم استفاده از استفاده از کتابخانه googletrans &#x60; &#x60;و کلاس&#x60; &#x60;Translator است. برای اون باید ابتدا کتابخانه آن را نصب کنیم.!pip install googletrans==4.0.0-rc1حال با قطعه کدی که در زیر قرار خواهم داد برای LLM-T-B  تعریف کنیم که مثلا اگر کاربر انگلیسی نوشت پاسخ ها به انگلیسی باشد و اگر مثلا فارسی تایپ کرد پاسخ فارسی دریافت کند. البته معایبی هم می تواند داشته باشد. چرا که محاسبات را سنگین تر می کند چون باید بعد از دریافت پرامپت از کاربر آن را به انگلیسی ترجمه کند و سپس پاسخی که به انگلیسی هست رو به فارسی ترجمه کند.# Translator instancetranslator = Translator()....# Detect language of user messagelang, _ = langid.classify(user_message)# Translate user message to English if neededif lang == &#039;fa&#039;:translated_prompt = translator.translate(user_message, src=&#039;fa&#039;, dest=&#039;en&#039;).textelse:translated_prompt = user_message# Add the prompt to the user&#039;s queueuser_queues[chat_id].put(translated_prompt)باید پاسخی را هم که مدل تولید میکند را به فارسی ترجمه کرد. چرا که مدل پاسخ انگلیسی تولید می کند اما با کد زیر می توان آن را به فارسی ترجمه کرد.# Translate the response back to the user&#039;s language if neededresponse = user_contexts[chat_id][&#039;response&#039;]if lang == &#039;fa&#039;:translated_response = translator.translate(response, src=&#039;en&#039;, dest=&#039;fa&#039;).textelse:translated_response = responseدیتابیس (Database)مورد بعدی که باید به آن توجه کنیم ساختن Database برای BOT هست. گزینه های زیادی برای آن وجود داره. می توانیم از Database های که رایگان و یا اشتراک دار استفاده کنیم. Database‌ های رایگان یا کم ‌هزینه مانند SQLite یا PostgreSQL. وقتی از SQLite استفاده می‌کنیم، اطلاعات به صورت یک فایل فیزیکی روی دیسک ذخیره می‌شود و با بستن برنامه، اطلاعات از بین نمی‌رود. اما اگر بخواهیم Database را به صورت آنلاین و همیشه در دسترس استفاده کنیم ، می‌توانیم از سرویس‌های ذخیره‌سازی آنلاین مثل Google Drive استفاده کنیم. برای استفاده از Google Drive به عنوان Database آنلاین، می‌توانیم از Google Sheets به عنوان Database خود استفاده کنیم Google Sheets API را می‌توان به راحتی با پایتون استفاده کرد. در ادامه، مراحل راه ‌اندازی یک Database  SQLite و ادغام آن با BOT تلگرام را خواهیم دید. SQLite یک Database سبک و تعبیه ‌شده است که به‌ طور پیش‌فرض نیازی به سرور ندارد و به همین دلیل برای پروژه‌های کوچک و متوسط مناسب است. در قطعه کد زیر که مربوط به بخشی از کد اصلی LLM-T-B نمونه کدی برای ساختن Database ساده را می آموزیم.# Function to delete and recreate the databasedef initialize_database():# Check if the database file exists and remove itif os.path.exists(&#039;bot_database.db&#039;):os.remove(&#039;bot_database.db&#039;)# Connect to SQLite database (it will create the file if it doesn&#039;t exist)conn = sqlite3.connect(&#039;bot_database.db&#039;)cursor = conn.cursor()# Create the users table with columns for id, user_id, and first_namecursor.execute(&#039;&#039;&#039;CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT,user_id INTEGER UNIQUE,first_name TEXT)&#039;&#039;&#039;)# Create the questions table with columns for id, user_id, question, and answer# user_id column is a foreign key that references the user_id in the users tablecursor.execute(&#039;&#039;&#039;CREATE TABLE questions (id INTEGER PRIMARY KEY AUTOINCREMENT,user_id INTEGER,question TEXT,answer TEXT,FOREIGN KEY (user_id) REFERENCES users (user_id))&#039;&#039;&#039;)# Commit the changes and close the connectionconn.commit()conn.close()# Initialize the database by calling the functioninitialize_database()# Connect to SQLite database (check_same_thread=False allows for multithreading)conn = sqlite3.connect(&#039;bot_database.db&#039;, check_same_thread=False)cursor = conn.cursor()دکمه هاتسک بعدی ساختن دکمه های BOT است که این مورد به صورت optional می باشد. به راحتی می توان هر دکمه ای را در BOT  تعبیه کرد و سمبلیک بیان شدند که کارایی LLM-T-B را بتوان به آن نشان داد. مثلا من برای این BOT فعلا سه دکمه : Start , Ask me! , Help رو اضافه می کنم و برای هر کدام از اونها در کد مربوط به اون دکمه قید می کنم که در صورتی که کاربر این دکمه رو فشار داد چه پیغامی نماش داده بشه حتی می توان این کار رو هم به عهده LLM گذاشت.کاربر با زدن دکمه Start با جمله &quot; سلام (یوزرنیم کاربر) به BOT Ask me! خوش آمدید. اگر سوالی دارید خوشحال می شوم دکمه Ask me! را بزنید و سوال خود را بپرسید. &quot; مواجه می شود. بعد از زدن دکمه Ask me! ربات به کاربر بگوید &quot; (یوزرنیم کاربر) لطفا سوال خود را بپرسید تا خیلی سریع به آن پاسخ دهم &quot; و سپسLLM-T-B سوالات کاربر را بگیرد و پاسخ بدهد. همچنین زیر هر پاسخی که BOT به کاربر ارائه می دهد. دکمه خروج را تعبیه می کنیم که با زدن آن کاربر با یک پیغام محترمانه از BOT مواجه شود مثلا یوزرنیم کاربر را بگوید و از او بابت استفاده از BOT تشکر کند و بگوید که مشتاق است دوباره به او کمک کند. در این مقاله من فعلا به 3 دکمه اکتفا کرده ام به نظرم هر چه رابط کاربری ساده تر و بدون هیچگونه شلوغی که از سردرگمی کاربر جلوگیری کند مناسب تر است. به نظرم قدرت و نفوذی که در سادگی برای جذب مخاطب بیشتر وجود دارد را در خیلی از تجملات نمی توان یافت.نکته مهمی که در ساختن دکمه برای LLM-T-B خود باید در نظر داشته باشید این است که فقط وصرفا ساختن دکمه و اینکه پیغامی را به کاربر نمایش دهد کافی نیست. مثلا دکمه Start تعریف شده و وجود داشت اما عمل نمی کرد یا برای نمونه من دکمه خروج را که در BOT تعریف کردم با زدن آن پیغام نمایش داده می شد اما هیچ اقدامی انجام نمیداد و چندین بار خطا و ران کردن و راه اندازی مجدد را انجام دادم تا این موارد را فهمیدم و اصلاح کردم.شروع LLM-T-Bحال می خواهیم BOT را آغاز کنیم من چندین بار این کار را انجام داده ام و با کاربرهای مختلف در تست BOT متوجه مشکلاتی شدم . یکی از مشکلاتی که BOT داشت زمانیکه دو کاربر همزمان وارد BOT می شدند به اشتباه فکر می کرد که هر دو کاربر در یک محیط هستند. به عبارتی کاربرها را جدا تشخیص نمی داد. یعنی مثلا من سوالی رو از BOT پرسیده بودم. وقتی که فرد دیگری هم وارد BOT می شود و Ask me! را می زند. پاسخی که برای سوال کاربر اول بود را به کاربر دوم هم نمایش میداد. برای رفع این مشکل باید از یک مکانیزم صف ‌بندی برای درخواست‌ ها استفاده کنیم تا هر کاربر یک صف جداگانه برای درخواست‌ها و پاسخ‌هایش داشته باشد. همچنین نیاز است که از threading و Queue برای مدیریت این صف‌ها استفاده کنیم.# Store the contexts and queues for each useruser_contexts = {}user_queues = {}در این کد برای هر کاربر یک صف و یک رویداد ایجاد شده است تا بتواند پیام‌ها و پاسخ‌ها را به طور جداگانه مدیریت کند. این کار به تفکیک پیام‌های هر کاربر کمک می‌کند و اطمینان حاصل می‌کند که هر کاربر پاسخ‌های مربوط به خود را دریافت می‌کند. بخش‌هایی از کد که این کار را انجام می‌دهند در زیر توضیح داده شده‌اند. در هنگام دریافت پیام جدید از کاربر، اگر صف و رویداد مربوط به آن کاربر موجود نباشد، آن‌ها را ایجاد می‌کنیم.# Wait for response event to be set by conversation threaduser_contexts[chat_id][&#039;response_event&#039;].wait()user_contexts[chat_id][&#039;response_event&#039;].clear()قطعه کد زیر برای مدیریت مکالمات چندین کاربر به صورت همزمان و مستقل طراحی شده است. در این کد، هر کاربر یک حلقه مکالمه اختصاصی دارد که پیام‌های دریافتی از صف کاربر را به مدل LLM ارسال می‌ کند تا پردازش شده و پاسخ تولید شود. سپس پاسخ‌ها در زمینه کاربر ذخیره شده و یک رویداد پاسخ فعال می‌شود. اگر صف خالی باشد و مکالمه متوقف شده باشد، حلقه به پایان می‌رسد.# Function to start the conversation loopdef startConversation(chat_id):global user_contexts, user_queueswith model.chat_session():while True:try:prompt = user_queues[chat_id].get(timeout=5)print(f&amp;quotWorking on prompt for user {chat_id}&amp;quot)# Generate responseresponse = generateResponse(prompt)user_contexts[chat_id][&#039;response&#039;] = responseprint(f&amp;quotFinished processing for user {chat_id}&amp;quot)user_contexts[chat_id][&#039;response_event&#039;].set()except queue.Empty:if chat_id not in user_contexts or not user_contexts[chat_id].get(&#039;is_running&#039;, False):breakprint(f&amp;quotExited conversation loop for user {chat_id}&amp;quot)تابع &#x60;startConversation&#x60; یک حلقه مکالمه برای یک کاربر خاص با شناسه &#x60;chat_id&#x60; را شروع می‌کند. متغییر های &#x60;user_contexts&#x60; و &#x60;user_queues&#x60; متغیرهای جهانی هستند که زمینه‌ها و صف‌های پیام‌های کاربران را نگهداری می‌کنند. &#x60;()with model.chat_session&#x60; اطمینان می‌دهد که یک جلسه چت با مدل زبان بزرگ (LLM) باز شده و در طول حلقه مکالمه باز می‌ماند.سپس &#x60;while True&#x60; حلقه‌ای ایجاد می‌کند که تا زمانی که شرایط برای خروج از حلقه محقق نشود، ادامه خواهد داشت.برای دریافت پیام از صف کاربر از &#x60;prompt = user_queues[chat_id].get(timeout=5)&#x60; استفاده می کنیم که تلاش می‌کند یک پیام (پرامپت) از صف کاربری با شناسه &#x60;chat_id&#x60; دریافت کند اگر صف خالی باشد، به مدت 5 ثانیه منتظر می‌ماند تا پیام جدیدی وارد شود. اگر در این مدت پیام جدیدی وارد صف نشود، یک استثنا &#x60;queue.Empty&#x60; رخ می‌دهد. این استثنا توسط بلوک &#x60;try-except&#x60; مدیریت می‌شود. اگر صف خالی بماند و مکالمه کاربر نیز متوقف شده باشد، حلقه مکالمه پایان می‌یابد. این کد به گونه‌ای طراحی شده است که پیام‌های کاربران را به صورت جداگانه و موازی پردازش کند، بدون اینکه منابع سیستم به طور مداوم مصرف شوند.قطعه کد زیر BOT هنگام شروع مکالمه جدید برای هر کاربر، یک رشته جدید برای آن کاربر ایجاد می‌ کند. تا بتواند پیام‌های هر کاربر را به صورت جداگانه مدیریت کند.# Handler function for /start commanddef start(update, context):chat_id = update.message.chat_iduser_first_name = update.message.from_user.first_namecontext.user_data[&#039;first_name&#039;] = user_first_name# Initialize user context and queueuser_contexts[chat_id] = context.user_datauser_contexts[chat_id][&#039;is_running&#039;] = Trueuser_contexts[chat_id][&#039;response_event&#039;] = threading.Event()user_queues[chat_id] = queue.Queue()# Insert or update user in the databasecursor.execute(&amp;quotINSERT OR IGNORE INTO users (user_id, first_name) VALUES (?, ?)&amp;quot, (chat_id, user_first_name))cursor.execute(&amp;quotUPDATE users SET first_name = ? WHERE user_id = ?&amp;quot, (user_first_name, chat_id))conn.commit()# Start a new conversation thread for the userconversation_thread = threading.Thread(target=startConversation, args=(chat_id,))conversation_thread.start()context.bot.send_message(chat_id=chat_id,text=f&amp;quotHello {user_first_name}! Welcome to the Ask me! bot. If you have any questions, please press the Ask me! button.&amp;quot,reply_markup=main_menu_keyboard())تست LLM-T-Bبعد از نوشتن کد های LLM-T-B باید آن را اجرا کنیم تا در محیط BOT تلگرام آن را ببینیم. من کد را برای تست در محیط گوگل کلب اجرا کردم . برای بهتر اجرا شدن و ارتباط پایدار تر باید آن را روی سرور ترجیحا سرور لینوکسی اجرا کرد. بعد از اجرای کد و دانلود مدل روی گوگل کلب خط به خط کد ها اجرا می شوند. بعد از اجرای کد باید در محیط BOT استارت زده شود. من در دو اکانت تلگرام خودم یکی با نام “Javad” با “J” و یکی با نام” javad “ با “j” (دلیل این کار تست ربات بود چرا که هر دو تلگرام روی یک دستگاه هست و فقط یک حرف یوزرنیم آن هم در کوچک و بزرگ بودن حرف با هعم تفاوت دارند) استارت شروع LLM-T-B را زدم و همانطور که در تصویر میبینید در هر دو محیط و با یوزرنیم های متفاوت خودشان LLM-T-B به راحتی به سوالات پاسخ صحیح داد تصویر زیر را ببینید.تصویر سمت چپ با یوزرنیم javad و تصویر سمت راست با یوزرنیم Javad در هر دو محیط هم پاسخ ها صحیح بود در این تصویر نحوه شروع BOT را می بینید و سوالی که از کاربر پرسیده می شود سپس کاربر سوال خود را مطرح می کند و بات با استفاده از LLM به آن متصل است می تواند به سوال جواب بدهد. در پایین مشاهده می کنید که برای هر یوزر یک ID مخصوص به آن یوزر اختصاص داده شده است برای اینکه LLM-T-B بتواند تفاوت آنها را متوجه شود و در دیتابیس هم به راحتی و دسته بندی شده ذخیره می شود که در بالا کد های آن و نحوه پیاده سازی این تسک را مشاهده کردیم.Received message from user: How accurate are the responses generated by your bot using the language model?Working on prompt for user 6514170446Finished processing for user 6514170446Received message from user: What languages are supported for translation using your bot?&amp;quotWorking on prompt for user 1932960851Finished processing for user 1932960851Received message from user: Could you explain the security measures in place to protect user data when using your bot?&amp;quotWorking on prompt for user 6514170446Finished processing for user 6514170446Received message from user: What types of tasks or queries do you handle best?&amp;quotWorking on prompt for user 1932960851Finished processing for user 1932960851همانطور که مشاهده میکنید ID های 1932960851 و 6514170446  که از دو یوزر مختلف هستند. برای تست برای تست LLM-T-B که ببینیم حتی بدون ترین و فقط با داشتن کد ترنسلیت آیا مدل به خوبی کار می کند یا نه سوال و جواب هایی به فارسی انجام دادم که در تصویر زیر می بینید.این تصویری از LLM-T-B است که برای تست قابلیت ترجمه آن در محیط بات انجام شده است   البته مشکلات زیادی هم ممکن است در زمان توسعه مدل و بات پیش باید و باید این مشکلات را حل یا به حداقل برسانیم یکی از مشکلاتی که کلا LLM ها ممکن است داشته باشند این است که اصطلاحا دچار توهم می شوند ما باید این مشکل را به حدقل ممکن برسانیم یک نمونه از آن را در تصویر زیر مشاهده می کنید. البته لازم به ذکر است مدلی که ما در این مقاله استفاده کرده ایم آموزش بیشتری ندیده و به اینترنت متصل نیست.نمونه ای از مشکلاتی که  LLM ها ممکن است با آن رو به رو شوند . این تصویر از محیط LLM-T-B گرفته شده است یکی از مشکلات عدیده ای که اگر کد بات را در گوگل کلب اجرا کنید با آن مواجه می شوید این است که در کلب با اجرای کد پتانسیل بالایی برای کرش کردن و ریست شدن سشن دارد. چرا که نسبت به اجرای کد در لینوکس یا سرور قوی گوگل کلب میتواند ضعیف تر عمل کند. اگر با این مشکل مواجه شدید مجدد کد را ران کنید و مورد دیگر اینکه هر بار در محیط کلب با رست کردن یا تغییر سشن باید کتابخانه ها را مجددا نصب کنید.امنیت LLM-T-Bمسئله بسیار مهمی دیگری که باید مد نظر قرار داد. مسئله امنیت BOT می باشد. به خصوص زمانی که در دسترس عموم قرار می‌گیرد و برای مقاصد حساس مثل ارتباط با مشتریان یا واحد فروش استفاده می‌شود، بسیار حائز اهمیت است. اولین موردی که مطرح است خود LLM ی است که مورد استفاده قرار می گیرد. مدلی که در این مقاله مطرح شد یا کلا مدل های pre-trained یا حتی مدلهای open-source چون که دانلود می شوند و در Local سیستم قرار می گیرند و بعد از آنها استفاده می شود و برای مسائلی که لازم داریم آن را Train می کنیم. پس خود مدل می تواند از امنیت بالایی برخوردار باشد. مورد بعدی کاربرانی هستند که از BOT استفاده می کنند و ممکن است که حملاتی را به BOT انجام دهند.انتخاب مدل‌های از منابع معتبر و با امنیت بالا. مدل‌های open-source می‌توانند امن باشند، اما باید از منابع معتبر دانلود شوند. به‌روزرسانی مداوم مدل‌ها و نرم‌افزارهای مرتبط را به ‌روزرسانی کنید تا از جدیدترین ویژگی‌ها و رفع مشکلات امنیتی بهره‌مند شوید. دسترسی به BOT را محدود کنید تا تنها کاربران مجاز بتوانند از آن استفاده کنند. این می‌تواند از طریق استفاده از لیست‌های سفید (whitelists) یا احراز هویت دو مرحله‌ای انجام شود. به طور مثال پشتیبانی فنی مودم ها فقط افرادی که مودم دارند و اطلاعات آنها در دیتابیس شرکت موجود است بتوانند از آن استفاده کنند یا اینکه حتی لولبندی انجام شود و در حین ورود به مدل از کاربر اطلاعاتی دریافت شود. مثلا اگر برای خرید مودم سوالاتی داشته باشند مستقیم با مدل LLM متصل نشوند پیامهای آنها در محیطی از BOT دریافت شود که اجازه ورود به LLM را نداشته باشد. سوال کاربر در دیتابیسی دریافت شود و جداگانه برای پردازش به LLM ارسال شود و پاسخ تولید شده به دیتابیس بازگردد و از آنجا به محیط BOT ارسال شود. برای امنیت BOT اطمینان حاصل کنید که تمامی ارتباطات با سرور BOT از طریق HTTPS  انجام می‌شود تا داده‌ها در مسیر انتقال رمزگذاری شوند. استفاده از سرویس‌های محافظت در برابر حملات DDoS می‌تواند BOT را در برابر حملات ناگهانی و سنگین مقاوم کند.تمام فعالیت‌ها و درخواست‌ها را ثبت و با نظارت مداوم می توان هرگونه فعالیت مشکوک را به سرعت شناسایی و متوقف کرد. می توان ورودی‌ها را اعتبارسنجی کرد تا از ورود داده‌های مخرب جلوگیری شود. این شامل استفاده از فیلترهای ورودی برای جلوگیری از تزریق SQL و XSS است. برای حفظ حریم خصوصی می توانیم  داده‌های کاربران را به طور امن ذخیره کنید و از دسترسی غیرمجاز به آنها جلوگیری کنید. این شامل رمزگذاری داده‌های حساس و محدود کردن دسترسی‌ها می‌شود. حتی کاربران را در مورد امنیت و خطرات ممکن آموزش دهید تا آن‌ها نیز بتوانند نقش خود را در حفظ امنیت ایفا کنند.نتیجه گیریدر این مقاله سعی شد ایده ای مطرح شود که جدیدا هم در دنیای AI در حال رشد است و توجه ها را به خود جلب کرده است و مواردی که در این مقاله مطرح شد فقط گوشه های خیلی کوچکی از استفاده هایی از LLM هاست. همانطور که &quot; Yann LeCun &quot; هم به افرادی که در حال یادگیری AI هستند یا قصد شروع آن را دارند توصیه می کند. “DO NOT WORK ON LLMs,” به نظر ساختن LLM از ابتدا و کار کردن روی ساختن آنها شاید کار خیلی معقولانه ای نباشد. اما استفاده از آنها برای کاربرد های مختلف و تسک های بسیار و توسعه محصولات جدید با LLM ها می تواند خیلی کمک کننده باشد. در این مقاله رویکردی که دنبال شد و بیشتر مورد توجه ما هست. اول داشتن یک رابط کاربری بسیار ساده برای کمک به کارشناسان ارتباط با مشتریان است. برای سریع تر شدن انجام کارهایی که نه تنها باعث بالا رفتن کیفیت پاسخدهی می شود. بلکه با سرعت بخشیدن به آن رضایت هر چه بیشتر مشتریان را به دنبال خواهد داشت. این مطلب در بخش های آغازین مقاله مفصل مورد بررسی قرار گرفت.تسک های بسیار زیادی را می توان به LLM-T-B اقزود که چند نمونه را به اختصار بیان میکنم.تسک چت آنلاین که امروزه کسب و کارهای خرد و کلان مانند دریچه ای برای ارتباط مستمر با مشتریان دارند را میتوان متحول کرد. هم اکنون هم خیلی از سایت های شرکت های بزرگ از آن استفاده می کنند. یکی از بزرگترین مشکلاتی که در چت آنلاین مطرح است ماندن در صف پاسخگویی است که با وجود LLMها مسئله ای حل شده است. اما موضوعی که می توان روی آن تمرکز کرد استفاده از دادهای چت های قبلی که با مشتریان شده است و Train کردن مدل برای پاسخگویی در لحظه در چت آنلاین است که از زبان طبیعی استفاده کند. به نحوی که مشتریان احساس نکنند که در حال چت با AI هستند. همچنین با استفاده از تسک  تشخیص احساسات که LLMها بسیار عالی می توانند انجام دهند. آنالیز این  اطلاعات بسیار ارزشمندی است چرا که به ما در ارئه خدمات بهتر به مشتریان و توجه بیشتر به نقاط ضعف و قدرت شرکت می تواند بسیار کمک کند. موضوع چت آنلاین موردی هست که من با آن بسیار کار کرده ام و کامل آشنایی دارم. با این کار می توان علاوه بر بالا بردن سرعت و پوشش 24 ساعته پشتیبانی و کم کردن خطای انسانی رضایت بیش از پیش مشتریان را فراهم کرد.همچنین در نسخه های بعدی توسعه LLM-T-B می توان بخش های دیگری به آن افزود. تسک تیکتینگ که من شخصا زیاد با آن برخورد کردم و گاها به علت زمان بر بودن باعث نارضایتی مشتریان است. می توان LLM-T-B  را به نحوی توسعه داد که مشتریان به راحتی هر چه تمام تر هم برای مشکلات خود راه حل پیدا کنند و هم برای ثبت تیکت های خود بتوانند اقدام کنند و حتی در همان لحظه یا در تایم کوتاه تاییدیه مورد نظر را بگیرند. چرا که می توان به مدل خود قابلیت تشخیص چهره و خواندن تصاویر را اضافه کرد در نتیجه تیکت هایی مثل تغییر مالکیت یا حتی احراز هویت جهت خرید محصول را اگر نیاز به کارت شناسایی داشته باشد در لحظه انجام داد. همچنین در بخش های داخلی شرکت فشار کاری کارشناسانی که در بخش تیکتینگ به خاطر تعداد بالای تیکت های دریافتی مواجه هستن و در نتیجه ممکن است پاسخگویی به تیکت ها را زمانبر کند را با اتوماتیک کردن هر چه بیشتر فرایند ها و بالا رفتن سرعت و کیفیت بخاطر دقت بالای مدل ها و در نتیجه کمتر شدن خطای انسانی بیش از پیش رضایت مشتریان را جلب کرد.تسک بعدی استفاده از LLM-T-B برای مشتریان بالقوه است یعنی کسانی که هنوز اقدام به خرید یا استفاده از محصول شرکت نکرده اند و قصد خرید دارند. می توان بخش فروش را به آن متصل کرد و با گرفتن اطلاعات اولیه ای از افراد برای ارائه محصول یا فالو کردن این کیس ها برای تبدیل آنها از افرادی که قصد خرید دارند به افرادی که خرید را انجام میدهند. بخش فروش را متحول کرد و مارکتینک بسیار هدفمند و کارایی را پیاده سازی کرد که هم از اتلاف وقت جلوگیری کند و هم بخاطر هدفمند بودن از تبلیغات بی هدف و پرهزینه جلوگیری کرد.در کل می توان گفت که از این ایده برای بسیاری از موارد دیگر هم میتوان استفاده کرد و خروجی مناسبی از آن گرفت. ممنون از شما که این مقاله را مطالعه کردید و با من همراه بودید ممنون میشم که نظرات خود را راجع به این مقاله با من به اشتراک بگذارید. ممنونممنون از شما که در این سفر به دنیای Deeps با من همراه بودید.لینک انگلیسی  مقاله در Mediumلطفا اگر مایل بودید مقاله دیگر من&quot; ترنسفورمرها: قلم موی هوش مصنوعی برای نقاشی دنیای جدید (Vision Transformer) &quot; رو در ویرگول ببینید .چت Chat GPT-4o چیست – نسل جدید هوش مصنوعی OpenAI با قابلیت‌های چندرسانه‌ای را بشناسید!امیدوارم از مطالب لذت برده باشید .</description>
                <category>محمد جواد نجادی</category>
                <author>محمد جواد نجادی</author>
                <pubDate>Mon, 01 Jul 2024 20:28:03 +0330</pubDate>
            </item>
                    <item>
                <title>ترنسفورمرها: قلم موی هوش مصنوعی برای نقاشی دنیای جدید (Vision Transformer)</title>
                <link>https://virgool.io/@m.javadnejadi/%D8%AA%D8%B1%D9%86%D8%B3%D9%81%D9%88%D8%B1%D9%85%D8%B1%D9%87%D8%A7-%D9%82%D9%84%D9%85-%D9%85%D9%88%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%86%D9%82%D8%A7%D8%B4%DB%8C-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D8%AC%D8%AF%DB%8C%D8%AF-vision-transformer-rbst8lf5lwsv</link>
                <description># این مقاله با بررسی عمیق معماری‌های ترنسفورمر و کاربردهای آن‌ها فراتر از متن، به قدرت تحول‌آفرین ترنسفورمرها در حوزه تولید و پردازش عکس و ویدئو می‌پردازد.مورفئوس: &quot;آیا تا به حال خوابی دیده‌ای، نئو، که مطمئن بودی واقعی است؟ اگر نتوانی از آن خواب بیدار شوی چه؟ چگونه تفاوت بین دنیای خواب و دنیای واقعی را تشخیص می‌دهی؟&quot;فیلم ماتریکس 1991فیس رباتی که در تصویر میبینید چهره پیکاسو نقاش معروف معاصر است که با پرامپت من با ideogram تولیدشده است.لید شده در Ideogram، با پرامپت نویسندهمقدمهقطعا یکی از موضوعات مهمی که مخصوصا در حال حاظر ذهن ها را به خود مشغول کرده و روز به روز در حال پویایی و بهبود است موضوع تولید عکس و فیلم و Text با هوش مصنوعی است. LLM ها نشان دادند برای تولید متن چقدر می توانند عالی عمل کنند. بسیاری از مشکلات آن ها برای تولید متن حل شده اند. مشکل بزرگ LLM ها این است که گاهی در پاسخ هایی که ارائه می دهند دچار توهم می شوند. البته با ظهور مدل های جدید مثل LLM های چند وجهی این مشکلات کم و بیش در حال بهبود هستند. در زمان نوشتن این مقاله مدل جدید GPT-4o معرفی شد که من را بسیار شگفت زده کرد. قطعا OpenAI در حال تغییر بازی است. همچنین مدل قدرتمند Google یعنی Gemini 1.5 Pro هم بسیاری از تصورات ما را تغییر داد. در نتیجه می توانیم ببینیم که مدل ها در حال بهبود هستند. در واقع چرخ اختراع شده است و حال باید برای بهبود آن تلاش کرد. LLM ها اولین بار برای ترجمه توسعه پیدا کردند حال می بینیم که انواع تسک ها را انجام می دهد و بازی به سوی مدل های چند وجهی چرخیده است. همه اینها با معماری بسیار قوی و مهم Transformer  ها میسر شده است. در مقاله قبلی من با عنوان “Transformer Is All You Need ” معماری Transformer ها را برای Text به صورت کامل و عمیق بررسی کردیم. یکی دیگر از تسک هایی که Transformer می توانند انجام دهند تولید عکس است که در محصولاتی مثل DALL-E و میدجرنی یا ideogram می توانیم ببینیم. این مدل ها از ما Prampt به صورت Text می گیرند و تصویر تولید می کنند. در مدل LlaMa 3 که اخیرا منتشر شد. مدل در حال نوشتن Prampt تصویر را تولید می کند و با تغییر نوشته های ما تصویر تغییر می کند. اما شگفت انگیز تر از اینها تولید ویدئو با Text است. چند ماه پیش کمپانی OpenAI محصولی به نام Sora را معرفی کرد. بسیار خیره کننده و مبهوت کنند است. تولید تصویر با کیفیت بالا و بسیار طبیعی. تولید جهان های دیگر. با دیدن آن اولین چیزی که در ذهن من تداعی شد فیلم ماتریکس بود. در این مقاله می خواهیم از آغاز نگاهی به ایده تولید تصویر و سپس ویدئو با Text بیاندازیم و سیر تکامل آن را ببینیم. تولید عکس را بفهمیمیم و بعد تولید ویدئو و بفهمیم که از چه معماری برای آن استفاده می شود . آیا باز هم رد پای Transformer ها را پیدا می کنیم؟ بیاید با هم سطح را خراش دهیم با من همراه باشید.تاریخچهتولید اولین فیلم های تاریخ به سالهای 1880 باز می گردد. اولین فیلم های تاریخ که همه را شگفت زده می کرد. قطعا کسی تصورش را هم نمی کرد که در آینده به صنعتی بسیار قوی و همه گیر تبدیل شود. وقتی به تاریخچه هوش مصنوعی نگاه می کنیم برای یافتن ایده تولید فیلم با هوش مصنوعی باید به اوایل قرن بیستم سفر کنیم.با ظهور کامپیوترها، ایده تولید فیلم با هوش مصنوعی جان تازه‌ای گرفت. John Whitney، پیشگام انیمیشن کامپیوتری، در سال 1960، Motion Graphics Incorporated را تأسیس کرد که از رایانه آنالوگ مکانیکی  اختراع خود برای ایجاد سکانس‌های فیلم و عنوان تلویزیونی و تبلیغات استفاده می‌کرد. سال بعد، او رکوردی از جلوه های بصری که با استفاده از دستگاه خود به کمال رسانده بود، به نام کاتالوگ جمع آوری کرد. در سال 1966، IBM به John Whitney پدر اولین موقعیت هنرمند خود را اعطا کرد. بعد از آن در طول سالهای بعد مقالاتی برای تولید فیلم یا انیمیشن با کامپیوتر منتشر شد. استفاده از هوش مصنوعی در تولید فیلم و هنرهای نمایشی، به ویژه به شکلی که امروز وجود دارد، عمدتاً محصول پیشرفت‌های اخیر در دهه‌های 2000 و 2010 است. این فناوری‌ها شامل استفاده از الگوریتم‌های یادگیری عمیق، شبکه‌های عصبی مولد (GAN)، و دیگر تکنیک‌های پیشرفته هوش مصنوعی برای ایجاد و ویرایش تصاویر، ویدیوها و سایر محتوای دیجیتال هستند. در قسمت بعد می خواهیم راجع به تولید عکس با معماری Transformer ها یاد بگیریم و ببینیم که چطور کار میکند و آیا واقعا امکان پذیر است ؟معماری TransGANsشبکه‌های عصبی مولد خصمانه (GANs) قبل از معرفی Transformer ها برای پردازش تصویر و سایر وظایف مطرح شدند. GANها توسط Ian Goodfellow و همکارانش در سال 2014 در مقاله ای با همین نام معرفی شدند. https://arxiv.org/abs/1406.2661 ایده اولیه GAN که قبل از Transformer ها معرفی شدند شامل دو شبکه عصبی عمیق بود که با یکدیگر در یک بازی با مجموع صفر رقابت می‌کردند. اولی Generator است که سعی می‌کند نمونه‌های مصنوعی تولید کند و دومی Discriminator که سعی می‌کند نمونه‌های واقعی را از مصنوعی تشخیص دهد. در واقع هدف Generator تولید نمونه‌هایی است که Discriminator را فریب  دهد تا نتواند تفاوت بین نمونه‌های واقعی و مصنوعی را تشخیص دهد. ترکیب Transformerها با GANها (TransGAN) نشان می‌دهد که Transformer ها می‌توانند به عنوان Generator و Discriminator در GANها استفاده شوند. این مدل‌ها از مزایای Transformer ها در مدل‌سازی ویژگی‌های پیچیده داده‌ها بهره‌مند می‌شوند. این معماری در مقاله ای با همین نام در سال 2021 توسط Yifan Jiang, Shiyu Chang, Zhangyang Wang ارائه شد. https://arxiv.org/abs/2102.07074 شبکه TransGAN مخفف Transformer Generative Adversarial Networks است. این مدل یک نوع شبکه عصبی GAN است که از معماری Transformer برای Generator و Discriminator استفاده می‌کند.این تصویر معماری TransGAN و ساختار Generator و Discriminator را به خوبی نشان میدهد. تصویر ورودی یک عکس 3*3 و رنگی است. منبعمولد Generatorشبکه TransGAN از یک ساختار Transformer بدون استفاده از CNN برای هر دو بخش Generator و Discriminator استفاده می‌کند. در یک TransGAN، Generator از معماری Transformer استفاده می‌کند تا توالی‌هایی از داده‌ها را تولید کند. Generator با یک ورودی نویز تصادفی شروع می‌کند. این ورودی معمولاً یک بردار با مقادیر تصادفی از یک توزیع گاوسی (نرمال) است. این ورودی نویز به یک فضای ویژگی با ابعاد بالاتر تبدیل می‌شود. این مرحله شامل چندین لایه Feed-Forward و MHA است. مولد Transformer ، توالی‌های داده‌ای را مرحله به مرحله تولید می‌کند. در هر مرحله، Generator قسمتی از داده (مثلاً یک پیکسل از تصویر) را تولید می‌کند و سپس از این خروجی به عنوان ورودی برای تولید مرحله بعدی استفاده می‌کند. مکانیزم attention به Generator کمک می‌کند تا وابستگی‌های طولانی‌مدت و پیچیدگی‌های موجود در داده‌ها را مدل کند. پس از تولید کامل توالی داده‌ها، این توالی‌ها به یک نمونه کامل تبدیل می‌شوند (مثلاً یک تصویر کامل). این تبدیل شامل بازسازی ویژگی‌های پیچیده و جزئیات نهایی است.متمایز کننده Discriminatorمتمایز کننده (Discriminator) در TransGAN واقعی یا مصنوعی بودن نمونه‌های تولید شده توسط Generator را تشخیص می دهد و از معماری Transformer استفاده می‌کند تا توالی‌ داده های تولید شده را تحلیل کند. در وحله اول Discriminator ، نمونه‌هایی که می‌توانند تصاویر واقعی یا مصنوعی باشند را دریافت می‌کند. این نمونه‌ها به صورت توالی‌هایی از پچ‌های تصویری (Patch Sequences) به مدل وارد می‌شوند. هر Patch می‌تواند یک بخش کوچک از تصویر (مثلاً یک بلوک 16x16  پیکسلی) باشد. هر Patch تصویری ابتدا به یک نمایش برداری تبدیل می‌شود. این نمایش برداری معمولاً از طریق یک Embedding Layer به دست می‌آید که هر Patch را به یک بردار با ابعاد مشخص تبدیل می‌کند. این بردارها سپس با Position Embeddings ترکیب می‌شوند تا اطلاعات مکانی هر Patch حفظ شود. توالی Patch ‌های رمزگذاری شده به چندین لایه MHA وارد می‌شود. این لایه‌ها به Discriminator اجازه می‌دهند تا وابستگی‌های بلندمدت و ارتباطات بین Patch ‌های مختلف تصویر را مدل کند. MHA کمک می‌کند تا مدل بتواند به ویژگی‌های مختلف تصویر به طور همزمان attention کند. خروجی لایه‌های attention وارد چندین لایه Feed-Forward می‌شود. این لایه‌ها ویژگی‌های ترکیبی را استخراج و پردازش می‌کنند و نمایی پیچیده‌تر و غنی‌تر از تصویر به دست می‌آورند. خروجی‌های نهایی از لایه‌های Feed-Forward به یک لایه تجمع (Aggregation Layer) وارد می‌شوند. این لایه تمامی ویژگی‌های استخراج شده را به یک نمای کلی تبدیل می‌کند. سپس این نمای کلی به یک لایه نهایی (مانند یک لایه Dense) متصل می‌شود که تصمیم نهایی را در مورد واقعی یا مصنوعی بودن تصویر می‌گیرد.استفاده از Transformer در GANها نتایج خوبی را نشان داده است. با این حال، کارایی TransGAN در مقایسه با روش‌های دیگر ممکن است به وابستگی به منابع محاسباتی بیشتر و نیاز به داده‌های آموزشی بزرگتر محدود شود. به عبارت دیگر، TransGAN ممکن است در محیط‌ هایی که منابع محاسباتی کافی وجود دارد و داده‌های آموزشی زیادی در دسترس است، کارایی بالایی داشته باشد.معماری ViTGANمدل ViTGAN یک مدل یادگیری عمیق جدید برای تولید تصویر هست که توسط Kwonjoon Lee و همکارانش در سال 2022 در مقاله ای معرفی شد. https://arxiv.org/abs/2107.04589 این مدل ترکیبی از مدل‌های Transformer و شبکه‌های مولد مقابله‌ای (GANs) هست و می‌تونه تصاویر واقعی و باکیفیتی تولید کنه. مدل ViTGAN از یک مدل Transformer به عنوان Encoder استفاده می‌کنه. این مدل توالی توکن‌های ورودی رو پردازش می‌کنه و یک بردار پنهان تولید می‌کنه که اطلاعات مربوط به محتوای تصویر رو در خودش ذخیره می‌کنه. ViTGAN از یک شبکه GAN استفاده می کند. Generator بردار پنهان رو به یک تصویر تبدیل می‌کنه، در حالی که Discriminator سعی می‌کنه تشخیص بده که تصویر واقعی هست یا جعلی. این دو شبکه به طور همزمان  آموزش داده می‌شن تا Generator بتونه تصاویر واقعی‌تری تولید کنه و Discriminator بتونه تصاویر جعلی رو بهتر تشخیص بده. از جمله مزایای ViTGAN این هست که می‌تونه تصاویر باکیفیتی تولید کنه که با تصاویر واقعی قابل مقایسه هستن. همچنین برای تولید انواع مختلف تصاویر، از جمله تصاویر چهره، منظره و اشیا، استفاده بشه در نتیجه برای تولید تصاویر Deepfake مناسب هست. ViTGAN به کاربران اجازه می‌ده تا تصاویر رو با تنظیم پارامترهای مختلف مدل، کنترل کنن.هر دو مولد (Generator) و متمایز کننده (Discriminator) می‌توانند از معماری ViT بهره ببرند. سمت چپ Generator پچ‌های تصادفی ورودی را به تصویر تبدیل کند که شامل چندین لایه Transformer باشد که اطلاعات را از ورودی‌های تصادفی به یک تصویر خروجی تبدیل می‌کنند. سمت راست Discriminator می‌تواند از همان معماری ViT برای پردازش تصویر استفاده کند. پچ‌های تصویر را به توکن‌ها تبدیل کرده و سپس از لایه‌های Transformer استفاده کند تا تصمیم بگیرد که آیا تصویر ورودی واقعی است یا تولید شده.   Sourceالبته هر مدلی معایبی هم داره اولین اونها پیچیدگی هست. ViTGAN یک مدل پیچیده هست که آموزش و استفاده از اون می‌تونه دشوار باشه و برای آموزش به حجم زیادی از داده نیاز داره. ViTGAN می‌تونه کند باشه، به خصوص زمانی که برای تولید تصاویر با وضوح بالا استفاده می‌شه. از جمله مهم ترین کاربردهای اون ایجاد محتوای بصری برای وب‌سایت‌ها، شبکه‌های اجتماعی و سایر پلتفرم‌ها استفاده بشه و همچنین بهبود کیفیت تصاویر موجود، مثل افزایش وضوح یا حذف نویز، استفاده بشه. برای ایجاد فرمت‌های تصویری جدید، مثل تصاویر 360 درجه یا تصاویر تعاملی، هم میتونه استفاده بشه. ViTGAN یک مدل جدید برای تولید تصویر هست که میتونه نحوه تولید تصاویر رو به طور کامل تغییر بده. با این حال، قبل از اینکه به طور گسترده مورد استفاده قرار بگیره، باید برخی از چالش‌های مربوط به پیچیدگی، نیاز به داده و سرعت رو حل کرد.قبل از ViTپیش از معرفی معماری Vision Transformer (ViT)، بسیاری از وظایف مرتبط با پردازش تصویر مانند پیدا کردن شیء در تصویر، توصیف تصویر، و تولید تصویر با استفاده از مدل‌های مثل Convolutional Neural Networks(CNNs) یا و مدل‌های مولد Generative Adversarial Networks(GAN) و VAEs (Variational Autoencoders) قابل پیاده سازی بود.به طور مثال برای پیدا کردن شیء در تصویر از  CNNs استفاده می‌شد. بعضی از معروف ترین های آنها YOLO (You Only Look Once) یک معماری CNN که به طور مستقیم بر روی کل تصویر به عنوان یک ورودی عمل می‌کند و اشیاء را به سرعت و با دقت بالا شناسایی می‌کند. و یا معماری بعدیR-CNN (Region-based Convolutional Neural Networks) و نسخه‌های بعدی آن مانند Fast R-CNN و Faster R-CNN این مدل‌ها با شناسایی مناطق جالب در تصویر و سپس اعمال CNN برای تشخیص اشیاء در این مناطق، عملکرد خوبی در شناسایی شیء داشتند. برای image captioning، معمولاً از ترکیبی از CNN و RNN به این صورت که ابتدا از یک CNN برای استخراج ویژگی‌های تصویر استفاده می‌شد. سپس این ویژگی‌ها به یک شبکه RNN یا LSTM (Long Short-Term Memory) داده می‌شدند تا متن توصیفی تولید شود.  برای تولید تصویر هم از مدل‌های مولد مانند (GAN (Generative Adversarial Network ها که این مدل شامل دو شبکه (مولد و متمایزکننده) است که با هم رقابت می‌کنند. مولد تصاویر جدید تولید می‌کند و متمایزکننده سعی می‌کند تصاویر تولید شده را از تصاویر واقعی تمیز دهد. همچنین VAE (Variational Autoencoder) یک نوع دیگر از شبکه‌های مولد که برای تولید داده‌های جدید با یادگیری توزیع داده‌های ورودی استفاده می‌شود.مقایسه ViTGAN و TransGANمدل های، ViTGAN و TransGAN هر دو از مفاهیم شبکه‌های GAN و معماری Transformer ها بهره می‌برند. تفاوت‌ های اصلی با هم دارند. در ViTGAN، از مدل Vision Transformer به عنوان بخش اصلی Generator استفاده می‌شود و ممکن است همچنان در Discriminator از CNN‌ها استفاده کند. این معماری به دلیل استفاده از Self-Attention می‌تواند به طور موثر جزئیات تصویر را مدل‌سازی کند. هدف اصلی ViTGAN بهبود کیفیت تولید تصاویر با استفاده از مزایای Transformer ها در مدل‌سازی روابط بلندمدت بین پیکسل‌ها است. در حالیکه TransGAN از ابتدا تا انتها بدون نیاز به CNN‌ها و فقط از معماری Transformer ها استفاده می‌کند. این یک تفاوت کلیدی است زیرا اکثر مدل‌های GAN به نوعی از CNN استفاده می‌کنند. در معماری TransGAN از بلاک‌های Transformer در هر دو بخش Generator و Discriminator استفاده می شود. این مدل سعی دارد تا مشکلات مربوط به یادگیری و پایداری که معمولاً در GAN‌ها وجود دارد را با استفاده از Self-Attention در Transformer ها بهبود بخشد.بعد از Attention is All You Need !بعد  از ارائه مقاله &quot;Attention is All You Need&quot;، که توسعه معماری Transformer را معرفی کرد، بسیاری از مقالات و تحقیقات در زمینه استفاده از این معماری برای تولید ویدئو و تصاویر ارائه شد. در سال 2018 Niki Parmar و دیگران ایده استفاده از معماری Transformer برای تولید تصاویر را در مقاله ای با عنوان &quot;Image Transformer&quot; ارائه کردند. https://arxiv.org/abs/1802.05751 در معماری Transformer به جای استفاده از توالی‌های خطی برای پردازش متن، از مکانیزم attention برای یادگیری روابط بین کلمات در یک جمله استفاده می‌کرد. مقاله &quot;Image Transformer&quot; نشان می دهد که می‌توان از معماری Transformer برای تولید تصاویر نیز استفاده کرد. آنها این کار را با جایگزینی کلمات با پیکسل‌ها و استفاده از مکانیزم attention برای یادگیری روابط بین پیکسل‌ها در یک تصویر انجام دادند. این امر به Image Transformer اجازه می‌داد تا الگوهای موجود در تصاویر را درک کند و تصاویر جدیدی با سبک و محتوای مشابه تصاویر ورودی تولید کند. این مقاله الهام‌بخش تحقیقات زیادی در این زمینه شد و به توسعه روش‌های جدید و پیشرفته‌تر برای تولید تصاویر با هوش مصنوعی مانند GANs (Generative Adversarial Networks) و Diffusion Models کمک کرد.معماری Image Transformer در مقایسه با روش‌های قبلی تولید تصاویر، مزایای متعددی داشت از جمله اینکه کیفیت تصویر بالاتر و جزئیات بیشتر بود. همچنین به کاربران امکان می‌داد تا با استفاده از پارامترهای مختلف، کنترل بیشتری بر محتوای تصاویر تولیدی داشته باشند. از همه مهم تر از نظر محاسباتی کارآمدتر بود و می‌توانست تصاویر را سریع‌تر تولید کند. کاربردهای Image Transformer را در حال حاضر در طیف گسترده‌ای از تسک ها می بینیم. برای تولید تصاویر هنری، تصاویر فانتزی و تصاویر انتزاعی، ویرایش تصاویر، مانند تغییر رنگ، اضافه کردن جزئیات و حذف اشیاء. تولید گرافیک‌های واقع‌گرایانه در بازی‌های ویدئویی تولید تصاویر و ویدئوهای واقع‌گرایانه برای استفاده در واقعیت مجازی و افزوده و خیلی کاربردهای دیگر که روز به روز در حال آپدیت شدن و بهتر شدن است.لایه‌های Embedding در Image Transformerدر Image Transformer نیز از لایه‌های Embedding استفاده می‌شود، اما تفاوت هایی با Embedding مدل‌های Transformer برای پردازش متن دارد. در واقع برای Embedding در Image Transformer ، باید پیکسل‌ها و اطلاعات تصویری را به فضای برداری مناسب تبدیل کرد. به عبارت دیگر، نیاز به یک روش تبدیل تصویر به بردارهایی دارد که مدل Transformer بتواند با آن‌ها کار کند. معمولاً توسط لایه‌های CNN اولیه انجام می‌شود که با استفاده از آنها ویژگی‌های مهم تصویر را در لایه‌های عمیق تر استخراج می‌شود. لایه‌های CNN به عنوان بخش اولیه ورودی در معماری Image Transformer وجود دارند و پس از آن لایه Embedding برای تبدیل ویژگی‌های تصویر به فضای برداری به کار می‌رود. پس از استخراج ویژگی‌های تصویر توسط لایه‌های CNN، لایه Embedding به عنوان بخش بعدی از مدل وارد عمل می‌شود. لایه Embedding تابعی است که ویژگی‌های استخراج شده را به فضای برداری تبدیل می‌کند که قابلیت استفاده در شبکه‌های Transformer را داشته باشد. فرمول خاصی برای Embedding تصاویر وجود ندارد، اما این Embedding معمولاً با استفاده از وزن‌های شبکه‌های کانولوشنی و لایه‌های Embedding ایجاد می‌شود که به طور خاص به ساختار مدل و نوع مسئله پردازش تصویر بستگی دارد.مراحل بعد از Embedding در Image Transformer مشابه با Transformerهای متن است مرحله اول مکان‌یابی خود می باشد که با استفاده از تکنیک‌هایی مانند Positional Encoding به مدل کمک می‌کند تا موقعیت نسبی هر پچ در تصویر را درک کند. بعد با مکانیزم Attention به مدل کمک می‌کند تا بر روی بخش‌های مهم تصویر تمرکز کند.  سپس مرحله Feed-Forward که به مدل کمک می‌کند تا اطلاعات را از لایه‌های قبلی به لایه‌های بعدی منتقل کند. مرحله نهایی، که با استفاده از یک لایه خروجی مناسب برای وظیفه مورد نظر انجام می‌شود، مانند طبقه‌بندی تصویر یا تشخیص اشیاء. این مراحل در Encoder انجام می شود.مراحل Encoder-Decoder Image Transformerدر معماری Image Transformer، Encoder مسئول تبدیل ورودی (در اینجا تصاویر) به فضای ویژگی‌هاست، در حالی که Decoder مسئول تبدیل فضای ویژگی‌ها به تصویر خروجی است. در Encoder Image Transformer از یک معماری Transformer استاندارد با تعدادی تعدیل برای پردازش تصاویر استفاده می‌کند. این تعدیل‌ها شامل تغییراتی در لایه‌ها یا افزودن لایه‌های جدید برای متناسب ساختن معماری با ویژگی‌های تصاویر است. به عنوان مثال، در استفاده از معماری Transformer برای پردازش تصاویر، معمولاً از لایه‌های CNN یا لایه‌های Multi-head Attention (MHA) به جای self-attention در معماری Transformer متنی استفاده می‌شود. همچنین، معماری و اندازه شبکه نیز ممکن است برای متناسب ساختن با حجم و پیچیدگی تصاویر تغییر کند.در Decoder Image Transformer  هم مانند Encoder از معماری Transformer استاندارد با تعدادی تعدیل برای تولید تصاویر استفاده می‌کند. Decoder Transformer های تولید متن از معماری Transformer استاندارد یا معماری‌های اصلاح‌شده مانند Transformer با تولید خودکار (autoregressive) استفاده می‌کنند. فرض کنید می‌خواهیم از Image Transformer برای تولید تصویر گربه بر اساس یک جمله توصیفی استفاده کنیم. Encoder جمله توصیفی را پردازش می‌کند و اطلاعاتی در مورد ویژگی‌های مختلف گربه مانند شکل، رنگ و اندازه را استخراج می‌کند. Attention مکانی به Encoder کمک می‌کند تا بر بخش‌های مهم جمله مانند کلماتی که به رنگ، شکل و اندازه گربه اشاره می‌کنند، تمرکز کند. Decoder از اطلاعات استخراج ‌شده توسط Encoder برای تولید یک تصویر از یک گربه با ویژگی‌های توصیف ‌شده در جمله استفاده می‌کند.توصیف تصویر با متن (Image Captioning)اگر بخواهیم از Transformer تولید متن برای توصیف تصویر با متن استفاده کنیم. مدل باید بتواند اطلاعات مهم از تصویر را شناسایی کرده و آن‌ها را به صورت متنی ارائه دهد. در این تسک بلوک Encoder تصویر را پردازش می‌کند و اطلاعاتی در مورد اشیاء، رنگ‌ها و بافت‌های مختلف موجود در تصویر را استخراج می‌کند. Attention مبتنی بر توالی به Encoder کمک می‌کند تا بر بخش‌های مهم تصویر مانند اشیاء و جزئیات کلیدی تمرکز کند. Decoder از اطلاعات استخراج‌ شده توسط Encoder برای تولید یک جمله که تصویر را توصیف می‌کند استفاده می‌کند.در اینجا مراحل Image Captioning را با استفاده از معماری Transformer ها می بینیم . منبعبه عنوان مثال، فرض کنید تصویری از یک سگ در حیاط را دارید. مدل باید بتواند اطلاعاتی مانند نوع سگ، رنگ، مو، اندازه، موقعیت در تصویر، و احتمالاً فعالیتی که سگ انجام می‌دهد (مثلاً خوابیدن یا بازی کردن) را استخراج کرده و به صورت جمله‌ای منطبق بر این اطلاعات توصیف کند. به عنوان مثال، جمله‌ای ممکن است به این شکل باشد: &quot;یک سگ سفید با موهای بلند در حیاط بازی می‌کند.&quot; در این جمله، اطلاعات مهمی از تصویر (رنگ سگ، بافت مو، موقعیت در تصویر، و فعالیت) به صورت متنی توصیف شده‌اند. در قسمت بعد میخواهیم موارد استفاده و نحوه کارکرد Transformer را برای تولید یا نفسیر ویدئو بررسی کنیم. با من همراه باشید.مقایسه Image Transformer با Transformer های تولید متناین دو معماری شباهت ها و تفاوت هایی با هم دارند. در واقع هم Image Transformer و هم Transformer های تولید متن از مکانیزم attention برای تمرکز بر بخش‌های خاصی از داده‌های ورودی هنگام پردازش و تولید خروجی استفاده می‌کنند. هر دو معماری از ساختار Encoder-Decoder استفاده می‌کنند. Encoder داده‌های ورودی را پردازش می‌کند و Decoder از اطلاعات استخراج ‌شده توسط Encoder برای تولید خروجی استفاده می‌کند. هر دو معماری از شبکه‌های عصبی عمیق با لایه های متعدد برای یادگیری روابط پیچیده بین داده‌هااستفاده می‌کنند. اما تفاوت هایی که این دو معماری با هم دارند باعث تمایز آنها می شود از جمله اینکه تسک Image Transformer برای پردازش و تولید تصاویر است در حالیکه Transformer ها برای پردازش و تولید متن بودند بنابراین نوع داده های آنها با هم متفاوت است.از جمله مهم ترین تفاوت های آن ها این است که در معماری Image Transformer، از توجه مکانی (Spatial Attention) برای تمرکز بر بخش‌های مختلف یک تصویر هنگام پردازش و تولید آن استفاده می‌شود. Spatial Attention از دو مرحله اصلی تشکیل شده است. مرحله اول محاسبه مقادیر Attention است که مدل برای هر پیکسل در تصویر یک مقدار Attentionمحاسبه می‌کند. این مقدار نشان می‌دهد که مدل تا چه حد به آن پیکسل Attention دارد. محاسبه مقادیر Attention می‌تواند با استفاده از شبکه‌های عصبی کوچک برای هر پیکسل در تصویر یک مقدار Attention پیش‌بینی ‌کند یا از توابعی مانند تابع گاوسی برای محاسبه مقادیر Attention بر اساس فاصله بین پیکسل و مرکز تصویر استفاده می‌شود.بعد از محاسبه توجه باید اعمال مقادیر توجه برای تنظیم وزن اطلاعات مربوط به هر پیکسل استفاده می‌شود. به این معنی که پیکسل‌هایی که مقادیر Attention بالاتری دارند، تاثیر بیشتری بر خروجی مدل خواهند داشت. اعمال مقادیر Attention می‌تواند به روش‌های مختلفی انجام شود، می تواند مقدار Attention هر پیکسل در وزن مربوط به آن پیکسل ضرب می‌شود یا میانگین وزنی از اطلاعات مربوط به تمام پیکسل‌ها محاسبه می‌شود. از جمله مزایای متعددی استفاده از Spatial Attention اینکه به مدل کمک می‌کند تا بر بخش‌های مهم تصویر تمرکز کند و از آنها برای تولید خروجی دقیق‌تر استفاده کند. همچمنین از نویز و اطلاعات غیرمرتبط در تصویر چشم‌پوشی کند و از آنها برای تولید خروجی استفاده نکند و جزئیات دقیق‌تر و ظریف‌تر را در تصویر تشخیص دهد و آنها را در خروجی نهایی حفظ کند. در حالی که Transformer های تولید متن از Attention مبتنی بر توالی (sequential attention) برای تمرکز بر کلمات مختلف در یک جمله استفاده می‌کنند.سوال؟سوالی که در اینجا مطرح می شود اینکه چرا مدل‌های Transformer پیش از این برای تصاویر استفاده نمی‌شدند؟ دلایل اصلی که می توان برای اون بررسی کرد این است که پیچیدگی محاسباتی ای که برای پردازش تصاویر با Transformers به مقدار زیادی از حافظه و محاسبات نیاز دارد که با توجه به ابعاد بزرگ تصاویر، چالش برانگیز بود. دلیل بعدی اینکه داده‌های تصویر کمتر ساختار یافته بودند یعنی تصاویر برخلاف زبان که دارای توالی زمانی است، ساختار متفاوتی دارند که نیاز به تطبیق و تنظیم مدل‌ها دارد و همچنین می دانیم که مدل‌های Transformer نیازمند به داده‌های بسیار زیاد هستند تا به درستی آموزش ببینند و قبل از دسترسی به داده‌های کافی و برچسب‌گذاری شده، آموزش چنین مدل‌هایی مشکل بود. در قسمت بعد میخواهیم معماری شبکه‌های Transformer ویدئو (VTNs) را برای تولید ویدئو با استفاده از Transformer ها بررسی کنیم با من همراه باشید!شبکه‌های Transformer ویدئو (VTNs)در سال 2021 یک مقاله تحقیقاتی که توسط Daniel Neimark, Omri Bar, Maya  Zohar, Dotan Asselmann  منتشر شد. شبکه‌های Transformer ویدئو (VTNs) و به توسعه معماری Transformer برای تولید ویدئو می‌پردازد. این مقاله تلاش می‌کند تا معماری Transformer را برای تولید ویدئو توسعه دهد. https://arxiv.org/abs/2102.00719 تا زمان انتشار این مقاله، بیشتر استفاده‌های Transformer در پردازش زبان طبیعی و تولید متن مورد توجه بودند. اما &quot;Video Transformer Networks&quot; با ارائه یک معماری Transformer ویژه برای تولید ویدئو، که می‌تواند توالی‌های تصاویر را به عنوان ورودی دریافت کرده و ویدئوهایی جدید را تولید کند. این مدل از قابلیت‌های خودآموزی برای یادگیری الگوهای زمانی و دیدگاه‌های چندرسانه‌ای بهره می‌برد، تا توانایی تولید ویدئوهای واقعی‌تر و با کیفیت‌تر را داشته باشد. در ادامه می خواهیم ببینیم که این معماری چطور کار می کند. در معماری VTNها مشابه مدل‌های Transformer سنتی ساختار Encoder-Decoder برای پردازش و تولید دنباله‌ها استفاده می‌کنند. Encoder وظیفه استخراج ویژگی‌های مختلف از فریم‌های ویدئو ورودی بر عهده دارد ، در حالی که Decoder مسئول تولید دنباله‌های جدید ویدئو است.نحوه Embedding در VTNsدر VTN هم از  Embedding در Encoder و Decoder استفاده می‌شود. Embedding در واقع وظیفه تبدیل ورودی‌های متنی یا تصویری به فضایی با ابعاد کمتر است که مدل بتواند به آن‌ها دسترسی داشته باشد. این کار باعث می‌شود که اطلاعات مورد نیاز برای پردازش توسط مدل کاهش یابد و در عین حال، اطلاعات مهم حفظ شود. در Encoder، Embedding وظیفه تبدیل ویژگی‌های تصویر یا ویدئو به فضای Embedding را دارد تا اطلاعات مهم استخراج شود. در Decoder نیز، Embedding برای تبدیل خروجی‌های قبلی (مانند کلمات در مدل‌های متنی یا فریم‌ها در مدل‌های ویدئویی) به فضای Embedding استفاده می‌شود تا مدل بتواند اطلاعات مناسب را برای تولید خروجی بعدی فهمیده و استفاده کند. همچنین VTNها به طور گسترده از مکانیسم‌های self-attention برای ضبط وابستگی‌های برد بلند در داخل و بین فریم‌های ویدئو استفاده می‌کنند. این به چه معناست ؟ این وابستگی‌ها به مدل اجازه می‌دهند که روابط زمانی و معنایی بین فریم‌ها برای تولید ویدئوهای منسجم و واقع‌گرایانه را بشناسد و درک کند. این امر مدل را قادر می‌سازد تا روابط زمانی پیچیده را یاد بگیرد و دنباله‌های ویدئویی منسجمی را تولید کند.عملکرد self-attention در VTNهادر VTNها برای هر فریم در دنباله ویدئو، ماتریس توجهی  را محاسبه می‌کنند. و سپس بر اساس ماتریس توجه، VTNها به هر فریم در دنباله وزنی اختصاص می‌دهند. این وزن‌ها نان‌دهنده اهمیت هر فریم در تولید فریم فعلی است. این ماتریس نشان می‌دهد که هر فریم چقدر به سایر فریم‌ها در دنباله مرتبط است و از اطلاعات تمام فریم‌ها در دنباله ویدئو، با توجه به وزن‌های محاسبه شده، برای تولید فریم فعلی استفاده می‌کنند. در نتیجه می تواند روابط زمانی پیچیده بین فریم‌ها را در نظر بگیرد و ویدئویی منسجم تولید کند.کاربردهای VTN هااز جمله کاربردهای مهم آن تولید تصویر به ویدئو است که  VTNها می‌توانند ویدئوهایی واقع‌گرایانه تولید کنند که به نظر می‌رسد از لحاظ زمانی و مکانی منسجم و واقع‌گرایانه باشند. این قابلیت به ویژه در کاربردهایی مانند تولید محتوا، انیمیشن‌سازی و ویرایش ویدئو مفید است. می‌توانند به مدل‌ها کمک کنند تا درک بهتری از محتوای ویدئوها داشته باشند که کاربردهایی مانند تحلیل ویدئو، تشخیص اشیا در ویدئو، ویدئوهای نظارتی و پیش‌بینی حرکاتمفید باشد. با یک تصویر ثابت، VTNها می‌توانند یک دنباله ویدئویی تولید کنند که مفهومی یکسان را به تصویر می‌کشد. می‌توانند نواحی گمشده یا خراب شده یک دنباله ویدئو را ترمیم کنند در حالیکه انسجام  فریم‌های اطراف را حفظ کنند.  VTNها می‌توانند وضوح ویدئوهای کم کیفیت را با تولید دنباله‌های با وضوح بالا که محتوای اصلی و جزئیات را حفظ می‌کنند، افزایش دهند. یکی از کاربردهای مهم VTNs، تولید ویدئو با پرامپت متنی یا سایر انواع داده‌ها است. مدل‌های پیشرفته که امروزه ارائه شده اند  Vidu , Sora از این قابلیت بهره می‌برند و می‌توانند ویدئوهای واقع‌گرایانه و پیچیده‌ای تولید کنند.معرفی VTNها زمینه‌های جدیدی را برای تحقیق و توسعه در این زمینه گشوده و منجر به پیشرفت‌های قابل توجهی در قابلیت‌های تولید ویدئو شده است. این مقاله به طور گسترده مورد استناد و تأثیرگذار بوده و الهام‌بخش numerous follow-up works است که بیشتر به بررسی و پالایش کاربرد معماری‌های Transformer برای تولید ویدئو می‌پردازند. محققان در تلاشند تا مدل‌های کارآمدتری ایجاد کنند که بتوانند اطلاعات مکانی و زمانی را به طور همزمان و با دقت بیشتری پردازش کنند. مثلا استفاده از Temporal Attention Mechanisms برای بهبود مکانیزم‌های توجه زمانی برای مدل‌سازی بهتر روابط بین فریم‌های ویدئویی و یا Spatiotemporal Transformers که توسعه Transformer های فضا-زمانی که توانایی پردازش اطلاعات مکانی و زمانی را به طور همزمان دارند. در مدل های قدیمی تر ضعف هایی در مقایسه با VTN وجود دارد. مثلا شبکه‌های بازگشتی (RNN) ها و LSTMها که برای پردازش دنباله‌های زمانی استفاده می‌شدند، اما آن‌ها معمولاً نمی‌توانند وابستگی‌های طولانی‌مدت را به خوبی ضبط کنند.  VTNها با استفاده از مکانیزم Self-Attention این محدودیت‌ها را برطرف کرده‌اند. شبکه‌های Transformer معمولاً مقیاس‌پذیری بهتری نسبت به RNNها دارند و می‌توانند با داده‌های بزرگ‌تر و پیچیده‌تر به خوبی کار کنند.تفاوت VTNs با Image Transformationدر واقع Image Transformationبر روی تصاویر استاتیک متمرکز و هدف آن تغییر یا دستکاری یک تصویر واحد است. در مقابل، VTNها برای تولید دنباله‌های ویدئویی طراحی شده‌اند و باید روابط زمانی و معنایی بین فریم‌ها را در نظر بگیرند. در VTNها self-attention به طور خاص برای ضبط این وابستگی‌های long-range dependencies طراحی شده است، این وابستگی‌ها می‌توانند تغییرات جزئی و تدریجی در فریم‌های متوالی یا حرکات کلی در طول ویدئو باشند. در حالی که تکنیک‌های image transformation معمولاً بر روی ویژگی‌های فضایی تصاویر تمرکز دارند. در نتیجه، تفاوت اصلی بین تکنیک‌های image transformation و VTNها در نحوه پردازش اطلاعات زمانی و فضایی است.ساختار (ViViT)A Video Vision Transformerمعماری ViViT که در مقاله‌ای در سال 2021 توسط Google Research منتشر شد، برای پردازش و تحلیل داده‌های ویدئویی با استفاده از مدل‌های ترنسفورمر طراحی شده است. https://arxiv.org/abs/2103.15691 در معماری ViViT پردازش ویدئوها با استفاده از معماری Transformer و بدون نیاز به CNN برای استخراج ویژگی‌های اولیه انجام می شود. ساختار Encoder-Decoder در Vision Transformers (ViTs) برای پردازش ویدئو و تصویر مشابه است، اما چون ماهیت داده‌های ورودی (تصویر در مقابل ویدئو)، تفاوت‌هایی در پیاده‌سازی و کاربرد های این معماری ایجاد می کند. مثلا ساختار Encoder در VTN ها ، نیاز به در نظر گرفتن بُعد زمانی و مکان دارد. ساختارهای Encoder-Decoder برای ویدئو (مانند ViViT - Video Vision Transformers) معمولاً شامل تغییراتی هستند تا اطلاعات زمانی و مکانی را به طور همزمان مدل کنند. چون که ویدئو مانند تصویر استاتیک نیست و اطلاعات زمانی در آن مهم است. به طور کلی، این مدل‌ها از چندین فریم به عنوان ورودی استفاده می‌کنند. چرا که ویدئو از توالی‌ای از فریم‌ها (تصاویر ثابت) تشکیل شده است که به سرعت یکی پس از دیگری نمایش داده می‌شوند تا حرکت و تغییرات در طول زمان را به تصویر بکشند و این ویژگی‌ها را به بردارهای با ابعاد کمتر(embeddings) تبدیل می‌کند. این بردارها شامل اطلاعات مهمی از هر فریم هستند که مدل نیاز دارد تا روابط زمانی و مکانی بین فریم‌ها را بفهمد.این تصویر که از مقاله اصلی گرفته شده است نحوه کارکرد (ViViT) را به خوبی نشان می دهد. سمت چپ به صورت واضح معماری یک بلوک Encoder را می بینیم کهتوکن های ورودی آن فریم های تصویر هستند و سمت تجزیه و تحلیل‌های متناظر با الگوهای مختلف Attention  در طول زمان و فضا را مشاهده می کنید. منبعهمچنین از مکانیزم Self-Attention برای استخراج ویژگی‌ها و درک روابط بین patch ها (در تصاویر) یا فریم‌ها (در ویدئوها) استفاده می‌کنند. برای ویدئوها، علاوه بر توجه به روابط مکانی بین patch ها، نیاز به مدلسازی روابط زمانی بین فریم‌ها نیز وجود دارد. این کار معمولاً با استفاده از مکانیزم‌های Attention بر روی توالی فریم‌ها انجام می‌شود. این مکانیزم به مدل اجازه می‌دهد تا روابط زمانی و مکانی بین فریم‌ها را در نظر بگیرد. در هر مرحله، Self-Attention ماتریسی از وزن‌ها را محاسبه می‌کند که نشان می‌دهد هر فریم تا چه حد به سایر فریم‌ها مرتبط است. این ماتریس کمک می‌کند تا مدل بتواند اطلاعات مهم را از کل دنباله ویدئویی استخراج کند. همچنین به دلیل ابعاد زمانی اضافی، معمولاً پیچیدگی محاسباتی و منابع بیشتری نسبت به تصاویر دارد.مراحل پردازش در بخش Decoder در ViViT معمولاً شامل مراحلی مشابه با بخش Decoder در دیگر مدل‌های Transformer است. ابتدا، توکن‌های ورودی به بردارهای ویژگی (Embedding) تبدیل می‌شوند. در مورد ویدئو، این توکن‌ها می‌توانند نمایانگر ویژگی‌های استخراج‌شده از پچ‌های فریم‌ها باشند.اضافه کردن اطلاعات مکانی-زمانی به بردارهای ویژگی، همان مرحله Positional Encoding است  به طوری که مدل بتواند موقعیت هر توکن در توالی را درک کند.مرحله مهم Masked MHA در معماری ViViTمراحل تولید ویدئو در مدل‌های ViViT ، مشابه با تولید دنباله‌های متنی خواهد بود، با این تفاوت که خروجی هر مرحله یک فریم ویدئو است. بخش Decoder به طور معمول برای تولید خروجی‌هایی مانند برچسب‌های طبقه‌بندی، شرح‌های ویدئو، یا وظایف مشابه استفاده می‌شود، اما برای تولید فریم‌های ویدئو از ابتدا (ویدئو جنریشن) معماری‌های دیگری مانند Video GANها یا Video Autoencoders بیشتر رایج هستند. در این زمینه، MMHA در Decoder می‌تواند نقش مهمی ایفا کند. درمعماری Decoder، مدل های ViViT مرحله‌ی اولیه شامل یک لایه MMHA است که به توکن‌های خروجی قبلی نگاه می‌کند و روابط بین آن‌ها را مدل می‌کند. در این مرحله، از Masking استفاده می‌شود تا مدل فقط بتواند به توکن‌های قبلی نگاه کند و نه توکن‌های آینده. این مسئله در تولید ویدئو بسیار مهم است زیرا هر فریم باید بر اساس فریم‌های قبلی تولید شود. استفاده از Masked MHA تضمین می‌کند که مدل فقط به فریم‌های قبلی نگاه می‌کند و اطلاعات آینده در دسترس مدل قرار نمی‌گیرد، که برای حفظ یکپارچگی و ترتیبی بودن تولید ویدئو بسیار مهم است. سپس یک لایه‌ی MHA دیگر قرار دارد که به خروجی‌های بخش Encoder نگاه می‌کند. این لایه روابط بین ویژگی‌های استخراج‌شده از ویدئو در بخش Encoder و توکن‌های فعلی در بخش Decoder را مدل می‌کند. در این لایه از Maskingاستفاده نمی‌شود زیرا مدل نیاز دارد به تمام توکن‌های Encoder نگاه کند. خروجی از مرحله‌ی Encoder-Decoder Attention به یک شبکه عصبی پیش‌خور (FFN) داده می‌شود که شامل چندین لایه‌ی Dense است. مراحل بعد مانند معماری های Transformer است و مانند بخش Encoder، در Decoder نیز از نرمال‌سازی لایه و اتصالات باقیمانده (Residual Connections) استفاده می‌شود.بخش Decoder در ViViT و سایر مدل‌های Video Transformer به طور مشابه با مدل‌های Transformer در NLP عمل می‌کند، با این تفاوت که باید به صورت خاص با داده‌های ویدئویی و ویژگی‌های مکانی-زمانی آن‌ها کار کند. استفاده از Masked MHA در Decoder برای جلوگیری از دسترسی به توکن‌های آینده و حفظ ترتیبی بودن فرآیند تولید توکن‌ها بسیار مهم است.نکته مهم : در نهایت، در حالی که ساختار کلی Encoder-Decoder و مکانیزم Attention در ViTs و ViViTs مشابه است، نحوه‌ی پیاده‌سازی و جزئیات آن‌ها به دلیل نیاز به مدلسازی اطلاعات زمانی در ویدئوها تفاوت‌هایی دارد. این تفاوت‌ها به مدل‌ها امکان می‌دهد تا بتوانند به طور موثرتری با نوع داده‌های ورودی خود (تصاویر یا ویدئوها) کار کنند.معماری VideoGPTدر سال 2021 VideoGPT که یک مدل Transformer است و از ساختاری مشابه با مدل‌های GPT استفاده می‌کند. این مدل  در مقاله ای  توسط Yusen Zhou و دیگران ارائه شده است. https://arxiv.org/abs/2104.10157 این مدل برای تولید ویدئوهای متناسب با متن ورودی به طور خاص برای تولید ویدئوهای کوتاه بهینه‌سازی شده است. ورودی این مدل می‌تواند یک توصیف متنی یا یک دنباله‌ای از فریم‌های ویدئویی باشد. اگر ورودی شامل توصیف متنی باشد، ابتدا متن توسط بخش Encoder به بردارهای Embedding تبدیل می‌شود. در صورتی که ورودی شامل فریم‌های اولیه ویدئویی باشد، این فریم‌ها نیز به صورت مشابه پردازش می‌شوند. مدل این ورودی‌ها را به عنوان داده‌های دنباله‌دار پردازش می‌کند. البته قبل از ورود داده‌ها به مدل، فریم‌های ویدئویی به صورت پیش‌پردازش شده و به توالی‌های مناسبی تبدیل می‌شوند.سپس مدل با استفاده از ساختار Transformer، فریم‌های ویدئویی جدیدی را توسط Decoder تولید می‌کند که با توصیف متنی یا فریم‌های ورودی همخوانی دارند. در بخش Decoder از نمایش‌های عددی تولید شده توسط Encoder برای پیش‌بینی   فریم های ویدئویی بعدی استفاده می‌کند. این فرایند شامل تولید فریم به فریم ویدئو است که مدل تلاش می‌کند با استفاده از ورودی‌های قبلی و توجه به اطلاعات موجود، فریم بعدی را به دقت پیش‌بینی کند. این فرایند شامل پیش‌بینی فریم‌های آینده و تکمیل دنباله‌های ویدئویی است.سمت چپ تصویر یک نوع مدل خودرمزگذار VQ-VAE (Vector Quantized Variational Autoencoder) را می بینید که داده‌های ورودی (ویدئو) را به یک فضای نهان (latent space) کم‌ بعد Encoder می‌کند و سپس این فضا را به داده‌های ورودی بازسازی می‌کند. این مرحله مشابه روش اصلی آموزش VQ-VAE است. هدف این است که مدل بتواند داده‌های ویدئویی را به صورت فشرده و با کمترین افت کیفیت به یک فضای نهان انتقال دهد. سمت راست مرحله دوم آموزش یک Transformer خودبازگشتی در فضای نهان است که توالی‌های نهان تولید شده توسط VQ-VAE را به عنوان داده‌های آموزشی برای یک مدل autoregressive Transformer استفاده می‌شوند. منبع سپس فریم‌های ویدئویی تولید شده توسط Decoder به یکدیگر متصل می‌شوند تا یک ویدئو کامل ایجاد شود. به عبارت دیگر در مدل VideoGPT، Decoder دنباله‌های ویدئویی را تولید می کند و این فرایند شامل پیش‌بینی و تولید فریم‌های آینده با استفاده از اطلاعاتی که از Encoder دریافت کرده، به تولید ویدئوی نهایی می‌پردازد. البته استفاده از VideoGPT و مدل‌های مشابه در مرحله تحقیق و توسعه قرار دارد. اگرچه این تکنولوژی پتانسیل زیادی برای کاربردهای متنوع دارد (مانند تولید محتوای ویدئویی خودکار، ساخت انیمیشن، تولید تبلیغات و غیره)، اما به دلیل پیچیدگی‌های فنی و نیاز به منابع محاسباتی بالا، هنوز به صورت گسترده و تجاری مورد استفاده قرار نگرفته است.چالش‌های اصلی در Transformerها برای تصویر و ویدئواستفاده از Transformer برای وظایف مربوط به تصویر و ویدئو با چالش‌های منحصر به فردی مواجه است. تصاویر و ویدئوها اطلاعات فضایی پیچیده‌ای دارند و Transformer ها به این دلیل که Attention تمرکز دارند، به آنها اجازه می‌دهد تا بر روی بخش‌های مهم یک توالی تمرکز کنند که برای مدل‌سازی آنها مناسب نیستند. با این حال، Attention برای مدل‌سازی وابستگی‌های long-range ( در تصاویر و ویدئوها رایج است) به خوبی مناسب نیست. البته معماری‌های Transformer جدیدی مانند Vision Transformer و Swin Transformer که به طور خاص برای وظایف مربوط به تصویر و ویدئو طراحی شده‌اند که از مکانیزم‌های Attention جدیدی که برای مدل‌سازی وابستگی‌های فضایی مناسب ترند استفاده می کنند.یکی از بزرگترین چالش ها، آموزش Transformer ها روی مجموعه داده‌های بزرگ تصویر و ویدئو است که از نظر محاسباتی بسیار پرهزینه است. چرا که Transformer ها تعداد زیادی پارامتر دارند و پردازش آنها به حجم زیادی از حافظه و قدرت محاسباتی نیاز دارد. یادگیری تقویتی می‌تواند برای آموزش Transformer ها به روشی کارآمدتر استفاده شود. چرا که در یادگیری تقویتی، به جای آموزش Transformer ها با مجموعه داده‌های لیبل دار شده، به آنها بازخورد مثبت یا منفی در مورد عملکردشان داده می‌شود. در نتیجه بدون نیاز به حجم زیادی از داده‌های برچسب‌گذاری شده، الگوهای مؤثر را یاد بگیرند. همچنین با روش یادگیری چند وظیفه‌ای می‌تواند برای آموزش Transformer ها برای انجام چندین وظیفه به طور همزمان استفاده شود. این امر می‌تواند به آنها کمک کند تا دانش را بین وظایف مختلف به اشتراک بگذارند و عملکرد خود را در هر وظیفه بهبود بخشند.غالبا مجموعه داده‌های با کیفیت بالا برای وظایف مربوط به تصویر و ویدئو کمیاب و گران هستند. این امر می‌تواند آموزش Transformer ها روی این وظایف را دشوار کند، زیرا آنها به حجم زیادی داده برای یادگیری الگوهای مؤثر نیاز دارند. اینها تنها تعدادی از راه حل‌های امیدوارکننده‌ای هستند که برای رفع چالش‌های استفاده از Transformer ها برای تصویر و ویدئو در حال توسعه هستند. با پیشرفت تحقیقات، به احتمال زیاد شاهد پیشرفت‌های قابل توجهی در عملکرد Transformerها در این وظایف خواهیم بود.نتیجه گیریدر این مقاله راجع به مدل های مختلف Transformer که ایده آنها از مقاله اصلی Transformer گرفته شده است و برای image و Video کاربرد دارند صحبت کردیم. دیدیم که تقریبا ایده آنها بسیار شبیه به همدیگر است و تفاوت اصلی که با هم می توانند داشته باشند در نوع داده ای است که در معماری آنها به کار می رود. همچنین راجع به معماری GANs ها آموختیم که حتی قبل از Transformer ها هم ارائه شده بودند و به کار می رفتند اما با مطرح شدن Transformer ها معماری GANs ها هم دچار تغییراتی شد. در واقع این دو را به هم ترکیب کردند و معماری ViTGAN و TransGAN ها به وجود آمدند. امروزه Transformer ها در همه جا میبینیم کمپانی های بزرگ با استفاده از این معماری در حال خلق دنیای جدید ما هستند. هر چه به جلود می رویم با پیشرفت و بهبود این معماری بیشتر به AGI نزدیک می شویم. مخصوصا در زمینه ی بینایی ماشین هر چقدر ماشین بهتر بتواند ببینید بیشتر میتوانیم به AGI نزدیک شویم. بعد از معرفی GPT-4o که در زمان نوشتن این مقاله معرفی شد. قطعا مسیر رسیدن به AGI هموار تر شد. با GPT-4o به صورت Real-Time مدل می تواند ویدئو را ببینید همان لحظه تحلیل کند و راجع به آن سوالی که مطرح می شود را پاسخ دهد. مدل Google هم به همین صورت است. قطعا میتوان گفت در اینده ای نزدیک به سمت مدل هایی میرویم که بیشتر و بهتر بتوانند ببینند. در واقع LLM ها به سمت چندوجهی شدن حرکت می کنند. کنترل در دستان کسی است که بتواند بینایی ماشین را بهبود دهد و البته می تواند مقداری هم دنیا را ترسناک کند چرا که مرزهای واقعیت به صورت جدی دچار تغییر می شوند و قدرت تشخیص دنیا ها روز به روز می تواند سخت تر شود وشاید قاطعانه به سمت این سوال که در فیلم به یاد ماندنی ماتریکس مطرح شد در حال حرکت هستیم. و سوال این است : What is a real?? ” “ممنون از شما که در این سفر به دنیای Deeps با من همراه بودید.لینک پارت 1 به انگلیسی در Mediumلطفا اگر مایل بودید مقاله دیگر من&quot;ترنسفرمر ها همه چیزی که به آن نیاز دارید ! &quot; رو در ویرگول ببینید .چگونه مدل Soraتولید محتوای ویدیوئی را دگرگون می‌کند؟امیدوارم از مطالب لذت برده باشید .</description>
                <category>محمد جواد نجادی</category>
                <author>محمد جواد نجادی</author>
                <pubDate>Thu, 30 May 2024 23:09:05 +0330</pubDate>
            </item>
                    <item>
                <title>ترنسفرمر ها همه چیزی که به آن نیاز دارید !</title>
                <link>https://virgool.io/@m.javadnejadi/%D8%AA%D8%B1%D9%86%D8%B3%D9%81%D8%B1%D9%85%D8%B1-%D9%87%D8%A7-%D9%87%D9%85%D9%87-%DA%86%DB%8C%D8%B2%DB%8C-%DA%A9%D9%87-%D8%A8%D9%87-%D8%A2%D9%86-%D9%86%DB%8C%D8%A7%D8%B2-%D8%AF%D8%A7%D8%B1%DB%8C%D8%AF-maxy6pgfkftn</link>
                <description># پارت 2 : معماری ترنسفورمرها را به صورت جز به جز و قسمت به قسمت کامل باز می کنیم با مثال و کدماتریس چیست؟ کنترل. ماتریس یک دنیای رویایی تولید شده توسط کامپیوتر است، ساخته شده تا ما را تحت کنترل نگه دارد به منظور تبدیل یک انسان به این.The Matrix (1991)ساختار اصلی ترنسفورمرها با یک کدگذار در سمت چپ و یک کدگشا در سمت راست، همان‌طور که در مقاله اصلی توصیف شده است، نمایش داده شده است.نکته: &amp;quotتمام کد هایی که در این مقاله آورده شده است در گوگل کلب تست شده و خروجی گرفته شده است کد ها حالت شبه کد دارند و برای پروژه خاصی نیست و بیشتر جنبه فهمیدن کامل تر موضوع را دارند&amp;quotمقدمهدر پارت 1 راجع به مهم ترین اصطلاحاتی که در معماری Transformer وجود دارد صحبت کردیم. برای درک بهتر معماری آن باید ابتدا آنها را یاد می گرفتیم. در پارت 2 می خواهیم به صورت کامل معماری اصلی Transformer را قسمت به قسمت بررسی کنیم و منطق پشت آن را بفهمیم و ببینیم که همه اطلاحاتی که در پارت 1 بیان شد چگونه به کار برده می شوند. در واقع می خواهیم ببینیم وظیفه اصلی Transformer چیست ؟  جادویی که الان میبینیم برای ساختن مدلهای قدرتمند مثل Chat GPT یا LlaMA و خیلی از مدل های قدرتمند دیگر چطور به وجود آمده اند. البته این نکته را هم باید ذکر کنیم که بعد از معماری اصلی و اولیه Transformer ها مدل های دیگری هم پیشنهاد شد و تسک های جدیدی هم به آن اظافه شد. از جمله اینکه امروز استفاده از Transformer برای بینایی ماشین (مدل‌هایی مانند DETR (Detection Transformer) از توجه برای یافتن اشیاء در تصاویر به طور مستقیم، بدون نیاز به مراحل میانی مانند پیشنهاد منطقه استفاده می‌کنند.) یا تحلیل احساس و خیلی تسک های دیگر مورد استفاده قرار می گیرد. همچنین مثالهایی را بررسی خواهیم کرد و در کد نیز خواهیم دید. به چالش های اصلی آن و راه هایی برای رفع این چالشها خواهیم پرداخت و در پایان انواع مدل های Transformer که وجود دارد و یا پیشنهاد داده شده است را خواهیم آموخت . با من همراه شوید تا ببینیم تغییر چهره دنیای حاضر چطور آغاز شده و چطور در حال انجام است. آماده اید !؟معماری Transformersمعماری بسیار قدرتمند و تقزیبا پیچیده ای دارد. از دو بخش اصلی Encoder و Decoder تشکیل شده است. هر کدام از این بخش ها درون خود داری بلوک های دیگری هستند. زمانی که از Transformer برای انجام تسکی استفاده می کنیم این معماری بارها و بارها تکرار خواهد شد. همانطور که در تصویر مقاله اصلی هم می بینیم در هر جز Encoder و Decoder نوشته شده است “Nx” به معنای تکرار به هر تعداد لازم است. اجزا بسیار هنرمندانه و جادویی با هم ارتباط دارند. هر کدام از بلوک ها وظایف خاصی را انجام می دهند. مانند هر چیز دیگری وقتی معماری Transformer برای اولین بار معرفی شد، چند مشکل اصلی وجود داشت. یکی از آنها پیچیدگی محاسباتی است چرا که برای بررسی ارتباطات بین تمام ورودی‌ها و خروجی‌ها از ماتریس Attention استفاده می‌کند. این باعث می‌شود تا پیچیدگی محاسباتی بالا رود و منجر به نیاز به منابع محاسباتی بیشتر شود. برای کار کردن بهتر، Transformer نیاز به داده‌های آموزش بسیار بزرگ دارد، مخصوصا در صورت استفاده از معماری ترجمه ماشینی. مقاله اصلی معماری Transformer تلاش کرد تا برخی از این مشکلات را حل کند. از جمله اضافه کردن تکنیک‌هایی مانند Dropout به معماری Transformer برای کاهش اورفیتینگ و بهبود عملکرد مدل در داده‌های تست. مقاله‌های بعدی تلاش کردند تا معماری‌های جدیدی ارائه دهند که به مشکلات اصلی Transformer پاسخ دهند، مانند افزودن لایه‌های Convolutional به معماری، استفاده از attention مبتنی بر ویژگی‌ها، و یا استفاده از معماری‌های Transformer با توجه به ویژگی‌های خاص داده‌ها مانند WaveNet برای پردازش صوتی. استفاده از الگوریتم‌های بهبود یافته آموزشی مانند AdamW برای بهبود سرعت و کارایی آموزش مدل‌های Transformer. در قسمت های بعد به بررسی کامل جز به جز لایه های معماری Transformerخواهیم پرداخت.انکودر Encoderدر معماری Transformer نقش بسیار مهمی دارد. وظیفه‌ی اصلی Encoder فهم و فشرده‌سازی اطلاعات ورودی است. یعنی ورودی را فهمیده و اطلاعات مهم و کلیدی را از آنها استخراج کند. Encoder از یک یا چند لایه عصبی تشکیل شده است هر لایه از Encoder معمولاً شامل دو بخش اصلی است. Multi-head Attention (MHA) این بخش به ورودی‌های خود نگاه می‌کند و ارتباطات بین تمام کلمات یا توالی‌ها را مدیریت می‌کند. برای هر ورودی، مدل Attention Score را محاسبه می‌کند تا برای هر کلمه توجهی به کلمات دیگر در جمله یا توالی داشته باشد. MHA به کمک ماتریس‌های Query، Key و Value، ارتباطات بین کلمات را محاسبه می‌کند و سپس اطلاعات مهم را با توجه به این ارتباطات استخراج می‌کند. یک لایه Feedforward Neural Network اطلاعات استخراج شده از MHA را با استفاده از یک شبکه عصبی Feedforward پردازش می‌کند تا توالی داده‌های ورودی مانند کلمات در یک جمله، فریم‌های ویدیویا هر نوع توالی دیگری را به عنوان ورودی دریافت و اطلاعات مهم و کلیدی را با استفاده از توابع غیرخطی و تکنیک‌هایی مانند وزن‌دهی و فعال‌سازی پردازش می‌کنند. در ادامه میخواهیم لایه به لایه در Encoder پیش برویم و ببینیم که چطور کار میکند.این تصویر یک بلوک کدگذار را که از مقاله اصلی گرفته شده است، نشان می‌دهد. شما می‌توانید اجزای مختلف کدگذار را ببینید. در زیر، ما قصد داریم هر قسمت را به تفکیک تحلیل کنیم. این تصویر توسط من مات شده است.هرچند که معمولاً معماری Transformer از این ساختار اصلی برای Encoderاستفاده می‌کند، اما مدل‌هایی همچون BERT، GPT و T5 از این معماری تغییراتی اعمال کرده‌اند و از ترکیب‌ها و تغییراتی بر این مدل اصلی استفاده می‌کنند تا به مسائل خاصی که با آنها روبرو هستند پاسخ دهند. به عنوان مثال، BERT از تکنیک MLM (Masked Language Modeling) برای آموزش استفاده می‌کند. در MLM، بخشی از کلمات در یک جمله پنهان می‌شود و مدل باید کلمات پنهان را بر اساس کلمات اطراف پیش‌بینی کند. در GPT از MLM به همراه Autoregressive Language Modeling برای آموزش استفاده می‌کند. در Autoregressive Language Modeling، مدل باید کلمه بعدی در یک جمله را بر اساس کلمات قبلی پیش‌بینی کند. این امر به GPT کمک می‌کند تا تولید متن روان و طبیعی را یاد بگیرد. در T5 (Text-to-Text Transfer Transformer) از یک معماری چندوظیفه‌ای استفاده می‌کند.تا وظایف مختلف پردازش زبان طبیعی مانند ترجمه، خلاصه‌سازی و پاسخ به سوال را یاد بگیرد.لایه Embeddingاین تصویر از مقاله اصلی گرفته شده و ساختار کدگذار را نشان می‌دهد، با بخش‌های مربوط به لایه تعبیه برجسته شده است. این تصویر توسط من مات شده است.در معماری Transformer ابتدا کلمات یا عناصر دنباله ورودی با استفاده از Embedding Layer به بردارهای Embedding تبدیل می‌شوند که اغلب بعد کمتری نسبت به بردارهای one-hot encoding دارند و اطلاعات معنایی و مضمونی را بهتر بازنمایی می‌کنند. این بردارهای Embedding به لایه‌های Encoder ارسال می‌شوند. لایه Embedding Layer معمولاً با استفاده از یک ماتریس Embedding حاوی بردارهایی برای هر واژه یا عنصر در واژگان ایجاد می‌شود. این بردارها به طور کلی از روش‌هایی مانند Word2Vec، GloVe یا FastText به دست می‌آیند. فرض کنید دنباله ورودی شما شامل کلمات &quot;سلام&quot;، &quot;دنیا&quot;، &quot;خوبی&quot; باشد. به طور مثال، &quot;سلام&quot; ممکن است به بردار Embedding [0.2, 0.5, -0.1]، &quot;دنیا&quot; به بردار Embedding [-0.3, 0.8, 0.6] و &quot;خوبی&quot; به بردار Embedding [0.1, -0.7, 0.4] تبدیل شوند. لایه Embedding در کتابخانه‌های محبوب مانند TensorFlow یا PyTorch، به صورت آماده در دسترس است و می‌توانیم از آنها به راحتی استفاده کنیم.import torchimport torch.nn as nn# Define the Embedding Layerembedding_layer = nn.Embedding(10000, 300)# Sample input datainput_data = torch.tensor([1, 5, 7, 2])# Transform the input data into embeddingsembedded_output = embedding_layer(input_data)# Display the dimensions of the outputprint(&amp;quotEmbedding Layer output dimensions:&amp;quot, embedded_output.size())در این کد، Embedding Layer با استفاده از کلاس&#x60;  &#x60;nn.Embedding از کتابخانه PyTorch  تعریف می‌شود. این لایه دو پارامتر دارد: تعداد کلمات در واژگان (10000) و اندازه بردار Embedding برای هر کلمه (300). سپس، یک داده ورودی نمونه به صورت یک تنسور PyTorch تعریف می‌شود که حاوی چند شماره کلمه است که به عنوان ورودی به Embedding Layer ارسال می‌شود وEmbedding Layer بردارEmbedding مربوط به هر کلمه را به عنوان خروجی تولید می‌کند. در نهایت، ابعاد خروجی Embedding Layer نمایش داده می‌شود و بردارهای Embedding متناظر با کلمات ورودی نمایش داده می‌شود.لایه Positional Encoderدر مدل‌های Transformer، برخلاف مدل‌های سنتی شبکه‌های عصبی بازگشتی که به توالی ورودی‌ها وابسته هستند، هیچ نوع اطلاعات مکانی به صورت ضمنی به مدل ارائه نمی‌شود، بنابراین از طبقه‌بندی موقعیتی) (Positional Encoder برای دادن اطلاعات مکانی به توکن‌های ورودی استفاده می‌شود تا مکان آن در دنباله را نمایان کند. تبدیل توکن‌ها به بردارهای Embedding بدون در نظر گرفتن مکان و ترتیب آن‌ها ممکن است اطلاعات مهمی را از دست بدهد. با اضافه کردن اطلاعات مکانی با استفاده از Positional Encoder، می‌توان این اطلاعات را حفظ کرد و مدل را قادر به تمایز دادن بین توکن‌های مختلف در یک دنباله کرد. این ویژگی یعنی درک و توجه به ترتیب و مکان توکن‌ها در دنباله را فراهم می‌کند که این موضوع به بهبود عملکرد و کارایی مدل در وظایف مختلف پردازش زبانی کمک می‌کند.این بردار مکانی معمولاً به صورت یک بردار یا ماتریس به ابعاد مشخصی تولید می‌شود. یکی از روش‌های معمول استفاده از توابعی مانند سینوس و کسینوس است که به ازای هر مکان مختلف در دنباله یک مقدار منحصر به فرد ایجاد می‌کنند. به عبارت دیگر، Positional Encoder توکن‌های ورودی را با اطلاعات مکانی مجهز می‌کند تا مدل بتواند ترتیب و مکان توکن‌ها را در نظر بگیرد و از این اطلاعات برای تولید خروجی مناسب استفاده کند.طبقه‌بندی موقعیتی  Positional Encoder معمولاً بلافاصله پس از Embedding Layer در مدل Transformer قرار می‌گیرد. در زیر یک مثال ساده با استفاده از کتابخانه PyTorch میبینید که  نحوه اضافه کردن اطلاعات مکانی به توکن‌های ورودی با استفاده از Positional Encoder را نشان می دهد.import torchimport torch.nn as nnimport mathclass PositionalEncoder(nn.Module):def __init__(self, d_model, max_len=1000):super(PositionalEncoder, self).__init__()self.d_model = d_model# Initialize the positional encoding matrixpe = torch.zeros(max_len, d_model)position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1)div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-math.log(10000.0) / d_model))pe[:, 0::2] = torch.sin(position * div_term)pe[:, 1::2] = torch.cos(position * div_term)pe = pe.unsqueeze(0)# Register as buffer so it&#039;s not updated during trainingself.register_buffer(&#039;pe&#039;, pe)def forward(self, x):# Add the positional encoding to the inputx = x + self.pe[:, :x.size(1)]return xکلاس&#x60;PositionalEncoder&#x60;  که از کلاس&#x60; nn.Module&#x60; ارثبری می‌کند، ابتدا متغیرهای اصلی مانند اندازه بردار&#x60; Embedding (d_model) &#x60;و حداکثر طول دنباله &#x60;(max_len)&#x60; تعیین می‌شوند. سپس، ماتریس مکانی با ابعاد&#x60; (max_len, d_model)&#x60;  ایجاد می‌شود که همه مقادیر آن ابتدا با صفر پر می‌شوند. سپس، برای هر مکان در دنباله، مقادیر متغیرهای sinusoidal position encoding  محاسبه می‌شوند و در ماتریس مکانی قرار داده می‌شوند. در نهایت، ماتریس مکانی به عنوان یک buffer ثبت می‌شود تا در فرآیند آموزش مدل آپدیت نشود.لایه Multi-head Attentionدر این تصویر که از مقاله اصلی گرفته شده معماری Encoder  را میبینید  لایه Multi-head Attention مشخص شده است. ستون اصلی معماری Transformer ها.  این تصویر توسط من Blur شده استیکی از بخش های بسیار مهم معماری Transformer و شاید بتونیم بگیم مهم ترین بخش اون MHA باشد. چرا که قلب تپنده Transformer ها همین Attention است. در پارت 1 راجع به انواع Attention و خود MHA هم صحبت کردیم و همچنین راجع به Scaled Dot-Product Attention حال می خواهیم ببینیم توضیحاتی که در پارت 1 گفته شد و مطالبی که در مورد نحوه محاسبه (Q, K, V) چه هستند و چه کارایی دارند. به تصویر زیر که از مقاله اصلی گرفته شده است دقت کنید.این تصویر از مقاله اصلی گرفته شده و به طور موثر نشان می‌دهد که چگونه توجه چندگانه (MHA) عمل می‌کند. از سمت چپ تصویر، می‌توانیم بفهمیم که چگونه توجه نقطه‌ای با مقیاس محاسبه می‌شود، و مقادیر Q، K، V را با مشاهده آن بهتر متوجه می‌شویم.بعد از مرحله Positional Encoder داده ها آماده وارد شدن به Multi-head Attention هستند که پردازش های لازم روی اونها صورت بگیرد و مراحل Attention انجام بشه که مثلا برای تسک ترجمه ماشینی که در مقاله اصلی هم انجام شده و مهم ترین کلمات و رابطه اونها رو با همدیگه بفهمیم. برای این کار بردارهای Embedding که تشکیل شده به وسیله سه (Q, K, V) وارد Multi-head Attention می شوند. انها با تابع Linear وارد Scaled Dot-Product Attention میشن و زمانیکه) (Q, K محاسبه میشوند (به نوعی ضرب داخلی انجام میشود = MatMul) با تابع Softmax مقادیر ماتریکس بین (1و0) قرار می گیرد. و بعد با مقدار V مجددا MatMul انجام می شود. سپس باز هم با تابع Linear وارد لایه add &amp; Norm می شوند. اما چرا این کار انجام می شود؟ به این خاطر که از Vanishing Gradient Problem در مرحله backpropagation جلوگیری شود و اگر این کار انجام نشه در این مسیر که مشتق گیری انجام میشه مشتق ها به حدی کوچک و نزدیک صفر می شوند که عملا دیگر مقداری وجود ندارد. در معماری اصلی یک Residual connections را هم می بینیم که قبل از اینکه مقدار ها با (Q, K, V) محاسبه بشن به وسیله اون به Layer Normalization وارد میشن و این کار هم برای جلوگیری از نزول گرادیان هست. ، اگر از Residual Connections استفاده نشود، امکان دارد Attention برخی از لایه‌ها به مراحل بعدی از شبکه به دلیل V G P ، کمتر بشه که منجر به از دست رفتن اطلاعات مهم یا کاهش کارایی شبکه شود. همانطور که در شکل بالا میبینید در مقاله اصلی در هر مرحله Multi-head Attention h = 8  لایه استفاده شده است. در مرحله بعد داده ها وارد add &amp; Norm میشن که در قسمت بعد بررسی خواهیم کرد.لایه Add &amp; Normهمه لایه‌های معماری Transformers از تکنیک های Normalization شامل محاسبه میانگین و واریانس برای هر ویژگی یا ورودی از داده‌ها است که از روش های Layer Normalization یا Batch Normalization استفاده می شود. خروجی‌های مرحله MHA می‌تواند مقادیر گسترده‌ای داشته باشند، و Normalization آنها می‌تواند به فرآیند آموزش کمک کند. Normalization اثر انحراف داخلی متغیر را که ممکن است هنگام آموزش تغییر کند کاهش می دهد، تا شبکه به موارد جدیدی که قبلاً دیده نشده‌اند، پاسخ دهد. بعد از این مراحل، ورودی‌ها به لایه‌های بعدی از شبکه منتقل می‌شوند. وقتی که از Normalization خارج می‌شوند و به لایه Feedforward می‌روند، آنها با استفاده از توابع فعال‌سازی مانند ReLU (Rectified Linear Activation) یا GELU (Gaussian Error Linear Unit) وارد فرآیند Feedforward می‌شوند. لایه Normalization از بزرگ یا کوچک شدن بیش از حد  Gradient ‌ها و در نتیجه از مشکلاتی مانند &quot;gradient explosion&quot; و &quot;gradient vanishing&quot; جلوگیری می کند. در آموزش مدل‌های عمیق، ویژگی‌های ورودی ممکن است در طول زمان تغییر کنند که به عنوان Covariate Shift شناخته می‌شود. Normalization لایه‌ها می‌تواند این اثرات را کاهش داده و به سرعت آموزش کمک کند. حال میخواهیم در یک نمونه کد پایتونی با استفاده از کتابخانه PyTorch ببینیم که این لایه چطور پیاده سازی می شود :import torchimport torch.nn as nnclass AddNormLayer(nn.Module):def __init__(self, input_dim):super(AddNormLayer, self).__init__()self.norm = nn.LayerNorm(input_dim)def forward(self, x):# Add step: Adding input to the output of the layeradded = x + torch.randn_like(x)# Norm step: Normalizing the output valuesnormalized = self.norm(added)return normalized# Using the Add &amp; Norm layerinput_dim = 512layer = AddNormLayer(input_dim)# Example inputinput_data = torch.randn(10, input_dim)# Applying the layer on the inputoutput = layer(input_data)print(output.shape)  # Output sizeدر کد بالا، ما یک لایه سفارشی به نام &#x60;AddNormLayer&#x60; با استفاده از کتابخانه PyTorch پیاده‌سازی کرده‌ایم که شامل دو بخش است. مرحله اول &#x60;Add&#x60; است که در این بخش، ورودی به یک نویز تصادفی اضافه می‌شود. برای این کار، ابتدا به هر بردار ورودی یک بردار نویز تصادفی با همان ابعاد اضافه می‌کنیم. این بردار نویز با استفاده از &#x60;torch.randn_like(x)&#x60; ایجاد می‌شود که مقدارهای تصادفی از توزیع نرمال با همان ابعاد ورودی را ایجاد می‌کند. سپس این بردار نویز به ورودی اضافه می‌شود و در مرحله Norm ، مقادیر خروجی حاصل از مرحله Add را نرمال‌سازی می‌کنیم. برای این کار، از یک لایه نرمال‌سازی به نام &#x60;nn.LayerNorm&#x60; استفاده می‌کنیم که ابعاد ورودی را نرمال‌سازی می‌کند. در نهایت، این لایه سفارشی را با یک مثال ورودی اعمال کرده و ابعاد خروجی را چاپ می‌کنیم تا اطمینان حاصل شود که پیاده‌سازی به درستی عمل می‌کند.اندازه خروجی torch.Size([10, 512])  به این معنی است که ابعاد خروجی شبکه برای داده‌های ورودی مثالی که به شکل torch.randn(10, 512) داده شده، 10 ویژگی دارد که هر یک از آن‌ها یک بردار با ابعاد 512 است. به عبارت دیگر، برای هر نمونه ورودی، یک بردار خروجی با 512 ابعاد تولید شده است و در مجموعه داده‌های ما، 10 نمونه وجود دارد.نکته مهم : add &amp; Normدر همه بلوک های معماری Transformer وجودد دارد و همیشه علاوه بر داده ه ای که مستقیم با تابع فعالسازی به آن وارد می شود. داده ها از طریق Residual connections هم به آن وارد می شوند. و خروجی آن هم معمولا Linear  یا ReLU است.لایه Feed-Forward Neural Networksدر این تصویر که از مقاله اصلی گرفته شده معماری Encoder  را میبینید  لایه Feed-Forward Neural Networks مشخص شده است این تصویر توسط من Blur شده است بلوک Encoder  معمولاً شامل چندین لایه تکرار شونده است، هر لایه شامل ماژول‌هایی مانند و Feed-Forward Neural Networks است. بعد از MHA، یک FFNN که شامل دو یا چندین لایه پرسپترون است و توابع خطی و توابع فعال‌سازی غیرخطی (ReLU، GELU، یا Swish) که  به شبکه اجازه می‌دهد تا الگوهای پیچیده‌تر و غیرخطی را یاد بگیرد. الگوهایی که ممکن است توسط Self-Attention به طور کامل شناسایی نشوند. وظیفه اصلی لایه FFN در Encoder این است که پس از اعمال عملیات Self-Attention، اطلاعات را به طور فشرده‌تر و بازنمایی شده‌تری انتقال دهد. این امر می تواند به کاهش احتمال overfitting کمک می‌کند. سپس، خروجی این اتصال به یک Add &amp; Norm می‌رسد که کمک می‌کند تا ویژگی‌های خروجی هر لایه استاندارد شوند و فرآیند آموزش مدل سریع‌تر و پایدارتر شود. خروجی این فرآیند پس از گذر از تمام لایه‌های Encoder، بردارهای ویژگی نهایی که معمولاً به عنوان مجموعه‌ای از بردارهای ویژگی برای هر عنصر از دنباله نمایش داده می‌شود. این بردارهای ویژگی حاوی اطلاعات معنایی و مضمونی از دنباله ورودی هستند و برای فرایند بعدی یعنی Decoder استفاده می‌شوند. در واقع شامل (Q, K) Quary است که به بلوک اخر MHA از Decoder وارد می شود.  در قسمت بعد به طور کامل Decoder ها را بررسی خواهیم کرد . پازل ما در حال تکمیل هست آیا مایلید با من همراه باشید؟!دیکودر Decoder دیکودر Decoder یکی از اجزای بسیار مهم و حیاتی در معماری Transformer هاست. مسئول تولید خروجی نهایی است که معمولاً یک دنباله متنی یا یک سری عناصر است و برای اهداف مختلفی مانند ترجمه، خلاصه‌سازی، یا طبقه‌بندی کاربرد دارد. Decoder وظیفه تولید واژگان یا عناصر خروجی را بر اساس بردار زمینه یا حالتکه از Encoder دریافت کرده است، بر عهده دارد. و اطلاعات را از دو منبع مختلف، یعنی ورودی و خروجی قبلی، به دست آورد. بنابراین می تواند اطلاعات مرتبط از دو دنباله ورودی و خروجی را بررسی کند و ترجمه یا تولید خروجی دقیق‌تری ارائه دهد. در نهایت، Decoder برای تولید خروجی نهایی، از FFNsاستفاده می‌کند. این لایه‌ها عملیاتی مانند تحلیل و ترکیب ویژگی‌های ورودی را انجام داده و خروجی نهایی را تولید می‌کنند که معمولاً یک دنباله متنی یا یک بردار است که برای مرحله بعدی در فرآیند استفاده می‌شود.این تصویر از یکی از اسلایدها در آموزش YouTube اندره کارپاتی گرفته شده است. در این عکس، عملکرد کدگشا و اجزای مختلف آن به طور روشن و عالی قابل مشاهده است. دقیقاً به این تصویر نگاه کنید، دوباره و دوباره و دوباره! دیکودر Decoder از چند لایه مختلف تشکیل شده است که هر کدام وظایف خاصی را بر عهده دارند. این لایه‌ها شامل Multi-Head Attention Layers و لایه‌های FFNN می‌شوند. MHA به Decoder کمک می‌کنند تا Attention به اطلاعات مرتبط از ورودی و خروجی قبلی را داشته باشد، در حالی که لایه‌های FFNN به عملیات غیرخطی تبدیل اطلاعات کمک می‌کنند.درست است که بخش‌هایی از عملکردی که در Decoder انجام می‌شود، به نظر می‌رسد که به نوعی مشابه عملکرد Encoder است، اما تفاوت های مهمی هم دارند. در هر یک از MHA در Decoder، Attention انجام می‌شود. با این تفاوت که این Attention به اطلاعات مرتبط از ورودی و خروجی قبلی مدل شده است، به عنوان ورودی به هر لایه Decoder داده شده است. این موضوع به Decoder کمک می‌کند تا بتواند متناسب با هر مرحله از تولید خروجی، تمرکز خود را تغییر دهد. در Decoder، FFNN بر روی نتایج MHA اعمال می‌شوند تا اطلاعات را با استفاده از عملیات‌های غیرخطی مدل کنند و به تولید خروجی نهایی کمک کنند. به عنوان مثال، در معماری GPT ، یک جمله به عنوان ورودی به مدل داده می‌شود. سپس Decoder با استفاده از MHA و لایه‌های FFNN ، اطلاعات مرتبط از ورودی را مدل کرده و توانایی تولید کلمات بعدی را دارد. این فرایند به طور بازگشتی ادامه می‌یابد تا جمله کامل تولید شود.فرض کنید جمله ورودی &quot;The cat sat on the mat&quot; باشد. در اینجا، جمله ورودی به عنوان یک دنباله از کلمات (token) به مدل داده می‌شود. این دنباله از کلمات توسط لایه‌های Encoder پردازش می‌شود. در لایه‌های Encoder، هر کلمه (token) به یک بردار نهان (hidden vector) تبدیل می‌شود که نمایانگر معنای آن کلمه در جمله است.  بنابراین، اطلاعات مرتبط از جمله ورودی در بردارهای نهان ایجاد شده توسط Encoder مدل می‌شوند و به عنوان ورودی به لایه‌های Decoder داده می‌شوند. در لایه‌های Decoder، با استفاده از MHAL، مدل توانایی تمرکز بر روی اطلاعات مرتبط از ورودی را دارد. این اطلاعات مرتبط از جمله ورودی، همراه با اطلاعات از خروجی‌های قبلی (در صورت وجود)، برای تولید کلمات بعدی در جمله خروجی استفاده می‌شوند.نکته مهم : در مدل GPT، Encoderمسئول تبدیل جمله ورودی به بردارهای نهان مرتبط است، در حالی که Decoderمسئول تولید کلمات بعدی در جمله خروجی بر اساس این بردارهای نهان و با توجه به متن قبلی است.خروجی Output!شاید برایتان سوال باشد چرا بعد از توضیح اولیه راجع به Decoder می خواهیم راجع به output صحبت کنیم. در Decoder، قسمت اول معمولاً شامل Embedding خروجی است. این به این معنی است که در ابتدا، بردارهای ورودی به بردارهای نهان (embedding vectors) تبدیل می‌شوند. Embedding ویژگی‌های معنایی و موقعیتی کلمات را در نظر می گیرد و از آنها برای فرایند بعدی، یعنی Self-Attention، استفاده کند.در واقع اینجا &quot;خروجی&quot; به معنای خروجی نهایی مدل در هر گام زمانی است، نه خروجی نهایی کلمه. در معماری Transformer، مدل به تدریج کلمات خروجی را تولید می‌کند. در هر مرحله، مدل یک بردار نهان را تولید می‌کند که معادل توزیع احتمالی کلمات در موقعیت جاری است. بعد از آن، این بردار به عنوان ورودی به مرحله بعدی مدل داده می‌شود و همین روند تا زمانی که مدل کلمه پایانی را تولید می‌کند، ادامه می‌یابد.در مورد Positional Embedding، تفاوت‌هایی بین Encoder و Decoder وجود دارد. در هر دوی آنها، Positional Embedding‌ها مسئول نشان دادن موقعیت نسبی کلمات در جمله هستند، اما در Decoder، Embedding‌ها به یک مکانیزم متفاوت نیاز دارند. در Encoder، ترتیب کلمات ورودی اهمیت دارد زیرا موقعیت کلمات در جمله اطلاعات معنایی را تعیین می‌کند. اما در Decoder، علاوه بر موقعیت کلمات ورودی، ترتیب کلمات خروجی نیز اهمیت دارد. بنابراین، در Decoder، به جزییات زمانی نیز باید توجه شود تا مدل بتواند ترتیب صحیح کلمات خروجی را تولید کند. به عبارت دیگر، در Decoder، از یک مکانیزم Positional Embedding متفاوتی استفاده می‌شود که توجه به ترتیب زمانی و موقعیت کلمات خروجی را در نظر می‌گیرد. همانند Encoder بردارهای تئلید شده به همان روش وارد بلوک Attention می شود با این تفاوت که ممکن از داری یک Masked! باشد. میپرسی یعنی چی؟؟ خب بریم قسمت بعد تا بهت بگم!لایه Masked Multi-Head Attentionدر Decoder ها هم Self-Attention  داریم که تفاوت های جزیی با همین لایه در Encoder دارد. اگرچه هر دو تقریبا از مکانیسم یکسانی استفاده می کنند. در Encoder، Self-Attention به مدل اجازه می‌دهد تا ویژگی‌های ورودی خود را در هر مرحله از فرایند پردازش (ترجمه ماشینی یا دیگر وظایف پردازش زبان طبیعی) بررسی کند و وزن‌های مناسب برای هر ویژگی را محاسبه کند. اما در Decoder، Self-Attention به عنوان Masked Multi-Head Attention شناخته می‌شود. در واقع در هر مرحله از تولید متن (یا ترجمه)، مدل فقط به کلماتی که تا آن لحظه تولید شده‌اند (یا در ترتیب زمانی قرار گرفته‌اند) Attention می‌کند و از کلماتی که هنوز تولید نشده‌اند (کلمات آینده) صرف‌نظر می‌کند. به این منظور، یک Masked بر روی ورودی Self-Attention اعمال می‌شود که اجازه نمی‌دهد به اطلاعات آینده دسترسی پیدا کند.این تصویر از یک کدگشا از مقاله اصلی گرفته شده است، با بخش برجسته شده که توجه چندگانه ماسک شده است، که نقش حیاتی در عملکرد کدگشاها، به ویژه برای وظایف تولید متن، دارد. این تصویر توسط من مات شده است.به طور مثال، فرض کنید مدل در حال تولید یک جمله است و در مرحله فعلی، تنها کلمات &quot;من&quot; و &quot;یک&quot; را تولید کرده است. در این صورت، Self-Attention لایه با ماسک، تنها به این دو کلمه توجه می‌کند و از کلماتی که هنوز تولید نشده‌اند (مانند کلمات بعدی جمله) صرف‌نظر می‌کند. این باعث می‌شود تا مدل در هر مرحله از تولید، تنها به اطلاعات موجود تا آن لحظه Attention کند و ترجمه یا تولید متن به شکل صحیح‌تری انجام شود. این لایه به تولید دقیق‌تر و معناگرتر ترجمه‌ها کمک می‌کند.لایه MMHA به ما کمک می‌کند تا محاسبات را در طول آموزش به صورت موازیانجام دهیم. این امر بهبود کارایی و سرعت آموزش مدل را افزایش می‌دهد.حالت Masked در Self-Attention به ما امکان می‌دهد تا در هر مرحله از آموزش، مدل فقط به اطلاعاتی که در زمان‌های قبلی در دسترس بوده‌اند توجه کند و از اطلاعات آینده صرف‌نظر کند. این باعث می‌شود که مدل به طور کارآمدتری از پردازش موازی استفاده کند، زیرا هر نود می‌تواند به طور همزمان و مستقل از سایر نودها محاسبات خود را انجام دهد.از این ویژگی برای تولید متن در مدلهای Generative AI مثل ChatGPT یا LlaMa و کلا LLM هایی که متن تولید می کنند استفاده می شود. بدون این ویژگی هم می‌توانستیم مدل‌های Generative AI برای تولید متن داشته باشیم، اما عملکرد و کیفیت تولید متن این مدل‌ها بدون استفاده از مکانیزم‌هایی مانند Masked Attention ممکن است کاهش یابد. استفاده از Masked Attention، به مدل‌ها کمک می‌کند تا در فرایند تولید متن، توجه بیشتری به ترتیب و ساختار جملات داشته باشند و از ایجاد متونی با ساختار ناهمگون جلوگیری کنند.مرحله Encoder - Decoder Attentionاین مرحله به طور خاص در Decoder به کار می‌رود. نحوه انتقال اطلاعات از MMHA به لایه های بعدی کاملا مانند MHA است. تنها تفاوتی که دارند بخاطر کارایی که در بالا ذکر شد می باشد. در Decoder ها بعد از MMHA داده ها به لایه MHA وارد می شوند. این لایه علاوه بر داده هایی که از MMHA گرفته است همزمان بردار وضعیت (state vector) از Encoder هم به آن وارد می شوند. به آن مرحله Encoder - Decoder Attention می گویند. در تصویر زیر با جزییات می توان آن را مشاهده کرد.یکی از اجزای کلیدی معماری Transformer است که به کمک آن مدل توانایی فهم و ترجمه دنباله‌ها را دارد. در هر مرحله از تولید خروجی توسط Decoder، مدل باید به ورودی‌های Encoder توجه کند تا اطلاعات مرتبط را برای تولید خروجی صحیح استفاده کند. این کار در مرحله Encoder-Decoder Attention انجام می شود. در هر مرحله، ابتدا state vector دریافتی از مرحله قبلی در Decoderمحاسبه می‌شود. سپس، این بردار وضعیت با همه بردارهای وضعیت Encoder مقایسه می‌شود تا اهمیت (وزن) هر بردار وضعیت Encoder برای تولید خروجی فعلی در Decoderمحاسبه شود. به این ترتیب، مدل به صورت پویا و هوشمندانه می‌تواند به ورودی‌های Encoder توجه کند و از آنها برای تولید خروجی مناسب استفاده کند. محاسبت ریاضی آن به این صورت است که ابتدا Key Vectors هایی که نشان‌دهنده اطلاعات مهم و کلیدی از ورودی هستند که باید توجه Decoder را جلب کنند. به همراه Value Vectors که همراه با بردارهای کلید از Encoder به‌دست می‌آیند و اطلاعات جزئی‌تری از ورودی را دارند از Encoder و بردارهای Query که مربوط به Decoder هستند (که نقطه توجه Decoder را نشان می‌دهند) به معادله امتیاز توجه (Attention Score) وارد می‌شوند. سپس با استفاده از این امتیازهای توجه، مقادیر ارزیابی محاسبه می‌شوند و از طریق میانگین‌گیری وزن‌دار، خروجی نهایی به‌دست می‌آید.و دوباره لایه FFNN در Decoderلایه Feed-Forward Neural Network در مدل‌های Transformer هم در Encoder و هم در Decoder وجود دارد. اما در هر کدام از این بخش‌ها، ممکن است تفاوت‌هایی وجود داشته باشد. این لایه در Encoder برای تبدیل ویژگی‌های ورودی (معمولاً بردارهای ویژگی کلمات) به فضای ویژگی‌های جدیدی استفاده می‌شود که ممکن است برای مدل بهترین نتایج را ارائه دهند. هر ویژگی ورودی به همهٔ نورون‌های لایه FFNN وارد می‌شود و سپس با استفاده از تابع فعال‌سازی (معمولاً ReLU یا GELU) پردازش می‌شود.در Decoder این لایه برای تبدیل ویژگی‌های خروجی Self-Attention به فضای ویژگی‌های جدیدی که برای مدل در تولید متن نهایی مفید باشد استفاده می‌شود. در Decoder، نیازی نداریم که به اطلاعات آینده دسترسی داشته باشیم تا در زمان تولید متن، از اطلاعات قبلی استفاده کنیم. بنابراین، لایه FFNN در Decoder عموماً به صورت Masked Feed-Forward Neural Network پیاده‌سازی می‌شود که امکان دسترسی به اطلاعات آینده را محدود کند. این محدودیت به وسیلهٔ Masked مربوطه در محاسبات اعمال می‌شود تا مدل تنها به اطلاعات قبلی دسترسی داشته باشد.لایه Output Layers (Linear + Softmax)این تصویر یک Decoder از مقاله اصلی است. لایه‌های خروجی (Linear + Softmax) که در واقع آخرین لایه‌های معماری Decoder هستند، در واقع، آخرین لایه‌های معماری Transformer هستند.در انتهای مدل، یک لایه خروجی خطی (Linear Layer) و یک لایه Softmax جهت تبدیل وزن‌های خروجی به احتمال‌های نرمال شده برای کلاس‌ها (در حالت دسته‌بندی) یا کلمات (در حالت تولید متن) وجود دارد. این لایه از دو قسمت تشکیل شده است: یک لایه خطی آخر (Last Linear Layer ) و یک لایه Softmax. بیایید هر کدام را به صورت دقیق بررسی کنیم:لایه خطی آخر (Last Linear Layer )لایه Last Linear Layer در معماری Transformers ، به طور معمول در انتهای مدل قرار می‌گیرد و به طور مستقیم ویژگی‌هایی را که از لایه‌های قبلی Decoder به دست آمده اند را دریافت می کند، این لایه برای تبدیل ویژگی‌های نهایی مدل به فضای ویژگی‌های مورد نیاز برای وظیفه خاصی که مدل برای آن آموزش داده شده، استفاده می‌شود. این لایه معمولاً دارای یک ماتریس وزن و یک Bias است. ورودی این لایه معمولاً بردارهای ویژگی نهایی مدل هستند که در انتهای فاز Encoder یا Decoder به دست می‌آیند. بعد از اعمال عملیات خطی (ضرب ماتریسی بین وزن‌ها و ویژگی‌های ورودی)، معمولاً با استفاده از یک تابع فعال‌سازی (مانند ReLU یا GELU) ویژگی‌های نهایی به دست می آید. بعد از این مراحل بستگی به تسک خاصی که داریم در صورتی که مدل برای مسئله‌ای مانند دسته‌بندی طراحی شده باشد، خروجی این لایه معمولاً به لایه Softmax ارسال می‌شود تا احتمالات کلاس‌ها محاسبه شود و تصمیم گیری در مورد کلاس نهایی انجام شود. در صورتی که مدل برای تولید متن طراحی شده باشد، خروجی این لایه به لایه Softmax نرمال شده و به عنوان احتمالات کلمات در مرحله بعدی تولید متن ارسال می‌شود.فرض کنید مدل ما در حال ترجمه جمله &quot;I love cats&quot; به زبان دیگری مانند فرانسوی است. جمله ورودی &quot;I love cats&quot; از طریق چندین لایه عبور می‌کند و ویژگی‌های آن در هر لایه استخراج می‌شوند. Linear Layer این ویژگی‌های استخراج شده را دریافت می‌کند. به عنوان مثال، ممکن است این ویژگی‌ها شامل اطلاعاتی در مورد معنا، گرامر و ساختار جمله باشند که از لایه‌های قبلی به دست آمده‌اند. سپس، با استفاده از وزن‌های خود، این ویژگی‌ها را به فضای ویژگی‌های متناظر با خروجی‌های مورد نظر تبدیل می‌کند، یعنی به فضای ویژگی‌های متناظر با جمله فرانسوی &quot;J&#x27;adore les chats&quot;. به عبارت دیگر، این لایه وزن‌هایی را که به هر ویژگی ورودی نسبت می‌دهد، به یک فضای ویژگی جدید (به عنوان ورودی لایه Softmax) تبدیل می‌کند.لایه Softmaxبعد از لایه Linear اخر داده ها به لایه Softmax وارد می شوند که وزن‌های خروجی لایه Linear را به احتمال‌ها (احتمال نرمال شده) برای هر کلاس یا کلمه در خروجی مدل تبدیل می کند. در صورتی که مدل برای دسته‌بندی استفاده شود، این احتمال‌ها نشان دهنده احتمال هر کلاس است. اگر مدل برای تولید متن استفاده شود، این احتمال‌ها نشان‌دهنده احتمال ظهور هر کلمه در خروجی مدل است. به طور کلی می‌توان گفت که با استفاده از لایه Softmax می توانیم مطمئن شویم که هیچ احتمالی به صفر نمی‌رسد. این کار به جلوگیری از برخی مشکلات مانند بی‌پایه بودن (zero-bias) و رانش توزیع احتمالاتی که  باعث می‌شود توزیع احتمالاتی خروجی مدل در طول زمان تغییر کند کمک ‌کند. در LLM ها اگر توزیع احتمالاتی کلمات در جملات متفاوت باشد، باعث ایجاد جملات ناهمخوان و نامعقول می شود. پس لایه Softmax باعث می‌شود که مدل به طور متناسب و منظم احتمالات را تخصیص دهد و از تغییرات ناخواسته در توزیع احتمالاتی جلوگیری کند یا در مسائل دسته‌بندی، اگر توزیع احتمالاتی دسته‌ها با تغییر زمانی تغییر کند، ممکن است دقت و قابلیت پیش‌بینی مدل کاهش یابد.تولید خروجی نهاییبعد از لایه Softmax در Decoder معمولاً با یکی از دو روش زیر تولید خروجی در معماری Transformers انجام می شود. یا با روش Beam Search (جستجوی پرتو) که  در این روش، پس از محاسبه احتمالات با استفاده از لایه Softmax، مدل از جستجوی پرتو برای انتخاب بهترین پیش‌بینی برای هر گام استفاده می‌کند. به این صورت است که برای هر گام، مدل چندین پیش‌بینی ممکن را محاسبه کرده و سپس از بین آنها پیش‌بینی با بالاترین احتمال را انتخاب می‌کند. این فرایند تا رسیدن به شرایط خاتمه مانند انتهای جمله یا تعداد تعیین شده از گام‌ها ادامه می‌یابد. بیایید با یک مثال بهتر آن را یاد بگیریم. فرض کنید که مدل ما یک مدل ترجمه ماشینی است و فرض کنید از مدل می خواهیم جمله انگلیسی &quot;I love you&quot; را به فارسی ترجمه کند. مدل می‌تواند چندین پیش‌بینی مختلف برای کلمات فارسی ممکن را محاسبه کند، مانند &quot;من عاشق تو هستم&quot;، &quot;من تو را دوست دارم&quot;، &quot;عشق تو را می‌پذیرم&quot; و غیره. سپس با استفاده از روش Beam Search، مدل از بین این پیش‌بینی‌ها، پیش‌بینی با بالاترین احتمال را انتخاب می‌کند. به عنوان مثال، اگر مدل از یک پرتو با اندازه ۳ استفاده کند، پیش‌بینی با بالاترین احتمال در هر مرحله انتخاب می‌شود و در مراحل بعدی، این پیش‌بینی‌ها با استفاده از احتمالات محاسبه شده برای کلمات بعدی به‌روزرسانی می‌شوند. کاربردهای آن بیشتر برای مدل‌هایی مانند مدل‌های ترجمه ماشینی، مدل‌های تولید شرح بر تصاویر، و مدل‌های تولید متن مبتنی بر توجه از این روش برای تولید خروجی نهایی استفاده می‌کنند.روش بعدی Sampling(نمونه‌برداری) که به جای انتخاب بهترین پیش‌بینی، مدل از یک فرآیند نمونه‌برداریاستفاده و با توجه به احتمالات محاسبه شده، پیش‌بینی‌های مختلفی را تولید کند. این فرآیند می‌تواند به صورت تصادفی انجام شود، به این معنی که پیش‌بینی‌ها براساس توزیع احتمالاتی محاسبه شده نمونه‌برداری می‌شوند. به عنوان مثال، فرض کنید مدل می‌خواهد پیش‌بینی کند که کدام کلمه بعدی در یک جمله خواهد آمد. این مدل می‌تواند بر اساس احتمالات محاسبه شده برای کلمات مختلف در واژگان، یک کلمه را با استفاده از نمونه‌برداری مستقیم انتخاب کند. برای مثال، اگر واژگان مدل شامل کلمات &quot;آسمان&quot;، &quot;زرد&quot; و &quot;آبی&quot; باشد و احتمالات محاسبه شده به ترتیب 0.4، 0.3 و 0.3 باشند، مدل می‌تواند با استفاده از نمونه‌برداری، به تصادف کلمه &quot;آسمان&quot; را انتخاب کند. این روش برای مسائل مختلفی مانند مدل‌های زبانی، ترجمه ماشینی، تولید متن خودکار و تولید تصویر مورد استفاده قرار می‌گیرد.البته استفاده از هر کدام از این روش ها برای تولید خروجی مناسب بستگی تسک هایی دارد که می خواهیم انجام دهیم و مثلا در مواردی که فضای جستجو بسیار بزرگ است و استفاده از روش نمونه‌برداری مستقیم ممکن است بسیار زمان‌بر باشد، از روش Beam Search برای تولید پیش‌بینی‌های محتمل استفاده می‌شود. در هر دو روش، خروجی‌های تولید شده به عنوان ورودی به مدل برای محاسبه گام بعدی یا به عنوان خروجی نهایی برای استفاده در برنامه‌ها و کاربردهای دیگر به دست می‌آید.کاربردهای Transrormersترنسفورمرها به دلیل توانایی فوق‌العاده‌شان در درک روابط بین کلمات در یک جمله، کاربردهای بسیار متنوعی در حوزه‌های مختلف پردازش زبان طبیعی (NLP) پیدا کرده‌اند. از مهم‌ترین کاربردهای Transrormer ها مثل ترجمه ماشینی که به طور قابل توجهی دقت ترجمه ماشینی را در زبان‌های مختلف افزایش داده‌ است. در خلاصه‌سازی متن متن‌های طولانی را به طور دقیق خلاصه می کنند. می‌توانند به سوالات مربوط به متن به طور دقیق و جامع پاسخ دهند. متن‌های مختلفی مانند شعر، داستان، کد و ایمیل تولید کنند. تشخیص و تصحیح خطا در واقع می‌توانند خطاهای نگارشی و دستوری را در متن شناسایی و تصحیح کنند. کاربرد های زیادی برای استخراج اطلاعات مهم از متن دارند. Transrormer ها می‌توانند احساسات بیان شده در متن را تجزیه و تحلیل کنند. در LLM ها  برای ایجاد مکالمات طبیعی و جذاب با کاربران استفاده شوند.کاربرد های Transrormer در بینایی ماشینعلاوه بر همه مواردی که در بالا ذکر شد امروزه شاهد آن هستیم که از Transrormers ها در تسک های دیگر مثلا در بینایی کامپیوتر برای پردازش تصاویر و ویدیوها استفاده می شود و از جمله شرکت هایی که از آن استفاده می کنند مثل Google در طیف گسترده ای از جمله طبقه بندی تصویر (تصاویر اشیاء، حیوانات یا مناظر)، تشخیص شیء (شناسایی افراد، ماشین ها یا ساختمان ها) و بخش بندی تصویر (بخش بندی افراد، ماشین ها یا ساختمان ها) استفاده می کند. به عنوان مثال، از مدل Transformer به نام ViT برای بالا بردن دقت پیشرفته در مجموعه داده های ImageNet استفاده شده است. این مدل در سال 2021 توسط گروهی از محققان Google AI در مقاله ای منتشر شد. https://arxiv.org/abs/2010.11929 این مقاله نشان می دهد که مدل های Transformer می توانند مستقیماً روی تصاویر اعمال شوند مدل  ViT  با تفاوت خیلی جزئی از معماری Transformer استاندارد برای پردازش تصاویر استفاده می کند. روی مجموعه داده های ImageNet  به روش pre-training with massive parameters آموزش داده می شود. با مدل ViT می توان نتایج خیلی خوبی را در مجموعه داده های مختلف تشخیص تصویر به دست می آورد و از مدل های پیشرفته قبلی مانند مدل های مبتنی بر CNN بهتر عمل می کند. OpenAI از Transformers در برنامه های مختلف بینایی کامپیوتر، از جمله تولید تصویر، ترجمه تصویر و... استفاده می کند. به عنوان مثال، از مدل Transformer به نام DALL-E برای ایجاد تصاویر واقعی از متن استفاده شده است. Microsoft از Transformers برای تشخیص چهره، تشخیص اشیا و ردیابی اشیا استفاده می کند. به عنوان مثال، از مدل Transformer به نام Azure Cognitive Services برای ارائه API های بینایی کامپیوتر به توسعه دهندگان استفاده شده است. Facebook در تسک هایی از جمله تشخیص چهره، تشخیص اشیا و بخش بندی تصویر استفاده می کند. به عنوان مثال، از مدل Transformer به نام Detectron2 که در واقع یک جعبه ابزار منبع باز برای تشخیص اشیاء در تصاویر است که بر پایه شبکه‌های عصبی عمیق مبتنی بر Transformer طراحی شده است. این جعبه ابزار از مدل Transformer و سایر روش‌های پیشرفته در حوزه دید کامپیوتری استفاده می‌کند. ازجمله مزایای استفاده از مدل Detectron2 می‌توان به دقت بالا، قابلیت یادگیری و انطباق با ورودی‌های مختلف، و توانایی انجام وظایف پیچیده‌تر در تشخیص و تفسیر تصاویر اشاره کرد.از Transformers می تواند برای ایجاد تصاویر جدید از متن یا تصاویر موجود استفاده شود. به عنوان مثال، می توان از آنها برای ایجاد تصاویر واقع گرایانه از متن یا برای ترجمه تصاویر از یک سبک به سبک دیگر استفاده کرد. همچنین برای دستکاری تصاویر، مانند تغییر رنگ، اضافه کردن یا حذف اشیاء یا تغییر بافت تصاویر استفاده شود. اینها تنها چند نمونه از کاربردهای Transformers در بینایی کامپیوتر هستند. با توجه به توانایی Transformers در یادگیری وابستگی های پیچیده در داده ها، احتمالاً در آینده شاهد استفاده گسترده تری از آنها در این زمینه خواهیم بود.چالش‌ها و مسائل بازترنسفورمرها از نظر توانمندی و انعطاف پذیری در پردازش زبان طبیعی و بینایی کامپیوتر بسیار پیشرفته هستند، اما بدون شک هیچ مدلی کامل نیست و معایب خاص خودش را می تواند داشته باشد. اولین نکته ای که وجود دارد پیچیدگی زیاد Transformer ها و نیاز به منابع محاسباتی بالا برای آموزش و استفاده از آن است که مشکلاتی مانند زمان طولانی آموزش و پردازش، مصرف انرژی بالا و نیاز به سخت افزار قوی را در پی دارد. برای آموزش مدل‌های Transformer به مجموعه داده‌های بزرگ و حجیم نیاز است که ممکن است به مشکلاتی مانند نیاز به ذخیره و پردازش حجم زیادی از داده‌ها و مدیریت داده‌های بزرگ منجر شود. چون برای استفاده از Transformer ها داده ها به صورت توکن ها یا بردارهای عددی باشند برای بعضی از حوزه‌ها مانند تشخیص تصویر، ممکن است دقت و اطلاعات موجود در تصویر را کاهش دهد.نتیجه گیریدر بخش دوم مطالعه ما، به جزئیات بسیاری در مورد معماری ترنسفورمرها پرداختیم. ما هر مؤلفه و لایه را بررسی کردیم و یادگرفتیم که چگونه انکودرها، دیکودرها و ترنسفورمرها با هم کار می‌کنند تا ترجمه زبان بین زبان‌های مختلف را بهبود بخشند. همچنین، ما بررسی کردیم که چگونه ترنسفورمرها می‌توانند برای وظایف مختلف دیگر استفاده شوند. ما در مورد برخی از محدودیت‌های ترنسفورمرها صحبت کردیم. از زمان معرفی آن‌ها در سال 2017، شهرت مدل‌های زبانی بر پایه ترنسفورمرها ادامه داشته است. به نظر می‌رسد که ترنسفورمرها نه تنها شهرت خود را حفظ می‌کنند بلکه روز به روز محبوبیت بیشتری کسب می‌کنند. با این حال، در سال‌های اخیر، معماری‌های دیگری مانند Infini-Transformers ظاهر شده‌اند. Infini-Transformers یک خانواده از مدل‌های ترنسفورمر با عمق نامحدود هستند، و مهم‌ترین مقاله که در این زمینه پیدا کردم، توسط تیم تحقیقاتی گوگل نوشته شده است. https://arxiv.org/abs/2404.07143 این مدل‌ها از معماری استاندارد ترنسفورمر با اصلاحاتی برای افزایش عمق آن استفاده می‌کنند. به عنوان مثال، آن‌ها از توابع فعال‌سازی ReLU به جای توابع فعال‌سازی softmax در معماری استفاده می‌کنند، لایه‌های نرمال‌سازی دسته‌ای را بین هر بلوک ترنسفورمر درج می‌کنند، و از توابع توجه موقعیتی جدید استفاده می‌کنند. این مدل‌ها با استفاده از پیش‌آموزش با پارامترهای عظیم بر روی مجموعه داده‌های متن بزرگ آموزش داده می‌شوند. پس از آن، این مدل‌ها برای وظایف مختلف پردازش زبان طبیعی مانند ترجمه ماشینی، خلاصه‌سازی متن و پاسخ به سوالات به‌صورت مرحله‌ای تنظیم می‌شوند. در آینده، بیشتر درباره این مدل‌ها خواهم نوشت. با این حال، سرعت تغییرات به شدت افزایش یافته است و ممکن است به زودی یک مدل موثرتر از ترنسفورمرها معرفی شود. از همراهی شما در این مقاله سپاسگزارم. من خودم درحال نوشتن این مقاله بسیاری چیزها یاد گرفتم و امیدوارم برای شما هم مفید بوده باشد. نظرات شما در مورد این مقاله را قدردانی می‌کنم. لطفاً نظر خود را با من به اشتراک بگذارید. با تشکر.ممنون از شما که در این سفر به دنیای Deeps با من همراه بودید.لینک پارت 1 به انگلیسی در Medium# پارت 1 : مهم ترین اصطلاحات و قست هایی که در معماری Transformer استفاده شده است را می آموزیم ( مرحله قبل از شیرجه در عمق )# پارت 2 : معماری ترنسفورمرها را به صورت جز به جز و قسمت به قسمت کامل باز می کنیم با مثال و کدلطفا اگر مایل بودید مقاله دیگر من&quot;مرحله به مرحله برای ساختن یک شبکه عصبی مصنوعی و دیدن چگونگی رخ دادن overfitting با MNIST و معماری CNN &quot; رو در ویرگول ببینید .مهندسی پرامپت چیست و چرا برای پیشرفت هوش مصنوعی اهمیت دارد؟امیدوارم از مطالب لذت برده باشید .</description>
                <category>محمد جواد نجادی</category>
                <author>محمد جواد نجادی</author>
                <pubDate>Sat, 11 May 2024 11:34:07 +0330</pubDate>
            </item>
                    <item>
                <title>ترنسفورمور تمام چیزی است که شما نیاز دارید!</title>
                <link>https://virgool.io/@m.javadnejadi/%D8%AA%D8%B1%D9%86%D8%B3%D9%81%D9%88%D8%B1%D9%85%D9%88%D8%B1-%D8%AA%D9%85%D8%A7%D9%85-%DA%86%DB%8C%D8%B2%DB%8C-%D8%A7%D8%B3%D8%AA-%DA%A9%D9%87-%D8%B4%D9%85%D8%A7-%D9%86%DB%8C%D8%A7%D8%B2-%D8%AF%D8%A7%D8%B1%DB%8C%D8%AF-njvo5kc5afmj</link>
                <description># پارت 1 : مهم ترین اصطلاحات و قست هایی که در معماری Transformer استفاده شده است را می آموزیم ( مرحله قبل از شیرجه در عمق )&quot;چه چیزی واقعی است؟ چگونه واقعی را تعریف می‌کنید؟ اگر درباره آنچه که می‌توانید احساس کنید، بو کنید، مزه ببرید و ببینید صحبت می‌کنید، آنگاه واقعیت فقط سیگنال‌های الکتریکی است که توسط مغز شما تفسیر می‌شوند.&quot;فیلم ماتریکس(1991)تولید شده در Ideogram، با پرامپت نویسندهمقدمه# پارت 1 : مهم ترین اصطلاحات و قست هایی که در معماری Transformer استفاده شده است را می آموزیم ( مرحله قبل از شیرجه در عمق )# پارت 2 : معماری ترنسفورمرها را به صورت جز به جز و قسمت به قسمت کامل باز می کنیم با مثال و کداین مقاله در دو پارت آماده شده است. هر آنچه را که در مورد ،Transformers وجود دارد خواهیم آموخت. اولین تصوری که بعد از آشنایی بیشتر من با Transformers در ذهن من ایجاد شد فیلم ماتریکس بود. زمانیکه نئو مهارت های لازم برای مبارزه را فرا می گرفت باید می توانست مهارت های رزمی ومبارزه ای را در کمترین زمان ممکن و به بهترین صورت ممکن بیاموزد اما چگونه ؟ در زمان محدود امکان پذیر نبود. پس راهکار چه بود ؟ برای یادگیری هر چیزی قرصی وجود داشت و کافی بود آن مهارت را آپلود کنند که نئو با خوردن آن می توانست مثلا مهارت های رزمی را یاد بگیرد. بعد در محیطی(مثل محیط های شبیه سازی برای آموزش ربات ها) با استادش آن را تمرین کند. تقریبا ایده Transformers ها هم همین است. چیزی که آموخته شده و وجود دارد ( قرص ها ) را می خواهیم برای تسک دیگری استفاده کنیم. برای یادگیری آن فقط کافیست &quot; قرص را بخوریم &quot; . به جای اینکه برای تسک جدید دوباره چرخ را اختراع کنیممی خواهیم دانش اختراع چرخ را به تسک مورد نظر انتقال بدیم و با آن بتوانیم چرخ را بهبود دهیم . با من در این سفر هیجان انگیز همراه باشید. راجع به تاریخچه به وجود آمدن آن و کاربرد های آن. معماری Transformers همچنین می خواهیم به حالت مقایسه ای به آن بپردازیم که آیا واقعا این رویکرد درست است و خیلی از مشکلات را حل می کند؟ چه تفاوت های عمیقی با LSTM ها دارد؟ اما Transformers ها از کجا آمده اند ؟ ایده اولیه به چه صورت بود ؟ آیا فقط برای ترجمه کاربرد دارد ؟ برای تولید متن از آن استفاده می شود ؟ از چه مکانیسمی استفاده شده است؟ مشکلات LSTM با مکانیزم Attention حل شده؟ آیا فقط برای متن مناسبه ؟در پارت 2 همین مقاله هم به صورت کامل و قسمت به قسمت تمام معماری Transformer را خواهیم آموخت و بسیار به عمق خواهیم رفت. با من در این سفر هیجان انگیز همراه باشید!نمودار معماری ترنسفرمرهایی که در این تصویر نمایش داده شده است، از مقاله اصلی گرفته شده است. منبعخوب به این تصویر نگاه کنید این تصویر معماری اصلی Transformer در مقاله اصلی آن است. دوباره و دوباره و دوباره به آن نگاه کنید! در این پارت و پارت بعدی می خواهیم قسمت به قسمت و جز به جز آن را کامل بررسی کنیم. من روزهاست هر روز چند دقیقه به آن توجه میکنم. دوباره می گویم به آن توجهکنید . توجه . توجه . توجه ....کلمه به کلمه Seq-to-Seqمدل‌های Seq-to-Seq ابتدا در سال‌های ابتدایی قرن 21 مطرح شدند، اما با پیشرفت تکنولوژی و عمق شبکه‌های عصبی، به خصوص با افزایش استفاده از شبکه‌های بازگشتی (RNN) و LSTM، کارایی و کاربرد آنها  مخصوصا برای وظایف ترجمه ماشینی و پردازش زبانی بهبود یافت و به عنوان روشی موثر در NLP شناخته شدند. مهم ترین مشکل این روش مشکل محو شدن گرادیان است چون از RNN یا LSTMاستفاده می شود. در واقع، Transformer نیز از یک معماری Seq-to-Seq برای وظایف مختلف استفاده می‌کند، اما با اصلاحات و بهبودهای بسیاری که عملکرد و کارایی آن را بهبود می‌بخشد. در نتیجه کاربرد های  مدل‌های Seq-to-Seq کاهش یافته است. مدل‌های Transformer، به خصوص با مکانیزم Attention خود، نقایص موجود در Seq-to-Seq را برطرف کرده‌اند و عملکرد بهتری در وظایف پردازش زبانی ارائه می‌دهند. به همین دلیل، امروزه کاربردهای مدل‌های Seq-to-Seq در مقایسه با مدل‌های Transformer کاهش یافته است و بیشتر در پژوهش‌های تاریخی مورد استفاده قرار می‌گیرند. در قسمت بعد با ماشین زمان به تاریخچه Transformer می رویم!تاریخچه Transformersدر هوش مصنوعی با شنیدن Transformers یا Attention اولین چیزی که به ذهن ما خطور میکند مقاله معروف “Attentionis all you need” است که در سال 2017 منتشر شد و انقلاب و جهشی بزرگ در AI به وجود آورد. می خواهیم به عمق برویم و ببینیم که ایده Attention  اولین بار چه زمانی مطرح شد ؟ یکی از اولین مقالاتی که مکانیزم Attention را برای اولین بار به طور جامع و کامل در حوزه ترجمه ماشینی معرفی کرده است مقاله https://arxiv.org/abs/1409.0473 تفاوتی که این مقاله با &quot;Attention is All You Need&quot; دارد این است که در هر مرحله از ترجمه، شبکه عصبی به توجه به مکان‌های مختلف در جمله مبدا می‌پردازد و بر اساس آن، کلمات متناظر در جمله مقصد را انتخاب می‌کند. اما در مقاله سال 2017 مکانیزم Attention به طور کامل به عنوان جایگزینی برای لایه‌های بازگشتی معمولی(مدل‌هایی که از معماری‌هایی مانند LSTM (Long Short-Term Memory) و GRU (Gated Recurrent Unit) استفاده می‌کنند که از یک ساختار بازگشتی برای پردازش داده‌های توالی استفاده می‌کنند.) مورد استفاده قرار گرفته است. یعنی شبکه Transformer تماماً بر اساس مکانیزم Attention ساخته شده است، بدون نیاز به لایه‌های بازگشتی. علاوه بر این، از self-attention نیز استفاده شده است که به شبکه اجازه می‌دهد تا به روابط بین کلمات در جمله بپردازد و بهترین ترجمه‌ها را تولید کند.در سال 2015 مقاله دیگری که توسط Dzmitry Bahdanau، Kyunghyun Cho و Yoshua Bengio در سال 2015 منتشر شده است. https://papers.nips.cc/paper/1839-a-neural-probabilistic-language-model در این مقاله از مکانیزم توجه را برای بهبود ترجمه ماشینی استفاده می‌کنند، یک نوع خاص از Attention را که به عنوان &quot;توجه نظارت شده&quot; (Supervised Attention) شناخته می‌شود، معرفی می‌کنند که به شبکه اجازه می‌دهد تا در هنگام آموزش با توجه به ورودی‌ها و خروجی‌های مربوط به ترجمه، به طور خاص به نقاط مهم تر در جمله مبدا توجه کند. این نوع از توجه به شبکه اجازه می‌دهد تا به دقت بیشتری در انتخاب کلمات متناظر در جمله مقصد بپردازد.بالاخره درسال 2017 مقاله ای تحت عنوان &quot; Attentionis all you need&quot; منتشر شد https://arxiv.org/abs/1706.03762 به جرات می توان گفت سرآغاز انقلاب هوش مصنوعی بعد از این مقاله آغاز شد و هنوز بعد از سالها همه مردم به آن اشاره می کنند. بعد از این مقاله مقالات زیادی در این مورد منتشر شده و روش هایی برای پیاده سازی Transformer ها در تسک های مختلف وجود دارد. حتی از این نوع معماری برای بینایی ماشین هم استفاده میشود احتمالا در آینده نزدیک راجع به این موضوع هم خواهم نوشت. در قسمت های بعد به صورت کامل مهم ترین مسائل و مکانیزم هایی که در معماری Transformer و در مقاله Attentionis all you need تشریح شده است بررسی خواهیم کرد.انواع مدل های Attentionدر این قسمت می خواهیم ببینیم که کلا Attention چی هست و انواع مختلف Attention چی هست و همچنین اونها رو با هم مقایسه کنیم تا تفاوت های اون ها بهتر و بهتر متوجه بشم.توجه Attentionاز اسم اون کاملا واضح میشه فهمید که چیست.  Attention! چه زمانی رخ میده ؟ وقتی قراره روی نکات خاص تر بیشتر تمرکز کنیم می گیم که به اون توجه کردیم. این مفهوم که تقریبا برای اولین بار برای پردازش زبان طبیعی استفاده شد. برای رفع مشکلات ترجمه کلمه به کلمه (Seq- to - seq) خیلی مناسبه چرا که Seq - to - Seq در خیلی از موارد باعث اشتباه در ترجمه میشه. در واقع کاری که Attention انجام میده اینه که وزن های اهمیت ( مهم‌ترین وزن‌ها ) داده های ورودی رو که میتونن تاثیر زیادی در تولید خروجی مناسب داشته باشند براساس ارتباط آنها با تسک مورد نظر اختصاص میده. البته Attention نه فقط روی داده‌های ورودی بلکه می تواند بر روی سایر عناصری که در فرآیند پردازش مدل استفاده می‌شوند، مانند وزن‌های مدل، بردارهای حالت پنهان و غیره نیز تأثیر بگذارد. حالا میخوایم ببینیم چه انواع مختلفی از Attention وجود داره با من همراه باشید!توجه به خود Self_ Attention توجه به خود Self-Attention یا درون توجه، یک مکانیسم توجهی است که در معماری‌های مختلف یادگیری عمیق، به ویژه در مدل‌های Transformer ، به کار می‌رود. در این مکانیزم، مدل به جای توجه به دنباله‌های ورودی دیگر یا روش‌های مختلف، به بخش‌های مختلف دنباله ورودی خود توجه می‌کند. در واقع، Self-Attention به مدل اجازه می‌دهد که موقعیت‌های مختلف دنباله ورودی را با یکدیگر مرتبط کند و از این اطلاعات برای محاسبه نمایشی از دنباله بهره‌برداری کند. این نوع توجه به مدل اجازه می‌دهد که وابستگی‌های دوربرد و اطلاعات زمینه‌ای را در نمایش خروجی‌های خود لحاظ کند. این مفهوم به وابستگی‌ها و ارتباطاتی اشاره دارد که بین اجزای مختلف یک دنباله یا توالی ورودی و خروجی وجود دارد، اما این ارتباطات بیشتر از یک توکن به توکن نیستند و می‌توانند به صورت غیرمستقیم از فاصله‌های دورتر نیز نمایش داده شوند. به طور مثال، در یک متن یک کلمه در ابتدای جمله باشد و کلمه وابسته آن در انتهای جمله. این نوع وابستگی‌های دوربرد در فرآیند Self-Attention در مدل‌های Transformer وجود دارد و به مدل اجازه می‌دهند که ارتباطات دورتری را در نمایش خروجی‌های خود در نظر بگیرد و از اطلاعات زمینه‌ای بیشتری استفاده کند. در بخش های بعد در قسمت معماری Transformer ها بیشتر به آن خواهیم پرداخت.توجه نرم soft attentionمکانیسم soft attention ، به هر عنصر ورودی یک وزن که معمولاً از یک تابع softmax بدست آمده اختصاص داده می‌شود که نشان دهنده اهمیت آن عنصر است. این وزن‌ها تعیین می کنند که در زمان پردازش و تصمیم‌گیری، کدام عناصر ورودی بیشترین توجه را برای تولید خروجی باید داشته باشند. مزیت اصلی soft attention این است که با استفاده از تکنیک‌هایی مبتنی بر گرادیان به مدل‌ها امکان می‌دهد تا، بدون تعیین تعداد مشخصی از این عناصر به چندینعنصر ورودی به طور همزمان توجه کنند، در نتیجه می‌توانند به طور موثر‌تر و سریع‌تر بهینه‌سازی شوند. به عبارت دیگر، از روش‌های بهینه‌سازی استفاده می‌شود که با استفاده از گرادیان‌ها (مشتقات جزئی) این فرایندها را ساده‌تر و بهبود یافته می‌کنند. این باعث می شود برای داده‌های ورودی که طول و اندازه متغیری دارند، مانند ترجمه ماشینی، پرسش و پاسخ ماشینی، تشخیص اشیاء در تصاویر و غیره، بسیار مفید است. برای مثال، در ترجمه ماشینی، مکانیسم soft attention می‌تواند هنگام ترجمه جمله، به هر کلمه در جمله مبدا با توجه به اهمیت آن در تولید کلمه مقابل در جمله مقصد توجه بیشتریداشته باشد.توجه نرم Soft Attention معمولاً در مدل‌های مبتنی بر RNN، مانند مدل‌های مترجم یا شبکه‌های بازگشتی، استفاده می‌شود. تفاوت اصلی بین Self-Attention و Soft Attention در نحوه محاسبه وزن‌های توجه. در Self-Attention، هر عنصر با همه عناصر دیگرهمبستگی دارد و وزن‌های توجه به طور مستقیم از ویژگی‌های ورودی استخراج می‌شود. اما در Soft Attention، وزن‌های توجه از طریق یک مدل یادگیری ماشینی، مانند یک شبکه عصبی، محاسبه می‌شوند که بر اساس ویژگی‌های ورودی و وضعیت فعلی مدل تعیین می‌شوند. نمیتواند به طور قطع گفت که کدام Attention مناسب تر است چرا که انتخاب هر کدام مطابق با تسکی است که انجام می دهیم.توجه سخت hard attentionدر hard attention مدل معمولاً با انتخاب یک زیرمجموعه از ویژگی‌های ورودی برای توجه روی یک بخش خاص از داده‌های ورودی تمرکز می‌کند،. برعکس soft attention که وزن‌های پیوسته را به تمامی عناصر ورودی اختصاص می‌دهد، hard attention وزن های  گسسته را برای تمرکز انجام می‌دهد. این بدان معناست که مدل در هر مرحله، تنها یک یا چند عنصررا برای تمرکز انتخاب می‌کند، که منجر به یک مکانیسم توجه ساده تر و انتخابی می‌شود. با این حال، آموزش مدل‌هایی که از hard attention استفاده می‌کنند ممکن است چالش‌برانگیز باشد. مکانیسم hard attention عملیات غیر قابل تفاوت را به مدل اضافه می‌کند، آن را مشتق ناپذار می کند. و بدون مشتق پذیری، الگوریتم‌های استاندارد یادگیری ماشین مثل backpropagation نمی توانند برای بهینه‌سازی مدل‌های با hard attention استفاده شوند. برای آموزش این مدل‌ها، از تکنیک‌های خاصی مانند Reinforcement Learnin  که از پاداش‌ها و تنبیهات برای هدایت مدل به سمت انتخاب‌های درست یا Discrete Optimization Techniques  که از الگوریتم‌های جستجوی گسسته برای یافتن بهترین مجموعه از عناصر یا Derivative Approximation که از تکنیک‌های مختلفی برای تخمین تقریبی مشتق عملیات غیرقابل تمایز استفاده می شوند تا امکان استفاده از روش‌های استاندارد backpropagation فراهم شود. از جمله کاربرد های hard attention در زیرنویس تصویر است، باعث تمرکز ویژه بر  مناطق خاصی از تصویر که بهترین انتخاب برای نوشتن زیرنویس تصویر می شود.توجه جهانی global attentionمکانیسم‌های Global Attention در حالتی که وزن‌های Attention بر روی تمام عناصر توالی ورودی تمرکز دارند، که  باعث می شود مدل از تمام اطلاعات موجود در دنباله ورودی بهره‌برداری کند. در این رویکرد، مدل یک بردار زمینه یا context vector را با محاسبه یک وزن مجموعی برای تمام عناصر ورودی ایجاد می‌کند. این وزن‌ها معمولاً توسط امتیازات توجه، که به عنوان احتمالات توجه برای هر عنصر محاسبه می‌شوند، تعیین می‌شوند. مکانیسم Global Attention به طور گسترده در مدل‌های Sequence-to-Sequence استفاده می‌شود، به ویژه در مواردی مانند ترجمه ماشینی، که مدل باید به تمام کلمات در جمله ورودی Attention کند تا ترجمه منسجمی ایجاد کند. یکی از مزایای اصلی این رویکرد این است که به مدل امکان می‌دهد تا از وابستگی‌های دوربرد و اطلاعات زمینه‌ای در تصمیم‌گیری‌ها و تولید خروجی استفاده کند. به این ترتیب، مدل قادر است تا ساختارهای پیچیده‌تر را در داده‌ها شناسایی و درک کند، که می‌تواند به بهبود عملکرد و کیفیت خروجی‌های مدل کمک کند.توجه محلی  local attentionتوجه محلی (Local Attention) نوعی مکانیزم Attention است که در شبکه‌های عصبی، به خصوص در وظایفی مانند NLP و Computer Vision استفاده می‌شود. مکانیسم‌های local attention هنگام محاسبه وزن‌های توجه بر روی یک ناحیه کوچک‌تر از توالی ورودی تمرکز می‌کنند. بر خلاف Global Attention ، مدل یاد می گیرد که یک منطقه یا پنجره خاص را در اطراف موقعیت فعلی انتخاب کند و وزن توجه را فقط در آن منطقه محاسبه کند. این می تواند در موقعیت هایی که اطلاعات مربوطه در یک زمینه خاص و محلی قرار دارند، مفید باشد، مانند هنگام پردازش داده های سری زمانی یا متن با ویژگی های محلی قوی. local attention همچنین می تواند از نظر محاسباتی کارآمدتر از Global Attention باشد، زیرا تعداد محاسبات توجه مورد نیاز را کاهش می دهد و آن را برای برنامه هایی با توالی ورودی بزرگ یا منابع محاسباتی محدود مناسب می کند.(ماسک/خود توجهی چند سر) Masked/Multi-Head Self-Attentionنسخه ارتقاء یافته از مکانیزم Self-Attention(SA) است. به جای تمرکز به یک نقطه خاص به مدل اجازه می‌دهد تا به صورت همزمان به چندین جنبه مختلف یا نقاط مختلف در دنباله ورودی توجه کند. اصلی‌ترین تفاوت بین SA و MHSA این است که SA یک مجموعه وزن توجه را محاسبه می‌کند، در حالی که MHSA چندین مجموعه وزن توجه را محاسبه می‌کند که سپس ترکیب می‌شوند تا خروجی نهایی شکل بگیرد. این ویژگی باعث می شود که MHSA به روابط پیچیده‌تر بین عناصر ورودی بپردازد. MHSA می‌تواند به راحتی‌ از SA موازی‌سازی وهزینه محاسباتی SA را کاهش دهد، زیرا هر Head Attention می‌تواند به صورت مستقل یک زیرمجموعه از عناصر ورودی وزن‌های توجه را محاسبه کند.همچنین در Transformer بلوک دیگری از Attention به نام Multi-Head Self-Attention Masked وجود دارد که برای وظایف توالی به توالی مانند ترجمه ماشینی و خلاصه سازی متن استفاده می شود. در Masked Multi-Head Self-Attention (MHSA)، هدف اصلی این است که در هر مرحله از پردازش، مدل با استفاده از یک ماسک مخصوصی فقط به اطلاعات موجود در قسمت‌های قبلی دنباله دسترسی داشته باشد و اطلاعات قسمت‌های بعدی دنباله را مشاهده نکند. به این ترتیب، مدل مجبور می‌شود اطلاعات را به ترتیب پردازش کند. به عبارت دیگر، مواردی از دنباله که هنوز توسط مدل پردازش نشده‌اند، به طور موقت مخفی می‌شوند تا مدل نتواند به آن‌ها دسترسی داشته باشد. سپس به تدریج و با توجه به اطلاعات تا آن لحظه ، وزن‌های توجه را محاسبه کند. توجه Scaled Dot-Product یکی دیگر از اجزای کلیدی Transformer که در لایه‌های Self-Attention به کار می‌رود. این نوع توجه برای برقراری ارتباطات میان تمامتوکن‌های ورودی یک دنباله در یک لایه از معماری Transformer استفاده می‌شود. در معماری Transformer، K، Q و V مخفف Key (کلید)، Query (پرس و جو) و Value (مقدار) هستند. این سه ماتریس نقش مهمی در مکانیزم Self-Attention و Multi-Head Attention ایفا می‌کنند که برای مدل‌سازی روابط بین کلمات در جمله استفاده می‌شوند. در واقع برای محاسبه وزنهر کلمه در جمله با توجه به کلمه ورودی (Query) استفاده می‌شوند.تصویر ماژول توجه باضرب نقطه‌ای مقیاس‌دار در مقاله اصلی ارائه شده است. منبعماتریس کلید (K) میزان مرتبط بودن هر کلمه با کلمه ورودی (Query) Q را محاسبه می کند. K اطلاعات مربوط به متن ورودی را نشان می‌دهد. هر کلمه در جمله یک بردار Key (کلید) دارد. ماتریس Query (Q) برای میزان مرتبط بودن هر کلمه با کلمه‌ای که می‌خواهیم بر روی آن تمرکز کنیم (Context) را محاسبه می کند. Q اطلاعات مربوط به کلمه ورودی را نشان می‌دهد. هر کلمه در جمله یک بردار Query (پرس و جو) دارد. ماتریس Value (V) اطلاعات مربوط به هر کلمه در جمله را نشان می‌دهد. V اطلاعات معنایی هر کلمه را نشان می‌دهد. هر کلمه در جمله یک بردار Value (مقدار) دارد.مقیاس‌دهی محصول داخلی (Dot-Product) توکن‌هادر این مرحله، برای هر توکن ورودی، یک dot product (ضرب داخلی دو بردار) با همه توکن‌های دیگر محاسبه می‌شود. محاسبه مقیاس ‌دهی محصول داخلی به معنای ضرب داخلی بین دو بردار Embedding توکن‌ها است. ابتدا برای هر زوج توکن ( توکن مبدأ و توکن مقصد )، بردار Embedding آن‌ها را با هم ضرب می‌کنیم. سپس از مقدار حاصل ضرب داخلی برای نشان دادن اهمیت و وابستگی بین دو توکن استفاده می‌شود. نتیجه آن یک ماتریس از مقادیر محصول داخلی برای هر زوج توکن که بیانگر ارتباط و وابستگی بین توکن‌های مختلف در دنباله و برای محاسبه امتیازهای توجه وزن‌دار در مرحله‌های بعدی از الگوریتم Attentionاستفاده می‌شوند. این محصول داخلی بیانگر ارتباط و وابستگی بین توکن‌ها است و برای هر زوج توکن (K و Q) محاسبه می‌شود.ساده تر اینکه فرض کنید ما یک جمله به عنوان ورودی داریم که چندین کلمه دارد، و می‌خواهیم برای هر کلمه در این جمله، میزان اهمیت و وابستگی آن به کلمات دیگر را محاسبه کنیم. حالا، فرض کنید ما دو کلمه &quot;سگ&quot; و &quot;پسر&quot; داریم که در جمله آمده‌اند. اگر ما امتیاز توجه را برای هر زوج کلمه در جمله محاسبه نکنیم و تنها به کل جمله توجه کنیم، ممکن است معنای این کلمات به هم بریزد. به عنوان مثال، اگر در جمله &quot;سگ با پسر می‌دوید&quot; باشیم، ما باید بفهمیم که &quot;سگ&quot; به &quot;پسر&quot; مرتبط است، اما اگر تنها به کل جمله توجه کنیم، ممکن است وابستگی بین این دو کلمه را از دست بدهیم.مقیاس‌دهی نرمال (Normalization)مقیاس داخلی محاسبه شده برای هر توکن که بر یک مقدار نرمال‌سازی تقسیم می‌شود. این مقدار نرمال‌سازی معمولاً معادل طول بردار توکن است. یا می توانیم بگوییم معادل جذر مربعات مجذور طول بردارهای نمایش توکن‌ها است. وقتی ما برای هر توکن در دنباله، مقیاس داخلی را محاسبه می‌کنیم، ما عملاً این مقادیر را توسط یک مقدار نرمال‌سازی به یک مقدار استانداردمی‌رسانیم تا بتوانیم آن‌ها را با یک مقیاس مشخص و قابل قبول مقایسه کنیم. برای این کار از توابع Softmax استفاده می‌کنیم. تابع Softmax عملکردی است که مقادیر ورودی را به فضای احتمال تبدیل می‌کند، به گونه‌ای که مقادیر بزرگتر بیشترین احتمال را دارند و مقادیر کوچکتر به طور متناسب با مقادیر بزرگتر احتمالات کمتری را دارند. که این امر به بهبود پایداری و کارایی الگوریتم کمک می‌کند.ضرب در ماتریس ویژگی (Feature Matrix)در این مرحله ، ما با استفاده از مقادیر محاسبه شده از مرحله قبلی(ضرب داخلی توکن‌ها)، وزن‌هایی را برای هر توکن محاسبه می‌کنیم که بیانگر اهمیت هر توکن نسبت به سایر توکن‌ها در دنباله است. برای این کار، از یک ماتریس وزنی با ابعادی مناسب برای محاسبه استفاده می‌کنیم. ابعاد این ماتریس وزنی به اندازه تعداد توکن‌ها در ورودی و خروجی Transformer است.این تصویر یک بلوک دیکودر را نشان می‌دهد که در آن می‌توانیم به وضوح ماتریس ویژگی‌های محاسبه شده در انکودر را ببینیم که به دیکودر وارد شده است. منبعبه طور خلاصه، این ماتریس وزنی، یک نگاشت خطی است که برای هر توکن ورودی به یک وزن مناسب تبدیل می‌شود. این وزن معمولاً از -۱ تا ۱ متغیر است و نشان می‌دهد که هر توکن نسبت به سایر توکن‌ها چقدر اهمیت دارد. این وزن‌ها سپس با استفاده از مقادیر مقیاس‌دهی شده داخلی توکن‌ها (که نشان دهنده ارتباط وابستگی توکن‌ها با یکدیگر است)، برای هر توکن محاسبه می‌شوند.محاسبه امتیاز نهاییدر این مرحله، وزن‌های محاسبه شده در مراحل قبلی با مقادیر نمایش توکن‌ها ضرب می‌شوند تا مقدار نهایی برای هر توکن به دست آید. این مقدار نهایی نشان‌دهنده اهمیت هر توکن نسبت به دیگران است و در مدل‌های Transformer برای محاسبه وزن‌های توجه استفاده می‌شود.میانگین‌گیری وزن‌داردر این مرحله، با استفاده از امتیازهای نهایی Attention، یک میانگین‌ وزن ‌دار از مقدارهای نمایش توکن‌ها محاسبه می‌شود. این میانگین‌وزن‌دار، با توجه به اهمیت هر توکن، محاسبه می‌شود و در فرایند انتقال اطلاعات میان توکن‌ها نقش دارد. در این مرحله، ابتدا با استفاده از امتیازهای نهایی Attention که به هر توکن تخصیص داده شده است (که این امتیازها بر اساس محاسبات قبلی مانند محاسبه مقیاس داخلی و وزن‌دهی صورت گرفته‌اند)، وزنی برای هر توکن محاسبه می‌شود که نشان دهنده اهمیت آن توکن نسبت به سایر توکن‌هاست.توجه Scaled Dot-Product به عنوان یکی از انواع توجه در ترنسفورمر، اطلاعات موقعیتی و وابستگی‌های بین توکن‌ها را در یک دنباله درک می‌کند و از این اطلاعات برای تولید خروجی موثر استفاده می‌کند.Residual Connections in Transformerدر معماری Transformer ها Residual Connections را تقریبا در تمام لایه ها میبینیم اما چرا از آن استفاده می کنیم. یک دلیل مهم کاهش Vanishing Gradient Problem اما چرا مهم است ؟ در شبکه‌های عمیق، یکی از مشکلاتی که ممکن است بروز کند، VGP است زیرا هر چه بیشتر به عمق میرویم، Gradient ممکن است به حدی کوچک و تقریبا نزدیک به صفر شود که عملا دیگر گرادیانی وجود ندارد. برای اینکه این مشکل را به حداقل برسانیم از Residual Connections استفاده می کنیم. ایده استفاده از Residual Connections در Transformer از معماری شبکه‌های RezNet الهام گرفته شده است. به ازای هر لایه Self-Attention و لایه Feed-Forward Neural Network اعمال می‌شوند. این اتصالات به شبکه‌ها کمک می‌کنند تا اطلاعات اولیه و ورودی‌های خام در طول مسیر شبکه حفظ کنند و از این طریق، گرادیان‌ها به سرعت به لایه‌های ابتدایی بازگردند و VGP کاهش یابد.این اتصالات باعث Knowledge Preservation هم می شوند. در واقع این اتصالات کمک می‌کنند تا اطلاعات ویژگی‌های اصلی و مهم ورودی (ویژگی‌هایی که در لایه‌های ابتدایی استخراج می‌شوند)، در طول مسیر شبکه حفظ شود و در لایه‌های عمیق‌تر نیز در دسترس باقی بماند. در نتیجه شبکه سریع تر یاد می‌گیرد که چگونه این اطلاعات را بهتر پردازش کند که سرعت train کردن مدل را افزایش می دهد. همچنین، تعداد پارامترهای لایه‌ها را کاهش می دهد، زیرا لایه‌های اضافی با نیمه‌های خروجی اضافی نیاز نیست که ذخیره شوند.فرض کنید یک شبکه Transformer بدون Residual Connections باشد. در این صورت، اطلاعات بین لایه‌های مختلف به طور مستقیم منتقل نمی‌شود و هر لایه باید اطلاعات را از اول دریافت و پردازش کند. این موجب افزایش تعداد مراحل مورد نیاز برای آموزش می‌شود و افزایش زمان و هزینه محاسباتی می‌شود. همچنین، احتمال گم شدن گرادیان‌ها نیز بالا می‌رود که ممکن است منجر به عملکرد نامناسب شبکه شود. اما با استفاده از Residual Connections ، این مشکلات می‌توانند به حداقل برسد و عملکرد شبکه بهبود یابد.تعبیر موقعیت  Position EmbeddindPosition Embeddindتعبیر موقعیت (Position Embedding) یک عنصر حیاتی در معماری Transformer ست. این تکنیک اطلاعات موقعیتی را به ویژگی‌های ورودی اضافه می کند و باعث می شود که مدل رابطه و همبستگی بین توکن‌ها در یک دنباله را درک کند. به عبارت دیگر، با Position Embedding ، مدل می فهمد که هر توکن کجای دنباله و چه توالی‌ای دارند در نتیجه مدل می تواند فرآیند پردازش دنباله، روابط زمانی و مکانی بین توکن‌ها را درک کند. اما چطور عمل می کنه ؟ به این صورت است که ابتدا توکن‌های ورودی با استفاده از یک لایه Embedding به یک فضای برداری تبدیل می‌شوند. سپس Position Embedding به لایه Embedding اضافه می‌شود تا یک Embedding ترکیبی ایجاد شود. سپس Embedding ترکیبی از طریق Encoder Transformer عبور می‌کند که شامل مکانیزم‌های Self-Attention و FFNNs است.عملکرد position embedding در Encoder و Decoder در معماری Transformer کاملاً یکسان نیست و تفاوت‌های مهمی دارد.  در Encoder وظیفه نشان دادن موقعیت نسبی هر توکن در دنباله را دارد. با توجه به این که Encoder فقط ورودی را دریافت می‌کند و نیازی به تولید خروجی با توجه به موقعیت نسبی ندارد، استفاده از تعبیر موقعیت نسبی کفایت می‌کند. اما در Decoder، علاوه بر نیاز به درک موقعیت نسبی توکن‌ها، نیاز به تولید خروجی با توجه به موقعیت نسبی داریم. بنابراین، position embedding در اینجا نقش دوگانه‌ای دارد. از یک سو برای نشان دادن موقعیت نسبی توکن‌ها در ورودی و از سوی دیگر برای تولید خروجی با توجه به موقعیت نسبی آن‌ها در خروجی. به طور کلی، عملکرد position embedding در Encoder و Decoderاشتراکاتی دارند، اما با توجه به وظایف مختلف آن‌ها، تفاوت‌های مهمی نیز وجود دارد که باید مورد توجه قرار گیرد.انواع Position Embeddingتمام انواع Position Embedding که بیان خواهد شد در معماری‌های مبتنی بر Transformer استفاده می‌شوند، اما همه آن‌ها در هر مدل Transformer استفاده نمی‌شوند. در زیر آنها را بررسی و موقعیت هایی که از آنها استفاده می شود را خواهیم آموخت.تعبیر موقعیت ثابتاین نوع تعبیر از یک بردار ثابت برای نمایش هر موقعیت در دنباله استفاده می‌کند. این بردارها معمولاً در زمان pre-trained یاد گرفته می‌شوند و بین همه دنباله‌ها به اشتراک گذاشته می‌شوند. در مقاله اصلی Transformer از آن استفاده شده است و هنوز هم در بسیاری از مدل‌های مبتنی بر ترنسفورمر از جمله ورژن‌های مختلف BERT به طور گسترده استفاده می‌شود.تعبیر موقعیت قابل یادگیریاین نوع تعبیر یک بردار منحصر به فرد برای هر موقعیت در دنباله در زمان آموزش یادگرفته می‌شود. این به مدل اجازه می‌دهد که به طول‌ها و ساختارهای خاص دنباله‌ها سازگار شود. تعبیر موقعیت قابل یادگیری در برخی از مدل‌ها مانند Transformer-XL که برای مسائل پردازش زبان طراحی شده است استفاده می‌شود که برای هر موقعیت در دنباله یک تعبیر موقعیت منحصر به فرد یاد می‌گیرد.تعبیر موقعیت نسبیاین نوع تعبیر موقعیت رابطه موقعیتی توکن‌ها را نمایش می‌دهد، نه موقعیت مطلق آن‌ها. در برخی از مدل‌ها مانند Transformer-XL و Reformerاستفاده می‌شود. مدل Reformer به منظور بهبود کارایی مدل‌های Transformer در مقیاس بزرگ و کاربردهایی مانند ترجمه ماشینی، تولید متن، تشخیص احساسات و سایر وظایف پردازش زبان مورد استفاده قرار می‌گیرد. این مدل به خاطر قابلیت اجرای موازی و بهینه‌سازی منابع محاسباتی، برای پروژه‌هایی که نیاز به پردازش متن در مقیاس بزرگ دارند، مناسب است.برخی مدل‌ها نیز از ترکیب این انواع استفاده می‌کنند، مانند استفاده از تعبیر موقعیت ثابت برای دنباله‌های کوتاه و تعبیر موقعیت قابل یادگیری برای دنباله‌های بلند. البته بعضی مدل‌ها از روش‌های جایگزین برای ادغام اطلاعات موقعیتی استفاده می‌کنند. در مقاله اصلی Transformer از کدگذاری موقعیت سینوسی استفاده شده است و از یک تابع سینوسی برای کدگذاری موقعیت هر توکن استفاده می‌کند. در برخی دیگر از هم از یک روش کدگذاری چرخشی برای کدگذاری موقعیت هر توکن استفاده می‌کند. انتخاب روش تعبیر موقعیت بستگی به وظیفه خاص و طراحی مدل دارد.نتیجه گیریدر پارت 1 مهم ترین اصطلاحاتی که در Transformer استفاده می شوند و کاربرد دارند رو با هم بررسی کردیم و یاد گرفتیم بعضی از آنها ترکیب نسخه های قبلی از خودشان هستند. بعضی دیگر جدید هستند اما یاد گرفتن در مورد آنها قبل از بررسی کامل معماری Transformer خیلی مفید است چرا که در پارت 2 که بخواهیم Encoder  و Decoder  رو بررسی کنیم و وقتی به این اصطلاحات مواجه شویم به راحتی می توانیم آنها را بیاموزیم. در واقع Transformer ترکیبی بسیار زیبا از بسیاری از روش های قبل از خودش برای انجام تسک هایی است که احتمالا خیلی ها تصور نمی کردند که به این زودی ها قابل حل باشد. ممنون که در این پارت با من همراه بودید. پارت 2 بزودی منتشر خواهد شد. لطفا نظرات خودتون رو با من به اشتراک بگذارید که بتوانیم بیشتر با هم بیاموزیم. سپاسممنون از شما که در این سفر به دنیای Deeps با من همراه بودید.لینک پارت 1 به انگلیسی در Medium# پارت 1 : مهم ترین اصطلاحات و قست هایی که در معماری Transformer استفاده شده است را می آموزیم ( مرحله قبل از شیرجه در عمق )# پارت 2 : معماری ترنسفورمرها را به صورت جز به جز و قسمت به قسمت کامل باز می کنیم با مثال و کدلطفا اگر مایل بودید مقاله دیگر من &quot; اربابان حلقه ! انگشترهای قدرت همان pre-trained model ها در هوش مصنوعی هستند! &quot; رو در ویرگول ببینید .بهترین جی پی تی های سفارشی GPT Store کداماند و چطور ساخته میشوند؟امیدوارم از مطالب لذت برده باشید .</description>
                <category>محمد جواد نجادی</category>
                <author>محمد جواد نجادی</author>
                <pubDate>Tue, 30 Apr 2024 13:24:20 +0330</pubDate>
            </item>
                    <item>
                <title>اربابان حلقه ! انگشترهای قدرت همان pre-trained model ها در هوش مصنوعی هستند!</title>
                <link>https://virgool.io/@m.javadnejadi/%D8%A7%D8%B1%D8%A8%D8%A7%D8%A8%D8%A7%D9%86-%D8%AD%D9%84%D9%82%D9%87-%D8%A7%D9%86%DA%AF%D8%B4%D8%AA%D8%B1%D9%87%D8%A7%DB%8C-%D9%82%D8%AF%D8%B1%D8%AA-%D9%87%D9%85%D8%A7%D9%86-pre-trained-model-%D9%87%D8%A7-%D8%AF%D8%B1-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%87%D8%B3%D8%AA%D9%86%D8%AF-awetsukmihms</link>
                <description># پارت 3: می خواهیم مدل های پیش آموزش دیده و محیط های شبیه شازی که برای آموزش در رباتیک استفاده می شوند (Atari, OpenAI Gym2, MuJoCo, RoboCup, RoboCup Soccer, Humanoid-Gym) و همچنین با چالش های آنها بیشتر آشنا شویم.«تا زمانی که آنها پیدا نشدند متوقف نشوید. شما درد را نمی شناسید، ترس را نمی شناسید. گوشت انسان را خواهید چشید!»ساروماناین تصویر توسط Ideogram خلق شده است این مقاله در 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 و 2 راجع به pre-trained model مناسب برای text و Image آموختیم و مدل هایی را بررسی کردیم که امروزه هم مورد استفاده قرار می گیرند. معماری این مدل ها را دیدیم و اینکه چگونه می توان آنها را فراخوانی کرد و برای تسک خاص مورد نظرمان استفاده کنیم. در واقع دو ستون اصلی که برای رسیدن به AGI نیاز داریم یعنی قابلیت درک زبان و اینکه ماشین علاوه بر فهمیدن زبان بتواند از زبانی به زبان دیگر ترجمه کند و دیگری قابلیت دیدن در ماشین ها. تسک های بسیار زیادی برای این دو قابلیت وجود دارد. حال تصور کنید که توانستیم این دو را کامل انجام داده و به نقطه ی مورد نظر بهینه ای برای ماشین رسیده ایم. امروزه می بینیم که ماشین ها چه در زمینه امنیت و چه سلامتی و غیره چقدر می توانند مفید باشند. حال می خواهیم آن ها را در ماشین هایی به کار ببریم که به صورت فیزیکی در بین ما باشند. ربات ها.بعد از شنیدن این کلمه شاید اولین چیزهایی که به ذهن ما برسد بسیاری از فیلم های هالیوودی و داستان های بسیاری باشد که در آنها ربات ها چه خوب و چه بد وجود دارند. از داستان فرانکشتاین تا فیلم هایی مانند جنگ ستارگان. و اگر دقت کرده باشید تقریبا در تمام اینها مخصوصا در فیلم هایی که مربوط به فرازمینی هاست اولین فاکتور مهمی که نشان از برتری هوش آنها نسبت به ماست یا اینکه نشان داده شود فناوری های بسیار پیشرفته تری از ما دارند داشتن ربات های بسیار پیشرفته ای است که خیلی از کارهای آنها را انجام می دهند. اما به نظرم بهترین تصوری که می توان از ربات ها داشت و بحث های روز در مورد آینده آنها و آینده ما و اینکه ممکن است چگونه باشند فیلم ادیسه فضایی است. این فیلم تمام تصوراتی که در مورد قابلیت ها و خطر هایی که ربات ها یا هوش مصنوعی می تواند داشته باشد را به خوبی نشان می دهد کما اینکه می بینیم در آخر هوش انسانی به آن برتری پیدا می کند و توطئه &quot;هال&quot; خنثی می شود. با من همراه باشید که در آین قسمت به دنیای ربات ها برویم و ببینیم که ایده داشتن ربات ها از چه زمانی در ذهن بشر بوده و در طول زمان چطور تصورات از ربات ها در ذهن بشر کامل تر شده است و اینکه امروز که بسیاری از شرکت ها در حال انجام پروزه ها برای ساخت ربات ها هستند از چه مدل هایی برای ساختن آنها استفاده می کنند و اینکه کلا ربات چگونه قوانین فیزیکی که ما و موجودات زنده سیاره می توانیم داشته باشیم را دارد و یاد می گیرد. با من همراه باشید.ربات چیست ؟ربات ها توسط انسان ساخته شده اند و قابلیت تقلید کردن هوش انسانی را دارند. یعنی قابلیت صحیت کردن دیدن و تعامل فیزیکی با محیط و انجام کارهای که انسان یا موجودات زنده می توانند. ربات ها انواع مختلفی دارند از جمله ربات های صنعتی و خانگی و انسان نما و غیره . ربات های صنعتی که بیشتر برای کارهایی سنگین ماشینی اغلب برای کارخانجات است. معمولا برای بالا بردن دقت و سرعت در تولید مورد استفاده قرار می گیرد. در ربات های صنعتی شاید خیلی قابلیت صحبت کردن یا راه رفتن در آنها مطرح نباشد اما ربات های خانگی و انسان نما باید این قابلیت ها را داشته باشند. مهم ترین رابط کاربری رباتی که ما برای انجام کارهای خانه مانند تمیز کردن خانه و یا کلا سیستم های خانه های هوشمند داریم. از طریق صحبت کردن با آنهاست. در قسمت های بعد می خواهیم نحوه یادگیری ربات ها و مدل هایی که برای این کار وجود دارد را بررسی کنیم. با من در این کاووش بسیار جذاب و وسوسه کننده همراه باشید.تاریخچه ربات هابشر همیشه و در طول تاریخ به دنبال راحت تر کردن کارها و همچنین پیشبرد کارهایش در زمان های کوتاه تر بوده و همین طرز فکر باعث پیشرفت های بشر تا به امروز است. از زمان باستان و ساختن ساعت خورشیدی تا آسیاب های بادی و سد ها تا رسیدن به انقلاب صنعتی و ماشینی شدن بسیاری از کارها. با ظهور فناوری های جدید و مخصوصا در عصر ظهور کامپیوتر ها و سریع تر شدن انجام محاسبات ایده داشتن ربات های پیشرفته تر بیش از پیش مطرح شد. اولین مقاله ای که می توان گفت بعد از مطرح شدن هوش مصنوعی برای رباتیک مطرح شد مقاله &quot;Computing Machinery and Intelligence&quot; در سال 1950 توسط آلن تورینگ منتشر اشاره کرد. ایده اصلی &quot;تست تورینگ&quot; برای اولین بار در این مقاله مطرح شد. https://academic.oup.com/mind/article/LIX/236/433/986238 مهم ترین سوالی که تورینگ در این مقاله مطرح می کند و می خواهد به آن پاسخ دهد این است : &quot; آیا ماشین ها می توانند فکر کنند ؟ &quot; که هم از جنبه فلسفی و هم از جنبه فنی به آن می پردازد. برای اولین بار در آن ایده «بازی تقلید» را مطرح کرد که همان تست تورینگ معروف است. در آن دو نفر و یک ماشین در بازی هستند که یک شخص با پرسیدن سوال از ماشین و شخص مقابل سعی می کند بفهمد چه کسی ماشین است و چه کسی انسان. هدف این بازی تقلید، این است که ماشین بتواند به گونه‌ای هوشمندانه عمل کند که مشاهده‌گر را به اشتباه بیاندازد و او را مجاب کند که این ماشین را به عنوان یک انسان در نظر بگیرد. در زمینهٔ رباتیک نیز، ارزیابی عملکرد ربات‌ها در تعامل با انسان و تصمیم‌گیری‌های هوشمندانه، به ‌کمک مفهومی شبیه به بازی تقلید انجام می‌شود. مفهوم بازی تقلید به طور گسترده در حوزهٔ یادگیری تقویتی یا RL (Reinforcement Learning) نیز استفاده می‌شود. یادگیری تقویتی یک روش یادگیری ماشینی است که مدل‌ها را به گونه‌ای آموزش می‌دهد که از تجربیات خود بهبود یابند و تصمیمات هوشمندانه‌تری بگیرند. در یادگیری تقویتی، یک ماشین یا عامل با تعامل با محیط، تجربه‌هایی را به دست می‌آورد و از این تجربیات برای ارزیابی و بهبود عملکرد خود استفاده می‌کند.پس از مقاله تورینگ، زمینه رباتیک تحت تأثیر قرار گرفت و توسعه‌های بسیاری در این زمینه صورت گرفت. یکی از مهم ترین آنها مقاله &quot;The Stanford Cart and the CMU Rover&quot; اثرHans Moravec  که در سال 1983 منتشر شد. https://apps.dtic.mil/sti/citations/ADA133207 این مقاله به معرفی دو ربات معروف Stanford Cart و CMU Rover پرداخت و به بررسی توانایی‌های آن‌ها در حرکت و تعامل با محیط می‌پردازد. ربات Stanford Cart در دانشگاه Stanford توسعه یافته بود، یکی از نمونه‌های اولیه خودروهای خودکار بود.Stanford Cart with cable, 1961: sourceاین ربات در دهه 1960 میلادی توسط Hans Moravec طراحی شده و مجهز به سنسورها و دستگاه‌های محاسباتی بود و می توانست در محیط‌های مختلف حرکت کرده و با موانع تعامل کند و به عنوان یکی از نخستین موفقیت‌های در حوزه حرکت خودکار در محیط‌های بیرون از ساختمان، بود.ربات CMU Rover که در Carnegie Mellon University’s توسعه یافته بود، رباتی دیگر که برای حرکت در محیط‌های خارجی طراحی شده بود.Iris, a small, boxy robot designed by CMU students, has passed its critical design review by NASA and is on track to land on the moon in the fall of 2021. sourceاین ربات قادر به عبور از تراکم‌های مختلف و انجام وظایف به صورت خودکار است. CMU Rover توسط ناسا به عنوان ربات ماهنورد به کار گرفته شد.در طول سالیان مقالات بسیار زیادی برای رباتیک منتشر شده است که بررسی همه آنها در این مقاله میسر نیست بنابرای در قسمت های بعد می خواهیم ببینیم که ربات ها چگونه آموزش می بینند؟ چه مدل های Pre-train ای برای آنها وجود دارد ؟ ربات ها به صورت فیزیکی با محیط تعامل دارند در چه محیط هایی می توان آنها را آموزش داد؟ با من در این سفر بسیار هیجان انگیز همراه باشید.انواع مهم ترین Pretraining dataبعضی از پرکاربردترین  Pretraining data ها که برای Reinforcement Learning مورد استفاده قرار می گیرند را بررسی می کنیم. انواع مهم ترین Pretraining data هایی که می توانیم استفاده کنیم شامل:داده های شبیه سازی شدهاین نوع داده ها از طریق شبیه سازی کامپیوتری تولید می شوند.  D4RLو Meta-World یا Roboschoolرا می توان نام برد. داده‌های شبیه‌سازی شده به راحتی تولید و مدیریت می‌شوند و کم هزینه و به راحتی در دسترس هستند. ایمنی بالایی دارند چرا که استفاده از داده‌های شبیه‌سازی به معنای عدم وجود خطرات و تهدیدات فیزیکی برای ربات یا محیط است. با استفاده از این داده ها می‌توان شرایط و ویژگی‌های مختلف محیط را با دقت کنترل و آزمایش‌های متعددی را انجام داد.البته می تواند باعث عدم تطبیق با محیط واقعی شود چون داده‌های شبیه‌سازی نمایانگر شرایط و ویژگی‌های محیط واقعی نیستند و ممکن است مدل ربات در محیط واقعی با شرایط متفاوت روبرو شود. شبیه‌سازی محیط‌ها همیشه نمی‌تواند به طور کامل واقعیت را بازتاب دهد و ممکن است با مشکلاتی مانند تفاوت در فرکانس برخورد با اشیاء، نقص‌های دقت حرکت و ... مواجه شود و گاهی باعث بروز مشکل در انتقال یادگیری می شود چرا که گاهی آموزش با داده‌های شبیه‌سازی، قابلیت انتقال یادگیری به محیط واقعی را ندارند و نیاز به تطبیق و تجربه در محیط واقعی دارند. محیط‌هایی مانند OpenAI Gym، MuJoCo، RoboCup Soccer Simulationو ... هستند. این محیط‌ها به عنوان یک منبع مهم برای تولید داده‌های شبیه‌سازی استفاده می‌شوند.داده های واقعیداده هایی هستند که از عملکرد ربات ها در دنیای واقعی و یا از تجارب انسانی که با ربات‌ها در محیط واقعی انجام شده مثل Atari Datasetکه از داده‌های تجربی انسانی در بازی‌های Atari جمع آوری شده است. داده‌های واقعی نمایانگر شرایط و ویژگی‌های واقعی محیط هستند. مدل‌های آموزش دیده بر روی داده‌های واقعی، قابلیت انتقال یادگیری به محیط واقعی را دارند در نتیجه نیاز به تطبیق و تجربه در محیط واقعی کمتر شود. البته جمع‌آوری داده‌های واقعی ممکن است هزینه زیادی داشته باشد و نیاز به زمان و تلاش بیشتری داشته باشد. در دنیای واقعی شرایط بسیار پیچیده و غیر قابل کنترل است به همین خاطر ممکن است مدل‌ها با مشکلاتی مانند نویز و تغییرات غیرمنتظره مواجه شوند. این نوع داده برای آموزش مدل‌های یادگیری تقویتی استفاده می شود.جمع آوری داده‌های واقعی درمقایسه با داده‌های شبیه‌سازی اغلب پیچیده تر است، در حالی که داده‌های شبیه‌سازی با دقت و کنترل بیشتری تولید می شوند. البته امروزه بسته به شرایط خاص و نیازهای هر پروژه هر دو نوع داده برای Pre-trainingمدل‌های رباتیک استفاده می‌شوند. مثلا اگر پروژه آموزش ربات برای رانندگی خودرو در شهرهای واقعی داریم، می‌توانیم از داده‌های واقعی که از دوربین‌ها و سنسورهای ربات جمع‌آوری شده‌اند برای Pre-training مدل استفاده کنیم. این داده‌ها نشان می‌دهند که چگونه ربات باید به ترافیک، پیاده‌روها، چراغ‌های راهنما و ... واکنش نشان دهد. مثلا شرکت های سازنده خودرو های خودران برای نشان دادن قدرت و مزیت آنها اعلام میکنن که خودروشانn  مایل رانندگی در شرایط واقعی جاده را دارند.داده های ترکیبیاین نوع داده ها از تنوع داده‌های واقعی و شبیه‌سازی برخوردار هستند، می‌توان میزان کنترل بر شرایط محیطی را افزایش داد. همچنین می‌توانند انتقال یادگیری به محیط‌های واقعی را بهبود بخشند. تا حدودی ضعف های دو نوع داده دیگر را بهبود می دهد. البته مدیریت و تجزیه و تحلیل داده‌های ترکیبی پیچیده‌تر است و جمع آوری آن هزینه بالاتری را هم به دنبال دارد. به طور مثال  Gym Retro از داده‌های تجربیات انسانی در بازی‌های کلاسیک Atari برای آموزش مدل‌های یادگیری تقویتی استفاده می‌کند. شرکت‌های فناوری معروف مانند Boston Dynamics و Tesla ممکن است از این روش‌ها برای آموزش مدل‌های خود استفاده کنند تا عملکرد و کارایی ربات‌ها و دستگاه‌های خود را بهبود بخشند. به‌عنوان مثال، تسلا ممکن است از داده‌های ترکیبی برای آموزش خودروهای خودران استفاده کند تا بهبود عملکرد خودروهای خود را در شرایط واقعی افزایش دهد و ایمنی رانندگی را ارتقاء دهد.محیط شبیه سازی شدهیکی از راه های مهم برای یادگیری حتی برای انسان استفاده از محیط های شبیه سازی شده است. مثلا برای آموزش دادن به خلبان ها چه برای خلبان های مسافری و چه برای خلبان های جنگی از این محیط ها استفاده می شود. یعنی کانسپتی کاملا مشابه اتاق خلبان عین محیط و شرایط حین پرواز واقعی را می بینند و شروع به پرواز می کنند در حالی که در یک اتاقک هستند. در واقع با این کار خلبان می تواند خیلی خوب شرایط پرواز را یاد بگیرد. در صورتی که پرواز واقعی نیست! یا برای فضانوردان قبل از رفتن به فضا محیط هایی را آماده می کنند با شرایطی کاملا مشابه فضا و خلا تا یاد بگیرند که در شرایط خلا چگونه باید رفتار کنند. برای آموزش ربات ها هم به همین صورت است یکی از راه هایی که به ربات ها آموزش های لازم برای یادگیری تسک هایشان می دهند استفاده از محیط های شبیه سازی شده است که به وسیله کتابخانه هایی که مثلا برای پایتون نوشته شده شده است از این محیط ها استفاده می کنند. که می تواند بسیار عالی و بسیار سریع باعث یادگیری هر چه بهتر و مفید تر در ربات ها شود چرا که با توجه به تسک ما و تنوع در این محیط ها مثلا قوانین فیزیک کاملا رعایت و اجرا شده است در ادامه می خواهیم تعدادی از این کتابخانه ها را بررسی کنیم و ببینیم که چطور کار می کنند با من همراه باشید.روش‌های pre-training در Roboticروش‌های pre-training در رباتیک مجموعه‌ای از تکنیک‌ها و الگوریتم‌هایی هستند که برای آموزش و بهبود عملکرد مدل‌های رباتیک استفاده می شود که از قدیم تا الان به روش های مختلفی استفاده می‌شوند. این روش‌ها معمولاً در محیط‌های شبیه‌ سازی اجرا می‌شوند تا از پیچیدگی‌ها و هزینه‌های زمانی و مالی کمتری نسبت به آموزش در محیط‌های واقعی بهره‌برداری شود. برای تسک های پیچیده تر ربات ها از DNN استفاده می شود. بنابراین در آموزش آنها از CNN ها وRNN  مخصوصا Transformers ها استفاده می شود.مثلا مدل‌های برای تشخیص اشیا یا بینایی در ربات‌ها وجود دارد. ربات &quot;Spot&quot; که توسط شرکت &quot;Boston Dynamics&quot; تولید شده برای تشخیص و جلوگیری ازبرخورد با اشیا و موانع در مسیر خود از DNNاستفاده می‌کند. مدل‌های برپایه RNN برای تشخیص و تولید گفتار در ربات‌های تبادل اطلاعات با انسان  مانند ربات &quot;Kismet&quot; که توسط مرکز مطالعات رباتیک MIT ساخته شده است، از RNN ها برای تشخیص احساسات انسانی مبتنی بر صدا و تولید پاسخ‌های مناسب با استفاده از گفتار استفاده می‌کند. مدل‌های برپایه RL برای آموزش ربات‌ها به عنوان عامل‌های هوشمند در محیط‌های پویا مانند ربات &quot;DeepMind&#x27;s AlphaGo&quot; از مدل‌های برپایه RL برای بهبود استراتژی بازی در بازی‌های انتخابی مثل بازی Go استفاده می‌کند.  همچنین مدل‌های برپایه یادگیری نظارتیبرای آموزش ربات‌ها برای انجام وظایف خاص در محیط‌های گوناگون مناسب است. شرکت &quot;iRobot&quot; برای آموزش ربات‌های خانگی خود مانند Roomba برای انجام وظایف خاص مانند تمیزکاری محیط‌های داخلی استفاده می‌کند. این مدل‌ها با استفاده از داده‌های واقعی آموزش داده شده‌اند تا بهترین عملکرد را در شرایط محیطی مختلف ارائه دهند.برخی از روش‌های pre-training در رباتیک عبارتند از:یادگیری تقویتی پیش‌آموزشی (Pretraining Reinforcement Learning)در این روش، مدل ربات با استفاده از یک مجموعه داده از پیش تعیین شده (معمولاً از تجربیات یا داده‌های مصنوعی) پیش‌آموزش می‌بیند تا بتواند به یک حالت اولیه مطلوب و پایدار برسد و در یک محیط شبیه سازی شده تسک های مورد نظر را یاد بگیرند و انجام دهند تا در محیط واقعی بهتر عمل کند.منظور از Pre-training data داده‌هایی است که قبلاز شروع فرآیند یادگیری تقویتی جمع‌آوری می‌شوند و برای آموزش مدل استفاده می‌شوند. این داده‌ها ممکن است از تجربیات گذشته، مثلا داده‌های یک ربات که قبلاً در محیط شبیه‌سازی حرکت کرده و تجربیات حاصل از این حرکت‌ها ذخیره شده باشد. داده های شبیه‌سازی‌های محیطی (شبیه‌سازی‌های فیزیکی یا سه‌بعدی) این داده‌ها معمولاً به عنوان جایگزینی برای محیط واقعی استفاده می‌شوند تا مدل بتواند به صورت ایمن و بدون نیاز به آزمایش مستقیم در محیط واقعی آموزش داده شود. یا حتی تجربیات انسانی (از طریق راهنمایی انسانی) مثلا فرض کنید ربات برای کمک به افراد سالمند در یک مرکز در حال آموزش باشد به این صورت می تواند نحوه رفتار و تعامل با افراد سالمند را از تجربیات مراقبان انسانی یاد بگیرد.اما آیا این روش برای آموزش همه انواع ربات ها مناسب است یا خیر؟ باید گفت که، بستگی به تسک خاصی دارد که مدل را برای آن‌ آموزش می دهیم. موفقیت در آموزش به وسیله RL بستگی به Pre-training data معتبر و مرتبط با وظیفه‌ی نهایی دارد. مثلا برای ربات های صنعتی که نیاز به مسیریابی و حرکت در محیط‌های پیچیده را دارد، یا ربات های خانگی که نیاز به یادگیری تعامل با اجسام مختلف در محیط خانه دارد، یا برای ماشین‌های خودران که نیاز به یادگیری حرکت در جاده‌ها و محیط‌های شهری دارند، می‌توان از این روش استفاده کرد. سپس، برای بهبود عملکرد ربات در دنیای واقعی از Pre-trained model به عنوان ورودی برای RL استفاده کنیم. در قسمت بعدی مهم ترین محیط های شبیه سازی رو با کد بررسی می کنیم با من همراه باشید.مهم ترین محیط های شبیه سازی برای یادگیری RLدر قسمت قبل دیدیم که با Pre-training data چطور می توانیم یادگیری روش RL را داشته باشیم. حال می خواهیم محیط های شبیه سازی مهمی که برای این کار وجود دارد رو بررسی کنیم. مدل های زیادی برای این کار وجود دارد که مهم ترین آنها عبارتند از:اتاری DQN: Atariاولین بار در مقاله ای در سال 2013 توسط شرکت DeepMind ارئه شد. https://arxiv.org/abs/1312.5602 سیستم DQN بر پایه پاداش و جزا بنا شده است. ربات در ازای انجام اقدامات مطلوب پاداش دریافت می کند و برای اقدامات نامطلوب جریمه می شود. شامل تجربیات بازی‌های Atari توسط عامل‌های یادگیری تقویتی جمع‌آوری شده‌اند که برای آموزش مدل‌های RL مورد استفاده قرار می‌گیرد. به طوری که هر تجربه شامل وضعیت (state) فعلی بازی، عمل (action)ی که عامل انجام داده است، پاداش (reward) کسب شده و وضعیت بعدی بازی است. این مجموعه داده ابتدا توسط پژوهشگران برای آموزش مدل‌های RL مانند DQNاستفاده شد. DQN مخفف Deep Q-Network است. این الگوریتم از یک شبکه عصبی عمیق برای تخمین تابع ارزش Q استفاده می کند. تابع ارزش Q تابعی است که ارزش هر اقدام در یک محیط معین را تخمین می زند. ربات وضعیت فعلی محیط را می بیند و یک اقدام را بر اساس تخمین تابع ارزش Q انتخاب می کند. سپس یک پاداش از محیط دریافت و سپس با الگوریتم یادگیری تقویتی عمیق تابع ارزش Q را بر اساس پاداش دریافتی به روزرسانی می کند. این الگوریتم از جمله  در رباتیک، بازی و هوش مصنوعی عمومی استفاده شده است.DQN: Atari sourceاستفاده اصلی از این مجموعه داده در آموزش و ارزیابی الگوریتم‌های Reinforcement Learning برای حل مسائل بصری به‌طور خاص برای بازی‌های ویدئویی Atari. با این حال، این مجموعه داده نه تنها برای آموزش مدل‌های بازی‌ها مناسب است، بلکه می‌توان آن را برای آموزش مدل‌هایی مانند رباتیک، که باید تصمیم بگیرند که با یک محیط پویا و پیچیده چگونه تعامل کنند، استفاده کرد.محیط 2OpenAI Gymاین ابزار ابتدا در مقاله &quot;OpenAI Gym&quot; توسط Greg Brockman و دیگران از تیم OpenAI معرفی شد. این مقاله در اکتبر سال 2016 در کنفرانس بین‌المللی NIPS (Conference on Neural Information Processing Systems) ارائه شد. https://arxiv.org/abs/1606.01540  محیط شبیه سازی  OpenAI Gym یک کتابخانه برنامه‌نویسی Open source برای توسعه و آزمایش الگوریتم‌های RL است که امکان ایجاد و استفاده از محیط‌های آزمایشی متنوعی را برای توسعه‌دهندگان فراهم می‌کند. این ابزار از آن زمان به عنوان یکی از ابزارهای اصلی برای آموزش و توسعه الگوریتم‌های یادگیری تقویتی استفاده می‌شود.برای فراخوانی OpenAI Gym در کد پایتون، فقط کافی است از کتابخانه Gym استفاده کنیم و محیط مورد نظر خودمان را فراخوانی کنیم. در ابتدا، باید کتابخانه Gym را نصب کنیم. به دستور زیر دقت کنید:!pip install gymحالا می‌توانیم محیط مورد نظر خود را با استفاده از تابع &#x60;make&#x60; فراخوانی کنیم. در کد زیر ما  می‌خواهیم محیط CartPole یکی از محیط های معروف در OpenAI Gym است که برای تست و آموزش الگوریتم‌های RL مورد استفاده قرار می‌گیرد. به کد زیر دقت کنید:import gym# Choose the environment nameenv_name = &#039;CartPole-v1&#039;# Create the environmentenv = gym.make(env_name)# Start the environmentobservation = env.reset()در محیط CartPole، یک عامل (agent) باید یک ستون به نام &quot;cart&quot; را با استفاده از یک &quot;pole&quot; بر روی آن به تعادل برساند. این ستون می‌تواند به چپ و راست حرکت کند و باید با استفاده از اقدامات مناسب، تعادل ستون را حفظ کند تا سیستم از وضعیت خود (که به سادگی به دلیل جاذبه واقعیت این محیط وزن‌گذاری می‌شود) جابجا نشود. در زمینه رباتیک، محیط CartPole می‌تواند به خصوص برای ربات‌هایی که باید تعادل خود را حفظ کنند بسیار مفید باشد. فرض کنید یک ربات انسان‌نما داریم که قرار است بتواند در مسیری سطح صاف و بدون مانع راه برود و سپس باید بتواند مثلا بچرخد و جسم خود را جابجا کند در عین حال تعادل خود را حفظ کند تا از افتادن خود جلوگیری کند.OpenAI Gym. sourceمحیط‌های موجود در OpenAI Gym شامل مجموعه‌ای از مسائل و وظایف مختلف هستند مثلا محیط‌ های بازی که شامل بازی‌های کلاسیک مانند Space Invaders، Breakout، Pac-Man و ... است. این محیط‌ها برای آزمون و ارزیابی الگوریتم‌های RL در زمینه بازی‌های ویدئویی بسیار مفیدند. محیط‌های کنترل محیطی شامل مسائل کنترل رباتیک و مسائل کنترل موتورها می‌باشد که به ارزیابی عملکرد الگوریتم‌های یادگیری تقویتی در مسائل کنترل پیچیدهکمک می‌کنند. همچنین محیط‌ های تصمیم ‌گیری گرافیکی مانند CartPole و Mountain Car که برای آزمون الگوریتم‌ های RL در مسائل ساده و انعطاف‌پذیر مورد استفاده قرار می‌گیرند. این کتابخانه همچنین ابزارهایی برای ثبت و ارزیابی عملکرد الگوریتم‌ها ارائه می‌دهد تا کاربران بتوانند نتایج خود را بهبود بخشند و تحلیل کنند.محیط شبیه سازی MuJoCoدر سال 2004 توسط شرکت OpenAI توسعه داده شده است. این موتور برای استفاده در زمینه‌های مختلفی مانند رباتیک، کنترل حرکت، آموزش مدل‌های  RLو تحقیقات علمی استفاده می‌شود. یک موتور شبیه‌ ساز فیزیکی open source که برای شبیه‌ سازی محیط‌ های فیزیکی و ایجاد محیط‌ های شبیه‌سازی برای آموزش مدل‌های RLاستفاده می‌شود. محیط ‌هایی شامل انواع مختلفی از مسائل مانند کنترل رباتیک، حرکت ماشین، مسائل پرنده‌های بدون سرنشین و غیره می‌شوند. از MuJoCo برای ایجاد محیط‌های شبیه ‌سازی با فیزیک دقیق و پویا استفاده می‌شود که به الگوریتم‌های  RLامکان می‌دهد تا در یک محیط مطمئن و قابل کنترلآموزش ببینند و الگوریتم‌های خود را بهبود بخشند.برای استفاده از MuJoCo، باید کتابخانه‌ای به نام mujoco-py برای استفاده در محیط‌های موجود در OpenAI Gym  را نصب کنیم. این کتابخانه امکان فراخوانی موتور شبیه‌ساز MuJoCo را در پایتون فراهم می‌کند و اجازه می‌دهد تا محیط‌های شبیه‌سازی را ایجاد و کنترل کنید.!pip install mujoco-pyبرای استفاده از MuJoCo دو راه وجود داره هم می تونیم اون رو مستقیم صدا بزنیم و از کتابخانه های اون استفاده کنیم و هم می تونیم با استفاده از C API این کار رو انجام بدیم که البته برای C API باید مقداری تسلط به C++ داشته باشیم. برای استفاده از C API و خوندن اسناد اون میتونی به لینک گیت هاب زیر مراجعه کنید.لینک گیت هاب C API (https://github.com/google-deepmind/mujoco/blob/main/README.md)یک مثال از کاربرد MuJoCo می‌تواند در زمینه کنترل رباتیک باشد. به عنوان مثال، می‌توان از MuJoCo برای ایجاد یک محیط شبیه‌سازی از یک ربات به منظور آموزش الگوریتم‌های یادگیری تقویتی برای کنترل حرکت‌های ربات استفاده کرد. این الگوریتم‌ها به صورت تجربی، با تعامل با محیط شبیه‌سازی، بهبود یافته و آموزش داده می‌شوند تا بتوانند به صورت موثر و قابل اعتماد در محیط‌های واقعی عمل کنند.محیط RoboCup Soccer Simulation 2D/3D شبیه ساز فوتبال RoboCup اولین بار در سال 1997 در مقاله ای تحت عنوان https://www.researchgate.net/publication/220356386_Soccer_Server_A_Tool_for_Research_on_Multiagent_Systems معرفی شد. هدف از این شبیه سازی ساختن یک محیط شبیه سازی قابل کنترل و قابل تکرار برای آزمایش الگوریتم های جدید هوش مصنوعی برای فوتبال رباتیک بود. فوتبال RoboCup یکی از مسابقات برجسته در حوزه رباتیک و هوش مصنوعی است. این مسابقات از سال 1997 هر ساله در مکان‌های مختلفی از جهان برگزار می‌شوند. هدف اصلی این مسابقات، توسعه و پیشرفت تکنولوژی‌های مرتبط با هوش مصنوعی، رباتیک، و یادگیری ماشینی است. RoboCup Soccer Simulation یک زمین فوتبال را شبیه سازی می کند که شامل ربات ها توپ و موانع است و قوانین فیفا را با اندکی تغییر که برای ساده سازی سبیه سازی دارد. ربات ها در آن از الگوریتم های هوش مصنوعی برای کنترل حرکات خود تصمیم گیری ها و تعامل با سایر ربات ها استفاده می کنند. به دو صورت 2D و 3D برگزار می‌شود. در مسابقات 2D، ربات‌ها در یک صفحه دوبعدی بازی می‌کنند و از بالایی نمایش داده می‌شوند.2D game visualization. sourceاما در مسابقات 3D، میدان بازی سه‌بعدی است و ربات‌ها به شکل واقعی‌تری بازی می‌کنند. محیط شبیه‌سازی RoboCup برای آموزش و تست الگوریتم‌های جدید و ایده‌هایی که برای رباتیک و هوش مصنوعی ارائه می‌شوند، بسیار مفید است.3D game visualization. sourceبرای استفاده از محیط RoboCup Soccer Simulation 2D/3D در پایتون، می‌توانیم از کتابخانه‌های مختلفی که این محیط را پشتیبانی می‌کنند، استفاده کنید. برخی از این کتابخانه‌ها شامل PySimulator و rcssserver3d می‌باشند. این کتابخانه‌ها محیط مسابقه را فراخوانی کنیم.from rcssserver3d import Server# Create a server instanceserver = Server()# Start the serverserver.start()# Interact with the robotic environment (code for interaction goes here)# Stop the serverserver.stop()این کد یک سرور RoboCup 3D را فراخوانی کرده و به شما اجازه می‌دهد تا با محیط رباتیک تعامل کنید. لازم به ذکر است که برای استفاده از این کتابخانه‌ها، ابتدا باید آن‌ها را نصب کنید و مطابق با مستندات مربوطه آن‌ها را تنظیم کنید.نصب و راه‌اندازی کتابخانه rcssserver3d بسیار پیچیده و وابسته به سیستم است. این کتابخانه به طور معمول بر روی سیستم‌های لینوکسی استفاده می‌شود و نیاز به تنظیمات و پیکربندی‌های اضافی دارد. مراحل نصب و راه‌اندازی بسیار پیچیده است و به عوامل مختلفی مانند سیستم عامل، نسخه‌های مختلف، وابستگی‌های نرم‌افزاری و ... بستگی دارد. راهنمای رسمی و مستندات کتابخانه rcssserver3d برای نصب و راه‌اندازی استفاده کنید. بعد از نصب ، می‌توانید از کدی مشابه کدی که در بالا می بینید، برای فراخوانی و استفاده از محیط RoboCup 3D استفاده کنید.در قسمت بعد به بررسی نحوه دیگری از یادگیری در ربات ها می پردازیم.یادگیری تقلیدی Imitation Learning (IL)در واقع از متد یادگیری نظارت شده برای این کار استفاده می شود و در آن عامل فقط اقدامات رو به ماشین نشون میده و ماشین هم فقط همون رفتارها رو عینا تکرار می کنه. بستگی به تسکی که داریم می تواند مفید یا مضر باشد. مثلا ربات پزشکی را در نظر بگیرید طبیعتا این ربات هر چه بتواند بهتر رفتار های متخصص را تکرار کند کارآمد تر است. اما بعضی از ربات ها به دلیل اینکه تعامل بیشتری با محیط دارند و از طرفی محیطی که در آن قرار می گیرد ممکن است در لحظه تغییر کند بنابرای اگر فقط رفتارهای خاصی که از عامل یاد گرفته را در آن محیط انجام دهد ممکن است خیلی کارامد نباشد.برای IL دو رویکرد اصلی می توانیم داشته باشیم:شبیه سازی رفتاری : (Behavioral Cloning)در واقع از متد یادگیری نظارت شده برای این کار استفاده می شود و در آن عامل فقط اقدامات رو به ماشین نشون میده و ماشین هم فقط همون رفتارها رو عینا تکرار می کنه. بستگی به تسکی که داریم می تواند مفید یا مضر باشد. مثلا ربات پزشکی را در نظر بگیرید طبیعتا این ربات هر چه بتواند بهتر رفتار های متخصص را تکرار کند کارآمد تر است. اما بعضی از ربات ها به دلیل اینکه تعامل بیشتری با محیط دارند و از طرفی محیطی که در آن قرار می گیرد ممکن است در لحظه تغییر کند بنابرای اگر فقط رفتارهای خاصی که از عامل یاد گرفته را در آن محیط انجام دهد ممکن است خیلی کارامد نباشد.یادگیری تقویتی معکوس (Inverse Reinforcement Learning (IRL))این روش به ربات‌ها اجازه می‌دهد تا از رفتارهای انسانی یا منابع دیگر را تقلید کنند. اما بر عکس روش Behavioral Cloning است که در آن مدل ماشینی از رفتار یک منبع خارجی کپی می‌کند. IRL سعی می‌کند دلایل پشت این رفتارها را فهمیده و آن‌ها را به عنوان یک عملکرد یا تابع پاداش در یک مسئله یادگیری تقلیدی بگنجاند. در IRL، ربات با تحلیل رفتارهای انسانی یا از منابع دیگر، سعی می‌کند مسئله اصلی که متخصصان یا افراد دیگر در آن عمل می‌کنند را فهمیده و از آن برای تصمیم‌گیری خود استفاده کند. این به ربات اجازه می‌دهد تا در شرایط جدید یا مسئله‌هایی که قبلاً با آن‌ها مواجه نشده است، عملکرد خود را بهبود بخشد و رفتارهای مشابه با رفتارهای متخصصان را اجرا کند. این روش معمولاً پیچیده‌تر و از نظر محاسباتی فشرده‌تر است. یکی از کاربردهای اصلی این روش در رباتیک، رانندگی خودروهای خودران است که در آن ربات با تحلیل رفتار رانندگان حرفه‌ای و استفاده از روش IRL، می‌تواند رفتارهای مطلوب و ایمن را در مسیرهای مختلف راه‌اندازی کند و به عنوان یک راننده خودروی خودران عمل کند.کاربردهای زیادی برای روش Imitation Learning می توان نام برد. مثلا از آن در رباتیک آموزش کارهایی که برای انسان آسان است مثل آشپزی کردن یا تا کردن لباس می توان بهره برد یا در بازی های ویدئویی اغلب از روش IL برای آموزش عامل های هوش مصنوعی استفاده می شود. به طوری که آنها نحوه بازی کردن را از بازیکنان ماهر یاد میگیرند. همچنین در رباتیک جراحی هم ربات با یادگیری از جراحان متخصص برای انجام جراحی های ظریف می تواند به خوبی عمل کند.روش های پیاده سازیبرای روش IL، مدل‌های از پیش آموزش دیده وجود دارند. این مدل‌ها معمولاً با استفاده از روش‌هایی مانند CNN در Deep Learning آموزش داده می‌شوند. معمولا برای پیاده‌سازی IL، از محیط‌های شبیه‌سازی نیز استفاده می‌شود. برای استفاده از محیط‌های شبیه‌سازی می‌توانید از کتابخانه‌های مختلفی استفاده کنید. به عنوان مثال، اگر می‌خواهید با OpenAI Gym کار کنید، کتابخانه gym را می‌توانید نصب کنید و از محیط‌های آموزشی آن استفاده کنید. این محیط‌های شبیه‌سازی می‌توانند شبیه‌ساز‌های فیزیکی مانند OpenAI Gym، Mujoco، Unity ML-Agents و یا محیط‌های شبیه‌سازی موجود در ROS (Robot Operating System) باشند.مهم‌ترین مدل‌های از پیش آموزش‌دیده برای روش ILمدل‌های مبتنی بر DQN که در بالا به صورت کامل توضیح داده شد و برای آموزش ربات‌ها در وظایف مختلفی مانند کنترل بازو، ناوبریو بازی استفاده شده می شود. مثالهایی که می توان برای آن اشاره کرد مثل Humanoid-Gym توسط RobotEra، یک شرکت رباتیک مستقر در هنگ‌کنگ، معرفی شده است. این کتابخانه مجموعه‌ای از محیط‌های شبیه‌سازی برای آموزش ربات‌های انسان‌نما را ارائه می‌دهد. و ویژگی هایی مثل پویایی بدن، تعادل، و حرکات انعطاف‌پذیر انسان‌نماها را دارد. بیشتر برای آموزش الگوریتم‌های Imitation Learning و Reinforcement Learningاستفاده می‌شود.در IL عموماً برای انجام حرکات صحیح، از مدل‌هایی که از داده‌های توصیفی یا داده‌های توصیفی و عملیاتییاد گرفته‌اند، استفاده می‌شود. داده‌های توصیفی فقط ویژگی‌های ورودی مورد نیاز برای مدل را شامل می‌شوند، بدون اینکه خروجی متناظر (عمل) را ارائه دهند. به عبارت دیگر، این داده‌ها اطلاعاتی را ارائه می‌دهند که توصیفی از وضعیت فعلی یا محیط است، اما عمل متناظر با آن وضعیت ارائه نمی‌شود. مثل تصاویر، ویدئوها، سنسورها، یا ویژگی‌های دیگری که وضعیت فعلی محیط را توصیف می‌کنند.اما داده‌های توصیفی و عملیاتی به مجموعه‌ای از داده‌ها هستند که هم ویژگی‌های ورودی (توصیفی) و هم خروجی (عمل) متناظر با وضعیت فعلی محیط را شامل می‌شوند. در واقع جفت ورودی-خروجی‌هایی هستند که شامل تصاویر و حرکات متناظر با آن تصاویر (مثلا توصیف یک وضعیت از بازی ویدئویی و حرکتی که بازیکن در آن وضعیت انجام می‌دهد)، یا داده‌هایی که ویژگی‌های حسی و عملیاتی انسان در یک وظیفه را شامل می‌شوند (مثلا، توصیف وضعیت محیط و حرکت انسان در رانندگی یا دویدن).در واقع هدف اصلی در ILاین است که بتوانیم از داده‌های موجود (معمولاً یک مجموعه از تصاویر یا ویدئوها) یا از تعامل با محیط، یک مدل یادگیری ماشینی به نام &quot;کارگر&quot; ایجاد کنیم که توانایی تقلید حرکات را دارد. این حرکات می‌توانند عملیات مختلفی باشند، از جمله حرکات یک ربات، حرکات موشن کاربر در یک بازی ویدئویی، یا حتی حرکات انسان‌نما در یک محیط واقعی یا مجازی. هرچند که Humanoid-Gym ابزار قدرتمندی برای یادگیری تقلیدی است، و می تواند برای یادگیری تقویتی و سایر روش های یادگیری ماشینی هم استفاده شود. Humanoid-Gym یک ابزار فعالانه توسعه یافته است و به طور مداوم در حال بهبود است.محیط شبیه سازی Humanoid-Gym برای آموزش ربات‌های مختلف از جمله ربات‌های XBot-S و XBot-L خودِ شرکت RobotEraاستفاده شده است. شرکت هایی مثل Agility Robotics از Humanoid-Gymبرای آموزش ربات Digit خود استفاده کرده است. ANYbotics برای آموزش ربات ANYmal و OpenAI برای آموزش ربات Dactylخود استفاده کرده است. Humanoid-Gym یک ابزار قدرتمند برای آموزش ربات‌های انسان‌نما است. این کتابخانه به محققان و مهندسان اجازه می‌دهد تا الگوریتم‌های جدید کنترل ربات را بدون نیاز به سخت‌افزار واقعی ربات آزمایش و توسعه دهند.مزایای استفاده از Humanoid-Gym یک محیط شبیه‌سازی شده است، بنابراین خطر آسیب رساندن به ربات یا انسان در حین آموزش وجود ندارد. به شما امکان می‌دهد تا الگوریتم‌های خود را سریع‌تر و کارآمدتر از روی ربات واقعی آموزش دهید و محیط شبیه‌سازی را برای مطابقت با ربات و وظیفه‌ی خاص خود تنظیم کنید. البته همیشه بین محیط شبیه‌سازی شده و دنیای واقعی شکافی وجود دارد. این شکاف می‌تواند بر عملکرد الگوریتم شما در ربات واقعی تأثیر بگذارد. همچنین Humanoid-Gymیک ابزار پیچیده است و ممکن است برای استفاده از آن به دانش تخصصی نیاز داشته باشید.مدل‌های مبتنی بر Actor-Critic: A2Cاین مدل از دو شبکه عصبی عمیق، Actor-Critic تشکیل شده اند. Actor که شبکه‌ عصبی‌ای است که مسئول تولید حرکات و اعمال عامل در محیط است و تصمیم‌ گیری‌های عملی را بر اساس خروجی‌های تابع Advantage Function انجام می‌دهد. به طور کلی، Actorبه دنبال انتخاب حرکتی است که مزیت بیشتری نسبت به حرکت‌های دیگر دارد. همچنین Criticشبکه‌ی عصبی دیگری است که مسئول تخمین Value Function وضعیت‌های مختلف در محیط است. Critic ارزش وضعیت‌ها را تخمین می‌زند تا Actor بتواند بهترین حرکت را انتخاب کند. در واقع با ترکیب این دو شبکه، Actor-Critic بهبود در عملکرد عامل را ایجاد می‌کند.این الگوریتم با استفاده از Loss Function، که شامل مجموع خطاهای تابع ارزش و مزیت است، و بهبود در عملکرد عامل شبکه‌های عصبی را به‌روزرسانی می‌کند. این الگوریتم به دلیل ترکیب از Actor و Critic و همچنین استفاده از تجربه جریانی (online) می‌تواند به صورت مؤثر و سریع عملکرد عامل را بهبود بخشد. A2C برای آموزش ربات‌ها در وظایف مختلفی مانند کنترل بازو، ناوبری و بازی استفاده شده است. مدل TRPO (Trust Region Policy Optimization)الگوریتم TRPO (Trust Region Policy Optimization) اولین بار توسط John Schulman و همکارانش در سال 2015 ارائه شد و مقاله مربوط به آن با عنوان &quot;Trust Region Policy Optimization&quot; در کنفرانس بین‌المللی Machine Learning (ICML) ارائه شد. https://arxiv.org/abs/1502.05477 یک روش پیشرفته در زمینه یادگیری تقویتیاست که برای آموزش سیاست (Policy) در محیط‌های پیچیده استفاده می‌شود. این الگوریتم با محدود کردن میزان تغییرات در سیاست آموزش، به مشکل تغییرات بزرگ و ناپایداری در آموزش راه‌حل ارائه می‌دهد.  یکی از مهمترین ویژگی‌های TRPO استفاده از یک منطقه اعتماد (Trust Region) است که در آن تغییرات سیاست قابل قبول تلقی می‌شود. با اعمال این محدودیت، TRPOتضمین می‌کند که هر تغییر در سیاست آموزش که انجام می‌شود، به گونه‌ای باشد که موجب بالا رفتن عملکرد عامل شود، اما به حدی نباشد که عملکرد را بطور قابل توجهی تحت تأثیر قرار دهد.ویژگی دیگر (Stable Progress) TRPO  که سعی در ایجاد پیشرفت پایدار در آموزش دارد، به این معنی که هرگز سیاست جاری را به طور کامل جایگزین سیاست جدید نمی‌کند. به جای اینکه مستقیماً بهینه‌سازی شود، TRPOاز محدودیت‌های منطقه اعتماد استفاده می‌کند تا تغییرات در سیاست را کنترل کرده و از تغییرات ناپایدار جلوگیری کند.ویژگی بعدی Direct Optimization Methodاست که برخلاف بسیاری از روش‌های یادگیری تقویتی که از روش‌های تخمین گرادیان  استفاده می‌کنند، TRPOاز روش مستقیم کمینه‌سازی استفاده می‌کند. این به معنای این است که در هر مرحله، سعی می‌کند یک سیاست جدید را پیدا کند که میزان عملکرد را افزایش دهد، اما در همان زمان محدودیت‌هایی را اعمال می‌کند تا از تغییرات ناپایدار جلوگیری کند.مدل TRPO یکی از الگوریتم‌های پیشرفته و موثر در زمینه یادگیری تقویتی است که بهبود های قابل توجهی را در آموزش عامل‌ها در محیط‌های پیچیده ارائه می‌دهد. این الگوریتم به دلیل استفاده از منطقه اعتماد و ایجاد پیشرفت پایدار، می‌تواند با مسائل ناپایداری مرتبط با آموزش در محیط‌های پیچیده مقابله کند و به طور مؤثر عملکرد عامل را بهبود بخشد. مدل PPO (Proximal Policy Optimization)در سال 2017، John Schulmanو همکارانش الگوریتم PPO را در قاله ای با عنوان Proximal Policy Optimization Algorithms معرفی کردند. https://arxiv.org/abs/1707.06347 مدل PPO بعد از TRPO معرفی شد و به عنوان یک روش ساده‌تر و مقیاس‌پذیرتر برای آموزش سیاست‌های تقویتی ارائه شد که با استفاده از مفاهیمی مانند محدودیت مستقیمی بر روی تغییرات سیاست و بهبودات در عملکرد بهبوداتی نسبت به TRPOارائه می‌کند. PPO یک روش یادگیری تقویتی است که بر مبنای الگوریتم‌های بهینه‌سازی مبتنی بر گرادیان عمل می‌کند و برای آموزش سیاست (Policy) در الگوریتم‌های Actor-Critic مورد استفاده قرار می‌گیرد. PPOبرای آموزش ربات‌ها در وظایف پیچیده‌تر مانند کنترل ربات انسان‌نما و ناوبری در محیط‌های شلوغ استفاده شده است. این الگوریتم بهبودهایی نسبت به روش‌های قبلی مانند ایجاد کرده است و برای مواجهه با مشکل تغییرات بزرگ در سیاست آموزش و overfittingدر الگوریتم‌های یادگیری تقویتی طراحی شده است. ارتباط این الگوریتم با مطلبی که در بالا ذکر شده، این است که هر دو الگوریتم (A2C و PPO) به عنوان روش‌های یادگیری تقویتی بر مبنای الگوریتم‌های Actor-Critic استفاده می‌شوند. مدل T2T-ViL (Transformer to Transformer - Vision and Language)یک مدل شبکه عصبی عمیق است که در سال 2021 توسط محققان دانشگاه Carnegie Mellon معرفی شد. این مدل از دو شبکه عصبی Transformer به نام‌های &quot;Text Transformer&quot; برای پردازش و تفسیر متن و &quot;Vision Transformer&quot; برای پردازش و تفسیر تصاویر تشکیل شده است. این دو شبکه به صورت همزمان و پیوسته با یکدیگر کار می‌کنند. حال میخواهیم ببینیم که این کار را چگونه انجام می دهد. مدل Text Transformerمدل T2T-ViL مشابه با مدل‌هایی مانند GPT (Generative Pre-trained Transformer) که از معماری Transformer برای پردازش متون زبان طبیعی مناسب است. به عنوان نمونه، GPT برای تولید متن بر اساس متن ورودی استفاده می‌شود، در حالی که Text Transformer برای پردازش و تفسیر متن در ارتباط با تصاویر به کار می‌رود. اما اصولاً هر دوی این مدل‌ها ازself-attentionو feed-forward networks برای پردازش متون استفاده می‌کنند. مدل Vision Transformerیک مدل نوظهور است که هنوز در حال توسعه است و پتانسیل بالایی برای استفاده در ربات‌های مختلف دارد. نوعی شبکه عصبی عمیق است که در T2T-ViLبه کار می‌رود، مزیت اصلی Vision Transformer نسبت به مدل‌های قبلی بر پایه CNN، این است که نیازی به بلوک‌های کانولوشنی ندارند و به جای آن از بلوک‌های Transformerاستفاده می‌کنند که می‌توانند به طور موثر‌تری الگوهای معنایی در تصاویر را کشف کنند. الگوهای معنایی پیچیده‌تری را در تصاویر شناسایی کنند. Vision Transformerنوعی مدل Transformer است که برای پردازش تصاویر طراحی شده و این مدل با مدل‌های Transformer سنتی که برای پردازش متن استفاده می‌شوند، تفاوت‌های ظریفی دارد. مدل Vision Transformer تصویر را به Bach های کوچک‌تر تقسیم می‌کند، و از هر Bach، ویژگی‌های بصری مانند رنگ، شکل و بافت را استخراج می‌کند، همچنین از self-attention برای تمرکز بر روی بخش‌های مرتبط تصویر استفاده می‌کند، در نتیجه خروجی مدل می‌تواند یک دسته، یک دنباله از اعمال، یک پاسخ به سوال یا ... باشد. همچنین از مکانیزم توجه برای تمرکز بر روی بخش‌های مرتبط تصویر استفاده می‌کند، در حالی که در Transformer سنتی این موارد ر ا برای متن و کلمات به کار می برد.چنین مدل‌های پیچیده‌ای ابتدا Pre-trainingداده می‌شوند تا از محتوای تصاویر و متن دانش عمیقی را به دست بیاورند که به طور کلی شامل دو مرحله مهم است. مرحله اول Task-agnostic pre-trainingاست که مدل بر روی داده‌های بزرگ و گسترده‌ای از جمله متون و تصاویر متنوع است، آموزش داده می‌شود. مدل به طور خودکار الگوها، ویژگی‌ها و ارتباطات معنایی بین اجزای ورودی‌ها را فرا می‌گیرد. معمولاً در این مرحله از روش‌هایی مانند self-supervised learning و مدل‌های self-supervised models استفاده می‌شود. به عنوان مثال، مدل ممکن است به صورت خودنمایی یا بر پایه وظیفه‌های مانند پیش‌بینی کلمه بعدی در یک متن آموزش داده شود. مرحله بعدی Task-specific fine-tuningکه در آن، مدل پیش‌آموزش داده شده بر روی یک وظیفه خاص، مانند تشخیص اجسام در تصاویر یا ترجمه متن، به طور اختصاصی آموزش داده می‌شود. این فرایند به مدل کمک می‌کند تا دانش عمیقی در مورد وظیفه مورد نظر بدست آورد و عملکرد بهتری در آن وظیفه ارائه دهد.این اطلاعات سپس می‌توانند در فرآیند Fine-tuning که پس از Pre-trainingمدل، انجام می‌شود تا مدل بر روی یک وظیفه خاصی مانند تصاویر و برچسب‌های آن‌ها یا متون و متناظر با آن‌ها، آموزش داده شود تا در انجام تسک ها عملکرد بهتری ارائه دهد.برای استفاده از این مدل در کد، ابتدا باید مدل را بارگیری و سپس داده‌های ورودی مورد نیاز را به مدل بدهیم که می‌تواند به عنوان یک مدل شبیه‌ساز برای تفسیر و درک محتوای تصاویر و متن محسوب شود.سپس می‌توانید با فراخوانی مدل و اجرای آن بر روی داده‌ها، خروجی‌های مورد نظر را دریافت کنید.این مدل ممکن است در ربات‌هایی که از هوش مصنوعی برای تفسیر و پاسخ به پیام‌های کاربران استفاده می‌کنند. برای مثال، می‌توان از این مدل برای آموزش ربات‌ها در وظایفی مانند ربات‌های خانگی هوشمند یا برای آموزش ربات‌های صنعتی مثل Dactyl برای انجام وظایف مختلف مانند مونتاژ و چیدن اشیاء یا آموزش ربات‌های اجتماعی برای تعامل با انسان‌ها و درک زبان طبیعی یا برای آموزش خودروهای خودران برای درک محیط اطراف و رانندگی ایمن استفاده شود.نتیجه گیری :عنوان این 3 گانه ارباب حلقه ها است 3 عنصر مهم در فیلم برای &quot;کنترل&quot; اولی صحبت های سائرون که با اون وسوسه می کرد. مانند الف ها. دیدن مانند چشم بزرگ که از طریق اون میتوانست اتفاقات را ببیند و اوورک ها که ساخته اون بودند و مانند ربات فرمانبردار. نه خسته می شدند و نه میخوابیدند و نه سرپیچی میکردند.در پارت 1 و 2 این مقاله به تفضیل در موردpre-trained models  مناسبText  و image صحبت کردیم و آنها را آموختیم در پارت 3 از تاریخچه ربات و مقالات مهم این حوزه و هم چنین نحوه آموزش آنها از ابتدا صحبت کردیم. صنعت رباتیک هنوز در حال پیشرفت است و راه درازی در پیش رو دارد. ربات ها با تمام پیشرفت هایی که داشته اند و در حال تکامل هستند. هنوز به نقطه قوی نرسیده اند. چرا که مثلا مانند LLM ها یا مدل های بینایی ماشین نیستند که در محیطی کنترل شده قرار داشته باشند. ربات ها برای تعامل با محیط واقعی و فیزیکی باید بهبود پیدا کنند. در محیط کنترل شده ربات ها می توانند بسیار خوب عمل کنند. اما در محیط واقعی و بدون کنترل اوضاع متفاوت است. به غیر از قوانین فیزیک که خیلی از آنها قابل پیش بینی نیست داده ها در محیط واقعی در لحظه در حال تولید شدن هستند و هزاران هزار احتمال برای چگونگی وقوع دارند. بنابراین ممکن است که آموزشی که ربات دیده است در خیلی از مسائل که در لحظه اتفاق می افتد مناسب نباشد.انسان ها و موجودات زنده هم با هزاران سال زندگی و همچنین غریزه و نیروی زیستی توانسته اند به این مرحله برسند. شاید اگر در اینده مدلی طراحی شود مثلا که مانند نوزاد موجودات زنده بتواند در لحظه یادگیری انجام دهد. کلید حل مسئله باشد. حل همه این مسائل می تواند منجر به رسیدن به AGI شود. مدلی که بتواند درک کند که وجود دارد. ما می توانیم درک وجودی داشته باشیم ما میدانیم که الان در سیاره هستیم. هدف داریم. اما هوش مصنوعی هنوز به آن مرحله نرسیده است حال تصور کنید که این اتفاق رخ دهد . آیا باید از آن ترسید؟ باید خوشحال شویم ؟ انسان باهوش ترین موجود سیاره است البته تعاریف هوش متفاوت است و ممکن است خیلی از افراد تعریف دیگری داشته باشند. همچنیین میدانیم که هوش مصنوعی می تواند خیلی از ما باهوش تر باشد. اگر ربات ها به مرحله فهم از خود برسند ما دومین هوش برتر خواهیم شد. و اگر خطر این را هم در نظر نگیریم. مهم تر از آن کسی است که کلید AGI را در دست دارد . کنترل! سکانس های آخر فیلم ماتریکس 2 را به خاطر بیاورید زمانی که لئو با &quot; کنترل &quot; صحبت کرد. مقداری ترسناک می شود . اما از جنبه های دیگر هم میتوان به آن نگاه کرد. شاید جواب خیلی از سوالات و مسائل در طول تاریخ بی جواب مانده با AGI حل شود. نظر شما چیه ؟ لطفا در نظرات این مقاله ما من به اشتراک بگذارید.ممنون از شما که با من همراه بودید . منتظر نظرات شما هستم.ممنون از شما که در این سفر به دنیای Deeps با من همراه بودید.لینک پارت 2 به انگلیسی در Medium# پارت 1 : مهم ترین pre-trained model برایtext, را از آغاز بررسی و مقایسه خواهیم کرد.# پارت2 : ما مدلهای پیشآموزش دیده مهم در زمینه تصویر (AlexNet ,VGG , GoogLeNet ,ResNet, MobileNet, MobileNetV2) را از ابتدا تا امروز بررسی و با هم مقایسه خواهیم کرد.# پارت 3: می خواهیم مدل های پیش آموزش دیده و محیط های شبیه شازی که برای آموزش در رباتیک استفاده می شوند (Atari, OpenAI Gym2, MuJoCo, RoboCup, RoboCup Soccer, Humanoid-Gym) و همچنین با چالش های آنها بیشتر آشنا شویم.لطفا اگر مایل بودید مقاله دیگر من &quot; آیا DeepFakeفناوری آینده‌ای است یا یک تهدید؟ آیا خط میان واقعیت و ساختگی از بین خواهد رفت؟ &quot; رو در ویرگول ببینید .پلتفرم Hugging Faceچیست و چه کاربردهایی دارد؟امیدوارم از مطالب لذت برده باشید .</description>
                <category>محمد جواد نجادی</category>
                <author>محمد جواد نجادی</author>
                <pubDate>Tue, 16 Apr 2024 17:34:08 +0330</pubDate>
            </item>
                    <item>
                <title>اربابان حلقه ! انگشترهای  قدرت همان pre-trained model ها در هوش مصنوعی هستند!</title>
                <link>https://virgool.io/@m.javadnejadi/%D8%A7%D8%B1%D8%A8%D8%A7%D8%A8%D8%A7%D9%86-%D8%AD%D9%84%D9%82%D9%87-%D8%A7%D9%86%DA%AF%D8%B4%D8%AA%D8%B1%D9%87%D8%A7%DB%8C-%D9%82%D8%AF%D8%B1%D8%AA-%D9%87%D9%85%D8%A7%D9%86-pre-trained-model-%D9%87%D8%A7-%D8%AF%D8%B1-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%87%D8%B3%D8%AA%D9%86%D8%AF-esgjhflwznrc</link>
                <description># پارت2 : ما مدلهای پیشآموزش دیده مهم در زمینه تصویر (AlexNet ,VGG , GoogLeNet ,ResNet, MobileNet, MobileNetV2) را از ابتدا تا امروز بررسی  و با هم مقایسه خواهیم کرد.&quot;نگاه او ابر، سایه، زمین و جسم را سوراخ میکند. آیا میدانی از چه میگویم، گاندالف؟سارومان &quot;چشم سائورون همچنین به نام چشم بزرگ، چشم باراددور، &quot;چشم بزرگی بدون پلک، به دور شعلهها پیچیده شده&quot; نیز شناخته میشود.&quot;در این مقاله از توصیف چشم بزرگ سائورون در فیلم ارباب حلقه برای نمایش &quot;بینایی ماشین&quot; استفاده کردم.&quot;این مقاله در 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 مناسب هستند بیاموزیم. یکی از توانایی های مهم موجودات زنده و ما &quot;دیدن&quot; است.شاید بتوان گفت که بخش زیادی از یادگیری ما با مشاده کردن انجام می شود. از بدو تولد دو راه اساسی برای یادگیری نوزاد و درک جهان پیرامونش وجود دارد. توانایی لمس کردن و دیدن. یادگیری نوزاد با دیدن هست. جمله بالا در فیلم “Lord of the Rings” مکالمه گاندولف خاکستری و سارومان در مورد یکی از ابزارهای مهم سائرون &quot;چشم بزرگ&quot; برای کنترل بود. &quot;دیدن&quot; با چشم و گوی جهان بین &quot;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 را می بینید. مقداری با شبکه 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 لایه را ببینیم. منبعهمانطور که گفتیم ساختار 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، که معمولاً با اسم GoogLeNet نیز شناخته میشود، توسط تیم Google Research در سال 2014 معرفی شد. https://arxiv.org/abs/1409.4842 این مدل یکی از معروفترین و پیچیدهترین مدلهای عمیق CNN است که برای تشخیص تصاویر استفاده میشود. ساختار اصلی مدل Inception بر اساس مفهوم &quot; Inception block&quot; است. که معمولاً شامل چندین شاخه موازی از عملیات کانولوشن با اندازهها و pooling مختلف است. سپس این شاخهها در امتداد بُعد کانال به یکدیگر متصل میشوند تا خروجی بلوک را تشکیل دهند. اصطلاح بُعد کانال تعداد ویژگیهای استخراج شده در یک لایه کانولوشنی است. به عبارت دیگر، مدل Inception با ترکیب کردن ویژگیهایی از شاخههای مختلف Inception block یک ویژگی کلی و جامعتر از تصویر را تولید میکند. اندازه بُعد کانال به ورودیها و خروجیهای لایهها اشاره دارد. هر لایه در مدل Inception میتواند یک تعداد از فیلترهای کانولوشن را اعمال کند و به عنوان خروجی، یک مجموعه از ویژگیهای نمایش داده شده توسط این فیلترها را ارائه دهد. به عنوان مثال، اگر یک لایه از مدل Inception ورودیهایی با ابعاد 128x32x32 داشته باشد، بُعد کانال در اینجا برابر با 128 خواهد بود.این طراحی به شبکه امکان میدهد تا به صورت همزمان ویژگیها را در مقیاسها و سطوح مختلف انتزاعی استخراج کند که به بهبو قابلیت شبکه در تشخیص الگوها و ساختارهای پیچیده در تصاویر کمک میکند. Inception معمولاً برای وظایف مرتبط با تشخیص تصاویر و دستهبندی آنها مناسب است.ساختار Inception blockمدل GoogleNet، Inception module دو ورژن مختلف دارد:تصویر  ورژن  ساده  بلوک اینسپشن که در مقاله اصلی آوردده شده است. منبع تصویر بالا یک Inception block ورژن &quot;naïve&quot; را نشان می دهد که شامل چندین عملکرد پردازش تصویر موازی است. درساختار آن از Convolutional Filters با اندازه های مختلف استفاده شده است.  همانطور که می دانیم شبکه های عصبی از نظر محاسباتی گران هستند. در این معماری از یک 1x 1 Convolutional قبل از Convolutional 3x3 و 5x5  استفاده شده  است. تا از نظر محاسباتی ارزان تر شود. اما این روش معایبی دارد چرا که با زیاد شدن عمق شبکه پیچیدگی و تعداد پارامترها بسیار افزایش می یابد و با این معماری ممکن است مدل به مشکل overfitting دچار شود. همچنین ورژن &quot;naïve&quot; از Max pooling 3x3 که به اندازهگیری ویژگیهای مهم در نواحی مختلف تصویر کمک میکند و که یک روش ساده و موثر برای feature map (height and width) است که باعث می شود تعداد پارامترهای قابل آموزش در شبکه کاهش یابد. این کار می تواند به کاهش مشکل مهم overfitting هم کمک کند. البته  به شرایط خاص معماری شبکه، نوع داده و مسئله مورد نظر بستگی دارد. بخاطر این مشکلات معماری دیگری که در شکل زیر می بینید برای Inception block پیشنهاد داده شد که معمولا از آن استفاده می شود.مدل بعدی Inception module with dimension reductions است که در تصویر زیر می بینید خوب به تصویر دقت کنید:تصویر  ورژن  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 با عنوان &quot;Deep Residual Learning for Image Recognition&quot; توسط 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). منبعمرحله 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 برای کوچک کردن اندازه است. &quot;Stride&quot; به معنای گام میباشد و به تعداد پیکسلهایی اشاره دارد که فیلتر بلوک در هر گام از تصویر حرکت میکند.  تصویر زیر را ببینید. https://arxiv.org/abs/1801.04381این تصویر تفاوت بین هر دو نوع بلوک را به صورت کاملا واضح نشان می دهد و از مقاله اصلی MobileNetV2 گرفته شده است. منبعهر دو نوع بلوک در MobileNetV2 دارای سه لایه هستند. لایه اول یک کانولوشن 1×1 با تابع فعال سازی ReLU6 است. ReLU 6 یک نوع تابع فعالسازی ReLU است که مقادیر منفی را به صفر تبدیل میکند مقدار 6 برای حداکثر خروجی مناسب در نظر گرفته می شود. این تضمین می کند که مقادیر خروجی در محدوده بهینه قرار می گیرند و از مسائل انفجار گرادیان جلوگیری می کند. استفاده از ReLU 6 در MobileNetV2 مقادیر خروجی را بین صفر تا شش محدود می کند و از هرگونه مقدار منفی جلوگیری می کند.برای مدلهایی که برای موبایلها طراحی میشوند، حجم محاسباتی بسیار مهم است. اما استفاده از ReLU 6 به جای ReLU تنها برای کاهش حجم محاسباتی موثر نیست. استفاده از ReLU 6 به کاهش تعداد پارامترها در مدل و در نتیجه کاهش حجم و حافظه مورد نیاز برای آموزش و اجرا میشود که به معنی افزایش سرعت اجرای مدل است. این موضوع میتواند به عمر باتری دستگاه کمک کند و همچنین به افزایش بازده انرژی مدل منجر شود. در شکل زیر تفاوت ReLU 6 و ReLU را مشاهده می کنید.نمودار مقایسه 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 قرار داده شده است زیرا توضیحات بسیار مفصلی را ارائه میدهد. این تصویر همراه با توضیحاتی است که تفاوتها بین بلوکهای باقیمانده و بلوکهای باقیمانده معکوس را به خوبی نشان میدهد. منبعورودی لایه اولیه از یک 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 &amp; PyTorchمدلهای pre-trained که در بالا مرور کردیم مهم ترین مدل های در حوزه image بودند که اون ها رو با استفاده ازکتابخانه های TensorFlow یا PyTorch در Python می توانیم بارگیری کنیم. به عنوان مثال، در TensorFlow، شما میتوانید از کلاس &#x60;tf.keras.applications&#x60; برای بارگذاری مدلهای pre-trained استفاده کنید. به کد زیر که از سایت keras.io گرفته شده است دقت کنید.from keras.applications import MobileNetmodel = MobileNet(input_shape=None,alpha=1.0,depth_multiplier=1,dropout=0.001,include_top=True,weights=&amp;quotimagenet&amp;quot,input_tensor=None,pooling=None,classes=1000,classifier_activation=&amp;quotsoftmax&amp;quot,)پارامتر هایی که در کد بالا می بینید قابل تنظیم هستند و برای hyperparameter tuning کاربرد دارند. با استفاده از این کد می توانیم pre-trained model های حوزه Image را فقط با جایگزینی نام آن ها بعد از import صدا بزنیم.در PyTorch نیز میتوانید از کلاسهای &#x60;torchvision.models&#x60; برای بارگذاری مدلهای pre-trained استفاده کنید. کد زیر را ببینید.import torchimport torchvision.models as models# Load the pre-trained ResNet modelmodel = models.resnet50(pretrained=True)# Display the architecture of the modelprint(model)با استفاده از این کد میتوانیم همه pre-trained model های برای حوزه Image را فراخوانی کنیم به غیر از MobileNet. در کتابخانه torchvision مدل MobileNet موجود نیست. اما میتوانید از کتابخانههای دیگری مانند PyTorch Hub یا از سایر منابع خارجی استفاده کنید تا مدل MobileNet را برای استفاده در PyTorchبارگذاری کنید. کد زیر را ببینید:import torchmodel = torch.hub.load(&#039;pytorch/vision:v0.10.0&#039;, &#039;mobilenet_v2&#039;, pretrained=True)model.eval&#40;&#41;با استفاده از این کد میتوانیم 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 هستیم با جواب &quot;شاید یا امکانش هست! &quot; یا  &quot;نه به این زودی ها!&quot; و از این قبیل جواب ها مواجه می شدیم. اما امروز مسئله &quot;چند سال دیگر&quot; می رسیم مطرح است. 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) و همچنین با چالش های آنها بیشتر آشنا شویم.لطفا اگر مایل بودید مقاله دیگر من &quot; عمیقتر و عمیقتر در عمق یادگیری عمیق و شبکههای عصبی مصنوعی &quot; رو در ویرگول ببینید .بهترین جی پی تی های سفارشی GPT Store کداماند و چطور ساخته میشوند؟امیدوارم از مطالب لذت برده باشید .</description>
                <category>محمد جواد نجادی</category>
                <author>محمد جواد نجادی</author>
                <pubDate>Thu, 04 Apr 2024 11:49:31 +0330</pubDate>
            </item>
                    <item>
                <title>اربابان حلقه ! انگشترهای قدرت همان pre-trained model ها در هوش مصنوعی هستند!</title>
                <link>https://virgool.io/@m.javadnejadi/%D8%A7%D8%B1%D8%A8%D8%A7%D8%A8%D8%A7%D9%86-%D8%AD%D9%84%D9%82%D9%87-%D8%A7%D9%86%DA%AF%D8%B4%D8%AA%D8%B1%D9%87%D8%A7%DB%8C-%D9%82%D8%AF%D8%B1%D8%AA-%D9%87%D9%85%D8%A7%D9%86-pre-trained-model-%D9%87%D8%B3%D8%AA%D9%86%D8%AF-p4ynsbeajfbi</link>
                <description># پارت 1 : مهم ترین pre-trained model برای text, را از آغاز بررسی و مقایسه خواهیم کرد.&quot;یک حلقه تا انتها برای فرمانروایی بر تمامی آن‌ها، یک حلقه تا پیدا کردنشان، یک حلقه تا همه را به هم آوردن، و در تاریکی آن‌ها را به خود متصل کردن.&quot;منبعدر این سه‌گانه، قصد داریم دربارهٔ مدل‌های پیش‌آموزش دیده صحبت کنیم که شباهت‌هایی به حلقه‌های قدرت  در فیلم  ماندگار &quot;ارباب حلقه‌ها&quot; دارند. همانطور که فیلم سه‌گانه بود، من هم مقاله را به سه بخش تهیه کرده‌ام. همانطور که از فیلم یاد می‌کنیم، حلقه‌های قدرت، حلقه الف‌ها و حلقه دورف‌ها وجود داشتند. در این سه‌گانه، من دربارهٔ مدل‌های پیش‌آموزش دیده که شبیه به حلقه‌های قدرت از فیلم &quot;ارباب حلقه‌ها&quot; هستند، صحبت خواهم کرد. مقاله به سه بخش تقسیم شده است، به همان شکلی که فیلم بود. حلقه‌های قدرت، حلقه الف‌ها و حلقه دورف‌ها در فیلم وجود داشتند. به همان ترتیب، مدل‌های پیش‌آموزش دیده شبیه حلقه‌های قدرت هستند که می‌توانند برای ساخت مدل‌های هوش مصنوعی استفاده شوند. با ترکیب این مدل‌ها، ما می‌توانیم مدل‌های چندمنظوره‌ای ایجاد کنیم که ممکن است منجر به توسعه هوش مصنوعی عمومی یا حتی هوش مصنوعی فوق العاده شوند. با این وجود، همانطور که در فیلم است، اگر این مدل‌ها به دستان نادرست بیفتند، ممکن است تهدیدات جدی ایجاد کنند. به همین دلیل مقاله را با عنوان &quot;اربابان حلقه‌ها&quot; نام‌گذاری کرده‌ام. همراه من در این سفر هیجان‌انگیز باشید.این مقاله در 3 پارت در مورد pre-trained model تکمیل خواهد شد که به شرح زیر است:# پارت 1 : مهم ترین pre-trained model برای text, را از آغاز بررسی و مقایسه خواهیم کرد.# پارت 2 : بررسی مهم ترین pre-trained model ها در حوزه Image.# پارت 3 : مهم ترین pre-trained model برای Robotics را از آغاز بررسی و مقایسه خواهیم کرد.در این سه گانه می خواهیم 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 گانه همراه باشید تا با هم به این سوالات پاسخ دهیم.چرا pre-trained model!به نظر می آید مهم ترین ویژگی ای که با استفاده از pre-trained model ها می توانیم به دست بیاوریم قابلیت Fine-tuning کردن و Transfer Learning این مدل ها برای تسکی که می خواهیم انجام دهیم است. در واقع Transfer Learning ویژگی بسیار مهمی در Deep learning است و انقلابی که در Deep learningبه وجود آمده و در حال رخ دادن است یکی از پایه های مهم آن Transfer Learning است. می توانیم بگوییم اساس یادگیری در انسان یا حتی موجودات زنده هم همین است. هم اکنون که دارید این متن را می خوانید من در حال انتقال یادگیری خودم در مورد pre-trained model به شما هستم!بیایید با یک مثال شروع کنیم که موضوع را بهتر درک کنیم. تصور کنید که می خواهید خانه بزرگی را بسازید. دو راه وجود دارد: یک راه این است که از اول شروع به ساختن کنید. خانه را قسمت به قسمت از فندانسون تا نما و همه موارد را مرحله به مرحله بسازید. و برای این کار علاوه بر مصالح وابزارها ماشین آلات و غیره باید خانه را کاملا ضد زلزله بنا کنید. بنابراین علاوه بر هزینه  بیشتر نیاز به مهندسی پیچیده تر هم د ارید. حتی امکان دارد آن نتیجه کاملا مطلوب را به دست نیاوریم. راه دوم این است : از تجربه و تخصص شرکتی که سالها در خانه سازی تجربه دارد استفاده کنیم. خانه هایی که این شرکت ساخته اجزای از پیش ساخته شده ماتتد پازل دارد. حتی این قطعات پازل قابل سفارشی سازی هستند! یعنی به نحوی که نمای داخل و خارج ساختمان مطلوب ما طراحی شود. از طرفی مهندسی ساخت به صورتی است که ساختمان کاملا ضد زلزله باشد! در نتیجه هزینه ها و زمان طراحی و اجرای پروژه به شدت کاهش می یابد و خانه ای کاملا ضد زلزله داریم که حاصل سالها تجربه تخصصی در ساخت و ساز خانه است! کدام روش رو انتخاب می کنید ؟!تاریخچه پیدایش pre-trained modelیکی از دغدغه ها و چاش های بزرگ برای آموزش مدل های مختلف هوش مصنوعی مخصوصا در یادگیری عمیق در گذشته و حال پرهزینه بودن وچالش بعدی چگونگی استفاده از داده های بزرگ و حتی جمع آوری این داده هاست. داده های بزرگ سخت افزار های بسیار پرقدرت و پر هزینه نیاز دارند. از طرفی مجموعه داده های بسیار بزرگ مخصوصا در گذشته مانند اکنون در دسترس نبودند. مفهوم pre-trained برای نخستین بار در سال‌های ابتدایی 2010 میلادی مطرح شد. در ابتدا pre-trained model برای پردازش زبان طبیعی (NLP) به وجود آمدند. در واقع می توان گفت یکی از جنبه های مهم رشد LLMs ها pre-trained ها هستند.یکی از بزرگترین و مهم ترین قابلیت های pre-trained model ها چون که مجموعه ای از weights و biases های اولیه دارند می توان آن ها را برای تسک خاصی به خوبی تنظیم کرد. هیچ مدلی وجود ندارد که 100 درصد دقت را داشته باشد. چون  pre-trained model را افراد متخصص تر با ابزارهای دقیق تر و لجستیک قوی می سازند اغلب دقیق تر و کارآمد تر از مدل هایی هستند که شخصی ساخته می شوند.معروف ترین و پرکاربردترین pre-trained model برای تسک های مهم عبارت است از:پردازش تصویر( VGG (2014) / ResNet (2015) )ترجمه ماشینی ( Transformer (2017) / BERT (2018) )تولید موسیقی ( OpenAI&#x27;s MuseNet(2019) / Magenta&#x27;s Music Transformer (2018) )رباتیک ((Dactyl (2018) /  DeepLoco (2018) (تحلیل احساسات ( BERT (2018) / RoBERTa(2019) )تشخیص اخبار جعلی (BERT(2018) / GPT-3(2020) )مفهوم pre-trained model چیه ؟مفهوم pre-trained model از سال‌های ابتدایی توسعه DNN مطرح شده بود، اما نخستین بار که این ایده به صورت رسمی مطرح و مورد توجه قرار گرفت، در زمان توسعه مدل‌هایی مانند Word2Vec و GloVe بود. می خوایم مختصری راجع به این دو الگوریتم یاد بگیریم و ببینیم pre-trained model اولیه و مخصوصا مدل هایی که برای متن وجود دارد چطور کار می کنن بزن بریم !تعبیر واژگانی (Word Embedding ) دیگه چیه ؟!زبان اصلی من فارسی است ! من هنوز قادر به درک مستقیم یک متن به زبان چینی نیستم! بنابراین برای فهمیدن آن باید بتوانم اون رو ترجمه کنم.زبان کامپیوترها اعداد است. بنابراین برای فهماندن مسائل به کامپیوتر باید به زبان اعداد با اون صحبت کنیم. برای فهم داده متنی که به کامپیوتر می دهیم باید داده متنی را به عدد تبدیل کنیم. تکنیک هایی برای آن وجود دارد. یکی از اونها Word Embedding است. در واقع، Word Embedding معمولاً یک نوع مدل عمیق یا شبکه عصبی است که بر اساس توزیع ویژگی‌های کلمات در یک مجموعه متنی آموزش داده می‌شود.ایده Word Embedding به عنوان یک تکنیک خاص در یک مقاله واحد نبود. مفاهیمی که در نهایت به تکنیک Word Embedding منجر شدند، در طول زمان توسط چندین محقق مختلف مطرح شدند. مفهوم اولیه Word Embedding و اصطلاح &quot;تمثیل ویژگی‌ها&quot; (Feature Representation) در دهه 1980 توسط Geoffrey Hinton مطرح شد، که ایده اصلی را برای تبدیل کلمات به بردارهای چگال بیان می کند. در Word Embedding کلمات را در یک جمله به اعداد رمزگذاری می کنیم و اون ها رو به صورت یک وکتور نمایش می دهیم تا کامپیوتر بتواند آن را ببیند و پردازش کند.تعبیر واژگانی Word Embedding از معنای کلمات در یک مجموعه متنی استفاده می‌کند. وقتی که کلمات و ارتباطات معنایی آن‌ها را شناسایی می‌ کند، این اطلاعات را در یک فضای چگال نمایش می دهد. در این فضا، ارتباطات معنایی بین کلمات با فاصله‌های چگالی بیان می‌شوند. به این ترتیب، کلمات با معانی مشابه یا مرتبط، در فضای چگال نزدیک به یکدیگر هستند. در قسمت بعد می خواهیم pre-trained model که برای پردازش متن کاربرد دارند و در اونها از Word Embeddingاستفاده شده است را بررسی کنیم.مدل Word2Vecمدل Word2Vec توسط تیم محققین گوگل در مقاله ای Tomas Mikolov ،Kai Chen، Greg Corrado ، Jeffrey Dean  در سال 2013 به چاپ رسید. https://arxiv.org/abs/1301.3781 الگوریتم Word2vec یک تکنیک در NLP است. همانطور که از نامش پیداست برای تولید نمایش برداری (vector representation) از کلمات استفاده می‌شود. کدی که در زیر می بینید مدل Word2Vec را با استفاده از&#x60;gensim.models&#x60;  که یک زیرماژول از کتابخانه Gensim فراخوانی می کند. و در ادامه آن نحوه  تولید vector representation را می بینید.from gensim.models import Word2Vec# Example datasentences = [[&amp;quotthis&amp;quot, &amp;quotis&amp;quot, &amp;quota&amp;quot, &amp;quotsentence&amp;quot], [&amp;quotanother&amp;quot, &amp;quotsentence&amp;quot]]# Create Word2Vec modelmodel = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)# Display word vectorsword_vectors = model.wvword_vectors_dict = {}for word in word_vectors.key_to_index:word_vectors_dict[word] = word_vectors[word]print(word_vectors_dict)مدل Word2Vec از Word Embedding به عنوان روشی برای تولید نمایش برداری از کلمات استفاده می‌کند. هر کلمه با یک بردار اعداد حقیقی (معمولاً اعداد حقیقی 32 یا 64 بیتی) با ابعاد معین که از طریق آموزش مدل‌های Word2Vec با داده‌های متنی به دست می‌آیند نگاشت می‌شود. به نحوی که کلماتی که در متن‌ها مشابه هستند، در فضای برداری نیز نزدیک به هم قرار می‌گیرند. این نمایش برداری از کلمات باعث می شود که روابط معنایی بین کلمات را در فضای برداری حفظ کنیم. اجزای اصلی یک جمله جز به جز کنار هم قر ار می گیرند و مفهومی را منتقل می کنند حال ممکن است این کلمات اگر در جمله نباشند به تنهایی مفهومی را منتقل نکنند. اما با رابطه ای که در جمله با هم برقرار می کنند معنا و مفهوم پیدا می کند. ما می خواهیم که Word Embedding این کار را برای کامپیوتر ها آسان کند. به عنوان مثال، در فضای برداری Word2Vec، کلماتی مانند &quot;پرنده&quot; و &quot;پر&quot; به دلیل معانی مشابه خود، به هم نزدیک‌تر هستند. در واقع اگر دو بردار مربوط به این دو کلمه در فضای برداری به هم نزدیک باشند، به این معناست که این دو کلمه مشابه یکدیگر هستند و ارتباط معنایی با هم دارند.با این ویژگی می توان دانش زبانی را از تسکی به تسک دیگر منتقل کرد. به عبارت دیگر بردارهای آموزش دیده برای یک مجموعه داده خاص را می توان برای مجموعه ی دیگری استفاده کرد. بردارهایی که برای ترجمه ماشینی آموزش دیده شده‌اند، ممکن است برای تحلیل احساسات نیز مفید باشند، زیرا معنایی مشابه بین کلمات در این وظایف حفظ شده است. بنابراین، مدل Word2Vec یکی از اولین مدل‌هایی بود که از این ایده استفاده کرد.روش‌های کارکرد Word2Vecروش‌های Word2Vec معمولاً بر اساس مدل‌های شبکه عصبی عمیق (DNN) مانند مدل‌های skip- gram model و Continuous Bag of Words (CBOW) زیرا که ترتیب کلمات در آن مهم نیست. مدل CBOWدر مدل CBOW، کلمه مرکزی یا target word توسط مدل پیش بینی می شود. target word معمولا یک کلمه در جمله است که تصادفی انتخاب می شود. مدل با استفاده از کلمات قبل و بعد از target word، سعی می‌کند آن را پیش بینی کند. مثلا جمله &quot;عشق، چشمان بارانی او را به سوی آسمان آبی انداخت.&quot;هدف پیش‌بینی target word (مثل &quot;عشق&quot;) بر اساس کلمات قبل و بعد آن (مثل &quot;چشمان بارانی او را به سوی آسمان آبی&quot;) است. به عبارت دیگر، با داشتن کلمات محیطی، الگوریتم سعی می‌کند target word را پیش بینی کند. در این جمله، ممکن است کلمات &quot;عشق&quot;، &quot;چشمان&quot;، &quot;بارانی&quot;، &quot;او&quot;، &quot;را&quot;، &quot;به&quot; و &quot;سوی&quot; به عنوان ورودی‌ها به الگوریتم داده شوند و هدف، پیش‌بینی کلمه &quot;آسمان&quot; باشد.مدل Skip-gram مدل  Skip-gram ، برعکس CBOW است. مدل با استفاده از یک  target word، کلمات مجاور آن را پیش‌بینی می کند. در همان جمله بالا مدل با داشتن  target word &quot;آسمان&quot;، الگوریتم سعی می‌کند کلماتی مانند &quot;عشق&quot;، &quot;چشمان&quot;، &quot;بارانی&quot;، &quot;او&quot; و ... یعنی کلماتی که ممکن است قبل و بعد از آن آمده باشند را پیش‌بینی کند. به عبارت دیگر مدل به دنبال به دست آوردن بردارهایی برای هر کلمه است که با استفاده از آن‌ها بتواند کلمات مجاور را پیش‌بینی کند. به تصویر زیر دقت کنید. منبع : این تصویر به طور موثر نحوه عملکرد مدل‌های Skip-gram و CBOW را نشان می‌دهد، همانطور که در مقاله Mikolov در سال ۲۰۱۳ نشان داده شده است.مقایسه CBOW و Skip-gramمدل CBOW معمولاً در مواردی که متن‌ها نسبتاً بلند و متنوع هستند، موثر است. Skip-gram برای مواردی که متن‌ها کوتاه‌تر هستند و هدف پیدا کردن الگوهایی از روابط معنایی بین کلمات می باشد مناسب تر است. به طور کلی، مدل skip-gram به دلیل دقت بیشتر در یادگیری بردارهای کلمات، قوی‌تر از مدل CBOW در نظر گرفته می‌شود. Word2Vec به عنوان پایه‌ای برای بسیاری از LLMها، از جمله GPT-3 و BERT، عمل می‌کند. البته در حال حاضر، LLMها از روش‌های مدرن تر مانند ترنسفورمرزها Transformer (در ادامه همین مقاله به اونها خواهیم پرداخت) برای یادگیری بردارهای کلمات استفاده می‌کنند. با این حال، Word2Vec هنوز هم به عنوان یک ابزار قدرتمند برای آموزش مدل های بزرگ زبانی LLMها به کار می‌رود.مدل GloVeمدل GloVe یا Global Vectors for Word Representation از Global Vectors ابداع شده است، مدلی برای نمایش کلمات توزیع شده است. مانند Word2Vec یک روش برای به دست آوردن نمایش برداری از کلمات در فضای برداری است. با این حال، روش محاسبه این بردارها در هر مدل متفاوتاست. مدل GloVe  به عنوان یک پروژه open-source توسط University stanford در سال 2014 معرفی شد. این مدل یک الگوریتم unsupervised learning برای به دست آوردن نمایش برداری vector representation با استفاده از اطلاعات آماری مربوط به توزیع کلمات در متن‌ها که شامل احتمالات توزیع کلمات در متون مختلف، ارتباطات معنایی بین کلمات، و ویژگی‌های دیگری است که از متون استخراج می‌شود و برای ساخت بردارهای کلمات مورد استفاده قرار می‌گیرد.در GloVe، با استفاده از آماره‌های زبانی مانند word-word co-occurrence matrix، احتمالات نسبی ظاهر شدن همزمان دو کلمه با هم در متن‌ها محاسبه می‌شود. سپس با استفاده از این احتمالات، بردارهای کلمات به نحوی که روابط معنایی بین کلمات حفظ شود به‌روزرسانی می‌شوند.مقایسه GloVe و Word2Vecالگوریتم های GloVe و Word2Vec معمولاً برای یافتن روابط معنایی بین کلمات مثل مترادف‌ها، روابط مانند شرکت - محصول، کد پستی و شهرها و غیره مورد استفاده قرار می‌گیرند. با این حال، این الگوریتم‌ها ممکن است در شناسایی روابطی مانند هموگراف‌ها ( کلماتی با املای یکسان و معانی متفاوت) موثر نباشند. زیرا به طور معمول توزیع آماری کلماتی که هموگراف هستند، متفاوت است. فرض کنید کلمات &quot;بانک&quot; را معمولا به معنی مکانی برای ذخیره پول (بانک معاملاتی) می شناسیم. اما &quot;بانک&quot; می تواند معنای مکانی برای ذخیره اطلاعات (بانک اطلاعاتی) هم داشته باشد. در این صورت، این دو کلمه &quot;بانک&quot; که اشاره شد هموگراف‌ هستند، یعنی املای یکسان اما معانی متفاوتی دارند.با این حال، مدل‌های Word2Vec به دلیل اینکه مبتنی بر روابط معنایی بین کلمات هستند ممکن است برای شناسایی هموگراف ها موثرتر باشند. با این حال در تشخیص هموگراف ها به رویکردهای ترکیبی یا مدل های پیشرفته تری وجود دارد که قادر به درک معانی متنوع کلمات با املای یکسان باشند.مورد دیگر بزرگ یا کوچک بودن کلمات است که مدل های GloVe و Word2Vec به حروف بزرگ و کوچک حساس هستند و آنها را به عنوان کلمات متفاوت در نظر می گیرند و به تبع آن، بردارهای متفاوتی برای هر کلمه ایجاد می‌شود. بنابراین، برای استفاده از این مدل‌ها، بهتر است که همه کلمات در متن‌ها را به یک فرمت خاص تبدیل کنیم، به عبارت دیگر همه حروف را بزرگ یا کوچک کنیم. این کار باعث می‌شود که مدل‌ها بتوانند به درستی الگوهای معنایی بین کلمات را یاد بگیرند و استفاده از آن‌ها به درستی صورت گیرد. اما این کار ممکن است باعث از دست رفتن اطلاعات معنایی شود. فرض کنید کلمه” US”  به معنای ایالات متحده است و اگر با حروف کوچک نوشته شود “us” به معنای ضمیر جمع &quot;ما&quot; می باشد.تکنیک های پیش پردازش متنالبته اینکه تمام کلمات را به فرمت خاصی تبدیل کنیم باعث می شود که مدل ها الگو های معنایی را یاد بگیرند و به درستی عمل کنند. برای رفع مشکل حساسیت مدل‌های GloVe و Word2Vec به حروف بزرگ و کوچک، از برخی روش‌های پیش پردازش متن استفاده می کنند. روش اول تکنیک‌ stemming که پیشوند و پسوندهای کلمات را حذف می کند تا به ریشه‌ی کلمه برسد و کلمات مشابه به یک شکل استاندارد تبدیل شوند. برای مثال، کلمه‌های &quot;running&quot;, &quot;runs&quot;, &quot;ran&quot; و &quot;runner&quot; همگی از یک ریشه یا شکل اصلی یعنی &quot;run&quot; مشتق شده‌اند. یکی از تکنیک‌های معروف stemming، الگوریتم Porter است که از یک سری قوانین مبتنی بر الگوها برای حذف پسوندهای مختلف و تبدیل کلمات به ریشه‌های معنادار استفاده می‌کند. برای مثال، کلمه &quot;cats&quot; به &quot;cat&quot; و &quot;running&quot; به &quot;run&quot; تبدیل می‌شود.ابتدا، باید NLTK را نصب کرده و داده‌های مورد نیاز برای stemming را دانلود کنیم. سپس با استفاده از کد python ی زیر، می‌توانیم تکنیک stemming را اعمال کنیم:import nltkfrom nltk.stem import PorterStemmer# Download necessary data for stemmingnltk.download(&#039;punkt&#039;)# Create an instance of PorterStemmer classstemmer = PorterStemmer()# Words to be stemmedwords = [&amp;quotrunning&amp;quot, &amp;quotruns&amp;quot, &amp;quotran&amp;quot, &amp;quotrunner&amp;quot, &amp;quotcats&amp;quot, &amp;quotcat&amp;quot]# Stemming words and printing resultsfor word in words:stemmed_word = stemmer.stem(word)print(f&amp;quot{word} -&gt; {stemmed_word}&amp;quot)این کد به ترتیب کلمات &quot;running&quot;, &quot;runs&quot;, &quot;ran&quot;, &quot;runner&quot;, &quot;cats&quot; و &quot;cat&quot; را به ریشه‌های معنادار تبدیل می‌کند و نتایج را چاپ می‌کند.running -&gt; runruns -&gt; runran -&gt; ranrunner -&gt; runnercats -&gt; catcat -&gt; cat[nltk_data] Downloading package punkt to /root/nltk_data...[nltk_data] Package punkt is already up-to-date!روش دوم  lemmatization که کلمات به شکل پایه یا لغت اصلی آنها تبدیل می‌شوند. در کد زیر مانند روش  stemming  از کتابخانه NLTK استفاده می کنیم.  با این تفاوت اساسی  که با متد مهمی مانند &#x60;nltk.download(&#x27;wordnet&#x27;)&#x60; داده‌های مورد نیاز دانلود می‌شود. یک نمونه از کلاسی   مهمی مانند &#x60;WordNetLemmatizer&#x60; می سازیم و این کلاس برای انجام عملیات lemmatization استفاده می‌شود. سپس کلماتی که قرار است lemmatized شوند در لیست &#x60;words&#x60; قرار می گیرند. سپس با استفاده از یک حلقه &#x60;for&#x60;، هر کلمه از لیست &#x60;words&#x60; گرفته شده و با استفاده از متد مهمی مانند &#x60;lemmatize&#x60; کلاس &#x60;WordNetLemmatizer&#x60; lemmatized می‌شود.import nltkfrom nltk.stem import WordNetLemmatizer# Download necessary data for lemmatizationnltk.download(&#039;wordnet&#039;)# Create an instance of WordNetLemmatizer classlemmatizer = WordNetLemmatizer()# Words to be lemmatizedwords = [&amp;quotrunning&amp;quot, &amp;quotcats&amp;quot, &amp;quotate&amp;quot, &amp;quotflying&amp;quot, &amp;quotbetter&amp;quot]# Lemmatizing words and printing resultsfor word in words:lemmatized_word = lemmatizer.lemmatize(word)print(f&amp;quot{word} -&gt; {lemmatized_word}&amp;quot)بعد از اجرای کد بالا نتیجه lemmatization هر کلمه به همراه خود کلمه اصلی به صورت یک جمله چاپ می‌شود. برای مثال، اگر کلمه &quot;running&quot; به عنوان ورودی داده شود، خروجی این عملیات &quot;running&quot; خواهد بود، زیرا کلمه &quot;running&quot; به عنوان یک فعل برگرفته از ریشه &quot;run&quot; در نظر گرفته می‌شود.[nltk_data] Downloading package wordnet to /root/nltk_data...running -&gt; runningcats -&gt; catate -&gt; ateflying -&gt; flyingbetter -&gt; betterاین روشها باعث می‌شوند که تمامی اشکال مختلف یک کلمه به یک شکل استاندارد تبدیل شوند و حساسیت به حروف بزرگ و کوچک کاهش یابد. با استفاده از این روش‌ها، تمام کلمات به یک فرمت استاندارد تبدیل می‌شوند و حروف بزرگ و کوچک دیگر تفاوتی در نتیجه‌ی تحلیل متن ایجاد نمی‌کنند. نکته قابل توجه این است که در یک مدل چونکه این دو روش به دو رویکرد متفاوت برای کاهش کلمات به شکل استاندارد می‌پردازند. بسته به نوع مسئله‌ و اهداف آن می توان همزمان از هر دوتکنیک بسیار مهم  stemming و  lemmatization استفاده کرد. البته ممکن است منجر به افزایش پیچیدگی و کاهش کارایی در پردازش متن شود.الگوریتم‌های مانند GloVe و Word2Vec مدل‌های Word Embedding بر اساس متن هستند و تنها به عنوان یکی از مراحل پیش‌پردازش متن و نمایش کلمات در مدل‌هایی مانند BERT و GPT به عنوان ورودی استفاده می‌شوند، اما خود به عنوان یک قسمت اصلی از این مدل‌ها استفاده نمی‌شوند. برای مدل‌های مانند BERT و GPT که به Pre-trained Language Models شناخته می‌شوند. این مدل‌ها با استفاده از شبکه‌های Transformer ، به صورت Pre-trained و در مسائلی مانند ترجمه ماشینی، تولید متن، پرسش و پاسخ و مسائل پردازش زبان طبیعی عملکرد خوبی از خود نشان می‌دهند. در قسمت بعد به بررسی آنها خواهیم پرداخت. با من همراه باشید.قدرت LLMs ها از کجاست!مدل های GloVe و Word2Vec دو مدل اولیه برای NLP بودند. در سال های بعد به وسیله مدل های pre-trained model مانند BERT، GPT-3 و RoBERTa ارائه شدند که بر پایه تبدیل متنی با Attention هستند و امروزه محبوبیت و کارایی بیشتری دارند. در سال 2017 مقاله ای منتشر شد و NLP را به طور جدی دستخوش تغییر و تحول قرار داد. شاید نویسندگان آن مقاله در زمان نوشتار آن تصور نمی کردند که این مقاله بتواندNLP  را دگرگون کند. مقاله معروف &quot; Attention is All You Need&quot;. https://arxiv.org/abs/1706.03762 می توان گفت مکانیزم Attention یکی از ستون های اصلی و قدرتمند LLMs هست. در واقع مفهموم توجه Attention در یادگیری عمیق و مخصوصا در NLP برای بهبود RNN هاست تا بتوانیم دنباله‌ها یا جملات طولانی‌تر را بهتر مدیریت کنیم. مدل‌های pre-trained مانند BERT، GPT-3، از ایده‌های اولیه الهام گرفته و به شکل‌های مختلفی گسترش یافته‌اند. به عنوان مثال، BERT از ایده Attention استفاده می‌کند و GPT-3 از Self-Attention Models استفاده می‌کند. مدل GPT-3 از معماری ترنسفورمرها  Transformer هم استفاده می کند که در اصل برای Self-Attention Models طراحی شده است.مکانیزم Self-Attentionمکانیزم Self-Attention بر خلاف RNNs ها که داده‌های ورودی را به صورت متوالی پردازش می‌کنند یعنی هر ورودی (مانند کلمه در یک جمله)، در زمان مشخصی به صورت متوالی با وزن‌هایی مشخص، به نودهای شبکه منتقل می‌شود. در این روش، ارتباط بین کلمات به صورت زمانی (یا متوالی) در نظر گرفته می‌شود و وابستگی‌ها در طول زمان به صورت پشت سر هم بررسی می‌شوند یا در معماری های  CNNs، ویژگی‌های مختلف داده‌های ورودی با استفاده از فیلترهای کانولوشنی از آنها استخراج می‌شوند. در این روش، فیلترها به طور مستقل و بدون توجه به وابستگی‌های زمانی اجزای مختلف داده‌های ورودی را پردازش می‌کنند و اطلاعات مکانی (اطلاعاتی مربوط به مکان در داده‌ها) را در نظر می‌گیرند.مکانیزم Self-Attention می‌تواند وابستگی‌ها و ارتباطات بلند مدت بین کلمات در یک جمله را به طور موثرتری ضبط کند. نکته اصلی Self-Attention Models ، مکانیسم توجه به خود است که به هر کلمه در یک دنباله این امکان را می‌دهد که به همه کلمات دیگر همزمانتوجه کند و بر اساس اهمیت آن‌ها برای یک وظیفه خاص نمایش‌های وزن‌دار بسازد. به عبارت دیگر، هر کلمه در جمله با توجه به تمام کلمات دیگر، نقش و اهمیت خود را مشخص می‌کند. این روش به مدل امکان می‌دهد تا روابط بین کلمات را به صورت بلند مدت و در تمام طول جمله در نظر بگیرد، بدون اینکه به ترتیب خاصی از کلمات بستگی داشته باشد. به عبارت دیگر Self-Attention Models با ارائه ابزارهای قدرتمندی برای ضبط الگوهای پیچیده در داده‌های متنی NLP را به طور قابل توجهی تغییر داده‌اند.ساختن LLMs با pre-trained modelمی توانیم از BERT، GPT برای انجام تسک های مختلف از جمله ساختن LLMs ها استفاده کرد. این دو به عنوان مدل‌های pre-trained بسیار موفق برای پردازش زبان طبیعی شناخته شده‌اند. برای ساختن یک LLM می توانیم از داده‌های متنی بزرگ برای آموزش مدل استفاده کنیم. با انتقال این داده‌ها و آموزش مدل بر روی آنها، می‌توانیم یک LLM سفارشی و با توانایی‌های خاص برای پردازش زبان طبیعی ایجاد کنیم.برای استفاده از این مدل‌ها، معمولاً مدل خام را در اختیار داریم که شامل معماری و وزن‌های متناظر با آن است. اما برای استفاده موثر از این مدل‌ها برای وظایف خاص، می‌توانیم آنها را با داده‌های خودمان فاین تیونینگ( Fine-tuning ) کنیم. این کار بهبود عملکرد مدل برای وظایف خاص را فراهم می‌کند و تصور کنید که به چه میزان می تواند هزینه ساختن یک LLM را کاهش دهد. به طور مثال اگر بخواهیم از مدل GPT به عنوان یک مدل pre-trained برای پردازش زبان طبیعی استفاده کنیم. کافی است با اجرای کد زیر می توانیم مدل GPT را در اختیار بگیریم. کتابخانه transformers توسط شرکت Hugging Face توصعه داده شده و برای استفاده از اکثر pre-trained model برای پردازش زبان طبیعی (NLP) مانند DistilGPT-2، BERT، RoBERTa، DistilBERT، XLNet نیز می توانیم از همین کد استفاده کنیم.در کد های زیر از مدل DistilGPT-2 برای تولید متن به دو روش مختلف استفاده می‌شود این کد ها از سایت huggingface گرفته شده است:# With pipeline, just specify the task and the model id from the Hub.from transformers import pipelinepipe = pipeline(&amp;quottext-generation&amp;quot, model=&amp;quotdistilgpt2&amp;quot)در روش اول، از کلاس pipeline که در کتابخانه transformers وجود دارد، کلاس Pipeline  برای استفاده سریع و آسان از pre-trainedmodel بدون نیاز به تعریف و ساختار مدل برای وظایف مختلف مانند ترجمه متن، تولید متن، تشخیص انواع متن‌ها و غیره را انجام دهد. در این حالت، کافی است نوع تسک &quot;text-generation&quot; و مدل مورد استفاده model=&quot;distilgpt2 مشخص شود. کد زیر روش دوم را شرح می دهد.# If you want more control, you will need to define the tokenizer and model.from transformers import AutoTokenizer, AutoModelForCausalLMtokenizer = AutoTokenizer.from_pretrained(&amp;quotdistilgpt2&amp;quot)model =AutoModelForCausalLM.from_pretrained(&amp;quotdistilgpt2&amp;quot)در روش دوم، ابتدا از کلاس AutoTokenizer برای بارگیری tokenizer استفاده می‌شود. سپس با استفاده از متد from_pretrained، tokenizer مربوط به مدل DistilGPT-2 بارگیری می‌شود. در مرحله بعدی، از کلاس AutoModelForCausalLM برای بارگیری مدل استفاده می‌شود. این روش برای افرادی است که نیاز به کنترل بیشتری بر روی مدل و tokenizer دارند.بعد از اجرای هر کدام از این کدها  pre-trained model را در اختیار داریم حال با استفاده از کد زیر می توانیم متنی را به مدل بدهیم و نمایش بردار ویژگی‌های متن را ببینیم:import torch# Define your input textinput_text = &amp;quotLove, her rain-filled eyes towards the blue sky.&amp;quot# Tokenize the input textinput_ids = tokenizer.encode(input_text, return_tensors=&amp;quotpt&amp;quot)# Get the model&#039;s output logitswith torch.no_grad():outputs = model(input_ids)logits = outputs.logits# Print the shape of the output logitsprint(&amp;quotOutput logits shape:&amp;quot, logits.shape)بعد از اجرای کد های بالا خروجی به صورت زیر است:Output logits shape: torch.Size([1, 12, 50257])خروجی logits که از مدل DistilGPT-2 بدست آمده است، یک tensor با ابعادی بهشکل  &#x60;(batch_size, sequence_length, vocab_size)&#x60; است. بنابراین، ابعاد [1, 12, 50257] به معنای این است که برای نمونه‌ی ورودی ما، مدل یک خروجی با طول توالی 12 و اندازه واژگان 50257 تولید کرده است.در کد های بالا از  PyTorch استفاده شده است. در واقع pre-trained model هایی که با استفاده از کتابخانه‌های TensorFlow و PyTorch ساخته شده‌اند، در اصل معماری یکسانی دارند. اما، تفاوت‌هایی در استفاده از آن‌ها وجود دارد.در TensorFlow، مدل‌ها به عنوان گراف محاسباتی تعریف می‌شوند و توابع مخصوص برای آموزش و استفاده از مدل‌ها وجود دارد معمولاً از یک API سطح بالا (Keras و tf.keras) برای ساختن و آموزش مدل‌ها استفاده می‌شود. اما در PyTorch، مدل‌ها به صورت ماژول‌ تعریف می‌شوند که به صورت مستقیم می‌توانید آن‌ها را با استفاده از توابع Pythonمدیریت کنید. همچنین رابط کاربری (API) اصلی برای ساخت و آموزش مدل‌ها خود PyTorch است.چگونگی انجام Fine-tuningتا این قسمت از مقاله راجع به انواع pre-trained model مربوط به Text صحبت کردیم و ساختار آنها رو برررسی کردیم. حال برای استفاده از آنها روی Dataset ی که داریم و برای تسک خاصی که می خواهیم انجام دهیم باید مدل را Fine-tuning کنیم. یک مفهوم مهم در آموزش مدل های عمیق مخصوصا مدلهایی که از یادگیری انتقالی استفاده میکنند. به این صورت است که pre-trained model که روی یک مجموعه داده بزرگ آموزش دیده است با استفاده از Dataset که برای تسک خودمان داریم تنظیم کنیم. برای این کار معمولا لایه های آخر مدل را فریز می کنیم و فقط وزن‌های لایه‌های پایین‌تر قابل بهینه‌سازی هستند. این فرآیند به مدل اجازه می‌دهد تا الگوهای خاص به مجموعه داده کوچک‌تر را یاد بگیرد، در حالی که از الگوهای عمیق کلی که در مجموعه داده بزرگ‌تر آموزش دیده شده‌اند، بهره‌مند می‌شود.مدل های pre-trained  زیادی وجد دارد. ابتدا یک مدل مناسب انتخاب می کنیم و تمام مراحلی که در بالا گفته شد شامل تطبیق پارامترهای آن با داده های جدید و در عین حال حفظ دانش آموخته شده در طول آموزش انتخاب یک معماری مناسب، تعریف تابع هدف ویژه کار، تهیه مجموعه داده، مقداردهی اولیه مدل با وزن‌های از پیش آموزش‌دیده، و تنظیم دقیق پارامترها از طریق بهینه‌سازی تکراری است. تکنیک هایی مانند یادگیری انتقال، تنظیم فراپارامترها و PEFT (تنظیم دقیق کارآمد پارامترها) محوری هستند. روش های منظم سازی و تنظیم هایپرپارامتر عملکرد را بهینه می کند. بعد از انجام مراحل بالا معیاری برای ارزیابی عملکرد مدل Fine-tuned را انتخاب می‌کنیم، مانند دقت، فراخوانی، یا هر معیار دیگری که برای مسئله مورد نظر مناسب است. سپس مدل را بر روی داده‌های آماده‌شده(دیتاست خودمان ) Fine-tuning می‌ کنیم. در این مرحله، معمولاً از یک مرحله‌به‌مرحله (epoch-by-epoch) و یا batch-by-batch استفاده می‌شود و مقادیر توابع هدف (مانند تابع خطا) محاسبه می‌شوند و پارامترهای مدل به‌روزرسانی می‌شوند. سپس مدل Fine-tuned را بر روی داده‌های ارزیابی ارزیابی می‌کنیم و معیارهای ارزیابی را محاسبه می‌کنیم تا به عملکرد نهایی مدل برسیم.به علت اینکه مقاله بسیار طولانی تر می شود از کد برای توضیح Fine-tuned استفاده نکردم اما در آینده ای نزدیک حتما در یک مقاله دیگر مرحله به مرحله با استفاده از یک pre-trained model برای text دیتاستی را انتخاب میکنم و مرحله به مرحله انجام آن را با هم یاد خواهیم گرفت.نتیجه‌گیری پارت 1در پارت 1 مقاله راجع به اصلی ترین pre-trained model های Textصحبت کردیم و اینکه این مدل ها از چه زمانی ارائه شدند و در کد هم مشاهده کردیم که این مدل ها چقدر می توانند مفید باشند . همانطور که می دانیم امروزه LLMs ها تقریبا به قسمتی از زندگی روزمره ما تبدیل شده اند و به سرعت در حال پیشرفت و بهبود هستند و در آینده ای نه چندان دور این مدل ها به دستیارهای شخصی برای ما تبدیل خواهند شد و حتی شاید اهمیت موتورهای جستجو به تدریج کمرنگ تر شود. همچنین دیدیم که یکی از موارد پر اهمیت برای استفاده بهینه از این مدل ها Fine-tuningکردن مدل برای انجام هر چه بهتر تسکی است که می خواهیم انجام دهیم. در پارت 2 به سراغ pre-trained model های مهم برای Image خواهیم رفت و مهم ترین آنها را از آغاز تا الان به صورت مقایسه ای بررسی خواهیم کرد. تا هر چه بیشتر اهمیت این مدل ها برای ما روشن تر شود. پارت 2 بزودی منتشر خواهد شد و از شما درخواست می کنم آن را هم ببینید و منتظر نظرات شما هستم.ممنون از شما که در این سفر با من همراه بوده و هستید.ممنون از شما که در این سفر به دنیای Deeps با من همراه بودید.لینک پارت 1 به انگلیسی در Medium# پارت 1 : مهم ترین pre-trained model برای text, را از آغاز بررسی و مقایسه خواهیم کرد.# پارت 2 : بررسی مهم ترین pre-trained model ها در حوزه Image.# پارت 3 : مهم ترین pre-trained model برای Robotics را از آغاز بررسی و مقایسه خواهیم کرد.پارت 3 : انواع مهم ترین معماری های شبکه های عصبی عمیق (RNN / LSTM / CNN )لطفا اگر مایل بودید مقاله دیگر من &quot; مرحله به مرحله برای ساختن یک شبکه عصبی مصنوعی و دیدن چگونگی رخ دادن overfitting با MNIST و معماری CNN&quot; رو در ویرگول ببینید .ساخت موسیقی با هوش مصنوعی چگونه شکل گرفت و چطور انجام می‌شود؟امیدوارم از مطالب لذت برده باشید .</description>
                <category>محمد جواد نجادی</category>
                <author>محمد جواد نجادی</author>
                <pubDate>Thu, 28 Mar 2024 08:57:13 +0330</pubDate>
            </item>
                    <item>
                <title>مرحله به مرحله برای ساختن یک شبکه عصبی مصنوعی و دیدن چگونگی رخ دادن overfitting با MNIST و معماری CNN</title>
                <link>https://virgool.io/@m.javadnejadi/%D9%85%D8%B1%D8%AD%D9%84%D9%87-%D8%A8%D9%87-%D9%85%D8%B1%D8%AD%D9%84%D9%87-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%B3%D8%A7%D8%AE%D8%AA%D9%86-%DB%8C%DA%A9-%D8%B4%D8%A8%DA%A9%D9%87-%D8%B9%D8%B5%D8%A8%DB%8C-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%88-%D8%AF%DB%8C%D8%AF%D9%86-%DA%86%DA%AF%D9%88%D9%86%DA%AF%DB%8C-%D8%B1%D8%AE-%D8%AF%D8%A7%D8%AF%D9%86-overfitting-%D8%A8%D8%A7-mnist-%D9%88-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-cnn-mw6fc2oyaofs</link>
                <description># دیدن و لمس کردن همه مراحل و مشکلات با کد های تست شده و نمودارهای یادگیریساختن و ساختن و ساختن ...این تصویر توسط Ideogram خلق شده استبرای ساختن یک شبکه عصبی مصنوعی اولین مرحله دسترسی به داده ها ست. معمولا داده ها در دنیای واقعی نرمال شده نیستند و ممکن است دارای داده های پرت یا داده های null باشند. به همین خاطر ما برای ساختن یک مدل علاوه بر اینکه به داده ها نیاز داریم باید داده ها را پیرایش کنیم. تا مدل به خوبی آنها را ببیند و پردازش کند. بعد از این مراحل است که می توانیم از کتابخانه های بسیار زیاد و متنوع و کارآمدی که وجود دارد استفاده کنیم تا مدل خود را بسازیم.در این مقاله می خواهیم مرحله به مرحله ساختن یک مدل را یاد بگیریم. از فراخوانی یا دانلود دیتاست تا Normalization و انتخاب معماری مناسب برای ساختن مدل. همچنین کامل متوجه شویم overfitting چطور رخ میده چطور متوجه آن شویم؟ با چه راهکاری می توانیم آن را برطرف کنیم؟ نه به صورت تئوری بلکه با کد ها و نمودارهای یادگیری عملا خواهیم دید. رویکرد مقایسه ای نمودار های مختلف که با Hyperparameter tuning های مختلف به دست آمده اند باعث درک بهتر مسئله خواهد شد. در این کاوش هیجان انگیز با من همراه باشید.&quot; تمام کد های استفاده شده در این مقاله و نمودار هایی که خواهید دید. در colab.research.google.com تست شده اند و از آنها خروجی گرفته شده است. &quot;مختصری در مورد MNISTبه جرات می توان گفت امکان ندارد شخصی در همان ابتدای آموختن یادگیری ماشین دیتا ست MNIST را نشناسد. مانند print(“Hello world”) برای شروع یادگیری برنامه نویسی است. MNIST یکی از دیتاست های مرجع در زمینه یادگیری ماشین و بینایی کامپیوتر است که شامل تصاویر اعداد دست نویس از 0 تا 9 می باشد. اما MNIST از کجا آمده ؟در واقع MNIST از مجموعه داده NIST به وجود آمده است. مجموعه داده آموزشی NIST از کارمندان اداره سرشماری آمریکا گرفته شده است. در حالی که مجموعه داده آزمایشی از دانش آموزان دبیرستانی آمریکایی گرفته شده است. MNIST در اوایل دهه 1980 توسط Yann LeCun، Corinna Cortes و Christopher J.C. Burges ایجاد شد. MNIST دارای 60000 تصویر Train و 10000 تصویر Test است. تصاویر در ابعاد 28x28 پیکسل ذخیره شده‌اند و خاکستری و تک کانال هستند.دیتاست Extended MNIST (EMNIST) مجموعه داده جدیدتری است که توسط NIST به عنوان جانشین (نهایی) MNIST توسعه و منتشر شده است. MNIST فقط شامل تصاویر ارقام دست نویس می شد. EMNIST شامل تمام تصاویر پایگاه داده ویژه NIST 19 است که یک پایگاه داده بزرگ از حروف بزرگ و کوچک دست‌نویس و همچنین اعداد است. تصاویر در EMNIST مانند تصاویر MNIST به همان فرمت پیکسلی  (28x28) تبدیل شدند. بر این اساس، ابزارهایی که با مجموعه داده‌های قدیمی‌تر و کوچک‌تر MNIST کار می‌کنند، احتمالاً بدون تغییر با EMNIST کار می‌کنند.در سال های اخیر مجموعه‌ داده های  جدید و بزرگتری مانند CIFAR-10، CIFAR-100، و ImageNet به عنوان مجموعه‌های داده مورد استفاده قرار گرفته‌اند که تنوع داده و پیچیدگی بیشتری دارند که باعث می شود برای مسائل پیچیده و تسک های کنونی مناسب تر باشند. با این حال MNIST همچنان به عنوان یکی از مجموعه‌های داده اولیه و مهم برای یادگیری ماشینی و بینایی کامپیوتری مورد استفاده قرار می‌گیرد. در این مقاله ما می خواهیم MNIST را بررسی کنیم و مرحله به مرحله برای آموزش یک مدل شبکه عصبی با آن پیش برویم و موانع و مشکلاتی که در آن وجود دارد رو بررسی کنیم.صدا زدن مهم ترین کتابخانه هااولین مرحله برای شروع فراخوانی کتابخانه های مهمی است که فارغ از اینکه چه معماری یا چه روشی برای ساختن مدل خود داریم یا حتی چه دیتا ستی استفاده کنیم. این کتابخانه ها در مدل ضروری هستند مثلا می دانیم که برای رسم نمودار ها &#x60; matplotlib &#x60;  را لازم داریم و چون با ماتریس و آرایه ها سر و کار داریم &#x60; Numpy &#x60; را احتیاج داریم و برای این دیتاست من از  &#x60;keras&#x60; و&#x60; Tensorflow &#x60;  می خواهم استفاده کنم بنابراین:# calling important Libraryimport tensorflow as tfimport matplotlib.pyplot as pltimport numpy as npفراخوانی دیتاستبرای استفاده از دیتاست MNIST اول باید بتوانیم آن را فراخوانی یا دانلود کنیم. MNIST در مخازن keras وجود دارد و فقط کافی ست که با متد&quot; () load_data &quot; آن را فراخوانی کنیم. و داده های تست و ترین و Shape هر کدام را مشخص می کنیم.# calling the datasetfrom tensorflow.keras.datasets import mnist# Access the training and testing data(X_train, y_train) , (X_test, y_test) = mnist.load_data()(X_train.shape, y_train.shape) , (X_test.shape, y_test.shape)پراسس کردن داده ها (Data processing)مرحله مهم قبل از آموزش مدل مرحله Data processing است. تعداد و مراحل مختلف آن بستگی به نوع دیتاست دارد. بعضی از آنها مانند همین دیتا ست MNIST خیلی نیاز به  processing ندارند اما داده های دنیای واقعی به این صورت نیست روشهای مختلف Data processing را با هم بررسی می کنیم.نرمال سازی (Normalization)در شبکه های عمیق برای رسیدن به یک وضعیت پایداری که مدل بتواند الگوهای داده ها را یاد بگیرد و پیش بینی دقیقی ارائه کند. اصطلاحا مدل باید همگرا شود. در واقع همگرایی یعنی اینکه وزن ها و پارامترهای شبکه طوری تنظیم شوند که تابع هزینه کمترین مقدار شود . دو مشکل اصلی در همگرایی مدل های عمیق انفجار و محو گرادیان است و زمانی رخ می دهند که گرادیان ها بسیار بزرگ یا بسیار کوچک شوند.تذکر : اگر Normalization انجام نشود یکی از مشکلاتی که پیش می آید مشکلات همگرایی است که ممکن است مدل دیرتر یا حتی به طور کامل همگرا نشود.روش های Normalization زیادی وجود دارد. از جمله روش Pixel-wise (هر پیکسل از تصویر بر اساس میانگین و واریانس پیکسل‌های مشابه در دیتاست نرمال‌سازی می‌شود) یا Local Contrast (برای تصاویری با تفاوت‌های نوری محلی مفید است. هر ناحیه از تصویر متناسب با نواحی مشابه آن در تمام داده‌ها نرمال‌سازی می‌شود) و Robust Scaling (از میانه و چارچوب داده برای مقیاس دادن استفاده می‌کند، بنابراین در مقابل داده‌های پرت مقاومت دارد) یا Unit Vector Scaling (هر سطر از داده‌ها به نحوی استانداردسازی می‌شود که مجموع مربعات مقادیر آنها یک شود)کد زیر برای Data processing است. و معمولا قبل از مرحله Normalization انجام میشه. تابع &#x60;reshape&#x60;، ابعاد Data را برای ورود به شبکه عصبی تغییر می‌دهد. به این صورت که تصاویر به ابعاد 4D با اندازه (تعداد نمونه‌ها، ارتفاع تصویر، عرض تصویر، تعداد کانال) تغییر شکل می ‌یابند. در MNIST ابعاد تصاویر (60000, 28, 28) است که به ابعاد (60000, 28, 28, 1) تغییر شکل می‌یابند. این کار برای تطابق با اندازه ورودی لایه‌های شبکه عصبی ضروری است. مقادیر پیکسل‌های تصاویر که از 0 تا 255 متغیرند، با تقسیم بر 255 به مقادیر اعشاری بین 0 و 1 نرمال می‌شوند. Normalization به مدل کمک می‌کند تا مشکلات مربوط به آموزش غیر منظم (مانند افزایش میزان لرزش در توزیع وزن‌ها) را کاهش دهد.# Preprocess the dataX_train = X_train.reshape((60000, 28, 28, 1))X_test = X_test.reshape((10000, 28, 28, 1))برای دیتاست MNIST، نرمال‌سازی ممکن است مفید باشد، اما اغلب نیازی به آن نیست. اما اگر بخواهیم عملکرد مدل خود ر ا بهبود دهیم می توانیم داده ها را نرمالسازی کنیم. برای نرمال‌سازی داده‌های تصویری، به غیر از روشهای بالا دو روش مهم دیگر هم وجود دارد. یکی از آن ها Standardization  با استفاده از Z-score هست که میانگین و واریانس داده ها نرمال سازی میشن به طوریکه میانگین برابر با صفر و واریانس برابر 1 باشد. در کد زیر ابتدا داده ها را به flote32 تبدیل می کنیم. البته می توانستیم به  flote8/16/64 هم تبدیل کنیم. &#x60;float&#x60; نوع داده است که مشخص می‌کند. بعد آن را با استفاده از روش Z-score نرمالسازی می کند و مقدار میانگین و واریانس را محاسبه می کنیم :# Convert data to float32X_train = X_train.astype(np.float32)X_test = X_test.astype(np.float32)# Calculate mean and standard deviation of the training datamean = np.mean(X_train) # Meanstd = np.std(X_train) # Variance# Apply Z-score normalization to the training dataX_train_normalized = (X_train - mean) / std# Apply Z-score normalization to the test data using the mean and standard deviation of the training dataX_test_normalized = (X_test - mean) / std# Display the dimensions of the standardized dataprint(&amp;quotDimensions of X_train: &amp;quot, X_train_normalized.shape)print(&amp;quotDimensions of X_test: &amp;quot, X_test_normalized.shape)روش دیگر Min-Max Scaling است که داده‌ها به یک بازه مشخصی معمولاً [0, 1] تبدیل می‌شوند. روش Min-Max Scaling بیشتر برای داده‌هایی که دارای توزیع نرمال یا به شکلی مشابه آن هستند مفید است. زمانی که داده‌ها توزیع غیر نرمالی دارند، مانند MNIST روش Z-score معمولاً مفیدتر است. چون مقدار داده‌ها را بر اساس میانگین و واریانس نرمالسازی می‌کند. پس روش Min-Max Scaling برای MNIST ممکن است نتایج نامناسبی را تولید کند.نکته مهم : توجه داشته باشید که باید از یکی از روش های نرمالسازی در مدلمان استفاده کنیم .اگر هر دو را با هم استفاده کنیم فقط باعث پیچیدگی مدل می شود که ممکن است باعث رخ دادن overfitting شود.دیدن داده هادر این بخش می خواهیم ابتدا یک نمونه از داده ها را ببینیم. برای این کار می توانیم از کتابخانه‌های متداول مانند matplotlib یا opencv استفاده کنیم. این کد را با استفاده از کتابخانه matplotlib نوشته ایم :import matplotlib.pyplot as plt# Display an image from the data along with its labelindex = 0 # Index of the image to displayplt.imshow(X_train_normalized[index], cmap=&#039;gray&#039;)  # Display the imageplt.colorbar()  # Display the color barplt.title(f&#039;Label: {y_train[index]}&#039;)  # Title with the labelplt.show()  # Show the imageهمانطور که می دانیم پایتون &quot; ایندکس صفر&quot; است در این کد با تابع imshow اولین عکس داده های آموزشی را به همراه Label آن می توانیم ببینیم. با تغییر index هر کدام از اعداد که قابل نمایش اند.مثلا index = 19 عدد بیستم MNIST را به ما نشان می دهد. همچنین  shape تصویر که 28 x 28 است و تصویر را هم به رنگ خاکستری انتخاب کرده ایم نتیجه آن تصویر زیر است :این عکس یک نمونه از دیتاست MNIST است که توسط کد من پردازش شده است و نشان‌دهنده یکی از اعداد این دیتاست می‌باشد. مدلی که با استفاده از این داده‌ها آموزش داده شده، توانایی تشخیص اعداد را داردن تصویر با کد بالا در پایتون توسط من ایجاد شده استتصمیم گیریبعد از انجام مراحل Preprocessing باید روش طراحی مدل را انتخاب کنیم. با روش Sequential  یا روش Functional API یا حتی روش ترکیبی. انتخاب هر کدام از این دو روش به نوع مسئله و داده های Dataset و همچنین نوع معماری بستگی دارد. چرا که نوع معماری در مسئله ما می تواند تعیین کننده نتیجه نهایی باشد. به نظر شما برای MNIST کدام روش و معماری بهتر است ؟در مرحله Normalization چون MNIST توزیع غیر نرمال دارد. Z-score می تواند بهتر از Min-Max Scaling عمل کند. در مسئله پیش رو که تشخیص اعداد دست نویس است از معماری CNN استفاده می کنیم چرا که برای پردازش تصویر بسیار مناسب است. هر چند که MNIST تصاویر ساده ای دارد و دیتاست پیچیده ای نیست اما استفاده از  CNNمی تواند مناسب باشد. از روش Sequential استفاده می کنیم که در اون مدل ها به صورت خطی و لایه به لایه اضافه می شود و ارتباطی بین لایه ها تعیین نمی شود. در صورتی که بخواهیم مدل را پیچیده تر کنیم انتقال از مدل Sequential به مدل Functional API امکان پذیراست. در قسمت بعد به ساختن مدل با روش Sequential می پردازیم . با من همراه باشید.مرحله1 : ساختن معماری (مدل) (Creat Architecture (model))بعد از Normalization و انتخاب نوع معماری باید شروع به ساختن مدل کنیم. با توجه به نوع معماری  کتابخانه های مهم را فراخوانی می کنیم &#x60; tensorflow.keras.layers &#x60; برای وارد کردن لایه های مختلف در CNN است تا بتوانیم لایه های شبکه را با متد model.add() اضافه کنیم و دیگری &#x60; tensorflow.keras.models &#x60; است که بتوانیم مدل Sequential را بسازیم.# calling important Libraryfrom tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout0از این کتابخانه ها برای اضافه کردن لایه ها به مدل استفاده می کنیم از Conv2D برای اضافه کردن لایه های کانولوشنی و MaxPooling2D برای عملیات pooling استفاده می کنیم.لایه Flatten معمولاً بعد از لایه‌های کانولوشنی یا Dropout استفاده می‌شود. Dropout (داده های خروجی از آنها چند بعدی است) ، به عنوان ورودی به لایه‌های کاملا متصل (Dense) نیاز به داده‌های یک بعدی دارند. از لایه‌ی Flatten برای تبدیل داده‌های ورودی به یک بردار یک بعدی استفاده می‌شود.لایه لایه Flatten معمولاً بعد از لایه‌های کانولوشنی یا Dropout استفاده می‌شود. Dropout (داده های خروجی از آنها چند بعدی است) ، به عنوان ورودی به لایه‌های کاملا متصل (Dense) نیاز به داده‌های یک بعدی دارند. از لایه‌ی Flatten برای تبدیل داده‌های ورودی به یک بردار یک بعدی استفاده می‌شود.لایه Dropout یک روش ارائه شده توسط Geoffrey Hinton و دیگران در مقاله‌ی با عنوان :عنوان “Dropout: A Simple Way to Prevent Neural Networks from Overfitting”است که به صورت Random بعضی از ویژگی ها را در مرحله آموزش مدل حذف می کند تا از Overfitting در شبکه‌های عصبی عمیق جلوگیری کند. این لایه به طور معمول بلافاصله پس از لایه‌های کانولوشنی یا pooling قرار می‌گیرد. ( در ادامه مقاله به صورت مفصل به آن خواهیم پرداخت و به صورت شهودی خواهید دید ) Dropout یک روش ارائه شده توسط Geoffrey Hinton و دیگران در مقاله‌ی با عنوان :هر نورون در لایه‌های کاملا متصل (Dense) با همه نورون های قبلی و بعدی متصل است و یک وزن (W) و یک Bias دارد که نشان دهنده ارتباط بین ورودی این لایه با خروجی لایه قبلی است که معمولا در لایه (های(ممکن است یک شبکه لایه های پایانی متعدد داشته باشد )) پایانی یک شبکه عصبی استفاده می شود.لایه آخر یا لایه خروجی که معمولا از تابع فعالسازی Softmax در این لایه استفاده می شود. در کد خواهیم دید که output Layers دارای 10 نورون است چون مسئله ما 10 کلاسی هست. اعداد 0 – 9 بنابراین خروجی هر تصویر که می خواهیم در نهایت بررسی کنیم باید عددی بین 0 – 9 تشخیص داده شود.بعد از وارد کردن کتابخانه های مهم و دانستن اینکه هر لایه چطور عمل می کند مدل را می سازیم که درکد زیر می بینیم :# Create the modelmodel = Sequential()model.add(Conv2D(32, (3, 3), activation=&#039;relu&#039;, input_shape=(28, 28, 1)))model.add(MaxPooling2D((2, 2)))model.add(Conv2D(64, (3, 3), activation=&#039;relu&#039;))model.add(MaxPooling2D((2, 2)))model.add(Conv2D(64, (3, 3), activation=&#039;relu&#039;))model.add(Flatten())model.add(Dense(64, activation=&#039;relu&#039;))model.add(Dropout(0.25))model.add(Dense(10, activation=&#039;softmax&#039;))# Display model summarymodel.summary()همانطور که می بینید ابتدا با() model = Sequential روش مدل را انتخاب کردیم. سپس شروع به اضافه کردن لایه های مختلف می کنیم. لایه اول (28,1, 28) = input_shape نشان از shap داده ها (28x28 (Number of pixcel)) و 1 نشان می دهد داده ها تک کاناله ( خاکستری) هستند.لایه (32) Conv2D لایه کانولوشنی است که درCNN استفاده می کنیم. نشان دهنده تعداد یال هایی که از این لایه به لایه بعد می رود و (3x3) ابعاد هسته یا فیلتر kernel(Filter) است که اطلاعات را در تصاویر جمع آوری می کند. چون تصاویر ما خاکستری و بسیار کوچک هستند و لبه ها مقادیر صفر دارند. نیاز زیادی به padding  نداریم.بنابراین از MaxPooling2D استفاده می کنیم. وقتی kernel یا فیلترها روی تصاویر pool می کند. مخصوصا برای داده هایی مثل MNIST که بیشترین مقدارهای (255-0) برای ما مهم است. چونکه برای تشخیص اعداد در تصویر هر چه مقادیر بیشتر باشد تشخیص بهتر می شود. چون تصاویر خاکستری هستند و پیکسل هایی که اعداد دست نویس را مشخص می کنند به سمت سفید یعنی مقدار 255 می رود و مقادیر به سمت 0 در واقع قسمت سیاه مانند لبه ها یا پس زمینه است که از اهمیت کمتری برخوردارند.از توابع فعالسازی مختلفی هم در لایه های مختلف استفاده کرده ایم که هر کدام وظایفی را انجام می دهند. دو لایه کاملا متصل (FC) یا Dense داریم که در اولی تابع فعالساز ReLU استفاده کرده ایم و در لایه دوم که خروجی مدل است از تابع فعالساز softmax که معمولا در لایه آخر خروجی کاربرد دارد. از Dropout با نرخ حذف 0.25 یعنس به صورت Random  25  درصد از ویژگی های ورودی به لایه حذف می شود. هر کدام از لایه ها دارای پارامتر هایی هستند که در مجموع بعد از کامل شدن آن تعداد کامل پارامترهای شبکه را با model.summary() می توانیم ببینیم. در قسمت بعد می خواهیم کامپایل مدل را انجام دهیم.کامپایل مدل (compile.model)بعد از ساختن مدل و لایه ها با معماری CNN باید مرحله compile مدل را با استفاده از تابع &#x60;compile&#x60; برای تنظیم Loss function و Optimizer و انتخاب معیاری های ارزیابی انجام دهیم. در ماشین لرنینگ Loss function نشان‌دهنده‌ی اختلاف بین خروجی مدل و مقدار واقعی است. در همه تسک هایی که داریم چه در دنیای واقعی چه برای حل مسائل Deep Learning یکی از مهم ترین کارها رساندن خطا به کمترین مقدار است. از Optimizer که مسئول بهینه‌سازی و به روزرسانی وزن‌های (W) مدل است و با تنظیم Loss function ، وزن‌های مدل را به گونه‌ای تغییر می دهد که تابع خطا کمینه شود استفاده می کنیم. Optimizer ها انواع مختلفی مانند Adam، SGD و RMSprop دارند و انتخاب درست هر کدام برای وظیفه خاص شما می‌تواند به بهبود عملکرد مدل کمک کند. همانطور که خواهید دید ما در کد زیر از Adam استفاده می کنیم. سپس با انتخاب معیار های مناسب ارزیابی یعنی Metrics ها عملکرد مدل را در مرحله آموزش و ارزیابی بسنجیم.# Importing necessary libraries for compiling the modelfrom tensorflow.keras.optimizers import Adamfrom tensorflow.keras.losses import SparseCategoricalCrossentropy# Compiling the model with SparseCategoricalCrossentropy loss function and Adam optimizermodel.compile(loss=SparseCategoricalCrossentropy(),optimizer=Adam(learning_rate=0.001), metrics=[&#039;accuracy&#039;])محاسبه Loss function فقط با فراخوانی تابع () SparseCategoricalCrossentropy انجام می شود. در بهینه سازی Adam از نرخ یادگیری (learning rate) استفاده کرده ایم. learning rate تعیین می‌کند چه مقداری از گام‌های آموزش به اندازه کافی کوچک باشند که به نقطه بهینه برسیم. در واقع یک Hyperparameters (پارامترهایی که خارج از مدل قرار دارند و باید تنظیم شوند) محسوب می‌شود. انتخاب learning rate مناسب یکی از موارد حیاتی در آموزش یک مدل است. انتخاب مقدار مناسب learning rate می‌تواند از overshooting جلوگیری کند. Overshooting پدیده‌ای در فرایند بهینه‌سازی است که در آن مقدار پارامتر‌ها به شدت جابه‌جا می‌شود. ممکن است باعث کند شدن فرایند بهینه‌سازی شود. متریک accuracy نیز برای ارزیابی دقت مدل در هنگام آموزش استفاده می‌شود.اگر کامپایل مدل انجام نشود مدل نمی تواند بهینه سازی کند و عملکرد خود را ارزیابی کند. در قسمت بعد وارد مرحله fit کردن مدل می شویم . با من همراه باشید .فاز آموزش (Training Phase)در این مرحله مدل را روی داده های train آموزش می دهیم تا یادگیری انجام شود و بدانیم که دقت مدل چقدر است. اصولا هنگام fit کردن مدل اولین کاری که انجام می دهیم مشخص کردن تعداد epochs است. در هر epochs مدل یک بار تمام داده های آموزشی را می بیند تا بتواند الگوهای پیچیده را در داده ها بیاموزد. طبیعتا هر چه تعداد epochs بیشتر شود مدل بهتر یاد میگیرد چون  بیشتر می تواند داده را ببیند اما اگر بیش از حد باشد منجر به overfitting می شود. به عبارت دیگر چون مدل بیش از حد به داده های آموزشی همگرا می شود نمی تواند آن ها را به داده جدید تعمیم دهد. به عبارت دیگر مدل داده ها را فقط حفظ می کند.فیت کردن مدل (model.fit)برای آموزش مدل از ()model.fit که حاوی متد های یادگیری مدل است استفاده می کنیم. علاوه بر موارد بالا می توان به متد Validation split اشاره کرد. بهترین مقدار validation split بین 0.1 تا 0.3 است. استفاده از داده‌های اعتبارسنجی این امکان را به ما می‌دهد تا عملکرد مدل را در طول آموزش به طور مستقیم بر روی داده‌هایی که مدل قبلاً دیده است، ارزیابی کنیم. در واقع داده های آموزشی را به دو بخش تقسیم میکند. مثلا= 0.2  Validation split یعنی داده های آموزشی به 80 درصد برای آموزش و 20 درصد برای تست تقسیم می شود. این کار را در مدل های قدیمی ماشین لرنینگ هم انجام می دادیم. اگر عملکرد مدل بر روی این داده‌های جداگانه بهبود نیافته باشد، آموزش متوقف می‌شود. این روش به ما کمک می‌کند تا از افزایش بیش از حد تعداد epoch و ایجاد overfitting جلوگیری کنیم.اینکه در هر epoch داده ها در دسته های چند تایی به ماشین نشان داده شود را با batch_size مشخص می کنیم. پیدا کردن بهترین batch_size تاثیر زیادی بر سرعت و کیفیت آموزش مدل دارد و طبیعتا هر چه بزرگتر باشد بهتر است. اما به علت محدودیت هایی که برای حافظه داریم در خیلی از موارد مخصوصا در پروژه های بزرگ امکان این کار وجود ندارد. در داده‌های متنوع batch_size بزرگتر ممکن است منجر به از دست دادن تطبیق بهتر مدل با داده‌ها شود که منجر به overfitting یا underfitting می شود. برای جلوگیری از آن با روش آزمون و خطا بهترین batch_size را پیدا کنیم یا می توانیم با روش سیستماتیک و اصولی تر مانند جستجوی شبکه ای (Grid Search) یا به روش Validation Data.در سال 2018 “Yann LeCun” در توییت معروفی نوشت :&quot;آموزش با دسته‌های کوچک بزرگ برای سلامتی شما ضرر دارد. بیشتر از همه، برای خطای آزمون شما ضرر دارد. دوستان، به دوستان خود اجازه ندهید از دسته‌های بزرگتر از 32استفاده کنند.&quot;به عبارتی به گفته “Yann LeCun”  بهترین batch_size = 32 است.در کد زیر fit کردن مدل را مشاهده می کنید :# Fit the modelhistory = model.fit(X_train, y_train, epochs=50, batch_size=32, validation_split=0.2)فاز تست (Test Phase) model.evaluationبرای ارزیابی دقت بعد از آموزش مدل از model.evaluate استفاده می کنیم :# Evaluate the modeltest_loss, test_acc = model.evaluate(X_test, y_test)print(&#039;Test accuracy:&#039;, test_acc)در کد های بالا مدل را بدون تنظیم خاصی برای  Hyperparametersها train کردیم. متد هایی مثل BatchNormalization و  Early Stopping یا L2 regularization بعد از اجرای این کد و و تکمیل  آموزش مدل Test accuracy: 0.98879998 است. البته این دقت به دست آمده در داده های Train است و هنوز دقت مدل را با داده واقعی نمی دانیم برای اینکه بفهمیم مدل به چه صورت عمل کرده و اینکه overfitting رخ داده است یا خیر از نمودار های  Loss Curve و Accuracy Curve استفاده می کنیم که با استفاده از کتابخانه Matplotlib با کد زیر می توان آنها را رسم کرد :import matplotlib.pyplot as plt# Create subplots with smaller figure sizefig, axs = plt.subplots(2, 1, figsize=(7, 9))# Plotting the loss curveaxs[0].plot(history.history[&#039;loss&#039;], label=&#039;Training Loss&#039;)axs[0].plot(history.history[&#039;val_loss&#039;], label=&#039;Validation Loss&#039;)axs[0].set_title(&#039;Loss Curve&#039;)axs[0].set_xlabel(&#039;Epochs&#039;)axs[0].set_ylabel(&#039;Loss&#039;)axs[0].legend()# Plotting the accuracy curveaxs[1].plot(history.history[&#039;accuracy&#039;], label=&#039;Training Accuracy&#039;)axs[1].plot(history.history[&#039;val_accuracy&#039;], label=&#039;Validation Accuracy&#039;)axs[1].set_title(&#039;Accuracy Curve&#039;)axs[1].set_xlabel(&#039;Epochs&#039;)axs[1].set_ylabel(&#039;Accuracy&#039;)axs[1].legend()plt.tight_layout()plt.show()نتیجه این کد نمودار زیر است که نشان دهنده overfitting است :این تصویر با کد بالا در پایتون توسط من ایجاد شده استهمانطور که در تصویر می بینید مدل به احتمال قوی overfitting شده. اگر میان Training accuracy و Validation accuracy تفاوت چندانی نباشد، یعنی به هم نزدیک تر باشند نشان می‌دهد که مدل overfitting نداشته است. اما اگر تفاوت قابل توجهی وجود داشته باشد یا اگر Validation accuracy شروع به کاهش کرد. در حالی که Training accuracy افزایش می‌یابد، مشوک به overfitting است. خطوط accuracy باید صاف تر با نوسانات کمتر باشد هر چه نوسانات بیشتر باشد نشان از عدم ثبات در عملکرد مدل است. نشانه overfitting مدل باشد.حال برای جلوگیری از overfitting باید راهکارهایی ارائه کرد. در قسمت بعد به صورت کامل و در عمل خواهیم دید که اگر overfitting رخ دهد که در بیشتر موارد رخ می دهد مخصوصا اگر مانند مثال بالا از متدهایی برای کاهش overfitting یا بیشتر کردن accuracy استفاده نکنیم چون که به احتمال قوی مدل خود به خود به سمت حفظ کردن داده ها و پایین بودن accuracy خواهد رفت. اصولا مدل های شبکه عصبی تمایل زیادی به حفظ کردن دارند و معمولا در مرحله آموزش داده ها را بسیار خوب یاد می گیرند و تمایل دارند آنها را حفظ کنند.بنابراین در قسمت بعد کامل و شهودی در دفعات مختلف Hyperparameter tuning با مقایسه نمودارهای accuracy انجام خواهیم داد. با من همراه باشید. قصه از اینجا جذاب تر میشه...همه مشکلات از overfitting است !!!!!برای اینکه بتوانیم مدلی را که می سازیم بهبود ببخشیم باید Hyperparameter tuning کنیم. یعنی متد هایی که برای مسئله داریم را با مقدارهای مختلف تست کنیم که Hyperparameter مناسبی را بیابیم که accuracy مدل را افزایش و از overfittingجلوگیری کند. بنابراین تصمیم گرفتم که Hyperparameter tuning را برای متد هایی مانند Early Stopping ,Dropout, batch_size ,learning_rate, L2 regularization را با مقدارهای مختلف تست کنم و اونها رو مستند سازی کنم. کد زیر بهبود یافته کدی است که در بالا برای ساختن مدل دیدیم و حاوی پارامترهایی است که برای Hyperparameter tuning لازم است :from tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropoutfrom tensorflow.keras.layers import BatchNormalizationfromtensorflow.keras.regularizers import l2# Create the modelmodel = Sequential()# Convolutional layersmodel.add(Conv2D(32, (3, 3), activation=&#039;relu&#039;, kernel_regularizer=l2(0.01), input_shape=(28, 28, 1)))model.add(MaxPooling2D((2, 2)))  # Max pooling layer# Adding Batch Normalization layer with momentum and epsilon settingsmodel.add(BatchNormalization(momentum=0.9, epsilon=1e-5))model.add(Conv2D(64, (3, 3), activation=&#039;relu&#039;, kernel_regularizer=l2(0.01)))  # Convolutional layermodel.add(MaxPooling2D((2, 2)))  # Max pooling layermodel.add(Conv2D(64, (3, 3), activation=&#039;relu&#039;, kernel_regularizer=l2(0.01)))  # Convolutional layermodel.add(Flatten())  # Flatten layer to convert 2D matrix to a vector# Fully connected layersmodel.add(Dense(64, activation=&#039;relu&#039;, kernel_regularizer=l2(0.01)))  # Dense (fully connected) layermodel.add(Dropout(0.30))  # Dropout layer for regularizationmodel.add(Dense(10, activation=&#039;softmax&#039;))  # Output layer with softmax activation for classification# Display model summarymodel.summary()  # Print model architecture and parametersبعد از اجرای این کد می توانیم summary از معماری ای که با CNN ساخته ایم را مشاهده کنیم. تعداد پارامترهای مدل و اینکه درهر لایه چه تعداد پارامتر داریم و اطلاعات ارزشمند دیگر. بعد از اجرای این کد مرحله compile.model را به همان صورت که در بالا ذکر شد انجام می دهیم.در مرحله بعد می خواهیم Early Stopping را به مدل اضافه کنیم. کد زیر را ببینید:# Importing the EarlyStopping callback from TensorFlow Kerasfrom tensorflow.keras.callbacks import EarlyStopping# Creating an EarlyStopping callback object with a patience of 5 epochses = EarlyStopping(patience=5)دراین کد Stopping Early را از کتابخانه tensorflow.keras.callbacks فراخوانی می کنیم و مقدار صبر (patience) برابر با 5 قرار می دهیم . callbacks این امکان به مدل را می‌دهد که در صورتی که دقت آزمایشی (validation accuracy) بعد از 5 epoch افزایش نیابد، فرآیند آموزش متوقف شود. بهترین مقدار epochs را می توان به صورت رندوم تست مشخص کرد. اما روش اصولی آن Early Stopping است. روش Early Stopping به مدل اجازه می‌دهد تا در هر epoch ، عملکرد خود را بر روی یک مجموعه جداگانه از داده‌ها مانند داده‌های اعتبارسنجی(validation data)  ارزیابی کند.حال مرحله model.fit را با پارامترهای جدید انجام می دهیم کد جدید آن را قرار می دهم به پارامتر callbacks=[es] دقت کنید که به آن اضافه شده اگر به سمت overfitting برود آن را متوقف می کند.# Fit the modelhistory = model.fit(X_train, y_train, epochs=50, batch_size=32, validation_split=0.2 , callbacks=[es])بعد از اجرای این کد model.evaluation را انجام می دهیم تا accuracy مدل را بیابیم. توجه کنید که این فقط accuracy در داده های آموزش را نشان می دهد. یعنی دقت مدل روی داده های تستی که مدل هنوز ندیده است را نشان نمی دهد. در واقع با این کار بیشتر می خواهم که طریقه Hyperparameter tuning رو تمرین کنیم و بفهمیم وقتی میگوییم مدلی overfitting شده به چه معناست.جلوگیری از overfitting !؟!؟ چگونه ؟؟برای جلوگیری از overfitting باید راهکارهایی ارائه کرد. لایه BatchNormalization تغییرات وزن‌ها را کنترل می‌کند و موجب جلوگیری از انفجار گرادیان و حتی Overfitting و در در نتیجه سرعت بخشیدن به فرایند آموزش مدل شود. البته ممکن است استفاده از BatchNormalization در برخی موارد باعث افزایش زمان آموزش شود، زیرا این لایه‌ها محاسبات بیشتری را نیاز دارند. همچنین، استفاده از BatchNormalization در برخی معماری‌های شبکه مانند شبکه‌های بازگشتی (RNNs)  به ‌دلیل ویژگی‌های خاص آن‌ها ممکن است موجب مشکل شود.همانطور که می دانیم L2 regularization  مانند یک ترم جریمه به تابع هدف است که در زمان Train مدل افزوده می شود وقتی l2 را به مدل اضافه می کنیم در واقع ، وزن‌های آن لایه با جمع مقدار جریمه L2 ضرب می‌شوند. این باعث می‌شود وزن‌ها کوچک‌تر شوند و از overfitting شدن مدل جلوگیری کنند. که به وزن دهی غیر منظم (weight decay) هم شناخته می شود. اما اگر l2 خیلی بزرگ شود می تواند منجر به underfitting شود چرا که یادگیری Training Data مدل کاهش می باید بنابرای مقدار l2 باید بسیار دقیق و حساب شده باشد.در ادامه جدولی را می بینید که حاوی پارامترها accuracy هر کدام از آنها ست. تمام داده های این جدول کاملا تست شده هستند و با کدی که در ادامه می بینید به دست آمده اند برای تهیه این جدول بارها و بارها مدل از نو راه شده است.نکته بسیار بسیار مهم : تمام داده های این جدول با استفاده از cpu ترین شده اند این کار را به این خاطر انجام دادم که بتوانیم تفاوت ترین شدن با cpu و gpu را متوجه شویم. اگر داده ها را در همان معماری جایگرین کنید و با gpu ترین کنید احتمالا نتایج مقداری متفاوت خواهند بود و این نکته بسیار مهم است حتی اگر داده ها را با cpu هم ترین کنید بازهم ممکن است نتایج متفاوت باشد. چرا که عامل هایی مثل تصادفی بودن فرایند آموزش ( بخصوص اگر از یک مدل تصادفی Deep Neural Networks (DNNs) استفاده کنیم. در DNNs ها آموزش از وزن‌های تصادفی آغاز می شود) و شرایط محیطی (میزان اشباع شدن GPU و CPU می‌تواند به تفاوت در نتایج منجر شود) به نتایج متفاوتی منجر می شود. این کارا به این خاطر انجام دادم که این مسئله را به صورت شهودی ببینیم و فراموش نکنیم.این جدول با پرامترهای مختلف درست شده و نمودارهاییی که در آینده میبینید مطابق با داده های این جدول است ز جدول بالا برای ترین کردن مدل با Hyperparameter tuning متد ها برای رسم نمودارهای مختلف استفاده می کنیم تا بتوانیم تفاوت های آنها را ببینیم. با استفاده از این نمودار ها و مقایسه آنها می فهمیم که تنظیم درست حتی یک Hyperparameter چقدر می تواند در بهبود عملکرد یک مدل تاثیر گذار باشد. و در واقع با مشاهده آنها می توانیم ببینیم که تاثیر بعضی از متد ها نسبت به دیگری بیشتر است. در قسمت بعد به بررسی و مقایسه نمودارهایی که با استفاده از جدول بالا به دست آمده است می پردازیم.نمودارهامقایسه 4 نمودار سری A را ببینید. در نمودار های زیر با پارامترهای batch_size=32  و learning_rate=0.001 و Dropout (0.25, 0.30, 0.40, 0.50) ترین شده اند. خیلی خوب به نمودارهای سری A نگاه کنید. تقربیا در همه آنها دقت در حال کاهش است. اعوجاج های زیادی در نمودارهای آنها به وضوح می توان دید.به نمودارها توجه کنید در بسیاری از نقاط همدیگر را قطع کرده اند ، قطع شدن نمودارهای آموزش و ارزیابی به معنای عدم تطابق میان داده‌های Training و Validation است و نشان می‌دهد که مدل به طور نامناسبی تنظیم شده است. این معمولا به مشکلاتی مانند overfitting یا underfitting اشاره دارد.اگر Training Accuracy درحال کاهش و ادامه دار باشد در حالی که Validation Accuracy شروع به افزایش یا توقف کند، این نشان دهنده overfitting است. برعکس، اگر هر دو دقت آموزش و اعتبار به طور پایدار کاهش یابند یا در سطح‌های مشابهی ثابت شوند، این نشان دهنده این است که مدل به طور مؤثری یاد گرفته است. اگر فاصله بین دقت آموزش و اعتبار زیاد باشد ممکن است نشان دهنده overfitting باشد. در بهترین حالت، می‌خواهیم دقت Training و Validation را به طور پایدار افزایش دهیم یا در سطح‌های مشابهی ثابت شویم.نمودارهای خطی مجموعه A (این نمودارها با استفاده از داده‌های جدول بالا کشیده شده‌اند).حال مقایسه 4 نمودار سری B را ببینید در نمودار های زیر batch_size=64  و learning_rate=0.01 اما Dropout ها مانند مدل هایی است که نمودارهایشان را در بالا می بیند.نمودارهای خطی مجموعه B (این نمودارها با استفاده از داده‌های جدول بالا کشیده شده‌اند).آیا این تفاوت بسیار زیاد را می بینید؟ همانطور که می بینید در نحوه یادگیری مدل بهبودهایی حاصل شده اعوجاج ها کمتر شده است. در سری B تجمیع داده‌ها و اعتبار روی نمودار بهتر شده است. تجمیع داده‌ها به معنای ثبات یا استوار شدن نمودارها در طول دوره‌های آموزش است. تجمع زمانی رخ می‌دهد که نمودارها دیگر تغییرات معناداری در طول دوره‌ها نشان نمی‌دهند. در واقع مقدار Loss یا Accuracy (در صورت استفاده از نمودار دقت) دیگر با تغییرات کوچک در طول دوره‌ها تغییر نمی‌کند. این مرحله معمولاً به عنوان پایدارسازی مدل شناخته می‌شود، زیرا مدل دیگر اطلاعات جدیدی از داده‌ها نمی‌گیرد و به یک حالت ثابت و بهینه می‌رسد. در نمودارهای لرنینگ (Learning curves)، تجمع معمولاً به وضوح قابل مشاهده است؛ زیرا خطوط یا منحنی‌ها کمتر جابجا می‌شوند و به سمت یک نقطه ثابت متمایل می‌شوند.به نمودارهای سری B دقت کنید. برخورد نمودار های Training Accuracy و Validation Accuracy بسیار کمتر و می توان گفت تقربا برخوردی با هم ندارند. همچنین یادگیری مدل ها با epoch های کمتری انجام شده است. و این یعنی بالا رفتن سرعت محاسبات و سرعت یادگیری مدل. اگر نمودار ها خیلی زود به یک دقت قابل قبول برسند و با افزایش epochs بهبودی در آنها مشاهده نشود نشان می دهد که نیاز داریم مجددا Hyperparameter tuning کنیم. نمودار های بعدی قدرت L2 regularization را خواهیم دید و به بررسی و مقایسه نمودارهای آن خواهیم پرداخت.در این قسمت می خواهیم نمودارهای سریC  را بررسی کنیم. در این نمودار ها مقدار L2=0.01 و learning_rate = 0.01 برای Dropout=(0.30, 0.50) و batch_size=32 و اونها رو با زمانیکه مقدار L2=0.001 هست مقایسه کرده ایم به نمودارها دقت کنید تا تفاوت ها را کامل درک کنید. نمودار اول با Dropout=0.30 است. خوب به نمودار دقت کنید.نمودارهای خطی مجموعه C (این نمودارهای مقایسه‌ای با استفاده از داده‌های جدول بالا رسم شده‌اند).مقایسه دوم که در پایین می خواهیم ببینیم batch_size=32 و Dropout=0.50 و فقط مقادیر l2 متفاوت است. میخواهیم نمودارهای A4.32 را با C2.32 که فقط مقدار L2آن را بزرگتر انتخاب کرده ایم مقایسه کنیم. خوب توجه کنید.نمودارهای خطی مجموعه C (این نمودارهای مقایسه‌ای با استفاده از داده‌های جدول بالا رسم شده‌اند).واوو!! تفاوت رو ببینید! در واقع وقتی مقدار l2 رو بزرگتر کردیم دیگر overfitting  رخ نداد الان داریم underfitting میبینیم. اگرمقدار L2 regularization بسیار بالا باشد، ممکن است باعث کاهش کارایی مدل و ایجاد underfitting شود. مخصوصا در این مثال که Dropout=0.50 می باشد و این مقدار زیاد l2 هم مزید بر علت شد و underfitting رخ داد.در قسمت بعد به طریقه ذخیره مدلی که آموزش داده ایم و تست اون با داده های تست می پردازیم.تست نهاییبعد از Train Phase نوبت به تست نهایی می رسد تا عملکرد مدل روی داده های تستی که ندیده است ببینیم.ابتدا باید مدل را ذخیره کنیم من از colab.research.google برای ساختن مدل استفاده کردم بخاطر همین مسیری را برای ذخیره مدل انتخاب می کنم به طور مثال :# Define the path to save the modelmodel_path = &amp;quot/content/drive/MyDrive/Colab Notebooks/trained_model.h5&amp;quot# Save the trained modelmodel.save(model_path)print(&amp;quotModel saved at:&amp;quot, model_path)بعد از اجرای این کد و اطمینان از ذخیره شدن مدل در گوگل درایو فقط کافی است برای استفاده آن را از مسیر خودش صدا بزنیم :# Load the trained modelNew_model = tf.keras.models.load_model(&amp;quot/content/drive/MyDrive/Colab Notebooks/trained_model.h5&amp;quot)سپس برای پیش بینی در کد زیر از مدل استفاده می کنیم. منظور 10000 داده تست MNIST  است که در در زمان لود کردن دیتا ست دیدیم:predictions = New_model.predict([X_test])print(predictions)حالا کافی ست با کد زیر از مدل بخواهیم که آن را نشان دهد بعد از اجرای شماره عددی که در ایندکس 1 هست را می توانیم ببینیم:print(np.argmax(predictions[1]))با کد زیر عدد مورد نظر را مشاهده خواهیم کردplt.imshow(X_test[1])plt.show()در این مقاله مدلی را با داده MNIST با استفاده از CNN ساختیم . با روند ساختن مدل و مراحل مختلف آن آشنا شدیم. همانطور که دیدیم ممکن است درصد validation accuracy مدل های مختلف تفاوت چندانی نداشته باشد. اما عملکرد آنها با داده تست می تواند بسیار متفاوت باشد. آموختیم که با تنظیم پارامترها همانطور که در بخش Normalization این مقاله ذکر شد. می توانیم زمان و مقدار محاسبات را کاهش دهیم. دیدیم که  تعداد epochs برای یادگیری با دو مدل مختلف به چه صورت است و همچنین هدف از بررسی و رسم نمودار مقایسه ای این بود که هم به اهمیت Hyperparameters پی ببریم و هم با دیدن و تحلیل نمودار های مختلف با پارامترهای مختلف بتوانیم چگونگی رخ دادن overfitting یا underfitting را متوجه شویم. در واقع overfitting ممکن است همیشه در مدل به وجود بیاید و رفع این مشکل باعث تفاوت عملکرد افراد می شود. همچنین  راهکارهایی برای رفع آن ارائه دادیم. در واقع پارامترهای بسیار مهم مثل L2 regularization و Dropout خیلی می توانند در کارایی و دقت مدل مهم باشند و تغییر جزیی در هرکدام می تواند پیامدهای بسیار منفی یا مثبت داشته باشد. برای ساختن یک مدل به تمرین و دقت فراوان نیاز داریم برای همین مدل در این مقاله و پی بردن به این مراحل نزدیک به 20 بار با تنظیم های مختلف Hyperparameters و اضافه و کم کردن الگو های جدید به نتیجه نزدیک به مطلوبی که در پایان ذکر شد رسیدم .  ممنون که با من همراه بودید.خوشحال میشم که نظرتون رو راجع به این مقاله با من در ارتباط بزارید.ممنون از شما که در این سفر به دنیای Deeps با من همراه بودید.این مقاله را به زبان انگلیسی  می توانید در Medium در صفحه شخصی من ببینید.مقالات دیگر من در Medium  را می توانید مشاهده کنید.عمیق‌تر و عمیق‌تر در عمق یادگیری عمیق و شبکه‌های عصبی مصنوعی # پارت 3 : انواع مهم ترین معماری های شبکه های عصبی عمیق (RNN / LSTM / CNN)استخراج داده با پایتون – راهنمای جامع برای بهره‌برداری از API‌هاامیدوارم از مطالب لذت برده باشید .</description>
                <category>محمد جواد نجادی</category>
                <author>محمد جواد نجادی</author>
                <pubDate>Sat, 16 Mar 2024 09:50:53 +0330</pubDate>
            </item>
                    <item>
                <title>عمیق‌تر و عمیق‌تر در عمق یادگیری عمیق و شبکه‌های عصبی مصنوعی</title>
                <link>https://virgool.io/codenevis/%D8%B9%D9%85%DB%8C%D9%82-%D8%AA%D8%B1-%D9%88-%D8%B9%D9%85%DB%8C%D9%82-%D8%AA%D8%B1-%D8%AF%D8%B1-%D8%B9%D9%85%D9%82-%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D8%B9%D9%85%DB%8C%D9%82-%D9%88-%D8%B4%D8%A8%DA%A9%D9%87-%D9%87%D8%A7%DB%8C-%D8%B9%D8%B5%D8%A8%DB%8C-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-hh2xihk1ge1n</link>
                <description># پارت 3 : انواع مهم ترین معماری های شبکه های عصبی عمیق (RNN / LSTM / CNN)باید به لایه های عمیق تری نفوذ کنیم!&quot;معماری دنیای جدید&quot;این تصویر توسط Ideogram خلق شده است این مقاله در سه پارت کامل می شود که به شرح زیر است :پارت 1 : تاریخچه هوش مصنوعی و چگونگی عملکرد شبکه های عصبی سادهپارت 2 : نحوه یادگیری در شبکه های عصبی عمیق ( انواع یادگیری و توابع فعالساز و پس انتشار( backpropagation)پارت 3 : انواع مهم ترین معماری های شبکه های عصبی عمیق (RNN / LSTM / CNN)که در این 3 پارت به این موضوعات خواهیم پرداخت که شبکه های عصبی مصنوعی چیه ؟ چطور کار میکند ؟ یادگیری عمیق چیه ؟ در شبکه های عمیق یادگیری چطور انجام می شه و انواع روش های یادگیری شبکه چیه ؟ انواع معماری های اصلی شبکه های عمیق چی هست ؟ آیا واقعا کارکرد شبکه های عصبی مصنوعی مانند نورون های شبکه عصبی انسان است یا فقط الهامی از آن هست ؟ کاربردهای شبکه عصبی چیه ؟ معایبی هم داره ؟مرور مطالب پیشین و پیش رودر پارت 2 تعدادی از مهم ترین توابع فعالسازی و کارکرد هاشون همچنین مزایا و معایب و تفاوت هایی که دارن رو بررسی کردیم و یکی از مهم ترین الگوریتم های کاربردی یادگیری عمیق یعنی پس انتشار که به جرات می تونیم بگیم بدون اون یادگیری وجود نداشت چرا که در بسیاری از تسک ها بدون آپدیت کردن وزن ها امکان به وجود اومدن کارکرد های امروزه شبکه های عمیق وجود نداشت.در پارت 3 میخواهیم به معماری های شبکه های عصبی مصنوعی بپردازیم. می توانیم بگوییم از مهم ترین کارهای ساختن شبکه های عصبی انتخاب نوع معماری هست. در گذشته معماری هایی که داشتیم بیشتر برای تسک های خاص بود مثلا CNN در زمان مطرح شدن تنها برای پردازش تصویر مطرح شد اما امروزه می دانیم که از این نوع معماری برای انجام تسک های دیگر هم می توان بهره برد. معماری قدرتمند RNN  ها با گیت هایی که دارد رو بررسی می کنیم و تفاوت هایی که با LSTM داره. LSTM در واقع حافظه کوتاه مدت - بلند در مدل های زبانی است. مثلا ChatGPT که بعد از چندین پرامپت (به سوالاتی که از ChatGPT میپرسیم پرامپت میگن) اگر از اون راجع به پرامپت های قبلی سوال کنیم مطالب قبلی را به یاد می آورد. معماری CNN ها رو بررسی می کنیم و کارکرد هایی که داره از تشخیص چهره تا تولید عکس و پردازش تصویر و ماشین های خودران تا... که همه به کمک CNN ها امکان پذیر هستند. میخوایم بفهمیم که padding چیه ؟ لایه های کانولوشنی چطور کار میکنن ؟ pooling  ها رو بررسی کنیم و اینکه چه تفاوت هایی دارن ؟ لایه های کاملا متصل (FC) ها رو بررسی خواهیم کرد. من بسیار هیجان زده هستم که این ها رو بدونم شما چطور ؟ مثل من هستید؟ بریم داخل...!معماری شبکه های عصبی (Neural network architecture)معماری شبکه های عصبی نحوه کارکرد این شبکه را مشخص می کند. عامل بسیار مهمی برای انجام تسک های مختلف و کاربردهای بیشتر شبکه های عصبی و عمدتا در دو رویکرد یعنی شبکه های عصبی پیشخور(Feedforward Network)  و شبکه های عصبی بازخورد(Feedforward).  که در این مقاله پس از تجزیه و تحلیل کامل هر کدام، مقایسه ای عمیق از هر دو معماری ارائه می دهیم و از طریق برخی موارد استفاده هر ساختار شبکه عصبی را مقایسه می کنیم.  برای پیاده سازی شبکه های عمیق از دو رویکرد sequential and Functional استفاده می شود در این بخش می خواهیم نحوه ساخت و رویکرد های معماری شبکه را بررسی کنیم. با من همراه باشید .روشهای sequential and Functional in Deep learningدر Deep Learning، دو روش متفاوت برای معماری مدل های شبکه عصبی وجود دارد. sequential and Functional. استفاده از هر روش بستگی به نوع مسئله و پیچیدگی مدل و نیاز های ما می تواند باشد. هر دو روش sequential and Functional در فریم ورک های Keras و PyTorch قابل اجرا هستند.به صورت ترکیبی هم می توانیم از هر دو روش استفاده کنیم. یعنی بخشی از مدل را با sequential بسازیم و بخشی دیگر را با روش Functional. به شرطی که ساختار مدل شما به درستی تعریف شده باشد و ورودی‌ ها و خروجی‌های هر بخش با هم سازگار باشند. مثلا در سیستم های تشخیص چهره بخشی از مدل که برای پردازش تصاویر با شبکه های کتنولوشنی (CNN) به روش Sequential ساخته و در بخش دیگر از شبکه عصبی بازگشتی (Recurrent Neural Network - RNN)  برای تحلیل دنباله ‌ها از ویژگی‌ های تشخیص چهره با روش Functional طراحی کنید.روش (The sequential model)ما مدل را لایه به لایه ایجاد می کنیم. مدل Sequential به صورت خطی و ترتیبی از لایه‌ها ساخته می‌شوند. یعنی خروجی یک لایه به عنوان ورودی لایه بعدی است، بدون اینکه ارتباطی میان لایه‌های غیرمجاوروجود داشته باشد. اما اشتراک گذاری لایه ها یا انشعاب لایه ها مجاز نیست ( در برخی مدل های شبکه که چند تسک را همزمان انجام می دهند انشعاب لایه ها را داریم ) همچنین، نمی توانید چندین ورودی یا خروجی داشته باشید.در Keras،  برای پیاده سازی مدل Sequential ابتدا کتابخانه های مورد نیاز را فراخوانی می کنیم و سپس یک مدل از Sequential را می سازیم و با استفاده از متد add() لایه ها را یکی پس از دیگری به مدل اضافه می کنیم. قطعه کد زیر یک پیاده سازی ساده از مدل Sequential است :#Import the librariesfrom keras.models import Sequentialfrom keras.layers import Dense# Create a Sequential modelmodel = Sequential()# Add layers to the modelmodel.add(Dense(units=64, activation=&#039;relu&#039;, input_shape=(100,)))model.add(Dense(units=64, activation=&#039;relu&#039;))model.add(Dense(units=10, activation=&#039;softmax&#039;))# summary modelmodel.summary()این کد یک مدل Sequential با سه لایه ایجاد می‌کند : دو لایه dense با توابع فعال‌سازی ReLU و یک لایه خروجی dense با تابع فعال‌سازی softmax.روش (The functional model)در Keras، Functional API راهی برای تعریف مدل‌های یادگیری عمیق پیچیده‌ تراست که دارای ورودی‌های متعدد، خروجی‌های متعدد یا لایه‌های مشترک هستند. Functional API روشی انعطاف ‌پذیرتر و قدرتمند تر برای تعریف مدل‌ها در مقایسه با مدل Sequential است که فقط پشته ‌های خطی لایه‌ها را پشتیبانی می‌کند. در یک functional models ، همچنین می ‌توانید یک ترتیب خطی از لایه‌ ها را با اتصال آن‌ها به صورت پشت ‌سرهم ایجاد کنید، اما شما می توانید معماری‌ های بیشتری با ادغام لایه‌ها ایجاد کنید. به این معنا که در حالی که لایه‌ ها به صورت خطی با یکدیگر اتصال می‌ یابند، معماری کلی مدل ممکن است خطی نباشد و شامل لایه‌های مختلف باشد. تفاوت اصلی بین این دو مدل در نحوه اتصال لایه ها و انعطاف پذیری آنهاست.روش Functional API می‌تواند مدل‌ هایی با معماری غیرخطی، لایه‌های مشترک و حتی ورودی یا خروجی‌های متعدد را مدیریت کند. ایده اصلی پشت Functional API این است که هر لایه را به عنوان یک شی مجزا تعریف کنیم و سپس با تعریف صریح ورودی و خروجی هر لایه، لایه ها را به هم متصل کنیم. شبه کد زیر ابتدا لایه‌ی ورودی با استفاده از Input تعریف می‌شود. سپس با استفاده از Dense، یک لایه کاملاً متصل (Fully Connected) به عنوان خروجی تعریف می‌شود و با استفاده از Model، مدل با ورودی و خروجی مشخص شده ساخته می‌شود. در نهایت، با فراخوانی summary()، خلاصه‌ای از معماری مدل چاپ می‌شود. یک پیاده سازی ساده از مدل Functional API است :#Import the librariesfrom keras.layers import Input, Densefrom keras.models import Model# The definition of input and output layersinput_layer = Input(shape=(784,))output_layer = Dense(10, activation=&#039;softmax&#039;)(input_layer)# Creating the modelmodel = Model(inputs=input_layer, outputs=output_layer)# summary modelmodel.summary()در ادامه به بررسی معماری های شگفت انگیز شبکه های عصبی می پردازیم و کاربردها و مزایا و معایب آنها را بررسی خواهیم کرد. بیایید با هم این مرزها رو بشکافیم و به قلمرو اونها سفر کنیم آماده اید ؟ بیایید بریم .شبکه عصبی پیشخور(Feedforward Network)این شبکه غیر تکراری است. در واقع نقطه مقابل شبکه های عصبی بازگشتی است . شبکه‌های عصبی فید فوروارد عمدتاً برای یادگیری نظارت شده در مواردی استفاده می‌شوند که داده‌هایی که باید آموخته شوند نه متوالی و نه وابسته به زمان هستند.یک شبکه عصبی پیشخور از سه بخش اصلی تشکیل شده است: یک لایه ورودی، یک یا چند لایه پنهان (در صورت وجود ) و یک لایه خروجی. هر لایه اطلاعات را پردازش کرده و به لایه بعدی منتقل میکند در واقع می توان گفت که سیگنال فقط می تواند در یک جهت جریان پیدا کند. در چنین شبکه ای حلقه ها وجود ندارند و لایه خروجی به طور متمایز از لایه های دیگر عمل می کند یعنی تابع بازگشتی در آن وجود ندارد.انواع شبکه عصبی پیشخور(Feedforward)انواعی از شبکه های عصبی پیشخوروجود دارد که هر کدام دارای ویژگی و معماری خاصی برای کاربردهای مختلف دارند برخی از رایج ترین انواع آن عبارتند از :شبکه عصبی پیشخور تک لایه ( Single layer feedforward network) :منبعساده ترین نوع شبکه های عصبی پیشخور(feedforward network) پرسپترون (perceptron) است بنابراین، یک perceptron فقط یک لایه ورودی و یک لایه خروجی دارد. واحدهای خروجی مستقیماً از مجموع حاصل ضرب وزن (W) آنها با واحدهای ورودی مربوطه به اضافه بایاس (bias) محاسبه می شوند. این شبکه‌ها تنها می‌توانند روابط خطی بین داده‌ها را یاد بگیرند و به داده‌های نادرست حساس هستند و بیشتر برای کارهای طبقه بندی ساده قابل استفاده است.شبکه عصبی پیشخور چند لایه (Multilayer feedforward network) :منبع این نوع شبکه دارای یک یا چند لایه پنهان بین لایه های ورودی و خروجی است. مفهوم آن این است که ANN پیشخور دارای بیش از یک لایه وزنی (لایه پنهان) است . لایه‌های مخفی به شبکه اجازه می‌دهد تا راه‌های پیچیده‌تری برای نمایش داده‌های دریافتی خود بیاموزد، که باعث می‌شود مشکلات پیچیده‌تر را حل کند.شبکه های عصبی بازخورد (Feedback Network)منبع شبکه های عصبی بازخورد همانطور که از نام آن پیداست برخلاف شبکه های عصبی دارای مسیرهای بازخورد است. که به سیگنال ها اجازه می دهد از حلقه ها برای حرکت در هر دو جهت استفاده کنند. اتصالات عصبی را می توان به هر طریقی ایجاد کرد این شبکه ها می توانند مقداری پیچیده تر باشند زیرا سیگنالها دائما در حال رفت و برگشت هستند .هدف شبکه های عصبی بازخورد رسیدن به حالت تعادل است. حالت تعادل تا زمانی ادامه میابد که تغییری در ورودی ایجاد نشود. شبکه های پیشخور نیاز به &quot;اندازه گیری اختلال&quot; دارند در حالی که در شبکه های بازخورد مورد نیاز نیست. مهم ترین جز در شبکه های عصبی پیشخور ورودی داده است در حالیکه در شبکه های عصبی بازخورد خروجی مهم ترین جز است. چون که مقدار خروجی دوباره به عنوان ورودی به شبکه وارد می شود و وزن و بایاس جدید مشخص می شود تا خروجی جدید مشخص شود و این چرخه تا زمانیکه نتیجه مطلوب حاصل شود ادامه پیدا میکند.شبکه عصبی بازخورد میتواند شامل انوع مختلفی از توپولوژی ها باشد که هر کدام با استفاده از حلقه ها می توانند مسائل مختلف را به خوبی حل کنند .1. شبکه های عصبی مکرر (Recurrent neural network (RNN))منبع یکی از انواع مهم و پایه ای شبکه های عصبی مصنوعی است که جهت جریان داده ها درآن به صورت بازخورد است. در واقع یک شبکه عصبی دو طرفه است . به عبارت دیگر داده ها به شبکه وارد می شود بعد از پردازش داده ها و اعمال وزن ها خروجی تولید شده از طریق پس انتشار مجدد برای تنظیم وزن های جدید به شبکه باز می گردد. ما می توانیم از RNN هایی که با داده های زمانی کار می کنند برای پردازش ویدئو و پردازش صدا مثلا در خودرو های خودران استفاده کنیم . مهم ترین مشکلی که RNN ها می توانند داشته باشند مشکل گرادیان محو شونده (Vanishing Gradient Problem) که ممکن است در زمان آموزش به وجود بیاید. این مشکل معمولاً در شبکه‌های RNNs ساده ای که با استفاده از بازگشت به عقب در زمان (BPTT) آموزش داده می‌شوند وجود دارد.در واقع، در هنگام عمیق‌تر شدن شبکه، در فرآیند پس انتشار گرادیان (Backpropagation)، گرادیان‌ها (مشتقات جزئی) که از لایه‌های بالاتر به لایه‌های پایین‌تر منتقل می‌شوند، به سمت صفر میل می‌کنند و در نتیجه وزن‌هایلایه‌های پایین‌ تر بروزرسانی نمی ‌شوند که باعث می ‌شود این لایه‌ها اطلاعات کمتری از ورودی‌ها به دست بیاورند و باعث مشکل در یادگیری و حفظ اطلاعات بر روی دنباله‌های بلند می‌شود.شبکه های بازشگتی مکرر میتوانند انواع مختلفی داشته باشند و هر کدام برای وظیفه خاصی مورد استفاده قرار می گیرند :شبکه‌های بازگشتی ساده ((Simple RNNs :معمولا با یک لایه بازگشتی ساده ساخته می شوند ومی توانند مشکلات لحظه ای را برای مسائل کوچک حل کنند. مثلا می توانند پیش‌بینی یک حرف بعدی در یک رشته متنی یا یک عدد بعدی در یک دنباله عددی مناسب باشد . اما در طول زمان چون که فقط از یک واحد حافظه استفاده می‌کنند ممکن است با مشکل محو شوندگی (Vanishing Gradient Problem) مواجه شود .شبکه‌های بازگشتی پرسه ((Gated Recurrent Unit – GRU :مانند LSTM ها از یک ساختار پیچیده برخوردار هستند که امکان یادگیری و حفظ اطلاعات طولانی مدت را فراهم میکند. GRU ها از لحاظ محاسباتی سبک تر از LSTM ها هستند چون که برای یادگیری از دو گیت استفاده می کنند. که باعث می شود GRU ها برای آموزش و اجرا سریعتر باشند.در واقع GRU ها می توانند از حافظه طولانی مدت برای یادگیری الگوهای پیچیده در زبان ها استفاده کنند. به این دلیل است که GRU ها از دو گیت استفاده می کنند: گیت ورودی (Update Gate) تعیین می کند که چه مقدار از اطلاعات گذشته باید با اطلاعات جدید ترکیب شود. گیت خروجی (Reset Gate) تعیین می کند که چه مقدار از اطلاعات گذشته باید حفظ شود و چه مقدار باید فراموش شود. در واقع، هر دو LSTM و GRU می ‌توانند از حافظه‌های طولانی مدت برای نگه‌ داری الگوها و اطلاعات طولانی مدت استفاده کنند، اما با رویکرد‌های متفاوتی این کار را انجام می‌ دهند.همچنین LSTM ها نیز حافظه بلند مدت دارند. اما به این دلیل که دروازه فراموشی (Forget Gate) گیت فراموشی دارند و این گیت  تعیین می کند که چه مقدار از اطلاعات گذشته باید فراموش شود. و در GRU چون دروازه فراموشی (Forget Gate) ندارد می تواند حافظه بلند مدت تری داشته باشد. در واقع رویکرد و ساختار دقیق آنها متفاوت است.در برخی موارد، LSTM همچنان به عنوان یک انتخاب معمول برای وظایفی مانند مدل‌سازی زبانی یا ترجمه ماشینی مورد استفاده قرار می‌گیرد به دلیل قدرت بیشتری در نگهداری و کنترل اطلاعات دارند .مثلا Google Translate گوگل ترنسلیت از یک ترکیبی از GRU ها و LSTM ها استفاده می کند. این ترکیب به گوگل ترنسلیت اجازه می دهد تا هم از مزایای GRU ها و هم از مزایای LSTM ها بهره مند شود.شبکه‌های بازگشتی دوطرفه (Bidirectional RNNs) :از دو لایه RNN که در جهت جلو و عقب هستند استفاده می کند که این امکان را به شبکه می دهد در لحظه از اطلاعات قبلی و بعدی استفاده کند. این نوع شبکه می تواند در تفسیر متون و دنباله ها موثر باشد. روش های یادگیری در آن می تواند مانند یادگیری در شبکه های یک طرفه باشد.روش‌های یادگیری شبکه‌های بازگشتی دوطرفه (Bidirectional RNNs) می تواند سه نوع باشد .نوع اول جلو به عقب (Forward-Backward Learning) در این روش، دو لایه RNN در جهت جلو و عقب دنباله ورودی به ترتیب یاد می گیرند.نوع دوم پیش‌بینی همزمان (Simultaneous Prediction)  در این روش، خروجی شبکه از هر دو جهت (جلو و عقب) همزمان پیش‌بینی می‌شود.نوع سوم ‌پیش بینی و تصمیم‌گیری (Prediction and Decision Making) در این روش، ابتدا با استفاده از شبکه دوطرفه خروجی‌های مورد نیاز برای تصمیم‌ گیری یا پیش‌بینی محاسبه می‌شوند . در همه انواع یادگیری خروجی نهایی با ترکیب خروجی های هر دو لایه به دست می آید و این مسئله باعث می شود در وظایفی مانند ترجمه ماشینی، تحلیل احساسات و تولید متن، شبکه‌های بازگشتی دوطرفه اطلاعات قبلی و بعدی را در نظر بگیرند و نتایج بهتری ارائه دهند. و به عنوان یکی از روش‌های موثر و قدرتمند در این حوزه‌ها شناخته می‌شود.شبکه‌های بازگشتی طولانی-مدت کوتاه (Long Short-Term Memory - LSTM) :منبع این gif مقاله ای در Medium حافظه کوتاه-مدت بلند یا LSTM یک نوع معماری شبکه عصبی بازگشتی است. که برای حل مشکل گرادیان ناپدید شونده که در شبکه‌های عصبی بازگشتی سنتی رخ می‌دهد طراحی شده است. اصلی‌ترین تفاوت بین LSTM (حافظه کوتاه-مدت بلند) و RNN های سنتی (شبکه‌های عصبی بازگشتی) در توانایی آن‌ها برای گرفتن و حفظ وابستگی‌های بلندمدت در داده‌های دنباله‌ای است. LSTM این مشکل را با معرفی یک سلول حافظه با دروازه‌هایی (دروازه ورودی، دروازه فراموشی و دروازه خروجی) که جریان اطلاعات را کنترل می‌کنند، حل می‌کند. این دروازه‌ها لایه‌های شبکه عصبی هستند که تصمیم می گیرند کدام اطلاعات در سلول حافظه حذف یا ذخیره یا خروجی شوند. این معماری اجازه می‌دهد تا LSTM حافظه بلندمدت را حفظ کرده و به‌طور انتخابی آن را در طول زمان به‌روزرسانی کند.درواقعLSTM ها با استفاده از بازگشت عمیق زمانی (BPTT) آموزش داده می‌شوند، در این فرایند مدل‌ها را به گذشته &quot;عمیق&quot; تر از یک فرآیند بازگشتی ساده می‌بریم. که در دو مرحله که شامل فید فوروارد (Forward Pass) است که ، داده ورودی به مدل داده می ‌شود و خروجی محاسبه می ‌شود. این خروجی با خروجی مورد انتظار مقایسه می ‌شود تا خطا محاسبه شود.و سپس بازگشت در زمان (Backpropagation) که شبیه به مرحله عادی بازگشت به عقب است. با استفاده از قاعده زنجیره‌ای، گرادیان خطا نسبت به وزن ‌ها و پارامترهای دیگر شبکه محاسبه می‌شود. بروزرسانی پارامترها در این مرحله، وزن‌ها و سایر پارامترهای شبکه با استفاده از گرادیان‌های محاسبه شده بروزرسانی می‌شوند تا خطا کمترین مقدار شود.شبکه  LSTMها برای وابستگی‌های بلندمدت حیاتی هستند، مانند ترجمه ماشینی، تشخیص گفتار و تحلیل احساس، مناسب ‌تر هستند. LSTM   با حافظه کوتاه‌ مدت انسان برخی ویژگی‌ ها و اصول کاری مشترکی را دارند. همانطور که حافظه کوتاه‌ مدت انسان می ‌تواند اطلاعات را برای مدت زمان طولانی (مانند چند دقیقه تا چند ساعت) حفظ کند، LSTM نیز با استفاده از مکانیسم ‌های خود می ‌تواند اطلاعات را برای مدت زمان طولانی در حافظه سلولی خود نگه‌داری کند. هر دو دارای مکانیسم‌ هایی برای فراموشی و حذف اطلاعات غیرضروری هستند. مثلاً، در LSTM، دروازه فراموشی مسئول حذف اطلاعات غیرمهم از حافظه سلولی است. هر دو قادرند الگوها و وابستگی‌ های پیچیده در داده ‌های ورودی را یاد بگیرند و حفظ کنند. به همین دلیل، در برخی موارد، می‌توان از LSTM به عنوان یک مدل مفهومی برای توصیف حافظه کوتاه‌ مدت الهام گرفت.2. شبکه‌ی بازگشتی کامل (Fully recurrent network)همانطور که از نام آن مشخص است در این نوع از معماری شبکه های عصبی همه نورون ها در لایه ها کاملا به نورون های دیگر متصل اند. یعنی هر نورون هم به عنوان ورودی و هم به عنوان خروجی عمل می کند. شبکه ‌های کاملاً بازگشتی برای پردازش داده ‌های توالی با طول‌ های متفاوت مناسب هستند. مانند متن، گفتار، ترجمه ماشینی یا پیش‌ بینی سری ‌های زمانی، مانند پیش ‌بینی قیمت ‌های بازار مالی یا ترافیک. اما یکی از مشکلات اصلی گرادیان ناپایدار(Gradient Descent) است که در شبکه‌های عصبی، از جمله شبکه‌های بازگشتی کامل، مطرح است. که موجب محو یا انفجار گرادیان‌ها می‌شود.در حالت محو گرادیان، گرادیان‌ ها به سمت صفر کاهش می ‌یابند و بنابراین قدرت یادگیری شبکه کاهش می ‌یابد. در حالت انفجار گرادیان، مقادیر گرادیان‌ ها به سمت بی ‌نهایت افزایش می ‌یابند. می ‌تواند به انحراف از مسیر بهینه یا حتی منجر به خرابی شبکه شود. برای حل این مشکل، می‌توان از تکنیک‌ های بهبود گرادیان استفاده کرد. یکی از این تکنیک‌ها آموزش با نزول گرادیان برگشتی و(Backpropagation Through Time) است.مشکل دیگر FRNN ها پیچیدگی محاسباتی آنها است. تعداد زیاد ارتباطات بین نورون ها می تواند آموزش FRNN ها را کند و دشوار کند. علاوه بر این، FRNN ها می توانند به راحتی دچار بیش برازش شوند، به خصوص با داده های محدود.با انجام بهبودها در روش‌های آموزش و بهینه‌سازی، همچنین استفاده از تکنیک‌های کاهش پیچیدگی مانند روش‌های تقریب و تحلیل داده، ممکن است این چالش‌ها در شبکه‌های عصبی بازگشتی بازنگری و عملکرد آنها را بهبود داد.3. شبکه های Elman و Jordanشبکه‌های جوردان ( Jordan network) ساده ترین نوع از شبکه‌های عصبی بازگشتی (RNN) هستند. اطلاعات ورودی به هر نورون از شبکه وارد می ‌شوند و به همان نورون به عنوان ورودی ارسال می ‌شود. این شبکه ها تنها یک لایه پنهان دارند. فعالسازی هم در لایه پنهان و هم در لایه خروجی انجام می‌ شود. از الگوریتم‌ های Backpropagation برای بهینه‌ سازی پارامترها استفاده می کنند.شبکه ‌های جوردن می ‌توانند وابستگی‌ های طولانی‌ مدت در داده‌های دنباله‌ای را یاد بگیرند. مانند سایر RNN ، شبکه‌های جوردن نیز می‌ توانند دچار vanishing gradient problem شوند، که باعث می ‌شود یادگیری وابستگی‌ های طولانی ‌مدت دشوار شود. این معماری به شبکه اجازه می ‌دهد تا اطلاعات را از لحظه‌ی فعلی به لحظه‌ی بعدی منتقل کند.می توان از آن برای پیش ‌بینی قیمت‌ها، تحلیل سری ‌های زمانی مالی، یا پردازش زبان طبیعی (NLP) استفاده کرد. شبکه‌های Elman مانند شبکه های جوردن هستن با این تفاوت مهم که فعا‌لسازی را فقط در لایه پنهان انجام می‌ دهند، فعا‌سازی در لایه خروجی به شبکه ‌های جوردن اجازه می‌ دهد تا وابستگی ‌های طولانی ‌مدت را بهتر از شبکه‌های Elman یاد بگیرند. البته همین ویژگی می تواند باعث کاهش کارایی محاسباتی شبکه‌ های جوردن شود.به دلیل سادگی زیاد و عدم توانایی حل مسائل پیچیده که امروزه مورد استفاده هستند و این معماری شبکه کارایی خاصی ندارد. البته بستگی به نوع کاری که انجام می شود ممکن است مورد استفاده قرار بگیرند.4. شبکه های عصبی کانولوشنی (convolutional neural networks)شبکه های عصبی کانولوشنی یا CNN واژه ای که نام آن را بارها شنیده ایم. می توان گفت انقلابی که هم اکنون شاهد آن هستیم یکی از پایه های اصلی آن شبکه های CNN اما سوال اینجاست که CNN  چطور کار میکنه ؟ تفاوتش با بقیه شبکه ها در چیه ؟ باید به گذشته برویم . با من همراه باشید سفر جالبیه میگی نه ؟ امتحان کن !اولین بار در دهه 80 توسط Yann LeCun مطرح شد. اما برای پیاده سازی آن نیاز به محاسبات زیادی بود که در آن زمان میسر نشد. تا اینکه در سال 1998 مقاله ای با عنوان&quot; Gradient-based learning applied to document recognition&quot; در کنفرانس IEEE ارائه شد . پس از ارئه این مقاله استفاده از شبکه‌های عصبی پیچشی به طور گسترده ‌تر در حوزه تشخیص الگو و پردازش تصویر بسیار افزایش پیدا کرد. مخصوصا با پیشرفت هایی که در انجام محاسبات سریع در شبکه های عمیق انجام شد و با ظهو GPUs استفاده از شبکه های عصبی کانولوشنی بسیار مورد توجه قرار گرفت . تشخیص اشیاء، تشخیص چهره، تشخیص اثر انگشت، خودروهای خود ران ، پردازش زبان طبیعی و غیره . اما CNN ها چطور کار مکنن؟منبعما زمانیکه به یک تصویر نگاه می کنیم در کسری از ثانیه با پردازش هایی که در مغز انجام می شود و با دانشی که از قبل داریم به سرعت تصویر را تشخیص دهیم اما برای کامپیوتر به این صورت نیست ماشین ها باید پیکسل به پیکسل یک تصویر را ببینند.الگوی اتصال بین نورون ها در CNN ها از قشر بینایی حیوانات الهام گرفته شده است . بیشترین شباهت آنها این است که هر دو معمولاً از یک ساختار سلسله مراتبی برای پردازش اطلاعات استفاده می ‌کنند، به این معنا که اطلاعات از لایه به لایه پردازش می ‌شوند و ویژگی‌های پیچیده ‌تر در لایه‌های بالاتر به دست می‌آید. CNN‌ ها از فیلترهای کانولوشنی برای استخراج ویژگی‌ ها از تصاویر استفاده می‌کنند، که الهام گرفته از نحوه عملکرد نورون‌های قشر بینایی مغز است.عملکرد CNN ها و عاملی که تفاوت آنها را با سایر معماری های شبکه مشخص می کند اصول این معماری است. در واقع در هر لایه CNN پیچید گی را افزایش می دهد و بخش های بیشتری از تصویر را شناسایی می کند. لایه اول لایه های کانولوشنی است. اعمال فیلترها برای فهمیدن ویژگی ها. سپس لایه ادغام  (pooling)که در لایه های پنهان برای استخراج مهم ترین ویژگی ها برای فرستادن به لایه آخر که لایه کاملا متصل (Fully connected layers) است تا وظایف بینایی ماشین انجام شود .با من همراه باشید تا لایه های CNN را بشکافیم.لایه کانولوشنی (Convolutional Layer)لایه اصلی CNN است و بیشتر محاسبات در آن انجام می شود. تصاویری که به این لایه وارد می شود. می تواند با پیچیدگی بیشتر یا کمتر همراه باشد. تصاویر 2D که داری عرض و ارتفاع هستند و می توانند تک کاناله (خاکستری ) باشد یا 3 کاناله RGB (رنگی) و تصاویر  3D که عمق هم دارند مانند تصاویر پزشکی (سی تی اسکن و ام ار ای) که پیچیدگی مدل را بیشتر می کند .قطعه کد زیر با استفاده ازمتد &#x60;Conv2D&#x60; یکی از اعضای ماژول &#x60;layers&#x60; برای ساختن یک لایه کانولوشنال در Keras است :# Adding a convolutional layer with 3 filters of size 3x3 and ReLU activation functionmodel.add(layers.Conv2D(3, (3, 3), activation=&#039;relu&#039;, input_shape=(28, 28, 1)))پارامترinput_shape  شکل داده‌های ورودی را مشخص می‌ کند که ابعاد آن (28,28,1) است و تصویر خاکستری با ابعاد 28 x 28 پیکسل را نمایش می دهد.لایه کانولوشنی شامل فیلترهای کانولوشنی است. این فیلترها همچنین به عنوان کرنل‌ها (kernel) نیز شناخته می ‌شوند. هر نورون در لایه کانولوشنی به یک فیلتر مشخص وزن ‌دار (یا همان ماتریس وزن) متصل است. برای نمایش اطلاعات فیلترها، می‌توانیم از ویژگی‌های لایه استفاده کنیم. این ویژگی‌ها معمولاً پس از تعلیم مدل دسترسی پیدا می‌کنند. به عنوان مثال، پس از آموزش مدل، می‌توانید به وزن‌های هر لایه دسترسی پیدا کنید و آن‌ها را چاپ کنید.قطعه کد زیر در Keras چگونگی دسترسی به وزن‌های لایه کانولوشنال را نشان می دهد :# Accessing the weights of the convolutional layerweights = model.layers[0].get_weights()[0]# Printing the dimensions of the filter weightsprint(&amp;quotFilter dimensions:&amp;quot, weights.shape)هر کدام از این فیلتر ها ویژگی ‌های مختلفی از تصویر را استخراج می ‌کنند. این ویژگی‌ های استخراج شده شامل لبه ‌ها، نقاط روشن و تیرگی هستند که به آن نقشه ویژگی‌ها ( Feature Map) می گویند. فیلتر Sobel و فیلتر Scharr از فیلترهای پرکاربرد در پردازش تصویر هستند که برای تشخیص لبه های عمودی و افقی و علامت‌گذاری گرادیان‌ها در تصویر استفاده می‌شوند. زمانی که این فیلترها بر روی تصویر اعمال می‌شوند، از طریق محاسبه مشتق‌های جزئی تصویر در جهت‌های افقی و عمودی، میزان تغییرات شدت رنگ یا روشنایی در نقاط مختلف تصویر را اندازه‌ گیری می ‌کنند.با این حال، تفاوت اصلی بین این دو فیلتر در ویژگی‌های هسته (یا ماتریس)آن‌ها است. هسته یا ماتریس فیلتر Sobel با تمرکز بیشتر بر روی تغییرات افقی و عمودی در تصویر تعریف شده است. تشخیص لبه‌ها توسط فیلتر Scharr مستقل از جهت آن‌ها است، به عبارت دیگر، اگر لبه‌ای در تصویر وجود داشته باشد، بدون درنظر گرفتن اینکه لبه افقی یا عمودی باشد فیلترScharr می ‌تواند آن را به خوبی تشخیص دهد، به طور مثال در تشخیص اشیاء یا اجزای تصویر، جهت لبه ممکن است اهمیت کمتری داشته باشد و مهم این است که لبه‌ها به درستی شناسایی شوند.نمونه کد برای اعمال فیلترهای Sobel و Scharr در Python و OpenCV:# Calling the OpenCV libraryimport cv2# Apply Sobel filtersobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)# Apply Scharr filterscharr_x = cv2.Scharr(image, cv2.CV_64F, 1, 0)scharr_y = cv2.Scharr(image, cv2.CV_64F, 0, 1)پدینگ (Padding )برای ساختن مدل‌های پیچیده مانند شبکه ‌های عصبی کانولوشن (CNN) یا شبکه‌های عصبی تکراری (RNN)، یک شکل ورودی استانداردمورد نیاز است. هنگامی که فیلتر از ابتدای تصویر حرکت می‌کند، بخشی از اطلاعات از لبه‌های تصویر از دست می ‌رود و این باعث کاهش ابعاد تصویر خروجی از لایه‌های کانولوشنال می‌شود.منبع این gif مقاله ای در Mediumعدم وجود Padding ممکن است باعث شود که ابعاد تصویر خروجی از لایه‌های کانولوشنال به اندازه ‌ای کوچکشود که عملیات Convolution بر روی آنها را به درستی انجام نشود. یکی از مزایای اصلی paddingتوانایی آن در استاندارد سازی داده های ورودی است. عملیات Padding در CNN با افزودن مقادیر صفر به لبه‌های تصاویر ورودی یا نقشه ویژگی اشاره دارد. معمولا با دو روش قابل پیاده سازی است.پدینگ صفر)  ( Zero Paddingدر روش Zero Padding ، اطلاعاتی که به لبه ‌های تصویر اضافه می ‌شوند با مقادیر صفر پر می‌ شوند. که می تواند باعث کاهش وضوح تصویر شود. استفاده از Zero Padding می‌تواند منجر به افزایش مصرف حافظه در مدل‌های عصبی شود، زیرا با افزودن صفرها به لبه‌های تصویر، حجم داده‌ها افزایش می‌یابد که می تواند برای پردازش تصاویر بزرگ مشکل آفرین باشد. Zero Padding امکان ایجاد شبکه های عمیق تر با حفظ ابعاد خروجی و حفظ اطلاعات مربوط به لبه های تصاویر و افزایش سرعت محاسبات را می دهد اما ممکن است هزینه محاسباتی را بیشتر کند. می تواند برای افزایش اندازه تصویر و حفظ وضوح لبه ها برای بهبود دقت تشخیص اشیاء استفاده شود.برای اجرای عملیات Zero Padding در کتابخانه TensorFlow می‌توانید از تابع () tf.pad استفاده کنید. این تابع به شما اجازه می‌دهد تا با اضافه کردن صفرها یا مقادیر دلخواه دیگر به لبه‌های تصویر، Padding را انجام دهید:# Apply Zero Padding by adding 2 rows and 2 columns of zeros to the edges of the imagepadded_image = tf.pad(image, [[0, 0], [2, 2], [2, 2], [0, 0]], &amp;quotCONSTANT&amp;quot)پدینگ معتبر  (Valid Padding)در روش Valid Padding ، در مقایسه با Zero Padding، هیچ داده ای به لبه های تصویر اضافه نمی شود. در واقع هیچگونه Padding ای انجام نمی‌ شود. به عبارت دیگر، فیلترها (کرنل‌ها) به طور کامل فقط بر روی قسمت‌هایی از ورودی که اندازه‌ی کرنل با آن مطابقت دارد، حرکت می‌کنند. در نتیجه تصویر خروجی از لایه‌های کانولوشنال اندازه‌ی کوچکتری نسبت به تصویر ورودی خواهد داشت که منجر به کاهش حجم داده‌ها و همچنین کاهش پیچیدگی محاسباتی می‌شود همچنین زمان اجرا کاهش می‌یابد.وقتی که ما به دنبال استخراج ویژگی‌ها و الگوهای موجود در تصویر هستیم و اندازه تصویر خروجی برای وظایف بعدی ما اهمیت زیادی ندارد، می‌توان از Valid Padding استفاده کرد. در واقع خیلی از معایب Zero Padding را نداریم . در دنیای واقعی، روش Valid Padding معمولاً در وظایفی مانند تشخیص اشیاء، طبقه‌بندی تصاویر، و شناسایی الگوها استفاده می‌شود که افزایش اندازه تصویر خروجی مورد نیاز نیست و ما به دنبال افزایش سرعت و کارایی محاسباتی هستیم. در شبه کد ساده زیر یک لایه Conv2D با Valid Padding تعریف می‌کنیم که با تنظیم پارامتر padding  به &#x27;valid&#x27; انجام می‌شود:# Define a Conv2D layer with Valid Paddingconv_layer = Conv2D(filters=16, kernel_size=(3, 3), padding=&#039;valid&#039;, activation=&#039;relu&#039;, input_shape=(28, 28, 1))استفاده از هر کدام از روش های Padding بستگی به نوع مسئله و شرایط دارد. Paddingمعمولاً در مرحله‌ی پیش‌پردازش تصاویر و قبل از عملیات Convolution انجام می‌شود. در مدل‌های شبکه عصبی، Padding می‌تواند به عنوان یک لایه جداگانه به مدل اضافه شود و یا در تابعیت Convolution اعمال شود.Top of Formاین داده ها سپس به Pooling layers شبکه CNN منتقل می ‌شوند تا ویژگی‌های پیچیده ‌تری را برای وظایفی مانند تصویربرداری یا دسته‌ بندی تصاویر استخراج کنند.یکی از تفاوت های اساسی CNN برای پردازش تصویر با روش های قدیمی آن این است که قبلا این فیلتر ها با استفاده از فیلترهای محلی (Local Filters)باید دستی انجام می شد.لایه Pooling layersبرای کاهش ابعاد فضایی (طول و عرض) نقشه ویژگی‌ها ( Feature Map) با حفظ اطلاعات مهم عملیاتpooling  انجام می شود. Pool ها معمولاً به صورت پنجره‌های متحرکی روی نقشه ویژگی‌ ها حرکت می ‌کنند و هر بار مقداری از نقطه شروع تا نقطه پایان این پنجره را با استفاده از معیار مشخص شده (مثل ماکسیمم یا میانگین) انتخاب می ‌کنند. این عملیات به صورت مکرر اعمال می ‌شود تا ابعاد فضایی نقشه ویژگی‌ ها کاهش یابد و اطلاعات مهم حفظ شود. این عملیات به کاهش پیچیدگی مدل کمک می‌کند و از جمله عواملی است که باعث افزایش سرعت و کارایی شبکه می‌شود. همچنین مواردی مانند overfitting را کاهش می‌دهد.  Pooling دو نوع رایج دارد که هر کدام برای وظایف خاصی مناسب هستند.روش  Max Poolingمنبع این gif مقاله ای در Mediumوقتی فیلتر (یا همان kernel) کانولوشنی روی تصویر ورودی حرکت می‌کند. بخشی از فیلتر اغلب با بخشی از تصویر قبلی و قسمت دیگری از فیلتر با بخشی از تصویر جدید همپوشانی دارد. این مدل بیشترین مقادیر از هر ناحیه همپوشانی (Overlapping Region) در نقشه ویژگی‌ها را می ‌گیرید و مقدار بیشینه آن را به عنوان مقدار خروجی این ناحیه انتخاب می‌کنیم. با این حال، Max Pooling ممکن است اطلاعات دقیق را از دست بدهد زیرا تنها مقدار بیشینهرا برای هر ناحیه انتخاب می ‌کند و مقادیر کوچک ‌تر را نادیده می ‌گیرد.ناحیه همپوشانی به نوعی hyperparameter محسوب می شود. می‌توان آن را براساس نیاز و ویژگی ‌های مسئله تنظیم کرد. ممکن است افزایش ناحیه همپوشانی، باعث افزایش تعداد ویژگی‌ های استخراج شده مدل آموزش بیشتری نیاز داشته باشد و زمان آموزش مدل افزایش یابد. این می‌ تواند باعث افزایش پیچیدگی مدل و بیش‌برازش (overfitting) شود.در ادامه یک شبه کد ساده برای Max Pooling در Keras داریم که لایه MaxPooling2D از Keras برای انجام عملیات Max Pooling استفاده کردایم و pool_size اندازه فیلتر Max Pooling را مشخص می‌کند:# Importing the necessary layers from Kerasfrom keras.layers import MaxPooling2D# Adding a Max Pooling layer to the modelmodel.add(MaxPooling2D(pool_size=(2, 2), strides=None, padding=&#039;valid&#039;)) روش Average Poolingمنبع این gif مقاله ای در Mediumدر این روش، برخلاف Max Pooling ، میانگین مقادیر در هر ناحیه‌ی همپوشانی را می ‌گیریم و آن را به عنوان مقدار خروجی انتخاب می‌کنیم. Average Pooling معمولاً برای کاهش ابعاد فضایی نقشه ویژگی‌ها استفاده می‌شود و باعث ایجاد یک تصویر با کیفیت واضح ترمی ‌شود. در این روش اطلاعات دقیقی که در ناحیه ‌های کوچکی از تصویر ورودی وجود دارند، میانگین‌ گیری می ‌شوند. که ممکن است به ویژگی‌ های محلی که در آن ناحیه‌ ها وجود دارند، کمتر توجه شود و اطلاعات دقیق آن‌ها از بین ‌برود. این کاهش اطلاعات جزئی می‌ تواند باعث جلوگیری از آموزش مدل و کم ‌برازش (underfitting) شود. به خصوص در مواردی که جزئیات کوچکی از تصویر برای وظایف مختلف اهمیت دارند، مانند تشخیص الگوهای دقیق یا تصویربرداری دقیق . بنابراین این روش باید با دقت و با در نظر گرفتن موارد خاص مسئله استفاده شود.یک شبه کد ساده برای فهمیدن بهتر Average Pooling در Keras در زیر مشاهده کنید :from keras.layers import AveragePooling2D# Add Average Pooling layer with specified pool sizemodel.add(AveragePooling2D(pool_size=(2, 2)))لایه Fully connected layersدر یک لایه‌های کاملاً متصل (Fully connected layers)، هر نورون یا گره به هر نورون در لایه قبلی متصل است. این بدان معناست که تمام سیگنال‌های ورودی از لایه قبلی برای خروجی هر نورون در نظر گرفته می‌ شوند.لایه ‌های Fully connected اغلب در مراحل نهایی یک شبکه عصبی برای وظایفی مانند طبقه‌ بندی یا رگرسیون استفاده می‌ شوند. مشکل اصلی دراین لایه‌ ها که دارای تعداد زیادی پارامتر با قابلیت حفظ اطلاعات زیادی هستند overfitting است. برای جلوگیری از این مشکل دو راه حل افت ‌گذاری (dropout) و رگولاریزاسیون می تواند موثر باشد.در روش dropout ، در هر مرحله از آموزش، به طور تصادفی تعدادی از نورون‌ ها و اتصالات بین آن‌ ها حذف می‌شوند. dropout به طور کلی باعث ایجاد یک شبکه عصبی انعطاف‌ پذیرتر می ‌شود. همچنین رگولاریزاسیون هم با هدف کاهش پیچیدگی مدل، به کمک ضریب معینی از وزن‌ ها به تابع هدف اضافه می‌شود تا مقدار وزن‌ها را محدود کند و از بزرگ شدن آن ‌ها جلوگیری کند. معمولاً از رگولاریزاسیون L1 و L2 استفاده می ‌شود که به ترتیب به عنوان &quot;رگولاریزاسیون لیسو و رگولاریزاسیون مربعی&quot; شناخته می‌شوند.در L1، جمله رگولاریزاسیون به صورت مجموع مقادیر مطلق وزن ‌ها اضافه می‌شود. این باعث می‌شود که برخی از وزن ‌ها صفر شوند، و به این ترتیب مدل وزن ‌های غیرضروری را حذف کند. در L2، جمله رگولاریزاسیون به صورت مجموع مربعات وزن‌ ها اضافه می‌ شود. این باعث می ‌شود که وزن‌ ها کوچک شوند اما به صورت پیوسته، بدون اینکه به صفر برسند. این اجازه را می ‌دهد که همه ویژگی ‌ها با وزن ‌های مختلف مؤثر باشند، اما به اندازه کمتری نسبت به بدون رگولاریزاسیون.همه توضیحات داده شده راجع به FC را در قطعه کد زیر به طور خلاصه میبینیم:import tensorflow as tf# Define the modelmodel = tf.keras.Sequential([tf.keras.layers.Flatten(input_shape=(28, 28)),  # Input layer: Convert images to vectorstf.keras.layers.Dense(128, activation=&#039;relu&#039;),  # Fully connected layer with 128 neurons and ReLU activationtf.keras.layers.Dropout(0.2),  # Dropout with rate 0.2tf.keras.layers.Dense(64, activation=&#039;relu&#039;),   # Fully connected layer with 64 neurons and ReLU activationtf.keras.layers.Dropout(0.2),  # Dropout with rate 0.2tf.keras.layers.Dense(10, activation=&#039;softmax&#039;) # Output layer with 10 neurons for classifying 10 different classes and softmax activation])این کد لایه‌های کاملاً متصل (FC) را تعریف می‌کند و از افت‌گذاری (Dropout) برای رگولاریزاسیون استفاده می‌کند.نتیجه‌گیری پارت 3در این مقاله سعی کردم که مهم ترین و پایه ای ترین مباحث مربوط به شبکه های عصبی و deep learning  را از آغاز تا الان بیان کنم و عمیق و عمیق تر به لایه های بسیارمتراکم deep learning  وارد شویم. اما این آغاز راه است. چون که مرزهای deep learning  بسیار باریک است و شبکه های مختلف deep در حال کامل شدن هستند. در واقع امروزه استفاده از شبکه های بادگیری عمیق برای انجام وظایف مختلف ترکیب شده است. همانطور که می دانیم محصولاتی داریم که همزمان در آنها پردازش زبان طبیعی انجام شده باشد و هم مثلا تولید عکس انجام دهد یا برعکس. بنابراین مرزهای یادگیری عمیق در حال تنیده تر شدن هستند و خیلی از مباحث در این مقاله پوشش داده نشد در آینده به مباحث بیشتر خواهیم پرداخت .ممنون از شما که در این سفر به دنیای Deeps با من همراه بودید.لینک مقاله به انگلیسی در Mediumپارت 1 : تاریخچه هوش مصنوعی و چگونگی عملکرد شبکه های عصبی سادهپارت 2 : نحوه یادگیری در شبکه های عصبی عمیق ( انواع یادگیری و توابع فعالساز و پس انتشار( backpropagation)پارت 3 : انواع مهم ترین معماری های شبکه های عصبی عمیق (RNN / LSTM / CNN )لطفا اگر مایل بودید مقاله دیگر من &quot; آیا DeepFake فناوری آینده‌ای است یا یک تهدید؟ آیا خط میان واقعیت و ساختگی از بین خواهد رفت؟&quot; رو در ویرگول  ببینید .استخراج داده با پایتون – راهنمای جامع برای بهره‌برداری از API‌هاامیدوارم از مطالب لذت برده باشید .</description>
                <category>محمد جواد نجادی</category>
                <author>محمد جواد نجادی</author>
                <pubDate>Wed, 06 Mar 2024 08:23:21 +0330</pubDate>
            </item>
                    <item>
                <title>عمیق‌تر و عمیق‌تر در عمق یادگیری عمیق و شبکه‌های عصبی مصنوعی</title>
                <link>https://virgool.io/@m.javadnejadi/%D8%B9%D9%85%DB%8C%D9%82-%D8%AA%D8%B1-%D9%88-%D8%B9%D9%85%DB%8C%D9%82-%D8%AA%D8%B1-%D8%AF%D8%B1-%D8%B9%D9%85%D9%82-%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D8%B9%D9%85%DB%8C%D9%82-%D9%88-%D8%B4%D8%A8%DA%A9%D9%87-%D9%87%D8%A7%DB%8C-%D8%B9%D8%B5%D8%A8%DB%8C-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-kdq9sxgqpkgb</link>
                <description> # پارت 2 : نحوه یادگیری در شبکه های عصبی عمیق ( انواع یادگیری و توابع فعالساز و پس انتشار( backpropagation)باید به لایه های عمیق تری نفوذ کنیم!تولید شده توسط DALEE-3این مقاله در سه پارت کامل می شود که به شرح زیر است :پارت 1 : تاریخچه هوش مصنوعی و چگونگی عملکرد شبکه های عصبی سادهپارت 2 : نحوه یادگیری در شبکه های عصبی عمیق ( انواع یادگیری و توابع فعالساز و پس انتشار( backpropagation)پارت 3 : انواع مهم ترین معماری های شبکه های عصبی عمیق(RNN / LSTM / CNN)که در این 3 پارت به این موضوعات خواهیم پرداخت که شبکه های عصبی مصنوعی چیه ؟ چطور کار میکند ؟ یادگیری عمیق چیه ؟ در شبکه های عمیق یادگیری چطور انجام می شه و انواع روش های یادگیری شبکه چیه ؟ انواع معماری های اصلی شبکه های عمیق چی هست ؟ آیا واقعا کارکرد شبکه های عصبی مصنوعی مانند نورون های شبکه عصبی انسان است یا فقط الهامی از آن هست ؟ کاربردهای شبکه عصبی چیه ؟ معایبی هم داره ؟مرور مطالب پیشیندر پارت 1 تاریخچه ای کوتاه از فراز و نشیب های هوش مصنوعی و زمستان های اون صحبت کردیم و تلاش هایی که برای پیشبرد اون انجام شد. یک پرسپترون ساده را مورد بررسی قرار دادیم تا بفهمیم چه بخش هایی دارد در واقع یک ANN ساده چطور داده رو میگیره وزن دهی میشه لایه پنهان چطور کار میکنه. در ANN ساده در واقع عملیات خاصی روی داده ها انجام نمی شود. تایع فعالسازی در ANN یک تابع خطی هست که داده های ورودی را به خروجی می برد پس تفاوت چندانی با تسک های رگرسیون در مدل های سنتی ندارد.اما اگر بخواهیم با داده های بزرگ تر کار کنیم و نتایجی مثل تشخیص چهره یا پردازش زبان طبیعی و ... را داشته باشیم. تابع فعالساز خطی به تنهایی کاربردی ندارد چرا که عملیات خاصی را انجام نمی دهد. از بین همه توابع فعالساز غیر خطی کدام بهترین عملکرد را دارد ؟ چه مشکلاتی در توابع فعالساز داریم و چطور میتونیم اونها رو کم و به حداقل برسونیم ؟ پردازش اطلاعات در نورون ها چطور انجام میشه ؟ پردازش ترتیبی بهتر هست یا موازی ؟ میتونیم اون ها رو ترکیب کنیم؟ نورون باید بتواند که یاد گیری داشته باشد . اما چه نوع یادگیری هایی داریم ؟ داده ها ممکن است لیبل دار یا بدون لیبل باشند همانطور که در مدل های قدیمی ماشین لرنینگ داشتیم . وقتی تعداد لایه ها در شبکه عصبی بیشتر می شود و به عمق می رویم این کار چطور انجام می شه ؟ از همه مهم تر پس انتشار چطور عمل میکنه ؟ چه مشکلاتی میتونه داشته باشه و چطور می تونیم اونها رو به حداقل برسونیم؟ قاعده زنجیره ای !؟ بیاید با هم در رو باز کنیم و وارد بشیم ...رویکرد کلی من در این مقاله به این صورت است که مسائل گفته شده کاملا مانند یک شبکه عصبی عمیق به هم متصل باشند با رویکرد مقایسه ای یعنی مطالب گفته شده در هر بخش با هم مقایسه شده اند مخصوصا در بخش توابع فعالساز خواهید دید که نمودارهای هر کدام از توابع با هم مقایسه شده اند که تا جایی که امکان داشته باشد با هم بتوانیم مسائل را بهتر و اصولی تر یاد بگیریم. سپاسشبکه های عصبی مصنوعی چطور یاد میگیرند ؟درک نحوه یادگیری در تمام موجودات زنده موضوعی است که بشرهمواره به دنبال آن بوده است. حتی نحوه یادگیری در خود انسان. مغز انسان می ‌تواند به صورت موازی اطلاعات را پردازش کند و فعالیت‌های متعددی را به صورت همزمان انجام دهد، یعنی به صورت همزمان اطلاعات مختلف را تجزیه و تحلیل کند. اما برخی فعالیت‌های ذهنی نیازمند پردازش ترتیبی هستند. تا بتوانیم مسائل پیچیده تر را که نیاز به تحلیل و درک جزییات بیشتر دارند حل کنیم. البته این که در مغز دقیقا این پروسه به چه صورت انجام می شود. هنوز هم موضوع تحقیقات دانشمندان و عصب شناسان است.در شبکه های عصبی مصنوعی با توجه به نوع مسئله ای که داریم می توانیم نوع معماری و یادگیری شبکه را تعیین کنیم . مثلا در پردازش زبان طبیعی (NLP) که داده ها دارای یک ترتیب خاص هستند از شبکه‌های عصبی بازگشتی (RNN) به طور گسترده استفاده می شود و پردازش اطلاعات در آن بصورت ترتیبی (Sequential Processing) است. هر داده ورودی به ترتیب خاصی به شبکه داده می‌شود. و وقتی به هر لایه از شبکه می ‌رسند پردازش ‌های مختلفی (درادامه این مقاله به آنها خواهیم پرداخت ) بر روی هر ورودی انجام می‌شود و سپس خروجی مرتبط با هر کلمه یا کاراکتر را تولید می‌کند. نوع دیگر پردازش موازی (Parallel Processing) است که اغلب در شبکه‌های عصبی عمیق (Deep Neural Networks) برای افزایش سرعت و کارایی استفاده می‌شود، زیرا می‌تواند زمان اجرای وظایف را به طور قابل ملاحظه‌ای کاهش دهد. به عنوان مثال، در شبکه‌های عصبی کانولوشنال (CNN) که معمولاً برای تصویربرداری و پردازش تصویر استفاده می‌شوند، عملیات‌های پیچیده ‌ای مانند تصاویر سه بعدی یا ماتریس‌های بزرگ مورد استفاده قرار می ‌گیرند. این شبکه ‌ها به طور فراوان از پردازش موازی برای انجام عملیات ماتریسی مانند ترکیب، تفکیک، و تصویربرداری استفاده می ‌کنند. اینجاست که به قدرت GPUها (Graphics Processing Units) پی می بریم چرا که پردازش در آنها به صورت موازی است . به این معنی که چندین عملیات محاسباتی همزمان و موازی اجرا می ‌شوند. این امکان به وجود می‌آید که میلیون ‌ها تسک محاسباتی را همزمان اجرا کند .البته در بسیاری از موارد، می‌توان از ترکیبی از روش‌های پردازش استفاده کرد. در واقع، استفاده از ترکیبی از پردازش ترتیبی و موازی یا استفاده از روش‌های مختلف پردازش در یک سیستم، می‌تواند به بهبود عملکرد و کارایی کمک کند. این رویکرد به عنوان پردازش ترکیبی شناخته می‌شود. در ادامه به انواع روش های پرکاربرد یادگیری در ماشین که در روش های سنتی و شبکه های عصبی مصنوعی استفاده می شود خواهیم پرداخت .انواع مختلف یادگیری در شبکه‌های عصبیدر همه انواع یاد گیری در شبکه های عصبی مصنوعی هدف این است که شبکه بتواند الگوهای موجود در داده‌های ورودی را شناسایی کرده و پیش‌بینی‌های درستی برای داده‌های جدید ارائه کند. هر کدام از آنها می توانند برای تسک خاصی مورد استفاده قرار گیرند. یکی از این روش ها یاد گیری نظارت‌شده (Supervised Learning) برای مسائلی مانند تشخیص الگو، دسته‌بندی، رده‌بندی، و پیش‌بینی استفاده می‌شود. در این نوع یادگیری، داده های ورودی به شبکه در مرحله آموش لیبل دار هستند . مثلا در دیتا ست ImageNet ، برای پردازش تصویر داری تصاویر با لیبل است که موجب می شود در مرحله آموزش شبکه با لیبل هایی که دارد بتواند الگو ها را تشخیص دهد و بهترین نتیجه را در مرحله تست بگیریم .روش بعدی یادگیری بدون نظارت (Unsupervised Learning) است. معمولاً برای پیدا کردن  الگوهای پنهان، کاوش داده، خوشه‌بندی، و تقسیم ‌بندی داده‌ها مورد استفاده قرار می ‌گیرد. داده‌های ورودی بدون برچسب آموزش داده می‌شوند. بهترین مثال برای آن شبکه‌های خود نظارتی (Autoencoders) است که برای یاد گیری از داده‌های بدون لیبل طراحی شده‌اند. هدف اصلی این است که شبکه بتواند ویژگی‌های مهم و اساسی داده‌ها را بازتولیدکند. شبکه‌های خود نظارتی یکی از مثال‌های معروف از یادگیری بدون نظارت در شبکه‌های عصبی هستند که در حال حاضر نیز به وفور مورد استفاده قرار می‌گیرند.روش دیگر یادگیری نیمه نظارتی (Semi-Supervised Learning) که می توان گفت ترکیب یادگیری با ناظر و بدون ناظراست. چرا که تعدادی محدود داده های لیبل شده هم دارد. این نوع یادگیری معمولاً در مواردی استفاده می‌شود که دسترسی داده‌های بدون لیبل فراوان اما داده‌های لیبل دار محدود است. هدف این نوع یادگیری، استفاده همزمان از داده‌های لیبل دار و بدون لیبل برای بهبود یادگیری و افزایش دقت مدل است. مثلا در تصویربرداری پزشکی، ممکن است داده‌های برچسب‌دار (مثلاً تصاویری که بیماری خاصی را نشان می‌دهند) محدود باشند. با استفاده از داده‌های بدون برچسب، مدل‌ها می‌توانند ساختارهای مهم در تصاویر را فراگیری کنند.یادگیری تقویتی (Reinforcement Learning) در بازی‌های رایانه‌ای، رباتیک، و تصمیم ‌گیری‌های پیچیده مورد استفاده قرار می‌گیرد. در هر مرحله از زمان، عامل (agent) در یک وضعیت خاص قرار دارد و بر اساس وضعیت خود، یک عمل خاص را انتخاب می‌کند (پاداش یا مجازات). هدف عامل در یادگیری تقویتی، کم کردن مجازات و افزایش پاداش است. عامل با یاد گیری ارتباط بین عمل‌هایی که در وضعیت‌های مختلف انجام می‌دهد و پاداش یا مجازاتی که از محیط دریافت می ‌کند، تلاش می‌کند رفتار بهینه را انتخاب کند.برای انجام یادگیری تقویتی، الگوریتم‌های مختلفی وجود دارند، از جمله الگوریتم‌های Q-Learning، Deep Q-Networks (DQN)، Policy Gradient و Actor-Critic. هر یک از این الگوریتم‌ها روی اصول مشابهی بنا شده‌ان. اما با استفاده از تکنیک‌ها و تغییرات مختلف، برای حل مسائل مختلفی به کار می‌روند.از معایب یادگیری تقویتی این که نیاز به تعداد زیادی آزمایش و خطا برای یاد گیری، پیچیدگی الگوریتم‌ها و حساسیت به تنظیم پارامترها می‌شود.در ادامه به نحوه فعالسازی و چگونگی کاردکرد شبکه می پردازیم . با من در این کاوش بی نهایت زیبا همراه باشید.1 .توابع فعالساز(Activation Function)در ANN از توابع فعالسازی برای انتقال اطلاعات در لایه ها (از ورودی به خروجی یا در مدل های بازگشتی از خروجی به ورودی) استفاده می کنیم. از توابع فعالسازی در لایه های مختلف شبکه و در حالت های مختلف از پردازش تا وزن دهی و کاهش ضرر و نتیجه نهایی استفاده می کنیم.این توابع در واقع باعث غیر خطی شدن عملکرد کلی نورون ها می شوند. یکی از اصلی‌ ترین چالش‌ ها در آموزش شبکه‌های عمیق مشکل گرادیان ناپایدار محو شونده (Gradient Vanishing) است. زمانی که اطلاعات از لایه ای به لایه بالاتر منتقل می‌شوند. وزن‌های بدست آمده در مرحله آموزش به سمت عمق شبکه حرکت می‌کنند، و گرادیان‌ها معمولاً به سمت صفر متمایل می‌شوند در نتیجه اطلاعات به درستی در شبکه منتقل نمی‌شود. این می‌تواند باعث کاهش یا ناپدید شدن گرادیان‌ ها در لایه‌های پایین‌ تر و عمیق‌تر شود. بنابراین استفاده از توابع فعال‌سازی مناسب می ‌تواند به کاهش مشکل گرادیان ناپایدار محو شونده و بهبود عملکرد شبکه‌های عمیق کمک کند.البته با توجه به نوع مسئله و نتیجه ای که می خواهیم بگیریم از انواع مختلف توابع فعالساز استفاده می کنیم که نمونه هایی از انوع مختلف توابع خطی را بیان خواهیم کرد .توابع فعالساز خطی Linear Activation Function این تابع فعالساز خطی با کد پایتون توسط من ایجاد شده است توابع فعالساز خطی که به عنوان &quot;بدون فعالسازی&quot; یا &quot;تابع هویت &quot; نیز شناخته می شود. زیرا هیچ ویرایش ورودی را انجام نمی دهد . تابع هیچ کاری برای مجموع وزنی ورودی انجام نمی دهد، فقط مقدار داده شده را به خروجی منتقل می کند . معمولاً در موارد خاص و مسائل خاص استفاده می شود. در برخی از مسائل، مانند مسائل رگرسیون، ممکن است در لایه‌های خروجی برای محاسبه مقادیر پیش‌بینی استفاده شوند.f(x) = xتوابع فعالساز خطی دو مشکل اساسی دارد. اول اینکه استفاده از پس انتشار در آن ممکن نیست و دوم این که تمام لایه های شبکه عصبی را به یک لایه تبدیل می کند. در واقع بدون توجه به تعداد لایه های شبکه عصبی، آخرین لایه همچنان تابعی خطی از لایه اول خواهد بود. می توان گفت شبکه عصبی را به یک لایه تبدیل میکند.در بیشتر مدل ها می توان گفت اکثرا از توابع غیر خطی استفاده می شود. زیرا برای حل مسائل پیچیده مناسب هستند.توابع فعالساز غیر خطی Non-Linear Activation Functionsغیر خطی بودن تابع فعالسازی به ANN ها امکان مدلسازی روابط پیچیده را می دهند .در واقع خیلی از کاربرد ها مخصوصا در دنیای امروز مانند تشخیص چهره یا تشخیص دست خط و خیلی مسائل دیگر مرزهای تصمیم و الگوهای غیر خطی دارند. البته در شبکه عصبی ممکن است از توابع خطی هم استفاده کنیم. مخصوصا در لایه خروجی اما برای شبکه های پیچیده تعداد زیادی توابع فعاساز غیرخطی داریم که هر کدام برای بخش های خاصی از شبکه عصبی اعمال می شوند. می توان گفت پرکاربرد ترین ها تابع سیگموئید ((لجستیک) Sigmoid) , تابع تانژانت هیپربولیک ((تانه) tanh) , واحد خطی باز‌انگیزی شده(ReLU)  ,که دارای محبوبیت بیشتری است و خودش شامل بخش های مختلفی می شود یا Softmax . بیایید به دنیای فعالسازها برویم خط مقدم شبکه های عصبی!1.1.تابع فعالسازی سیگموید (Sigmoid Activation Function)تابع سیگموید با کد پایتون توسط من ایجاد شده است تابع سیگموید(Sigmoid) یک تابع غیر خطی به شکل S است ومعمولا برای خروجی لایه های یک شبکه عصبی کاربرد دارد. این تابع به صورت پیش فرض خروجی بین (0,1) می دهد. به عبارت دیگر همیشه محدود است. یعنی خروجی آن نمی تواند کمتر از 0 و بیشتر 1 باشد و ماهیت مثبت دارد. پس برای مسائل کلاس بندی و مسائلی که به احتمالات نیاز دارند مناسب است. می توان برای بعضی کاربرد های خاص از تبدیلی ساده برای تغییر محدوده خروجی استفاده کرد. تعریف ریاضی آن با فرمولσ(x) = 1 / (1 + exp(-x))در اینجا، exp عدد اویلر (پایه لگاریتم طبیعی) است و  xورودی تابع می‌باشد.یکی از نقاط ضعف تابع Sigmoid ، مشکل گرادیان محو شونده است. وقتی ورودی تابع Sigmoid بسیار بزرگ می‌شود، خروجی تابع به سمت 1 و وقتی ورودی بسیار کوچک است، خروجی به سمت صفر 0 گرایش پیدا می کند. این باعث می‌شود که مشتق تابع Sigmoid در این نقاط به سمت صفر برود، یعنی گرادیان‌ها بسیار کوچک شوند. و فرایند آموزش شبکه عمیق ممکن است کند یا حتی متوقف شود.2.1.تابع تانژانت هیپربولیک ((تانه) tanh)تابع تانژانت با کد پایتون توسط من ایجاد شده است تابع تانژانت (tanh) یک تابع غیر خطی مانند Sigmoid به شکل S است. با این تفاوت که خروجی ای بین (1.-1) دارد. که باعث می شود مقدار میانی آن 0 باشد و مقادیر منفی را هم شامل شود.فرمول ریاضی tanh(x) به صورت زیر است :                                                tanh(x) = (e^x - e^(-x)) / (e^x + e^(-x))در این فرمولe  نمایانگر عدد اویلر است و x ورودی تابع است.هر دو تابع فعال‌سازی tanh و sigmoidمحدودیتی در مقادیر خروجی خود دارند، که این محدودیت می‌تواند به کنترل مشکل گسترش گرادیان کمک کند. زمانی که مقادیر خروجی شبکه عصبی به سمت مقادیر بسیار بزرگ یا بسیار کوچک حرکت می‌کنند، ممکن است گرادیان‌ها به سرعت بزرگ یا کوچک شوند، که مشکلاتی را در فرآیند آموزش به وجود می آورند.در تابع tanh محدوده خروجی بین (1.-1)است. که باعث &quot;مرکز‌شده کردن داده‌ها&quot; می شود. یعنی میانگین آن‌ها به صورتی تنظیم شده است که در حدود صفر باشد. این می‌تواند به عملکرد بهتر شبکه‌های عصبی کمک کند، زیرا وزن‌ها به سمت هر دو طرفی از صفر متمایل نخواهند شد.در این نمودار می توانید تفاوت بین Sigmoid vs. Tanh را بهتر درک کنید.توابع Sigmoid vs. Tanh با کد پایتون توسط من ایجاد شده استدر تابع Sigmoid معمولاً به دلیل وجود محدودیت خروجی در بازه (0،1) ممکن است شبکه‌های عصبی دچار مشکل گرادیان ناپایداری شوند، به خصوص در شبکه‌های عمیق. tanh به دلیل ویژگی‌هایی که در کنترل گرادیان‌ها و میانگین ‌گیری داده‌ها ارائه می‌دهد به طور کلی معمولاً ترجیح داده می‌شود.3.1. تابع فعالسازی Rectified Linear Unit  (ReLU)تابع Relu با کد پایتون توسط من ایجاد شده است واحد خطی یکسو شده (ReLU) یکی از رایج ‌ترین و محبوب ‌ترین توابع فعال‌سازی غیرخطی است که در شبکه‌های عصبی مصنوعی مورد استفاده قرار می‌ گیرد. اولین و مهم ترین ویژگی ReLU سادگی آن است.فرمول محاسباتی ReLU به صورت زیر است :                                                                  f(x) = max(x, 0)این فرمول نشان می دهد که اگرمقدار ورودی مثبت باشد. ReLU ورودی را به عنوان خروجی ارسال می کند. درغیر این صورت مقدار خروجی صفر است و هر نورونی که خروجی ReLU آن صفر باشد، به معنای غیرفعال بودن آن نورون است. اصطلاحا آن نورون مرده است. به عبارت دیگر ReLU برای ورودی‌هایی که کمتر از صفر هستند، مقدار ثابت صفر را خروجی می‌دهد. که به آن “اسپارسیتی (sparsity) “می گویند. این ویژگی با کاهش هم ‌پیوندی (co-adaptation) (هم ‌پیوندی زمانی اتفاق می‌افتد که دیتکتورهای ویژگی ، به جای اینکه ویژگی‌های مجزا را یاد بگیرند به طور فزاینده‌ای به یاد گیری یکدیگر وابسته می‌شوند) (دیتکتورهای ویژگی(feature detectors)  (آشکارسازهای ویژگی، بخش‌هایی از شبکه‌های عصبی مصنوعی هستند که وظیفه‌ی شناسایی و استخراج الگوهای خاص از داده‌ها را بر عهده دارند) را بهبود بخشیده و overfitting را کاهش دهد.تابع ReLU از نظر محاسباتی کارایی بالایی دارد و در مقایسه با توابع فعال‌سازی پیچیده‌ ترمانندsigmoid  یا tanh که توان دار هستند ومخصوصا برای مقادیر بزرگ که  گرادیان آنها به سرعت به صفر نزدیک می‌شود ، ReLU به خصوص از طریق الگوریتم backpropagation بهترین عملکرد را ارائه می‌دهد. گرادیان ReLU همواره 0 یا 1 است. که بهینه ‌سازی را در طول آموزش آسان ‌تر می‌کند و منجر به کاهش گرادیان می‌شوند .اما مهم است توجه داشته باشیم که ReLU با مشکل &quot;نیروی زنده ‌ی ReLU&quot; مواجه است، این مسئله ممکن است به خصوص در آغاز آموزش شبکه بوجود بیاید. مشکل &quot;نیروی زنده‌ی ReLU&quot; یا &quot;Dying ReLU&quot; به موقعیتی اشاره دارد که نورون‌های در یک شبکه عصبی با استفاده از تابع فعال‌سازی ReLU به گونه‌ای تنظیم ‌شوند که گرادیان آن‌ها همیشه صفر باشد و در نتیجه هیچ گونه به ‌روزرسانی وزنی در آموزش انجام نمی‌شود. این موضوع می‌تواند به عدم آموزش یا آموزش ناکافی برای برخی از نورون‌ها منجر شود و کارایی شبکه را به شدت کاهش دهد. حتی باعث شود که بخشی از شبکه به طور کامل غیرفعال شود. برای کاهش مشکل &quot;نیروی زنده‌ی ReLU&quot;، می‌توان از نسخه‌هایی مانند Leaky ReLU، Parametric ReLU (PReLU) ، Exponential Linear Units (ELU) استفاده کرد. که مسئله Dying ReLU را به صورتی محدود شده رفع می‌کنند.4.1. تابع فعالسازی Leaky ReLUدر این نمودار میتونیم تفاوت واضح ReLU Leaky ReLU Vs  را ببینیم. این نمودار توسط من با کد پایتون رسم شده است . یک نسخه اصلاح‌ شده از تابع فعال‌سازی ReLU است که به طور خاص برای مقابله با مشکل &quot;نیروی زنده‌ی ReLU&quot; طراحی شده است. در Leaky ReLU، برای مقادیر منفی، یک شیب بسیار کوچک (به عنوان مثال، 0.01) به جای صفر استفاده می‌شود. در نتیجه اگر مقدار غیر صفر باشد Dying ReLU اتفاق نمی افتد. این باعث می‌شود که شبکه عصبی قابلیت آموزش و عملکرد بهتری داشته باشد، به ویژه در مواقعی که ممکن است مواجه به داده‌های با الگوهای منفی باشد.فرمول ریاضی آن به این صورت است که :                                                        f(x) = { x,        if x ≥ 0                                                                    ax,       if x &lt; 0که در آن  a معمولاً یک عدد کوچک مثبت است که معمولاً بین 0 و 0.01 یا 0.1 قرار دارد.زمانی که شبکه‌های عمیق با گرادیان‌های ناپایدار روبرو می‌شود، استفاده از Leaky ReLU می‌تواند کمک کننده باشد زیرا حداقل گرادیانی برای ورودی‌های منفی دارد. Leaky ReLU به دلیل محاسبه شیب برای ورودی‌های منفی نسب به ReLU ممکن است به محاسبات بیشتری نیاز داشته باشد. به طور مثال برای بهبود عملکرد شبکه‌های عصبی کانولوشنی (CNN)  برای شناسایی اشیاء در تصاویر تاریک یا کم نور که اطلاعات ضروری در این قسمت‌ها از دست رفته است یا شبکه‌های متخاصم مولد (GANs)، که ممکن است با گرادیان‌های پراکنده (sparse gradients) روبرو شویم، استفاده از Leaky ReLU می‌تواند بسیار مفید باشد.5.1. رلو پارامتری (PReLU)در این نمودار می تونیم تفاوت واضح  Leaky ReLU  Vs Parameterized ReLU (PReLU) را ببینیم. این نمودار توسط من با کد پایتون رسم شده است  رلو ReLU پارامتری برای ورودی‌های منفی خروجی صفر نمی‌دهد، بلکه یک شیب قابل یادگیری را به آنها اختصاص می‌دهد. و به دلیل محاسبه شیب برای ورودی‌های منفی، بیشتر از ReLU استاندارد و Leaky ReLU محاسبات بیشتری دارد که مقداری پیچیدگی آن را نیز بیشتر می کند . برای وظایفی که در آنها انعطاف ‌پذیری و دقت بالا مهم است، مانند شبکه‌های عصبی عمیق پیچیده، مفید است.فرمولی همانند فرمول Leaky ReLU دارد به این تفاوت که مقدار a در طول فرآیند آموزش توسط شبکه عصبی تعیین می‌شود.6.1. تابع فعال‌سازی Exponential Linear Unit (ELU) تابع ELU با کد پایتون توسط من ایجاد شده استواحد خطی نمایی (ELU) برای مقادیر منفی یک تابع غیرخطی با رفتار نرمتراز ReLU استفاده می‌کند،  ELU نیاز به پارامتری برای تنظیم شیب ندارد و فقط یک پارامتر برای تنظیم شدت نرمی تابع دارد. این باعث می‌شود که ELU در نزدیکی مبدا خطی باشد و به طور میانگین سریع‌تر از صفر به سمت منفی می‌رود که می‌تواند باعث کاهش اثر شیفت بایاس شود. این به معنای این است که مدل با توجه به داده‌های ورودی و بایاس‌های آموزش داده شده به دقت بیشتری پاسخ می‌دهد و عملکرد بهتری دارد. ELU در بخش منفی خود، از یک تابع اکسپوننشیال (نمایی) استفاده می‌کند.فرمول آن به صورت زیر است :f(x) = { x                        , if x ≥ 0
            a(e^(x^) - 1)       ,if x &lt; 0
در اینجا، a یک پارامتر مثبت است که به عنوان شیب ELU عمل می‌کند. این تابع به طور مشابه با ReLUبرای ورودی‌های مثبت عمل می‌کند، اما برای ورودی‌های منفی از یک تابع غیرخطی با رفتاری نرمتر استفاده می‌کند.یکی از مزایای ELU نسبت به توابع دیگر، جلوگیری از مشکل Dying ReLU است. ELU یک تابع فعال‌سازی قدرتمند و انعطاف ‌پذیر است که می‌تواند در طیف وسیعی از وظایف یادگیری عمیق مورد استفاده قرار گیرد.7.1.تابع فعالسازی Scaled Exponential Linear Unit (SELU):تابع SELU با کد پایتون توسط من ایجاد شده است ای ال اس یو ELUS (Scaled Exponential Linear Unit)  نیز یک تابع فعال‌سازی است که از ELU مشتق گرفته شده است، یکی از مزایای بزرگ SELU این است که خروجی‌های آن از توزیعی با واریانس ثابت تولید می‌شوند. این ویژگی باعث می‌شود که شبکه‌های عصبی کوچک با استفاده از SELU بهتر بتوانند با مشکلاتی همچون گرادیان‌های ناپایداری که در شبکه‌های عمیق وجود دارند، مقابله کنند.فرمول ریاضی این است :f(x) = λ * x if x ≥ 0f(x) = λ * α * (exp(x) - 1) if x &lt; 0λ ≈ 1.0507α ≈ 1.6733پارامترهای λ و α مقادیر ثابت هستند که برای بهینه سازی عملکرد SELU انتخاب شده اند.اس ای ال یو  SELU نسبت به توابع فعال‌سازی ساده ‌تر مانند ReLU یا Leaky ReLU پیچیده ‌تر است. این تابع شامل عملیات اکسپوننشیال است که ممکن است نیازمند محاسبات بیشتری باشد و از لحاظ محاسباتی هزینه‌ بر باشد. مقادیر پارامترهای SELU (مانند ضریب اکسپوننشیال) بسیار حساس هستند و نیاز به تنظیم دقیق دارند.همانطور که در تصویر مشاهده می کنید SELU در محدوده‌ای نزدیک به صفر، رفتارش شبیه به یک تابع خطی است. این باعث می‌شود که شبکه‌های عصبی که با SELU آموزش می بینند با مشکل مرگ تابع (vanishing gradient problem) که ممکن است در توابع فعال‌سازی غیرخطی مشاهده شود، کمتر مواجه شوند .8.1.تابع فعال سازی Softmaxتابع softmax با کد پایتون توسط من ایجاد شده است تابع softmax که با نام softargmax  یا تابع نمایی نرمال شده نیز شناخته می‌شود، . خروجی‌های خام شبکه عصبی را به بردار احتمالات تبدیل می‌کند.  Softmax به طور غیرمستقیم عمل نرمال‌سازی را انجام می‌دهد. هدف اصلی Softmax تبدیل مقادیر خروجی به توزیع احتمال است، اما این کار به طور ضمنی باعث نرمال‌سازی مقادیر نیز می‌شود.یعنی قبل از اعمال softmax، برخی از مولفه های برداری ممکن است منفی یا بزرگتر از یک باشند. و ممکن است 1 نباشند. اما پس از اعمال softmax، هر جزء در بازه زمانی قرار می گیرد ( 0 ، 1 ) ، و اجزاء تا 1 جمع می شوند، به طوری که می توان آنها را به عنوان احتمال تفسیر کرد. علاوه بر این، اجزای ورودی بزرگتر با احتمالات بزرگتر مطابقت دارند.فرمول استاندارد softmax به صورت زیر است :σ(z)_j = e^(z_j) / (∑_(k=1)^K e^(z_k))تابع استاندارد softmax اغلب در لایه نهایی یک طبقه‌ بندی کننده مبتنی بر شبکه عصبی استفاده می‌شود. در واقع، می‌توانید تابع softmax را به عنوان تعمیم برداری فعال‌سازی سیگموئید در نظر بگیرید. دو تابع softmax و سیگموئید هر دو مشتق پذیر هستند، این ویژگی بسیار مهم است زیرا در الگوریتم‌های بهینه‌سازی و آموزش شبکه‌های عصبی، معمولاً به محاسبه مشتقات توابع نیاز داریم. به عنوان مثال، در الگوریتم پس‌انتشار خطا (backpropagation) ، مشتقات تابع فعال‌سازی‌ برای محاسبه گرادیان‌ها استفاده می‌شوند تا وزن‌ها و سایر پارامترهای شبکه بروزرسانی شوند. بنابراین، ویژگی مشتق پذیری این توابع ضروری است .تابع سیگموئید معمولاً برای مسائل دسته ‌بندی دو کلاسه استفاده می‌شود، در حالی که تابع softmax برای دسته‌بندی چند کلاسه استفاده می‌شود. با این حال، اگر تعداد کلاس ‌ها 2 باشد، تابع softmax به تابع سیگموئید تبدیل می‌شود.پیاده سازی توابع فعالسازیبرای پیاده سازی توابع فعالسازی در PyTorch یا TensorFlow چون معمولا توابع فعالسازی معروف از قبل تعریف شده هستند برای پیاده سازی آنها فقط کافی است که نام آنها را بنویسیم این یک قاعده کلی است و بستگی به جزئیات پیاده‌ سازی هر تابع فعالسازی دارد.در PyTorch با&quot;import torch.nn as nn&quot; پیاده سازی می شوند مانند شبه کد های زیر:import torch.nn as nn# Define a layer with ReLU activationrelu_layer = nn.ReLU()####################################### Define a layer with Sigmoid activationsigmoid_layer = nn.Sigmoid()####################################### Define a layer with Tanh activationtanh_layer = nn.Tanh()در TensorFlow با tf.keras.layers.Activation برای پیاده سازی توابع فعالسازی استفاده می شود مانند شبه کد های زیر :import tensorflow as tf# Example of using ReLU activation functionactivation = tf.keras.layers.Activation(&#039;relu&#039;)# Example of using Sigmoid activation functionactivation = tf.keras.layers.Activation(&#039;sigmoid&#039;)# Example of using Tanh activation functionactivation = tf.keras.layers.Activation(&#039;tanh&#039;)# Example of using Leaky ReLU activation functionactivation = tf.keras.layers.LeakyReLU(alpha=0.01)  # Adjust the alpha value as neededانواع توابع فعالساز دیگری هم وجود دارد که می توان از آن ها با توجه به مسئله ای که داریم می توانیم استفاده کنیم. اما مهم ترین و پرکاربرد ترین توابع در بالا ذکر شد. در قسمت بعد می خواهیم پس انتشار (backpropagation) را بررسی کنیم . آماده ای ؟؟؟؟؟ بزن بریم !2 .پس انتشار (Backpropagation)پس انتشار، مخفف &quot;انتشار به عقب خطاها&quot;  اصطلاح &quot;تصحیح خطای پس انتشار&quot; در سال 1962 توسط فرانک روزنبلات معرفی شد. و همانطور که در تاریخچه مقاله ها در بالا اشاره شد توسط Paul Werbos در سال 1974 توسعه داده شد. اما تا سالها مورد توجه قرار نگرفت .انتشار پس ‌پشتی برای اولین بار در سال 1986 توصیف شد.پس انتشار (backpropagation) یک الگوریتم اساسی در یادگیری عمیق است که &quot; گرادیان تابع خطا(gradient of the loss function) &quot; را نسبت به وزن‌ های شبکه به کمک مشتقات جزئی توابعی که در شبکه استفاده می‌شوند با استفاده از chian rule محاسبه می‌کند. روشی برای بروزرسانی وزن ‌ها (W) به طوریکه  loss function  کمترین مقدار شود. معمولاً با الگوریتم‌های بهینه‌سازی مانند کاهش تصادفی گرادیان(stochastic gradient descent (SGD))  یا نمونه های مشابه آن این کار را انجام می دهد.ترم &quot; backpropagation&quot; شامل انتشار خطا به سمت عقب (propagating the error backward)  از لایه خروجی به لایه ورودی است، در حالی که وزن‌ها به ‌روز رسانی می‌شوند. اما پس انتشار چیه و چرا این روش در یادگیری شبکه های عصبی خیلی مهم هست .منبع این گیف مقاله ای در Medium است الگوریتم backpropagation دارای دو مرحله است forward pass و backward pass در اینجا ابتدا مرحله‌ی forward pass را شرح می‌دهم.فاز فوروارد (forward pass)مرحله‌ی forward pass در الگوریتم backpropagation ، مرحله ‌ای است که داده‌ها از لایه‌های ورودی به لایه‌های خروجی منتقل و خروجی محاسبه می‌شود. در مرحلهٔ  forward pass ، توابع فعال‌سازی غیر خطی برای لایه ‌های مختلف شبکه عصبی عمل می‌کنند. برای مثال معمولا از تابع ReLU (Rectified Linear Unit)  استفاده می‌شود.این خاصیت باعث می‌شود که ReLU نورون‌هایی که فعالیت ضعیف دارند (یعنی خروجی منفی دارند) را غیرفعال کند، در نتیجه شبکه عصبی بیشتر به ویژگی‌های مهم و برجسته داده‌ها توجه کند. در مرحله forward pass ، مقادیر ورودی به هر لایه از توابع فعالسازی مورد نظر عبور می‌کنند و سپس به لایه بعدی منتقل می‌شوند. این عمل مثلا در PyTorch توسط ماژول‌های مانند &#x60;torch.relu&#x60; (برای ReLU) با شبه کد زیر می توانیم انجام دهیم که در آن مقادیر ورودی x را به تابع torch.relu می‌دهد و خروجی محاسبه شده را چاپ می‌کند.import torchx = torch.tensor([-1.0, 0.0, 1.0, 2.0])output = torch.relu(x)print(output)یا با ماژول &#x60;torch.sigmoid&#x60; (برای Sigmoid) که به راحتی با کد زیر قابل پیاده سازی است. این کد مقادیر ورودی x را به تابع torch.sigmoid می‌دهد و خروجی محاسبه شده را چاپ می‌کند.import torchx = torch.tensor([-1.0, 0.0, 1.0, 2.0])output = torch.sigmoid(x)print(output)محاسبه تلفات یا خطا (Loss Calculation):تقریبا می توان گفت Loss Calculation در هنگام forward pass انجام می شوئد. داده ها به خروجی رفته اند و برای backward pass باید آماده شوند. پس باید مقدار خطا ها با Loss Calculation  محاسبه شود. ما معمولاً از یک تابع هزینه (Loss Function) برای محاسبه این خطا استفاده می‌کنیم که با اختلاف  مقادیر پیش‌بینی شده توسط مدل و مقادیر واقعی، خطای مدل را بدست بیاوریم. هدف ما این است که این خطا ها را کم کنیم تا مدل بهتری برای پیش‌بینی داده‌ها داشته باشیم.در PyTorch، محاسبه تلفات به سادگی با یکی از توابع هزینه به عنوان مثال Cross Entropy Loss امکان‌ پذیر است. این توابع هزینه به عنوان یک لایه از شبکه عصبی تعریف می‌شوند و مقدار خطا را محاسبه می‌کنند و به عنوان ورودی به مرحله backward pass برای بروزرسانی وزن‌ها و بایاس‌ها وارد مرحله بعد یعنی backwar pass می شویم. توجه داشته باشید که در PyTorch، توابع هزینه به صورت خودکار محاسبه می‌شوند و شما نیازی به انجام محاسبات دستی ندارید. و  به سادگی با کد زیر میتوان آن را محاسبه کرد .# Cross Entropy Losscriterion = nn.CrossEntropyLoss()گذر به عقب (Backward Pass (Backpropagation)):بعد از انجام forward pass وارد فاز جدید یعنی Backward Pass می شویم. در مرحله Backward Pass (Backpropagation)، خطا از لایه خروجی به لایه‌ های ورودی منتشر می‌شود. این انتشار خطا از انتهای شبکه به سمت ورودی ‌ها با قاعده زنجیره‌ای (Chain Rule) انجام می‌ شود. Chain Rule به ما اجازه می‌دهد که مشتق یک تابع ترکیبی را با استفاده از مشتقات تابع‌های تشکیل ‌دهنده آن محاسبه کنیم. این الگوریتم برای محاسبه گرادیان‌ها (مشتقات جزئی) نسبت به وزن ‌های شبکه در زمان آموزش استفاده می‌شود، که سپس با استفاده از روش‌های بهینه‌ سازی مانند روش گرادیان کاهشی، وزن‌ها را بروزرسانی می کند. به طور خلاصه، Backpropagation مراحل مختلفی دارد که به کمک قاعده زنجیره‌ای، خطا را از لایه‌های خروجی به لایه‌های ورودی منتشر می ‌کند و گرادیان‌ ها را محاسبه می‌کند تا وزن‌ها بروزرسانی شوند.می‌توان از کتابخانه PyTorch برای پیاده‌سازی الگوریتم Backpropagation  استفاده کرد. در PyTorch، این فرآیند به صورت خودکار انجام می ‌شود و شما نیازی به پیاده‌ سازی دستی آن ندارید. با استفاده از توابع اتوماتیک مشتق ‌گیری  PyTorch ، می‌توان فقط به شبکه عصبی بفهمانیم که خطا چگونه محاسبه شود، این تکه کد تابع هزینه را به شبکه عصبی معرفی می‌کند.# Define the loss functioncriterion = nn.MSELoss()و سپس PyTorch به صورت خودکار مشتقات لازم را محاسبه و وزن‌ها را به ‌روز می‌کند. به عنوان مثال، می ‌توانید از کلاس‌ های torch.nn.Module و torch.optim  برای تعریف شبکه عصبی و انتخاب روش بهینه ‌سازی استفاده کنید. سپس با تعریف تابع خطا و استفاده از توابع مشتق ‌گیری  PyTorch، می ‌توانید شبکه را آموزش دهید.در کلاس torch.nn.Module:import torch.nn as nn# Define a simple neural network modelclass SimpleModel(nn.Module):def __init__(self):super(SimpleModel, self).__init__()self.fc1 = nn.Linear(64, 32)  # Define a linear layer with input size 64 and output size 32self.fc2 = nn.Linear(32, 10)  # Define another linear layer with input size 32 and output size 10def forward(self, x):x = nn.functional.relu(self.fc1(x))  # Apply ReLU activation function to the output of first layerx = self.fc2(x)  # Get the output of second layerreturn x# Create an instance of the SimpleModelmodel = SimpleModel()در کلاس torch.optim:import torch.optim as optim# Define the modelmodel = SimpleModel()# Define the optimizeroptimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)# Define the loss functioncriterion = nn.CrossEntropyLoss()# Inside the training loop:# optimizer.zero_grad()  # Clear gradients# outputs = model(inputs)  # Forward pass# loss = criterion(outputs, labels)  # Calculate loss# loss.backward()  # Backward pass# optimizer.step()  # Update weightsبه‌روزرسانی وزن‌ها (Update Weights):بعد از طی کردن همه مراحل پس انتشار و محاسبه خطا و برگشت مقدار خطا از لایه خروجی به لایه ورودی و محاسبه گرادیان ها باید وزن ها بروزرسانی شوند. وزن (Weight) در مدل‌های یاد گیری عمیق یکی از پارامترهای مهم است که مقادیر آن در زمان آموزش مدل بروزرسانی می‌شود. بروزرسانی وزن به معنای تغییر مقادیر وزن‌ها است به نحوی که مدل بهترین عملکرد را داشته باشد. این بروزرسانی معمولاً با استفاده از الگوریتم‌های بهینه‌سازی مانند  Gradient Descent و یا روش‌های بهینه‌سازی پیشرفته ‌تری مانند Adam انجام می‌شود. در برخی موارد، ممکن است بهینه‌ سازی انجام شده باشد و بروزرسانی وزن‌ها لازم نباشد.در کتابخانه  PyTorch ، وزن‌ها به ‌صورت شیء torch.nn.Parameter نمایش داده می‌شوند و می ‌توانند به ‌راحتی در کد تعریف و مدیریت شوند.import torchimport torch.nn as nn# Define a linear layer with two inputs and one outputclass LinearLayer(nn.Module):def __init__(self):super(LinearLayer, self).__init__()self.weight = nn.Parameter(torch.randn(2, 1))  # Define weights as a Parameter objectself.bias = nn.Parameter(torch.randn(1))  # Define bias as a Parameter objectdef forward(self, x):return torch.matmul(x, self.weight) + self.biasدر این کد، ما یک لایه خطی با دو ورودی و یک خروجی تعریف کرده‌ایم. وزن‌ها (weight) و انحراف (bias) به عنوان اشیاء torch.nn.Parameter درون تابع __init__ تعریف شده‌اند.به طور خلاصه، backpropagation فرآیند محاسبه گرادیان‌ها و بروزرسانی وزن ‌های شبکه عصبی است که از خطاهای مشاهده شده در لایه‌های خروجی شروع می‌شود و به سمت لایه ‌های ورودی حرکت می ‌کند تا وزن‌های شبکه بروز شوند و عملکرد شبکه بهبود یابد.نتیجه‌گیری پارت 2در این پارت توانستیم راجع به توابع فعالساز مهم مطالب مهمی را بیاموزیم و بفهمیم که در منطق آنها چه می گذرد. در واقع ما هنگام استفاده از آنها فقط این توابع را صدا میزنیم و در پشت صحنه تمام محاسبات انجام می شود . استفاده از تابع فعالساز مناسب به گرفتن نتیجه مطلوب در شبکه کمک می کند . زمانیکه ما بدانیم که در منطق آنها چه می گذرد هنگام استفاده بهتر می توانیم تصمیم بگیریم که کدام یک را به کار ببریم. همچنین الگوریتم پس انتشار را  بررسی کردیم و فاز های مختلف آن را آموختیم که با قاعده زنجیره ای chian rule که در واقع مشتق گیری از وزن هاست و اساس پس انتشار می باشد آشنا شدیم. در واقع پس انتشار ترکیبی از Feedforward و Feedback است که در دو فاز مهم در نحوه یادگیری شبکه هستند. فاز های پس انتشار در 4 مرحله پیوسته انجام می شود. می توانیم بگوییم که درهمه شبکه های عصبی مرحله Feedforward وجود دارد چرا که وزن های داده های ورودی به شبکه باید برای انجام محاسبات و رفتن به خروجی این مرحله را داشته باشند .در پارت 3 به موضوع بسیار مهم معماری شبکه های عصبی خواهیم پرداخت. انواع معماری های مهم (RNN, LSTM, CNN) رو خواهیم آموخت. و کاربردهایی که در حال حاظر در دنیای واقعی دارند. من برای یادگیری اونها بسیار شگفت زده هستم. بسیاری از سوالاتی که ممکن است در ذهن شما باشد با فهمیدن این معماری ها پاسخ داده خواهد شد. به من بپیوندید . نظرات خودتون رو راجع به این مقاله 3 قسمتی با من در اشتراک بگذارید . ممنونممنون از شما که در این سفر به دنیای Deeps با من همراه بودید.لینک مقاله به انگلیسی در Mediumلینک پارت 1 مقاله به انگلیسی در Mediumپارت 1 : تاریخچه هوش مصنوعی و چگونگی عملکرد شبکه های عصبی سادهپارت 2 : نحوه یادگیری در شبکه های عصبی عمیق ( انواع یادگیری و توابع فعالساز و پس انتشار( backpropagation)پارت 3 : انواع مهم ترین معماری های شبکه های عصبی عمیق (RNN / LSTM / CNN )لطفا اگر مایل بودید مقاله دیگر من &quot; آیا DeepFake فناوری آینده‌ای است یا یک تهدید؟ آیا خط میان واقعیت و ساختگی از بین خواهد رفت؟&quot; رو در ویرگول  ببینید .صفر تا صد درباره PCA یا بررسی دقیق تحلیل مؤلفه‌های اصلی بدانیدامیدوارم از مطالب لذت برده باشید .</description>
                <category>محمد جواد نجادی</category>
                <author>محمد جواد نجادی</author>
                <pubDate>Wed, 28 Feb 2024 10:45:32 +0330</pubDate>
            </item>
                    <item>
                <title>عمیق‌تر و عمیق‌تر در عمق یادگیری عمیق و شبکه‌های عصبی مصنوعی</title>
                <link>https://virgool.io/@m.javadnejadi/%D8%B9%D9%85%DB%8C%D9%82-%D8%AA%D8%B1-%D9%88-%D8%B9%D9%85%DB%8C%D9%82-%D8%AA%D8%B1-%D8%AF%D8%B1-%D8%B9%D9%85%D9%82-%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D8%B9%D9%85%DB%8C%D9%82-%D9%88-%D8%B4%D8%A8%DA%A9%D9%87-%D9%87%D8%A7%DB%8C-%D8%B9%D8%B5%D8%A8%DB%8C-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-berpr0zbuzel</link>
                <description>#  پارت 1 : تاریخچه هوش مصنوعی و چگونگی عملکرد شبکه های عصبی ساده باید به لایه های عمیق تری نفوذ کنیم!تصویر در صحنه‌ی آخر فیلم Inception سوالات بسیاری را برانگیخت.تلقین Inceptionباید به لایه های عمیق تری نفوذ کنیم !( We need to go deeper) این جمله &quot;کاب&quot; در فیلم inception است. این جمله زمانی گفته شد که در مورد رفتن به لایه های عمیق تر خواب بحث میکردن و این که غیر ممکن هستاما &quot; باید به لایه های عمیق تری نفوذ کنیم &quot; دقیقا! برای ساختن دنیای جدید باید به لایه های عمیق و عمیق تر بریم .در واقع فیلم inception میتونه یادگیری عمیق رو خیلی خوب به تصویر بکشه. شخصیت &quot;فیشر&quot; مانند داده های ورودی به شبکه است. ما شبکه رو با داده های خام ورودی آموزش میدیم که نتیجه مطلوب (نابودی امپراطوری پدرش) رو به دست بیاریم. داروی خواب آوری که میتونست اونها رو توی خواب نگه داره که بتونن به لایه های بعدی و عمق بیشتر برن مثل توابع فعالسازی میمونن (در واقع بدون توابع فعالسازی شبکه های عمیق قابل پیاده سازی نیست ) .&quot;مال&quot; همسر &quot; کاب &quot; یکی از چالش های اصلی  توی فیلم هست که در روند کارها اخلال ایجاد می کرد می تونیم بگیم &quot; مال &quot; مثل گرادیان ناپایدار محو شونده یا تابع ضرر هست. ما در شبکه تلاش می کنیم تابع ضرر رو محاسبه و کاهش بدیم. گرادیان ناپایدار محو شونده در شبکه های عمیق  با مشتق گیری وزن ها (W) رو به سمت صفر می بره می تونه مانع از بروزرسانی وزن ها بشه که باعث اختلال در شبکه و حتی توقف اون میشه. &quot;عمو پیتر&quot; رو می تونیم بایاس (Bias) شبکه در نظر بگیریم چون اگه نباشه ممکنه بعضی از نورون ها خاموش بشن ( فرض کنید پیدا کردن رمز گاو صندوق و متقاعد شدن فیشر به عملکرد نورون ها بستگی داره). &quot;کاب&quot; و گروهش هم معماری های شبکه هستن چرا که نحوه پیشرفت کار و چگونگی انجامش با اونهاست.لایه های خواب مانند لایه های شبکه است هر چه عمیق تر می شیم تعداد لایه ها بیشتر میشه. اساسا هر چه عمیق تر مشکلات شبکه هم بیشتر اما می تونیم نتیجه های لازم رو هم ازش بگیریم . در واقع کل فیلم در مرحلهfeedforward  که وزن ها و بایاس و خروجی تعیین می شود و مرحله بعد از خواب مثل Backpropagatin  است که بعد از اون وزن ها و بایاس بروزرسانی می شود و نتیجه مطلوب که  گذاشتن ایده نابودی امپراطوری پدر فیشر در ذهن اون انجام می شود.در این مقاله سه گانه میخواهیم عمیق و عمیق تر به اعماق شبکه های عصبی برویم و کارکرد آن را بیشتر درک کنیم . در این inception  با من همراه باشید.این مقاله در سه پارت کامل می شود که به شرح زیر است :پارت 1 : تاریخچه هوش مصنوعی و چگونگی عملکرد شبکه های عصبی سادهپارت 2 : نحوه یادگیری در شبکه های عصبی عمیق ( انواع یادگیری و توابع فعالساز و پس انتشار( backpropagation)پارت 3 : انواع مهم ترین معماری های شبکه های عصبی عمیق (RNN / LSTM / CNN) که در این 3 پارت به این موضوعات خواهیم پرداخت که شبکه های عصبی مصنوعی چیه ؟ چطور کار میکند ؟ یادگیری عمیق چیه ؟ در شبکه های عمیق یادگیری چطور انجام می شه و انواع روش های یادگیری شبکه چیه ؟ انواع معماری های اصلی شبکه های عمیق چی هست ؟ آیا واقعا کارکرد شبکه های عصبی مصنوعی مانند نورون های شبکه عصبی انسان است یا فقط الهامی از آن هست ؟ کاربردهای شبکه عصبی چیه ؟ معایبی هم داره ؟چشم اندازالان که در حال خواندن این مقاله هستید. اطلاعات از طریق چشم های شما و با استفاده از شبکه های عصبی و نورون ها ی بسیار پیچیده به مغز ارسال می شود و قسمت‌های مختلف مغز شامل هیپوکمپ، لوب فرانتال، لوب پاریتال و لوب تمپورال و غیره به صورت موازی و سلسله مراتبی (متوالی)در حال پردازش اطلاعات هستند . البته فرایندی که در مغز برای پردازش انجام می شود بسیار پیچیده تراست. داستان الهام بشر از طبیعت برای ساختن دنیای جدید . تغییر چهره آینده جهان. در این مقاله در زمان سفر کردیم تا بدانیم که تغییری که در حال حاضر شاهد آن هستیم از کجا آغاز شده است.تاریخچه شبکه های عصبی:نورون‌هانورون‌ها، سلول‌های اصلی سیستم عصبی، اطلاعات را به یکدیگر و به سایر بخش‌های بدن منتقل می‌کنند. می توان گفت که انسان تقریبا 100 میلیارد نورون در سیستنم عصبی خود دارد در واقع تبادل اطلاعات و انسجام بدن وابسته به نورون هاست . در اوایل قرن 19 ام مطالعات زیادی راجع به نورون ها و نحوه کارکردشان انجام شد. هدف از آن بررسی توانایی یادگیری ماشین بود.سراغازاولین گام ها به سمت شبکه های عصبی مصنوعی در سال 1943 زمانی که  Warren McCulloch، فیزیولوژیست عصبی و ریاضیدان جوان،  Walter Pitts، اولین مدل های شبکه های عصبی را توسعه داد، انجام شد. آنها مقاله ای با عنوان&quot;A Logical Calculus of the Ideas Immanent in NervousActivity&quot; این مدل بر اساس فرضیه‌ای است که فعالیت عصبی را به عنوان یک فرآیند منطقی (مدارهایی هستند که می‌توانند عملیات منطقی مانند AND، OR، و NOT را انجام دهند.) در نظر می‌گیرد. در واقع  نتایج مدل آنها توابع منطقی ساده با ویژگی “all-or-none” &quot;همه یا هیچ&quot; برای فعالیت عصبی بود.پرسپترون (Perceptron)در سال 1957 اولین نمونه ماشینی پرسپترون، Mark I ، توسط Frank Rosenblatt روانشناس امریکایی در آزمایشگاه هوانوردی کرنل ساخته شد. او در سال 1958 مقاله ای را تحت عنوان The perceptron: a probabilistic model for information storage and organization in the brain. منتشر کرد . پرسپترون Rosenblatt یک مدل تک نورون باینری است. و به عنوان اولین نسل از شبکه های عصبی در نظر گرفته می شوند. محدودیت اصلی آن عدم توانایی حل مسائل غیرخطی قابل تفکیک است.آدلین (ADALINE)مدل بعدی ADALINE (Adaptive Linear Neuron or later Adaptive Linear Element) که در سال 1960 در دانشگاه استنفورد توسط پرفسور Bernard Widrow و دانشجوی دکتری او Ted Hoff توسعه داده شد. که از یک پرسپترون با یک تابع فعال‌ساز خطی ( قانون یادگیری حداقل میانگین مربع) استفاده می‌کند. ADALINE یک شبکه عصبی تک لایه با چندین گره است که هر گره چندین ورودی را می پذیرد و یک خروجی تولید می کند. تقاوت اصلی بین ADALINE و پرسپترون استاندارد McCulloch–Pittsدر نحوه یادگیری است. ADALINEمی‌تواند یک تابع خطی را یاد بگیرد. اما پرسپترون استاندارد فقط می‌تواند توابع غیرخطی را یاد بگیرد.زمستان می آید ....ایجاد شده توسط DALEE-3زمستان اول هوش مصنوعی (AI winter) دوره‌ای از کاهش سرمایه ‌گذاری و علاقه در تحقیقات هوش مصنوعی بود که از اواخر دهه 1960 تا اواسط دهه 1980 ادامه داشت.در سال 1969 Minsky and Papert کتابی نوشتند تحت عنوان An Introduction to Computational Geometry  که بخشی از کمپین بی اعتبار کردن تحقیقات هوش مصنوعی بود که در آن تعدادی از مشکلات اساسی مانند  محدودیت های پرسپترون تک لایه را تعمیم داد. اگرچه نویسندگان به خوبی می‌دانستند که پرسپترون‌های قدرتمند چندین لایه دارند و پرسپترون‌های اصلی پیش‌خور Rosenblatt دارای سه لایه هستند، آن‌ها پرسپترون را به عنوان یک ماشین دو لایه تعریف کردند که می‌تواند فقط مسائل خطی قابل تفکیک را مدیریت کند و برای مثال، نمی‌تواند exclusive-OR را حل کند.در سال 1973، ارزیابی تحقیقات دانشگاهی در زمینه هوش مصنوعی به نام &quot;گزارش لایت هیل&quot; منتشر شد. تا آن زمان به شدت نسبت به تحقیقات در این زمینه انتقاد داشت و اظهار داشت که تحقیقات هوش مصنوعی اساساً نتوانسته است اهداف بزرگی را که تعیین کرده بود برآورده کند. این گزارش باعث شد بریتانیا کمک مالی به هوش مصنوعی را متوقف کند. این اولین زمستان هوش مصنوعی را آغاز کرد .بین سالهای 1956 تا 1974 با تامین سرمایه از آژانس پروژه های تحقیقاتی پیشرفته دفاعی (DARPA) پروژه هایی مانند ترجمه ماشینی کلمه به کلمه روسی به انگلیسی و آموزش چکرز به کامپیوتر و یک شبکه متشکل از پرسپترون ها که تکرار خام نورون های مغز انسان بودند ادامه پیدا کردند . حجم زیادی ازتبلیغات و هیاهوی AI بخاطر این پروژه ها بود. با کمرنگ شدن توجه ها به هوش مصنوعی بودجه  موجود به حداقل رسید . تنها چندین محقق به کار بر روی مشکلاتی مانند تشخیص الگو ادامه دادند. اما، در این دوره تلاش مداوم همچنان ادامه پیدا کرد.در سال 1972 Klopf مبنایی برای یادگیری در نورون های مصنوعی بر اساس یک اصل بیولوژیکی ایجاد کرد. در سال 1974 Paul Werbos روش یادگیری پس انتشار(back-propagation) را توسعه داد، اگرچه اهمیت آن تا سال 1986 به طور کامل درک نشد.فوکوشیما (Kunihiko Fukushima) یک شبکه عصبی چند لایه آموزش دیده گام به گام برای تفسیر کاراکترهای دست نویس توسعه داد. او مقاله  Cognitron: A self-organizing multilayered neuronet network را در سال 1975 منتشر شد.تولدی دوباره ....در دهه 1980 چندین رویداد باعث تجدید علاقه شد. Kohonen کمک های زیادی به حوزه شبکه های عصبی مصنوعی کرده است. او شبکه عصبی مصنوعی را معرفی کرد که گاهی اوقات نقشه یا شبکه کوهونن نامیده می شود.در سال 1982 John Hopfield مقاله ای درباره Neural Networks and Physical Systems with Emergent Collective Computational Abilities ارائه کرد. هاپفیلد recurrent artificial neural network را توصیف می کند که به عنوان سیستم حافظه آدرس پذیر محتوا عمل می کند. آثار او صدها دانشمند، ریاضیدان و فن‌شناس بسیار ماهر را متقاعد کرد که به حوزه نوظهور شبکه‌های عصبی بپیوندند.در سال 1985 مؤسسه فیزیک آمریکا نشستی را آغاز کرد که به یک نشست سالانه تبدیل شد - شبکه‌های عصبی برای محاسبات. در سال 1987، اولین کنفرانس باز در مورد شبکه های عصبی در دوران مدرن. کنفرانس بین‌المللی شبکه‌های عصبی IEEE در سن دیگو برگزار شد و انجمن شبکه‌های عصبی بین‌المللی (INNS) تشکیل شد. در سال 1988 مجله INNS شبکه‌های عصبی تاسیس شد، سپس محاسبات عصبی در سال 1989 و IEEE Transactions on Neural Networks در سال 1990 ایجاد شد.بعد از یک دوره شکوفایی مجددا دوران رکود آغاز شد . این در نهایت با یک زمستان دیگر هوش مصنوعی از اواخر دهه 1980 تا اواسط دهه 90 به پایان می رسد. در واقع نمی توان مرزهای دقیقی برای این مسئله که زمستان های AI از چه تاریخی آغاز و به پایان رسیده تعیین کرد اما می توان فهمید که تحقیقات و تلاش ها منجر به اعتماد دوباره و آغاز فصلی نوین برای تعامل انسان و ماشین که طی سالها فراز و نشیب از دهه 50 و شاید قبل تر به وجو آمده بود منجر به حرکت به سوی تعامل و اعتماد دوباره شد یکی از این عوامل سیستم های خبره بود اما سیستم های خبره چیه ؟ الان هم کاربرد داره ؟ با من همراه باشید ...سیستم های خبرهاولین سیستم های خبره در دهه 1970 به وجود آمدند و در دهه 1980 بیشتر فراگیر شدند. اما سیستم های خبره چیه ؟ سیستم‌های خبره سیستم‌های کامپیوتری هستند که توانایی تصمیم ‌گیری یک متخصص انسانی را شبیه ‌سازی می‌کنند. آن‌ها از یک پایگاه دانش و مجموعه‌ای از قوانین برای تصمیم‌ گیری یا حل مسائل در یک حوزه خاص استفاده می‌کنند . چالش اصلی ساختن ماشین هایی بود که مانند انسان فکر کنند و تصمیم گیری های مهم انجام دهند . این امر باعث شد که رویکرد ها نسبت به اینکه ماشین توانایی یادگیری و تصمیم گیری میتواند داشته باشد را بیشتر کرد چالش بزرگ آن جمع آوری وآماده سازی و هزینه بر بودن داده ها برای آموزش سیستم های خبره بود که به داده های خیلی زیادی برای پایگاه دانش خود نیاز داشت در آن زمان مانند امروز داده های زیاد در دسترس نبود و دوم اینکه این سیستم ها برای مشکلاتی که نیازمند خلاقیت و نواوری بود راهکاری ارائه نمی داد .راهکار چه بود؟استاد بزرگ باخت (The grandmaster lost) !سال 1997 خبری که برای همه بهت آور بود قهرمان بزرگ شطرنج جهان شکست خورد . نه از یک استاد بزرگ دیگر بلکه شکست کاسپاروف از ماشین بود . دیپ بلو(Deep Blue) که یک سیستم خبره شطرنج بود و ساخت ان از دانشگاه کارنگی شروع شد . بعد به IBM راه یافت . نخست در سال 1996 کاسپاروف توانست ان را شکست دهد. در سال 1997 Deep Blue ارتقاع یافت و توانست با نتیجه 2 برد و 3 مساوی کاسپاروف را شکست دهد. می توان گفت یکی از نقطه عطف های هوش مصنوعی Deep Blue بود چرا که دیدگاه ها را نسبت به یادگیری ماشین و هوش مصنوعی بار دیگر تغییر داد.  این اتفاق صنعت بازی را هم در مرحله دگرگونی قرار داد.الفاگو (Alphago) برنامه کامپیوتری که توسط DeepMind برای بازی Go ساخته شده است که در سال 2016 توانست یک بازیکن حرفه ای بازی Go اقای Lee Sedol را شکست داد که فیلم و مستندی هم برای آن به نام AlphaGo - The Movie | Full award-winning documentary ساخته شده است. نکته قابل توجه بازی Go تعداد احتمالات آن است که بسیار بیشتر از شطرنج است . در شطرنج تعداد احتمالات حدود 10^120 است در حالیکه در بازی Go تخمین زده می شود که تعداد حالات ممکن در این بازی حدود 10^761 است.در این بخش میخوایم انواع شبکه های عصبی رو معرفی کنیم و بخشی از کاربرد های مختلف اونها رو بیان کنیم با من همراه باشید .شبکه عصبی مصنوعی (ANNs)منبع تصویر مقاله ای در Mediumشبکه های عصبی مصنوعی (ANNs) یا شبکه های عصبی شبیه سازی شده (SNNs) می توان گفت ساختار کلی آن متشکل از داده های ورودی، وزن ها، یک سوگیری (bias) یا آستانه و یک خروجی.  شامل نودها و لایه های ورودی یک یا چند لایه های پنهان و لایه خروجی که لایه های به هم پیوسته ای که با هم ارتباط برقرار کرده و به وسیله داده های آموزشی یاد می گیرند. شبکه ای را تشکیل می دهند و با محاسباتی که انجام میدهند در نهایت احتمالی با بیشترین وزن (w)در خروجی نمایش داده می شود . در زیر به بررسی اجزای کلی شبکه عصبی می پردازیم که می تواند شامل اجزای بیشتری باشد که مهم ترین آنها عبارتند از:ورودی(Input)شامل مجموعه ای از داده ها (یعنی ویژگی ها) است که به شبکه وارد می شود.(این داده ها میتوانند داده های ساختار یافته و یا ساختار نیافته باشد. بستگی به نوع مسئله دارد ) . لایه ورودی در ANNsتنها لایه در شبکه عصبی است که تمام اطلاعات دریافتی را بدون هیچ پردازشی به لایه بعدی انتقال می دهد.لایه پنهان (Hidden Layers)منبع تصویر مقاله ای در Mediumجعبه سیاه! (black boxes) بله لایه های پنهان در شبکه های عصبی عمیق مانند جعبه سیاه است. این به معنای آن است که ما ممکن است نتوانیم به سادگی تفسیر یا توضیح دقیقی از نحوه عملکرد دقیق هر نورون یا هر لایه پنهان داشته باشیم. در واقع مهم ترین تفاوت Deep learning باMachin learning  و مدل های سنتی تر انتخاب ویژگی (Feature selection) است که در Deep learning ماشین تصمیم می گیرد که کدام ویژگی ها را ببینید یاد بگیرد و تصمیم گیری را انجام می دهد. اطلاع زیادی از این نداریم که ماشین این ویژگی ها را چطور و چرا انتخاب می کند. آنها لایه های واسطه ای هستند که بیشتر محاسبات در این لایه ها انجام می گیرد . و ویژگی های داده را استخراج می کنند.وزن ها (W)یک جز اساسی هستند که نقش اساسی در توانایی شبکه های مصنوعی برای یاد گیری و پیش بینی بازی می کنند .وزن ها قابل تغییرهستند و ممکن است در طول فرایند آموزش شبکه مقدار آنها تغییر کند. وزن ها مقادیر عددی مرتبط با اتصالات بین نورون ها (یا گره ها) هستند که نشان دهنده قدرت و جهت (مثبت یا منفی) تأثیر یک نورون بر دیگری است و میتواند مقادیر مثبت یا منفی داشته باشد. وزن های منفی می توانند از overfitting جلوگیری کنند زیرا به شبکه کمک می ‌کنند تا اطلاعات غیرضروری را کاهش داده و الگوهای کلی‌ تری را استخراج کند. در مراحل آموزش، ANN با تنظیم مکرر این وزن‌ها برای پیش‌بینی خروجی صحیح برای مجموعه‌ای از ورودی‌ها، آموزش انجام می گیرد.بایاس (Bias) در یک شبکه عصبی، بایاس به عنوان یک پارامتر قابل یاد گیری است که به هر نورون اختصاص دارد و در فرایند آموزش بروزرسانی می ‌شود..در واقع  تابع فعالساز را با افزودن یک ثابت (یعنی بایاس داده شده) به ورودی تغییر می دهد. و در فرایند آموزش به ‌روز رسانی می ‌شود بایاس در شبکه های عصبی را می توان مشابه نقش یک ثابت در یک تابع خطی y = wx + b در نظر گرفت که در این فرمول b همان مقدار بایاس است که به موجب آن خط به طور موثر با مقدار ثابت جابه جا می شود.بایاس از صفر شدن جلوگیری می کند زیرا مقدار ثابتی را به خروجی هر نورون اضافه می کند. وزن ها و بایاس ها برای کاهش خطا بین خروجی های شبکه و خروجی های واقعی بهینه می شوند. اگر بایاس صفر باشد، وزن ها برای جبران آن صفر می شوند. در نتیجه شبکه عصبی مقداری نمی گیرد و یادگیری انجام نمی شود.علاوه بر جلوگیری از صفر شدن، بایاس از overfitting نیز جلوگیری می کند. overfitting زمانی اتفاق می افتد که یک شبکه عصبی بیش از حد به داده های آموزشی خود سازگار می شود و به شبکه عصبی اجازه می دهد تا از داده های آموزشی خود به طور کلی یاد بگیرد، نه فقط از جزئیات تصادفی.لایه خروجی (Output Layer)   لایه ای است که نتیجه نهایی شبکه در این لایه مشخص می شود به همین خاطر مهم ترین لایه است و این کار را با استفاده از نتایجی که از لایه های پنهان گرفته است انجام می دهد . در واقع در حالت کلی بازگشتی بودن یا نبودن تابع فعالسازی تابع هزینه همه در لایه خروجی هستند و با توجه به نوع شبکه و وظیفه ای که از ان انتظار داریم لایه خروجی بسیار تعیین کننده است. در معماری هایی که پس انتشار داریم. فرایند پس انشار از لایه خروجی به سمت لایه ورودی انجام می شود.پایان بخش اولمطالب پارت 1 به پایان رسید و در این مقاله با تاریخچه ای از هوش مصنوعی و پرسپترون آشنا شدیم و  تعدادی از مقاله های مربوط به اونها رو از آغاز اشاره کردیم و راجع به شبکه های عصبی مصنوعی ساده اطلاعاتی به دست آوردیم . پایه ی پرسپترون ساده شامل بخش هایی هست که در بالا ذکر شد با من همراه باشید در پارت 2 وارد دنیای چگونگی یادگیری شبکه های عصبی مصنوعی شویم . قلمرو موتور های پیشران شبکه های عصبی یعنی توابع فعالساز و قلمرو الگوریتم پس انتشار یکی از قوی ترین و کامل ترین الگوریتم هایی که نقش اساسی درچگونگی یادگیری شبکه های عصبی داره .  یادگیری ماشین دنیایی پر از شگفتی است که هر روز در حال تکامل است . اما واقعا ماشین چطور میتونه یاد بگیره ؟ در پارت 2 منتظرتون هستم و ممنون میشم نظرتون رو باهام در اشتراک بزارید. میبینمتون .ممنون از شما که در این سفر به دنیای Deeps با من همراه بودید.مشاهده این مقاله  به انگلیسی در Medium (Digging deeper and deeper into deep learning and artificial neural networks# Part I: History of artificial intelligence and how simple neural networks work.)پارت 1 : تاریخچه هوش مصنوعی و چگونگی عملکرد شبکه های عصبی سادهپارت 2 : نحوه یادگیری در شبکه های عصبی عمیق ( انواع یادگیری و توابع فعالساز و پس انتشار( backpropagation)پارت 3 : انواع مهم ترین معماری های شبکه های عصبی عمیق(RNN / LSTM / CNN) لطفا اگر مایل بودید مقاله دیگر من &quot; آیا DeepFake فناوری آینده‌ای است یا یک تهدید؟ آیا خط میان واقعیت و ساختگی از بین خواهد رفت؟&quot; رو در ویرگول ببینید .یادگیری مشتاق یا Eager Learning چیست؟امیدوارم از مطالب لذت برده باشید .</description>
                <category>محمد جواد نجادی</category>
                <author>محمد جواد نجادی</author>
                <pubDate>Wed, 21 Feb 2024 14:05:48 +0330</pubDate>
            </item>
                    <item>
                <title>آیا DeepFake فناوری آینده‌ای است یا یک تهدید؟ آیا خط میان واقعیت و ساختگی از بین خواهد رفت؟</title>
                <link>https://virgool.io/@m.javadnejadi/%D8%A2%DB%8C%D8%A7-deepfake-%D9%81%D9%86%D8%A7%D9%88%D8%B1%DB%8C-%D8%A2%DB%8C%D9%86%D8%AF%D9%87-%D8%A7%DB%8C-%D8%A7%D8%B3%D8%AA-%DB%8C%D8%A7-%DB%8C%DA%A9-%D8%AA%D9%87%D8%AF%DB%8C%D8%AF-%D8%A2%DB%8C%D8%A7-%D8%AE%D8%B7-%D9%85%DB%8C%D8%A7%D9%86-%D9%88%D8%A7%D9%82%D8%B9%DB%8C%D8%AA-%D9%88-%D8%B3%D8%A7%D8%AE%D8%AA%DA%AF%DB%8C-%D8%A7%D8%B2-%D8%A8%DB%8C%D9%86-%D8%AE%D9%88%D8%A7%D9%87%D8%AF-%D8%B1%D9%81%D8%AA-oinrhmfif3hn</link>
                <description>با من به قلمرو DeepFake و Voice deepfake سفر کن.&quot; اون دختر بالاخره هیجکس نیست &quot; هیچکس !&quot; اون دختر بالاخره هیجکس نیست &quot;  این جمله خدای چهره  ها  &quot;جگن هگار &quot;در سریال &quot;Game of Thrones&quot; است .  افراد  !&quot; no one &quot; خدای چهره ها (&quot;deepfake&quot;) و خدای صداها (Voice deepfake)  ترسناکی او آنجا بیشتر می شود که با تغییر چهره صدای او هم تغییر میکند. شخصیتی که می توان گفت از پادشاه شب هم مرموز تر بود و هر لحظه در نقشی ظاهر می شد . اسیر ,سربازی نجات بخش و کشنده ,مردی سیاه پوست ,مردی که میمیرد اما زنده است! مرد بود یا زن ؟ با سکه ای که مجوز ورود به  خانه &quot;سیاه و سفید&quot; معبد&quot; افراد بی چهره &quot;در براووس با چهره های از افراد مرده . چهره ی واقعی &quot;جگن هگار &quot; کدام بود ؟در ادامه این مقاله با من همراه باشید که به دنیای Deepfake و Voice deepfake سفر کنیم و بررسی کنیم که چه اثرات و مزایا و معایبی میتونن داشته باشن. باید منتظر هرج و مرج باشیم ؟ مرز بین واقعیت و جعلی از بین خواهد رفت ؟دیپ فیس(DeepFace) یا تشخیص چهره ؟تشخیص چهره ! واژه ای که با شنیدن آن اکثرا به یاد فیلم های جنایی و داستان های جنایی می افتیم امروزه بیشتر با شنیدن این واژه مفهوم امنیت در ذهن ما تداعی می شود. به قرن نوزدهم می رویم  در آن زمان، محققان از عکس‌های دو بعدی برای مقایسه چهره‌های افراد استفاده می‌کردند. که با دقت پایینی همراه بودند و اغلب منجر به خطای شناسایی می‌شدند. در دهه 1960، محققان شروع به استفاده از روش‌های جدیدی برای تشخیص چهره کردند. این روش‌ها از الگوریتم‌های ریاضی برای شناسایی ویژگی‌های چهره افراد استفاده می‌کردند .در دهه 1990، فناوری تشخیص چهره به سرعت توسعه یافت. این پیشرفت‌ها به دلیل ظهور پردازش تصویر دیجیتال و شبکه‌های عصبی مصنوعی بود.تولد DeepFace (شناسایی عمیق چهره )یک گروه تحقیقاتی در فیسبوک در سال 2014 شروع به توصعه deepface برای تشخیص چهره با عکس های دیجیتالی کرد و در سال 2015 برای اولین بار در کنفرانس سالانه  IEEE CPVR  مدلی برای تشخیص چهره  با دقت 97.35 درصد ارائه شد  و این به معنای آن بود که این الگوریتم توانسته است بهتر از انسان عمل کند چرا که دقت تشخیص انسان 97.00 درصد است.  در سال 2018، فیس‌بوک اعلام کرد که DeepFace را با یک الگوریتم جدید به نام DeepFace2 جایگزین کرده است. DeepFace2 دقت بیشتری نسبت به DeepFace دارد و می‌تواند چهره‌ها را در شرایط مختلف، مانند نور کم یا زاویه‌های غیرعادی، شناسایی کند. در حالی که سیستم تشخیص چهره FBI  با دقت 85  درصد است بیشترین دقت برای FaceNet گوگل با دقت 99.63  می باشد .اما واقعا DeepFace چیه ؟ چه کاربردهایی داره ؟ چالش های اون چی میتونه باشه ؟ افراد “no one”  یا Deepfake  چه کسانی هستند ؟ این فناوری میتونه آینده وحشتناکی بسازه یا اون رو بهبود بده ؟ تفاوت Deepfake و Deepface  چیه ؟  Voice deepfake هم میتونه خطراتی به اندازه خود Deepfake داشته باشه یا منفعت بیشتری داره ؟ از چه الگوریتم هایی برای این مدل ها  استفاده میشه ؟ و چطور کار میکنن ؟ با من همراه باشید که که به این دنیا وارد شویم .شناسایی عمیق چهره (DeepFace) چگونه کار میکند ؟در واقع میتونیم بگیم که عملکرد deepface به این صورت هست که با استفاده از شبکه عصبی عمیق کار می کند شبکه عصبی عمیق در DeepFace یک  Convolutional neural network (CNN)  است.  CNN یک نوع شبکه عصبی عمیق هستند که به ویژه برای وظایف تشخیص تصویر مناسب هستند. یک تصویر به مدل داده میشود که با استفاده از شبکه عصبی عمیق الگو های چهره را در تصویر شناسایی میکند با شناسایی الگو هایی مثل نقاط عطف چهره مانند : فاصله بین چشم‌ها، اندازه بینی، شکل دهان، فاصله بین گوش‌ها و نسبت بین اندازه چشم‌ها، اندازه بینی و اندازه دهان، زاویه بین چشم‌ها و همچنین خطوط روی پیشانی، چین و چروک‌های اطراف چشم‌ها.DeepFace این الگو ها را با الگوهایی که در داده های آموزشی یاد گرفته است مقایسه میکند و به محتمل ترین چهره ای که با الگو های شناسایی شده مطابقت دارد می رسد پس تفاوتی که با سیستم های قدیمی تشخیص چهره دارد اینگونه است که شما اگر قسمتی از چهره خود را هم پوشانده باشید قادر به تشخیص چهره شماست. در حالی که  قبل از ظهور DeepFace در سیستم های تشخیص چهره فقط از ویژگی های کلی مانند فاصله چشم ها و اندازه بینی و دهان  برای شناسایی چهره استفاده می شد که تحت تاثیر عواملی مثل زاویه دید نور و پوشاندن چهره تغییر می کرد و باعث اشتباه در تشخیص می شد  با  ظهور DeepFace دقت مدل ها بسیار بیشتر شد و این مشکلات برطرف گردید .واقعی یا جعلی !&quot; کدام ویدئو ها از میدان نبرد واقعی است؟ &quot;در پلتفرم های ارز دیجیتال برای  احراز هویت قبلا از عکس شخص با پاسپورت و همچنین تکه کاغذی که چیزی شبیه به تاریخ روز روی آن نوشته شده باشد استفاده می‌شد. که به راحتی با فتوشاپ قابل جعل کردن بود که با احراز با ویدئو جایگزین شد . آیا میتوان ویدئو را مانند عکس جعل کرد به طوری که قابل تشخیص نباشد ؟ یا میتوان باعث جعل در روند انتخابات شد؟ به انتخابات 2024 امریکا هم نزدیک میشویم . شما چه فکر می کنید ؟آیینه !این طرح توسط دوست خوب و هنرمندم بهزاد کهکی برای این مقاله کشیده شده است تصور کنید جلوی آیینه ایستاده اید و در حال رقصیدن هستید . تصویر شما در حالت طبیعی در آیینه انعکاسی از شماست. حال اگر انعکاسی ببینید که اهنگ Lose YourSelf را میخواند (حرکات و لب خوانی Eminem را در موزیک ویدئو این اهنگ تصور کنید !) و در حال رقص hip-hop  است در صورتیکه شما در حال رقص بالترو با اهنگ رقص The Swan Lake هستید!&quot; به سان جادوگری قهار است که به چهره شما نگاه می‌کند و می‌گوید: &#x27;من تو را می‌شناسم!&#x27; تقریباً ترسناک است، اما  چگونه این کار را انجام می‌دهد؟ &quot;دیپ فیک(Deepfake)  یا &quot; افراد بی چهره&quot; ! اما واقعاً deepfake چیست؟ برای درک این موضوع، باید به سال 2017 برگردیم این واژه برای اولین بار زمانی به کار رفت . یک کاربر ناشناس  Reddit یک زیردسته به نام &quot; deepfake&quot; ایجاد کرد.که حاوی ویدئوهای جعلی از پورنوگرافی افراد مشهور بود .این ویدئو ها با ابزار های هوش مصنوعی ایجاد شده بود.  برای اینکه یک ویدئو deepfake واقعی به نظر برسد باید علاوه بر ویدئو دارای صدای بی نقص هم باشد. پس میتوان گفت که Voice Deepfake هم باید انجام شود . در تصویر بالا  دخترک در آیینه همانند داده های تولید شده با شبکه های عصبی عمیق توسط الگوریتم  GANs است. با این تفاوت که آیینه واقعی انعکاسی از خود شماست اما GANs داده های مصنوعی جدید تولید میکند! و از این وحشتناک تر اینکه آوایی که شما دارید با آوای انعکاس شما متفاوت است و اینجاست که مفهوم Voice deepfake را میتوان درک کرد.الگوریتم های Deepfakeهمانطور که در بالا اشاره شد . برای تشخیص چهره از شبکه های عصبی کانولوشنی  Convolutional Neural Networks (CNNs)  استفاده میشود اما در  deepfake از  generative adversarial networks (GANs) که برای Generator و Discriminator داده های جدید مصنوعی با ویژگی هایی شبیه به داده های واقعی است استفاده میشود که مراحل آن اینگونه است که :1 . مولد (Generator)مسئولیت اصلی مولد تولید داده‌های جدید و مصنوعی است. این شبکه با یادگیری از توزیع داده‌های واقعی، قادر خواهد بود داده‌های مشابه با آن‌ها را تولید کند.2.  داور (Discriminator) مسئول ارزیابی داده‌ها است و تلاش می‌کند بین داده‌های واقعی و تولید شده توسط مولد تمایز ایجاد کند. داور  به مولد بازخوردهایی  می‌دهد که باعث می شود مولد بهبودهای لازم را در تولید داده‌ها ایجاد کند.البته در مواجهه با چالش‌هایی مانند نویز که می‌تواند باعث شود  GAN ها تصاویر یا صداهای مصنوعی تولید کنند که دارای نویز یا اختلالات بصری یا شنیداری شوند و قسمت های نامعلوم داده که شامل برخی از داده‌ها است که ممکن است دارای ویژگی‌هایی باشند که در داده‌های آموزشی دیده نشده‌اند و یادگیری دقیق از توزیع داده‌های واقعی، که ممکن است  GANs دچار خطاها یا خروجی‌های ناپایدار شود. با من همراه باشید که در قسمت بعد به دنیای  Voice Deepfake هم وارد شویم .صدای دیپفیک (Voice Deepfake)اولین تلاش ها برای Voice Deepfake به دهه 1960 بر میگردد که محققان از روش fast Fourier transform (FFT) برای ترکیب صداهای مختلف استفاده میکردند اما این روش ها دقت بالایی نداشت و صدای جعلی قابل تشخیص بود. اما در دهه 1990 با استفاده از مدل های یادگیری ماشین میتوانستند الگوهای صوتی را از داده های آموزشی یاد بگیرند این روش‌ها دقت بالاتری نسبت به روش‌های قبلی داشتند و صداهای جعلی تولید شده اغلب قابل تشخیص نبودند . در دهه 2010، فناوری  Voice Deepfake به طور جدی توسعه یافت. این پیشرفت‌ها به دلیل بهبود قدرت محاسباتی و الگوریتم‌های یادگیری ماشینی بود. در این دوره، محققان از روش‌های جدیدی مانند  Discrete Cosine Transform (DCT) و Artificial Neural Networks (ANN) استفاده کردند. این روش‌ها دقت بالاتری نسبت به روش‌های قبلی داشتند و صداهای جعلی تولید شده اغلب غیرقابل تشخیص بودند.فناوری Voice Deepfake یا کلونینگ صدا چگونه کار می‌کند؟کلونینگ صدا (voice cloning) یا  Voice deepfake برای تولید ویدئو Deepfake لازم است چرا که برای باور پذیری و واقعی بودن ویدئو صدای تولید شده هم باید مثل صدای همان فرد باشد.برای تولید صدای فیک یک فرد به داده های زیاد با ویژگی هایی  مثل صداهای با سرعت، تن و بلندی مختلف برای اموزش مدل نیاز داریم هر چه جزییات بیشتر باشد مدل بهتر و دقیق تر می تواند یاد بگیرد و گاهی ممکن است این کار هفته ها طول بکشد در واقع الگوریتم های deepfake مجموعه داده‌های آموزشی معمولاً شامل صدا و متن افراد مشهور، سیاستمداران یا شخصیت‌های عمومی است. می‌توانند متن را به صدا یا صدا را به متن تبدیل کنند. کیفیت صدایی که تولید می‌کنند معمولاً بسیار خوب است و حتی برای افراد متخصص نیز دشوار است که بتوانند تشخیص دهند صدا واقعی است یا جعلی. فناوری (deepfake voice technology) خیلی کاربرد ها میتواند داشته باشد. اما نگرانی اصلی استفاده مخرب از ان برای تولید داده های فیک است .سال 2017 تیتر بزرگی از سایتی با لوگوی معروف  CNN با این خبر که پرفسور هاوکینگ نرم افزاری را توسعه داده که با مقداری کد نویسی میتوانید با موفقیت در بازار سهام معامله کنید ! با این شعار که ثروت را از 0.1 درصد به اکثریت توزیع میکند و از همه مهم تر خبر داری فیلمی از پرفسور هاوکینگ است با صدا و تصویر او که در مورد این محصول صحبت میکند .نمونه ای از کارهایی که میتوان با deepfake انجام داد و خبرهای جعلی (ِfake news) را منتشر کرد که شاید چند ساعت هم روی خبرگذاری ها بماند میتواند آثار بسیار مخربی بر جای بگذارد.الگوریتم های Voice Deepfakeالگوریتم‌های Voice Deepfake در حال توسعه مداوم هستند و از رویکردهای مختلفی برای تولید صداهای مصنوعی استفاده می‌کنند. برخی از الگوریتم‌های معروف عبارتند از:1.الگوریتم  WaveNet-الگوریتم  WaveNet از یک شبکه عصبی مصنوعی برای تولید صداهای با کیفیت بالا و به نظر واقعی استفاده می‌کند.- به دلیل قابلیت‌های پیشرفته‌اش شناخته شده است و برای عملکرد بهینه ممکن است نیاز به داده‌های آموزشی گسترده داشته باشد.2. شبکه‌های مولد مقابله‌ای (GAN)-الگوریتن های  GAN‌ از دو شبکه عصبی مصنوعی که با همکاری کار می‌کنند، برای تولید صداهای با کیفیت بالا استفاده می‌کنند.- این الگوریتم می‌تواند صداهای با کیفیت استثنایی تولید کند، اما ممکن است نیاز به داده‌های آموزشی گسترده‌تری نسبت به WaveNet داشته باشد.3. خودرمزگذار (Autoencoder )- خودرمزگذار(Autoencoder) از یک شبکه عصبی مصنوعی برای یادگیری الگوهای صوتی استفاده می‌کند و می‌تواند صداهای با کیفیت متوسط را تولید کند.- ممکن است نیاز به داده‌های آموزشی کمتری نسبت به الگوریتم‌های دیگر داشته باشد که این امر در برخی شرایط موثرتر است.تکنولوژی Voice Deepfake یک حوزه نسبتاً جدید است و الگوریتم‌ها به سرعت در حال پیشرفت هستند. انتظار می‌رود تا توسعه‌های آینده منجر به الگوریتم‌های Voice Deepfake با کیفیت تر و با بهره ‌وری محاسباتی بیشتری شود.چند نمونه از کاربرد های اصلی deepfake voice technology مانند :1. اینفلوئنسرهای Deepfake یا اینفلوئنسرهای مجازی (virtual influencer)- این شخصیت‌های مجازی که با عنوان &quot;اینفلوئنسرهای Deepfake&quot; یا &quot;اینفلوئنسرهای مجازی&quot; شناخته می‌شوند، می‌توانند برای اهداف متنوعی مانند تبلیغات، بازاریابی، سرگرمی یا آموزش مورد استفاده قرار گیرند. نمونه‌هایی از آن‌ها عبارتند از(Lil Miquela و Imma و Shudu Gram) که دنبال‌کنندگان قابل توجهی در فضای مجازی دارند.2. تولید صدا برای ربات های انسان نما-  ربات‌های انسان‌نمای پیشرفته‌ای مانند Ameca که توسط Engineered Arts ساخته شده‌اند، از فناوری صوتی Deepfake برای تقلید عواطف و احساسات استفاده می‌کنند و به این ترتیب، توانایی آن‌ها برای تعامل با انسان‌ها را افزایش می‌دهند.- سوفیا Sophia ربات انسان‌نمای دیگری است که توسط Hanson Robotics توسعه یافته و قابلیت‌های پیشرفته‌ای در تعاملات انسان‌گونه را به نمایش می‌گذارد.3. شخصیت‌های تولید شده توسط کامپیوتر در بازی‌های ویدیویی-  فناوری صوتی Deepfake برای ایجاد شخصیت‌های تولید شده توسط کامپیوتر در بازی‌های ویدیویی و در نتیجه، بهبود تجربه بازی استفاده می‌شود. نمونه‌هایی از آن شامل شخصیت‌های بازی‌هایی مانند The Last of Us Part II، Cyberpunk 2077 و Horizon Forbidden West هستند.4. دوبله فیلم با بازیگران صداپیشه مشهور-  این فناوری برای دوبله فیلم‌ها با صدای بازیگران مشهور در زبان‌های مختلف استفاده می‌شود و به این ترتیب، یک تجربه مشاهده‌ی باکیفیت و ثابت را برای مخاطبان در سراسر جهان تضمین می‌کند.5. کتاب‌های صوتی و گویندگی (audiobooks, Voice-over)- فناوری صوتی Deepfake کاربردهایی در تولید کتاب‌های صوتی و کارهای گویندگی پیدا کرده است، جایی که می‌توان از آن برای تولید صداهای مصنوعی اما واقعی‌گونه برای روایت و سایر محتواهای صوتی استفاده کرد.این نمونه‌ها نشان می‌دهند که تکنولوژی صدای دیپفیک در حوزه‌های مختلفی از سرگرمی تا تعامل انسان-ربات و محلی‌سازی زبان در رسانه‌ها چقدر کاربردی است.کنترل افکار !با توجه به پیشرفت های فناوری و با مرور تاریخ میتوان به این نکته پی برد که مخصوصا در دنیای امروزی جلوی پیشرفت فناوری را نمی توان گرفت و می دانیم که هر وسیله و هر فناوری می‌تواند مانند شمشیر دو لبه عمل کند. اما به نظرم بزرگترین تهدیدی که میتوانند داده های جعلی در آینده داشته باشند &quot;کنترل افکار &quot;است . تصور کنید که اگر افکار در &quot;جهات خاص&quot; به کار گرفته شود چه خواهد شد ؟حتی ممکن است خودمان هم متوجه آن نشویم . همانطور که در دنیای امروز هم نمود هایی از آن را میتوان دید .تولید داده های فیک در سطح جهانی و سمت و سو دادن به افکار در جهت کنترل آن پیامد هایی بسیار فاجعه بارتر از نگرانی ها برای از دست رفت شغل ها در آینده یا حتی سناریوهایی مثل کنترل ما توسط ماشین ها در آینده میتواند به بار بیاورد.چه باید کرد؟قطعا داشتن برنامه و تحقیقات و  ارائه راهکار ها در زمان حال و تا قبل از وقوع خیلی از مشکلات میتواند تا حدودی از ضررهای پیش روی آینده انسان ها و ماشین جلوگیری کند .حال این سوال مطرح می شود که آیا برای شکست دادن هیولا باید هیولا شویم ؟ آیا قوانینی که برای هوش مصنوعی وضع شده یا در آینده وضع شود می‌تواند کمی از نگرانی ها بکاهد؟ پاسخ به این سوال کمی دشوار است با توجه به اینکه در حال حاظر میتوان گفت در اوایل مسیر رشد AI هستیم و با رشد بسیار سریع و روزافزون AI قطعا نمیتوان آینده را پیش بینی کرد. اما میتوان برای ان پیشنهاد ها و راهکار هایی ارائه داد.این راهکار ها میتواند شامل موارد زیر باشد:- آموزش افرادی  که &quot; متخصص توسعه اپلیکیشن های تشخیص داده واقعی&quot; برای تولید اپلیکیشن هایی که داده ی فیک را تشخیص دهند. مانند متخصصان تست و نفوذ که برای جلوگیری از هک سیستم باید با چگونگی نفوذ به شبکه کاملا آشنا باشند متخصصانی که کاملا داده غیر واقعی را بشناسند.-  میتوان به جای تمرکز روی تشخیص خود deepfake تمرکز را روی مکانیزم های امنیتی پیرامون آن ایجاد کرد. تا به اطلاعات موجود در خود deepfake وابسته نباشیم. به این معنی که تدابیر امنیتی را که در حال حاظر deepfake می تواند با چالش رو به رو کند را تغییر دهیم. مثلا استفاده از  fast identity online (FIDO)  که به کاربران اجازه دهد بدون نیاز به رمز عبورهای سنتی به خدمات آنلاین دسترسی پیدا کنند. می تواند به جلوگیری از استفاده نا به جا از deepfake برای احراز هویت کمک کند. FIDO از روش های احراز هویت بیومتریک مانند اثر انگشت، تشخیص چهره و اسکن عنبیه چشم استفاده می کند. این روش ها غیرقابل جعل هستند و می توانند به شناسایی افراد کمک کنند.-  در سطح بین المللی جرایمی برای استفاده مجرمانه از این قبیل فناوری ها وضع شود. یا قوانینی اتخاذ شود که محتوانی تولید شده توسط AI داری کد پیگیری باشد.-  فرمت فایل های تولید شده توسط AI مشخص شده باشد.علیرغم تعریف قوانین قطعا احتمال بروز اعمال مجرمانه همچنان وجود دارد. همانطور که در حال حاظر هم با وجود تعاریف مشخص برای جرایم سایبری مختلف مانند هک کلاهبرداری های سایبری و سایر موارد باز هم اعمال مجرمانه انجام می شود. اما با وضع قوانین میتوان تا حدودی از هرج و مرج جلوگیری کرد. و به جای تلاش برای نادیده گرفتن یا تلاش برای توقف ان امری که میتوان گفت نشدنی هست به فکر راه های تعامل و گسترش زیرساخت های مناسب برای کمتر کردن مشکلات پیش رو بود .ممنون از شما که در این مقاله با من همراه بودید و در دنیای deepfake  سفر کردید .مشاهده مقاله در mediumهوش مصنوعی در شناسایی دیپ فیک چه نقشی دارد؟</description>
                <category>محمد جواد نجادی</category>
                <author>محمد جواد نجادی</author>
                <pubDate>Sun, 07 Jan 2024 00:46:59 +0330</pubDate>
            </item>
            </channel>
</rss>