سامانه احراز هویت غیر حضوری آتنا
سامانه آتنا یک پلتفرم احراز هویت دیجیتال است که با بهرهگیری از فناوری هوش مصنوعی عملیات احراز هویت غیرحضوری افراد را انجام میدهد.
چرا سامانه احراز هویت الکترونیکی آتنا؟
احراز هویت غیر حضوری یکی از نیازمندیهای حیاتی برای کلیه سازمانها و یکی از سرویسهای جذاب برای مشتریان است. سرویس احراز هویت الکترونیکی آتنا یکی از معدود سامانههای کارآمد و امن ایرانی است که با در اختیار داشتن یک تیم با دانش و بسیار منعطف و بهکارگیری جدیدترین فناوریهای حوزه هوش مصنوعی توانسته است راهکار احراز هویت از راه دور را ارائه دهد. سامانه احراز هویت آنلاین آتنا حاصل مطالعه و تلاش شبانهروزی متخصصانی است که توانستهاند قدمی بزرگ در جهت حذف تمامی فرآیندهای احراز هویت سنتی بردارند.
- اپراتورهای همراه
- بازارهای مالی (کارگزاری، ارز دیجیتال و ...)
- مراکز آموزشی
- بانک و موسسات مالی
- مشاوره آنلاین
امضا دیجیتال چیست و بررسی مزایای آن برای کسب و کارهای مختلف
امضای الکترونیکی یا امضای دیجیتال قابلیتی است که ما را قادر می سازد تا بدون نیاز به چاپ کاغذ یا استفاده از قلم، قراردادها و اسناد را به صورت آنلاین امضا کنیم. این شیوه از امضا مزایای فراوانی برای امضا کنندگان به همراه خواهد داشت و همچنین میتواند باعث کاهش بسیاری از هزینههای اضافی شود. در این مقاله قصد داریم امضای دیجیتال را تعریف کنیم و مزایای آن را بیان کنیم. امضای الکترونیکی چیست؟ امضای الکترونیکی تمام ویژگیهای یک امضای فیزیکی را دارد، اما همانطور که از نامش پیداست، کاملا به صورت آنلاین انجام میشود. استفاده از امضای دیجیتال در دنیای تکنولوژی و ارتباطات امروزی، تاحدودی امنیت کسبوکارهای آنلاین را بهبود بخشیده است و بهنوعی جایگزین روشهای سنتی امضاء و احراز هویت شده است. امضاهای الکترونیکی میتوانند به سه شکل مختلف مورد استفاده قرار گیرد: نام شخص تایپ شود تصویری از امضای فیزیکی بارگذاری شود امضایی که روی صفحه گوشی هوشمند یا تبلت کشیده شودبرخی از امضاهای الکترونیکی از شناسههای دیجیتال استفاده میکنند تا تایید کنند که شخصی که یک سند را امضا میکند همان کسی است که ادعا میکند یا خیر. مزایای امضای دیجیتال چیست؟ مهمترین مزیت امضا دیجیتال امنت آن است. قابلیتهای امنیتی تعبیه شده در امضای دیجیتال تضمین میکند که سند تغییر نخواهد کرد و امضاها کاملا قانونی هستند. با این وجود امضا الکترونیکی در مقایسه با امضا فیزیکی مزایای فراوانی دارد. برخی از مهمترین مزایای امضا دیجیتال عبارتند از: استفاده آسان و کاربردی بودن معتبر بودن از لحاظ قانونی دوستدار محیط زیست مقرون به صرفه بودن امنیت بالااستفاده از امضای دیجیتال آسان و کاربردی است یکی از تجربیات ناخوشایندی که بسیاری از افرد در ادارات و سازمانها و یا در زمان بستن قرارداد تجربه کردهاند، پرینت گرفتن حجم زیادی از اسناد و امضای آنها است. امضای الکترونیکی باعث آسان شدن و تسریع این فرآیند شده است. با استفاده از امضای دیجیتال میتوان اسناد را بدون نیار به حضور فیزیکی در محل تایید و امضا کرد. از آنجایی که راه حل امضای الکترونیکی به صورت کاملا آنلاین میباشد، امضا یا درخواست امضا از هر نقطهای از جهان قابل انجام است. در فرآیند امضای دیجیتال، فردی که قرار است یک سری اسناد را امضا کند، تنها به دو چیز نیاز دارد: دسترسی به اینترنت داشتن یک ایمیل معتبردر صورت وجود این شرایط، جمعآوری امضاهای مورد نیاز بسیار آسان خواهد بود. علاوه بر این، اگر اسناد در یک پلتفرم ابری ذخیره شوند، میتوان خیلی راحتتر به افرادی که نیاز به امضای آنها است، دسترسی داشت. در این صورت سند فورا در اختیار آنها قرار خواهد گرفت و مجبور نیستند منتظر بمانند تا این اسناد از طریق پست یا پیک به دست آنها برسد و سپس آنها را پرینت گرفته و امضا کنند. علاوه بر موارد فوق، امضای الکترونیکی، مدیریت اسناد را آسانتر میکند و باعث سرعت بخشیدن به فرآیندهای اداری میشود. همه افرادی که نیاز به امضای یک قرارداد یا توافقنامه دارند میتوانند همزمان به آن دسترسی داشته باشند و در عرض چند دقیقه امضا کنند. همچنین میتوان دسترسی افراد به اسناد را به صورت سلسله مراتبی تعریف کرد. بدین معنا که ابتدا نفر اول اسناد را امضا میکند و پس از آن دسترسی برای نفرات بعدی باز میشود. امضا الکترونیکی از لحاظ قانونی معتبر است قوانین حاکم بر امضای الکترونیکی در هر کشوری متفاوت است. به عنوان مثال، بر اساس مقررات الکترونیکی شناسایی و خدمات اعتماد اتحادیه اروپا (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 و مزایای آنهمانطور که احتمالا میدانید اکثر فریمورکهای اصلی یادگیری عمیق از جمله 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