شبکه های عصبی در برگیرنده شبکه ای از نورون ها هستند که هر سطر از این نورون ها، یک لایه (Layer) نامیده می شوند که هر شبکه عصبی می تواند چندین لایه داشته باشد که به آنها شبکه های عصبی چند لایه ای (Multi Layers) گفته می شود. همچنین ساختار (یا معماری) نورون های درون یک شبکه عصبی را، توپولوژی آن شبکه می گویند. شکل بالای همین نوشته، نمایی از یک شبکه عصبی ساده را نشان می دهد. در هر شبکه عصبی، سه لایه ورودی (Input Layer)، لایه پنهان (Hidden Layer) و لایه خروجی (Output Layer) هست.

لایه ورودی یا لایه آشکار

در شکل بالا، واپسین (آخرین) لایه، را لایه ورودی یا لایه آشکار (Visible Layer) می گویند و این همان لایه ای است که ورودی ها را از مجموعه داده ها دریافت می کند. در کشیدن و نمایش دادن یک شبکه عصبی، گاهن، یک لایه آشکار هست که به ازای هر ورودی یا هر ستون از مجموعه داده ها، یک نورون در آن هست. بنابراین در شکل زیر چون دو نورون (گره) در لایه ورودی یا آشکار هست، پس این شبکه دو ورودی x1 و x2 را دریافت می کند.

لایه پنهان و مفهوم Full Connected

پس از لایه ورودی، لایه پنهان هست که بر پایه نام آن، این لایه از دید ورودی پنهان است. خروجی لایه بیرونی به لایه پنهان پیوند خورده است. همانند شبکه عصبی که از هر نورون لایه ورودی، یک خروجی (یال) به همه گره های لایه پنهان، پیوند خورده باشد، آن را شبکه Full Connected می گویند. همچنین یادگیری ژرف یا یادگیری عمیق (Deep Learning) بدین مفهوم است که چندین لایه پنهان در شبکه عصبی باشد.

لایه خروجی

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

رگرسیون

یک مسئله رگرسیون، تک نورون خروجی داشته باشد و همچنین نورون لایه خروجی، هیچ تابع فعال سازی نداشته باشد.

طبقه بندی دودویی

در مسئله های طبقه بندی دودویی (Binary Classification)، تک نورون خروجی داشته باشیم که تابع فعال ساز غیر خطی مانند Sigmoid را به کار ببرد. تابع Sigmoid، ورودی را دریافت و سپس عددی میان صفر یا یک را برگشت می دهد. بنابراین در مسئله های طبقه بندی دودویی، تابع فعال ساز Sigmoid، برای پیش بینی شانس (احتمال) یکی از دو کلاس مسئله به کار می رود. در اینجا مفهوم دیگری به نام آستانه (Threshold) هست که شماره 0.5 است و اگر شماره برگشتی تابع Sigmoid کوچکتر از صفر باشد، پس پاسخ برای نمونه، Class A و اگر بزرگتر یا برابر 0.5 باشد، پس پاسخ Class B است.

طبقه بندی چندتایی

در مسئله های چند طبقه بندی (Multiple Classicication)، در لایه خروجی چندین نورون هست که هر نورون، برای یکی از کلاس درون مسئله است. برای نمونه مجموعه داده به نام Iris داریم که در آن چهار ویژگی (Feature) و سه کلاس (Class یا Label) هست شمارگان (تعداد) کلاس برابر سه نمونه گیاه گوناگون است. ویژگی ها اندازه برگ و ساقه و دیگر ویژگی های گیاهان هستند. بنابراین با داشتن این چهار ویژکی، می توانیم یکی از سه کلاس را پیش بینی کنیم. در طبقه بندی های چندتایی، باید تابع غیر خطی دیگری به نام Softmax را به کار ببریم. در اینجا نیز به هر کدام از نورون یک کلاس داده می شود و پاسخ یا همان کلاس پیش بینی شده، کلاس نورونی است که بزرگترین شماره را برگشت داده باشد.

تابع فعال سازی در شبکه های عصبی

طبقه بندی داده ها در یادگیری ماشین

بازگویی شبکه عصبی و کاربرد آن در بینایی ماشین

در این نوشته برای آنکه فهم بهتر و فراگیرتر (کاملتر) از شبکه های عصبی و لایه های آن داشته باشید، پس می خواهیم بایک نمونه کاربرد در بینایی ماشین (Machine Vision)، برای تشخیص شماره های دست نویس (Digit Handwritten)، کارکرد و ساختار و مفاهیم شبکه های عصبی را آموزش دهیم.

تشخیص شماره های دست نویس

تشخیص شماره دست نویس (Digit Handwritten) مسئله طبقه بندی چند کلاسی (Multiple Classification) است که در آن 9 کلاس (هر کلاس به ازای شماره های 0 تا 9) هست و می خواهیم مدلی را بسازیم که به کمک آن بتوانیم با فرستادن یک یا گروهی از چندین داده ورودی، شماره پیش بینی (Prediction) کنیم. بنابراین نخستین گام در پیاده سازی یک شبکه عصبی، داشتن یک مجموعه داده مناسب، استاندارد و با نمونه های (Samples) گوناگون برای هر کدام از کلاس های 0 تا 9 است.

در اینجا مجموعه داده، ماتریس تصویرهای شماره های دست نویس است که برای هر شماره، باید چندین و چند نمونه در مجموعه داده باشد. توجه کنید، در رایانه، تصویرها به ریختِ ماتریس های (آرایه های دو بعدی) WxH نگهداری می شوند که W اندازه پهنا (عرض) و H اندازه درازا (ارتفاع) تصویر است. در نوشته های پیش رو، چگونگی پیاده سازی این مسئله با فریم ورک Keras را خواهیم گفت و در آنجا خواهید دید که داده ها یا همان ماتریس های ورودی به شبکه عصبی،مارتیس نیست بلکه یک بردار (Vector) است، زیرا فریم ورک Keras ماتریس دریافت نمی کند بلکه ورودی آن باید یک بردار باشد.

شکل زیر نمایی از س لایه ورودی، پنهان و خروجی شبکه عصبی برای حل مسئله پیش بینی یا تشخیص شماره دست نویس را نشان می دهد. گفتیم که هر تصویر به ریخت ماتریس است که در شکل زیر بعدهای آن 28x28 (ماتریس مربعی) است. گفتیم ماتریس ورودی باید به یک بردار دگرگون (تبدیل) شود، پس ماتریس 28x28، به برداری با 784 درایه دگرگون شده است و از این رو، لایه ورودی برای این مسئله، باید دارای 784 نورون باشد.

در لایه پنهان شکل بالا، 64 نورون هست که هر کدام دارای تابع فعال سازی سیگموید (Sigmoid) هستند. در نوشته تابع فعال سازی  و همین گفتیم که تابع سیگموید یک تابع غیر خطی است که با توجه به ورودی، شماره ای میان صفر تا 1 برگشت می دهد و با توجه به مقدار آستانه 0.5، اگر شماره برگشتی کمتر از 0.5 باشد، پس کلاس A و اگر بزرگتر یا برابر با 0.5 باشد، پس کلاس B پاسخ خواهد بود و از این رو این تابع برای طبقه بندی دودویی کارآمد است. تابع غیر خطی دیگر، که برای طبقه بندی چندتایی بهتر است، Softmax نام دارد. به هر روی، برای مسئله های پیچیده مانند طبقه بندی دودویی یا چندتایی، باید تابع غیر خطی برای تابعع فعال ساز برگزیده (انتخاب) شود و تابع خطی رگرسیون نباید به کار گرفته شوند. در پایان لایه خروجی است که دارای 10 نورون به ازای هر کدام از کلاس های 0 تا 9 است.