TECH STASH – Telegram
TECH STASH
212 subscribers
115 photos
5 videos
15 files
254 links
اینجا هر چی رو که یاد میگیرم، به اشتراک میزارم...
هوش مصنوعی، لینوکس، اوپن سورس، برنامه نویسی و...

Admin: @D3F4U1T_ARS
Download Telegram
اول از همه بهتون بگم که بنده متخصص Docker و DevOps کار نیستم. سر همین ممکنه نظرات من صرفاً صحیح نباشه بنابراین به چشم نظر شخصی بهش نگاه کنید.

من خیلی از ایده و فلسفه Docker خوشم میاد.

و ازش استفاده کردم. ولی متاسفانه استفاده واقعی و درستش رو هنوز به کار نبردم و سر همین ازتون میخوام که وقتی سمتش برید که واقعا دلایل معقولی دارید.

زمان هممون محدود هست و نمیتونیم هر تکنولوژی رو یاد بگیریم و تو workflow امون integrate کنیم.

اول اینکه من برای داکر چند استفاده میبینم.
دو تای اول معقولن. سومی، یکم عجیب....

1. دیپلوی: این مهم ترین استفاده هست. مخصوصا مخصوصا اگر از kubernetes استفاده میکنید. ولی خب اگر هم نمیکنید باز هم حتما میخواید که یه محیط کاملا reproducible و stable داشته باشید. دلیل بر این نیست که بخواید کدی بنویسید که تنها با dependency های داکر کار کنه. وقتی بحث نرم افزار های enterprise وسط باشه ما نمیتونیم 100% compatibility رو روی همه محیط ها تضمین کنیم، مگر اینکه این همه هزینه dev time بزاریم. ولی خب compatibility حتماً باید تا حد امکان بالا باشه.

2. اشتراک گذاری سرویس های مورد توسعه بین توسعه دهندگان: همه توسعه دهنده ها وقت ندارن که تمام سرویس ها رو بالا بیارن. تک تک سرویس ها کلی تنظیمات و دردسر ها دارن و کلی زمان میبره و داکیومنتیشن میخواد. ما با داکر راحت میتونیم ایمیج سرویس های مورد توسعه رو گیر بیاریم و برناممون رو همگام با اون توسعه بدیم.

3. محیط توسعه شخصی (یا تیمی): حالا چه پروژه به پروژه یا چه گلوبال. این استفاده یکی از استفاده های جالبی هست... ولی خب ما اینجاست که وارد تنظیمات Xorg و Wayland socket forwarding میشیم و کلی جزییات عمیق دیگه داکر.

این استفاده سومی حالا از کجا به ذهنم اومد؟
وقتی که vscode devcontainers و distrobox و همینطور Fedora Silverblue که شامل ابزار toolbox هست آشنا شدم.

مفهوم وجود یک محیط stable و کاملا reproducible که هر جایی بتونی راحت نصبش کنی و کارت رو انجام بدی خیلی چیز خوبی بود.

ولی خب اگر شما بخواید از صفر Dockerfile درست کنید و دستوراتش رو یاد بگیرید به نظرم ارزشش رو نداره. مخصوصا وقتی که واقعا چنین نیازی پیش نمیاد. من سیستم عاملم رو زیاد تغییر نمیدم و ۹۵ درصد مواقع روی سیستم خودم کار میکنم. جدا از اینکه اینقدر زمان باید بزارید که زیر و روی docker رو یاد بگیرید.

البته که محیط توسعه میتونه حتی بین توسعه دهنده ها هم به اشتراک گذاشته بشه. ولی خب onboard یک نفر تازه کار با این روش بد هست. چون اگر tech stack خودش رو بلد نباشه نصب و پیاده کنه قطعاً تو آینده دچار مشکل میشه.

ایده خوبی که میتونه کارو ساده‌تر کنه distrobox هست به اضافه یه اسکریپت شخصی که post init بیاد و نرم‌افزار های مورد نیازتون رو نصب کنه. ولی خب این دیگه داکر نیست. ابزار تحت داکر هست.

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

اما یه چیزی رو میدونم. و اونم اینه که دنبال دلایل منطقی برای یادگیری یک تکنولوژی باشید. یادگیری صرف یادگیری یا دلیل نامناسب دیگه فایده‌ای نداره.
👍1
الان میفهمم چرا مدل هام overfit میکنن.

#Meme
👍1
یکی از ریسورس های خیلی خوب و تئوری محوری که خیلی خیلی پیشنهاد میکنم ببینید MIT Introduction To Deep Learning هست.

این منبع خیلی با کیفیت بالایی هست و خیلی خوب راجب تئوری های یادگیری عمیق صحبت میکنه.

این لینک برای سال ۲۰۲۴ اش هست:

MIT 6.S191 Introduction to Deep Learning - 2024

و Playlist YouTube اش که شامل تمام lecture های سال های قبل میشه.
(حواستون باشه که همه lecture ها رو نیاز نیست ببینید و هر سال تکرار میشن ولی خب یک سریاشون انگاری متمایز ان)

MIT 6.S191 Introduction to Deep Learning - YouTube Playlist
TECH STASH
سلام دوستان. از اونجایی که خیلیاتون جدید هستید و تازه اومدید گفتم که یک سری course ها و آموزش‌های ویدیویی خوبی در مورد Machine Learning و Deep Learning بزارم که شما هم ازش استفاده کنید. کتاب دیجیتالش رو هم گذاشتم که ببینید چه مباحثی رو کاور میشه و آیا چیزی…
خب دوستان.
خوشحالم به اطلاعتون برسونم که آموزش ZTM PyTorch رو تقریباً ۲ هفته پیش تموم کردم.

مثل ماجراجویی بسیار بسیار طولانی بود و تازه نوک کوه یخ یادگیری عمیق هست.

ولی خب بهترین شروعی بود که برای یادگیری عمیق داشتم. سر همین موضوع خیلی پیشنهاد میکنم این آموزش رو ببینید اگر میخواید با PyTorch کار کنید.

یک سری نکات خوبی که این آموزش داشت:

1. وارد Transformers شد. چیزی که داخل آموزش ZTM Tensorflow اش نیست.

2. دیپلوی کردن مدل ها که مبحث خیلی مهمی هست پوشش داد (مثل دیپلوی کردن روی huggingface با gradio)

3. کدنویسی استاندارد رو داخل PyTorch یاد داد. متأسفانه PyTorch مثل Tensorflow نیست که تابع fit داشته باشه (یا حداقل من ندیدم). باید حلقه train و test اش رو خودت بنویسی که تو این آموزش این موضوع و همینطور موضوع های بیشتر کاور شد.

و اما یک سری مشکلاتی که این آموزش داشت:

1. وارد RNN نشد. درسته که وارد Transformer ها شد ولی خب از دید Computer Vision واردش شد.
البته که مباحثی مثل Attention, Encoder و Decoder یکی ان صرف نظر از domain ای که داریم داخلش کار میکنیم (متن، صدا یا تصویر)

2. فقط روی classification کار کرد. البته که از آموزش‌ها انتظار نمیره که همه ی تاپیک هایی که مرتبط با هر domain هست رو کاور کنن.
در مجموع ممکنه بیشتر از 200 ساعت یا حتی بیشتر بشه (از بس که موضوع عظیمی هست) ولی انتظار داشتم یکم وارد Object detection بشه تا یکم آموزش جذاب‌تر بشه.

3. ایکاش یکم روی NLP هم کار میکرد. NLP خیلی کانسپت مهمی هست از اونجایی که همه جا داریم از LLM ها استفاده میکنیم و خیلی فرصت خوبی میشد که NLP رو بعد از Transformer ها کاور کنه ولی خب آموزش از مرز 100 ساعت میگذشت.

4. خبری از GAN نبود. امروزه خیلی GAN باب شده و متأسفانه هیچ رد پایی از این مبحث نبود.

خود این ایرادات یکم آموزش رو طاقت فرسا میکنه.
اما مباحثی که پوشش داد خیلی خیلی عمیق و شسته‌رفته پوشش داد و واقعاً ارزشش رو داشت. (مخصوصاً بخش extra-curriculum، خیلی از وبسایت هایی که به عنوان منبع تو این کانال گذاشتم از این بخش بوده و خودش چند برابر آموزش زمان میخواد تا کامل بخونید).

و اما برای این ایرادات راه حل هم دارم.
آموزش ZTM Tensorflow هم توسط همین مدرس هست و مباحث RNN مثل LSTM, GRU و … رو کاور میکنه.
البته که باز همین همین ایراد رو داره، classification هست و به seq2seq نمیپردازه (که موجب تأسف هست) اما خیلی منابع خوبی معرفی میکنه و توضیحات خوبی میده سر همین من این آموزش رو میبینم.

(البته که فقط دو فصلشون رو می‌بینم که میشه NLP و Time Series) بقیشون رو میزارم برای فرصت بهتر.

بخش‌های اولش رو نگاه نمیکنم از اونجایی که تکراری هست، پروژه های FoodVision و مباحث ابتدایی دیگه که تو PyTorch تکرار شد همینجا هم تکرار میشه.

شاید بپرسید که اگر مستقیم بپرم روی NLP چیزی متوجه میشم؟ البته که متوجه میشید.
اتفاقاً مفاهیم یکی ان. ممکنه نام ها یکم فرق کنه یا یک سری سردرگمی های دیگه مثل Convolution های channel آخر (دارم به تو نگاه میکنم Tensorflow) یا اسم‌های متفاوت (لایه متراکم داخل PyTorch اسمش Linear ولی داخل Tensorflow اسمش Dense) ولی خب همه اینا با سرچ کردن حل میشه.

و اما در آخر. اگر منابع خوبی برای GAN, RNN و همینطور Computer Vision تخصصی مثل Object Detection, Image Segmentation داشتید خوشحال میشم تو بخش discussion این پست به اشتراک بزارید.
🎉 یلدای همگی شما دوستان عزیز مبارک 🎉
4
مدت‌ها بود که با آموزش 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
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
👍41
ماجراجویی 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 میرسه احساس میکنم یه ویروسی چیزی میخوام نصب بکنم.
حتی ستاره ای چیزی ندارن که بفهمیم آخر این معتبره یا نه.
👍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 ها پیدا کنید.
2
Also

🎉🎉 Happy New Year everyone 🎉🎉
🔥21🤮1
نکته جالب راجب yt-dlp:

اگر میخواید با 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) و مطالب بیشتر:

فلگ 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 هست.
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 ولی اغلب چیزایی که میخواستم مطرح شده.

بگم که این آموزش استارت کار هست و قطعاً چیزای بیشتری پیدا میکنید وقتی تو دیتابیس عمیق‌تر میشید.
3
دستاوردهای یادگیری عمیق(InTec)
خیلی هم عالیه : I love 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 میشناسیم.

این کتاب خیلی تئوریک هست و واسه درک عمیق ریاضیات و احتمالات پشت صحنه خیلی خوبه ولی واسه کدنویسی به کتاب دیگه که قبلا معرفی کردم مراجعه کنید.
👍2
چند وقته دارم با GAN آشنا میشم.
یه پلی لیست خوب روی YouTube پیدا کردم.
گفتم با شما هم به اشتراک بزارم.

Generative Adversarial Networks (GANs) Playlist
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
1701.07875v3.pdf
8.4 MB
این paper اصلی Wasserstein GAN هست
👍1