وبگاه شخصی حمیدرضا حسین خانی

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

وبگاه شخصی حمیدرضا حسین خانی

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

وبگاه شخصی حمیدرضا حسین خانی

حمیدرضا حسین‌خانی، دانش آموخته مهندسی نرم‌افزار از دانشگاه آزاد واحد تهران مرکزی و کارشناسی ارشد هوش مصنوعی و رباتیک از دانشگاه آزاد واحد علوم و تحقیقات است.
او از سال ۹۲ به عنوان مهندس نرم‌افزار وارد صنعت شد و همکاری با استارتاپ‌های خوش‌نام و در حال رشدی مثل ایران‌اپس، دیجی‌کالا، دیجی استایل، اسنپ و بامیلو، در سمت‌های مختلف مهندسی، مدیریت و مشاوره را در کارنامه‌ی خود دارد.
وی بیش از ۱۰ سال از سوابق حرفه‌ای خود را مشغول تدریس در کارگاه‌های مختلف برنامه‌نویسی، رباتیک و هوش مصنوعی در مدارس، پژوهش‌سرا‌ها، دانشگاه‌ها و همین‌طور آموزشگاه‌هایی چون لایتک دانشگاه صنعتی شریف، هواپیمایی هما و شبکه ملی مدارس ایران (رشد) بوده و همین‌طور منتور تعداد زیادی از تیم‌های شرکت‌کننده در مسابقات مختلف برنامه‌نویسی، رباتیک و روبوکاپ و همچنین داور و برگزار‌کننده اولین دوره‌ی مسابقات دانش‌آموزی برنامه‌نویسی موبایل در دانشگاه صنعتی شریف (Nadcup 2016) است.

او در حال حاضر استاد درس کارگاه کامپیوتر در دانشگاه صنعتی شریف و از نمایندگان بنیاد جهانی School of AI در ایران است که در زمینه ترویج و آموزش هوش مصنوعی به دانشجویان و استارتاپ‌ها فعالیت می‌کند.

آخرین نظرات
۱۰آذر

تا به حال شده رییستان از شما بخواهد میزان فروش این ماه (و البته ماه های قبل) شرکت را برایش آماده کرده و شرح دهید؟!

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

حتما شنیده اید که:

گاهی یک تصویر، گویا تر از هزاران واژه است.

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

یک مدیر ارشد اجرایی (CEO) وظایف سنگینی دارد که زمانی را برای سر و کله زدن با داده ها و جدول های عددی و یافتن مفهوم درون آن ها باقی نمیگذارند. بنابراین، این شخص برای انجام وظایف خود و گرفتن تصمیم های سازمانی درست، نیاز به درک سریع و دقیقِ مفهومِ نهفته در این جدول های عددی دارد. از همین رو امروزه مدیران شرکت های بزرگ، از دانشمندان داده‌ها (Data Scientist ها) و مهندسان هوشمندی در کسب و کار (BI Engineer ها) برای تحلیل داده ها، به تصویر کشیدنِ آنها و تصمیم گیری بر اساس داده ها (Data-driven strategy) بهره می‌برند.

یک Data Scientist داده های خامِ سازمان را پس از پالایش و تمیز کردن، تحلیل کرده و به نمودار های آماری قابل فهم تبدیل می‌کند.
یک Data Scientist داده های خامِ سازمان را پس از پالایش و تمیز کردن، تحلیل کرده و به نمودار های آماری قابل فهم تبدیل می‌کند.

به تصویر کشیدن داده ها (Data Visualization) یکی از اصلی ترین و مهم ترین موضوعات در Data Science است که با نمودار های آماری، گراف ها، پلات ها و اشکال سر و کار دارد. با این وجود، هدف از این پُست، مطالعه ی کاملِ متد های Data Visualization نیست بلکه آشنایی با مهم‌ترین نمودار‌های آماریِ مورد استفاده در Data Science است. ازین رو مطالعه این پست را به تمامی دانشجویان، پژوهشگران، مهندسان، اهالی کسب و کار و مدیران (فارغ از رشته تحصیلی و کاری) پیشنهاد می‌‌دهیم.


در اینجا فرض می‌شود که شما یک مجموعه داده‌ها (Dataset) شامل چندین سطر (Observation یا Experience یا Data Point) و چندین ستون (Feature یا Variable یا Attribute) دارید و می‌خواهید با رسم نمودار های آماری مرتبط (که در زیر معرفی خواهند شد)، به یک بینش در رابطه با مجموعه داده‌ها دست پیدا کنید.

۱. نمودار Histogram

از این نمودار برای بررسی و مطالعه ی توزیعِ آماریِ یک متغیر عددی (Numerical Variable) استفاده می‌شود. معمولا اولین کاری که در مواجهه با یک Dataset می‌کنیم، بررسی توزیع آماریِ تک‌تکِ متغیر ها (Feature ها) ی آن است. درکِ توزیعِ آماریِ متغیر ها به ما کمک می‌کند تا اشتباهات موجود در داده ها (مانند نویز ها و خطا های اندازه گیری) را کشف کنیم. برای رسم نمودار Histogram، بازه (Range) مقادیرِ مشاهده شده برای متغیر را به تعدادی فاصله ی هم اندازه (bin) تقسیم کرده و فراوانی (تعداد) مشاهدات در هر فاصله را به صورتِ ارتفاعِ یک میله نمایش می‌دهیم.

۶ توزیعِ آماری مرسوم در تحلیل متغیر ها
۶ توزیعِ آماری مرسوم در تحلیل متغیر ها

ممکن است هیستوگرامِ مربوط به چند متغیر، برای مقایسه، در یک نمودار و با رنگ های مختلف نشان داده شوند، اما معمولا برای مطالعه ی همزمانِ توزیعِ آماریِ چند متغیر، از نمودار های دیگر (مثل نمودار Boxplot، نمودار Violin Plot و یا نمودار Ridgeline Plot) استفاده می‌شود.

برای کسب اطلاعات بیشتر در رابطه با Histogram اینجا کلیک کنید.
برای آشنایی با روشِ رسم Histogram در زبان برنامه‌نویسی Python اینجا کلیک کنید.

۲. نمودار Density Plot

این نمودار در واقع شکل صیقل داده شده ی نمودار Histogram است و تابعی به نام Probability Density Function را برای یک متغیرِ عددی به تصویر می‌کشد.

۶ توزیعِ آماری مرسوم در تحلیل متغیر ها
۶ توزیعِ آماری مرسوم در تحلیل متغیر ها

برای کسب اطلاعات بیشتر در رابطه با Density Plot اینجا کلیک کنید.
برای آشنایی با روشِ رسم Density Plot در زبان برنامه‌نویسی Python اینجا کلیک کنید.

۳. نمودار های 2D Histogram و 2D Density Plot

این دو نمودار برای مطالعه ی توزیعِ آماریِ دو متغیرِ کمّی (عددی) در ترکیب با هم، استفاده می‌شوند. برای رسم نمودار 2D Histogram، یکی از متغیر ها را روی محور X و دیگری را روی محور Y در نظر گرفته و با استفاده از bin ها صفحه مختصات دوبعدی را به یک جدول (Grid) تبدیل می‌کنیم. سپس تعداد مشاهدات در هر قسمت از Grid را توسط طیف رنگ ها نمایش می‌دهیم (مثلا برای مقادیر کم از بنفش و برای مقادیر زیاد از قرمز استفاده می‌کنیم)

نمودار 2D Histogram
نمودار 2D Histogram

نمودار 2D Density Plot هم صیقل داده شده ی 2D Histogram است.

نمودار 2D Density Plot شامل خطوط کانتور
نمودار 2D Density Plot شامل خطوط کانتور

این دو نمودار، زمانی که تعداد مشاهدات زیاد است کارایی دارند و برای تعداد مشاهدات کم، نمودار های دیگر (مثل Scatter Plot) اطلاعات دقیق تری را منتقل می‌کنند.

برای کسب اطلاعات بیشتر در رابطه با 2D Histogram و 2D Density Plot اینجا کلیک کنید.
برای آشنایی با روشِ رسمِ 2D Histogram و 2D Density Plot در زبان برنامه‌نویسی Python اینجا کلیک کنید.

۴. نمودار Ridgeline Plot یا Joyplot

این نمودار شامل چند Histogram یا 2D Density Plot با مقیاس یکسان است که معمولا برای مقایسه ی توزیعِ آماریِ یک متغیرِ عددی برای چندین گروهِ مختلف استفاده می‌شود. Ridgeline Plot معمولاً وقتی کارایی خود را نشان می‌دهد که الگوی مشخصی بین مقادیرِ گروه ها وجود داشته باشد. به عنوان مثال در شکل میبینید که این مقادیر از پایین به بالا زیاد شده اند و نمودار ها روی هم نیفتاده اند.

نمودار Ridgeline Plot با استفاده از Histogram
نمودار Ridgeline Plot با استفاده از Histogram

نمودار Ridgeline Plot با استفاده از Density Plot
نمودار Ridgeline Plot با استفاده از Density Plot


در این نوع نمودار، ترتیب درست گروه ها، تاثیر بسزایی در خوانایی نمودار دارد.

برای کسب اطلاعات بیشتر در رابطه با Ridgeline Plot اینجا کلیک کنید.
برای آشنایی با روشِ رسم Ridgeline Plot در زبان برنامه‌نویسی Python اینجا کلیک کنید.

۵. نمودار Box Plot

این نمودار، خلاصه ای از اطلاعاتِ آماریِ مربوط یک متغیر کمّی، برای چندین گروه مختلف را به تصویر می‌کشد. به عبارت دیگر، خطی که box ها را به دو نیم تقسیم می‌کند، نشان دهنده ی میانه (Median) داده های مشاهده شده برای متغیر، و ابتدا و انتهای box ها نشان دهنده ی چارک اول (Lower Quartile) و چارک سوم (Upper Quartile) آنها اند. خطوط انتهایی نیز نمایانگر کوچکترین و بزرگترین داده ی مشاهده شده (صرف نظر از داده های پَرت یا Outlier ها) اند. Outlier ها (به عنوان نمونه، نویز ها یا داده های ناشی از خطای اندازه گیری) نیز با نقطه در نمودار زیر نشان داده شده اند.

نمودار Box Plot برای متغیر sepal_length در دیتاست IRIS
نمودار Box Plot برای متغیر sepal_length در دیتاست IRIS


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

نمایش مشاهدات در نمودار Box Plot جهت بررسی توزیع آماری داده ها
نمایش مشاهدات در نمودار Box Plot جهت بررسی توزیع آماری داده ها

برای کسب اطلاعات بیشتر در رابطه با Box Plot اینجا کلیک کنید.
برای آشنایی با روشِ رسمِ Box Plot در زبان برنامه‌نویسی Python اینجا کلیک کنید.

۶. نمودار Violin Plot

این نمودار زمانی استفاده می‌شود که می‌خواهیم توزیع آماری تعداد زیادی داده را در Box Plot داشته باشیم، اما نمایش همه داده ها روی نمودار از خوانایی آن می‌کاهد. Violin Plot با ترکیب نمودار های Box Plot و Ridgeline Plot این کار را به راحتی انجام می‌دهد.

نمودار Violin Plot از نمایش تابع چگالی احتمال کنار Box Plot تشکیل می‌شود.
نمودار Violin Plot از نمایش تابع چگالی احتمال کنار Box Plot تشکیل می‌شود.

برای کسب اطلاعات بیشتر در رابطه با Violin Plot اینجا کلیک کنید.
برای آشنایی با روشِ رسمِ Violin Plot در زبان برنامه‌نویسی Python اینجا کلیک کنید.

۷. نمودار Scatter Plot

از این نمودار برای نمایشِ رابطه و همبستگیِ میانِ دو متغیرِ کمّی استفاده می‌شود. متغیر ها را توسط محور های مختصات دکارتی به تصویر کشیده و به ازای هر داده ی مشاهده شده در Datset یک نقطه از فضای مختصات را با دایره پُر می‌کنیم. اگر بین متغیر ها، رابطه و همبستگی وجود داشته باشد، در نمودار Scatter Plot، قابل تشخیص است. به عنوان مثال،‌ نمودار بالا سمت راست در تصویر زیر، نشان دهنده ی یک رابطه خطی بین دو متغیر است چون به نظر می‌رسد نقاط، روی یک خط پراکنده شده اند. رابطه خطی به این معنی است که اگر مقدار یکی از متغیر ها n برابر شود، مقدار متغیر دیگر نیز n برابر می‌شود. یا نمودار پایین سمت راست، معرف یک رابطه سینوسی بین دو متغیر است.

تعدادی از الگو های قابل تشخیص توسط Scatter Plot
تعدادی از الگو های قابل تشخیص توسط Scatter Plot

بسیاری از اوقات در حل مسایل Data Science، بررسی همه متغیر ها (Feature ها) امکان پذیر نیست و مایلیم متغیر های مهم تر را انتخاب و بررسی کنیم. یافتن همبستگی بین متغیر ها به ما کمک می‌کند متغیر هایی که قابل پیش بینی از روی سایر متغیر ها هستند را برای سادگی بیشتر حذف کنیم. به این کار اصطلاحا Feature Selection گفته می شود.

همبستگی بین دو متغیر در Scatter Plot را می‌توان توسط یک منحنی فیت شده روی مشاهدات به نام Trend Curve نشان داد.

یافتن بهترین منحنی قابل فیت شدن روی مشاهدات، Regression Analysis نام دارد.
یافتن بهترین منحنی قابل فیت شدن روی مشاهدات، Regression Analysis نام دارد.


وقتی تعداد مشاهدات زیاد نیست، نحوه ی توزیعِ آماری داده ها در Scatter Plot مشخص است. اما زمانی که تعداد مشاهدات زیاد باشد، پدیده ی Overplotting روی نمودار رخ داده و خوانایی آن را از بین می‌برد. در این صورت برای مشخص شدن توزیع آماری، یا از نقطه های Transparent در Scatter Plot استفاده می‌کنیم یا از نمودار 2D Density Plot.

استفاده از نقاط Transparent برای مشخص تر شدن توزیع آماری
استفاده از نقاط Transparent برای مشخص تر شدن توزیع آماری

استفاده از 2D Density Plot به جای Overplot کردن روی Scatter Plot
استفاده از 2D Density Plot به جای Overplot کردن روی Scatter Plot

ضمناً گاهی برای مشخص نمودن توزیع آماریِ مشاهدات، از Histogram یا Density Plot در حاشیه ی Scatter Plot استفاده می‌شود.

استفاده از Histogram در حاشیه ی Scatter Plot
استفاده از Histogram در حاشیه ی Scatter Plot

گاهی برای دسته بندی مشاهدات در Scatter Plot (افزودن یک متغیر غیر عددی یا Categorical به نام دسته) از رنگ های مختلف برای نمایش نقاط استفاده می‌شود. در این صورت حتما باید از یک راهنما (Legend) در نمودار استفاده کرد.

در این نمودار از سه رنگ برای دسته بندی مشاهدات استفاده شده است.
در این نمودار از سه رنگ برای دسته بندی مشاهدات استفاده شده است.

اگر بخواهیم یک متغیر عددی (غیر Categorical) را به عنوان متغیر سوم به Scatter Plot اضافه کنیم، به جای رنگ می‌توان سایز نقطه ها را تغییر داد (نمودار Bubble Plot).

برای کسب اطلاعات بیشتر در رابطه با Scatter Plot اینجا کلیک کنید.
برای آشنایی با روشِ رسمِ Scatter Plot در زبان برنامه‌نویسی Python اینجا کلیک کنید.

۸. نمودار Bubble Plot

این نمودار، در واقع همان Scatter Plot است که یک متغیر عددی سوم توسط اندازه دایره ها (حباب ها) در آن نشان داده شده است.

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

برای کسب اطلاعات بیشتر در رابطه با Bubble Plot اینجا کلیک کنید.
برای آشنایی با روشِ رسمِ Bubble Plot در زبان برنامه‌نویسی Python اینجا کلیک کنید.

۹. نمودار Correlogram

وقتی با یک Dataset شامل چند متغیر عددی روبه‌رو می‌شویم، مطالعه ی توزیع آماری تک تک متغیر ها با استفاده از Density Plot و همینطور مطالعه ی همبستگی بین هر دو متغیر عددی با استفاده از Scatter Plot اولین کاری است که انجام می‌دهیم. نمودار Correlogram یا Correlation Matrix خلاصه ی نتایج این فعالیت ها را در قالب یک نمودار نمایش می‌دهد.

این نمودار، به شکل یک ماتریس است که متغیر ها در سطر و ستون آن تکرار شده اند. قطر اصلی این ماتریس شامل Histogram و یا Density Plot هایی برای بررسی توزیع آماری متغیر ها و سایر درایه های آن شامل Scatter Plot هایی برای بررسی رابطه بین متغیر ها هستند.

در این Correlogram رابطه خطی بین petal_lenght و petal_width به وضوح مشاهده می‌شود.
در این Correlogram رابطه خطی بین petal_lenght و petal_width به وضوح مشاهده می‌شود.

در صورت وجود متغیر Categorical می‌توان از رنگ ها به این شکل استفاده کرد.
در صورت وجود متغیر Categorical می‌توان از رنگ ها به این شکل استفاده کرد.

برای کسب اطلاعات بیشتر در رابطه با Correlogram اینجا کلیک کنید.
برای آشنایی با روشِ رسمِ Correlogram در زبان برنامه‌نویسی Python اینجا کلیک کنید.

۱۰. نمودار Connected Scatterplot

برای نمایش رَوَندِ تکاملِ یک متغیرِ کمّی و یا برای نمایش Trend در دیتا طی بازه های زمانی مختلف (سریِ زمانی یا Time Series) مانند نوسانات قیمت ‌Bitcoin در یک بازه زمانی و یا دنباله ی سیگنال های الکتریکی اندازه گیری شده در یک دستگاه، می‌توان از نمودار Connected Scatterplot استفاده کرد. در این نمودار، دنباله مشاهدات به صورت نقاطی که با خط صاف به هم متصل شده اند نمایش داده می شود.

نوسانات قیمت Bitcoin در ماه آپریل سال ۲۰۱۸ (۱۰ روز)
نوسانات قیمت Bitcoin در ماه آپریل سال ۲۰۱۸ (۱۰ روز)

اگر تعداد مشاهدات زیاد باشد (مثلا مطالعه قیمت Bitcoin طی ۵ سال متوالی)، دایره ها باعث ناخوانا شدن نمودار می‌شوند. بنابراین در چنین شرایطی، با حذف دایره ها نموداری به نام Line Chart رسم می‌کنیم.

برای کسب اطلاعات بیشتر در رابطه با Connected Scatterplot اینجا کلیک کنید.
برای آشنایی با روشِ رسمِ Connected Scatterplot در زبان برنامه‌نویسی Python اینجا کلیک کنید.

۱۱. نمودار Line Chart

با حذف دایره ها از Connected Scatterplot نموداری متشکل از فقط خطوط متصل کننده نقاط به نام Line Chart پدید می‌آید که برای نمایش نوسانات طولانی مدت (مشاهدات زیاد)، خوانا تر است.

اگر تعداد مشاهدات، محدود است، Connected Scatterplot اطلاعات بیشتری را منتقل می‌کند.

نوسانات قیمت Bitcoin از آپریل ۲۰۱۳ تا آپریل ۲۰۱۸ (۵ سال)
نوسانات قیمت Bitcoin از آپریل ۲۰۱۳ تا آپریل ۲۰۱۸ (۵ سال)

از Line Chart می‌توان برای نمایش نوسانات و تکامل چندین متغیر عددی به طور همزمان استفاده کرد. با این حال باید توجه شود که اگر تعداد متغیر های مورد بررسی زیاد باشد، این نمودار خوانایی خود را از دست داده و به چیزی به نام Spaghetti Chart تبدیل می‌شود.

نمایش تعداد زیادی متغیر در یک Line Chart نمودار را به یک Spaghetti Chart تبدیل می‌کند.
نمایش تعداد زیادی متغیر در یک Line Chart نمودار را به یک Spaghetti Chart تبدیل می‌کند.

معمولا هدف از نمایش همزمان چند متغیر در یک Line Chart مقایسه یکی از آنها با بقیه است. در چنین حالتی می‌توانید با برجسته کردن نمودار آن متغیر و کمرنگ کردن بقیه از تبدیل شدن نمودار به Spaghetti Chart جلوگیری کنید.

برجسته کردن خطوط مربوط به یک متغیر و کمرنگ کردن بقیه خطوط راه حلی برای مقابله با spaghetti Chart است.
برجسته کردن خطوط مربوط به یک متغیر و کمرنگ کردن بقیه خطوط راه حلی برای مقابله با spaghetti Chart است.

نکته دیگری که در رابطه با Line Chart مهم است، این است که نیازی نیست محور Y در این نمودار حتما از صفر شروع شود. گاهی نمایش آن از جایی بالاتر از صفر (زوم کردن روی نمودار)، الگوی تغییرات را بسیار بهتر نشان می‌دهد.

شروع محور Y از صفر در مقایسه با بریدن آن
شروع محور Y از صفر در مقایسه با بریدن آن

برای کسب اطلاعات بیشتر در رابطه با Line Chart اینجا کلیک کنید.
برای آشنایی با روشِ رسمِ Line Chart در زبان برنامه‌نویسی Python اینجا کلیک کنید.

۱۲. نمودار Area Chart

گاهی با رنگ زدنِ فضای زیرِ منحنیِ Line Chart و بررسیِ حجمِ رنگ‌آمیزی شده در طول زمان، نوسانات و الگوی تکاملیِ متغیر، واضح تر می‌شود. معمولا از همان رنگِ استفاده شده برای منحنی با کمی Transparency برای رنگ زدن زیر منحنی استفاده می‌شود.

تکامل قیمت Bitcoin از آپریل ۲۰۱۳ تا آپریل ۲۰۱۸
تکامل قیمت Bitcoin از آپریل ۲۰۱۳ تا آپریل ۲۰۱۸

برای بررسی نوسانات چند متغیر به طور همزمان در یک Area Chart، مانند Line Chart عمل نمی‌کنیم. بلکه از نمودار های دیگر مثل Stacked Area Plot استفاده می‌شود.

برای کسب اطلاعات بیشتر در رابطه با Area Chart اینجا کلیک کنید.
برای آشنایی با روشِ رسمِ Area Chart در زبان برنامه‌نویسی Python اینجا کلیک کنید.

۱۳. نمودار Stacked Area Plot

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

نمودار Stacked Area Plot و بررسی الگوی تکاملِ یک متغیر برای قاره های مختلف. بالاترین منحنی، نشان دهنده الگوی تکاملِ متغیر برای کل جهان است. همانطور که در شکل مشخص است، در اواخر نمودار، سهم اروپا از متغیر مربوطه چشمگیر تر از بقیه قاره ها بوده است.
نمودار Stacked Area Plot و بررسی الگوی تکاملِ یک متغیر برای قاره های مختلف. بالاترین منحنی، نشان دهنده الگوی تکاملِ متغیر برای کل جهان است. همانطور که در شکل مشخص است، در اواخر نمودار، سهم اروپا از متغیر مربوطه چشمگیر تر از بقیه قاره ها بوده است.

برای کسب اطلاعات بیشتر در رابطه با Stacked Area Plot اینجا کلیک کنید.
برای آشنایی با روشِ رسمِ Stacked Area Plot در زبان برنامه‌نویسی Python اینجا کلیک کنید.

۱۴. نمودار Stream Graph

گاهی تنها چیزی که از یک Stacked Area Plot می‌خواهیم، نمایشِ نسبیِ سهمِ هر گروه (هر متغیر) از کل گروه ها طی یک بازه زمانی است. در چنین شرایطی می‌توان از یک نوع خاص از Stacked Area Plot به نام Stream Graph استفاده کرد. در Stream Graph تیزی لبه ها گرفته شده و منحنی ها حول یک محور افقی رسم می‌شوند.

واضح است که چنین نموداری فقط منتقل کننده ی نسبتِ سهمِ هر گروه از کل است و برای بررسی الگوی تکاملی یک گروه خاص مناسب نیست.

نمودار Stream Graph
نمودار Stream Graph

برای کسب اطلاعات بیشتر در رابطه با Stream Graph اینجا کلیک کنید.
برای آشنایی با روشِ رسمِ Stream Graph در زبان برنامه‌نویسی Python اینجا کلیک کنید.

۱۵. نمودار Barplot

این نمودار برای نمایش رابطه ی بین یک متغیر دسته ای (Categorical) و یک متغیر عددی (Numerical) بکار می‌رود. طول Bar ها نشان دهنده اندازه متغیر عددی به ازای هر متغیر دسته ای است. توجه کنید که این نمودار را با Histogram اشتباه نگیرید. در Histogram همیشه یک متغیر عددی داریم که می‌خواهیم توزیع آماری آن را نمایش دهیم اما در Barplot یک متغیر دسته ای و یک متغیر عددی داریم و می‌خواهیم رابطه بین آنها را به تصویر بکشیم. اگر ترتیب مقادیر متغیر دسته ای اهمیتی ندارد، بهتر است آنها را به ترتیب مقدار عددی مرتب کنید تا نمودار خواناتری داشته باشید. زیرا در این صورت نمودار Barplot نه تنها نمایشگر مقدار عددی هر دسته است، بلکه ترتیب و رتبه ی هر دسته را نیز نشان می‌دهد.

نمودار Barplot که ترتیب مقادیر متغیر دسته ای در آن مهم بوده (مثلا ماه های سال) و به همین دلیل بر اساس مقدار عددی مرتب نشده
نمودار Barplot که ترتیب مقادیر متغیر دسته ای در آن مهم بوده (مثلا ماه های سال) و به همین دلیل بر اساس مقدار عددی مرتب نشده

اگر دو متغیر دسته ای موجود باشند می‌توان از انواع زیر استفاده کرد:
- نمودار Grouped Barplot: مقادیر مربوط به متغیر دسته ای دوم کنار هم قرار میگیرند.
- نمودار Stacked Barplot: مقادیر مربوط به متغیر دسته ای دوم به صورت تجمعی روی هم قرار میگیرند.
- نمودار Percent-stacked Barplot: مقادیر مربوط به متغیر دسته ای دوم به صورت نسبی (درصدی) روی هم قرار میگیرند. به این معنی که مجموع آنها باید ۱۰۰ شود.

برای کسب اطلاعات بیشتر در رابطه با Barplot اینجا کلیک کنید.
برای آشنایی با روشِ رسمِ Barplot در زبان برنامه‌نویسی Python اینجا کلیک کنید.

۱۶. نمودار Lollipop Plot

همانطور که در شکل زیر مشخص است،‌ زمانی که طول تعدادی از Bar های کنار هم در Barplot هم اندازه است، شکل ناهنجاری شبیه به کرکره ایجاد می‌شود. در این حالت، برای زیبایی بیشتر می‌توان از Lollipop Plot استفاده کرد.

استفاده از Lollipop Plot به جای Barplot
استفاده از Lollipop Plot به جای Barplot

برای کسب اطلاعات بیشتر در رابطه با Lollipop Plot اینجا کلیک کنید.
برای آشنایی با روشِ رسمِ Lollipop Plot در زبان برنامه‌نویسی Python اینجا کلیک کنید.

۱۷. نمودار Pie Plot

برای نمایش دادنِ سهم مقادیر یک متغیر دسته ای از کل مقادیر، می‌توان از Pie Plot استفاده کرد. در این نمودار به ازای هر متغیر دسته ای، یک برش از دایره در نظر گرفته می‌شود که زاویه ی آن بر اساس درصد سهم آن گروه از کل گروه ها تعیین می‌شود.

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

حال نتیجه را با تصویر زیر مقایسه کنید!

برای کسب اطلاعات بیشتر در رابطه با Pie Plot اینجا کلیک کنید.
برای آشنایی با روشِ رسمِ Pie Plot در زبان برنامه‌نویسی Python اینجا کلیک کنید.

۱۸. نمودار Radar Chart

زمانی که تعدادی متغیر کمّی وجود دارد و می‌خواهیم تعداد اندکی از مشاهدات مربوط به این متغیر ها را نشان دهیم، می‌توانیم از Radar Chart (نام‌های دیگر: Spider Chart و Web Chart) استفاده کنیم. در این نمودار، هر مشاهده شکل ظاهری مختص به خود را دارد.

در حالت کلی عملکرد Shirly بهتر از Sonia بوده، اما در درس های sports و english و R-coding نمره ی Sonia بهتر است.
در حالت کلی عملکرد Shirly بهتر از Sonia بوده، اما در درس های sports و english و R-coding نمره ی Sonia بهتر است.

برای کسب اطلاعات بیشتر در رابطه با Radar Chart اینجا کلیک کنید.
برای آشنایی با روشِ رسمِ Radar Chart در زبان برنامه‌نویسی Python اینجا کلیک کنید.

۱۹. نمودار Parallel Plot

زمانی که تعدادی متغیر کمّی وجود دارد و می‌خواهیم تعداد زیادی از مشاهدات مربوط به این متغیر ها را در یک شکل، نشان دهیم، می‌توانیم از Parallel Plot (نام کاملتر: Parallel Coordinates Plot) استفاده کنیم. در این نمودار،‌ هر محورِ عمودی، معرف یک Feature (متغیر) است که می‌تواند واحد خود را داشته باشد و مشاهدات توسط خطوطی که نقاطِ روی محور های عمودی را قطع می‌کنند نشان داده می‌شوند. همانطور که در شکل دیده می‌شود، می‌توان از خطوط رنگی برای دسته بندی مشاهدات استفاده کرد.

همانطور که در شکل مشخص است، مشاهدات دسته ی setosa دارای Petal های کوچکتر و Sepal های عریض تر هستند.
همانطور که در شکل مشخص است، مشاهدات دسته ی setosa دارای Petal های کوچکتر و Sepal های عریض تر هستند.

برای کسب اطلاعات بیشتر در رابطه با Parallel Plot اینجا کلیک کنید.
برای آشنایی با روشِ رسمِ Parallel Plot در زبان برنامه‌نویسی Python اینجا کلیک کنید.

۲۰. سایر نمودار ها

تا اینجا با ۱۹ عدد از پرکاربردترین نمودار ها در Data Visualization آشنا شدید، اما همانطور که قبلا هم اشاره شد، اینها فقط تعدادی از نمودار های آماری موجود برای به تصویر کشیدن داده ها اند و می‌توانید با مراجعه به سایت data-to-viz.com با سایر نمودار ها نیز آشنا شوید.

این پوستر انواع نمودار های قابل استفاده برای به تصویر کشیدن داده‌ها بر اساس نوع داده ها را نشان می‌دهد.
این پوستر انواع نمودار های قابل استفاده برای به تصویر کشیدن داده‌ها بر اساس نوع داده ها را نشان می‌دهد.


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

https://www.data-to-viz.com/story/OneNum.htm
https://www.data-to-viz.com/story/TwoNum.html
https://www.data-to-viz.com/story/TwoNumOrdered.html
https://www.data-to-viz.com/story/ThreeNum.html
https://www.data-to-viz.com/story/OneCatSevOrderedNum.html
https://www.data-to-viz.com/story/SeveralNum.html
https://www.data-to-viz.com/story/SevCatOneNumNestedOneObsPerGroup.html
https://www.data-to-viz.com/story/OneNumOneCat.html
https://www.data-to-viz.com/story/OneNumOneCatSeveralObs.html

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

منبع: https://vrgl.ir/iqWnF

حمیدرضا حسین خانی
۱۰آذر

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

تقریبا پارسال بود که ساندار پیچای، مدیر عامل شرکت گوگل، طی پُستی در وبلاگ این شرکت اعلام کرد که جهان در حال گذر از حالت Mobile-first به حالت AI-first است و شرکت گوگل تمام محصولاتش را با این محوریت توسعه می‌دهد. بنابراین واضح است که در این جهانِ AI-first استفاده از هوش مصنوعی برای تولید محصولات و آموزش مفاهیم و کاربرد‌های آن برای کارآفرینان و مهندسان بسیار حا‌یز اهمیت است.

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

سلول عصبی (Neuron) و مدل مصنوعی آن (Artificial Neuron)
سلول عصبی (Neuron) و مدل مصنوعی آن (Artificial Neuron)

شبکه عصبی ژرف (Deep Neural Network) متشکل از چند لایه از Artificial Neuron های متصل به هم
شبکه عصبی ژرف (Deep Neural Network) متشکل از چند لایه از Artificial Neuron های متصل به هم

طی این پست، با ۳۰ نمونه از جدیدترین و هیجان‌انگیزترین کاربرد‌های یادگیری ژرف (Deep Learning) آشنا خواهیم شد. واضح است که کاربردهای امروزیِ این علم،‌بسیار فراتر از این تعداد اندک اند.

۱. برچسب گذاری خودکار تصاویر

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

استفاده از یک شبکه عصبی ژرف از نوع CNN برای برچسب گذاری خودکار در Google Photos
استفاده از یک شبکه عصبی ژرف از نوع CNN برای برچسب گذاری خودکار در Google Photos

۲. تبدیل گفتار به نوشتار

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

استفاده از شبکه عصبی بازگشتی ژرف در سیستم بازشناسی گفتار شرکت گوگل باعث بهبود ۳۰ درصدی عملکرد آن گردیده است
استفاده از شبکه عصبی بازگشتی ژرف در سیستم بازشناسی گفتار شرکت گوگل باعث بهبود ۳۰ درصدی عملکرد آن گردیده است

۳. رتبه بندی صفحات وب

زمانی که عبارتی را در موتور جستجوی گوگل جستجو می‌کنید، نتایج حاصل، بر اساس حدوداً ۱۰۰ معیار مختلف (Ranking Signals) برای شما مرتب می‌شوند که بسیاری از این ۱۰۰ معیار راز‌هایی اند که کسی خارج از گوگل از آنها اطلاعی ندارد. با این حال طبق اعلام این شرکت، سومین سیگنال مهم و تاثیر گذار در بین این صد سیگنال، یک شبکه عصبی ژرف به نام RankBrain است که در سال ۲۰۱۵ در آزمایشگاه Google Brain ساخته شده است.

شبکه عصبی RankBrain، سومین سیگنال تاثیر گذار در رتبه بندی موتور جستجوی گوگل
شبکه عصبی RankBrain، سومین سیگنال تاثیر گذار در رتبه بندی موتور جستجوی گوگل

۴. پاسخ دهی خودکار در نرم‌افزار های پیام‌رسان

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

استفاده از شبکه عصبی بازگشتی برای تولید پاسخ مناسب در اپلیکیشن Gmail
استفاده از شبکه عصبی بازگشتی برای تولید پاسخ مناسب در اپلیکیشن Gmail

۵. توصیف تصاویر

توصیف یک تصویر (یا یک ویدیو) در یک یا چند جمله، یکی از جالب ترین و هیجان‌انگیز ترین کاربرد‌های هوش مصنوعی در بینایی ماشین است و به ما کمک می‌کند ماشین‌هایی بسازیم که اشیاء دیده شده را واقعاً درک کنند. همینطور در روش معکوس می‌توان از روی توصیفات متنی، یک تصویر نسبتا واقعی تولید کرد. با این تفاسیر، تصور تولید یک فیلم از روی فیلمنامه، موضوع دور از انتظاری نیست!

در این تصویر، توصیف دو ماشین مختلف از یک عکس با انسان مقایسه شده است
در این تصویر، توصیف دو ماشین مختلف از یک عکس با انسان مقایسه شده است

۶. تخمین میزان صرفه‌جویی در مصرف انرژی در صورت استفاده از سلول‌های خورشیدی

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

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

۷. تبدیل طرح اولیه (Mockup) به کد HTML

با ظهور کامپیوتر ها، برنامه‌نویس ها، نرم‌افزار‌هایشان را جایگزین بسیاری از افراد خبره و مشاغل کردند، اما به نظر می‌رسد این بار نوبت خودشان است. محققان با استفاده از یادگیری ژرف توانسته اند Mockup های طراحی شده توسط UX Designer ها را به کد HTML تبدیل کنند. با این تفاسیر انتظار برنامه‌نویسی از کامپیوتر ها نیز انتظار دور از ذهنی نیست!

تبدیل طرح اولیه وبسایت به کد قابل پیاده‌سازی توسط شبکه عصبی ژرف
تبدیل طرح اولیه وبسایت به کد قابل پیاده‌سازی توسط شبکه عصبی ژرف

۸. اتوموبیل خودران

یکی از جذاب‌ترین و پردرآمدترین شغل ها در سال ۲۰۱۸ طراحی اتوموبیل‌های خودران است که تماما بر اساس هوش مصنوعی و یادگیری ژرف بنا نهاده شده است. با اینکه هنوز تا قابل استفاده شدن این سیستم ها در زندگی روزمره فاصله داریم اما شرکت هایی مثل Waymo و Tesla به صورت خیلی جدی در حال کار و پژوهش در این حوزه هستند و به زودی شاهد فراگیر شدن این سیستم ها و همینطور پهباد‌های خودمختار خواهیم بود.

استفاده از اتوموبیل های خودران می‌تواند باعث افزایش ایمنی و کاهش خطرات ناشی از رانندگی شود
استفاده از اتوموبیل های خودران می‌تواند باعث افزایش ایمنی و کاهش خطرات ناشی از رانندگی شود

۹. تولید خودکار مراحل جدید در بازی‌ها

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

تولید مراحل جدید بازی با استفاده از هوش مصنوعی و یادگیری ژرف
تولید مراحل جدید بازی با استفاده از هوش مصنوعی و یادگیری ژرف

۱۰. تشخیص چهره از پشت دیوار

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

اما این کافی نیست...

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

۱۱. تنظیم هارمونی رنگ‌ها در تصویر

اگر با نرم‌افزار های ویرایش تصاویر مانند Adobe Photoshop کار کرده باشید، احتمالا ابزارهای تنظیم هارمونی رنگ را دیده اید. هوش مصنوعی و شبکه‌های عصبی ژرف یکی از بهترین روش ها برای انجام این کار اند.

در سمت راست ترین تصویر، هارمونی رنگ‌ها جوری توسط هوش مصنوعی تنظیم شده که انگار نقاشی از ابتدا متعلق به مستربین بوده
در سمت راست ترین تصویر، هارمونی رنگ‌ها جوری توسط هوش مصنوعی تنظیم شده که انگار نقاشی از ابتدا متعلق به مستربین بوده

۱۲. یادگیری و استخراج سبک

هوش مصنوعی قادر است با نگاه کردن به یک تصویر، موسیقی، فیلم یا ...، سبک (Style) آن را یادگرفته و استخراج کند. سپس این سبک را روی تصویر، موسیقی یا ... دیگر اعمال کند.

اعمال سبک تصویر شماره ۲ بر روی تصویر شماره ۱
اعمال سبک تصویر شماره ۲ بر روی تصویر شماره ۱

اعمال سبک تابلوی جیغ بر روی تصویر ما در دفتر کارمون :)
اعمال سبک تابلوی جیغ بر روی تصویر ما در دفتر کارمون :)

اعمال سبک یک نقاشی بر روی تصویر واقعی
اعمال سبک یک نقاشی بر روی تصویر واقعی

۱۳. طراحی لباس بر اساس سلیقه کاربر

این روز ها بیشتر سایت‌های خرده‌فروشی آنلاین، از سامانه‌های پیشنهاد دهنده (Recommender Systems) برای پیشنهاد محصولات به کاربران خود و افزایش Conversion Rate بهره می‌برند، با این حال محققان پا را فرا تر گذاشته و اقدام به ساخت الگوریتم هوشمندی برای طراحی و تولید یک لباس جدید بر اساس سلیقه کاربر کرده اند.

استفاده از هوش مصنوعی برای طراحی مد و پوشاک
استفاده از هوش مصنوعی برای طراحی مد و پوشاک

۱۴. انجام بازی‌ های ویدیویی

هوش مصنوعی ساخت شرکت Google DeepMind موسوم به DQN می‌تواند بازی‌های آتاری را حتی بهتر از انسان بازی کند.

۱۵. انجام بازی های صفحه ای مانند شطرنج و GO

هوش مصنوعی ساخت شرکت Google DeepMind موسوم به AlphaGo توانست لی سدول، قهرمان جهان در بازی Go را شکست دهد. لازم به ذکر است بازی Go به مراتب پیچیده‌تر و سخت تر از بازی شطرنج است. برای آشنایی بیشتر با تاریخچه مسابقات و بازی ها بین انسان و هوش مصنوعی می‌توانید به پست مربوط به نبرد انسان و هوش مصنوعی مراجعه کنید.

هوش مصنوعی AlphaGo برای بازی از شبکه عصبی ژرف استفاده می‌کند
هوش مصنوعی AlphaGo برای بازی از شبکه عصبی ژرف استفاده می‌کند

۱۶. تبدیل تصویر به تصویر

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

نمونه هایی از تبدیل تصویر به تصویر با استفاده از هوش مصنوعی
نمونه هایی از تبدیل تصویر به تصویر با استفاده از هوش مصنوعی

۱۷. آهنگسازی

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

استفاده از هوش مصنوعی در تولید موسیقی
استفاده از هوش مصنوعی در تولید موسیقی

۱۸. نقاشی

هوش مصنوعی میتواند با مشاهده تعدادی نقاشی، نقاشی هایی شبیه به نقاشی های یاد گرفته شده را بکشد و یا نقاشی های شما را با استفاده از مفاهیمی که یاد گرفته تکمیل کند. به عنوان نمونه می‌توانید به وبسایت https://www.autodraw.com مراجعه کنید.

نمونه نقاشی های کشیده شده توسط هوش مصنوعی
نمونه نقاشی های کشیده شده توسط هوش مصنوعی

۱۹. تشخیص چهره

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

طبق اعلام دولت چین، طی دو سال گذشته، ۲۰۰۰ مجرم در این کشور توسط سیستم تشخیص چهره Skynet در معابر دستگیر شده اند.

تشخیص چهره با استفاده از هوش مصنوعی
تشخیص چهره با استفاده از هوش مصنوعی

۲۰. دستیار های هوشمند

همه سیستم‌عامل های امروزی، یک دستیار هوشمند دارند که می‌تواند با فرامین صوتی، انجام بعضی از کار‌ها را ساده تر کند. مانند Google Assistant در اندروید، Siri در iOS و Cortana در Windows . با این حال چند ماه پیش در کنفرانس Google IO 2018، ساندار پیچای، مدیر عامل شرکت گوگل به معرفی نسخه جدید دستیار هوشمند گوگل پرداخت که موجب شگفتی جهانیان شد. قلم ما از توصیف دقیق آن قاصر است و پیشنهاد می‌دهیم برای آشنایی، ویدیوی زیر را مشاهده کنید اما به نظر می‌رسد تخیل پشت فیلم Her در حال نزدیک شدن به واقعیت است.

۲۱. ترمیم تصویر (Image In-painting)

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

ترمیم تصاویر با استفاده از هوش مصنوعی
ترمیم تصاویر با استفاده از هوش مصنوعی

۲۲. توسعه تصویر (Image Out-painting)

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

توسعه تصاویر با استفاده از هوش مصنوعی
توسعه تصاویر با استفاده از هوش مصنوعی

۲۳. باز کردن چشم های بسته در عکس

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

باز کردن چشم های بسته در تصویر توسط هوش مصنوعی
باز کردن چشم های بسته در تصویر توسط هوش مصنوعی

۲۴. حذف قطرات باران از تصویر

همانطور که در شکل زیر مشخص است، هوش مصنوعی قادر است قطرات باران در تصویر ثبت شده از دوربین را حذف کرده و به تصویر واضح تری دست یابد.

حذف قطرات باران در تصویر ثبت شده توسط دوربین با استفاده از هوش مصنوعی
حذف قطرات باران در تصویر ثبت شده توسط دوربین با استفاده از هوش مصنوعی

۲۵. طراحی روکش دندان

هوش مصنوعی حتی قادر است روکش دندان را با دقتی بسیار بهتر از دندانپزشک طراحی کند.

طراحی روکش دندان توسط هوش مصنوعی و یادگیری ژرف
طراحی روکش دندان توسط هوش مصنوعی و یادگیری ژرف

۲۶. همگام‌سازی لب ها در ویدیو با صدا هایی غیر از صدای اصلی

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

۲۷. جستجوی تصاویر با انجام حرکات مرتبط

پروژه Move Mirror یک پروژه سرگرم کننده است که با استفاده از آن می‌توانید جلوی دوربین حرکت هایی را ضبط کرده و تصاویر مرتبط با آن حرکت را جستجو کنید...

۲۸. شما هم رقاص شوید

پروژه Everybody dance now به شما اجازه می‌دهد یک فیلم از رقص ناشیانه خود گرفته و آن را با یک ویدیوی رقص حرفه ای ترکیب کنید. نتیجه حیرت آور خواهد شد!

۲۹. رقابت در محیط های چند عامله

چند هفته پیش خبر مسابقه بین قهرمان های بازی Dota 2 و هوش مصنوعی OpenAI Five تیتر اول خیلی از خبرگزاری ها شد. OpenAI Five یک هوش مصنوعی بسیار پیشرفته است که می‌تواند همانند یک انسان Dota 2 بازی کرده و تصمیمات استراتژیک بگیرد. در واقع این مسابقه نشان داد که هوش مصنوعی می‌تواند در بسیاری از تصمیمات استراتژیک همچون حمل و نقل شهری موفق باشد.

۳۰. شما چی فکر می‌کنید؟!

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

منبع: https://vrgl.ir/EMfo4

حمیدرضا حسین خانی
۱۰آذر

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

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

به همین خاطر، در طول تاریخ چهار نگرش کلی در مورد هوش مصنوعی به وجود آمده است.

  1. اولین افرادی که از واژه هوش مصنوعی استفاده کردند (مثل John McCarthy و Marvin Minsky) به دنبال شبیه‌سازی دقیق مغز انسان و پیاده‌سازی مدل مصنوعی آن بودند تا از این طریق بتوانند ساختار مغز و در نتیجه انسان را بهتر بشناسند به همین خاطر امروزه به افراد با این نگرش، متخصص علوم شناختی (Cognitive Scientist) می‌گویند. متخصصین با این نگرش در واقع به دنبال ساخت سیستم هایی اند که دقیقا همانند انسان فکر کنند.
ماروین مینسکی و جان مک‌کارتی، از بزرگترین دانشمندان علوم شناختی
ماروین مینسکی و جان مک‌کارتی، از بزرگترین دانشمندان علوم شناختی

۲. عده ای از محققان به ویژه افرادی که از علومی همچون روانشناسی وارد این حوزه شده اند، خیلی به دنبال درک دقیق ساختار داخلی مغز و شبیه‌سازی عینی آن نیستند، بلکه به دنبال ساخت سیستم هایی اند که فارق از ساختار داخلی، عملکردی شبیه به عملکرد انسان داشته باشند. Alan Turing از برجسته ترین دانشمندان این حوزه در سال ۱۹۵۰ آزمونی را برای سنجش هوشمندی این سیستم ها پیشنهاد داد که به آزمون تورینگ مشهور است. در این آزمون، سیستم هوشمند مصنوعی باید بتواند یک داور انسانی را در چت طوری فریب دهد که او نتواند تشخیص دهد که در حال صحبت با یک کامپیوتر است! این آزمون در سال ۲۰۱۴ توسط یک چت بات به نام Eugene Goostman پاس شد.

Alan Turing
Alan Turing

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

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

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

بنابراین بسیاری از دانشمندان در حال حاضر مشغول کار بر روی سیستم هایی اند که فارق از ساختار داخلی، بتوانند عملکرد صحیح و عقلانی به ویژه برای حل یک مساله خاص (مثلا بینایی ماشین) داشته باشند.

Yann LeCun, Jeoffery Hinton, Yoshua Bengio, Andrew Ng
Yann LeCun, Jeoffery Hinton, Yoshua Bengio, Andrew Ng

مدلسازی مسایل هوش مصنوعی با استفاده از مفهومی به نام عامل هوشمند:

در هوش مصنوعی، برای مدلسازی و حل مسایل، معمولا به دنبال طراحی و ساخت یک عامل هوشمند (Intelligent Agent) هستیم. عامل هوشمند در یک محیط (Environment) قرار دارد و با آن در تعامل است. در محیط اطراف عامل، رویداد هایی اتفاق می‌افتد که این رویدا‌د‌ها می‌توانند قطعی و قابل پیش‌بینی و یا غیرقطعی و تصادفی باشند. رخ دادن این رویداد ها، تاثیراتی (سیگنال هایی) در محیط دارد که عامل می‌تواند با استفاده از حسگر (Sensor) های خود آنها را مشاهده کند (Perception). البته با توجه به قدرت و قابلیت Sensor های عامل ممکن است بعضی از این سیگنال ها از دید عامل مخفی و برخی دیگر برای آن آشکار باشند. به مجموعه این سیگنال‌ها که عامل از طریق حسگر های خود از محیط دریافت می‌کند State می‌گوییم. عامل برای رسیدن به هدف یا اهداف خود، پس از Perception و با توجه به State دریافت شده از محیط، تصمیم به اجرای یک عمل (Action) خاص گرفته و آن عمل را به کمک عملگر (Actuator) های خود بر روی محیط انجام می‌دهد. انجام این عمل در محیط، خود یک رویداد است که می‌تواند State را تغییر دهد. به بخشی از عامل که با دریافت State در هر لحظه، تصمیم به اجرای یک Action خاص می‌گیرد، Agent Function یا Policy گفته می‌شود.

اجزای مختلف یک عامل هوشمند در این شکل قابل مشاهده اند. Policy با علامت سوال در شکل نشان داده شده است.
اجزای مختلف یک عامل هوشمند در این شکل قابل مشاهده اند. Policy با علامت سوال در شکل نشان داده شده است.

برای مثال انسان را به عنوان یک عامل هوشمند طبیعی تصور کنید. این عامل رویداد های موجود در محیط اطراف خود را توسط حسگر هایش (چشم‌ها، گوش‌ها، لامسه و ...) مشاهده کرده و متوجه وضعیت (State) محیط می‌شود. سپس این وضعیت را در مغز (Agent Function) خود بررسی کرده و تصمیم به انجام یک عمل (Action) خاص در محیط برای رسیدن به هدفش می‌گیرد و این عمل را توسط Actuator های خود (دست و پا، زبان و ...) در محیط به اجرا می‌رساند...

به عنوان مثالی از عامل هوشمند مصنوعی، می‌توان اتوموبیل‌های خودران (Self-driving Cars) را بررسی کرد.

اتوموبیل خودران به عنوان یک عامل هوشمند مصنوعی در حال Perception
اتوموبیل خودران به عنوان یک عامل هوشمند مصنوعی در حال Perception

عامل هوشمند: اتوموبیل خودران
محیط: خیابان، سایر اتوموبیل‌ها، عابرین پیاده، چراغ راهنمایی و ...
حسگر ها: دوربین ها، سرعت‌سنج، Radar ها، LiDAR ها و ...
عملگر‌ها -> فرمان، ترمز، چرخ‌ها و ...
عمل‌ها: گاز دادن، ترمز گرفتن، تغییر دنده، چرخاندن فرمان، بوق زدن و ...
پالیسی: نرم‌افزار موجود بر روی کامپیوتر مرکزی اتوموبیل

سنسور‌های موجود در اتوموبیل خودران Waymo
سنسور‌های موجود در اتوموبیل خودران Waymo

همانطور که احتمالا متوجه شده اید مهمترین وظیفه یک متخصص هوش مصنوعی، طراحی Agent Function در یک عامل هوشمند است.

اولین و ساده‌ترین ایده ای که به برای طراحی Agent Function به ذهن می رسد، این است که در ابتدا دانش لازم برای حل مساله را استخراج کرده و سپس آن را به صورت یک الگوریتم منطقی مشخص، بیان و پیاده‌سازی کنیم. این روش اگرچه به صورت گسترده در سیستم های خبره (Expert System ها) مورد استفاده قرار گرفت اما این روز ها خیلی مورد توجه نیست و از آن با عنوان Good Old-Fashioned Artificial Intelligence یاد می‌شود زیرا همه مسایل مانند مسیله مرتب‌سازی چند عدد نیستند که روش مشخص و قابل بیانی برای آنها وجود داشته باشد. در مقابل، روش دیگر، معروف به یادگیری ماشین (Machine Learning)، ساخت یک عامل یادگیرنده است که به جای دریافت کردن کامل دانش در ابتدای کار، آن را طی تجربه در محیط و به مرور زمان یاد بگیرد. در واقع عامل یادگیرنده، دانش لازم برای حل مساله را به صورت ضمنی و از روی تجربه یاد می‌گیرد. این تجربه معمولا به صورت یک مجموعه داده (Dataset) برای یادگیری به عامل داده می‌شود، از این رو، این روش به Data-driven Approach نیز مشهور است.

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

هر که دیتایش بیش، دیتایش بیشتر!
هر که دیتایش بیش، دیتایش بیشتر!

حال ممکن است برایتان سوال پیش بیاید که:

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

پاسخ اینه که، شرکت گوگل به تازگی موتور جستجوی خود برای Dataset ها را معرفی کرده که می‌تونید از اون استفاده کنید و هر مجموعه دیتایی که لازم دارید رو در اینترنت پیدا کنید!

http://toolbox.google.com/datasetsearch
http://toolbox.google.com/datasetsearch

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

. یادگیری با نظارت (Supervised Learning)
. یادگیری بدون نظارت (Unsupervised Learning)
. یادگیری نیمه نظارتی (Semi-supervised Learning)
. یادگیری تقویتی (Reinforcement Learning)

انواع task ها در یادگیری ماشین بر اساس شکل و نوع Dataset موجود
انواع task ها در یادگیری ماشین بر اساس شکل و نوع Dataset موجود

یادگیری با نظارت (Supervised Learning)

زمانی که Dataset موجود شامل State (مجموعه سیگنال ها) و Action مطلوب متناظر با هر State بود، از روش های Supervised Learning برای آموزش عامل هوشمند استفاده می‌شود.

شکل کلی دیتاست در روش های یادگیری با نظارت
شکل کلی دیتاست در روش های یادگیری با نظارت

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

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

یادگیری بدون نظارت (Unsupervised Learning)

زمانی که Dataset موجود تنها شامل State (مجموعه سیگنال‌ها) است و هیچ Action متناظر با State وجود ندارد از روش های Unsupervised Learning برای آموزش عامل هوشمند استفاده می‌شود.

شکل کلی دیتاست در روش های یادگیری بدون نظارت
شکل کلی دیتاست در روش های یادگیری بدون نظارت

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

در اینجا، عامل هوشمند، با تعدادی نقاشی به صورت Unsupervised آموزش دیده و با کشف روابط معنی دار بین اجزای نقاشی، می‌تواند نقاشی شما را کامل کند.
در اینجا، عامل هوشمند، با تعدادی نقاشی به صورت Unsupervised آموزش دیده و با کشف روابط معنی دار بین اجزای نقاشی، می‌تواند نقاشی شما را کامل کند.

یادگیری نیمه نظارتی (Semi-supervised Learning)

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

یادگیری تقویتی (Reinforcement Learning)

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

شکل کلی دیتاست در روش‌های یادگیری تقویتی
شکل کلی دیتاست در روش‌های یادگیری تقویتی

عامل یادگیرنده برای آموزش دیدن تحت روش‌های یادگیری تقویتی، ممکن است به صورت Real-time و به تعداد دفعات زیاد، با محیط تعامل کرده، با مشاهده State محیط یک Action خاص را روی محیط انجام دهد و به ازای انجام آن عمل، از محیط پاداش (Reward) دریافت کند. سپس استراتژی خود را جوری اصلاح کند که مجموع پاداش‌های دریافتی اش در طول زمان بیشتر شود.

در اینجا، عامل هوشمند که به یکی از روش های Reinforcement Learning آموزش دیده، در هر لحظه، با مشاهده صفحه بازی آتاری به عنوان State می‌تواند یکی از دکمه های دسته بازی را به عنوان Action مناسب انتخاب کند.
در اینجا، عامل هوشمند که به یکی از روش های Reinforcement Learning آموزش دیده، در هر لحظه، با مشاهده صفحه بازی آتاری به عنوان State می‌تواند یکی از دکمه های دسته بازی را به عنوان Action مناسب انتخاب کند.

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

حمیدرضا حسین خانی
۱۰آذر

قصه از جایی شروع شد که سوپرکامپیوتر Deep Blue ساخت شرکت IBM در سال ۱۹۹۷ توانست گری کاسپاروف، قهرمان شطرنج جهان را در رقابتی تنگاتنگ طی ۱۹ حرکت شکست دهد!

این شکست آنقدر برای گری کاسپاروف سنگین بود که او رقیب خود را به تقلب متهم کرد و خواستار تکرار بازی شد.

گری کاسپاروف، بازنده رقابت تاریخی با سوپر کامپیوتر Deep Blue
گری کاسپاروف، بازنده رقابت تاریخی با سوپر کامپیوتر Deep Blue

سوپر کامپیوتر Deep Blue برای بازی شطرنج یک درخت بازی (Game Tree) تشکیل می‌داد و به روش هرس آلفا-بتا (Alpha-Beta Pruning) آن را کوچک می‌کرد. سپس به کمک تراشه های VLSI به صورت همزمان، تمام مسیر های بازی که احتمال می‌داد کاسپاروف آنها را انتخاب کند روی این درخت بررسی می‌کرد تا بهترین حرکت را پیدا کند.

بخش کوچکی از درخت بازی شطرنج
بخش کوچکی از درخت بازی شطرنج

این روش اگر‌چه در آن زمان توانست قدرت سیستم های کامپیوتری را به عموم مردم نشان دهد، اما در واقع فاقد هرگونه یادگیری، تفکر و تصمیم گیری هوشمند بود و صرفا با سرعت بالایی به دنبال مسیر منتهی به برد در مقابل کاسپاروف می‌گشت و فقط برای بازی با او تنظیم شده بود و البته که کاسپاروف این موضوع را فهمیده بود :))

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

به عنوان مثال الگوریتم DQN که در سال ۲۰۱۵ توسط Google DeepMind ارایه شد، با ترکیب روش Q-Learning و شبکه های عصبی کانوولوشنال (Convolutional Neural Networks) توانست همچون یک انسان، بازی های Atari 2000 و حتی حقه های آن را به خوبی یاد گرفته و بازی کند.

در سال ۲۰۱۶ دیگر بازی شطرنج برای کامپیوتر ها چالش پیچیده ای نبود و هر گوشی موبایلی به راحتی از پس آن بر می‌آمد، اما بازی Go به مراتب سخت تر و پیچیده تر از بازی شطرنج بود چون حالت ها و انتخاب های بسیار بیشتری را در اختیار بازیکن ها قرار می‌داد. پس وقت آن رسیده بود که یک بار دیگر قدرت کامپیوتر ها، این بار کامپیوتر های هوشمند را به رخ انسان ها کشید.

بنابراین در ۱۵ مارچ ۲۰۱۶ شرکت Google DeepMind با هوش مصنوعی خود موسوم به AlphaGo در مقابل لی سدول، قهرمان ۱۸ دوره مسابقات جهانی Go ظاهر شد و توانست او را شکست دهد

لی سدول، بازنده رقابت تاریخی با هوش مصنوعی AlphaGo
لی سدول، بازنده رقابت تاریخی با هوش مصنوعی AlphaGo

این سیستم در سال ۲۰۱۷ تحت نام AlphaGo Zero هوشمند تر و تقریبا شکست ناپذیر شد. AlphaGo Zero با استفاده از روش های یادگیری تقویتی ژرف (Deep Reinforcement Learning) و روی ۶۴ عدد GPU و ۱۹ عدد CPU بدون هیچگونه دخالت انسانی بازی Go را فقط با ۵ میلیون بار بازی با خودش طی ۳ روز یاد گرفت. این الگوریتم برای اجرا به یک کامپیوتر شخصی معمولی مجهز به چهار عدد TPU نیاز داشت.

و اما امروز…

با دستاوردی که AlphaGo Zero در سال گذشته برای هوش مصنوعی داشت، قطعا سال ۲۰۱۸ نوبت بازی های چند نفره است. از این رو شرکت OpenAI که در سال ۲۰۱۵ توسط Elon Musk پایه گذاری شد، پیش قدم شده و یک هوش مصنوعی بسیار پیشرفته به نام OpenAI Five را برای بازی Dota 2 خلق کرده است. Dota 2 یک بازی ویدیویی چندنفره آنلاین در ژانر استراتژیک است که در آن هر تیم با پنج بازیکن (قهرمان) که هر کدام می‌توانند یکی از ۱۱۷ نوع قهرمان موجود در بازی باشند در مقابل تیم حریف بازی کرده و سعی در تخریب ساختمان های باستانی حریف را دارد.

بازی ویدیویی Dota 2
بازی ویدیویی Dota 2

هوش مصنوعی OpenAI Five از روش یادگیری تقویتی ژرف (Deep Reinforcement Learning) و الگوریتم Proximal Policy Optimization استفاده کرده و به ازای هر کدام از قهرمان های بازی، یک شبکه عصبی بازگشتی از نوع LSTM را آموزش می‌دهد. این سیستم روزانه به اندازه ۱۸۰ سال با خودش بازی می‌کند و طی دو هفته آموزش روی ۲۵۶ عدد GPU و ۱۲۸۰۰۰ هسته CPU قادر خواهد بود که بازیکنان حرفه ای را مغلوب خود کند.

مسابقات جهانی Dota 2 سال ۲۰۱۸
مسابقات جهانی Dota 2 سال ۲۰۱۸

اگرچه OpenAI Five در مسابقات جهانی ۲۰۱۸ نهایتا بازی را واگذار کرد اما سبک بازی و سطح هوشمندی آن موفقیت بزرگی برای محققان هوش مصنوعی به حساب می‌آید زیرا نشان داد که در شرایط پیچیده و دشواری که حتی انسان‌ها نیز در آن دچار سردرگمی می‌شوند، قادر خواهد بود با اتخاذ تصمیم درست به اهداف از پیش تعیین شده دست پیدا کند.

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

برای آشنایی بیشتر با نحوه کار هوش مصنوعی OpenAI Five تماشای ویدیوی Siraj Raval را به شما پیشنهاد می‌کنیم.

منبع: https://vrgl.ir/3YWuP

حمیدرضا حسین خانی
۱۰آذر

مقدمه

نرم‌افزار Nginx (بخوانید اِنجین اِکس) در واقع یک نرم‌افزار Web server است که می‌تواند به عنوان Reverse proxy یا Load balancer یا Web cache نیز مورد استفاده قرار گیرد.

- تعریف Web server :Web server یا HTTP server نرم افزاری است که بر روی یک سرور سخت‌افزاری نصب شده، Request ها را در بستری مثل HTTP از Client ها دریافت کرده و به آنها پاسخ می‌دهد. این پاسخ ها یا به صورت Static از قبل در مسیری روی سرور ذخیره شده و یا به صورت Dynamic توسط یک Web Application ساخته شده و به سمت Client ها ارسال می‌شوند. مثلا تصاویر، ویدیو ها یا فایل های CSS و Javascript و ... می‌توانند به صورت Static روی سرور ذخیره شده و توسط Web server به Client ارسال شوند. اما اطلاعاتی مثل محصولات خریداری شده توسط کاربر، دانشجویان برتر ترم جاری، آگهی های منقضی شده و ... باید به صورت لحظه ای و Dynamic از دیتابیس ها و ... جمع آوری و تجمیع شده و در قالب یک پاسخ مناسب برای Client ها ارسال شوند.
- تعریف Reverse proxy: یک Proxy server در حالت عادی، یک سرور واسط میان یک Client و سایر سرور ها است. این سرور واسط، جلوی همه درخواست های یک Client قرار گرفته، آنها را دریافت کرده و به جای او به سرور های مقصد ارسال می‌کند. تحریم شکن ها و فیلترشکن های قدیمی تر در واقع یک Proxy server بودند که همه درخواست های کاربر را گرفته و آنها را به جای او به سرور های مورد نظرش ارسال کرده و پاسخ دریافتی را به کاربر بر می گرداندند. (فیلترشکن های امروزی به جای Proxy server از VPN استفاده می‌کنند). اما Reverse proxy برعکس Proxy server معمولی است. این نوع از پراکسی به جای دریافت همه درخواست های یک Client و ارسال آنها به سرور های مختلف (Forward proxy)، درخواست های همه Client ها را دریافت کرده و به یک سرور خاص ارسال می‌کند (Reverse Proxy).
- تعریف Load balancer: با افزایش تعداد Request های وارد شده به یک سرور، منابع بیشتری از آن سرور اشغال می‌شود (Load روی سرور افزایش می‌یابد). با افزایش Load روی سرور، عملکرد آن تحت تاثیر قرار گرفته و پاسخ‌دهی به درخواست ها با کندی روبرو می‌شود. در این صورت، سرور های فعلی جوابگوی نیاز ما نیستند و باید سرور ها را Scale کنیم. ممکن است اولین ایده ای که برای Scale کردن سرور ها به ذهن برسد افزایش قدرت پردازنده و حافظه RAM باشد. به این روش Vertical Scaling می‌گوییم. اما معمولا ایده بهتر استفاده از Server Farm (چند سرور متوسط به جای یک سرور قوی) است که به روش Horizontal Scaling معروف است. در این صورت Load balancer با قرار گرفتن در جلوی ورودی Server Farm، درخواست های وارد شده را دریافت و آنها را بین چند سرور مختلف با عملکرد یکسان توزیع می‌کند.
- تعریف Web cache: معمولا سرو کردن محتوای Static توسط Web server ها بسیار ساده تر و سریعتر از محتوای Dynamic صورت می‌گیرد. برای ساختن محتوای Dynamic معمولا کوئری های نسبتا زمان‌بری به Database ها زده می‌شود و یا الگوریتم های نسبتا پیچیده ای اجرا می‌شوند. بنابراین واضح است که آماده شدن چنین محتوایی نه تنها کندتر از محتوای Static صورت می‌گیرد، بلکه منابع سخت افزاری (RAM و CPU) بیشتری را از سرور اشغال می‌کند. Web cache یا HTTP cache محتوای Dynamic تولید شده برای Request های پرتکرار را به صورت Static در سرور Cache کرده و برای درخواست های بعدی در صورت امکان از آنها استفاده می‌کند. بنابراین پاسخ درخواست های پرتکرار، بسیار سریعتر از حالت عادی داده می‌شود و همچنین بار (Load) وارد شده به سرور نیز بطور چشمگیری کاهش می‌یابد.

با اینکه بیشترین سهم از بازار Web server ها در حال حاضر (۲۰۱۹) در دست Apache HTTP Server است، با این حال Nginx به علت عملکرد بهتر در مواجهه با منابع محدود و همینطور scale پذیری بیشتر، در حال ربودن گوی سبقت از Apache است. البته Web server های دیگری مثل Microsoft IIS و LiteSpeed هم در رده های سوم و چهارم قراردارند که وقت شما را با پرداختن به آنها نمیگیریم ;)

یکی از تفاوت های Nginx با Apache HTTP Server در این است که Apache ماژول هایی دارد که به کمک آنها قادر است محتوای Dynamic (از طریق اسکریپت های PHP یا Python یا ...) را خودش پردازش و تولید کند، اما Nginx برای اینکه سبک تر و سریع تر باشد روی وظیفه اصلی خودش تمرکز کرده و ساختن محتوای Dynamic را به نرم‌افزار های مخصوص این کار مثل php-fpm برای PHP یا uWSGI برای Python می‌سپارد.

یگی دیگر از تفاوت های Apache HTTP Server و Nginx در این است که Apache هنگام سرو محتوای Static می‌تواند از هر Directory، یک فایل به نام htaccess. شامل تنظیمات Apache برای آن دایرکتوری را بخواند و تنظیمات خود را برای آن دایرکتوری Override کند. Override کردن تنظیمات به ازای هر دایرکتوری باعث پیچیدگی در مدیریت تنظیمات می‌شود و همینطور به علت در دسترس بودن، امنیت پایین تری دارد، به همین دلیل Nginx در کل چنین قابلیتی را ارایه نمی‌دهد.

ادامه مطلب: https://vrgl.ir/A3pVz

حمیدرضا حسین خانی
۱۰آذر

مقدمه

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

  • با استفاده از Gitlab Issue Tracker می‌توان issue ها (کارهایی که برای بهبود محصول لازم است مثل پیاده‌سازی قابلیت های جدید یا رفع باگ ها) را برنامه‌ریزی و پیگیری کرد. معروف ترین رقیب Gitlab Issue Tracker نرم افزار Jira است که بسیاری از افراد فعال در حوزه مدیریت پروژه های نرم افزاری آن را ترجیح می‌دهند.
  • با استفاده از Gitlab Version Control می‌توان سورس‌کد نرم‌افزار ها را مدیریت کرد. معروف ترین رقیب Gitlab Version Control، سایت Github است که اخیراً کاربران ایرانی را تحریم کرده و به همین دلیل، شرکت ها استفاده از Gitlab Version Control را ترجیح می‌دهند.
  • با استفاده از Gitlab CI/CD می‌توان فرآیندهای Build و Test و Deploy نرم‌افزار ها را خودکار‌سازی کرد. معروف ترین رقیب Gitlab CI/CD نرم‌افزار Jenkins است که محبوب ترین ابزار در حوزه CI/CD محسوب می‌شود.

مجموعه نرم‌افزار Gitlab در واقع تمام ابزار های لازم برای توسعه نرم‌افزار در قالب متدولوژی های توسعه‌ چابک (Agile Software Development) با فرهنگ DevOps را در قالب یک اکوسیستم یکپارچه ارایه داده است. با این حال، بسیاری از تیم های توسعه نرم‌افزار ترجیح می‌دهند که تنها از بخشی از این اکوسیستم گسترده بهره برده و برای سایر بخش ها از نرم‌افزار های دیگر استفاده کنند. یکی از مرسوم ترین این ترکیب ها، استفاده از نرم‌افزار Jira به عنوان Issue Tracker به همراه Gitlab Version Control است.

به لطف انعطاف پذیری بالای Gitlab می‌توان Gitlab Version Control را به نرم‌افزار Jira متصل کرد و از مزایای هر دو به صورت یکپارچه بهره برد.
به لطف انعطاف پذیری بالای Gitlab می‌توان Gitlab Version Control را به نرم‌افزار Jira متصل کرد و از مزایای هر دو به صورت یکپارچه بهره برد.

گاهی محصولات شما در یک Git Repository واحد ذخیره نمی‌شوند. مثلا ممکن است محصول شما یک پلتفرم تاکسی اینترنتی باشد که به رانندگان و مسافران در یک اپلیکیشن واحد سرویس می‌دهد. شما در واقع از نظر بیزنس دو محصول دارید. محصول رانندگان و محصول مسافران و این دو، issue ها و نیازمندی های خود را دارند که می‌توان در دو پروژه مستقل Jira آنها را مدیریت کرد. اما سورس کد های شما در قالب پنج پروژه مستقل در Gitlab ذخیره می‌شوند. برای مثال این پنج پروژه عبارتند از: Android Application و iOS Application و Web App و Backend و Admin Dashboard.
در چنین شرایطی، Gitlab Issue Tracker به شما اجازه مدیریت Issue ها در قالب دو محصول رانندگان و مسافران را نمی‌دهد و شما را مجبور می‌کند هر Git Repository را به عنوان یک پروژه در نظر بگیرید. حال فرض کنید میخواهید یک قابلیت جدید برای مسافران اضافه کنید تا بتوانند مکان های پر تردد خود را ذخیره کنند. Issue مربوط به این قابلیت در کدام پروژه باید ردگیری شود؟!
با اتصال Gitlab به Jira میتوان دو محصول رانندگان و مسافران را در Jira ایجاد کرد و Product Owner می‌تواند بدون درگیر شدن با مسایل فنی، Issue های هر کدام را به طور مستقل از طریق Jira پیگیری کند. برنامه‌نویسان Task های مربوط به هر Issue را در داخل یکی از پنج پروژه ی Gitlab انجام می‌دهند و با Commit کردن کد ها در Git، وضعیت Issue ها در Jira به صورت خودکار به روز می‌شود.

اتصال Gitlab به Jira به برنامه‌نویسان اجازه می‌دهد که هنگام Commit کردن کد‌های مربوط به یک Issue بتوانند به کارت مربوط به آن Issue در Jira، یک Comment و یا Worklog اضافه کنند و یا با Merge شدن Branch ها به صورت خودکار وضعیت Issue مربوط به آن در Jira را به Done تغییر دهند.

این یکپارچگی برای برنامه‌نویسان و البته مدیران پروژه بسیار ارزشمند است زیرا نیاز برنامه‌نویس به مراجعه به Jira برای افزودن Comment و Worklog و تغییر وضعیت Issue ها را به حداقل می‌رساند و از طرفی باعث می‌شود که وضعیت ها و Worklog های Jira همیشه به روز باشند.

یکی از گله هایی که همیشه Product Owner ها از برنامه‌نویسان دارند این است که به جای وارد کردن Worklog ها به صورت پیوسته و در طول اسپرینت، همه آنها را یک جا در انتهای اسپرینت وارد می‌کنند که این موضوع نه تنها باعث فراموشی زمان واقعی صرف شده برای یک Issue می‌شود بلکه تحلیل زمان در طول اسپرینت را برای Product Owner ناممکن می‌سازد.
دومین گله ای که همیشه Product Owner ها از برنامه‌نویسان دارند، مربوط به آپدیت نکردن وضعیت Issue ها در نرم‌افزار Issue Tracker است.
حق با چه کسی است؟! طبیعتا هر دو! آپدیت بودن وضعیت Issue ها و Worklog ها لازمه کار Product Owner است اما قطعا برنامه‌نویسان کار های مهمتری برای انجام دارند، پس بهتر است به جای آزار خود و دیگران، تا جای ممکن این فرآیند ها را خودکار کنیم.

تنظیمات مربوط به Jira

۱. با اکانت Administrator وارد Jira شوید.

۲. از منوی تنظیمات Jira (چرخ‌دنده بالا سمت راست) گزینه User Management را انتخاب کنید.

۳. در صورت نیاز، مجددا پسورد Administrator را وارد کنید.

۴. با کلیک بر روی دکمه Create User یک کاربر به نام gitlab ساخته و پسورد آن را در جایی یادداشت کنید. این کاربر به نرم افزار Gitlab اجازه می‌دهد تا بتواند بر روی Issue های Jira تغییراتی را اعمال کند. بنابراین در مرحله بعد به این کاربر اجازه نوشتن روی همه پروژه های Jira را خواهیم داد.

۵. در سمت چپ صفحه بر روی Groups کلیک کنید. در سمت راست با وارد کردن نام gitlab-developers و فشردن دکمه Add Group یک گروه جدید با این نام ایجاد کنید.

گروه gitlab-developers به لیست گروه ها در پایین صفحه اضافه می ‌‌‌‌شود.

۶. با کلیک کردن بر روی گزینه Edit members در روبروی آن، وارد صفحه افزودن کاربر به این گروه می‌شویم تا کاربری که ساخته ایم را به آن اضافه کنیم.

۷. در بخش Add members to selected groups نام کاربری که ساخته بودید (gitlab) را وارد کرده و بر روی دکمه Add selected users کلیک کنید. در ستون دوم می‌توانید ببینید که کاربر gitlab به گروه gitlab-developers اضافه شده است.

۸. برای اینکه Gitlab بتواند روی Issue ها، Comment و ... بگذارد، لازم است که به گروه gitlab-developers دسترسی نوشتن (Write) روی همه پروژه های Jira را بدهیم. برای این کار از منوی تنظیمات Jira (چرخ‌دنده بالا سمت راست) گزینه Issues را انتخاب کنید.

۹. در سمت چپ صفحه روی گزینه Permission Schemes کلیک کرده و در سمت راست، دکمه Add Permission Scheme را بزنید.

۱۰. در صفحه بعد یک نام به Permission Scheme داده و بر روی Add کلیک کنید.

با کلیک بر روی دکمه Add به صفحه قبل بازگشته و میبینید که Permission Scheme ای که ساختید به لیست اضافه شده است.

۱۱. بر روی گزینه Permissions مقابل Permission Scheme اضافه شده کلیک کنید.

۱۲. در صفحه باز شده بر روی گزینه Edit در بخش Administer Projects کلیک کنید.

۱۳. در دیالوگ باز شده گزینه Group را از قسمت Granted to انتخاب کرده، سپس گروهی که ساخته بودید (gitlab-developers) را از منوی زیر آن انتخاب کنید و بر روی دکمه Grant کلیک کنید.

حال کاربر gitlab عضو گروه gitlab-developers است و اعضای این گروه اجازه نوشتن روی همه پروژه ها را دارند.

تنظیمات مربوط به Gitlab

۱. با اکانت Administrator وارد Gitlab شوید.

۲. از نوار منوی بالای صفحه بر روی علامت آچار (Admin Area) کلیک کنید.

۳. در سمت چپ صفحه ی باز شده بر روی Service Templates و در سمت راست صفحه بر روی سرویس Jira کلیک کنید.

۴. در صفحه باز شده، با کلیک بر روی گزینه Active سرویس Jira را فعال کنید. (توجه کنید که گزینه های Commit و Merge request نیز فعال باشند)

۵. در بخش Web URL، آدرس اینترنتی Jira (مثلا http://jira.school.ai) را وارد کنید.

۶. بخش Jira API URL را خالی بگذارید.

۶. نام کاربری و کلمه عبوری که برای Gitlab در Jira ساختید را در بخش های Username و Password وارد کنید.

۷. در بخش Transition IDs باید ID های مربوط به Transition های تعریف شده در Jira را به ترتیب وارد کرده و با کاما (,) از هم جدا کنید. در غیر اینصورت Gitlab نمی‌تواند وضعیت Issue ها در Jira را تغییر دهد. Transition ها در واقع همان وضعیت ها در Issue ها اند. (مثلا To-Do یا In Progress یا Done)

برای پیدا کردن Transition ID های Jira می‌توانید از API زیر استفاده کنید. با باز کردن آدرس زیر در مرورگر وب و بررسی پاسخ آن متوجه Transition ID ها در Jira خواهید شد.

https://jira.school.ai/rest/api/2/issue/DRIVER_232/transitions

لازم است در آدرس بالا، http://jira.school.ai را به آدرس اینترنتی Jira و DRIVER-232 را به شناسه یکی از Issue های موجود در Jira که در وضعیت Open قرار دارد تغییر دهید.

در آخر بر روی دکمه Save کلیک کنید.

حال که Gitlab به Jira متصل شده، باید لینک آن در منوی سمت چپ پروژه ها و در زیر بخش Issues قابل دسترس باشد.

۸. حال که از Jira استفاده می کنید در صورت تمایل می‌توانید Issue Tracker خود Gitlab را غیر فعال کنید. برای این کار از منوی سمت چپ پروژه وارد بخش Setting و سپس General شوید و از بخش Visibility, project features, permissions گزینه Issues را غیر فعال کنید.

تغییر وضعیت Issue ها در Jira با Commit کردن در Gitlab

به کمک مفهوم Smart Commit در Jira می‌توان بدون استفاده از دشبورد Jira و تنها با Commit کردن کد ها در Gitlab، روی Issue ها، Comment و Worklog گذاشت و یا وضعیت آنها را هنگام Merge شدن برنچ ها تغییر داد.

اطلاعات بیشتر: https://vrgl.ir/dUZtx

حمیدرضا حسین خانی
۱۰آذر

مقدمه

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

در مبحث مدیریت پروژه‌های نرم‌افزاری، به کوچکترین واحد کاری که برای بهبود و توسعه یک محصول باید انجام شود، یک issue می‌گویند. یک issue می‌تواند یک قابلیت (Feature) جدید در نرم‌افزار، یک ایراد (Bug) یا هر نوع کار قابل انجام برای بهبود و توسعه سیستم باشد. Jira در واقع یک ابزار برای تعریف و پیگیری issue ها یا به عبارتی یک Issue Tracking System است که به مدیران پروژه کمک می‌کند issue ها را تعریف و اولویت‌بندی کرده و به افراد مختلف در تیم بسپارند، همینطور پیشرفت آنها را طی فرآیند‌های استانداردی مثل Scrum و Kanban پیگیری کنند. از طرف دیگر Jira می‌تواند به ابزارهای مدیریت سورس کد مثل Gitlab یا Bitbucket متصل شده و issue ها را به کد‌های مربوط به آنها در پروژه لینک کند.

نرم‌افزار Jira رقبای دیگری مثل YouTrack، Gitlab Issue Tracker، ‌PivotalTracker، Redmine، Bugzilla و ... نیز دارد که هر کدام نقاط قوت و ضعف خود را دارند.

نرم‌افزار Jira در قالب سه بسته نرم‌افزاری مختلف به فروش می‌رسد که بسته به نیاز می‌توان یکی از آنها را خریداری کرد:

  • پکیج Jira Core شامل امکانات پایه برای مدیریت پروژه های بیزنسی (غیر نرم‌افزاری) است.
  • پکیج Jira Software علاوه بر امکانات Jira Core شامل امکانات مربوط به مدیریت پروژه‌های نرم‌افزاری در قالب متدولوژی هایی مثل Scrum است.
  • پکیج Jira Service Desk علاوه بر امکانات Jira Core و Jira Software قابلیت های مربوط به پشتیبانی و امور مشتریان را نیز شامل می‌شود.

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

در این نوشتار به آموزش نصب و البته کرک کردن پکیج Jira Software نسخه ۸.۱.۰ (۶۴ بیتی) بر روی یک سرور Ubuntu خواهیم پرداخت.

نیازمندی‌ها

قبل از هر چیز، به یک کامپیوتر سرور که توسط اعضای تیم قابل دسترس باشد نیاز داریم. این سرور می‌تواند یک لپ‌تاپ روشن در شبکه داخلی شرکت و یا یک VPS در طرف دیگر سیاره زمین باشد. البته واضح است که روشن گذاشتن یک سیستم در شرکت به عنوان سرور Jira نه تنها مقرون به صرفه نیست،‌ بلکه امنیت لازم را هم ندارد و هر لحظه ممکن است اطلاعات مربوط به پروژه‌ها را از دست بدهیم. از طرف دیگر کرک کردن لایسنس Jira روی سرور‌های خارجی نیز ممکن است به دلیل نقض قوانین کپی‌رایت عواقبی را برای سرور و حتی شرکت در پی داشته باشد. بنابراین احتمالا بهترین گزینه استفاده از یک VPS داخل کشور (یا مثلا ابرک های آروان) است. پیشنهاد می‌شود برای این سرور، یک یا دو هسته پردازشی، حداقل ۴ گیگابایت حافظه RAM و حداقل ۲۰ گیگابایت حافظه دیسک در نظر بگیرید. (برای اطلاعات بیشتر و دقیق‌تر اینجا کلیک کنید.) سیستم عامل نصب شده روی این سرور اهمیت خاصی ندارد، با این حال فرض ما در این نوشتار نسخه 64 بیتی Ubuntu است.
برای نصب Jira بر روی سیستم عامل Windows اینجا کلیک کنید.

ادامه: https://vrgl.ir/auat4

حمیدرضا حسین خانی
۱۰آذر

مقدمه

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

پروتکل SSH با رمزنگاری محتوای رد و بدل شده در شبکه (مثل Password و ...) از آنها در مقابل خوانده شدن توسط افراد غیر مجاز در شبکه محافظت می‌کند. اگر چه اسناد افشا شده توسط Edward Snowden در سال ۲۰۱۳ نشان داد که این پروتکل آنقدر ها هم امن نیست و آژانس امنیت ملی آمریکا بارها توانسته اطلاعات رمز شده در این پروتکل را رمزگشایی کند.
پروتکل SSH امنیت محتوای رد و بدل شده در یک شبکه ناامن مثل اینترنت را تامین می‌کند.
پروتکل SSH امنیت محتوای رد و بدل شده در یک شبکه ناامن مثل اینترنت را تامین می‌کند.

معمولا سرویسی به نام ssh (در سیستم عامل های مبتنی بر Debian مثل Ubuntu) یا sshd (در سیستم عامل های مبتنی بر Redhat مثل CentOS) روی سرور فعال و در حال گوش کردن به پورت ۲۲ است. با نصب یک SSH Client مانند OpenSSH یا PuTTY روی کامپیوتر شخصی می‌توان از راه دور به سرویس مذکور روی سرور وصل شد و کنترل سرور را در دست گرفت.

پکیج نرم‌افزاری OpenSSH به صورت پیش‌فرض بر روی سیستم عامل های MacOS و Linux نصب شده است. اما اگر سیستم عامل کامپیوتر شخصی شما Windows است می‌توانید نرم افزار PuTTY را دانلود و نصب کنید تا از راه دور به سرور خود SSH کنید.
پکیج نرم‌افزاری OpenSSH شامل چندین ابزار کاربردی مثل scp و sftp و ssh و ssh-keygen و ... است که جلوتر به معرفی بعضی از آنها خواهیم پرداخت.

اتصال به سرور با استفاده از Username و Password

همانطور که پیشتر گفته شد، پکیج نرم‌افزاری OpenSSH به صورت پیشفرض در بیشتر سیستم عامل ها نصب شده است. بنابراین کافی است وارد یک شبیه‌ساز ترمینال در کامپیوتر شخصی خود (مثلا iTerm2 در MacOS یا Tilix در Linux) شده و دستور ssh USER_NAME@HOST را وارد کرده و کلید Enter را بزنید. دقت کنید که به جای HOST، آدرس IP یا Domain سرور و به جای USER_NAME نام یک کاربر تعریف شده روی سرور را وارد کنید.

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

The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)?

با تایپ کردن yes و زدن کلید Enter روی کیبورد، سرور مذکور به لیست Host های شناخته شده در کامپیوتر شما (به آدرس ssh/known_hosts./~) اضافه شده و در دفعات بعد با این پیام مواجه نخواهید شد. سپس کلمه عبور کاربر از شما پرسیده می شود که در صورت درست وارد کردن آن، یک Terminal Session متصل به سرور برای آن کاربر باز می‌شود و می‌توانید هر کاری که کاربر تعریف شده روی سرور مجاز به انجام آن است را از طریق این ترمینال انجام دهید.

اتصال به سرور با استفاده از Username و Password به هیچ عنوان روش خوبی نیست و سرور شما را در معرض حمله Brute-force قرار می‌دهد. در واقع اگر این روش اتصال روی سرور شما فعال باشد، هکر ها با تولید و امتحان تعداد زیادی رمز عبور به صورت خودکار، سعی در ورود به سرور شما خواهند کرد.
روش جایگزین، استفاده از SSH Key برای اتصال به سرور است.

اتصال به سرور با استفاده از SSH Key

در این روش اتصال، به جای Username و Password از کلید خصوصی (Private Key) و کلید عمومی (Public Key) تولید شده توسط الگوریتم رمزنگاری RSA استفاده می‌شود.

در روش رمزنگاری RSA، برای رمز کردن اطلاعات و ارسال آنها در شبکه، یک جفت کلید (دو کلید)، یکی برای رمزنگاری (Encryption Key) و دیگری برای رمزگشایی (Decryption Key) ساخته می‌شوند. اگر داده ای با یک Encryption Key خاص رمز شده باشد، فقط و فقط با Decryption Key معادل آن رمزگشایی می‌شود. بنابراین اگر سیستمی به نام Alice بخواهد پیامی را به سیستمی به نام Bob بفرستد، باید Encryption Key مربوط به Bob را داشته باشد و پیام را با آن رمز کند و برای Bob بفرستد. با فرض اینکه Decryption Key متعلق به Bob را هیچ کس جز خودش ندارد، می‌توان مطمین بود که فقط Bob می‌تواند پیام را رمزگشایی کند. بنابراین Decryption Key یک کلید خصوصی (Private Key) است و هیچ کس جز مالک اصلی آن نباید آن را داشته باشد اما Encryption Key توسط سایر فرستندگان برای رمز کردن داده ها استفاده می‌شود و از این رو یک کلید عمومی (Public Key) است که می‌توان آن را به راحتی در اختیار بقیه قرار داد.

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

نرم افزار SSH Client به صورت خودکار کلید عمومی (کلید سبز) را از سرور میگیرد و پیام خود را با آن رمز می‌کند و در شبکه اینترنت با پروتکل SSH منتقل می‌کند. سرور می‌تواند پیام رمز شده را با کلید خصوصی خود باز کند.
نرم افزار SSH Client به صورت خودکار کلید عمومی (کلید سبز) را از سرور میگیرد و پیام خود را با آن رمز می‌کند و در شبکه اینترنت با پروتکل SSH منتقل می‌کند. سرور می‌تواند پیام رمز شده را با کلید خصوصی خود باز کند.

کلید خصوصی و عمومی متعلق به سرور (ID متعلق به سرور)، هنگام ساختن User روی سرور ایجاد شده اند و در مسیر /ssh./~ به ترتیب با نام های id_rsa و id_rsa.pub ذخیره شده اند. برای ساختن جفت کلید RSA روی کامپیوتر شخصی خود (Client) می‌توانید از ابزار ssh-keygen در مجموعه نرم‌افزاری OpenSSH استفاده کنید. برای این منظور دستور زیر را در ترمینال اجرا کنید:

1$ ssh-keygen


اجرای این دستور، یک جفت کلید ۲۰۴۸ بیتی (ID متعلق به کلاینت) در مسیر /ssh./~ به نام های id_rsa و id_rsa.pub می‌سازد که برای بیشتر امور به اندازه کافی امن است اما برای اطمینان بیشتر می‌توان از یک کلید بزرگتر (مثلا ۴۰۹۶ بیتی) استفاده کرد:

1$ ssh-keygen -t rsa -b 4096 -C &quotyour_email@example.com"


لازم به ذکر است که مسیر ذخیره شدن ID در هنگام ساخته شدن آن از شما پرسیده می‌شود که با زدن کلید Enter روی کیبورد مقدار پیشفرض آن (/ssh./~) در نظر گرفته می‌شود. همینطور هنگام ساخته شدن ID، یک Passphrase از شما پرسیده می‌شود که می‌توانید آن را خالی بگذارید اما به شدت توصیه می‌کنیم که یک رمز عبور قوی برای این بخش وارد کنید. وارد کردن رمز عبور در این قسمت باعث می‌شود تا در صورت لو رفتن Private Key مربوط به کامپیوتر شما کسی نتواند به راحتی از آن سواستفاده کند.

پس از ساخته شدن ID توسط ابزار ssh-keygen یک Randomart (شبیه تصویر) برای سهولت در بررسی چشمی ایجاد می‌شود.
پس از ساخته شدن ID توسط ابزار ssh-keygen یک Randomart (شبیه تصویر) برای سهولت در بررسی چشمی ایجاد می‌شود.

حال که جفت کلید مربوط به کلاینت ساخته شده، باید کلید عمومی آن را به سرور بدهیم. برای این منظور فایل ssh/id_rsa.pub./~ روی کلاینت که شامل کلید عمومی است را باز کرده و محتوای آن (که با ssh-rsa AAAA شروع می‌شود) را در انتهای فایل ssh/authorized_keys./~ روی سرور کپی می‌کنیم. اگر فایل ssh/authorized_keys./~ روی سرور وجود نداشت می‌توانید با دستورات زیر آن را بسازید:

12mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys


البته که ابزاری به نام ssh-copy-id در پکیج نرم‌افزاری OpenSSH وجود دارد که کار انتقال کلید عمومی به سرور را به صورت خودکار انجام می‌دهد و می‌توانید برای سادگی از آن بر روی کامپیوتر خود استفاده کنید:

1ssh-copy-id USER_NAME@HOST


به جای HOST از IP یا Domain سرور و به جای USER_NAME از نام یک کاربر مجاز بر روی سرور استفاده کنید. واضح است که پس از اجرای دستور بالا، رمز عبور کاربر سرور پرسیده می‌شود بنابراین قابلیت اتصال به سرور با نام کاربری و رمز عبور باید هنگام استفاده از این ابزار فعال باشد. در صورت وارد کردن رمز عبور صحیح، کلید عمومی کامپیوتر به سرور منتقل می‌شود و ازین پس می‌توانید به راحتی و بدون وارد کردن رمز عبور به سرور متصل شوید.

غیر فعال کردن قابلیت اتصال به سرور با استفاده از Username و Password

در بالا گفتیم که فعال بودن این روش اتصال، امنیت سرور را به خطر می اندازد. از طرفی هنگام استفاده از ابزار ssh-copy-id برای انتقال کلید عمومی به سرور، نیاز به فعال بودن این قابلیت داریم. بنابراین پس از انتقال کلید عمومی و اطمینان از اینکه اتصال به سرور با استفاده از SSH Key به درستی کار می‌کند، بهتر است قابلیت اتصال به سرور با استفاده از Username و Password را غیر فعال کنیم. برای این منظور فایل etc/ssh/sshd_config/ را به کمک یک Text Editor مانند vim ویرایش کنید:

در صفحه باز شده، خط PasswordAuthentication را یافته و با پاک کردن کاراکتر # آن را از حالت Comment خارج کرده و عبارت no را مقابل آن درج کنید. سپس تغییرات را ذخیره کرده و از محیط vim خارج شوید. (wq:)

از نظر امنیتی بهتر است ورود به سرور با کاربر root غیر فعال باشد بنابراین پیشنهاد می‌شود خط PermitRootLogin را نیز در فایل مذکور یافته و عبارت no را در مقابل آن درج کنید تا ورود با کاربر root نیز در همین جا غیر فعال شود.

پس از اعمال تغییرات مذکور، لازم است تا سرویس ssh (یا sshd) مجددا راه اندازی شود:

1$ sudo systemctl restart ssh


اگر همه مراحل بالا را درست طی کرده باشید با اجرای دستور ssh USERNAME@HOST روی کامپیوتر خود، بدون رمز عبور به سرور متصل می‌شوید و البته با اجرای این دستور روی کامپیوتر های دیگر (به دلیل عدم تعریف کلید عمومی و غیر فعال بودن ورود به کمک رمز عبور) اتصال امکان پذیر نخواهد بود.


اگر تعداد زیادی سرور و کاربر دارید و به خاطر سپردن IP و Username همه آنها برای شما سخت است می‌توانید نام های ساده تری را به آنها اختصاص دهید. برای این کار فایل ssh/config./~ را ساخته و محتوایی شبیه به محتوای زیر را به آن اضافه کنید:

123Host production1     HostName 172.217.169.238     User hamidreza


حال به جای دستور ssh hamidreza@172.217.169.238 می‌توانید از دستور ssh production1 استفاده کنید.

اطلاعات بیشتر: https://vrgl.ir/dA6o2

حمیدرضا حسین خانی
۱۰آذر

مقدمه

همانطور که می‌دانید، همه Node ها در اینترنت (سرور ها، کامپیوتر ها، موبایل ها و ...) با یک آدرس یکتا (IP Address) شناسایی می‌شوند. این آدرس در واقع یک رشته صفر و یک به طول ۳۲ بیت (۴ بخش ۸ بیتی) است که برای سادگی در نمایش، هر ۸ بیت آن توسط یک عدد دسیمال از ۰ تا ۲۵۵ نمایش داده می شود.

به عنوان مثال،‌ آدرس IP گوگل 216.58.208.78 است و اگر شما این آدرس را در مرورگر وب خود وارد کنید، به سایت Google متصل خواهید شد.

با یک آدرس ۳۲ بیتی می‌توان ۲ به توان ۳۲ آدرس مختلف ایجاد کرد بنابراین نسخه ۳۲ بیتی این آدرس قادر است 4,294,967,296 دستگاه مختلف را در اینترنت آدرس‌دهی کند. واضح است که در عصر اینترنت اشیا که همه دستگاه ها از لپ‌تاپ و موبایل تا ساعت و عینک و تلویزیون و یخچال و ... به اینترنت متصل اند و نیاز به یک آدرس IP دارند، ۴.۳ میلیارد آدرس، بسیار کم است. بنابراین در سال ۱۹۹۸ نسخه ششم از این آدرس (IPv6) معرفی شد که یک آدرس ۱۲۸ بیتی است و می‌تواند ۲ به توان ۱۲۸ (340282366920938463463374607431768211456) دستگاه مختلف را آدرس دهی کند :)

آدرس IPv6 شامل ۸ قسمت ۱۶ بیتی است که هر قسمت را به صورت Hexadecimal (مبنای ۱۶) توسط چهار حرف نمایش می‌دهند.

یافتن آدرس IP در ترمینال لینوکس

با اجرای فرمان زیر در ترمینال لینوکس، اطلاعات بسیار کاملی از آدرس های IP خود در شبکه خواهید دید:

1$ ip addr


اگر سرور شما با کارت شبکه سیمی به اینترنت متصل باشد ممکن است بتوانید با اجرای دستور زیر فقط آدرس IP عمومی خود را در شبکه مشاهده کنید:

1ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

روش دیگر برای مشاهده آدرس IP عمومی سرور در اینترنت، استفاده از وبسایت icanhazip.com است. برای این منظور، دستور زیر را در ترمینال سرور وارد کنید تا Public IP Address سرور را مشاهده کنید

1curl -4 icanhazip.com

منظور از آدرس IP عمومی، آدرس IP ای است که دستگاه شما با آن در اینترنت قابل دستیابی است. بعضی ها به اشتباه به آدرس IP عمومی، Valid IP هم می‌گویند که البته اصطلاح اشتباهی است چون Valid IP با Public IP تفاوت دارد.

برای آشنایی بیشتر با Public IP Address و Private IP Address می‌توانید مقاله آشنایی با VPN را مطالعه کنید.

اطلاعات بیشتر: https://vrgl.ir/wgZvq

حمیدرضا حسین خانی
۱۰آذر

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

قطعا اینطور نیست. به همین دلیل در این پست میخواهیم تا حدی با مفهوم شبکه خصوصی مجازی (Virtual Private Network) و کاربرد های آن در شبکه های کامپیوتری آشنا شویم.

در ابتدا لازم است با دو مفهوم شبکه های خصوصی (Private Network) و شبکه های عمومی (Public Network) آشنا شویم.

زمانی که شما سیستم های کامپیوتری داخل منزل یا دفتر کارتان را به صورت LAN به هم متصل می‌کنید در واقع یک شبکه خصوصی (Private Network) ایجاد کرده اید. سیستم های داخل شبکه خصوصی می‌توانند به راحتی همدیگر را دیده و با هم ارتباط برقرار کنند اما این سیستم ها از بیرون شبکه خصوصی شما (مثلا از طریق اینترنت) قابل دستیابی نیستند. سیستم های کامپیوتری داخل یک شبکه خصوصی می‌توانند هر IP Address دلخواه شما (مثلا 192.168.0.1) را داشته باشند زیرا این IP Address ها فقط داخل شبکه خصوصی شما تعریف شده اند و خارج از شبکه خصوصی شما معنی ندارند. به این IP Address ها Private IP Address گفته می‌شود.

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

بعضی از افراد فعال در حوزه IT به اشتباه از عبارت Valid IP Address به جای Public IP Address استفاده می‌کنند. لازم است بدانید که Valid IP Address مفهوم دیگری است و ربطی به Private/Public IP Address ندارد.

برای آشنایی با IP Address و روش یافتن آن می‌توانید مقاله مرتبط با IP Address را مطالعه فرمایید.


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

برای اتصال به یک شبکه خصوصی از راه دور و از طریق یک شبکه عمومی لازم است یک شبکه خصوصی مجازی (VPN) ایجاد کنید. این اتصال از طریق یک تونل رمزنگاری شده بین کلاینت VPN و شبکه خصوصی شما صورت میپذیرد. شما با وارد کردن یک نام کاربری و کلمه عبور و یا وارد کردن یک Certificate در نرم افزار کلاینت VPN می توانید یک تونل امن به شبکه خصوصی مورد نظرتان باز کنید.

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

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

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

کاربرد های شبکه خصوصی مجازی

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

نکاتی که هنگام استفاده از VPN باید در نظر گرفت

  • اتصال به اینترنت از طریق اتصال به شبکه خصوصی، به خاطر رمزنگاری و طولانی تر شدن مسیر ارسال داده ها، کند تر از حالت عادی است.
  • در رابطه با اتصال به شبکه های خصوصی ای که متعلق به خود شما نیست، محتاط باشید. ممکن است اطلاعات و تاریخچه وب گردی شما توسط سازندگان آن VPN قابل مشاهده باشند.
  • استفاده از VPN های عمومی مثل Hotspot Shield یا 1.1.1.1 برای دور زدن تحریم یا سانسور، در بعضی از کشور ها منع قانونی دارد. مثلا در چین تنها مجاز به استفاده از VPN های مورد تایید دولت هستید. در ایران منع قانونی مشخصی در رابطه با استفاده از VPN در حالت عادی وجود ندارد اما عبور از فیلترینگ برای مقاصد خاصی ممکن است جرم تلقی شود.

برای ایجاد یک شبکه خصوصی مجازی پروتکل های مختلفی از جمله PPTP و L2TP  و OpenVPN و IKEv2/IPSec و Wireguard... وجود دارند که هر کدام مزایا و معایب و کاربرد های خود را دارند. با این حال WireGuard نسبت به بقیه جدیدتر، سبک تر، امن تر و سریع تر است. به همین دلیل Linus Torvalds (خالق linux) آن را در هسته جدید Linux (نسخه 5.6) به صورت پیشفرض قرار داده است.

برای راه اندازی یک VPN با پروتکل WireGuard میتوانید از اسکریپت های موجود در اینجا استفاده کنید.

برای این کار یک سرور Linux (ترجیها Ubuntu) با حداقل منابع (یک هسته پردازشی و 1GB حافظه کافی است) آماده کرده و دستورات زیر را به ترتیب در آن وارد کنید.

سرور VPN شما آماده است و می‌توانید با دستور زیر برای هر Client فایل تنظیمات بسازیدسپس با توجه به سیستم عامل Client، نرم‌افزار مخصوص WireGuard را نصب کرده و با استفاده از فایل تنظیماتی که در مرحله قبل ساخته اید و در مسیر /etc/wireguard/peers/  ذخیره شده است، به VPN متصل شوید.

دانلود نرم افزار کلاینت Windows

دانلود نرم افزار کلاینت macOS

دانلود نرم افزار کلاینت Linux

دانلود نرم افزار کلاینت Android

دانلود نرم افزار کلاینت iOS

اطلاعات بیشتر: https://vrgl.ir/wYQfB

حمیدرضا حسین خانی