MatlabTips
892 subscribers
462 photos
72 videos
54 files
304 links
آموزش MATLAB با "استفاده از ویدئو و متن" در سطوح مبتدی تا پیشرفته
پاسخ به سوالات تخصصی:
@roholazandie
Download Telegram
جخ امروز
از مادر نزاده­ ام
نه!
عمر جهان بر من گذشته است.
نزدیک­ترین خاطره­ام خاطره­ ی قرن­هاست.
بارها به خون­مان کشیدند

خوش­بینی برادرت ترکان را آواز داد
تو را و مرا گردن زدند
بر گُرده­مان نشستند
و گورستانی چندان بی مرز شیار کردند

کوچ غریب را به یاد آر
از غربتی به غربت دیگر
به یاد آر:
تاریخ ما بی­قراری بود
نه باوری
نه وطنی.

#rojava
#kurds
👑 مشتق بگیر و راحت باش!👑

مشتق گیری در مرکز تقریبا تمام الگوریتم های یادگیری ماشین وجود دارد. در بسیاری از مواقع مانند شبکه های عصبی (در backpropagation) مشتق های مرتبه اول کافی هستند. بیشتر کتابخانه های معروف هم برای همین منظور بهینه شده اند. اما گاهی مشتق های مراتب بالاتر هم مهم می شوند. به صورت سنتی روش های زیادی برای چنین مشتق هایی ایجاد شده بود که برخی از آن ها کند بودند. اکنون که استفاده از GPU همه گیر شده است باز هم جان تازه ای به این روش ها دمیده شده است. دو کتابخانه معروف در این زمینه autograd ‌و jax هستند. یادگیری این کتابخانه ها از دو جهت اهمیت دارد:
۱- این کتابخانه ها به صورت بسیار ساده نشان می دهند که چگونه می توان روش های یادگیری ماشین را پیاده سازی کرد. در عمل بسیاری از مکانیزم های مورد استفاده از چشم پنهان هستند ولی اینجا می توان پیاده سازی سطح پایین را دید که از لحاظ یادگیری بسیار مهم است.

۲- آینده ی کتابخانه هایی که بر اساس مشتقات مرتبه اول کار میکنند هنوز روشن نیست. بعید نیست در آینده نیاز به مشتقات مراتب بالاتر بخصوص محاسبه ماتریس هسین برای محاسبات سریع تر یا دقیق تر باشیم.

برخلاف خود تنسرفلو jax بسیار پایتونیک نوشته شده است. به این معنا که تا جای ممکن استانداردهای نوشتن کد در پایتون و بخصوص numpy را رعایت کرده است. همین باعث می شود کار کردن با آن ساده و یادگیری سریعی داشته باشد.

پروژه jax توسط google
https://github.com/google/jax

یک کولب برای کار با jax:
https://colab.research.google.com/github/google/jax/blob/master/docs/notebooks/How_JAX_primitives_work.ipynb

یک پست وبلاگی بسیار جالب در مورد استفاده از jax
https://colindcarroll.com/2019/04/06/exercises-in-automatic-differentiation-using-autograd-and-jax/
پیاده سازی یک شبکه عصبی کامل با jax
⭐️معجزه جدید OpenAI: ربات جدید OpenAI با یک دست مکعب روبیک را حل می کند! ⭐️

بدون شک دست انسان یکی از پیچیده ترین ماشین های ساخت طبیعت است. میلیون ها سال تجربه در طی فرآیند شگفت انگیز فرگشت دست انسان را به مرتبه ای از پیچیدگی رسانده است که می تواند از زمخت ترین کارها مانند خرد کردن آجر (مشت زنی) تا ظریف ترین کارها مانند طراحی و هنرهای بسیار ریز را انجام دهد. شواهد زیادی نشان می دهند فرگشت دست بشر کمک زیادی به ابزارسازی و در نتیجه بزرگتر شدن مغز کرد و همینطور بزرگتر شدن مغز منجر به ساختن ابزارهای پیچیده و دوباره بزرگترین شدن مغز و الی آخر شده است (فر‌آیند هم فرگشتی coevolution)

شاید حتی تا چند سال پیش ساختن دست مکانیکی که بتواند به چنین سطحی از پیچیدگی برسد غیر ممکن بود اما امروز (۱۵ اکتبر ۲۰۱۹) OpenAI از دست رباتیک جدید خود رونمایی کرد که با ایجاد یک چارچوب یادگیری مبتنی بر یادگیری تقویتی در محیطی شبیه سازی شده به این هدف رسیده است. دست مکانیکی ساخت OpenAI‌ می تواند مکعب روبیک را با یک دست حل کند. ظاهرا چیزهایی که ربات ها می توانند انجام بدهند و ما نمی توانیم دارند بیشتر می شوند!

مساله در اینجا حل خود مکعب روبیک نیست که صد البته کار بسیار ساده ای برای کامپیوتر است. نکته اصلی حتی سخت افزار آن نیست (سخت افزار دست حداقل ۱۵ سال است که وجود دارد) مساله اصلی نگه داشتن مکعب در «یک دست» و انجام یک کار بسیار ظریف بدون انداختن مکعب یا انجام اشتباه آن است. کاری که حتی برای انسان هم بسیار دشوار است. (باور نمی کنید سعی کنید فقط با مکعب روبیک چند لحظه در یک دستتان بازی کنید،‌ حل کردنش پیشکش)
برای این منظور قبل از ساخت دست فیزیکی محیطی شبیه سازی ساخته شده و با استفاده از یادگیری تقویتی عمیق شبکه آموزش داده شده است. اما برای اینکه الگوریتم قادر باشد در محیط جهان واقعی کار کند یک چارچوب جدید به نام Autimatic Domain Randomization (ADR) را ایجاد کرده اند که هر بار شرایط را برای ربات با تغییر یک پارامتر سخت تر می کند. مثلا تغییر سایز یا وزن مکعب، بستن دو انگشت ربات به هم، ناخنک زدن در حین حل، انداختن پارچه بر روی دست و غیره باعث شده اند که الگوریتم راهی برای حل مکعب بدون انداختن آن در شرایط پیچیده جدید انجام دهد.
این دست اگرچه هنوز فقط مکعب روبیک حل می کند اما یکبار و برای همیشه طلسم فایق آمدن بر پیچیدگی های غیر قابل برنامه نویسی در دست رباتیک را شکست. این در را برای دست های رباتیک (و به طور کلی ربات ها) باز می کند تا بتوانند تقریبا هر حرکت پیچیده حرکتی انسان را یاد گرفته و شبیه سازی کنند.

مقاله
چارچوب نرم افزاری مورد استفاده
Media is too big
VIEW IN TELEGRAM
معجزه جدید OpenAI: ربات جدید OpenAI با یک دست مکعب روبیک را حل می کند!

توضیحات بیشتر
@matlabtips
یک شوخی با تنسرفلو #fun
کجا چه نموداری استفاده کنیم؟

Credit: https://twitter.com/MesgariSaber
This media is not supported in your browser
VIEW IN TELEGRAM
قانون مور قاعده‌ای سرانگشتی است که بیان می‌کند تعداد ترانزیستورهای روی یک تراشه با مساحت ثابت هر دو سال، به طور تقریبی دو برابر می‌شود.
صد البته این قاعده به دلیل محدودیت های فیزیکی تا ابد نمی تواند پایدار باشد.
سال ۲۰۲۰ آخرین سال برقراری قانون مور با فیزیک حال حاضر برای توسعه تراشه هاست. اما این لزوما پایان داستان نیست...
گوگل بالاخره امروز(۲۳ اکتبر ۲۰۱۹) تایید کرد که به «برتری کوانتومی» (quantum supremacy) دست پیدا کرده است. به این معنا که برای اولین بار یک کامپیوتر کوانتومی توانسته محاسبه ای را انجام دهد که خارج از دسترس بزرگترین ابر کامپیوتر کلاسیک دنیاست.
این کامپیوتر ۵۳ بیتی می تواند یک محاسبه خاص را در ۲۰۰ ثانیه انجام دهد کاری که برای بزرگترین ابرکامپیوتر جهان ده هزار سال طول میکشد!!
کامپیوتر های کوانتومی قادر به حل مسایل خاصی هستند که برای کامپیوتر های معمولی از لحاظ زمانی عملا ناممکن است . شکستن قوی ترین سیستم های رمزنگاری، شکستن الگوهای پیچیده ژنوم انسان که ما را قادر به ساختن داروهایی برای درمان سرطان می کند و همچنین ساخت مواد خاص در شیمی از آن دسته اند.
بسیاری از دانشمندان این موفقیت را یک قدم بسیار بزرگ به اندازه ساخت خود کامپیوتر می دانند.
بزودی در یک مطلب سعی میکنم توضیح دهم که اساس کامپیوتر کوانتومی چگونه است

ویدیو گوگل
مقاله
معرفی ابزار مونیتور کردن کد wandb

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

کسانی که یادگیری ماشین کار میکنند ارزش مانیتور کردن اطلاعات را می دانند. از طرفی به خاطر اینکه این سرویس در عمل آنلاین است نیازی ندارید که با teamviewer یا ssh به سیستمتان وصل شوید تا ببینید وضعیت چطور است. براحتی میتوانید بر روی گوشیتان هم چک کنید که بر روی سرور های دانشگاه یا سر کار چه می گذرد! اینجا چند اسکرین شات از نمودارهایی که دارم را گرفته ام در حالی که خانه هستم
🔵فراکتال بر روی GPU🔵

چند وقت پیش لایبرری های tensorflow, cupy و numpy‌و pytorch‌ را با هم مقایسه کرده بودم. آن جا یک مقایسه ساده بر اساس ضرب ماتریسی انجام دادم. دیشب سعی کردم دو فراکتال معروف مندلبرات و جولیا را پیاده سازی کنم (با الهام از یک کد دیگر از گیتهاب). از آنجایی که برای ساختن فراکتال شما نیاز به ایجاد یک ماتریس دارید (تا آن را به صورت فیدبک به فرمول خاصی بدهید اگر میخواهید بیشتر در مورد فراکتال بدانید این پست قدیمی را بخوانید) کتابخانه هایی که از کارت گرافیک استفاده میکنند می توانند بسیار مفید باشند.
متاسفانه با اینکه پایتورچ را از همه بیشتر میپسندم نتوانستم فراکتال را در آن پیاده سازی کنم چون این کتابخانه فعلا از اعداد مختلط پشتیبانی نمیکند. اما برای تنسرفلو نامپای و کوپای کدها را زدم. از tensorflow2‌ استفاده کردم. هر چند بعید میدانم بهینه ترین کد را برای تنسرفلو زده باشم اما بهبود نسبت به numpy‌ وجود داشت هر چند برنده سرعت cupy‌بود. برای بنچمارک سرعت سعی کردم جولیا ست( یک فراکتال دیگر)‌ را برای فاز های مختلف از صفر تا 2pi انیمیشن کنم. نتیجه سرعت ها به صورت زیر بود(بر اساس ثانیه):

tensorflow: 145.21
numpy: 165.63
cupy: 100.06

و صد البته نتیجه زیبای آن که در زیر میبنید
سورس کد
This media is not supported in your browser
VIEW IN TELEGRAM
مجموعه جولیا: یک فراکتال که بر روی کارت گرافیک پویاسازی شده است
کد
This media is not supported in your browser
VIEW IN TELEGRAM
کس مشکل اسرار اجل را نگشاد
کس یک قدم از دایره بیرون ننهاد
من می‌نگرم ز مبتدی تا استاد
عجز است به دست هر که از مادر زاد


خیام
جدا کردن بخش های مختلف موسیقی در پایتون (TF)

هفته پیش Deezer یکی از کدهای بسیار جالب خود به نام spleeter را اپن سورس و در دسترس همگان قرار داد که با آن می توانید هر آهنگی را به اجزای سازنده آن مانند صدای خواننده(ووکال) صدای گیتار پیانو و غیره تقسیم کنید!!(ساخته شده بر اساس تنسرفلو)

من این کد را برای آهنگ های مختلف امتحان کردم و می توان گفت برای همه موسیقی ها به یک اندازه خوب جواب نمیدهد. موسیقی های پاپ جدید که دستکاری زیادی می شوند نتایج خوبی ندارند ولی موسیقی های قدیمی تر بهتر جواب می دهند. یک نمونه اینجا گذاشته ام.
Audio
فایل اصلی (فایل ورودی)
Audio
فقط صدای خواننده (خروجی ۱)
Audio
فقط موسیقی (خروجی ۲)
🔵آزاد کردن غول از قفس🔵

امروز بالاخره OpenAI بزرگترین مدل زبانی خود را که بالغ بر 1.5 میلیارد پارامتر (حدود سه گیگابایت) است را منتشر کرد. این همان مدل زبانی ای بود که زمان خود (حدود یکسال پیش) آنقدر قدرتمند جلوه کرد که جنجال زیادی به پا کرد و به همین خاطر OpenAI قدری محتاطانه عمل کرد و مدل اصلی را منتشر نکرد بلکه یک مدل کوچکتر 77 میلیون پارامتری را منتشر کرد.

براساس داکیومنت OpenAI:
1- انسان ها خروجی های GPT-2 را بسیار متقاعد کننده می دانند! کیفیت متن تولید شده توسط این مدل بسیار بالاست طوری که افراد به خروجی های مدل از 10 امتیاز 6.72 را می دهند.

2- مدل GPT-2 می تواند برای سو استفاده تنظیم شود: پژوهش های CTEC نشان داده است که GPT-2 می تواند برای حداقل چهار مقصد شوم مورد سو استفاده قرار گیرد: برترپنداری نژاد سفید، مارکسیسم، اسلامگرایی جهادی و آنارشیسم. به این طریق که می توان اخبار و متن های جعلی با هدف پروپاگاندا و تغییر افکار عمومی فقط با این مدل ساخت و به مردم داد! (دقت کنید مساله این نیست که انسان هم می تواند این کار را انجام دهد مساله این است که ماشین می تواند حجم غیر قابل تصوری از این متون را تولید کند طوری که تمام اینترنت را آلوده و همه چیز را بهم بریزد)

3- تشخیص متن های تولیدی از متن واقعی تولید شده توسط انسان چالش برانگیز است. بهترین روش های یادگیری ماشین تنها دقتی حدود 96 درصد برای تشخیص متن جعلی تولید شده توسط این مدل از متن انسانی دارند که از دید OpenAI کافی نیست.

4- هیچ گزارشی از سو استفاده از این مدلهای کوچکتر تاکنون دیده نشده است! هیچ ردی از استفاده از این مدل برای ایجاد اسپم یا فیشینگ برای دزدیدن اطلاعات وجود ندارد. با این حال OpenAI اعلام کرده است که نمی توان از این موضوع هم کاملا مطمئن شد.

و در پایان OpenAI ادعای عجیبی کرده و گفته ما این مدل را منتشر کرده ایم چون زمانبندی ما چنین بوده است! متن انتشار آنها گیج کننده ست چون در عین حال که می خواهد نشان دهد این کار را مسئولانه و با پژوهش های زیاد انجام داده است در عین حال کاملا اعتراف می کند که این مدل خطرناک و قابل استفاده در راستای اهداف تروریستی است. این مانند این است که شما سر کوچه اسلحه نذری کنید و بگویید ما می دانیم این ابزار خطرناک است ولی حواستان باشد که درست استفاده کنید! در آخر باید به شیطنت دیگر OpenAI اشاره کرد که روز پنج نوامبر (*) را برای انتشار مدلشان انتخاب کرده اند!

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