Машины уже умеют находить лица на фотографиях, искать террористов в видеопотоке, переводить тексты и понимать звуковые команды. Нейронные сети, копирующие структуру мозга, являются элементарным кусочком любого сложного алгоритма. Из лекции вы узнаете, как всё это связано с уравнениями, неравенствами и производными, какие интересные открытия случились за последнее время, а также на чём стоит начать программировать сейчас, чтобы однажды стать экспертом в психологии роботов.
Если вспомнить фильм «Терминатор» и технологии, которыми по сюжету пользовались киборги, то можно будет выделить и нейронные сети, и возможность беспроводной связи с внешним источником интеллекта (Skynet), и компьютерное зрение, и распознавание звука, понимание различных языков. На момент выхода фильма на экраны все это было абсолютной фантастикой, технологиями далекого будущего. Но сегодня большая часть этих технологий реализована в том или ином виде. Попробуем разобраться, что же из всего перечисленного уже используется.
На картинке выше можно увидеть результат работы полностью автономного алгоритма распознавания. Практически все объекты на картинке распознаны верно. Что касается распознавания голоса, то с ними в наше время сталкивался почти каждый обладатель смартфона: голосовой ввод поисковых запросов и голосовые команды GPS-навигатору уже не кажутся чем-то необычным. Технологии машинного перевода благодаря переходу на статистическую модель также за последние пару десятилетий продвинулись очень далеко и плотно вошли в нашу жизнь. В большинстве случаев перечисленные технологии применяют передачу данных на сервер, который распознает, переводит или еще каким-либо образом обрабатывает данные. Так что и беспроводная связь с внешним интеллектом уже реализована и широко применяется.
Но отойдем от «Терминатора» и попробуем определить, что же понимается под искуственным интеллектом, и в какой момент мы сможем с уверенностью сказать, что машина сравнялась по интеллекту с человеком. На ум сразу приходит всем известный тест Тьюринга, в котором человеку нужно определить, с кем он общается: с человеком или машиной.
Человеческое мышление построено на основе сетей нейронов головного мозга. Эти нейроны вдохновили ученых на создание искусственного нейрона. Искуственный нейрон получает на вход несколько значений с различными весами, зависящими от важности входящей связи. Нейрон проводит взвешенное суммирование и выдает предсказанное значение и принимает некоторое решение:
Если представить нейрон как классификатор точек в трехмерном пространстве, то для каждой точки, взвешенная сумма которой будет положительна, он будет присваивать значение 1, а тем точкам, у которых взвешенная сумма отрицательна – значение -1. Предположим, что у нас есть нейрон с двумя входами, тогда взвешенная сумма будет уравнением прямой на плоскости.
Если сигнал оказывается справа от прямой, он становится синим, а если слева – красным. Нейрон раскрашивает часть плоскости в плюс, а часть плоскости – в минус. Таким образом, у нас появляется способ тренировать искусственные нейроны. Предположим, у нас есть некоторое количество точек, про которые мы знаем, плюсовые они или минусовые. Мы берем наш нейрон и за счет манипуляции с весами мы получаем каждый раз новое уравнение плоскости. И мы подбираем это уравнение плоскости таким образом, чтобы все синие точки были по одну сторону прямой, а все красные – по другую.
Если нам повезет, то нам удастся разделить их ровно, чтобы ни одна точка не осталась на неправильной стороне. Но так получается не всегда, поэтому нам нужно стремиться к тому, чтобы с одной стороны оставалось побольше синих точек, а с другой – побольше красных. Постараемся описать это с точки зрения математики. Математика хорошо умеет искать максимумы функций, для чего нужно найти точку, где производная равна нулю. Мы можем взять сигмоиду – функцию близкую к нашему индикатору, но из которой при этом можно извлечь производную. Ее можно дифференцировать и использовать всю мощь математического анализа для решения нашей задачи.
Если мы возьмем yi за правильные значения, а xi за входящие значения, то мы можем получить вот такой квадрат:
Эту функцию мы можем дифференцировать, а значит мы можем найти ее минимум, так как это и есть ошибка – отклонение настоящих значений от предсказанных. Так можно натренировать нейрон, который достаточно хорошо разделяет точки.
Благодаря этому алгоритму удалось добиться очень неплохих результатов, в частности – в распознавании букв. Допустим, у нас есть у нас есть сетка пять на пять ячеек – двадцать пять клеток. Для каждой клетки мы можем посчитать, какой процент клетки заполнен. Получившиеся 25 значений мы подаем на вход одному нейрону. Натренировав нейрон по нашему алгоритму, мы сможем распознать все буквы алфавита.
Однако так все это работает только до тех пор, пока буквы стоят в сетке ровно. Из-за слишком большого количества вариантов расположения букв, алгоритм уже не справляется распознаванием. Как можно решить эту проблему? Первое, что приходит в голову – попытаться вместо сетки использовать для букв набор каких-нибудь отличительных признаков. Будем смотреть на букву не как на 25 пикселей, а как на набор характеристик, которые не зависят от поворотов. Например, рассмотрим ее как граф, вытащим оттуда вершины первой степени, второй степени, третьей степени, вытащим циклы.
Если мы возьмем три значения и каждое из них отправим на три нейрона первого слоя, каждый из них посчитает взвешенную сумму, посчитает сигмоиду и переправит ее на следующий слой, в итоге все они соберутся на выходной нейрон, который построит предсказанное значение. Зачем это нужно? Примерно так организован наш мозг: нейроны связаны друг с другом, у них есть входные и выходные ответвления. Обучается такая есть примерно следующим образом:
Досмотрев лекцию до конца, вы узнаете, как именно обучаются нейронные сети, какие у них бывают архитектуры, почему матан – добро, а функан – еще большее добро, что такое клеточные автоматы и как же тренируют роботов.
Если вспомнить фильм «Терминатор» и технологии, которыми по сюжету пользовались киборги, то можно будет выделить и нейронные сети, и возможность беспроводной связи с внешним источником интеллекта (Skynet), и компьютерное зрение, и распознавание звука, понимание различных языков. На момент выхода фильма на экраны все это было абсолютной фантастикой, технологиями далекого будущего. Но сегодня большая часть этих технологий реализована в том или ином виде. Попробуем разобраться, что же из всего перечисленного уже используется.
На картинке выше можно увидеть результат работы полностью автономного алгоритма распознавания. Практически все объекты на картинке распознаны верно. Что касается распознавания голоса, то с ними в наше время сталкивался почти каждый обладатель смартфона: голосовой ввод поисковых запросов и голосовые команды GPS-навигатору уже не кажутся чем-то необычным. Технологии машинного перевода благодаря переходу на статистическую модель также за последние пару десятилетий продвинулись очень далеко и плотно вошли в нашу жизнь. В большинстве случаев перечисленные технологии применяют передачу данных на сервер, который распознает, переводит или еще каким-либо образом обрабатывает данные. Так что и беспроводная связь с внешним интеллектом уже реализована и широко применяется.
Но отойдем от «Терминатора» и попробуем определить, что же понимается под искуственным интеллектом, и в какой момент мы сможем с уверенностью сказать, что машина сравнялась по интеллекту с человеком. На ум сразу приходит всем известный тест Тьюринга, в котором человеку нужно определить, с кем он общается: с человеком или машиной.
Как работают умные компьютеры
Человеческое мышление построено на основе сетей нейронов головного мозга. Эти нейроны вдохновили ученых на создание искусственного нейрона. Искуственный нейрон получает на вход несколько значений с различными весами, зависящими от важности входящей связи. Нейрон проводит взвешенное суммирование и выдает предсказанное значение и принимает некоторое решение:
Если представить нейрон как классификатор точек в трехмерном пространстве, то для каждой точки, взвешенная сумма которой будет положительна, он будет присваивать значение 1, а тем точкам, у которых взвешенная сумма отрицательна – значение -1. Предположим, что у нас есть нейрон с двумя входами, тогда взвешенная сумма будет уравнением прямой на плоскости.
Если сигнал оказывается справа от прямой, он становится синим, а если слева – красным. Нейрон раскрашивает часть плоскости в плюс, а часть плоскости – в минус. Таким образом, у нас появляется способ тренировать искусственные нейроны. Предположим, у нас есть некоторое количество точек, про которые мы знаем, плюсовые они или минусовые. Мы берем наш нейрон и за счет манипуляции с весами мы получаем каждый раз новое уравнение плоскости. И мы подбираем это уравнение плоскости таким образом, чтобы все синие точки были по одну сторону прямой, а все красные – по другую.
Если нам повезет, то нам удастся разделить их ровно, чтобы ни одна точка не осталась на неправильной стороне. Но так получается не всегда, поэтому нам нужно стремиться к тому, чтобы с одной стороны оставалось побольше синих точек, а с другой – побольше красных. Постараемся описать это с точки зрения математики. Математика хорошо умеет искать максимумы функций, для чего нужно найти точку, где производная равна нулю. Мы можем взять сигмоиду – функцию близкую к нашему индикатору, но из которой при этом можно извлечь производную. Ее можно дифференцировать и использовать всю мощь математического анализа для решения нашей задачи.
Если мы возьмем yi за правильные значения, а xi за входящие значения, то мы можем получить вот такой квадрат:
Эту функцию мы можем дифференцировать, а значит мы можем найти ее минимум, так как это и есть ошибка – отклонение настоящих значений от предсказанных. Так можно натренировать нейрон, который достаточно хорошо разделяет точки.
Благодаря этому алгоритму удалось добиться очень неплохих результатов, в частности – в распознавании букв. Допустим, у нас есть у нас есть сетка пять на пять ячеек – двадцать пять клеток. Для каждой клетки мы можем посчитать, какой процент клетки заполнен. Получившиеся 25 значений мы подаем на вход одному нейрону. Натренировав нейрон по нашему алгоритму, мы сможем распознать все буквы алфавита.
Однако так все это работает только до тех пор, пока буквы стоят в сетке ровно. Из-за слишком большого количества вариантов расположения букв, алгоритм уже не справляется распознаванием. Как можно решить эту проблему? Первое, что приходит в голову – попытаться вместо сетки использовать для букв набор каких-нибудь отличительных признаков. Будем смотреть на букву не как на 25 пикселей, а как на набор характеристик, которые не зависят от поворотов. Например, рассмотрим ее как граф, вытащим оттуда вершины первой степени, второй степени, третьей степени, вытащим циклы.
Нейронная сеть
Если мы возьмем три значения и каждое из них отправим на три нейрона первого слоя, каждый из них посчитает взвешенную сумму, посчитает сигмоиду и переправит ее на следующий слой, в итоге все они соберутся на выходной нейрон, который построит предсказанное значение. Зачем это нужно? Примерно так организован наш мозг: нейроны связаны друг с другом, у них есть входные и выходные ответвления. Обучается такая есть примерно следующим образом:
Досмотрев лекцию до конца, вы узнаете, как именно обучаются нейронные сети, какие у них бывают архитектуры, почему матан – добро, а функан – еще большее добро, что такое клеточные автоматы и как же тренируют роботов.