нерційності, t - номер поточної ітерації.
Таким чином, повний алгоритм навчання НС за допомогою процедури зворотного поширення будується так:
а) Подати на входи мережі один з можливих образів і в режимі звичайного функціонування НС, коли сигнали поширюються від входів до виходів, розрахувати значення останніх.
(11)
де M - число нейронів у шарі n - 1 з урахуванням нейрона з постійним вихідним станом +1, що задає зсув; yi (n - 1)=x ij (n) - i-ий вхід нейрона j шару n.
yj (n)=f (sj (n)), де f () - сигмоид (12) q (0)=I q, (13)
де I q - q-а компонента вектора вхідного образу.
б) Розрахувати d (N) для вихідного шару за формулою (8).
Розрахувати за формулою (9) або (10) зміни ваг D w (N) шару N.
в) Розрахувати за формулами (7) і (9) (або (7) і (10)) відповідно d (n) і D w (n) для всіх інших шарів, n=N -1, ... 1.
г) Скорегувати всі ваги в НС
(14)
д) Якщо помилка мережі істотна, перейти на крок 1. В іншому випадку - кінець.
Розглянута НС має кілька нюансів. По-перше, в процесі навчання може виникнути ситуація, коли великі позитивні або негативні значення вагових коефіцієнтів змістять робочу точку на сигмоид багатьох нейронів в область насичення. Малі величини похідною від логістичної функції приведуть у відповідність з (7) і (8) до зупинки навчання, що паралізує НС. По-друге, застосування методу градієнтного спуску не гарантує, що буде знайдений глобальний, а не локальний мінімум цільової функції. Ця проблема пов'язана ще з однією, а саме - з вибором величини швидкості навчання. Доказ збіжності навчання в процесі зворотного поширення засновано на похідних, тобто збільшення ваг і, отже, швидкість навчання повинні бути нескінченно малими, проте в цьому випадку навчання відбуватиметься неприйнятно повільно. Крім того, для виключення випадкових попадань в локальні мінімуми іноді, після того як значення вагових коефіцієнтів стабілізуються, h короткочасно сильно збільшують, щоб почати градієнтний спуск з нової точки. Якщо повторення цієї процедури кілька разів призведе алгоритм в один і той же стан НС, можна більш-менш впевнено сказати, що знайдений глобальний максимум, а не якийсь інший.
2. Фреймворк Yii і патерн MVC
2.1 Фреймворк Yii
Історія Yii розпочалася 1 січня 2008 року, як проект по виправленню деяких вад у фреймворку PRADO (PHP Rapid Application Development Object-oriented), що став в 2004 переможцем «Zend PHP 5 coding contest».
Фреймворк PRADO був спробою перенести ASP.NET на платформу PHP, включаючи ViewState, PostBacks, Page_Load і OnClick. Якщо подивитися вихідний код, то можна побачити що деякі шматки коду просто скопійовані з ASP.NET (наприклад, поділ на Rare Fields і Occasional Fields в класі Control з метою оптимізації по пам'яті, яке має сенс в .NET, але представляє сумнівну цінність в PHP ) .унаследовал від ASP.NET майже всі негативні сторони: повільно обробляв складні сторінки, мав круту криву навчання і був досить важкий в налаштуванні.
У певний момент автор (Qiang Xue) зрозумів, що PHP-фреймворк повинен бути побудований дещо по-іншому, і ось у жовтні 2008 року, після більш 10 місяців закритою розробки, вийшла перша альфа-версія. 3 грудня 2008 був випущений Yii 1.0.. В даний момент доступна beta версія Yii 2. [10]
Фреймворк Yii володіє наступними можливостями:
висока продуктивність щодо інших фреймворків написаних на PHP
парадигма Модель-вид-контролер;
інтерфейси DAO і ActiveRecord для роботи з базами даних (PDO);
підтримка інтернаціоналізації;
кешування сторінок і окремих фрагментів;
перехоплення і обробка помилок;
введення та валідація форм;
аутентифікація і авторизація;
використання AJAX і інтеграція з jQuery;
генерація базового PHP-коду для CRUD-операцій;
підтримка тем оформлення для їхньої легкої зміни;
можливість підключення сторонніх бібліотек;
міграції бази даних;
автоматичне тестування;
підтримка REST.
За результатами тестів phpmark Yii показав найкращу продуктивність.
Справедливості заради, необхідно відзначити, що продуктивність фреймворків в цих тестах оцінювалася на штучних при...