نورون مصنوعی
به اولین جلسه از آموزش یادگیری عمیق رایگان هوسم خوش آمدید. در این جلسه میخواهیم ساختار یک نورون مصنوعی را بررسی کنیم. همچنین، تابع فعالسازی یا activation function در شبکه عصبی را تعریف و بررسی میکنیم. در مورد بایاس در نورون صحبت خواهیم کرد و دلیل وجود بایاس در شبکه عصبی را بررسی خواهیم کرد. با هوسم همراه باشید…
ساختار نورون طبیعی
شبکههای عصبی عمیق با الهام از مغز انسان ساخته شدهاند. مغز انسان از واحدهای کوچکی به نام نورون تشکیل شده است. بنابراین قبل از اینکه به بحث اصلی وارد شویم، میخواهیم ساختار یک نورون طبیعی را بررسی کنیم. ساختار یک نورون طبیعی در شکل زیر نشان داده شدهاست:
همانطور که مشاهده میکنید، یک نورون طبیعی از چهار قسمت تشکیل شده است. قسمت اول دندریتها (Dendrite) هستند. دندریتها ورودیهای یک نورون هستند. یعنی سیگنالهای عصبی که دربردارنده اطلاعات هستند از طریق دندریتها وارد نورون میشوند. دندریتها ابعاد یکسانی ندارند. هرچقدر ضخامت یک دندریت بیشتر باشد، به اطلاعات کسب شده از آن اهمیت بیشتری داده میشود.
قسمت دوم از یک نورون و مغز متفکر آن هسته (nucleus) است. اطلاعاتی که از دندریتها دریافت شده است توسط هسته پردازش میشود. این اطلاعات پردازش شده از طریق یک کانال ارتباطی از هسته خارج میشوند. قسمت سوم نورون همین کانال ارتباطی است که به آن آکسون (axon) گفته میشود. وظیفه آکسونها انتقال اطلاعات از هسته به سیناپس است. قسمت آخر نورون همین سیناپس (Synapse) است. اطلاعاتی که توسط نورون پردازش شدهاند، از طریق سیناپسها از نورون خارج میشوند.
تا اینجا با ساختار نورون به صورت خلاصه آشنا شدیم. اما دو سوال مطرح میشود. یک اینکه اطلاعات از کجا به نورون وارد میشود؟ دوم اینکه اطلاعاتی که از نورون خارج میشوند کجا میروند؟ جواب هردو سوال این است که در مغز نورونها به هم متصل هستند. اتصال نورونها از طریق سیناپس و دندریت انجام میشود. دندریت یک نورون به سیناپس نورونی دیگر وصل میشود و سیناپس آن به دندریت یک نورون دیگر. پس نورونها اغلب اطلاعات را از یک نورون دریافت میکنند و سپس آن را به نورون دیگری میفرستند.
در توضیحات بالا جواب داده شده است.
ساختار نورون مصنوعی
نورورن مصنوعی با الهام از ساختار نورون طبیعی ساخته شده است. گفتیم در نورون طبیعی، اطلاعات از دندریتها دریافت میشوند. همه ورودیها در هسته جمع شده و در آنجا پردازش میشوند. در نهایت اطلاعات پردازش شده از طریق آکسون و سیناپسها از نورون خارج میشوند. ما همیشه دنبال الگوریتمی هستیم که مثل مغز کار کند یا حتی بهتر از آن باشد. به همین دلیل به تقلید از نورون طبیعی مغز انسان، نورون مصنوعی ساخته شد.
در تصویر بالا ساختار یک نورون طبیعی و مصنوعی نشان داده شده است. گفتیم در یک نورون طبیعی دندریتهایی وجود دارند که اطلاعات را وارد نورون میکنند. در نورون مصنوعی کار دندریتها را ورودیهای x1 تا xm انجام میدهند. این ورودیها همانند دندریتها ورودی را دریافت میکنند. تعداد این ورودیها هم میتواند یک ورودی یا بیشتر باشد.
گفتیم ضخامت دندریتها با هم متفاوت است. هرچه ضخامت یک دندریت بیشتر باشد یعنی اطلاعاتی که آن شاخه میگیرد مهمتر است. دندریتهای ضخیم مثل یک خبرنگار گردنکلفت هستند! هر خبری که این خبرنگار تهیه کند مورد توجه قرار میگیرد. این مسئله در نورون مصنوعی از طریق وزنها انجام میشود. درواقع، وزنهای w1 تا wm معادل با همان ضخامت دندریت هستند. هرچقدر مقدار هرکدام از این وزنها بیشتر باشد، به ورودی متناظر با آن اهمیت بیشتری داده خواهد شد.
پس از دریافت و وزندهی ورودیها اطلاعات در هسته نورون طبیعی پردازش میشوند. در یک نورون مصنوعی، ورودیها به سادهترین شکل ممکن پردازش میشوند. در یک نورون مصنوعی ورودیها با هم جمع خواهند شد. اگر به شکل دقیقتری بخواهیم بیان کنیم، ورودیها به صورت وزندار با هم جمع میشوند. یعنی اینکه همه ورودیها در یک وزنی ضرب شده و سپس با هم جمع شدهاند.
بخش آخر در نورون طبیعی آکسون و سیناپسها هستند. در نورون مصنوعی نیز بعد از جمع وزندار، اطلاعات از نورون از طریق y خارج خواهد شد. یعنی آکسون و سیناپسها معادل با y در نورون مصنوعی هستند. به این ترتیب یک نورون طبیعی شبیهسازی شد! این نورون مصنوعی، سادهترین شکلِ نورون طبیعی را نشان میدهد. در بخشهای آینده اجزای کوچکی به این نورون اضافه خواهیم کرد تا بتوانیم پیچیدهترش کنیم!
مدل ریاضی نورون
در بخش قبلی یک نورون مصنوعی ساده را بررسی کردیم. در این بخش میخواهیم نحوه نمایش ریاضی این نورون مصنوعی را بررسی کنیم. بیایید یک بار دیگر ساختار نورون مصنوعی را مرور کنیم:
خب به راحتی میتوانیم ساختار این نورون را به شکل زیر بنویسیم:
یا اینکه میتوانیم این نمایش را کمی پیچیدهتر و البته خلاصهتر کنیم. به جای نوشتن تک تک عبارات میتوانیم از نماد سیگما استفاده کنیم:
حالا اگر بخواهیم نمایش برداری این رابطه را بنویسیم چه باید کنیم؟ میتوانید رابطه بالا را به صورت برداری بنویسید؟ نمایش برداری رابطه بالا به شکل زیر است:
تابع فعالسازی
در بخش قبل ما ساختاری برای یک نورون مصنوعی معرفی کردیم. خروجی نورونی که ما معرفی کردیم برابر است با حاصل جمع وزندار ورودیها به آن نورون. نورون مصنوعی که ما تعریف کردیم خطی کار میکند. مثل خط y = ax درست است؟ یعنی اینکه مثلا اگر دادهای از دو کلاس داشته باشیم، نورون ما میتواند با یک خط آن دو کلاس را از هم جدا کند. مثلا در تصویر زیر، کلاسها به سادگی توسط یک خط از هم جدا شدهاند:
در تصویر بالا، دایرههای قرمز و سبز نماینده دو کلاس هستند. خط آبی رنگ هم مرزی است که نورون مصنوعی برای جدا کردن این دو کلاس کشیده است! خیلی هم تمیز و دقیق این کار را انجام داده است. اما آیا همیشه دو کلاسِ متمایز، انقدر از هم دور هستند؟ یعنی جداسازی دو کلاس انقدر راحت است؟ واقعیت این است که نمونههای کلاسهای متفاوت اغلب در هم تنیده هستند. به گونهای که تفکیک آنها با یک خط میسر نیست! مثلا به تصویر زیر دقت کنید:
میبینید که نورون مصنوعی تمام تلاشش را برای جداسازی نمونههای سبز از قرمز کرده است. اما این کار را با خطای زیادی انجام داده است. اگر از شما بخواهیم که با کشیدن خطی فرضی این دو کلاس را از هم جدا کنید چه میکشید؟ احتمالا به شکل زیر این کار را انجام خواهید داد:
شما به راحتی و با سرعت تمام با کشیدن یک منحنی به شکل بالا توانستید این دو کلاس را از هم جدا کنید. این دقیقا چیزی است که ما از یک شبکه عصبی هم انتظار داریم. مگر نگفتیم الگوی طراحی شبکههای عصبی مصنوعی، مغز انسان است؟ پس ما انتظار داریم که نورون مصنوعی که طراحی میکنیم، حداقل روی کاغذ بتواند دادههای شکل بالا را تفکیک کند! در حال حاضر این امکان در آن نورونی که ما گفتیم وجود ندارد. نیاز است یک عضو جدیدی به این نورون اضافه شود تا خاصیت غیرخطی به آن اضافه شود. این عضو جدید تابع فعالساز یا activation function است.
تابع فعالساز در شبکه عصبی بعد از بلوک جمع در نورون مصنوعی قرار میگیرد. یعنی پس از جمع ورودیها، نتیجه از یک تابع فعالساز عبور میکند. اما این تابع فعالساز چه تابعی هست؟ توابع متعددی به عنوان تابع فعالساز معرفی شدهاند که در این جلسه بهصورت مختصر بررسی خواهند شد. با هوسم همراه باشید …
تابع فعالساز خطی
تابع فعالساز خطی ورودی را به خودش نگاشت میکند. در واقع یک تابع فعالساز خطی، هیچ تغییری روی ورودی ایجاد نمیکند! این تابع از دو طرف بیکران است و خاصیت غیرخطی در نورون مصنوعی ایجاد نمیکند! پس تابع فعالساز خطی مطلوب ما نیست. به همین دلیل توابع فعالساز غیرخطی به وجود آمدند. در بخش بعدی چند تابع فعالساز غیرخطی را بررسی خواهیم کرد.
توابع فعالساز غیرخطی
تابع فعالساز سیگموید (sigmoid) یکی از توابع فعالساز غیرخطی و پراستفاده است. سیگموید یک تابع فعالساز کراندار، اکیدا صعودی و همواره مثبت است. این تابع ورودیهای خود را به بازهی صفر و یک نگاشت میکند.
تابع فعالساز تانژانت (tangent)، یکی دیگر از توابع غیرخطی است. این تابع نیز کراندار و اکیدا صعودی است. تابع تانژانت، ورودیهای خود را به بازه 1- و 1+ نگاشت میکند.
در دو تابع سیگموید و تانژانت دیدیم که خروجیها محدود به یک بازه شدند. یکی دیگر از ویژگیهایی که یک تابع فعالساز باید داشته باشد همین است. یعنی باید بتواند مقدار خروجی را محدود کند! اما چرا؟ فرض کنید که ما یک نورون ساده داشته باشیم که 10 ورودی داشته باشد. مقدار همه ورودیها هم 10 باشد. خروجی این نورون بدون تابع فعالساز چه خواهد بود؟ جواب 100 است. میبینید که خروجی بسیار بزرگ شد. و اگر محدودیتی بر خروجیهای نورون اعمال نشود، با افزایش تعداد ورودیها یا با افزایش تعداد نورونها همچنان این مقادیر بزرگ و بزرگتر خواهند شد. بنابراین یکی دیگر از خصوصیاتی که یک تابع فعالساز باید داشته باشد، محدود کردن خروجی است.
یکی از پر استفادهترین توابع، تابع فعالساز ReLU است. ReLU مخفف عبارت Rectified Linear Unit است. این تابع از یک طرف بیکران و صعودی است. تابع ReLU ورودی های کوچکتر از صفر را به صفر و ورودیهای بزرگتر از صفر را به خودشان نگاشت میکند.
خب حالا یک سوال مهم پیش میآید. چطور ReLU پراستفاده است در حالی که گفتیم یکی از خصوصیات مثبت یک تابع فعالساز کراندار بودن آن است؟ ReLU یک خصوصیت مهم دارد و آن اسپارس بودن است. در خروجی نورونی که ReLU فعالساز آن باشد، ممکن است تعداد زیادی صفر وجود داشته باشد. این به معنای اسپارس بودن خروجی است که ویژگی مثبتی تلقی میشود. به همین خاطر به منظور استفاده از ReLU ترفند دیگری برای محدود کردن خروجی استفاده میشود. قبل از اینکه دادهها به ReLU داده شوند، با استفاده از نرمالیزاسیون، مقدار دادهها محدود میشود. به این ترتیب اگر داده نرمال شده را به ReLU بدهیم، خروجی محدود خواهد بود!
روابط ریاضی با تابع فعالساز
روابط ریاضی که برای یک نورون تعریف کردیم با اضافه شدن تابع فعالساز تغییر میکنند. اگر تابع فعالساز را f بنامیم، در این صورت روابطی که بر نورون مصنوعی حاکم هستند به شکل زیر تغییر خواهند کرد:
که این رابطه را میتوان به شکل زیر خلاصه کرد:
رابطه ماتریسی نورون مصنوعی نیز به شکل زیر خواهد بود:
بایاس در نورون مصنوعی
علاوه بر تابع فعالسازی، پارامتر دیگری نیز به نورون مصنوعی اضافه میشود و آن بایاس نام دارد. بایاس یک عدد ثابت است که مستقیم به تابع فعالسازی وارد میشود. بایاس دو خاصیت دارد که در ادامه بررسی میشود. خاصیت اول بایاس آن است که صفر شدن خروجی را سخت میکند! فرض کنید تمام ورودیهای یک نورون صفر باشد. آنگاه به راحتی خروجی صفر میشود و این صفر در شبکه عصبی منتشر میشود. در این صورت یادگیری شبکه ممکن است با مشکل مواجه شود. بایاس از صفر شدن خروجی به این شکل جلوگیری میکند.
خاصیت دوم بایاس، دادن انعطاف به تابع فعالسازی است. با اضافه شدن بایاس، تابع فعالسازی میتواند جابجا شود! به این ترتیب در انجام بهتر یادگیری کمک خواهد کرد. به تصویر زیر دقت کنید. در این تصویر تابع فعالساز ReLU بدون بایاس و با بایاس با هم مقایسه شدهاند. مشاهده میکنید که با اضافه شدن بایاس، تابع ReLU روی محور x حرکت میکند. و این یعنی انعطافپذیری بیشتر…
روابط ریاضی با بایاس
بعد از اضافه کردن بایاس، روابط ریاضی به شکل زیر تغییر خواهد کرد:
اما این طرز نوشتن بایاس زیاد دلچسب نیست. چون مثلا نظم نمایش خلاصه با سیگما یا نمایش برداری بهم خورده است. به همین خاطر فرض کردهایم B یک وزن است که ورودی آن (x0) برابر با 1 هست. همچنین، برای هماهنگی بیشتر با سایر وزنها، بجای B از w0 استفاده کردهایم. به این ترتیب خواهیم داشت:
بهاین ترتیب، توانستیم، بایاس را با سایر وزنها ترکیب کنیم تا نمایش بهتری از نورون را شاهد باشیم.
نمایش کلی نورون مصنوعی
در این بخش میخواهیم یک نمایش کلی از نورونی که طراحی شد، نمایش دهیم. یعنی یک نمایش خلاصه از نورون مصنوعی داشته باشیم. در جلسات بعدی خواهیم دید که ما با اتصال نورونها به یکدیگر، شبکههای عصبی بزرگ خواهیم ساخت. بنابراین داشتن نمایش خلاصه و همچنین یک فرمول کلی، در آینده به نمایش و فهم شبکهها کمک خواهد کرد. برای نمایش، بلوک جمعکننده و تابع فعالساز با هم ادغام شده و شکل زیر نمایش کلی نورون خواهد بود:
نمایش ریاضی نیز به شکل زیر خلاصه میشود. که در آن W، بردار وزنها، X بردار ورودیها و W0 بایاس را نشان میدهند.
این دو نمایش در آینده استفاده خواهند شد. پس سعی کنید آنها را به خاطر بسپارید😉.
منابع آموزش یادگیری عمیق
در فهرست زیر، تعدادی از منابع خوب آموزش یادگیری عمیق را معرفی کردهایم.
در این پست ساختار نورون مصنوعی در شبکه عصبی را بررسی کردیم. امیدوارم این آموزش مورد توجه شما قرار گرفته باشد. نظرات و سوالات خود را پایین 👇 برایمان کامنت کنید. حتما سوالات شما پاسخ داده خواهد شد.
مطالب زیر را حتما مطالعه کنید
شبکه عصبی mlp
شبکه ترنسفورمر
مدل MobileLLM
یادگیری عمیق چیست
آموزش یادگیری عمیق رایگان
شبکه عصبی کانولوشن
71 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
فایلهای پی دی اف این ها رو هم مثل جلسه 00 قرار بدهید. ممنون.
ویدو آموزشی نداره؟
سلام
شما میتونید به دوره پایتورچ رایگان هوسم مراجعه کنید که در مورد موضوع موردنظر شما صحبت شده.
از این دوره بهتر و جامعتر، دوره یادگیری عمیق هوسم هست که از صفر تا صد این موضوع توضیح داده شده.
خیلی عالی ممنونم.
سپاس 🌹
با عرض سلام و خسته نباشید. در قسمت روابط ریاضی در بایاس در یکی از فرمول های شرط ایکس صفر برابر 0 گذاشتین ولی جسارتا نباید 1 میزاشتید؟؟!
ممنونم از مطالبتون
سلام
بله، حق با شماست.
ممنون
مثل همیشه، عالی و روان
ممنونم
آیا در مورد شبکه های چند لایه هم توضیح دادین ؟
ممنون بابت پیامتون 😊
خیلی عالی و روان توضیح دادین.متشکرم
سپاس 🌹
دو تا دوره گذروندم، ولی اینقدر ساده و شفاف برام توضیح نداده شده بود.
این یک صفحه، کلی درک صحیح بهم داد.
عالی بود
سپاس بابت کامنت 😊
براتون آرزوی موفقیت داریم 🌹
سلام ، خیلی ساده و همه فهم توضیح دادین ، از شما یاد گرفتم ، خیلی ممنون هستم .
سلام
خوشحالیم که براتون مفید بوده 😊🌹
واقعا خیلی عالی توضیح دادین .ممنون
توضیحاتتون خیلی مفید بود .
سلام
سپاس از آموزش بسیار شفاف و خوبتون
اگر امکانش هست ممنون میشم فایل PDF این آموزش رو هم قرار بدین و اگر امکانش هست محبت کنید برام ایمیلش کنید.
سپاس
سلام
سپاس 🌹
سعی می کنیم پی دی اف هم اضافه کنیم 🙏
سلام
آموزشتون خیلی عالیه فقط pdf این جلسات رو نمیذارین؟
سلام
سپاس 🌹
سعی می کنیم اضافه کنیم، ممنون از پیشنهادتون 🙏
خیلیی خیلیی عالی و مفید دستتون درد نکنهههه
سپاس 😊🌹
آقا دهنتون نسوزه
مواظب باشید.
آخه میخوام بگم دمتون خیلی خیلی گرمه.
فقط چرا مقدار x0 =0 شد توی تبدیل بایاس به وزن.
شاد باشید.
سپاس 😄
x0=0 نشد، x0=1 شد. هدفمون این بود که بایاس رو ببریم تو رابطه wx، به خاطر همین فرض کردیم که x0=1 و w0=b باشه. اینطوری به جای اینکه بنویسیم: y=b + wx میتونیم بنویسیم y=wx. در واقع هدفمون فقط ساده کردن نمایش هست.
بسیار مفیییییید
ممنون
سلام خیلی سپاسگزارم خیلی عالی بود
سلام
خیلی عالی بود
سلام،
سپاس 😊
فوق العاده بود
خسته نباشید❤️
با سلام و تشکر فراوان بابت مطالب مفیدی که تالیف نموده اید.
سلام،
ممنون 🌹🙏
عالی بود
با سلام
لطفا در متن تابع فالساز تانژانت را به تانژانت هایپربولیک (هیپربولیک) تغییر دهید ، چون این تابع تانژانت هایپربولیک می باشد (tanh)
(x)tan(x) -> tanh
با سپاس
خیلی عالی. ممنون.
با سلام و تشکر از آموزش قابل فهم
در شکلی که بایاس را وارد معادله کردید، مقدار ایکس صفر را برابر صفر گذاشتید در حالیکه در شکل ماتریسی آن، مقدار ایکس صفر برابر یک درج شده است.
باتشکر و احترام
سلام
بسیار عالی
سلام ممنون از مطالب مفیدتون. آیا برای توابع زیان هم پستی موجوده؟ من پیدا نکردم توی سایت
متشکرم🌹
با تشکر از مطالب بسیار مفیدتان
در شکل 11: با اضافه شدن بایاس نمودار باید به اندازه b واحد به سمت چپ منقل شود نه راست.
سلام مهدی عزیز،
بایاس میتونه عددی مثبت یا منفی باشه. بسته به علامت بایاس، نمودار به سمت راست یا چپ میره. پس شکل 11 برای یک بایاس منفی میتونه درست باشه. ما هم این جابجایی نمودار رو به صورت نمادین نشون دادیم.
ممنون 🌹🙏
بسیارعالی بود لذت بردم.
ممنون علی عزیز 🌹🙏
سلام ممنون خیلی مفید بود
سلام فرزاد عزیز،
سپاس 🌹🙏
سلام
بابت مطالب خوبتون ممنونم
میخواستم خواهش کنم در مورد مکانیزم توجه هم مطلب بذارید لطفا
سلام
ممنون از شما بابت کامنت 🌹🙏
پیشنهاد میکنیم حتما نگاهی به دوره بینایی کامپیوتر حرفهای هوسم بندازید. در این دوره خیلی درمورد اتنشن بهخصوص ترنسفورمر صحبت شده.
منظورم رایگان بود تا با اون هزینه
بسیارشیوا و عالی،خیلی متشکرم از زحمات شما
سپاس 🌹🙏
سلام
بسیاااار روان ساده و قابل فهم و جالب!
من بعداز ۲ ترم گذراندن شبکه عصبی، تازه امروز یه چیزی ازش فهمیدم!
و خیلی علاقمند شدم
ممنون از شیوه جالب معرفی تابع فعالساز و بایاس
سلام
خیلی هم عالی که علاقهمند شدید. 👌😊
سپاس 🌹🙏
بسیار عالی. ممنونم ازتون
ممنون از شما 🌹🙏
سلام. اولین سایتی هستین که دیدم آموزش رایگان تو حوزه دیپ لرنینگ تالیف کردین و بدون کپی کردن از جای دیگه با زبان شیوا و عکس های با مفهوم اونو توضیح دادین. با سرچ کردن “یادگیری عمیق” تو گوگل متاسفانه سایتتون تو چند صفحه اول نبود و من با سرچ کردن “توضیح پرسپترون” به سایتتون رسیدم. اگر ممکنه روی سئو سایتتون کار کنید که بیاد بالا و بقیه هم استفاده کنن
خیلی ممنونم از وقتی که میزارین
سلام
از شما بابت این کامنت دلگرمکننده و پیشنهاد خوب ممنونیم.
سپاس 🌹🙏
عالی
سلام
سپاس 🌹🙏
تو فرمول چهارم از پایین صفحه، x0 رو به اشتباه مساوی 0 نوشتین که باید مساوی 1 باشه
سلام
بله حق با شماست. اصلاح میکنیم.
سپاس 🌹🙏
سلام
ممنون از توضیحاتتون . بسیار روان و ساده بود
موفق باشید
سلام
سپاس 🌹🙏
با سلام.بسیار سپاسگزارم از زحماتتون. برای تصحیح متن فقط x0=1 است.
سلام
بله، درست میفرمایید. اصلاح میکنیم.
ممنون از شما 🌹🙏
بسیااااار عاالی چقدر ساده و قابل فهم واقعااا ممنون و سپاسگزارم
سلام ، ممنون از شما عالی بود و البته مختصر و پاینده باشید
سلام
سپاس 🌹🙏
خیلی خوب بود ممنون از شما.لطفا اگه میشه توی یه پست جدا در مورد بایاس و واریانس کامل توضیح بدید.ممنون
سلام
سپاس 🌹🙏
موضوع مهمی هست و لازمه که یک پست جدا براش بنویسیم.
ممنون بابت این پیشنهاد خوب 🙏
بسیار ممنونم برای توضیحات کاملی که بصورت ساده و بدون تکلف بیان شده بود
سلام
سپاس 🌹