Вступление

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

В этой статье мы увидим, как работает этот алгоритм, математику, лежащую в основе этого алгоритма, и типы градиентного спуска.

Как именно это используется в машинном обучении?

Допустим, у нас есть задача. Цель состоит в том, чтобы создать алгоритм, который может предсказать, является ли данное изображение животного кошкой или нет - для каждого входного изображения алгоритм должен выдавать на выходе 0 (если это не кошка) или 1 (если это кошка). . Сначала мы обучим алгоритм нескольким изображениям кошек и других животных, чтобы алгоритм создавал свою логику для предсказания новых изображений. Теперь, используя этот алгоритм, мы спрогнозируем несколько новых изображений, а затем, наконец, вычислим среднюю стоимость, которая показывает, насколько неверен наш прогноз.

Что делать, если алгоритм работает плохо? Как мы могли бы улучшить его работу?

Алгоритм зависит от двух вещей: входных значений, с которыми мы обучаем алгоритм, и параметров алгоритма. Итак, если алгоритм работает плохо, то это из-за этих двух факторов. Итак, мы можем изменить входные данные или параметры, пока не получим низкую стоимость.

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

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



Спускаясь с холма

Представьте, что вы стоите на вершине долины и вам нужно как-то добраться до дна, где есть река. Поскольку тропа ко дну очень крутая, вы будете идти быстрее там, где склон круче, и медленнее, где склон менее крутой. Итак, вы решаете, насколько велик следующий шаг, глядя на свое текущее положение, верно? Так же работает и градиентный спуск. Он достигнет минимума, «спустившись с холма», и решит сделать большой или маленький шаг, в зависимости от уклона.

Наклон функции

Наклон рассчитывается путем нахождения отношения «вертикального изменения» к «горизонтальному изменению» между (любыми) двумя отдельными точками на линии.

Мы знаем, что производная функции реальной переменной измеряет величину изменения значения A по отношению к изменению значения B. Здесь, если A - это «вертикальное изменение», а B - это «Горизонтальное изменение», тогда производная дала бы нам наклон.

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

Рассмотрим функцию f (x) = x². График функции будет выглядеть так.

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

На этой диаграмме показано, как производная дает наклон касательной.

Когда x = 5, f (x) = 25.

На изображении мы видим, что если мы переместим x с 5 на 5,001, то f (x) переместится от 25 до f ( 5,001 ) = (5,001) ² = 25,010 - значение A ( f (x)) перемещается в 10 раз больше, чем значение B (x) ,, поэтому изменение значения A относительно изменения значения B = d (f) / d (x) = 0,010 / 0,001 = 10. Следовательно, наклон равен 10.

Аналогичным образом возьмем точку x = 2,, затем f (x) = 4.

Теперь, если мы переместим x с 4 на 4,001, тогда f (x) станет f (2.001) = (2.002) ² = 4.004 - f (x) перемещен в 4 раза больше, чем x , поэтому изменение значения A относительно изменения значения B = d (f) / d (x) = 0,004 / 0,001 = 4 . Следовательно, наклон равен 4.

В обоих случаях значение уклона в два раза больше значения x (когда x = 5, slope = 10 ; когда x = 2, slope = 4). Поэтому мы можем предположить, что производная функции f (x) = x², равна d (f) / d (x) = 2 ( x).

Поскольку f (x) не является прямой линией, наклон касательной будет разным в каждой точке функции.

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

Мы видели, как градиентный спуск используется в машинном обучении, как он находит минимум функции и что такое наклон. Теперь давайте соберем все это вместе и посмотрим на математику, лежащую в основе градиентного спуска - формулу.

Для каждого параметра θ0, θ1 мы найдем его производную d (θj) (наклон) по функция стоимости J (θ0, θ1).

Теперь для каждого параметра θj, если наклон d (θj) не близок к 0, то мы Обновим параметр θj, вычтя его с его наклоном d (θj). Это означает, что если вы стоите круто, значит, вы еще не достигли дна. Итак, вы сделаете один шаг вперед по направлению к основанию и будете повторять это, пока наклон не станет равным 0.

(hθ (x ^ (i)) - y ^ (i)) xj ^ (i) - производная d (θj).

Если мы повторим этот процесс несколько раз, то в конечном итоге стоимость по параметрам достигнет минимума, наклон станет равным 0, и вы дойдете до реки.

Скорость обучения

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

Название этого конкретного алгоритма также называется Пакетный градиентный спуск. Термин "пакетный" относится к тому факту, что мы рассматриваем все обучающие примеры в то время.

Стохастический градиентный спуск

Проблема с пакетным градиентным спуском заключается в том, что при большом количестве обучающих примеров вычисление производного члена d (θj) может быть очень дорогостоящим. Потому что для этого нужно суммировать все m примеров.

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

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

Заключение

Теперь вы должны лучше понять:

  1. Почему в машинном обучении используется градиентный спуск?
  2. Математика, стоящая за этим.
  3. Разница между пакетным и стохастическим градиентным спуском.

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

Спасибо!!

Надеюсь, вы сочли это полезным. Спасибо, что нашли время, чтобы дочитать до этого места. Если есть предложения, оставьте комментарий. Посетите мой LinkedIn, чтобы узнать больше обо мне и моей работе.