Тестирование стандартного стохастического градиентного спуска
На данном этапе будет проводиться тестирование стандартного стохастического градиентного спуска. Процедура будет выполняться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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!