loader-img-2
loader-img-2
امضا دیجیتال چیست و بررسی مزایای آن برای کسب و کارهای مختلف
امضا دیجیتال چیست و بررسی مزایای آن برای کسب و کارهای مختلف
امضای الکترونیکی یا امضای دیجیتال قابلیتی است که ما را قادر می سازد تا بدون نیاز به چاپ کاغذ یا استفاده از قلم، قراردادها و اسناد را به صورت آنلاین امضا کنیم. این شیوه از امضا مزایای فراوانی برای امضا کنندگان به همراه خواهد داشت و همچنین می‌تواند باعث کاهش بسیاری از هزینه‌های اضافی شود. در این مقاله قصد داریم امضای دیجیتال را تعریف کنیم و مزایای آن را بیان کنیم. امضای الکترونیکی چیست؟ امضای الکترونیکی تمام ویژگی‌های یک امضای فیزیکی را دارد، اما همان‌طور که از نامش پیداست، کاملا به صورت آنلاین انجام می‌شود. استفاده از امضای دیجیتال در دنیای تکنولوژی و ارتباطات امروزی، تاحدودی امنیت کسب‌وکارهای آنلاین را بهبود بخشیده است و به‌نوعی جایگزین روش‌های سنتی امضاء و احراز هویت شده است. امضاهای الکترونیکی می‌توانند به سه شکل مختلف مورد استفاده قرار گیرد: نام شخص تایپ شود تصویری از امضای فیزیکی بارگذاری شود امضایی که روی صفحه گوشی هوشمند یا تبلت کشیده شودبرخی از امضاهای الکترونیکی از شناسه‌های دیجیتال استفاده می‌کنند تا تایید کنند که شخصی که یک سند را امضا می‌کند همان کسی است که ادعا می‌کند یا خیر. مزایای امضای دیجیتال چیست؟ مهم‌ترین مزیت امضا دیجیتال امنت آن است. قابلیت‌های امنیتی تعبیه شده در امضای دیجیتال تضمین می‌کند که سند تغییر نخواهد کرد و امضاها کاملا قانونی هستند. با این وجود امضا الکترونیکی در مقایسه با امضا فیزیکی مزایای فراوانی دارد. برخی از مهم‌ترین مزایای امضا دیجیتال عبارتند از: استفاده آسان و کاربردی بودن معتبر بودن از لحاظ قانونی دوست‌دار محیط زیست مقرون به صرفه بودن امنیت بالااستفاده از امضای دیجیتال آسان و کاربردی است یکی از تجربیات ناخوشایندی که بسیاری از افرد در ادارات و سازمان‌ها و یا در زمان بستن قرارداد تجربه کرده‌اند، پرینت گرفتن حجم زیادی از اسناد و امضای آن‌ها است. امضای الکترونیکی باعث آسان شدن و تسریع این فرآیند شده است. با استفاده از امضای دیجیتال می‌توان اسناد را بدون نیار به حضور فیزیکی در محل تایید و امضا کرد. از آنجایی که راه حل امضای الکترونیکی به صورت کاملا آنلاین می‌باشد، امضا یا درخواست امضا از هر نقطه‌ای از جهان قابل انجام است. در فرآیند امضای دیجیتال، فردی که قرار است یک سری اسناد را امضا کند، تنها به دو چیز نیاز دارد: دسترسی به اینترنت داشتن یک ایمیل معتبردر صورت وجود این شرایط، جمع‌آوری امضاهای مورد نیاز بسیار آسان خواهد بود. علاوه بر این، اگر اسناد در یک پلتفرم ابری ذخیره شوند، می‌توان خیلی راحت‌تر به افرادی که نیاز به امضای آن‌ها است، دسترسی داشت. در این صورت سند فورا در اختیار آن‌ها قرار خواهد گرفت و مجبور نیستند منتظر بمانند تا این اسناد از طریق پست یا پیک به دست آن‌ها برسد و سپس آن‌ها را پرینت گرفته و امضا کنند. علاوه بر موارد فوق، امضای الکترونیکی، مدیریت اسناد را آسان‌تر می‌کند و باعث سرعت بخشیدن به فرآیندهای اداری می‌شود. همه افرادی که نیاز به امضای یک قرارداد یا توافق‌نامه دارند می‌توانند همزمان به آن دسترسی داشته باشند و در عرض چند دقیقه امضا کنند. همچنین می‌توان دسترسی افراد به اسناد را به صورت سلسله مراتبی تعریف کرد. بدین معنا که ابتدا نفر اول اسناد را امضا می‌کند و پس از آن دسترسی برای نفرات بعدی باز می‌شود. امضا الکترونیکی از لحاظ قانونی معتبر است قوانین حاکم بر امضای الکترونیکی در هر کشوری متفاوت است. به عنوان مثال، بر اساس مقررات الکترونیکی شناسایی و خدمات اعتماد اتحادیه اروپا (eIDAS)، امضاهای الکترونیکی در کشورهای اتحادیه اروپا قابل اجرا هستند. بریتانیا از زمان خروج خود از اتحادیه اروپا، شکل خاص خود را از eIDAS که به عنوان U.K eIDAS شناخته می‌شود، اتخاذ کرده است. قانون ژاپن در مورد امضاهای الکترونیکی و کسب و کار خاطرنشان می‌کند که امضاهای الکترونیکی به اندازه امضاهای فیزیکی معتبر هستند. سایر کشورهایی که امضاهای الکترونیکی دارای وزن و قابلیت اجرایی یکسان یا مشابه با امضای فیزیکی هستند عبارتند از: استرالیا برزیل کانادا چین امارات متحده عربیدر کشور ما نیز امضا الکترونیکی کاملا قانونی و قابل استناد است. با توجه به قانون تجارت الکترونیکی مصوب سال 1382، تردیـدی دراعتبار امضای الکترونیکی وجود ندارد. یک مزیت برجسته امضای الکترونیک پشتوانه حقوقی آن در کشور است از این رو در ماده 7 قانون تجارت الکترونیکی ایران مصوب سال 1382 اعتبار قانونی امضای الکترونیک این شکل تعریف می‌شود که: «هرگاه قانون، وجود امضا را لازم بداند، امضای الکترونیک مکفی است.» پس براساس این ماده، امضای الکترونیک خود به‌تنهایی و بدون نیاز به امضای دستی کفایت می‌کند. امضای دیجیتال برای محیط زیست مفید است جمع‌آوری امضا کاغذی، فرآیندی است که باعث آسیب به محیط زیست و از بین رفتن منابع طبیعی می‌شود. در مرحله اول نیاز به چاپ حداقل یک نسخه فیزیکی از قرارداد است تا اولین نفر آن را امضا کند، سپس قرارداد باید برای امضا کننده بعدی ارسال شود. بسته به نحوه انتقال سند، حمل و نقل می‌تواند باعث مصرف سوخت و انرژی شود. درنهایت سند باید به شخص بعدی یا به مالک اصلی برگردد. هنگامی که همه یک سند کاغذی را امضا کردند، هر امضاکننده معمولا برای بایگانی قرارداد به یک نسخه نیاز دارد. این بدان معناست که کاغذ و جوهر بیشتری مصرف می‌شود و انرژی و سوخت بیشتری برای ارسال قراردادها یا توافقات کاغذ برای هر فرد مورد نیاز است. برای امضاهای دیجیتال الکترونیکی نیازی به کاغذ یا جوهر نیست که این امر به نجات جنگل‌ها کمک می‌کند. همچنین نیازی به ارسال فیزیکی قراردادها از نقطه A به B و بازگشت به تقطه A نیست. از لحاظ اقتصادی، امضاء الکترونیکی مقرون به صرفه‌تر است فرآیند امضای دستی اسناد فیزیکی، هزینه‌های متنوعی به شرکت‌ها تحمیل می‌کند. هزینه محصولات کاغذی، جوهر، هزینه نگهداری پرینترها و دستگاه‌های کپی، هزینه‌های پست یا پیک و به علاوه زمان صرف شده برای تحویل پاکت‌ها به اداره پست یا صندوق پستی همه از جمله هزینه‌هایی است که در طی فرآیند سنتی امضای قراردادها باید پرداخت شوند. ذخیره‌سازی فایل‌ها در فضای ابری و جمع‌آوری امضای الکترونیکی بسیاری از هزینه‌های اداری را حذف می‌کند و از این نظر برای شرکت‌ها بسیار مقرون به صرفه است. علاوه بر این در موارد حساس، شخص مجبور است برای امضای یک قرارداد مهم در محل حاضر شود و یا برای استفاده از خدمات دفاتر اسناد رسمی جهت نظارت بر قراردادها، به یک دفتر اسناد رسمی مراجعه کند. امضای دیجیتال را می‌توان بدون نیاز به شخص ثالث انجام داد و از این رو هم از نظر مالی و هم از نظر زمانی برای شرکت‌ها مقرون به صرفه خواهد بود. امنیت بالای امضای دیجیتال یکی از مهم‌ترین مزایای اسناد الکترونیکی امنیت بالای آن‌ها است. اتفاقات مختلفی ممکن است برای اسناد فیزیکی بیافتد که استاد الکترونیکی در برابر آن‌ها کاملا ایمن هستند. ساده‌ترین اتفاقی که ممکن است برای اسناد کاغذی بیافتد، ریخته شدن یک فنجان چای بر روی این قراردادها است که باعث ناخوانا شدن آن‌ها می‌شود. اسناد امضا شده الکترونیکی می‌توانند از اسناد کاغذی ایمن‌تر باشند. ممکن است برای اسناد چاپ شده و امضا شده اتفاقات زیادی بیفتد. کسی می تواند فنجان قهوه صبح خود را روی یک قرارداد بریزد و آن را ناخوانا کند. یک قرارداد کاغذ می تواند در بازیافت قرار گیرد یا به طور تصادفی خرد شود. همچنین ممکن است خطر سرقت فیزیکی سند وجود داشته باشد. با این حال، هنگامی که با فرآیندهایی سر و کار دارید که در معرض امنیت شدید و استانداردهای انطباق دقیق هستند، امضای دیجیتال چیزی است که به آن نیاز دارید. پلتفرم‌های ابری ایمن می‌توانند قراردادهای امضا شده الکترونیکی و سایر اسناد را امن، سالم و دور از دسترس افراد سودجو نگه‌داری کنند.
تکنولوژی تشخیص زنده بودن چهره چیست و انواع روش های حمله به این سیستم‌ها
تکنولوژی تشخیص زنده بودن چهره چیست و انواع روش های حمله به این سیستم‌ها
بسیاری از سازمان‌ها و کسب و کارها پیش از ارائه خدمات به مردم باید هویت کاربران را تایید کنند. با ظهور تکنولوژی تشخیص چهره در سال‌های اخیر، روش های احراز هویت از شیوه سنتی به آنلاین تغییر کرده است. در سیستم های احراز هویت آنلاین، نرم افزار با دریافت یک عکس سلفی از کاربر، فرآیند احراز هویت را با مقایسه عکس سلفی با تصویر موجود بر روی کارت شناسایی او به صورت خودکار انجام می‌دهد. یکی از چالش‌هایی که شرکت‌های ارائه دهنده خدمات احراز هویت دیجیتال با آن مواجه هستند، خطر حملات جعل هویت به روش‌های گوناگون است. یک راهکار بسیار کارآمد برای رفع این مشکل، استفاده از الگوریتم های تشخیص زنده یا Liveness Detection در نرم افزار احراز هویت آنلاین است. در این مقاله قصد داریم به معرفی تکنولوژی تشخیص زنده بودن چهره بپردازیم و روش‌هایی که برای دور زدن این الگوریتم‌ها ممکن است مورد استفاده قرار گیرند را تحلیل کنیم. تکنولوژی تشخیص زنده بودن چهره چیست؟ تکنولوژی تشخیص زنده بودن یا Liveness Detection عبارت است از توانایی کامپیوترها در تعیین اینکه آیا با یک انسان واقعی مواجه هستند یا خیر. درواقع می‌توان به طرق مختلف رفتارهای انسان را شبیه‌سازی کرد و با استفاده از آن‌ها کامپیوترها را فریب داد. اما به کمک تکنولوژی تشخیص زنده بودن چهره می‌توان این رفتارهای جعلی را تشخیص داد و از ورود کاربران جعلی جلوگیری کرد. سامانه احراز هویت آنلاین آتنا با استفاده از الگوریتم‌های هوش مصنوعی قدرتمند و پیچیده خود قادر است تشخیص دهد که اطلاعات ثبت شده از یک انسان زنده و حاضر تهیه شده است، یا از روی عکس یا فیلم. تاریخچه فناری تشخیص زنده بودن چهره در سال 1950، آلن تورینگ "تست تورینگ" را توسعه داد. این تست قادر بود توانایی کامپیوترها را برای نشان دادن رفتاری شبیه به انسان بسنجد. اما در تشخیص زنده بودن چهره چیزی فراتر از توانایی شناسایی رفتارهای مشابه انسان نیاز است. Liveness Detection یک الگوریتم مبتنی بر هوش مصنوعی است که تعیین می‌کند آیا کامپیوتر با یک انسان زنده در تعامل است یا خیر. اصطلاح Liveness اولین بار توسط خانم دوروتی ای. دنینگ در سال 2001 در یک مقاله در مجله امنیت اطلاعات مطرح شد. او در این مقاله بیان کرد که یک سیستم بایومتریک کارآمد نباید متکی بر به خاطر سپردن یا حفظ کردن اطلاعاتی مانند نام کاربری و رمز عبور باشد. درواقع چنین سیستمی باید به گونه‌ای طراحی شود که فرد بدون کمترین تلاشی بتواند به اکانت‌های شخصی خود دسترسی پیدا کند. اما لازمه دستیابی به چنین سیستمی، یک فرآیند احراز هویت قدرتمند است که از طریق آن بتوان زنده بودن فرد را تشخیص داد.  تشخیص زنده بودن چگونه می‌تواند از ما محافظت کند؟ شما در موبایل یا کامپیوتر شخصی خودتان عکس افراد مختلفی را دارید. همچنین می‌توانید با یک جستجوی ساده در اینترنت عکس هر شخصی را پیدا کنید. سوالی که در اینجا مطرح می‌شود این است که آیا با داشتن یک کپی از تصویر این افراد، می‌توان به اکانت‌های شخصی این افراد دسترسی پیدا کرد؟ جواب این سوال در صورتی که حساب‌های شخصی این افراد با استفاده از الگوریتم‌های تشخیص زنده بودن سه بعدی احراز هویت شده باشند، خیر است. هیچ عکس یا کپی از گواهینامه و پاسپورت این فرد نمی‌تواند کمکی به دسترسی به حساب‌های شخصی او کند. زیرا الگوریتم‌های تشخیص زنده بودن به‌گونه‌ای طراحی شده‌اند که تنها در صورتی به فرد اجازه دسترسی می‌دهند که آن فرد واقعا به صورت فیزیکی پشت سیستم حضور داشته باشد. فناوری 3D Liveness Detection از دسترسی افرادی که قصد دارند با استفاده از تصاویر افراد دیگر، ویدیوهای تقلبی، ماسک‌های شبیه‌سازی شده و سایر حقه‌ها به حساب کاربران دسترسی پیدا کنند، جلوگیری می‌کند. الگوریتم‌های تشخیص زنده بودن، تضمین می‌کنند که فقط انسان‌های واقعی می‌توانند حساب باز کنند و به آن دسترسی داشته باشند. به عنوان مثال شرکت فیس بوک در سال 2019 مجبور شد 5.4 میلیارد حساب جعلی را حذف کند. اگر فیس بوک در ابتدا از فناوری تشخیص زنده بودن برای احراز هویت کاربرانش استفاده می‌کرد، می‌توانست از ایجاد این حساب‌های جعلی جلوگیری کند.   انواع روش‌ها برای جعل یا دور زدن سیستم های احراز هویت سیستم های احراز هویت به دو صورت ممکن است مورد حمله قرار گیرند. این دو روش عبارتند از: Spoof bypassاگر که یک شی غیر زنده که ویژگی‌های انسانی از خود نشان می‌دهد برای احراز هویت مورد استفاده قرار گیرد، spoof اتفاق افتاده است. عکس‌ها، فیلم‌های روی صفحه‌نمایش، ماسک‌ها و عروسک‌ها همگی نمونه‌های رایج spoof به شمار می‌روند. نوع دیگری از تقلب زمانی اتفاق می‌افتد که داده‌های بیومتریک پس از عکس‌برداری دستکاری شوند. به این شیوه از تقلب در احراز هویت bypass گفته می‌شود. برخی از روش‌های تشخیص زنده بودن، هرگز ایمنی کافی ندارند، زیرا داده‌های منحصربه‌فرد کافی برای تایید جعلی نبودن اطلاعات دریافت نمی‌کنند. به عنوان مثال، اگر یک مانیتور 4k  ویدیویی را به دستگاهی با دوربین 2 بعدی و با رزولوشن پایین نشان دهد، اگر هیچ خیرگی یا انحرافی مشاهده نشود، تشخیص اینکه آیا مانیتور 4k  جعلی را نشان می‌دهد یا خیر، تقریبا غیرممکن است. در این شرایط، دوربین وضوح کمتری نسبت به صفحه نمایش دارد و درنتیجه الگوریتم‌های ضعیف زنده بودن فریب خواهند خورد. مهمترین روش‌هایی رایج تشخیص liveness که با استفاده از مانیتورهای با کیفیت بالا قابل دور زدن هستند عبارتند از: پلک زدن لبخند زدن چرخاندن سر پلک زدن ایجاد چهره‌های تصادفی بیان اعداد تصادفیجعل همه این روش‌ها با مانیتورهای با وضوح بالاتر از دوربین‌های مجازی بسیار آسان است. در این وضعیت امنیت کاربر و اعتبار شرکتی که به سختی به دست آمده است به دلیل ادعاهای امنیتی اغراق آمیز Liveness فروشندگان در معرض خطر قرار می گیرد.  
احراز هویت غیر حضوری چیست؟
احراز هویت غیر حضوری چیست؟
روش احراز هویت غیر حضوری یکی از کاربردی‌ترین خدماتی است که می‌توان به مشتریان ارئه نمود. احراز هویت الکترونیکی این امکن را برای کاربران فراهم می‌سازد تا بدون نیاز به حضور فیزیکی در محل، از خدمات سازمان‌های دولتی و غیر دولتی استفاده کنند. در این مقاله قصد داریم به این سوال پاسخ دهیم که احراز هویت دیجیتال چیست و چه مزایایی برای کسب و کارهای مختلف دارد. مسیر شکل‌گیری روش احراز هویت غیر حضوری احراز هویت به طور کلی به فرآیندی گفته می‌شود که برای تشخیص صحت و درستی هویت کاربران و مشتریان استفاده می‌شود. احراز هویت همواره یکی از نیازهای اساسی بشر بوده است و از گذشته بسیار دور نیز وجود داشته است. در گذشته احراز هویت افراد مبتنی بر قوای حافظه بوده و افراد با به یاد آوردن ویژگی‌های ظاهری و جسمانی هر شخص، هویت افراد را احراز می‌کردند. با توجه به اینکه این روش احراز هویت دارای خطای بسیار بالایی بود، شیوه‌های جدید و خلاقانه‌تری معرفی شد. روش های سنتی احراز هویت و معرفی احراز هویت بیومتریک یکی از گام‌های مهم در این راستا، طراحی گذرنامه بود. گذرنامه برای نخستین بار در زمان شاه هنری پنجم در سال 1414 میلادی معرفی شد. علت طراحی چنین سندی در آن زمان این بود که امکان احراز هویت شهروندان انگلیسی در سایر کشورهای مستعمره انگلیس فراهم شود. پس از جنگ جهانی دوم، طراحی اوراق عکس‌دار نظیر پاسپورت امروزی رواج یافت. گام بعدی در مسیر تکامل احراز هویت افراد، استفاده از داده‌های بیومتریک بود. خصوصیات بیومتریک به مجموعه ویژگی‌هایی در هر فرد گفته می‌شود که کاملا منحصر به فرد هستند و در طول عمر او تغییر نمی‌کنند. اثر انگشت یکی از معروف‌ترین مشخصه‌های بیومتریک است که که به صورت گسترده در فرآیند احراز هویت مورد استفاده قرار گرفته است. استفاده از اثر انگشت جهت احراز هویت بیومتریک اولین بار در حوزه جناحی مورد استفاده قرار گرفت و پس از آن در سایر زمینه‌ها نیز گسترش یافت. اینترنت و معرفی اولین روش های احراز هویت الکترونیکی با گسترش تکنولوژی و معرفی اینترنت، شکل جدیدی از ارائه خدمات ایجاد شد. در این شیوه، خدمات به صورت آنلاین برای افراد ارائه می‌شد و از این رو لازم بود که هویت افراد نیز به صورت آنلاین تایید شود. در این دوره اولین روش های احراز هویت غیر حضوری معرفی شد. از جمله اقداماتی که در این مسیر صورت پذیرفت می‌توان به استفاده از نام کاربری و رمز عبور و همچنین احراز هویت پیامکی اشاره کرد. با وجود این، باز هم در بسیاری از سازمان‌ها و موسسات (مثلا بانک‌ها و کارگزاری های بورس) که خدمات حساس به کاربرانشان ارائه می‌دهند، لازم بود احراز هویت اولیه فرد به صورت حضوری انجام شود. بنابراین این شیوه از احراز هویت نیز وابسته به حضور فیزیکی شخص در محل بود و پس از آن فرد با دریافت نام کاربری و رمز عبور می‌توانست به صورت آنلاین به حساب خود دسترسی داشته باشد و از خدمات آن سازمان به صورت غیر حضوری استفاده کند. کاربرد هوش مصنوعی در احراز هویت غیر حضوری یکی از نقاط عطف در توسعه روش های احراز هویت الکترونیکی با معرفی فناوری هوش مصنوعی شکل گرفت. هوش مصنوعی شرایطی را برای محققان فراهم کرد تا بتوانند احراز هویت را به یک فرآیند کاملا خودکار و با ایمنی بالا تبدیل کنند. از طریق هوش مصنوعی شرایطی فراهم شد که در نهایت منجر به شکل‌گیری احراز هویت غیر حضوری شد. در احراز هویت غیرحضوری که به آن احراز هویت الکترونیکی نیز گفته می‌شود، به کمک الگوریتم‌های هوش مصنوعی، هویت فرد طی چند مرحله تایید می‌شود و در هیچ یک از مراحل احراز هویت نیازی به حضور فیزیکی شخص نیست. اهمیت احراز هویت الکترونیکی مراجعه حضوری مشتریان به سازمان‌ها و موسسات دولتی و غیر دولتی همواره باعث ایجاد مشکلات فراوانی برای مردم شده است. در این مکان‌ها معمولا افراد مجبور هستند مدت زمان زیادی را در صف منتظر بمانند تا خدمات موردنظرشان را دریافت کنند. بعلاوه تجمع افراد در مکان‌های سربسته و عدم رعایت فاصله اجتماعی می‌تواند منجر به گسترش ویروس کرونا شود. علاوه بر نارضایتی مشتریان، این مساله می‌تواند باعث افزایش هزینه‌های سازمان‌ها جهت ارائه خدمات بهتر به مشتریان شود؛ زیرا برای ارائه خدمات به تعداد انبوهی از مشتریان، لازم است تعداد کارمندان را افزایش داد که این اقدام باعث تحمیل هزینه‌های فراوانی به این سازمان‌ها می‌شود. نرم افزار احراز هویت غیرحضوری می‌تواند تمام این مشکلات را برطرف کند. با استفاده از  نصب سامانه احراز هویت الکترونیک دیگر نیازی نیست نیست افراد مدت زمان طولانی در صف برای دریافت خدمات منتظر بمانند و همچنین شرکت‌ها و سازمان هایی که از این برنامه استفاده می‌کنند، می‌توانند از نیروهای کاری خود به صورت بهینه‌تری استفاده کنند.  مراحل احراز هویت آنلاین با هوش مصنوعی امروزه بسیاری از سازمان‌ها و ارگان‌های دولتی و خصوصی با بهره‌گیری از فناوری هوش مصنوعی، فرآیند احراز هویت دیجیتال افراد را انجام می‌دهند. بانک‌ها و موسسات مالی، بازارهای مالی و صرافی‌های ارز دیجیتال از جمله بخش‌هایی هستند که از احراز هویت الکترونیکی استفاده می‌کنند.  احراز هویت الکترونیک بر پایه اطلاعات هویتی فرد و تصاویر و ویدئوهایی است که در طی فرآیند احراز هویت آنلاین از فرد خواسته می‌شود. سامانه احراز هویت الکترونیکی آتنا بر اساس اطلاعات زیر هویت مخاطب را تایید می‌کند: شماره ملی شماره سریال پشت کارت ملی تصویر چهره تصاویر حالت‌های مختلف چهره ویدئو درخواستی از مخاطب تصویر امضاء احراز هویت غیر حضوری متشکل از سه پارامتر اصلی است که باید به دقت ارزیابی شوند. این سه پارامتر عبارتند از: تشخیص هویت (Identity Verification) تشخیص زنده بودن (Liveness Detection) تشخیص آگاهی (Awareness Detection)تشخیص هویت به منظور تشخیص هویت افراد لازم است اطلاعات هویتی فرد با داده‌های مرجع که معمولا از سازمان ثبت و احوال دریافت می‌شود، تطبیق داده شود. اطلاعات هویتی مورد نیاز برای این منظور می‌تواند شامل شماره ملی یا شماره گذرنامه باشد که از فرد در هنگام احراز هویت غیرحضوری خواسته می‌شود. همچنین می‌توان این اطلاعات را به کمک الگوریتم‌های بینایی ماشین از طریق اسکن مدارک وی استخراج کرد. تشخیص زنده بودن یکی از پیچیده‌ترین بخش‌های فرآیند احراز هویت دیجیتال اطمینان از این است که اطلاعات ثبت شده توسط کاربر، مانند عکس و فیلم، از یک انسان زنده بوده است و این موارد از روی عکس یا فیلم دیگر گرفته نشده باشند. یکی از روش‌های مرسومی که اکثر سامانه های احراز هویت برای تشخیص زنده بودن فرد استفاده می‌شود، درخواست سوالات پی در پی و درخواست یک عمل خاص از او است. در این روش از کاربر خواسته می‌شودد که چند حرکت خاص را با صورتش انجام دهد. مثلا به راست نگاه کند، به چپ نگاه گند، به بالا نگاه کند، به پایین گاه کند و دهانش را باز کند. سامانه احراز هویت غیر حضوری آتنا همان‌طور که گفته شد، احراز هویت غیرحضوری یکی از نیازهای اصلی سازمان‌ها و کسب و کارهای مختلف به شمار می‌رود. نرم افزار احراز هویت آتنا یکی از معدود سامانه‌های ایمن و کارآمد کاملا ایرانی است که توسط شرکت دانش‌بنیان شناسا طراحی شده است. سامانه احراز هویت آنلاین آتنا حاصل مطالعه و تلاش شبانه‌روزی متخصصانی است که توانسته‌اند قدمی بزرگ در جهت حذف تمامی فرآیندهای احراز هویت سنتی بردارند.
آشنایی با Mixed Precision و مزایای آن
آشنایی با Mixed Precision و مزایای آن
آشنایی با Mixed Precision و مزایای آنهمان‌طور که احتمالا می‌دانید اکثر فریمورک‌های اصلی یادگیری عمیق از جمله Tensorflow و PyTorch به صورت پیش‌فرض با floating point های 32 بیتی فرآیند آموزش شبکه‌های عصبی را انجام می‌دهند. تحقیقات شرکت Nvidia نشان می‌دهد که برای رسیدن به بیشترین دقت استفاده از fp32 لزوما ضروری نیست. این شرکت روشی را به نام Mixed Precision طراحی کرده است که ایده آن براساس همین مساله است که می‌توان بخش‌هایی از فرآیند آموزش را با fp16 به جای fp32 انجام داد. در این روش از ترکیبی از هر دوی این ها استفاده می‌شود که به همین دلیل در اسمش از Mixed استفاده شده است. این روش هیچ اثر منفی‌ای بر روی دقت مدل‌ها ندارد اما باعث افزایش چشمگیر سرعت می‌شود. استفاده از Mixed Precision چه مزایایی دارد؟ با استفاده از fp16 سرعت آموزش شبکه‌ی عصبی شما در حداقل (بسته به معماری مدل) دو برابر خواهد شد. هم‌چنین این کار استفاده از GPU Memory رو نصف می‌کند که موجب می‌شود بتوانید مدل‌های بزرگ‌تری آموزش دهید، مقدار Batch Size را افزایش دهید و یا ورودی شبکه را بزرگ‌تر کنید. به بیان دیگر، یعنی دیگر با خطای Out Of Memory مواجه نخواهید شد! برای مثال در تصویر زیر فرق استفاده از Nvidia V100 در حالت fp16 را در آموزش مدل های مختلف مشاهده می کنید.دقت کنید که این الگوریتم فقط روی معماری‌های جدید Nvidia کار می‌کند. اگر مثل من بیشتر اوقات از Google Colab استفاده می‌کنید تنها وقتی می‌توانید از Mixed Precision استفاده کنید که T4 را به عنوان GPU در اختیار داشته باشید. ولی نگران نباشید، GPU های RTX هم از این قابلیت پشتیبانی می‌کنند. برای این که مطمئن شوید سخت‌افزار شما از این قابلیت پشتیبانی می‌کند باید بررسی کنید که Tensor Core دارد یا نه؛ چون Mixed Precision روی آن اجرا می‌شود. در صورتی که GPU شما Mixed Precision را پشتیبانی نکند، به دلیل رفت‌وآمدهایی که بین fp32 و fp16 انجام می‌دهد حتی باعث کاهش سرعت نیز می‌شود. الگوریتم Mixed Precision چطور کار می‌کند؟ سوال بهتر این است که چه وقتی باید از fp32 استفاده کرد و چه وقتی از fp16؟ قبل از ابداع این روش هم تلاش‌های زیادی شده بود که شبکه‌های عصبی را فقط روی fp16 آموزش دهند؛ ولی مشکل این بود که به دلیل دقت کم‌تر شبکه‌هایی که به این روش آموزش می‌دیدند کسی از آن‌ها استفاده نمی‌کرد. برای درک بهتر روش آموزش Mixed Precision نمودار فوق را درنظر بگیرید. در تصویر بالا - سمت چپ یک مدل معمولی را مشاهده می‌کنید که برای اجرای تمام فرآیندهایش از fp32 استفاده می‌کند. حال به تصویر دوم دقت کنید. توجه کنید که در این حالت ورودی هنوز به شکل fp32 باقی مانده است ولی فرایند forward روی fp16 انجام شده است که در واقع گام اول جهت افزایش سرعت است. همین‌طور مشاهده می‌کنید که برای محاسبه مقدار Loss آخرین خروجی شبکه عصبی تبدیل به fp32 شده است. علت این کار این است که مقدار Loss باید با بیشترین دقت ممکن محاسبه شود. یکی از دلایلی که مدل‌هایی که فقط از fp16 استفاده می‌کنند معمولا به دقت خوبی نمی‌رسند همین است که مقدار Loss را با تخمین بالایی محاسبه می‌کنند؛ اما در این روش چون مقدار Loss روی fp32 محاسبه می‌شود این مشکل پیش نخواهد آمد. پس از محاسبه مقدار Loss مجددا آن را به fp16 تبدیل کرده و سپس فرآیند Backward انجام می‌شود که این کار نیز باعث افزایش سرعت می‌شود. در تصویر پایین - سمت چپ مشخص است که وزن‌ها را ابتدا با fp16 ‌ذخیره کرده؛ ولی بعد از محاسبه گرادیان آن‌ها را جهت به‌روزرسانی به fp32 تبدیل می‌کند. این کار به همان دلیلی برای Loss گفته شد انجام‌ می‌شود؛ در واقع گرادیان‌ها معمولا خودشان بسیار کوچک هستند و وقتی در fp16 اعمال شوند تقریبا باعث هیچ به‌روزرسانی‌ای روی وزن‌ها نمی‌شوند و شبکه آموزش داده نمی‌شود. ممکن است کمی عجیب باشد؛ چون قبلا دیدیم که در فرآیند محاسبه یا Forward وزن‌ها به صورت fp16 بودند ولی برای ذخیره‌سازی و اعمال گرادیان‌ها از آن‌ها در حالت fp32 استفاده می‌شود. در حالت کلی فقط یک وزن وجود دارد که به آن Master Weights گفته می‌شود. این وزن‌ها همواره به صورت fp32 هستند و فقط زمانی که قرار است با آن‌ها محاسبات انجام دهیم (فرآیند Forward) به fp16 تبدیل می‌شوند. چرا به Gradient Scaling نیاز داریم؟ اگر در حالت Forward برای یک لایه خاص ورودی float16 داشته باشید، Backward آن لایه نیز گرادیان‌ها را در float16 ایجاد می‌کند. مقادیر گرادیان‌ها به اندازه‌ای کوچک هستند که ممکن است در float16 قابل نمایش نباشند. این مقادیر به صفر میل می‌کنند (underflow) بنابراین به‌روزرسانی برای پارامترهای مربوطه از بین می‌رود و وزن‌ها هیچ تغییری نمی‌کنند. برای جلوگیری از نابود شدن این گردایان‌ها، Loss شبکه را در یک عدد بزرگ ضرب می‌کنیم و گرادیان‌ها را با استفاده از این Scaled Loss محاسبه می‌کنیم. پس از محاسبه گرادیان‌ها آن‌ها را به همان ضریبی که در Loss ضرب کرده بودیم تقسیم می‌کنیم. این کار باعث می‌شود تاثیر عملیاتی که روی Loss انجام دادیم از بین برود و روی آموزش مدل تاثیری نداشته باشد اما مشکل از بین رفتن گردایان‌ها به خاطر کوچک بودن مقادیرشان حل شده است. این فرآیند در سمت راست پایین تصویر نمایش داده شده است. شبه کد زیر دو مرحله اجرای این کار را نمایش می‌دهد. loss = model(inputs) # step one # We assume gradients are float32. We do not want to divide float16 gradients grads = compute_gradient(loss*512, model.weights) grads /= 512 # step two# then update the weights انتخاب یک عدد مناسب برای Scaling ممکن است کمی سخت باشد. اگر این عدد بیش از حد کوچک باشد مشکل از بین رفتن گرادیان‌های کوچک حل نشده باقی می‌ماند. هم‌چنین اگر خیلی بزرگ باشد مشکل برعکس شده و بسیاری از گرادیان‌ها مقدار بی‌نهایت خواهند داشت. البته جای نگرانی نیست چون PyTorch و Tensorflow به صورت خودکار این عدد را بسته به اندازه گرادیان‌های شبکه انتخاب می‌کنند. پیاده‌سازی تمام کدها همراه با خروجی در این notebook نیز در دسترس است. پس از آشنایی با نحوه کار Mixed Precision استفاده از این تکنیک را در هر دو فریمورک اصلی یادگیری عمیق خواهیم دید. در این دو مثال ما یک مدل را با استفاده از Mixed Precision روی دیتاست CIFAR10 آموزش می‌دهیم. PyTorch از نسخه 1.6 به بعد Mixed Precision به PyTorch اضافه شده و می‌توان به راحتی از آن استفاده کرد. ابتدا کتابخانه‌های معمول را وارد می‌کنیم. import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torchvision.models import mobilenet_v2 دیتاست را دانلود و برای آموزش آماده می‌کنیم. ttransform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0), (255))]) train_ds = datasets.CIFAR10('./', download=True, transform=transform) train_dl = torch.utils.data.DataLoader(train_ds, batch_size=128, shuffle=True) برای استفاده از MP نیاز به وارد کردن amp داریم که به صورت خودکار فرایند تبدیل وزن ها را انجام می دهد. # amp : Automatic Mixed Precision from torch.cuda.amp import GradScaler # for gradient and loss scale from torch.cuda.amp import autocast # Casts operations in float16 & 32 automatically مثل همیشه یک Loss ،Model و Optimizer تعریف می‌کنیم. model = mobilenet_v2() model.classifier = nn.Linear(1280, 10) model.to(device) optimizer = optim.Adam(model.parameters(), lr=0.005)     loss_fn = nn.CrossEntropyLoss().to(device)     حال فقط کافی‌ست فرایند آموزش را تحت Auto Cast Context انجام دهیم. در واقع این Auto Cast تمام تبدیل‌ها را به صورت خودکار برای ما انجام می‌دهد. اگر پارامتر fp16 را برابر False قرار دهیم هیچ فرقی با یک آموزش معمولی نخواهد کرد. def train(fp16=True, device='cuda'):     scaler = GradScaler(enabled=fp16)     loss_avg = 0.0     for i, (inputs, labels) in enumerate(train_dl):        optimizer.zero_grad()       # Casts operations to mixed precision       with autocast(enabled=fp16):           outputs = model(inputs.to(device))           loss = loss_fn(outputs, labels.to(device))           loss_avg = (loss_avg * i + loss.item()) / (i+1)       # Scales the loss, and calls backward()       # to create scaled gradients       scaler.scale(loss).backward()       # Unscales gradients and calls       # or skips optimizer.step()       scaler.step(optimizer)       scaler.update()         if i0==0:              print('[%d, M] loss: %.4f' %(i, len(train_dl), loss_avg)) نکته‌ی دیگر این است که برای Loss و Optimizer از شئ Scaler استفاده کنید تا فرآیند Scaling را به‌طور خودکار انجام دهد. مقدار خروجی‌ها در صورتی که از MP استفاده کنیم را می‌توانید در زیر ببینید: train(fp16=True) # outputs [0,  391]      loss: 1.2953 [100,  391] loss: 1.2431 [200,  391] loss: 1.2172 [300,  391] loss: 1.2056 هم‌چنین مقدار خروجی‌ها در حالتی که مثل قبل شبکه را آموزش دهیم هم به شکل زیر است: train(fp16=False) # outputs [0,  391]      loss: 1.2830 [100,  391] loss: 1.2331 [200,  391] loss: 1.2164 [300,  391] loss: 1.2011 مشخص است که از نظر کیفیت تفاوتی بین دو مدل نیست. برای اطلاعات بیشتر می توانید PyTorch Doc on Mixed Precision را بررسی کنید. Tensorflow 2.X ابتدا کتابخانه‌های مورد نیاز را وارد می‌کنیم. import tensorflow as tf from tensorflow.keras.applications import MobileNetV2 from tensorflow.keras.layers import Dense, Activation برای استفاده از MP در این فریمورک نیاز دارید که یک سیاست سراسری برای مقدار دهی به لایه‌های مدل ایجاد کنید. با این کار تمام لایه‌های شبکه‌ی شما به طور پیش‌فرض از MP استفاده خواهند کرد. با این روش شما حتی می‌توانید روی TPU هم از Mixed Precision استفاده کنید. from tensorflow.keras import mixed_precision # set global dtype for all keras.layers mixed_precision.set_global_policy('mixed_float16') # default is float32, if you use TPUs change it to mixed_bfloat16 همان‌طور که مشاهده می‌کنید تمام محاسبات روی fp16 صورت می‌گیرد ولی وزن‌های شبکه همان‌طور که قبل‌تر گفته شد روی fp32 ذخیره می‌شوند. print('Compute dtype: ', mixed_precision.global_policy().compute_dtype) print('Variable dtype: ', mixed_precision.global_policy().variable_dtype) # outputs Compute dtype:  float16 Variable dtype:  float32 در روند آماده کردن دیتا تفاوتی ایجاد نمی‌شود. درواقع Keras به نوع ورودی شما اهمیتی نمی‌دهد و شما می‌توانید مثل قبل دیتاست خود را بارگذاری کنید. (x_train, y_train), (x_test, y_test) = keras.datasets.cifar10.load_data() x_train = x_train.astype('float32') / 255 x_test = x_test.astype('float32') / 255 هر یک از لایه‌های Keras از سیاست سراسری برای ایجاد وزن‌ها استفاده می‌کنند مگر این که به‌طور صریح حالت دیگری مشخص شود. شما می‌توانید این ویژگی را با override کردن dtype تغییر دهید. نکته‌ی مهم این است که باید آخرین لایه‌ی شبکه عصبی را بدون توجه به نوع آن روی fp32 قرار دهیم تا بتوانیم Loss را روی fp32 محاسبه کنیم. model = tf.keras.Sequential() model.add(MobileNetV2(include_top=False, input_shape=(32, 32, 3)))  model.add(Dense(10)) # use global policy which is float16  # If your model ends in softmax, make sure it is float32. And regardless of what your model ends in, make sure the output is float32. model.add(Activation('softmax', dtype='float32')) پس فراموش نکنید که آخرین لایه هرچه که باشد (Dense یا Softmax یا هر لایه دیگر) باید dtype آن را برابر float32 قرار دهید تا شبکه بتواند Loss را با بالاترین دقت محاسبه کند. حالا تمام قسمت‌ها را به یک تابع تبدیل می‌کنیم که مشخص می‌کند در روند آموزش از MP استفاده می‌شود یا خیر. بخش‌های دیگر هیچ تغییری نخواهند کرد. تابع Fit تمام کارهای دیگر نظیر Scaling را به طور خودکار برای ما انجام می‌دهد. def train(fp16=True, epochs=1):     # set floating point     if fp16:       mixed_precision.set_global_policy('mixed_float16')     else:       mixed_precision.set_global_policy('float32')     # create & compile model     model = tf.keras.Sequential()     model.add(MobileNetV2(include_top=False, input_shape=(32, 32, 3)))     model.add(Dense(10))     model.add(Activation('softmax', dtype='float32')) # last layer must be float32     model.compile(loss='sparse_categorical_crossentropy', optimizer='adam')     # training      model.fit(x_train, y_train, epochs=epochs, batch_size=64) اجرا با فعال کردن MP: train(fp16=True) 782/782 [==============================] - 16s 52ms/step - loss: 1.6211 اجرا در حالت معمولی: train(fp16=False) 782/782 [==============================] - 34s 37ms/step - loss: 1.6675 با مقایسه اجراهای فوق می‌توانید تفاوت سرعت و حتی کمی بهتر بودن کیفیت مدل را کنید. استفاده از Mixed Precision در Custom Training Loop شما می‌توانید از Mixed Precision در حالت Custom Training Loop هم استفاده کنید و در مدل‌های جدیدی که خودتان با استفاده از Keras Sub-classing ایجاد می‌کنید از مزایای MP بهره‌مند شوید. برای این کار نیاز دارید فرایند Gradient Scaling را درون Training Loop خود پیاده‌سازی کنید. راحت‌ترین روش برای انجام این کار این است که از کلاس LossScaleOptimizer استفاده کنید. Optimizer ای را که قبلا استفاده می‌کردید به عنوان ورودی به این کلاس بدهید و از این به بعد به جای آن، از شئ‌ای که این کلاس ایجاد می‌کند به عنوان Optimizer استفاده کنید. این کلاس دو مرحله به Optimizer معمولی شما اضافه می‌کند؛ یکی برای Loss Scaling و دیگری برای Gradient Scaling. برای درک بهتر این مطلب به مثال زیر توجه کنید. class Fp16Training(tf.keras.Model):     def train_step(self, data):         x, y = data         with tf.GradientTape() as tape:             y_pred = self(x, training=True)             loss = self.compiled_loss(y, y_pred, regularization_losses=self.losses)             # scale loss with optimizer             scaled_loss = optimizer.get_scaled_loss(loss)         # used scaled loss for compute gradient         scaled_gradients = tape.gradient(scaled_loss, self.trainable_variables)         # unscaled gradients to default value for stable training         grads = optimizer.get_unscaled_gradients(scaled_gradients)         self.optimizer.apply_gradients(zip(grads, self.trainable_variables))         # as usual         self.compiled_metrics.update_state(y, y_pred)         return {m.name: m.result() for m in self.metrics} مشاهده می‌کنید که از تابع get_scaled_loss برای Scale کردن Loss و از تابع get_unscaled_gradients برای Scale کردن گرادیان‌ها استفاده شده است. حال تنها نکته باقی‌مانده این است که از کلاس LossScaleOptimizer استفاده کنیم تا Optimizer ما آن دو تابع را در اختیار داشته باشد. model = tf.keras.Sequential() model.add(MobileNetV2(include_top=False, input_shape=(32, 32, 3))) model.add(Dense(10)) # last layer or outputs must be float32 if use from_logits=True set dtype in last Dense model.add(Activation('softmax', dtype='float32')) # use custom trainig loop cuistom_model = Fp16Training(model.inputs, model.outputs) optimizer = keras.optimizers.Adam() optimizer = mixed_precision.LossScaleOptimizer(optimizer) # compile model cuistom_model.compile(loss='sparse_categorical_crossentropy', optimizer=optimizer) cuistom_model.fit(x_train, y_train, batch_size=32, epochs=1) برای اطلاعات بیشتر می‌توانید TF Doc on Mixed Precision را بررسی کنید. سرعت بیشتر معماری جدیدی که شرکت NVIDIA توسعه داده است می‌تواند به سرعت عملیات ماتریسی را در fp16 انجام دهد. این عملیات با استفاده از فناوری Tensor Core انجام می‌شود که بیشترین سرعت را زمانی دارد که سایز ماتریس‌های شما ضریبی از 8 باشد. تفاوتی نمی‌کند که از چه معماری شبکه‌ای عصبی استفاده می‌کنید. این فناوری با ماتریس‌هایی که اندازه‌ای از ضریب 8 دارند خیلی سریع‌تر کار می‌کند. نمونه کد زیر نحوه‌ای است که جهت ایجاد مدل جدید پیشنهاد می شود. batch_size = 8*4 layer_input = 8*20 layer_output = 8*40 channel_number = 8*64
آشنایی با چت بات ها
آشنایی با چت بات ها
آشنایی با چت بات هاچت بات چیست؟ چت بات یک برنامه کامپیوتری مبتنی بر هوش مصنوعی است که با شبیه‌سازی گفتگوی (چت) میان انسان‌ها بستری را برای ارتباط انسان با ماشین (کامپیوتر) فراهم می‌کند. این ارتباط به گونه‌ای است که کاربر پاسخ سوالاتش را با یک زبان کاملا شبیه به انسان دریافت می‌کند و بر خلاف سایر سرویس‌های پشتیبانی آفلاین، محدودیتی برای سوالات تعریف نشده است.   روند شکل‌گیری چت بات ها همواره یکی از نیازهای کسب و کارها برقراری ارتباط با مشتریان خود بوده است. تلاش‌های اولیه برای این امر نوشتن راهنما و توضیحات برای محصولات و خدمات ارائه شده در سایت بود که در نتیجه این اقدام بخش سوالات متداول در سایت‌ها شکل گرفت. این بخش با وجود این که به طیف وسیعی از پرسش‌های متداول کاربران پاسخ می‌داد، اما همچنان کاربرانی بودند که نمی‌توانستند جواب سوالاتشان را پیدا کنند. علاوه بر این استخراج سوال و پاسخ از میان انبوه سوالات موجود در این بخش نیز برای کاربر دشوار بود. به دلیل مشکلات گفته شده، کسب و کارها به دنبال بهبود فرآیند این سیستم رفتند. در اولین گام به بخش سوالات متداول موتور جستجو اضافه شد تا کاربران بتوانند با جستجوی یک کلمه خاص سوال و جواب مورد نظرشان را پیدا کنند. ایراد این روش این بود که به دلیل ذات تغییرپذیر زبان، کلماتی که کاربران جستجو می‌کردند همیشه به بخشی از سوالات پیش‌بینی شده اشاره نمی‌کرد. درنتیجه گاهی اوقات با وجود این که سوال و پاسخ آن در میان پرسش‌های متداول وجود داشت، کاربر نمی‌توانست آن را پیدا کند. با توجه به این موارد، ابزارها به سمتی رفتند تا بتوانند مفهوم سوال را درک کنند و یک پاسخ روشن و قطعی به آن بدهند. نتیجه این اقدام شکل‌گیری سیستم‌های سوال و جواب بود. در این سیستم‌ها از پردازش زبان طبیعی (NLP) و شبکه‌های عصبی مصنوعی (ANN) استفاده می‌شود. برای طراحی این سیستم‌ها نیاز است سوالات کاربران دسته‌بندی شود و پاسخ مناسب برای هر یک سوالات درنظر گرفته شود. از جمله مشکلات سیستم سوال و جواب می‌توان به این موارد اشاره کرد که به دلیل ذات پیچیده زبان، در بسیاری از موارد گفتگوها ممکن است به یک مسیر جدید وارد شوند که از قبل پیش‌بینی نشده‌اند. علاوه بر این کاربر همیشه دقیقا به موردی که در ذهن دارد اشاره نمی‌کند و با سوالات پی‌درپی سعی در رساندن منظور خود دارد. از آن‌جایی که در سیستم‌های سوال و جواب پاسخ کاربران را تنها بر اساس آخرین سوال کاربر می‌دهد، موارد ذکر شده مشکل‌ساز خواهند بود. ایده طراحی چت بات ها با هدف رفع مشکلات بیان‌شده شکل گرفت. در چت بات ها علاوه بر استفاده از مزایای سیستم سوال و جواب و استفاده از پردازش زبان طبیعی به منظور درک و استخراج هدف کاربر از سوال، گفتگوهای قبلی کاربر نیز در این فرآیند پاسخگویی درنظر گرفته می‌شوند.   چت‌ بات ها چگونه کار می‌کنند؟ ساز و کار یک چت بات هوشمند  را می‌توان به دو بخش اصلی تقسیم‌بندی کرد. بخش اول عبارت است از فرآیند درک و استخراج هدف کاربر از درخواستی که مطرح کرده است و بخش دوم تشخیص و ارائه پاسخ مناسب به کاربر. قبل از توضیح روند کار چت بات ها لازم است دو اصطلاح مهم intent و entity را تعریف کنیم. مفهوم intent در چت بات به معنای هدف کاربر از طرح یک پرسش است. درواقع چت بات پس از مواجهه با یک درخواست از طرف کاربر باید intent یا آن چیزی که کاربر در زمان طرح پرسش در ذهنش بوده است را تشخیص دهد. در بسیاری از موارد intent یک سوال با بررسی "فعل" آن جمله قابل تشخیص است؛ اما در برخی از موارد لازم است کل سوال تحلیل شود. entity در چت‌بات به موجودیت‌های مستقلی در سوال کاربر گفته می‌شود که به ماشین کمک می‌کند بهترین پاسخ برای درخواست کاربر را پیدا کند. به عنوان مثال فرض کنید کاربری پس از ورود به یک سایت غذا این سوال را مطرح می‌کند: «می‌خواهم یک پیتزای قارچ سفارش دهم.» یا «چطور می‌توانم یک پیتزای قارچ سفارش دهم؟» در پرسش‌های فوق کاملا مشخص است که قصد کاربر از طرح آن‌ها، سفارش غذا است. پس intent در این پرسش‌ها «سفارش غذا» می‌شود. کلمه «پیتزای قارچ» در پرسش‌های فوق entity است. تشخیص این کلمه به عنوان entity به چت بات کمک می‌کند تا بتواند به درستی به کاربر پاسخ دهد. بنابراین وظیفه اصلی چت‌بات شناسایی intent و entity از سوال کاربر و سپس تحلیل و بررسی آن و در نهایت یافتن پاسخ مناسب به پرسش کاربر است. در نهایت به محض انجام این فرآیند، پاسخ مناسب در اختیار کاربر قرار خواهد گرفت. جهت تشخیص intent و entity از پردازش زبان طبیعی استفاده می‌شود و روندی که در آن طی می‌شود مشابه با سیستم سوال و جواب است که بالاتر توضیح داده شد. درنهایت پس از پردازش سوال کاربر intent و entity از آن استخراج می‌شود.   نحوه تشخیص پاسخ مناسب از آنجایی که پیش‌بینی همه حالت‌های ممکن برای گفتگو غیر ممکن است، برای تشخیص پاسخ مناسب، از یک شبکه عصبی استفاده می‌شود. ورودی این شبکه عصبی نمونه‌های گفتگوی انجام شده با کاربر است. در این حالت شبکه عصبی بر اساس نمونه‌های دریافت شده بهترین عمل بعدی را برای پاسخ به کاربر انتخاب می‌کند. این عمل می‌تواند یک پاسخ ثابت از پیش تعیین شده و یا یک عمل خاص باشد. در این بخش می‌توان در صورت ناقص بودن اطلاعات سوال کاربر، با پرسیدن سوالات بیشتر جواب مناسبی به او داد؛ اما حافظه سیستم از پرسیدن سوال تکراری و بی‌جا جلوگیری می‌کند و مانع خستگی کاربر می‌شود.   مزایای چت بات چت بات ها به تدریج در حال دگرگون کردن روش‌های ارتباط کسب و کارها با مشتریان هستند. افزایش تقاضا در استفاده از سیستم‌های چت آنلاین در وب‌سایت‌ها یا اپلیکیشن‌های مختلف یکی از مهم‌ترین دلایلی است که نیاز به چت بات ها را بیش از پیش پررنگ‌تر کرده است. استفاده از چت بات هوشمند مزایای فراوانی برای کسب و کارها به ارمغان می‌آورد. در واقع هر کسب و کاری با استفاده از چت بات می‌تواند استراتژی تعامل یا مشتریانش را متحول کند و تجربه کاربری به مراتب بهتری برای آن‌ها فراهم کند. علاوه بر این، کسب و کارها قادر خواهند بود در فضای رقابتی عملکرد بهتری از خود نشان دهند. مزایای چت بات برای ارائه خدمات به مشتری یکی از بخش‌های مهمی که می‌توان از چت بات ها استفاده کرد، ارائه خدمات پشتیبانی به مشتریان است. کاربرانی که به یک سایت جهت خرید یا استفاده از خدمات آن سایت مراجعه می‌کنند انتظار پاسخگویی سریع دارند. چت بات با تسهیل ارائه خدمات پشتیبانی باعث می‌شود تجربه کاربر در استفاده از این خدمات بهبود یابد. از جمله مواردی که می‌توان در این راستا به آن اشاره کرد عبارتند از: ارائه خدمات 24 ساعته و در 7 روز هفته: چت بات ها همیشه در دسترس و آماده ارائه خدمات به مشتریان هستند. در صورت استفاده از چت بات دیگر نیازی نیست کاربران منتظر اپراتور برای پاسخ به سوال‌هایشان باشند. امکان پاسخ‌گویی هم‌زمان به پرسش کاربران: کسب و کارها با استقرار چت‌بات می‌توانند به صورت هم‌زمان به انبوهی از درخواست‌های مشتریان پاسخ دهند که این امر باعث تسریع روند پاسخ‌گویی به آن‌ها می‌شود. شخصی‌سازی: یکی دیگر از مزایای چت بات ها شخصی‌سازی گفتگو با کاربران منحصر به فرد است. در واقع چت بات با تحلیل مکالماتی که قبلا با کاربر انجام داده است، اطلاعات آن‌ها را استخراج می‌کند و در چت با کاربر از آن‌ها استفاده می‌کند.مزایای چت بات برای کسب و کارها چت بات ها به صورت فوق‌العاده‌ای به کسب و کارها کمک می‌کنند تا یک ارتباط سازنده با مشتریان برقرار کنند. مدیران کسب و کار با استقرار چت بات در فرآیند پشتیبانی سایت می‌توانند با دستیابی به اهداف بازاریابیشان میزان فروش محصولات و خدماتشان را افزایش دهند. در ادامه به برخی از مزایای چت بات ها برای کسب و کارها اشاره شده است: افزایش تعداد مشتریان: همان‌طور که پیش از این گفته شد، چت‌بات با تحلیل رفتار مخاطبان گفتگو با آن‌ها را شخصی‌سازی می‌کند. با داشتن اطلاعات کافی از کاربران می‌توان با طرح سوالات مناسب آن‌ها را به سمتی سوق داد که تبدیل به مشتری شوند. کاهش هزینه‌های خدمات پشتیبانی: استفاده از چت‌بات در واقع نوعی سرمایه‌گذاری به‌ شمار می‌رود که از طریق آن می‌توان هزینه‌های ارائه خدمات به مشتریان را بهینه کرد. در صورت استفاده از چت‌بات، در هزینه‌های مربوط به حقوق و آموزش تیم پشتیبانی صرفه‌جویی می‌شود و این هزینه‌ها را می‌توان روی افزایش کیفیت محصول صرف کرد. پیش‌بینی آینده از طریق شناخت نیازهای مشتریان: علاوه بر مزایای گفته شده در بالا، تحلیل داده‌های به دست آمده از گفتگوی بین چت بات و مشتری کمک می‌کند تا شناخت خوبی از نیازهای مخاطبان بدست آورد. با کسب این اطلاعات می‌توان محصولات و خدمات آینده را به گونه‌ای تنظیم کرد که جوابگوی نیازهای آتی کاربران باشد.حال که با چت بات ها و اهمیت آن‌ها آشنا شده‌اید، حتما موافقید که چت بات ها چگونگی ارتباط کسب و کارها با مشتری‌هایشان را به مرحله جدیدی می‌برد. استفاده از چت بات ها به شما این امکان را می‌دهد تا وقت نیروهای انسانی مجموعه خود را به کارهای مهم‌تر و خلاقانه‌تری اختصاص دهید. ما در شناسا به شما کمک می‌کنیم تا بتوانید چت‌باتی متناسب با نیازهای کسب و کار خود داشته باشید. کافی‌ست از طریق دکمه تماس با ما از منوی بالای صفحه ما را با کسب و کار خود آشنا کنید.
پدیده بیش‌برازش (Overfitting) و راهکارهای مقابله با آن
پدیده بیش‌برازش (Overfitting) و راهکارهای مقابله با آن
پدیده بیش‌برازش (Overfitting) و راهکارهای مقابله با آن  همان‌طور که می‌دانید ساختن یک مدل یادگیری ماشین فقط تغذیه‌ی داده‌ها نیست، بلکه عوامل بسیاری وجود دارند که بر دقت هر مدل تأثیر‌ می‌گذارند. به عنوان مثال، در دنیای واقعی هرگز یک مجموعه داده تمیز و کامل نخواهیم داشت. هر مجموعه داده دارای برخی قسمت‌های عجیب و غریب، مفقود شده و یا داده‌های نامتعادل است. با توجه به هدف الگوریتم‌های یادگیری ماشین، ممکن است مدل برای به دست آوردن الگوی موجود در داده‌ها به صورت دقیق، مجبور باشد نویزهای موجود در داده را در خود جای دهد. در نتیجه، مدل به دست آمده به خوبی با داده های آموزش متناسب خواهد ‌بود اما به اندازه کافی برای تشخیص نمونه های دیگر که در روند مدل‌سازی وارد نشده‌اند، قدرت تعمیم نخواهد داشت. هدف یک مدل یادگیری ماشین خوب این است که بتواند پس از یادگیری داده‌های موجود در مجموعه داده آموزش، به هر مجموعه داده‌ای از حوزه مشابه تعمیم یابد. این ویژگی به ما این امکان را می‌دهد تا بتوانیم برای مجموعه داده‌هایی که مدل هرگز ندیده است عملیات پیش بینی را انجام دهیم. بنابراین، تعمیم پذیری مدل آموزش داده شده در فرآیند یادگیری حائز اهمیت زیادی می‌باشد. در آمار از اصطلاح fit بودن به عنوان میزان نزدیکی مقدار پیش‌بینی‌شده ‌توسط مدل به کلاس هدف یا مقدار واقعی استفاده می‌شود. وقتی یک مدل بیش از نیاز واقعی با داده fit شود، شروع به سازگاری خود با داده‌های پرت و مقادیر نادرست می‌کند. در این حالت به اصطلاح گفته می‌شود مدل overfit شده است. در نتیجه‌ی این پدیده، کارایی و دقت مدل کاهش می‌یابد. در ادامه قبل از بررسی دقیق‌تر پدیده‌ی overfitting به تفاوت بین سیگنال و نویز می‌پردازیم تا درک بهتری از نحوه‌ی یادگیری درست مدل داشته باشیم. سیگنال در مقابل نویز در مدل‌سازی، شما می‌توانید «سیگنال» را به عنوان الگوی زیربنایی واقعی که می‌خواهید از داده‌ها بیاموزید، تصور کنید. در مقابل، «نویز» به اطلاعات بی‌ربط یا تصادفی در یک مجموعه داده اشاره دارد. برای درک مفهوم نویز و سیگنال، مثالی از زندگی واقعی را بررسی می‌کنیم. فرض کنید می‌خواهیم رابطه بین سن و سواد را در میان بزرگسالان مدل کنیم. اگر قسمت بسیار زیادی از جمعیت را به عنوان نمونه درنظر بگیریم، یک رابطه واضح بین سن و سواد پیدا خواهیم کرد که این همان سیگنال است. در‌صورتی که اگر همین کار را در مورد یک جمعیت محلی انجام دهیم، ممکن است رابطه موجود بین داده‌ها به درستی مشخص نشود؛ زیرا ممکن است تحت تأثیر داده‌های پرت و تصادفی قرار گیرد. به عنوان مثال، یک بزرگسال زودتر به مدرسه رفته یا برخی از بزرگسالان توانایی تحصیل نداشتند و ... نویز با سیگنال تداخل پیدا می‌کند. این‌جاست که الگوریتم‌های یادگیری ماشین وارد می‌شوند. یک الگوریتم با عملکرد خوب می‌تواند سیگنال را از نویز جدا کند. اگر الگوریتم مورد استفاده بیش از حد پیچیده یا انعطاف‌پذیر باشد (مثلا دارای ویژگی های ورودی زیادی باشد یا به طور مناسب تنظیم نشده باشد)، در نهایت به جای پیدا کردن سیگنال، نویزها را به خاطر می‌سپارد. مدلی که نویز را به جای سیگنال آموخته است، overfit یا بیش‌برازش‌شده در نظر گرفته می‌شود؛ زیرا با مجموعه داده آموزشی fit است اما با مجموعه داده‌های جدید و دیده‌نشده تناسب چندانی ندارد.   به عنوان مثال در مجموعه داده‌های نشان داده شده در شکل، خط قرمز نمایانگر یک مدل overfit شده و خط سیاه نشان دهنده یک مدل fit شده است. گرچه خط قرمز به بهترین وجه داده‌های آموزشی را دنبال می‌کند، اما بیش از اندازه به آن داده‌ها وابسته است و احتمالاً در مقایسه با خط سیاه، میزان خطای بالاتری در داده‌های جدید و دیده‌نشده خواهد داشت. مقایسه Overfitting و Underfitting قبل از این که بیشتر در زمینه overfitting صحبت کنیم، نگاهی به مفهوم underfitting می‌اندازیم. هنگامی که ما یک مدل را آموزش می‌دهیم، سعی می‌کنیم چهارچوبی را ایجاد کنیم که بتواند ماهیت یا کلاس اقلام موجود در مجموعه داده را بر اساس ویژگی‌هایی که آن موارد را توصیف می‌کنند، پیش‌بینی کند. یک مدل باید بتواند یک الگو را در یک مجموعه داده توضیح دهد و داده‌های آینده را بر اساس این الگو پیش‌بینی کند. هر چه مدل رابطه بین ویژگی‌های مجموعه‌ی آموزشی را بهتر توضیح دهد، مدل ما از تناسب بیشتری برخوردار است و به اصطلاح fit است. مدلی که رابطه‌ی بین ویژگی‌های داده‌های آموزشی را ضعیف توضیح دهد و در نتیجه نتواند نمونه داده‌ها را به طور دقیق طبقه‌بندی کند، دچار underfitting روی داده‌های آموزشی است. underfitting اغلب در هنگام تلاش برای طراحی یک مدل خطی با داده‌های غیر خطی رخ می‌دهد. هم‌چنین زمانی که داده‌های کافی برای ایجاد یک مدل دقیق وجود نداشته باشد نیز underfit شدن مدل وجود دارد. داده‌های آموزشی بیشتر یا ویژگی‌های بیشتر اغلب به کاهش underfitting کمک می‌کنند. بنابراین چرا ما مدلی را ایجاد نمی‌کنیم که تمام داده‌های آموزش را توضیح دهد؟ مگر هدف نهایی کسب بهترین دقت نیست؟ باید توجه کنیم ایجاد مدلی که الگوهای داده‌های آموزشی را به خوبی فرا گرفته باشد، چیزی است که باعث overfitting می‌شود. مجموعه داده‌های آموزشی و مجموعه داده‌هایی که مدل‌ بعدا بر روی آن‌ها تست می‌شود دقیقاً یکسان نخواهند بود اما با وجود تفاوت‌ها، ویژگی‌های کلیدی یکسانی نیز خواهند داشت. بنابراین، طراحی مدلی که مجموعه داده‌های آموزشی را کاملاً توضیح دهد به این معنی است که شما رابطه بین ویژگی‌هایی که به مجموعه داده‌های دیگر نیز به خوبی تعمیم می‌یابد را به دست آورده‌اید. در ادامه با بررسی یک مثال تلاش می‌کنیم تا این موضوع مشخص‌تر شود. مثالی از Overfitting در این مثال overfitting و underfitting را بررسی می‌کنیم و این که چگونه می‌توان از رگرسیون خطی با ویژگی‌های چندجمله‌ای برای تقریب توابع غیرخطی استفاده کرد. نمودار نارنجی تابعی را نشان می‌دهد که می‌خواهیم تقریب بزنیم و این تابع بخشی از تابع کسینوس می‌باشد. علاوه بر این‌، نمونه‌های تابع اصلی و تقریب مدل‌های مختلف نیز نمایش داده شده است. مدل‌ها دارای ویژگی‌های چندجمله‌ای از درجات مختلف هستند.   import numpy as np import matplotlib.pyplot as plt from sklearn.pipeline import Pipeline from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression from sklearn.model_selection import cross_val_score def true_fun(X):         return np.cos(1.5 * np.pi *X) np.random.seed(0) n_samples = 30 degrees =[1, 4, 15] X = np.sort(np.random.rand(n_samples)) y = true_fun(X) + np.random.randn(n_samples) * 0.1 plt.figure(figsize=(14, 5)) for i in range(len(degrees)):         ax = plt.subplot(1, len(degrees), i + 1)         plt.setp(ax, xticks=(), yticks=())         polynomial_features = PolynomialFeatures(degree=degrees[i], include_bias=False)         linear_regression = LinearRegression()         pipeline = Pipeline([("polynomial_features", polynomial_features), ("linear_regression", linear_regression)])         pipeline.fit(X[:, np.newaxis], y)         # Evaluate the models using cross validation         scores = cross_val_score(pipeline, X[:, np.newaxis], y, scoring="neg_mean_squared_error", cv=10)         X_test = np.linspace(0, 1, 100)         plt.plot(X_test, pipeline.predict(X_test[:, np.newaxis]), label="Model")         plt.plot(X_test, true_fun(X_test), label="True function")         plt.scatter(X, y, edgecolor='b', s=20, label="Samples")         plt.xlabel("x")         plt.ylabel("y")         plt.xlim((0, 1))         plt.ylim((-2, 2))         plt.legend(loc="best")         plt.title("Degree {}nMSE = {:.2e}(+/- {:.2e})".format(degrees[i], -scores.mean(), scores.std())) plt.show()   می‌بینیم که یک تابع خطی (چند جمله ای با درجه 1) برای fit شدن با نمونه‌های آموزشی کافی نیست. این حالت همان underfitting است. چندجمله‌ای درجه 4 تقریباً تابع اصلی را تقریب می‌زند. با این حال، برای درجات بالاتر، مدل دچار حالت overfitting روی داده‌های آموزشی می‌شود؛ یعنی نویز داده‌های آموزشی را می‌آموزد. دلایل وقوع Overfitting علت وقوع این پدیده ممکن است ناشی از پیچیده باشد اما به طور کلی، می‌توانیم آن‌ها را به سه نوع دسته‌بندی کنیم: یادگیری نویز در مجموعه آموزش پیچیدگی مدل روش‌های مقایسه‌ای که در الگوریتم‌های هوش مصنوعی به صورت فراگیر وجود دارندیادگیری نویز در مجموعه آموزش همان طور که پیش‌تر بحث شد، هنگامی که مجموعه آموزشی از نظر اندازه خیلی کوچک باشد، یا دارای اطلاعات نمایانگر کمتری باشد، یا نویز زیادی داشته باشد، این وضعیت باعث می‌شود که نویزها و داده‌های پرت شانس زیادی برای یادگیری داشته باشند و بعداً به عنوان مبنای پیش‌بینی‌ها عمل کنند. بنابراین، یک الگوریتم با عملکرد خوب باید بتواند داده‌های نماینده را از نویز تشخیص دهد. پیچیدگی مدل در تعیین میزان پیچیدگی یک مدل مفهومی به نام تعادل بین واریانس و بایاس مطرح می‌شود که به تعادل بین دقت و سازگاری اشاره دارد. وقتی الگوریتم‌ها ورودی‌های بسیار زیاد دارند، مدل به طور متوسط با سازگاری کم‌تری دقیق‌تر می شود. این وضعیت به این معنی است که مدل‌ها می‌توانند در مجموعه داده‌های مختلف به شدت متفاوت عمل کنند. در ادامه به بررسی این دو مفهوم و ارتباط آن‌ها با پیچیدگی مدل می‌پردازیم. واریانس (Variance) و بایاس (Bias) هر دو شکل‌های مختلفی از خطای پیش بینی در یادگیری ماشین هستند. سازش بین واریانس و بایاس زیاد (Bias Variance Trade-off) مفهوم بسیار مهمی در آمار و یادگیری ماشین است که بر تمام الگوریتم‌های تحت نظارت یادگیری ماشین تأثیر می‌گذارد. این trade-off تأثیر بسزایی در تعیین پیچیدگی و overfitting برای هر مدل یادگیری ماشین دارد. بایاس (Bias) بایاس تفاوت بین پیش‌بینی‌های مورد انتظار از مدل شما و مقادیر واقعی است. تصور کنید که یک مدل رگرسیون خطی را به مجموعه داده‌ای که دارای الگوی غیر خطی است، fit کنید: هر چقدر هم مشاهدات بیشتر جمع‌آوری کنید، یک رگرسیون خطی نمی‌تواند منحنی‌های موجود در آن داده‌ها را مدل‌سازی کند. این همان پدیده‌ای‌ست که به عنوان underfitting شناخته می‌شود. واریانس (Variance) واریانس به حساسیت الگوریتم شما نسبت به مجموعه خاصی از داده‌های آموزشی اشاره دارد. الگوریتم‌هایی با واریانس بالا بسته به مجموعه‌ی آموزش، مدل‌های بسیار متفاوتی تولید خواهند کرد. الگوریتمی را در نظر بگیرید که باعث برازش مدلی بدون محدودیت و فوق العاده انعطاف پذیر در همان مجموعه داده بالا می‌شود. همان‌طور که می‌بینید، این مدل بدون محدودیت، مجموعه آموزشی را با تمام نویزها حفظ کرده است که این پدیده همان overfitting می‌باشد. تعادل بین واریانس و بایاس الگوریتم‌های بایاس بالا-واریانس کم پیچیدگی کمتری دارند و دارای ساختاری ساده ولی غیرمنعطف هستند. آن‌ها مدل‌های سازگار، اما به طور متوسط با دقت کم را آموزش خواهند داد؛ مانند الگوریتم‌های خطی یا پارامتریک مثل رگرسیون، Naive Bayes و … الگوریتم‌های بایاس کم-واریانس بالا ساختار پیچیده‌تر و در عین حال انعطاف‌پذیر دارند. آن‌ها مدل‌هایی را آموزش می‌دهند که به طور متوسط ناسازگار اما دقیق هستند؛ مانند الگوریتم‌های غیرخطی یا غیرپارامتری مثل درخت تصمیم، نزدیک‌ترین همسایه و ... وجود trade-off بین بایاس و واریانس مشخص‌کننده‌ی میزان پیچیدگی مدل است؛ زیرا یک الگوریتم نمی‌تواند هم‌زمان هم پیچیده و هم ساده باشد. برای برخی از حالات، ممکن است مقدار هر دو خطا در بعضی از الگوریتم‌ها کم‌تر از بقیه‌ی خطاها باشند. به عنوان مثال، روش‌های گروهی (Ensebmle) مانند جنگل تصادفی (Random Forest) اغلب در عمل بهتر از سایر الگوریتم‌ها عمل می‌کنند. توصیه ما این است که همیشه برای هر مساله‌ای چندین الگوریتم معقول را امتحان کنید. برای ساختن یک مدل پیش‌بینی‌کننده خوب، باید تعادلی بین بایاس و واریانس پیدا کرد که خطای کل را به حداقل برساند. در نتیجه، این تعادل مطلوب منجر به مدلی می‌شود که نه overfit و نه underfit شده باشد که این همان هدف نهایی یادگیری ماشین تحت نظارت است، یعنی جدا کردن سیگنال از مجموعه داده در حالی که نویز را نادیده می‌گیرد. روش‌های مقایسه‌ای که در الگوریتم‌های هوش مصنوعی به صورت فراگیر وجود دارند در طی این فرآیندها، ما همواره چندین آیتم را بر اساس نمرات یک تابع ارزیابی مقایسه می‌کنیم و آیتمی با حداکثر امتیاز را انتخاب می‌کنیم. با این حال، این فرآیند احتمالاً آیتم‌هایی را انتخاب می‌کند که هیچ تاثیری در بهبود دقت طبقه‌بندی‌کننده نداشته و یا حتی باعث کاهش دقت طبقه‌بندی می‌شوند. روش‌های تشخیص بیش‌برازش یک چالش کلیدی که در تشخیص هر نوع برازش (مانند overfitting ،fit و underfitting) وجود دارد این است که قبل از تست کردن داده‌ها تشخیص آن تقریباً غیرممکن است. این مورد به ویژگی‌های ذاتی overfitting که ناتوانی در تعمیم مجموعه داده است اشاره دارد. بنابراین می‌توان داده‌ها را به زیرمجموعه‌های مختلف تفکیک کرد تا آموزش و آزمایش آسان شود. داده‌ها به دو بخش اصلی تقسیم می‌شوند، یعنی مجموعه داده آزمایشی و مجموعه داده آموزشی. تکنیک تقسیم ممکن است بر اساس نوع مجموعه داده متفاوت باشد و می‌توان از هر نوع تکنیک تقسیم استفاده کرد. اگر مدل در مجموعه داده‌های آموزش بسیار بهتر از مجموعه داده‌های آزمایش عمل می‌کند، به احتمال زیاد مدل overfit شده است؛ برای مثال، فرض کنید مدل با دقت 99٪ روی مجموعه داده آموزش عمل می‌کند، اما دقت آن روی مجموعه داده آزمایش تنها 50-55٪ است. این مدل overfit است و قابلیت تعمیم‌پذیری ندارد. اگر مدل در مجموعه داده‌های آزمایش بهتر از مجموعه داده‌های آموزش عمل کند یا به صورت کلی بر روی داده‌های آموزش دقت خوبی نداشته باشد، به احتمال زیاد دچار underfitting شده است. اگر مدل در هر دو مجموعه داده‌های آموزش و آزمایش خوب عمل کند، مدل بهترین تناسب را دارد؛ به عنوان مثال، مدل ما دقت 90٪ روی مجموعه آموزش و دقت 88-92٪ روی مجموعه داده آزمایشی دارد. در این حالت این مدل fit شده است و مناسب مساله است. اگرچه تشخیص overfitting موثر است، اما مشکل را حل نمی‌کند. چندین تکنیک برای جلوگیری از این پدیده وجود دارد که در ادامه آن‌ها را بررسی می‌کنیم.روش‌های جلوگیری از overfitting برای جلوگیری از overfitting، روش‌های مختلفی وجود دارد که در ادامه چند مورد از آن‌ها بررسی می‌شوند. استفاده از Cross-validation این روش یک اقدام پیشگیرانه قوی در برابر overfitting است. برای این کار از داده‌های اولیه آموزشی چند بخش کوچک آموزش - تست ایجاد می‌شود از این تقسیم‌ها برای تنظیم مدل استفاده می‌شود. در K-fold cross-validation، داده‌ها به k زیرمجموعه تقسیم می‌شوند که هر کدام از آن‌ها یک fold نامیده می‌شوند. سپس، به طور مکرر الگوریتم را بر روی k-1 fold آموزش داده می‌شود و از یک fold باقی‌مانده به عنوان مجموعه آزمایش (که «holdout fold» نامیده می‌شود) استفاده می‌شود. اعتبارسنجی متقابل به شما این امکان را می‌دهد که هایپرپارامترها را فقط با مجموعه آموزشی اصلی تنظیم کنید و مجموعه آزمایش را برای انتخاب مدل نهایی خود به عنوان یک مجموعه داده واقعاً دیده نشده نگه دارید. گسترش داده‌های آموزشی در یادگیری ماشین، الگوریتم تنها عاملی نیست که بر دقت طبقه‌بندی نهایی تأثیر می‌گذارد. کیفیت و کمیت مجموعه داده‌های آموزشی در بسیاری از موارد، به ویژه در زمینه یادگیری تحت نظارت، به طور قابل توجهی بر دقت نهایی تاثیر می‌گذارند. آموزش مدل در واقع فرآیند تنظیم پارامترهای آن است. پارامترهای تنظیم شده به خوبی از اثر overfitting و همچنین underfitting جلوگیری می‌کنند. برای تنظیم این پارامترها، مدل برای یادگیری به نمونه‌های کافی نیاز دارد. مقدار نمونه‌ها متناسب با تعداد پارامترها است و هرچه مدل پیچیده‌تر باشد، پارامترهای بیشتری باید تنظیم شوند. به عبارت دیگر، یک مجموعه داده‌ی گسترده می‌تواند دقت پیش‌بینی را به ویژه در مدل‌های پیچیده تا حد زیادی بهبود دهد. اگر امکان جمع‌آوری داده‌های بیشتر نبود، می‌توان مجموعه داده‌های موجود را متنوع‌تر جلوه داد. به همین دلیل است که داده‌افزایی (Data Augmentation) به طور گسترده به عنوان یک استراتژی کلی برای بهبود عملکرد قدرت تعمیم مدل‌ها در بسیاری از زمینه‌ها، مانند تشخیص الگو و پردازش تصویر مورد استفاده قرار می گیرد. با این حال، افزایش حجم داده‌ها زمان آموزش را افزایش می‌دهد. علاوه بر این، دستیابی به داده‌های آموزشی می‌تواند گران یا دشوار باشد؛ زیرا به مداخله انسانی زیادی مانند برچسب زدن نیاز دارد. به طور خلاصه، عمدتا چهار رویکرد برای گسترش مجموعه آموزش وجود دارد: داده‌های آموزشی بیشتری جمع‌آوری کنید. مقداری نویز تصادفی به مجموعه داده‌ی موجود اضافه کنید. مقداری از داده‌ها را از مجموعه داده های موجود به وسیله برخی پردازش‌ها تغییر دهید. برخی از داده‌های جدید را بر اساس توزیع مجموعه داده‌های موجود تولید کنید.کاهش پیچیدگی مدل بیش‌برازش مدل می‌تواند به دلیل پیچیدگی یک مدل اتفاق بیفتد، به گونه‌ای که حتی با وجود حجم زیادی از داده‌ها، مدل هنوز هم روی مجموعه داده آموزشی overfit شود. کاهش پیچیدگی مدل می‌تواند از بیش‌برازش آن جلوگیری کند. برخی از اقدامات قابل اجرا شامل هرس درخت تصمیم یا کاهش تعداد پارامترها و استفاده از dropout در شبکه‌های عصبی است. ساده‌سازی مدل هم‌چنین می‌تواند مدل را سبک‌تر و سریع‌تر کند. حذف ویژگی‌ها اگرچه برخی از الگوریتم‌ها دارای انتخاب خودکار ویژگی‌ها هستند، برای تعداد قابل توجهی از الگوریتم‌ها که این ویژگی را ندارند، حذف چند ویژگی نامربوط به صورت دستی از ورودی‌های مدل می‌تواند تعمیم آن را بهبود بخشد. یکی از راه‌های انجام این کار، نتیجه‌گیری در مورد چگونگی fit شدن آن ویژگی در مدل است. این کار کاملاً شبیه اشکال زدایی کد به صورت خط به خط است. اگر ویژگی‌ای نتواند ارتباط داده‌ها را در مدل توضیح دهد، می‌توانیم آن ویژگی را شناسایی کنیم. در کل بهتر است از چند روش انتخاب ویژگی برای یک نقطه شروع مناسب استفاده شود. توقف زودهنگام وقتی یک الگوریتم یادگیری را به صورت مکرر آموزش می‌دهید، می‌توانید نحوه‌ی عملکرد مدل را در هر مرحله ارزیابی کنید. تا تعداد مشخصی از تکرارها، مدل روندی رو بهبود دارد و دقت در هر تکرار افزایش می‌یابد. با این حال، پس از نقطه‌ای، توانایی مدل در تعمیم ضعیف می‌شود زیرا شروع به بیش‌برازش بر روی داده‌های آموزشی می‌کند. توقف زودهنگام به توقف روند آموزش قبل از گذشت مدل از آن نقطه اشاره می‌کند. امروزه این تکنیک بیشتر در یادگیری عمیق استفاده می‌شود؛ در حالی که سایر تکنیک‌ها (به عنوان مثال regularization یا نظم‌دهی) برای یادگیری ماشین کلاسیک ترجیح داده می‌شوند. نظم‌دهی (Regularization) به طور کلی، خروجی یک مدل می‌تواند تحت تأثیر چندین ویژگی قرار گیرد. با افزایش تعداد ویژگی‌ها مدل پیچیده‌تر می‌شود. یک مدل overfit شده تمایل دارد همه‌ی ویژگی‌ها را برای ایجاد خروجی در نظر بگیرد، حتی اگر برخی از آن‌ها تأثیر بسیار محدودی بر خروجی نهایی داشته باشند، و یا حتی اگر برخی از آن‌ها نویزهایی باشند که برای خروجی بی‌معنی هستند. جهت محدود کردن این موارد، دو نوع راه حل وجود دارد: فقط ویژگی‌های مفید را انتخاب کرده و ویژگی‌های غیرمفید را از مدل خود حذف کنیم. وزن ویژگی‌هایی را که تأثیر کمی بر طبقه‌بندی نهایی دارند، به حداقل برسانیم. به عبارت دیگر نیاز داریم که اثر ویژگی‌های بی‌فایده را محدود کنیم. اما تشخیص ویژگی‌های بی‌فایده همیشه کار ساده‌ای نیست، بنابراین سعی می‌شود با به حداقل رساندن تابع هزینه، همه آن‌ها را محدود کنیم.برای انجام این کار، یک پنالتی به نام regularizer به تابع هزینه اضافه می‌شود که در فرمول زیر نشان داده شده است: در این فرمول‌ها ?(?; ?, ?) تابع هزینه‌ی اصلی، ? وزن، ? مجموعه داده‌ی آموزش، ? مقادیر واقعی یا مقادیر لیبل ها، ? تعداد اعضای مجموعه آموزش، ? ضریب regularization و ?Ω(?) همان پنالتی اعمال شده می‌باشد. در این جا می‌توانیم از متد گرادیان کاهشی برای پیدا کردن مجموعه وزن‌ها استفاده کنیم: با توجه به فرمول های بالا در می یابیم که هرچه اندازه ? بیشتر شود میزان پنالتی کاهش می‌یابد. به عبارت دیگر، هرچه مجموعه‌ی آموزش بزرگ‌تر باشد، خطر بیش‌برازش و اثر regularization کم‌تر خواهد بود. روش‌های مختلفی برای regularizaton وجود دارد که بسته به نوع یادگیری مورد استفاده می‌توان از آن‌ها استفاده کرد. انتخاب روش نظم‌دهی نیز اغلب یک هایپرپارامتر است، به این معنی که می‌توان آن را از طریق cross-validation تنظیم کرد. کلاس بندی جمعی (Ensembling) گروه‌بندی یا Ensembling یکی از روش‌های یادگیری ماشین است که پیش‌بینی ها را از چندین مدل جداگانه با هم ادغام می‌کند. چندین روش مختلف برای کلاس بندی جمعی وجود دارد، اما دو روش رایج‌تر آن عبارتند از bagging و boosting. در پایان باید گفت که بیش‌برازش یا overfitting یک مساله کلی در یادگیری ماشین تحت نظارت است که نمی‌توان به طور کامل از آن اجتناب کرد. این امر می‌تواند به دلیل محدودیت اندازه داده‌های آموزشی یا نویزی بودن داده‌ها باشد. هم‌چنین این اتفاق می‌تواند به خاطر پیچیدگی الگوریتم‌ها و نیاز آن‌ها به تنظیم پارامترهای زیاد باشد؛ اما در پاسخ به اتفاق، الگوریتم‌های متنوعی برای کاهش اثر برازش استفاده می‌شود که در این پست برخی از آن‌ها را بررسی کردیم.  
آیا هوش مصنوعی بهتر از انسان عمل می‌کند؟
آیا هوش مصنوعی بهتر از انسان عمل می‌کند؟
آیا هوش مصنوعی بهتر از انسان عمل می‌کند؟وقتی که اصطلاح هوش مصنوعی (artificial intelligence) در سال 1950 برای اولین بار مطرح شد، رویای نهایی‌ای که برای آن متصور می‌شدند، خلق فناوری‌ای بود که از انسان باهوش‌تر باشد. از آن زمان تا کنون، تحقیقات در زمینه هوش مصنوعی پستی‌ها و بلندی‌های فراوانی را تجربه کرده است. با این حال، از زمان پیدایش یادگیری ماشین و به دنبال آن یادگیری عمیق، به نظر می‌رسد هوش مصنوعی با سرعت بیشتری در حال رشد است. امروزه کارهای زیادی وجود دارند که هوش مصنوعی می‌تواند بهتر و سریع‌تر از انسان انجام دهد. حتی مقوله خلاقیت که پیش از این برای سیستم‌های هوش مصنوعی غیرقابل دسترسی متصور می‌شد، درحال دستیابی است. آیا سیستم‌های هوش مصنوعی از انسان‌ها بهتر عمل می‌کنند؟ نه کاملا! قدرت بشریت جای دیگری نهفته است. ما می‌توانیم به‌سرعت یاد بگیریم و خودمان را با شرایط مختلف وقف دهیم. برای سیستم‌های هوش مصنوعی، این مسأله یک مانع واقعی است. به عنوان مثال، برای تسلط بر یک بازی رایانه‌ای نسبتاً ساده، که یادگیری آن به طور متوسط 15 دقیقه طول می‌کشد، سیستم‌های هوش مصنوعی حدود 924 ساعت زمان نیاز دارند. در مورد سازگاری نیز می‌توان گفت که اگر فقط یک قانون در بازی تغییر کند، سیستم هوش مصنوعی باید کل بازی را ابتدا یاد بگیرد. دلیل دیگری که سیستم‌های هوش مصنوعی هنوز قدری دارای ریسک هستند این است که وقتی آن‌ها اشتباه می‌کنند، اشتباهشان فاحش است. در واقع به دلیل این که این سیستم‌ها درک صحیحی از واقعیت ندارند ممکن است دچار اشتباهاتی شوند که جبران‌ناپذیر است. به عنوان مثال فرض کنید یک کودک در سایت youtube به دنبال تماشای یک موزیک ویدیوی کودکانه است، اما سیستم هوش مصنوعی بر اساس یک تعبیر اشتباه نتایجی را برای کودک نمایش می‌دهد که مناسب با سن او نیست. این یک اشتباه فاحش با نتایج جبران‌ناپذیر است، در حالی که هیچ انسانی تحت هیچ شرایطی ممکن نبود چنین تعبیری از عبارت جستجو شده توسط کودک داشته باشد. چرا سیستم‌های هوش مصنوعی اشتباه می‌کنند؟ ریشه اشتباهاتی که ممکن است سیستم‌های هوش مصنوعی مرتکب شوند را باید در دو بخش جستجو کرد. این اشتباهات ممکن است ناشی از عدم دقت کافی در فاز آموزشی باشند، و یا قدری عمیق‌تر، در نقص‌های ذاتی سیستم‌های هوش مصنوعی ریشه داشته باشد. خطاهای هوش مصنوعی ناشی از اشتباهات فاز آموزش سیستم‌های هوش مصنوعی به شدت متکی به داده‌هایی هستند که در فاز آموزش مورد استفاده قرار گرفته است. اگر در این داده‌ها برخی از خطاهای انسانی وارد شود، سیستم هوش مصنوعی نیز بر اساس همان اشتباهات تعلیم می‌بیند و آن‌ها را تکرار می‌کند. به عنوان مثال در بازارهای مالی ازدحام خریداران باعث ایجاد هیجان در بازار شده و قیمت دچار یک رشد حبابی می‌شود. این حباب‌های قیمتی به صورت ناگهانی می‌ترکند و باعث ریزش شدید قیمت شده و در نتیجه بسیاری از مردم سرمایه‌ی خودشان را از دست می‌دهند. اگر این داده‌ها به صورت فیلتر نشده برای آموزش سیستم هوش مصنوعی استفاده شود، منجر به انتقال خطاهایی به سیستم می‌شود که در عملکرد آن تاثیر منفی دارد. نقص‌های ذاتی هوش مصنوعی یکی از چالش‌های پیش‌روی محققان این است که آیا ربات‌ها می‌توانند همانند یک انسان وظایف خود را به خوبی انجام دهند. با وجود تمام پیشرفت‌های انجام شده در این زمینه، هنوز امکان جایگزینی کامل ربات‌ با انسان وجود ندارد. در واقع لازم است ربات‌ها از سطحی که در حال حاضر هستند پیشرفته‌تر شوند. برای دستیابی به این هدف، به منابع محاسباتی عظیمی نیاز است که در حال حاضر عملا امکان‌پذیر نیست. با وجود پیشرفت‌های فراوانی که در حوزه‌ی هوش مصنوعی صورت پذیرفته است، هنوز در بسیاری از موارد هوش مصنوعی قادر به انجام کارها در سطح انسان نیست. در ادامه تعدادی از ضعف‌های هوش مصنوعی بیان می‌شود که موجب عملکرد ضعیف‌تر هوش مصنوعی شده‌اند. عدم خلاقیت خلاقیت یکی از ویژگی‌های بارز انسان‌هاست. در سال‌های اخیر هوش مصنوعی به اندازه‌ای پیشرفت یافته است که قادر است بتواند کارهای هنری - مانند یک قطعه موسقی - بسازد. با این حال، این کارهای هنری فاقد خلاقیت منحصر به فردی است که تنها انسان‌ها از آن برخوردارند. هوش مصنوعی می‌تواند کارهای خلاقانه تولید کند اما کارهای خلاقانه هوش مصنوعی تحت‌ تاثیر ورودی‌هایی است که به آن داده می‌شود و این کارها نیز بدون درک و آگاهی انجام می‌شود. نداشتن قدرت تخیل مشابه با خلاقیت، توانایی تصور کردن تنها منحصر به انسان‌هاست. همان‌طور که قبل از این بیان شد، هوش مصنوعی تنها اقداماتی را انجام می‌دهد که از پیش تعریف شده باشد. هرچه فرآیند آموزش یک سیستم هوش مصنوعی بهتر و دقیق‌تر انجام شود، توانایی انجام کارهای پیچیده‌تر نیز بیشتر خواهد بود؛ اما چیزی که هوش مصنوعی قادر به انجام دادن آن نیست انجام وظایفی فراتر از آن‌ چیزی است که برای آن آموزش دیده است. انسان‌ها می‌توانند با استفاده از قدرت تصورشان، در هنگام مواجهه با شرایط جدید، تصمیم مناسبی اتخاذ کند. مهارت‌های ارتباطی ضعیف یکی دیگر از ویژگی‌های منحصر به فرد انسان‌ها، مهارت‌های ارتباطی موثر با دیگران است. برقراری ارتباط یکی از نیازهای مهم در هر کسب و کاری است. هوش مصنوعی قادر به برقراری ارتباط موثر و کارآمد با دیگران نیست. یکی از دلایل عدم توانایی برقراری ارتباط در هوش مصنوعی، عدم توانایی آن‌ها در درک احساسات است. بنابراین، به عنوان مثال در فرآیندهایی که ارتباط موثر با کاربر یک امر حیاتی است، هوش مصنوعی ناکارآمد خواهد بود. کارهایی که هوش مصنوعی بهتر از انسان انجام می‌دهد با وجود تمام موارد گفته‌شده، کارهایی هست که هوش مصنوعی در انجام آن‌ها عملکرد بهتری از انسان‌ها دارد. در این قسمت از مقاله نگاهی به نمونه‌هایی از این دسته می‌اندازیم. بازی کردن در سال 2016، وقتی که هوش مصنوعی توانست لی سدول قهرمان وقت بازی «GO» را شکست دهد، بسیاری از محققان شگفت‌زده شدند. پس از آن، در سال 2017، یک شبکه عصبی جدید تحت عنوان «AlphaGo Zero» توانست نسخه قدیمی‌تر Alpha Go را 100 مرتبه شکست دهد. اهمیت این اتفاق از آن جهت بود که AlphaGo Zero تنها با استفاده از یک سری قوانین اولیه بازی خودش را آموزش داده بود. مثال دیگری که در این زمینه می‌توان به آن اشاره کرد، پیروزی کامپیوتر «Deep Blue» از شرکت IBM در مقابل قهرمان سابق شطرنج جهان گری کاسپارف در سال ‍1997 است. کاسپاروف 6 مرتبه با کامپیوتر شرکت IBM بازی کرد که در نهایت با نتیجه 3.5 بر 2.5 مغلوب شد. وقتی از قهرمان شطرنج جهان درباره علت شکستش در این مسابقه سوال پرسیده شد، او پاسخ داد که «من ریسک می‌کردم اما او ریسک نمی‌کرد». تشخیص‌های پزشکی پژوهشگران بیمارستان آکسفورد موفق به توسعه یک سیستم منطبق بر هوش مصنوعی شدند که قادر است از طریق اسکن قلب و ریه، شدت بیماری را تشخیص دهد. این اقدام به صورت معمول توسط پزشکان انجام می‌شود اما برنامه‌های کامپیوتری به‌گونه‌ای طراحی شده‌اند که بتوانند نتایج بهتری حتی نسبت به پزشکان باتجربه داشته باشند. اهمیت تشخیص دقیق بیماری از آن جهت است که منجر به کاهش چشمگیر هزینه‌های درمان و اجتناب از جراحی‌های بی‌مورد می‌گردد. از فناوری هوش مصنوعی در زمینه تومورشناسی و تشخیص سرطان که همواره برای انسان‌ها یک موضوع چالش‌برانگیز بوده است نیز استفاده می‌شود. بر اساس پژوهش انجام شده در دانشگاه بیرمنگام، سیستم‌های هوش مصنوعی توانستند با دقتی معادل با 87 درصد وجود سرطان را در بیماران تشخیص دهند، در حالی که این دقت برای متخصصان برابر با 86 درصد بوده است. علاوه بر این سیستم هوش مصنوعی توانست با دقتی معادل با 93 درصد، عدم وجود سرطان در بیماران را تشخیص دهد که این آمار نیز برای متخصصان معادل با 91 درصد بود. هوش مصنوعی قادر به کار کردن در جاهایی است که در آن‌ها خطر مرگ وجود دارد یکی از مزایای هوش مصنوعی ساخت ربات‌هایی است که می‌توانند در شرایط سخت و خطرناک کارهایی را انجام دهند که انسان‌ها قادر به انجام آن‌ها نیستند. این ربات‌ها به مکان‌هایی وارد می‌شوند که هیچ انسانی امکان زنده ماندن در آن‌جا را ندارد. به عنوان مثال در ادامه به دو مورد از این مکان‌ها اشاره شده است. اعماق اقیانوس‌ها بسیاری از مردم از خطرات ورود به اعماق دریا اطلاعی ندارند. تغییرات فشار در اعماق دریا با تغییرات فشار در فضا برابری می‌کند. افرادی که به اعماق آب وارد می‌شوند دچار مشکلات فراوانی در سلامتی‌شان خواهند شد. با این حال غواصی در دریا برای صنایع مختلف حائز اهمیت است. علاوه بر این در زمینه‌های پژوهشی در حوزه شناسایی موجودات دریایی، در مواردی لازم است کف اقیانوس‌ها مورد بررسی قرار گیرد. در کف اقیانوس‌ها فشار آب به قدری بالاست که انسان‌ها قادر به سفر به آن‌جا نیستند. برای رفع این مشکل می‌توان از ربات‌ها استفاده کرد. این ربات‌ها می‌توانند به اعماقی از دریا وارد شوند که انسان‌ها امکان زنده ماندن در آن اعماق را ندارند. نیروگاه‌های اتمی کار کردن در مکان‌هایی که تشعشعات رادیواکتیو وجود دارد برای انسان‌ها به شدت مضر است. انسان‌ها تنها در صورتی می‌توانند به این مکان‌ها وارد شوند که لباس‌های مخصوصی پوشیده باشند و برای مدت کوتاهی فعالیت کنند. در هر صورت با وجود رعایت تمام موارد ایمنی، باز هم نمی‌توان به‌طور صد درصد گفت که شخص آسیب نمی‌بیند. برای این منظور ربات‌های مخصوصی طراحی شده است که می‌توانند جایگزین انسان‌ها شوند.