Опрос


Что для Вас Умный Дом?


Результаты


Реклама


Применение нейронных сетей в системах Умного Дома

20/10/2010 17:35:20

Для чего нужны нейронные сети?

Современный дом можно сделать Умным с помощью тщательно продуманных алгоритмов. Чтобы правильно спроектировать и заложить алгоритмы в электронный мозг Умного Дома, необходимо человеку (программисту) осмыслить задачу, проанализировать множество факторов, аргументов, а также их поведение, если процесс происходит во времени, подобрать нужные методы, определить результат и максимально возможные отклонения от него и, собственно реализовать задуманное.

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

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

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

Как работает нейронная сеть?

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

Нейронные сети в Умном Доме. Экономия времени

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

Применение нейронных сетей в системах Умный Дом

  • Системы безопасности
  • Системы управления оборудованием (отоплением, водоснабжением, вентиляцией, светом)
  • Системы напоминания (подстраиваясь под человека, система может выявить отклонения в его жизни)
  • Системы контроля и оценки состояния объектов (самоконтроль системы Умный Дом)
  • Системы идентификации
  • Системы развлечения (подбор плейлиста композиций, выбор громкости звучания)

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

Однако стоит еще раз подчеркнуть, что применение нейросети возможно только в том случае, если существует возможность обучить ее, то есть имеется набор данных, включающий входные параметры и правильный ответ. Должно быть достаточное количество обучающего материала и этот материал должен быть репрезентативным. Например, если мы обучаем сеть идентификации лиц, то мы должны представить ей фотографии при разной освещенности и в разную погоду, иначе сеть может "сомневаться" и давать промежуточные ответы типа "кажется" или "наверное", не "0.998673", а "0.657319". Тем не менее, на практике часто случаются ситуации когда сеть принимает ошибочное решение и важно иметь механизмы фиксации этих ошибок, чтобы дообучить сеть на тех входных данных, на которых она сделала ошибку. В ряде случаев, когда у нас нет накопленных данных для обучения, можно попробовать обучить сеть на синтетических данных, на примерах, которые мы сами придумали. В любом случае стоит помнить, что качественное обучения является залогом правильной работы программы. Это, пожалуй, справедливо и для человека.

Нейронная сеть - это всего лишь простой набор функций

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

1. Создать_сеть(набор характеристик)
2. Обучить_сеть(набор обучающих данных)
3. Спросить_сеть(набор реальных данных)

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

Существует множество программных пакетов, библиотек для разных языков программирования. Я попробовал воспользоваться бесплатной библиотекой FANN. Подробнее в статье "Анализ изображений с помощью нейронной сети".

 

Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



Добавить комментарий:



Сортировка комментариев: Последние сверху | Первые сверху

2014-08-26 12:49:03 | Andrey_B
Александр, думаю, мало невозможного в этой жизни...


2014-08-21 06:14:38 | Александр
Возможно ли управление IP камерой с помощью обученной нейронной сети?
Т.е при срабатывании датчика движения, включается анализ изображения на предмет выделения лица, зум на него,от него, а затем ведение по силуэту человека?
Просто есть домашний сервер, есть несколько FHD PTZ камер, благо они не сильно дорогие. Хочется организовать описанную выше схему.