.:Публикации:. [www.karlson.ru]

НЕМНОГО ОБ ИСКУССТВЕННЫХ НЕЙРОННЫХ СЕТЯХ.

Кожекин Н.

Интерес к нейронным сетям (также известным как PDP --- parallel distributed processing) все не ослабевает. Первая волна захлестнула научный мир в 1943 году после представления W.S.McCulloch и W.Pitts упрощенных нейронов в их классической работе "A logical calculus of the ideas immanent in nervous activity". Их нейроны рассматривались как биологические модели и как концептуальные компоненты для схем, выполняющих счетные задачи. И сейчас очень часто проводятся параллели с биологическими системами. И хотя исторически нейронные сети появились именно как модели нейронов --- клеток человеческого мозга --- такая параллель не может пониматься слишком буквально; нам до сих пор так мало известно о биологических системах, даже на нижайшем клеточном уровне, что, видимо, искусственные модели нейронных сетей сильно упрощают биологические. Вторая волна интереса к нейронным сетям родилась в начале 80-х с появлением компьютеров принципиально новых мощностей и с многими замечательными открытиями в этой области, как, например, обратное распространение ошибки (error back propogation) (Здесь и далее я буду давать многим терминам английские соответствия в скобках, за отсутствием общепринятой русскоязычной терминологии в этой области.) До сих пор эта область не до конца изучена и рождает высокую заинтересованность со стороны специалистов очень разных кругов, таких как программисты и биологи, психологи и физики. Большинство университетов имеет группы разработки на соответствующих факультетах.

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

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

В этой статье я буду пропагандировать отношение к искусственным нейронным сетям прежде всего с точки зрения науки computer science. Биологические же аспекты будут мной незаслужено проигнорированны. Далее моя статья будет состоять из трех концептуальных частей. В первой я, наконец--то, дам четкое определение искусственной нейронной сети. Во второй части я приведу в пример одну из первых и несложных, но, тем не менее, очень красивых классических теоретических моделей. И в третьей части я расскажу о возможностях применения нейронных сетей в компьютерной обработке изображений и робототехнике.

Что ж это такое?

Искусственная нейронная сеть строится из множества похожих друг на друга блоков, каждый из которых производит вычисления (идея параллельных распределенных вычислений). Каждый вычисляющий блок общается с другим посредством передачи сигналов на "взвешенные" соединения (смысл этого термина позже станет понятен). Примерный вид нейронной сети показан на рисунке 1. рис 1 Пусть t время работы системы, тогда основные аспекты такой модели можно перечислить следующим образом:

  • Различаются блоки трех типов: входные, т.е. те, которые могут принимать данные (сигналы) извне системы, выходные, т.е. те, которые могут выдавать данные (сигналы) из системы, и спрятанные, т.е. те, сигналы которых остаются внутри системы.
  • Между блоками (далее нейронами) есть соединения с приписанными к ним весами $w_ij$, которые определяют, какой эффект имеет сигнал от нейрона j к нейрону $i$.
  • К каждому нейрону также приписан сдвиг $\theta_{i}$, участвующий в вычислении полного эффективного входа нейрона $i_{i}$. В нашем примере эффективный вход вычисляется как стандартная взвешенная сумма $i_{i}(t) = \sum_{j}w_{ij}(t)a_{j}(t)ё\theta_{i}(t)$. Именно так обычно и бывает, хотя, бывает, применяются и другие правила распространения.
  • Каждому нейрону приписано состояние $a_{i}$, которое определяет сигнал на выходе у нейрона. Так же каждому нейрону приписана функция $F_{i}$, которая определяет новое состояние по старому и полному входу, т.е. $a_{i}(tё1)=F_{i}(a_{i}(t),i_{i}(t))$. Обыкновенно (в нашем случае также) $a_{i}(tё1)=F_{i}(\sum_{j}w_{ij}(t)a_{j}(t)ё\theta_{i}(t))$. В качестве функции $F_{i}$ обычно выбирается неубывающая функция, график которой похож по форме на латинскую букву S. Иногда (в упрощенных моделях) использовалась функция знака числа sgn. Или $F(i_{i})=\frac{1}{1ёe^{-i_{i}}}$. В процессе работы системы, нейроны могут изменять свои состояния либо синхронно, либо асинхронно. В последнем случае существует фиксированная вероятность изменения состояния в момент времени $t$.

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

Нейронную сеть надо составить так, чтобы множество входов порождало на выходе требуемый результат, либо напрямую, либо в процессе релаксации. Мы достигнем этого, установив веса на соединениях соответственно, используя знания почерпнутые из тренировочных примеров, и изменяя веса по правилу обучения. Базовая идея заключается в том, что, чем чаще общаются нейроны $i$ и $j$, тем сильнее между ними должно быть соединение. Простейшая модель использует правило Хебба $\Delta w_{ij} = \gamma a_{i}a{j}$, где $\gamma$ -- положительная константа, характеризующая уровень обучения. Так же обычно применяется правило Видроу-Хоффа $\Delta w_{ij} = \gamma (d_{i} - a_{i}) a{j}$, где $d_{i}$ -- желаемое состояние, указанное внешним учителем.

ПРИМЕР: ПЕРЦЕПЦИОН `опознаватель' (perceptron)

Один из самых первых классических примеров нейронной сети -- это перцепцион. Это прямая сеть, работающая с двоичными сигналами: -1 и 1, у нее N входов и один выход, т.е. эта сеть представляет отображение $T: {-1,1}^N -> {-1,1}$. Для эффективного входа используется стандартная взвешенная сумма, а в качестве функции $F$ -- функция знака числа sgn. Но простейший перцепцион, состоящий из одного уровня, с двумя входами, не может представить даже простую бинарную функцию исключающего или (сложение по модулю два или XOR). Действительно, это не трудно увидеть геометрически. Полный вход такой простейшей сети равен: $i_{i}=w_{1}x_{1}ёw_{2}x_{2}ё\theta$. Это уравнение прямой, разбивающей плоскость $x_{1},x_{2}$ на две части, выше нее на выходе истина, ниже ложь. Теперь посмотрим на рисунок 2, рисунок 2 легко видеть что такую прямую можно провести для функций логическое И (AND) и логическое ИЛИ (OR), но невозможно для функции исключающего ИЛИ (XOR). Конечно, это не доказательство, но читатель сам может позаботится о строгости -- это не представляет никакого труда. Но как же решить эту проблему? Добавим один спрятанный нейрон с двумя входами весами по 1 и сдвигом -1/2, а выходной нейрон пусть имеет три входа, два из которых (которые ведут от входных нейронов) имеют веса по 1 каждый, а третий (который идет от спрятанного нейрона) имеет вес -2, и сдвиг так же -1/2. Эту возможность можно увидеть и геометрически, перейдя в 3-х мерное пространство и отделив нужные вершины куба плоскостью. Теперь докажем следующую замечательную теорему. Для любого многоуровневого перцепциона найдутся такие соединения и веса при них, что он сможет выполнить любое заранее заданное преобразование. Действительно, пусть нам даны N входов, которые передают сигналы M нейронам (называемым предикатом), которые передают в свою очередь сигналы на один выходной нейрон, конечное состояние которого (выход) обозначим за $o^{p}$ (для p-го входного вектора [занумеруем чуть ниже]). Пусть также задано требуемое преобразование T:-1,1^->-1,1. Пусть $\overline{x}$ входной вектор. Всех возможных таких векторов очевидно 2^N, пронумеруем их: пусть $\overline{x}^{p}$ -- p-ый входной вектор. Разобьем множество входных векторов $\{\overline{x}\}$ на два класса: $\mbox{\bf X}^{ё}=\{ \overline{x}\vert T(\overline{x})=1\}
\qquad
\mbox{\bf X}^{-}=\{ \overline{x}\vert T(\overline{x})=-1\}$. Для каждого $\overline{x}^{p} \in \mbox{\bf X}^{ё}$ зарезервируем спрятанный нейрон i, выходное состояние которого $a_{i}$ равно 1, только если определенный шаблон p задан на входе: можно выбрать веса $w_{ij}$ равными элементам $\overline{x}^{p}$, чтобы: $a_{i}^{p}= sgn(\sum_{j}w_{ij}x_{j}^{p}-\mbox{\bf N}ё\frac{1}{2})$ равнялось 1 только для $\overline{x}^{p}=\overline{w}_{i}$, и, соответственно -1 для $\overline{x}^{p} \ne \overline{w}_{i}$, где $\overline{w}_{i}$ -- вектор весов соединений на входах нейрона i. Аналогично, выберем веса на входе у выходного нейрона так, чтобы вход был 1, лишь только один из M нейронов-предикатов равен 1, т.е. $o^{p}= sgn(\sum_{j}a_{i}ё\mbox{\bf M}-\frac{1}{2})$, что равно 1 при $\overline{x}^{p} \in \mbox{\bf X}^{ё}$, и равно -1 при $\overline{x}^{p} \in \mbox{\bf X}^{-}$. Значит, мы построили перцепцион, решающий данную задачу.

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

  1. Установим случайные веса на соединениях.
  2. Выберем выходной вектор $\overline{x}$ из множества тренировочных примеров.
  3. Если результат $o\ne T(x)$ (не верный), изменим все веса по правилу: $\Delta w_{i}=T(\overline{x})\phi_{i}$, где $\phi_{i}$ -- состояние на входе у i-го нейрона-предиката.
  4. Повторяем шаги 2-4 снова, пока на всех тренировочных примерах перцепцион не будет возвращать правильный ответ (с одним набором весов на соединениях, естественно). Так же мы должны изменять сдвиг $\theta$ у выходного нейрона. Можно, например, считать, что это просто соединение $w_{0}$ между выходным нейроном и фиктивным нейроном-предикатом, который всегда возвращает истину: 1. То есть мы не изменяем $\theta$, если перцепцион ответил правильно, и изменяем по правилу $\Delta\theta=T(\overline{x})$, в противоположном случае.
Очень важна следующая теорема, называемая теоремой сходимости (perceptron convergence theorem). Доказательство ее не слишком сложно, но требует начального знания линейной алгебры, хотя бы на уровне понятий нормы и внутреннего (скалярного) произведения. Поэтому ниже я ее только сформулирую, а доказательство можно найти в любой классической работе о перцепционах, или спросить у меня (e-mail будет указан в конце статьи). И так, если существует множество весов соединений $\overline{w}^{*}$, реализующее на данном перцепционе преобразование T, то по правилу обучения перцепцион придет к какому-то решению (которое может и не совпадать с $\overline{w}^{*}$) за конечное число шагов алгоритма.

Приложения

Сначала поговорим о применении нейронных сетей к проблемам связанным с обработкой изображений (многое, кстати, распространяется и на звук). Обычно различают две задачи: моделирование биологических визуальных систем и компьютерная обработка изображений. Мы остановимся на последней задаче. Основная цель такой задачи -- выявить какую-либо информацию на базе двумерной матрицы (массива), состоящей из значений интенсивности цвета, называемой картинкой. Иногда рассматриваются также задачи, где входных картинок может быть несколько. А какую же информацию мы хотим получить? Есть несколько принципиальных типов: опознавание (классификация данных, причисление картинки к одному из заданных классов), геометрия (расстояние до объектов в картинке, углы, и т.д.) и сжатие (архивация картинки для ускоренной передачи или эффективного хранения). Для решения этих задач нужно проводить некие вычисления, и, так часто бывает, что эти вычисления могут проводиться независимо. Скажем, для многих задач возможно разделение картинки на сегменты, которые можно обрабатывать независимо, в этих случаях нейронная сеть может решать их очень эффективно, обрабатывая сегменты параллельно. Примерами таких задач могут служить, например, световые фильтры или определятели краев объектов в картинке.

та область применения обычно называется Computer Vision, и в ней накоплен огромный опыт работы и исследований. Тем не менее, важность ее такова, что интерес к ней вряд ли остынет в недалеком будущем. Принято разделять низко-уровневые и высоко-уровневые проблемы Computer Vision. Под низко-уровневой (или early vision) обработкой изображений понимаются задачи, связанные выявлением физических свойств видимого трехмерного объекта по `картинке' (смысл этого термина мы уже вводили), в противоположность задачам высоко-уровневой обработки изображений, где основная цель -- это получение информации с разных картинок (или сегментов одной картинки) для последующего анализа при помощи высоко-уровневого знания. Пример задачи первого типа типа -- определение краев изображенного на картинке физического объекта. Хорошее определение звучит так, что это задачи обратные оптике. Напомню, что классическая оптика (или компьютерная графика) ставит задачу построения картинки по трехмерному объекту. Примером же задачи второго типа может послужить задача подсчета расстояния до объекта представленного стерео парой (то есть двумя картинками, представляющими фотографии одного объекта, как бы для левого и правого глаза). К сожалению, большинство задач Computer Vision некорректно поставленные, в точном смысле по Адамару (который правда вводил это понятие лишь применительно к задаче решения дифференциальных уравнений). То есть, как легко показать, многие из этих задач не удовлетворяют хотя бы одному из следующих требований:

  1. решение задачи существует,
  2. решение задачи единственно,
  3. решение задачи непрерывно зависит от исходных данных, то есть мало меняется при малом изменении исходных данных.
Такие задачи обычно именуются Ill-posed problems. Они часто возникают при постановке обратных известным, и раньше считалось, что они могут служить лишь головоломками для математиков, однако последнее время показало их огромную важность в реальной жизни. Основная парадигма решения таких задач в восстановлении `корректности постановки', то есть ужесточения класса допустимых решений, путем использования подходящих a priori знаний (до опыта). Кстати, перцепцион из предыдущего раздела, первоначально разрабатывался именно для решения таких задач, связанных с классификацией образов.

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

  1. Кинематика. Изучение движения безотносительно причин. В классической постановке дано положение углов, на которые надо произвести сгибы в узлах `руки' робота и требуется вычислить конечное положение `ладони'.
  2. Задача обратная кинематике. Пусть дано положение и ориентация `ладони' робота, найти все возможные множества углов, на которые надо произвести сгибы в узлах `руки' робота.
  3. Динамика. Изучение причин движения.
  4. Вычисление траектории. Передвижение манипулятора в пространстве.
В этих терминах типичную общую задачу можно охарактеризовать так:
  1. Определить координаты объекта-цели в координатах, связанных с основанием робота.
  2. Вычислить углы сгиба (задача обратная кинематике).
  3. Передвинуть руку (динамика) и схватить (сжать пальцы).
Но для чего же здесь нейронные сети? А идея вот в чем. Мы хотим построить робот широкой применимости. При использовании традиционных методов приходится требовать абсолютной "послушности" робота, то есть аккуратности сенсоров и манипуляторов, когда реальные системы, особенно страдающие от износа (а кто от него не СТРАДАЕТ?), не могут этого гарантировать, и, соответственно, требуют частой перекалибровки. При применении же нейронных сетей мы не только успешно решаем эти проблемы, но и открываем для себя новый мир АДАПТИВНЫХ методов контролирования роботов, и создания гибких систем.

Таковы, вкратце, основные моменты, "которые должен знать каждый", относительно искусственных нейронных сетей. Если у Вас возникли какие либо комментарии, замечания или предложения автору, Вы можете написать автору по e-mail: .

...домик на крыше...,поиск,гостевая книга,cv. Be free, use Linux!