• اگر سمپادی هستی همین الان عضو شو :

    ثبت نام عضویت

ژورنال آکادمیک

  • شروع کننده موضوع شروع کننده موضوع banaz
  • تاریخ شروع تاریخ شروع

banaz

کاربر فوق‌حرفه‌ای
ارسال‌ها
970
امتیاز
20,489
نام مرکز سمپاد
فرزانگان۲
شهر
کرمان
سال فارغ التحصیلی
1400
رشته دانشگاه
مهندسی کامپیوتر
خب من عادت دارم وقتی مبحثی رو می‌خونم یه جایی دربارش توضیح بدم. قبلا این اتفاق در کانال تلگرامم می‌افتاد ولی حالا که نیست اینجا می‌نویسم.
با پردازش تصویر شروع می‌کنم.

پردازش تصویر اصلا چیه؟ می‌تونه طیف وسیعی از کارها رو دربربگیره. به طور کلی می‌شه گفت سه سطح داره:
1. سطح پایین (low-level): ورودی و خروجی هر دو یک تصویرن. مثل کاری که با فوتوشاپ یا اینشات انجام می‌دین، فیلترهای مختلف روی تصویر انداختن. یا بهبود کیفیتش با بعضی هوش مصنوعی‌ها.
2. سطح متوسط (mid-level): ورودی یک تصویر و خروجی یک تصویر دیگه باشه یا روی هر جزء تصویر برچسب بزنه و شناسایی کنه که چیه.
3. سطح بالا (high-level): اینکه تصویر بدی و هوش مصنوعیت بفهمه چیه و به یه درکی برسه.
من فعلا بیشتر با سطح پایین کار کردم به توضیحات ناقصم خورده نگیرید :)

احتمالا شنیدین فلان تصویر کنتراستش بالا یا پایینه. یعنی چی؟ یعنی رنگاش با هم یکنواخت نیستن و زیاد بودن یه رنگ ممکنه باعث بشه جزئیات تصویر دیده نشه.
چطوری تشخیص داده می‌شه؟ یکی از روشاش که خیلی دوست دارم رسم هیستوگرامه.
چطوری؟ برای یه تصویر سیاه و سفید مقدار هر پیکسل یه عدد صحیح بین 0 و 255 هست (0 سیاه‌ترین و 255 روشن‌ترین کد رنگه). برای رسم هیستوگرام کافیه برای هر کد رنگ بشماریم که چقدر در تصویر تکرار شده. مثلا این تصویر رو ببینید. مشخصه که تعداد زیادی از پیکسل‌هاش سفید یا نزدیک به سفیدن. حالا اگر هیستوگرامش رو رسم کنیم، مشخصه که تعداد زیادی از پیکسل‌ها در بازه‌ی 200-255 هستن و رنگ روشن دارن.

z34689_Screenshot_2026-05-06_203856.png
b84825_low_contrast3.png


حالا فهمیدیم کنتراستش پایینه، چجوری بهترش کنیم؟ یکی از راه‌ها که بهش همسان‌سازی هیستوگرام (Histogram equalization) می‌گن اینه که سعی کنیم این نمودار رو یکنواخت کنیم، طوری که تعداد تکرار هر کد رنگ تقریبا یکی بشه. یکی دیگه از راه‌ها تطبیق هیستوگرامه. یعنی یه هیستوگرام مطلوب می‌دیم و دوست داریم توزیع کلی تبدیل به اون بشه. درسته نمی‌تونه همیشه عین نمودار مطلوب ما بشه ولی بازم نتایج خوبی داره. درباره‌ی جزییات این روش‌ها و محاسباتشون توضیحی نمی‌دم و شاید یه روز دیگه صحبت کنم.
تصویر خروجی و هیستوگرامش با روش همسان‌سازی همچین چیزی می‌شه. می‌بینین که دیگه هیستوگرام در یک جا متمرکز نیست.

s432590_Screenshot_2026-05-06_205708.png
m08223_contrast.jpg


کدش رو هم می‌تونین ببینین. برای ران کردنش داشتن کتابخونه‌های open cv و matplotlib نیازتون می‌شه.
Python:
import cv2
import matplotlib.pyplot as plt
# Read image and convert to grayscale
image = cv2.imread('low_contrast3.png', cv2.IMREAD_GRAYSCALE) # Change the name
# Histogram equalization
equalized_image = cv2.equalizeHist(image)
# show image
cv2.imshow('Original Image', image)
cv2.imshow('Equalized Image', equalized_image)
# Histograms
plt.figure(figsize=(10, 5))
plt.title("Histogram before and after")
plt.axis('off')
plt.subplot(121), plt.hist(image.ravel(), 256, range=(0, 256)), plt.title('Original Histogram')
plt.subplot(122), plt.hist(equalized_image.ravel(), 256, range=(0, 256)), plt.title('Equalized Histogram')

plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()
# Save image
cv2.imwrite('contrast.jpg', equalized_image)
 
آخرین ویرایش:
بیاید امشب درباره‌ی مدل‌های یادگیری ماشین (Machine Learning) صحبت کنیم.

یادگیری ماشین چیه؟
یه بچه‌ی کوچیک رو تصور کنین. چجوری یاد می‌گیره؟ بعضی اوقات بهش یه گربه نشون می‌دیم و می‌گیم بگو گربه. این می‌شه شاخه‌ای از یادگیری ماشین که بهش می‌گن یادگیری بانظارت (Supervised Learning). یعنی داده‌ها برچسب دارن.
گاهی اوقات بچه‌ی داستان ما اسباب‌بازی‌هایی که شبیه همن کنار هم قرار می‌ده. شاخه‌ی دیگه‌ای از یادگیری ماشین که بهش می‌گن یادگیری بدون نظارت (Unsupervised Learning). ساده‌ترین کاربردش رو می‌تونین توی شبکه‌های اجتماعی مثل اینستاگرام (خدا بیامرز) ببینین. وقتی به شما کاربرانی برای فالو پیشنهاد می‌ده یا محتواهای نزدیک رو بهتون نشون می‌ده.*
گاهی یادگیری با تجربه اتفاق می‌افته. مثلا بچه دست می‌زنه به بخاری و می‌سوزه. به این نوع از یادگیری، یادگیری تقویتی (Reinforcement Learning) گفته می‌شه. مثل وقتی چت‌جی‌پی‌تی به شما دو تا جواب می‌داد و ازتون می‌خواست یکیش که به دردتون خورده رو انتخاب کنین و از بازخوردتون برای یادگیری استفاده می‌کرد.

البته که انواع یادگیری به همین‌ها محدود نمی‌شه و اصلا supervised در اکثر مواقع در دنیای واقعی کاربردی نداره چون معمولا همه‌ی داده‌ها برچسب ندارن. اینجا انواعی از الگوریتم‌ها مثل semi-supervised وارد می‌شن که چون هنوز چیزی دربارشون نخوندم می‌ذاریم برای یه روز دیگه :)

* کاری که اینستاگرام انجام می‌ده -پیشنهاد محتواهای نزدیک به علاقه- یا دیجی‌کالا و اسنپ در فروشگاهشون انجام می‌دن -پیشنهاد محصولاتی که ممکنه بخواید بخرید- در اصل یک سیستم توصیه‌گر (Recommender System) هست که از همین الگوریتم‌های یادگیری ماشین به صورت خاص منظوره استفاده می‌کنه. اینم بمونه برای یک شب دیگه.
 
آخرین ویرایش:
از اونجایی که امشب انرژی نوشتن ندارم بیاید محتوای قدیمی استفاده کنید :)

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

این توصیه بر چه اساسی انجام می‌شود؟
برخی سیستم‌های توصیه‌گر صرفا براساس شباهت کاربران با یکدیگر محصولات را پیشنهاد می‌دهند (User-based). مثل اینستاگرام که برخی ویدیوهای مورد علاقه‌ی دوستانتون را به شما پیشنهاد می‌ده.
برخی فقط براساس آیتم‌های مورد علاقه‌ی شما و آیتم‌های مشابه اون‌ها بهتون پیشنهاد می‌کنن (Item-based). مثل پیشنهاد آهنگ‌های خواننده‌های محبوب شما در اسپاتیفای.
برخی دیگه با شما محاوره می‌کنند تا آیتم مناسب شما رو پیدا کنن (Knowledge-based).
برخی سیستم‌ها نیز ترکیبی از این رویکردها رو دارن (Hybrid).

چطور می‌تونیم شباهت رو اندازه بگیریم؟
یکی از ساده‌ترین روش‌ها استفاده از cosine similarity است. در این روش کاربر/آیتم رو یک بردار در نظر می‌گیریم. زاویه‌ی بین این دو بردار همان اختلاف این دو کاربر یا آیتم است.
 
امروز چیز جدیدی نخوندم. یه مقاله خوندم که هنوز تموم نشده و فقط باعث شد بیشتر عصبانی شم. در نتیجه بازم محتوای قدیمی بخونید.
این بار بحث فازی:

خب ما هممون مجموعه‌های کلاسیک یا اصطلاحا crisp رو می‌شناسیم. این مجموعه‌ها همونایین که شما در طول راهنمایی خوندین. A={1,2,3,4}. خیلی ساده، یک عضو یا مال این مجموعه هست یا نیست. کاملا صفر و یکیه.
ولی در واقعیت چی؟ آیا همه چیز صفر و یکیه؟ فرض کنید یک خانوم روی قد پارتنر آیندش شرط می‌زاره: "باید قد بلند باشه" ولی باید بدونیم منظورش از قد بلند چیه؟ اگر ازش بپرسیم و بگه یعنی بالای 200 سانتی متر آیا به این معنیه که فردی با 199.99 سانتی متر قد رو نمی‌پذیره؟ پس می‌تونیم بگیم در واقعیت همه چیز صفر و یکی نیست. هر عضو با درجه عضویت خاصی عضو یک مجموعه اس.

اما درجه عضویت چطوری مشخص می‌شه؟
یک مجموعه‌ی فازی برای هر عضو یک عدد بین صفر و یک مشخص می‌کنه. به این عدد می‌گن درجه‌ی عضویت. برای مثال مجموعه‌ای می‌سازیم که درجه‌ی عضویت شهرای ایران رو به مجموعه‌ی شهرای جنگ‌زده مشخص کنه:
A={(tehran,1), (isfahan, 0.9), (kerman, 0)}
همه‌ی شهرای ایران به یک اندازه تخریب نشدن پس نمی‌تونیم بگیم همشون با درجه عضویت یکسانی عضو این مجموعه هستن.

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

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

در نهایت اینکه بسیاری چیزهای آکادمیک‌تر و علمی‌تر در این زمینه هست که در اینجا نمی‌گنجه ولی اگر کنجکاو و طالب دانشید کتاب یا کورس مرتبط پیدا کنید. من هیچ کدوم رو هنوز نخوندم ولی تکست بوک‌های معرفی شده سر کلاس رو بهتون معرفی می‌کنم.
Fuzzy logic by Timothy J.Ross
Neuro fuzzy and soft computing
پیش نیاز دومی، کتاب اوله.
 
قصد داشتم بالاخره مقالمو تموم کنم و به ویس از خلاصش بگیرم ولی نشد. پس بازم محتوای قدیمی بخونید.

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

+ یکی از اساتید ترم پیش یه سری فرضیه‌ی جدید اضافه کرد بهش و شد سوال امتحانش. فرضیه‌ی جدید این بود که یه سری کشور مستقل مثل ایران (!) هستن که تهدید بقیه کشورها روشون تأثیر می‌ذاره و... اونا رو هم به الگوریتم اضافه کنین. کدی هم برای پیاده‌سازیش و مقایسه با الگوریتم ژنتیک زدم ولی الان دم دستم نیست و شاید یه شب دیگه.
 
کدی هم برای پیاده‌سازیش و مقایسه با الگوریتم ژنتیک زدم ولی الان دم دستم نیست و شاید یه شب دیگه.
در راستای این، کدی که زدم رو می‌فرستم. این کد پیاده‌سازی حل مسئله‌ی سرویس مدرسه با سه روش الگوریتم ژنتیک، استعماری و استعماری پیشرفته (من درآوردی) هست و چون دارم از خستگی می‌میرم نمی‌تونم توضیح بیشتری بدم ولی می‌تونین گزارشی که درباره‌ی الگوریتم ژنتیک نوشتم رو بخونین شاید براتون مفید بود.
مسئله‌ی سرویس مدرسه: تعدادی دانش آموز مدرسه و تعدادی وسیله نقلیه با ظرفیت مشخص داریم. قصد داریم دانش آموزان را به گونه‌ای گروه‌بندی کنیم که کمترین مسیر توسط سرویس‌ها طی شود.
 
خب بیاین درباره‌ی پرامپت نویسی حرف بزنیم.
اولا، پرامپت چیه؟ ساده‌اش می‌شه همون چیزایی که شما به یک هوش مصنوعی می‌گید.
ضمن اینکه از این به بعد به هوش مصنوعی‌هایی مثل ChatGPT، DeepSeek و امثالهم با عبارت LLM یا Large Language Model یا مدل‌های بزرگ زبانی اشاره می‌کنم.
خب شما می‌دونستین هر موقع از LLMها استفاده می‌کنین به صورت ناخودآگاه دارین از یک تکنیک پرامپت نویسی استفاده می‌کنین؟ مثلا اگر ازش بخواین یه مثال ریاضی حل کنه و یه نمونه حل بهش بدین بهش می‌گن few-shot prompting چون مثال زدین. ولی اکثر ما از zero-shot prompting استفاده می‌کنیم یعنی صاف و صادق فقط سوال ازش می‌پرسیم.
یا مثلا فرض کنین ازش می‌خوایم به یه سوال ریاضی جواب بده و قدم به قدم تا آخر حل توضیح بده. یا گاهی خودمون مسئله رو به ابعاد کوچیک‌تر تقسیم می‌کنیم و قدم به قدم ازش سوال می‌پرسیم. به این یکی می‌گن Chain of thoughts.

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

سه تا مدل پرامپت‌نویسی رو بررسی کردن:
1. LTL: خلاصش اینه که یه سوال به همراه 4 تا گزینه برای LLM می‌فرستی و ازش می‌خوای جواب رو در یک کلمه بگه، کاری که هر آدمی در اولین نگاه انجام می‌ده. مثلا:​
Your task is to analyze the question and the answer options A, B, C or D below.
Question: The primary cause of continental drift, earthquakes, and volcanic eruptions is
A. convection currents beneath Earth’s crust.
B. the rotation of Earth on its axis.
C. the gradual sinking of Earth’s crust.
D. heat from the Sun warming Earth.
Answer:​
2. COT: از مدل می‌خوایم کاملا فکر کنه و استدلال کنه و بعد جواب بده. مثلا:​
Your task is to analyze the question and answer options A, B, C, or D below. Rules: First, write your reasoning step by ste
p. - Do NOT state the final answer inside the reasoning. - After the reasoning is fully complete, on a new line, write ONLY the final answer in the exact format: Answer: [A/B/C/D] - Do not add any words, explanations, or text after the final answer line. — Now answer this question:
Question: The primary cause of continental drift, earthquakes, and volcanic eruptions is
A. convection currents beneath Earth’s crust.
B. the rotation of Earth on its axis.
C. the gradual sinking of Earth’s crust.
D. heat from the Sun warming Earth.​
3. STL: این همون روشیه که ارائه شد. سوال به همراه هر گزینه جداگانه به LLM داده می‌شه و ازش می‌خوان بگه این جواب این سوال هست یا نه؟ مثلا:​
Your task is to analyze the question and answer below. If the answer is correct then respond yes, if it is not correct then respond no.
Question: An astronomer observes that a planet rotates faster after a meteorite impact. What is the most likely effect of this increase in rotation?
Proposed answer: Planetary density will decrease.
Response:​
در نهایت STL خیلی بهتر عمل کرد ولی این پژوهش فقط روی بنچمارک‌هایی انجام شد که موضوعشون علوم بوده نه ریاضیات پیچیده یا علوم انسانی.

+ ازتون می‌خوام درباره‌ی تجربتون از کار با LLMها حرف بزنین و اینکه چطوری سوال پرسیدن شما رو به جوابای بهتری رسونده؟
 
آخرین ویرایش:
Back
بالا