مدتها بود که با آموزش CS50 دانشگاه Harvard آشنا بودم ولی فکر نمیکردم که اینقدر آموزشش خوب و آپدیت باشه. حتی یک سری آموزشهای تخصصی تر برای SQL, AI, Cybersecurity, Python, R, Web و … داره.
من خودم آموزش SQL اش رو قراره ببینم و اونطوری که بررسی کردم با SQLite کار میکنه که خیلی خوبه واسه استارت ولی چیزی که خیلی این آموزش رو متمایز میکنه کیفیتش هست. حتی مباحث سیستم دیزاین (مثل replication یا sharding) و بهینه سازی کوئری ها رو توضیح میده. سراغ MySQL و PostgreSQL هم میره.
CS50’s Introduction to Databases with SQL
اگر دنبال دوره با کیفیتی واسه شروع تا تسلط روی این مبحث هستید. قطعاً دوره SQL اش بدرد میخوره.
جدا از این موضوع. تو آینده قراره CS50x اش رو قراره ببینم که گزینه خیلی solid و خوبی برای Computer Science هست.
CS50’s Introduction to Computer Science
بخش AI اش هم خیلی خوب هست ولی من فعلاً آموزش MIT رو تو اول تو لیست اولویت هام میزارم.
CS50’s Introduction to Artificial Intelligence with Python
من خودم آموزش SQL اش رو قراره ببینم و اونطوری که بررسی کردم با SQLite کار میکنه که خیلی خوبه واسه استارت ولی چیزی که خیلی این آموزش رو متمایز میکنه کیفیتش هست. حتی مباحث سیستم دیزاین (مثل replication یا sharding) و بهینه سازی کوئری ها رو توضیح میده. سراغ MySQL و PostgreSQL هم میره.
CS50’s Introduction to Databases with SQL
اگر دنبال دوره با کیفیتی واسه شروع تا تسلط روی این مبحث هستید. قطعاً دوره SQL اش بدرد میخوره.
جدا از این موضوع. تو آینده قراره CS50x اش رو قراره ببینم که گزینه خیلی solid و خوبی برای Computer Science هست.
CS50’s Introduction to Computer Science
بخش AI اش هم خیلی خوب هست ولی من فعلاً آموزش MIT رو تو اول تو لیست اولویت هام میزارم.
CS50’s Introduction to Artificial Intelligence with Python
❤1👍1
ماجراجویی ROM گوشی (بخش اول):
اول از این شروع شد که گوشیم تا اندروید 8 (Oreo) بیشتر پشتیبانی نمیکرد.
سر همین رفتم و گشتم و دیدم که تو xdaforums پر از رام هست.
ولی خب خیلی خوش شانس بودم.
چون گوشیم توسط LineageOS آفیشال ساپورت داشت.
اولین رام ام رو ریختم (LineageOS).
دیدم که خیلی خوب هست ولی خب خواستم یه تجربه خیلی متفاوتی داشته باشم و از اونجایی که از پروژه microg شنیده بودم رفتم سراغ رام /e/ و واسه مدت طولانی روش موندم.
پروژه microg پروژه ای بود که تمامی لایبرری های userspace ای گوگل رو به صورت open source پیاده میکرد و انگار مهندسی معکوس Google Play Services بود.
سر همین هر برنامهای که نیاز به این چیزا داشت رو راحت میتونستی نصب بکنی.
و پروژه /e/ هم رامی بود که تمام ابزار های کلوز سورس گوگل از توش برداشته شده بود و سر همین دیگه خبری از «جاسوس افزار» های گوگل نبود.
اینا اسپانسر microg هم هستن.
من خودم هم تا حدی علاقهمند شدم و دیدم که تو رلیزشون گوشی من رو هم دارن سر همین دانلود کردم و تست کردم و در نهایت واسه مدتی طولانی روش موندم.
ولی حقیقتش، تجربه عالی نبود.
استور دیفالت رام /e/ که اسمش App Lounge هست (که یه جورایی واسط استور اصلی گوگل پلی بود) متأسفانه باگ های زیادی داشت.
و (F-Droid) Aurora Store هم تنها راه درست درمون واسه نصب برنامهها گوگل پلی بود.
جدا از این موضوع در استفاده طولانی مدت دچار کلی کندی ها و باگ های عجیبی شدم ولی فکر میکنم به خاطر کارایه من باشه مثل روت کردن (Magisk) و کلی چیزایه دیگه ولی خب هیچ وقت بررسی نکردم.
ولی خب microg در کل پروژه خوبی بود و اکوسیستم Google Play Services رو خوب ساپورت میکرد.
ولی خب در کل فکر میکنم تجربه جالبی نبود.
اگر مشکلات استورشون رو بهتر میکردن و یک سری باگ های رام نبود قطعا تجربه بهتری میبود.
البته که الان روی این رام نیستم.
این رو تو بخش دوم توضیح میدم.
#ROM_Adventure
اول از این شروع شد که گوشیم تا اندروید 8 (Oreo) بیشتر پشتیبانی نمیکرد.
سر همین رفتم و گشتم و دیدم که تو xdaforums پر از رام هست.
ولی خب خیلی خوش شانس بودم.
چون گوشیم توسط LineageOS آفیشال ساپورت داشت.
اولین رام ام رو ریختم (LineageOS).
دیدم که خیلی خوب هست ولی خب خواستم یه تجربه خیلی متفاوتی داشته باشم و از اونجایی که از پروژه microg شنیده بودم رفتم سراغ رام /e/ و واسه مدت طولانی روش موندم.
پروژه microg پروژه ای بود که تمامی لایبرری های userspace ای گوگل رو به صورت open source پیاده میکرد و انگار مهندسی معکوس Google Play Services بود.
سر همین هر برنامهای که نیاز به این چیزا داشت رو راحت میتونستی نصب بکنی.
و پروژه /e/ هم رامی بود که تمام ابزار های کلوز سورس گوگل از توش برداشته شده بود و سر همین دیگه خبری از «جاسوس افزار» های گوگل نبود.
اینا اسپانسر microg هم هستن.
من خودم هم تا حدی علاقهمند شدم و دیدم که تو رلیزشون گوشی من رو هم دارن سر همین دانلود کردم و تست کردم و در نهایت واسه مدتی طولانی روش موندم.
ولی حقیقتش، تجربه عالی نبود.
استور دیفالت رام /e/ که اسمش App Lounge هست (که یه جورایی واسط استور اصلی گوگل پلی بود) متأسفانه باگ های زیادی داشت.
و (F-Droid) Aurora Store هم تنها راه درست درمون واسه نصب برنامهها گوگل پلی بود.
جدا از این موضوع در استفاده طولانی مدت دچار کلی کندی ها و باگ های عجیبی شدم ولی فکر میکنم به خاطر کارایه من باشه مثل روت کردن (Magisk) و کلی چیزایه دیگه ولی خب هیچ وقت بررسی نکردم.
ولی خب microg در کل پروژه خوبی بود و اکوسیستم Google Play Services رو خوب ساپورت میکرد.
ولی خب در کل فکر میکنم تجربه جالبی نبود.
اگر مشکلات استورشون رو بهتر میکردن و یک سری باگ های رام نبود قطعا تجربه بهتری میبود.
البته که الان روی این رام نیستم.
این رو تو بخش دوم توضیح میدم.
#ROM_Adventure
👍4❤1
ماجراجویی ROM گوشی (بخش دوم):
بعد از مدتها موندن روی /e/ و سختیهایی که بهم میداد دیدم که نیاز بود رام عوض کنم.
دلایل دیگه هم وجود داشت.
یک سری چیزا دیگه بدون ساپورت کامل Google Play Services ممکن نبود و نیاز داشتم به اون اکوسیستم گوگل.
رفتم وبسایت Lineage و دیدم که رامم discontinued شده.
بله، الان میفهمم که چرا /e/ هم آپدیت نمیده، همشون upstream از LineageOS هستن.
دیدم که crDroid هست و رفتم و نصب کردم آخرین آپدیت 2024/02 ولی رامش خیلی خوب بود.
و بعد مدت کوتاهی یه archive پیدا کردم که تمام ROM های discontinued که تیم LineageOS ارایه میدادن رو نگه داری میکرد. و حتی signature چک هم انجام دادم و دیدم که معتبر و بدون دستکاری ان.
رام LineageOS رو نصب کردم.
و در نهایت رسیدم به سرطانی به نام نصب کردن GApps یا همون Google Play Services.
رفتم MindTheGApps رو تست کنم. دیدم که انگاری مخزن رو تغییر دادن رفتن تو GitLab.
موندم مشکلشون چیه؟ ایموجی poop گذاشتن که مثلاً چی؟
رلیز روی GitHub اشون هم قدیمی بود واسه اندروید 11.
نمیدونم MindTheGApps کجا رلیز های جدیدشون رو میزنن.
اگر کسی بلد هست بهم بگه.
دو تا ورژنی رو ازشون دانلود کردم.
یکی از sourceforge و یکی از هم از خود GitHub.
و هر دوشون تو نصب با adb sideload به ارور میخوردن.
رفتم سراغ OpenGApps دیدم که بله اونا هم دیگه آپدیت نمیدن.
و من دنبال نصب موزه داخل گوشیم نیستم.
نصبش هم با موفقیت انجام میشد و بوت میکردی و بوم (google speech services stopped working).
اصلاً علایم خوبی نبود.
رفتم سراغ NikGapps که در حال حاضر تو گوشیم نصب دارم و خیلی هم خوب کار میده.
و الان در حال حاضر LineageOS + NikGApps دارم.
فقط یه چیزی بهتون بگم.
همه اپلیکیشن های گوگل همه چیتون رو لاگ میکنن تو اکانتتون.
من هنوز نمیفهمم چرا باید این همه دیتا از یوزر collect کنن.
پس اگر حریم شخصی واستون مهم هست.
سعی کنید مینیمال ترین ورژن Gapps رو نصب کنید.
#ROM_Adventure
پس نوشت:
هر موقع پام به sourceforge میرسه احساس میکنم یه ویروسی چیزی میخوام نصب بکنم.
حتی ستاره ای چیزی ندارن که بفهمیم آخر این معتبره یا نه.
بعد از مدتها موندن روی /e/ و سختیهایی که بهم میداد دیدم که نیاز بود رام عوض کنم.
دلایل دیگه هم وجود داشت.
یک سری چیزا دیگه بدون ساپورت کامل Google Play Services ممکن نبود و نیاز داشتم به اون اکوسیستم گوگل.
رفتم وبسایت Lineage و دیدم که رامم discontinued شده.
بله، الان میفهمم که چرا /e/ هم آپدیت نمیده، همشون upstream از LineageOS هستن.
دیدم که crDroid هست و رفتم و نصب کردم آخرین آپدیت 2024/02 ولی رامش خیلی خوب بود.
و بعد مدت کوتاهی یه archive پیدا کردم که تمام ROM های discontinued که تیم LineageOS ارایه میدادن رو نگه داری میکرد. و حتی signature چک هم انجام دادم و دیدم که معتبر و بدون دستکاری ان.
رام LineageOS رو نصب کردم.
و در نهایت رسیدم به سرطانی به نام نصب کردن GApps یا همون Google Play Services.
رفتم MindTheGApps رو تست کنم. دیدم که انگاری مخزن رو تغییر دادن رفتن تو GitLab.
موندم مشکلشون چیه؟ ایموجی poop گذاشتن که مثلاً چی؟
رلیز روی GitHub اشون هم قدیمی بود واسه اندروید 11.
نمیدونم MindTheGApps کجا رلیز های جدیدشون رو میزنن.
اگر کسی بلد هست بهم بگه.
دو تا ورژنی رو ازشون دانلود کردم.
یکی از sourceforge و یکی از هم از خود GitHub.
و هر دوشون تو نصب با adb sideload به ارور میخوردن.
رفتم سراغ OpenGApps دیدم که بله اونا هم دیگه آپدیت نمیدن.
و من دنبال نصب موزه داخل گوشیم نیستم.
نصبش هم با موفقیت انجام میشد و بوت میکردی و بوم (google speech services stopped working).
اصلاً علایم خوبی نبود.
رفتم سراغ NikGapps که در حال حاضر تو گوشیم نصب دارم و خیلی هم خوب کار میده.
و الان در حال حاضر LineageOS + NikGApps دارم.
فقط یه چیزی بهتون بگم.
همه اپلیکیشن های گوگل همه چیتون رو لاگ میکنن تو اکانتتون.
من هنوز نمیفهمم چرا باید این همه دیتا از یوزر collect کنن.
پس اگر حریم شخصی واستون مهم هست.
سعی کنید مینیمال ترین ورژن Gapps رو نصب کنید.
#ROM_Adventure
پس نوشت:
هر موقع پام به sourceforge میرسه احساس میکنم یه ویروسی چیزی میخوام نصب بکنم.
حتی ستاره ای چیزی ندارن که بفهمیم آخر این معتبره یا نه.
👍3🔥1
برای دوستانی که میخوان اطلاعات عمیقتری راجب نحوه کار LSTM و GRU پیدا کنن.
این مقاله ها خیلی خوب توضیح میدن و پیشنهاد میدم بخونید.
Illustrated Guide to LSTM’s and GRU’s: A step by step explanation – By Michael Phi
Understanding GRU Networks – Simeon Kostadinov
همینطور یه مقالهای هم هست توسط Chris Olah نوشته شده که راجب LSTM صحبت میکنه. خیلی خوبه.
Understanding LSTM Networks - By Chris Olah
آموزشهای MIT که قبل تر معرفی کردم هم منبع خیلی خوبی واسه مباحث تئوریک هستن که تو بخش Deep Sequence Modelling میتونید اطلاعات خوبی راجب RNN ها پیدا کنید.
این مقاله ها خیلی خوب توضیح میدن و پیشنهاد میدم بخونید.
Illustrated Guide to LSTM’s and GRU’s: A step by step explanation – By Michael Phi
Understanding GRU Networks – Simeon Kostadinov
همینطور یه مقالهای هم هست توسط Chris Olah نوشته شده که راجب LSTM صحبت میکنه. خیلی خوبه.
Understanding LSTM Networks - By Chris Olah
آموزشهای MIT که قبل تر معرفی کردم هم منبع خیلی خوبی واسه مباحث تئوریک هستن که تو بخش Deep Sequence Modelling میتونید اطلاعات خوبی راجب RNN ها پیدا کنید.
❤2
نکته جالب راجب yt-dlp:
اگر میخواید با yt-dlp ویدیو رو همراه صدا دانلود کنید میتونید راحت فلگ فرمت رو تغییر بدید:
این میگه بهترین فرمت ویدیو که عرضش 720 یا کمتر هست با بهترین صدا دانلود کن و ترکیب کن.
قبلاً من از عدد 22 به عنوان فرمت استفاده میکردم چون هم صدا داشت و هم تصویر و از این نکته خبر نداشتم.
چند وقتی هست که دیگه ساپورت نمیکنه صرفا از این روش باید رفت.
اگر خواستید که زیرنویس رو جدا یا داخل خود فایل ویدیو (hardsub) دانلود کنید اول زیرنویس هارو لیست کنید:
بعدش برای دانلود جدا از فلگ skip-download استفاده کنید. اینطوری ویدیو دانلود نمیشه و فقط زیرنویس دانلود میشه.
اگر هم خواستید که داخل خود فایل ویدیو باشه دستورا رو ترکیب کنید.
پس نوشت:
جلوی جای sub-format و sub-lang فرمت و زبانی که تو لیست زیرنویس ها مد نظرتون هست رو بزارید.
اگر میخواید با yt-dlp ویدیو رو همراه صدا دانلود کنید میتونید راحت فلگ فرمت رو تغییر بدید:
yt-dlp -f "bestvideo[height<=720]+bestaudio" <video link>این میگه بهترین فرمت ویدیو که عرضش 720 یا کمتر هست با بهترین صدا دانلود کن و ترکیب کن.
قبلاً من از عدد 22 به عنوان فرمت استفاده میکردم چون هم صدا داشت و هم تصویر و از این نکته خبر نداشتم.
چند وقتی هست که دیگه ساپورت نمیکنه صرفا از این روش باید رفت.
اگر خواستید که زیرنویس رو جدا یا داخل خود فایل ویدیو (hardsub) دانلود کنید اول زیرنویس هارو لیست کنید:
yt-dlp --list-subs <video link>بعدش برای دانلود جدا از فلگ skip-download استفاده کنید. اینطوری ویدیو دانلود نمیشه و فقط زیرنویس دانلود میشه.
yt-dlp --sub-format vtt --sub-lang en --write-sub --skip-download <video link>اگر هم خواستید که داخل خود فایل ویدیو باشه دستورا رو ترکیب کنید.
yt-dlp -f "bestvideo[height<=720]+bestaudio" --sub-format vtt --sub-lang en --write-sub <video link>پس نوشت:
جلوی جای sub-format و sub-lang فرمت و زبانی که تو لیست زیرنویس ها مد نظرتون هست رو بزارید.
❤1
TECH STASH
نکته جالب راجب yt-dlp: اگر میخواید با yt-dlp ویدیو رو همراه صدا دانلود کنید میتونید راحت فلگ فرمت رو تغییر بدید: yt-dlp -f "bestvideo[height<=720]+bestaudio" <video link> این میگه بهترین فرمت ویدیو که عرضش 720 یا کمتر هست با بهترین صدا دانلود کن و ترکیب…
اشتباهات (Errata) و مطالب بیشتر:
فلگ
از فلگ
یعنی:
بعضی وقتا میخواید پلی لیستی دانلود بکنید شاید بخواید شماره ترتیب ویدیویی که داخل لیست هست رو به اول اسم فایل اضافه کنید.
با فلگ
پارامتر هایی که قابل توجه هستن:
playlist_index: شماره ترتیب ویدیو داخل لیست
noscript: تایتل ویدیو
ext: فرمت ویدیو
و در نهایت s های بعد از پرانتز هم نشون دهنده string بودن تایپ فرمتینگش هست. که شبیه printf format specifier داخل زبان سی هست.
و در نهایت، شاید نیاز باشه subnoscript هارو بعد از دانلود به فرمت srt تبدیل کنید که با فرمت هایی که youtube ارائه میده فرق داره.
مثلاً برای این کاربرد داره که بخواید با handbrake هاردساب اش کنید.
برای اینکار باید از فلگ
فلگ
write-sub فایل ساب رو جدا ذخیره میکنه، حتی اگر همراه ویدیو دانلودش کنید.از فلگ
embed-sub برای ذخیره داخل خود فایل ویدیو استفاده کنید.یعنی:
yt-dlp -f "bestvideo[height<=720]+bestaudio" --sub-format vtt --sub-lang en --embed-sub <video link>
بعضی وقتا میخواید پلی لیستی دانلود بکنید شاید بخواید شماره ترتیب ویدیویی که داخل لیست هست رو به اول اسم فایل اضافه کنید.
با فلگ
o میتونید اسم فایل خروجی رو تغییر بدید.yt-dlp -f "bestvideo[height<=720]+bestaudio" -o "%(playlist_index)s-%(noscript)s.%(ext)s" <playlist link>پارامتر هایی که قابل توجه هستن:
playlist_index: شماره ترتیب ویدیو داخل لیست
noscript: تایتل ویدیو
ext: فرمت ویدیو
و در نهایت s های بعد از پرانتز هم نشون دهنده string بودن تایپ فرمتینگش هست. که شبیه printf format specifier داخل زبان سی هست.
و در نهایت، شاید نیاز باشه subnoscript هارو بعد از دانلود به فرمت srt تبدیل کنید که با فرمت هایی که youtube ارائه میده فرق داره.
مثلاً برای این کاربرد داره که بخواید با handbrake هاردساب اش کنید.
برای اینکار باید از فلگ
convert-sub استفاده کنید:yt-dlp -f "bestvideo[height<=720]+bestaudio" --sub-format vtt --sub-lang fa --convert-sub srt --write-sub <video link>❤1
بهینه سازی یادگیری عمیق (پارت ۱):
اگر میخواید کارت گرافیک مخصوص هوش مصنوعی بگیرید حتماً حتماً حتماً حواستون به VRAM باشه.
نرید مثل من لپ تاپ RTX 3060 بگیرید با 6GB VRAM. (اون موقعی که گرفتم، هوش مصنوعی اونقدر فوکوس ام نبود ولی برنامه داشتم که در آینده برای اون هم استفاده کنم).
الان همین لپ تاپم compute score اش 8.6 هست که خیلی بالاست ولی کاملاً به خاطر VRAM اش bottleneck شده.
سر همین باید batch size رو پایین تنظیم کنم تا مموریم کامل پر نشه. :(
حالا شاید بپرسید compute score چی هست؟
یه نوع ورژن هست که امکانات سخت افزاری CUDA رو برای پردازش سریعتر بهتون نشون میده.
هر نسل که جلوتر میریم یکسری تغییراتی تو لایه سختافزار میدن تا پردازش های خاصی رو سریعتر کنن.
و در نهایت کتابخونه های هوش مصنوعی مثل PyTorch و Tensorflow از این تغییرات بهره میگیرن.
برای مثال تو نسخه PyTorch 2 امکانی اضافه شد به اسم torch.compile که مدل رو کامپایل میکرد و همینطور با استفاده از operator fusion و graph capture سرعت مدل ها رو بالا میبرد.
ولی یکی از بهبود سازی ها استفاده از ويژگی های سخت افزاری compute capability 8.0 به بعد بود.
درواقع 8.0 به بعد یعنی نسل های (RTX 30 series) Ampere به بعد.
ولی یک چیز مهمی هست که باید بدونید.
بیشتر افزایش سرعت هایی که تو ورژن PyTorch 2.0 گزارش شده با A100 بوده که مخصوص سرور هست. افزایش سرعت تو بقیه GPU ها هم وجود داره ولی نه به اندازه A100 چشمگیر.
پس ملاک اول برای خرید باید VRAM باشه.
ولی ملاک دوم علاوه بر مشخصات سخت افزاری GPU باید compute score هم باشه. یعنی هر چه کارت گرافیک جدیدتر، بهتر…
در ضمن. دو مقاله هست که پیشنهاد میدم حتماً حتماً بخونید:
اولیش راجب اینه که چه کارت گرافیکی بگیرید اگر میخواید کار یادگیری عمیق انجام بدید. نویسندش Tim Dettmers هست و راجب تجربیاتش و پیشنهاداتش گفته.
دومیش هم راجب سریعتر کردن سیستمهای یادگیری عمیق هست. باید ما حتماً از هزینههای انتقال بین memory و compute خبر داشته باشیم و از ترفند هایی که PyTorch و Tensorflow پشت صحنه به کار میگیرن (مثل operator fusion) خبر داشته باشیم تا کدی تولید نکنیم که مدل رو کند کنه.
نویسنده این مقاله Horace He که از توسعه دهنگان PyTorch هست.
اگر میخواید کارت گرافیک مخصوص هوش مصنوعی بگیرید حتماً حتماً حتماً حواستون به VRAM باشه.
نرید مثل من لپ تاپ RTX 3060 بگیرید با 6GB VRAM. (اون موقعی که گرفتم، هوش مصنوعی اونقدر فوکوس ام نبود ولی برنامه داشتم که در آینده برای اون هم استفاده کنم).
الان همین لپ تاپم compute score اش 8.6 هست که خیلی بالاست ولی کاملاً به خاطر VRAM اش bottleneck شده.
سر همین باید batch size رو پایین تنظیم کنم تا مموریم کامل پر نشه. :(
حالا شاید بپرسید compute score چی هست؟
یه نوع ورژن هست که امکانات سخت افزاری CUDA رو برای پردازش سریعتر بهتون نشون میده.
هر نسل که جلوتر میریم یکسری تغییراتی تو لایه سختافزار میدن تا پردازش های خاصی رو سریعتر کنن.
و در نهایت کتابخونه های هوش مصنوعی مثل PyTorch و Tensorflow از این تغییرات بهره میگیرن.
برای مثال تو نسخه PyTorch 2 امکانی اضافه شد به اسم torch.compile که مدل رو کامپایل میکرد و همینطور با استفاده از operator fusion و graph capture سرعت مدل ها رو بالا میبرد.
ولی یکی از بهبود سازی ها استفاده از ويژگی های سخت افزاری compute capability 8.0 به بعد بود.
درواقع 8.0 به بعد یعنی نسل های (RTX 30 series) Ampere به بعد.
ولی یک چیز مهمی هست که باید بدونید.
بیشتر افزایش سرعت هایی که تو ورژن PyTorch 2.0 گزارش شده با A100 بوده که مخصوص سرور هست. افزایش سرعت تو بقیه GPU ها هم وجود داره ولی نه به اندازه A100 چشمگیر.
پس ملاک اول برای خرید باید VRAM باشه.
ولی ملاک دوم علاوه بر مشخصات سخت افزاری GPU باید compute score هم باشه. یعنی هر چه کارت گرافیک جدیدتر، بهتر…
در ضمن. دو مقاله هست که پیشنهاد میدم حتماً حتماً بخونید:
اولیش راجب اینه که چه کارت گرافیکی بگیرید اگر میخواید کار یادگیری عمیق انجام بدید. نویسندش Tim Dettmers هست و راجب تجربیاتش و پیشنهاداتش گفته.
دومیش هم راجب سریعتر کردن سیستمهای یادگیری عمیق هست. باید ما حتماً از هزینههای انتقال بین memory و compute خبر داشته باشیم و از ترفند هایی که PyTorch و Tensorflow پشت صحنه به کار میگیرن (مثل operator fusion) خبر داشته باشیم تا کدی تولید نکنیم که مدل رو کند کنه.
نویسنده این مقاله Horace He که از توسعه دهنگان PyTorch هست.
❤1
دوره SQL دانشگاه هاروارد رو تقریباً چند هفته پیش تموم کردم.
میتونم به راحتی بگم یکی از بهترین آموزشهای چند وقت اخیرم بود.
این آموزش ابتدا از SQLite استارت میزنه (دیتابیس خوب، مشکلی با این موضوع نداشتم) و بعدش تو جلسه آخرش میپره روی MySQL و PostgreSQL.
تک تک جلساتش به شرح زیر ان:
جلسه 0. Querying: راجب مفاهیم دیتابیس و تمام عبارت هایی که برای کوئری گرفتن از دیتابیس استفاده میشه صحبت کرد. ولی اینجا خبری از join ها نیست، تو جلسه بعدی راجبش صحبت میکنه.
جلسه 1. Relating: اینجا بحث دیاگرام ها، ارتباطات و JOIN ها مطرح میشه. و عباراتی که تو Set ها و Group ها استفاده میشه.
جلسه 2. Designing: تو این بخش دیزاین دیتابیس رو شروع میکنید. Datatype ها. قید های جدول ها، کلید اصلی و کلید خارجی، ویژگیهای ستونها و دستوراتی برای دستکاری جداول.
جلسه 3. Writing: نوشتن تو دیتابیس، ایمپورت کردن CSV داخل SQLite و آپدیت و حذف رکورد ها، Trigger ها برای آپدیت اتوماتیک دیتا های درون جدول و مفهوم soft deletion مورد بحث قرار میگیره. (میدونستید میتونید تو insert into از select استفاده کنید، فکر میکنم اینطوری migration هارو مینویسن)
جلسه 4. Viewing: اینجا راجب view و کاربرد های view ها و نحوه ساختشون، view های موقت و کاربرد trigger ها تو soft deletion با استفاده از view بحث میشه. پنهان سازی و حفاظت اطلاعات با استفاده از view ها هم مورد بررسی قرار میگیره.
جلسه 5. Optimization: بخش مورد علاقه من. اینجا شما یاد میگیرید index درست کنید که سرعت کوئری ها رو بالا میبره. و همینطور پروفایلینگ انجام بدید تو SQLite تا ببینید که چقدر کوئریتون طول میکشه و چرا کند هست. همینطور ساختمان داده پشت صحنه indexing که B-Tree هستش رو خواهید دید و امکانات همزمان سازی کوئری ها، ACID، تراکنش و ساخت اون و مباحث مرتبط با Race Condition, Locks و …
جلسه 6. Scaling: اینجاست که وارد دنیای هیجان انگیز سیستمهای توزیع شده و دیتابیس های سروری میشید. با MySQL و Postgres مقداری کار میکنید. با datatype هاشون آشنا میشید. یکسری کار هایی که تو SQLite نمیتونستید انجام بدید مثل عوض کردن تایپ های ستون رو انجام میدید. با Stored Proceedure ها آشنا میشید که عملاً تابعی هستن که میتونید روی جداول ران کنید. با مباحث سیستم دیزاین مثل Vertical/Horizontal scaling, Replication, Sharding آشنا میشید و مقداری هم با مباحث امنیت و حفاظت دیتابیس مثل کنترل دسترسی و SQL Injection Attack آشنا میشید و روشهایی رو برای مقابله با اونها یاد میگیرید مثل Prepared Statement ّها.
خلاصه آموزش باحال و دلچسبی بود و اتفاقاً کلی تمرین و جزوه Note ها داره که کارو برای مرور و بکارگیری مباحثی که یاد میگیرید سادهتر میکنه.
فقط یه عیب و ایرادی داشت و اونم این بود که سؤالات دانشجو ها بعضی وقتا یکم پرت یا بدیهی هستن که این اعصابم رو خورد میکنه. دانشگاه به این خوبی که چنین سؤالاتی نداره که :)
فن بیان مدرسش هم بسیار خوب بود.
در ضمن مدرک CS50 میدن به صورت رایگان اگر امتیاز بالایی کسب کرده باشید (اعتبار زیادی نداره ولی خب حداقل یه تیر تو دو نشونه). میتونید هزینه کنید از edX مدرک تأیید شده بگیرید (ولی خب من پیشنهاد نمیکنم، مدرک به اندازه رزومه و کار عملی اهمیت نداره تو دنیای حرفه ای).
یه چیز رو فکر میکنم تو آموزش جا افتاده به اسم Correlated Subquery ولی اغلب چیزایی که میخواستم مطرح شده.
بگم که این آموزش استارت کار هست و قطعاً چیزای بیشتری پیدا میکنید وقتی تو دیتابیس عمیقتر میشید.
میتونم به راحتی بگم یکی از بهترین آموزشهای چند وقت اخیرم بود.
این آموزش ابتدا از SQLite استارت میزنه (دیتابیس خوب، مشکلی با این موضوع نداشتم) و بعدش تو جلسه آخرش میپره روی MySQL و PostgreSQL.
تک تک جلساتش به شرح زیر ان:
جلسه 0. Querying: راجب مفاهیم دیتابیس و تمام عبارت هایی که برای کوئری گرفتن از دیتابیس استفاده میشه صحبت کرد. ولی اینجا خبری از join ها نیست، تو جلسه بعدی راجبش صحبت میکنه.
جلسه 1. Relating: اینجا بحث دیاگرام ها، ارتباطات و JOIN ها مطرح میشه. و عباراتی که تو Set ها و Group ها استفاده میشه.
جلسه 2. Designing: تو این بخش دیزاین دیتابیس رو شروع میکنید. Datatype ها. قید های جدول ها، کلید اصلی و کلید خارجی، ویژگیهای ستونها و دستوراتی برای دستکاری جداول.
جلسه 3. Writing: نوشتن تو دیتابیس، ایمپورت کردن CSV داخل SQLite و آپدیت و حذف رکورد ها، Trigger ها برای آپدیت اتوماتیک دیتا های درون جدول و مفهوم soft deletion مورد بحث قرار میگیره. (میدونستید میتونید تو insert into از select استفاده کنید، فکر میکنم اینطوری migration هارو مینویسن)
جلسه 4. Viewing: اینجا راجب view و کاربرد های view ها و نحوه ساختشون، view های موقت و کاربرد trigger ها تو soft deletion با استفاده از view بحث میشه. پنهان سازی و حفاظت اطلاعات با استفاده از view ها هم مورد بررسی قرار میگیره.
جلسه 5. Optimization: بخش مورد علاقه من. اینجا شما یاد میگیرید index درست کنید که سرعت کوئری ها رو بالا میبره. و همینطور پروفایلینگ انجام بدید تو SQLite تا ببینید که چقدر کوئریتون طول میکشه و چرا کند هست. همینطور ساختمان داده پشت صحنه indexing که B-Tree هستش رو خواهید دید و امکانات همزمان سازی کوئری ها، ACID، تراکنش و ساخت اون و مباحث مرتبط با Race Condition, Locks و …
جلسه 6. Scaling: اینجاست که وارد دنیای هیجان انگیز سیستمهای توزیع شده و دیتابیس های سروری میشید. با MySQL و Postgres مقداری کار میکنید. با datatype هاشون آشنا میشید. یکسری کار هایی که تو SQLite نمیتونستید انجام بدید مثل عوض کردن تایپ های ستون رو انجام میدید. با Stored Proceedure ها آشنا میشید که عملاً تابعی هستن که میتونید روی جداول ران کنید. با مباحث سیستم دیزاین مثل Vertical/Horizontal scaling, Replication, Sharding آشنا میشید و مقداری هم با مباحث امنیت و حفاظت دیتابیس مثل کنترل دسترسی و SQL Injection Attack آشنا میشید و روشهایی رو برای مقابله با اونها یاد میگیرید مثل Prepared Statement ّها.
خلاصه آموزش باحال و دلچسبی بود و اتفاقاً کلی تمرین و جزوه Note ها داره که کارو برای مرور و بکارگیری مباحثی که یاد میگیرید سادهتر میکنه.
فقط یه عیب و ایرادی داشت و اونم این بود که سؤالات دانشجو ها بعضی وقتا یکم پرت یا بدیهی هستن که این اعصابم رو خورد میکنه. دانشگاه به این خوبی که چنین سؤالاتی نداره که :)
فن بیان مدرسش هم بسیار خوب بود.
در ضمن مدرک CS50 میدن به صورت رایگان اگر امتیاز بالایی کسب کرده باشید (اعتبار زیادی نداره ولی خب حداقل یه تیر تو دو نشونه). میتونید هزینه کنید از edX مدرک تأیید شده بگیرید (ولی خب من پیشنهاد نمیکنم، مدرک به اندازه رزومه و کار عملی اهمیت نداره تو دنیای حرفه ای).
یه چیز رو فکر میکنم تو آموزش جا افتاده به اسم Correlated Subquery ولی اغلب چیزایی که میخواستم مطرح شده.
بگم که این آموزش استارت کار هست و قطعاً چیزای بیشتری پیدا میکنید وقتی تو دیتابیس عمیقتر میشید.
❤3
Forwarded from دستاوردهای یادگیری عمیق(InTec)
GitHub
GitHub - tracel-ai/burn: Burn is a next generation tensor library and Deep Learning Framework that doesn't compromise on flexibility…
Burn is a next generation tensor library and Deep Learning Framework that doesn't compromise on flexibility, efficiency and portability. - tracel-ai/burn
دستاوردهای یادگیری عمیق(InTec)
خیلی هم عالیه : I love Rust
جالبیش اینه که ساپورت خیلی خوبی داره پروژه.
ساپورت از ONNX و LibTorch.
I'm very hyped for the future of rust.
ساپورت از ONNX و LibTorch.
I'm very hyped for the future of rust.
Deep_learning_Ian_Goodfellow,_Yoshua_Bengio,_Aaron_Courville_Adaptive.pdf
18.5 MB
کتاب یادگیری عمیق
نویسندگان: Ian Goodfellow, Yoshua Benigo و Aaron Courville
اگر Ian Goodfellow رو بشناسید میدونید که ایشون مخترع GAN یا Generative Adverserial Network هست. نوعی از شبکه های عصبی که امروزه ما به عنوان Generative AI میشناسیم.
این کتاب خیلی تئوریک هست و واسه درک عمیق ریاضیات و احتمالات پشت صحنه خیلی خوبه ولی واسه کدنویسی به کتاب دیگه که قبلا معرفی کردم مراجعه کنید.
نویسندگان: Ian Goodfellow, Yoshua Benigo و Aaron Courville
اگر Ian Goodfellow رو بشناسید میدونید که ایشون مخترع GAN یا Generative Adverserial Network هست. نوعی از شبکه های عصبی که امروزه ما به عنوان Generative AI میشناسیم.
این کتاب خیلی تئوریک هست و واسه درک عمیق ریاضیات و احتمالات پشت صحنه خیلی خوبه ولی واسه کدنویسی به کتاب دیگه که قبلا معرفی کردم مراجعه کنید.
👍2
چند وقته دارم با GAN آشنا میشم.
یه پلی لیست خوب روی YouTube پیدا کردم.
گفتم با شما هم به اشتراک بزارم.
Generative Adversarial Networks (GANs) Playlist
یه پلی لیست خوب روی YouTube پیدا کردم.
گفتم با شما هم به اشتراک بزارم.
Generative Adversarial Networks (GANs) Playlist
YouTube
Generative Adversarial Networks (GANs) Playlist
In this video series we start assuming no previous knowledge of Generative Adversarial Networks (GANs) and quickly build up an understanding of what this fie...
❤2👍1
دو تا از تجربیات بنده تو کار با GAN رو تو این پست براتون بیان میکنم:
1. مدل های ساده و اولیه شما رو ناامید میکنن.
نه به خاطر این که مدل شما مشکل داره.
به دلیل اینکه پروسه یادگیری پایدار نیست.
ما وقتی که میخوایم یادگیری تو GAN انجام بدیم.
سعی داریم که توزیع احتمالاتی Generator رو منطبق کنیم با توزیع احتمالاتی داده واقعیمون.
و چند روش داریم برای اینکه loss function امون رو بسازیم.
1. Kullback-Leibler (KL) divergence
2. Jensen-Shannon (JS) divergence
3. Wasserstein Distance
تو مدل های کلاسیک قبل از WGAN میان و از JS divergence استفاده میکنن به عنوان loss function.
مشکل اینجاست که JS divergence مشکل گرادیان داره که باعث ناپایداری در پروسه یادگیری میشه.
و به mode collapse منتهی میشه. یعنی Generator امون یه خروجی رو به ازای هر نمونه noise میده در حالی که باید خروجی های متنوعی بده.
دو تا مقاله خوب راجب این موضوع هستن که خواستم بزارم:
1. WHAT IS MODE COLLAPSE IN GANS?
2. GAN Mode Collapse Explanation
و اینجاست که میبینید که اینقدر پروسه یادگیریمون به hyperparameter ها حساس ان.
تو paper های قبل از WGAN که مبینید hyperparameter های خاصی ارائه شده و وقتی تغییر میدید میبینید که نتیجه نمیگیرید.
که به همین دلیل هست.
اینجاست که Wasserstein Distance وارد صحنه میشه.
تو مدل WGAN مشکل عدم پایداری پروسه یادگیری حل میشه و بلاخره مقادیر loss هم معنی دار میشن.
چون تو مدل های قبلی مقادیر loss معنی دار نبودن و بالا پایین میشدن و نمیدونستیم که مدل چقدر خوب یاد گرفته.
خلاصه میتونید به paper اش نگاه بندازید. فقط خیلی ریاضیات داره...
خیلی خیلی...
یه نفر تلاش کرده که خوب توضیح بده که لینکش رو اینجا میزارم.
البته که خود نویسندگان از weight clipping برای قید Lipschitz استفاده کردن که خود این هم مشکلاتی برای گرادیان به وجود میاره تو شرایطی مثل کند کردن پروسه یادگیری یا زوال گرادیان بسته به بزرگ بودن یا کوچک بودن مقدار weight clipping.
و بعدش میرسیم به WGAN-GP که از مکانیزم دیگه برای قید Lipschitz استفاده میکنه با تنبیه کردن norm گرادیان critic (همون Discriminator) بر اساس ورودی.
این ویدیو خوب پیاده سازیش رو انجام داده و منبع خودم هم بوده.
پیش نیازش اینه که ویدیو های قبلی playlist اش رو ببینید که تو پست قبلی گذاشتم.
2. خیلی پروسه training loop فرق میکنه.
وقتی وارد GAN شدم تازه فهمیدم که چقدر میتونه پروسه یادگیری متفاوت باشه.
و حتی loss function های شخصی سازی شده ای داریم. مثل WGAN-GP که با فرمول های خاصی پنالتی اضافه میکنن.
یا کلی paper های دیگه که شبکه های عصبی میسازن که به با استفاده از classifier های از قبل آموزش داده شده Generator رو تنبیه کنن تا یکسری ویژگی ها رو یاد نگیره.
خلاصه خیلی دنیای یادگیری عمیق بزرگه و هنوز خیلی خیلی خیلی چیزا واسه یاد گرفتن دارم.
1. مدل های ساده و اولیه شما رو ناامید میکنن.
نه به خاطر این که مدل شما مشکل داره.
به دلیل اینکه پروسه یادگیری پایدار نیست.
ما وقتی که میخوایم یادگیری تو GAN انجام بدیم.
سعی داریم که توزیع احتمالاتی Generator رو منطبق کنیم با توزیع احتمالاتی داده واقعیمون.
و چند روش داریم برای اینکه loss function امون رو بسازیم.
1. Kullback-Leibler (KL) divergence
2. Jensen-Shannon (JS) divergence
3. Wasserstein Distance
تو مدل های کلاسیک قبل از WGAN میان و از JS divergence استفاده میکنن به عنوان loss function.
مشکل اینجاست که JS divergence مشکل گرادیان داره که باعث ناپایداری در پروسه یادگیری میشه.
و به mode collapse منتهی میشه. یعنی Generator امون یه خروجی رو به ازای هر نمونه noise میده در حالی که باید خروجی های متنوعی بده.
دو تا مقاله خوب راجب این موضوع هستن که خواستم بزارم:
1. WHAT IS MODE COLLAPSE IN GANS?
2. GAN Mode Collapse Explanation
و اینجاست که میبینید که اینقدر پروسه یادگیریمون به hyperparameter ها حساس ان.
تو paper های قبل از WGAN که مبینید hyperparameter های خاصی ارائه شده و وقتی تغییر میدید میبینید که نتیجه نمیگیرید.
که به همین دلیل هست.
اینجاست که Wasserstein Distance وارد صحنه میشه.
تو مدل WGAN مشکل عدم پایداری پروسه یادگیری حل میشه و بلاخره مقادیر loss هم معنی دار میشن.
چون تو مدل های قبلی مقادیر loss معنی دار نبودن و بالا پایین میشدن و نمیدونستیم که مدل چقدر خوب یاد گرفته.
خلاصه میتونید به paper اش نگاه بندازید. فقط خیلی ریاضیات داره...
خیلی خیلی...
یه نفر تلاش کرده که خوب توضیح بده که لینکش رو اینجا میزارم.
البته که خود نویسندگان از weight clipping برای قید Lipschitz استفاده کردن که خود این هم مشکلاتی برای گرادیان به وجود میاره تو شرایطی مثل کند کردن پروسه یادگیری یا زوال گرادیان بسته به بزرگ بودن یا کوچک بودن مقدار weight clipping.
و بعدش میرسیم به WGAN-GP که از مکانیزم دیگه برای قید Lipschitz استفاده میکنه با تنبیه کردن norm گرادیان critic (همون Discriminator) بر اساس ورودی.
این ویدیو خوب پیاده سازیش رو انجام داده و منبع خودم هم بوده.
پیش نیازش اینه که ویدیو های قبلی playlist اش رو ببینید که تو پست قبلی گذاشتم.
2. خیلی پروسه training loop فرق میکنه.
وقتی وارد GAN شدم تازه فهمیدم که چقدر میتونه پروسه یادگیری متفاوت باشه.
و حتی loss function های شخصی سازی شده ای داریم. مثل WGAN-GP که با فرمول های خاصی پنالتی اضافه میکنن.
یا کلی paper های دیگه که شبکه های عصبی میسازن که به با استفاده از classifier های از قبل آموزش داده شده Generator رو تنبیه کنن تا یکسری ویژگی ها رو یاد نگیره.
خلاصه خیلی دنیای یادگیری عمیق بزرگه و هنوز خیلی خیلی خیلی چیزا واسه یاد گرفتن دارم.
❤1
کانتنت های این چنل یوتیوب خیلی مفید بودن.
و ویدیو آموزش GAN هم از ایشون بود.
ازش نهایت استفاده رو ببرید.
Aladdin Persson - YouTube
و ویدیو آموزش GAN هم از ایشون بود.
ازش نهایت استفاده رو ببرید.
Aladdin Persson - YouTube
👍1
اگر دنبال این هستید که ریاضیاتتون رو برای فهم تئوری Machine Learning و Deep Learning قوی کنید. یه منبع خیلی خوبی که میتونید باهاش شروع کنید khan academy هست.
چیزایی که باید روشون تمرکز کنید. این سه تا هست:
Precalculus / Calculus
Linear Algebra
Statistics and Probability
لینک سایتش اینه:
https://www.khanacademy.org/
چیزایی که باید روشون تمرکز کنید. این سه تا هست:
Precalculus / Calculus
Linear Algebra
Statistics and Probability
لینک سایتش اینه:
https://www.khanacademy.org/
❤2
این وبسایت محتوا های خوبی راجب سریعتر کردن کد پایتون میزاره.
آموزشهای async, multi-threading و multi-processing اش خیلی خوبه.
https://superfastpython.com/
آموزشهای async, multi-threading و multi-processing اش خیلی خوبه.
https://superfastpython.com/