<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های محجوبه چاوشی</title>
        <link>https://virgool.io/feed/@m.chavoshi96</link>
        <description>علاقه مند به علوم داده!</description>
        <language>fa</language>
        <pubDate>2026-04-15 10:14:13</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/27773/avatar/saGL0r.png?height=120&amp;width=120</url>
            <title>محجوبه چاوشی</title>
            <link>https://virgool.io/@m.chavoshi96</link>
        </image>

                    <item>
                <title>مروری بر یادگیری ماشین (قسمت دوم)</title>
                <link>https://virgool.io/machine-learning/%D9%85%D8%B1%D9%88%D8%B1%DB%8C-%D8%A8%D8%B1-%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D9%85%D8%A7%D8%B4%DB%8C%D9%86-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-cmiwlwasw0h9</link>
                <description>این پست تقریبا خلاصه‌ای از قسمت های اولیه‌ی فصل پنجم کتاب یادگیری عمیقه و اسم این فصل هست Machine Learning Basics. کتاب با فرمت HTML و فصل به فصل تو سایتی که لینک کردم به رایگان در دسترسه. Yoshua Bengio و Ian Goodfellow از نویسندگان این کتاب هستند. قسمت اول این خلاصه رو هم ‌می‌تونین اینجا ببینین.رگولاریزیشن (Regularization) یعنی هر گونه تغییری توی الگوریتم یادگیری که برای کاهش خطای تست انجام می‌شه. مثلا این تغییر می‌تونه تو تابع هزینه و به صورت اضافه کردن یه عبارت جدید بهش باشه، مثلا شکل 0 یه رگولازیشین L2 رو نشون می‌ده.شکل 0همونطور که گفتیم رگولازیشین فقط باعث کاهش خطای تست می‌شه و نه خطای train. حتی ممکنه استفاده ازش باعث بشه خطای train بیشتر بشه.پارامترهای مدل (وزن ها) توسط الگوریتم یادگیری به دست میان. اما هایپرپارامترها توسط الگوریتم یادگیری به دست نمیان (و خودمون تعیینشون می‌کنیم)، و این کار معمولا دو تا دلیل داره: 1) بهینه کردن اون هایپرپارامتر مشکله. 2) یادگیری اون هایپرپارامتر روی دادگان train اشتباهه و منجر به overfit می‌شه.معمولا همه‌ی هایپرپارامترهایی که روی ظرفیت مدل تاثیر دارن (مثل درجه‌ی چندجمله ای تو رگرسیون خطی) جزو دسته‌ی دوم هستند، یعنی هایپرپارامترهایی که توسط الگوریتم یادگیری یادگرفته نمی‌شن چون یادگرفتنشون روی دادگان train اشتباهه و منجر به overfit می‌شه.به طور کلی با کمک دادگان train پارامترها توسط الگوریتم یادگرفته می‌شن.با کمک دادگان validation که معمولا حدود 20% از دادگان train هستند می‌تونیم هایپرپارامترهای درست رو به دست بیاریم. یعنی می‌تونیم اول هایپرپارامترها رو تعیین کنیم. بعد روی دادگان train الگوریتم رو اجرا کنیم. بعد نتایج رو روی دادگان validation ببینیم و با توجه به نتایج هایپرپارامترهای جدیدی رو تعیین کنیم و دوباره این مراحل رو تکرار کنیم تا به هایپرپارامترهای درست برسیم. و درنهایت روی دادگان test نتیجه رو بررسی می‌کنیم.اگر کل داده‌ها اونقدر کم باشن که نتونیم سه تا مجموعه train, test, validation از توش دربیاریم می‌تونیم از cross-validation استفاده کنیم.به هر تابعی از داده می‌گیم تخمین نقطه‌ای یا آماره (point estimation/statistic). فرم کلیش توی شکل 1 هست و توی این مطلب یکم بیشتر توضیحات دادم درموردش.شکل 1مثلا یه آماره‌ای که خیلی مرسومه میانگین نمونه‌ایه که فرمولش تو شکل 2 هست.شکل 2توجه کنین که خیلی از (یا شاید حتی همه) چیزایی که تو یادگیری ماشین برای ما در مورد داده ها مهمه مثل توزیع تولید داده و پارامترهای مربوط بهش و خطای تست در واقع تابعی از داده‌ها و درنتیجه آماره ای از داده‌ها هستند.اینجا فراوانگرا ها (! همون فریکوئنتیست ها) دیدشون اینجوریه که: مقدار واقعی پارامتر θ ثابت و مشخصه اما مجهوله و θ_hat تابعی از داده‌هاست. چون نمونه‌ای که گرفتیم رندومه، هر تابعی از جمله θ_hat هم روی اون رندومه و در نتیجه θ_hat هم یه متغیر رندومه و یه بایاس و واریانسی داره.همین مفهوم تخمین نقطه‌ای رو می‌تونیم تو فضای تابعی هم تعمیمش بدیم. به این صورت که f_hat تخمینی از تابع f ئه و یه تخمین نقطه ای تو فضای توابعه.بایاس و واریانس برای یه آماره هر دو منبعی از خطا و تفاوت با مقدار واقعی هستند، واریانس که میانگین فاصله‌ی مقدار تخمینی از مقدار واقعی رو نشون می‌ده و بایاس هم توی شکل 3 مشخصه و تفاوت مقدار واقعی با مقدار مورد انتظارِ مقدار تقریبی رو نشون می‌ده.شکل 3مثلا اگه توزیع داده ها نرمال باشه، بایاس میانگین نمونه‌ای (که تو شکل 8 تعریف شده) صفره و واریانسش هم تو شکل 4 مشخصه.شکل 4می‌تونیم با کمک میانگین خطا روی دادگان تست تخمین خوبی روی خطای generalization مدل به صورت کلی بزنیم. یعنی پیش بینی کنیم که خطای روی دادگان تست دیگه چقدره حدودا. باتوجه به نظریه‌ی حد مرکزی (CLT) می‌تونیم بگیم تعداد داده‌های تست اونقدری هست که میانگین خطاشون به سمت توزیع نرمال میل کنه. و در این حالت می‌تونیم از فرمول شکل 4 برای محاسبه‌ی واریانس میانگین خطا استفاده کنیم و در نهایت یه بازه‌ی اطمینان هم برای خطای generalization ارائه بدیم.شکل 5تو شکل 5 یه بازه‌ی اطمینان 95% درصدی برای خطای generalization آورده شده. یعنی اگه چندین بار از جامعه نمونه بگیریم و دادگان تست درست کنیم و روی هر کدوم این بازه رو محاسبه کنیم، در 95% مواقع، مقدار واقعی خطای generalization توی همین بازه خواهد بود.بعضی مواقع می‌شه از همین بازه‌ی اطمینان برای مقایسه‌ی دو تا الگوریتم یادگیری A و B استفاده کرد. اینجوری که بازه رو برای هر کدوم به دست میاریم و در نهایت اون الگوریتمی که کران بالای بازه‌ی اطمینانش کوچکتر باشه، بهتره!حالا می‌رسیم به trade-off بین بایاس و واریانس. یعنی فکر کنین دو تا الگوریتم A و B داریم. الگوریتم A بایاس بیشتری داره و الگوریتم B واریانس بیشتری. و ما می‌دونیم که هم بایاس و واریانس یه منبعی از خطا هستند، حالا کدوم الگوریتم رو انتخاب کنیم؟شکل 6اینجاست که خطای مجذور مربعات یا همون MSE به کارمون میاد. همون طور که تو شکل 6 می‌بینید، MSE در واقع یه معیاریه که هم بایاس و هم واریانس رو توی خودش داره. بنابراین می‌تونیم برای مقایسه‌ی الگوریتم‌های A و B از MSE کمک بگیریم. هر چقدر MSE کمتر باشه، بهتره.شکل 7تو شکل 7 می‌تونید رابطه‌ی بین بایاس و واریانس با ظرفیت مدل رو ببینید. بایاس به طور کلی با افزایش ظرفیت مدل کمتر می‌شه، اما واریانس با افزایش ظرفیت افزایش پیدا می‌کنه و رابطه شون شبیه overfitting و underfitting با ظرفیته.یه آماره‌ی سازگار یا consistent، آماره ‌ایه که هر چقدر روی داده‌های بیشتری گرفته بشه به مقدار واقعی پارامتری که داره تخمین می‌زنه نزدیک تر بشه، یعنی بایاسش به سمت صفر بره.مثلا تو شکل 2 یکی از آماره‌های رایج که در حقیقت میانگین رو تخمین می‌زنه، دیدیم. و در شکل 8 می‌بینیم که این میانگین نمونه‌ای بایاسش صفره پس سازگاره و در کل تخمین‌گر خوبیه، و وقتی میانگین نمونه‌ایِ نمونه‌ی بزرگی رو می‌گیریم، میانگین نمونه‌ای خیلی نزدیک میانگین واقعی جامعه می‌شه.شکل 8حالا فهمیدیم که باید دنبال تخمین‌گرهای سازگار باشیم، باید از کجا بیاریمشون؟! به طور کلی دوست داریم به روش خاصی داشته باشیم که با کمک اون بتونیم برای پارامترهای هر مدلی که داریم، تخمین‌گر‌های سازگار پیدا کنیم. یکی از رایج‌ترینِ این روش‌ها Maximum Likelihood ئه.فرض می‌کنیم مجموعه‌ی X شامل m تا نمونه‌ی iid (یعنی از هم مستقل اند و توزیع یکسانی دارند) از کل جامعه باشه.و p_data توزیع واقعی تولید داده‌هاست که برای ما مجهوله و ما به دنبال پیدا کردنش هستیم.و p_model خانواده ای از توزیع هاست که هر توزیع با پارامتر θی خودش مشخص می‌شه. مثلا اگر این خانواده به فرم W.T*X باشند، پارامترشون W ئه.و p_hat_data که توزیعیه که در نهایت برای داده‌ها تخمین می‌زنیم.و در نهایت تخمین‌گر سازگار ما از فرمولی که تو شکل 9 می‌بینید به دست میاد. یعنی داره می‌گه θرو انتخاب کن که باعث بشه نمونه‌ی X ما در اون توزیعی که به دست میاد بیشترین احتمال رو داشته باشن. شکل 9توی فرمول شکل 9 یه ضرب می‌بینید که تو محاسبات (مثل مشتق گرفتن) خیلی سخت میشه کار کردن باهاش. از اون جایی که لگاریتم مقدار argmax رو تغییر نمیده (یعنی اون θای که ماکسیمم می‌کنه این عبارت تغییر نمی‌کنه اما طبیعتا مقدار این عبارت تو ماکسیممش تغییر می‌کنه) یه لگاریتم می‌گیریم از کل فرمول تا ضرب ها تبدیل به جمع بشن و کار باهاشون راحت تر بشه، این فرمول رو می‌تونین تو شکل 10 ببینین.شکل 10روش Maximum Likelihood با داشتن دو شرط تضمین می‌کنه که θای که به شما برمی‌گردونه سازگاره: 1) توزیع واقعی داده‌ها p_data باید تو خانواده‌ی توزیع p_model باشه. 2) توزیع واقعی داده‌ها دقیقا متناظر یه θ باشه. اگه دو تا θ ی متناظر داشته باشه، روش Maximum Likelihood می‌تونه p_dataی درست رو پیدا کنه اما نمی‌تونه تشخیص بده θی متناظر کدومه.</description>
                <category>محجوبه چاوشی</category>
                <author>محجوبه چاوشی</author>
                <pubDate>Tue, 05 May 2020 16:56:57 +0430</pubDate>
            </item>
                    <item>
                <title>مروری بر یادگیری ماشین (قسمت اول)</title>
                <link>https://virgool.io/machine-learning/%D9%85%D8%B1%D9%88%D8%B1%DB%8C-%D8%A8%D8%B1-%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D9%85%D8%A7%D8%B4%DB%8C%D9%86-ngogrzztxhn0</link>
                <description>این پست تقریبا خلاصه‌ای از قسمت های اولیه‌ی فصل پنجم کتاب یادگیری عمیقه و اسم این فصل هست Machine Learning Basics. کتاب با فرمت HTML و فصل به فصل تو سایتی که لینک کردم به رایگان در دسترسه. Yoshua Bengio و Ian Goodfellow از نویسندگان این کتاب هستند.قسمت دوم این خلاصه رو می‌تونین اینجا ببینین.هدف نهاییِ یه الگوریتم یادگیری ماشین داشتن پرفورمنس خوب روی دادگان تسته و نه دادگان train. مثلا اگر معیارمون رو MSE در نظر بگیریم، هدف نهاییمون رو می‌تونیم کمینه کردن MSE روی دادگان تست در نظر بگیریم.MSE testاز اونجایی که وقتی تو مرحله‌ی train هستیم به دادگان تست دسترسی نداریم، ساده‌ترین راهی که ممکنه پیش رومون باشه اینه که MSE رو روی دادگانی که داریم، یعنی دادگان train کمینه کنیم و به دنبال وزن‌ها (W)یی باشیم که به ازای اون‌ها MSE روی دادگان train کمینه می‌شه.تا این جا فقط با یه مسئله‌ی بهینه سازی روبه‌رو هستیم. اما پس یادگیری ماشین کجای کاره؟! چیزی که بهینه سازی رو از یادگیری ماشین متمایز می‌کنه اینه که ما نمی‌خوایم فقط روی کمینه کردن MSE روی دادگان train بسنده کنیم و می‌خوایم الگوریتممون روی دادگان تست، یعنی داده‌هایی که تا حالا ندیدیم هم خوب کار کنه، یعنی generalization خوبی داشته باشه.چطور می‌تونیم با یادگیری رو دادگان train توقع داشته باشیم رو یه سری داده‌ی دیگه هم که تا حالا ندیدیم دقت خوبی داشته باشیم؟ اینجاست که آمار میاد به کمکمون! یادتون باشه که ما فرض کردیم هر نمونه‌ای که از کل جامعه‌ی آماری برداشتیم (که دادگان train و دادگان تست هم دو نمونه از کل جامعه هستند) iid هستند. یعنی مستقل از هم هستند و از یک توزیع احتمالاتی یکسان اومدن. بنابراین اگه تلاش کنیم از روی دادگان train اون توزیع احتمالاتی یکسان رو یاد بگیریم، احتمالا رو نمونه‌های دیگه از اون توزیع مثل دادگان تست هم دقت خوبی خواهیم داشت.ظرفیت مدل باید با کاری که ازش توقع داریم انجام بده (مثل پیش بینی کردن قیمت خونه یا تشخیص صورت تو یه عکس) متناسب باشه. مثلا تو رگرسیون خطی می‌تونیم ظرفیت مدل رو با درجه‌ی چندجمله ای که استفاده می‌کنیم نشون بدیم. هر چقدر درجه بالاتر، مدل پیچیده تر. اگر ظرفیت مدل کمتر از مقدار موردنیاز task باشه، قدرت کافی برای حل مسئله رو نخواهیم داشت و نمی‌تونیم مسئله رو حل کنیم و اگه ظرفیت مدل بیشتر از حد لازم باشه با overfitting مواجه می‌شیم.نظریه‌ی یادگیری آماری (statistical learning theory) میگه اگه کران بالای تفاضل بین خطای train و خطای تست رو مثلا UB در نظر بگیریم، با بالاتر رفتن ظرفیت مدل، UB افزایش پیدا می‌کنه و با بیشتر شدن دادگان train این کران کاهش پیدا می‌کنه. (و ما دنبال این هستیم که تفاضل بین خطای train و خطای تست کمتر شه و در نتیجه این کران کاهش پیدا کنه)تخمین زدن ظرفیت شبکه‌های عصبی برخلاف رگرسیون خطی کار ساده ای نیست و عوامل زیادی روش تاثیر دارن.شکل 1به طور کلی همونطور که تو شکل 1 می‌بینیم با افزایش ظرفیت مدل، خطای train همواره کاهش پیدا می‌کنه. اما خطای test یا همون خطای generalization بعد از یه مقدار ظرفیت خاص شروع می‌کنه به افزایش پیدا کردن. این همونجاییه که مدل شروع می‌کنه به overfit کردن و قابلیت generalization اش کم می‌شه (و ما دوست داریم این sweet spot رو پیدا کنیم)مدل‌های پارامتری مدل‌هایی هستند که به طور کلی با یه بردار پارامتر با طول ثابت (و متناهی) تعریف می‌شن و وقتی دادگان train رو می‌بینیم، سعی می‌کنیم این پارامترها رو طوری تغییر بدیم که مدل fit بشه روی دادگان یعنی اندازه‌ی این بردار پارامتر (تعداد پارامترها) تغییری نمی‌کنه اما مقدارشون تغییر می‌کنه، مثل رگرسیون خطی. مثلا اگه ورودی برداری با یک عنصر باشه، فرمول رگرسیون از قبل مشخصه و همونطور که تو شکل 2 می‌بینیم بردار پارامترمون همون w و b ئه که دو عضو داره. وقتی هم دادگان رو ببینیم تعداد پارامترها همین دوتا هستند و تغییری نمی‌کنند.شکل 2-مدل‌های غیرپارامتری این محدودیت مدل‌های پارامتری رو ندارند که مجبور باشن قبل از دیدن دادگان تعداد پارامترهای ثابتی داشته باشند. همین باعث می‌شه که ظرفیتشون خیلی بیشتر از مدل‌های پارامتری باشه. مثال این مدل ها k-nearest-neighbor ئه. قبل از دیدن دادگان این مدل پارامتر خاصی نداره و هر وقت هم بخوایم با این مدل پیش بینی کنیم به همه‌ی دادگان train احتیاج داریم.البته می‌تونیم با پیچیدن (!) یه الگوریتم پارامتری تو یه الگوریتم دیگه که تعداد پارامترها رو در موقع نیاز تغییر می‌ده، یک الگوریتم غیرپارامتری بسازیم. مثلا اگه بخوایم رگرسیون خطی رو غیرپارامتری کنیم می‌تونیم یه حلقه‌ی خارجی داشته باشیم که درجه‌ی چند جمله ای رو با توجه به داده‌ای که می‌بینه تغییر بده.به طور کلی حالت ایده‌آل برای الگوریتم‌های یادگیری، یه دانای کل یا oracle ئه که توزیع واقعی تولید داده رو بدونه. اما در این حالت هم ممکنه دقتمون 100% نباشه و مقداری خطا داشته باشیم، به این خطا می‌گن Bayes Error و ممکنه ناشی از دو چیز باشه: 1) ممکنه رابطه‌ی بین X و y که سعی داریم مدلش کنیم ذاتا و حقیقتا تصادفی باشه. 2) ممکنه ویژگی یا فیچری تو y موثر باشه که تو X نیومده باشه اصلا. یعنی confounding variable داشته باشیم.به طور کلی هر چقدر تعداد نمونه‌های train بیشتر باشه، قدرت generalization مدل بیشتر می‌شه و در نتیجه خطای test کمتر می‌شه.در مدل‌های غیرپارامتری داده‌ی train بیشتر همواره خطای تست رو پایین میاره تا جایی که به کمترین خطای ممکن یعنی خطای Bayes برسیم.اما اگر یه مدل پارامتری با ظرفیتی کمتر از ظرفیت بهینه (تو شکل 1 مشخصه) داشته باشیم، هر چقدر دادگان train رو بیشتر کنیم، خطاش به سمت خطایی که بیشتر از خطای Bayes ئه میل می‌کنه.</description>
                <category>محجوبه چاوشی</category>
                <author>محجوبه چاوشی</author>
                <pubDate>Wed, 29 Apr 2020 18:37:21 +0430</pubDate>
            </item>
                    <item>
                <title>مدل آماری و تخمین‌گر آماری</title>
                <link>https://virgool.io/@m.chavoshi96/%D9%85%D8%AF%D9%84-%D8%A2%D9%85%D8%A7%D8%B1%DB%8C-%D9%88-%D8%AA%D8%AE%D9%85%DB%8C%D9%86%DA%AF%D8%B1-%D8%A2%D9%85%D8%A7%D8%B1%DB%8C-v6usi7w4bbf0</link>
                <description>تعریف رسمی مدل‌سازی آماریفرض کنیم یک آزمایش آماری انجام دادیم و مشاهدات ما مجموعه‌ای از n متغیر تصادفی i.i.d هستند. یعنی X1, X2,...,Xn از هم مستقل هستند و همه از توزیع احتمال یکسانی آمده‌اند. این مقادیر در فضای E (که معمولا E⊆R) هستند و توزیع آن‌ها P است. یک مدل آماری از این آزمایش را با دوتایی شکل 1 نشان می‌دهیم.شکل 1در این شکل P نشان دهنده‌ی خانواده‌ای از توزیع‌های احتمال مثل برنولی، نرمال، پوآسون و ... است و θ پارامتر توزیع را مشخص می‌کند که می‌تواند یک یا چند بعدی باشد. Θ هم فضای پارامتری است که پارامترهای از آن می‌آیند.مدل‌سازی برنولیشکل 2 - مدل سازی آزمایش برنولیهمانطور که می‌دانیم متغیرهای برنولی یا صفر هستند و یا یک بنابراین فضای نمونه برابر {0،1} است. همچنین    پارامتر توزیع برنولی معمولا با p نشان داده می‌شود و احتمال موفقیت را نمایش می‌دهد. از آنجایی که p یک احتمال است، پس فضای پارامتر هم بین صفر و یک است.مدل‌سازی پوآسونشکل 3 - مدل سازی آزمایش پوآسونمدل‌سازی نرمالشکل 4 - مدل سازی آزمایش نرمالهمانطور که می‎بینید در این مدل‌سازی پارامتر θ دو بعدی و به صورت دوتایی (μ,σ2) است.آماره یا Statisticهر تابع قابل اندازه‌گیری از داده‌ها یک آماره است. مثلا توابع زیر همگی آماره هستند.شکل 5تخمین‌گرِ (Estimator) پارامتر θهر آماره یعنی در حقیقت هر تابعی از داده‌ها که وابسته به θ نیست، یعنی برای محاسبه‌ی آن به مقدار واقعی θ احتیاجی نداریم را تخمین‌گری برای پارامتر θ می‌نامیم. برای اینکه بفهمیم تخمین‌گری به خوبی θ را تخمین می‌زند یا نه لازم است ویژگی‌های خاصی را بررسی کنیم مانند سازگاری و انحراف.سازگاری (Consistency) یک تخمین‌گرمی‌گوییم تخمین‌گر θ^ برای θ سازگار است اگر و تنها اگر هر چه تعداد نمونه‌ها بیشتر شود، θ^ به مقدار واقعی پارامتر یعنی θ نزدیک شود.انحراف (Bias) یک تخمین‌گرشکل 6 - بایاسصفر بودن انحراف به این معناست که اگر روی جامعه m بار n نمونه بگیریم و θ^ را هر دفعه حساب کنیم، m تا θ^ خواهیم داشت. اگر امید ریاضی θ^ را حساب کنیم برابر همان پارامتری که به دنبال آن هستیم یعنی θ خواهد بود.خطای میانگین مربعات (MSE) یک تخمین‌گرشکل 7 - mseاین مقدار ریسک دوجمله‌ای یا ریسک l2 هم نامیده می‌شود. به طور کلی نشان دهنده‌ی میانگین مربع تفاضل مقدار تخمین زده شده با مقدار واقعی پارامتر است. هر چه این مقدار به صفر نزدیک تر باشد نشان دهنده‌ی بهتربودن تخمین‌گر است.شکل 7یادآوری می‌کنم که:بنابراین در صورتیکه بدانیم تخمین‌گر بدون انحراف است، خطای میانگین مربعات برای تخمین‌گر برابر واریانس آن تخمین‌گر است.</description>
                <category>محجوبه چاوشی</category>
                <author>محجوبه چاوشی</author>
                <pubDate>Fri, 03 Apr 2020 22:17:35 +0430</pubDate>
            </item>
                    <item>
                <title>آمار vs. احتمال</title>
                <link>https://virgool.io/dataio/%D8%A2%D9%85%D8%A7%D8%B1-vs-%D8%A7%D8%AD%D8%AA%D9%85%D8%A7%D9%84-l9lirvfwpkxi</link>
                <description>این شکل رابطه ی بین آمار و احتمال رو به خوبی نشون میده. احتمالاحتمال از روی حقیقت به دست اومده و با کمک اون (بدون داشتن حقیقت) می‌تونیم مشاهدات رو پیش بینی کنیم. مثلا اگر بدونیم دارویی واقعا روی 80 درصد بیمارها جواب می‌ده، اگر دارو رو روی 100 بیمار امتحان کنیم می‌تونیم حدس بزنیم که به طور میانگین 80 بیمار بهبود یافته مشاهده خواهند شد.آمارآمار دقیقا مسیر برعکس احتمال رو طی می‌کنه. وقتی فقط مشاهدات رو داشته باشیم و بخوایم از روی اون‌ها به حقیقت برسیم، از آمار استفاده می‌کنیم. مثلا دارویی رو روی 100 نفر آزمایش می‌کنیم و مشاهده می‌کنیم که 70 نفر بهبود پیدا کردن، می‌تونیم نتیجه بگیریم که در حقیقت به طور میانگین روی هر نمونه‌ای این دارو حدود 70 درصد موثره.منبعکورس کاربرد آمار - دانشگاه MIT</description>
                <category>محجوبه چاوشی</category>
                <author>محجوبه چاوشی</author>
                <pubDate>Fri, 27 Mar 2020 20:03:57 +0430</pubDate>
            </item>
                    <item>
                <title>چرا برای آزاد بودن باید 99% مردم جهان را از بین ببریم؟</title>
                <link>https://virgool.io/@m.chavoshi96/%DA%86%D8%B1%D8%A7-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A2%D8%B2%D8%A7%D8%AF-%D8%A8%D9%88%D8%AF%D9%86-%D8%A8%D8%A7%DB%8C%D8%AF-99-%D9%85%D8%B1%D8%AF%D9%85-%D8%AC%D9%87%D8%A7%D9%86-%D8%B1%D8%A7-%D8%A7%D8%B2-%D8%A8%DB%8C%D9%86-%D8%A8%D8%A8%D8%B1%DB%8C%D9%85-bkpgdwk4y6zt</link>
                <description>  آزادی مفهوم پیچیده ای برای ما آدم هاست، چیزی که همه می خوانش و البته انگار یه جورایی مثل نگاه کردن به آسمون می مونه، تا چشم کار می کنه هست (در این مورد در حقیقت فقط توی حرفا هست)، اما هیچ وقت نمی دونی تهش کجاست! تصمیم گرفتم یه مورد خاص از آزادی رو در نظر بگیرم و خیلی علمی بفهمم تهش کجاست!لازمه در ابتدا شما رو با سینا آشنا کنم. سینا یه جوون 25 ساله اس، سینا می خواد بدونه در یک مورد خاص تا چقدر می تونه آزادانه عمل کنه، سینا دلش می خواد این آزادی رو داشته باشه که بتونه از جایی که ایستاده تا جایی که چشمش کار می کنه هیچی بنی بشری نباشه! این رو هم بگم که سینا یه آدم معمولی نیست! سینا می تونه اونور دیوارا رو ببینه (احتمالا یه مسافر جدید از کریپتونه!) بنابراین برای اینکه خواسته اش محقق بشه، لازمه واقعا تا جایی که چشم انسان قادره (متاسفانه چشم سینا مثل انسان های معمولی می مونه و ظاهرا ژن های کریپتونیش تو این بخش اون طور که باید عمل نکردن) کسی دور و برش نباشه. یه موضوع دیگه هم اینه که سینا از اون جایی که از هر گونه روحیه ی خودخواهی مبراست (باز هم ژن های کریپتونی) این قدرت آزادی رو فقط برای خودش نمی خواد، بلکه برای همه ی مردم می خواد.طبق تحقیقاتی که سینا انجام داده (که فقط شامل گوگل کردنه) یه جسم تا شعاع 3 کیلومتری برای انسان قابل تشخیصه و بعد از اون دیگه قابل تشخیص نیست. بنابراین هر انسان آزاد به یه دایره به شعاع 3 کیلومتر که خودش وسطش وایساده احتیاج داره، مساحت این دایره می شه تقریبا 28 کیلومتر مربع. سطح کل کره ی زمین 510 میلیون کیلومتر مربعه. در نتیجه فقط هجده میلیون و خورده ای از این دایره ها تو کره ی زمین جا می شن! یعنی فقط هجده میلیون و خورده ای آدم می تونن تو این زمینه آزادی داشته باشن و با توجه به اینکه جمعیت کل کره ی زمین در حال حاضر 7.63 میلیارده، برای اینکه همه ی انسان ها بتونن در این زمینه آزادی داشته باشن، لازمه سینا فک و فامیلای کریپتونیشو صدا بزنه و یه جا حدود هفت میلیارد و ششصد میلیون نفر، یعنی حدود 99 درصد مردم رو سر به نیست کنه.بنابراین یا ما آدما تو این زمینه آزاد نیستیم و یا ناچاریم یه جوری از دست اون 99% دیگه خلاص شیم! حقیقت اینه که دنیا و منابعش محدودن، بنابراین آزادی جمعی تا حد اعلا منطقا نمی تونه وجود داشته باشه. پس ما باید برای آزادیمون حد، چارچوب و قوانینی داشته باشیم که آزادی دیگران رو سلب نکنیم!ممکن این مفاهیم خیلی خیلی بدیهی به نظر برسه، اما تا به حال بودن آدمایی که وقتی باهاشون حرف می زنی ظاهرا از این حقیقت بی خبرند و نمی تونن قبول کنن که آزادی باید حد داشته باشه.  (3 km)^2 * 3.14 = 28.27 km2Whole earth area = 5.1 x 10^8 km2(5.1 * 10^8) / 28.27= 18040325.4333Current world population 7.63 billion7.63 billion - 18040325.4333 = 7611959674.57</description>
                <category>محجوبه چاوشی</category>
                <author>محجوبه چاوشی</author>
                <pubDate>Wed, 16 Jan 2019 23:07:59 +0330</pubDate>
            </item>
                    <item>
                <title>Fabric: پروژه ی اصلی هایپرلجر</title>
                <link>https://virgool.io/@m.chavoshi96/fabric-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%DB%8C-%D8%A7%D8%B5%D9%84%DB%8C-%D9%87%D8%A7%DB%8C%D9%BE%D8%B1%D9%84%D8%AC%D8%B1-w4wy666agcrf</link>
                <description>  اولین پروژه ی هایپرلجر، Fabric یک پلتفرم بلاکچین اجازه ای (permissioned) است. از این جهت که لجری از رویدادهای دیجیتال را نگهداری می کند مانند بلاکچین های دیگر است. این رویدادها در قالب مجموعه ای از تراکنش ها ساختاردهی شده و بین شرکت کننده ها به اشتراک گذاشته می شود. تراکنش ها بدون ارز-رمز اجرا می شوند.همه ی تراکنش ها امن، خصوصی و محرمانه هستند. Fabric تنها می تواند با توافق شرکت کنندگان به روزرسانی شود. زمانی که رکوردی وارد این بلاکچین می شود، دیگر قابل تغییر نیست.پروژه Fabric یک راه حل تجاری است که از خصوصیات ویژه ی آن، مقیاس پذیری و منعطف بودن است، به طوری که همواره می تواند با قوانین خاص هر صنعت موافق باشد. همه ی شرکت کنندگان باید با مدرکی هویت خود را برای سرویس عضویت اثبات کنند تا بتوانند به سیستم دسترسی پیدا کنند. Fabric تراکنش ها را همراه با گواهینامه هایی که از هویت افراد مشتق شده اما قابلیت اتصال به افراد شرکت کننده را ندارد، صادر می کند. بنابراین ناشناس بودن از ویژگی های این شبکه است. همچنین محتوای هر تراکنش رمزنگاری شده تا فقط شرکت کنندگانی که باید، محتوای تراکنش را ببینند.پروژه Fabric معماری ماژولار دارد. می توان با پیاده سازی ویژگی های پروتکل مربوطه، هر مولفه را کم یا زیاد کرد. همچنین این تکنولوژی از بیشتر زبان های برنامه نویسی رایج برای توسعه ی قراردادهای هوشمند (smart contracts) پشتیبانی می کند.بر خلاف Fabric، بیت کوین این امکان را دارد که هر کسی به صورت ناشناس در شبکه همکاری کند و جامعه ی کاربران بیت کوین همواره به دنبال راه هایی است که در برابر سانسور مقاومت کند و کسانی که از حقوق و امکانات خاصی محروم شده اند، بتوانند از آن امکانات استفاده کنند. همچنین بیت کوین عموما برای انتقال و امنیت توکن ارز-رمز خود ایجاد شده است؛ به همین دلیل، مقایسه ی بیت کوین با Fabric ممکن است عادلانه و منطقی نباشد.ساخت سیستم در Fabricتلاش های زیادی صورت گرفته تا Fabric در دسترس باشد؛ یعنی همه ی توسعه دهندگان بتوانند از آن استفاده کنند، اما متاسفانه هنوز فقط افراد فنی با مهارت بالا قابلیت کار با این سیستم را دارند.هایپربجر چندین مورد استفاده که ممکن است در صنایع زیادی به کار آید را با جزئیات و راهنمایی های زیادی دردسترس قرار داده است تا شروع کار با Fabric آسان تر باشد. در آینده ای نه چندان دور، استفاده از این موارد با رابط های کاربری بصری ممکن خواهد بود.توسعه ی chaincodeقرارداد های موجود بین افراد می تواند در Hyperledger Fabric با کمک chaincode پیاده سازی شود. Chaincode نسخه ی Hyperledger برای smart contract در Ethereum است. این تکنولوژی توافقی که در قرارداد است را به صورتی خودکار می کند که هر دو طرف قرار داد می توانند به آن اعتماد کنند.زبان Chaincode یک زبان تورینگ-کامل است به این معنی که هر الگوریتمی که با ماشین تورینگ می توان اجرا کرد را می توان با این زبان هم نوشت. در حال حاضر، می توان با کمک یک توسعه دهنده ی جاوا یک قرارداد chaincode ایجاد کرد. تیم Fabric چند مورد کاربردی رایج مثل ارز دیجیتال و ارسال پیام متنی را به عنوان قسمتی از هسته ی فریم ورک تهیه کرده است.قراردادهای تجاریهایپرلجر روش هایی را به وجود آورده که با کمک آن می تواند هم قراردادهای عمومی و قراردادهای خصوصی را پشتیبانی کند. قراردادهای خصوصی بین دو یا چند شرکت کننده است و دارای اطلاعات محرمانه ای می باشد. قراردادهای عمومی توسط هر کسی که در Hyperledger به دنبال آن ها بگردد، قابل مشاهده است. برای مثال، ممکن است شما از یک قرارداد عمومی برای یک پیشنهاد عمومی برای فروش یک محصول و یا درخواست خرید یک محصول در یک مزایده استفاده کنید.ساختار این قراردادها از قراردادهای سنتی خیلی پیچیده تر است؛ چراکه موجودیت داور و شخص ثالثی که بر قرارداد نظارت داشته باشد در این قراردادها حذف شده است. علاوه بر آن، احراز هویت افراد شرکت کننده در قرارداد لازم است. همچنین، بیشتر قراردادها یکتا و منحصر به فرد هستند و نمی توان در موارد دیگر از آن ها استفاده کرد. هر چقدر یک قرارداد پیچیده تر باشد، در موارد بیشتری می تواند از هدف اصلی خود منحرف شود. Hyperledger در حال کار بر روی ساخت یک سیستم مدیریت قرارداد برای کمک به بهبود مقیاس پذیری در chaincode است.ساخت زنجیره تامینمدیریت زنجیره تامین یکی از زمینه های جذاب بلاکچین است که در پروژه ی Fabric به آن پرداخته شده است. سرهم کنندگان نهایی می توانند تمام اجزا و وسایلی که در ساخت محصولشان استفاده می کنند را مدیریت کنند. این ویژگی موجب می شود تا شما نسبت به تقاضای بازار پاسخگو باشید و سازنده ی اصلی هر قطعه را دنبال کرده و پیدا کنید. برای مرجوع کردن یک محصول، به سادگی می توان قسمت خطاکار را پیدا کرد و اصل بودن هر محصول را می توان بررسی کرد.پروژه ی Fabric به توسعه ی بیشتری برای کارآمد شدن در این زمینه احتیاج دارد چراکه لازم است برای هر کسی در زنجیره ی تامین، قابل دسترسی باشد. تیم Fabric در حال کار بر روی پروتکلی استاندارد است تا همه ی افراد حاضر در شبکه ی زنجیره تامین بتوانند اطلاعات خود را وارد شبکه کرده و قطعات شماره گذاری شده ی یک محصول خاص را دنبال کنند.وقتی این قسمت از پروژه به اتمام برسد، می توان بر روی تولید هر محصول در هر زمان جست و جوی عمیق انجام داد. این جست و جو ممکن است ده یا بیشتر لایه در تولید هر محصول عمق داشته باشد. مصرف کنندگان هم می توانند منبع و منشا هر محصولی که از قطعات مختلف ساخته شده است را شناسایی کنند. این جنبه می تواند تاثیر اجتماعی به سزایی در مصرف داشته باشد.امانات و دارایی هاامانات و دیگر دارایی ها برای بلاکچین بسیار مناسب هستند چراکه می توانند خیلی از کارکردها را که اشخاص ثالث انجام می دهند را خودکار انجام دهند. Fabric به همه ی شرکا در یک دارایی امکان دسترسی مستقیم به آن دارایی و تاریخچه ی وضعیت های آن را می دهد و از این طریق نیاز به اشخاص ثالث که در حال حاضر این اطلاعات را نگه می دارند، را حذف می کند. Fabric همچنین زمان توافق بر روی دارایی ها را کم کرده و به لحظه نزدیک تر می کند.ارتباطات مستقیمدر آینده، Fabric می تواند به عنوان مکانی که شرکت ها می توانند در آن اعلانات و پیشنهادات خود را اعلام کنند، باشد. برای مثال، اگر شرکتی بخواهد سرمایه ای جمع کند و نیاز دارد تا همه ی شرکا در جریان تمام جزئیات به صورت لحظه ای باشند، می تواند از این ویژگی استفاده کند. مانند سازمان های خودمختار توزیع شده در Ethereum، شرکا می توانند تصمیم گرفته و آن را اجرا کنند. تصمیم آن ها پردازش شده و در لحظه بر آن توافق می شود. این امر جلسات شرکا و رای گیری بین آن ها را بسیار ساده تر و سریع تر می کند.قابلیت همکاری بین دارایی هادر آینده، ممکن است Fabric بعضی از کارکردهای شبکه ی Ripple را هم داشته باشد. تیم Fabric مواردی را متصور شده است که شرکت ها می توانند دارایی های خود را در بازارهای دیر تسویه پذیر مبادله کنند. به جای کنار آمدن با محدودیت های بازار بر روی تجارت مستقیم بین دو طرف، یک شبکه ی زنجیره ای خریداران و فروشندگان را به هم متصل کرده و بهترین ترکیب را در چند کلاس مختلف دارایی پیدا می کند. منبع:Blockchain for dummies</description>
                <category>محجوبه چاوشی</category>
                <author>محجوبه چاوشی</author>
                <pubDate>Sat, 12 Jan 2019 20:03:35 +0330</pubDate>
            </item>
                    <item>
                <title>Hyperledger: راهی برای ورود به دنیای بلاکچین</title>
                <link>https://virgool.io/@m.chavoshi96/hyperledger-%D8%B1%D8%A7%D9%87%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D8%A8%D9%84%D8%A7%DA%A9%DA%86%DB%8C%D9%86-zzgwcdud2uut</link>
                <description>  هایپرلجر جامعه ای است از توسعه دهندگان و مشتاقان به فناوری که در پی ایجاد استانداردهای صنعتی برای فریم ورک ها و پلتفرم های بلاکچین هستند. کار این گروه از افراد حائز اهمیت است چرا که آن ها گروه اصلی هدایت صنعت بلاکچین  به سوی مسیر اصلی و انطباق با اهداف تبلیغاتی و تجاری هستند. در حقیقت Hyperledger پلتفرم قابل اطمینانی برای توسعه ی بلاکچین در گروه های شرکتی و تجاری است.این سازمان و پروژه های منحصر به فرد آن روز به روز رشد می کنند. در زمان نوشته شدن این متن، این سازمان دارای بیش از 100 سازمان عضو و چندین پروژه در مرحله ی نهفتگی (incubation) است. از اولین پروژه های این سازمان می توان به Explorer که یک اپلیکیشن وب برای نمایش و اجرای کوئری بر روی بلاک هاست و Fabric که یک سازنده ی اپلیکیشن بلاکچین پلاگ-اند-پلی(نرم افزاری که برای استفاده نیازی به انجام تنظمیات متعدد ندارد و پس از نصب می توان از آن استفاده کرد) است را می توان نام برد. این سازمان همچنین پروژه های دیگری تحت عنوان های Iroha و Sawtooth هم دارد که هر دو از پلتفورم های ماژولار توسعه ی بلاکچین هستند.شناخت هایپرلجر: رویایی برای آینده ای درخشاندر انتهای سال 2015، شرکت Linux Foundation پروژه ی هایپرلجر را به منظور توسعه ی فریم ورکی در سطح تجاری، متن باز و توزیع شده برای لجرها، ایجاد کرد. این گروه امیدوار بودند که بتوانند جامعه ی بلاکچین را به سمت ساخت اپلیکیشن ها، پلتفرم ها و سخت افزارهایی قدرتمند و منحصر به فرد برای هر صنعت که بتواند نیازهای آن صنعت موردنظر را برآورده کند، ببرند.سازمان Linux Foundation متوجه شد که گروه های مختلف زیادی، بدون آن که جهت منسجمی داشته باشند در حال فعالیت در زمینه ی بلاکچین هستند. در صنعت دوباره کاری های بسیاری انجام می شد و قبیله گرایی تیم ها را به سمت دوباره حل کردن مسائلی که قبل از آن حل شده بودند، می برد. این سازمان بر اساس تجربه ای که داشت، دریافت که به منظور اینکه تکنولوژی بلاکچین به حد اعلای خودش برسد، به یک راهبرد متن باز و مشارکتی برای توسعه، به شدت احتیاج است.پروژه ی Hyperledger با مدیریت اجرایی Brian Behlendorf اداره می شود که دارای چندین دهه تجربه در Linux Foundation اصلی و Apache Foundation است و همچنین مدیرفنی ارشد انجمن جهانی اقتصاد بوده است. درنتیجه تعجب آور نیست که Hyperledger با استقبال زیادی رو به رو شده است. بسیاری از شرکت های برتر و رهبران صنایع مختلف به این پروژه پیوسته اند؛ از جمله ی این شرکت ها می تواند به Accenture، Cisco، Fujitso Limited، IBM، Intel، J.P.Morgan و Wells Fargo اشاره کرد. این پروژه سازمان های برتر زیادی در زمینه ی بلاکچین را هم به خود جذب کرده است.سازمان R3، کنسرسیومی که صنعت بانکداری را پشتیبانی می کند، فریم ورک ساختاری تراکنش مالی خود را به این سازمان اهدا کرده است. Digital Asset، شرکت نرم افزاری، اعتبار و مقداری از کدهای در سطح تجاری خود را به Hyperledger ارائه کرد. Factom Foundation هم کدهای در سطح تجاری و توسعه دهندگان بسیاری را در اختیار این سازمان قرار داده است. IBM و سازمان های بسیاری دیگری هم کد و منابع دیگری را به این پروژه اهدا می کنند.کمیته رهبری فنی Hyperledger از کیفیت، قدرت و قابلیت همکاری بین تکنولوژی های مختلف تحت این سازمان، اطمینان حاصل پیدا می کند. هدف آن است که این مشارکت از صنایع مختلف و متن باز، باعث پیشرفت تکنولوژی بلاکچین و به دست آوردن میلیاردها دلار با تقسیم هزینه های تحقیق و توسعه بین سازمان های بسیار است.هایپرلجر در حال شناسایی و توجه به ویژگی ها و نیازمندی های مهمی است که در حال حاضر در اکوسیستم بلاکچین موجود نیستند. همچنین این سازمان در حال پرورش استاندارد باز و چند-صنعته برای لجرهای توزیع شده و ایجاد فضایی برای اینکه توسعه دهندگان بتوانند به ساخت سیستم های بلاکچین بهتر، کمک کنند، است.هایپرلجر برای پروژه های خود، دوره ی زندگی ای شبیه Linux Foundation دارد. ابتدا درخواست ارسال می شود و سپس درخواست های پذیرفته شده به مرحله ی نهفتگی راه پیدا می کنند.وقتی پروژه ای به حالت پایداری برسد، از مرحله آموزشی خارج می شود و به حالت فعال می رود. در حال حاضر، همه ی پروژه های Hyperledger در مرحله ی درخواست یا نفتگی قرار دارند. هر کدام از این پروژه ها توسط یک سازمان بزرگ یا استارتاپ اجرا می شود. برای مثال، Fabric توسط IBM، Sawtooth توسط Intel و Iroha توسط استارتاپ Soramitsu مدیریت می شود.هایپرلجر مانند بسیاری از پروژه های متن باز، از گیت هاب و Slack برای برقراری ارتباط و هماهنگ سازی بین تیم هایی که روی هر پروژه کار می کنند، استفاده می کند. همچنین این سایت ها مکان مناسبی برای به دست آوردن آخرین به روزرسانی ها و با خبر شدن از پیشرفت پروژه های مربوطه است.منبع:Blockchain for Dummies    </description>
                <category>محجوبه چاوشی</category>
                <author>محجوبه چاوشی</author>
                <pubDate>Sat, 12 Jan 2019 19:53:46 +0330</pubDate>
            </item>
                    <item>
                <title>Dynamo: دیتابیس همواره دردسترس توزیع شده ی آمازون</title>
                <link>https://virgool.io/@m.chavoshi96/dynamo-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D9%87%D9%85%D9%88%D8%A7%D8%B1%D9%87-%D8%AF%D8%B1%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3-%D8%AA%D9%88%D8%B2%DB%8C%D8%B9-%D8%B4%D8%AF%D9%87-%DB%8C-%D8%A2%D9%85%D8%A7%D8%B2%D9%88%D9%86-yvkn9lpmyye0</link>
                <description> مقدمه:آمازون یک پلتفرم تجارت الکترونیک جهانی است که در زمان های اوج به ده ها میلیون کاربر با کمک ده ها هزار سرور در دیتاسنتر هایی در سرتاسر دنیا خدمت رسانی می کند. این پلتفرم همواره در حال توسعه و رشد است بنابراین نیاز است تا همواره مقیاس پذیر باشد. همچنین این پلتفرم نیازمندی های عملیاتی سخت گیرانه ی زیادی بر روی کارایی، قابلیت اطمینان و بهره وری دارد که باید محقق شود.این پلتفرم دارای ساختاری به شدت توزیع شده، غیر منسجم و سرویس گراست که از صد ها سرویس تشکیل شده است. در این محیط نیاز مبرمی به تکنولوژی های ذخیره سازی ای است که همواره قابل استفاده و در دسترس باشند یعنی در هر شرایطی بتوانیم از این انبار داده اطلاعات را بخوانیم و یا در آن اطلاعات را بنویسیم. مثلا مشتریان همواره باید بتوانند اقلام مختلف را مشاهده و به سبد خرید خود اضافه کنند حتی اگر دیسک ها از کار بیفتند، مسیر ها در شبکه مختل شوند و یا دیتاسنتر ها تحت هجوم طوفان باشند!راه حل آمازون با توجه به ویژگی ها و نیازهایی که این پلتفرم دارد، از Dynamo استفاده می کند که در ادامه آن را بررسی می کنیم.ویژگی های Dynamoاین سیستم یک پایگاه داده ی NoSQL و کلید-مقدار به شدت دردسترس است. برای دست یابی به این مقدار دردسترس بودن، Dynamo سازگاری را در بعضی سناریوهای خاص شکست، قربانی می کند. این سیستم از ترکیبی از روش های شناخته شده برای دست یابی به دسترسی پذیری و مقیاس پذیری استفاده می کند. داده با استفاده از روش هش سازگار قسمت بندی شده و کپی می شود. سازگاری داده در یک نسخه با کمک نسخه گذاری و سازگاری بین کپی های مختلف یک داده با کمک الگوریتمی بر اساس حد نصاب برقرار می شود. Dynamo برای کشف خطا و عضویت گره های جدید از پروتکلی بر اساس شایعه استفاده می کند. این سیستم کاملا توزیع شده است و خیلی کم به مدیریت دستی احتیاج دارد. مثلا گره های ذخیره سازی بدون نیاز به انجام عملیات دستی می توانند از سیستم حذف و یا به آن اضافه شوند. این سیستم هیچ مکانیزمی برای حفظ امنیت و یا درستی داده ها ندارد و در صورت نیاز این موارد باید در لایه های دیگر سیستم پیاده سازی شوند. از ویژگی های اصلی Dynamo می توان موارد زیر را نام برد:· کاملا توزیع شده و غیر متمرکز· به شدت دردسترس· به شدت مقیاس پذیر· در نهایت سازگار (در هر لحظه سازگاری را تامین نمی کند.)· نیاز کم به مدیریت دستی· متقارن، از این جهت که تمام گره ها در سیستم از یک جنس اند و هیچ گره ای مسئولیت اضافه یا متفاوتی ندارد.· ناهمگون، از این جهت که گره ها در قدرت می توانند متفاوت باشند و در حقیقت توزیع کار برای هر گره باید متناسب با قدرت آن باشد. این نکته از این جهت سودمند است که برای اضافه کردن گره ی جدید با قدرت بالاتر، نیازی به بالاتر بردن قدرت گره های قبلی موجود در سیستم نداریم.رابط سیستمرابط این سیستم از دو عملیات put() و get() تشکیل شده است. عملیات get(key) به وسیله ی کلید، کپی های مختلف از یک شی را پیدا می کند و یک شی و یا لیستی از اشیا در صورتیکه نسخه های متناقضی داشته باشیم، همراه با context هایشان بر می گرداند.عملیات put(key, context, object) با توجه به کلید مکان کپی ها را مشخص می کند و شی را در مکان های مشخص شده می نویسد. Context متادیتای شی است و اطلاعاتی مانند نسخه ی شی را در بر دارد.الگوریتم تقسیم داده یکی از نکات مهم در Dynamo قابلیت مقیاس پذیری افزایشی است. یعنی باید بتوانیم گره های موجود در سیستم را بدون سربار زیاد به سیستم اضافه کنیم. برای این کار لازم است داده به صورت داینامیک بر روی گره ها تقسیم شود. Dynamo از الگوریتم هش سازگار[1] برای این کار استفاده می کند. در این تکنیک هش، هش یا مکان گره ها، به تعداد کل گره ها بستگی ندارد و این ویژگی پراهمیتی در این مسئله است. در این الگوریتم فضای حلقه مانندی را در نظر می گیریم و گره ها و داده ها را روی آن می گذاریم. در حقیقت هش هر گره یا هر داده، مکان آن را بر روی این حلقه مشخص می کند. در Dynamo بر روی کلید داده ها یک هش MD5 اعمال کرده و مقدار به دست آمده مکان داده را روی حلقه مشخص می کند و مکان گره ها با انتساب عددی تصادفی به آن ها به دست می آید (شکل1).شکل1 سپس هر داده به نزدیک ترین گره در جهت عقربه های ساعت منتسب می شود. یعنی هر گره، مسئول داده هایی است که بین خود و گره ی عقبی اش قرار دارد، می شود و این داده ها در آن گره ذخیره می شوند (شکل 2)ویژگی مهم در این تکنیک این است که حذف یا اضافه شدن یک گره فقط همسایه ی عقبی یک گره را تحت تاثیر قرار می دهد. به این صورت که اگر گره ای حذف شود، داده های آن گره، روی گره ی عقبی ذخیره می شوند و اگر گره ای اضافه شود، مقداری از داده ها گره ی عقبی (با توجه به مکان گره ی جدید) بر روی گره ی جدید ذخیره شده و از گره ی عقبی حذف می شوند.شکل2  البته این روش به همین صورتی که تا به اینجا توضیح داده شد، دچار نواقص متعددی است، مثلا انتساب مکان به گره ها به صورت تصادفی ممکن است باری نا متوازن را در حلقه ایجاد کند. همچنین ممکن است توجهی به ناهمگونی قدرت در گره ها نشود، یعنی اینگونه نباشد که به گره های قوی تر داده های بیشتری برای ذخیره بدهیم و به گره های کمتر، داده های کمتر. برای حل این مشکلات به جای آن که هر گره را به یک مکان در حلقه منتسب کنیم، هر گره را با توجه به قدرتش به مکان های بیشتری منتسب می کنیم. یعنی هر چه گره قدرت بیشتری داشته باشد، گره های مجازی بیشتری برای آن می سازیم (شکل 3)شکل3همتاسازی برای دسترسی به دسترس پذیری بالا و همچنین ماندگاری در داده ها Dynamo داده ها را نه تنها در یک گره بلکه در چند گره کپی می کند تا در صورت از کار افتادن هر کدام از گره ها بتوانیم به داده ی موردنظر دسترسی داشته باشیم. هر داده در N گره ذخیره می شود که N متغیری است که برای هر سیستم متفاوت است. هر کلید داده به یک گره ی ناظر (با مکانیزمی که در بخش قبل توضیح داده شد) منتسب می شود. هر گره ی ناظر، علاوه بر ذخیره کردن داده ی مربوطه در حافظه ی محلی خودش، داده را در N-1 گره ی بعدی در جهت عقربه های ساعت هم کپی می کند. برای مثال در شکل 4، گره ی ناظر همه ی داده های بین A و B، گره ی B است و در صورتی که N=3 باشد، گره ی B هر داده را هم در حافظه ی محلی خود ذخیره می کند و هم در گره های C و D کپی می کند. به این لیست از گره ها که مسئولیت ذخیره و نگهداری داده با کلید خاصی را دارند، لیست اولویت آن کلید گفته می شود. Dynamo به گونه ای طراحی شده است که هر گره می تواند لیست اولویت هر کلیدی را تشخیص دهد. توجه کنید برای اینکه بتوانیم در صورت از کار افتادن گره ها، همچنان به همه ی داده ها دسترسی داشته باشیم، فقط گره های متمایز را (گره های مجازی که در حقیقت متعلق به یک گره ی فیزیکی هستند، نامتمایز در نظر گرفته می شود) در لیست اولویت حساب می کنیم، در نتیجه منظور از N گره، N گره ی متمایز است و تعداد واقعی این گره های ممکن است بیشتر از N باشد.شکل4نسخه گذاری دادهبا توجه به اینکه Dynamo نهایتا-سازگار است و به روزرسانی در داده ها به صورت غیر متقارن به گره ها می رسد، ممکن است وقتی درخواستی برای دریافت داده get() می دهیم، نسخه های متفاوتی از داده دریافت کنیم چرا که ممکن است به روزرسانی قبلی به همه ی گره ها نرسیده باشد. برای اینکه Dynamo بتواند ویژگی نهایتا-سازگاری را برقرار کند، نتیجه ی هر تغییر در داده را به عنوان یک نسخه ی جدید و غیرقابل تغییر در نظر می گیرد. بنابراین ممکن است در یک سیستم در یک زمان، نسخه های متفاوتی از یک داده موجود باشد. در بسیاری از مواقع، نسخه های قبلی، زیرگروهی از نسخه ی جدید هستند و خود سیستم می تواند نسخه ی معتبر (که نسخه ی جدیدتر است) را تشخیص دهد (تلفیق ترکیبی). اما در بعضی مواقع ممکن است نسخه هایی ناسازگار از یک داده موجود باشد که سیستم نتواند نسخه ی معتبر را تشخیص دهد. در این مواقع لازم است کاربر نسخه های مختلف از داده را تلفیق کرده و شاخه های متعدد از یک داده را تبدیل به یک شاخه و یک نسخه ی واحد کند(تلفیق معنایی). Dynamo برای اینکه بتواند رابطه ی علی بین نسخه های متفاوت از یک داده را مشخص کند، از ساعت های برداری استفاده می کند. این ساعت ها بردارهایی به طول تعداد نسخه ها هستند و هر نسخه دارای یک ساعت برداری است. عنصر موجود در سطر i ام ساعت، ساعت نسخه ی i ام را نشان می دهد. در صورتی که ساعت های برداری دو نسخه نه کوچک تر و نه بزرگ تر باشد، آن دو نسخه موازی بوده و ناسازگار هستند. برای مثال استفاده از ساعت های برداری در شکل 5 نمایش داده شده است.شکل5سازگاریبرای برقراری سازگاری بین کپی های مختلف از یک داده در گره های مختلف، Dynamo از پروتکلی بر اساس حد نصاب استفاده می کند. این پروتکل دارای دو پارامتر R و W است.  R کمترین تعداد گره هاست که باید در یک عملیات read موفق شرکت کنند و W کمترین تعداد گره هایی است که باید در یک عملیات write موفق شرکت کنند. W و R طوری تعیین می شوند که R+W&gt; N باشد. در این مدل، تاخیر یک عملیات get، برابر با کندترین کپی از بین R کپی است و تاخیر یک عملیات put، برابر با کندترین کپی از بین w کپی. بنابراین برای پایین آوردن تاخیر، w و R را کوچک تر از N انتخاب می کنند. در سیستمی که W=1 است، عملیات put خیلی مهم است و حتی با وجود یک گره ی سالم هم عملیات انجام می شود.در هنگام دریافت درخواست put، گره ی ناظر ساعت برداری را برای نسخه ی جدید ساخته و نسخه ی جدید را به صورت محلی ذخیره می کند، سپس نسخه ی جدید را به اولین N گره ی سالم در لیست اولویت ارسال می کند. اگر حداقل W-1 گره پاسخ بدهند، این عملیات موفقیت آمیز است.همچنین درمورد عملیات get، گره ی ناظر تمام نسخه های موجود کلید موردنظر را از اولین N گره ی سالم درخواست می کند، سپس منتظر R پاسخ می شود. اگر گره ی ناظر نسخه های متفاوتی دریافت کند که قابل تلفیق نباشند، همه ی آن ها را به کاربر بر می گرداند و پس از تلفیق، نسخه ی آخر در سیستم ثبت می شود.شناسایی عضویتبرای شناسایی عضویت در این سیستم از الگوریتم های مبتنی بر شایعه استفاده می شود، برای مثال با اضافه شدن یا حذف شدن گره در سیستم، گره ها همسایه، که از این خبر مطلع می شوند، تغییرات را به طور تدریجی به گره های دیگر ارسال کرده و در کل شبکه منتشر می کنند، به این وسیله تمام گره ها در نهایت به دید سازگار و مشترکی از اعضای موجود در شبکه می رسند.عیب یابیدر صورتی که گره ی A به گره ی B پیامی ارسال کند و جوابی دریافت نکند، گره ی B را معیوب در نظر می گیرد. هر چند ممکن است گره ی B به گره های دیگر پاسخ داده باشد. سپس گره ی A از گره های جایگزین B برای انجام درخواستش استفاده می کند. گره ی A هر چند وقت یک بار گره ی B را برای دریافت جواب بررسی می کند تا وقتی که B پاسخ را برگرداند.مهار خرابی: ارسال راهنمایی های کوچکدر Dynamo همه ی عملیات های خواندن و نوشتن بر روی اولین N گره ی سالم انجام می شود و ممکن است این N گره، لزوما اولین N گره بر روی حلقه ی هش سازگار نباشد. شکل 4 را در نظر بگیرید. اگر در این شکل گره ی A معیوب شود، کپی ای که باید در این گره ذخیره شود، در گره ی D ذخیره می شود. اما کپی ارسال شده به گره ی D در متادیتای خود اطلاعاتی دارد که نشان می دهد که این کپی قرار بوده برای گره ی A ارسال شود. گره ی D این متادیتا را در دیتابیسی محلی ذخیره کرده و هر چند وقت یک بار چک می کند تا ببیند گره ی A به کار افتاده است یا خیر. در صورتی که گره A به کار بیفتد، گره ی D داده ی مربوطه را به A ارسال کرده و متادیتای مربوطه را از دیتابیس خود پاک می کند.با استفاده از این روش، Dynamo تضمین می کند که عملیات های خواندن و نوشتن به علت خرابی های موقتی از کار نخواهند افتاد و همچنان در دسترس خواهند بود. مهار خرابی های دائمی: همگام سازی کپی هادر صورتی که بعضی گره ها به طور دائمی از سیستم حذف شود، لازم است بین همه ی گره ها مقایسه ای انجام شود و داده ها مورد نیاز منتقل شود تا سازگاری در سیستم حفظ شود. برای مقایسه ی گره ها از ساختمان داده ی درخت مرکل استفاده می شود. درخت مرکل یک درخت هش است که در آن هر برگ، هش یک کلید است. گره های سطح های بالاتر هم هر کدام برابر هش فرزندانشان هستند. مزیت اصلی درخت مرکل در آن است که هر شاخه بدون چک کردن کل درخت، می تواند بررسی شود. هر گره برای هر گستره ای از کلید ها که تحت نظر آن هستند، درخت مرکل جداگانه ای تشکیل می دهد. گره هایی که دارای گستره های مشترک هستند، درخت های مرکل متناظر را مقایسه کرده و در صورت مغایرت پیام هایی را برای همگام سازی به هم ارسال می کنند. ساختمان داده ی درخت مرکل موجب می شود تا مقایسه ها سریع تر انجام شود و برای همگام سازی داده های کمتری ارسال شود. برای مثال اگر مقدار هش موجود در ریشه ی دو درخت مرکل یکسان باشد، یعنی هر دو درخت یکسان هستند و نیازی به همگام سازی نیست. در غیر این صورت، یعنی بعضی کپی ها در دو گره مقدار متفاوتی دارند، در این شرایط گره ها مقدار هش فرزندان خود را مبادله می کنند تا کلید های غیرهمگام مشخص شده و همگام سازی صورت گیرد. نمونه ای از یک درخت مرکل در شکل 6 موجود است.شکل6منابع:· https://www.toptal.com/big-data/consistent-hashing· Dynamo: amazon&#x27;s highly available key-value storeپاورپوینت این مطلب </description>
                <category>محجوبه چاوشی</category>
                <author>محجوبه چاوشی</author>
                <pubDate>Sat, 12 Jan 2019 19:40:58 +0330</pubDate>
            </item>
            </channel>
</rss>