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



 

На данном этапе будет проводиться тестирование стандартного стохастического градиентного спуска. Процедура будет выполняться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. Для стандартного варианта стохастического градиентного спуска и метода импульса достаточно малые значения позволяют им хорошо работать. С другой стороны, если скорость обучения очень мала, и происходит ее нормализация в адаптивных методах скорости обучения, то она становится еще меньше, что влияет на скорость сходимости. Это делает обучение очень медленным, и данные методы работают хуже, чем стандартный стохастический градиентный спуск с тем же числом итераций.


 


Дата добавления: 2018-04-05; просмотров: 329; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!