«КРИВАЯ ОБУЧЕНИЯ НЕОБХОДИМА ДЛЯ РОСТА». –ТЭММИ БЬЕЛЛАНД
В этом посте мы погрузимся в жаргон машинного обучения, о котором мечтает каждый новичок. Мы постараемся преодолеть эти препятствия, которые стоят между вами и завершением вашего проекта машинного обучения.
Вот список всех тем, в которые мы углубимся в этом посте:
- Нормальная кривая
- Градиентный спуск
- MLP и его активации
- Обратное распространение (Gist)
- Импульс
Приступим к работе…
Нормальная кривая: все говорят о колоколообразной кривой, но никто не говорит о том, что такое колоколообразная кривая, не слишком усложняя ситуацию. Нормальная кривая - это, по сути, распределение вероятностей, симметричное относительно среднего. Это показывает, что данные, близкие к среднему, имеют более высокую частоту появления, чем данные, расположенные далеко от него. Z-оценка каждой точки данных рассчитывается, чтобы найти нормальную кривую (таблица Z-оценок: https://www.conversion-uplift.co.uk/wp-content/uploads/2016/10/Z-Score-Table -768x935.jpg ). Формула для Z-оценки просто определяется как разница точки данных от среднего, деленная на стандартное отклонение (https://urlzs.com/SZLNW). Наилучшей характеристикой этой кривой является ее симметрия распределения относительно среднего значения, т.е. почти 68% данных находятся в пределах 1 стандартного отклонения от среднего, 95% данных находятся между пределами 2 стандартных отклонения от центра и 99,7% данных с точностью до 3 стандартных отклонения. Это позволяет очень легко визуально идентифицировать плотности распределения вероятностей.
Градиентный спуск:
Градиентный спуск лучше всего визуализируется человеком, который хочет сбежать с холма, чтобы достичь точного дна впадины, а не на шаг вперед или назад. Спускаясь с холма, он понимает, что делать большие шаги по направлению к цели - это нормально, поскольку она далеко, но по мере приближения он уменьшает размер своего шага, так как не хочет переступать цель.
Точно так же при градиентном спуске мы, по сути, пытаемся итеративно уменьшать значение определенной функции в разные моменты времени. В машинном обучении мы минимизируем функцию затрат, которая определяет полное отклонение нашей гипотезы от фактических точек данных. На каждой итерации мы определяем скорость изменения наших затрат по отношению к нашей точке данных (производная от функции стоимости) и находим нашу новую точку данных, умножая эту производную на значение, называемое размером шага (которое, по сути, определяет размер шаг, который вы спускаетесь с холма) и вычитая его из текущей точки данных. Значение нашей производной уменьшается по мере того, как мы спускаемся по наклонной, и, следовательно, размер нашего шага, когда мы приближаемся к абсолютным минимумам.
Многослойный персептрон (MLP) и функции активации:
MLP - это более или менее очень причудливый термин, используемый для простой нейронной сети (не говоря уже о том, что нейронные сети просты). MLP состоит из нескольких узлов, уложенных в слои, где каждый узел определенного уровня полностью связан (в большинстве случаев) к каждому узлу предыдущего слоя. Эта операция выполняется с использованием матриц. Значение каждого узла равно произведению весовых матриц и выходных данных предыдущего уровня, это значение далее помещается в активирующую функцию, которая помогает внести нелинейность в нашу гипотезу (гипотеза = прогнозируемое значение).
Смещение - это значение, которое добавляется к каждому слою, кроме выходного и входного, и полностью не зависит от результатов предыдущего слоя.
После умножения весов и входных данных и их суммирования для получения значений для каждого узла следующего уровня мы передаем эти значения через функцию активации. Эти функции повышают степень гипотезы, которую мы генерируем, и помогают нам наметить гораздо более сложные функции.
Существует несколько функций активации, но RELU, Leaky RELU и TANH - это те, которые интенсивно используются в отрасли. GELU - это ультрасовременная функция активации, которая мне нравится, и она помогает ускорить конвергенцию.
Эта тема не совсем та, которую можно объяснить в таком небольшом абзаце, как этот, но я всегда подчеркиваю практические знания и общее чувство направления, а не абсолютную пустоту. Вот видео, которое помогло мне понять эту концепцию в ранние годы. Нажмите здесь, чтобы посмотреть видео.
Обратное распространение:
Обратное распространение - это, по сути, градиентный спуск для нейронных сетей. Таким образом нейронные сети регулируют свой вес в соответствии с потерями, производимыми в следующем слое. Обратное распространение по существу происходит в 3 этапа для узла
- Определение степени влияния на вход следующего слоя из-за того, что на выходе текущего слоя.
- Определение того, насколько на вывод текущего слоя после активации влияет ввод текущего слоя.
- Определение того, насколько веса, прикрепленные к текущему узлу, зависят от входных данных узла
Эту концепцию действительно непросто выучить за один присест, поскольку она требует практики, чтобы схватить голову. Обратное распространение - это медленный и ресурсоемкий процесс, который занимает больше всего времени в проекте машинного обучения, уступая только очистке данных. Ошибки могут быть рассчитаны для каждого ввода, и может быть выполнено обратное распространение, но это делает его ужасно медленным процессом, который может использовать слишком много оперативной памяти. Лучшим способом сделать это было бы использовать пакетную ошибку, то есть суммирование ошибок определенного набора входных данных и корректировку весов для этой объединенной ошибки. Этот же процесс используется нейронными сетями любой архитектуры и, безусловно, является лучшим для получения наилучших результатов.
Дополнительные материалы для чтения по обратному распространению:
Обратное распространение очень просто. Кто сделал это сложным? (Https://medium.com/@14prakash/back-propagation-is-very-simple-who-made-it-complicated-97b794c97e5c)
Что на самом деле делает обратное распространение? | Глубокое обучение, глава 3 (https://www.youtube.com/watch?v=Ilg3gGewQ5U)
Импульс:
При обычном градиентном спуске значение, которое мы пытаемся достичь, то есть минимумы (красная точка), не достигается очень простым способом. Значение, которое мы вычисляем в соответствии с нашими градиентами, обычно не оптимальное и часто такое, что заставляет нас колебаться также в вертикальном направлении при движении по горизонтали к минимумам (см. Изображение).
В наиболее идеальном случае все значения, которые мы вычисляем, лежат более или менее на прямой линии в направлении минимумов без слишком большого количества колебаний в вертикальном направлении. Для этого мы используем импульс. Импульс уменьшает колебания в вертикальном направлении и делает значения, которые мы получаем на каждой итерации градиентного спуска, более обтекаемыми и приближающимися к прямой, ведущей к минимумам. Это уменьшает время сходимости и делает наш алгоритм намного более эффективным.
В качестве аналогии для понимания этого можно было бы рассмотреть человека, спускающегося с холма, который медленно набирает скорость по мере того, как он спускается из-за ускорения вниз, тем самым уменьшая движение в направлении, перпендикулярном линии, соединяющей его и цель.
Заключение:
В следующих статьях будет обсуждаться еще много терминов, но до тех пор я бы порекомендовал лечь и принять таблетку от холода, потому что никто не стал специалистом по данным за 10 дней.