Машинное обучение 101 часть 2

Объяснение механизма методов оптимизации

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

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

  1. Масштабирование функций
  2. Пакетная нормализация
  3. Мини-пакетный градиентный спуск
  4. Градиентный спуск с импульсом
  5. Оптимизация RMSProp
  6. Адам Оптимизация
  7. Снижение скорости обучения

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

Итак, приступим!

Концепция семени

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

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

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

Идем глубже

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

Глубокое обучение — это суперсила. С его помощью вы можете заставить компьютер видеть, синтезировать новые произведения искусства, переводить языки, ставить медицинские диагнозы или создавать части автомобиля, который может ездить сам по себе. Если это не суперсила, то я не знаю что. -Эндрю Нг-

Модели

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

Вы можете выбрать между:

  1. Контролируемая модель: пользователь реализует функции (алгоритмы), поэтому машина, когда получает данные (входные данные), может обрабатывать их итеративно (обучающие данные) и превращать в информацию (выходные данные).
  2. Неконтролируемая модель: пользователь также реализует функции, но на этот раз машина более независима для обработки данных, и результатом этого является информация, преобразованная в шаблоны, на которые нет ссылок.

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

Оптимизация

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

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

Масштабирование функций

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

Итак, что вы делаете, так это нормализуете и стандартизируете набор данных, чтобы вы могли размещать несколько переменных независимо и обрабатывать модель не только быстрее, но и точнее, чтобы сделать свой прогноз. Нормализация обычно должна быть между 0 или 1 (считайте, что это «да» или «нет»)

Когда вы применяете масштабирование функций, ваш набор данных преобразуется в это:

И на основе нашего примера масштабированный набор данных будет выглядеть так:

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

Пакетная нормализация

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

Пакетную нормализацию лучше видно из реализации глубокой нейронной сети, когда у вас есть n слоев для обработки, чтобы получить результат, как показано на этом изображении:

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

Мини-пакетный градиентный спуск

Мы рассмотрели, что такое пакетная нормализация. Теперь, чтобы объяснить мини-пакетный градиентный спуск, мы должны объяснить, что такое градиентный спуск. По сути, градиентный спуск — это алгоритм оптимизации, часто используемый для нахождения весов или коэффициентов алгоритмов машинного обучения, таких как искусственные нейронные сети и логистическая регрессия. Джейсон Браунли представляет интересный пример, когда вы должны думать, что у вас есть большая чаша, и эта чаша является графиком вашей функции затрат; то случайная позиция на поверхности чаши — это стоимость текущих значений коэффициентов (стоимость), дно чаши — стоимость лучшего набора коэффициентов, минимум из функция.

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

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

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

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

Это изображение поможет вам лучше понять поведение этого алгоритма:

Градиентный спуск с импульсом

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

Оптимизация RMSProp

Этот алгоритм завоевал популярность благодаря своей эффективности и скорости. RMSprop — это сокращенная версия среднеквадратичного распространения. Любопытно, что этот алгоритм оптимизации был впервые предложен Джеффри Хинтоном в классе Coursera. RMSProp аналогичен алгоритму градиентного спуска с импульсом с тем отличием, что RMSprop создает ограничения на колебания в вертикальном направлении. Таким образом, это создает преимущество, заключающееся в том, что модель увеличивает скорость обучения, а алгоритм, делая более крупные шаги в горизонтальном направлении, сходятся быстрее.

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

Оптимизация АДАМ

ADAM расшифровывается как «адаптивный момент». Этот алгоритм оптимизации представляет собой комбинацию импульса и RMSProp. Этот алгоритм адаптивно вычисляет скорость обучения, другими словами, он вычисляет индивидуальные скорости обучения для разных параметров. ADAM использует оценки первого и второго моментов градиента, чтобы адаптировать скорость обучения для каждого веса (параметра) нейронной сети. Обратите внимание, что мы вводим термин «момент», а момент нельзя путать с импульсом. Момент — это случайная величина (N-я), определяемая как ожидаемое значение этой переменной в степени n.

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

Если вы хотите узнать больше об этом алгоритме оптимизации, я рекомендую ознакомиться с документом On the Variance of the Adaptive Learning Rate and Beyond

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

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

Выводы

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

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

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

использованная литература