Текст / Чжан Сянъюй
Стать квалифицированным инженером-разработчиком — непростая задача, она требует овладения рядом способностей от разработки до отладки и оптимизации, и каждая из этих способностей требует достаточных усилий и опыта для освоения. Еще сложнее стать квалифицированным инженером-алгоритмом машинного обучения (далее - инженером-алгоритмом), потому что помимо овладения общими навыками инженеров необходимо также овладеть не малой сетью знаний алгоритмов машинного обучения.
Давайте разберем навыки, необходимые для того, чтобы стать квалифицированным инженером-алгоритмом, и посмотрим, какими навыками вам нужно овладеть, чтобы стать квалифицированным инженером-алгоритмом.
Рис. 1. Дерево навыков инженера алгоритмов машинного обучения
01 Основные возможности разработки
Так называемый инженер-алгоритм сначала должен быть инженером, затем он должен овладеть некоторыми способностями, которыми должны овладеть все инженеры-разработчики.
Некоторые студенты имеют некоторое непонимание по этому поводу, думая, что так называемый инженер-алгоритмист должен только думать и проектировать алгоритмы, и его не волнует, как эти алгоритмы реализованы, и кто-то поможет вам реализовать придуманную вами схему алгоритма. Такое мышление ошибочно.На большинстве должностей в большинстве компаний инженеры-алгоритмы должны нести ответственность за весь процесс от разработки алгоритма до реализации алгоритма и запуска алгоритма.
Автор видел, как некоторые компании внедряют организационную структуру, которая разделяет разработку алгоритма и реализацию алгоритма. Однако в рамках этой структуры неясно, кто несет ответственность за эффект алгоритма. И разработчики алгоритмов, и разработчики алгоритмов полны горечи. причины выходят за рамки этой статьи, но я надеюсь, вы помните, что базовые навыки разработки необходимы всем инженерам-алгоритмам.
В базовое развитие вовлечено множество навыков, и здесь для объяснения выбраны только два важных момента.
【модульный тест】
В корпоративных приложениях полное решение проблемы обычно включает в себя множество процессов, каждый из которых нуждается в итеративной оптимизации и отладке.Как разделить сложные задачи на модули и обеспечить корректность общего процесса? Наиболее практичным подходом является модульное тестирование.
Модульное тестирование — это не просто навык тестирования, это, прежде всего, умение проектировать. Не каждый фрагмент кода можно протестировать.Предпосылка модульного тестирования заключается в том, что код можно сначала разделить на несколько модулей, то есть модулей. После того, как проект разобран на модули, которые могут быть независимо разработаны и протестированы, плюс независимые и повторяемые модульные тесты для каждого модуля, можно гарантировать правильность каждого модуля, тогда можно гарантировать правильность всего процесса.
Для разработки алгоритмов, которая представляет собой деятельность по разработке с частыми изменениями процесса, хорошая работа по проектированию модулей и модульному тестированию является важной гарантией того, что вы не будете копать дыры для себя и других. Это также важная предпосылка для уверенного внесения различных изменений и оптимизаций в код.
【Логическое абстрактное повторное использование】
Можно сказать, что абстрактное повторное использование логики является наиболее важным принципом во всех действиях по разработке программного обеспечения.Один из важных принципов измерения уровня кода программиста заключается в том, чтобы посмотреть на соотношение повторяющегося кода и аналогичного кода в его коде. За большим количеством повторяющегося кода или подобного кода отражается лень мышления инженера, потому что он думает, что копирование и вставка или копирование напрямую — это самый простой способ сделать это. Это не только выглядит очень уродливо, но и очень подвержено ошибкам, не говоря уже о сложности его обслуживания.
В проектах по разработке алгоритмов часто используется много похожей логики, например, использование схожих методов обработки для нескольких функций и множество схожих методов обработки в ETL необработанных данных. Если повторяющуюся логику не абстрагировать, код будет выглядеть как повторяющаяся строка кода, которую будет очень сложно читать и поддерживать.
02 Основы вероятности и статистики
Можно сказать, что вероятность и статистика являются одним из краеугольных камней области машинного обучения.С определенной точки зрения машинное обучение можно рассматривать как систематический способ мышления и познания неопределенного мира, основанный на вероятностном мышлении. Научиться смотреть на проблемы с точки зрения вероятности и описывать проблемы вероятностным языком — одна из важнейших основ для глубокого понимания и умелого использования технологии машинного обучения.
Теория вероятностей имеет много содержания, но все они воплощаются конкретными распределениями как конкретными носителями производительности, поэтому очень важно изучить часто используемые распределения вероятностей и их различные свойства, чтобы хорошо изучить вероятность.
- Для дискретных данных необходимо понимать распределение Бернулли, биномиальное распределение, мультиномиальное распределение, бета-распределение, распределение Дирихле и распределение Пуассона;
- Для автономных данных более важными распределениями являются распределение Гаусса и экспоненциальное семейство распределений. Эти распределения проходят через различные модели машинного обучения, а также существуют в различных данных в Интернете и в реальном мире.Только понимая распределение данных, вы можете знать, что с ними делать.
Кроме того, необходимо освоить соответствующую теорию проверки гипотез. В эту так называемую эру больших данных, вероятно, самой обманчивой вещью являются данные.Только овладев соответствующими теориями, такими как проверка гипотез и доверительные интервалы, мы можем отличить подлинность выводов данных. Например, действительно ли есть разница между двумя наборами данных, действительно ли показатели улучшаются после запуска стратегии и так далее. Такого рода проблемы очень распространены в практической работе: если вы не освоите соответствующие возможности, вы будете слепы в эпоху больших данных.
С точки зрения статистики, также необходимо освоить некоторые широко используемые методы оценки параметров, такие как оценка максимального правдоподобия, максимальная апостериорная оценка и алгоритм EM. Эти теории, как и теории оптимизации, применимы ко всем моделям и являются основой фундамента.
03 Теория машинного обучения
Хотя готовых наборов инструментов с открытым исходным кодом становится все больше и больше, это не означает, что инженеры-алгоритмы могут игнорировать изучение и овладение базовой теорией машинного обучения. Для этого есть две основные причины:
- Только овладев теорией, можно гибко применять различные инструменты и приемы, а не просто копировать и применять их. Только на этой основе мы действительно можем построить систему машинного обучения и постоянно ее оптимизировать. В противном случае его можно рассматривать только как машинного обучения, а не как квалифицированного инженера. Если есть проблема, ее не решить, не говоря уже об оптимизации системы.
- Цель изучения основных теорий машинного обучения состоит не только в том, чтобы научиться строить систему машинного обучения, но, что более важно, эти базовые теории воплощают набор идей и режимов мышления, а их коннотации включают вероятностное мышление, матричное мышление, оптимизацию. Мышление и многие другие подобласти, этот набор режимов мышления очень полезен для обработки данных, анализа и моделирования в сегодняшнюю эпоху больших данных. Если у вас в голове нет этого набора мышления, и вы все еще думаете о проблемах со старым невероятностным и скалярным мышлением перед лицом среды больших данных, то эффективность и глубина мышления будут очень ограничены.
Теоретическая коннотация и расширение машинного обучения очень широки и ни в коем случае не исчерпываются одной статьей, поэтому здесь я перечисляю некоторые основные сравнения, и в то же время я представлю содержание, более полезное для практической работы. После освоения этого основного содержания, а затем продолжать исследовать и учиться.
【Основная теория】
Так называемая базовая теория относится к некоторым теориям, которые не включают какую-либо конкретную модель, а фокусируются только на самом «обучении». Вот несколько основных полезных понятий:
- Размерность ВК. Измерение VC — очень интересное понятие, его основной частью является тип функции, который описывает, сколько комбинаций выборок может быть разделено этим типом функции. В чем смысл измерения VC? Суть в том, что после того, как вы выбрали модель и соответствующие ей функции, вы можете приблизительно узнать, насколько большой набор данных можно классифицировать, выбрав этот набор моделей и функций. Кроме того, размер размерности VC функции типа также может отражать возможность переобучения функции этого типа.
- Теория информации. С определенной точки зрения, машинное обучение и теория информации являются двумя сторонами одной проблемы.Процесс оптимизации моделей машинного обучения также можно рассматривать как процесс минимизации количества информации в наборе данных. Понимание основных концепций теории информации очень полезно для изучения теории машинного обучения. Например, прирост информации, используемый в качестве основы для разделения принятия решений в деревьях решений, информационная энтропия, которая измеряет количество информации о данных и т. д., понимание этих концепций очень полезно для понимания проблем машинного обучения. Эта часть содержания может относиться к книге «Элементы теории информации».
- Регуляризация и компромисс смещения-дисперсии. Если главным противоречием в моей стране на данном этапе является «противоречие между постоянно растущими потребностями людей в лучшей жизни и несбалансированным и недостаточным развитием», то основное противоречие в машинном обучении заключается в том, что модель должна максимально соответствовать данным. насколько это возможно, и модель не должна подгонять несоответствия между данными. Одной из основных технологий разрешения этого противоречия является регуляризация. Конкретные методы регуляризации здесь не обсуждаются, но необходимо понять идею, лежащую в основе различных методов регуляризации: компромисс между смещением и дисперсией. Баланс и компромисс между различными точками интереса — важное различие между различными алгоритмами, и понимание этого очень важно для понимания основных различий между различными алгоритмами.
- Теория оптимизации. Решение большинства задач машинного обучения можно разделить на два этапа: моделирование и оптимизация. Так называемое моделирование — это различные способы описания задачи с помощью моделей, о которых мы упомянем далее, а оптимизация — это процесс получения оптимальных параметров модели после завершения моделирования. Существует много моделей, обычно используемых в машинном обучении, но за ними не так много методов оптимизации. Другими словами, во многих моделях используется один и тот же метод оптимизации, и один и тот же метод оптимизации можно также использовать для оптимизации многих различных моделей. Необходимо иметь полное представление о различных широко используемых методах и идеях оптимизации.Очень полезно понимать процесс обучения модели и объяснять эффект обучения модели в различных ситуациях. Сюда входят метод максимального правдоподобия, максимальный апостериорный анализ, градиентный спуск, метод квазиньютона, L-BFGS и т. д.
Существует еще много базовых теорий машинного обучения. Вы можете начать с приведенных выше концепций и использовать их в качестве отправной точки обучения. В процессе обучения вы столкнетесь с другим содержанием, которое необходимо изучить, точно так же, как медленно расширяющаяся сеть. , Продолжайте накапливать собственные знания. В дополнение к известному курсу Эндрю Нг также стоит изучить открытый курс «Обучение на основе данных». Этот курс не требует каких-либо предварительных требований, а преподаваемое содержание основано на основе всех моделей. Основа ML очень близка к основной сущности машинного обучения. Китайская версия курса называется «Основы машинного обучения», также доступна в Интернете и преподается студентами английской версии, указанной выше.
【Контролируемое обучение】
После понимания основных концепций машинного обучения вы можете приступить к изучению некоторых конкретных моделей. В современной производственной практике применение обучения с учителем по-прежнему является наиболее обширным, потому что многие проблемы, с которыми мы сталкиваемся в реальности, заключаются в предсказании определенного свойства вещи, и эти проблемы могут быть решены разумным образом. И абстракции, и преобразования могут быть преобразованы в проблемы с контролируемым обучением.
Прежде чем изучать сложные модели, я предлагаю всем изучить несколько самых простых моделей, обычно наивных байесовских. Наивный байесовский алгоритм имеет сильное допущение, которое не выполняется во многих задачах, а структура модели также очень проста, поэтому ее оптимизационный эффект не самый лучший. Но также из-за его простой формы учащимся очень полезно глубоко понять каждый шаг в процессе моделирования и оптимизации всей модели, что очень полезно для понимания того, как работает машинное обучение. В то же время, после умного преобразования модельная форма Наивного Байеса может получить очень унифицированные результаты с формой логистической регрессии, что, несомненно, дает другой угол объяснения логистической регрессии Наиболее часто используемые модели играют очень важную роль.
После освоения базового процесса модели машинного обучения вам необходимо изучить две самые основные формы модели: линейную модель и древовидную модель, которые соответствуют линейной регрессии/логистической регрессии и регрессии решений/дереву классификации соответственно. Широко используемые сейчас модели, будь то поверхностная модель или глубокая модель глубокого обучения, основаны на этих двух базовых моделях.
Проблема изучения двух моделей, когда вам нужно тщательно подумать, заключается в следующем: какова природа этих двух моделей, в чем разница? Почему именно эти две модели? Каковы их различия в обучении и точности прогнозирования, эффективности, сложности и так далее? После четкого понимания природы этих различий это можно сделать в зависимости от обстоятельств и проблем свободного использования модели данных.
После освоения двух основных форм линейной модели и древовидной модели следующим шагом является освоение сложных форм этих двух базовых моделей. Сложная форма линейной модели представляет собой многослойную линейную модель, то есть нейронную сеть. Сложные формы древовидных моделей включают бустинговые комбинации, представленные GDBT, и бэггинговые комбинации, представленные случайными лесами.
Значение этих двух комбинированных моделей заключается не только в самой модели, но и в двух комбинированных идеях повышения и бэггинга, которые также очень полезны для изучения и понимания, которые представляют собой два общих метода поощрения: идея повышения заключается в постоянном улучшении и постоянно опираться на предыдущую основу. Продолжать оптимизировать вышеизложенное, а идея упаковки заключается в том, что «три мерзавца превзойдут одного Чжугэ Ляна», то есть получить сильный классификатор за счет комбинации нескольких слабых классификаторов.
Эти два комбинированных метода имеют свои преимущества и недостатки, но все они представляют собой идеи, которые можно использовать для справки в повседневной работе. Например, в рекомендательных системах мы часто используем данные нескольких измерений в качестве источников отзыва.С определенной точки зрения, это идея упаковки: каждый отдельный источник отзыва не дает наилучшей производительности, но несколько источников отзыва В сочетании вы можете получить лучшие результаты, чем каждый отдельный источник отзыва. Так что идея важнее самой модели.
【Обучение без присмотра】
Хотя обучение с учителем в настоящее время составляет большинство сценариев приложений машинного обучения, обучение без учителя также очень важно с точки зрения размера данных и функций.
Большая категория неконтролируемого обучения - это кластеризация Значение кластеризации обычно можно разделить на две категории: одна - использовать сам результат кластеризации в качестве конечной цели, а другая - использовать результат кластеризации в качестве конечной цели. Особенности используются в обучении с учителем. Но эти два значения не привязаны конкретно к определенному методу кластеризации, а просто являются разными способами использования результатов после кластеризации, что требует непрерывного обучения, накопления и осмысления в работе. Что необходимо освоить на этапе начального обучения, так это основное различие между различными алгоритмами кластеризации. Например, среди наиболее часто используемых методов кластеризации, для решения каких задач подходят kmeans и DBSCAN? Какие предположения делает смешанная модель Гаусса? Какова связь между документами, темами и словами в LDA? Эти модели лучше всего изучать вместе, чтобы понять связи и различия между ними, а не рассматривать их как отдельные вещи.
Помимо кластеризации, встраивание репрезентации, появившееся в последние годы, также является важным методом обучения без учителя. Разница между этим методом и кластеризацией заключается в том, что метод кластеризации заключается в использовании существующих признаков для разделения данных, в то время как встраивание представления заключается в создании новых признаков, которые представляют собой новый способ представления выборок. Этот новый метод представления обеспечивает новый взгляд на данные, и этот взгляд предоставляет новые возможности для обработки данных. Кроме того, хотя эта практика возникла из области НЛП, она обладает сильной универсальностью и может использоваться для обработки различных данных и может давать хорошие результаты, поэтому теперь она стала обязательным навыком.
Изучение теории машинного обучения можно начать с «Введение в статистическое обучение с применением в R», в котором дается хорошее объяснение некоторых часто используемых моделей и теоретических основ, а также подходящее количество упражнений для закрепления полученных знаний. Расширенное обучение может использовать обновленную версию вышеупомянутой книги «Элементы статистического обучения» и знаменитую «Распознавание образов и машинное обучение».
04 Языки разработки и средства разработки
После овладения достаточным количеством теоретических знаний вам также потребуется достаточно инструментов для реализации этих теорий.В этой части мы познакомим вас с некоторыми часто используемыми языками и инструментами.
【Язык разработки】
В последние годы можно сказать, что Python является самым популярным языком в области науки о данных и алгоритмов. Основная причина в том, что он имеет низкий порог для использования, прост в использовании, имеет полную экосистему инструментов и хорошо поддерживается различными платформами. Поэтому я не буду вдаваться в подробности о Python. Но помимо изучения Python я предлагаю вам снова изучить язык R. Основные причины следующие:
- Язык R имеет наиболее полный статистический инструментарий. Мы рассказали о важности вероятности и статистики выше. Язык R обеспечивает наиболее полную поддержку в этом отношении. Для некоторых ежедневных статистических нужд может быть быстрее использовать R, чем использовать Python. Хотя статистические инструменты Python постоянно совершенствуются, R по-прежнему остается самым большим и активным сообществом в области статистических наук.
- Развитие векторизованного, матричного и табличного мышления. Все типы данных в R векторизованы, а целочисленная переменная — это, по сути, одномерный вектор длины один. На этой основе язык R строит эффективные матричные и (DataFrame) типы данных и поддерживает очень сложные и интуитивно понятные методы работы с ними. Этот набор типов данных и методов мышления также перенимается многими более современными языками и инструментами, такими как ndarray в Numpy и DataFrame, представленный в последней версии Spark, который, можно сказать, прямо или косвенно вдохновлен R. Обработка данных, описанная выше, точно такая же, как обработка DataFrame и вектора в R. Так же, как и при изучении программирования, вы должны начать с языка C. Я рекомендую всем изучить R для науки о данных и разработки алгоритмов.Вы изучаете не только сам язык, но и его коннотативные идеи, которые необходимы каждому для освоения и изучения. разбираться в современных инструментах.Большое подспорье.
Помимо R, язык Scala также заслуживает изучения. Причина в том, что это язык, который лучше сочетает в себе парадигмы объектно-ориентированного и функционального программирования, потому что он не заставляет вас писать код в функциональном стиле, и его также можно использовать там, где функциональный стиль может быть использован с достаточной поддержкой. Это делает порог его использования невысоким, но при постоянном накоплении опыта и знаний с его помощью можно писать все более продвинутый и элегантный код.
【Инструменты разработки】
С точки зрения инструментов разработки инструменты системы Python, несомненно, являются наиболее практичными, в частности, пакет, состоящий из Numpy, Scipy, sklearn, pandas и Matplotlib, может выполнять большую часть анализа и обучения на одной машине. Но с точки зрения обучения моделей есть несколько более целенаправленных инструментов, которые могут повысить точность и производительность обучения, такие как LibSVM, Liblinear, XGBoost и т. д.
Что касается инструментов для работы с большими данными, то основными инструментами для офлайн-вычислений по-прежнему являются Hadoop и Spark, а для вычислений в реальном времени — SparkStreaming и Storm. В последние годы также появилось много новых платформ, таких как Flink и Tensorflow, которые заслуживают внимания. Стоит отметить, что освоение Hadoop и Spark требует не только владения их техниками кодирования, но и определенного понимания принципов их работы, например, как реализован процесс Map-Reduce в Hadoop и какие операции выполняются в Spark. занимает много времени, в чем разница между агрегатомByKey и groupByKey по принципу работы и так далее. Только освоив их, вы сможете свободно использовать эти платформы больших данных, в противном случае легко вызвать такие проблемы, как отнимающая много времени программа, запуск, взрыв памяти и так далее.
05 Архитектурный дизайн
Наконец, мы посвятим некоторое время разговору об архитектуре систем машинного обучения.
Так называемая архитектура системы машинного обучения относится к набору общих систем, которые могут поддерживать стабильную и эффективную работу обучения, прогнозирования и сервисов машинного обучения, а также взаимосвязи между ними.
Когда масштабы и сложность бизнеса разовьются до определенного уровня, машинное обучение обязательно двинется в сторону систематизации и платформизации. В настоящее время необходимо разработать набор общей архитектуры в соответствии с характеристиками бизнеса и характеристиками самого машинного обучения, который включает в себя проектирование архитектуры восходящего хранилища данных и потока данных, архитектуру обучения модели и Архитектура онлайн-сервисов. Изучение этого набора архитектур не так просто, как предыдущее содержание: существует не так много готовых учебников для изучения, а более абстрактные конспекты, основанные на большом количестве практики и непрерывном развитии и улучшении текущей системы. Но это, безусловно, самая полезная работа в карьере инженера-алгоритма. Совет, который я могу дать здесь, заключается в том, чтобы больше практиковаться, больше обобщать, больше абстрагироваться и больше повторять.
06 Современное состояние инженеров-алгоритмов машинного обучения
Можно сказать, что это лучшая эпоха для инженеров-алгоритмов машинного обучения, и спрос на такие таланты во всех сферах жизни очень высок. Типичные отрасли включают следующие подсектора:
- Рекомендуемая система. Система рекомендаций решает проблему эффективного сопоставления и распределения информации в сценариях с большими данными.В этом процессе, будь то отзыв набора кандидатов, сортировка результатов и портреты пользователей, машинное обучение играет важную роль.
- рекламная система. Между рекламной системой и рекомендательной системой есть много общего, но есть и существенные различия.Необходимо учитывать интересы рекламодателей помимо платформы и пользователей.Две стороны стали тремя сторонами,что значительно усложняет некоторые проблемы. сложнее. Это также похоже на рекомендацию в использовании машинного обучения.
- поисковая система. Технология машинного обучения широко используется во многих базовых конструкциях и сортировке верхнего уровня поисковой системы, а на многих веб-сайтах и в приложениях поиск является очень важным элементом трафика Оптимизация поисковой системы с помощью машинного обучения напрямую влияет на эффективность весь сайт. .
- Система управления воздухом. Контроль рисков, особенно контроль над финансовыми рисками в Интернете, является еще одним важным полем битвы для машинного обучения, которое появилось в последние годы. Не будет преувеличением сказать, что способность использовать машинное обучение может во многом определить способность управления рисками интернет-финансового предприятия, а сама способность управления рисками является основной конкурентоспособностью деловых гарантий этих предприятий.Вы можете почувствовать взаимосвязь между ними. .
Однако, поскольку так называемая «более высокая зарплата связана с большей ответственностью», требования компаний к инженерам-алгоритмам постепенно возрастают. В целом, инженер-алгоритм высокого уровня должен быть в состоянии справиться со всем процессом «сбор данных → анализ данных → обучение и настройка модели → запуск модели» и постоянно оптимизировать различные звенья в этом процессе. Когда инженер начинает, он может начать с определенного звена в вышеуказанном процессе и продолжать расширять сферу своей компетенции.
В дополнение к перечисленным выше областям существует множество традиционных отраслей, которые постоянно изучают возможности машинного обучения для решения традиционных задач, и будущее отрасли можно охарактеризовать как огромный потенциал.
【использованная литература】
Связь между Наивным Байесом и логистической регрессией можно обозначить следующим образом:У-у-у. В это время. Растения. Квота/~Том/мл книга…
«Введение в статистическое обучение с применением в R»:
Об авторе: Чжан Сяньюй, глава отдела алгоритмов рекомендаций Zhuanzhuan, торговая платформа подержанных товаров, архитектор алгоритмов, ответственный за рекомендательную систему Zhuanzhuan и другую работу, связанную с алгоритмами, электронная почта: zhangxy@live.com
Эта статья является оригинальной статьей «Программист» и не может быть воспроизведена без разрешения.