реклама
Бургер менюБургер меню

Игорь Шнуренко – Демон внутри. Анатомия искусственного интеллекта (страница 34)

18

Ведь «Фейсбуку» есть что рассказать о каждом из них. В фильме The Circle с Томом Хэнксом и Эммой Уотсон некая соцсеть, очень похожая на дитя Цукерберга, собирает компромат на всех политиков — ведь все мы сегодня прозрачны для наших гаджетов, как бы ни старались что-то скрыть. Сеть совсем не стесняется раскручивать нужных из них и останавливать неудобных.

Еврокомиссия в 2018 году подала против «Фейсбука» многомиллиардный судебный иск как раз на основании GDPR, после масштабного взлома данных пользователей. Но перспективы этого иска неясны. Еще более серьезным казался «наезд» на «Фейсбук» в том же году американского конгресса, разгневанного вмешательством соцсети в политику. Об этом стало известно в ходе скандала вокруг компании Cambridge Analytica, которая, скорей всего, отрабатывала для «Фейсбука» технологии, позволяющие влиять на исход выборов в таких странах, как США и Великобритания. На стриминговом канале Netflix недавно вышел документальный фильм The Big Hack, который подробно рассказывает о деле Cambridge Analytica, о том, как корпорация с вполне рутинной менеджерской структурой — примерно так же организован «Макдональдс» или «КЕС» занимается прибыльным бизнесом: манипуляцией массовым сознанием.

Об этом более подробно в другой главе, а здесь отмечу, что дело Cambridge Analytica, похоже, спущено на тормозах. Не исключено, что в ход пошли приемы, о которых рассказывает фильм The Circle.

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

Что отличает сверточные нейросети от других нейросетей? Разница между ними в наличии так называемых сверточных слоев, где и происходит распознавание паттернов. Сверточный слой — это своего рода фильтр или набор фильтров, благодаря которым система выделяет паттерны все более высоких уровней.

Что такое паттерны? Любое изображение можно разбить на многочисленные края, формы разных видов, углы, кружки, текстуры и так далее — то есть объекты, которые повторяются. Это и есть паттерны. Например, один из типов паттерна, который нейросеть может распознать — это края изображения. Фильтр для этого типа паттерна можем назвать «детектор краев», фильтр для углов — «детектор углов» и так далее. Фильтр нейросети выделит паттерн в нашем изображении и передаст эту информацию дальше. Самые простые геометрические паттерны мы обнаруживаем на первых слоях нашей сети, и чем дальше мы в нее углубляемся, тем более сложные и абстрактные паттерны мы можем разглядеть. Например, глаза, уши, волосы, мех, перья, носы, бороды, лысины, клювы и так далее — это тоже паттерны. Идем в сеть еще глубже — и уже распознаем паттерны собак, кошек, ящериц, политиков, змей, телеведущих...

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

Допустим, обучение идет с учителем, который знает, как выглядит кошка. На входе сети действительно кошка, а вот на выходе сеть выдает сигнал ошибки. Неправильно! — говорит учитель, и применяет к сети алгоритм обратного распознавания ошибки. Алгоритм этот впервые был описан в 1974 году преподавателем МФТИ Александром Галушкиным, о котором рассказывалось ранее. Свой вариант метода предложил и канадец Джефф Хинтон, который совсем недавно произвел большой шум в области машинного обучения, когда ввел в оборот продвинутую архитектуру капсульных нейросетей. О них мы еще поговорим.

Что делает алгоритм обратного распознавания ошибки? Он автоматически перенастраивает веса соединений сети для того, чтобы при следующем показе кошки этот результат был получен с меньшей вероятностью. Основная идея этого метода состоит в распространении сигналов ошибки от выходов сети к её входам, в направлении, обратном прямому распространению сигналов в обычном режиме работы. Потом машине снова показывают точно ту же кошку—и сеть опять выдает ошибку. Ее снова автоматически перенастраивают, и так продолжается до тех пор, пока она не выдает правильный сигнал. Сеть запоминает веса соединений при правильном ответе и воспроизводит их уже когда ей показывают следующую кошку. Тут все повторяется снова — и так до тех пор, пока сеть не научится распознавать всех кошек и отличать их от всего остального. Конечно, в этом описании не учтено множество важных аспектов, о некоторых из которых пойдет речь ниже.

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

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

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

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

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

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

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