Deep Machine Learning
Технологии Deep Learning (глубокого обучения) подразумевают моделирование нейронных сетей человеческого мозга на компьютере. Deep Machine Learning или глубокое машинное обучение представляет попытку обучить компьютерную модель самостоятельно взаимодействовать с объектами аналогично мозгу человека, но без ограничений последнего по объёму операций и обрабатываемой информации. Для этого программе предлагаются большие объёмы данных, которые она может обрабатывать, не следуя жёстким программным ограничениям, а корректируя заданные алгоритмы анализа.
Зачем нужно машинное обучение
Глубокое машинное обучение применяют для решения задач, которые слишком сложны для непосредственного программирования людьми. Некоторые задачи настолько трудоёмки, что для человека нецелесообразно, если не невозможно, проработать все нюансы и представить адекватный код. Вместо этого программист предоставляет большой объем данных алгоритму машинного обучения и позволяет алгоритму обрабатывать эту информацию в поисках модели, которая позволит достичь поставленных программистом целей. Нейросети уже применяются для:
- распознавания речи и изображений,
- выявления неполадок и аномалий,
- определения подлинности предметов,
- помощи специалистам на производстве,
- составления прогнозов.
Людям очень трудно писать программы, решающие эти проблемы, и даже если бы у программиста было представление о том, как это сделать, такая программа может оказаться слишком сложной для исполнения. Так, трудно написать программу для определения вероятности того, что транзакция по кредитной карте совершена мошенником. Никаких простых и надежных правил для определения этого у человека нет, и программисту нужно свести воедино очень большое количество размытых правил. Если же доверить решение этих задач компьютеру, то при правильном обучении искусственной нейросети она будет генерировать результаты, точность которых превысит 90%.
Как работает Deep Machine Learning
Вместо того, чтобы писать программу вручную для каждой конкретной задачи, программисты собирают множество примеров, которые указывают правильный вывод для конкретного ввода. Затем алгоритм машинного обучения берёт эти примеры, переводя их в понятный для него числовой вид, и создает модель — искусственную сеть, которая выполняет эту работу. Модель, созданная алгоритмом обучения, может сильно отличаться от обычной «рукописной» программы и может содержать миллионы чисел. Если всё сделано правильно, модель будет работать одинаково точно как для новых случаев, так и для тех, на которых её обучали. Если данные изменяются, модель также может измениться, подстраиваясь под новые данные.
Обучение глубокой нейронной сети обычно начинают с ввода случайных значений с учётом веса вводимой информации. Для этого берут набор входных данных и передают их через слои сети, чтобы получить конечный прогноз. После этого сравнивают полученные прогнозы с ожидаемыми значениями и при необходимости обновляют все слои сети, меняя вес элементов, их смещение и другие параметры. Оптимизация сети продолжается до тех пор, пока её создатели не посчитают, что получили надёжную прогностическую модель.
Примеры задач, решаемых с помощью машинного обучения:
- Распознавание паттернов — объектов в реальных сценах, лиц или выражений лица, произнесённых слов.
- Распознавание аномальных действий и явлений. Это могут быть необычные последовательности транзакций по кредитным картам или аномальные схемы показаний датчиков на атомной электростанции. В медицине такой подход нашёл применение для диагностики различных болезней: болезни Альцгеймера или глазных заболеваний, диагностируемых с помощью МРТ и ОКТ соответственно.
- Также компьютерные алгоритмы на основе нейронных сетей дают более точные прогнозы в сравнении с другими моделями: прогнозируют будущие цены на акции или курсы валют, а также предлагают музыку или фильмы, которые могут понравиться конкретному человеку.
Эффективность глубоких нейронных сетей
Наглядный пример того, какого успеха может добиться нейронная сеть, используя методы глубокого обучения, — шахматная программа AlphaZero. В 2018 году «АльфаЗиро» не оставил ни малейшего шанса лучшему на тот момент шахматному движку Stockfish, выиграв 155 игр и проиграв всего шесть из сыгранных 1000. И даже в неравных условиях (непобедимый для человека Stockfish имел в 10 раз больше времени на ход) AlphaZero оказался сильнее. Такие результаты «АльфаЗиро» продемонстрировал, анализируя всего по 80000 позиций против 70 миллионов позиций в секунду у «Стокфиш», действовавшего по методу сплошной выборки. Аналогичным образом был повержен лучший движок по игре в сёги и го, Elmo, который мог анализировать по 35 миллионов позиций в секунду. AlphaZero разгромил Elmo, выиграв 90 партий из 100 в сёги и 60 из 100 партий в го.
Традиционные шахматные движки, в том числе чемпион мира по компьютерным шахматам Stockfish, полагаются на тысячи правил, созданных сильными игроками-людьми, которые пытаются учесть все возможные варианты в игре. AlphaZero использует совершенно другой подход, заменяя эти созданные вручную правила алгоритмами нейронных сетей глубокого обучения. Изначально программа ничего не знала об игре, кроме основных правил, заложенных в неё создателями, но, используя принципы глубокого машинного обучения, смогла превзойти все традиционные модели, созданные по обычным принципам Machine Learn, основанным на переборе вариантов.
Google Translate и другие
Люди, которые давно пользуются этим сервисом машинного перевода, не могли не заметить, насколько улучшилось его качество за последние 2-3 года. Раньше в результатах Google Translate при переводе с английского языка на русский приходилось исправлять почти каждое предложение, а смысл многих был едва понятен. Теперь переводчик не совершает ошибок в простых фразах и хорошо справляется с переводом специальной литературы. Это стало результатом обучения нейронной сети по библиотеке TensorFlow вместо статистического перебора фразовых конструкций, применявшегося раньше. Новые алгоритмы намного улучшили качество перевода на европейские языки и обратно и с таких сложных языков, как китайский и японский.
Ещё одним интересным результатом Deep Learning является нейронная сеть «Порфирьевич», созданная российским программистом Михаилом Гранкиным, который обучал её на примерах классиков русской литературы. «Порфирьевич» самостоятельно дописывает фразы, вводимые пользователями, создавая забавные, но логичные варианты.
Методы машинного обучения
Существует три метода машинного обучения: контролируемое, неконтролируемое и полуконтролируемое:
- При контролируемом обучении с учителем (супервайзером) программе предлагаются исходные данные (входные переменные), обрабатывая которые, она должна выдавать прогнозируемый результат (выходная переменная). При генерации неверных выходных переменных нейросеть должна корректировать вычисления до устранения ошибок в результатах на больших объёмах данных. Пример: обучить модель давать корректный прогноз погоды на основании метеоданных за 100 лет.
- Неконтролируемым называется такой метод, при котором отсутствуют определённые выходные переменные. Целью такого процесса является моделирование распределения данных, чтобы узнать о том, какие результаты могут получиться из определённого набора входных переменных. Алгоритмы в этом случае оставляют на усмотрение программы для того, чтобы исследовать особенности структуры выходных данных. Выходные переменные, определяемые функцией активации входного слоя, могут быть кластерными (отдельные группы с непересекающимися свойствами) или ассоциативными (группы данных с пересекающимися свойствами). Пример: анализ поведения покупателей — люди, которые покупают товар X, также склонны покупать товар Y (ассоциативные выходные переменные).
- Полуконтролируемый метод сочетает признаки двух предыдущих. Полуконтролируемое обучение основано на принципе определения неизвестного по частично известной информации. Нейросети дают набор фотографий, в котором помечены только некоторые изображения (собака, кошка, человек), а остальные не имеют маркировки. Задача модели — корректно классифицировать остальные изображения, распределив их по соответствующим группам.
Что такое нейросети, и как они работают
Компьютерные нейронные сети (Neural Networks) — это особый набор алгоритмов, которые были вдохновлены биологическими нейросетями. Такие сети приближены к общим программным функциям, поэтому их можно применять к любой проблеме машинного обучения, если проблема заключается в изучении и интерпретации сложных моделей из входного пространства в выходное.
Принцип действия нейросетей заключается в следующем. Любая нейросеть состоит из несколько групп связанных нейронов, из которых два, входной и выходной слои, являются внешними, а остальные — внутренними (скрытыми). Первый слой нейронов используется сетью для получения входных переменных. Скрытые слои обрабатывают результаты по следующему принципу: каждое соединение нейронной сети имеет определённый вес, который определяет важность отношений между нейронами с учётом входного значения. Выходные переменные, принимаемые последней группой нейронов, представляют результат обработки входящих данных скрытыми слоями.
Особенности глубокого обучения
Современные глубокие нейронные сети, доказавшие свою эффективность в различных областях, являются продвинутой моделью обычных нейросетей. Их особенность заключается в большом количестве внутренних слоёв (до 10 и более) и фильтров, которые работают с входящими значениями и меняют вес элементов сети, нейронов, изменяя и характер связи между нейронами. Также, в отличие от обычной модели машинного обучения, нейронная сеть глубокого обучения имеет больше возможностей для самообучения. Это достигается за счёт способности нейронной сети к градиентному спуску (обратному распространению).
Этот процесс схож с отладкой программного кода, когда программист, запуская написанную программу, обнаруживает, что результаты, которые выдаёт программа, неверны. Тогда программист изучает код в поисках ошибок, приводящих к выдаче неверных значений, и правит код до тех пор, пока программа не начинает выдавать то, что нужно. Таким же способом, слой за слоем, нейронная сеть продвигается вглубь себя, анализируя, где была допущена ошибка в присвоении весов определённым нейронам или иных параметрах. Ошибка корректируется и процесс генерации результатов возобновляется — затем, если допускаются новые ошибки, происходит очередная самодиагностика и перестройка слоёв. Недостатков у глубинных нейросетей всего два:
- сложность интерпретации получаемых результатов,
- значительные вычислительные мощности, требуемые для просчёта операций в матрице нейронов.
Поэтому для глубоких нейронных сетей используются средства аппаратного ускорения (графические и тензорные процессоры, FPGA и т. д.), сокращающие процесс в десятки и сотни раз в сравнении с обычными «бытовыми» компьютерами.
Нейронные сети и искусственный интеллект
Глубокое обучение нейронных сетей можно рассматривать как частный случай машинного обучения, которое является частью ещё более общего поля ИИ — искусственного интеллекта. Компьютерный ИИ может быть «статичным», когда программа способна действовать только в рамках жёстких ограничений, предписанных ей программным кодом, а может — обучаемым, когда программа представлена в виде нейронной сети. Степень обучаемости ИИ нейросети зависит от возможностей, заложенных в модель программистами.
Основные типы архитектуры нейросетей:
- Самые простые сети прямой связи основаны на перцептронах (Perceptrons), однако обучаемость перцептронов ограничена, поскольку они могут передавать только одно значение.
- Следующий уровень — свёрточные (Convolutional) нейронные сети, которые состоят из многих скрытых слоёв. Такие структуры способны запоминать и передавать несколько значений. Свёрточные нейронные сети отличаются от большинства других и в основном применяются для обработки изображений.
- Третий тип — рекуррентные (Recurrent) нейросети, основанные на моделировании уже не отдельных символов, а последовательностей значений. Применяя машинное обучение к последовательностям, программисты часто хотят трансформировать входную последовательность в выходную другого типа. Пример: превратить последовательность звуков в текст. Это возможно с помощью рекуррентных нейросетей, состоящих из множества перцептронов, однако с временными связями. Такие сети могут хранить большие объёмы информации о прошлом, что важно для учёта входных данных, и прогнозировать следующие шаги (передачу определённых сигналов на следующий слой нейросети).
Кратковременная и долговременная память
Все нейросетевые структуры основаны на перцептронах, свёрточных и рекуррентных моделях, однако они могут формировать более сложные модели высокого уровня. Одной из таких моделей являются сети кратковременной и долговременной памяти (Long-Short Term Memory или LSTM), вводящие логические элементы в определённую ячейку памяти. Она хранит предыдущие значения и удерживает их, если только не поступит команда очистить эти значения. LSTM также имеют «входной вентиль», добавляющий новые элементы в ячейку, и «выходной вентиль», который решает, когда передавать значение из ячейки на следующий слой. Функция ячеек заключается в том, что значение из предыдущих итераций модели запоминается настолько долго, насколько это необходимо.
Похожим образом действуют GRU (Gated Recurrent Units или закрытые рекуррентные блоки), но, в отличие от LSTM, GRU не нужны ячейки для передачи значений. Расчеты внутри каждой итерации гарантируют, что передаваемые значения либо сохраняют большое количество старой информации, либо генерируют большие объёмы новой. В большинстве случаев GRU работают так же, как и LSTM, однако закрытые рекуррентные блоки немного быстрее и проще в работе, хотя и менее выразительны.
Старые модели:
- В сети Хопфилда каждый нейрон соединен с любым другим нейроном. Такие модели обучаются путем установки значений нейронов на желаемую схему, после чего можно вычислить весовые коэффициенты, которые затем не изменяются. После обучения одному или нескольким шаблонам модель будет сведена к одному из изученных шаблонов, поскольку она будет стабильна только в этих состояниях. Однако сети Хопфилда ограничены в возможностях обучения, поскольку могут корректно запоминать только небольшое количество шаблонов. Это происходит из-за того, что передаваемые значения могут накладываться друг на друга.
- Машина Больцмана — одна из первых нейронных сетей, способная решать сложные комбинаторные задачи на основе внутренних представлений. Она во многом похожа на модель Хопфилда, но ряд нейронов в ней отмечен входными, а другие остаются скрытыми. Также входные нейроны могут становиться выходными при полном обновлении сети. Модель начинается со случайных весов и учится обратному распространению.
Неконтролируемые подходы к обучению
Обратное распространение является стандартным методом в искусственных нейронных сетях для расчета вклада ошибок каждого нейрона после обработки пакета данных. Однако существуют некоторые серьезные проблемы с использованием обратного распространения. Так, оно требует помеченных данных для обучения, в то время как в реальных задачах почти все данные не помечены. Следующая проблема градиентного спуска в том, что время обучения плохо масштабируется, и потому в сетях с несколькими скрытыми слоями обучение происходит медленно. Чтобы преодолеть ограничения обратного распространения, учёные решили использовать неконтролируемые подходы к обучению. Один из них получил название Deep Belief Networks («сети глубоких убеждений»). Сеть убеждений — это ориентированный ациклический граф, составленный из стохастических переменных. Используя сеть убеждений, можно наблюдать некоторые переменные, а значит можно настраивать взаимодействия между переменными и сделать так, чтобы обучение было более эффективным.
Ещё один метод неконтролируемого обучения основан на автоассоциаторах (autoencoders), нейронных сетях с непомеченными данными. Автоассоциаторы используются для сжатия и последующего восстановления данных при помощи декодера, что позволяет производить расчёты с использованием меньшего количества измерений. Поэтому их можно использовать для уменьшения размеров и предварительной подготовки других нейронных сетей, а также для генерации данных. Также автоассоциаторы обеспечивают гибкое отображение в обоих направлениях, линейное время обучения, а окончательная модель кодирования является компактной и быстрой. Однако оказалось трудно оптимизировать глубокие автоассоциаторы при обратном распространении с малыми начальными весами. Поэтому они сейчас редко используются в практических приложениях.
Генеративные состязательные сети
Генеративные состязательные сети (GAN) — это новое поколение нейросетей, которые работают в паре. Они часто представляют собой комбинацию каналов прямой пересылки и свёрточных нейронных сетей и состоят из двух частей:
- генеративная или порождающая сеть должна генерировать контент,
- дискриминативная или оценочная — оценивать его.
Дискриминативная сеть определяет, выглядит ли изображение, данное генеративной сетью, естественным или оно является искусственно созданным. Задача генеративной сети — создание естественно выглядящих изображений. Порождающая модель здесь похожа на фальшивомонетчика, пытающегося производить и использовать поддельную валюту, а дискриминационная — на полицейского, старающегося обнаружить контрафакт.
Поскольку модели обучаются попеременной оптимизации, оба метода улучшаются до такой степени, что подделку становится почти невозможно отличить от оригинала. GAN является одним из немногих успешных методов в неконтролируемом машинном обучении и выглядит перспективным для решения языковых задач и оптимизации обучения. Генеративные состязательные сети уже применяются для редактирования изображений, оценки 3D-форм, идентификации лекарств и других целей.
Хотите получить более продвинутые знания по машинному обучению и нейронным сетям? Записывайтесь на наши курсы!