MatlabTips
891 subscribers
462 photos
72 videos
54 files
304 links
آموزش MATLAB با "استفاده از ویدئو و متن" در سطوح مبتدی تا پیشرفته
پاسخ به سوالات تخصصی:
@roholazandie
Download Telegram
بازسازی چهره سلاطین روم باستان با استفاده از GAN

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

صفحه پروژه
برنامه نویسی سرویس گرا در پایتون

یکی از مشکلاتی که برای سیستم های یادگیری ماشین در فاز deployment رخ می دهد مدیریت منابع در زمانی است که تعداد کاربران زیاد می شوند. همه می دانیم که سیستم های یادگیری ماشین به طور معمول از لحاظ مصرف منابع بسیار حریص هستند و اگر برای هر کاربری که از سیستم استفاده می کند یکبار چنین مدل هایی را بارگذاری کنیم بعد از مدت بسیار کوتاهی و فقط با چند کاربر تمامی منابع سیستم (پردازنده حافظه و GPU) تمام خواهد شد. صد البته چنین مشکلی چیز جدید نیست و انواع و اقسام متد های deployment برای آن اندیشیده شده است. اما اگر از سرویس های ابری خاصی استفاده نمی کنید و به دنبال راه حل سریع و کارآمدی هستید که بتوانید خودتان و به طور کامل در پایتون استفاده کنید استفاده از xmlrpc توصیه می شود.
از آنجایی که من منبع کاملی بر روی اینترنت پیدا نکردم خودم دست به کار شدم و آن را ساختم. ایده اصلی این کار این است که به جای بارگذاری مدل ها برای هر کاربری که به سیستم وارد می شود مدل یک بار در ابتدا بارگذاری می شود و سپس به صورت یک سرویس به سرور وبی شما (مثلا flask یا django) پاسخ می دهد. این روش ساده می تواند بسیار در مصرف حافظه صرفه جویی کند اما این راه حل هم برای هزاران کاربر قابل مقیاس (scale) نیست چرا که حتی با وجود سرویس ها براحتی می توان آن ها را overload کرد. در آن مرحله باید به فکر ابزارهایی مانند celery یا چیزهای مشابه باشید.(احتمالا در آینده اضافه خواهم کرد) این کد همچنین آموزش می دهد که چطور می توان یک برنامه نویسی service oriented را در پایتون انجام داد.

https://github.com/roholazandie/service_oriented_py
معماری ساده سرویس گرا
و انسان تنها نشسته بود، غرق در اندوهی فراوان. همه حيوانات دور او جمع شدند و گفتند: "ما دوست نداريم تو را اينگونه غمگين ببينيم. هر آرزویی داری بگو تا ما برآورده کنیم."
انسان گفت: "مي‌خواهم قدرت بینایی قوی داشته باشم."
كركس جواب داد: "بينايي من مال تو."
انسان گفت: "مي‌خواهم نیرومند باشم."
پلنگ گفت: "مانند من قدرتمند خواهي شد."
انسان گفت: "مي‌خواهم اسرار زمين را بدانم."
مار گفت: "نشانت خواهم داد."
و سپس تمام حيوانات هرچه داشتند به او دادند. وقتي انسان همه ی این هدایا را گرفت و رفت، جغد به بقيه حیوانات گفت: "انسان دیگر خيلي چيزها مي‌داند و قادر است كارهاي زيادي انجام دهد. من مي‌ترسم!"
گوزن گفت: "ولي انسان به هرآنچه میخواست رسید، ديگر غمگین نخواهد بود."
اما جغد جواب داد: "نه. حفره‌اي درون انسان ديدم. اشتیاق و حرصی عميق كه كسي را ياراي پر كردن آن نيست. اين همان چيزي است كه او را غمگين مي‌كند و مجبورش مي‌كند بخواهد. او آنقدر به خواستن ادامه مي‌دهد تا روزي هستي مي‌گويد: من تمام شده‌ام و ديگر چيزي ندارم پيشكشت كنم!"

آخرالزمان (Apocalypto) - مل گيبسون
مدل های زبانی و آینده برنامه نویسی🧩

مدل زبانی GPT3 بر روی تمامی کدهای گیت هاب آموزش داده شده و همانطور که انتظار می رود قدرت بسیار عجیبی در کامل کردن کد شما دارد. معمولا ما زمانی که برنامه نویسی می کنیم سعی میکنیم که سرچ کنیم و از کدهایی که بر روی سایت های مختلف مانند stackoverflow هست استفاده کنیم. منابع آنقدر زیاد است که مثلا لازم نیست پیدا کردن تمام فایلهای داخل یک دایرکتوری را خودتان از صفر بنویسید قبلا این سوال جواب داده شده است. چنین چیزی یکی از اساسی ترین ویژگی های برنامه نویسی مدرن امروز است. اما GPT3 حتی یک قدم فراتر می گذارد. در ویدیوی زیر میبینید که این مدل می تواند تابع شما را فقط با اسمی که برای آن انتخاب می کنید کامل کند! این شامل حالتی می شود که بسیار خاص برنامه شما است و کدهای آن بر روی هیچ سایتی نیست! حتی اسم متغیر ها از بخش های دیگر کد شما گرفته می شود و شما عملا هیچ کاری لازم نیست بکنید!‌ یا باید بکنید؟
این قدم بسیار بزرگ است اما هنوز نمی تواند به طور کامل جایگزین انسان شود چون این کدها ۱۰۰ درصد درست نیستند. نیاز است که شما وارد عمل شوید و بخش هایی از آن را اصلاح کنید. از طرفی اگرچه ممکن است این مدل قادر باشد یک تابع حتی نسبتا پیچیده را پیاده سازی کند اما هنوز آنقدر پیچیده نیست که کل برنامه شما را که شامل بسیاری از توابع مختلف است را کامل کند. به عبارتی ساختار ماکرو آن هنوز منطقی دارد که مدلهای زبانی در درک آن مشکل دارند.

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

ابزارهایی مانند kite یا ninetab هم قدم های اولیه برای ادیتورهای هوشمند را برداشته اند. ویدیوی زیر بیشتر در این مورد توضیح می دهد

https://www.youtube.com/watch?v=utuz7wBGjKM&feature=youtu.be
سوزن بوفون: از احتمال به هندسه (پیاده سازی پایتون + متلب)

فرض کنید یک صفحه ی راه راه به شکل بالا دارید و یک سوزن بر روی صفحه می اندازید احتمال اینکه سوزن بر روی خط ها بیفتد چقدر است؟ ساده ترین راه این است که مانند هر محاسبه احتمال دیگر مثلا چندین (هر چه بیشتر بهتر) سوزن بندازیم و از میان همه آنها تعدادی که بر روی خط ها میفتند را بشماریم و تقسیم بر تعداد کل کنیم.

اگر محاسبه را دقیق تر انجام دهید متوجه می شوید که میزان دقیق این احتمال اگر طول سوزن l و فاصله ی خط ها از هم t باشد برابر است با p=2*l/pi*t بله عدد پی اینجا ظاهر می شود!! یعنی اگر فاصله خط ها از هم دو برابر طول سوزن باشد این احتمال دقیقا برابر با یک بر روی عدد پی است!

اما از من میپرسید: یک لحظه صبر کن پی از کجا آمد؟ مگر پی نسبت محیط به قطر دایره نبود؟ اصلا پی مربوط به هندسه و دایره و این چیزهاست چطور سر از این مساله ی عجیب در می آورد؟
ادامه

پیاده سازی در پایتون و متلب
آزادی و تحمل: بازگشت به مدرنیسم

پرده اول: اعتراضات گسترده ی چند روز اخیر به کشیدن تصویر کاریکاتور پیامبر اسلام باز هم سوالات زیادی در ذهن ایجاد کرده است. اینکه چرا این دعوا پایانی ندارد؟ آیا توهین حق زندگی در یک جامعه ی آزاد است؟ و چرا فرانسه نوک پیکان حمله ی اسلام گرایان هست؟ تضاد پنهانی که ریشه در تاریخ و فلسفه ای دارد که غرب را گاه در برابر مذهب قرار می دهد.

پرده دوم: امسال مانند سال های پیش ویدئویی در فضای مجازی پخش شده از ایرانیانی که در تورنتو کانادا در حال عزاداری محرم هستند. در همین حین عده ای دیگر تا جای ممکن به آنها نزدیک شده و با پخش موسیقی شاد با صدای بسیار بلند طوری که صدای عزاداری شنیده نمی شد، سعی در مختل کردن عزاداری داشتند. قطعا این افراد با برنامه به آنجا رفته بودند و سعی کرده بودند همه چیز از آهنگ و بلندگو را آماده کنند تا بتوانند تا جای ممکن به هدف خود برسند. این کار حتی به درگیری فیزیکی منجر شده بود که با دخالت پلیس خاتمه یافته بود. کاری با حدس ها و گمان ها از این که این افراد چرا چنین کاری کردند نداریم اما این مثال از یک جهت جالب است. بسیاری از افرادی که در این جریان شرکت کرده بودند خود سالها قربانی "عدم آزادی" بودند اما اکنون در شرایطی که در محیطی "آزاد" قرار گرفته اند اصولا باید قدر آن را بدانند و به آن «احترام» بگذارند. اما چه اتفاقی می افتد؟

همواره هنگامی که تضادی بوجود می آید که منجر به انتقام، سرکوب یا حذف فیزیکی فرد یا گروهی توسط معتقدان به تفکر یا کیشی خاص در قدرت می شود، اولین موضوعی که رسانه ها از آن صحبت به میان می آورند بحث "آزادی" یا به طور خاص تر "آزادی بیان" است. تقریبا همه جا پر است از اینکه چرا شرایط سیاسی حاکم بر منطقه یا کشوری خاص "آزادی" را محدود می کند. تمامی این جریانات به نحوی شکل می گیرند که تصور همگانی از مشکلات نبود "آزادی" است. شعرها در باب آزادی سروده می شود و میدان ها به اسم آن می گذارند. صد البته که مفهوم "آزادی" برای یک جامعه پیشرو مفهومی کلیدی و اساسی است و قطعا ایده آل هر جامعه ای رسیدن به چنین آزادی ای است. اما صرف خواستن چیزی به معنی دانستن نحوه رسیدن به آن نیست.
بخشی از پیچیده بودن مسئله به روانشناسی بشر در بستر زندگی اجتماعی بر می گردد. برخلاف دیگر حیوانات که تمام برخورد هایشان بر سر قلمرو، غذا و جفت است بشر به طرز عجیبی نسبت به باورهایش حساس است تا جایی که حاضر است همه چیز را فدای آن کند!

ادامه
This media is not supported in your browser
VIEW IN TELEGRAM
شرکت huggingface اولین مدل پرسش و پاسخ دیداری (Visual Question Answering ) خود را بر روی ریپوی محبوب transformers منتشر کرد. این قدم بزرگی برای ایجاد امکانات بیشتر برای توسعه مدل های زبانی درگیر با تصویر و بقیه منابع اطلاعاتی است.

کولب برای تست (بدون نصب هیچ چیز خاصی)
مقاله نامپای (Numpy) چاپ شد

این مقاله یک مقاله بسیار خوش خوان و حتی برای کسانی که تاریخ و کاربرد نامپای را نمی دانند بسیار مفید است.
برنامه نویسی آرایه ای که نامپای به پایتون معرفی کرد اساس تقریبا تمام کتابخانه های سطح بالاتر از scipy و matplotlib تا tensorflow و pytorch شد.

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

لینک مقاله
ComplexityExplained[Farsi].pdf
5.7 MB
«در اتـم کربـن هیـچ عشقـی وجود ندارد، هیـچ طوفانـی در یک مولکول آب نیسـت، هیـچ فروپاشـی مالـی در یـک اسکناس دلار نیست.»
– پیتر دادز


کتابچه «شرح پیچیدگی» (ترجمه شده به فارسی) یک توضیح بسیار زیبا و مختصر از دانشی است که به اعتقاد هاوکینگ علم اصلی قرن پیش رو است. مطالعه سیستم های پیچیده از مغز گرفته تا هوش مصنوعی و بازارهای مالی همه و همه در این علم مطالعه می شوند.

لینک به وبسایت

وبسایت دیگری در مورد پیچیدگی
یکی از سخت ترین مراحل مقاله نوشتن یا هر نوشته علمی فرمول نویسی ست که بسیار طاقت فرساست. از طرفی نوشتن این فرمول ها بر روی کاغذ خیلی راحت است. ابزاری که استفاده میکنم و به بقیه هم بشدت توصیه میکنم در لینک زیر پیدا میکنید.
(خطاهای کوچکی هم میبینید به راحتی با یک دست خط بهتر 😁 یا اصلاح فرمول لاتک قابل حل هستند)

https://mathpix.com/
بدون شک مهمترین معماری شبکه ی عصبی دهه دوم این قرن در حوزه یادگیری ماشین transformers ها هستند (دهه اول دهه کانولوشن هاست). این معماری جدید آنقدر موفق عمل کرده است که منجر به ساختن قدرتمند ترین هوش مصنوعی حال حاضر یعنی gpt3 شده و کاربردهای آن حتی به حوزه پردازش تصویر رسیده است. بدون ترنسفورمر ها پردازش زبان طبیعی هنوز با مسایل بسیاری درگیر بود.
با اینکه مطالب بسیار زیادی در مورد این معماری نوشته شده است هنوز درک درستی از آن نداریم. نه به این خاطر که این معماری خودش پیچیده است بلکه به این خاطر که نمیدانیم چرا ساختار attention در آن خوب عمل میکند. به شخصه برای مدت ها برای من سوال بود که چرا اسم گذاری query key و value وجود دارد!
در این پست سعی کرده ام یافته های خودم را که از مطالعات گوناگون به دست آورده ام دسته بندی کنم و تاریخچه ای که پشت این مفهوم است را بررسی کنم و اصلا بفهمیم attention از کجا آمده و چرا اینقدر مهم است.

(پست به انگلیسی)
https://link.medium.com/GagdWVr529
اصلا چرا قاعده attention کار می کند. تفسیر ریاضی این مدل در کار جدید
Hopfield Network is all you need
یکی از زیبا ترین مقاله هایی ست که دیده ام. به جای خواندن مقاله می توانید خلاصه بلاگ زیر را هم بخوانید که توسط خود نویسنده ها منتشر شده است و حاوی همه لینک های مفید است.

https://ml-jku.github.io/hopfield-layers/
چرا جهان می رقصد؟
تحلیل ریاضی پدیده sync و اینکه چرا همه جا هست. شبیه سازی در متلب ( به انگلیسی)

در جنبش اندرآور زلف عبرفشان را

در رقص اندرآور جان‌های صوفیان را

خورشید و ماه و اختر رقصان بگرد چنبر

ما در میان رقصیم رقصان کن آن میان را
This media is not supported in your browser
VIEW IN TELEGRAM
مدل جدید یادگیری عمیق با مدل سازی دینامیکی ریاضی نورون های واقعی موجوداتی به اسم seatworm (یا همان کرم روده!) توانسته تنها با ۱۹ نورون اتومبیل خودران را هدایت کند!!! این را مقایسه کنید با بهترین مدلهای کنونی یادگیری عمیق که نیاز به صدها هزار نورون و میلیاردها پارامتر دارند!
مدل جدید ساده. مقاوم به نویز و بسیار اسپارس است. همچنین مدل قابل تفسیر و فهم است و شبیه به شبکه های عمیق مانند یک جعبه سیاه نیست.

مقاله
پیپر
ویدیو
This media is not supported in your browser
VIEW IN TELEGRAM
تا حالا برای شما پیش آمده است که ترانه ای در ذهنتان هست اما بجز زمزمه ای از آن چیزی را به خاطر نمی آورید؟
سرچ جدید گوگل با تحلیل صدای زمزمه آهنگ مورد نظر را پیدا میکند!!
اوبر کتابخانه ای به نام لودویگ را منتشر کرده است که نیاز به کد زدن برای یادگیری ماشین را حذف می کند! در واقع تنها چیزی که شما لازم است داشته باشید دیتاست و تایپ ورودی و خروجی است. بقیه کار را لودویگ انجام می دهد! این کتابخانه عمل پروتوتایپینگ را بسیار سریع می کند و نیاز به نوشتن کدهای طولانی یا پردازش های اضافه را حذف می کند. لودویگ با استفاده از سیستم تایپینگ خود متوجه می شود که شما دقیقا چه چیزی می خواهید به طور مثال اگر ورودی عکس و خروجی متن باشد شما image captioning می خواهید. اگر ورودی متن و خروجی عدد باشد احتمالا sentiment analysis لازم دارید!!
کتابخانه

ویدیوی معرفی
To not know mathematics is a severe limitation to understanding the world.
- Richard Feynman
How to user Pytorch more efficiently? (by NVIDIA)

🔵In dataloader it’s almost always better to use pin_memory=true and num_worker>0

🔵If you have convolution followed by batch norm, set the bias in convolution to zero that has no effect on the result but makes everything faster.

🔵Use the param.grad=None instead of zero_grad()

model.zero_grad() ===> for param in model.parameters():
param.grad =None

🔵Using pytorch jit can fuse operations into one single CUDA kernel
Unfused point-wise operations are memory bound. They have to
Launch a separate CUDA kernel
Load data from global memory
Perform computation
Store results back into global memory

@torch.jit.script
def gelu(x):
Return x*0.5*(1+ torch.erf(x/1.41))
That decorator makes it much faster!

More here
slides
🔵Some key notes on Installing Python🔵

Even though installing python seems easy there are a couple of problems that need to be addressed:
if you are on a Linux machine you probably have one version of python installed. you can check the version by typing python in the terminal. Sometimes other versions of python are also installed. You can check them all by checking
/usr/bin
directory. If your desired version is not installed you can install them by using the following command (on a debian/ubuntu linux):

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt install python3.7

You can replace python3.7 by other versions.

It is recommended to use python in virtual environments. The benefit of it is every time you install a library it will remain in that environment and doesn't change the global libraries that system or other projects might use. So you also need to install virtualenv

sudo apt-get install python3-pip
sudo pip install virtualenv

Now you can create a virtualenv with different versions of python. For example you can write:

virtualenv --python python2.7 venv
source venv/bin/activate

Finally there is one more step that is needed for libraries that use C extensions. They need the tools to compile the c codes and this is needed for a lot of useful python libraries like lxml. For this purpose, you have to install python-dev

sudo apt install python3.7-dev

Note that you need to specify the version of the python-dev. Also you have to make sure the library you are currently using and has C extension is compatible with the python version you use.