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

بگذریم؛ این حرف‌ها رو زیاد شنیده‌ایم. بذارید کمی درباره‌ٔ نظریه‌ٔ اطلاعات با هم حرف بزنیم.

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

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

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

با تداخل چه کنیم؟

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

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

با این کار احتمال خطا از 110 به 3100 می‌رسه. پس با فرستادن ۳ بیت به جای ۱ بیت، یعنی فرستادن اطلاعات با نرخ 13، خطا رو به 3100 رسوندیم.

روش همینگ یکی از روش‌های دیگه است. توی این روش به جای هر ۴ بیت، ۷ بیت می‌فرستیم، توی شکل زیر این ۷ بیت رو با d1 تا d4 و p1 تا p3 نشون دادیم. برای ارسال، ۴ بیت اصلی رو توی d1 تا d4 می‌ذاریم و p1 تا p3 رو طوری با ۰ یا ۱ پر می‌کنیم که جمع عدد‌های هر دایره زوج بشه. مثلا اگه داده 0110 باشه ۳ بیت دیگه چی می‌شه؟

 

 

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

این روش به ازای هر ۴ بیت اطلاعات ۷ بیت می‌فرسته. پس با نرخ 47، می‌تونه یک بیت خطا رو تحمل کنه، که اگه حساب کنیم تقریبا با احتمال7100 هنوز خطا داریم.

تا کجا؟

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

 

 

به نظر میاد هر چی بخوایم خطای کمتری داشته باشیم باید با نرخ کمتری داده بفرستیم. اما اینطور نیست. شانون ریاضی‌دان آمریکایی بود که با انتشار مقاله‌‌ای در سال ۱۹۴۸ نظریهٔ اطلاعات رو معرفی کرد و به این مسأله هم پرداخت. بر اساس چیزی که شانون نشون داده، اگه حجم داده‌ای که قراره از کانال عبور کنه خیلی بزرگ باشه، می‌شه اطلاعات رو با نرخی بزرگ‌تر از صفر، طوری فرستاد که خطا صفر باشه. به این نرخ، ظرفیت کانال گفته می‌شه. علاوه‌بر این، شانون رابطه‌ای هم برای محاسبه‌ی ظرفیت کانال معرفی کرد.

اگه بازخورد داشته باشیم چی؟

بیایید یه کانال دیگه رو بررسی کنیم. فرض کنید فرستنده باز هم دنباله‌ای از بیت‌های صفر و یک ارسال می‌کنه. اما این‌بار هر بیت با احتمال p پاک می‌شه و حرف e جایگزینش می‌شه.

 

 

حالا فرض کنید که یک مسیر بازخورد(feedback) به کانال اضافه کنیم که فرستنده بتونه از چیزی که گیرنده دریافت کرده، باخبر بشه. به نظرتون چطوری می‌تونیم از این بازخورد استفاده کنیم؟

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

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

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

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