شبکه عصبي RBN(Radial Basis Network)
برای درک شبکه عصبي شعاعي مبنا اول به تحلیل شبکه های پرسپترونی می پردازیم. در پرسپترون تک و چند لایه (MLP)، ما فقط قابلیت تفکیک خطی داریم زیرا آنها از لایه های ورودی و خروجی تشکیل شده اند (تعدادي لایه های پنهان در MLP). برای مثال، توابع AND، OR به صورت خطی قابل جداسازی هستند و تابع XOR به صورت خطی قابل جداسازی نیست.
ما حداقل به یک لایه پنهان نیاز داریم تا تفکيک غیر خطی داشته باشيم. RBNN با تبدیل سیگنال ورودی را به شکل دیگری با اعمال داده های نگاشت داده شده به شبکه، تفکيک خطی آن را ممکن مي کند. RBNN از نظر ساختاری مشابه پرسپترون (MLP) است.
RBN متشکل از لایه ورودی، پنهان و خروجی است. RBN تنها مجاز به داشتن یک لایه پنهان است که به عنوان بردار ویژگی نيز شناخته مي شود. RBN ابعاد بردار ویژگی را افزایش می دهد که اين امر منجر به افزايش احتمال جداسازي خطي مي شود.
یک مسئله قابل تفکیک غیر خطی (مسئله طبقه بندی الگو) در فضای با ابعاد بالا بسیار قابل تفکیک است تا در فضای کم ابعاد.[قضیه Cover]
لايه هاي RBN
شبکههای تابع پایه ارتباطی (RBF) معماری اساساً متفاوتی نسبت به اکثر معماریهای شبکه عصبی دارند. بیشتر معماری شبکه های عصبی از لایه های زیادی تشکیل شده که ماهیت غیرخطی بودن آن با اعمال مکرر توابع فعال ساز غیرخطی محقق می شود. شبکه هاي RBF يک نوع شبکه پيشخور feed forward هست که تنها شامل سه لايه ي، ورودی، یک لایه پنهان و یک لایه خروجی مي باشند.
پروسه آموزش شبکه RBF به صورت مراحل زير مي باشد:
- لایه ورودی یک لایه محاسباتی نیست، فقط داده های ورودی را دریافت می کند و آن را به لایه مخفی ویژه شبکه RBF هدايت می کند.
- محاسبات در داخل لایه پنهان اتفاق می افتد با اکثر شبکه های عصبی بسیار متفاوت است و قدرت شبکه RBF از اینجا می آید.
- لایه خروجی وظایف پیش بینی مانند طبقه بندی یا رگرسیون را انجام می دهد.
لايه ورودي
لایه ورودی به سادگی داده ها را به لایه های پنهان ارسال می کند. در نتیجه، تعداد نورونها در لایه ورودی باید با ابعاد دادهها برابر باشد. در لایه های ورودی، مانند شبکه های عصبی مصنوعی استاندارد، هیچ محاسباتی انجام نمی شود. نورون های ورودی به طور کامل به نورون های پنهان متصل هستند و ورودی خود را به جلو هدايت می کنند.
لايه پنهان
لايه پنهان به طور مستقيم مقادير ورودي (ويژگي ها) را گرفته و آن را به نرون هاي لايه پنهان که عملگر غير خطي شبکه عصبي است، اعمال مي کند. نرون هاي لايه پنهان همان کرنل غير خطي گوسي بوده که وظيفه نگاشت داده هاي ورودي از فضاي غير خطي به فضاي خطي را دارد تا بتوان آنها را به صورت خطی تفکيک کرد. لایه پنهان ابعاد بالاتری نسبت به لایه ورودی دارد زیرا الگویی که به صورت خطی قابل تفکیک نیست اغلب باید به فضایی با ابعاد بالاتر نگاشت شود تا به صورت خطی تر قابل تفکیک باشد.
طبق قضیه کاور تعداد نورون ها در لایه پنهان باید بیشتر از تعداد نورون ورودی باشدولي تعداد نورونهای لایه پنهان باید کمتر یا برابر با تعداد نمونههای مجموعه آموزشی نيز باشد. وقتی تعداد نورونهای لایه پنهان با تعداد نمونههای مجموعه آموزشی برابر باشد، میتوان این مدل را تقریباً معادل یادگیرندههای کرنلي مانند رگرسیون کرنل و ماشینهای بردار پشتیبان کرنل در نظر گرفت.
همانطور که مي دانيد هر تابع گوسي با يک مرکز μ و مقدار واريانس σ تعريف مي شود.اصولا براي پيدا کردن اين دو پارامتر براي هر نرون لايه پنهان از روش خوشه بندي K_MEAN استفاده مي شود و بخش يادگيري بدون ناظر شبکه عصبي مي باشد.
هر نورون شباهت بین بردار ورودی و بردار الگو اولیه آن را محاسبه می کند. محاسبات در لایه پنهان را می توان به صورت ریاضی به صورت زیر نوشت:
لايه خروجي
اين لايه جز لايه خطي شبکه به حساب مي آيد. لایه خروجی از یک تابع فعال سازی خطی برای هر دو کار طبقه بندی یا رگرسیون استفاده می کند.پارامتر آموزشي بين لايه پنهان و لايه خروجي که همان وزن هاي شبکه مي باشند از طريق الگوريتم هاي گراديان نزولي، شبه معکوس، وينرهاف و ... محاسبه مي شود.
محاسبات در لایه خروجی درست مانند یک شبکه عصبی مصنوعی استاندارد انجام می شود که ترکیبی خطی بین بردار ورودی و بردار وزن است. محاسبات در لایه خروجی را می توان به صورت ریاضی به صورت زیر نوشت:
خروجي y به دست آمده را می توان برای هر دو طبقه بندی یا رگرسیون استفاده کرد، این به هدف و تابع هزينه بستگی دارد. در نهايت از کاربرد هاي اين شبکه عصبي مي توان به تقريب تابع، کلاسبندي داده ها و پيش بيني سري هاي زماني اشاره نمود.
شبکه RBN در متلب
با توجه به تئوري گفته شده (سايت مث ورک) انتظار مي رود در کد نوشته شده يک بخش الگوريتم kmean را شامل شده و مقدار ميانگين و واريانس تقريب زده شود. در مرحله بعد محاسبه فاصله داده هاي ورودي و مقدار ميانگين محاسبه شده، انجام مي شود بر روي آن تابع کرنل گوسي اعمال مي شود. در نهايت آموزش وزن هاي لايه اخر با روش هاي ذکر شده انجام مي شود.
خوشبختانه متلب با دو تابع newrb , newrbe تمام بخش هاي نامبرده شده را انجام مي دهد يک مثال از هلپ متلب در زير اشاره شده است.
X = -1:.1:1;
T = [-.9602 -.5770 -.0729 .3771 .6405 .6600 .4609 ...
.1336 -.2013 -.4344 -.5000 -.3930 -.1647 .0988 ...
.3072 .3960 .3449 .1816 -.0312 -.2189 -.3201];
eg = 0.02; % sum-squared error goal
sc = 1; % spread constant
net = newrb(X,T,eg,sc);
X = -1:.01:1;
Y = net(X);
plot(X,T,'+');
xlabel('Input');
hold on;
plot(X,Y);
hold off;
legend({'Target','Output'})
کد نوشته شده براي تقريب تابع مي باشد که نتيجه زير را بهمراه دارد :