Градієнтні спуски: batch та stochastic gradient descents. Методика розробки програмного продукту для пошуку причин у змінах трендів у даних

де f i – функція, підрахована на i-му батчі, i вибирається випадковим чином;

Крок навчання є гіперпараметром; при занадто великих значеннях алгоритм навчання буде розходитися, при занадто маленьких - повільно.

Стохастичний градієнтний спуск із інерцією

У методі стохастичного градієнтного спуску нерідка ситуація, коли градієнт кожної ітерації змінюється великою мірою. Це відбувається через те, що функціонал обчислюється на різних даних, які можуть значно відрізнятися. Таку зміну можна згладити, якщо використовувати градієнти, обчислені на попередніх ітераціях і масштабовані гіперпараметр інерції μ:

(14)
(15)

Як нескладно здогадатися, гіперпараметр інерції має таку назву через те, що, подібно так званої ньютонової силі інерції, тобто. силі протидії, «опирається» змінам градієнта та пом'якшує зміни вагових коефіцієнтів протягом навчання. Такий алгоритм навчання називається стохастичним спуском градієнта з інерцією або SGDМ (stochastic gradient descent with momentum).

Метод адаптивного градієнта

Метод адаптивного градієнта (Adagrad - від англ. "adaptive gradient algorithm") заснований на ідеї масштабування. Він перемасштабує швидкість навчання для кожного параметра, що настроюється окремо, при цьому враховуючи історію всіх минулих градієнтів для цього параметра. І тому кожен елемент градієнта ділиться на квадратний корінь від суми квадратів попередніх відповідних елементів градієнта. Такий підхід ефективно зменшує швидкість навчання для тих вагових коефіцієнтів, які мають велике значення градієнта, а також з часом знижує швидкість навчання для всіх параметрів, оскільки сума квадратів неухильно збільшується для всіх параметрів кожної ітерації. При заданні нульового початкового масштабуючого параметра g = 0 формула для перерахунку вагових коефіцієнтів має вигляд (поділ виконується поелементно).

Стохастичний градієнт оцінюється за формулою:

тобто являє собою суму всіх випадкових векторів з вагами, рівними збільшенням мінімізованої функції даних випадкових напрямках.

Якщо взяти орти, тобто ця оцінка при як легко помітити з (3.3.22), дає точне значення градієнта.

Обидві описані оцінки градієнта можуть ефективно застосовуватися за будь-яких значень у тому числі і при що істотно відрізняє їх від детермінованого способу оцінювання (3.3.22), для якого суворо Ця обставина підтверджує, що детерміновані методи узагальнюються випадковими (див. кінець підрозділу 3.3.1 ). Наведемо ще приклад такого узагальнення.

Градієнтний пошук (3.3.21) є окремим випадком принаймні двох алгоритмів випадкового пошуку. Перший алгоритм:

де - як і одиничний випадковий -мірний вектор. Це відомий градієнтний алгоритм випадкового пошуку. Другий алгоритм має вигляд (3.3.23), але оцінка градієнта обчислюється за формулою

Як легко помітити, обидва алгоритми вироджуються, в градієнтний алгоритм пошуку (3.3.21).

Таким чином, випадковий пошук є природним розширенням, продовженням та узагальненням відомих регулярних методів пошуку.

Іншою особливістю випадкового пошуку, яка відкриває широкі можливості для його ефективного застосування, є використання оператора випадкового кроку як стохастична модель складних регулярних операторів пошуку напрямків пошуку в просторі оптимізованих параметрів

Так, алгоритм випадкового пошуку з лінійною тактикою (3.3.12) є стохастичною моделлю алгоритму якнайшвидшого спуску:

у якій випадковий вектор моделює оцінку градієнта. Цікаво, що подібну «оцінку» не можна навіть назвати грубою, оскільки її стохастичні властивості і не нагадують властивостей градієнта, що оцінюється. Однак, як показано вище, алгоритм випадкового пошуку не тільки працездатний, але в ряді випадків і ефективніший, ніж алгоритм якнайшвидшого спуску. Тут

оператор випадкового кроку замінює громіздкий оператор оцінки градієнта, наприклад, за формулою (3.3.22).

Наступною особливістю випадкового пошуку, що вигідно відрізняє його від регулярних методів, є глобальність, що виявляється насамперед у локальних алгоритмах випадкового пошуку, не призначених для відшукання глобального екстремуму. Так, алгоритм випадкового спуску може знайти глобальний екстремум, а регулярний алгоритм якнайшвидшого спуску в принципі не допускає такої можливості, оскільки він побудований для відшукання локального екстремуму.

Отже, глобальність алгоритмів випадкового пошуку є хіба що «премією» використання випадковості і чимось на кшталт «безкоштовного докладання» до алгоритму. Ця обставина особливо важлива при оптимізації об'єктів з невідомою структурою, коли немає повної впевненості в одноекстремальності завдання і можлива (хоч і не очікується) наявність кількох екстремумів. Використання у разі методів глобального пошуку було б нерозумною марнотратством. Методи локального випадкового пошуку тут найприйнятніші, оскільки вони ефективно вирішують локальне завдання і можуть у принципі вирішити глобальну, якщо така матиме місце. Це забезпечує випадковому пошуку своєрідну психологічну надійність, яку дуже цінують користувачі.

Алгоритмічна простота випадкового пошуку робить його привабливим насамперед для споживачів. Досвід показує, що відомі алгоритми випадкового пошуку є лише «канвой», на якій користувач у кожному конкретному випадку «вишиває візерунки» нових алгоритмів, що відображають не тільки його смаки та нахили (що не можна не враховувати), а й специфіку об'єкта, що оптимізується. Останнє створює сприятливу основу реалізації відомого принципу, що алгоритм має конструюватися «під об'єкт». Нарешті, алгоритмічна простота випадкового пошуку обумовлює простоту його апаратурної реалізації. Це не тільки дає можливість будувати прості, компактні та надійні оптимізатори з необмеженим числом параметрів, що оптимізуються, але і дозволяє досить просто організувати їх оптимальний синтез на ЕОМ.

Надіслати свою гарну роботу до бази знань просто. Використовуйте форму нижче

Студенти, аспіранти, молоді вчені, які використовують базу знань у своєму навчанні та роботі, будуть вам дуже вдячні.

Розміщено на http://www.allbest.ru/

Міністерство освіти та науки РФ

Федеральна державна автономна освітня установа

Вищої освіти

«КАЗАНСЬКИЙ (ПРИВОЛЖСЬКИЙ) ФЕДЕРАЛЬНИЙ УНІВЕРСИТЕТ»

ВИЩА ШКОЛА ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ ТА ІНФОРМАЦІЙНИХ СИСТЕМ

КУРСОВА РОБОТА

Стохастичний градієнт спуску. Варіанти реалізації

Вступ

Градієнтний спуск - метод знаходження локального екстремуму (мінімуму чи максимуму) функції за допомогою руху вздовж градієнта.

З усіх методів локальної оптимізації є найпростішим у реалізації. Має досить слабкі умови збіжності, та заодно швидкість збіжності досить мала.

Градієнтний спуск є популярним алгоритмом для широкого спектру моделей машинного навчання, у тому числі знаходження опорних векторів, логістичної регресії та графічних моделей. У поєднанні з алгоритмом зворотного поширення це стандартний алгоритм для навчання штучних нейронних мереж. Стохастичний градієнтний спуск конкурує з алгоритмом L-BFGS, що також широко використовується. Стохастичний градієнтний спуск був використаний принаймні в 1960 році для навчання лінійних регресійних моделей, спочатку під назвою Adaline.

Метою даної курсової є розгляд реалізації кількох варіантів стохастичного градієнтного спуску, подальше їх порівняння, з'ясування переваг і недоліків.

1. Стохастичний градієнтний спуск

Стохастичний градієнтний спуск відноситься до оптимізаційних алгоритмів і часто використовується для налаштування параметрів моделі машинного навчання.

При стандартному спуску градієнта для зміни параметрів моделі використовується градієнт. Градієнт зазвичай обчислюється як сума градієнтів, спричинених кожним елементом навчання. Вектор параметрів змінюється у напрямку антиградієнта із заданим кроком. Тому стандартному градієнтному спуску потрібен один прохід за навчальними даними, перш ніж він зможе змінювати параметри.

При стохастичному спуску градієнта значення градієнта приблизно обчислюється градієнтом функції вартості, обчисленому тільки на одному елементі навчання. Потім параметри змінюються пропорційно до наближеного градієнта. Таким чином, параметри моделі змінюються після кожного об'єкта навчання. Для великих масивів даних стохастичний спуск градієнта може дати значну перевагу в швидкості в порівнянні зі стандартним градієнтним спуском.

Між цими двома видами градієнтного спуску існує компроміс, який іноді називають «mini-batch». У цьому випадку градієнт апроксимується сумою для невеликої кількості навчальних зразків.

1.1 Передумови

Статистичні оцінки та машинне навчання розглядають завдання мінімізації функції, яка має вигляд:

де параметр, що зводить до мінімуму, має бути оцінений. Кожне доданок зазвичай асоціюється з i-ым спостереженням у наборі даних (використовується навчання).

У класичній статистиці проблема мінімізації сум виникає в методі найменших квадратів, а також у методі максимальної правдоподібності (для незалежних спостережень). Загальний клас оцінок, що є результатом мінімізації сум, називається M-оцінкою. Однак у статистиці вже давно визнано, що вимога навіть локальної мінімізації надто обмежена для деяких завдань оцінки максимальної правдоподібності. Таким чином, сучасні статистичні теоретики часто розглядають стаціонарні точки на функції правдоподібності (нуль похідної, функція оцінки та інші оціночні рівняння).

Проблема мінімізації сум виникає також у мінімізації емпіричного ризику. У цьому випадку це значення функції втрат при i-омнаборі, і емпіричний ризик.

При мінімізації функції стандартний (або «batch») градієнтний спуск виконуватиме наступні ітерації:

де це розмір кроку (іноді званий швидкістю навчання у машинному навчанні).

У багатьох випадках функція доданку має просту модель, що включає нескладні обчислення функції суми та суми градієнтів. Наприклад, у статистиці, експоненційні сімейства з одним параметром допускають економічні обчислення функції та градієнтів.

Проте, в інших випадках, оцінки сумарного градієнта можуть вимагати дорогу оцінку градієнтів від усіх функцій доданків. Коли навчальний набір величезний і немає простих формул, оцінка суми градієнтів стає дуже дорогою, оскільки оцінка градієнта вимагає оцінки всіх градієнтів функцій доданком. Для того, щоб заощадити на вартості обчислень на кожній ітерації, у стохастичному спуску градієнта вибіркою є підмножина функцій доданків на кожному кроці. Це дуже ефективно у разі великомасштабних завдань машинного навчання.

1.2 Ітераційний метод

У стохастичному градієнтному узвозі справжній градієнт приблизно виражається градієнтом на даному прикладі:

Оскільки алгоритм мчить через навчальний набір, він виконує вищеописані оновлення кожному за навчальним прикладом. Декілька проходів можуть бути зроблені по навчальній множині, поки алгоритм не сходиться. Дані можуть бути перемішані для кожного проходу, щоб запобігти циклам. Типові реалізації можуть використовувати адаптивну швидкість навчання те щоб алгоритм сходився.

У псевдокод стохастичний градієнтний спуск може бути представлений наступним чином:

1) Вибрати вихідний вектор параметра та швидкість навчання.

2) Повторювати доти, доки не буде приблизно отримано мінімальне:

2.1) Випадково перетасувати приклади у навчальному наборі.

2.2) Для i = 1,2, ..., n, робити:

Схожість стохастичного градієнтного спуску була проаналізована за допомогою теорії опуклої мінімізації та стохастичної апроксимації. Коли швидкість навчання зменшується з потрібною швидкістю, і за відносно слабких припущенні, стохастичний градієнтний спуск сходиться до глобального мінімуму, коли функція є опуклою чи псевдовыпуклой, інакше сходиться до локального мінімуму.

1.3 Варіанти реалізації

Безліч покращень було запропоновано та використано порівняно з основним методом стохастичного градієнтного спуску. Зокрема, у машинному навчанні необхідність встановлення швидкості навчання (розмір кроку) було визнано проблематичним.

Якщо задати цей параметр занадто великим, це може призвести до того, що алгоритм розходитися. Якщо навпаки, то алгоритм сходитиметься повільно.

Концептуально просте розширення стохастичного градієнтного узвозу зробити швидкість навчання як спадної функції, залежить від кількості ітерацій m.

Проробивши дану операцію, видно, що перші ітерації викликають великі зміни в параметрах, в той час як пізніші роблять більш тонке налаштування.

У рамках цієї роботи будуть розглянуті такі варіанти реалізації стохастичного градієнтного спуску:

1. 4 Momentum

Momentum, так само відомий як метод імпульсу, з'явився завдяки американському психологу Девіду Рамелхарту, а також на основі робіт Джеффрі Хінтонаї Роналда J Уїльям сапрививченні методу зворотного поширення. Стохастичний спуск градієнта з імпульсом запам'ятовує оновлення на кожній ітерації, і визначає наступне оновлення у вигляді лінійної комбінації градієнта і попереднього оновлення:

Що приводить до:

де параметр, який зводить до мінімуму, повинен бути оцінений і розмір кроку (іноді званий швидкістю навчання в машинному навчанні).

Назва імпульсу відбувається за аналогією з імпульсом у фізиці: вектор ваги. Думка про те, що переміщення матеріальної точки через простір параметрів, спричиняє прискорення завдяки силі, якою виступає градієнт втрат.

На відміну від класичного методу стохастичного спуску градієнта, він прагне тримати рух в одному напрямку, запобігаючи коливанням. Momentum був успішно застосований протягом кількох десятиліть.

1.5 AdaGrad

AdaGrad є модифікованим стохастичним градієнтним спуском з попереднім параметром швидкості навчання. Вперше опубліковано в 2011 році. Неформально, він збільшує швидкість навчання для більш розріджених параметрів і зменшує швидкість навчання менш розріджений з них. Ця стратегія часто підвищує ймовірність збіжності порівняно зі стандартним алгоритмом стохастичного градієнтного спуску в тих місцях, де дані нечисленні та рідкісні параметри є більш інформативними.

Приклади таких застосувань включають обробку природної мови та розпізнавання образів.

Він, як і раніше, має базу швидкості навчання, але множиться на елементи вектора, який є діагоналлю тензорного твору матриці.

де градієнт при ітерації m.

Діагональ задається у вигляді:

Вектор оновлюється після кожної ітерації. Формула для оновлення тепер виглядає так:

або записується у вигляді оновлення попереднього параметра,

Кожен підвищує масштабованість коефіцієнта швидкості навчання, який застосовується до одного параметру.

Оскільки знаменник є евклідовою нормою попередніх похідних, граничні значення параметрів оновлення стримують, у той час як параметри, які мали невеликі оновлення отримують більш високий рівень навчання.

В той час, як велася робота над проблемами опуклої оптимізації, AdaGrad був успішно використаний до завдань опуклої оптимізації.

1.6 RMSProp

RMSProp також є способом, у якому швидкість навчання адаптована для кожного параметра. Ідея полягає в тому, щоб розділити швидкість навчання для певної ваги на ковзну середню величин останніх градієнтів для цієї ваги. Таким чином, перша ковзна середня розраховується у вигляді квадрата:

де це параметр експонентного зважування, або параметр «забуття» («forgetting factor»)

Параметри оновлюються за допомогою формули:

RMSProp показав відмінну адаптацію швидкості навчання у різних додатках. RMSProp можна розглядати як узагальнення Rprop і він здатний працювати з таким варіантом градієнтного спуску як mini-batch, який протиставлений звичайному градієнтному спуску.

2. Реалізація стохастичного градієнтного спуску

На даному етапі буде виконано кілька варіантів стохастичного градієнтного у вигляді програмного коду мовою програмування Python.

2.1 Реалізація стандартного стохастичного градієнтного спуску

По-перше, потрібний набір даних. У цьому випадку створюється набір даних за допомогою бібліотеки Scikit-Learn:

градієнт стохастичний алгоритм навчання

від sklearn.datasets import make_moons

від sklearn.cross_validation import train_test_split

X, y = make_moons(n_samples=5000, random_state=42, noise=0.1)

X_train, X_test, y_train, y_test = train_test_split (X, y, random_state = 42)

Ось що ми отримали:

Малюнок 1 - Графічне представлення набору даних

Далі визначається модель нейронної мережі. Це буде три шари мережі (один прихований шар):

import numpy as np

def make_network(n_hidden=100):

model = dict(W1=np.random.randn(n_feature, n_hidden),

W2=np.random.randn(n_hidden, n_class)

Також визначається дві операції: пряме поширення та зворотне поширення. Спочатку зробимо перший варіант:

return np.exp(x) / np.exp(x).sum()

def forward(x, model):

h = x @ model["W1"]

prob = softmax(h @ model["W2"])

Схема повинна зробити ряд точок від входу до прихованого шару та потім до вихідного шару. У прихованому шарі також може застосовуватися нелінійність, так щоб нейронна мережа могла передбачити нелінійну межу рішення. Яскравим представником нелінійної функції сьогодні є ReLU.

ReLU визначається як f(x)=max(0,x), але замість того, щоб робити np.max(0, x), є спритний трюк реалізації: x = 0.

Після того, як було досягнуто вихідний шар, вихідні дані повинні бути такими, щоб розподіл ймовірностей Бернуллі був точним, тому вихідні дані розтискаються за допомогою функції SoftMax, щоб отримати заданий розподіл.

Наразі визначається друга операція. Зворотне поширення має такий вигляд:

def backward(model, xs, hs, errs):

dW2 = hs.T@errs

dh = errs @ model["W2"].T

dh = 0

return dict(W1=dW1, W2=dW2)

Створюється основа алгоритму. Виконується реалізація функції sgd. Виглядає вона так:

def sgd(model, X_train, y_train, batch_size):

for iter in range(n_iter):

print("Iteration()".format(iter))

X_train, y_train = shuffle (X_train, y_train)

for i in range(0, X_train.shape, batch_size):

X_train_mini = X_train

y_train_mini = y_train

model = sgd_step(model, X_train_mini, y_train_mini)

return model

Виконується реалізація функції sgd_step. Виглядає вона так:

def sgd_step(model, X_train, y_train):

grad = get_batch_grad(model, X_train, y_train)

model = model.copy()

for layer in grad:

model += learning_rate * grad

Виконується функція get_batch_grad. Виглядає вона так:

def get_batch_grad(model, X_train, y_train):

xs, hs, errs = , ,

для x, cls_idx в zip(X_train, y_train):

h, y_pred = forward(x, model)

y_true = np.zeros(n_class)

y_true = 1.

err = y_true - y_pred

errs.append(err)

return backward(model, np.array(xs), np.array(hs), np.array(errs))

У цій функції перебирається кожна точка даних у batch, потім відправляється в мережу і порівнюється результат істинної мітки стій, що була отримана навчальними даними. Помилка визначається різницею ймовірності істинної мітки та ймовірності нашого прогнозу.

2.2 Реалізація Momentum

Momentum працює за принципом фізичного закону руху, він проходить через локальні оптимуми (невеликі пагорби). Додавання імпульсу буде призводити до того, що збіжність алгоритму відбуватиметься швидше, оскільки відбувається накопичення швидкості та крок методу може бути більшим, ніж постійний крок у звичайному методі.

Враховуючи, що заготовок програми вже готовий, потрібно реалізувати лише основну функцію цього методу. Функція momentum наведена нижче:

def momentum(model, X_train, y_train, batch_size):

velocity = (k: np.zeros_like(v) for k, v in model.items())

gamma =.9

X_mini, y_mini = batches

for layer in grad:

velocity = gamma * velocity + alpha * grad

model += velocity

Включається нова змінна velocity, яка накопичуватиме імпульс для кожного параметра. Оновлення змінної відбуватиметься доданком alpha*grad на кожному новому кроці градієнтного спуску. Також відбувається невелике зменшення за допомогою коефіцієнта gamma значення змінної velocity, яка була обчислена на попередньому кроці.

2.3 Реалізація AdaGrad

До цього часу була ігнорована швидкість навчання alpha, оскільки вона була постійною. Проблема виникає в тому, що швидкість навчання впливає на всі параметри і не завжди за постійної швидкості навчання алгоритм працює ефективно. Вирішенням цієї проблеми може бути AdaGrad.

У разі використання AdaGrad оновлення параметрів відбувається точково, тому швидкість навчання є адаптивним параметром.

Виконується реалізація цього методу. Вся програма готова, потрібно лише змінити основну функцію. Називатися вона буде adagrad. Функція представлена ​​нижче:

def adagrad(model, X_train, y_train, batch_size):

batches = get_batch(X_train, y_train, batch_size)

for iter in range(1, n_iter + 1):

idx = np.random.randint(0, len(batches))

X_mini, y_mini = batches

grad = get_batch_grad(model, X_mini, y_mini)

cache[k] += grad[k]**2

return model

Можна помітити, що відбувається нормалізація швидкості навчання. Вона тепер може бути більшою або меншою залежно від того, як поводяться останні градієнти.

2.4 Реалізація RMSProp

Можна помітити, що в накопичувальній частині Adagrad значення cache[k] += grad[k]**2 монотонно зростає внаслідок суми і квадрата. Це може бути проблематичним, оскільки швидкість навчання монотонно зменшуватиметься до дуже крихітної швидкості навчання.

Для боротьби з цією проблемою, RMSProp розкладає минуле накопичене значення градієнта, щоб розглядалася лише частина останніх градієнтів. Тепер, замість того, щоб розглядати всі останні градієнти, RMSProp поводиться як ковзна середня.

Виконується реалізація цього методу. Вся програма готова, потрібно лише змінити основну функцію. Називатися вона будеrmsprop. Функція представлена ​​нижче:

def rmsprop(model, X_train, y_train, batch_size):

cache = (k: np.zeros_like(v) for k, v in model.items())

gamma =.9

batches = get_batch(X_train, y_train, batch_size)

for iter in range(1, n_iter + 1):

idx = np.random.randint(0, len(batches))

X_mini, y_mini = batches

grad = get_batch_grad(model, X_mini, y_mini)

cache[k] = gamma * cache[k] + (1 - gamma) * (grad[k]**2)

model [k] + = alpha * grad [k] / (np.sqrt (cache [k]) + eps)

Основна відмінність у обчисленні значення cache [k] і тепер накопичене значення градієнта не агресивно монотонно зростатиме.

3. Тестування та порівняння

У цьому розділі проводитиметься тестування реалізації та аналіз отриманих результатів.

3.1 Тестування стандартного стохастичного градієнтного спуску

На даному етапі проводитиметься тестування стандартного градієнтного стохастичного спуску. Процедура буде виконуватися 100 разів, а потім буде обчислено середнє значення точності.

n_experiment = 100

accs = np.zeros(n_experiment)

for k in range(n_experiment):

model = make_network()

model = sgd(model, X_train, y_train, minibatch_size)

prob = forward(x, model)

y = np.argmax(prob)

Виконавши цей код, я отримав такі значення:

Середня точність: 0.8765040000000001

Таким чином, можна дійти невтішного висновку, що у середньому точність виконання 87%.

3.2 Тестування Momentum

На даному етапі проводитиметься тестування стохастичного градієнтного спуску на основі реалізації Momentum. Процедура буде виконуватися 100 разів, а потім буде обчислено середнє значення точності.

Програму для тестування наведено нижче:

n_experiment = 100

accs = np.zeros(n_experiment)

for k in range(n_experiment):

model = make_network()

model = momentum(model, X_train, y_train, minibatch_size)

y_pred = np.zeros_like(y_test)

for i, x in enumerate(X_test):

prob = forward(x, model)

y = np.argmax(prob)

accs[k] = (y_pred == y_test).sum() / y_test.size

print("Середня точність: (), Отримане значення: ()".format(accs.mean(), accs.std()))

Середня точність:

1) 0.3152 при alpha = 0.5

2) 0.85546666666666666, при alpha = 1e-2

3) 0.86133333333333334, при alpha = 1e-5

Отже, можна дійти невтішного висновку, що з нижчих значеннях швидкості навчання точність виконання помітно вище.

3.3 Тестування AdaGrad

На даному етапі проводитиметься тестування стохастичного градієнтного спуску на основі реалізації AdaGrad. Процедура буде виконуватися 100 разів, а потім буде обчислено середнє значення точності.

Програму для тестування наведено нижче:

n_experiment = 100

accs = np.zeros(n_experiment)

for k in range(n_experiment):

model = make_network()

model = adagrad(model, X_train, y_train, minibatch_size)

y_pred = np.zeros_like(y_test)

for i, x in enumerate(X_test):

prob = forward(x, model)

y = np.argmax(prob)

accs[k] = (y_pred == y_test).sum() / y_test.size

print("Середня точність: (), Отримане значення: ()".format(accs.mean(), accs.std()))

Виконавши цей код, отримано такі значення:

Середня точність:

1) 0.87546666666666667, при alpha = 0.5

2) 0.87866666666666667, при alpha = 1e-2

3) 0.504 при alpha = 1e-5

Отже, можна дійти невтішного висновку, що з дуже низьких значеннях швидкості навчання точність виконання сильно зменшується.

3.4 Тестування RMSProp

На даному етапі проводитиметься тестування стохастичного градієнтного спуску на основі реалізації RMSProp. Процедура буде виконуватися 100 разів, а потім буде обчислено середнє значення точності.

Програму для тестування наведено нижче:

n_experiment = 100

accs = np.zeros(n_experiment)

for k in range(n_experiment):

model = make_network()

model = rmsprop(model, X_train, y_train, minibatch_size)

y_pred = np.zeros_like(y_test)

for i, x in enumerate(X_test):

prob = forward(x, model)

y = np.argmax(prob)

accs[k] = (y_pred == y_test).sum() / y_test.size

print("Середня точність: (), Отримане значення: ()".format(accs.mean(), accs.std()))

Виконавши цей код, отримано такі значення:

Середня точність:

1) 0.85066666666666667, при alpha = 0.5

2) 0.87279999999999999, при alpha = 1e-2

3) 0.306933333333333334, при alpha = 1e-5

Таким чином, можна зробити висновок, що при дуже низьких значеннях швидкості навчання точність виконання аналогічно AdaGrad сильно зменшується.

Висновок

З порівняльного аналізу зрозуміло, що з використанні великого значення швидкості навчання, методи з адаптивною швидкістю навчання виграють у методів із постійною швидкістю навчання.

Однак, при використанні невеликого значення швидкості навчання відбувається зворотне, наприклад, 1e-5. Для стандартного варіанта стохастичного градієнтного спуску та методу імпульсу досить малі значення дозволяють їм добре працювати. З іншого боку, якщо швидкість навчання дуже мала, і відбувається її нормалізація в адаптивних методах швидкості навчання, вона стає ще менше, що впливає на швидкість збіжності. Це робить навчання дуже повільним, і ці методи працюють гірше, ніж стандартний стохастичний градієнтний спуск з тим самим числом ітерацій.

Список використаних джерел

1. Machinelearning – Стохастичний градієнтний спуск

2. Штучний інтелект російською - Градієнтні спуски

3. Вікі підручник - Реалізація алгоритмів / Градієнтний спуск

4. Stanford University - Adaptive Subgradient Methods

5. Cambridge University Press - Online Algorithms and Stochastic Approximations

6. Sanjoy Dasgupta і David Mcallester - На важливість ініціативи та моменту в глибокій освіті [Електронний ресурс].

Розміщено на Allbest.ru

...

Подібні документи

    Необхідні умови екстремуму. Розробка машинного алгоритму та програми багатовимірної оптимізації для градієнтного методу з використанням методу рівномірного пошуку. Перевіряє необхідні та достатні умови екстремуму для знайденої точки мінімуму.

    курсова робота , доданий 25.09.2013

    Програмна реалізація програми для обчислення заданих функцій. Процедура пошуку мінімуму функції. Застосування методів Хука-Джівса та градієнтного спуску для вирішення задачі. Дослідження функції на околиці базисної точки, визначення її координат.

    контрольна робота , доданий 02.02.2014

    Оптимізація розв'язання задачі за допомогою алгоритму відпалу. Аналіз теорії оптимізації як цільової функції. Метод градієнтного спуску. Змінні та опис алгоритму відпалу. Подання завдання комівояжера через граф. Зведення завдання до змінних та розв'язання.

    курсова робота , доданий 21.05.2015

    Навчання найпростішої та багатошарової штучної нейронної мережі. Метод навчання перцептрону за принципом градієнтного спуску поверхнею помилки. Реалізація у програмному продукті NeuroPro 0.25. Використання алгоритму зворотного розповсюдження помилки.

    курсова робота , доданий 05.05.2015

    Розв'язання задачі на тему максимізації функцій багатьох змінних. Опис методу дихотомії, його застосування на вирішення нелінійних рівнянь. Розв'язання цієї задачі з використанням методу покоординатного спуску. Складання алгоритмів, лістинг програми.

    курсова робота , доданий 01.10.2009

    Ідентифікація об'єктів шляхом найменших квадратів. Аналіз коефіцієнтів парної, приватної та множинної кореляції. Побудова лінійної моделі та моделі з розподіленими параметрами. Ітераційний чисельний метод знаходження кореня (нуля) заданої функції.

    курсова робота , доданий 20.03.2014

    Основа технології використання програмного комплексу LabVIEW, переваги системи. Програмування, що базується на архітектурі потоків даних. Методи знаходження екстремуму. Використання методу Гауса-Зейделя для пошуку максимуму двовимірної функції.

    контрольна робота , доданий 18.03.2011

    Призначення та класифікація методів пошукової оптимізації. Ефективність пошукового способу. Методи пошуку нульового порядку: вихідні дані, умови, недоліки та застосування. Структура градієнтного пошуку. Основна ідея методу якнайшвидшого спуску.

    лекція, доданий 04.03.2009

    Постановка задачі та її формалізація. Пошук значень інтерполяційного багаточлена у точках x1 та x2. Пошук мінімуму функції F(x) на відрізку . Перевіряє умови збіжності методів. Тестування програмних модулів. Деталізована схема алгоритму.

    курсова робота , доданий 04.02.2011

    Численні методи у завданнях без обмежень. Схема способів спуску. Середовище редактора Visual Basic. Використання об'єктів ActiveX у формах. Блок-схема алгоритму моделювання. Завдання оптимізування детерменованих функцій із єдиною точкою екстремуму.