Блог - Просто о сложном

Искусственный мозг, а что внутри?

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


Нейрон - основа любого разума


Как известно из биологии, мозг любого живого существа (в том числе и человека), состоит из огромной сети нервных клеток - нейронов. Посредством крохотных отростков, называемых дендритами, нейроны получают информацию извне. Далее через аксоны они пропускают (или не пропускают) импульсы - слабые электрические сигналы. Эти сигналы несут информацию. Так происходит “мышление”. Если утрировать процесс, то это выглядит так: поступил сигнал “горячо” - сработал оценочный механизм и дальше пошел в мышцы сигнал - “убрать руку”. Искусственный интеллект работает по тому же принципу и строится на искусственных нейронах.

В биологии нейрон - очень сложное устройство, которое должно не только выполнять функцию передачи сигналов, но и поддерживать свою жизнедеятельность. С искусственными нейронами все проще - их функциональность сводится к суммированию входящих импульсов, их оценке и передаче сигнала дальше по своему аксону. Если суммарные входные импульсы превышают пороговое значение - выходной импульс формируется, если не превышают - импульс не формируется.
Строим математическую модель нейрона
Теперь, зная принцип работы нейронов, можно построить математическую модель нейронной сети. Предположим, мы имеем набор входных параметров - x〖_1〗,x〖_2〗,x〖_3〗...,x〖_n〗 и каждый из этих параметров имеет свой вес - w〖_1〗,w〖_2〗,w〖_3〗...,w〖_n〗. Значение каждого входного сигнала умножается на весовой коэффициент, после чего полученное значение передается в функцию активации. В итоге наш сумматор работает по формуле:
S=x〖_1〗*w〖_1〗+x〖_2〗*w〖_2〗+x〖_3〗*w〖_3〗+..x〖_n〗*w〖_n〗. Вот эта несложная формула определяет работу мозга и ее относительно просто запрограммировать.
Давайте рассмотрим конкретный пример: вы собираетесь пойти на рыбалку и размышляете, идти вам на нее или нет. Давайте оценим ряд факторов, которые влияют на успех такого мероприятия. Первое обстоятельство - солнечная погода. Клев идет лучше в пасмурную погоду. При ярком солнце рыба уходит на глубину, поэтому сигнал этого условия указываем как x〖_1〗= 0 для яркой погоды, и x〖_1〗=1 для пасмурной. Второе обстоятельство - атмосферное давление. При высоком давлении крупная рыба становится вялой не клюет. Следовательно - x〖_2〗= 0 при высоком и x〖_2〗= 1 при низком давлении. Третий фактор - скорость ветра. Чем сильнее ветер, тем больше волны и хуже рыбалка — x〖_3〗= 1 для слабого ветра и x〖_3〗= 0 для сильного. Четвертый фактор - перемена погоды. Когда резко меняется погода x〖_4〗= 0, рыба чувствует изменение температуры окружающей среды и аппетит у нее снижается. Каждый фактор обладает своим значением веса, допустим, наиболее важное значение имеет давление и ветер - w〖_3〗= 5, w〖_2〗= 4, а прочие два фактора имеют меньшее влияние на принятие решения - w〖_1〗= w〖_4〗= 1 . Предположим, день был безветренный и пасмурный x〖_3〗= 1, x〖_1〗= 1, давление было высоким x〖_2〗= 0, а погода не менялась x〖_4〗= 0.

Запишем нашу формулу, с учетом факторов, чтобы узнать взвешенное значение сигнала:

S=1*1+0*4+1*5+0*1
S=6

Функции активации


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

Y=f(S)

В качестве функции активации могут использоваться несколько стандартных функций. Во-первых, можно использовать функцию Хевисайда (она же - функция единичного скачка). Это - самый простой вариант, который очень легко программировать.


Другой вариант функции - сигмоидальная или логистическая. Она определяется выражением: Y=1/(1+〖exp〗^((-aS)) ). В данном случае параметр a определяет степень крутизны функции. Чем больше взвешенная сумма S, тем ближе выход Y
будет к единице (при этом, никогда ее не достигая). И наоборот, чем меньше взвешен­ная сумма S, тем сильнее выход нейрона Y будет стремиться к нулю.


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

Для построения более реалистичной модели нервной клетки используется функция гиперболического тангенса. Такая функция используется чаще биологами.
Y=th(S).


Разновидности нейронных сетей


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

Обучение нейронной сети


Любая нейронная сеть сама по себе не эффективна. Ее возможности раскрываются только после обучения. Как именно происходит обучение нейронной сети и что это такое?

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

Существует также особый вариант обучения нейронной сети - без учителя. В этом случае сеть самостоятельно разделяет входные сигналы и при этом не имеет эталонных сигналов для сравнения. Предположим, задача такой сети - определить на фотографии самолет. По мере обучения сеть начинает группировать подаваемые на вход сигналы на классы. Сеть выделяет признаки, по которым может отличить транспорт - колеса, окна, крылья. Этот процесс называется кластеризацией. Самообучающаяся система обладает неограниченными возможностями и максимально повторяет биологию человека. Ведь большинство навыков пришли к вам после самостоятельного обучения. Вспомните себя, когда вы впервые учились читать и уяснили, что четыре наклонных палочки - это буква “М”. Вот, метро - буква “М”, а вот - магазин, в названии которого тоже буква “М”. А вот - просто четыре веточки на земле, как смешно они лежат - ну точно буква “М”!

Заключение


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