CFA LogoCFA Logo Computer
Новости Статьи Магазин Драйвера Контакты
Новости
RSS канал новостей
В конце марта компания ASRock анонсировала фирменную линейку графических ускорителей Phantom Gaming. ...
Компания Huawei продолжает заниматься расширением фирменной линейки смартфонов Y Series. Очередное ...
Компания Antec в своем очередном пресс-релизе анонсировала поставки фирменной серии блоков питания ...
Компания Thermalright отчиталась о готовности нового высокопроизводительного процессорного кулера ...
Компания Biostar сообщает в официальном пресс-релизе о готовности флагманской материнской платы ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2003 ГОД

БезУмные сети

Дмитрий САХАНЬ

Поднятая мной в предыдущей статье тема нейронных сетей и вычислений (Сергей БОРМОТОВ «Нервные компьютеры», МК, №39 (262)), вызвала отклик у читателей. И дабы ни у кого не сложилось неправильного мнения об «интеллектуальных способностях» подобных «железяк», я и решил написать эту статью.

«Ученые» роботы

Мне пришло еще одно письмо с просьбой объяснить кое-что о нейросетях и алгоритмах их обучения. Как пишет автор, он провел много времени в Интернете :-), но так и не смог найти вразумительного ответа на свой довольно простой вопрос, касающийся нейронных сетей. В итоге, он направляет его нам на «проработку». Ну что ж, давайте попробуем разобраться все вместе.

Итак, вопрос: «Как сообщить нейросети, что она ошиблась, и каков алгоритм изменения весов в результате ошибки? Как вообще происходит обучение? С помощью параллельного механизма или средствами самой сети?».

В первую очередь, хотелось бы напомнить, что традиционно понимается под нейронной сетью. Это набор формальных нейронов, обслуживаемых внешним программным движком. Согласно представлениям об усилительно-тормозных функциях настоящих нейронов (рис. 1), каждый «нейрон» нейронной сети является обычной структурой данных или, говоря другими словами, ячейкой блока данных нейросети. Далее будем употреблять слово «ячейка» (рис. 2), подразумевая под ней нейрон нейросети.

Рис. 1.   Рис. 2.

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

Допустим, у ячейки есть 3 входа, и на 3-й вход поступает «нервный» сигнал в 1 вольт. Внешний программный движок обращается к определенному полю внутри ячейки (к примеру, «ЯЧЕЙКА.резистор3») и извлекает оттуда так называемый вес связи. Понятно, вес связи на самом деле обозначает величину сопротивления. Например, если вес равен положительному числу (допустим, 50-ти процентам), тогда входной 1-вольтовый сигнал надо погасить (торможение) согласно величине сопротивления. В результате в ячейку по 3-ему входу попадает сигнал в полвольта. Если же вес был отрицательным числом, тогда сигнал усиливается согласно величине сопротивления. В таком случае входящий сигнал стал бы равен полутора вольтам. Этот пример в общих чертах демонстрирует работу весов нейронных связей. Главное, что вся нейросеть ориентирована в основном на идею усиления-торможения сигналов.

Далее получившиеся внутри ячейки входные потенциалы складываются аналогово и отправляются на выход. Разумеется, эту работу за ячейку выполняет внешний движок, ибо ячейка, по сути дела, элементарная структура данных. У нее есть поля: резистор 1, резистор 2 и т.д., резистор N и выход. В современных модификациях нейросетей существуют и дополнительные поля типа аналоговой памяти, конденсаторов и прочего, но первый вариант был с минимумом полей.

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

Разум на тормозах

Однако не будем забывать, что аппаратные нейросети тестировались в рамках программы управления аппаратами и промышленными роботами. Роботам, монотонно выполнявшим строгую последовательность действий, нейросети подходили гораздо больше, чем, скажем, продвинутый «мозг» на базе суперкомпьютера. Кто же будет микроскопом забивать гвозди? Естественно, «мозг» по затратам оказался дороже, да и по-настоящему он этим роботам был не нужен. Запрограммированность последних являлась совсем не следствием работающей программы, а предопределялась самой конструкцией робота.

К примеру, робот мог развернуть руку-стрелу с какой-то деталью на 90 градусов. Затем «обученная» рука опять возвращалась в прежнее положение, снова брала какую-то заготовку и вновь переносила ее на 90 градусов в сторону. И здесь мнимое самообучение выглядело потрясающе правдоподобным!

Допустим, ячейка нейросети следит за поворотом руки робота влево. Когда на вход ячейки поступает 1-вольтовый сигнал, рука должна начать поворот. Предположим, робот может вертеть руками не только на 90 градусов. Фактически, если нейросигнал вовремя не «затормозить», то рука вроде бы проскочит точку «90 градусов» и будет поворачиваться и дальше. Сейчас надурим глупую машину, с ехидством размышляем мы. Намертво подключим вход управляющей поворотом ячейки к клемме питания «1 вольт», и пусть себе вертится безостановочно. Ан нет, ты гляди, повернулся ровно на 90 градусов и замер. Видать, умный дюже!

А теперь смотрим на все происходящее с позиции нейросети. Одна из догм идеи усиления-торможения: чем чаще на вход поступает раздражающий нервный сигнал, тем быстрее возрастает коэффициент торможения сигнала. Управляющую ячейку мы закоротили с клеммой 1-вольтового питания, тем самым вынудив ее постоянно находиться под раздражающим входным сигналом. Разумеется, постепенно входной резистор этой ячейки начинает увеличивать свое сопротивление в соответствии с упомянутой догмой. И если мы правильно настроим нейросеть конкретно под этого робота, то ровно по достижении 90-градусного поворота входной резистор целиком затормозит входной раздражающий сигнал. Он его попросту не будет больше пропускать в ячейку. В итоге мы будем видеть, что робот выполнил задачу и как разумный организм дальше поворачивать руку не пытается. Хлопаем в ладоши: разум победил.

Вот так и работает нейросеть робота (рис. 3). Одна ячейка со временем стопорится и прекращает поворот влево, другая ячейка в свое время стопорится и снимает 1-вольтовый сигнал поворота влево. В подходящее (а правильнее, рассчитанное) время третья ячейка выходит из ступора (нет долгое время сигнала — пошло усиление) и подает сигнал поворота вправо. Четвертая ячейка управляет поворотом вправо и также стопорится через 90 градусов. Теперь третья ячейка снова входит в ступор и снимает 1-вольтовый сигнал поворота вправо. За ней снимается «с тормозов» вторая ячейка и требует поворота влево. Первая ячейка «отдала под козырек» и начинает фазу поворота до ожидаемого ступора. И так далее. Всего четыре ячейки, и робот так разумно двигается вправо-влево.

Рис. 3.

Надеюсь, общий принцип работы нейросети ясен. Надеюсь также, не менее ясно, что здесь вообще значит понятие «обучение».

Век живи — век учись

Вопрос второй: «Слышал, что существуют самообучающиеся сети, то есть они обучаются самостоятельно в процессе эксплуатации. Как это возможно? Как сеть может сама понять, что она ошиблась? И что вообще такое ошибка? Может, я чего-то недопонял? Но фраза дословно звучала так: «...существуют алгоритмы обучения с учителем и без него. В первом случае в выработке весовых коэффициентов (обучении) участвует человек, а во втором — сеть справляется сама...» («Нервные компьютеры» (МК, №39, (262))».

Алгоритм обучения с учителем — это, в принципе, тот же пример с роботом «вправо-влево». Чтобы роботу начать переносить детали на 95 градусов, человек должен ему указать, что в таких-то ячейках необходимо установить такую-то степень усиления-торможения, иначе входные резисторы ячеек будут достигать максимального сопротивления ранее точки «95 градусов».

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

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

Нервный рост

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

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

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

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы или вычислите пример: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © sector.biz.ua 2006-2015 design by Vadim Popov