<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های مهرداد سلیمی</title>
        <link>https://virgool.io/feed/@mehrdadsalimi</link>
        <description>مطالبی که اینجا می‌نویسم برای عموم نیست و فقط به عنوان یه دفترچه یادداشت شخصی بهش نگاه می‌کنم.</description>
        <language>fa</language>
        <pubDate>2026-06-10 13:06:23</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/9720/avatar/6nBpxB.jpeg?height=120&amp;width=120</url>
            <title>مهرداد سلیمی</title>
            <link>https://virgool.io/@mehrdadsalimi</link>
        </image>

                    <item>
                <title>چطوری امواج مغزمون رو دستکاری کنیم تا وضعیت روحی و روانی بهتری داشته باشیم</title>
                <link>https://virgool.io/@mehrdadsalimi/%DA%86%DA%AF%D9%88%D9%86%D9%87-%D8%A7%D9%85%D9%88%D8%A7%D8%AC-%D9%85%D8%BA%D8%B2%D9%85%D9%88%D9%86-%D8%B1%D9%88-%D8%AF%D8%B3%D8%AA%DA%A9%D8%A7%D8%B1%DB%8C-%DA%A9%D9%86%DB%8C%D9%85-%D8%AA%D8%A7-%D9%88%D8%B6%D8%B9%DB%8C%D8%AA-%D8%B1%D9%88%D8%AD%DB%8C-%D9%88-%D8%B1%D9%88%D8%A7%D9%86%DB%8C-%D8%A8%D9%87%D8%AA%D8%B1%DB%8C-%D8%AF%D8%A7%D8%B4%D8%AA%D9%87-%D8%A8%D8%A7%D8%B4%DB%8C%D9%85-acr5kka16at8</link>
                <description>توجه: این متن ترجمه نوشته‌ای از دانشگاه توماس جفرسون آمریکاست. لینک به متن اصلی در انتهای صفحه‌ست.درک فعالیت مغز برای بهبود کیفیت خواب، کاهش استرس و افزایش تمرکزدوره‌ی امتحانات، یکی از دوره‌های پراسترس ساله. چقدر خوب می‌شد اگه می‌تونستیم راهی به منبع اصلی احساسات و افکارمون پیدا کنیم - یعنی راهی به مغزمون پیدا کنیم - و بتونیم کنترلش کنیم و به حالت روحی و روانی‌ای که دوست داریم برسیم و استرس‌مون رو کم کنیم. کنترل ذهن، یکی از اون پدیده‌های بیگانه و عجیبه که باور کردنش سخته، ولی شاید براتون جالب باشه که بدونید ما (انسان‌ها) داریم به نظارت کردنِ و مانیتورینگ مغز نزدیک و نزدیک‌تر می‌شیم، و حتی تو برخی موارد، داریم به جایی می‌رسیم که بتونیم الگوهای امواج مغزی دلخواه‌مون رو تغییر بدیم یا حتی قوی‌ترش کنیم.خُب اینجا سوالی که پیش میاد اینه که امواج مغز چی هستند و چطوری اونا رو اندازه‌گیری کنیم؟ مغز، از میلیاردها سلول ماهر و تخصصی تشکیل شده که بعضی‌هاشون رو نورون می‌نامیم. نورون‌ها همواره دارن با همدیگه صحبت می‌کنند و اثرات الکتریکی‌ای که از این تعاملات و ارتباطات نورون‌ها با هم ساطع و منتشر می‌شه، قابل تشخیص و اندازه‌گیری هستند. تکنیکی که با کمک اون می‌تونیم این اثرات الکتریکی رو اندازه‌گیری کنیم، اسمش الکترومغرنگاریه (نوار مغزی - EEG). با کمک سنسورهایی که روی پوست سر قرار می‌گیرن، می‌شه انفجارهای کوچیک انرژی رو اندازه‌گیری کرد و و اون‌ها رو در قالب موج، ثبت و ذخیره کرد. شکل این امواج زمانی که در حال استراحت هستیم، با زمانی که داریم تمرکز می‌کنیم فرق داره.تو شکل زیر، ۵ شکل مختلف امواج مغزی و حالت روحی و روانی مرتبط به هر کدوم نشون داده شده.حتما شده که خیلی هوشیار و متمرکز هستید ولی عاجزانه دوست داشته باشید که امواج مغزتون تو حالت موج‌های‌ نسبتاً صاف خواب و استراحت باشه (دلتا). آیا می‌شه امواج مغزی رو به یک جهت و حالت خاص تغییر داد؟ زندگی دانشجویی یا دانش‌آموزی می‌تونه پر از استرس، دشوار، پرشور و پرتلاطم باشه. فشار مدرسه، می‌تونه تأثیر زیادی روی سلامت ذهنی، روانی و تندرستی بذاره. یکی از نشانه‌های این قضیه، فرسودگی روزافزونیه که بین دانش‌آموزها داره دیده می‌شه. کنترل کردن امواج مغزی می‌تونه تو بهینه کردن کارآمدی و تَن آرامی (ریلکسیشن) ما رو کمک کنه.حالا قراره سه تا روش بهتون یاد بدیم که با کمک اون‌ها می‌تونید امواج مغزتون رو جوری تغییر بدید که به حالتی که مدنظرتون هست نزدیک‌ترش کنید.روش اول: گجت‌های پوشیدنیاگه می‌خواید دیگه خیلی خیلی همگام با تکنولوژی جلو برید، یه سری گجت و ابزار پوشیدنی وجود داره که از بازخورد عصبی استفاده می‌کنند. این ابزارها شبیه سرعت‌سنج‌های تو بزرگ‌راه‌ها هستند که سرعت شما رو اندازه‌گیری می‌کنند و اگه سرعت‌تون بیشتر از حد مجاز باشه، با فلاش زدن، ازتون عکس میندازند. این فلاش زدن، به شما رفتارتون (سرعت زیاد) رو یادآوری می‌کنه و بهتون اخطار می‌ده که تغییرش بدید (سرعت‌تون رو کم کنید). به طرز مشابه‌ای، این گجت‌ها و ابزارها، امواج ذهن رو اندازه می‌گیرن و خروجیش رو به شما می‌دن تا با کمک این اطلاعات، یک الگوی خاصی از امواج ذهنی رو تشدید کنید تا به حالت روحی و روانی مدنظرتون نزدیک‌ترش کنید. این ابزارها، در حقیقت یه سری سَربند (هِدبند) هستند که موقعی که داری تسک خاصی رو انجام می‌دی می‌پوشیش و امواج ذهنیت رو اندازه می‌گیری تا ببینی که ذهنت چقدر فعاله. برای مثال در صورتی که شما در حال مدیتیشن باشید، این دستگاه احتمالا امواج ریلکسیشن آلفا رو نشون می‌ده. بعضی از دستگاه‌ها این امواج رو در قالب موسیقی با همون فرکانس امواج مغزی براتون پخش می‌کنند در حالی که برخی دیگه از دستگاه‌ها، شکل واقعی این امواج رو به مغزتون بر می‌گردونن. (مهرداد: نمی‌دونم دقیقاً چطوری!)این گجت‌ها و ابزارها خیلی گرونن. خوشبختانه راه‌های دیگه‌ی ارزون‌تری هم هست که با کمک‌شون بتونیم امواج مغزی دلخواه‌مون در اون لحظه قوی‌تر و تشدید کنیم و بهره‌وری‌مون و کیفیت خواب‌مون رو افزایش بدیم و استرس‌مون رو کم کنیم.روش دوم: مدیتیشن و فعالیت بدنینشون داده شده که مدیتیشن منظم می‌تونه منجر به افزایش امواج آلفا (امواج مغزی مربوط به زمان ریلکسیشن) و کاهش امواج بتا (امواج مغزی مربوط به زمان مسئله حل کردن و یادگیری) بشه. به همین دلیله که بیشتر از همه برای کاهش استرس، به آدم‌ها پیشنهاد می‌شه مدیتیشن کنند. تنفس عمیق و تصویرسازی و مصورسازی با چشمان بسته - تکنیک‌هایی که در مدیتیشن خودآگاهی ازش استفاده می‌شه - هم می‌تونن تو تشدید و قوی‌تر کردن امواج آلفا کمک کنند.علاوه بر کمک به ریلکس کردن، امواج آلفا می‌تونن تو افزایش خلاقیت هم تأثیرگذار باشند. به این صورت، با کمک به آزادسازی سروتونین (انتقال دهنده‌ی عصبی) می‌تواند به عنوان یک داروی ضد افسردگی طبیعی عمل کنن. شاید باورتون نشه ولی یه راه دیگه برای تشدید امواج آلفا، انجام فعالیت‌های ورزشی شدیده. فعالیت ورزشی شدید نه تنها اندورفین آزاد می‌کنه، بلکه امواج آلفا رو هم موقع استراحت تشدید و قوی‌تر می‌کنه.روش سوم: آهنگ‌ها و موسیقی دوسویه (آهنگ‌هایی که وقتی هدفون می‌ذاری، از هر دو گوش، صداهای مختلفی می‌شنوی)تکنیک‌های دیگه‌ای که وجود داره که از مفهوم تقلید امواج مغزی استفاده می‌کنند. در این پدیده، امواج مغز شروع می‌کنن به همگام‌سازی و همزمان شدن با فرکانس یه مُحَرِکِ بیرونی، مثل یک صدا یا نور تکرار شونده. شما می‌تونید از این تکنیک برای آموزش و تمرین دادن امواج مغزی‌تون استفاده کنید. به این صورت که امواج مغزتون هنگام انجام یک تسک خاص، یاد بگیرن که شکل خاص و فرکانس خاصی به خودشون بگیرند. برای مثال، شما می‌خواید شکل موج مغزتون به صورت بِتا باشه وقتی دارید برای یه امتحان آماده می‌شید. یا اینکه دوست دارید امواج مغزی‌تون به شکل آلفا یا دلتا باشه وقتی دارید سعی می‌کنید بخوابید.برای اینکه امواج مغزمون تو یه طول موج درست قرار بگیره، شما می‌تونید به بیت‌ها و موسیقی‌های دوسویه گوش کنید که در حقیقت تو فرکانس مختلف از صدا هستند که در هر گوش پخش می‌شوند. این آهنگ‌ها رو می‌تونید به راحتی با جستجوی کلید واژه‌های Delta Binaural Beats یا Alpha Binaural Beats تو یوتیوب (مهرداد: اسپاتیفای یا اپل میوزیک) پیدا کنید. اگه حس کردید این آهنگ‌ها یه مقدار کسل کننده و تکراری هستند، یک سری سرویس‌هایی وجود داره که می‌تونن آهنگی رو پخش کنند که منجر به تشدید و قوی‌تر شدن یک طول موج خاص بشند.کار امواج مغزی صرفاً این نیست که حالت و مود ما رو عوض کنند، دکترها و محقق‌ها، دارن مغز رو بررسی می‌کنن که بفهمن ما چطوری یاد می‌گیریم و چطوری به یاد می‌آریم، همچنین می‌خوان تشخیص مشکلات مغزی با کیفیت و دقت بیشتری انجام بشه.سری بعدی که استرس داشتید یا ریلکس بودید، باانگیزه بودید یا افسرده بودید، به این فکر کنید که مغزتون داره چیکار می‌کنه و چطوری می‌تونید کمکش کنید که آروم‌تر شه یا انرژی بیشتری بگیره.یادمون باشه که ذهن بر جسم برتری داره و قدرت تلقین رو دست کم نگیریم. خیلی وقت‌ها می‌شه از قدرت ذهنی و اراده برای غلبه بر مشکلات فیزیکی  و جسمانی استفاده کرد.منبع این نوشته: https://nexus.jefferson.edu/science-and-technology/how-to-manipulate-brain-waves-for-a-better-mental-state/ </description>
                <category>مهرداد سلیمی</category>
                <author>مهرداد سلیمی</author>
                <pubDate>Fri, 29 Apr 2022 15:52:19 +0430</pubDate>
            </item>
                    <item>
                <title>یادگیری شبکه‌های LSTM</title>
                <link>https://virgool.io/@mehrdadsalimi/%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D8%B4%D8%A8%DA%A9%D9%87%D9%87%D8%A7%DB%8C-lstm-t8kmxby7le3p</link>
                <description>این مطلب رو در سال ۱۳۹۶ تو وبلاگم نوشته بودم که خیلی طرفدار پیدا کرد. وقتی تو گوگل «شبکه LSTM» رو جستجو می‌کردید، بعد از لینک متن اصلی و لینک ویکی‌پدیا در مورد شبکه‌های LSTM، لینک وبلاگ من رو نشون می‌داد (البته الان یعنی اردیبهشت ۹۹ که چک کردم نتیجه اول گوگل، وبلاگ منه (Yeees)). الان کاری که کردم اینه که عیناً همون متن و مطلب رو از وبلاگم منتقل کردم به اینجا. رو وبلاگم ۳۱ هزار بار توسط ۲۲۳۰ نفر بازدید شد و به صورت روزانه ۴۰ نفر این متن رو می‌خوندند.Yeah, I was showing off :Dاگه تازه دارید شبکه‌های LSTM یا همون Long Short-Term  Memory ها رو یاد می‌گیرید، یکی از منابعی که خیلی از افراد و سایت‌های  معتبر تو زمینه شبکه‌های عصبی پیشنهاد می‌کنن بخونید نوشتهِ وبلاگ آقای  Colah هستش که به بهترین نحو توضیح دادن این مطلب رو. اینجا من سعی کردم به زبون ساده نوشته‌ی ایشون رو ترجمه کنم.برای خوندن نوشتهِ به زبان اصلی می‌تونید به آدرس  وبلاگ ایشون مراجعه کنید.۱. شبکه‌های عصبی بازگشتی (RNN)در مورد نحوه فکر کردن انسان‌ها می‌شه گفت اینجوری نیست که  هر ثانیه ریست بشن و روند فکر کردن از اول شروع بشه. در همین لحظه که دارید  این مطلب رو می‌خونید شما معنی هر کلمه رو با توجه به دانشی که از خوندن  کلمه‌های قبلی کسب کردید متوجه می‌شید. به عبارتی شما موقع خوندن یک متن،  درک و فهمی رو که در مورد اون متن با توجه به خوندن کلمات قبل کسب کردید  دور نمی‌ریزید بلکه به صورت پیوسته با خوندن هر کلمه جدید، نسبت به اون  متنی که دارید می‌خونید درک و فهم پیدا می‌کنید و به عبارتی معنی اون متن  رو متوجه می‌شید.شبکه‌های عصبی متداولی که تاکنون متخصصان یادگیری ماشین از  اون‌ها استفاده می‌کردن نمی‌تونستن به این صورت شبیه انسان عمل کنند و این  یک نقصان بزرگ برای این شبکه‌ها محسوب می‌شه. برای مثال فرض کنید مدلی که  شما ساختید قرار است مشخص کند در هر لحظه از فیلم چه اتفاقی در حال افتادن  است. مشخص نیست شبکه‌های عصبی قدیمی چطور می‌توانند از اطلاعاتی که در  صحنه‌های قبلی فیلم به دست آورده‌اند برای تشخیص نوع اتفاق در صحنه‌های  بعدی فیلم استفاده کنند.شبکه‌های عصبی بازگشتی (Recurrent Neural Network) برای  برطرف کردن این مشکل طراحی شدند. در حقیقت شبکه‌های عصبی بازگشتی تو خودشون  شامل یه حلقه بازگشتی هستند که منجر میشه اطلاعاتی که از لحظات قبلی بدست  آوردیم از بین نرن و تو شبکه باقی بمونن.شبکه‌های عصبی بازگشتی دارای حلقه هستند.در شکل بالا، بخش A، به عنوان ورودی مقدار xt را دریافت و مقدار ht را به خروجی می‌برد. حلقه باعث می‌شود که اطلاعات از یک مرحله به مرحله بعد ارسال شوند.این حلقه‌ها احتمالا باعث شدن که شبکه‌های عصبی بازگشتی  براتون مبهم به نظر بیان. اگر چه اگه بیشتر جلو بریم متوجه می‌شید که این  شبکه‌ها عملاً تفاوت خاصی با شبکه‌های عصبی معمولی ندارن. شبکه‌های عصبی  بازگشتی رو میشه به صورت چندین کپیِ یکسان از یک شبکه عصبی در نظر گرفت که  هر کدام اطلاعاتش را به شبکه بعدی منتقل می‌کند. در شکل زیر وضعیت شبکه  عصبی بازگشتی در صورت باز کردن حلقه نمایش داده شده است:شبکه عصبی بازگشتیِ باز شدهبا توجه به ذات زنجیره‌مانند شبکه‌های عصبی بازگشتی،  می‌توان تشخیص داد که این شبکه‌ها به مقدار زیادی به دنباله‌ها و لیست‌ها  مرتبط هستند. در حقیقت شبکه‌های عصبی بازگشتی اولین انتخاب برای کار با  چنین داده‌هایی هستند.در حقیقت در سال‌های گذشته مکرراً از این شبکه‌ها استفاده  شده که منجر به موفقیت‌های بسیار چشم‌گیری در حوزه‌های مختلف از جمله تشخیص  صدا، مدل کردن زبان، ترجمه، درج خودکار توضیح برای تصویر و ... شده است.  برای مشاهده نتایج و آزمایشات خارق‌العاده‌ای که با اساتفاده از شبکه‌های  عصبی بازگشتی انجام شده، می‌توانید نوشتهِ جذاب  و عالی Andrej Karpathy با  عنوان عملکرد عالی ولی بی‌دلیل شبکه‌های عصبی بازگشتی رو مطالعه کنید که قدرت خارق‌العاده شبکه‌های عصبی بازگشتی شرح داده شده.بیشتر این موفقیت‌ها مدیون استفاده از شبکه‌های &quot;LSTM&quot; است.  نوع خاصی از شبکه‌های عصبی بازگشتی که در بیشتر موارد عملکرد بهتری از  شبکه‌های عصبی بازگشتی استاندارد دارد. تقریباً میشه گفت اکثر موفقیت‌های  شبکه‌‌های عصبی بازگشتی وقتی بدست آمده که از LSTM‌ها استفاده شده است. تو  این نوشته ما شبکه‌های LSTM رو به تفسیر توضیح می‌دیم.۱.۱. مشکلی به نام وابستگی‌های بلندمدتیکی از جذابیت‌های شبکه‌های عصبی بازگشتی این است که آن‌ها  ممکن است بتوانند اطلاعات که قبلاً مشاهده شده را به کاری که در حال حاضر  در حال انجام است مرتبط سازد، برای مثال استفاده از فریم‌های قبلی یک ویدئو  می‌تواند در فهمیدن فریم کنونی کمک‌کننده باشد. اگر شبکه‌های عصبی بازگشتی  بتوانند واقعاً این کار را انجام دهند، می‌توان آن‌ها را بسیار مفید  دانست. ولی آیا واقعاً می‌تونن؟ جواب اینه که بستگی داره.بعضی مواقع ما فقط نیاز داریم فقط به اطلاعات گذشته نزدیک  نگاه کنیم تا متوجه اطلاعات حال حاضر بشیم. برای مثال، فرض کنید ما مدلِ  زبانی‌ای ساخته‌ایم که تلاش می‌کند کلمه بعدی را با توجه به کلمات قبلی‌ای  که در اختیارش قرار دادیم پیش‌بینی کند. اگه ما می‌خوایم آخرین کلمه تو  جمله «ابر‌ها هستند در آسمان» رو پیش‌بینی کنیم، ما به اطلاعات اضافیِ  دیگه‌ای نیاز نداریم و تقریباً میشه گفت واضحه که کلمه بعدی «آسمان» است.  در موارد مشابه این مثال، که فاصله بین اطلاعات مرتبط و جایی که به این  اطلاعات نیاز داریم خیلی کمه، شبکه‌های عصبی بازگشتی می‌تونن یاد بگیرن که  از این اطلاعات استفاده کنند.ولی ممکن است مواردی وجود داشته باشد که ما به اطلاعات  بیشتری نیاز داشته باشیم. فرض کنید قصد داریم کلمه بعدی در جمله «من زبان  فرانسه را خیلی راحت صحبت می‌کنم... من به دنیا آمدم در فرانسه.» با توجه  به اطلاعات اخیر (یعنی چهار پنج کلمه قبل از آخرین کلمه)، می‌توان گفت که  کلمه آخر احتمالا اسم یک کشور است، ولی اگر بخواهیم دقیقاً متوجه بشیم چه  کشوری است، ما نیاز داریم به اطلاعات دورتر (یعنی تا ده یا بیست کلمه قبل  از آخرین کلمه) دسترسی داشته باشیم. به صورت کلی ممکن است فاصله بین اطلاعات مرتبط و جایی که به این اطلاعات نیاز داریم زیاد باشد.متأسفانه، هر چه این فاصله افزایش پیدا  می‌کند، شبکه‌های عصبی بازگشتی قدرت‌شان را در به یادآوردن و استفاده از  اطلاعاتی که در گذشته دورتر یاد گرفته‌اند کاهش پیدا می‌کند و به عبارتی  توانائی استفاده از اطلاعات گذشته دورتر را ندارند.از نظر تئوری، شبکه‌های عصبی بازگشتی توانائی مدیریت  وابستگی‌های بلندمدت رو باید داشته باشند. یک فرد متخصص می‌تونه با دقت  پارامتر‌های شبکه رو طوری تعیین کنه که مسائل کوچیکِ این شکلی را حل کنه.  متأسفانه در عمل شبکه‌‌های عصبی بازگشتی توانائی یادگیری وابستگی بلندمدت  رو ندارن. این مشکل به صورت دقیق‌تر تو این دو تا مقاله یعنی Hochreiter 1991 و ‌Bengio, et al. 1994 شرح داده شدن.بخوام خلاصه بگم دو تا مشکل اصلی به نام Vanishing and  Exploding Gradient تو شبکه‌های عصبی بازگشتی وجود داره که LSTM حل‌اش کرده  که می‌تونید خودتون در موردشون بیشتر تحقیق کنید. (این پاراگراف تو متن  اصلی نیست!)خُب خوشبختانه، شبکه‌های LSTM این مشکل را حل کرده‌اند!۲. شبکه‌های LSTMشبکه‌های LSTM که خلاصه شده عبارت &quot;Long Short Term Memory&quot;  هستند، نوع خاصی از شبکه‌های عصبی بازگشتی هستند که توانائی یادگیری  وابستگی‌های بلندمدت را دارند. این شبکه‌ها برای اولین بار توسط Hochreiter  و Schmidhuber در سال ۱۹۹۷ در این مقاله معرفی شدند. البته تعداد زیادی از محققان در بهبود این شبکه‌ها نقش داشتند که در متن اصلی به آن‌ها اشاره شده است.در حقیقت هدف از طراحی شبکه‌های LSTM، حل کردن مشکل وابستگی  بلندمدت بود. به این نکته مهم توجه کنید که به یاد سپاری اطلاعات برای  بازه‌های زمانی بلند مدت، رفتار پیش‌فرض و عادی شبکه‌های LSTM‌ است و  ساختار آ‌ن‌ها به صورتی است که اطلاعات خیلی دور را به خوبی یاد می‌گیرند  که این ویژگی در ساختار آن‌ها نهفته است.همه شبکه‌های  عصبی بازگشتی به شکل دنباله‌ای (زنجیره‌ای) تکرار شونده از ماژول‌های  (واحد‌های) شبکه‌های عصبی هستند. در شبکه‌های عصبی بازگشتی استاندارد، این  ماژول‌های تکرار شونده ساختار ساده‌ای دارند، برای مثال تنها شامل یک لایه  تانژانتِ هایپربولیک (tanh) هستند.ماژول‌های تکرار شونده در شبکه‌های عصبی بازگشتی استاندارد فقط دارای یک لایه هستند.شبکه‌های LSTM نیز چنین ساختار دنباله یا زنجیره‌مانندی  دارند ولی ماژولِ تکرار شونده ساختار متفاوتی دارد. به جای داشتن تنها یک  لایه شبکه عصبی، ۴ لایه دارند که طبق ساختار ویژه‌ای با یکدیگر در تعامل و  ارتباط هستند.ماژول‌های تکرار شونده در LSTM‌ها دارای ۴ لایه که با هم در تعامل هستند است.نگران جزئیات تصویر نباشید، جلوتر قدم یه قدم ساختار  شبکه‌های LSTM را توضیح خواهیم داد. ابتدا معنی هر کدام از شکل‌ و  علامت‌هایی را که از آن‌ها استفاده خواهیم کرد توضیح می دهیم.کپی کردن | وصل کردن | بردار انتقال | عملیات نقطه به نقطه | یک لایه‌ی شبکه عصبیدر شکل بالا، هر خط یک بردار را به صورت کامل از خروجی یک  گره به ورودی گره دیگر انتقال می‌دهد. دایره‌های صورتی نمایش دهنده  عملیات‌های نقطه‌ به نقطه مانند «جمع کردن دو بردار» هستند. مستطیل‌های  زرد، لایه‌‌های شبکه‌های عصبی هستند که شبکه پارامتر‌های آن‌ها را یاد  می‌گیرد. خط‌هایی که با هم ادغام می‌شوند نشان‌دهنده الحاق (concatenation)  و خط‌هایی که چند شاخه می‌شوند نشان دهنده‌ای این موضوع است که محتوای  آن‌ها کپی و به بخش‌های مختلف ارسال می‌شود.۱.۲. ایده اصلیِ پشت LSTM‌هاعنصر اصلی LSTM‌ها سلول حالت (cell state) است که در حقیقت یک خط افقی است که در بالای شکل قرار دارد.سلول حالت را می‌توان به صورت یک تسمه نقاله تصور کرد که از  اول تا آخر دنباله یا همان زنجیره با تعاملات خطیِ جزئی در حرکت است (یعنی  ساختار آن بسیار ساده است و تغییرات کمی در آن اتفاق می‌افتد).خب؛ LSTM این توانائی را دارد که اطلاعات جدیدی را به سلول حالت  اضافه یا اطلاعات آن را حذف کنید. این کار توسط ساختارهای دقیقی به نام  دروازه‌ها (gates) انجام می‌شود.دروازه‌ها راهی هستند برای ورود اختیاری اطلاعات. آن‌ها از  یک لایه شبکه عصبیِ سیگموید (sigmoid) به همراه یک عملگر ضرب نقطه به نقطه  تشکلیل شده‌اند.خروجی لایه سیگموید عددی بین صفر و یک است، که نشان می‌دهد  چه مقدار از وروی باید به خروجی ارسال شود. مقدار صفر یعنی هیچ اطلاعاتی  نباید به خروجی ارسال شود در حالی که مقدار یک یعنی تمام ورودی به خروجی  ارسال شود!خب؛ LSTM دارای ۳ دروازه مشابه برای کنترل مقدار سلول حالت است.۲.۲. بررسی قدم به قدمِ ورود و خروج اطلاعات به LSTMقدم اول در LSTM تصمیم در مورد اطلاعاتی است که می‌خواهیم  آن‌ها را از سلول حالت پاک کنیم. این تصمیم توسط یک لایه سیگموید به نام  «دروازه فراموشی» (forget gate) انجام می‌شود. این دروازه با توجه به  مقادیر ht-1 و xt ، برای هر عدد، مقدار صفر یا یک را در سلول حالتِ Ct-1 به خروجی می‌برد. مقدار یک یعنی به صورت کامل مقدار حال حاضرِ سلول حالت (Ct-1) را به Ct ببر و مقدار صفر یعنی به صورت کامل اطلاعات سلول حالت کنونی (Ct-1) را پاک کن و هیچ مقداری از آن را به Ct نبر.بیاید به مثال قبلی‌مان که یک مدل زبانی‌ای بود که در آن  تلاش داشتیم کلمه بعدی را بر اساس همه کلمه‌های قبلی حدس بزنیم، برگردیم.  در چنین مسأله‌ای، سلول حالت ممکن است دربردارنده جنسیت فاعل کنونی باشد،  که با توجه به آن می‌توانیم تشخیص دهیم از چه ضمیری باید استفاده کنیم.  زمانی که یک فاعل جدید در جمله ظاهر می‌شود، می‌بایست جنسیت فاعل قبلی حذف  شود.قدم بعدی این است که تصمیم بگیریم چه اطلاعات جدیدی را  می‌خواهیم در سلول حالت ذخیره کنیم. این تصمیم دو بخشی است. ابتدا یک لایه  سیگموید به نام دروازه ورودی (input gate) داریم که تصمیم می‌گیرد چه  مقادیری به‌روز خواهند شد. مرحله بعدی یک لایه تانژانت هایپربولیک است که  برداری از مقادیر به نام Ct~ می‌سارد که می‌توان آن‌ها را به  سلول حالت اضافه کرد. در مرحله بعد، ما این دو مرحله را با هم ترکیب  می‌کنیم تا مقدار سلول حالت را به‌روز کنیم.در مثال مدل زبانی‌ای که پیش‌تر داشتیم، قصد داریم جنسیت  فاعل جدید را به سلول حالت اضافه کنیم تا جایگزین جنسیت فاعل قبلی شود که  در مرحله قبلی تصمیم گرفتیم آن را فراموش کنیم.حال زمان آن فرا رسیده است که سلول حالت قدیمی یعنی Ct-1 را سلول حالت جدید یعنی Ct به‌روز کنیم. در مراحل قبلی تصمیم گرفته شد که چه کنیم و در حال حاضر تنها لازم است تصمیماتی را که گرفته شد عملی کنیم.ما مقدار قبلی سلول حالت را در ft ضرب می‌کنیم که یعنی فراموش کردن اطلاعاتی که پیش‌تر تصمیم گرفتیم آن‌ها را فراموش کنیم. سپس it * ~Ct را به آن اضافه می‌کنیم. در حال حاضر مقادیر جدید سلول حالت با توجه به تصمیماتی که پیش‌تر گرفته شده بود بدست آمده‌اند.در مثال مدل زبانی، اینجا دقیقاً جائی است که اطلاعاتی که  در مورد جنسیت قبلی داشتیم را دور می‌ریزیم و اطلاعات جدید را اضافه  می‌کنیم.در نهایت باید تصمیم بگیریم قرار است چه اطلاعاتی را به  خروجی ببریم. این خروجی با در نظر گرفتن مقدار سلول حالت خواهد بود، ولی از  فیلتر مشخصی عبور خواهد کرد. در ابتدا، یک لایه سیگموید داریم که تصمیم  می‌گیرد چه بخشی از سلول حالت قرار است به خروجی برده شود. سپس مقدار سلول  حالت (پس از به‌روز شدن در مراحل قبلی) را به یک لایه تانژانت هایپر بولیک  (تا مقادیر بین ۱- و ۱+ باشند) می‌دهیم و مقدار آن را در خروجی لایه  سیگموید قبلی ضرب می‌کنیم تا تنها بخش‌هایی که مد نظرمان است به خروجی  برود.در مثال مدل زبانی، با توجه به اینکه تنها فاعل را دیده، در  صورتی که م‌خواهیم کلمه بعدی را حدس بزنیم، ممکن است بخواهد اطلاعاتی در  ارتباط با فعل را به خروجی ببرد. برای مثال ممکن است اینکه فاعل مفرد یا  جمع است را به خروجی ببرد، که ما با توجه به آن بدانیم فعل به چه فُرمی  خواهد بود.۳.۲. انواع مختلف LSTM‌هاچیزی که تا الان توضیح داده شده، یک LSTM عادی است. ولی همه  LSTM‌ها به این صورت نیستند. در حقیقت در هر مقاله‌ای که از LSTM‌ها  استفاده شده، از نسخه‌هایی از LSTM که اندکی با هم متفاوت هستند استفاده  شده است. تفاوت تو این LSTM‌ها خیلی کمه ولی خوبه چند نسخه مختلف دیگه از  این LSTM‌ها رو بشناسید که در صورت علاقه می‌تونید نوشته اصلی به زبان انگلیسی رو مطالعه کنید.ترجمه این نوشتهآخرش لازم می‌دونم بگم که این متن با اجازه از نویسنده اصلی یعنی آقای Christopher Olah ترجمه شده.</description>
                <category>مهرداد سلیمی</category>
                <author>مهرداد سلیمی</author>
                <pubDate>Thu, 07 May 2020 20:11:24 +0430</pubDate>
            </item>
                    <item>
                <title>خلاصه‌ی دوره آموزشی Hadoop Starter Kit در Udemy</title>
                <link>https://virgool.io/@mehrdadsalimi/hadoop-starter-kit-gvoj7tlks4c5</link>
                <description>یک راست برم سر اصل مطلب؛ تصمیم گرفتم با Hadoop و Spark آشنا بشم و موقع گشتن واسه دوره آموزشی رایگان، با این کلاس آنلاین تو سایت Udemy آشنا شدم که به مرور چیزایی رو که یاد می‌گیرم اینجا می‌نویسم. اینجا رو برای آموزش بقیه نمی‌نویسم. می‌نویسم تا بعداً خودم بهش برگردم و بخونمش. این نکته رو هم بگم که این مطلب برای مبتدی‌ها و noob‌هایی مثل خودمه :)بخش اول:‌ مقدمه‌ای بر Big Dataتعریف Big Dataجواب سوال «Big Data چیست؟» اینه: «حجم بسیار بزرگی از داده». حالا سوالی که پیش میاد اینه که تعریف ما از «بسیار بزرگ» چیه؟ حقیقت اینه که جواب درست و مشخصی به این سوال وجود نداره. عدم وجود جواب مشخص برای این سوال به دو دلیله: حجم داده‌ای که الان بزرگ در نظر گرفته می‌شه ممکنه سال بعد به دلیل پیشرفت تکنولوژی، دیگه بزرگ در نظر گرفته نشه.حجم داده‌ای که برای من و شما بزرگ در نظر گرفته می‌شه، برای شرکت‌هایی مثل گوگل و فیس‌بوک بزرگ در نظر گرفته نمی‌شه.پس از کجا بدونیم با Big Data سروکار داریم یا نه؟3V in Big Dataمثال: یه استارتاپ تو زمینه سرویس ایمیل راه اندازی کردیم که کاربران می‌تونند وارد سیستم ما بشن و ایمیل ارسال و دریافت کنند. در سه ماه، ۱۰۰ هزار کاربر در سیستم ما ثبت‌نام کرده و شروع به استفاده از سیستم ما می‌کنند. فرض کنیم از دیتابیس‌های سنتی برای ذخیره ایمیل‌ها استفاده می‌کنیم و اندازه فعلی دیتابیس‌مون یک ترابایت است. آیا الان مشکل Big Data‌ای داریم؟ جواب خیر است. ولی سوال درست‌تر این است که با این  سرعت رشد، آیا در آینده مشکل Big Data‌ای خواهیم داشت؟ برای جواب به این سوال باید سه فاکتور Volume یعنی حجم، Velocity یعنی سرعت و Variety یعنی تنوع را در نظر بگیریم. تعداد کاربران در سه ماه ۱۰۰ هزار بود و در صورتی که با همین سرعت رشد کنیم، آخر سال، ۴۰۰ هزار کاربر خواهیم داشت و حجم داده ۴ ترابایت خواهد بود. نکته‌ای که وجود دارد این است که در این جا فقط حجم مهم نبود، بلکه سرعت رشد هم مهم بود. نکته‌ی بعدی که وجود دارد این است که در سیستم ما فقط متن وجود ندارد و ممکن است کاربران علاوه بر متن، به ارسال و دریافت عکس و ویدئو هم بپردازند که عملاً دیتابیس‌های سنتی قابلیت ذخیره بهینه این نوع داده را ندارند. بنابراین در تعیین اینکه با مسئله Big Dataای روبرو هستیم یا نه، باید حجم، سرعت و تنوع داده را با هم در نظر بگیریم.وقتی متوجه شدیم مسئله‌ای که با آن روبرو هستیم Big Data‌ای است، باید بدانیم که با چالش‌های زیر روبرو خواهیم بود: ذخیره‌سازی یا Storageبازدهی محاسباتی یا Computational Efficiency۳. از دست دادن داده یا Data Loss۴. هزینه یا Costسوالی که به ذهن می‌رسد این است که آیا روش‌های قدیمی توانایی حل این مشکلات را دارند؟ مشکل RDBMSها این است که قابلیت Scalability مناسبی ندارند؛ توانایی ذخیره داده Unstructured مثل تصویر و ویدئو را ندارند و در نهایت اینکه هزینه افزایش فضای ذخیره‌سازی نیز در این سیستم‌ها بالاست. راه حل سنتی دوم، استفاده از Grid Computing است که در آن چندین node کامپیوتر به صورت موازی پردازش‌ها را انجام می‌دهند. مشکل این روش هم این است که وقتی حجم داده زیاد است، عملکرد مناسبی ندارند و مشکل بعدی آن است که لازم فرد مورد نظر دانش بسیار خوبی در زبان‌های برنامه‌نویسی سطح پایین داشته باشه تا بتواند چنین سیستمی را پیاده‌سازی کند.پس راه حل چیست؟ HadoopHadoopچرا Hadoop یه راه‌حل خوب است؟پشتیبانی از حجم بزرگی از دادهذخیره‌سازی داده به صورت کارآمدقابلیت بازیابی داده از دست رفتهقابلیت Horizontal Scalingبه صرفه بودن از نظر هزینهراحت بودن یادگیری آن برای برنامه‌نویس‌ها و حتی غیربرنامه‌نویس‌هاسوالی که پیش می‌آید این است که آیا hadoop جایگزین دیتابیس است؟ جواب خیر است. چیزهایی هستند که hadoop در آن‌ها بهتر است ولی در برخی زمینه‌ها دیتابیس‌ها قوی‌تر هستند. وقتی حجم داده در حد گیگابایت و ترابایت است، دیتابیس‌ها عملکرد بهتری دارند.وقتی حجم داده در حد پتابایت است، hadoop انتخاب بهتری است.در بحث Dynamic Schemaها hadoop و در زمینه Static Schemaها دیتابیس گزینه بهتری است. hadoop قابلیت پشتیبانی از داده با typeهای مختلف را دارد.دیتابیس‌ها قابلیت Vertical Scaling را دارند. در صورتی وقتی نیاز به اضافه کردن چند کامپیوتر برای افزایش حجم ذخیره‌سازی است که به آن Horizontal Scaling می‌گویند، دیتابیس‌ها عملکرد مناسبی ندارند.وقتی حجم زیاد می‌شود، هزینه‌ی دیتابیس‌ها به صرفه نیست. از طرفی hadoop نیاز به هیچ گونه سخت‌افزار ویژه‌ای ندارد.مورد بعدی این است که hadoop یک سیستم برای عملیات‌های batch است و برخلاف دیتابیس‌ها، خیلی interactive نیست. به این معنی که نباید وقتی یک درخواست یا کوئری می‌زنید، انتظار پاسخ در حد چند میلی‌ثانیه را داشته باشید. (این چیزی که گفت یه کم عجیبه! خب اگه جواب‌دهیش عالی نیست چرا باید تو سیستم‌های real time ازش استفاده بشه؟!)در hadoop داده یک بار نوشته می‌شود و چندین بار خوانده می‌شود ولی در دیتابیس‌ها، می‌توان به دفعات داده را نوشت و خواند. (این هم عجیبه! بریم جلو شاید جواب سوال‌مون جلوتر باشه.)در حال حاضر hadoop تنها انتخاب برای Big Data نیست و دیتابیس‌های NoSQL مثل کاساندرا هم گزینه‌های مناسبی هستند. برای مثال کاساندرا می‌تونه داده‌ای با میلیون‌ها ستون و میلیاردها سطر رو پردازش کنه! (یا ابلفضل!)درک مسئله Big Dataمثال: فرض کنید برای یک بازار بورس کار می‌کنید. در دیتاست شما اطلاعات روزانه مربوط به تراکنش‌های چندین سال بورس موجود است. اندازه دیتاست ۱ ترابایت است. یک روز از شما سوال می‌شود که حداکثر مقدار قیمت symbol‌های مختلف را در طول این چند سال پیدا کنید. در اینجا لازم است به دو مقوله «فضای ذخیره‌سازی» و «محاسبات» فکر کنیم. لپ تاپ شما فقط ۲۰ گیگ فضای خالی دارد. شما از مسئول شبکه می‌خواهید که فایل ۱ ترابایتی را در جایی از فضای ذخیره‌سازی شبکه ذخیره کند و آدرس آن را به شما بدهد. و شما یک برنامه جاوا نوشته‌اید که محاسبات مدنظرتان برای گرفتن خروجی مناسب از داده را انجام می‌دهد. حال لازم است محاسبه کنیم چقدر طول می‌کشد داده را بخوانیم  و محاسبات لازم را روی آن انجام دهیم. با  فرض اینکه سرعت انتقال داده از حافظه شبکه به لپ‌تاپ شما ۱۲۲ مگابایت در ثانیه (Data Access Rate) است. بنابراین برای انتقال ۱ ترابایت، ۲ ساعت و ۲۲ دقیقه زمان می‌برد. اگر پیش‌بینی کنیم که اجرای خود برنامه هم یک ساعت زمان ببرد و مقداری هم زمان با توجه به پهنای باند شبکه اضافه شود، می‌توان گفت که Execution Time ما بیشتر از ۳ ساعت خواهد بود. ولی رییس شما به سرعت به نتیجه این عملیات نیاز دارد و نمی‌تواند ۳ ساعت صبر کند. بنابراین لازم است دنبال راه‌حل بهتری باشیم و مثلاً زیر ۳۰ دقیقه نتیجه را گزارش کنیم. بیشترین زمان صرف خواندن داده از حافظه شبکه و انجام محاسبات شده است. می‌توان به جای HDD از SSD یا Solid State Drive استفاده کرد؛ ولی مشکل این است که قیمت SSD بسیار بیشتر از HDD است و وقتی حجم خیلی زیاد باشد، شاید خرید آن به صرفه نباشد. راه دوم می‌تواند این باشد که داده ۱ ترابایتی را به ۱۰۰ قسمت تقسیم کنیم و توسط ۱۰۰ کامپیوتر یا node شبکه آن‌ها را بخوانیم و محاسبات را انجام دهیم. در این صورت ۲ ساعت و ۲۰ دقیقه‌ای که صرف خواندن داده می‌شد تقسیم بر ۱۰۰ می‌شود به زیر دو دقیقه کاهش پیدا می‌کند و یک ساعتی که صرف انجام محاسبات می‌شد نیز تقسیم بر ۱۰۰ می‌شود و به زیر ۱ دقیقه کاهش پیدا می‌کند. مشکلی که راه حل دوم دارد این است که پهنای باند شبکه جوابگوی خواندن دیتا توسط ۱۰۰ کامپیوتر به صورت همزمان نیست و سرعت همه‌ی کامپیوترهای شبکه هنگام خواندن داده به شدت کاهش پیدا می‌کند. برای حل این مشکل فرض می‌کنیم که هر ۱۰۰ بخش دیتا را که توسط هر کامپیوتر قرار بود خوانده شود به آن کامپویتر منتقل کرده‌ایم و  دیگر مشکل پهنای باند شبکه را نداریم. ولی مجدد مشکلی که در این جا ممکن است به وجود بیاید این است که چه اتفاقی می‌افتد اگر روی یک یا چندین تا از این کامپیوترها هارد دیسک دچار مشکل شود و داده از دست برود؟ برای مثال اگر یک تصویر داشته باشیم، می‌توانیم آن را روی گوگل درایو هم داشته باشیم تا اگر مشکلی برای لپ تاپ ما به وجود آمد، مطمئن باشیم که یک نسخه پشتیبان از آن تصویر داریم. در مثال خودمان، کاری که می‌توانیم بکنیم این است که داده هر کامپیوتر را روی دو کامپیوتر دیگر هم ذخیره کنیم تا در صورتی که مشکلی پیش آمد، بتوان نسخه پشتیبان را از آن‌جا بازیابی کرد. البته همین روش چالش‌هایی نیز دارد: لازم است کامپیوترها به یکدیگر متصل شوند. لازم است معلوم شود طبق چه منطقی داده‌ی هر کامپیوتر روی کدام کامپیوترهای دیگر ذخیره خواهد شد. در بخش محاسبات نیز مکشلاتی وجود دارد. برای مثال داده یک symbol می‌تواند روی کامپیوترهای مختلف باشد. حال، کدام کامپیوتر باید تمام خروجی‌های کامپیوترهای مختلف را جمع‌آوری و همگام‌سازی کند؟ همان‌طور که مشخص است راه‌حلی که ارائه دادیم خیلی پیچیدگی‌های مربوط به فضای ذخیره‌سازی و محاسباتی دارد. پس راه‌حل بهینه برای ما در این وضعیت چیست؟ hadoopدر حقیقت، hadoop یک فریمورک برای پردازش موازی دیتاست‌های بزرگ است که به صورت چندین cluster روی کامپیوترهای مختلف ذخیره شده‌اند. نکته قابل توجه hadoop این است که این کامپیوترها لازم نیست سخت‌افزار ویژه‌ای داشته باشند. هر کامپیوتر یک هارد دیسک، رم و پردازنده داشته باشد،کافی است. البته توجه شود که این کامپیوترها احتمالا ارزان نیستند و سیستم آن‌ها قوی‌تر از کامپیوترهای معمولی است.hadoop frameworkدر اینجا، HDFS یا Hadoop Distributed File System تمام پیچیدگی‌های مربوط به ذخیره‌سازی داده مانند تقسیم داده به چندین بخش، تکرار هر بخش از داده در بیشتر از یک node  را بر عهده می‌گیرد. همچنین MapReduce یک مدل در برنامه‌نویسی است که hadoop آن را پیاده‌سازی می‌کند و ظیفه آن برعهده گرفتن تمام پیچیدگی‌های محاسباتی است. بنابراین فریمورک hadoop تمام منابع مورد نیاز را از منابع مختلف گردآوری کرده و یک خروجی یکپارچه شده را تحویل می‌دهد.خب الان که با hadoop آشنا شده‌ایم کافی است پیش مدیر بورس رفته و hadoop را به او معرفی کرده و پیشنهاد خرید ۱۰۰ کامپیوتر را بدهیم. در این صورت احتمالا مدیر مربوطه، با قیافه‌ای متعجب شما را نگاه خواهد کرد. مجدد اینجا hadoop به کمک شما می‌آید زیرا hadoop می‌تواند با تعداد کمتری کلاستر و یعنی حتی ۱۰ کامپیوتر هم کار کند. ولی در صورتی که بخواهید سرعت را افزایش دهید، تنها کافی است تعداد بیشتری node یا cluster به ساختار خود اضافه کنید؛ به عبارت دیگر hadoop قابلیت horizontally scale شدن دارد.کوییز (جواب‌ها در انتهای سوال‌هاست)سوال ۱: حجم دیتای شما ۵۰۰ گیگ است و شواهد نشان می‌دهد که حجم دیتا در آینده افزایش  چشم‌گیری نخواهد داشت. آیا شما با یک مسئله Big Data روبرو هستید؟سوال ۲: به دلیل افزایش حجم داده از شما خواسته شده که مجدد ساختار این سایت فروشگاهی را بررسی کنید. در حال  حاضر در back-end این سایت از MySQL Server استفاده می‌شود. این وب‌سایت داده را از دیتابیس می‌گیرد و همچنین داده جدید را به آن اضافه و داده قدیمی را پاک می‌کند. به دلیل اینکه hadoop یک راه‌حل batch و نه interactive است، بهتر است از دیتابیس‌های NoSQL استفاده شود؛ آیا این جمله درست است؟سوال ۳: کاری به شما محول شده که روی دیتابیس Oracle دو ساعت انجامش طول می‌کشد. از شما خواسته می‌شود این زمان را به یک ساعت کاهش دهید. آیا بهترین روش این است که تعداد سروهای بیشتری اضافه کنیم؟سوال ۴: چرا پیشنهاد استفاده از SSD به جای HDD پیشنهاد خوبی برای افزایش نرخ خواندن داده نیست؟سوال ۵: بهترین کار برای بازیابی داده چیست؟سوال ۶: چه اتفاقی برای local file system می‌افتد وقتی HDFS را نصب می‌کنیم؟سوال ۷: زمانی که چندین node به صورت همزمان درخواست داده روی پهنای بند شبکه می‌کنند،  این موضوع موجب سرعت پایین انتقال داده روی شبکه می‌شود. بهترین کار افزایش پهنای باند شبکه است یا اینکه داده را روی node‌ای که قرار است محاسبه را انجام دهد ذخیره کنیم؟جواب ۱: خیرجواب ۲: بلهجواب ۳: خیرجواب ۴: هزینه خیلی بالاست.جواب ۵: کپی کردن داده هر بلاک روی چندین بلاک دیگرجواب ۶: هر دو در کنار یکدیگر قرار دارند و مشکلی پیش نمی‌آید و local file system با HDFS جایگزین نمی‌شود.جواب ۷: داده را روی nodeای که محاسبه را انجام می‌دهد ذخیره کنیم.بخش دوم: HDFSچراییِ نیاز به یک file system دیگر به نام HDFSسوالی که همان ابتدا لازم است پرسیده شود این است که آیا قبلاً از هیچ‌گونه file system دیگری استفاده کرده‌اید؟ جواب طبیعتاً باید «بله» باشد. همین الان که دارید با لپ‌تاپ‌تان این متن را می‌خوانید یا اگر از دستگاه USB استفاده کرده‌اید، این یعنی از یک file system استفاده کرده‌اید. در حقیقت file system یکی از بخش‌های اساسی یک سیستم عامل است. در حقیقت file system حافظه هارد دیسک شما را مدیریت می‌کند.فرض کنید به یک نفر یک کتاب می‌دهید و به یک نفر دیگر برگه‌های آن کتاب را به صورت نامنظم می‌دهید. و به آن‌ها می‌گوییم که به فصل ۳۴ بروند. با استفاده از فهرست مطالب کتاب، فرد اول، سریع‌تر صفحه مورد نظرش را پیدا می‌کند. بدون file system، اطلاعاتی که روی هارد دیسک ذخیره شده‌اند، یک تیکه داده بزرگ خواهد بود که نمی‌توان در آن تعیین کرد فلان اطلاعات یا فایل از کجای هارد شروع و در کجا تمام می‌شود.عملکردهای اصلی file system موارد زیر هستند:کنترل اینکه داده چگونه ذخیره و خوانده می‌شود.وجود metadata در مورد فایل‌ها و فولدرها. مثل اسم فولدر، تاریخ ساخت فایل و موارد مشابهدسترسی و امنیتمدیریت فضای ذخیره‌سازی به صورت بهینهنمونه file system‌های معروف برگردیم به این سوال که چه نیازی به یک file system جدید به اسم HDFS است؟ به تصویر زیر توجه کنید:Hadoop Distributed File Systemفرض کنید یک کلاستر با ۱۰ node داریم و file system هر کدام EXT4 است. روی هر کدام از این nodeها، EXT4 را Local File System آن node می‌نامیم. اولین کار این است که وقتی یک فایل را روی file system پیشنهادی‌مان آپلود می‌کنیم، لازم است file system داده را به بلاک‌هایی با ندازه مساوی تقسیم کند.توجه: مفهموم بلاک در HDFS با مفهوم آن روی file system‌های قدیمی متفاوت است که جلوتر در مورد آن صحبت خواهد شد.خُب، file system ما باید یک دیدِ توزیع شده به فایل‌ها و بلاک‌ها کلاستر داشته باشد که این امر با EXT4 امکان‌پذیر نیست. یعنی local file systemعه node شماره یک، هیچ ایده‌ای ندارد که روی node شماره دو چه فایل‌هایی قرار دارند. به همین دلیل است که نام آن را local file system گذاشته‌اند. در این یکی از مشکلات احتمالی، از دست دادنِ داده است. راه‌حل این است که یک file system روی EXT4 داریم که روی همه nodeها توزیع شده است که آن را HDFS می‌نامیم. حالا وقتی فایلی را روی HDFS آپلود می‌کنیم، HDFS آن را به صورت خودکار به بلاک‌هایی با اندازه ۱۲۸ مگابایت تقسیم می‌کند. HDFS خودش به صورت خودکار بلاک‌های مختلف را روی node‌های مختلف قرار می‌دهد و عمل کپی کردن هر بلاک روی بیشتر از یک node را انجام می‌دهد. به صورت پیش‌فرض HDFS هر بلاک را روی ۳ node کپی می‌کند. فرض کنید فایلی با حجم ۷۰۰ مگابایت را روی HDFS ذخیره می‌کنید. ۵ بلاک با اندازه ۱۲۸ مگابایت و یک بلاک با اندازه ۶۰ مگابایت خواهیم داشت. به این دلیل که HDFS یک دیدِ توزیع شده به کل کلاستر دارد، می‌تواند به سادگی تصمیم بگیرد که کدام node کدام بلاک را در خود داشته باشد و کدام nodeها کپی‌ها را در خود داشته باشند.سوال مصاحبه: وقتی HDFS داریم چه اتفاقی برای local file system‌ می‌افتد؟ HDFS جایگزین آن نیست و هنوز هم سیستم‌عامل هر node از local file system‌ استفاده می‌کند. همچنین HDFS از EXT4 در مثال ما برای ذخیره کردن داده استفاده می‌کند.مزایای HDFS اینا هستند:پشتیبانی از مفهموم بلاک به جای ذخیره کل فایل به صورت یکجا که یعنی از پردازش توزیع شده پشتیبانی می‌کند.بلاک‌ها را کپی می‌کند و در صورت به وجود آمدن مشکل و از دست رفتن داده، آن را مدیریت می‌کند.از گسترش سیستم در اینده پشتیبانی می‌کند یعنی Scalable است.عدم نیاز به سخت‌افزار ویژه که یعنی از نظر هزینه‌ای مقرون به صرفه است.کار کردن با HDFSبرای کار کردن با HDFS تو محیط واقعی، تو این لینک، اطلاعات‌تون رو ثبت کنید تا اطلاعات لازم برای اتصال به یک کلاستر با ۳ تا node روی AWS براتون ارسال بشه. تو اون ایمیل دو تا فایل هست که یکیش با پسوند .pemعه. حالا تو ترمینال دستورات زیر رو وارد کنید تا به کلاستر مورد نظر روی AWS وصل شید. من این دستورات رو زدم:‍‍cd ~
sudo ssh -i /home/mehrdad/Downloads/cluster_key/hirwuser150430.pem hirwuser120130@54.85.143.224در حقیقت ساختار دستوری که می‌زنید باید به این صورت باشه:sudo ssh -i &lt;pem file&gt; &lt;user name&gt;@&lt;ip address&gt;بعد از اتصال به کلاستر تو ترمینال، اگه دستور زیر رو بزنید، فایل‌های موجود تو پوشه root رو مشاهده می‌کنید:ls /دستورات مربوط به hadoop با hadoop fs آغاز می‌شن. حالا اگه دستور زیر رو بزنید، خروجی با خروجی دستور قبلی فرق داره:hadoop fs -ls /دلیل این تفاوت اینه که hadoop یک دید کلی نسبت به همه node‌های کلاستر داره در صورتی که دستور قبلی فقط فایل‌های موجود تو یک node رو نشون می‌ده. یعنی اگه روی یک node دیگه دستور ls / رو بزنید، ممکنه فایل‌های موجود روی اون node با node فعلی فرق کنه ولی اگه روی node دوم دستور &#x60;hadoop fs -ls /&#x60; رو بزنیم، خروجی باید یکسان باشه چون همون‌طور که گفتیم hadoop یک دید کلی نسبت به همه nodeها دارد و فرقی نمی‌کند دستور را روی کدام node بزنیم.از دستور زیر می‌توان برای ایجاد یک دایرکتوری جدید در hadoop استفاده کرد:hadoop fs -mkdir hadoop-test1بنابراین می‌توان نتیجه گرفت view و محتوای HDFS متفاوت از local file system است.برای کپی کردن فایل از local file system به HDFS از دستور زیر استفاده می کنیم:hadoop fs -copyFromLocal  /hirw-starterkit/hdfs/commands/dwp-payments-april10.csv hadoop-test1برای برعکسش از دستور زیر استفاده می‌کنیم:‍hadoop fs -copyToLocal hadoop-test1/dwp-payments-april10.csv .‍‍‍برای کپی کردن فایل از یک دایرکتوری به دایرکتوری دیگر از دستور زیر استفاده می‌کنیم:‍‍‍‍hadoop fs -cp hadoop-test1/dwp-payments-april10.csv hadoop-test2برای انتقال فایل از یک دایرکتوری به دایرکتوری دیگر از دستور زیز استفاده می‌کنیم:hadoop fs -mv hadoop-test1/dwp-payments-april10.csv hadoop-test3خب بریم سراغ اینکه ببینیم HDFS فایل‌ها رو چطوری روی node‌های مختلف کپی کرده. به صورت پیش‌فرض، هر فایل سه بار کپی شده است. برای تغییر این عدد می‌توان به صورت زیر عمل کرد:hadoop fs -Ddfs.replication=2 -cp hadoop-test2/dwp-payments-april10.csv hadoop-test2/test_with_rep2.csvاینجا خوبه مجدد یادآوری کنم که اون بلاک‌های فایل که HDFS ذخیره می‌کنه، روی local file system مثلاً NTFS یا EXT4 ذخیره می‌شن و HDFS حواسش هست که کدوم بلاک‌ها روی کدوم nodeها و کجا ذخیره شدن و می‌تونه اون‌ها رو مدیریت کنه.ساختار و معماری HDFSوقتی ۱۰۰ها node در کلاستر دارید و صدها دیتاست بزرگ، این دیتا به بلاک‌های کوچک‌تر تقسیم می‌شود و روی node‌های مختلف قرار می‌گیرد و کپی‌های آن‌ها نیز همین‌طور. HDFS باید بتواند این تعداد فایل را مدیریت کند و یک فایل را از روی چندین بلاک بسازد. ولی HDFS چطور این کار را می‌کند؟ بریم سراغ چند تا تعریف.به nodeهایی که بلاک‌ها به صورت فیزیکی روی آن‌ها ذخیره شده‌اند، DataNode می‌گویند. هر DataNode می‌داند مسئول چه بلاک‌هایی است.DataNodeولی برای مثال nodeهای ۱ و ۲ نمی‌دانند که بلاک‌هایی که روی خود دارند، متعلق به کدام دیتاست‌ها و فایل‌ها هستند و همچنین هر node هیچ اطلاعی در مورد سایر بلاک‌های سایر nodeها ندارد. ما به عنوان کاربر احتمالا اینکه نام فایل را بدانیم باید برای‌مان کافی باشد و لازم نباشد وارد جزییات بلاک‌ها شویم. سوالی که وجود دارد این است پس اطلاعات مربوط به اینکه کدام بلاک متعلق به کدام فایل است، کجا قرار دارد؟ این اطلاعات در nodeای با نام NameNode قرار دارد.NameNodeاگر این node کار نکند عملاً هیچ کاری نمی‌توانیم انجام دهیم و کارها جلو نمی‌رود. پس شاید لازم باشد یک NameNode ذخیره هم داشته باشیم.یک نکته مهم این است که همه meta dataها روی NameNode قرار دارند و تنها چیزی که روی NameNode قرار ندارد، آدرس بلاک‌ها روی nodeهاست. سوالی که پیش می‌آید این است که چرا آدرس بلاک‌ها روی NameNode قرار ندارد؟ وقتی NameNode اجرا می‌شود، سایر Nodeها لیستی از بلاک‌هایی که در خود دارند را برای آن می‌فرستند و به این صورت NameNode می‌داند بلاک‌ها کجا قرار دارند. در حقیقت NameNode محل هر بلاک را روی memory دارد ولی این دیتا را روی دیسک ذخیره نمی‌کند. دلیل این قضیه این است که به صورت پیوسته فایل‌های جدید روی HDFS قرار می‌گیرند و اصلاح می‌شوندو اگر قرار باشد تمام این تغییرات روی دیسک ذخیره شود؛ مجدد خواندن آن‌ها از دیسک یک bottleneck خواهد بود.در زیر مشخصات احتمالی یک node در یک کلاستر معمولی آورده شده است:خب بریم چند تا جارگون یا واژه پر استفاده تو این زمینه رو یاد بگیریم:معنی Rack: گروهی از nodeها که در یک شبکه به یکدیگر متصل شده‌اند.معنی cluster: گروهی از rackها که در یک شبکه به یکدیگر متصل شده‌اند.معنی Data Center: یک مکان فیزیکی که که کلاستر در آن جا قرار دارد.کوئیزسوال ۱: وقتی file systemهای سنتی توانایی کار با فایل‌هایی به حجم چند اِگزا بایت را دارند، چه نیازی به HDFS است؟سوال ۲: به صورت پیش‌فرض از هر بلاک چند کپی روی HDFS قرار دارد؟سوال ۳: برای چک کردن یک بلاک و چک کردن مکان آن، از چه دستوری استفاده می‌شود؟سوال ۴: آدرس بلاک‌ها در nameNode روی هارد دیسک ذخیره می‌شود؟سوال ۵: برای تغییر تعداد کپی‌ها، چه متغییری را باید تغییر دهیم؟سوال ۶: مهم‌ترین Node در کلاستر؟جواب ۱: چون file systemهای قدیمی مناسب انجام محاسبات توزیع شده نیستند.جواب ۲: سه تاجواب ۳: &#x60;fsck&#x60;جواب ۴: خیرجواب ۵: &#x60;dfs.replication&#x60;جواب ۶: NameNodeبخش سوم: MapReduceمقدمه‌ای بر MapReduceفرض کنید فرماندار کالیفرنیا از شما می‌خواهد جمعیت شهرهای این ایالت را پیدا کنید. همه منابع در اختیار شما قرار داده شده ولی فقط ۴ ماه وقت دارید. کاری که می‌توان کرد این است که برای هر شهر فردی را در نظر بگیرید و وی را مسئول آمارگیری آن شهر بکنید. حال به این افراد می‌گویید که سراغ تک تک خانه‌ها بروید و در بزنید و از اهالی خانه بپرسید چند نفر در آن خانه زندگی می‌کنند. از هر فرد می‌خواهید وقتی سراغ هر خانه می‌روند و آمار آن خانه را می‌گیرند، در هر خط اسم آن شهر را بنویسند و جلوی آن تعداد ساکنان آن خانه و به همین ترتیب برای خانه‌های بعدی پیش بروند. این روش یک روش کلاسیک divide and conquer است. سپس از همه مسئولین شهر می‌خواهید که نتیجه را به دفتر مرکزی کالیفرنیا ارسال کنند. در دفتر مرکزی، آمار هر شهر جداگانه جمع زده می‌شود و آمار هر شهر مشخص می‌شود. فرماندار از نتیجه کار شما راضی است.سال اولسال بعد مجدد همین کار به شما اختصاص داده می‌شود ولی فقط ۲ ماه وقت خواهید داشت. کاری که می‌توانید بکنید این است که هر شهر را به دو بخش تقسیم کنید و مسئولیت هر بخش در هر شهر را به یک نفر بدهید (دو نفر در هر شهر) تا کارها سریع‌تر انجام شود. در دفتر مرکزی هم می‌توان دو نفر را داشت و هر شهر را به یکی از این دو نفر داد تا همل جمع زدن را انجام دهد. در اینجا شما می‌خواهید مطمئن شوید که آمار هر دو بخش یک شهر به یکی از نیروهای دفتر مرکزی ارسال می‌شود و اینگونه نشود که آمار بخشی از شهر در درست نفر اول دفتر مرکزی و آمار بخش دوم شهر در دست نفر دوم دفتر مرکزی باشد. چه کار می‌توان کرد؟ دستورالمعل مشخص برای هر شهر می‌فرستیم که آمارشان را به کدام نیرو در دفتر مرکزی ارسال کنند. کار انجام شد و مجدد فرماندار از نتیجه راضی بود.سال دومدر صورتی که سال بعد فرماندار از شما بخواهد همین کار را در یک ماه انجام دهید، دقیقا می‌دانید باید چه روندی را پیش بگیرید. در اینجا مدلی که ما داریم نه تنها کار می‌کند بلکه به راحتی scale می‌شود. این مدل را MapReduce می‌نامند. در حقیقت MapReduce یک مدل برنامه‌نویسی برای محاسبات توزیع شده است. یعنی روشی است برای پردازش دیتاست‌های بزرگ به صورت توزیع شده. در شکل زیر، نام فازهای مختلف کار مشخص شده‌اند:MapReduceتوجه شود که مفهموم MapReduce توسط هر زبان برنامه نویسی‌ای قابل پیاده‌سازی است. hadoop در حقیقت MapReduce را پیاده‌سازی می‌کند.تشریح اجزای MapReduceفرض کنید دیتاستی از بورس دارید که در آن اطلاعاتی مانند نام Symbol، تاریخ، قیمت باز آغاز و پایان آن روز و ... داریم. برای هر Symbol، بیشترین قیمت پایان روز را پیدا کنید.فرض کنیم دیتا توزیع شده نبود و فقط یک node داشتیم. چگونه این مسئله را حل می‌کردیم؟ هر خط را می‌خواندیم و اگر قیمت پایانی کمتر از قیمت پایانی‌ای که قبلاً ذخیره کرده‌ایم بود، آن را جایزگین می‌کنیم و به خط بعد می‌رویم و در غیر این صورت به صورت مستقیم به خط بعد می‌رویم و این کار را تا رسیدن به خط آخر تکرار می‌کنیم.خب حالا این مسئله را وقتی داده توزیع شده است چگونه حل کنیم؟ داده را به چند بخش تقسیم می‌کنیم و روی هر کدام از بخش‌های داده، یک پروسه داریم که عمل می‌کند. بخش‌های داده را input split می‌نامیم و به پروسه‌هایی را که روی input split‌ها عملی را انجام می‌دهند mapper می‌نامیم. هر mapper در هر لحظه فقط یک رکورد از داده را پردازش می‌کند و هر کدام از mapperها یک سری دستورالعمل مشخص و یکسان را روی هر سطر داده انجام خواهند داد و خروجی از mapper یک key-value خواهد بود.آیا فکر می‌کنید input split همان block (بلاک) است که در مبحث HDFS یاد گرفتیم؟ خب در اشتباه هستید. این دو تفاوت‌هایی دارند.بلاک تقسیم فیزیکی داده با توجه به اندازه هر بلاک است. چون اندازه بلاک مشخص است، ممکن است ظرفیت هر بلاک قبل از اینکه کل یک رکورد را در بر بگیرد پر شود.برای مثل در این دیتاست، ۴ رکورد با اندازه ۱۰۰ مگابایت داریم.اولین رکورد بدون مشکل در بلاک اول جا می‌گیرد. ولی دومین رکورد در بلاک اول جا نمی‌گیرد. بنابراین رکورد دوم در بلاک اول شروع می‌شود ولی در بلاک دوم تمام می‌شود. اگر یک mapper به بلاک اول اختصاص دهیم، نمی‌تواند رکورد دوم را پردازش کند به این دلیل که کل محتوای رکورد دوم روی بلاک اول قرار ندارد. این دقیقا مشکلی است که input split حل می‌کند. در این مثال، input split اول، هم رکورد اول و هم رکورد دوم را شامل می‌شود. input split دوم فقط شامل رکورد دوم خواد بود. input splitها کلاس‌های جاوا هستند که که یک pointerای به محل شروع و پایان هر کورد درون بلاک‌ها دارند. بنابراین وقتی mapper شروع به خواندن داده می‌کند، می‌داند کجا از کجا شروع کند و کجا پایان دهد. محل شروع یک input split می‌تواند یک بلاک باشد و محل پایانش یک بلاک دیگر. وقتی فرآیند MapReduce انجام می‌شود، hadoop بلاک‌ها را اسکن می‌کند و input splitها را می‌سازد. (نفهمیدم چطوری از بلاک‌ها input splitها رو ساخت.)بریم سراغ mapperها. mapperها رو می‌شه با زبان‌های برنامه‌نویسی مختلفی نوشت.در مثال ما، mapper یک برنامه جاوا است که توسط فریمورک hadoop برای هر رکورد در هر input split یک بار فراخوانی می شود.به نظرتون چند تا mapper رو hadoop برای پردازش دیتاست می‌سازه؟ به تعداد input splitها. در مثال ما، خروجی هر بار اجرای mapper، قیمت پایانی برای هر symbol خواهد بود. symbol می‌شود key و مبلغ می‌شود value.از کجا بدونیم کدوم متغییر رو key و کدوم یکی رو value در نظر بگیریم؟ ببینید چه چیزی قرار است reduced شود و آن را value در نظر بگیرید. Reducerها روی خروجی mapperها کار می‌کنند. خروجی mapperها group by می‌شوند با symbol و به reducer تحویل داده می‌شوند. اگر فرض کنید دیتای ما اطلاعاتی در مورد ۱۰ symbol دارد و برای هر symbol به تعداد ۱۰۰ رکورد دارد؛ که می‌شود ۱۰۰۰ رکورد در مجموع. بنابراین خروجی mapperها ۱۰۰۰ تا key-value خواهد بود چون mapperها روی هر رکورد اجرا می‌شوند. چون ۱۰ تا symbol داریم، reducer در ورودی‌اش ۱۰ رکورد دریافت خواهد کرد. در حقیقت به ازای هر symbol، یک بار reducer فراخوانده می‌شود.نکته: تعداد reducerها توسط کاربر تعیین می‌شود و حتی می‌توانیم reducerای نداشته باشیم.mapreduceبه مرحله‌ای که در آن خروجی mapperها به reducerها تحویل داده می‌شوند shuffle phase می‌گویند. بقیه فازها در تصویر زیر قابل مشاهده هستند.adding shuffleکوئیزسوال ۱: کدام یک از موارد زیر جز فازهای MapReduce است؟ mapper - reducer - shuffleسوال۲ : کاربر می‌تواند تعداد input splitها را مشخص کند؟سوال ۳: کاربر می‌تواند تعداد reducerها را مشخص کند؟جواب ۱: همگیجواب ۲: خیرجواب ۳: بلهبخش چهارم: Apache Pigمقدمه‌ای بر Apache Pigچیزی که هست اینه که نوشتن یه برنامه mapreduce زمان‌بره و نیاز به تمرین و تکرار داره که دست‌تون راه بیفته. بهتر نبود که یه ابزاری داشته باشیم که فقط چند تا دستورالعمل بهش بدیم و توی کلاستر hadoop‌مون اجراش کنیم و همون نتیجه رو بهمون بده؟ جواب این سوال و مشکل Apache Pig‌ است. این ابزار در شرکت یاهو توسعه داده شد تا امکان استفاده از mapreduce برای هر کسی که می‌خواهد با کلاستر hadoop کار کند فراهم شد.اگه می‌خواهید در وارد اکوسیستم hadoop شید، لازمه کار کردن با Pig رو یاد بگیرید. یه کد نمونه برای مسئله پیدا کردن بیشترین قیمت برای هر symbol توی بورس رو می بینید.--Load dataset with column names and datatypes
stock_records = LOAD &#039;/user/hirw/input/stocks&#039; USING PigStorage(&#039;,&#039;) as (exchange:chararray, symbol:chararray, date:datetime, open:float, high:float, low:float, close:float,volume:int, adj_close:float);

--Group records by symbol
grp_by_sym = GROUP stock_records BY symbol;

--Calculate maximum closing price
max_closing = FOREACH grp_by_sym GENERATE group, MAX(stock_records.close) as maxclose;

--Store output
STORE max_closing INTO &#039;output/pig/stocks&#039; USING PigStorage(&#039;,&#039;);بخش پنجم: Apache Hiveمقدمه‌ای بر Apache Hiveوقتی به تحلیل داده فکر می‌کنید چه چیزی بلافاصله به ذهن‌تون میاد؟ برای خیلی‌هامون احتمالا جداول دیتابیس به ذهن‌مون میاد. در اکوسیستم hadoop دیتا به صورت فایل قرار داشتند. ما اینجا به دنبال ابزاری هستیم که دیتا رو به صورت جداول نشون بده و بشه روش کوئری‌های SQL زد. خب چه ابزاری؟ Apache Hive.پس Hive به عنوان ورودی، یک کوئری SQL می‌گیره و اون رو به یک یا چند jobعه mapreduce تبدیل می‌کنه و به کلاستر hadoop‌ ارسال می‌کنه. سوالی که وجود داره اینه که چرا به دو تا ابزار Pig و Hive نیاز داریم؟ pig دستورالعمل Pig رو می‌گیره و تبدیل می‌کنه و Hive دستورالعمل SQL رو. دلیلش این بوده که تو دو تا شرکت مجزا و مستقل وی برای برای رسیدن به یه هدف مشابه این دو ابزار توسعه‌داده شده‌اند و الان از هر دو استفاده می‌شه. یه کد نمونه برای مسئله پیدا کردن بیشترین قیمت برای هر symbol توی بورس رو می بینید.### www.hadoopinrealworld ###
### Hive Queries To Compute Max Close Price By Stock Symbol ###

### CREATE EXTERNAL TABLE ###
hive&gt; CREATE EXTERNAL TABLE IF NOT EXISTS stocks_starterkit (
exch STRING,
symbol STRING,
ymd STRING,
price_open FLOAT,
price_high FLOAT,
price_low FLOAT,
price_close FLOAT,
volume INT,
price_adj_close FLOAT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY &#039;,&#039;
LOCATION &#039;/user/hirw/input/stocks&#039;;

### SELECT 100 RECORDS ###
hive&gt; SELECT * FROM stocks_starterkit
LIMIT 100;

### DESCRIBE TO GET MORE INFORMATION ABOUT TABLE ###
hive&gt; DESCRIBE FORMATTED stocks_starterkit;

### CALCULATE MAX CLOSING PRICE ###
hive&gt; SELECT symbol, max(price_close) max_close FROM stocks_starterkit
GROUP BY symbol;#تامام!# </description>
                <category>مهرداد سلیمی</category>
                <author>مهرداد سلیمی</author>
                <pubDate>Thu, 07 May 2020 13:24:39 +0430</pubDate>
            </item>
            </channel>
</rss>