<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های علی شیرائی</title>
        <link>https://virgool.io/feed/@HSILA</link>
        <description>فارغ‌التحصیل علوم کامپیوتر، علاقه‌مند به هوش مصنوعی و یادگیری عمیق.</description>
        <language>fa</language>
        <pubDate>2026-06-16 17:55:57</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/110362/avatar/q0MYCu.jpeg?height=120&amp;width=120</url>
            <title>علی شیرائی</title>
            <link>https://virgool.io/@HSILA</link>
        </image>

                    <item>
                <title>یادگیری سرفصلی</title>
                <link>https://virgool.io/@HSILA/%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D8%B3%D8%B1%D9%81%D8%B5%D9%84%DB%8C-hx76bhshmn64</link>
                <description>Photo: Unsplash - Debby Hudson در این مطلب مفهوم یادگیری سرفصلی یا Curriculum Learning را با هم بررسی می‌کنیم. در زبان انگلیسی Curriculum به معنی برنامه درسی و یا سرفصل است، به همین دلیل این مفهوم یادگیری سرفصلی ترجمه شد. این مفهوم برای اولین بار در سال ۱۹۹۳ توسط دکتر جفری المان استاد دپارتمان علوم شناختی دانشگاه کالیفرنیا - سن‌دیه‌گو معرفی شده و در سال ۲۰۰۹ نیز دکتر یاشوا بنجیو - پدرخوانده یادگیری عمیق - کاربرد این مفهوم را در زمینه یادگیری ماشین مطرح کرده است. مطلب پیش رو، خلاصه‌ای از مقاله Curriculum Learning آقای بنجیو است که سعی شده بدون وارد شدن به تعاریف ریاضیاتی، شهودی کلی از مفهوم را ارایه دهد. در این مقاله، کاربرد یادگیری سرفصلی در چندین مثال بررسی می‌شوند، که از این مثال‌ها یکی را انتخاب کرده و بازگو می‌کنیم. مقاله را می‌توانید از اینجا مشاهده کنید.در فرآیند یادگیری، انسان‌ها و حیوانات اگر به جای دریافت اطلاعات بصورت تصادفی، آن‌ها را طبق یک ترتیب معنادار - بصورتی که مفاهیم به تدریج بیشتر و پیچیده‌تر شوند - دریافت کنند، بهتر یاد می‌گیرند. این استراتژی یادگیری را در چارچوب یادگیری ماشین، یادگیری سرفصلی می‌نامیم.در جامعه امروزی، انسان‌ها حدودا دو دهه آموزش می‌بینند. این آموزش بسیار سازمان یافته و مبتنی بر یک سیستم آموزشی و برنامه درسی معین است که مفاهیم مختلف را در زمان‌های مختلف معرفی کرده و با بهره‌گیری از مفاهیم آموخته شده قبلی، یادگیری انتزاعات جدید را آسان می‌کند. با ارایه مثال‌های مناسب و با ترتیب مناسب در سیستم آموزشی، می‌توان سرعت وقوع یادگیری را به طرز چشمگیری افزایش داد. این ایده به طور معمول در آموزش حیوانات هم مورد استفاده قرار می‌گیرد که به آن شکل دادن (Shaping) گفته می‌شود. (اسکینر ۱۹۵۸، پیترسون ۲۰۰۴، کروگر و دایان ۲۰۰۹). در تقاطع علوم شناختی و یادگیری ماشین، این سوال در ذهن ایجاد می‌شود که آیا الگوریتم‌های یادگیری ماشین نیز می‌توانند از استراتژی آموزشی مشابهی بهره ببرند؟ ایده آموزش سرفصلی به المان ۱۹۹۳ برمی‌گردد.ایده اصلی این است که کوچک شروع کنید و کارهای آسان‌تر را یاد بگیرید و به تدریج سطح دشواری را افزایش دهید. این مفهوم در روانشناسی رشد نیز دیده می‌شود، همانطور که نوزاد انسان یادگیری را با منابع ساده‌تر آغاز کرده و به تدریج با مثال‌های پیچیده‌تر ادامه‌ می‌دهد.شکل ۱. ایده کلی یادگیری سرفصلی، از آسان شروع کن تا به سخت برسی!در ادامه بررسی می‌کنیم که چگونه الگوریتم‌های یادگیری ماشین می‌توانند از سرفصل یا &quot;کوچک شروع کردن&quot; بهره‌مند شوند. یادگیری سرفصلی علاوه بر افزایش سرعت در همگرایی در روش‌های غیر محدب، بر کیفیت کمینه یافت شده نیز تاثیر می‌گذارد. این روش در سطح ظاهر شده و به عنوان یک تنظیم‌کننده (Regularizer) عمل می‌کند. یادگیری سرفصلی را می‌توان به عنوان یک فرم خاص از Continuation Methodها تصور کرد که یک استراتژی کلی برای بهینه‌سازی سراسری توابع غیر محدب است.بکارگیری این روش برای آموزش شبکه به این صورت است که ابتدا با یک زیر مجموعه کوچک و ساده‌تر از داده‌ها شروع کرده و در پایان نیز کل مجموعه داده آموزشی را به کار می‌گیریم. حال شاید این سوال ایجاد شود که منظور از مثال‌های ساده چیست و چگونه باید داده‌ها  را بر اساس سادگی آن‌ها مرتب کرد؟ در ادامه روش‌هایی را ذکر می‌کنیم اما به طور کلی این مورد به داده‌ها و نوع Task وابسته است.یک روش این است که مثال‌هایی که کمتر نویزدار (noisy) هستند را ساده‌تر قلمداد کنیم (Derényi et al. 1994). در دسته‌بندی نظارت‌شده اگر یک مثال در سمت نادرست سطح تصمیم دسته‌بند بیزی (Bayes Classifier) قرار بگیرد، نویزدار در نظر گرفته می‌شود. این نمونه‌های نویزدار، همگرایی را کند می‌کنند. ممکن است بگویید نمونه‌های مشکل، اطلاعات بیشتری را در بر دارند. اما این نمونه‌ها یادگیرنده را در ابتدای آموزش گیج‌تر می‌کنند.آزمایشی بر روی تشخیص اشکالدر این آزمایش که در مقاله مطرح شده، هدف دسته‌بندی اشکال هندسی به ۳ کلاس مثلث، بیضی و مستطیل است. ورودی‌ها تصاویر سیاه سفید با ابعاد ۳۲ در ۳۲ هستند.  همانطور که در  شکل زیر مشاهده می‌کنید،‌ دو دسته تصویر تولید شده است.شکل ۲. نمونه ورودی BasicShapes (بالا) و GeomShapes (پایین) دسته GeomShapes که شامل اشکال یاد شده است و دسته BasicShapes که تنها نوع خاصی از اشکال را در بردارد: مربع، دایره و مثلث متساوی الاضلاع. همانطور که مشخص است، تصاویر BasicShapes تنوع کمتری دارند. همچنین تفاوت‌هایی نیز در موقعیت جسم، اندازه، جهت و همچنین غلظت رنگ خاکستری در پیش‌زمینه و پس‌زمینه در دو دسته وجود دارد.این آزمایش روی یک شبکه عصبی با ۳ لایه پنهان انجام شده که با گرادیان کاهشی تصادفی و روی تابع درست‌نمایی شرطی منفی (Negative Conditional Log-Likelihood) آموزش می‌بیند که مثالی از یک مساله بهینه‌سازی غیر محدب مشکل است. سرفصل در اینجا از ۲ گام تشکیل شده است:۱- تا زمان رسیدن به Switch Epoch، گرادیان کاهشی را روی مجموعه BasicShapes اجرا کن.۲- سپس گرادیان کاهشی را روی GeomShapes اجرا کن.در اینجا Switch Epoch، آن Epochای است که مجموعه داده مورد استفاده شبکه برای یادگیری عوض می‌شود، در نتیجه اگر شبکه را فقط روی مجموعه داده GeomShapes آموزش دهیم، این متغیر برابر با صفر می‌شود. همچنین خطای تعمیم یا Generalization Error همیشه روی مجموعه داده تست GeomShapes ارزیابی می‌شود. در این آزمایش، در مجموع ۱۰۰۰۰ نمونه در هر دو مجموعه آموزشی، ۵۰۰۰ نمونه در مجموعه اعتبارسنجی و ۵۰۰۰ مورد در مجموعه تست وجود دارد. فراپارامترها (Hyper-Parameters) در این آزمایش، بطوری انتخاب شدند که در آزمایش‌های قبلی و بدون یادگیری سرفصلی بهترین عملکرد را روی مجموعه اعتبارسنجی GeomShapes کسب کرده بودند.شکل زیر، خطای آزمون را بر اساس مقادیر مختلف Switch Epoch که توان‌های عدد ۲ تا ۱۲۸ هستند، نشان می‌دهد. پس از تغییر به یادگیری روی مجموعه دوم، آموزش تا ۲۵۶ epoch یا تا زمانی که خطای اعتبارسنجی به حداقل برسد ادامه می‌یابد (توقف زودرس یا Early Stopping). همانطور که از شکل مشخص است، بهترین نتیجه (کمترین خطای تست) با یک سرفصل دومرحله‌ای بدست می‌آید که در آن نیمی از مراحل آموزش (۲۵۶ epoch) صرف نمونه‌های آسان‌تر می‌شود.شکل ۳. نمودار جعبه‌ای خطای تست به عنوان تابعی از Switch Epoch. هر جعبه نشان‌دهنده ۲۰ روش مختلف برای مقداردهی اولیه پارامترهای شبکه است که خط افقی وسط جعبه بیانگر میانه، مرزهای جعبه صدک‌های ۲۵ و ۷۵ و انتهای میله‌ها صدک‌های ۵ و ۹۵ خطا هستند.یک ایرادی که در اینجا به یادگیری سرفصلی می‌توان گرفت این است که مدل آموزش دیده با این روش، به طور کلی نمونه‌های بیشتری نسبت به مدل ساده مشاهده کرده است و عملکرد بهتر آن به همین دلیل است. اگرچه نمونه‌های آسان نسبت به نمونه‌های سخت، تنوع کمتری دارند اما برای اطمینان از عدم وجود این ایراد، آزمایش مدل ساده را با اجتماعی از مجموعه‌های BasicShapes و GeomShapes آموزش دادیم. مشاهدات حاکی از عملکرد ضعیف‌تر نسبت به یادگیری سرفصلی بود (خطایی مشابه با یادگیری سرفصلی با مقدار ۱۶ برای Switch Epoch). همچنین آموزش شبکه تنها با مجموعه BasicShapes نیز نتایج ضعیفی را به همراه دارد.با الهام از علوم شناختی این سوال را پرسیدیم که آیا الگوریتم‌های یادگیری ماشین می‌توانند از یک استراتژی سرفصلی بهره‌مند شوند؟ نتایج آزمایشات حاکی از پاسخ مثبت به این سوال بودند. البته توجه کنید برخی استراتژی‌های سرفصلی بهتر از بقیه کار می‌کنند و حتی این استراتژی‌ها ممکن است در بعضی مسایل کاملا بی‌استفاده باشند. البته انتخاب سرفصل مناسب هم ساده نیست، همانطور که هنر تدریس کردن برای انسان‌ها نیز دشوار است، این که مطالب در چه ترتیبی و با چه حجم و پیچیدگی باید فراهم شوند.امیدوارم این مطلب برای شما جالب بوده باشه. در نظر دارم که خلاصه‌ای از برخی مقالات مشهور دنیای هوش مصنوعی و یادگیری عمیق رو به زبان فارسی بنویسم. نظرات شما در این مسیر راهنمای من خواهند بود، از من دریغشون نکنید :-*</description>
                <category>علی شیرائی</category>
                <author>علی شیرائی</author>
                <pubDate>Sat, 05 Dec 2020 00:07:30 +0330</pubDate>
            </item>
                    <item>
                <title>نصب Tensorflow GPU در Ubuntu 20.04</title>
                <link>https://virgool.io/@HSILA/install-tensorflow-gpu-ubuntu-20-p2gccurjscd2</link>
                <description>برای مدل‌های یادگیری عمیق، از کارت گرافیکتون بیشترین استفاده رو ببرید!در این مطلب قصد دارم نحوه نصب تنسورفلو به گونه‌ای که کارت گرافیک رو بشناسه و باهاش کار کنه رو آموزش بدم. این آموزش برای کارت گرافیک‌های nvidia تنظیم شده.بطور کلی مراحل کار به شرح زیر هستند:نصب CUDA 10.1نصب cuDNN سازگار با CUDA نصب شدهاستخراج متغیرهای محیطی (Environment Variables)  برای CUDAنصب Tensorflow 2.0 با پشتیبانی از GPUنصب CUDA 10.1ابتدا به قسمت Additional Drivers برید و مطمئن شید که درایورهای nvidia نصب هستند. برای نصب CUDA 10.1 نیاز به درایورهای nvidia نسخه ۴۱۸.۳۹ و بالاتر دارید. بطور مثال درایور من نسخه 450.80 هست و در نتیجه می‌تونم CUDA 10.1 رو نصب کنم.چک کردن نسخه درایور Nvidia نصب شده بر روی سیستمعلت این که ما نسخه  10.1 CUDA رو برای نصب انتخاب کردیم هم اینه که این نسخه با Tensorflow GPU سازگاره. دقت کنید که به دلیل تفاوت‌های اوبونتو در نسخه‌های مختلف، از نصب CUDA 10.1 نسخه‌های 18.04 و 18.10 بر روی 20.4 خودداری کنید.خب بریم سر اصل مطلب. در اوبونتو 20.04 شما می‌تونید با دستور زیر CUDA 10.1 رو روی سیستم‌تون نصب کنید:$ sudo apt install nvidia-cuda-toolkitپس از نصب، برای اطمینان از اینکه همه چیز درست انجام شده، با اجرای nvcc -V باید اطلاعات و نسخه CUDA 10.1 رو دریافت کنید:nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243برخلاف اوبونتو 18.04، در 20.04 CUDA در مسیر متفاوتی نصب میشه. میتونید با دستور زیر مطمئن شید:$ whereis cuda
cuda: /usr/lib/cuda /usr/include/cuda.hدر اوبونتو 18.04 CUDA در یکی از دو مسیر زیر نصب میشد:/usr/local/cuda
/usr/local/cuda-10.1نصب cuDNNخب رسیدیم به مهم‌ترین مرحله، پس از نصب CUDA 10.1 باید cuDNN نسخه 7.6.5 رو دریافت کنید. برای دریافت این بسته شما باید در سایت توسعه‌دهندگان nvidia حساب کاربری داشته باشید پس اگر حساب کاربری ندارید عضو شید. توجه کنید که بهتره در این مرحله از ابزار عبور از تحریم برای ساخت حساب، ورود و دریافت بسته استفاده کنید. پس از ورود به حساب کاربری‌تون به صفحه آرشیو cuDNN برید.پس از تایید شرایط استفاده از cuDNN و بروکراسی معمول (!)، لیستی از نسخه‌های موجود cuDNN رو می‌بینید. در زمان نگارش این مطلب، جدیدترین نسخه 8.0.4 هست اما دقت کنید همونطور که گفتم شما باید دقیقا نسخه 7.6.5 رو دریافت کنید (من نسخه 8.0.4 رو نصب کردم و به مشکل خوردم و با استفاده از نسخه 7.6.5 مشکلم حل شد.)  پس  گزینه Download cuDNN v7.6.5 (November 5th, 2019), for CUDA 10.1 رو انتخاب کنید. در منوی باز شده با انتخاب cuDNN Library for Linux دریافت بسته شروع میشه که حجمش حدود ۵۰۰ مگابایت هست. پس از دریافت cuDNN با دستور زیر از حالت فشرده خارجش کنید:$ tar -xvzf cudnn-10.1-linux-x64-v7.6.5.32.tgzحالا باید فایل‌های استخراج شده رو در محل نصب CUDA کپی کنید. اینجوری:$ sudo cp cuda/include/cudnn.h /usr/lib/cuda/include/
$ sudo cp cuda/lib64/libcudnn* /usr/lib/cuda/lib64/حالا مجوزهارو براشون ست کنید:$ sudo chmod a+r /usr/lib/cuda/include/cudnn.h /usr/lib/cuda/lib64/libcudnn*خب این مرحله تموم شد!استخراج متغیرهای محیطی CUDAبرای اینکه Tensorflow از GPU پشتیبانی کنه، باید متغیرهای محیطی CUDA رو بشناسه. ما این کار رو با اضافه کردن این متغیرها به فایل ~/.bashrc انجام میدیم. دستور زیر رو اجرا کنید:$ echo &#039;export LD_LIBRARY_PATH=/usr/lib/cuda/lib64:$LD_LIBRARY_PATH&#039; &gt;&gt; ~/.bashrc
$ echo &#039;export LD_LIBRARY_PATH=/usr/lib/cuda/include:$LD_LIBRARY_PATH&#039; &gt;&gt; ~/.bashrcحالا برای بارگزاری متغیرهای محیطی استخراج شده دستور زیر رو اجرا کنید:$ source ~/.bashrcنصب Tensorflow 2.0بعد از نصب بسته‌های پیش نیاز، حالا می‌تونیم Tensorflow 2.0 رو نصب کنیم. از pip استفاده می‌کنیم:$ pip install tensorflowپکیج tensorflow پشتیبانی از GPU رو به طور پیش‌فرض در خودش داره و نیازی نیست مثل روزهای قدیم به طور خاص پکیج tensorflow-gpu رو نصب کنیم!برای تایید این که Tensorflow کارت گرافیک شمارو شناسایی کرده، در ترمینال python رو اجرا کرده و دو خط زیر رو وارد کنید:&gt;&gt;&gt; import tensorflow as tf
&gt;&gt;&gt; tf.config.list_physical_devices(&amp;quotGPU&amp;quot)اگر خروجی زیر رو دریافت کردید، تبریک میگم! همه چیز به خوبی انجام شده.[PhysicalDevice(name=&#039;/physical_device:GPU:0&#039;, device_type=&#039;GPU&#039;)]اما اگر آرایه‌ای خالی [ ] دریافت کردید، یه جای کارتون می‌لنگه! مراحل رو بار دیگه مرور کنید.حالا می‌تونید به راحتی برای پروژه‌های یادگیری عمیق‌تون از Tensorflow و کارت گرافیک‌تون استفاده کنید و از سرعتش لذت ببرید. از توجهتون ممنونم، منتظر بازخوردها و پیشنهادات شما برای مطالب بعدی هستم.منبع، با کمی دخل و تصرف</description>
                <category>علی شیرائی</category>
                <author>علی شیرائی</author>
                <pubDate>Thu, 05 Nov 2020 01:27:32 +0330</pubDate>
            </item>
            </channel>
</rss>