[БЕЗ_ЗВУКА] Приветствую вас, уважаемые друзья. Мы продолжаем наш курс по основам искусственного интеллекта, и с вами ваш непременный Роман Душкин. У нас на повестке дня технология искусственного интеллекта, и сегодня мы продолжим и конкретизируем тему, начатую на предыдущем занятии. В центре нашего внимания искусственные нейронные сети. Погнали! В 1943 году американский нейрофизиолог Уоррен Маккалок и математик Уолтер Питтс предложили первую модель искусственного нейрона и основанную на нем модель нейронной сети. Эта модель довольно простая. На входе у такого нейрона имеется определенное количество входных битов, каждый из которых умножается на некоторый действительный весовой коэффициент от 0 до 1. На выходе осуществляется проверка значения функции активации. Если это значение выше некоторого порога, то выход равен 1, то есть нейрон активируется. Если же ниже, то выход равен 0, и нейрон считается неактивированным. Функцией активации обычно является произвольная, монотонно возрастающая функция, принимающая действительные значения в интервале от 0 до 1. Ну а порогом активации является число из этого же интервала. Сегодня существует большое количество функций активации, каждая из которых имеет свои области применения. Это, к примеру, простая линейная функция с возможными сдвигами по обеим осям, это может быть пороговая функция. Наиболее часто используются сигмоиды — логистическая кривая, арктангенс, гиперболический тангенс и другие. И вот такие искусственные нейроны собираются в нейронные сети. Это значит, что выходы одних нейронов подключены к входам других нейронов. Из-за этого все нейроны в рамках нейронной сети можно классифицировать на три класса: входные, промежуточные и выходные. Входные нейроны принимают и обрабатывают значения входных параметров. Промежуточные нейроны осуществляют дальнейшую обработку. Ну а выходные нейроны формируют выходной ответ всей нейросети. Вот, например, если мы подаем на вход нейронной сети изображение, то она как-то внутри себя его перерабатывает, а на выходе сообщает, что на изображении нарисовано. И вот только в 1957 году Фрэнку Розенблатту удалось создать программную реализацию искусственного нейрона и построить на ней искусственную нейронную сеть. Свое изобретение он назвал перцептроном. Перцептрон — это тоже математическая модель для распознавания образов. Это очень мощная модель, которая используется и по сей день. При этом она довольно проста. Фактически перцептрон состоит из трех слоев искусственных нейронов. В первом слое расположены сенсорные нейроны, то есть такие, которые воспринимают входную информацию. В скрытом слое располагаются ассоциативные нейроны, формирующие связи между образами. И в выходном слое представлены реагирующие нейроны, каждый из которых активируется тогда, когда на входе присутствует какой-либо известный и связанный именно с этим активирующимся нейроном образ. Давайте кратко упомянем те достижения, которые были сделаны со времени первого перцептрона до наших дней. Вообще этой теме можно посвятить отдельный курс или даже целый факультет, поскольку она практически неисчерпаема. Так что мы сейчас погрузимся очень кратко, а на специализированном курсе по нейронным сетям вы сможете узнать все в деталях. Только на основе перцептрона были потом созданы: элементарный перцептрон, простой перцептрон, перцептрон с последовательными связями, перцептрон с перекрестными связями, перцептрон с обратными связями, перцептрон с переменными связями. Также перцептроны могут быть однослойными, с одним скрытым слоем и многослойные. Вы можете наглядно видеть, насколько это широкая модель и сколько различных применений она нашла. Фактически перцептрон — это самый простой пример нейронной сети прямого распространения. Другим интересным примером является сеть ELM, экстремально обучающаяся машина. В этой нейросети нейроны не располагаются в слои, а связаны друг с другом случайным образом. Выделяются только входной и выходной слои, а остальные нейроны находятся между ними и связаны друг с другом именно случайно. Другие архитектуры искусственных нейронных сетей, которые я здесь только упомяну, это перцептрон Элмана и перцептрон Джордана, сеть Уорда, сеть Хопфилда, машина Больцмана и их каскадное объединение для формирования глубокой сети доверия, самоорганизующаяся карта Кохонена, когнитрон и неокогнитрон, осцилляторная нейронная сеть, вероятностная нейронная сеть Решетова, нейронная сеть адаптивного резонанса, импульсная нейронная сеть, автокодировщики различной топологии, нейронная сеть Тьюринга, нечеткая нейронная сеть, хаотическая нейронная сеть, сверточные нейронные сети и генеративно-состязательные сети. Две последние — это вообще последний писк моды. Работа с нейронными сетями сводится к двум этапам. Если есть задача, которую можно решить при помощи нейронных сетей, то для этого необходимо подготовить данные и провести обучение нейронной сети, а потом, на втором этапе, осуществить, собственно, решение задачи. Как и в случае машинного обучения, при помощи нейросетей можно решать определенные классы задач. Это задачи классификации, или распознавания образов, кластеризации, аппроксимации, прогнозирования, сжатия данных, анализа данных и оптимизации. Давайте рассмотрим два способа обучения нейронных сетей. Это обучение с учителем и обучение без учителя. Есть еще несколько вариантов обучения, но сегодня мы рассмотрим только два, а остальные вы узнаете в рамках более углубленных занятий. Итак, обучение с учителем и обучение без учителя. Обучение с учителем основано на демонстрации нейронной сети множества примеров типа «стимул — реакция», то есть мы подаем нейронной сети на вход данные, а потом говорим ей, какой должна быть реакция. В результате многочисленных итераций этого процесса нейронная сеть настраивает свои весовые коэффициенты так, чтобы максимально соответствовать обучающей выборке. При этом по результатам обучения она сможет реагировать и на стимулы, которых не было в обучающей выборке. В противоположность этому при обучении без учителя нейронная сеть самостоятельно обучается решать поставленную задачу без вмешательства извне. Такой подход пригоден только для некоторых задач, но зато в большей мере соответствует тому, как обучаются естественные нейронные сети. Теперь давайте обратим свое внимание на то, как настраиваются весовые коэффициенты нейросети. Фактически для этого есть два метода: метод коррекции ошибки и метод обратного распространения ошибки. Метод коррекции ошибки и несколько его модификаций для разных типов перцептронов был предложен Фрэнком Розенблаттом. Его суть заключается в том, что вес связей не изменяется до тех пор, пока текущая реакция перцептрона остается правильной. При появлении неправильной реакции вес изменяется на единицу, а знак изменения определяется противоположным от знака ошибки. В противоположность этому метод обратного распространения ошибки, который был многократно переоткрыт различными исследователями, используется для обучения многослойных нейронных сетей и на сегодняшний момент является наиболее широко используемым методом. Так что на нем надо заострить свое внимание. Суть метода в следующем. В зависимости от решаемой задачи задается некоторая функция ошибки, например, половина суммы квадратов разности между фактическими и желаемыми выходами каждого выходного нейрона. Задачей обучения нейросети является минимизация значения функции ошибки для всех заданных на обучение стимулах. Фактически у нас получается задача многомерной оптимизации в сложном пространстве. Эту задачу можно решить методом градиентного спуска, так что метод обратного распространения ошибки является разновидностью градиентного спуска, применяемого для обучения нейронных сетей. На каждой итерации обучения значение всех весовых коэффициентов модифицируется в зависимости от производной функции активации, а это значит, что такая функция должна быть дифференцируема. И сама ошибка распространяется назад от выходных нейронов к входным, поэтому метод так и называется. Метод определяет вполне конкретные формулы, которые мы сейчас не будем рассматривать. Ваша главная задача сейчас — осознать, что для обучения нейронной сети есть хорошие методы, которые на сегодняшних вычислительных мощностях выполняются очень быстро, особенно если вид функции активации достаточно прост. Как я уже сказал, про нейросети можно говорить практически бесконечно, поэтому надо когда-нибудь остановиться. Вот сейчас и остановимся. Мы кратко прошлись по истории развития нейросетевого подхода в искусственном интеллекте, перечислили известные архитектуры нейронных сетей, узнали про решаемые задачи, методы обучения. Я, как обычно, Роман Душкин, и теперь я прощаюсь с вами. До новых встреч и пока. [ЗВУК]