🟣 معماری و فرآیند کار RAG
سیستم RAG معمولاً از دو جزء اصلی تشکیل شده: یک سیستم بازیابی (Retriever) و یک مدل تولیدکننده (Generator) که همون LLM هستش.
0️⃣ فاز نمایه سازی (Indexing Phase):
آمادهسازی پایگاه دانش: اولین قدم، آمادهسازی مجموعهای از اسناد و دادههاست که قراره به عنوان منبع دانش خارجی استفاده بشه. این اسناد میتونن شامل متون تخصصی، مقالات، مستندات داخلی یک سازمان، یا هر نوع داده متنی دیگهای باشن.
قطعهبندی (Chunking): اسناد بزرگ به قطعات (Chunks) کوچکتر تقسیم میشن. این کار به چند دلیل مهمه: اول اینکه مدلهای زبانی محدودیت در طول ورودی (Context Window) دارن و نمیتونن حجم زیادی از متن رو یکجا پردازش کنن. دوم اینکه بازیابی قطعات کوچکتر و متمرکزتر میتونه دقت بالاتری داشته باشه. استراتژیهای مختلفی برای چانکینگ وجود داره، مثل تقسیم بر اساس اندازه ثابت، پاراگراف، یا حتی روشهای هوشمندتر مبتنی بر محتوا.
تولید Embedding: هر چانک متنی با استفاده از یک مدل Embedding (مثل Sentence-BERT، OpenAI Ada، یا مدلهای مشابه) به یک بردار عددی (Vector Embedding) تبدیل میشه. این بردارها نمایش فشردهای از معنای معنایی (Semantic Meaning) متن هستن.
ذخیرهسازی در پایگاه داده برداری (Vector Database): بردارهای تولید شده به همراه خود چانکها یا ارجاعی به اونها، در یک پایگاه داده برداری مثل FAISS، Pinecone، Weaviate یا Chroma ذخیره میشن. این دیتابیسها برای جستجوی سریع و کارآمد بر اساس شباهت برداری کاستومایز شدن.
1️⃣ فاز بازیابی و تولید (Retrieval and Generation Phase):
دریافت کوئری کاربر: وقتی کاربر یک سوال یا دستور (کوئری) مطرح میکنه، این کوئری ابتدا با استفاده از همون مدل Embedding که برای نمایه سازی اسناد استفاده شده بود، به یک بردار عددی تبدیل میشه.
جستجوی شباهت (Similarity Search): بردار کوئری با بردارهای ذخیره شده در پایگاه داده برداری مقایسه میشه. متداولترین روش برای این مقایسه، استفاده از معیارهای شباهتی مثل "شباهت کسینوسی" (Cosine Similarity) هستش. سیستم، تعدادی از چانکهایی که بیشترین شباهت معنایی رو با کوئری کاربر دارن (Top-K most relevant chunks) بازیابی میکنه.
غنیسازی پرامپت (Prompt Augmentation): چانکهای متنی بازیابی شده به همراه کوئری اصلی کاربر ترکیب میشن تا یک پرامپت "غنیشده" یا "افزوده" (Augmented Prompt) برای LLM ساخته بشه. نحوه ترکیب این اطلاعات میتونه متفاوت باشه، اما معمولاً متنهای بازیابی شده به عنوان زمینه (Context) به LLM ارائه میشن.
تولید پاسخ توسط LLM: پرامپت غنیشده به LLM داده میشه. حالا LLM با استفاده از دانش داخلی خودش و همچنین اطلاعات زمینهای که از طریق چانکهای بازیابی شده دریافت کرده، یک پاسخ تولید میکنه. این پاسخ به احتمال زیاد دقیقتر، مرتبطتر و مبتنی بر شواهد موجود در پایگاه دانش خواهد بود.
2/3
~> @PinkOrca
سیستم RAG معمولاً از دو جزء اصلی تشکیل شده: یک سیستم بازیابی (Retriever) و یک مدل تولیدکننده (Generator) که همون LLM هستش.
0️⃣ فاز نمایه سازی (Indexing Phase):
آمادهسازی پایگاه دانش: اولین قدم، آمادهسازی مجموعهای از اسناد و دادههاست که قراره به عنوان منبع دانش خارجی استفاده بشه. این اسناد میتونن شامل متون تخصصی، مقالات، مستندات داخلی یک سازمان، یا هر نوع داده متنی دیگهای باشن.
قطعهبندی (Chunking): اسناد بزرگ به قطعات (Chunks) کوچکتر تقسیم میشن. این کار به چند دلیل مهمه: اول اینکه مدلهای زبانی محدودیت در طول ورودی (Context Window) دارن و نمیتونن حجم زیادی از متن رو یکجا پردازش کنن. دوم اینکه بازیابی قطعات کوچکتر و متمرکزتر میتونه دقت بالاتری داشته باشه. استراتژیهای مختلفی برای چانکینگ وجود داره، مثل تقسیم بر اساس اندازه ثابت، پاراگراف، یا حتی روشهای هوشمندتر مبتنی بر محتوا.
تولید Embedding: هر چانک متنی با استفاده از یک مدل Embedding (مثل Sentence-BERT، OpenAI Ada، یا مدلهای مشابه) به یک بردار عددی (Vector Embedding) تبدیل میشه. این بردارها نمایش فشردهای از معنای معنایی (Semantic Meaning) متن هستن.
ذخیرهسازی در پایگاه داده برداری (Vector Database): بردارهای تولید شده به همراه خود چانکها یا ارجاعی به اونها، در یک پایگاه داده برداری مثل FAISS، Pinecone، Weaviate یا Chroma ذخیره میشن. این دیتابیسها برای جستجوی سریع و کارآمد بر اساس شباهت برداری کاستومایز شدن.
1️⃣ فاز بازیابی و تولید (Retrieval and Generation Phase):
دریافت کوئری کاربر: وقتی کاربر یک سوال یا دستور (کوئری) مطرح میکنه، این کوئری ابتدا با استفاده از همون مدل Embedding که برای نمایه سازی اسناد استفاده شده بود، به یک بردار عددی تبدیل میشه.
جستجوی شباهت (Similarity Search): بردار کوئری با بردارهای ذخیره شده در پایگاه داده برداری مقایسه میشه. متداولترین روش برای این مقایسه، استفاده از معیارهای شباهتی مثل "شباهت کسینوسی" (Cosine Similarity) هستش. سیستم، تعدادی از چانکهایی که بیشترین شباهت معنایی رو با کوئری کاربر دارن (Top-K most relevant chunks) بازیابی میکنه.
غنیسازی پرامپت (Prompt Augmentation): چانکهای متنی بازیابی شده به همراه کوئری اصلی کاربر ترکیب میشن تا یک پرامپت "غنیشده" یا "افزوده" (Augmented Prompt) برای LLM ساخته بشه. نحوه ترکیب این اطلاعات میتونه متفاوت باشه، اما معمولاً متنهای بازیابی شده به عنوان زمینه (Context) به LLM ارائه میشن.
تولید پاسخ توسط LLM: پرامپت غنیشده به LLM داده میشه. حالا LLM با استفاده از دانش داخلی خودش و همچنین اطلاعات زمینهای که از طریق چانکهای بازیابی شده دریافت کرده، یک پاسخ تولید میکنه. این پاسخ به احتمال زیاد دقیقتر، مرتبطتر و مبتنی بر شواهد موجود در پایگاه دانش خواهد بود.
2/3
~> @PinkOrca
❤10👍2
🟢 مزایای کلیدی RAG
دسترسی به اطلاعات بهروز: با آپدیت کردن پایگاه دانش خارجی، بدون نیاز به ترین مجدد LLM، میشه اطلاعات مدل رو بهروز نگه داشت.
کاهش هذیانگویی: چون پاسخها بر اساس اطلاعات بازیابی شده تولید میشن، احتمال اینکه LLM اطلاعات نادرست یا بیاساس تولید کنه، به شدت کاهش پیدا میکنه.
شفافیت و قابلیت استناد (Explainability): سیستم RAG میتونه به منابعی (چانکهای بازیابی شده) که برای تولید پاسخ استفاده کرده، ارجاع بده. این ویژگی برای کاربردهایی که نیاز به شفافیت دارن، بسیار مهمه.
کاستومایز کردن برای دامنههای خاص: میشه RAG رو با استفاده از پایگاههای دانش تخصصی برای پاسخگویی در دامنههای خاص (مثل پزشکی، حقوقی، یا فنی) کانفیگ کرد.
بهینگی هزینه: در مقایسه با فاینتیون کردن (Fine-tuning) کامل یک LLM با دادههای جدید، که به منابع محاسباتی زیادی نیاز داره، آپدیت کردن پایگاه دانش در RAG معمولاً بسیار کمهزینهتر هستش.
🔴 با وجود مزایای زیاد، پیادهسازی سیستمهای RAG با چالشهایی هم روبرو هستش:
کیفیت بازیابی: عملکرد کل سیستم به شدت به کیفیت مرحله بازیابی بستگی داره. اگر رتریور نتونه اسناد مرتبط رو به درستی پیدا کنه (اصطلاحاً "garbage in, garbage out")، حتی بهترین LLM هم نمیتونه پاسخ خوبی تولید کنه.
بهینهسازی چانکینگ: انتخاب استراتژی مناسب برای چانکینگ و اندازه بهینه چانکها میتونه چالشبرانگیز باشه. چانکهای خیلی کوچک ممکنه زمینه کافی رو فراهم نکنن و چانکهای خیلی بزرگ ممکنه حاوی اطلاعات اضافی و نویز باشن.
تاخیر (Latency): فرآیند بازیابی اطلاعات از پایگاه دانش، یک مرحله اضافی به فرآیند پاسخدهی اضافه میکنه که میتونه منجر به افزایش تاخیر بشه. بهینهسازی سرعت رتریور و پایگاه داده برداری مهمه.
ارزیابی: ارزیابی یک سیستم RAG پیچیدهتر از ارزیابی یک LLM استاندارد هستش. باید هم کیفیت بازیابی (مثلاً با متریکهایی مثل Precision و Recall) و هم کیفیت پاسخ نهایی تولید شده (مثلاً با متریکهایی مثل Faithfulness و Relevance) سنجیده بشه.
ادغام و مدیریت زمینه: نحوه ارائه موثر زمینه بازیابی شده به LLM و مدیریت محدودیت پنجره زمینه (Context Window) همچنان یک حوزه فعال تحقیقاتی هستش.
🟡 در حال حاضر تکنیکهای پیشرفتهتری هم برای RAG در حال توسعه هستن، مثل جستجوی ترکیبی (Hybrid Search) که از ترکیب روشهای مبتنی بر کلمات کلیدی (مثل BM25) و جستجوی معنایی استفاده میکنه، یا استفاده از مدلهای بازرتبهبندی (Re-ranker) برای بهبود دقت اسناد بازیابی شده قبل از ارسال به LLM. این پیشرفتها به طور مداوم در حال بهبود کارایی و قابلیتهای سیستمهای RAG هستن.
3/3
~> @PinkOrca
دسترسی به اطلاعات بهروز: با آپدیت کردن پایگاه دانش خارجی، بدون نیاز به ترین مجدد LLM، میشه اطلاعات مدل رو بهروز نگه داشت.
کاهش هذیانگویی: چون پاسخها بر اساس اطلاعات بازیابی شده تولید میشن، احتمال اینکه LLM اطلاعات نادرست یا بیاساس تولید کنه، به شدت کاهش پیدا میکنه.
شفافیت و قابلیت استناد (Explainability): سیستم RAG میتونه به منابعی (چانکهای بازیابی شده) که برای تولید پاسخ استفاده کرده، ارجاع بده. این ویژگی برای کاربردهایی که نیاز به شفافیت دارن، بسیار مهمه.
کاستومایز کردن برای دامنههای خاص: میشه RAG رو با استفاده از پایگاههای دانش تخصصی برای پاسخگویی در دامنههای خاص (مثل پزشکی، حقوقی، یا فنی) کانفیگ کرد.
بهینگی هزینه: در مقایسه با فاینتیون کردن (Fine-tuning) کامل یک LLM با دادههای جدید، که به منابع محاسباتی زیادی نیاز داره، آپدیت کردن پایگاه دانش در RAG معمولاً بسیار کمهزینهتر هستش.
🔴 با وجود مزایای زیاد، پیادهسازی سیستمهای RAG با چالشهایی هم روبرو هستش:
کیفیت بازیابی: عملکرد کل سیستم به شدت به کیفیت مرحله بازیابی بستگی داره. اگر رتریور نتونه اسناد مرتبط رو به درستی پیدا کنه (اصطلاحاً "garbage in, garbage out")، حتی بهترین LLM هم نمیتونه پاسخ خوبی تولید کنه.
بهینهسازی چانکینگ: انتخاب استراتژی مناسب برای چانکینگ و اندازه بهینه چانکها میتونه چالشبرانگیز باشه. چانکهای خیلی کوچک ممکنه زمینه کافی رو فراهم نکنن و چانکهای خیلی بزرگ ممکنه حاوی اطلاعات اضافی و نویز باشن.
تاخیر (Latency): فرآیند بازیابی اطلاعات از پایگاه دانش، یک مرحله اضافی به فرآیند پاسخدهی اضافه میکنه که میتونه منجر به افزایش تاخیر بشه. بهینهسازی سرعت رتریور و پایگاه داده برداری مهمه.
ارزیابی: ارزیابی یک سیستم RAG پیچیدهتر از ارزیابی یک LLM استاندارد هستش. باید هم کیفیت بازیابی (مثلاً با متریکهایی مثل Precision و Recall) و هم کیفیت پاسخ نهایی تولید شده (مثلاً با متریکهایی مثل Faithfulness و Relevance) سنجیده بشه.
ادغام و مدیریت زمینه: نحوه ارائه موثر زمینه بازیابی شده به LLM و مدیریت محدودیت پنجره زمینه (Context Window) همچنان یک حوزه فعال تحقیقاتی هستش.
🟡 در حال حاضر تکنیکهای پیشرفتهتری هم برای RAG در حال توسعه هستن، مثل جستجوی ترکیبی (Hybrid Search) که از ترکیب روشهای مبتنی بر کلمات کلیدی (مثل BM25) و جستجوی معنایی استفاده میکنه، یا استفاده از مدلهای بازرتبهبندی (Re-ranker) برای بهبود دقت اسناد بازیابی شده قبل از ارسال به LLM. این پیشرفتها به طور مداوم در حال بهبود کارایی و قابلیتهای سیستمهای RAG هستن.
3/3
~> @PinkOrca
❤10👍1
🌀برای پیادهسازی راحت و سریع سیستمهای RAG که در موردش صحبت کردیم، پیشنهاد میکنم حتماً نگاهی به کتابخونهٔ LangChain بندازید.
☑️ LangChain یک فریمورک قدرتمند پایتون هستش که توسعه اپلیکیشنهای مبتنی بر LLM، به خصوص RAG رو خیلی سادهتر و منظمتر میکنه و کلی ابزار مفید برای این کار در اختیارتون میذاره.
https://python.langchain.com/docs/introduction/
#معرفی #هوش_مصنوعی
~> @PinkOrca | آزاد بیندیشیم 🎲
☑️ LangChain یک فریمورک قدرتمند پایتون هستش که توسعه اپلیکیشنهای مبتنی بر LLM، به خصوص RAG رو خیلی سادهتر و منظمتر میکنه و کلی ابزار مفید برای این کار در اختیارتون میذاره.
https://python.langchain.com/docs/introduction/
#معرفی #هوش_مصنوعی
~> @PinkOrca | آزاد بیندیشیم 🎲
🔥11❤3👍1
🌱 بیومیمتیک: رد پای طبیعت در تکنولوژیهای انسانی
✨ تو این پست دو قسمتی، اول با چند نمونه الهامبخش از طبیعت در تکنولوژی آشنا میشیم و بعد به سراغ الگوریتمهایی میریم که با همین نگاه طبیعتمحور طراحی شدن. امیدوارم لذت ببرید! ⬇️
#نوشته #فکت #معرفی #علوم_کامپیوتر #بیومیمتیک #الگوریتم #طبیعت #نوآوری
~> @PinkOrca | آزاد بیندیشیم 🌵
✨ تو این پست دو قسمتی، اول با چند نمونه الهامبخش از طبیعت در تکنولوژی آشنا میشیم و بعد به سراغ الگوریتمهایی میریم که با همین نگاه طبیعتمحور طراحی شدن. امیدوارم لذت ببرید! ⬇️
#نوشته #فکت #معرفی #علوم_کامپیوتر #بیومیمتیک #الگوریتم #طبیعت #نوآوری
~> @PinkOrca | آزاد بیندیشیم 🌵
❤8👍2⚡1
🌱 طبیعت طی میلیاردها سال تکامل، راهحلهای بهینهای برای چالشهای مختلف پیدا کرده. بیومیمتیک (Biomimetics) یا تقلید از طبیعت، علمی هستش که این راهحلها رو مطالعه میکنه و در طراحی تکنولوژیهای جدید به کار میگیره.
🪶 یکی از معروفترین نمونهها، طراحی قطارهای شینکانسن ژاپنی هستش. مهندسان متوجه شدن وقتی قطار با سرعت بالا از تونل خارج میشه، صدای بلندی تولید میکنه. Eiji Nakatsu، مهندس ارشد پروژه که پرندهنگار هم بود، از شکل منقار پرنده kingfisher الهام گرفت. این پرنده میتونه بدون ایجاد موج زیادی از هوا وارد آب بشه. نوک قطار رو شبیه منقار این پرنده طراحی کردن و نه تنها مشکل صدا حل شد، بلکه مصرف انرژی ۱۰ درصد کاهش پیدا کرد.
🐶 در حوزه مواد، جورج دو مستراس در سال ۱۹۴۱ از خارهای گیاه burdock که به لباس سگش چسبیده بود، ایده velcro رو گرفت. زیر میکروسکوپ دید که این خارها قلابهای کوچکی دارن که به الیاف پارچه گیر میکنن. این کشف منجر به تولید چسبپارچهای (احتمالا همچین چیزی میگن بهش؟) شد که امروز در صنایع مختلف از پزشکی تا هوافضا کاربرد داره.
🪷 برگ لوتوس یکی دیگه از الهامبخشهای مهم در نانوتکنولوژی هستش. سطح این برگها ساختار میکروسکوپی خاصی داره که باعث میشه آب به شکل قطرههای کروی روش بغلته و آلودگیها رو با خودش ببره. این پدیده که "اثر لوتوس" نامیده میشه، در تولید رنگهای خودتمیزشونده و پوششهای ضدآب استفاده میشه. شرکت Lotusan اولین رنگ تجاری با این تکنولوژی رو در سال ۱۹۹۹ عرضه کرد.
🛒 در معماری، ترمیتها الهامبخش سیستمهای تهویه طبیعی شدن. لانههای ترمیت در آفریقا با وجود دمای بیرونی که بین ۳ تا ۴۲ درجه سانتیگراد تغییر میکنه، دمای داخلی ثابت ۳۱ درجه رو حفظ میکنن. مرکز خرید Eastgate در زیمبابوه با الهام از این سیستم طراحی شده و ۹۰ درصد انرژی کمتری نسبت به ساختمانهای مشابه مصرف میکنه.
🏊 صنایع مختلف دیگهای هم از طبیعت درسهای زیادی گرفتن. مثلا بالهای جغد دارای ساختار خاصی هستن که صدای پرواز رو کاهش میدن. این ویژگی در طراحی پرههای توربین بادی استفاده شده تا آلودگی صوتی کمتری تولید کنن. همچنین پوست کوسه که دارای دندونههای ریز هستش، الهامبخش طراحی سطوحی شده که مقاومت هیدرودینامیکی رو کاهش میدن. Speedo در سال ۲۰۰۸ لباس شنای Fastskin رو با این تکنولوژی تولید کرد که رکوردهای زیادی رو در المپیک پکن شکست.
1/2
~> @PinkOrca
🪶 یکی از معروفترین نمونهها، طراحی قطارهای شینکانسن ژاپنی هستش. مهندسان متوجه شدن وقتی قطار با سرعت بالا از تونل خارج میشه، صدای بلندی تولید میکنه. Eiji Nakatsu، مهندس ارشد پروژه که پرندهنگار هم بود، از شکل منقار پرنده kingfisher الهام گرفت. این پرنده میتونه بدون ایجاد موج زیادی از هوا وارد آب بشه. نوک قطار رو شبیه منقار این پرنده طراحی کردن و نه تنها مشکل صدا حل شد، بلکه مصرف انرژی ۱۰ درصد کاهش پیدا کرد.
🐶 در حوزه مواد، جورج دو مستراس در سال ۱۹۴۱ از خارهای گیاه burdock که به لباس سگش چسبیده بود، ایده velcro رو گرفت. زیر میکروسکوپ دید که این خارها قلابهای کوچکی دارن که به الیاف پارچه گیر میکنن. این کشف منجر به تولید چسبپارچهای (احتمالا همچین چیزی میگن بهش؟) شد که امروز در صنایع مختلف از پزشکی تا هوافضا کاربرد داره.
🪷 برگ لوتوس یکی دیگه از الهامبخشهای مهم در نانوتکنولوژی هستش. سطح این برگها ساختار میکروسکوپی خاصی داره که باعث میشه آب به شکل قطرههای کروی روش بغلته و آلودگیها رو با خودش ببره. این پدیده که "اثر لوتوس" نامیده میشه، در تولید رنگهای خودتمیزشونده و پوششهای ضدآب استفاده میشه. شرکت Lotusan اولین رنگ تجاری با این تکنولوژی رو در سال ۱۹۹۹ عرضه کرد.
🛒 در معماری، ترمیتها الهامبخش سیستمهای تهویه طبیعی شدن. لانههای ترمیت در آفریقا با وجود دمای بیرونی که بین ۳ تا ۴۲ درجه سانتیگراد تغییر میکنه، دمای داخلی ثابت ۳۱ درجه رو حفظ میکنن. مرکز خرید Eastgate در زیمبابوه با الهام از این سیستم طراحی شده و ۹۰ درصد انرژی کمتری نسبت به ساختمانهای مشابه مصرف میکنه.
🏊 صنایع مختلف دیگهای هم از طبیعت درسهای زیادی گرفتن. مثلا بالهای جغد دارای ساختار خاصی هستن که صدای پرواز رو کاهش میدن. این ویژگی در طراحی پرههای توربین بادی استفاده شده تا آلودگی صوتی کمتری تولید کنن. همچنین پوست کوسه که دارای دندونههای ریز هستش، الهامبخش طراحی سطوحی شده که مقاومت هیدرودینامیکی رو کاهش میدن. Speedo در سال ۲۰۰۸ لباس شنای Fastskin رو با این تکنولوژی تولید کرد که رکوردهای زیادی رو در المپیک پکن شکست.
1/2
~> @PinkOrca
❤10⚡2
🐿 الگوریتمهای الهامگرفته از طبیعت هم دستهای از روشهای محاسباتی هستن که از رفتار موجودات زنده و فرآیندهای طبیعی برای حل مسائل پیچیده استفاده میکنن. این الگوریتمها بخشی از حوزه هوش محاسباتی محسوب میشن و در دهههای اخیر توجه زیادی رو به خودشون جلب کردن.
🧬 یکی از معروفترین این الگوریتمها، الگوریتم ژنتیک هستش که John Holland در سال 1975 معرفی کرد. این الگوریتم از فرآیند فرگشت داروینی الهام میگیره و با استفاده از عملگرهایی مثل جهش (mutation)، ترکیب (crossover) و انتخاب (selection) به دنبال بهینهسازی جوابها میگرده. در هر نسل، کروموزومهایی که fitness بهتری دارن شانس بیشتری برای بقا و تولیدمثل پیدا میکنن.
🐦⬛️ الگوریتم بهینهسازی ازدحام ذرات (PSO) که Kennedy و Eberhart در 1995 ارائه دادن، از رفتار دستهجمعی پرندگان الهام گرفته. هر ذره در فضای جستجو حرکت میکنه و سرعتش بر اساس بهترین موقعیتی که خودش پیدا کرده (pbest) و بهترین موقعیتی که کل گروه پیدا کرده (gbest) آپدیت میشه. فرمول آپدیت سرعت به این شکله:
v(t+1) = w×v(t) + c1×r1×(pbest - x(t)) + c2×r2×(gbest - x(t))
که w ضریب اینرسی، c1 و c2 ضرایب یادگیری و r1 و r2 اعداد رندوم بین 0 و 1 هستن.
🐜 الگوریتم کلونی مورچهها (ACO) که Marco Dorigo در 1992 معرفی کرد، از نحوه پیدا کردن کوتاهترین مسیر توسط مورچهها استفاده میکنه. مورچهها با ترشح فرومون و دنبال کردن مسیرهایی که فرومون بیشتری دارن، به مرور زمان بهترین مسیر رو پیدا میکنن. این الگوریتم بهخصوص برای مسائل مسیریابی مثل TSP (مسئله فروشنده دورهگرد) کاربرد داره.
🐝 الگوریتمهای دیگهای هم وجود دارن مثل الگوریتم زنبور عسل (ABC) که Karaboga در 2005 معرفی کرد و از رفتار جستجوی غذای زنبورها الهام میگیره، یا الگوریتم خفاش که Xin-She Yang در 2010 ارائه داد و از سیستم اکولوکیشن خفاشها استفاده میکنه.
💥 نکته جالب اینه که این الگوریتمها معمولاً برای مسائل NP-hard که روشهای دقیق برای حلشون زمان نمایی نیاز دارن، کارایی خوبی نشون میدن. البته این الگوریتمها تضمینی برای پیدا کردن جواب بهینه سراسری ندارن ولی در عمل جوابهای قابل قبولی در زمان معقول ارائه میدن.
2/2
~> @PinkOrca
🧬 یکی از معروفترین این الگوریتمها، الگوریتم ژنتیک هستش که John Holland در سال 1975 معرفی کرد. این الگوریتم از فرآیند فرگشت داروینی الهام میگیره و با استفاده از عملگرهایی مثل جهش (mutation)، ترکیب (crossover) و انتخاب (selection) به دنبال بهینهسازی جوابها میگرده. در هر نسل، کروموزومهایی که fitness بهتری دارن شانس بیشتری برای بقا و تولیدمثل پیدا میکنن.
🐦⬛️ الگوریتم بهینهسازی ازدحام ذرات (PSO) که Kennedy و Eberhart در 1995 ارائه دادن، از رفتار دستهجمعی پرندگان الهام گرفته. هر ذره در فضای جستجو حرکت میکنه و سرعتش بر اساس بهترین موقعیتی که خودش پیدا کرده (pbest) و بهترین موقعیتی که کل گروه پیدا کرده (gbest) آپدیت میشه. فرمول آپدیت سرعت به این شکله:
v(t+1) = w×v(t) + c1×r1×(pbest - x(t)) + c2×r2×(gbest - x(t))
که w ضریب اینرسی، c1 و c2 ضرایب یادگیری و r1 و r2 اعداد رندوم بین 0 و 1 هستن.
🐜 الگوریتم کلونی مورچهها (ACO) که Marco Dorigo در 1992 معرفی کرد، از نحوه پیدا کردن کوتاهترین مسیر توسط مورچهها استفاده میکنه. مورچهها با ترشح فرومون و دنبال کردن مسیرهایی که فرومون بیشتری دارن، به مرور زمان بهترین مسیر رو پیدا میکنن. این الگوریتم بهخصوص برای مسائل مسیریابی مثل TSP (مسئله فروشنده دورهگرد) کاربرد داره.
🐝 الگوریتمهای دیگهای هم وجود دارن مثل الگوریتم زنبور عسل (ABC) که Karaboga در 2005 معرفی کرد و از رفتار جستجوی غذای زنبورها الهام میگیره، یا الگوریتم خفاش که Xin-She Yang در 2010 ارائه داد و از سیستم اکولوکیشن خفاشها استفاده میکنه.
💥 نکته جالب اینه که این الگوریتمها معمولاً برای مسائل NP-hard که روشهای دقیق برای حلشون زمان نمایی نیاز دارن، کارایی خوبی نشون میدن. البته این الگوریتمها تضمینی برای پیدا کردن جواب بهینه سراسری ندارن ولی در عمل جوابهای قابل قبولی در زمان معقول ارائه میدن.
2/2
~> @PinkOrca
❤15
Media is too big
VIEW IN TELEGRAM
گپی درمورد اینکه چطور با یه VM ویندوزی مشکل به شکل خیلی تمیزی حل میشه در مورد خیلی از نرمافزارها و اینکه برای کار با گنو/لینوکس نیازی به دوره دیدن نیست.
تماشای این ویدیو و شنیدنش به هرکسی توصیه نمیشه، چون یهویی تهیه شد و به بهترین شکل ممکن و مختصر و مفید نیست حرفا توش. همچنین بار علمی خاصی هم نداره. اما اگه مایل بودین گوش کنین.
#حرف_با_شما #ترفند
~> @PinkOrca | آزاد بیندیشیم 🕸
تماشای این ویدیو و شنیدنش به هرکسی توصیه نمیشه، چون یهویی تهیه شد و به بهترین شکل ممکن و مختصر و مفید نیست حرفا توش. همچنین بار علمی خاصی هم نداره. اما اگه مایل بودین گوش کنین.
#حرف_با_شما #ترفند
~> @PinkOrca | آزاد بیندیشیم 🕸
❤5👍2
~> Radix Sort
یکی از مهمترین الگوریتمهای مرتبسازی که تو چند تا پست بعدی در موردش بیشتر یاد میگیریم ⬇️
#نوشته #علوم_کامپیوتر #الگوریتم #برنامه_نویسی
~> @PinkOrca | آزاد بیندیشیم 🎈
یکی از مهمترین الگوریتمهای مرتبسازی که تو چند تا پست بعدی در موردش بیشتر یاد میگیریم ⬇️
#نوشته #علوم_کامپیوتر #الگوریتم #برنامه_نویسی
~> @PinkOrca | آزاد بیندیشیم 🎈
❤4👍2
الگوریتم Radix Sort یکی از الگوریتمهای مرتبسازی غیرمقایسهای هستش که برای مرتب کردن اعداد صحیح یا رشتهها استفاده میشه. برخلاف الگوریتمهایی مثل Quick Sort یا Merge Sort که عناصر رو با هم مقایسه میکنن، Radix Sort بر اساس رقمهای (digits) اعداد کار میکنه.
🔸 نحوه کارکرد
Radix Sort اعداد رو بر اساس رقمهاشون از کمارزشترین رقم (یکان) تا پرارزشترین رقم (بالاترین مرتبه) مرتب میکنه. این روش به LSD (Least Significant Digit) معروفه. البته میشه از MSD (Most Significant Digit) هم استفاده کرد که از پرارزشترین رقم شروع میکنه.
فرض کنید آرایهای با اعداد [170, 45, 75, 90, 2, 802, 24, 66] دارید:
مرحله اول - مرتبسازی بر اساس رقم یکان:
• گروه 0: 170, 90
• گروه 2: 2, 802
• گروه 4: 24
• گروه 5: 45, 75
• گروه 6: 66
نتیجه: [170, 90, 2, 802, 24, 45, 75, 66]
مرحله دوم - مرتبسازی بر اساس رقم دهگان:
• گروه 0: 2, 802
• گروه 2: 24
• گروه 4: 45
• گروه 6: 66
• گروه 7: 170, 75
• گروه 9: 90
نتیجه: [2, 802, 24, 45, 66, 170, 75, 90]
مرحله سوم - مرتبسازی بر اساس رقم صدگان:
• گروه 0: 2, 24, 45, 66, 75, 90
• گروه 1: 170
• گروه 8: 802
نتیجه نهایی: [2, 24, 45, 66, 75, 90, 170, 802]
🔸 استفاده از Counting Sort
برای مرتبسازی در هر مرحله، معمولاً از Counting Sort استفاده میشه. Counting Sort تعداد تکرار هر رقم رو میشماره و بر اساس اون، موقعیت نهایی هر عنصر رو تعیین میکنه. این ترکیب باعث میشه Radix Sort پایداری (stability) داشته باشه، یعنی ترتیب عناصر با مقدار یکسان حفظ میشه.
🔸 پیچیدگی زمانی و مکانی
پیچیدگی زمانی Radix Sort برابر با O(d × (n + k)) هستش که:
• d: تعداد رقمهای بزرگترین عدد
• n: تعداد عناصر آرایه
• k: محدوده مقادیر هر رقم (معمولاً 10 برای سیستم دهدهی)
اگه d ثابت در نظر گرفته بشه، پیچیدگی زمانی O(n) میشه که از الگوریتمهای مقایسهای با پیچیدگی O(n log n) بهتره.
پیچیدگی مکانی O(n + k) هستش که برای ذخیره آرایههای موقت در Counting Sort نیاز داریم.
🔸 محدودیتها و کاربردها
Radix Sort وقتی کارآمده که:
• با اعداد صحیح یا دادههایی که میشه به صورت رقمی نمایش داد کار میکنیم
• محدوده اعداد خیلی بزرگ نباشه
• تعداد رقمها نسبتاً کم باشه
این الگوریتم در پردازش کارتهای پانچ در دهه 1890 توسط Herman Hollerith برای سرشماری آمریکا استفاده شد. امروزه در دیتابیسها، سیستمهای توزیعشده و پردازش موازی کاربرد داره چون میشه هر مرحله رو به صورت مستقل پردازش کرد.
1/4
~> @PinkOrca 🎈
🔸 نحوه کارکرد
Radix Sort اعداد رو بر اساس رقمهاشون از کمارزشترین رقم (یکان) تا پرارزشترین رقم (بالاترین مرتبه) مرتب میکنه. این روش به LSD (Least Significant Digit) معروفه. البته میشه از MSD (Most Significant Digit) هم استفاده کرد که از پرارزشترین رقم شروع میکنه.
فرض کنید آرایهای با اعداد [170, 45, 75, 90, 2, 802, 24, 66] دارید:
مرحله اول - مرتبسازی بر اساس رقم یکان:
• گروه 0: 170, 90
• گروه 2: 2, 802
• گروه 4: 24
• گروه 5: 45, 75
• گروه 6: 66
نتیجه: [170, 90, 2, 802, 24, 45, 75, 66]
مرحله دوم - مرتبسازی بر اساس رقم دهگان:
• گروه 0: 2, 802
• گروه 2: 24
• گروه 4: 45
• گروه 6: 66
• گروه 7: 170, 75
• گروه 9: 90
نتیجه: [2, 802, 24, 45, 66, 170, 75, 90]
مرحله سوم - مرتبسازی بر اساس رقم صدگان:
• گروه 0: 2, 24, 45, 66, 75, 90
• گروه 1: 170
• گروه 8: 802
نتیجه نهایی: [2, 24, 45, 66, 75, 90, 170, 802]
🔸 استفاده از Counting Sort
برای مرتبسازی در هر مرحله، معمولاً از Counting Sort استفاده میشه. Counting Sort تعداد تکرار هر رقم رو میشماره و بر اساس اون، موقعیت نهایی هر عنصر رو تعیین میکنه. این ترکیب باعث میشه Radix Sort پایداری (stability) داشته باشه، یعنی ترتیب عناصر با مقدار یکسان حفظ میشه.
🔸 پیچیدگی زمانی و مکانی
پیچیدگی زمانی Radix Sort برابر با O(d × (n + k)) هستش که:
• d: تعداد رقمهای بزرگترین عدد
• n: تعداد عناصر آرایه
• k: محدوده مقادیر هر رقم (معمولاً 10 برای سیستم دهدهی)
اگه d ثابت در نظر گرفته بشه، پیچیدگی زمانی O(n) میشه که از الگوریتمهای مقایسهای با پیچیدگی O(n log n) بهتره.
پیچیدگی مکانی O(n + k) هستش که برای ذخیره آرایههای موقت در Counting Sort نیاز داریم.
🔸 محدودیتها و کاربردها
Radix Sort وقتی کارآمده که:
• با اعداد صحیح یا دادههایی که میشه به صورت رقمی نمایش داد کار میکنیم
• محدوده اعداد خیلی بزرگ نباشه
• تعداد رقمها نسبتاً کم باشه
این الگوریتم در پردازش کارتهای پانچ در دهه 1890 توسط Herman Hollerith برای سرشماری آمریکا استفاده شد. امروزه در دیتابیسها، سیستمهای توزیعشده و پردازش موازی کاربرد داره چون میشه هر مرحله رو به صورت مستقل پردازش کرد.
1/4
~> @PinkOrca 🎈
❤3👍1
❓آیا Radix Sort سریعترین الگوریتم مرتبسازیه؟
نه، Radix Sort بهترین الگوریتم مرتبسازی از نظر سرعت نیست. در واقع هیچ الگوریتمی به صورت مطلق "بهترین" نیست چون بستگی به شرایط و نوع دادهها داره.
🔹 مقایسه سرعت در شرایط مختلف:
برای اعداد صحیح با تعداد رقم کم:
• Radix Sort با O(n) عملکرد عالی داره
• از Quick Sort و Merge Sort با O(n log n) سریعتره
برای آرایههای کوچک (کمتر از 50 عنصر):
• Insertion Sort معمولاً سریعتره
• Radix Sort سربار (overhead) زیادی داره
برای دادههای عمومی و آرایههای بزرگ:
• Quick Sort معمولاً سریعترین گزینهست
• در حالت میانگین O(n log n) با ضریب ثابت کم
برای دادههای تقریباً مرتب:
• Timsort (ترکیب Merge و Insertion) بهترین عملکرد رو داره
• پایتون و جاوا از این الگوریتم استفاده میکنن
🔹 محدودیتهای Radix Sort:
• فقط برای اعداد صحیح یا دادههای قابل تبدیل به رقم کار میکنه
• برای اعداد اعشاری یا رشتههای پیچیده کارایی نداره
• اگه اعداد خیلی بزرگ باشن (مثلاً 64 بیتی)، تعداد مراحل زیاد میشه
• حافظه اضافی O(n+k) نیاز داره که برای دادههای بزرگ مشکلسازه
🔹 در عمل:
اکثر کتابخانههای استاندارد از ترکیبی از الگوریتمها استفاده میکنن:
• CPP از Introsort (ترکیب Quick، Heap و Insertion)
• Java از Dual-Pivot Quicksort برای primitive types
• Python از Timsort برای همه انواع داده
پس Radix Sort در شرایط خاص (اعداد صحیح با محدوده کم) خیلی سریعه، اما برای استفاده عمومی، Quick Sort و نسخههای بهینهشدهش معمولاً انتخاب بهتری هستن.
3/4
~> @PinkOrca 🎈
نه، Radix Sort بهترین الگوریتم مرتبسازی از نظر سرعت نیست. در واقع هیچ الگوریتمی به صورت مطلق "بهترین" نیست چون بستگی به شرایط و نوع دادهها داره.
🔹 مقایسه سرعت در شرایط مختلف:
برای اعداد صحیح با تعداد رقم کم:
• Radix Sort با O(n) عملکرد عالی داره
• از Quick Sort و Merge Sort با O(n log n) سریعتره
برای آرایههای کوچک (کمتر از 50 عنصر):
• Insertion Sort معمولاً سریعتره
• Radix Sort سربار (overhead) زیادی داره
برای دادههای عمومی و آرایههای بزرگ:
• Quick Sort معمولاً سریعترین گزینهست
• در حالت میانگین O(n log n) با ضریب ثابت کم
برای دادههای تقریباً مرتب:
• Timsort (ترکیب Merge و Insertion) بهترین عملکرد رو داره
• پایتون و جاوا از این الگوریتم استفاده میکنن
🔹 محدودیتهای Radix Sort:
• فقط برای اعداد صحیح یا دادههای قابل تبدیل به رقم کار میکنه
• برای اعداد اعشاری یا رشتههای پیچیده کارایی نداره
• اگه اعداد خیلی بزرگ باشن (مثلاً 64 بیتی)، تعداد مراحل زیاد میشه
• حافظه اضافی O(n+k) نیاز داره که برای دادههای بزرگ مشکلسازه
🔹 در عمل:
اکثر کتابخانههای استاندارد از ترکیبی از الگوریتمها استفاده میکنن:
• CPP از Introsort (ترکیب Quick، Heap و Insertion)
• Java از Dual-Pivot Quicksort برای primitive types
• Python از Timsort برای همه انواع داده
پس Radix Sort در شرایط خاص (اعداد صحیح با محدوده کم) خیلی سریعه، اما برای استفاده عمومی، Quick Sort و نسخههای بهینهشدهش معمولاً انتخاب بهتری هستن.
3/4
~> @PinkOrca 🎈
❤5👍1
This media is not supported in your browser
VIEW IN TELEGRAM
✔️ دیدنِ این ویدیو هم برای درک Radix Sort به سادهترین شکل میتونه مفید باشه.
🔗 منبع ویدیو
4/4
~> @PinkOrca 🎈
🔗 منبع ویدیو
4/4
~> @PinkOrca 🎈
❤3👍1
🚀 بررسی و استفاده رایگان از انواع LLMها مثل Claude، ChatGPT، Gemeni و... (همون lmsys.org سابق) ⬇️
https://lmarena.ai/?mode=direct
#معرفی #هوش_مصنوعی
~> @PinkOrca | آزاد بیندیشیم 🤖
https://lmarena.ai/?mode=direct
#معرفی #هوش_مصنوعی
~> @PinkOrca | آزاد بیندیشیم 🤖
❤5🔥2
❌ برای مطالعهٔ یه متن نسبتا طولانی دنبال یه ترکیب رنگی بودم که:
کنتراست مناسبی داشته باشه، چشم رو خسته نکنه، تیره باشه که نور آبی مضر کمتری وارد چشمم بشه و در عین حال رنگ متنش یکم گرم باشه که از سفید خالص راحتتر باشه... همینطور تو نور کم و زیاد کاربردی باشه و خلاصه این حرفا.
✅ به این ترکیب رسیدم و راضی بودم:
بکگراند:
متن:
گفتم به شما هم پیشنهاد کنم، ممکنه کاربردی باشه🫰
#معرفی #حرف_با_شما
~> @PinkOrca | آزاد بیندیشیم 📚
کنتراست مناسبی داشته باشه، چشم رو خسته نکنه، تیره باشه که نور آبی مضر کمتری وارد چشمم بشه و در عین حال رنگ متنش یکم گرم باشه که از سفید خالص راحتتر باشه... همینطور تو نور کم و زیاد کاربردی باشه و خلاصه این حرفا.
✅ به این ترکیب رسیدم و راضی بودم:
بکگراند:
#1e1e1e (خاکستری تیره نرم)متن:
#e8e6e3 (کرم روشن)گفتم به شما هم پیشنهاد کنم، ممکنه کاربردی باشه🫰
#معرفی #حرف_با_شما
~> @PinkOrca | آزاد بیندیشیم 📚
❤25👍2⚡1
🔫 موضوع حرفای امروزمون Partial Upgrade هستش، اشتباه رایج خیلی از کاربران Arch Linux و توزیعهای Arch-based دیگه که ساده اما خطرناکه.
🪚 و همچنین استفاده نادرست ما از ابزارها و در نتیجه خرابی اونا رو گردن بگیریم.
❌ pacman -Sy
✅ pacman -Syu
#لینوکس #حرف_با_شما
~> @PinkOrca | آزاد بیندیشیم 🔧
🪚 و همچنین استفاده نادرست ما از ابزارها و در نتیجه خرابی اونا رو گردن بگیریم.
❌ pacman -Sy
✅ pacman -Syu
#لینوکس #حرف_با_شما
~> @PinkOrca | آزاد بیندیشیم 🔧
❤3👍3🔥1
💥 به پیشنهاد دوستان یک روم ماتریکس رو wiiz.ir برای زمانی که مشکل اتصال برای اکثر مردم پیش میاد ایجاد کردم... برای ارتباط ضروری یا رد و بدل کردن چیزهای مورد نیاز.
در صورت تمایل بپیوندید:
https://matrix.to/#/#vandadcommunity:wiiz.ir
✅ ویژگیهای کلیش اینه که:
امنیتش بالاست، تو موقع اتصال به اینترانت مشکل دسترسی ندارید و کمتر از گروه تلگرامی توش حساسیت و قوانین داریم.
💢 تنها چیزی که نیاز دارید نصب یک کلاینت ماتریکس مثل Element و راهاندازی با wiiz هستش که سادست نیاز به آموزش نداره.
#معرفی
~> @PinkOrca | آزاد بیندیشیم 🪨
در صورت تمایل بپیوندید:
https://matrix.to/#/#vandadcommunity:wiiz.ir
✅ ویژگیهای کلیش اینه که:
امنیتش بالاست، تو موقع اتصال به اینترانت مشکل دسترسی ندارید و کمتر از گروه تلگرامی توش حساسیت و قوانین داریم.
💢 تنها چیزی که نیاز دارید نصب یک کلاینت ماتریکس مثل Element و راهاندازی با wiiz هستش که سادست نیاز به آموزش نداره.
#معرفی
~> @PinkOrca | آزاد بیندیشیم 🪨
❤8
This media is not supported in your browser
VIEW IN TELEGRAM
💢 با توجه به رشد نمایی AI و توسعه و گسترش توانمندیهاش در زمینههای مختلف مانند برنامهنویسی، باید به دنبال شغلهای مناسبی برای جایگزینی باشیم.
✅ تو این ویدیو که شاید بعضیاتون قبلا از کانال یکی از دوستانم دیدین، در مورد این موضوع صحبت کردم.
⚠️ پ.ن:
در شرایط کنونی کشور استفاده از این روش مجاز نمیباشد و این ویدیو صرفا جنبه آموزشی دارد.
#ترفند #حرف_با_شما #فان
~> @PinkOrca | آزاد بیندیشیم 🤍
✅ تو این ویدیو که شاید بعضیاتون قبلا از کانال یکی از دوستانم دیدین، در مورد این موضوع صحبت کردم.
⚠️ پ.ن:
در شرایط کنونی کشور استفاده از این روش مجاز نمیباشد و این ویدیو صرفا جنبه آموزشی دارد.
#ترفند #حرف_با_شما #فان
~> @PinkOrca | آزاد بیندیشیم 🤍
🤣27👍1😁1🤯1
💢 بخاطر حساسیتهای بالا فعلا هیچ کانفیگی رو به شکل مستقیم و پابلیک نمیذارم تو کانال و همینطور انجمن ونداد.
⁉️ چرا؟
مشخصه دیگه، چون سریعتر غیرفعال میشن.
❤️🩹 اما از اونجایی که اکثرمون برای کارای روزمره به اینترنت نیازمندیم، یه گروه خصوصی (و شاید موقت) ایجاد کردم که توش من و بقیه با اشتراکگذاری انواع کانفیگ و راههای اتصال به هم کمک میکنیم (چون کسی رو جز خودمون نداریم!)
✅ اگه خواستید عضو بشید / مشارکت کنید:
کافیه پیوی پیام بفرستید "کانفیگ" یا "VPN"
PV ~> @Pink0rca
📌 به امید پایان جنگ و برقراری آرامش تو ایران عزیزمون.
🎈 پ.ن:
~> @PinkOrca | آزاد بیندیشیم 🔑
آپدیت:
گروه به این تاپیک منتقل شد
https://news.1rj.ru/str/VandadCommunity/367282
⁉️ چرا؟
مشخصه دیگه، چون سریعتر غیرفعال میشن.
❤️🩹 اما از اونجایی که اکثرمون برای کارای روزمره به اینترنت نیازمندیم، یه گروه خصوصی (و شاید موقت) ایجاد کردم که توش من و بقیه با اشتراکگذاری انواع کانفیگ و راههای اتصال به هم کمک میکنیم (چون کسی رو جز خودمون نداریم!)
✅ اگه خواستید عضو بشید / مشارکت کنید:
کافیه پیوی پیام بفرستید "کانفیگ" یا "VPN"
PV ~> @Pink0rca
📌 به امید پایان جنگ و برقراری آرامش تو ایران عزیزمون.
🎈 پ.ن:
موضوع کانال من این نبود و نیست، اما از اونجایی که کمتر از ۳٪ مردم الان دسترسی به اینترنت دارن، فایدهای نداره پست عادی گذاشتن تا دوباره وضعیت اوکی بشه... پس یه کار بهتر میکنیم..!#کانفیگ #فیلتر_شکن #v2ray #حرف_با_شما
اگه عضو تازه هستید میتونید از [اینجا] به دستهبندی کانال و پستهای قدیمی دسترسی داشته باشید.
~> @PinkOrca | آزاد بیندیشیم 🔑
آپدیت:
گروه به این تاپیک منتقل شد
https://news.1rj.ru/str/VandadCommunity/367282
1❤21👎4🔥1