КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Алгоритм навчання Хебба
У 1949г. канадський психолог Д.Хебб опублікував книгу “Організація поведінки” (D.Hebb “Organizational Behaviour”), в якій він постулював правдоподібний механізм навчання на клітинному рівні в мозку.Основна ідея Хебба полягала у тому, що коли вхідний сигнал нейрона, що поступає через синаптитчні зв'язки, викликає спрацьовування нейрона, то ефективність такого входу в термінах його здатності сприяти спрацьовуванню нейрона в майбутньому повинна збільшуватися. Хебб припустив, що зміна ефективності повинна відбуватися саме в синапсі, який подає цей сигнал на вхід нейрона призначення. Пізніші дослідження підтвердили цю здогадку Хебба. Хоча останнім часом були відкриті інші механізми біологічного навчання на клітинному рівні, у визнання заслуг Хебба піонерського характеру цей закон навчання був названий в його честь.Закон навчання Хебба належить до класу законів навчання по змаганню [19]. Метод навчання Хебба полягає у зміні ваг за наступним правилом:
Де yi(n-1) - вихідне значення нейрона i шару (n-1), yj(n) - вихідне значення нейрона j шару n; wij(t) і wij(t-1) - ваговий коефіцієнт синапсу, що з'єднує ці нейрони, на ітераціях t і t-1 - коефіцієнт швидкості навчання a відповідно; Тут і далі, для спільності, під n мається на увазі довільний шар мережі. При навчанні за цим методом посилюються зв'язки між збудженими нейронами. Існує також і диференційний метод навчання Хебба.
Тут yi(n-1)(t) і yi(n-1)(t-1) - вихідне значення нейрона i шару n-1 відповідно на итерация t і t-1; yj(n)(t) і yj(n)(t-1) - те ж саме для нейрона j шару n. Як видно з формули (2), найсильніше навчаються синапси, що з'єднують нейрони ті, виходи яких найбільш динамічно змінилися у бік збільшення. На мал. 2.4. представлена архітектура нейронної мережі, що складається з нейронів, які називаються “лінійними асоціаторами”.
Рис. 2.4. Нейронна мережа з m елементів [19]. Повний алгоритм навчання із застосуванням вищенаведених формул буде виглядати так:
Хід виконання Завдання 1. Задання початкових значень вагових коефіцієнтів для вхідного і вихідного прошарків. В даній програмі ми будемо працювати з такими компонентами: TButton (закладка Standard) використовується для створення кнопок; TLabel (закладка Standard) використовується для створення напису (мітки) TSpinEdit (закладка Samples) використовується для створення текстового поля з стрілками; TSpeedButton (закладка Additional) використовується для формування пенелей управління; TStringGrid (закладка Additional) використовується для створення таблиць.
1. Для початку в розділі type прописуємо такі змінні: v= array of real; m = array of v; і в розділі змінних задаємо такі значення w:m; 2. Використовуємо компоненту StringGrid. 3. Використовуємо 3 кнопочки SpinEdit і біля кожної з цих кнопочок створюємо компонент Label з такими назвами: «Вхідний шар» біля компоненти SpinEdit1; «Вихідний шар» біля компоненти SpinEdit2; «Кількість вхідних масивів» біля компоненти SpinEdit3. 4. Використовуємо компоненту SpeedButton. Прописуємо текст програми для цієї кнопочки: var i,j:integer; begin StringGrid1.ColCount:=StrToInt(Edit1.Text)+1; StringGrid1.RowCount:= StrToInt(Edit2.Text)+1; for i:=1 to StringGrid1.ColCount do StringGrid1.cells[i,0]:='In'+IntToStr(i); for j:=1 to StringGrid1.ColCount do StringGrid1.Cells[0,j]:='Out'+ IntToStr(j); SetLength(w, StrToInt(Edit3.text)); for i:=0 to StrToInt(Edit3.Text)-1 do SetLength(w[i], StrToInt(Edit1.Text));
end; Використовуємо компоненту Button, називаємо її «початкові значення». Прописуємо текст для цієї кнопочки: var i,j:integer; begin Randomize; Button2.Enabled:=False; for i:=0 to StrToInt(Edit1.Text)-1 do for j:=0 to StrToInt(Edit2.Text)-1 do StringGrid1.Cells[i+1,j+1]:=IntToStr(i); Використовуємо ще одну компоненту Button, в якій прописуємо вихід з програми.
Завдання 2. Задати початковий розподіл з використанням синаптичних ваг з розподілом псевдо автоматичної функції. Завдання 3. Навчання та тестування нейронної мережі.
Дата добавления: 2015-05-26; Просмотров: 1909; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |