вторник, 7 декабря 2010 г.

Звания IT-работников

Некоторое время назад я пытался найти кем можно стать начиная с программиста и куда эта дорога может привести. К сожалению ничего толкового мне найти не удалось. Поэтому я попытался самостоятельно провести исследование на эту тему. Итак представляю вам на обозрение схему развития программиста начального уровня в нечто более разумное. Особое спасибо Дмитрию Ч. за помощь.



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

Итак все начинается с JD - Junior Developer (тот кто только, что устроился на работу в компанию на последнем курсе университета). У него 3 пути.

Он может продолжать подниматься по лестнице разработчика: D - Developer (понимает чем отличается программирование в комании от программирования в университете или школе); SD - Senior Developer (хорошо знает ряд технологий); LD - Lead Developer (знает еще больше технологий, знает как работает весь проект, управляет разработчиками); A - Architect (не работает с кодом, составляет схему работы компонент проекта, работает с заказчиком, определяет требования к проекту, определяет как лучше согласовать компоненты проекта).

На этапе D программист может соскочить на альтернативную карьерную лестницу, где может стать RE - Release Engineer (собирает/компилирует проекты/сборки), откуда уже перейти в IR (установка проекта у заказчика).

Кроме того хороший программист поcле SD может устать от писания кода и решить стать менеджером LM - Line Manager (управление небольшим IT-отделом), а потом и PM - Product Manager (управление всем проектом и соответственно всеми людьми связанными с этим проектом, здесь не обойтись без периодических встреч с заказчиком).

Теперь немного о тех, кто занимается качеством продукта. JQA - Junior Quality Assurance (в моем понимании, это тот кто занимается поиском ошибок в программах). QA - Quality Assurance (наполовину тестировщик, наполовину программист, т.к. занимается разработкой программ для тестирования программ). SQA - Senior Quality Assurance (разработка и проектирования программ проверки качества проекта).

И еще один путь это TW - Technical Writer (документация), затем Tr - Trainer (проводит курсы для программистов), ну и потом можно стать при условии, что вас многие знают E - Evangelist (пропаганда/реклама той или иной технологии или пути развития).

Вот такая схема получилась у меня. Конечно можно добавить еще и администраторов и HR-менеджеров, но как мне кажется эти профессии уже находятся на довольно далеком расстоянии от описанных мною. Комментарии и поправки приветствуются.

пятница, 7 мая 2010 г.

Нейронная сеть для обхода препятствий

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

Программа, написанная мной на java находится здесь, и предоставляется "как есть". Для просмотра работы программы нажимаем кнопку NEW, удостоверяемся что checkbox DRAW находится в положении false, нажимаем DO EDUCATION, ждем секунд 20 - теперь сеть обучена, ставим DRAW в положение true, нажимаем DO EDUCATED AI.
Робот должен не врезаться в препятствия. Если это происходит то сделайте эти шаги заново. Врезание после обучения происходит из-за неправильного распределения начальных весов сети (они распределяются случайно) и эта ситуация довольно редка в миниум 90% случаях сеть обучается обходить препятствия.

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

Итак робот представляет собой следующее:


Он может поворачиваться вправо, влево и двигаться вперед (это указано на рисунке).


У робота есть система датчиков, которая позволяет ему определять в какой области пространства находиться ближайшее к нему препятствие. Области пространства разбиты следующим образом:



Возьмем простую нейронную сеть из двух слоев: 6 нейронов первого слоя - по одному на область и 3 выходных нейрона - по одному на выбор движения. Схематично это можно представить так:




Теперь поговорим об алгоритмах обучения НС (нейронной сети). Есть два вида обучения:
  • с учителем;
  • без учителя.

Правда иногда выделяют еще один вид обучения - с подкреплением.

Для обучения СУ (системы управления) робота выберем обучение без учителя, основанное на методе Хебба, о нем можно прочитать где угодно:



где yi(n-1) – выходное значение нейрона i слоя (n-1), yj(n) – выходное значение нейрона j слоя n; wij(t) и wij(t-1) – весовой коэффициент синапса, соединяющего эти нейроны, на итерациях t и t‑1 соответственно; a – коэффициент скорости обучения ([0;0.3]). Здесь и далее, для общности, под n подразу­мевается произвольный слой сети. При обучении по данному методу усиливаются связи между возбужденными нейронами.

Однако кроме этого есть пара улучшений, которые я ввел в процесс обучения.
Если роботу не видит препятствий, то он движется вперед.
После каждого этапа изменения весов по формуле Хебба проверяется веса НС и, если какой-либо вес сети стал больше среднего веса в 10 раз, то он уменьшается в 3 раза. Это помогает избежать паралича сети.
НС робота запоминает последний образ. Это необходимо в том случае, когда робот правильно реагирует на препятствие (не врезается) и отъезжает от препятствия, если после этого попытаться обучить сеть, то ничего не выйдет, т.к. отклики нейронов будут нулевые, поскольку и на входных нейронах будут нулевые сигналы. Для сети достижения цели это было не нужно т.к. датчики были неограниченны по дальности, т.е. входной не нулевой образ всегда существовал.
Если робот цели не достигает, то коэффициент скорости обучения увеличивается на 0.001 и обучении проводится по нашей модификации метода Хебба (уменьшаются все веса, связанные с “нейроном-победителем”), формула приведена с учетом, что сеть состоит всего из 2 слоев:


где x – номер нейрона победителя.

Вот и все. В дальнейшем попытаюсь выложить больше информации по этой теме.

четверг, 8 апреля 2010 г.

Выставка СамГТУ "Дни науки" 2010

С 5 по 9 апреля 2010 в СамГТУ прошли "Дни науки", в рамках которой была проведена выставка научных проектов студентов.
На ней было представлено порядка 20 проектов различной направленности начиная от электротехники и программных продуктов до мыла и хлеба. Хоть и оценивание научных трудов неблагодарное дело, особенно если проекты действительно стоящие, но оценивать их надо. Для этого на выставке работала специальная комиссия из 8 человек, которая по 20(!) минут беседовала с участниками выставки.
К сожалению, я не в силах понять все особенности различных проектов, поэтому приведу наиболее заметные проекты, которые можно было запечатлеть на фотоаппарат.
 
Естественно для начала я расскажу о проекте, который я разрабатываю еще с несколькими людьми. Проект представляет собой робота-яхту, который по нашему желанию обладателя самостоятельно перемещается. На рисунке представлена уменьшенная модель аппарата, а также стенды внутренностей робота (бортовой компьютер, плата навигации, альтернативный источник энергии), ноутбук в поставку с яхтой, конечно же, не идёт. Глобальной же целью проекта является создание множества таких аппаратов, которые, работая бы как измерительная сеть, следили бы за состоянием океана.


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

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


А вот и химия. Как вам колбочки? Красиво? Но подозреваю что открывать их опасно, т.к. там находятся очень концентрированные реагенты.


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

Итак ждем результатов выставки, которые должны быть вывешены 9 апреля здесь.