Реализация алгоритма ИИ и применение облачной платформы

машинное обучение искусственный интеллект алгоритм Архитектура

Чен Дихао, архитектор платформы 4Paradigm Prophet. У него широкий круг личных интересов, и он активно участвует в сообществе открытого исходного кода.Он поддерживает Seagull, веб-платформу управления контейнерами с более чем 1600 звездами. На втором курсе я присоединился к Xiaomi для разработки мобильных терминалов Android, и мне посчастливилось изучить технологию серверной инфраструктуры.Я участвовал в разработке HBase, ZooKeeper и других сообществ, а также открыл исходный код глобального строго инкрементного сервиса временных меток chronos. от которого зависит NewSQL. У меня есть определенное понимание распределенного хранилища. Позже он присоединился к UnitedStack, стартапу облачных сервисов, отвечая за хранение, контейнеры и бизнес больших данных.Участвовал в OpenStack, Docker, Ceph и других проектах с открытым исходным кодом. На саммите OpenStack Summit были представлены технологии, связанные с мультисерверными хранилищами Cinder, и в этот же период была получена сертификация AWS Solution Architect. В настоящее время занимается направлением облачного глубокого обучения, отвечает за архитектуру и реализацию платформы глубокого обучения, а также имеет определенное представление о системе планирования контейнеров Kubernetes и фреймворке глубокого обучения TensorFlow.

Я Чен Дихао, архитектор Четвертой Парадигмы, мы занимаемся машинным обучением с 2014. Сейчас машинное обучение очень популярно, что нас очень смущает, потому что все говорят, что все, что связано с компьютерами, это интеллект или ИИ. По моему опыту, в заголовке есть ИИ, и 10 может быть больше, чем 8, что немного обманчиво. Но вчера «Маленькая поэтическая машинка» Учителя Ю и чат-боты профессора Хун Цяннина были очень хороши.Согласно принципу 8/10, я был немного напряжен. Сегодня я расскажу о реализации алгоритмов, связанных с ИИ. Надеюсь, вы понимаете их реализацию и у вас есть новое понимание настоящего искусственного интеллекта или машинного обучения.

Я новичок в ECUG, сначала представлюсь. Я участвовал в разработке HBase и Hadoop с 2013 по 2014 год, а затем стал OpenStack, а также был участником сообщества.Вы можете видеть, что первые два года я занимался инфраструктурой. Недавно я работал над TensorFlow и вещами, связанными с машинным обучением. Я также являюсь автором проекта Seagull с открытым исходным кодом, а сейчас являюсь архитектором платформы Prophet в 4Paradigm. Сегодня три темы:

  • Введение в искусственный интеллект и машинное обучение

  • Принцип и реализация алгоритмов машинного обучения

  • Практика архитектуры платформы облачного машинного обучения

    Введение в искусственный интеллект и машинное обучение

    Рисунок 1. Это искусственный интеллект?

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

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

    Идентификационные коды. Существует также относительно нелепое распознавание кода подтверждения, которое также является технологией много лет назад, но в новостной колонке телеканала утверждалось, что они зафиксировали первое в мире преступление технологии взлома искусственного интеллекта.На самом деле, кто-то предоставил услугу автоматическое распознавание проверочного кода.

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

    В правой части рисунка 1 показан сгенерированный мной массив Numpy, который можно использовать для представления модели AlphaGo. Некоторые люди думали, что AlphaGo будет играть в шахматы сама с собой, и обучали себя правилам игры в го, и даже шутили, что она тайно использовала боевую онлайн-платформу, чтобы играть в шахматы с другими. Но с профессиональной точки зрения AlphaGo — это именно такой многомерный массив со множеством чисел с плавающей запятой, представляющих веса модели. Если вы распечатаете AlphaGo, это будет массив, его вход — тензор, представляющий шахматную доску, а выход — вероятность игры и вероятность выигрыша. Более того, правила AlphaGo Go с трудом реализуются программистами, включая то, как судить о том, выиграна игра или проиграна. Это все вещи, которые искусственный интеллект или машинное обучение не могут решить в настоящее время.

    Рис. 2. Определение машинного обучения

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

    Рис. 3. Приложения машинного обучения

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

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

    Рис. 4. Получение приложения машинного обучения 1

    Процесс обучения модели сложен. Все мы знаем, что дайте мне 1000 фотографий кошек, и я получу модель, которая распознает кошек. Вопрос в том, можно ли обучить лучшую модель, чем GoogleNet или ResNet. Если вы действительно хотите создавать приложения для машинного обучения, вам нужно выполнить процесс, показанный на рис. 4. Это не значит, что вы можете получить хорошую модель, дав мне изображение кота. Общий процесс включает в себя следующие части:

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

    Очистка данных. Очистка данных на самом деле ничем не отличается от традиционной обработки больших данных, и некоторые функции, возможно, придется доработать или удалить. Используемая технология — MR (MapReduce) или Spark, а также используется знание домена Knowledge Graph.

    Извлечение признаков. Мы хотим сгенерировать некоторые функции из данных.Функции на самом деле являются полями данных, но только для машинного обучения. Например, в данных может быть пол и возраст людей, но сгенерированные функции могут иметь сотни тысяч или даже миллионы измерений. Например, с линейными моделями мы не можем поместить в них необработанные данные напрямую. Как сделать извлечение признаков? Это связано со структурой модели, используемой позже, и мы должны сгенерировать формат, поддерживаемый этой структурой. Когда мы на самом деле это сделаем, мы определим DSL для извлечения функций, и пользователи смогут создавать задачи Spark с помощью простого описания. Для DSL мы сделали парсер AST, который поддерживает форматы TFRecord, такие как libsvm или TensorFlow.

    обучение модели. При обучении есть много вариантов.Некоторые алгоритмы машинного обучения, которые были проверены в отрасли, включают LR, GBDT, DNN, NB (наивный байесовский алгоритм) и т. д. Существует также наш собственный алгоритм преобразования дискретных значений в непрерывные, HETreeNet, потому что древовидная модель лучше поддерживает непрерывные значения. Мы можем использовать разные фреймворки, например, TensorFlow — хороший фреймворк DNN.

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

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

    Сегодня я уделю вам больше времени, чтобы представить вам две части: первая — алгоритм машинного обучения, а вторая — создание платформы для машинного обучения.

    Алгоритмы машинного обучения

    Рисунок 5 Логистическая регрессия 1

    Существует множество алгоритмов машинного обучения, которые здесь нельзя представить. В основном для введения реализации логистической регрессии. Сейчас очень популярны DNN, все говорят о DNN, CNN, LSTM. CNN или LSTM будут использоваться в неструктурированных данных, таких как изображения, естественный язык и обработка речи. Но на моей работе большинство из них связаны с банковским бизнесом, и модель, которую мы чаще всего используем, — это LR (логистическая регрессия), включая прогноз CTR, сделанный моим коллегой из Baidu Fengchao. Различные алгоритмы машинного обучения могут решать такие задачи, как бинарная классификация или регрессия, но принципы реализации и целевые данные различаются. Если вы читали статью AlphaZero, то знаете, что в ее алгоритме используется не логистическая регрессия, а ResNet, а реализация AlphaZero будет представлена ​​позже. Но здесь возникает вопрос, можем ли мы использовать логистическую регрессию вместо ResNet? Ответ - да. На самом деле AlphaGo - это поиск Монте-Карло и нейронная сеть NN. Причина, по которой логистическая регрессия не используется, заключается в том, что логистическая регрессия является линейной моделью и не обладает сильной выразительной способностью. Если наши функции достаточно сложны , вы также можете обучить модель AlphaZero на основе LR, но она точно не добьется эффекта DeepMind.

    Вот реализация логистической регрессии.LRявляется контролируемой моделью, то есть должны быть обучающие выборки.LR такжеэто линейная модель, что означает, что характеристики, которые вы даете, имеют линейную зависимость. Например, мы обучаем модель, которая может прогнозировать доход в зависимости от возраста. Обычно мы думаем, что чем выше возраст, тем выше доход. На самом деле это не так. Например, если вам больше 60 лет, ваш возраст обратно пропорционален вашему доходу. Нельзя просто использовать возраст как особенность здесь. Как мы вскоре увидим, он эффективен, и его нужно только добавить.LR — это высокая производительность., потому что для предсказания требуется только одна операция сложения, которая отличается от умножения и сложения матриц в нейронной сети.LR хорошо разбирается, каждый из его весов понятен человеку и имеет определенное значение.LR хорошо масштабируется, легко реализовать распределенный LR, поддерживающий миллиардные функции. Даже TensorFlow не может поддерживать такие многомерные модели.

    Рисунок 6 Логистическая регрессия 2

    Рисунок 6 является примером. Образцы, необходимые для логистической регрессии, закодированы числами.Наш исходный ввод может быть строкой, мужским и женским, или английским словом, которое требует извлечения признаков для кодирования. Как и возраст, как только что упоминалось, поскольку логистическая регрессия является линейной моделью, возраст не используется в качестве признака, и здесь просто создается ведро. Здесь есть скрытый смысл.Предполагая, что возраст от 0 до 30 лет, его доход, по прогнозам, превысит 500 000, и эти два показателя связаны линейной зависимостью. Если она пропорциональна, то вес будет больше 0. Чем старше возраст, тем больше будет вес. На самом деле это не так. В машинном обучении есть очень хорошие приемы. обязательно эффективным. Сделайте его многоуровневым или даже делайте одну функцию в год, может быть, 80 функций здесь. Это простой пример, если мы сможем собрать такие образцы и закодировать их 0-1, мы сможем обучить модель LR. Что за модель на самом деле? Модель DNN представляет собой матрицу, а модель LR представляет собой одномерный массив, длина массива равна размерности признака, а каждому признаку соответствует вес.

    Рисунок 7 Логистическая регрессия 3

    Когда мы придем к новому образцу, узнаем его пол мужской, возраст 27 лет. Как предсказать, будет ли его доход больше 50? Алгоритм логистической регрессии очень прост.Размер данных такой же, как и размер объекта.Умножьте выборку и добавьте значения в соответствующем измерении. Если сцена представляет собой бинарную классификацию, значение получается через функцию активации, если оно больше 1, мы считаем его равным 1, если это задача регрессии, функция активации не нужна, и полученное значение прогнозируемое значение.

    LR очень прост, классификацию изображений мы видели ранее, и AlphaGo может использовать эту простую модель для шахмат. Включая нашу защиту от мошенничества с кредитными картами, мы можем кодировать информацию о пользователе, записи о потреблении, включая время и место потребления. Для более сложной ситуации мы комбинируем возраст и пол для создания новых признаков, то есть мужчины от 30 до 60 лет, женщины от 30 до 60 лет и т. д. Мы можем обнаружить, что веса выше только для определенных комбинаций пола и возраста. Если мы закодируем исходные функции таким образом, LR не сможет обучиться этому нелинейному преобразованию. В настоящее время нам нужны более мощные возможности разработки функций. Мы можем создать любую комбинацию таких функций или создать более совершенные на основе нашего бизнес-опыта. особенность. В прошлом, когда я был в Phoenix Nest, я продолжал создавать функции и добавлять их, и, наконец, обнаружил, что функции были особенно эффективны, и, наконец, уровень точности был улучшен. Сейчас все говорят, что DNN может автоматически подстраивать параметры, но в реальных сценариях этот процесс неизбежен. Даже с очень сложной моделью трудно получить хорошую модель без группировки наших функций.

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

    Рисунок 8 Логистическая регрессия 3

    Как добиться логистической регрессии? Если это реализовано с помощью TensorFlow, это очень просто.Рисунок 8 представляет собой полную реализацию модели логистической регрессии, которая может загружать в нее изображения для мультиклассификации. Отмеченная часть (первая красная рамка) определяет некоторые переменные, которые являются нашей так называемой моделью, определяющей матрицу размером 784×10. Почему 784? Поскольку набор данных, который мы используем, представляет собой набор данных для распознавания рукописных данных, размер 28 × 28, его пиксели имеют 784, а его модель также 784, поскольку это 10 категорий, его модель на самом деле 784 × 10, распечатайте это модель классификации и получить матрицу с 784 строками и 10 столбцами в каждой строке.

    Следующее (показано во втором красном поле) определяет метод обучения нашей модели, и мы можем определить различные функции потерь. Дана модель, разные веса умножаются на ввод картинки, а потом сравниваются с реальной меткой, насколько они отличаются, разные модели могут использовать разные показатели. Мы часто используем этот вид перекрестного отношения для классификации изображений; если это проблема регрессии, например, умножение для получения прогнозируемого дохода (предыдущий пример), вот фактический доход, как мы описываем разницу между ними, мы можем сделать вычитание, затем квадрат или абсолютное значение. Это для того, чтобы TesnorFlow знал, как вы описываете потери. В tensorflow есть система, которая вычисляет собственный градиент. Она найдет для вас градиент функции, позволит модели перейти в место с наименьшим градиентом, а затем уменьшит потери. , Чем ниже потери, прогнозируемое значение и истинное значение, тем меньше разница. На самом деле, мы можем сами реализовать фреймворк для автоматического поиска градиентов.

    Рисунок 9 Логистическая регрессия 4

    Подводя итог, можно сказать, что логистическая регрессия — это простой и мощный алгоритм машинного обучения, который широко используется в рекомендательных системах, CTR и других сценариях.LR — линейная модель, поэтому перед использованием необходимо выполнить некоторые действия по проектированию функций.Модель LR представляет собой одномерный массив, веса в массиве могут быть представлены числами с плавающей запятой или числами с плавающей запятой двойной точности, а длина массива совпадает с размерностью объекта.ЛР хочетОпределите функцию потерь как индикатор, такие как CrossEntropy.Оптимизируйте потери во время тренировки LR, популярным методом является алгоритм градиентного спуска, который имеет множество оптимизаторов, таких как оптимизатор Adagrad.LR особенно легко обучать, производительность прогнозирования особенно высока, а также легко реализовать распределенное обучение.. Как добиться распределенного обучения? Как правило, у нас будет сервер параметров, который хранит свою модель, а его модель представляет собой массив, если мы будем хранить это, модель может быть очень большой. Сервер параметров — это инженерная база данных KV, вы можете использовать HBase, если вы можете разместить ее на одной машине, вы также можете использовать Redis и даже можете реализовать сервер параметров в памяти. Это вообще не реализовано с NoSQL.Вчера профессор Хонг также упомянул, что обновление веса может быть очень частым, и нет необходимости записывать реальное значение в NoSQL каждый раз, когда вы тренируетесь.Если вы запишете его в NoSQL, оно будет упал, но у нас нет согласованности требований. На самом деле у нас много параметров Сервер реализован на базе памяти, и при зависании он будет терять данные, но мы можем регулярно делать снэпшоты, чтобы были доступны только самые свежие данные.Даже если он зависнет, переобучение может дать аналогичные результаты.

    Рисунок 10 Альфа-ноль

    AlphaZero — это недавнее обновление AlphaGo. Все видят пиар-проект, что AlphaGo использует какие-то человеческие знания, а AlphaZero отказывается от человеческих знаний и добивается лучших результатов за счет самостоятельной игры. По сути, AlphaZero просто заменил ту часть шахматной игры, которая предсказывает победу или поражение, с помощью нейронной сети. Как AlphaGo оценивает каждый ход как хороший или плохой? В AlphaGo есть быстро движущаяся подсеть, вводите шахматную партию, предскажите эту точку, какова вероятность выигрыша? Эта быстро движущаяся подсеть использует некоторые искусственные правила, такие как формула, ранее полученная на основе человеческих шахмат, не обязательно нейронной сети. Введите шахматную партию и выведите результат. Эта часть раньше полагалась на некоторые исторические шахматные игры людей. Часть AlphaZero, которая изменилась, заключается в удалении правил.Вместо того, чтобы использовать предыдущие человеческие данные, он использует нейронную сеть, чтобы позволить нейронной сети учиться. Если мы даем только одну шахматную позицию, мы играем в следующую шахматную партию, независимо от того, используем ли мы CNN или что-то еще, невозможно узнать, какова вероятность победы в этой игре. Так вот в AlphaZero генерируется каждый сэмпл.Невозможно сгенерировать сэмпл для каждого хода,а потом сказать вам вероятность выигрыша этого хода.Вместо этого вы должны играть всю игру.Всего 700 ходов.Всегда пусть играет автоматически , после игры и, наконец, победы, то вероятность выигрыша в этих 700 ходах увеличится на 1, и, наконец, используйте статистический метод.

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

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

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

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

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

    Рисунок 11 Мин. Макс.

    Вот относительно простой алгоритм в теории игр через простой алгоритм MinMax, а затем переход к поиску по дереву Монте-Карло AlphaGo. Каждый круг представляет вашу игру, вы можете выбрать левый или правый. Когда вы выбираете влево или вправо, противник может выбирать слева направо. Игра настолько мала, что мы можем перечислить все возможные ситуации. Наша цель – набрать максимально возможный итоговый балл. Очевидно, что положительная бесконечность является наивысшей оценкой, но последний раунд был ходом противника, и противник определенно выберет только 10, когда увидит положительную бесконечность.В следующем раунде я выберу 10 между 10 и 5, но противник выберет -10 в следующем предложении. .

    Игра такого рода заключается не только в том, чтобы самому найти оптимальное решение, вы должны учитывать другую сторону. Оппонент может быть глупым и позволить вам выиграть напрямую, или он может быть таким же умным, как и вы. В этой игре мы можем либо перебрать все случаи, либо использовать алгоритм MinMax для поиска оптимального решения. Этот алгоритм хорошо понят.На определенном этапе наступает очередь соперника.Предполагаем, что противник очень умен и всегда будет выбирать наименьшее количество очков (мин). В нашем раунде мы выбираем максимальное количество очков (max) в диапазоне, который можно выбрать. Предполагая, что противник очень умен, он выберет для меня меньшую оценку. Если мы играем в эту игру, мы должны выбрать правильную сторону в начале, и здесь мы достигнем точки равновесия Нэша в теории игр. Мы принимаем решения, и противник тоже принимает решения.Когда обе стороны не могут получить лучшее решение, изменив решение, мы достигли точки равновесия. Это алгоритм решения теории игр, вам предстоит пройти через все ситуации, чтобы найти оптимальное решение. Все слышали об альфа-бета-сокращении, которое на самом деле является алгоритмом оптимизации MinMax и не требует вычисления каждого значения.

    Рис. 12 Дерево поиска Монте-Карло

    Может ли Го это сделать? Я только что сказал, что он основан на дереве Монте-Карло, которое также является числовой структурой. Это шахматная доска с возможностью 361. Когда я играю определенную фигуру, у противника есть 360 возможностей, так что мы можем получить древовидную структуру сверхвысокой размерности. Предполагая, что вычислительная мощность достаточна, мы знаем, проиграть или выиграть в последнем раунде.Мы предполагаем, что противник заставляет меня проиграть, поэтому мы не выбираем этот метод, а каждый раз выбираем свой лучший.Предположим, что противник также позволяет мне выбрать проигравшего Теоретически проблема AlphaGo может быть решена с помощью алгоритма MinMax. Этот алгоритм очень прост, но его нельзя использовать в AlphaGo из-за его большой размерности, каждая точка имеет более 300 вариантов выбора, 300 слоев, пройти почти невозможно, даже с альфа-бета обрезкой.

    Рисунок 12 представляет собой дерево поиска Монте-Карло. Нам нужно найти ветвь с лучшим эффектом в пределах определенного бюджета расчета.Мы можем сами смоделировать игру в шахматы.Поиграв, мы обнаруживаем, что эта ветвь выигрывает, тогда мы думаем, что эта ветвь может быть хорошей ветвью, но если противник поменяется его стратегия, вы можете потерять. Проблема, которую должно решить дерево Монте-Карло, состоит в том, как найти хорошую ветвь, которую можно пробовать много раз, но нельзя пробовать бесконечно. Другими словами, это вопрос о том, как сбалансировать Разведку и Эксплуатацию.ExplorationТо есть в некоторые шахматы еще ни разу не играли, поэтому постараюсь изучить как можно больше, но исчерпать их невозможно. Если у нас есть только стратегия исследования, то это случайная стратегия, и мы будем исследовать то, что еще не исследовали.Этот алгоритм очень неэффективен.Без эвристики это слепое исследование, а эффективных образцов получается очень мало.ExploitationИменно тогда я понимаю, что могу победить, идя этим путем. Я стараюсь идти этим путем как можно дальше вперед, и я продолжаю вносить некоторые коррективы ниже, чтобы прояснить это. , некоторые из которых не были изучены. Как решить эти две проблемы? Проще всего дать вес, скажем, 0,01, каждый раз, когда мы генерируем случайное число, есть 1% шанс, что мы будем исследовать новые узлы, в противном случае мы будем использовать старые узлы.

    Рис. 13 Дерево поиска Монте-Карло

    MCTS — это эвристический алгоритм поиска, который может дать относительно хорошие результаты в ограниченном вычислительном пространстве. Здесь не обязательно найти абсолютное значение для вас. Можете ли вы доказать, что AlphaGo должна быть лучшей игрой? Конечно нет, потому что он не был исследован. Но с помощью этого метода мы нашли алгоритм с высоким коэффициентом выигрыша и большим количеством исследованных мест. На рис. 13 показаны четыре этапа собственного MCTS. Содержит несколько функций:

    • выберите(выборка), на нем какие-то числа, слева — количество побед, справа — количество посещений, а родительский узел — это сумма дочерних узлов. Например, самый правый узел — 0/3, что означает, что этот узел был исследован 3 раза, но ни разу не выиграл. Например, первый шаг в Го - на углу. Я действительно протестировал ситуацию с углом. Протестировав его несколько раз, я каждый раз проигрывал. В это время вероятность игры на углу на самом деле очень низкая, но его вероятность не может быть низкой, равна 0. MCTS выберет узлы с высокой вероятностью выигрыша, но с небольшим количеством посещений. Например, здесь выбрано 3/3 узла. Найдите узлы с наибольшей вероятностью выигрыша и небольшим количеством посещений,

    • расширять(расширение), добавьте новый узел к только что выбранному узлу, а затем инициализируйте его значением 0/0.

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

    • Обратная связь(Обратное распространение) обратная связь выше, эта дорога посещается еще раз, и количество побед не увеличилось.

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

    Рисунок 14 AlphaZero

    Рисунок 14 взят из статьи AlphaZero.Он также имеет четыре этапа.Название аналогично предыдущему, потому что он использует MCTS. Предсказание нейронной сети в начале очень неточное.Инициализация будет случайным образом генерировать некоторые числа с плавающей запятой.При умножении обнаруживается, что вероятность выигрыша в игре не совпадает с реальной вероятностью.Для обучения этой модели , нам нужно сгенерировать образцы. В модели есть значение, но вы не знаете, хорошее это значение или нет, вам нужно сыграть всю игру, если вероятность выигрыша установлена ​​​​на 1, в противном случае - на 0. Последнее — это реализация функции потерь.Здесь используются две нейронные сети с двумя весами, поэтому потеря будет состоять из двух частей.

    Рисунок 15 Альфа-ноль

    На рис. 15 есть некоторые формулы и определения, которые здесь не приводятся, но вы можете их почувствовать. Go — это дерево. При выборе узлов учитываются два фактора. Один — это вероятность того, что узел выиграет в шахматы. Например, 70% выигрышей в шахматах. И P, и V являются параметрами, генерируемыми нейронной сетью. В стандартном UCB есть вес (1/C). Чем больше количество посещений, тем меньше значение UCB, чем меньше у вас посещений, тем выше значение. В определенной степени этот фактор может не быть рассмотрены.пусть Он пошел, чтобы исследовать больше. В дополнение к этим есть некоторые оптимизации, которые позволяют как можно раньше исследовать как можно больше.

    Рисунок 16 Автоматическое получение

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

    Рисунок 17 Автоматическое получение

    Мы сами реализовали вывод и обнаружили, что реализация на чистом Python намного быстрее, чем tensorflow: для выполнения 100 000 добавлений требуется около 12 секунд, а для использования Miniflow — около 0,16 секунды. Включая обучение вычитанию и логистической регрессии, это тест в конкретном сценарии без учета распределения и графического процессора. Бэкенд tensorflow реализован на C++, и его основные накладные расходы — это взаимодействие между python и C++, Этот шаг очень трудоемкий, а его производительность намного ниже, чем у реализации на чистом python.

    Реализация архитектуры платформы облачного машинного обучения

    Рис. 18 Архитектурный проект

    Можно ли построить облачную платформу машинного обучения только с тензорным потоком? Реализация LR с тензорным потоком может обучать разреженную модель размером 1 миллиард измерений на одной машине. Все мы знаем, что размер модели размером 1 миллиард — это массив чисел с плавающей запятой размером миллиард.Если память достаточно велика, мы можем поддерживать больше, но одна машина не может поддерживать 10 триллионов измерений, потому что 10 триллионов измерений — это порядка 400Т, т.е. найти 400Т памяти с помощью распределенного обучения тоже сложно. Решение состоит в том, чтобы учесть, что модель будет инициализирована при определении модели, а значения, которые не появились, представлены 0, а формат выборки кадра, который мы реализуем сами, может быть очень гибким. Интеграция фреймворков с открытым исходным кодом и фреймворков собственной разработки.

    Что нам нужно учитывать при разработке архитектуры нашей собственной платформы, так это поддержку тензорного потока с открытым исходным кодом, поскольку он очень популярен, и мы можем реализовать на нем множество моделей. Кроме того, должна поддерживаться наша собственная разработанная среда машинного обучения C++.

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

    Последний — поддержка рабочих процессов машинного обучения. Рабочий процесс машинного обучения детерминирован и должен поддерживаться лучшими инструментами.

    Рис. 18 Архитектурный проект 2

    Платформы машинного обучения классифицируются как:

    • IaaS предоставляет только услуги виртуальных машин;

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

    • MLaaS находится между PaSS и IaaS, у него есть механизм рабочего процесса. Можно реализовать весь рабочий процесс машинного обучения.

    Рис. 19 Платформа машинного обучения

    Рисунок 19 — наша собственная реализация платформы. Верхний слой — это наш бизнес, с неструктурированными данными и традиционными рекомендательными системами. Нижний уровень — это наши вычислительные ресурсы, включая общедоступное облако, частное облако и GPU. Мы больше всего полагаемся на две платформы планирования внизу: Kubernetes Executor и Hadoop Executor. Внедрите обучение моделей, услуги моделей, управление данными, извлечение функций, оценку моделей, услуги самообучения в структуре планирования и предоставьте API-интерфейсы внешнему миру.

    Если мы просто хотим реализовать функции Google CloudML, это на самом деле очень просто. Все мы знаем, что Kubernetes — это общий сервис планирования задач. Для рабочей среды tensorflow мы упаковываем его в образ Docker, вместо того, чтобы напрямую использовать API Kubernetes, мы можем в определенной степени инкапсулировать API.

    Рисунок 20 Рабочий процесс

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

    Рисунок 21 Рабочий процесс 2

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

    Рисунок 22 Оператор

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

    Рис. 23 Высокая доступность

    Когда мы будем делать платформу, мы обязательно рассмотрим высокую доступность и мультиарендность. Высокая доступность системы – это, безусловно, высокая доступность различных ее компонентов. Мы знаем, что k8s полагается на etcd, а сам etcd использует протокол Raft, поэтому он обеспечивает высокую доступность за счет развертывания нескольких узлов. Пользователь реализует сервер API, который в настоящее время представляет собой java-приложение, основанное на Zookeeper или кластере master-slave, реализованном etcd. БД мы используем схему высокой доступности MySQL.

    Рисунок 24. Мультитенантность

    Платформа предназначена для предприятий или пользователей других облачных платформ, поэтому необходимо реализовать мультитенантность. Есть две концепции: аутентификация и авторизация. Аутентификация Мы поддерживаем несколько методов: имя пользователя/пароль, AK/SK, последний является более высоким методом аутентификации. LDAP предназначен для удовлетворения потребностей корпоративных пользователей. Разрешите способ сделать нашу собственную реализацию RBAC.

    Рис. 25 Мультиарендность 2

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

    Рис. 26 Мультиарендность 3

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

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