Nima Momeni
Nima Momeni
خواندن ۱۱ دقیقه·۱ سال پیش

GPTZero چیست؟ چگونه طراحی شده است؟

امروزه هوش مصنوعی ChatGPT باعث انقلاب بزرگی در تکنولوژی شده، خیلی از کارها را راحتتر کرده و باعث استقبال زیادی از سوی مردم شده و سایت ها و اپلیکیشن های مختلفی به کمک این تکنولوژی به وجود آمدند. در نقطه مقابل بد نیست یک نگاهی به سایت GPTZero.me بندازیم. این سایت توسط چند دانشجوی چینی درست شده و هدف این سایت تشخیص متن نوشته شده توسط انسان یا ChatGPT هست. اگر از علاقمندان یادگیری ماشین هستید، در ادامه توضیحاتی که برای الگوریتم و عملکرد این سایت خواهم داد برایتان جالب خواهد بود.

همه ما با مبحث احتمالات آشنا هستیم. احتمالات به احتمال وقوع یک رویداد یا نتیجه خاص بر اساس تحلیل مدل از داده های موجود اشاره دارد و مثلاً وقتی می خواهیم تصمیمی بگیریم، نتایج مختلف را می سنجیم و انتخاب آگاهانه می کنیم. احتمالات خروجی معمولاً به صورت مجموعه‌ای از مقادیر بیان می‌شوند که در مجموع 1 هست و هر مقدار نشان‌دهنده احتمال یک نتیجه خاص هست؛ مثلاً می خواهیم بدانیم که یک ایمیل اسپم هست یا نه. که در این صورت احتمالات ممکن است اینجوری باشد:

اسپم بودن ایمیل 0.8 و اسپم نبودن ایمیل 0.2 که مجموعشان برابر 1 هست.

پس در این صورت مدل می تواند اسپم بودن ایمیل را پیش بینی کند و این احتمالات خروجی به داده های آموزشی مدل و ویژگی های مدل بستگی دارد.

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

سایت GPTZero هم از احتمالات مسثتنی نیست! این سایت از دو مبحثی به نام "مدل های زبان بزرگ" یا "Large Language Models (LLMs)" و "شبکه های عصبی عمیق" یا "Deep Neural Network (DNN)" استفاده می کند که وابسته به احتمالات هستند که هر کدام را در ادامه به صورت خیلی ساده توضیح خواهم داد. پس سراغ توضیحات می رویم:

احتمالاً دیده اید که وقتی یک کلمه ای را در موتور جستجوگر گوگل تایپ می کنید، گوگل ادامه را با کلماتی برای شما پیشنهاد می‌دهد. این قابلیت بر اساس داده هایی است که هزاران کاربر دیگر آن را جستجو کردند و اگر مثلاً گوگل برای شما 5 پیشنهاد داد، این 5 پیشنهاد بر اساس بیشترین احتمال مرتب شده و نشان داده می شود.

بنابراین تنها هدفی که در مدلسازی زبان وجود دارد، این است که به هر جمله یک احتمال اختصاص دهیم. قدم بعدی، معنادار کردن این جملات هست به عنوان مثال، ما در زبان انگلیسی بیش از 100هزار کلمه داریم و یک جمله معمولی حدود 10 کلمه را داراست که به معنای ترکیب 10 به توان 50 (10تا 100هزارتا!) است. بنابراین برای مدلسازی زبان، ما باید بیش از شمارش جملاتی که از قبل وجود داشته اند، کارهای بیشتری انجام دهیم. باید چیزهایی مثل دستور زبان و استایل زبان به نحوی مدلسازی کنیم.

در اینجا ما نمونه ای شعر از یک خواننده آمریکایی (Bob Dylan: Tangled Up in Blue) داریم:

Early one morning the sun was shining / I was laying in bed

Wondering if she'd changed at all / If her hair was still red

بیایید سعی کنیم این جمله را بسازیم! یعنی یک مدل زبانی که می تواند مثل همین خواننده (باب دیلن) بنویسد! ما با در نظر گرفتن این متن، به عنوان یک سری زمانی شروع می کنیم که در آن هر کلمه به کلمه قبلی بستگی دارد:

متوجه می شویم که کلمه was سه بار ظاهر شده است:

حال بیایید هر سه کلمه را در یک مورد ادغام کرده و سری را به یک گراف تبدیل کنیم:

کلمه ی دیگری هم که تکرار شده، کلمه if هست که دوتا از آن وجود دارد.

این دو را نیز با هم ادغام می کنیم:

اگر احتمال ها را به یال ها اضافه کنیم، تبدیل به یک مدل زبان می شود:

می بینیم اگر ما از کلمه Early شروع کنیم و به سمت راست حرکت کنیم، می توانیم از آن برای تولید متن در سبک باب دیلن استفاده کنیم.

حال بیایید یک عبارت کاملاً جدید ایجاد کنیم که در آهنگ وجود ندارد. این بار از کلمه the شروع می‌کنیم و شاخه ها را دنبال می‌کنیم:

یا به عنوان مثال دیگر:

تا اینجا نتایج خیلی خوب و معنادار بودند و هیچ ایرادی نداشتند. اما مسیرهای دیگری وجود دارد که نتایج عجیبی می‌دهند و بیشتر آن‌ها مزخرف تولید می‌کنند:

چگونه می توان این را بهتر کرد؟ برای شروع ما می‌توانیم از متن‌های بسیار زیادی برای ساخت مدل خود استفاده کنیم. اگر مدل خودمان را با استفاده از کل متن آهنگ بسازیم، چیزی که به دست خواهد آمد به صورت زیر خواهد بود:

( she was standing on the side of my mind ...

side of my shoes heading out of my face ...

one of my chair said our lives together ... )

اگر متوجه معنی جملات شده باشید، کاملاً عجیب به نظر می‌رسد! مشکل واقعی اینجاست که مدل ما خیلی ساده است! چون فرض می‌کند که هر کلمه فقط به کلمه قبلی بستگی دارد! می‌توان این را به عنوان یک احتمال شرطی نوشت:

یعنی احتمال کلمه فعلی Xn مشروط به کلمه قبلی Xn-1 است. می‌توانیم این حالت را بهبود بخشیم اگر به جای دو کلمه، به سه کلمه نگاه کنیم! برای این کار یک جدول از سه گانه های متوالی می‌سازیم (که ترایگرم نامیده می‌شوند):

و می‌توان از این ترایگرم‌ها در تعریف احتمالات کلمه بعدی بر اساس دو کلمه قبلی استفاده شود:

نتایج تولید متن را دوباره می‌توانیم مشاهده کنیم:

نتایج بهتر شدند ولی هنوز عالی نیستند چون مشکل این است که این کلمات می‌توانند وابستگی‌های خیلی طولانی داشته باشند! برای مثال در اینجا کلمه red به hair مربوط است که سه کلمه عقب است.

ولی با کلمه bed نیز که 13 کلمه عقب است هم قافیه است! اگر این قافیه‌ها را نادیده بگیریم، آهنگ اصلاً کار نمی‌کند.

بنابراین ما باید توابعی مانند این یا حتی بیشتر را برای نمایش دقیق زبان مدل کنیم:

و این توابع بسیار پیچیده هستند. هیچ راهی وجود ندارد که بتوانیم این را دقیقاً مدل سازی کنیم، اما می توانیم سعی کنیم آن را تقریب کنیم، روش های مختلفی برای تقریب یک تابع وجود دارد: ممکن است در مورد سری فوریه شنیده باشید که تابعی را با استفاده از سینوس و کسینوس یا سری تیلور که مجموع چندجمله‌ای است، تقریب می‌کند. این‌ها هر دو تقریب‌کننده جهانی هستند و می‌توانند تقریباً هر تابعی را تقریب بزنند.

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

بیایید مثالی را برای تقریب‌کننده جهانی شبکه‌های عصبی امتحان کنیم:

این تابع را می‌خواهیم تقریب بزنیم:

ما از این حالت پایین استفاده خواهیم کرد که دارای پنج گره و هشت وزن (w) است:

یک موقعیت فرضی x را روی نمودار انتخاب می‌کنیم.

و آن را به شبکه ارسال می‌کنیم.

لایه اول x را کپی می‌کند و هر کپی را با وزن متفاوتی ضرب می‌کند. سپس هر کپی وزن دار از طریق یک تابع فعال سازی منحنی S شکل به نام سیگموئید عبور داده می شود که در این مورد در وزن جدید ضرب می شود سپس آن را با هم جمع می‌کنیم.

نتیجه تقریب ما f(x) است که ما آن را y می نامیم و می‌توانیم آن را رسم کنیم تا ببینیم چقدر از تابعی که می‌خواهیم جاسازی کنیم فاصله دارد. این خطای ماست:

می‌توان مشاهده کرد که اختلاف بزرگ است به این دلیل که وزن‌ها به طور تصادفی تولید شده‌اند. بنابراین این فقط یک نقطه داده است که ما می توانیم مقادیر X زیادی را به شبکه خود ارسال کنیم تا این منحنی قرمز را تولید کنیم:

اگر بخواهیم دقیق‌تر بررسی کنیم، یک تابع خطا تعریف می‌کنیم که همه این تفاوت ها را بین مقادیر منحنی قرمز و آبی جمع کند.

ما برای به روزرسانی وزنه ها از این خطاها استفاده خواهیم کرد که این آموزش شبکه نامیده می‌شود و اگر این مراحل بروزرسانی را هزاران بار تکرار کنیم، به تناسب بسیار خوبی می‌رسیم.

ما می توانیم تابع انرژی خود را به عنوان یک چشم انداز (landscape) در نظر بگیریم. هدف ما پیدا کردن پایین ترین نقطه حوضه است.

ما چند نقطه داریم که با گرادیان های منفی هستند که در سراشیبی قرار دارند.

اکنون فقط می توانید گرادیان ها را دنبال کنید تا از تپه پایین بیاید:

به این، گرادیان کاهشی (Gradient Descent) گفته می شود. که این نحوه بهینه‌سازی شبکه‌های عصبی است.

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

این یک بردار با هشت مشتقات جزئی برای هر وزن است. به نظر می رسد که برای محاسبه شبکه های عصبی بسیار ساده است و می توان آن را در یک مسیر از آخر به اولِ شبکه انجام داد.

این فرآیند محاسبه مشتقات جزئی در یک شبکه، پس‌انتشار یا انتشار معکوس نامیده می شود و این سیستم زحمتکش، شبکه های عصبی است.

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

خب، شبکه ای وجود دارد که می تواند این کار را انجام دهد، اما به عنوان یک قیاس به ظرفیت کافی نیاز دارد. فرض کنید ما سعی کردیم منحنی آبی خود را با این شبکه که فقط چهار وزن دارد، تطبیق دهیم:

نمی تواند آن ضربه دوم را جا بیاندازد! زیرا ظرفیت کافی در شبکه وجود ندارد. پس تصمیمات طراحی مهم هستند، مثلاً از یک تابع فعال‌سازی متفاوت مثل ReLUs استفاده کنیم که بسیار محبوب هستند و بازسازی‌های خطی تکه‌ای را ارائه می‌کنند.

بنابراین شما به تعداد بیشتری از آنها نیاز دارید تا با یک تابع منحنی مانند این مطابقت داشته باشند.

پس شبکه های عصبی مصنوعی یا ANN یا سیستم های ارتباط گرا، سیستم های محاسباتی هستند که یاد می گیرند (به تدریج توانایی خود را بهبود می بخشند) با در نظر گرفتن مثال هایی، به طور کلی بدون برنامه نویسی ویژه کار، وظایف را انجام دهند. به عنوان مثال، در تشخیص تصویر، آنها ممکن است یاد بگیرند که تصاویر حاوی گربه را با تجزیه و تحلیل تصاویر نمونه که به صورت دستی با عنوان "گربه" یا "بدون گربه" برچسب گذاری شده اند و با استفاده از نتایج تحلیلی برای شناسایی گربه ها در تصاویر دیگر، شناسایی کنند. آنها بیشترین کاربرد را در برنامه هایی پیدا کرده اند که بیان آنها با یک الگوریتم رایانه سنتی با استفاده از برنامه نویسی مبتنی بر قانون دشوار است.

یک ANN بر اساس مجموعه ای از واحدهای متصل به نام نورون های مصنوعی (مشابه نورون های بیولوژیکی در یک مغز بیولوژیکی) است. به طور معمول، نورون ها در لایه ها سازماندهی می شوند. لایه های مختلف ممکن است انواع مختلفی از تبدیل ها را در ورودی های خود انجام دهند. سیگنال ها از اولین لایه (ورودی)، به آخرین لایه (خروجی)، احتمالاً پس از چندین بار عبور از لایه ها، منتقل می شوند.

در این میان، شبکه عصبی عمیق (DNN) یک شبکه عصبی مصنوعی (ANN) با چندین لایه بین لایه‌های ورودی و خروجی است. انواع مختلفی از شبکه های عصبی وجود دارد و اجزای آن به عنوان یک کل شبیه به مغز انسان عمل می کنند و می توانند مانند هر الگوریتم ML دیگری آموزش داده شوند.

به عنوان مثال، یک DNN که برای تشخیص نژادهای سگ آموزش دیده است، تصویر داده شده را بررسی می کند و احتمال اینکه سگ در تصویر یک نژاد خاص است را محاسبه می کند. کاربر می تواند نتایج را بررسی کند و انتخاب کند که شبکه کدام احتمال را باید نمایش دهد (بالاتر از یک آستانه خاص و غیره) و برچسب پیشنهادی را برگرداند. هر دستکاری ریاضی به عنوان یک لایه در نظر گرفته می شود، و DNN پیچیده دارای لایه های زیادی است، از این رو شبکه های "عمیق" نامیده می شوند.

DNN ها معمولاً شبکه های پیشخور (FeedForward) هستند که در آنها داده ها از لایه ورودی به لایه خروجی بدون بازگشت به عقب جریان می یابد. در ابتدا، DNN نقشه ای از نورون های مجازی ایجاد می کند و مقادیر عددی تصادفی یا "وزن" را به اتصالات بین آنها اختصاص می دهد. وزن‌ها و ورودی‌ها ضرب می‌شوند و خروجی بین 0 و 1 را برمی‌گردانند. به این ترتیب الگوریتم می‌تواند پارامترهای خاصی را تأثیرگذارتر کند، تا زمانی که دستکاری صحیح ریاضی را برای پردازش کامل داده‌ها تعیین کند.

این ها توضیحاتی بودند که در رابطه با "مدل های زبان بزرگ" و "شبکه های عصبی عمیق" داده شدند. سعی شد که به طور خیلی ساده تری ارائه شود. این مقاله بر اساس اطلاعات محدودی که از خود پشتیبانی سایت دریافت شده، نوشته شده است و عملکرد سایت مربوطه هم مشابه مثال هایی بود که در این مقاله گفته شد. هدف صرفاً آشنایی مبتدی با دنیای یادگیری ماشین، شبکه های عصبی و هوش مصنوعی در عصری به نام عصر اطلاعات و ارتباطات است تا شما را با مفاهیم اساسی و کلیات این حوزه آشنا سازد. هر چند که برای تسلط کامل و عمیق بر این موضوعات، لازم است به منابع دیگری نیز مراجعه شود.

امیدوارم از این مقاله لذت برده باشید.

هوش مصنوعییادگیری ماشینgptzerochatgptdnn
دانشجوی کارشناسی ارشد در دانشگاه تبریز
شاید از این پست‌ها خوشتان بیاید