Добро пожаловать, гость
:: алгоритмы  и методы :: :: олимпиадные задачи :: :: связь :: :: о сайте :: :: форум ::

Форум работает в режиме архива, только для чтения и поиска.
Архив 2004 Архив 2007 Архив 2013

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.10.2010, 12:33
Новичок

Отправить личное сообщение для jdev Посмотреть профиль Найти все сообщения от jdev
 
Регистрация: 07.10.2010
Сообщений: 5

Какой тип нейронной сети использовать
Всем доброго времени суток!
Прошу совета у бывалых
У меня есть 3 задачи:
1) классификация с известным кол-вом классов
2) кластеризация для определения классов для задачи №3
3) классификация по классам полученным в задаче №2

Подробнее о задачах.
Задача №1
У меня есть несколько характеристик движения робота в игре (средняя скорость движения, средняя скорость поворота, частота смены направления и т.п.). И есть примерно 10 предопределённых типов движения.

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

Задача №2
Надо выявить типы путей движения, которые состоят из векторов смещения относительно начальных координат и направления . примеры типов: только вперёд, только назад, стоять на месте и т.п. Сколько таких типов оценить сложно.

Ограничения очень жёсткие: обучающие примеры поступают последовательно и, ориентировано, к 1000-ому примеру (примерно 5000 итераций обучения) необходимо чтобы сеть была обучена

Задача №3
По предикату состояния игры (положение робота и противника, скорости движения и направления, кол-во и направления пуль и т.п.) необходимо понять какай тип из полученных на шаге 2 выберет робот для движения.

Ограничения: обучающие примеры поступают последовательно и постепенно изменяются. процесс обучения проходит на буфере из 200 примеров которые с течением времени замещаются вновь поступившими. Начинать выдавать более-менее правдоподобные результаты надо не позже чем после 1000-ного примера (это примерно 5000 итераций обучения).

чистого процессорного времени на обучения в задачах 2 и 3 отводится несколько секунд, т.к. обучение происходит непосредственно в момент игры, которая занимает от нескольких секунд, до пары минут.

По результатам гугления у меня получилось, что для 1 и 3 задачи надо использовать многослойный перцептрон, а для 2-ой - самоорганизующуюся карту Кохонена.

Ну собственно суть топика: поправьте меня пожалуйста, если я не прав в своём выборе, т.к. судя по всему разработка нейронных сетей процесс трудоёмкий и не хотелось бы потратить кучу времени на неправильное направление.
  #2  
Старый 07.10.2010, 12:42
Новичок

Отправить личное сообщение для jdev Посмотреть профиль Найти все сообщения от jdev
 
Регистрация: 07.10.2010
Сообщений: 5

А, ещё, очень хотелось бы, что бы сети умели отсеивать незначащие входы
Например, пусть одним из элементов входного вектора будет среднее значение текущих котировок акций Нью-Йоркской фондовой биржи.
Так вот хотелось бы, чтобы этот элемент не имел никакого влияния на выходной вектор.
Проблема в том, что, во-первых, вообще сложно понять влияет ли тот или иной атрибут и, во-вторых, для разных противников имеют значение разные атрибуты (например некоторые пляшут от положения врага, а другие - от положения ближайшей пули и т.п.)
  #3  
Старый 08.10.2010, 03:55
гость

 
Сообщений: n/a

А че только нейронные сети интересуют? Они уже давно не в моде (не считая deep learning, но это же не мейнстрим)

Попробуйте какие-нибудь стандартные всем известные классификаторы. Ну там, SVM, random forest, boosted trees.

Про кластеризацию, к сожалению, ничего не могу сказать. Не занимался этим.
Единственное, что: SOM - это штука про то как понижать размерность данных. А если у вас всего несколько признаков, он скорее будет лишним шагом, и стоит напрямую к данным применить какой-нибудь алгоритм кластеризации типа k-means.

Цитата:
Ограничения очень жёсткие: обучающие примеры поступают последовательно и, ориентировано, к 1000-ому примеру (примерно 5000 итераций обучения) необходимо чтобы сеть была обучена

...

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

Цитата:
Ну собственно суть топика: поправьте меня пожалуйста, если я не прав в своём выборе, т.к. судя по всему разработка нейронных сетей процесс трудоёмкий и не хотелось бы потратить кучу времени на неправильное направление.
Ну, общие советы такие

1) Пока вы не определились примерно с алгоритмом, который вас устраивает, не надо ничего писать руками (ну кроме может простых вещей, скриптов всяких). Только время зря потратите. Берите готовый и отлаженный софт. Полно его уже. Швейцарские ножи - Weka, RapidMiner, Orange, Shogun, R. Есть и куча более мелких тулзов - см. http://mloss.org/software/

2) Часто главную роль играет не алгоритм (у сильных алгоритмов, правильно настроенных, часто качество работы не сильно различается), а работа с данными. Фичи придумывайте, делайте больше выборку, почистите данные, помасштабируйте признаки по иному...

3) Делайте кросс-валидацию или деление на тестовую+валидационную+тес товую выборки. Это очень, очень важно. Иначе ничего не выйдет.

Любое "введение в нейронные сети", котором ничего не сказано про cross-validation, тестовые выборки или еще какие-нибудь методы для model selection (к сожалению, их большинство), просто выкидывайте нахер - это пустая трата времени, как бы красиво они не расписывали биологическую аналогию.


И вот еще интересное чтиво - http://www.stanford.edu/class/cs229/.../ML-advice.pdf
  #4  
Старый 08.10.2010, 04:03
гость

 
Сообщений: n/a

Цитата:
А, ещё, очень хотелось бы, что бы сети умели отсеивать незначащие входы
Например, пусть одним из элементов входного вектора будет среднее значение текущих котировок акций Нью-Йоркской фондовой биржи.
По хорошему это делается отдельно от обучения, методами отбора признаков (feature selection). Часто таким образом: жадно добавляют(удаляют) признаки в модель, начиная c пустого(полного) множества признаков. Критерий выбора очередного признака - насколько хорошо улучшилось качество распознавания у модели, обученной с(без) него.

Но если хотите чтобы это происходило одновременно с обучением, то делайте L1 регуляризацию - в минимизируемую целевую функцию добавляются абсолютные веса коэффициентов. Есть работы, утверждающие что это работает примерно как отбор признаков.
  #5  
Старый 08.10.2010, 23:13
Новичок

Отправить личное сообщение для jdev Посмотреть профиль Найти все сообщения от jdev
 
Регистрация: 07.10.2010
Сообщений: 5

По поводу SVM, random forest, boosted trees - как я понял они очень ресурсоёмкие, а у меня жесткие ограничения по времени. одна итерация обучания должна укладываться в 10-20 милисекунд. ну или хотя бы что бы её можно было разделить на 2-3 части, которые займут это время.

"SOM - это штука про то как понижать размерность данных" - в принципе мне оно и надо. можно сказать, что мне надо аппроксимировать функцию Y = f(X), где Y - вектор в пространстве поля (в смысле игровом, а не математическом) игры, а X - вектор в пространстве аттрибутов хода игры
эдит: вся проблема в том, что априорно ни элементы X, ни их значимость неизвесты

ну а вообще большое спасибо - назнакомых букавок в вашем посте много, и из них можно ещё шутк 20 запросов гуглу сгенерировать

Последний раз редактировалось jdev, 08.10.2010 в 23:16.
  #6  
Старый 09.10.2010, 17:38
гость

 
Сообщений: n/a

Сообщение от jdev Посмотреть сообщение
По поводу SVM, random forest, boosted trees - как я понял они очень ресурсоёмкие, а у меня жесткие ограничения по времени. одна итерация обучания должна укладываться в 10-20 милисекунд. ну или хотя бы что бы её можно было разделить на 2-3 части, которые займут это время.
Ну, для первой части вашего задания вам их с головой хватит.

Насчет online обучения - я бы посоветовал вам попробовать сначала эти медленные алгоритмы, и, ***если*** их качество работы вас устраивает, то тогда искать что-то побыстрее и делать компромисс между качеством/скоростью.

Цитата:
эдит: вся проблема в том, что априорно ни элементы X, ни их значимость неизвесты
Чуда не произойдет. Машина полезных признаков вам сама не придумает.

Значимые признаков, как я уже сказал, обычно выбираются жадным отбором или L1 регуляризацией.
  #7  
Старый 11.10.2010, 11:24
Новичок

Отправить личное сообщение для jdev Посмотреть профиль Найти все сообщения от jdev
 
Регистрация: 07.10.2010
Сообщений: 5

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

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


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача по созданию нейронной сети fore-x-man Работа 4 01.10.2010 10:24
Помогите подобрать топологию нейронной сети! гость Искусственный интеллект, нейронные сети 2 25.05.2009 03:18
Как использовать тестер? proger Участие 1 22.12.2008 16:09
какой алгоритм использовать? post Графы 2 17.05.2008 17:17
поток в сети jana Графы 3 11.12.2006 17:09