<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های seyed hossein Tafakh</title>
        <link>https://virgool.io/feed/@SeyedHosseinTafakh</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-07 16:32:05</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/18110/avatar/ZpSnRk.jpeg?height=120&amp;width=120</url>
            <title>seyed hossein Tafakh</title>
            <link>https://virgool.io/@SeyedHosseinTafakh</link>
        </image>

                    <item>
                <title>شروع برنامه نویسی در ebpf با یک مثال ساده</title>
                <link>https://virgool.io/@SeyedHosseinTafakh/%D8%B4%D8%B1%D9%88%D8%B9-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%AF%D8%B1-ebpf-%D8%A8%D8%A7-%DB%8C%DA%A9-%D9%85%D8%AB%D8%A7%D9%84-%D8%B3%D8%A7%D8%AF%D9%87-puvqu0jqgmpn</link>
                <description>با سلام به همه دوستان ، این پست شروعی بسیار ساده بر ebpf میباشد ، و به طور کلی چند موضوع رو پوشِش میده :یک - معرفی ebpf و bpf دو - معرفی منابع آموزشی مناسبسه - یک نرم افزار نوشته شده در ebpf برای نشان دادن ادرس بسته های ورودی از شبکه به کرنل لینوکساگر درباره واحد پردازنده مرکزی ( cpu ) تحقیق کرده باشید متوجه میشید که واحد پردازنده در واقع از تعداد بسیار زیادی از ترانزیستور ها ( کانال های برقی که توسط جریان برق کنترل میشوند ) ساخته شده و این ترانزیستور های زیاد محاسبات رو انجام میدن و اطلاعات رو نگه داری میکنند، برای نمونه عکس زیر یک ماشین حساب چهار بیتی رو نشون میده :بیشتر بدانیددر نگاه اول متوجه میشید که تعداد ترانزیستور ها چقدر سریع زیاد میشه ، طراح های واحد پردازنده برای حل این موضوع از زبانی استفاده میکنند به نام verilog که در واقع یک زبان توصیف سخت افزار هست و منطق کامپیوتر  با verilog نوشته میشه ، مثل این که این معماری چند دستور ( instruction ) باید داشته باشه یا اینکه چند بیت داشته باشه ، چقدر حافظه register داشته باشه و ... البته این زبان دوباره در حال معروف شدن هست و دلیل این موضوع استفاده از این زبان برای برنامه نویسی پلاسمید های DNA هست و اضافه کردن اون به درون باکتری و کلی کارهای باحال دیگه که در این مَقال نمیگنجد . هر کامپیوتر دارنده تعدادی instruction هست ، این instruction ها نوعی دستور هستند که به کامپیوتر داده میشوند تا دستوری را اجرا بکنند ، برای مثال instruction جمع ، یا انتقال داده و ... معرفی BPFبرنامه bpf یک ماشین مجازی است که در سطح کرنل فعالیت میکند  و این موضوع این امکان را میدهد که بدون نگرانی در سطح kernel کد نویسی کرد و اگر کدی که نوشتیم به هر دلیل خراب شد کرنل را خراب نکند . کرنل لینوکس مسئول ارتباط برنامه ها با سخت افزار است ، نرم افزار ها برای ارتباط با سخت افزار از طریق واحد ارتباطی به نام syscall درخواست خود را به kernel ارسال میکنند ، یک مثال بسیار ساده از syscall استفاده از عملگر read یا write برای خواندن یا نوشتن اطلاعات .تاریخ BPFاین اسم منتخب از حروف اول سه کلمه میباشد berkeley packet filter و همانطور که از اسم پیداست توسط دانشگاه berkeley ارائه شده است .دانشگاه زیبای برکلی  در روز های اول این ماشین مجازی فقط دو instruction داشت و فقط بر روی بسته های ورودی شبکه تمرکز داشت که عمل فیلتر را بر روی آنها انجام میداد ، و بعد ها برنامه نویسان kernel متوجه ظرفیت  بالای این قطعه نرم افزاری شدند و شروع به بروز رسانی این نرم افزار کردند و تعداد instruction ها را افزایش دادند و نرم افزار های زیادی در کنار این برنامه اضافه شد برای مثال امکان رسد کردن قسمت های مختلف سیستم عامل یا  XDP که در مثال ارائه شده در این بلاگ از آن استفاده خواهیم کرد .معرفی منابع آموزشی کتاب اول :Liz Rice - Learning eBPF_ Programming the Linux Kernel for Enhanced Observability, Networking, and Security-O&#x27;Reilly Media (2023) نویسنده این کتاب کتاب هایی بسیار جالب دیگری در زمینه کامپیوتر و امنیت نوشتن که به نظر من خواندنشون بسیار کمک میکنه به دوستان علاقه مند .کتاب دوم :David Calavera, Lorenzo Fontana - Linux Observability with BPF_ Advanced Programming for Performance Analysis and Networking-O’Reilly Media (2019)نویسنده این کتاب در شرکت Docker کار میکرد و پس از مشکلات زیادی که با شبکه روی سیستم عامل داشت توجه ایشون به ebpf جلب میشه و بعد از کلی تجربه این کتاب رو مینویسند ،مثال:برای این مثال از زبان C استفاده میکنیم . برای برنامه نویسی در محیط ebpf میتوانید از زبان هایی مثل GO , RUST و اسمبلی استفاده کنید .دانش محدود من توی این موضوع میگه که بالغ ترین اکو سیستم ها برای این محیط C و اسمبلی هست و GO خیلی خوب داره موضوعات مختلف رو اضافه میکنه و RUST هم در حال جذب علاقه مندان خودش و اضافه کردن موضوعات و آموزش روی اینترنت هست .برای این مثال پیشنهاد میدم که یک لینوکس را در محیط شبیه سازی نصب بکنید مثل Oracle vm virtualbox بعد از نصب و اطمینان از سلامت VM چند نرم افزار نیاز دارید .1- LLVM و clang برای کامپایل کد C به بایت کد ebpf و بعد از اون تبدیل به زبان ماشین .2- bpftool برای اضافه کردن و چسباندن فایل کامپایل شده به کارت شبکه .کد :1-    #include &lt;linux/bpf.h&gt; 
2-    #include &lt;bpf/bpf_helpers.h&gt;
3-    #include &lt;linux/if_ether.h&gt;


4-    SEC(&amp;quotxdp&amp;quot)
5-    int macprinter(struct xdp_md *ctx){
6-             void *data = (void *)(long)ctx-&gt;data;
7-             void *data_end = (void *)(long)ctx-&gt;data_end;
8-             if ((void *)(eth+1) &gt; data_end)
9-                  return XDP_PASS;
10-           bpf_printk(&amp;quotS_MAC  %x:%x:%x &amp;quot ,eth-&gt;h_source[0],eth-&gt;h_source[1],eth-&gt;h_source[2]);
11-           bpf_printk(&amp;quotS_MAC %x:%x:%x \n&amp;quot ,eth-&gt;h_source[3],eth-&gt;h_source[4],eth-&gt;h_source[5]);
12-           return XDP_PASS; }
13-           char LICENSE[] SEC(&amp;quotlicense&amp;quot) = &amp;quotDual BSD/GPL&amp;quotتوضیح هر خط کد :1 سربرگ (headers) های کد bpf موجود در کرنل2 سربرگ های کد bpf_helpers - این عملگر ها جهت ساده سازی برنامه نویسی در کرنل قرار داده شده اند و خیلی استفاده های مختلفی خواهند داشت3 سربرگ های کرنل لینوکس برای ساختار داده سربرگ بسته های شبکه ( ethernet header ) 4 نمیدونم5 شروع عملگر اصلی که سازه اطلاعاتی xdp_md را دریافت میکند، این سازه دارای دو قسمت مهم است که اولی آدرس شروع اطلاعات و دومی آدرس پایان اطلاعات بر روی RAM است .6 cast اطلاعات ورودی آدرس شروع اطلاعات به سازه data با نوع تهی ( این نوع سازه ها برای کار با Buffer هست ، ساختار اطلاعاتی شناخته شده برای کار کردن با اطلاعات شبکه است )7 تکرار مرحله 6 برای خانه اطلاعات پایانی8 این خط برای چیزی به اسم verifier مهم است و اطمینانی به سیستم است که کاربر دسترسی بیش از حد به RAM و اطلاعات نرم افزار های دیگر نداشته باشد . اگر این خط رو اضافه نکنید برای خاندن اطلاعات خیلی به مشکل خواهید خرد .9 xdp دارای 4 برگرداننده است و در این برنامه از XDP_PASS برای چک کردن طول بسته استفاده کردم ، این خط و خط قبل چک میکنند تا ببینند طول اطلاعات با چیزی که انتظار داشتیم برابر است و اگر نبود برنامه را اتمام میکند و اطلاعات را به کرنل ارسال میکند .XDP_DROP : از بین بردن اطلاعات ورودیXDP_PASS : انتقال اطلاعات به کرنل جهت انجام کارهای لازم و استفاده از در ساختار شبکه سیستم عاملXDP_TX : انتقال اطلاعات به مبدا اطلاعات پس از تغییرات لازم در آن .XDP_REDIRECT : انتقال اطلاعات به کارت شبکه مورد نظر برنامه نویس .10 و 11 این دو خط اطلاعات آدرس سخت افزاری کارت شبکه ارسال کننده بسته های شبکه را چاپ میکنند . 12 ارسال اطلاعات شبکه به کرنل و اتمام عملگر .13 کد اجباری license که در در بعضی از برنامه های bpf باید باشد ، درواقع اگر از بعضی عملگر ها استفاده کرده باشید این شرط تحمیل میشود ، میشود این اجبار نباشد اما کد این عملگر ها را باید خودتان پیاده سازی بکنید .این کد را در پوشه ای که دوست دارید ذخیره کنید .بعد برای کامپایل کردن فایل از دستور زیر استفاده بکنید.clang -g -O2 -target bpf -c tutorial.bpf.c -o tutorial.bpf.oبعد از کامپایل دو یک فایل جدید به اسم tutorial.bpf.o خواهید داشت . بعد از ابزار bpftool استفاده خواهید کرد و نرم افزار را به مکان مناسب منتقل خواهید کرد :bpftool prog load tutorial.bpf.o /sys/fs/bpf/nameبعد از این کار میتوانید از طریق دستور زیر چک بکنید که ایا نرم افزار bpf شما در جای مناسب جهت اجرا هست یا خیر :bpftool prog list لاگی از اطلاعات خواهید دید که معمولا در اخر لیست میتوانید اطلاعات برنامه خود را پیدا بکنید.67: xdp  name ....در این مثال ایدی برنامه 67 میباشد .دستور زیر برنامه شما را به کارت شبکه میچسباند و هر موقع که بسته جدید به این کارت شبکه برسد برنامه فعال میشود .bpftool net attach xdp id 67 dev { اسم کارت شبکه مورد نظر }بعد از این میتواند با دستور زیر اطلاعات پرینت شده را بخوانید:cat /sys/kernel/debug/tracing/trace_pipeاگر از سیستم عامل خود پینگ کار شبکه ای که نرم افزار را به آن چسبانده این بگیرید میتوانید MAC آدرس پرینت شده را مشاهده بکنید .ممنون از توجه شما دوستان و تمام .</description>
                <category>seyed hossein Tafakh</category>
                <author>seyed hossein Tafakh</author>
                <pubDate>Thu, 24 Oct 2024 18:34:29 +0330</pubDate>
            </item>
                    <item>
                <title>امنیت رادیو و شبکه های بیسیم</title>
                <link>https://virgool.io/@SeyedHosseinTafakh/%D8%A7%D9%85%D9%86%DB%8C%D8%AA-%D8%B1%D8%A7%D8%AF%DB%8C%D9%88-%D9%88-%D8%B4%D8%A8%DA%A9%D9%87-%D9%87%D8%A7%DB%8C-%D8%A8%DB%8C%D8%B3%DB%8C%D9%85-mbhhvjmxlvmp</link>
                <description>سلام ، من بعد مدت ها دارم مینویسم ، متن درباره امنیت در کامپیوتر ها هست ولی اصل تحقیق درباره امنیت رادیو ها در قطعات نظامی هست مثل موشک ها ، رادار ها ، سامانه های دفاعی و ... از دید بچه های کامپیوتر هست .در تحقیق مثال هایی از جدید ترین رادیو ها و جمر ها زده شده که بر روی ایده های جدید ساخته شده اند .در این مقاله بیشتر تلاش برای کلاس بندی نوع حملات میباشد و روش مقابله با آن .- آسیب‌پذیری های طراحیبا پیشرفت های اخیر در زمینه نرم افزار و رادیو بسیاری از ابزار های ارتباطی که ساخته میشوند بر اساس رادیو نرم افزاری (software defined radio ) کار میکنند ، این نوع از رادیو ها بسیاری از سختی های تولید و طراحی رایدو های انالوگ را از بین میبرند و به کاربر امکان میدهد که بیشتر بر روی نیاز خود تمرکز کند و از سختی های طراحی و مهندسی فرکانس رادیویی  دوری کنند . دوستانی که در رشته برق مطالعه تحقیق کرده باشن میدونن این سختی ها چی هستن ، بعضی از طراحی های بورد های rf هنوز ابزار اتوماتیک نداره و هوش مصنوعی نتونسته توش وارد بشه ، همین که فرکانس میره بالا رفتار بعضی از قطعات عوض میشه ، فلز و الیاژ مورد استفاده مهم میشه مثلا بعضی از الیاژ ها به دلیل داشتن بعضی فلزات گرم میشن و بورد رو آب میکنن . در این نوع از رادیو های معمولا قسمت های کنترل  به پردازنده های  Field Programmable Gate Arrays – FPGA سپرده میشود این پردازنده توسط پردازنده های همه منظوره کنترل میشود که از معماری x86  یا arm  تبعیت میکنند و کنترل این نوع از پردازنده ها نیازمند سیستم عامل بلادرنگ میباشد - Real-time operating systems - یا RTOS  برای مثال minix os یکی از سیستم عامل هایی هست که در میکرو کنترل های پیچیده استفاده میشه این سیستم عامل برای کنترل پردازنده های INTEL استفاده میشه . پس هرگونه مورد امنیتی در ساخت و طراحی این نوع پردازنده ها یا سیستم های عامل میتواند پاشنه اشیلی باشد تا حمله کننده ها به سیستم از آن استفاده بکنند .- آسیب‌پذیری های عملیاتیآسیب پذیری هایی هستند که ناشی از نحوه عملکرد  یا پیکربندی سیستم هستند. یک مثال استفاده از رمزهای ضعیف در سیستم های احراز هویت است . یا استفاده از نیرو های بدون تجربه و مهارت در سازمان که امکان مهندسی اجتماعی رو به مهاجمان میده .- کلاس های حملاتدر این قسمت مجموعه ای از حملات را مورد توجه قرار میدهم که یک سیستم شبکه بیسیم ممکن است تحمل کند .مهمترین نوع حملات که ممکن است انجام شوند :حمله کنترل:         در این نوع حمله ، مهاجم تلاش برای کنترل سخت افزار میکند ، این حمله میتواند کنترل قسمتی یا کلی را بگیرد و مهاجم سیستم را مجبور کند که به نحوی که میخواهد عمل کند .شخصیت پردازی:       در این نوع حمله مهاجم خود را در قسمتی از سیستم قرار میدهد و خود را قسمتی از سیستم معرفی میکند.تغییر داده های غیرمجاز:        در این نوع حمله ، مهاجم تلاش میکند که اطلاعات ذخیره شده یا اطلاعات موجود در موج های رادیویی را تغییر دهد .دسترسی غیرمجاز به داده ها:        در این نوع حمله ، مهاجم تلاش میکند که اطلاعات ذخیره شده یا اطلاعات موجود در موج های رادیویی را بخواند بدون ایجاد تغییر در آنها .محروم‌سازی از سرویس:        در این حمله مهاجم تلاش دارد تا امکان کارکرد یا ارائه خدمات را مختل کند .- حمله کنترل در این نوع حمله ، حمله کننده تلاش میکند تا به کنترل قسمتی یا تمام سیستم دست پیدا کند ، این نوع حمله ها ممکن است از طریق تزریق کد به قسمت های کنترل مانند پروسسور یا سیستم عامل انجام میشود ، این نوع حمله ها میتواند از طریق ارسال سیگنال به سخت افزار باشد یا از طریق دسترسی فیزیکی به سخت افزار انجام شود . مثال :- سرریز بافر - Buffer Overflowدر این نوع حمله مهاجم تلاش میکند تا از طریق آسیب پذیری موجود در نرم افزار کنترل کننده، کد نرم افزار خود را در سیستم وارد کند ، این نوع حمله وقتی اتفاق می افتد که نرم افزار اطلاعات بیشتری را نسبت به حافظه ای که برای ان در نظر گرفته شده ذخیره میکند . این نوع از حمله به دو نوع heap-based  و stack-based تقسیم میشوند ، heap  قسمتی از حافظه است که اطلاعات تغییر پذیر ذخیره میشود ، stack  قسمتی از حافظه است که اطلاعات عملگر ها و ادرس نرم افزار ها رو ذخیره میکند ، و نسبت به جایی که کاربر این اطلاعات را ذخیره میکند ممکن است اشکالی در ذخیره اطلاعات پیش بیاید و حمله کننده از طریق تغییر این قسمت های حافظه نرم افزار یا داده های خود را وارد حافظه بکند .این نوع حمله ها بیشترین تعداد حمله ها هستند مثالی از این حمله در سال 2009 اتفاق افتاد توسط دو محقق به نام های Dave Maynor و Jon Ellch این نوع حمله از طریق مشکل در پردازنده وایفای کامپیوتر های اپل انجام میشد و حمله کنند میتوانست کنترل کامپیوتر را به دست آورد بدون اطلاع کاربر . در این نوع حمله ،حمله کننده یک کد ssid (network access code)  الوده را به سیستم های قربانی مخابره میکند و این کد الوده امکان تزریق نرم افزار مخرب مورد نظر را امکان پذیر میکند . برای جلوگیری از این نوع حملات باید به سه قسمت توجه کرد :1 – کامپایلر های امن تر که محدودیت های بیشتری بر روی تعریف حافظه تعیین کنند 2- استفاده از معماری های در پردازنده که برنامه را از اطلاعات جدا کنند3 – طراحی پردازنده های امنتر- شخصیت پردازیدر این نوع از حمله ، حمله کننده تلاش میکند که خود را به عنوان قسمتی یا عضوی از سیستم نشان دهد ، به عنوان مثال میتوان خود را به عنوان سرور ، یک شبکه یا یک سیستم رادیویی نشان دهد . هدف از این حملات میتوان دسترسی یا تغییر اطلاعات باشد . برای به دست آوردن کنترل شبکه یا تغییر رفتار آن .این نوع حمله ها هدف استفاده از اسیب پذیری های مختلف را دارد بیشتر این اسیب پذیری ها مربوط به نوع پروتوکل ها میباشد . یکی از اسیب پذیری های پروتوکلی به نام ارسال پیام جواب شناخته میشود ، این نوع حمله یک پیام را ذخیره میکند و این پیام را دوباره به رادیو فرستنده ارسال میکند . یکی از پروتوکل هایی که به این نوع حمله اسیب پذیر است استاندارد IEEE 802.11-WEPمیباشد که دارای پروتوکل های WEP, WPA-PSK, LEAP است . در حمله به این پروتوکل ها سیستم های احراز هویت شکسته میشوند و حمله کننده امکان دریافت پیام و تغییر ان را به دست می آورد.یکی از مثال های شخصیت پردازی حمله به ابزار هایی است که نیازمند موقعیت مکانی هستند . این نوع حمله با ارسال موقعیت مکانی اشباه به گیرنده این اطلاعات انجام میشود و در موارد نظامی برای تغییر مسیر موشک ها و پهپاد هایی که از gps  استفاده میکنند، انجام میشود .- تغییر غیرمجاز به داده هادر این نوح حمله ، مهاجم تلاش در تغییر اطلاعات ذخیره شده دارد ، تغییر غیر مجاز اطلاعات میتواند منجیر به تغییر در عمل کرد دستگاه یا تغییر در پروتوکل ها بشود ، در این نوع حمله مهاجم با استفاده از روش هایی که قبل تر ارائه شد میتواند اطلاعات را تغییر بدهد یا از طریق دسترسی فیزیکی به سخت افزار و تغییر در آن . یک مثال از این نوع حمله ها به تروجان سخت افزار شناخته میشود . تروجان سخت افزار میتواند تغییرات مختلفی در بورد ایجاد کند که عمل سخت افزار را تحت تاثیر قرار دهد . برای مثال یک پروسسور ممکن است کار رمز نگاری را انجام دهد و داده ها پس از ورود به این پروسسور رمزنگاری شده از ان خارج بشوند ولی وقتی این تروجان فعال میشود این پروسسور از کار میافتد و بورد اطلاعات را بدون رمز نگاری ارسال میکند . یکی از روش های دیگر پیاده سازی حمله به سخت افزار با استفاده از کپی کردن دستگاه انجام میشود ، در این روش حمله کننده قطعه سخت افزاری را مانند بورد را میسازد اما در طراحی ان اسیب پذیری هایی را قرار میدهد تا امکان دریافت اطلاعات از ان امکانپذیر باشد . بر خلاف تروجان سخت افزاری که اسیب پذیری در طراحی پروسسور انجام میشود چه عمدی چه غیر عمدی ، پروسه کپی سازی در عمل سر هم کردن قطعه برای مثال در خط تولید انجام میشود و تغییرات لازم آنجا اعمال میشود . که از طریق اسیب پذیری هایی که در کارخانه ها یا تامین چرخه کالا وجود دارد انجام میشود ، مثالی برای دفاع از این نوع حمله را میتوان به تحریم امریکا بر چین مشاهده کرد ، و هر کدام از کشور ها نگران این هستند که قسمتی از پروسه تامین چرخه کالا به دست کشور مقابل باشد و در بحث امنیتی مشکل ایجاد بکند . یک راه برای مقابله با این حمله استفاده تائید هویت رمز گزاری شده است در این روش هر پروسسور دارای یک کد میباشد که توسط شرکت طراح پروسسور امکان تصدیق دارد . در این روش اگر در ساخت یا تحویل این پروسسور ها تغیری اعمال شود امکان شناسایی برای مشتری و شرکت طراح وجود دارد و از حمله جلوگیری میکند . این روش تصدیق امنیت در دستگاه های انتخابات برزیل در سال 2010 انجام شد .دستگاه رای دادن انتخابات برزیل- دسترسی غیرمجاز به داده هااین نوع حمله بسیار شبیه به حمله قبل میباشد با این تغییر که مهاجم در اطلاعات تغییری ایجاد نمیکند و هدف فقط دسترسی به اطلاعات میاشد ، برای مثال رمز ها و پروتوکل ارتباطی بین دو دستگاه ، با توجه به طبیعت این نوع حمله ها مقابله و متوجه شدن در مقابل مهاجم کار سختی است . یکی از مثال ها میتوان به JTRS security architecture  (SCA Security, 2001) اشاره کرد ، که در یکی از عملگرها از رمزگذاری اطلاعات خود داری میکرد و باعث میشد اطلاعات بدون هیچ گونه رمز گذاری توسط آنتن ها مخابره بشوند . یکی دیگر از حمله ها به نام انالیز موج شناخته میشود ، در این حمله هدف مهاجم انالیز فرستنده و گیرنده ، مصرف طول موج ، افزایش ترافیک اطلاعات و نحوه معرفی عضو جدید در شبکه و جدا شدن از شبکه میباشد . این نوع حمله ها به دو نوع فعال و غیر فعال تفکیک میشوند . در روش غیر فعال اطلاعات فقط جمع میشوند ولی در روش فعال از بعضی از فرستنده ها استفاده میشود تا تغییر یا اضافه کردن اطلاعات در شبکه را مورد بررسی قرار دهند .یکی از راه های مقابله با این نوع حمله تغییر مداوم رمز ها برای سخت کردن کار انالیز اطلاعات میباشد ، روش دوم چک کردن مداوم قطعات سخت افزاری و پیدا کردن سخت افزار های تیم حمله کننده و از بین بردن انها میباشد . استاندارد هایی توسط سازمان های امنیتی برای ساخت و توسعه پایگاه های برق و اوپراتور انتن های مخابراتی وجود دارد که مقاوت در برابر این نوع حمله ها را افزایش میدهد .یکی از راه های حمله که در این گروه میگنجد به مهندسی اجتماعی شناخته میشود ، در این روش حمله کننده سعی میکند با استفاده از ارتباط با کارمندان مجموعه و سازمان به اطلاعات دسترسی پیدا کند ، برای مثال استفاده از کارت شناسایی برای دسترسی به ساختمان و ... و بهترین روش برای مقابله با این نوع حمله ها کلاس های مداوم و سالانه برای اموزش کارمندان شرکت است .- محروم‌سازی از سرویس DDOSدر این روش از حمله هدف از بین بردن امکان خدمات گرفتن از شبکه میباشد ، این کلاس از حملات بیشترین معروفیت را در عصر اینترنت دارند ، در این نوع از حمله تمام اسیب پذیری هایی که قبل تر اشاره شد مورد استفاده قرار میگیرند ، از اسیب پذیری های موجود در نرم افزار ، سخت افزار ، استفاده از پارازیت یا حتی استفاده قانونی از پروتوکل جهت پر کردن امکانات پاسخگویی سخت افزار .در روش پارازیت حمله کننده با استفاده از یک انتن رادیوو اقدام به ایجاد موج های رادیویی مخرب میکند و نسبت پارازیت به پیام را افزایش میدهد و عملا فرستنده و گیرنده را از پیام های رادیویی مخرب اشباع میکند ، این نوع از حملات بسیار در موارد نظامی استفاده میشود ، حمله کننده از ابزار هایی به نام jammer استفاده میکند تا با ایجاد پارازیت امکان هدف گیری یا ارسال و دریافت پیام را از بین میبرند . در بعضی از jammer  ها موج های الکترومغناطیسی به قدری زیاد میباشند که باعث تغیرات غیر قابل جبران در پردازنده میشوند .یکی از راه های مقابله با این نوع حمله ها تعویض باند رادیویی میباشد ، اما مشکلی که این روش ایجاد میکند این است که فرستنده و گیرنده باید با هم قبل از تعویض باند به توافق برسند که به چه باندی تغییر فرکانس بدهند .Krasukhaسیستم عکس از سیستم Krasukha میباشد ، یک جمر معروف روسی که بسیار در اوکراین فعال است، انقدر استفاده از این سیستم ها در میدان روسیه زیاد شده که سیستم های ارتباطی خود روسیه را هم از کار انداخته ، یکی از موارد تحقیق باز بین دوستان ریاضیات و کامپیوتر استفاده از هندسه جبری برای رمز گزاری و  باز کردن باند ها از قبل تعیین شده برای ارتباط امن بین سیستم ها است ، در این الگوریتم ها یک فرمول هندسی بین دو سیستم معارفه میشه و هر دو سیستم یک مسیر هماهنگ رو روی این شکل های هندسی طی میکنند و بر اساس نقطه ای که هستن پیام ها رو رمز نگاری یا رمز گشایی میکنند .یک نوع دیگر از حمله های محروم سازی از سرویس وقتی اتفاق که ناگهان تعداد زیادی کاربر خواهان استفاده از سرویس را دارند ، در این حمله کاربران به حق سرویس در کنار کاربران مهاجم قصد استفاده از اطلاعاتی را دارند ، که نسبت به پروتوکل سرور ممکن است روش های مختلفی برای جواب دادن داشته باشد ، اگر این پروتوکل نیاز به تایید هویت داشته باشد و تمام کاربران با هم درخواست های خود را به سرور ارسال کنند ممکن است که سرور نتواند جواب کاربران را به موقع بدهد و کاربران مهاجم از تاخیر در دریافت و ارسال اطلاعات استفاده می کنند به گونه ای که برای ارسال اطلاعات هویتی که سیستم انتظار انها را دارد بیشترین زمان را هدر میدهند ، و ارتباط را قطع نمیکنند ولی بسیار آرام اطلاعات را ارسال میکنند ، و در این نوع حمله کاربران معمولی که اطلاعات را ارسال میکنند و خدمات را دریافت میکنند پس از خروج از چرخه جای خود را به یکی از مهاجمان میدهد و به این صورت سیستم های مهاجم ظرفیت پاسخ سرور را پر میکنند و کاربران معمولی امکان استفاده از سرویس را از دست میدهند .جهت مقابله با حملات محروم‌سازی از سرویس ، دیوار های اتش بسیاری ساخته شده اند که هرکدام نقاط ضعف و قوت خود را دارند یکی از روش های مقابله با این نوع حملات محدود سازی دسترسی بین تمام کاربران است ، اما این نوع محافظت نارضایتی بسیاری بین کاربران معمولی ایجاد میکند ، این زمینه از حملات جزو سریعترین و بزرگترین موضوعات امنیت است و هر روز تحقیقات جدیدی در این زمینه انجام میشود .</description>
                <category>seyed hossein Tafakh</category>
                <author>seyed hossein Tafakh</author>
                <pubDate>Mon, 03 Jun 2024 22:01:29 +0330</pubDate>
            </item>
                    <item>
                <title>آنالیز نتورک تئوری گراف (network analysis ) در پایتون python</title>
                <link>https://virgool.io/@SeyedHosseinTafakh/%D8%A2%D9%86%D8%A7%D9%84%DB%8C%D8%B2-%D9%86%D8%AA%D9%88%D8%B1%DA%A9-network-analysis-%D8%AF%D8%B1-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-python-fduf1bawdblj</link>
                <description>یکی از اولین کار های که نتورک ساینس ها در پروسه کاری خود انجام میدهند آنالیز اولیه نتورک و به دست آوردن بعضی از اطلاعات اولیه از نتورک خود هست .من سعی میکنم با آنالیز های بسیار ساده حرکت بکنیم و بعد سعی میکنم نسبت به نوع نتورک آنالیز های اون نوع گراف رو معرفی بکنم.انواع نتورک هااگر بخواهیم نتورک ها را دسته بندی بکنیم تقریبا به سه دسته تقسیم میشن اما خب اگر به چشم ریاضی به موضوع نگاه بکنیم میتونیم عمیقتر هم بشیم و تعداد خیلی بیشتر میشه اما به سه دسته نگاه میکنیم برای ساده نگه داشتن مطلب.https://www.ebi.ac.uk/training/online/course/network-analysis-protein-interaction-data-introduction/introduction-graph-theory/graph-theoryگراف Undirectedاین نوع گراف به گراف هایی گفته میشود که که بین دو نود ارتباط دارای جهت نیست و فقط دیتا هست مثل ارتباط در لینکدن شما برای دوستانتان تقاضای دوستی و ارتباط میفرستید و بعد از قبولی توسط آنها ارتباط برقرار خواهد شد .گراف Directedدر این نوع شبکه ارتباط ها دارای جهت هستند و ارتباط یک نود با نود دیگر معنای داشتن ارتباط معکوس نیست . مثالی از این نوع ارتباط اینستاگرام میتواند باشد یا نوعی از معرفی نقشه و ترافیک و مترو و ...گراف weightedبه شخصه من عاشق این نوع گراف ها هستم . این نوع گراف ها در هر ارتباط یا edge دارای مقداری عددی هست . برای مثال گراف های ارتباط بین فرودگاه ها . هر پرواز دارای فاصله ای هست که بین دو فرودگاه کشیده میشود .لود کردن دیتاستتوجه : کد های این آموزش در گیتهاب به صورت کامل تر هستند :@SeyedHosseinTafakh/network_analysis_tutorial_1سرفصل هر اموزش اسم فایل نوت بوک مورد نظر میباشد. در مرحله اول سعی میکنیم از گراف های موجود در کتبخانه networkx استفاده کنیم و اطلاعات کلی گراف مورد نظر را بگیریمimport networkx as nx
myGraph = nx.karate_club_graph()
print(nx.info(myGraph))Name: Zachary&#039;s Karate Club
Type: Graph
Number of nodes: 34
Number of edges: 78
Average degree:   4.5882در مثال بالا که اطلاعات اولیه گراف را پرینت گرفتیم در اول اسم گرافبعد نوع گراف که در اینجا گرافی undirected هستبعد تعداد نود هابعد تعداد ارتباط ها یا ادج هابعد هم متوسط ارتباط نود ها با هم مشخص میشود که میتواند نوعی نشان دهنده تراکم باشد.کشیدن گرافاولین کاری که شاید دوست داشته باشید انجام بدهید کشیدن این گراف باشد چرا که به نظر من هیچ چیز مثل دیدن اطلاعات و پلات کردن این اطلاعات به پروسه انالیز نمیتواند کمک کندimport matplotlib.pyplot as plt
myGraph = nx.karate_club_graph()
nx.draw(myGraph,with_labels=True)یا میتوان همین گراف را به صورت دایره ای کشید :nx.draw_circular(myGraph,with_labels=True)بعد از دیدن آنکه با چه نوع گرافی و با چند دیتاست سر و کله میزنیم شاید بهتر باشد بیشتر برویم سمت اعداد و ارقام .degree distributionبه فارسی توزیع درجه یا اسم بهتر آن degree distribution در واقع دو کار را انجام میدهد .1- نشان میدهد که ارتباط بین نود ها در شبکه چگونه توزیع شده یا به عبارتی نود ها بیشتر دارای چند ارتباط با همسایگان خود هستند2- نشان دهنده توزیع احتمال بین نود های دیگر در شبکهدر تصویری که میبینید در نگاه اول متوجه میشویم که چند تعداد از نود ها دارای تعداد زیادی ارتباط با نود های همسایه خود ندارند ( به عدد 8 تا 16 دقت کنید ) اما نود هایی دارای تعداد همسایه های 2 تا 5 هستند که نشان دهنده متمایل بودن شبکه به نوع centralized است این نوع شبکه دارای رهبر هایی هست که باقی شبکه را به هم وصل میکنند و اگر این نود ها از بین بروند میتوان شبکه را از کار انداخت.مثال : بسیار از افرادی که با مشکلات روانی مثل افسردگی یا افکار خودکشی دست و پنجه نرم میکنند رفتار های شبکه اجتماعی به اینگونه دارند . یعنی هر دوستی که دارن از گروه مختلفی است که اطلاع چندانی از حقله دیگر دوستان فرد ندارد.مثال تصویری یک شبکه centralizedhttps://www.researchgate.net/figure/Centralized-decentralized-and-distributed-network-models-by-Paul-Baran-1964-part-of-a_fig1_260480880اما وقتی به سمت جلوتر میروی و شیب نمودار متعادل تر میشود شبکه به شبکه decentralized تبدیل میشود و نود ها با اینکه شبکه های زیری خود را دارن و در گروه هایی هستند اما راه هایی به گروه های دیگر دارندمثالی جالب : بسیاری از شبکه های تروریستی به اینگونه کار میکنند و برای از بین بردن شبکه کافی است چند رهبر کلیدی از شبکه نابود شوند تا شبکه از کار بیفتدمثال تصویری یک شبکه decentralizedhttps://www.researchgate.net/figure/Centralized-decentralized-and-distributed-network-models-by-Paul-Baran-1964-part-of-a_fig1_260480880شکل شبکه هایی که تعداد degree distribution آن ثابت است و شیبی در نمودار دیده نمیشود به شبکه های distributed معروف هستند این نوع از شبکه ها centralized بسیار کمیاب هستند و کمتر در دنیای واقعی دیده میشوند توجه داشته باشید که همیشه در این نوع گراف ها لازم نیست همه نود ها به هم وصل باشند بلکه باید تعداد ادج های هر نود بسیار نزدیک به متوسط نود های دیگر باشد برای مثال یک شش ظلعی میتواند یک گراف centralized باشد.این نوع شبکه ها معمولا در شبکه های توضیع برق یا شبکه های کامپیوتری کوچک در یک اداره دیده میشوند.https://www.varsitytutors.com/sat_math-help/plane-geometry/geometry/hexagonsNetwork Densityیکی از انالیز هایی که ممکن است در اول به چشم انالیزور اماتور اهمیت نداشته باشد تراکم شبکه است که این تراکم با network density شناخته میشود و فرمولی به شکل زیر دارددر این فرمول n تعداد نود های موجود در شبکه است و m تعداد ادج های موجود در شبکه است . اما عدد 2 در این فرمول هم متغیر جالبی است که باید به آن توجه کرد . این فرمول برای یک گراف undirected است و دلیل عدد 2 برای این است که بین هر دو گراف تعداد نوع نود میتواند دو باشد ، پس اگر گرافی دارید که انواع مختلفی ارتباط دارد باید عدد 2 را با تعداد نوع edge ها جایگزین کرد .یکی از خواص جالب این فرمول تغییر رفتار نود ها در زمان های مختلف است .برای مثال میتوان به تغییر رفتار حیوانات در طبیعت بین فصل زمستان و تابستان در یک پارک حفاظت شده اشاره کرد . یا بررسی رفتار دوستانه بین کارمندان شرکت قبل و بعد از مهمانی های شرکت اشاره کرد که بتوانیم بعضی از رفتار ها را بهتر انالیز بکنیم و ببینیم که اگر شرایط را برای رشد یک شبکه مهیا بکنیم شبکه چه مقدار رشد میکند که این بحث مارا به فرمول بعدی میکشاندDegree Centralityدر این فرمول که ریز شده فرمول بالا میباشد سعی میکنیم که تراکم یک نود را به دست بیاوریم و ببینیم نسبت تعداد روابط موجود به روابط ممکن چقدر استبه عبارت دیگر میشوددر این فرمول k تعداد ادج های هر نود میباشد و (n-1) تعداد نود های ممکن برای هر نود هست چرا که خود نود را حساب نمیکنیم و دلیل اینکه در فرمول قبلی ما n را ضرب در (n-1) میکنیم همین هست، میخواهیم تعداد ماکسیمم هر نود ضرب در تعداد بیشترین عدد ارتباط با باقی نودها را بیابیم . اگر شبکه ما دارای ارتباطات جهت دار باشد یا با تلفظ درست آن که میشود directed graph باید فرمول را به زیر تغییر دادin تعداد ادج های ورودی و out تعداد ادج های خروجی.از این فرمول یکی از زیر ساخت های شناخت fraud در یک شبکه است. برای مثال از این فرمول میتوان برای محاسبه وضعیت هر نود در session مختلف و با افزایش ناگهانی تعداد ارتباطات با آن میتوان تصمیم گرفت که نود مورد نظر رفتاری خارج از نود های شبکه دارید یا میتوان گفت که تبدیل به موضوعی ترند شده در شبکه های اجتماعی است .Betweenness Centralityبرای فهم بهتر این موضوع پیشنهاد میکنم جهت یاد اوری یا یادگیری الگوریتم dijkstra search algorithm را مطالعه بکنید . این فرمول فرمولی دیگر جهت شناختن نود های مهم در شبکه است این الگوریتم بیشتر تلاش در پیدا کردن نود های تنگنا یا به انگلیسی bottleneck دارد. و روش محاسبه ان به این صورت است :که در اینجا سیگما یعنی این علامتنشان دهنده تعداد مجموع کوتاهترین راه ها بین نود s و t است و سیگما st(v) نشان دهنده تکرار نود v در این راه ها است .اجازه دهید با عکس توضیح بدهم : ( این عکس ها از ویدیو در این ویدیو یوتیوب تهیه شده )این یک گراف ساده با 5 نود هست . راه های ارتباط ممکن برای این گراف با فرمول زیر محاسبه میشود :که n تعداد نود ها میباشد .( تعداد نود ضرب در تعداد ارتباط های ممکن تقسیم بر دو چون تکرار نباید باشد)برای فهم بهتر فرمول به جدول زیر توجه کنید :حاصل فرمول 10 میشود . در جدول ها هم تعداد جفت های موجود عدد ده را نشان میدهد . جدول های قرمز نشان دهنده عدم ارتباط یک نود با خود یا عدم اجازه تکرار جفت بین نود ها میباشد .وقتی همه راه های مختلف را در جدول نشان دهیم و راه ها و نود های تکرار شده در نزدیک راه بین راه های موجود در گراف را بنویسیم به جدول زید میرسیم :حال باید جدول جمع را بر عددی تقسیم کنیم که از فرمول زیر به دست میاید :نماد n تعداد نود های شبکه است .تعداد راه های ممکن از نود اول به بقیه شبکه یا (n-1) و تعداد راه های ممکن از نود دوم به بقیه شبکه بدون تکرار نود مبدا یا نود اول (n-2) عدد دو در این جا به همین دلیل است و تقسیم بر 2 چرا که تکرار نباید باشد در این راه ها و میرسیم به جدول زیراین فرمول نیز در بسیاری از جاها استفاده میشود . در مثال شبکه تروریستی که در بالا زدیم، در شبکه های توضیع برق و گاز به دلیل کم کردن فشار از بعضی از شاه راه های کلیدی یا استفاده در پیاده سازی ساعت حرکت مترو ها وکم کردن تعداد مسافر های در یک ایستگاه ( مثلا ایستگاه مترو امام خمینی دارای Betweenness Centrality بسیار بالایی است )Closeness Centralityدر این روش تلاش میشود متوسط نزدیکترین نود به نود های دیگذ محاسبه شود و روش محاسبه باز هم دارای جدول های مختلف است اما من سعی میکنم که خلاصه تر بنویسم چرا که مطمئن هستم بعد از روش توضیح بالا متوجه بسیاری از محاسبات شده اید . تصویر زیر را در نظر بگیرید :https://www.ebi.ac.uk/training/online/course/network-analysis-protein-interaction-data-introduction/building-and-analysing-ppins-1این تصویر کار رو برای من خیلی راحت کرد :)به ماتریس راه های ارتباطی با فرض هر ادج دارای عدد یک نگاه بکنید . برای رفتن از نود A به تمام نود ها تمام راه های کوتاه را مینویسیم و حاصل جمع کل مقادر را میگیریم که میشود 6 بعد عدد را در مخرج (n-1) قرار میدهیم تا نزدیکی این نود را به نود های دیگر را حساب کنیم . هرچه عدد کوچکتر یعنی اطلاعات سخت تر از یک نود به بقیشه شبکه منتقل میشود و عدد یک که در نود B دیده میشود یعنی از B به هر نود یک راه وجود دارد و اطلاعات به راحتی منتقل میشود.Eigenvector centralityتوجه : این فرمول در گیت هاب رو خودم نوشتم چون کتابخانه networkx این فرمول را ارور میدهد. توجه کنید که در پروداکشن استفاده نکنید و بیشتر قصد آموزشی دارد کد.من نمیخواستم این موضوع رو اینجا توضیح بدم ولی موضوعی هست که خیلی به موضوع centrality مرتبط هست ولی خب خیلی فرمول طولانی داره و اگر بخوام توضیحش بدم حدود دو صفحه A4 لازم داریم و موضوع یک پست جداگانه هست اما سعی میکنم به صورت مفصل در پستی که دارم اماده میکنم درمورد page rank توضیحش بدم .به صورت خلاصه eigenvector نشان دهنده ارتباط نود ها به نودهای مهم در شبکه است. این جمله یکم به خودی خود گیج کننده هست ولی اجازه بدین با مثال توضیح بدم .یک شرکت رو در نظر بگیرید ، اگر نگهبان شرکت رو در نظر بگیریم ،نگهبان دارای بزرگترین closeness centrality هست اما در توضیع قدرت دارای قدرتی نیست ولی مدیر عامل مجموعه که ممکن هست همه خواص نودش کم باشه دارای قدرت بسیار بالایی هست چون با نود های بسیار مهم شبکه در ارتباط هست و معاون های مدیر عامل هستن که این قدرت رو به مدیر عامل میدن چون معاون ها دارای خواص شبکه ای بالایی هستن و این قدرت به مدیر عامل منتقل میشه و eigenvector بالایی پیدا میکنه.اجازه بدین با عکس توضیح بدم.شبکه زیر رو در نظر بگیرید :https://youtu.be/AjacGClQ56oبعد باید adjacency matrix ماتریکس را باید بنویسیم و عدد را در ارزش Eigenvector نود خود ضرب بکنیم بعد اصطلاحا ماتریکس حاصل را بر نرمال خود تقسیم بکنیم که عدد نرمال شده حاصل جمع توان دو همه اعداد است و بعد گرفتن ریشه دوم عدد یا همان جذر .در عکس بالا در iteration اول adjacency matrix را ضرب در یک میکنم چون در iteration اول هستیم بعد ماتریس بعدی را در نظر بگیرید که حاصل جمع توان دو هر عدد میشود :[9+4+9+9+4+9+4+4] که میشود عدد 52 و ریشه دوم میشود 7.211 بعد هر عدد ماتریس را تقسیم بر عدد نرمال شده میکنیم و این عملیات را چند بار تکرار میکنیم تا عدد نرمال شده k-1 یا همان دوره قبلی بسیار نزدیک به عدد فعلی باشد به اعداد پایین توجه کنید :عدد نرمال شده از 7.21 به عدد 2.64 رسید تنها در چهار iteration اگر دوره سوم را نگاه کنیم متوجه میشویم که متوسط تغییر بسیار کم شد نسبت به دو iteration اول یعنی عدد از 2.67 به 2.64Clustering Coefficientیکی از بهترین راه های پیدا کردن ارتباطات جمعی بین یک گروه را فرمول های زیر مجموعه clustering coefficient دانست و میتوان از این فرمول ها به عنوان دروازه ای به بحث بسیار مهم community detection نگاه کرد .Local Clustering Coefficientدر این فرمول هدف پیدا کردن fraction of possible interaction (فارسی درستش رو نمیدونم) بین نود ها همسایه هست و فرمول به این صورت کار میکندمتغییر Ni نشان دهنده تعداد ارتباط بین همسایگان نود i و Ki نشان دهنده درجه نود یا تعداد نود های در همسایه نود میباشد. در تصویر زیر میتوانید این محاسبات را بهتر دیده و انجام دهید :https://www.researchgate.net/figure/Dependence-of-the-mean-local-clustering-coefficient-on-the-degree-for-the-suicide_fig8_236604411برای پیدا کردن متوسط این فرمول برای کل گراف کافی است این فرمول را بر همه نود ها پیاده بکنید و نتیجه را بر تعداد نود ها تقسیم بکنید .</description>
                <category>seyed hossein Tafakh</category>
                <author>seyed hossein Tafakh</author>
                <pubDate>Wed, 02 Aug 2023 17:55:52 +0330</pubDate>
            </item>
                    <item>
                <title>فس یا function as a service (faas) چیست ؟</title>
                <link>https://virgool.io/@SeyedHosseinTafakh/%D9%81%D8%B3-%DB%8C%D8%A7-function-as-a-service-faas-%DA%86%DB%8C%D8%B3%D8%AA-d3lbipco8bwy</link>
                <description>برنامه نویسی امروز انقدر پیشرفت کرده که گفتن اینکه فقط برنامه نویس هستم کافی نیست و باید برای افرادی که توی صنعت هستند مشخص کنید که چه نوع برنامه نویسی انجام میدید ؟مثلا برنامه نویس بازی هستین یا وب ؟ کلاینت ساید هستین یا سرور ساید ؟ و ...اما همه برنامه نویسا با یک چیز اشنا هستند و اون کار کردن با کامپیوتر هست. بعضی وقت ها این کامپیوتر یک موبایل هست یا یک دستگاه iot .اوایل دنیای وب وقتی شرکت ها میخواستن یک نرم افزار رو روی وب ارائه بدن باید خودشون سرور های بزرگ میخریدن و مدیریت میکردن تا بتونن نرم افزار رو ران بکننحدودای سال 2000 میلادی شرکت هایی شروع کردن به ارائه زیر ساخت به عنوان سرویس (IAAS-infrastructure as a service) و زحمت نگهداری این نوع زیر ساخت ها رو کم کردن و بیزنس همون نوع خدمات رو میگیره با خرج بسیار کمتر  - شرکت  netflix تمام خدمات زیر ساخت خودشو از امازن میگره - تویتر تمام زیرساخت خودشو به کلود گوگل منتقل کرد و این تازه شروع ماجراست ما الان توی ترند دیتا های پزشکی و بانکی هستیم این دو صنعت هنوز دیتای خودشون رو به کلود منتقل نکردن و احتمالا تا پنج سال اینده قرار داد های کلان توی این دو ترند نوشته میشنبعد از معرفی تکنولوژی کانتینر مدیریت نرم افزار روی ابر بسیار راحت تر شد و دیگه برنامه نویس میتونست محیط برنامه نویسی خودشو رو هرجور که دوست داره تنظیم بکنه و مطمئن باشه . از طرفی خیلی امکانات دیگه ای به برنامه نویس ها داد یکی از این امکانات توانایی مدیریت محیط کانتیرنر بود که ابزاری مثل کوبرنتیز رو برای این وظیفه ساختن .شرکت های کلود کلاستر اماده کوبرنتیز رو برای کاربرهاشون ارائه میدن و  این نوع خدمت به عنوان (paas-platform as a service )  شناخته میشه.تا اینجا کاربر برای دیپلوی نرم افزارش باید به نحوی ابزاری رو مدیریت بکنه - برای مثال باید کوبرنتیز خودشو ران بکنه بعد داکر فایلشو درست بکنه و بریزه روی کوبرنتیز و اونجوری ترافیک یوزر ها رو به سمت نرم افزارش بفرسته. فانکشنقلب هر نرم افزار، فانکشن هایی هستند که کار میکنن و منطق اون نرم افزاری رو میسازن که کاربر میبینه.و فانکشن به عنوان سوریس رو همین موضوع تمرکز میکنه ، توی این نگرش برنامه نویس یک فانکشن مینویسه و روی پلتفرم faas خودش دیپلوی میکنه ، این فانکشن به صورت غیر فعال میمونه تا زمانی که فراخوانی بشه این موضوع این امکان رو میده که ارائه دهنده خدمات faas کاربر رو فقط برای 100 میلی ثانیه ای که اون فانکشن ران شد هزینه بگیره امکانات دیگه :-- توانایی نوشتن فانکشن ها با هر زبان برنامه نویسی-- مقاومت بسیار خوب در مقابل افزایش سریع تعداد تقاضا ها - burst-- معماری event-driven معروف ترین ارائه دهنده این خدمات firebase هست که توسط گوگل خریداری شد شرکت های دیگه هم نوع سرویس خودشون رو دارن مثلا امازون با سرویس lambda کار میکنه ، ibm روی پروژه ای به نام openwhisk کار کرده و اون رو روی کلود خودش ارائه میده ، استارت اپ های کوچیک دیگه ای هم هستن که دارن کار میکنن و هر کدوم به نحوی دارن نو اوری به خرج میدن تا نفر اول این مارکت بشن ، برای چهار سال faas بیشترن قسمت از هزینه های تیم تحقیق توسعه امازون بود ، یک نکته جالب هم اینه که بیشترین برنامه نویسایی که از firebase استفاده کردن اهل امریکای جنوبی هستند.در آخر باید بگم که این تکنولوژی خیلی جای پیشرفت داره و به نظر من نسل بعدی برنامه نویس ها قطعا برنامه نویسی رو ساده تر ترجیح میدن مثل همه ، و اینکه faas به تنهایی کافی نیست و یکی از اجر های خدمات ابری هست ، برای مثال ارائه نرم افزار هایی مثل دیتا بیس ها یا ارائه storage برای ذخیره سازی فایل ها و کلی نرم افزار دیگه که میتونن یک اکوسیستم غنی ایجاد بکنن برای دولپرا و به جای مدیریت کلود خودشون تمرکزشون رو بزارن برای نوشتن کد و حل مشکل کاربراشونیکم توضیح فنی برای کسایی که دوست دارن بدونن سیستم چطور کار میکنه:شاید در نگاه اول ساده بگیم که مگه همه این کار رو نمیکنیم ؟ روی یه داکر یا vm هر کدی که میخوایم رو پیاده میکنیم و نرم افزار رو به وسیله http صدا میزنیم - در جواب باید بگم که اراه تا اینجا هیچ فرقی نمیکنه اما موضوع وقتی جالب میشه که بدونید این فانکشن ها هیچ منبع ( cpu - ram ) رو درگیر نمیکنن و فقط وقتی که فراخوانی میشن از پروسسور استفاده میکنن و بعد از اینکه کارشون تموم شد برمیگردن توی حالت خاموش و این کار رو توی کمتر از چند میکرو ثانیه انجام میدن ، این توسط داکر کنترل میشه ، به این صورت که چند کانتینر به حالت prewarm نگه داشته میشه و هربار که فانکشنی صدا زده بشه اون کانتینر به حالت warm تبدیل میشه و کد رو ران میکنه و دوباره به حالت قبلی خودش بر میگرده، برنامه نویسای این پروژه اومدن از معماری event driven استفاده کردن و توی این معماری از صف ها برای صدا زدن موتور container استفاده میکنن ، با معماری جالبشون تونستن امکانات جالبی ارائه بدن، اول اینکه با استفاده از شبکه مطمئنی که ساختن میتونید مطمئن باشید که گم شدن دیتا ندارید - data loss - در کنارش میتونید از event log  های موجود روی اکوسیستم استفاده بکنید بدون اینکه این زیرساخت ها رو خودتون بسازید یا مدیریت بکنید. https://youtu.be/5bOnGxgda1I این ویدیو رو ببینید به صورت کامل توضیح داده شده.</description>
                <category>seyed hossein Tafakh</category>
                <author>seyed hossein Tafakh</author>
                <pubDate>Sat, 01 Oct 2022 02:09:09 +0330</pubDate>
            </item>
                    <item>
                <title>از حرکت روی یک خط تا روش کار عکس های سه بعدی</title>
                <link>https://virgool.io/@SeyedHosseinTafakh/%D8%A7%D8%B2-%D8%AD%D8%B1%DA%A9%D8%AA-%D8%B1%D9%88%DB%8C-%DB%8C%DA%A9-%D8%AE%D8%B7-%D8%AA%D8%A7-%D8%B1%D9%88%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%B9%DA%A9%D8%B3-%D9%87%D8%A7%DB%8C-%D8%B3%D9%87-%D8%A8%D8%B9%D8%AF%DB%8C-fta9resip1up</link>
                <description>قبل از شروع باید بگم این اموزش هیچ فرمول ریاضی نداره و تمام موضوعات فقط جوری بیان میشن که همه متوجه بشن ، نه فقط برنامه نویسا یا رشته خاصی .یکی از چیزایی که من خیلی دوست دارم هندسه هست .من عاشق نگاه کردن به دیتا به شکل مسائل هندسی هستم، چیزی که دارم دربارش مینویسم یک نگرش به دیتا هست بر پایه ریاضی .فکر کنید یک خط داریم و یک موجود داریم که روی این خط حرکت میکنه.برای راحتی اسمش رو میزاریم جلی :خب اینم جلی . بزارید یه خط بکشیم:اینی که میبینید جلی هست توی یه دنیای یک بعدی و برای حرکت توی دنیاش فقط میتونه جلو بره یا بیاد عقب و وقتی حرکت میکنه یکی جابیجا میشهاین x هایی که نوشتم برای اینه که بتونیم خونه ها رو از جایی که جلی هست نگاه کنیم.جلی با هر حرکت یا یکی میره جلو یا عقب، اما اگر جلی بدون دانش بره به اون خونه ها ممکن هست توسط یه شکارچی شکار بشه و بمیره ، پس ما اینو نمیخوایم و میایم یه فیچر اضافه میکنیم که بتونه خونه های کناری رو ببینه ، یعنی یکی جلو و یکی عقب .----به این موضوع میگن کانولوشن توی ریاضی .  بزارید جلی رو یک خونه حرکت بدیم.حالا جلی میدونه که خونه x+1 یه دشمن توش هست.اتفاق جالبی توی دنیای یک بعدی نمیفته ، بیاید یک بعد اضافه کنیم.چیزی که از قبل داشتیم x بود الان y رو اضافه میکنیم.برای بالا و پایین رفتن نیاز هست به اندازه y بریم بالا یا پایین و برای چپ و راست رفتن نیاز هست x تا جابجا بشیم . برای مثال:y=y+1x=x+1این حرکت زیر رو تعریف میکنه:و برای کانلوشن و خوندن اطلاعات اطرافش اینجوری میشه :یه نکته جالب ، چیزی که روی مانیتورتون میبینید اینجوری محاسبه میشه ، در واقع قبل از اینکه اطلاعات تصویر روی مانیتور بیاد، قبلش باید اطلاعات عکسش  خونده بشه و جای هر دیتا از عکس روی هر پیکسل مانیتور مشخص بشه.مثلا توی تصویری که میبینید اینه که به جای هر داده اطلاعاتی من اون خونه رو با یه رنگ پر کردم و تصویری ساختم ، در واقع اکسل و تمام بانک های اطلاعاتی sql همینجوری کار میکنن، نقشه ای از دنیای دو بعدی که میشه توی هر خونش اطلاعات گذاشت.این درواقع همون سیستم x , y دوره راهنمایی هست .همونجور که قبلا یاد گرفتیم همیشه لازم نیست که یک عدد رفت جلو یا یه عدد رفت عقب و میشه کمی هم جابجا شد ، مثلا فقط 25% مقدار از یک قدم کامل . حالا دیگه فقط لازمه موقعیت نقطه رو ذخیره کنیم  برای این کار هم نیاز به یک نقطه مرجع داریم که همهی نقاط رو بشه از اون مشخص کرد . مثل عکس زیر :حالا یه مشکل پیش میاد اینکه جلی فقط میتونه خونه های کنارش رو ببینه  و این به درد ما نمیخوره چون نمیتونه محلول رو ببینه پس نگاهش رو عوض میکنیم و میایم دورش یه دایره میکشیم تا جلی بتونه به معنای واقعی توی دنیای دو بعدی نگاه کنه :تصویر بالا رو با پایتون درست کردم و اگر دایره ای بکشیم اطراف جلی  به شعاع یک تصویر بالا به دست میاد.و میشه دید که جلی هم دشمنش رو میبینه هم اون اکسیر رو .برای حرکت و رسیدن بهش نیاز هست فقط به سمتش حرکت کنه و برای حرکت نیاز هست x تا و y تا بره سمت اکسیر و عدد دقیقش از کم کردن موقعیتشون از هم به دست میاد .سه بعدی:اگر متصور بشیم با خوردن اون اکسیر جلی میتونه یه بعد دیگه به خودش اضافه کنه اون وقت میرسیم به یه جهان سه بعدی و یکم داستان اینجا سخت میشه ، چون قبل از این همش رو تو مدرسه یاد گرفتیم .بیاید متصور بشیم که الان جلی توی یه دنیای سه بعدی هست و نیاز هست خودش رو تعریف کنه ، اولین چیزی که بهش نیاز داره عدد بعد سوم برای موقعیتش هست . میتونیم از نماد z استفاده کنیم و عدد یک رو بهش بدیم. تصویر بالا یک کره هست که نشون دهنده موقعیت جلی هست اگر برد دیدش یک باشه.اما کلی این داستان از نظر مهندسی باگ داره ، یکیش اینکه جلی موجود تک بعدی هست و حجم نداره و فقط یک نقطست ، دوم اینکه اگر حجم هم داشته باشه چطور نشونش بدیم؟! ، خود اینکه چطور باید نشون داده بشه یک مساله مهم هست چون بعضی از این اشکال سه بعدی توی ریاضیات تعریف میشن کاملا هم منطقی بنظر میان اما نمیشه توی دنیای واقعی کشیدشون و به شدت سخت میشه،برای حل این موضوع توی دنیای ریاضی مهندس ها میان و یه کلک میزنن و یک مثلث تشکیل میده و هر مثلث رو یک واحد از یک شکل در نظر میگیرن و اینجوری جلوی خیلی از باگ ها رو میگیرن و مسئله رو حل میکننهر مثلث یک واحد تشکیل دهندهاین نگاه به مسئله سه بعدی به ما موتورهای بازی سازی رو داد و کمکمون کرد بتونیم جلوه های ویژه بسازیم برای فیلمهامون اما توی یک مسئله به شدت عقب نگهمون داشته و اون دنیای VR , AR هست چون انجام محساباتی مثل بازگشت نور حاصل از برخورد به هر مثلث شاید توی دنیای تمام دیجیتال راحت باشه اما پیاده سازی اون توی دنیای واقعی به مراتب سخت تر هست چون باید منبع نور شناخته بشه و داینامیک محاسبه بشه و این به شدت سخت هستولی روشی هست که داره اروم وارد میشه به دنیای سه بعدی و اون نگاه کردن به هر ذره به شکل یک پیکسل هست و ساخت اون حجم سه بعدی از پیکسل های مختلف ساخته میشه.در کل این تکنولوژی دوباره در حال ترند شدن هست و الان یکی از داغترین مباحث دنیای کامپیوتر هست و افرادی مثل دکتر Michael Bronstein در حال کار کردن توی این زمینه هستند ، حتما کاراشون رو  ببنید.ممنون که خوندین این مطلب رو ، اگر سوالی داشتید توی نظرات بنویسید ، من مشکلی ندارم برای جواب دادن ، حتما جواب میدم . </description>
                <category>seyed hossein Tafakh</category>
                <author>seyed hossein Tafakh</author>
                <pubDate>Sun, 12 Sep 2021 23:56:13 +0430</pubDate>
            </item>
                    <item>
                <title>graphSage</title>
                <link>https://virgool.io/@SeyedHosseinTafakh/graphsage-xdllvopakc8l</link>
                <description>سلام .در این آموزش ما قصد داریم درباره یک موضوع و روش نگرش صحبت بکنیم . موضوعی که برای زمان بسیار زیادی مغز بعضی از ریاضی دانان و quantative reaserch های زیادی را در زمینه گراف به خود مشغول کرده .embeddingشاید در نگاه اول بیاید که خب عملیات امبدینگ یا نشانه گذاری دیتا ها در مکان های مختلف در حالتی که بتوانند اطلاعات خود را نشان بدهند یا به ارث ببرند زیاد دارای اجر و غربتی در میان دوست داران هوش مصنوعی نیست چرا که در دنیای که زندگی میکنند دیتا هایی که اماده میکنند هم اکنون بسیاری از مشکلات را حل میکنند و این پیشنیاز ها در غالب اطلاعات در دست قرار میگیرند که این به خودی خودی ایده بدیعی نیست که بخواهیم اطلاعات را عوض بکنیم و آنها  را به عدد تبدیل بکنیم برای آنالیز اطلاعات .اما نکته برای گراف ها اینجا متوقف نمیشود . چرا که گراف ها دارای ابعاد نیستند و بعد برای هر داده در گراف اندازه ای صفر دارد که این مسئله را دو چندان سخت میکند و تنها اطلاعات موجود در گراف راه ارتباط با همسایگان است. گراف همین هست یک هزار تو که از هر راس به راس دیگر راه های زیادی هست و همه اینها در دنیایی هست که بعد معنا ندارد .در سال های اخیر به دلیل افزایش محبوبیت در بین شرکت های آیتی به دلیل خوبی هایی که ارائه میدهند . و به دلیل استفاده از این مبحث و زیاد شدن کار برای این زیمنه بعضی دانشمندان راه راهی بسیار جالبی ارائه داده اند که نگاه به این مسائل باید بسیار جالب باشد .1- classification https://snap-stanford.github.io/cs224w-notes/machine-learning-with-networks/message-passing-and-node-classificationure:در این چلنج مطرح شده که رنگ نود های خاکستری را حدث بزنید.2- prediction هدف از این چلنج شناخت احتمال برقراری ارتباط بین نود های دیگر است .برای این دو سوال و چلنج راه های کمی تا بحال ارائه شده و دلیلش هم معلومه ، تازه بودن فیلد graph data science .دو روش شبیه به هم که توسط دانشمندان هوش مصنوعی متن و زبان شناس ارائه شد و در این روش سعی شده که به گراف ها حالت توالی یا sequence بدن و بفرستن در مدل های که در معروفی مثل skip-gram .در این نوشته بیشتر توضیح دادم مدل های DeepWalk , Node2Vecگراف نورال نتورک یا GNNگراف نورال نتورک ها نوعی از شبکه های عصبی هستند که مستقیم بر روی ساختار گراف کار میکنند و نیازی به روش های مختلف استخراج دیتا از گراف ندارند و به عنوان یک روشی که هم خوبی های شبکه عصبی و هم عدم نیاز به تغییر استراکچر دیتای اولیه را ارائه میداد توجه بسیاری را به خود جلب کرد .در این روش کار میتواند ساده شروع بشود و با توجه به نیاز ها و سوال هایی که بانک اطلاعاتی یا هرف پروژه ارائه میکند این روش میتواند متغیر باشد ، و بیشتر شبیه یک مدل بسیار ماجولار میماند تا یک فریمورک عبوث که فقط یک نوع روش را میشناسد و این ماجول ها دارای دامنه بزرگی از فانکشن های ریاضی هستند از عملیات نقشه برداری لاپلاسین-Nonlinear dimensionality reduction -   گرفته تا جمع ساده .یکی از استفاده های این گراف ها node classification هست و در واقع در این جا سوال اینگونه مطرح میشود که : هر نود دارای لیبل یا نوعی دیتا هست و ما میخواهیم لیبل نود مورد نظر را حدث بزنیم بدون داشتن ground truth یا داده مرجع .اگر بخواهیم گراف نورال نتورک را مسقیم از پیپر توضیح بدهیم باید بگوییم که :در گراف نود با حالت طبیعی   و ارتباطی که با نود های اطراف  دارد خود را توضیح میدهد. و هدف GNN شناخت حالت embed شده h_v که دارنده اطلاعات از نود های اطراف و همسایه برای هر نود . در استیت یا حالت امبدین h_v  دارای ماتریس s بعدی برای ارائه نود v است که از این میتوان برای استخراج o_v استفاده کرد . که لیبل نود را میتوان توسط فانکشن F که نوعی فاکشن پارامتریک است که با اسم local transition function شناخته میشود و اطلاعات این فانکشن بین تمام نود ها مشترک است - shared - و حالت نود را با توجه به نود های همسایه اپدیت میکند. g فانکشنی است که به اسم local  output  function شناخته میشود ، که توصیف میکند چگونه خروجی تولد شده است . h_v و o_v به روش های زیر ارائه میشوند. https://www-cs-faculty.stanford.edu/people/jure/pubs/graphsage-nips17.pdfhttps://www-cs-faculty.stanford.edu/people/jure/pubs/graphsage-nips17.pdfکه x_v , x_co[v] , h_nw[v] , x_ne[v], خواصی از نود v هستند x_v : داده ی پایه .x_co[v] :   اطلاعات لبه  های اطراف (edge )h_ne[v]: اطلاعات امبد شده نود های همسایه.x_ne[v] : اطلاعات همسایه های نود .توجه که  H,O,X و X_N حاصل جمع شدن و انباشته کردن  تعداد حالت ها  - state - ، تمام خروجی ها ، تمام خواص ها و تمام خواص نود با احترام- respect to -  به همسایه های نود .https://www-cs-faculty.stanford.edu/people/jure/pubs/graphsage-nips17.pdfhttps://www-cs-faculty.stanford.edu/people/jure/pubs/graphsage-nips17.pdfو اگر بخواهم پاراگراف بعدی را در یک خط خلاصه بکنم این خروجی ها، خروجی های متغیر نسبت به استیت یا تعداد دوره های اموزش الگوریتم هستند .فرمول محاسبه خطا به صورت زیر است .https://www-cs-faculty.stanford.edu/people/jure/pubs/graphsage-nips17.pdfکه بر اساس روش گرادیانت دسنت است که p تعداد نود های سوپروایزر است . و در حاصل اختلاف بین حالت فعلی با  حالت حقیق محض داده مرجع .البته این روش محدودیت هایی دارد که تحقیقاتی هم برای بهتر شدن این روش محاسبه خطا ارائه شده اند که خواص بهتری دارند .خب...ممکن است مطالب بالا کمی برای شما باعث سردرگمی بشود و در فهم آنها به مشکل بخورید و اگر این اتفاق افتاد شما کاملا حق دارید ، من قصد دارم این موضوع را دوباره توضیح بدهم اما از دیدگاهی دیگر و بیشتر مثل یک برنامه نویس .کل این الگوریتم از دو مرحله تشکیل شده است .1- اطلاعات خود و اطراف را جمع میکنی و نوعی فانکشن روی آنها انجام میدهیم  مثل جمع یا ماکسیمم و فانکشن ها در اینجا تنوع بسیار دارند.2- نوعی محاسبه برای پیدا کردن یک ماتریکس وزن weight matrix یا همان ترین کردن یک شبکه عصبی پرسپتران معمولی و محاسبه loss با توجه به ارائه ای که از دیتا بیس داریم و اختلاف ان با پیشبینی شبکه و آموزش بر اساس این روش .و اگر بخواهیم بصورتی از بالا نگاه کنیم این یک بلاک از شبکه های عصبی گرافی است که با تغییر دادن بلاک ها به روش های مختلف یا تغیر دادن فانکشن های مختلف در پروسه دانشمندان و محققان باعث بهبود یافت این علم میشوند . مثلا از فانکشنهایی مثل lstm , relu  و ... استفاده میکنن و اگر شما راهی میشناسید برای بهبود این نوع شبکه ها بهتر است سریعتر دست به قلم بشوید و paper خود را بنویسید . GraphSagehttps://dsgiitr.com/blogs/graphsage/در روش خامی که توضیح دادم با خوبی های بسیاری که دارد اما هنوز چلنج هایی در قبل خود نهفته است .اول اینکه بر اساس پیپر ارائه داده شده این روش نمیتواند روابط دور تر از همسایه را تشخیص بدهد و این موضوع برای نود های که در دوره اموزش شبکه عصبی به ان ارائه نمیشوند و باید شبکه حدث بزند این نوع نود را میبینیم که درصد های خوبی در موفقیت نمیگیریم . از طرفی نظمی برای ارائه اطلاعات به شبکه درست ارائه نشده و اگر ماتریکس یا وکتور را چینشش را عوض بکنیم دیگر این شبکه کارایی ندارد .GraphSage راه حلی برای مشکلات موجود در پیپیر بود و بعضی از مشکلات دیگری که در بین دیگر مقالات ارائه شده بود که مقیاس پذیر بود، و یکی از امکانات جالب این مدل توانایی ارائه امبدینگ هست برای نود هایی که ارائه میشوند بدون اینکه در دوره ترین یا اموزش بوده باشند .https://www-cs-faculty.stanford.edu/people/jure/pubs/graphsage-nips17.pdfتعداد لوپ نشاندهنده تعداد ایتریتور های اپدیت است . یا به فارسی تعداد دفعاتی که مدل را اموزش میدهیم. درحالی که h^k_v نشان دهنده اخرین وکتور ارائه دهنده حالت نود v در شماره ترین یا اپدیت k .h^k_v در هر بار تکرار توسط فانکشنی اپدیت میشود که به آن aggregation function میگوییم. که بر اساس ورودی هایی از اطلاعات خود و نود های همسایه در دوره k-1  سعی در ارائه بهتری از ماتریس وزن یا weight matrix  دارد و ماتریس را با W^k نشان میدهیم .سه تا از aggregation function هایی که توسط خود پیپر ارائه شده .یک - Mean aggregatorدر این فانکشن اطلاعات را بر اساس متوسط مقادیر ارائه شده توسط نود های همسایه محاسبه میکند https://www-cs-faculty.stanford.edu/people/jure/pubs/graphsage-nips17.pdfدو - LSTM aggregatorشاید در نگاه اول عجیب باشد چرا که ما برای انجام محاسبات بر روی نود های همسایه باید روشی را ارائه بدهیم که چینش در ان مهم نباشید ولی لایه های lstm باید نظم ورودی داشته باشند . ولی بعد از چند تحقیق مشخص شد که lstm توانایی حدث زدن دیتا های بینظم را هم دارد و تاثیری در نتیجه که نشان دهنده بد بودن مدل باشد نبود .سه - Pooling aggregatorاین روش دارای دو نوع روش pooling است اولی max pooling  و دومی mean pooling  ولی در پیپر از روش max pooling استفاده شده .https://www-cs-faculty.stanford.edu/people/jure/pubs/graphsage-nips17.pdfموضوع مکس پولینگ کمی پیچیده به نظر میرسد ولی سعی میکنم پستی درمورد این فانکشن بنویسم.نتیجه گیری :در روش های ارائه شده روش GraphSage با قدرت بسیار بیشتری در چلنج ها ظاهر شد.https://www-cs-faculty.stanford.edu/people/jure/pubs/graphsage-nips17.pdfچرا که نسخه با روشی ساده ولی زیرک توانست اطلاعات بیشتری جمع بکند و یک متغیر به نام k معرفی کرد که در واقع نشان دهنده مقدار عمقی است که ما میرویم و k باید عدد تک رقمی باشد چرا که اگر عدد 7 را انتخاب کنیم ما در هر دوره اموزش یا ترین کل اطلاعات گراف را به شبکه عصبی انتقال میدهیم و این باعث تبدیل شدن همه لایه امبدین به یک است و امبدینگ از بین میرود . پس در انتخاب k  دقت کنید .https://www-cs-faculty.stanford.edu/people/jure/pubs/graphsage-nips17.pdfروش GraphSage تا به حال جاهای بسیار زیادی مورد استفاده قرار گرفته از تشخیص تاثیر واکنش پروتویین های بدن به دارو های مختلف که توجه بسیاری از محافل علمی را به خود جلب کرد چرا که بعد از ترین کردن شبکه از شبکه سوال پرسیدند که کدام دارو ها با هم چه عوارضی با هم برای بیماران خطرناکند و توانسته بود بسیاری را درست حدث بزند چرا که همانسال بعضی از عوارض که از بیماران گذارش میشد با پیشبینی مدل مطابقت میکرد .یا موفقیت های که در شبکه های اجتماعی داشته . برای مثال شبکه پینترست ریکامندر فوق العاده خود را مدیون این نوع شبکه عصبی است . همینطور لینکدن و جدیدن شرکت  DeepMind از این محاسبات برای تحقیق بر روی ساختار مولکولی شیشه استفاده میکنن . لینکامیدوارم که این نوشته مورد استفاده شدما قرار بگیره . اگر سوالی داشتید من رو در تویتر فالو بکنید تا بتونیم بیشتر با هم صحبت کنیم .پایان.</description>
                <category>seyed hossein Tafakh</category>
                <author>seyed hossein Tafakh</author>
                <pubDate>Fri, 24 Jul 2020 18:27:19 +0430</pubDate>
            </item>
                    <item>
                <title>توضیح node2vec و DeepWalk</title>
                <link>https://virgool.io/@SeyedHosseinTafakh/%D8%AA%D9%88%D8%B6%DB%8C%D8%AD-node2vec-%D9%88-deepwalk-ki9ztn0tp9uf</link>
                <description>دیتا استراکچر های گراف در چند سال اخیر مورد توجه بسیاری از سازمان ها و صنایع مختلف شده اند .برای مثال آزمایشگاه های ژنتیک گیاهی برای تشخیص تغییر کروموزوم ها بر روی درخت نسلی زیر هر گیاه از دیتا بیس های گراف استفاده میکنن ، فیسبوک برای پیشنهاد دوستان و مطالب از نزدیکی نقطه شما به گروه های نزدیک در گراف اطلاعاتی خود استفاده میکند ، یا تویتر به وسیله گروه های جمعیتی گراف ها و مطالب نشر شده توسط آنها تصمیم به برخورد با گروه های تندرو میکند .اما مشکل بسیار بزرگ در گراف این است که گراف در فضا و ابعاد زندگی نمیکند به عبارت دیگر نمیتوان نود و ادج ( به فارسی راس و یال ) را با عدد معرفی کرد و آنها را از هم کم کرد یا اضافه کرد برای همین انجام بسیاری از محاسبات کلاسیک بر روی گراف غیر ممکن میشود و بسیاری از الگوریتم هایی که در دنیای هوش مصنوعی برای گراف ارائه میشوند روشی های هستند که بتوان هر نود یا ادج را بتوان به وسیله عدد معرفی بکنند که بتوان با آنها مانند دیتا استراکچر های عددی ( وکتور و ماتریکسی ) برخورد کرد .در این نوشته من قصد دارم دو روش آموزش بدهم که هر نود را بتواند به عددی بر روی یک فضا تبدیل بکند که بتوان بر روی آن محاسبات انجام داد و بتوانیم از دانش نهفته در گراف هم استفاده بکنیم .اول - DeepWalkاین روش که توسط دکتر steven skiena  و تیمش ارائه شد روشی است که به گراف ها نگاهی همانند متن میشد . در این روش عملیات بسیار ساده است .اول - چه تعداد پیاده روی از هر نود به عنوان مبدا انجام بشود .دوم - تعداد قدم ها را مشخص میکنید ، به عبارتی هر پیاده روی چند قدم باشد و چند نود را طی بکند .با همین روش ساده حجم زیادی از اطلاعات متوالی تولید میشود که میتوان بر روی آنها محاسبات انجام داد .در این روش پیشنهاد میشود از روش skip gram استفاده بشود که بتوان برای هر نود مقادیر عددی تعریف کرد .توجه داشته باشید که تمام ادج ها در این روش دارای مقادیری عددی نیستند و احتمال نسبت به تعداد نود های وصل شده به هر نود تغییر میکنند .مثال :به رنگ ابی و تغییرات احتمالات توجه کنید .در تصویر بالا پروسه رندوم واک دو بار انجام شده .و اطلاعات به شکل زیر تبدیل میشوند :0 -&gt; 1 -&gt; 2 -&gt; 5 -&gt; 60 -&gt; 1 -&gt; 2 -&gt; 4 -&gt; 8deep walkاین اطلاعات بعد از پروسس و ترین کردن نتیجه ای مثل تصویر بالا ایجاد میکنند اما توجه داشته باشید که تصویر بالا فقط جهت آموزش است بهتر است تعداد ابعاد انتخابی برای skip gram عدد بسیار بالاتری باشد مثل 300 و بعد از آن میتوانید با الگوریتم هایی مثل t-sne به دو بعد تبدیل کنید تا اطلاعات را تصویری ببینید.دوم - node2vecاین روش که توسط Aditya Grover و Jure Leskovec ارائه شد بهبودی بر روش قبل بود سعی شد در این روش پروسه random walk کنترل بشود.node2vecدر این الگوریتم دو پارامتر به موضوع اضافه میشوند :p , q این دو پارامتر تعین کننده رفتار الگوریتم هستند که مسیر پیاده روی در محدوده نود اولیه باشد یا به سمت نود های  بیرونی حرکت بکند و در هر قدم دورتر بشود .در تصویر بالا پیاده روی از دایره قرمز شروع شده و به سمت نود سبز حرکت کرده ( توجه : حرکت اول به صورت رندوم هست و نظمی ندارد ) بعد از رسیدن به نود سبز حال میخواهیم به نود بعدی حرکت بکنیم و اینجاست که p,q خود را نشان میدهند . اگر احتمال رفتن به هر نود 1 باشد :متغیر p ) برای ادج هایی استفاده میشود که به نود قبلی برمیگردندمتغیر q ) برای ادج هایی استفاده میشود که به نود هایی جدید میرسندبدون تغییر ) اگر نود مقصد همسایه نود قبلی باشد ( در تصویر دقت کنید که نود پایین سمت راست به دلیل همسایگی با نود قرمز بدون تغییر میماند و بر عددی تقسیم نمیشود )بعد از به دست آوردن اعداد یعنی تقسیم عدد هر ادج ( در این مثال یک در نظر گرفته شده ) بر متغیر مورد نظر خود اعداد را به وسیله فانکشن softmax نرمال میکنیم و عدد رندوم را از distribution softmax انتخاب میکنیم.و این پروسه را برای تمام نود ها و تعداد واک های مورد نظر انجام میدهیم و بعد از skip gram استفاده میکنیم .نتیجه :به وسیله این دو الگوریتم اکنون میتوانیم دیتاهای گراف را به وسیله vector نشان بدهیم و همان عملیاتی را انجام بدهیم که دوستان nlp در word embedding  انجام میدهند . همان مثال معروف king - man + woman = queenو الان که هر نود دارای نشانی عددی هست میتوان عملیات های کلاسیک یادگیری ماشین را بسیار راحت تر انجام داد . مثلا میتوان از cosine similarity بین نقاط  برای یک سیستم recommender استفاده کرد و ... .اما این الگوریتم ها مشکلات خود را دارند که شاید در یادگیری های nlp مهم نباشند اما در اینجا خود را بسیار نشان میدهند .مشکل اول اینکه بسیار از نظر محاسباتی این روش سنگین است و آماده کردن اطلاعات زمان زیادی میبرد به دست اوردن بعضی از اعداد در آماده سازی این اطلاعات هم خواهان الگوریتم های سنگین هست مثل الگوریتم average degree of separation برای تعیین کردن تعداد واک از هر نود که خود مطلب جدایی را به خود اختصاص میدهد .مشکل دوم اضافه شدن هر نود به گراف خواهان تکرار بعضی از قسمت های الگوریتم است برای مثال اگر بخواهیم گراف کاربران فیسبوک را در نظر بگیریم با هربار اضافه شدن کاربر به گراف باید کلی محاسبات رو دوباره انجام بدهیم . یا اینکه اگر ذائقه کاربر عوض بشود در لحظه امکان محاسبه برای ما امکان ندارد .پس استفاده از این روش خواهان دقت بسیار است که در چه مواردی باید استفاده بشود .امیدوارم این آموزش مورد استفاده شما قرار بگیرد و اگر هر سوالی داشتید با کمال میل جواب میدهم ( بیشتر در تویتر فعال هستم ) .پایان.</description>
                <category>seyed hossein Tafakh</category>
                <author>seyed hossein Tafakh</author>
                <pubDate>Mon, 29 Jun 2020 18:13:18 +0430</pubDate>
            </item>
            </channel>
</rss>