Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

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




 

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

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

 

batch_size = 1

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)

y_pred = np.zeros_like(y_test)

for i, x in enumerate(X_test):

prob = forward(x, model)

   y = np.argmax(prob)

   y_pred[i] = y

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

print('Средняя точность: {}, Полученное значение: {}'.format(accs.mean(), accs.std()))

 

Выполнив данный код, я получил следующие значения:

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

Таким образом, можно сделать вывод, что в среднем точность выполнения 87%.



Тестирование Momentum

 

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

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

 

n_iter = 100

batch_size = 1

eps = 1e-8

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)

   y_pred[i] = y

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

print('Средняя точность: {}, Полученное значение: {}'.format(accs.mean(), accs.std()))

 

Выполнив данный код, получены следующие значения:

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

1) 0.3152, при alpha = 0.5

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

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

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



Тестирование AdaGrad

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

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

 

n_iter = 100

batch_size = 1

eps = 1e-8

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)

   y_pred[i] = y

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

print('Средняя точность: {}, Полученное значение: {}'.format(accs.mean(), accs.std()))

 

Выполнив данный код, получены следующие значения:

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

1) 0.8754666666666667, при alpha = 0.5

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

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

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



Тестирование RMSProp

 

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

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

 

n_iter = 100

batch_size = 1

eps = 1e-8

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)

   y_pred[i] = y

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

print('Средняя точность: {}, Полученное значение: {}'.format(accs.mean(), accs.std()))

 

Выполнив данный код, получены следующие значения:

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

1) 0.8506666666666667, при alpha = 0.5

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

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

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





ЗАКЛЮЧЕНИЕ

 

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

 

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


 


СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

 

1. Machinelearning – Стохастический градиентный спуск [Электронный ресурс]. - http://www.machinelearning.ru/wiki/index.php?title=Стохастический_градиентный_спуск

2. Искусственный интеллект по-русски – Градиентные спуски [Электронный ресурс]. - https://airussian.wordpress.com/2012/10/12/градиентные-спуски-batch-и-stochastic-gradient-descents/

3. Вики учебник - Реализации алгоритмов/Градиентный спуск [Электронный ресурс]. - https://ru.wikibooks.org/wiki/Реализации_алгоритмов/Градиентный_спуск

4. Stanford University – Adaptive Subgradient Methods[Электронный ресурс]. - http://cs.stanford.edu/~ppasupat/a9online/1107.html

5. Cambridge University Press - Online Algorithms and Stochastic Approximations [Электронный ресурс]. - http://leon.bottou.org/papers/bottou-98x

6. Sanjoy Dasgupta and David Mcallester - On the importance of initialization and momentum in deep learning [Электронный ресурс]. - http://www.cs.utoronto.ca/~ilya/pubs/2013/1051_2.pdf

 










Последнее изменение этой страницы: 2018-04-12; просмотров: 168.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...