هوش مصنوعی چیست؟

August 25, 2019

هوش مصنوعی شاخه‌ای از علوم کامپیوتر هست که در اون سعی میشه هوش ماشینی (در مقابل هوش طبیعی) رو تعریف و مدل سازی کرد و مسائل مختلفی رو باهاش حل کرد. در این علم، ما به بررسی ملزومات محاسبات اعمالی همچون ادراک (Perception)، استدلال (Reasoning) و یادگیری (Learning) را بررسی کرده و سیستمی که بتواند چنین اعمالی را انجام دهد ارائه می‌کنیم.

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

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

«سزاوارترین معیار برای هوشمند شمردن یک ماشین، اینست که آن ماشین بتواند انسانی را توسط یک پایانه (تله تایپ) به گونه‌ای بفریبد که آن فرد متقاعد گردد با یک انسان روبروست.»

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

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

عملکرد کلی ماشین به این صورته که در هر مرحله ابتدا ورودی‌هاش رو از سنسورها می‌گیره، اطلاعاتش(Knowledge Base) رو آپدیت می‌کنه و سپس براساس اون تصمیم می‌گیره و تصمیماتش رو روی محیط اعمال می‌کنه. اگر بخوایم ماشینمون ذره‌ای هوشمندی داشته باشه در فرایند تصمیم‌گیری و همینطور در KB باید یک شبیه‌سازی از محیط داشته باشیم، با محدودیت‌های امروزی ما هرگز نمی‌تونیم تمام محیط رو تو ماشین‌های امروزی شبیه سازی کنیم، برای همین یک مدل ساده‌تری از محیط باید تعریف و پیاده سازی بشه.

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

قبل از هر چیزی باید ۳ کلاس مختلف رو پیاده سازی کنیم، کلاس شبیه‌سازی، محیط و کنشگر:

Class Game:
  def __init__(self, env, agent):
    self.env = env
    self.agent = agent

  def init(self):
    self.env.init()
    self.agent.init()
    
Class Enviornment:
  def __init__(self, ...):
    # Save the params for later
    pass
    
  def init(self):
    # Initialize the variables
    pass
    
class Agent:
  def __init__(self):
    # Save the params for later
    pass
    
  def init(self):
    # Initialize the variables
    pass

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

# in Game:
def tick(self):
  sensors = self.env.percept()
  actions = self.agent.update(sensors)
  self.env.update(actions)
  
# in Enviornment:
def percept(self):
  # return what the machine will percept
  return None
  
def update(self, actions):
  # Update what the agent has done on our state
  pass
  
# in Agent:
def update(sensors):
  # Update your sensors and KB, reason about what you want to do, and return it
  return None

تابع env.percept مشخص می‌کنه در این مرحله سنسورهای ماشین چه چیزی رو می‌بینن، که بعد ما اون‌ها رو به agent میدیم تا ببینیم چه کاری انجام میده. در نهایت کارهایی که ماشین تصمیم گرفته انجام بده رو به محیط اعمال می‌کنیم.

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

# in Game:
def start(self):
  self.init()
  while self.env.is_running():
    self.tick()

تو پیست‌های بعدی می‌تونیم با جزئیات بیشتری به پیاده سازی Agent نگاه کنیم و انواع مختلف اون رو بررسی کنیم.