Dev Tweet
اشتراک Poe.com: اقتصادیترین راه برای استفاده از مدلهای زبانی پیشرفته(تجربه شخصی) ست: بعد از چند هفته بررسی برای خریدن یک اشتراک بهصرفه برای دسترسی به انواع مدلهای هوش مصنوعی، باید اعلام کنم که poe.com بهترین، بهصرفهترین و خفنترین اشتراک ممکن است! سرویسهای…
یه نکته دیگه اضافه کنم این Poe.com مثه سرویسهای دیگه یه شرکت استارت آپی نیست! برای شرکت Quoraاست که قطعا میشناسید و استفاده کردید ازش(ورژن انگلیسی نینی سایت 😂😂)که واسه دو تا کارمند سابق فیس بوکه بیش از ۲۰۰ تا کارمند داره ارزشش نزدیک دو میلیارد دلاره!
👍4
فرمتینگ مناسب در پایتون (تجربه)
همیشه برام دغدغه بود که چه فرمتر (formatter) یا ابزار فرمتبندی کد رو برای پروژههای پایتون (Python) انتخاب کنم. فرمترها ابزارهایی هستند که کد منبع را مطابق با دستورالعملهای استایل خاصی تجزیه و تحلیل و بازنویسی میکنند تا خوانایی و یکنواختی کد افزایش پیدا کنه. این ابزارها به ما کمک میکنند تا اطمینان حاصل کنیم که کد ما نه تنها درست کار میکند، بلکه به زیبایی و به شکل استاندارد نوشته شده. برای پایتون سه تا formatter اصلی وجود داره.همیشه بین این سه گزینه گیر میکردم: Black، autopep8، و YAPF. هر بار در پروژههای یکی رو انتخاب میکردم ولی یه بار رفتم اساسی بررسی کردم اینا چه تفاوتهایی دارن. هر کدوم قابلیتها و ویژگیهای منحصر به فرد خودشون رو دارند و انتخاب بین اینها واقعا سخته. اما بزارید یه نگاه دقیقتر به هر کدوم بندازیم:
1. Black
فرمتر Black به شدت خودکار و بیطرفانه (opinionated) عمل میکنه. این فرمتر با اینکه خیلی سفت و سخته (uncompromising)، ولی به خاطر همین خصوصیتش خیلی هم محبوب شده. نظم خاصی به کد میده و تقریبا هیچ جایی برای بحث و جدل در مورد سبک کدنویسی باقی نمیذاره. ویژگی بارزش بخاطر این سختیگیری نسبت به yapf متعین(deterministic) بودنشه یعنی اگر روی یک کد اجرا کنی حتما به یک شکل مشخص در میاره. برای یک کد چند تا حالت مختلف رو به عنوان حالت معتبر از نظر فرمت در نظر نمیگیره ولی yapf اینطوری نیست جلوتر توضیح میدم.
یک مشکل بزرگ داره انعطافپذیری کمی داره (less flexible) و شاید برای پروژههایی که نیاز به سبک خاصی دارند مناسب نباشه.
2. autopep8
فرمتر autopep8 دقیقا روی استانداردهای PEP 8 (PEP 8) تمرکز داره. این فرمتر کدها رو به شکلی استاندارد و خوانا (readable) درمیاره ولی فقط مطابق autopep8. کد را آنالیز میکند و خطاهای استایل را اصلاح میکند تا با استانداردهای PEP 8 همخوانی داشته باشد.
گاهی اوقات نمیتونه به اندازه Black یا YAPF انعطافپذیر باشه (not as flexible) و ولی تعداد قوانینش به اندازهی black زیاد نیست.
معنی انعطاف پذیر بودنش اینه که اگر یک کدی با black فرمت شده باشه اینقدر قوانین خیلی سفت و سختی داره (strict rules) که قوانین Autopep هم درش رعایت شده مثلا PEP8 میگه طول خط از 79 بیشتر نشه ولی black میاد اینقدر طول خط رو کوتاه میکنه که از 79 خیلی کمتر و قواعد هر دو تا استاندارد رو پاس میکنه.
3. YAPF
فرمتر YAPF خیلی قابل تنظیم و انعطافپذیره (highly configurable). این فرمتر بر اساس یک پروفایلی که شما تعیین میکنید، کد رو فرمت میکنه. YAPF کد را بازبینی کرده و بر اساس پروفایل تعیین شده تغییرات لازم را اعمال میکند تا کد هم خوانا و هم زیبا باشد.
اگر دنبال سفارشیسازی د
دقیق فرمت کدتان هستید (customization)، YAPF انتخاب خوبیه. خصوصا توی پروژهها. البته اگر کسی باشه بشینه استاندارهای فرمت رو همه رو کانفیگ کنه.اما گاهی اوقات تنظیمات میتونه خیلی پیچیده بشه (complex configuration) و این ممکنه باعث سردرگمی شود.
خیلی ساده بخوام بگم YAPF بیشتر یک ابزار کانفیگ فرمته تا فرمتر با قواعد مشخص! یعنی میتونی یه جوری کانفیگ کنی که خروجی بشه مثه خروجی هر کدوم از دوتا قبلی، میتونی هم طوری کانفیگ کنی که اصلا هیچ شبیه دو تا قبلی نشه.
چند تا قطعه کد ببنید یه کم حس بگیرید به حرفام:
این کد رو در نظر بگیرید که فرمت خیلی بدی داره:
Formatted by autopep8
Formatted by Black
اما اینکه میگم به جز black اون دو تا دیگه متعین نیستن مثالش اینطوریه که فرض کنید کد ورودی این سه تا باشه. در این صورت با اینکه تابع یک چیزه ولی هر سه تا اینا قواعد YAPF رو رعایت کرد و هر سه تا میتونه تو پروژه باشه!
طبق تجربه میگم اگر گیت در پروژه تون نقش پررنگی داره قواعد فرمتیگ رو همون اول ست کنید وسط پروژه اعمال کردن فرمت شدیدا روی مرج کانفلیکت میده!
قواعد black به نظر من از جهت deterministic بودن خیلی خوبن ولی در زمینهی طول خط خیلی کوتاه و سختگیرانه است.
تجربه شما چیه؟
همیشه برام دغدغه بود که چه فرمتر (formatter) یا ابزار فرمتبندی کد رو برای پروژههای پایتون (Python) انتخاب کنم. فرمترها ابزارهایی هستند که کد منبع را مطابق با دستورالعملهای استایل خاصی تجزیه و تحلیل و بازنویسی میکنند تا خوانایی و یکنواختی کد افزایش پیدا کنه. این ابزارها به ما کمک میکنند تا اطمینان حاصل کنیم که کد ما نه تنها درست کار میکند، بلکه به زیبایی و به شکل استاندارد نوشته شده. برای پایتون سه تا formatter اصلی وجود داره.همیشه بین این سه گزینه گیر میکردم: Black، autopep8، و YAPF. هر بار در پروژههای یکی رو انتخاب میکردم ولی یه بار رفتم اساسی بررسی کردم اینا چه تفاوتهایی دارن. هر کدوم قابلیتها و ویژگیهای منحصر به فرد خودشون رو دارند و انتخاب بین اینها واقعا سخته. اما بزارید یه نگاه دقیقتر به هر کدوم بندازیم:
1. Black
فرمتر Black به شدت خودکار و بیطرفانه (opinionated) عمل میکنه. این فرمتر با اینکه خیلی سفت و سخته (uncompromising)، ولی به خاطر همین خصوصیتش خیلی هم محبوب شده. نظم خاصی به کد میده و تقریبا هیچ جایی برای بحث و جدل در مورد سبک کدنویسی باقی نمیذاره. ویژگی بارزش بخاطر این سختیگیری نسبت به yapf متعین(deterministic) بودنشه یعنی اگر روی یک کد اجرا کنی حتما به یک شکل مشخص در میاره. برای یک کد چند تا حالت مختلف رو به عنوان حالت معتبر از نظر فرمت در نظر نمیگیره ولی yapf اینطوری نیست جلوتر توضیح میدم.
یک مشکل بزرگ داره انعطافپذیری کمی داره (less flexible) و شاید برای پروژههایی که نیاز به سبک خاصی دارند مناسب نباشه.
2. autopep8
فرمتر autopep8 دقیقا روی استانداردهای PEP 8 (PEP 8) تمرکز داره. این فرمتر کدها رو به شکلی استاندارد و خوانا (readable) درمیاره ولی فقط مطابق autopep8. کد را آنالیز میکند و خطاهای استایل را اصلاح میکند تا با استانداردهای PEP 8 همخوانی داشته باشد.
گاهی اوقات نمیتونه به اندازه Black یا YAPF انعطافپذیر باشه (not as flexible) و ولی تعداد قوانینش به اندازهی black زیاد نیست.
معنی انعطاف پذیر بودنش اینه که اگر یک کدی با black فرمت شده باشه اینقدر قوانین خیلی سفت و سختی داره (strict rules) که قوانین Autopep هم درش رعایت شده مثلا PEP8 میگه طول خط از 79 بیشتر نشه ولی black میاد اینقدر طول خط رو کوتاه میکنه که از 79 خیلی کمتر و قواعد هر دو تا استاندارد رو پاس میکنه.
3. YAPF
فرمتر YAPF خیلی قابل تنظیم و انعطافپذیره (highly configurable). این فرمتر بر اساس یک پروفایلی که شما تعیین میکنید، کد رو فرمت میکنه. YAPF کد را بازبینی کرده و بر اساس پروفایل تعیین شده تغییرات لازم را اعمال میکند تا کد هم خوانا و هم زیبا باشد.
اگر دنبال سفارشیسازی د
دقیق فرمت کدتان هستید (customization)، YAPF انتخاب خوبیه. خصوصا توی پروژهها. البته اگر کسی باشه بشینه استاندارهای فرمت رو همه رو کانفیگ کنه.اما گاهی اوقات تنظیمات میتونه خیلی پیچیده بشه (complex configuration) و این ممکنه باعث سردرگمی شود.
خیلی ساده بخوام بگم YAPF بیشتر یک ابزار کانفیگ فرمته تا فرمتر با قواعد مشخص! یعنی میتونی یه جوری کانفیگ کنی که خروجی بشه مثه خروجی هر کدوم از دوتا قبلی، میتونی هم طوری کانفیگ کنی که اصلا هیچ شبیه دو تا قبلی نشه.
چند تا قطعه کد ببنید یه کم حس بگیرید به حرفام:
این کد رو در نظر بگیرید که فرمت خیلی بدی داره:
def compute(value1,value2,value3):return value1+value2+value3
Formatted by autopep8
def compute(value1, value2, value3): return value1 + value2 + value3
Formatted by Black
def compute(value1, value2, value3):
return value1 + value2 + value3
اما اینکه میگم به جز black اون دو تا دیگه متعین نیستن مثالش اینطوریه که فرض کنید کد ورودی این سه تا باشه. در این صورت با اینکه تابع یک چیزه ولی هر سه تا اینا قواعد YAPF رو رعایت کرد و هر سه تا میتونه تو پروژه باشه!
def function(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10):
print(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10)
def function(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10):
print(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10)
def function(
arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10):
print(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10)
طبق تجربه میگم اگر گیت در پروژه تون نقش پررنگی داره قواعد فرمتیگ رو همون اول ست کنید وسط پروژه اعمال کردن فرمت شدیدا روی مرج کانفلیکت میده!
قواعد black به نظر من از جهت deterministic بودن خیلی خوبن ولی در زمینهی طول خط خیلی کوتاه و سختگیرانه است.
تجربه شما چیه؟
👍9
نظر نامحبوب(تجربه):
چت بات Gemini-Pro عملکردش شانه به شانهی GPT-4 بعضی جاها بهتره حتی!
حتی اگر یک کدی رو با GPT-4 زدید یا دیباگ کردید بد نیست اگه دسترسی دارید به Gemni-Pro هم بدید.
این دو باید در طول کانتکس بالا هم باید مقایسه بشن که فعلا من خیلی تجربه نکردم. اگر این مقایسه رو انجام دادم با شما در میون میذارم.
محبوبیت کمتر Gemini بخاطر کار مارکتینگ و بازریابی غلطشه! زمانی که GPT-4 منتشر شد گوگل چت بات آشغال PaLM-2 رو عرضه کرد هر کسی استفاده کرد پشیمون شد. مشکل دوم گوگل این بود که Gemni-Pro رو یکسال بعد که منتشر کرد واقعا چیز بهتری از GPT-4 نبود دیگه بقیه انتظار نداشتن بعد از یکسال تازه یه چیزی در حد همون GPT-4 بیرون بده اگر چه خود OpenAI هم شق القمری نکرده بود و هنوزم از یک سال و نیم پیش که GPT-4 رو عرضه کرده پیشرفت ویژهای نداشته.
مزیت فعلی GPT-4 به Gemini-Pro به نظر من فعلا فضل تقدم و محبوبیت بیشتره همین!
چت بات Gemini-Pro عملکردش شانه به شانهی GPT-4 بعضی جاها بهتره حتی!
حتی اگر یک کدی رو با GPT-4 زدید یا دیباگ کردید بد نیست اگه دسترسی دارید به Gemni-Pro هم بدید.
این دو باید در طول کانتکس بالا هم باید مقایسه بشن که فعلا من خیلی تجربه نکردم. اگر این مقایسه رو انجام دادم با شما در میون میذارم.
محبوبیت کمتر Gemini بخاطر کار مارکتینگ و بازریابی غلطشه! زمانی که GPT-4 منتشر شد گوگل چت بات آشغال PaLM-2 رو عرضه کرد هر کسی استفاده کرد پشیمون شد. مشکل دوم گوگل این بود که Gemni-Pro رو یکسال بعد که منتشر کرد واقعا چیز بهتری از GPT-4 نبود دیگه بقیه انتظار نداشتن بعد از یکسال تازه یه چیزی در حد همون GPT-4 بیرون بده اگر چه خود OpenAI هم شق القمری نکرده بود و هنوزم از یک سال و نیم پیش که GPT-4 رو عرضه کرده پیشرفت ویژهای نداشته.
مزیت فعلی GPT-4 به Gemini-Pro به نظر من فعلا فضل تقدم و محبوبیت بیشتره همین!
👍2
Dev Tweet
نظر نامحبوب(تجربه): چت بات Gemini-Pro عملکردش شانه به شانهی GPT-4 بعضی جاها بهتره حتی! حتی اگر یک کدی رو با GPT-4 زدید یا دیباگ کردید بد نیست اگه دسترسی دارید به Gemni-Pro هم بدید. این دو باید در طول کانتکس بالا هم باید مقایسه بشن که فعلا من خیلی تجربه نکردم.…
یک مزیت دیگه Gemni که من کاملا حس کردم نسخه Gemini-Flash هست که در بین مدلهای بزرگ بیشترین سرعت رو با یک مقدار عملکرد ضعیفتر میده ولی این افزایش سرعت اینقدر قابل توجه که واقعا کاهش عملکردش اصلا به چشم نمیاد.
برای متون طولانی کاملا Gemini-Flash-128K بر هر مدلی ترجیح داره.
برای متون طولانی کاملا Gemini-Flash-128K بر هر مدلی ترجیح داره.
Forwarded from DevTweet Chat
حتی دو تا نکته جالب بگم:
دیروز توی بنچمارکی دیدم که Gemni-Flash که مدل خیلی سریع و ارزانیه حتی از Claude-Opus هم بهتره!
من کاملا این رو تجربه کردم واقعا Anthropic در مدل Pro از گوگل و OpenAI خیلی عقب مونده چون حتی GPT-4o و Gemni-Flash هم از Claude-Opus بهترن چه برسه به GPT-4 و Gemni-Pro
و نکته دوم اینکه
اگه اشتراک پولی Gemni رو بخرید گوگل بهتون ماهی دو ترابایت دیسک Google Drive میده
دیروز توی بنچمارکی دیدم که Gemni-Flash که مدل خیلی سریع و ارزانیه حتی از Claude-Opus هم بهتره!
من کاملا این رو تجربه کردم واقعا Anthropic در مدل Pro از گوگل و OpenAI خیلی عقب مونده چون حتی GPT-4o و Gemni-Flash هم از Claude-Opus بهترن چه برسه به GPT-4 و Gemni-Pro
و نکته دوم اینکه
اگه اشتراک پولی Gemni رو بخرید گوگل بهتون ماهی دو ترابایت دیسک Google Drive میده
یه چند سالی هست عناوین مقاله اینطوری زیاد دیده میشه که رسما با عنوان مقاله کار تبلیغاتی و برندینگ میکنند و بعضا جواب هم میده!
مثلا همین مقاله رو که دیدم تا صفحه اولش رو کامل خوندم و ایدهش رو گرفتن چرا میگه bullshit!
ولی به نظرم این رویه جالبی نیست که این مقالات از peer review در میان!
آخه bullshit!! در عنوان و کلمات کلیدی مقاله!🤯
این کار هیچ کارکردی جز impression گرفتن نداره!
مثلا همین مقاله رو که دیدم تا صفحه اولش رو کامل خوندم و ایدهش رو گرفتن چرا میگه bullshit!
ولی به نظرم این رویه جالبی نیست که این مقالات از peer review در میان!
آخه bullshit!! در عنوان و کلمات کلیدی مقاله!🤯
این کار هیچ کارکردی جز impression گرفتن نداره!
👍6
تعالی در AI!
بحثی مهم و پرمناقشهای در هوش مصنوعی هست که میگوید آیا میشود که یک مدل یادگیری ماشین خودش از دادههایی که در اختیارش قرار میگیرد استفاده کند و به دانشی فراتر از دانش درون دادههایی ورودی دست پیدا کند، به این مفهوم پشت سر گذاشتن دانش درون داده ورودی تعالی (Transcendence) میگن، تعالی به معنی ارتقا یافتن از دانش درون داده ورودی است. این پدیده در مورد انسان عجیب نیست مثلا شاگردی از استاد خود در دانشی پیشی بگیرد حتی بدون اینکه به منبع متفاوتی از دانش و معرفتِ استادِ خودش متصل بشه چون ذهن انسان قادر به تولید دانش(knowledge) و بصیرت(insight) است و در مورد هوش مصنوعی این همواره مورد سوال بوده.
این مقاله برای چند وقت پیشه ولی از اهمیتش همین بگم که حتی در توئیتر مورد توجه Ian Goodfellow خالق GAN و ایلان ماسک هم قرار گرفت. تیم اصلی مقاله برای دانشگاه هاروارده. مقاله موضوع تعالی را حول مسالهی یادگیری مدل زبانی از بازی شطرنج میچیند.
تصور کنید که شما یک مدل زبانی را آموزش دادهاید تا فقط با استفاده از خلاصههای بازیهای شطرنج بازیکنانی که رتبهشان تا ۱۰۰۰ ایلو (Elo) است، شطرنج بازی کند(ایلو یک سیستم رتبهبندی است که برای اندازهگیری مهارت بازیکنان در بازیهای رقابتی مثل شطرنج استفاده میشود). حالا، آیا ممکن است این مدل بتواند بهتر از ایلو ۱۰۰۰ بازی کند؟ یعنی آیا میتواند عملکرد دادههای آموزشی خود را "پشت سر بگذارد"؟
این مقاله نشان میدهد که این امکانپذیر است که یک مدل بر اساس بازیهای با رتبه ۱۰۰۰ ایلو آموزش ببنید و به مدلی دست یابد که میتواند در سطح ۱۵۰۰ ایلو بازی کند! این یعنی تعالی مدل بر آموزشش. جایی که یک مدل تولیدی تواناییهایی را نشان میدهد که فراتر از تواناییهای کارشناسانی است که دادههای آن را تولید کردهاند.
نویسندگان این مقاله با استفاده از چهارچوب نظری دقیق و مشخص، این موضوع را به "تجمع یادگیرندگان ضعیف" (Ensembling Weak Learners) ربط میدهند. در این رویکرد، با میانگینگیری از خطاهای مستقل چندین مدل کوچک و ضعیفتر، یک نتیجه قویتر حاصل میشود که میتواند اشتباهات فردی را "پاکسازی" کند (Denoising) و به نتایج دقیقتری برسد. این مفهوم یادگیری تجمعی ضعیف مطلب جدیدی نیست قبلا در بحث درختهای تصادفی Random Forestها کاربرد بحث Bootstrap Aggregation یا همون Bagging رو به عنوان یک یادگیری تجمعی ضعیف دیدید.
این مقاله تاکید دارد که برای رخ دادن این "تعالی"، نیاز به تنوع کافی دادهها و نمونهبرداری دقیق دمایی (Temperature Sampling) است. "نمونهبرداری دما" یک فرآیند است که در آن میزان تصادفی بودن تصمیمات مدل را تنظیم میکنیم؛ دمای پایینتر باعث میشود که مدل بر روی گزینههای با احتمال بیشتر، بیشتر تمرکز کند و کمتر به سمت گزینههای کم احتمال برود.
در راستای این تحقیقات، مدلی به نام ChessFormer توسعه یافته که توانسته است به چنین تعالی دست یابد. ChessFormer، که به طور خاص برای بازی شطرنج طراحی شده، تنها با دادههایی از بازیکنان با رتبه حداکثر ۱۰۰۰ ایلو آموزش دیده است. با این حال، قابلیتهای این مدل به قدری پیشرفته بوده که توانسته است در سطوحی بالاتر از ۱۵۰۰ ایلو عملکرد نشان دهد، که این خود بیانگر دستیابی به سطحی از مهارت است که فراتر از تمام بازیکنان موجود در دیتاست آموزشی آن است.
این پیشرفت شگفتانگیز به خاطر بهرهگیری از تکنیکهای "نمونهبرداری دما" با دمای پایین و تاکید بر تنوع دادهها ممکن شده است. نمونهبرداری دما به ChessFormer اجازه میدهد تا تصمیمات دقیقتری بگیرد، به این معنی که مدل تمایل دارد تا از حرکات با احتمال بالای پیروزی استفاده کند و از حرکات کمبازده دوری کند. این استراتژی بهویژه در موقعیتهای کلیدی بازی که تعیینکننده نتیجه هستند، تأثیر بسزایی دارد.
تأکید بر تنوع دادهها اقتضای اصلی تحقق تعالی است تا مدل با دیدن یک مجموعه گستردهای از سناریوها و استراتژیها، دانش لازم برای مواجهه با طیف وسیعی از شرایط مختلف را یاد بگیره و در عمل از "خرد جمعی" بازیکنان مختلف بهرهمند بشه تا به نتایج بهتری نسبت به عملکرد هر بازیکن به تنهایی برسه.
اهمیت مدلی مثه ChessFormer اینه که درک ما از مرزهای دانش و تواناییهای هوش مصنوعی را عوض میکند وقتی بدانیم پتانسیل فراتر رفتن از محدودیتهای دادههای آموزشی در هوش مصنوعی وجود داره هدف گذاریهامون برای توسعه هوش مصنوعی شکل متفاوتی میگیره.
بحثی مهم و پرمناقشهای در هوش مصنوعی هست که میگوید آیا میشود که یک مدل یادگیری ماشین خودش از دادههایی که در اختیارش قرار میگیرد استفاده کند و به دانشی فراتر از دانش درون دادههایی ورودی دست پیدا کند، به این مفهوم پشت سر گذاشتن دانش درون داده ورودی تعالی (Transcendence) میگن، تعالی به معنی ارتقا یافتن از دانش درون داده ورودی است. این پدیده در مورد انسان عجیب نیست مثلا شاگردی از استاد خود در دانشی پیشی بگیرد حتی بدون اینکه به منبع متفاوتی از دانش و معرفتِ استادِ خودش متصل بشه چون ذهن انسان قادر به تولید دانش(knowledge) و بصیرت(insight) است و در مورد هوش مصنوعی این همواره مورد سوال بوده.
این مقاله برای چند وقت پیشه ولی از اهمیتش همین بگم که حتی در توئیتر مورد توجه Ian Goodfellow خالق GAN و ایلان ماسک هم قرار گرفت. تیم اصلی مقاله برای دانشگاه هاروارده. مقاله موضوع تعالی را حول مسالهی یادگیری مدل زبانی از بازی شطرنج میچیند.
تصور کنید که شما یک مدل زبانی را آموزش دادهاید تا فقط با استفاده از خلاصههای بازیهای شطرنج بازیکنانی که رتبهشان تا ۱۰۰۰ ایلو (Elo) است، شطرنج بازی کند(ایلو یک سیستم رتبهبندی است که برای اندازهگیری مهارت بازیکنان در بازیهای رقابتی مثل شطرنج استفاده میشود). حالا، آیا ممکن است این مدل بتواند بهتر از ایلو ۱۰۰۰ بازی کند؟ یعنی آیا میتواند عملکرد دادههای آموزشی خود را "پشت سر بگذارد"؟
این مقاله نشان میدهد که این امکانپذیر است که یک مدل بر اساس بازیهای با رتبه ۱۰۰۰ ایلو آموزش ببنید و به مدلی دست یابد که میتواند در سطح ۱۵۰۰ ایلو بازی کند! این یعنی تعالی مدل بر آموزشش. جایی که یک مدل تولیدی تواناییهایی را نشان میدهد که فراتر از تواناییهای کارشناسانی است که دادههای آن را تولید کردهاند.
نویسندگان این مقاله با استفاده از چهارچوب نظری دقیق و مشخص، این موضوع را به "تجمع یادگیرندگان ضعیف" (Ensembling Weak Learners) ربط میدهند. در این رویکرد، با میانگینگیری از خطاهای مستقل چندین مدل کوچک و ضعیفتر، یک نتیجه قویتر حاصل میشود که میتواند اشتباهات فردی را "پاکسازی" کند (Denoising) و به نتایج دقیقتری برسد. این مفهوم یادگیری تجمعی ضعیف مطلب جدیدی نیست قبلا در بحث درختهای تصادفی Random Forestها کاربرد بحث Bootstrap Aggregation یا همون Bagging رو به عنوان یک یادگیری تجمعی ضعیف دیدید.
این مقاله تاکید دارد که برای رخ دادن این "تعالی"، نیاز به تنوع کافی دادهها و نمونهبرداری دقیق دمایی (Temperature Sampling) است. "نمونهبرداری دما" یک فرآیند است که در آن میزان تصادفی بودن تصمیمات مدل را تنظیم میکنیم؛ دمای پایینتر باعث میشود که مدل بر روی گزینههای با احتمال بیشتر، بیشتر تمرکز کند و کمتر به سمت گزینههای کم احتمال برود.
در راستای این تحقیقات، مدلی به نام ChessFormer توسعه یافته که توانسته است به چنین تعالی دست یابد. ChessFormer، که به طور خاص برای بازی شطرنج طراحی شده، تنها با دادههایی از بازیکنان با رتبه حداکثر ۱۰۰۰ ایلو آموزش دیده است. با این حال، قابلیتهای این مدل به قدری پیشرفته بوده که توانسته است در سطوحی بالاتر از ۱۵۰۰ ایلو عملکرد نشان دهد، که این خود بیانگر دستیابی به سطحی از مهارت است که فراتر از تمام بازیکنان موجود در دیتاست آموزشی آن است.
این پیشرفت شگفتانگیز به خاطر بهرهگیری از تکنیکهای "نمونهبرداری دما" با دمای پایین و تاکید بر تنوع دادهها ممکن شده است. نمونهبرداری دما به ChessFormer اجازه میدهد تا تصمیمات دقیقتری بگیرد، به این معنی که مدل تمایل دارد تا از حرکات با احتمال بالای پیروزی استفاده کند و از حرکات کمبازده دوری کند. این استراتژی بهویژه در موقعیتهای کلیدی بازی که تعیینکننده نتیجه هستند، تأثیر بسزایی دارد.
تأکید بر تنوع دادهها اقتضای اصلی تحقق تعالی است تا مدل با دیدن یک مجموعه گستردهای از سناریوها و استراتژیها، دانش لازم برای مواجهه با طیف وسیعی از شرایط مختلف را یاد بگیره و در عمل از "خرد جمعی" بازیکنان مختلف بهرهمند بشه تا به نتایج بهتری نسبت به عملکرد هر بازیکن به تنهایی برسه.
اهمیت مدلی مثه ChessFormer اینه که درک ما از مرزهای دانش و تواناییهای هوش مصنوعی را عوض میکند وقتی بدانیم پتانسیل فراتر رفتن از محدودیتهای دادههای آموزشی در هوش مصنوعی وجود داره هدف گذاریهامون برای توسعه هوش مصنوعی شکل متفاوتی میگیره.
Telegram
Dev Tweet Media
👍4❤1
Forwarded from DevTwitter | توییت برنامه نویسی
وقتی یک برنامه مینویسیم، برای داشتن دید جزئیتر از اجرای برنامه و منابع در حین اجرا میریم سراغ پروفایلینگ (Profiling)
درپایتون ابزار Memray یک memory profiler خوبه
https://github.com/bloomberg/memray
امکانات قابل توجهی داره
@DevTwitter | <MehrdadLinux/>
درپایتون ابزار Memray یک memory profiler خوبه
https://github.com/bloomberg/memray
امکانات قابل توجهی داره
@DevTwitter | <MehrdadLinux/>
DevTwitter | توییت برنامه نویسی
وقتی یک برنامه مینویسیم، برای داشتن دید جزئیتر از اجرای برنامه و منابع در حین اجرا میریم سراغ پروفایلینگ (Profiling) درپایتون ابزار Memray یک memory profiler خوبه https://github.com/bloomberg/memray امکانات قابل توجهی داره @DevTwitter | <MehrdadLinux/>
به به چه ابزاری❤️!
کار دیتایی تو پایتون کرده باشین بسیار دیدین که نشت حافظه اتفاق میافته یا مثلا یک پایپلاین از فانکشنها پشت سر هم روی یک داده فراخوانی میشه براتون مهمه بدونید که هر کدوم از فانکشنها چقدر حافظه مصرف میکنند که اگه بعدا خواستید موازیسازی کنید بدونید چندتا instance از برنامه رو میتونید موازی اجرا کنید یا مثلا اگر برنامهتون مولتیترد هست و یک دفعه کرش میکنه مانیتور کنید کدوم تابع منجر به کرش حافظه میشه.
شما برای همهی اینها به یک memory profiler نیاز داشتید که یا بصورت یک پکیج پایتون بود یا اینکه خودتون با دیزاین پترن دکوریتور پیادهسازیش میکردید.
مشکل اینجا بود که باید برای تکتک فانکشنهایی میخواستید در تمیزترین حالت دکوریتور ست میکردید.
گاهی لازم میشه یک مانیتورینگ سنگین روی یک محصول پروداکشن یا یک سرویس تست پیچیده راه بندازید که تاریخچه مصرف حافظه رو نگه دارید اونجا مجبورید کد بزنید ولی واسه کارهای دم دستی در این آپ لینوکسی که فقط هم روی لینوکس و مک جواب میده شبیه htop که مصرف حافظه و پردازنده رو به ازای هر پراسس بصورت لحظهای نشون میده این ابزار مصرف حافظه رو به ازای هر فانکشن نشون میده.
کار دیتایی تو پایتون کرده باشین بسیار دیدین که نشت حافظه اتفاق میافته یا مثلا یک پایپلاین از فانکشنها پشت سر هم روی یک داده فراخوانی میشه براتون مهمه بدونید که هر کدوم از فانکشنها چقدر حافظه مصرف میکنند که اگه بعدا خواستید موازیسازی کنید بدونید چندتا instance از برنامه رو میتونید موازی اجرا کنید یا مثلا اگر برنامهتون مولتیترد هست و یک دفعه کرش میکنه مانیتور کنید کدوم تابع منجر به کرش حافظه میشه.
شما برای همهی اینها به یک memory profiler نیاز داشتید که یا بصورت یک پکیج پایتون بود یا اینکه خودتون با دیزاین پترن دکوریتور پیادهسازیش میکردید.
مشکل اینجا بود که باید برای تکتک فانکشنهایی میخواستید در تمیزترین حالت دکوریتور ست میکردید.
گاهی لازم میشه یک مانیتورینگ سنگین روی یک محصول پروداکشن یا یک سرویس تست پیچیده راه بندازید که تاریخچه مصرف حافظه رو نگه دارید اونجا مجبورید کد بزنید ولی واسه کارهای دم دستی در این آپ لینوکسی که فقط هم روی لینوکس و مک جواب میده شبیه htop که مصرف حافظه و پردازنده رو به ازای هر پراسس بصورت لحظهای نشون میده این ابزار مصرف حافظه رو به ازای هر فانکشن نشون میده.
👍5
Dev Tweet
به به چه ابزاری❤️! کار دیتایی تو پایتون کرده باشین بسیار دیدین که نشت حافظه اتفاق میافته یا مثلا یک پایپلاین از فانکشنها پشت سر هم روی یک داده فراخوانی میشه براتون مهمه بدونید که هر کدوم از فانکشنها چقدر حافظه مصرف میکنند که اگه بعدا خواستید موازیسازی…
ولی همچنان یک چالش رو جواب نمیده!
مموری پروفایل واسه دونستن مصرف لحظهای حافظه خیلی ارزشی نداره! معمولا ارزشش به اینه که بدونید یک تابع در طول اجرائش حداکثر حافظهای که استفاده میکنه چقدره. واسه اینکار من هنوز یک راهحل آماده پیدا نکردم. حتی با کد از داخل برنامه هم نمیتونید این پروفایلینگ رو انجام بدید چون مثلا فرض کنید یک داده خاصی مثه nii.gz یک گیگی رو میخواید لود کنید یک خط از کد شما این داده رو لود میکنه ولی خود این لودر حین اجرائش مصرفش از صفر بایت حافظه شروع میشه به مصرف یک گیگ میرسه(اگر فرض کنیم داده nii.gz در دیسک و مموری یک حجم برابر اشغال میکنه یعنی وقتی تو حافظه لود میشه جای بیشتری نمیگیره) اما ممکنه حین لودش مثلا یک گیگ و بیست مگ حافظه استفاده کنه بعد از پایان لود به حافظه یک گیگ برسه یعنی میخوام بگم در خیلی از موارد اصلا اینطوری نیست مصرف حافظه قبل و بعد از اجرای یک تابع رو حساب کنید بعد از هم کم کنید حداکثر مصرف رو به دست میمیارید، نه اصلا اینطور نیست! ممکنه حین اجرائش پردازشی انجام بده که نیاز به حافظه زیاد داره ولی در اخر استیتی رو return میکنه که کم حافظهتره. در این موارد دیگه اون پترن دیکوریتور جواب نمیده! حتی لاگ کردن تاریخچه مصرف حافظه، ترسیم تاریخچهها جوابگو نیست چون ریزدانگی کافی رو نداره چون لحظهای نیست خط به خطه.
این اپ لینوکسی که معرفی کردم چون داره از بیرون برنامه حافظه رو مانیتور و پروفایل میکنه میتونه تغییرات مصرف حافظه نه تنها قبل و بعد از اجرا هر فانکشن بلکه حین اجرای اون رو هم پروفایل کنه ولی هنوز کار ساز نیست! چون ثبت نمیشه که بتونیم حداکثر مصرف اون تابع رو بدونیم حالا باید بگردیم ببینم این اپ کامندلاین بهمون api واسه ثبت لحظهای حافظه در فایل میده که ازش حداکثر حافظه رو بیرون بکشیم اگه بده مشکل حله! چون میتونه مستقیم به خود اپ bind بشه و فقط اپ پایتونی رو پروفایل کنه.
مموری پروفایل واسه دونستن مصرف لحظهای حافظه خیلی ارزشی نداره! معمولا ارزشش به اینه که بدونید یک تابع در طول اجرائش حداکثر حافظهای که استفاده میکنه چقدره. واسه اینکار من هنوز یک راهحل آماده پیدا نکردم. حتی با کد از داخل برنامه هم نمیتونید این پروفایلینگ رو انجام بدید چون مثلا فرض کنید یک داده خاصی مثه nii.gz یک گیگی رو میخواید لود کنید یک خط از کد شما این داده رو لود میکنه ولی خود این لودر حین اجرائش مصرفش از صفر بایت حافظه شروع میشه به مصرف یک گیگ میرسه(اگر فرض کنیم داده nii.gz در دیسک و مموری یک حجم برابر اشغال میکنه یعنی وقتی تو حافظه لود میشه جای بیشتری نمیگیره) اما ممکنه حین لودش مثلا یک گیگ و بیست مگ حافظه استفاده کنه بعد از پایان لود به حافظه یک گیگ برسه یعنی میخوام بگم در خیلی از موارد اصلا اینطوری نیست مصرف حافظه قبل و بعد از اجرای یک تابع رو حساب کنید بعد از هم کم کنید حداکثر مصرف رو به دست میمیارید، نه اصلا اینطور نیست! ممکنه حین اجرائش پردازشی انجام بده که نیاز به حافظه زیاد داره ولی در اخر استیتی رو return میکنه که کم حافظهتره. در این موارد دیگه اون پترن دیکوریتور جواب نمیده! حتی لاگ کردن تاریخچه مصرف حافظه، ترسیم تاریخچهها جوابگو نیست چون ریزدانگی کافی رو نداره چون لحظهای نیست خط به خطه.
این اپ لینوکسی که معرفی کردم چون داره از بیرون برنامه حافظه رو مانیتور و پروفایل میکنه میتونه تغییرات مصرف حافظه نه تنها قبل و بعد از اجرا هر فانکشن بلکه حین اجرای اون رو هم پروفایل کنه ولی هنوز کار ساز نیست! چون ثبت نمیشه که بتونیم حداکثر مصرف اون تابع رو بدونیم حالا باید بگردیم ببینم این اپ کامندلاین بهمون api واسه ثبت لحظهای حافظه در فایل میده که ازش حداکثر حافظه رو بیرون بکشیم اگه بده مشکل حله! چون میتونه مستقیم به خود اپ bind بشه و فقط اپ پایتونی رو پروفایل کنه.
👍4
از اهمیت مدل جدید 405 میلیارد پارامتری جدید شرکت متا یعنی Llama3.1 همین بس که داره کپ فاصلهی بین مدلهای متن-بسته(closed-source) و وزن-باز(مدلهایی که وزنشان را به همراه کد منتشر میکنند) رو از بین میبره.
همین این اتفاقات تقریبا در یک سال افتاده از آپریل 2023 که جولای 2024
باید منتظر باشیم ببنیم آیا به نقطهای میرسید که خط قرمز و سبز به هم بخورن و خط قرمز از خط سبز عبور کنه!؟ صد البته که خیلی بعیده مخصوصا با این زیرساخت افسانهای که شرکت xAI ایلان ماسک برای مدل جدیدش راه انداخته!
همین این اتفاقات تقریبا در یک سال افتاده از آپریل 2023 که جولای 2024
باید منتظر باشیم ببنیم آیا به نقطهای میرسید که خط قرمز و سبز به هم بخورن و خط قرمز از خط سبز عبور کنه!؟ صد البته که خیلی بعیده مخصوصا با این زیرساخت افسانهای که شرکت xAI ایلان ماسک برای مدل جدیدش راه انداخته!
👍2
Dev Tweet
آیندهی هوش مصنوعی در این رشته توئیت مقایسه جالبی بین روند توسعه سرعت هواپیما و نرخ کلاک cpu با روند توسعه ai انجام داده که نکات خیلی جالبیداره. من چند تا نکتهش رو در ادامه میارم: ۱. مقایسه پیشرفتهای سریع در سرعت هواپیماها در دهه ۱۹۶۰ با پیشرفت فعلی در…
این نمودار حاوی چند نکته است:
1. نکتهای در این پست سابق در موردش مفصل صحبت کردم.
در شش ماه اخیر شامل هیچ جهشی در بهترین عملکرد هوش مصنوعی نیستیم(دقت کنید جهش در دقت و کارائي محصول یک شرکت خاص را نمیگم منظورم جهش در کارائي و دقت بهترین مدل موجوده). یعنی احتمالا به نقطهای رسیدیم که آن بهبودهای جهشی بعد از آپریل 2023 که تازه gpt-4 عرضه شده بود را دیگر نخواهیم داشت. پیشرفت کارائي مدلها بصورت خزنده و جزئي خواهد بود.
2. رقابت در بهترین مدل بین شرکتهای بزرگ بالا گرفته و هر یکی دو ماه جایگاه بهترین مدل بین سه تا شرکت اصلی آنتروپیک و گوگل و OpenAI عوض شده است. به این معنی که دیگر دوره پیشتازی طولانی مدت OpenAI سر اومده و بازیگرهای متنوعتری در بازار LLM دارند قدرتنمایی میکنند.
تازه هنوز Grok خیلی وارد بنچمارکها و عرضه رایگان عمومی نشده!
1. نکتهای در این پست سابق در موردش مفصل صحبت کردم.
در شش ماه اخیر شامل هیچ جهشی در بهترین عملکرد هوش مصنوعی نیستیم(دقت کنید جهش در دقت و کارائي محصول یک شرکت خاص را نمیگم منظورم جهش در کارائي و دقت بهترین مدل موجوده). یعنی احتمالا به نقطهای رسیدیم که آن بهبودهای جهشی بعد از آپریل 2023 که تازه gpt-4 عرضه شده بود را دیگر نخواهیم داشت. پیشرفت کارائي مدلها بصورت خزنده و جزئي خواهد بود.
2. رقابت در بهترین مدل بین شرکتهای بزرگ بالا گرفته و هر یکی دو ماه جایگاه بهترین مدل بین سه تا شرکت اصلی آنتروپیک و گوگل و OpenAI عوض شده است. به این معنی که دیگر دوره پیشتازی طولانی مدت OpenAI سر اومده و بازیگرهای متنوعتری در بازار LLM دارند قدرتنمایی میکنند.
تازه هنوز Grok خیلی وارد بنچمارکها و عرضه رایگان عمومی نشده!
👍2❤1
Dev Tweet
از اهمیت مدل جدید 405 میلیارد پارامتری جدید شرکت متا یعنی Llama3.1 همین بس که داره کپ فاصلهی بین مدلهای متن-بسته(closed-source) و وزن-باز(مدلهایی که وزنشان را به همراه کد منتشر میکنند) رو از بین میبره. همین این اتفاقات تقریبا در یک سال افتاده از آپریل…
نکتهای در مورد open-weight
موقعی که در مورد کد صحبت میکنیم یا کد منبع بسته closed-source است یا منبع باز opensource یعنی یا سورس کد روی گیتهاب یا بیتباکت هست.
اما وقتی در مورد یک مدل AI صحبت میکنیم دو ضلع دیگه هم به جز سورس کد به قضیه اضافه میشه: وزن مدل آموزش دیده و داده آموزش مدل.
شرکتها غیرانتفاعی مثه گوگل معمولا از مدلهاشون مقاله چاپ میکنند و حرفی از پیادهسازی نمیزنند.
نهایتا سورس کد مدلهای proprietary شون رو منتشر میکنند ولی دیگه وزن رو کمتر منتشر میکنند.
و خیلی کمتر مثه mistral و meta میان مقاله + سورس کد + وزن مدل را هم منتشر میکنند.
و خیلی خیلی کمتر مدلها دادگان آموزش خودشون رو همراه سه تای قبلی منتشر میکنند اینا معمولا مدلهای دانشگاهی هستند.
پس به خاطر داشته باشید سطح انتشار اطلاعات در مورد مدلها سه سطحه: مقاله، سورسکد، وزنهای مدل، داده آموزش .
موقعی که در مورد کد صحبت میکنیم یا کد منبع بسته closed-source است یا منبع باز opensource یعنی یا سورس کد روی گیتهاب یا بیتباکت هست.
اما وقتی در مورد یک مدل AI صحبت میکنیم دو ضلع دیگه هم به جز سورس کد به قضیه اضافه میشه: وزن مدل آموزش دیده و داده آموزش مدل.
شرکتها غیرانتفاعی مثه گوگل معمولا از مدلهاشون مقاله چاپ میکنند و حرفی از پیادهسازی نمیزنند.
نهایتا سورس کد مدلهای proprietary شون رو منتشر میکنند ولی دیگه وزن رو کمتر منتشر میکنند.
و خیلی کمتر مثه mistral و meta میان مقاله + سورس کد + وزن مدل را هم منتشر میکنند.
و خیلی خیلی کمتر مدلها دادگان آموزش خودشون رو همراه سه تای قبلی منتشر میکنند اینا معمولا مدلهای دانشگاهی هستند.
پس به خاطر داشته باشید سطح انتشار اطلاعات در مورد مدلها سه سطحه: مقاله، سورسکد، وزنهای مدل، داده آموزش .
👍6
شرطبندی در مورد آیندهی توسعه AI
(الایزر یودکوفسکی در مقابل پاول کریستیانو)
الایزر یودکوفسکی(Eliezer Yudkowsky) و پاول کریستیانو(Paul Christiano)، دو تا از چهرههای سرشناس حوزه ایمنی هوش مصنوعی(AI Safety)، سال 2021 سر آینده AI شرط بستن!
میتونید ماجراش رو در این دو لینک بخونید. (لینک ۱ و لینک ۲)
یودکوفسکی که از بنیانگذاران موسسه تحقیقات هوش ماشینی (Machine Intelligence Research Institute) هست، مدتهاست درباره احتمال وقوع یه سناریوی برخاستن سریع هشدار میده.
از طرف دیگه، کریستیانو که تو زمینه ترازمندی(همراستاسازی) هوش مصنوعی (AI alignment) کار میکنه و همچنین مخترع RLHF (تقویت یادگیری از بازخورد انسانی) که بیشتر به یه مسیر توسعه تدریجیتر معتقده.
موضوع اصلی شرطبندیشون اینه که سرعت پیشرفت قابلیتهای هوش مصنوعی چقدر سریع خواهد بود. این بحث معمولاً با عنوان "سرعتهای برخاستن" (takeoff speeds) مطرح میشه - برخاستن آهسته(Slow Takeoff) در مقابل برخاستن سریع(Hard/Fast Takeoff).
تصور کنید پیشرفت هوش مصنوعی مثل یه سفر به قله کوهه. برخاستن آهسته شبیه یه کوهنوردی تدریجیه، با بهبودهای پیوسته که به جامعه اجازه میده در طول مسیر خودش رو تطبیق بده. اما برخاستن سریع مثل یه پرتاب موشکیه - یه افزایش ناگهانی و احتمالاً نمایی در تواناییهای هوش مصنوعی که میتونه همه رو غافلگیر کنه.
برای اینکه پیشبینیهاشون رو محک بزنن، رو یه چالش مشخص تمرکز کردن: المپیاد جهانی ریاضی (IMO). سوال اینه که آیا تا سال ۲۰۲۵، یه سیستم هوش مصنوعی میتونه در بالاترین سطوح این مسابقه معتبر ریاضی رقابت کنه؟
کریستیانو شرط بسته که پیشرفت سریع اتفاق نمیافته. اون پیشبینی کرده که شانس اینکه یه هوش مصنوعی بین سالهای ۲۰۲۲ تا ۲۰۲۵ مدال طلای IMO رو ببره، کمتر از ۸ درصده. حتی درباره حل سختترین مسئله توسط AI هم بدبینتره و این احتمال رو زیر ۴ درصد میدونه.
یودکوفسکی اما طبق معمول به پتانسیل هوش مصنوعی خوشبینتره. اون شرط بسته که حداقل ۱۶ درصد احتمال داره که یه AI تا سال ۲۰۲۵ قابلیت فنی کسب مدال طلا رو داشته باشه.
این پیشبینیها برای سال 2021 است.
چیزی که این شرطبندی رو جذاب میکنه، پیامدهای احتمالیشه. اگه واقعاً یه هوش مصنوعی اون مدال طلا رو بگیره، این فقط یه برد ساده برای یودکوفسکی تو این شرط دوستانه نیست. میتونه نشونهای از سرعت بالاتر توسعه هوش مصنوعی نسبت به انتظارات خیلیها باشه. کریستیانو گفته که همچین نتیجهای میتونه دیدگاهش رو به طور قابل توجهی تغییر بده و احتمالاً تخمینش از احتمال یه سناریوی برداشت سریع رو تا دو برابر افزایش بده.
کریستیانو قبلاً گفته بود اگه تا سال ۲۰۲۵ شاهد کسب مدال طلای IMO توسط یه AI باشه، احتمال برخاستن سریع رو از ۳۰٪ به ۵۰٪ افزایش میده.
سال 2024 گوگل دیپمایند (Google DeepMind) هم فقط یک سؤال با این دستاورد فاصله داشت.
و حالا، به نظر میرسه که این اتفاق خیلی زودتر از انتظار رخ داده! سام (Sam) آلتمن، مدیرعامل اوپنای (OpenAI)، به تازگی به طور تلویحی اشاره کرده که سیستم هوش مصنوعی اونها به سطح مدال طلای المپیاد جهانی ریاضی رسیده.
این پیشرفت سریع میتونه نشوندهنده احتمال بیشتر یه "برخاستن سریع" باشه - یعنی پیشرفت هوش مصنوعی عمومی (AGI) در عرض چند دقیقه تا چند ماه، به جای سالها یا دههها.
برخاستنهای سریع نگرانکننده هستن چون پیشبینیشون خیلی سختتره. نهادهای انسانی تقریباً هیچ زمانی برای تطبیق با نرخهای دیوانهوار تغییر ندارن.
حدود ۳۰٪ از محققان ایمنی هوش مصنوعی فکر میکنن که برخاستن سریع محتملتر از برخاستن آهستهست.
البته باید توجه داشت که ممکنه سام آلتمن در حال شوخی کردن باشه، اما اگه این خبر واقعیت داشته باشه، میتونه نقطه عطف مهمی در توسعه هوش مصنوعی باشه.
تصویر ضمیمه شده نشون میده که سیستم هوش مصنوعی اوپنای با ۳۱ امتیاز، بالاتر از مدال نقره (۲۸ امتیاز) و در سطح مدال طلای IMO ۲۰۲۴ قرار گرفته.
(الایزر یودکوفسکی در مقابل پاول کریستیانو)
الایزر یودکوفسکی(Eliezer Yudkowsky) و پاول کریستیانو(Paul Christiano)، دو تا از چهرههای سرشناس حوزه ایمنی هوش مصنوعی(AI Safety)، سال 2021 سر آینده AI شرط بستن!
میتونید ماجراش رو در این دو لینک بخونید. (لینک ۱ و لینک ۲)
یودکوفسکی که از بنیانگذاران موسسه تحقیقات هوش ماشینی (Machine Intelligence Research Institute) هست، مدتهاست درباره احتمال وقوع یه سناریوی برخاستن سریع هشدار میده.
از طرف دیگه، کریستیانو که تو زمینه ترازمندی(همراستاسازی) هوش مصنوعی (AI alignment) کار میکنه و همچنین مخترع RLHF (تقویت یادگیری از بازخورد انسانی) که بیشتر به یه مسیر توسعه تدریجیتر معتقده.
موضوع اصلی شرطبندیشون اینه که سرعت پیشرفت قابلیتهای هوش مصنوعی چقدر سریع خواهد بود. این بحث معمولاً با عنوان "سرعتهای برخاستن" (takeoff speeds) مطرح میشه - برخاستن آهسته(Slow Takeoff) در مقابل برخاستن سریع(Hard/Fast Takeoff).
تصور کنید پیشرفت هوش مصنوعی مثل یه سفر به قله کوهه. برخاستن آهسته شبیه یه کوهنوردی تدریجیه، با بهبودهای پیوسته که به جامعه اجازه میده در طول مسیر خودش رو تطبیق بده. اما برخاستن سریع مثل یه پرتاب موشکیه - یه افزایش ناگهانی و احتمالاً نمایی در تواناییهای هوش مصنوعی که میتونه همه رو غافلگیر کنه.
برای اینکه پیشبینیهاشون رو محک بزنن، رو یه چالش مشخص تمرکز کردن: المپیاد جهانی ریاضی (IMO). سوال اینه که آیا تا سال ۲۰۲۵، یه سیستم هوش مصنوعی میتونه در بالاترین سطوح این مسابقه معتبر ریاضی رقابت کنه؟
کریستیانو شرط بسته که پیشرفت سریع اتفاق نمیافته. اون پیشبینی کرده که شانس اینکه یه هوش مصنوعی بین سالهای ۲۰۲۲ تا ۲۰۲۵ مدال طلای IMO رو ببره، کمتر از ۸ درصده. حتی درباره حل سختترین مسئله توسط AI هم بدبینتره و این احتمال رو زیر ۴ درصد میدونه.
یودکوفسکی اما طبق معمول به پتانسیل هوش مصنوعی خوشبینتره. اون شرط بسته که حداقل ۱۶ درصد احتمال داره که یه AI تا سال ۲۰۲۵ قابلیت فنی کسب مدال طلا رو داشته باشه.
این پیشبینیها برای سال 2021 است.
چیزی که این شرطبندی رو جذاب میکنه، پیامدهای احتمالیشه. اگه واقعاً یه هوش مصنوعی اون مدال طلا رو بگیره، این فقط یه برد ساده برای یودکوفسکی تو این شرط دوستانه نیست. میتونه نشونهای از سرعت بالاتر توسعه هوش مصنوعی نسبت به انتظارات خیلیها باشه. کریستیانو گفته که همچین نتیجهای میتونه دیدگاهش رو به طور قابل توجهی تغییر بده و احتمالاً تخمینش از احتمال یه سناریوی برداشت سریع رو تا دو برابر افزایش بده.
کریستیانو قبلاً گفته بود اگه تا سال ۲۰۲۵ شاهد کسب مدال طلای IMO توسط یه AI باشه، احتمال برخاستن سریع رو از ۳۰٪ به ۵۰٪ افزایش میده.
سال 2024 گوگل دیپمایند (Google DeepMind) هم فقط یک سؤال با این دستاورد فاصله داشت.
و حالا، به نظر میرسه که این اتفاق خیلی زودتر از انتظار رخ داده! سام (Sam) آلتمن، مدیرعامل اوپنای (OpenAI)، به تازگی به طور تلویحی اشاره کرده که سیستم هوش مصنوعی اونها به سطح مدال طلای المپیاد جهانی ریاضی رسیده.
این پیشرفت سریع میتونه نشوندهنده احتمال بیشتر یه "برخاستن سریع" باشه - یعنی پیشرفت هوش مصنوعی عمومی (AGI) در عرض چند دقیقه تا چند ماه، به جای سالها یا دههها.
برخاستنهای سریع نگرانکننده هستن چون پیشبینیشون خیلی سختتره. نهادهای انسانی تقریباً هیچ زمانی برای تطبیق با نرخهای دیوانهوار تغییر ندارن.
حدود ۳۰٪ از محققان ایمنی هوش مصنوعی فکر میکنن که برخاستن سریع محتملتر از برخاستن آهستهست.
البته باید توجه داشت که ممکنه سام آلتمن در حال شوخی کردن باشه، اما اگه این خبر واقعیت داشته باشه، میتونه نقطه عطف مهمی در توسعه هوش مصنوعی باشه.
تصویر ضمیمه شده نشون میده که سیستم هوش مصنوعی اوپنای با ۳۱ امتیاز، بالاتر از مدال نقره (۲۸ امتیاز) و در سطح مدال طلای IMO ۲۰۲۴ قرار گرفته.
Telegram
Dev Tweet Media
❤1
CREATE OR REPLACE FUNCTION normalize_arabic_persian_text(input_text TEXT)
RETURNS TEXT AS $$
DECLARE
result TEXT := '';
i INT;
current_char TEXT;
prev_char TEXT := '';
next_char TEXT := '';
in_word BOOLEAN := FALSE;
BEGIN
-- First, convert to isolated forms and map to Persian equivalents
FOR i IN 1..length(input_text) LOOP
current_char := substring(input_text FROM i FOR 1);
IF i < length(input_text) THEN
next_char := substring(input_text FROM i+1 FOR 1);
ELSE
next_char := '';
END IF;
-- Alef and hamza
IF current_char = ANY(ARRAY[E'\uFE81'::TEXT, E'\uFE83'::TEXT, E'\uFE85'::TEXT, E'\uFE87'::TEXT, E'\uFE89'::TEXT, E'\uFE8D'::TEXT, E'\u0622'::TEXT, E'\u0623'::TEXT, E'\u0625'::TEXT, E'\u0627'::TEXT, E'\u0671'::TEXT]) THEN
current_char := E'\u0627'; -- All forms of alef to ا
-- Beh
ELSIF current_char = ANY(ARRAY[E'\uFE8F'::TEXT, E'\uFE91'::TEXT, E'\uFE93'::TEXT, E'\u0628'::TEXT]) THEN
current_char := E'\u0628'; -- ب
-- Teh
ELSIF current_char = ANY(ARRAY[E'\uFE95'::TEXT, E'\uFE97'::TEXT, E'\uFE99'::TEXT, E'\u062A'::TEXT]) THEN
current_char := E'\u062A'; -- ت
-- Theh
ELSIF current_char = ANY(ARRAY[E'\uFE99'::TEXT, E'\uFE9B'::TEXT, E'\uFE9D'::TEXT, E'\u062B'::TEXT]) THEN
current_char := E'\u062B'; -- ث
-- Jeem
ELSIF current_char = ANY(ARRAY[E'\uFE9D'::TEXT, E'\uFE9F'::TEXT, E'\uFEA1'::TEXT, E'\u062C'::TEXT]) THEN
current_char := E'\u062C'; -- ج
-- Hah
ELSIF current_char = ANY(ARRAY[E'\uFEA1'::TEXT, E'\uFEA3'::TEXT, E'\uFEA5'::TEXT, E'\u062D'::TEXT]) THEN
current_char := E'\u062D'; -- ح
-- Khah
ELSIF current_char = ANY(ARRAY[E'\uFEA5'::TEXT, E'\uFEA7'::TEXT, E'\uFEA9'::TEXT, E'\u062E'::TEXT]) THEN
current_char := E'\u062E'; -- خ
-- Dal
ELSIF current_char = ANY(ARRAY[E'\uFEA9'::TEXT, E'\uFEAB'::TEXT, E'\u062F'::TEXT]) THEN
current_char := E'\u062F'; -- د
-- Thal
ELSIF current_char = ANY(ARRAY[E'\uFEAB'::TEXT, E'\uFEAD'::TEXT, E'\u0630'::TEXT]) THEN
current_char := E'\u0630'; -- ذ
-- Reh
ELSIF current_char = ANY(ARRAY[E'\uFEAD'::TEXT, E'\uFEAF'::TEXT, E'\u0631'::TEXT]) THEN
current_char := E'\u0631'; -- ر
-- Zain
ELSIF current_char = ANY(ARRAY[E'\uFEAF'::TEXT, E'\uFEB1'::TEXT, E'\u0632'::TEXT]) THEN
current_char := E'\u0632'; -- ز
-- Seen
ELSIF current_char = ANY(ARRAY[E'\uFEB1'::TEXT, E'\uFEB3'::TEXT, E'\uFEB5'::TEXT, E'\u0633'::TEXT]) THEN
current_char := E'\u0633'; -- س
-- Sheen
ELSIF current_char = ANY(ARRAY[E'\uFEB5'::TEXT, E'\uFEB7'::TEXT, E'\uFEB9'::TEXT, E'\u0634'::TEXT]) THEN
current_char := E'\u0634'; -- ش
-- Sad
ELSIF current_char = ANY(ARRAY[E'\uFEB9'::TEXT, E'\uFEBB'::TEXT, E'\uFEBD'::TEXT, E'\u0635'::TEXT]) THEN
current_char := E'\u0635'; -- ص
-- Dad
ELSIF current_char = ANY(ARRAY[E'\uFEBD'::TEXT, E'\uFEBF'::TEXT, E'\uFEC1'::TEXT, E'\u0636'::TEXT]) THEN
current_char := E'\u0636'; -- ض
-- Tah
ELSIF current_char = ANY(ARRAY[E'\uFEC1'::TEXT, E'\uFEC3'::TEXT, E'\uFEC5'::TEXT, E'\u0637'::TEXT]) THEN
current_char := E'\u0637'; -- ط
-- Zah
ELSIF current_char = ANY(ARRAY[E'\uFEC5'::TEXT, E'\uFEC7'::TEXT, E'\uFEC9'::TEXT, E'\u0638'::TEXT]) THEN
current_char := E'\u0638'; -- ظ
-- Ain
ELSIF current_char = ANY(ARRAY[E'\uFEC9'::TEXT, E'\uFECB'::TEXT, E'\uFECD'::TEXT, E'\u0639'::TEXT]) THEN
current_char := E'\u0639'; -- ع
-- Ghain
ELSIF current_char = ANY(ARRAY[E'\uFECD'::TEXT, E'\uFECF'::TEXT, E'\uFED1'::TEXT, E'\u063A'::TEXT]) THEN
current_char := E'\u063A'; -- غ
-- Feh
ELSIF current_char = ANY(ARRAY[E'\uFED1'::TEXT, E'\uFED3'::TEXT, E'\uFED5'::TEXT, E'\u0641'::TEXT]) THEN
current_char := E'\u0641'; -- ف
-- Qaf
ELSIF current_char = ANY(ARRAY[E'\uFED5'::TEXT, E'\uFED7'::TEXT, E'\uFED9'::TEXT, E'\u0642'::TEXT]) THEN
current_char := E'\u0642'; -- ق
-- Kaf
ELSIF current_char = ANY(ARRAY[E'\uFED9'::TEXT, E'\uFEDB'::TEXT, E'\uFEDD'::TEXT, E'\u0643'::TEXT]) THEN
current_char := E'\u06A9'; -- ک (Persian kaf)
-- Lam
ELSIF current_char = ANY(ARRAY[E'\uFEDD'::TEXT, E'\uFEDF'::TEXT, E'\uFEE1'::TEXT, E'\u0644'::TEXT]) THEN
current_char := E'\u0644'; -- ل
-- Meem
ELSIF current_char = ANY(ARRAY[E'\uFEE1'::TEXT, E'\uFEE3'::TEXT, E'\uFEE5'::TEXT, E'\u0645'::TEXT]) THEN
current_char := E'\u0645'; -- م
-- Noon
ELSIF current_char = ANY(ARRAY[E'\uFEE5'::TEXT, E'\uFEE7'::TEXT, E'\uFEE9'::TEXT, E'\u0646'::TEXT]) THEN
current_char := E'\u0646'; -- ن
-- Heh
ELSIF current_char = ANY(ARRAY[E'\uFEE9'::TEXT, E'\uFEEB'::TEXT, E'\uFEED'::TEXT, E'\u0647'::TEXT, E'\u06C0'::TEXT]) THEN
current_char := E'\u0647'; -- ه
-- Waw
ELSIF current_char = ANY(ARRAY[E'\uFEED'::TEXT, E'\uFEEF'::TEXT, E'\u0648'::TEXT]) THEN
current_char := E'\u0648'; -- و
-- Yeh
ELSIF current_char = ANY(ARRAY[E'\uFEF1'::TEXT, E'\uFEF3'::TEXT, E'\uFEF4'::TEXT, E'\u0649'::TEXT, E'\u064A'::TEXT, E'\uFEF5'::TEXT]) THEN
current_char := E'\u06CC'; -- ی (Persian yeh)
-- Persian specific letters
ELSIF current_char = ANY(ARRAY[E'\uFB56'::TEXT, E'\uFB57'::TEXT, E'\uFB58'::TEXT, E'\uFB59'::TEXT, E'\u067E'::TEXT]) THEN
current_char := E'\u067E'; -- پ (peh)
ELSIF current_char = ANY(ARRAY[E'\uFB7A'::TEXT, E'\uFB7B'::TEXT, E'\uFB7C'::TEXT, E'\uFB7D'::TEXT, E'\u0686'::TEXT]) THEN
current_char := E'\u0686'; -- چ (cheh)
ELSIF current_char = ANY(ARRAY[E'\uFB8A'::TEXT, E'\uFB8B'::TEXT, E'\u0698'::TEXT]) THEN
current_char := E'\u0698'; -- ژ (jeh)
ELSIF current_char = ANY(ARRAY[E'\uFB92'::TEXT, E'\uFB93'::TEXT, E'\uFB94'::TEXT, E'\uFB95'::TEXT, E'\u06AF'::TEXT]) THEN
current_char := E'\u06AF'; -- گ (gaf)
-- Additional Arabic letters not commonly used in Persian
ELSIF current_char = ANY(ARRAY[E'\u0629'::TEXT, E'\uFE93'::TEXT, E'\uFE94'::TEXT]) THEN
current_char := E'\u0647'; -- ة (teh marbuta) to ه (heh)
ELSIF current_char = ANY(ARRAY[E'\u0624'::TEXT, E'\uFE85'::TEXT, E'\uFE86'::TEXT]) THEN
current_char := E'\u0648'; -- ؤ (waw with hamza) to و (waw)
ELSIF current_char = ANY(ARRAY[E'\u0626'::TEXT, E'\uFE89'::TEXT, E'\uFE8A'::TEXT, E'\uFE8B'::TEXT, E'\uFE8C'::TEXT]) THEN
current_char := E'\u06CC'; -- ئ (yeh with hamza) to ی (Persian yeh)
-- Additional special cases
ELSIF current_char = E'\u0640'::TEXT THEN
current_char := ''; -- Remove tatweel (kashida)
ELSIF current_char = E'\uFEFB'::TEXT OR current_char = E'\uFEFC'::TEXT THEN
current_char := E'\u0644\u0627'; -- لا (lam-alef ligature) to separate ل and ا
ELSIF current_char = E'\uFEF5'::TEXT OR current_char = E'\uFEF6'::TEXT THEN
current_char := E'\u0644\u0622'; -- لآ (lam-alef madda ligature) to separate ل and آ
ELSIF current_char = E'\uFEF7'::TEXT OR current_char = E'\uFEF8'::TEXT THEN
current_char := E'\u0644\u0623'; -- لأ (lam-alef hamza above ligature) to separate ل and أ
ELSIF current_char = E'\uFEF9'::TEXT OR current_char = E'\uFEFA'::TEXT THEN
current_char := E'\u0644\u0625'; -- لإ (lam-alef hamza below ligature) to separate ل and إ
ELSIF current_char = E'\u0621'::TEXT THEN
current_char := ''; -- Remove standalone hamza
-- Special case for لا
ELSIF current_char = E'\u0644'::TEXT AND next_char = E'\u0627'::TEXT THEN
current_char := E'\u0644\u0627'; -- لا
i := i + 1; -- Skip next character
-- Special case for لآ
👍1
ELSIF current_char = E'\u0644'::TEXT AND next_char = E'\u0622'::TEXT THEN
current_char := E'\u0644\u0622'; -- لآ
i := i + 1; -- Skip next character
END IF;
-- Append the character to the result, preserving word boundaries
IF current_char != '' THEN
IF NOT in_word THEN
-- Add a space only if it's not the first character
IF result != '' THEN
result := result || ' ';
END IF;
in_word := TRUE;
END IF;
result := result || current_char;
END IF;
prev_char := current_char;
END LOOP;
-- Remove diacritical marks
result := translate(result,
E'\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\u0670\u0655\u0656\u0653\u0654\u0610\u0611\u0612\u0613\u0614\u0615\u0616\u0617\u0618\u0619\u061A\u06D6\u06D7\u06D8\u06D9\u06DA\u06DB\u06DC\u06DD\u06DE\u06DF\u06E0\u06E1\u06E2\u06E3\u06E4\u06E5\u06E6\u06E7\u06E8\u06E9\u06EA\u06EB\u06EC\u06ED',
repeat('', 48)
);
-- The above line removes the following diacritical marks:
-- \u064B (Fathatan), \u064C (Dammatan), \u064D (Kasratan), \u064E (Fatha), \u064F (Damma), \u0650 (Kasra),
-- \u0651 (Shadda), \u0652 (Sukun), \u0670 (Supernoscript Alef), \u0655 (Hamza Below), \u0656 (Subnoscript Alef),
-- \u0653 (Maddah Above), \u0654 (Hamza Above), \u0610-\u061A (Arabic signs),
-- \u06D6-\u06ED (Arabic small high ligatures and other marks)
-- Remove multiple spaces
result := regexp_replace(result, '\s+', ' ', 'g');
-- This removes any sequence of one or more whitespace characters (\s+)
-- and replaces it with a single space
-- Trim leading and trailing spaces
result := trim(both from result);
-- 'both' removes spaces from both the beginning and end of the string
-- This includes spaces, tabs, newlines, and other whitespace characters
RETURN result;
END;
$$ LANGUAGE plpgsql;
سه تا پیام بالا رو ببینید!
یک تابع sql است!
این تابع یکی از کاملترین normalizerها یا sanitizerهای متن فارسیه!
اگر با دیتابیس اپلیکیشن فارسی کرده باشید حتما دیدید که کاربرای فارسی زبان با کیبوردهای مختلف اطلاعاتشون رو وارد میکنند.
اشکالی که پیش میاد شما کلماتی دارید(مثلا نام و نام خانوادگی) که ظاهر برابر دارند ولی چون unicode کاراکتراشون با هم برابر نیست اون دو تا کلمه مساوی نیستند.
کارکردهایی نرمالیزیشن این فاکشن خیلی بیشتر از تبدیل کاراکتره.
لذا خوبه این رو یه جایی ذخیره داشته باشید احتمال زیاد به کارتون میاد.
این کوئری خیلی طولانی که نوشتنش واقعا دو سه روزی طول میکشه به لطف Sonnet3.5-200K تولید شده.
یک تابع sql است!
این تابع یکی از کاملترین normalizerها یا sanitizerهای متن فارسیه!
اگر با دیتابیس اپلیکیشن فارسی کرده باشید حتما دیدید که کاربرای فارسی زبان با کیبوردهای مختلف اطلاعاتشون رو وارد میکنند.
اشکالی که پیش میاد شما کلماتی دارید(مثلا نام و نام خانوادگی) که ظاهر برابر دارند ولی چون unicode کاراکتراشون با هم برابر نیست اون دو تا کلمه مساوی نیستند.
کارکردهایی نرمالیزیشن این فاکشن خیلی بیشتر از تبدیل کاراکتره.
لذا خوبه این رو یه جایی ذخیره داشته باشید احتمال زیاد به کارتون میاد.
این کوئری خیلی طولانی که نوشتنش واقعا دو سه روزی طول میکشه به لطف Sonnet3.5-200K تولید شده.
👍3
SELECT normalize_arabic_persian_text(E'نَصّ حَكيمٌ لَهُ سِرٌّ قَاطِعٌ وَذُو شَأنٍ عَظِيمٍ مَكتُوبٌ عَلَى ثَوْبٍ أخْضَرَ وَمُغَلَّفٌ بِجِلْدٍ أزْرَق');
خروجی این تابع sql
نص حکیم له سر قاطع وذو شان عظیم مکتوب علی ثوب اخضر ومغلف بجلد ازرق