مجله هوش مصنوعی

آخرین اخبار و تکنولوژی های هوش مصنوعی را در اینجا بخوانید.

مجله هوش مصنوعی

آخرین اخبار و تکنولوژی های هوش مصنوعی را در اینجا بخوانید.

چگونه دیتاست ‌های نامتوازن را در یادگیری عمیق مدیریت کنیم؟


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

 

چرا ما بیشتر تمایل داریم تا داده‌های متوازن داشته باشیم؟

پیش از آنکه زمان زیادی برای انجام پروژه‌های طولانی یادگیری عمیق اختصاص دهید، باید بدانید که هدف از انجام این کار چیست. کسب این دانش باید آن‌قدر با اهمیت باشد و بیارزد که ارزش وقت گذاشتن را داشته باشد. روش‌های متوازن‌کردن دسته‌های دیتاست تنها زمانی ضروری هستند که دسته‌های اقلیت را مورد توجه قرار دهیم. برای نمونه، فرض کنید می‌خواهیم بدانیم که آیا خرید مسکن با توجه به شرایط فعلی بازار، خصوصیات مسکن و توان مالی‌مان منطقی است یا خیر. اگر مدل، عدم خرید خانه را به ما توصیه کند، فرق چندانی نخواهد کرد. در این مورد، اگر در خرید مسکن موفق شویم، گام مهمی برداشته‌ایم چرا که سرمایه‌گذاری عظیمی به شمار می‌آید. اگر در خرید مسکن دلخواه‌مان موفق نشویم، این فرصت را داریم که دنبال موارد دیگر باشیم. در صورتی که به اشتباه روی چنین دارایی بزرگی سرمایه‌گذاری کنیم، یقیناً باید منتظر پیامدهای کارمان بمانیم.
در این مثال، نیاز داریم که دسته “خرید” که در اقلیت هستند بسیار بسیار دقیق تعیین شده باشند، اما برای دسته «عدم خرید» این مورد اهمیت چندانی ندارد (چون به اندازه کافی داده در این دسته وجود دارد). از آنجا که «خرید» در داده‌های ما نادر است، مدل‌مان در یادگیری دستۀ «عدم خرید» سوگیری خواهد داشت زیرا بیشترین داده را دارد و احتمال می‌رود عملکرد ضعیفی در دسته «خرید» بر جای بگذارد. به همین منظور، لازم است داده‌های خود را متوازن کنیم. اگر دسته‌های اقلیت را مورد بی‌توجهی قرار دهیم، چه اتفاقی رخ می‌دهد؟ برای مثال، فرض کنید در حال دسته‌بندی تصاویر هستیم و توزیع دسته به شکل زیر در آمده است:

دیتاست ‌های نامتوازن

دیتاست ‌های نامتوازن

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

روش «متوازن‌ کردن وزن » 

روش «متوازن‌ کردن وزن» با تغییر وزن‌های هر نمونه آموزشی سعی در متوازن کردنِ داده‌ها دارد. در حالت عادی، هر نمونه و دسته در تابع زیان وزن یکسانی خواهد داشت. اما اگر برخی دسته‌ها یا نمونه‌های آموزشی اهمیت بیشتری داشته باشند، وزن بیشتری خواهند داشت. بگذارید یک بار دیگر به مثال فوق در رابطه با خرید مسکن اشاره کنیم. به دلیل اینکه دقتِ دستۀ «خرید» برایمان اهمیت دارد، انتظار می‌رود نمونه‌های آموزشیِ آن دسته تاثیر بسزایی بر تابع زیان داشته باشند.
با ضرب زیان هر نمونه به ضریبی معین (بسته به دسته‌ها)، می‌توان به دسته‌ها وزن داد. می‌توان در Keras اقدام به چنین کاری کرد:

 

۱

۲

۳

۴

import keras

class_weight = {"buy": ۰.۷۵,

"don't buy": ۰.۲۵}

model.fit(X_train, https://hooshio.com/%da%۸۶%da%af%d9%۸۸%d9%۸۶%d9%۸۷-%d8%af%db%۸c%d8%aa%d8%a7%d8%b3%d8%aa-%d9%۸۷%d8%a7%db%۸c-%d9%۸۶%d8%a7%d9%۸۵%d8%aa%d9%۸۸%d8%a7%d8%b2%d9%۸۶-%d8%b1%d8%a7-%d8%af%d8%b1-%db%۸c%d8%a7%d8%af%da%af%db%۸c%d8%b1/Y_train, epochs=۱۰, batch_size=۳۲, class_weight=class_weight)

در کد بالا در متغیری که تحت عنوان class_weight تعریف کردیم ، دستۀ «خرید» باید ۷۵ درصد از وزنِ تابع زیان را داشته باشد چرا که اهمیت بیشتری دارد. دستۀ «عدم خرید» نیز باید ۲۵ درصد باقی‌مانده را به خود اختصاص دهد. البته امکان دست‌کاری و تغییر این مقادیر برای ایجاد مناسب‌ترین شرایط وجود دارد. اگر یکی از دسته‌هایمان نمونه‌های بیشتری از دیگری داشته باشد، می‌توانیم از این روش متوازن‌سازی استفاده کنیم. به جای اینکه زمان و منابع خود را به جمع‌آوری بیشتر دسته‌های اقلیت اختصاص دهیم، می‌توانیم شرایطی را رقم بزنیم که طی آن، روش متوازن‌سازی وزن همه دسته‌ها را وادار کند به میزان یکسان در تابع زیان نقش داشته باشند.
یکی دیگر از روش‌ها برای متوازن کردن وزن نمونه‌های آموزشی، «زیان کانونی» نام دارد. بیایید جزئیات کار را با هم بررسی کنیم: ما در دیتاست‌مان چند نمونه آموزشی داریم که دسته‌بندی راحت‌تری در مقایسه با بقیه دارند. در طی فرایند آموزش، این نمونه‌ها با ۹۹ درصد دقت دسته‌بندی خواهند شد، اما شاید نمونه‌های دیگر عملکرد بسیار ضعیفی داشته باشند. مشکل این است که آن دسته از نمونه‌های آموزشی که به راحتی دسته‌بندی شده‌اند، کماکان در تابع زیان به ایفای نقش می‌پردازند. اگر داده‌های چالش‌برانگیز بسیاری وجود دارد که در صورت دسته‌بندی درست می‌توانند دقت کار را تا حد زیادی بالا ببرند، چرا باید وزن برابری به آنها بدهیم؟

دیتاست ‌های نامتوازن

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

 

۱

۲

۳

۴

۵

۶

۷

۸

۹

۱۰

۱۱

۱۲

import keras

from keras import backend as K

import tensorflow as tf

# Define our custom loss function

def focal_loss(y_true, y_pred):

gamma = ۲.۰, alpha = ۰.۲۵https://hooshio.com/%da%۸۶%da%af%d9%۸۸%d9%۸۶%d9%۸۷-%d8%af%db%۸c%d8%aa%d8%a7%d8%b3%d8%aa-%d9%۸۷%d8%a7%db%۸c-%d9%۸۶%d8%a7%d9%۸۵%d8%aa%d9%۸۸%d8%a7%d8%b2%d9%۸۶-%d8%b1%d8%a7-%d8%af%d8%b1-%db%۸c%d8%a7%d8%af%da%af%db%۸c%d8%b1/

pt_1 = tf.where(tf.equal(y_true, ۱), y_pred, tf.ones_like(y_pred))

pt_0 = tf.where(tf.equal(y_true, ۰), y_pred, tf.zeros_like(y_pred))

return -K.sum(alpha * K.pow(۱. - pt_1, gamma) * K.log(pt_1))-K.sum((۱-alpha) * K.pow( pt_0, gamma) * K.log(۱. - pt_0))

# Compile our model

adam = Adam(lr=۰.۰۰۰۱)

model.compile(loss=[focal_loss], metrics=["accuracy"], optimizer=adam)

 

 

روش‌های نمونه‌گیری OVER-SAMPLING و UNDER-SAMPLING

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

Under and and Over Sampling

در سمت چپ و راست تصویر فوق، دسته آبی نمونه‌های بیشتری نسبت به دسته نارنجی دارد. در این مورد، دو گزینه پیش‌پردازش وجود دارد که می‌‍‌تواند به آموزش مدل‌های یادگیری ماشین کمک کند. روش Under-sampling بدین معناست که تنها بخشی از داده‌ها را از دسته اکثریت انتخاب می‌کنیم. این گزینش باید برای حفظ توزیع احتمال دسته انجام شود. چقدر راحت! نمونه‌های کمتر باعث می‌شود دیتاست متوازن گردد. روش Oversampling هم به این معناست که نسخه‌هایی از دسته اقلیت ایجاد خواهد شد. هدف از این کار، ایجاد تساویِ تعداد نمونه دسته‌های اقلیت با اکثریت است. ما موفق شدیم دیتاست ‌های نامتوازن را بدون کسب داده‌های بیشتر متوازن کنیم!

منبع: hooshio.com

کوبرنتیس چیست؟


نسخه‌های متعددی از «کوبرنتیس» پیش‌پیکربندی شده وجود دارد که از جمله مهم‌ترینِ آنها می‌توان به «Minikube» و «Microk8s» اشاره کرد. مقاله حاضر بر آن است تا فرایند نصب و راه‌اندازی را از ابتدا توضیح دهد و جزئیات بیشتری را در اختیار خوانندگان قرار دهد. کوبرنتیس یکپارچه نیست و اجزای متعددی کنار هم کار می‌کنند تا به هدف مورد نظر برسند. بسیاری از جنبه‌های آن تا حدی به جادو شبیه است. در این مقاله به بررسی این جنبه‌ها خواهیم پرداخت.

برای اینکه گام به گام در این مقاله پیش برویم، ضروری است به VM توجه داشته باشید. این مورد در بخش‌های بعدی بیشتر توضیح داده خواهد شد. باید اطلاعات پیشرفته‌ای هم در خصوص لینوکس، خط فرمان لینوکس و شبکه داشته باشید. همچنین توصیه می‌کنیم بسیار صبور باشید. در آغاز کار، می‌خواهیم جزئیات یک VM را با Ubuntu 18.04، دو vCPU، حافظه ۴G و ۵۰ گیگ هارد توضیح دهیم. ما از KVM استفاده میکنیم. مراحل زیر را برای راه‌اندازیِ آن در هاستِ اصلی طی کردیم:ماشین مجازیِ ما «kubel» نام دارد. تغییراتی که در این ماشین ایجاد کردیم، به این صورت است: RAM به ۴۰۹۶، اندازه دیسک به ۵۰ و Vcpu به ۲ تغییر پیدا کرد. باید از نصبِ سرور OpenSSH اطمینان حاصل کنید. با پایان این کار و برخورداری از آدرس IP، می‌توانید آن را به فایل /etc/hosts  اضافه کنید تا با نام خودش به آن دسترسی داشته باشید. اگر می‌خواهید اطلاعات بیشتری درباره KVM و چگونگی نصب آن بدست آورید، می‌توانید به این مقاله مراجعه کنید: «Playing with VMs and Kubernetes».

در این مقاله به هاستی که KVM رو آن نصب شده است میزبان اصلی نامیده میشود و هاستی که از آن جهت توسعه برنامه استفاده میشود (که میتوان یک لپ تاپ یا PC باشد) رایانه محلی نامیده میشود. اگر از ماشین مجازی ابری استفاده می‌کنید، میزبان اصلی نخواهید داشت. در چنین مواردی باید بدانید چه اقدامی در پانل کنترل ابری یا خط فرمانِ رایانه محلی لازم است تا به صورت یک میزبان اصلی عمل کند (مثل فرمان gloud در پلتفرم ابری گوگل). اولین چیزی که به آن نیاز است، فرمان‌های kubeadm/kubectl/kubelet  است. جهت راهنمای نصب از official installation (نصب رسمی) استفاده می‌کنیم اما برای Ubuntu 18.04 VM. برای اینکه ماشین مجازی خود را برای نصب آماده کنید، در ابتدا باید از خاموش بودنِ سوآپ (swap) مطمئن شوید.

 

۱

۲

۳

۴

۵

۶

۷

ls / # make sure your swapfile is called swapfile

 

sudo swapoff -v /swapfile

 

sudo vi /etc/fstab # remove the line for the swapfile

 

sudo rm /swapfile

اگر می‌خواهید بیش از یک گره بسازید، باید مطمئن شوید که ماشین‌های مجازی‌تان با آدرس‌های منحصربفرد MAC و محصول UUID ساخته شده‌اند. KVM این کار را برای شما انجام میدهد. احتمالاً اکثر ماشین‌های مجازی منحصربفرد خواهند بود، مگر اینکه ماشین مجازی فعلی را کلون کنید. در اقدام بعدی، باید پل‌ها و overlyها را با افزودن چند خط به فایل /etc/modules-load.d/modules.conf  فعال کنید.

 

۱

۲

overlay

br_netfilter

چند خط دیگر به فایل /etc/sysctl.conf  اضافه کنید:

 

۱

۲

۳

۴

# added for kubernetes bridge

net.bridge.bridge-nf-call-ip6tables = ۱

net.ipv4.ip_forward = ۱

net.bridge.bridge-nf-call-iptables = ۱

سپس، ماشین مجازی‌تان را مجدداً بوت کنید. باید این ماشین مجازی جدید هیچ قاعده iptables نداشته باشد. برای بررسی این موضوع می‌توانید از فرمان sudo iptables -L  استفاده کنید.

 

۱

۲

۳

۴

Chain INPUT (policy ACCEPT)

target     prot opt source               destinationChain FORWARD (policy ACCEPT)

target     prot opt source               destinationChain OUTPUT (policy ACCEPT)

target     prot opt source               destination

اگر قدری دلهره دارید، می‌توانید پورت‌ها را فقط به موارد لیست‌شده در «نصب رسمی» محدود کنید، اما این کار مثل پا گذاشتن روی مین است. چون کوبرنتیس یک سیستم هماهنگی کانتینر است، به سیستم کانتینری احتیاج داریم که بتواند کار هماهنگی و مدیریت را به خوبی انجام دهد. می‌توانید از چند سیستم کانتینر استفاده کنید، اما در مقاله حاضر از containerd استفاده می‌شود. برای نصب آن در Ubuntu 18.04 اجرای دو خط زیر کافی است:

 

۱

۲

sudo apt-get update

sudo apt-get install containerd

باید نتیجۀ زیر به دست آید:

 

۱

/var/run/containerd/containerd.sock.

حالا می‌توانید kubeadm/kubectl/kubelet را نصب کنید:

 

۱

۲

۳

۴

۵

۶

۷

۸

۹

۱۰

۱۱

۱۲

۱۳

۱۴

۱۵

sudo apt-get update && sudo apt-get install -y apt-transport-https curl gnupg2

 

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

 

cat <

 

deb https://apt.kubernetes.io/ kubernetes-xenial main

 

EOF

 

sudo apt-get update

 

sudo apt-get install -y kubelet kubeadm kubectl

 

sudo apt-mark hold kubelet kubeadm kubectl

بسته kubeadm به عنوان API اصلی در کوبرنتیس استفاده می‌شود. بسته kubectl  یک رابط خط-فرمان در API کوبرنتیس است. بسته kubelet  با سیستم مدیریت کانتینر پیوند می‌خورَد تا پادها به اجرا درآیند. اکنون فرصت را غنیمت می‌شماریم تا نگاهی به واژه‌ها و اصطلاحات تخصصی در این بخش بپردازیم. کل مجموعه در کوبرنتیس «cluster» یا خوشه نام دارد. هر خوشه می‌تواند یک یا چند گره داشته باشد. دو نوع گره با نام‌های «control-plane» و «worker» وجود دارد. فقط باید یک گره «control-plane» وجود داشته باشد. )البته می‌توانید از چند «control-plane» در سیستم HA استفاده کنید.( این گره «control-plane» همان چیزی است که در مقاله حاضر به بررسی‌اش می‌پردازیم. اگر گره‌های «worker» را بعدها اضافه کنیم، همه این مراحل باید تکرار شود. برای اینکه ببینیم آیا kubeadm  به constrained  که پیشتر نصب کردیم دسترسی دارد یا خیر، می‌توانیم sudo kubeadm config images pull  را اجرا کنیم. این بخش قدری نیاز به اندیشه دارد. کوبرنتیس به رابط شبکه کانتینر یا CNI نیاز دارد تا همه پادها بتوانند با یکدیگر ارتباط داشته باشند. اما برای اینکه خوشه را راه‌اندازی کنیم، باید اطلاعاتی درباره چگونگیِ استفادۀ آن از CNI داشته باشیم. بنابراین، باید سرانجام یک CNI انتخاب کنیم تا کار با آن ادامه پیدا کند چرا که CNIهای مختلفی وجود دارد. ما Flannel انتخاب می‌کنیم. به صورت پیش فرض Flannel از CIDR های ۱۰.۲۴۴.۰.۰/۱۶ استفاده می‌کند بنابراین از فرمان init استفاده کنیم. بیایید این فرایند را با هم امتحان کنیم و ببینیم چه نتیجه‌ای به دست می‌آید.

 

 

 

sudo kubeadm init --pod-network-cidr=۱۰.۲۴۴.۰.۰/۱۶

بله، کار با موفقیت به انجام رسید، اما  باید چند مرحله دیگر در خصوص یکی از گره‌ها طی کنیم. چند مرحله نیز در پایان فرمان init  وجود دارد که اهمیت زیادی دارد. اگر می‌خواهید گره‌های «worker» را در بخش‌های بعد ایجاد کنید، مطمئن شوید که فرمان join را کپی کرده باشید تا بعد به آن مراجعه کنید. توکنی که فهرست‌بندی شد، تنها ۲۴ ساعت دوام می‌آورد. پس اگر می‌خواهید گره تازه‌ای بعد از آن بسازید، باید توکن جدیدی با فرمان kubeadm token create  درست کنید.
حالا بیایید پیکربندی را در جایی قابل دسترس برای استفادۀ kubectl قرار دهیم.

 

۱

۲

۳

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

این کار موجب ایجاد فایل پیکربندیِ پیش‌فرض خواهد شد که kubectl از آن استفاده می‌کند. سپس نیاز به اجرای kubectl config view  داریم. خروجیِ حاصل از فرمان init این پیام را به ما می‌دهد که باید CNIرا به کار ببریم. در پایانِ این کار، به پیکربندی مورد نیاز در GitHub دسترسی خواهیم داشت. اکنون نوبت به بکارگیری آن رسیده است:

kubectl apply -f

حالا ببینید که آیا این امکان وجود دارد همه چیز را با kubectl get all --all-namespaces  اجرا کنید یا خیر. باید فهرستی از مظنون‌های احتمالی درست کنید. فایل پیکربندی را به میزبان اصلی کپی کنید. در این صورت می‌توانید به خوشه جدیدتان دسترسی پیدا کنید. ما آن را در فایل ~/.kube/kube1config  کپی کرده و متغیر KUBECONFIG  را به کار خواهیم بست تا نیازی به ادغام با فایل‌های پیکربندیِ موجود نباشد. اکنون، اجرایِ kubectl get all --all-namespaces  در میزبان اصلی باید فهرست یکسانی را حاصل آورد. حالا می‌خواهیم همه مراحل ذکر شده در این مقاله را تا kubeadm init  تکرار کنیم. پس از پایان این کار، ماشین مجازی جدیدی تحت عنوان «kube2» ایجاد شده و به نصب contianerd, kubeadm, kubectl  می‌پردازیم. به جای استفاده از فرمان kubeadm init ، از فرمان kubeadm join  که در kubeadm init ذخیره کردیم، استفاده می‌کنیم. حالا بیایید ببینیم چه نتیجه‌ای حاصل آمد:

 

۱

۲

۳

NAME STATUS ROLES AGE VERSION

kube1 Ready master ۷۳m v1.۱۸.۱

kube2 Ready ۶۵s v1.۱۸.۱

منبع: hooshio.com


چگونه یک تیم هوش مصنوعی فوق‌العاده بسازیم؟


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

 

کمتر کسی را می توان یافت که همچون اندرو ان‌جی بر اوج قله هوش مصنوعی ایستاده باشد. ان‌جی بنیانگذار و مدیرعامل شرکت Landing AI است و از معدود افرادی‌ است که در هر دو زمینه‌ی فناوری و هوش مصنوعی سوابق پرباری دارد. او پیش از این هدایت آزمایشگاه هوش مصنوعی دانشگاه استنفورد و گروه تحقیقاتی هوش مصنوعی Google Brain را بر عهده داشته است و به عنوان دانشمند ارشد شرکت چینی Baidu برنامه‌های نوآورانه‌ ای برای تشخیص صدا و تصویر ایجاد کرده است. ان‌جی می‌گوید بسیاری از شرکت‌ها به اهمیت هوش مصنوعی و تاثیرات آن پی برده‌اند و در حال ساخت تیم‌ هوش مصنوعی داخل شرکت هستند. وی مصاحبه ای با مجله فوربس انجام داده است در مورد اینکه چگونه می‌توان یک تیم هوش مصنوعی همه‌فن حریف ساخت که بیشترین بهره‌برداری را از این فناوری نوین انجام دهد. اندرو ان‌جی در مصاحبه‌ای با فوربس به این سوالات پاسخ داده است.

تیم هوش مصنوعی

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

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

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

چه گروهی می‌تواند این کار را انجام دهد؟

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

شما وقتی می‌خواهید یک تیم هوش مصنوعی بسازید برای انتخاب و استخدام بهترین افراد به چه مهارت‌ها و نقش‌هایی توجه می‌کنید ؟

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

تعریف شما از یک مدیر ارشد هوش مصنوعی و نقش آن چیست؟

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

امروزه هوش مصنوعی در مراحل ابتدایی توسعه‌ی خود قرار دارد. بنابراین شما به یک مدیر ارشد هوش مصنوعی نیاز دارید که با مدیرعامل همکاری نزدیکی داشته باشد تا به آنها این قدرت را بدهد که شرکت را به سمت تغییرات مثبت هدایت کنند.

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

کارکردهای اصلی یک تیم متمرکز چیست؟ در دنیای امروز چه کسی این کار را به خوبی انجام می‌دهد؟

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

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

چگونه این تیم اصلی باید با واحدهای دیگر ارتباط برقرار کند؟

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

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

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

چه ساختاری این امکان را فراهم کرد؟ آیا به طور کلی ساختار بایدو را الگوی خوبی می دانید؟

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

آیا در بایدو یک گروه اختصاصی وجود داشت که مسئولیت ساختن موارد استفاده تجاری برای هوش مصنوعی را بر عهده داشته باشد؟

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

در مورد شرکت های کوچک چطور؟ یک شرکت ۱۰۰ نفره قاعدتا نمی‌تواند یک تیم جدید هوش مصنوعی تشکیل دهد. آنها چگونه باید در مورد هوش مصنوعی برای تجارت خود فکر کنند؟

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

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

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

منبع: hooshio.com