Когда дело доходит до машинного обучения и способности компьютеров изучать и распознавать закономерности — подобно тому, что делает наш мозг (именно поэтому поля ML/AI так связаны с нейронаукой), мы хотим иметь возможность повысить точность и эффективность нашей работы. алгоритм предсказания. Это делается для того, чтобы прогноз становился все лучше и лучше, приближаясь к целевому значению, к которому мы стремимся.

Давайте сравним эту ситуацию с реальным жизненным сценарием, более связанным с человеком. Предположим, вы готовитесь к экзамену. У вас есть установленный план обучения, и вы следовали пунктам своего плана, чтобы подготовиться. К сожалению, вы не слишком довольны своим результатом, так как результат экзамена далеко не соответствует целевому баллу, которого вы хотели достичь. Итак, чем вы делаете? Что ж, вы хотели бы внести некоторые коррективы в свой учебный план, чтобы подготовиться к следующему экзамену эффективно.

Вы хотели бы внести коррективы, основываясь на том, над чем, по вашему мнению, вам следовало бы поработать больше, например:

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

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

Именно в этом заключается оптимизация машинного обучения. Речь идет о внесении этих небольших корректировок, чтобы увидеть, улучшается ли точность алгоритма. Алгоритм хочет максимально приблизиться к целевому значению, и методы оптимизации могут позволить нам выбирать и корректировать наши параметры нашей модели машинного обучения (также известные как веса), поэтому алгоритм выполняет лучше в следующий раз.

Один из самых известных методов оптимизации, используемых сегодня, называется Стохастический градиентный спуск (сокращенно SGD). Как работает этот метод и какие корректировки он вносит в наш алгоритм?

Прежде чем мы добавим слово «Стохастик»

Прежде чем мы углубимся в тему Стохастический градиентный спуск, давайте посмотрим, что означает термин Градиентный спуск.

Когда мы хотим повысить точность алгоритма машинного обучения, мы ищем разницу ошибок. В чем разница между целевым значением и прогнозируемым значением из нашей модели?

Допустим, у нас есть модель, которая выводит числовое вещественное число на основе некоторых произвольных входных данных. Прогнозируемое значение (значение, полученное на основе параметров модели) равно 1,45. Фактическое целевое значение составляет 3,32. Это не похоже на хорошую модель, основанную на «обучении», поскольку целевое и прогнозируемое значения не слишком близки. Тогда разница ошибок составляет 3,32–1,45 = 1,87. Мы хотим, чтобы целевое значение было близко к фактическому значению, поэтому как нам понять, работает алгоритм плохо или хорошо?

Функция стоимости

Мы можем использовать функцию стоимости для анализа способности модели понимать и изучать закономерности и взаимосвязи между входными и выходными данными. Функция стоимости обычно является функцией разницы ошибок, и наша цель в задачах машинного обучения — МИНИМИЗИРОВАТЬ функцию стоимости. Есть много функций стоимости, которые мы можем использовать для оптимизации моделей. Примерами являются средняя квадратичная ошибка (MSE), средняя абсолютная ошибка (MAE) и множество других, более сложных математических вычислений :)

Теперь мы можем подумать — почему мы не можем просто работать с нашей разницей ошибок и минимизировать нашу разницу ошибок? Почему мы должны работать с функцией стоимости? Наша функция ошибок также может быть отрицательной — в этом случае она «минимизирована» по значению, но все равно существует огромная разница между нашими прогнозируемыми и фактическими значениями. Вот почему мы вместо этого сосредоточимся на некоторой функции нашей ошибки, а не только на самой разнице ошибок.

Например, если мы сосредоточены на улучшении предсказания выходных данных одного линейного нейрона (в нейронной сети), нам нужно получить набор весов, который минимизирует функцию стоимости . Это означает, что нам нужно будет найти минимумы функции — где самая нижняя точка этой конкретной функции?

Этот нейрон имеет три входа и 3 связанных веса для каждой функции. Результатом является скалярное произведение весов и входных данных, которое затем передается в функцию активации, такую ​​как ReLU. Теперь, как бы мы по существу обучили нашу модель корректировать параметры веса для повышения точности? Поскольку мы используем функции для получения выходных данных этого нейрона, нам нужно сделать прямо противоположное обратному распространению, т. е. вернуться назад и изменить параметры веса, чтобы работать лучше. Это означает, что мы собираемся перейти к деривативам.

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

Градиент и спуск

Мы можем сначала установить произвольные значения для наших весов, например, начиная с 0. Затем, начиная с этого момента, нам нужно выяснить, в каком направлении двигаться, чтобы достичь минимального значения функции стоимости. Именно об этом говорит градиент функции стоимости. Градиент, также обозначаемый перевернутым треугольником, представляет собой наклон функции по отношению к каждому весу. Градиент функции стоимости представляет собой вектор частных производных по каждому весу (например, w1, w2 и т. д.).

*Примечание. Мы предполагаем, что эта функция стоимости является строго выпуклой функцией, то есть функцией, которая имеет не более 1 точки минимума.*

Когда мы обновляем наши веса, мы вычитаем градиент, умноженный на размер шага, со старым набором весов. w в приведенном выше уравнении в основном является вектором весов, в данном случае вектором двух весов w1, w2. Градиент также является вектором с частными производными по w1, w2. Этот процесс обновления весов итеративно происходит до тех пор, пока градиент не достигнет или максимально близок к 0 (это будет означать, что он находится на минимуме).

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

Вернемся к «Стохастику»

Итак, теперь, когда мы рассмотрели градиентный спуск, что означает термин «Стохастический»? Стохастик основан на случайности. Но что мы можем сделать с этим алгоритмом, включающим случайность?

Хотя алгоритм градиентного спуска очень эффективен, он не слишком эффективен для огромных объемов данных и параметров. Алгоритм градиентного спуска обновляет веса только после одного полного прохода обучающего набора данных. Ему пришлось бы вычислять градиент после каждой итерации (после одного прохода всех обучающих выборок). При большом количестве функций и весов это может быть исчерпывающим в вычислительном отношении и занимать много времени.

Стохастический градиентный спуск, или SGD, привносит в этот алгоритм ощущение случайности, что может сделать процесс более быстрым и эффективным. Набор данных перемешивается (для рандомизации процесса), и SGD по существу выбирает одну случайную точку данных на каждой итерации для вычисления градиента. Таким образом, вместо того, чтобы просматривать миллионы примеров, SGD использует одну случайную точку данных для обновления параметров. Это в вычислительном отношении делает алгоритм немного более эффективным. Следовательно, это может привести к чрезмерному «шуму» на пути к нахождению минимума. Например:

Траектория к минимуму выглядит очень по-разному для обоих этих вариантов градиентного спуска. Для SGD путь ведет к минимуму с резкими и резкими поворотами (поскольку мы используем случайные выборки для обновления весов), а путь для алгоритма градиентного спуска более плавный и прямой, поскольку мы используем все обучающие образцы для вычисления градиента. Это очень интересный аспект, который выглядит визуально по-разному для обоих оптимизаторов.

Приложения

Алгоритм стохастического градиентного спуска является одним из наиболее часто используемых алгоритмов оптимизации в машинном обучении. Он также очень популярен в глубоком обучении и нейронных сетях!

Алгоритм градиентного спуска применяется в адаптивной фильтрации (системы на основе обучения) и используется для оптимизации весов фильтра для минимизации стоимости. Примером конкретного адаптивного фильтра является алгоритм шумоподавления в наших гарнитурах!! :) Спасибо! 😊

Ссылки для получения дополнительной информации:https://en.wikipedia.org/wiki/Stochastic_gradient_descent

Первоначально опубликовано на https://rushiblogs.weebly.com.