روزبه شریف‌نسب
روزبه شریف‌نسب
خواندن ۱۲ دقیقه·۲ سال پیش

به بهانه‌ی درس شبکه‌های پیچیده: علم شبکه به ما چه می‌گوید؟

این مطلب تلاش می‌کند تا به شما دید کلی‌ای از علم شبکه بدهد، من این درس را به عنوان یکی از درس‌های دوره‌ی ارشد مهندسی کامپیوتر زیر نظر دکتر علی‌اکبری فرا گرفتم ولی برای دوست شدن با علم شبکه شما نیاز نیست یک درس دانشگاهی را بگذرانید، این مطلب اثبات این موضوع است!

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

تعریف شبکه‌های پیچیده

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

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

علم شبکه اصلا به چه دردی می‌خورد؟

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

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

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


چه سوالاتی توسط علم شبکه جواب داده می‌شود؟

علم شبکه تحلیل‌های متفاوتی را روی شبکه‌ی ما اعمال می‌کند و هر تحلیل برای پاسخ دادن به یکسری سوال مناسب است، بیاید در ابتدا تحلیل‌های متفاوت را ببینیم و برای هر کدام هم چند مثال ببینیم.

گره‌های مهم

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

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

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

تولید یک شبکه

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

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

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


گروه‌ها

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

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

پویایی‌های روی شبکه

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

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

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


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


می‌خواهم تحلیل‌هایی با علم شبکه انجام دهم، چه کنم؟

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

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

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

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

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


جمع‌بندی

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

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


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