گپ و گفت‌های هوش مصنوعی (۳)

  • یوسف مهرداد بی‌بالان

یکی از متداول‌ترین مخالفت‌ها با نگرانی پیرامون هوش مصنوعی این است که «هوش مصنوعی در سطح انسان یا فراتر از آن غیرممکن است».
این یک ادعای غیرمعمول از سوی پژوهشگران هوش مصنوعی است و از زمان تورینگ تاکنون همین پاسخ را به نگرانی‌های فیلسوفان و ریاضی‌دانان داده‌اند. این ادعا که هیچ مدرکی پشتیبانش نیست، ظاهر اعتراف به این است که اگر هوش مصنوعی ابرهوشمند امکان‌پذیر می‌بود خطرات عمده‌ای در پی داشت. مثل این می‌ماند که راننده‌ای به مسافرانش بگوید «ما داریم به سمت پرتگاه می‌ریوم و ترمز ماشین بریده و کار نمی‌کند. اما به من اعتماد کنید، پیش از آن که به پرتگاه برسیم، بنزین‌مان تمام می‌شود و ماشین متوقف می‌شود!»
این ادعا نشانگر شرط‌بندی بی‌پروایی علیه نبوغ انسانی است. ما قبلا این شرط را بسته‌ایم و باخته‌ایم.
در ۱۱ سپتامبر ۱۹۳۳، ارنست راترفورد، فیزیکدان پرآوازه، با اطمینان کامل گفت «هر کس از تبدیل این اتم‌ها انتظار منبع توان داشته باشد، حرف پوچ و چرندی می‌زند.» در ۱۲ سپتامبر ۱۹۳۳، لئوسیلارد واکنش زنجیره‌ای هسته‌ای با القای نوترون را اختراع کرد و چند سال بعد چنین واکنشی را در آزمایشگاهش در دانشگاه کلمبیا نشان داد. او نشان داد که شکافت هسته‌ای به واکنشی زنجیره‌ای می‌انجامد. سیلارد در خاطراتش نوشته است: «ما همه چیز را خاموش کردیم و به خانه رفتیم. آن شب، هیچ شکی در ذهن من وجود نداشت که دنیا به سوی غم و اندوه روان شده است.»

استوارت راسل (Stuart Russell)، استاد دانشگاه برکلی، نویسنده معروف کتاب‌‌های هوش مصنوعی

منبع: کتاب تراوش‌های ذهنی، ۲۵ شیوه نگرش به هوش مصنوعی، فصل ۳
نوشته جان بروکمن، ترجمه استاد گرامی ابراهیم نقیب‌زاده مشایخ

نخست مرتب‌ کنید (tidy first) (۳ و پایانی)

  • یوسف مهرداد بی‌بالان

خُب، مرتب‌سازی (tidying) چیست؟
بک با شوخ طبعی همیشگی‌اش توضیح می‌دهد: «هر مرتب‌سازی (tidying) یک بازسازی (refactoring) کوچولو موچولوی نازنازی نادقیق است. هر مرتب‌سازی یک تغییر در ساختار سیستم است که تغییر در رفتار سیستم را آسان‌تر می‌کند. هر کار از نوع «نخست‌ مرتب‌‌ کنید» (tidy-first) تلاش می‌کند ساختارِ کد را بدون ایجاد ترس و وحشت تغییر دهد.”

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

توجه کنید که تقسیم کد به بخش‌های کوچک‌تر، یک «مرتب‌سازی»(tidying) ساده است. ما صمیمانه به شما پیشنهاد می‌کنیم به کانال YouTube ما بروید (https://youtu.be/VrkRAVX1h4I) و کل سخنرانی را تماشا کنید تا مثال‌های بیشتری از مرتب‌سازی با استفاده از عبارت‌های نگهبان (guard clause)، توضیح‌ کد (comment) یا توابع کمکی (helping function) را ببینید.

(مترجم؛ عبارت نگهبان (guard clause) یکی از روش های بازسازی کد است که در آن، با استفاده از چندین شرط، ساختار درختی کدی که دارای شرط‌های تو در تو(Nested Conditional) است، حذف و به یک ساختار مسطح تبدیل می‌شود. یک نمونه از آن را در کد زیر می‌توانید ببینید.

منبع کد: refactoring.guru

(مترجم؛ تابع کمکی (helping functions) تابعی است که بخشی از وظیفه‌ی تابع دیگری را انجام می دهد. توابع کمکی برای خوانایی بیشتر کد استفاده می‌شوند چون بخشی از کد تابع اصلی را جدا می‌کنند و نام جداگانه‌ و خوانایی به آن اختصاص می‌دهند. این توابع به شما اجازه می دهند از کد جداشده در تابع‌های دیگر نیز دوباره استفاده کنید.)

چرا تغییر نرم افزار پرهزینه است؟
برداشت دیگری که می‌توانید از این مفهوم طراحی نرم افزار داشته باشید این است که هزینه نرم افزار تقریباً با هزینه تغییر آن برابر است و توسعه اولیه تاثیر چندانی بر آن ندارد. با این حال، همه تغییرات یکسان و شبیه به هم نیستند: گاهی اوقات هزینه کل ایجاد یک تغییرِ “ارزان” تحت تاثیر هزینه‌‌های چند تغییر بسیار گران قرار می‌گیرد. از نظر فنی، توزیع هزینه ویژگی‌ها (features) از توزیع توانی (power law distribution) پیروی می‌کند. چرا برخی از تغییرات بسیار پرهزینه‌تر از بقیه تغییرات هستند؟

(مترجم؛ توزیع توانی در علم آمار، نوعی رابطه بین دو کمیت است که یک کمیت به صورت توانی از دیگری تغییر می‌کند. مثلاً مساحت یک مربع از دیدگاه طول ضلع آن را در نظر بگیرید، اگر طول دو برابر شود، مساحت آن چهار برابر (دو به توان دو برابر) می‌شود [ویکی‌پدیا])

ما همان اثر بهمن (avalanche effect) را در این رفتار مشاهده می‌کنیم، جایی که تغییر پارامترِ یک تابع باعث ایجاد تغییرات متعدد در سیستم می‌شود. رابطه‌ی بین اجزای نرم‌افزاری که باعث بروز و پخش تغییرات متعدد در سیستم می‌شود همان جفت‌شدگی (coupling) است. اما در کنار این وابستگی‌ها و جفت‌شدگی‌های اجزا، ما مشغول جداسازی‌ (decoupling) آنها هم هستیم. اگر به عقب برگردیم و با دقت نگاه کنیم به این نتیجه می‌رسیم که نقش طراحی نرم افزار، مدیریت تصمیم‌های بینابینی (tradeoff) جفت‌شدگی(coupling) /جداسازی(decoupling) است زیرا افزایش هر یک از آنها باعث افزایش هزینه می‌شود.

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

“بنابراین بین این دو یعنی جفت‌شدگی (coupling) یا جداسازی (decoupling) باید نقطه‌ی کمینه‌ی (minimum) هزینه را پیدا کنید. برای این تصمیم‌گیری باید توجه کنید که اگر جفت‌شدگی (coupling) وجود دارد ما باید برای کاهش آن سرمایه‌گذاری کنیم و در نتیجه لازم است هزینه جداسازی (decoupling) را افزایش دهیم تا بتوانیم به آن نقطه‌ی کمینه برسیم. و این توضیحات پاسخ به این سؤال است که «چرا باید نخست مرتب کنیم؟» و کنت بک با این جمله صبحت‌هایش را به پایان می‌رساند در حالی که ما نیز با صحبت‌هایش کاملا موافقیم.

حرف آخر
روش “نخست مرتب کنید” به بررسی تغییرات طراحی در ابعاد بسیار کوچک می‌پردازد و رابطه‌ی برنامه‌نویس با خودش را بررسی می‌کند. این روش چیزهای زیادی برای اندیشیدن و آموختن دارد اگر به دنبال یافتن راه‌هایی هستید تا به کمک آنها بتوانید پروژه‌ها و تیم‌های خود را بهتر مدیریت کنید.
به همین دلیل است که ما در Beetroot به دنبال ایجاد فرهنگی انسان‌محور هستیم تا تیم‌ها در کنار رشد و پیشرفت، با همدلی روی راه‌کارهای تاثیرگذار کار کنند. اگر شما یکی از این تیم‌ها را انتخاب کنید و به آن بپیوندید، ما می‌توانیم با هم کارهای فوق‌العاده‌ای انجام دهیم.

گزیده:
این روزها هر بچه‌ای که مدرسه را تمام می‌کند فکر می‌کند می‌تواند مارک زاکربرگ بعدی باشد و البته با این فناوری‌های جدید مانند محاسبات ابری، آنها واقعا این شانس را دارند.
مارک اندرسن، بنیانگذار نت‌اسکیپ و عضو هیئت مدیره فیس‌بوک

نخست مرتب‌ کنید (tidy first) (۲)

  • یوسف مهرداد بی‌بالان

در مورد مرتب‌سازی (tidying)

سوال اصلی این است: “من می خواهم کدی را تغییر بدهم ولی ساختار کد به گونه‌ای است که تغییر آن دشوار است. آیا ابتدا باید کد را مرتب کنم؟” بِک ادامه می‌دهد “من در مورد بازسازی‌ (refactor) کدهای بزرگ صحبت نمی‌کنم. من در مورد تقسیم کدهای بزرگ و یک‌تکه به مایکروسرویس‌ها(microservice) و تصمیم‌های بزرگ و باشکوه در مقیاس بزرگ صحبت نمی‌کنم. من در مورد رابطه‌‌ی خودم با خودم صحبت می‌کنم. آیا برای خودم این ارزش قائل هستم که کارم را راحت‌تر کنم؟”با این اوصاف، برنامه نویسی نباید کاری اضطراب آور، دلهره‌آور و اعتماد به نفس خراب‌کن باشد. در نتیجه، قبول یک مساله‌ی پیچیده و شکستن آن به مساله‌های کوچکتر که درک آنها آسان‌تر است، عادت بی‌نهایت مفیدی است. او می‌گوید”اصطلاحی است که تقریباً ده سال پیش آن را پیشنهاد کردم: – MCETMEC تغییر را آسان کنید و بعد تغییر آسان را انجام دهید (Make the Change Easy Then Make the Easy Change).آسان کردن تغییر، قلمروی اصلی طراحی نرم افزار است. بنابراین به جای اینکه بخش‌های سخت و پیچیده را تغییر دهید که برای انجام آن هم مجبورید به صورت همزمان 100 جای سیستم را تغییر دهید، می‌توانید ابتدا کدها را مرتب کنید، هزینه ایجاد همه آن تغییرات را کم کنید و سپس یک تغییر آسان را انجام دهید.”

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

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

یکی دیگر از اختلالات، زمانی رخ می‌دهد که قبل از هر گونه پیاده‌سازی، تمام تلاش‌ها صرف تهیه‌ی یک طراحی کامل و بی‌نقص می‌شود (طراحی بزرگِ قبل از پیاده‌سازی، سلام! (Big Design Upfront)) در پی این تلاش‌ها، ساختارهای زیبا و خوش ساخت زیادی ایجاد می‌شوند در حالی که هیچ کاربرد و اهمیتی در پیاده‌سازی رفتارهای مورد نیاز کاربران ندارند. این روش سرمایه‌گذاری روی ساختارها، شما نه‌تنها بازده و منفعتی از سرمایه‌گذاری خود کسب نمی‌کنید بلکه بازخوردها را نیز به تاخیر می‌اندازید.

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

گزیده:
پیشنهاد می‌کنم ۱۰ تا ۲۰ درصد از کل زمان توسعه خود را صرف سرمایه‌گذاری [روی برنامه‌نویسی استراتژیک] کنید. این زمان آن قدر کم است که تأثیر چندانی بر برنامه‌‌ریزی‌ها ندارد، اما آن قدر بزرگ است که بتواند به مرور و در طول زمان، نتایج قابل‌توجهی به بار آورد.»
از کتاب فلسفه طراحی نرم افزار نوشته‌ی جان اوسترهات،

Agile Software Development for Developers

  • یوسف مهرداد بی‌بالان

در ابتدای سال ۲۰۲۰ که کووید همه‌گیر شده بود و همه از دانشگاه‌ها و شرکت‌ها به خانه‌ها نقل مکان کرده بودیم، به پیشنهاد و همراهی دوست عزیزم آقا رضای رحمتی و کوشش‌های دوست عزیزم محمد آقای نادی، دوره‌ی «متدهای چابک برای توسعه‌دهندگان نرم‌افزار» را برای کانون برنامه‌نویسان ایرانی مقیم کانادا برگزار کردم.
برای این دوره، بخش‌هایی از متدهای چابک را انتخاب کردم که به گمانم بیشتر مورد استفاده برنامه‌نویسان و توسعه‌دهندگان قرار می‌گیرد. دوره‌ی بسیار جالبی بود؛ هم از این بابت که اولین بار بود که در بسترهای ارتباطی آنلاین دوره‌ای برگزار می‌کردم و هم اینکه مخاطبان دوره، عزیزانی از شرق، مرکز و غرب کانادا بودند.
ویدیوهای این دوره در یوتیوب در دسترس همگان قرار دارد و می‌توانید از طریق آدرس‌های زیر به آنها دسترسی داشته باشید.
در پایان جا دارد از کمک‌های عزیزان و سروران گرامی‌ام آقایان و خانم‌ها، فائزه اشراق، رضا مقدس جعفری، حسین نصیری، رضا رحمتی و محمد نادی برای برگزاری این دوره تشکر و قدردانی نمایم.

 

Session 1: Agile Software Development in a Nutshell and Cynefin (https://youtu.be/yZLfrMTez4g)
Session 2: Scrum Overview and Product Backlog (https://youtu.be/sJ7V8xgJTv4)
Session 3: Estimation (Part 1) (https://youtu.be/mq_fJ3EjfQE)
Session 4: Estimation (Part 2) (https://youtu.be/TgAJcGHU-C4)
Session 5: Velocity and Release Planning (https://youtu.be/kQypG2RL3lk)
Session 6: Sprint Planning.(https://youtu.be/RBHWDv60Nno)
Session 7: Sprint Execution (https://youtu.be/GtZdiybHJQQ)

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

نخست مرتب‌ کنید (tidy first) (۱)

  • یوسف مهرداد بی‌بالان

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

گفتار:
کنت بک (Kent Beck) مهندس نرم‌افزار و متولد آمریکا است، او خالق اکس پی (xp یا Extreme Programming )، سخنران اصلی و الهام‌بخش بسیاری از گردهمایی‌ها و کسی است که توسعه‌ی آزمون محور ( TDD یا Test-Driven Development) را دوباره کشف و متحول کرد.

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

در مورد طراحی نرم افزار
“طراحی نرم افزار فعالیتی در حوزه‌ی روابط انسانی است”. این اولین خطی بود که کنت بک برای عنوان سخنرانی‌اش با عنوان”نخست‌ مرتب‌ کنید (Tidy First) چیست؟”- نوشت. در نگاه اول، توسعه نرم افزار ارتباط چندانی با روابط اجتماعی ندارد و درباره‌ی جفت‌شدگی (coupling)، چسبندگی(cohesion)، قانون توان(power law)، بازسازی (refactoring) و غیره و در یک کلام،‌ درباره‌ی کد است. آیا واقعا طراحی نرم‌افزار ارتباطی با روابط انسانی ندارد؟ با مشاهده طراحی نرم افزار از دریچه‌ی روابط انسانی می‌توان دامنه‌ی بررسی را کوچک‌ کرد و به بررسی تعاملات بین افراد فنی (افراد متخصص یا geek) و افراد غیر فنی (غیر متخصص یا non-geeks) پرداخت.

در شکل زیر، دایره بیرونی مرزی است بین چیزهایی که تحت کنترل افراد فنی است و چیزهایی که تحت کنترل آنها نیست. بِک آنها را “پیشخدمت‌ها” (waiters) و “تغییردهنده‌ها” (changers) می‌نامد. پیشخدمت‌ها درخواست می‌کنند تا در رفتار سیستم تغییری ایجاد شود، در حالی که تغییر کد عملا با تغییردهنده‌ها است. رابطه بین این دو دسته می‌تواند پرتنش باشد، به ویژه زمانی که دو طرف یکدیگر را درک نمی‌کنند. در داخل دایره، مجموعه‌ متفاوتی از روابط وجود دارد؛ در یک تیم نرم افزاری، توسعه‌دهندگان پیوسته با تصمیم‌های خود در طراحی نرم افزار، روی یکدیگر تاثیر می‌گذارند.

نوع سوم رابطه، رابطه هر برنامه نویس با خودش است (برای همین صورتک خندان در وسط دایره قرار دارد). رابطه نامناسب با خودمان باعث می‌شود بارها و بارها کارهای سخت و دشوار را با ابزارهای کند و نامناسب انجام دهیم یا API های بد و نامناسب را تحمل کنیم و با آنها سر و کله بزنیم. به جای چنین‌ کارهایی باید بالاترین اولویت را به رابطه با خودمان اختصاص دهیم و بعد بقیه روابط را به صورت چشمگیری بهبود دهیم. کنت بک می گوید: «تا زمانی که به عنوان یک برنامه نویس با خودم رابطه سالمی نداشته باشم، احتمالاً نمی‌توانم حتی با سایر برنامه نویسان هم روابط سالمی داشته باشم. و این پایه و اساسِ موضوعی است که امروز درباره آن صحبت می‌کنیم، و همین‌طور موضوع کتابی است که مشغول نوشتن آن هستم.» (مترجم: به گفته‌ی جولی هنکس ارتباط سالم با خود (A healthy self-relationship) به معنای توانایی ارزش قائل شدن برای خود به‌عنوان یک انسان و پذیرش نقاط قوت و ضعف خود است.)

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

یادگیری ماشین برای همه (۸)

  • یوسف مهرداد بی‌بالان

ادامه طبقه‌بندی …

ماشین‌ بردار پشتیبان (Support Vector Machines) یا SVM به راستی محبوب‌ترین روش طبقه‌بندی کلاسیک است. از آن برای طبقه‌بندی هر موجودی در جهان هستی استفاده می‌شود مانند طبقه‌بندی گیاهان بر اساس شکل ظاهری آنها در عکس‌ یا طبقه‌بندی اسناد بر اساس نوع آنها و…

ایده‌ی پشت SVM بسیار ساده است. SVM سعی می‌کند تا دو خط با بیشترین فاصله‌ی ممکن بین نقاط داده (data points) ترسیم کند. به تصویر زیر نگاه کنید.

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

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

قاعده کلی (rule of thumb) این است: هر چه داده‌ها پیچیده‌تر، الگوریتم هم پیچیده‌تر. برای داده‌های متنی، عددی و جدولی، من روش‌های کلاسیک را انتخاب می‌کنم. زیرا در روش‌های کلاسیک، مدل‌ها کوچکترند و سریع‌تر یاد می‌گیرند و البته عملکرد آنها شفاف‌تر و قابل‌فهم‌تر است. برای تصاویر ، فیلم و بقیه کلان داده‌های (big data) پیچیده، من قطعاً شبکه‌های عصبی را انتخاب می‌کنم.

تا پنج سال پیش هم می‌شد یک طبقه‌‌بندی‌کننده (classifier) برای دسته‌بندی چهره‌های انسان پیدا کرد که با SVM ساخته شده باشد. اما امروزه برای انجام چنین کاری، راه آسان‌تر این است که از بین صدها شبکه‌ی عصبی‌ که از پیش آموزش دیده‌اند (pre-trained) یکی را انتخاب کنید. اما روش‌های به‌کار رفته در فیلترکننده‌های هرزنامه‌ها (spam filters) هیچ تغییری نکرده‌اند و کماکان با SVM نوشته می‌شوند. و تاکنون هیچ دلیل منطقی و مناسبی برای تغییر آنها پیدا نشده است.
حتی وب سایت شخصی من نیز برای شناسایی هرزنامه‌ها در بخش نظرات (comeents) از SVM استفاده می‌کند. ¯_(ツ)_/¯

مترجم: خانم سپیده مشایخی

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

جودیا پرل (Judea Pearl)
منبع: کتاب تراوش‌های ذهنی، ۲۵ شیوه نگرش به هوش مصنوعی

بیجار

  • یوسف مهرداد بی‌بالان

به سفر می روم و بسته به دل مهر وطن
رشته‌ای از پی باز آمدنم چون ماکو

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

سلیم تهرانی

عکس: بیجار (مزرعه‌ برنج) در بی‌بالان
عکس از مهدی مهرداد

پانوشت:
نان لاکو؛ نانی رایج در گیلان

برای خروج از جستجو کلید ESC را بفشارید