roboforum.ru

Технический форум по робототехнике.

Что такое хорошо, а что такое плохо?

Ответить

Re: Что такое хорошо, а что такое плохо?

Duhas » 30 авг 2012, 21:50

я бы вообще всем не брезгующим "веществами" посоветовал выкачать с торрентов Matlab.. удобная среда с кучей тулбоксов..

Re: Что такое хорошо, а что такое плохо?

kran » 30 авг 2012, 23:10

=Dead= писал(а):kran, вы можете оценить по этой картинке, правильно ли работает программа из этих классов?
Самоцитирование:
kran писал(а):Разумеется, по ней нельзя сказать, что делает программа, правильно сделала или нет.
Оценивать правильность обучения можно другими средствами. А графики выводить только для правильных попыток обучения.

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

Ладно, ладно, я понимаю, что профи это быстрее сделает по формулам, чем по картинкам. Но в конце концов и профи картинки друг для друга рисуют:

1-s2.0-S0893608098000343-gr8.gif
Только эта картинка "не живая", тут ничего не подкрутишь.

Ещё пример. Когда я разбирался с OpenCV, с детектором границ Канни, я мог потратить дни (месяцы, годы) на теорию. Но я просто полчасика поигрался с коэффициентами, и получил тот результат, который был мне нужен. Я не знаю смысла этих коэффициентов. Но я визуально увидел, как влияет на результат их подкручивание. Возможно, потрать я побольше времени на теорию, я бы улучшил результат. На 20%, потратив ещё 80% времени.

Добавлено спустя 49 минут 58 секунд:
Duhas писал(а):я бы вообще всем не брезгующим "веществами" посоветовал выкачать с торрентов Matlab.. удобная среда с кучей тулбоксов..
В MatLab'е можно сделать всё. Тут недавно swarm обсуждали, так я, погуглив, нашёл рой агентов, реализованный в MabLab. Стая "птиц" из вытянутых тетраэдров летала между цилиндрических "скал", 3D, почти в реальном времени. Но всё-таки специализированный софт делает специальные вещи удобнее и быстрее. Особенно всяким чайникам. А любой начинающий всегда чайник, по определению.

Re: Что такое хорошо, а что такое плохо?

=DeaD= » 30 авг 2012, 23:47

kran писал(а):Возможно, визуально будет заметно, чем правильные отличаются от неправильных. И даже отличать одни неправильные от других неправильных.

Напоминает:
- Как делают кораблики в бутылках?
- В бутылку засыпают разные щепки, клей и всякую фигню, а потом трясут. Иногда получаются кораблики.

Re: Что такое хорошо, а что такое плохо?

elmot » 30 авг 2012, 23:50

=DeaD= писал(а):
kran писал(а):Возможно, визуально будет заметно, чем правильные отличаются от неправильных. И даже отличать одни неправильные от других неправильных.

Напоминает:
- Как делают кораблики в бутылках?
- В бутылку засыпают разные щепки, клей и всякую фигню, а потом трясут. Иногда получаются кораблики.

Вообще-то нейронные сети так и работают. Только их надобно тренировать. Если вдруг АК-47 склеился, то током, током такую сеть, пока кораблики клеить не научится.

Re: Что такое хорошо, а что такое плохо?

=DeaD= » 30 авг 2012, 23:56

Вот если щепки и клей можно было бы тренировать, то да, а так - разные это вещи :)

Re: Что такое хорошо, а что такое плохо?

kran » 31 авг 2012, 00:23

Опять в сторону ушли, кажись, на этот раз я сам завернул. А ведь вроде нащупали, куда идти...

Так вот, ближе к теме (предлагаю, плиз). Выяснили, что для обучения сети нужен целый набор ситуаций с оценкой "хорошо". Оценка ставится всей ситуации В ЦЕЛОМ, на что любезно намекнул =Dead=. Для каждой ситуации должны быть запротоколированы и входы, и выходы. Т.е. топик-стартер должен не просто сказать "показания датчика влажности > 20% - плохо". Нет, он должен сказать:

S1. Левый датчик влажности: 50%
S2. Правый датчик влажности: 0%
S3. Левый датчик температуры: 10°
S4. Правый датчик температуры: 20°
R1. Напряжение на двигатель руля: 5V.
R2. Напряжение на двигатель хода: -5V.

Т.е. например поворачиваем в сторону от источника влаги, она опаснее. И так много-много раз. (Я бы ещё добавил на входы сети несколько предыдущих значений S, сохранённых в памяти. Надеюсь, это не противоречит теории.) И имеет всё это смысл в том случае, если сеть, наученная на 100 ситуациях, научится с приемлемой правильностью работать с 10000 ситуаций (чисто для примера).

Добавлено спустя 3 минуты 51 секунду:
Я знаю, я всё очень сильно упростил, это частный случай. Но я не слишком перестарался с упрощением, в принципе верно ведь?

Добавлено спустя 20 минут 46 секунд:
=DeaD= писал(а):Напоминает:
- Как делают кораблики в бутылках?
- В бутылку засыпают разные щепки, клей и всякую фигню, а потом трясут. Иногда получаются кораблики.
Да нет же, напоминает обучение человека: показывают ему 10 бутылок с корабликами... Нет, это жестоко. Показывают просто 10 наборов щепок и 10 корабликов, собранных из этих наборов (первый из первого, второй из второго). Тренируют на этих 10 наборах, пока не будет получаться (током его, током... и напряжение зависит от кривизны рук). А потом дают другой набор щепок, которого нет в предыдущих 10. Одинадцатый набор. И говорят: "сделай кораблик". Если не получилось, то никакого тока. Тока расстрел на месте.

Re: Что такое хорошо, а что такое плохо?

Duhas » 31 авг 2012, 00:27

kran писал(а): Но всё-таки специализированный софт делает специальные вещи удобнее и быстрее. Особенно всяким чайникам. А любой начинающий всегда чайник, по определению.

а и говорил что там есть тулбоксы.. в частности для ИНС..

Re: Что такое хорошо, а что такое плохо?

=DeaD= » 31 авг 2012, 01:22

kran писал(а):Т.е. топик-стартер должен не просто сказать "показания датчика влажности > 20% - плохо".

Это если мы умеем учить по 1 итерации и знаем, какой целевой вектор нам нужен.
Почти всегда мы этого не знаем, иначе прямо бы запрограммировали всё :)

kran писал(а):Я бы ещё добавил на входы сети несколько предыдущих значений S, сохранённых в памяти. Надеюсь, это не противоречит теории.

Можно еще замыкать выходы сети на входы и строить прочие нелинейные нейросети.

kran писал(а):Я знаю, я всё очень сильно упростил, это частный случай. Но я не слишком перестарался с упрощением, в принципе верно ведь?

Смотря какую задачу решаем :) есть отдельные методики выбора структуры ИНС для разных задач.

kran писал(а):А потом дают другой набор щепок, которого нет в предыдущих 10. Одинадцатый набор. И говорят: "сделай кораблик". Если не получилось, то никакого тока. Тока расстрел на месте.

Вам нельзя в школу преподавателем :)))

Re: Что такое хорошо, а что такое плохо?

kran » 31 авг 2012, 02:44

=DeaD= писал(а):Это если мы умеем учить по 1 итерации и знаем, какой целевой вектор нам нужен.
Почти всегда мы этого не знаем, иначе прямо бы запрограммировали всё :)
Насколько я успел понять, суть не в том, знаем ли мы вектор по одному измерению. Для датчика влажности как раз отлично знаем: "чем влажнее, тем хуже". Но нельзя так напрямую программировать для многомерного пространства, где ИНС обычно применяют.

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

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

Главное тут - иметь статистику. А топик-стартер хочет логически вывести "хорошо" и "плохо". О чём и спрашивал в самом начале. Он не спрашивать должен, а иметь. Мне кажется, вот на этом и можно закругляться. Или он спрашивал, по каким параметрам её собирать? Ну так пусть уточнит, что да, именно это хотел. Или захотел, когда объяснили. Я как минимум ещё один параметр придумал - температурный режим.

=DeaD= писал(а):
kran писал(а):Я бы ещё добавил на входы сети несколько предыдущих значений S, сохранённых в памяти. Надеюсь, это не противоречит теории.
Можно еще замыкать выходы сети на входы и строить прочие нелинейные нейросети.
Я сначала напомню, с чего началось:
gar_anat писал(а):1. «Поедание» пальчиковых батареек. Сам процесс зарядки априори хорошо, но ежели бот найдет пальчиковую батарею и «съест» ее, это хорошо, очень напоминает систему питания живых существ.
2. Выход из зоны раздражения в спокойную зону. Если робот стоит по самый клиренс в воде и выбрался на сушу – думаю это хорошо.
3. Дальше придумать не могу….
Фактор времени меня беспокоит. Оценка настоящего по прошлому. Вот почему я решил, что целесообразно на входы нейросети добавлять предыдущие показания датчиков (5 секунд назад, 30 секунд назад). Иначе как определить, что робот БЫЛ в воде, а СЕЙЧАС на суше? Ну и тут ещё датчик заряда надо приплести, сейчас и раньше. И эталонный расход в спокойном положении для текущего положения заряда, учитывая режим разряда. Чтобы робот не нервничал, что у него заряд БЫЛ больше, а СЕЙЧАС - меньше. Если расходуется как ему положено расходоваться - значит "хорошо" (в сочетании с другими "хорошими" параметрами, всё оценивается в комплексе, сам себе напоминаю).

В принципе, для оценки только линейных изменений хватит одного дополнительного входа на каждый датчик: БЫЛ. Но добавляя N дополнительных входов - БЫЛ_5c, БЫЛ_10c ... БЫЛ_Nc - мы сможем работать и с нелинейными изменениями, учитывать колебания. Например, стоим в морском прибое: влажно - сухо, влажно - сухо... Нефик тут торчать, сваливаем. Даже если сейчас сухо, всё равно скоро будет влажно. И туда сюда за волной не стоит ездить - батарея не резиновая, заряд кончится раньше срока.

Или так не делают? Не напоминают сети, что было в прошлом?

Добавлено спустя 28 минут 50 секунд:
Duhas писал(а):
kran писал(а): Но всё-таки специализированный софт делает специальные вещи удобнее и быстрее. Особенно всяким чайникам. А любой начинающий всегда чайник, по определению.
а и говорил что там есть тулбоксы.. в частности для ИНС..
Нашёл парочку. Neural Network Toolbox и OXlearn. В руководстве к последнему написано, что можно легко заглянуть под капот и заточить под себя. Надо полагать, что тулбоксы пишутся целиком на языке MatLab?
P.S. Да, именно так, достаточно было статью в википедии до конца дочитать. Собственно, там и Neural Network Toolbox упомянут. Меня просто смутил GUI тулбоксов. Похоже, GUI также написан на языке M. И есть даже визуальный конструктор окон. Заинтересовал ещё MATLAB Compiler (и т.п.), позволяющий независимые приложения делать.
Последний раз редактировалось kran 31 авг 2012, 07:49, всего редактировалось 1 раз.

Re: Что такое хорошо, а что такое плохо?

=DeaD= » 31 авг 2012, 03:31

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

Вот прикручивать память к ИНС - да, неплохо бы. Но это 2-й уровень сложности уже будет.

Добавлено спустя 21 минуту 45 секунд:
И по памяти - там надо будет скорее допиливать обучалку, чтобы она могла поощрять или колбасить связи, которые сработали 5-10-15-20 секунд назад, потому что это привело к "плохо" сейчас.

Re: Что такое хорошо, а что такое плохо?

kran » 31 авг 2012, 04:05

=DeaD= писал(а):Оценивать качество работы ИНС по времени жизни особи - не очень понятный вариант.
Хм. А действительно интересно. Вот имеем мы статистику жизни роботов. Какие состояния из каких жизней считать хорошими? Опять возвращаемся к вопросу топика.

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

Но если создатель хочет не природу имитировать, а под какую-то задачу заточить роботов, то понятно, какие жизни хорошие - тех роботов, которые справились с заданием. Возможно, стоит считать хорошими только те состояния, которые непосредственно предшествовали успеху. А не тех роботов, которые съездили на Багамы, продав один двигатель, потом вернулись через год и выполнили задание. Хотя собственно даже у этих можно считать хорошими состояния за пять минут до выполнения. К успеху ведь шли.

Что-то меня так и тянет давать оценку состояниям не просто "хорошо", а -1...0...1 непрерывным рядом. И за отклонения от разных "хорошо" по разному "током бить". Чтобы выполнение задания после поездки на Багамы считалось не очень хорошим - создатель-то сидел, ждал, волновался... Впрочем, поскольку от них возьмём не все состояния, может и не надо градиента "хорошо". Какое-то сползание в генетические алгоритмы опять.

=DeaD= писал(а):Внутри жизни ей бы тоже нужно учиться, если мы хотим брать за основу природу.
Вот это не понял. Я тут немного инструментарий посмотрел на скриншотах. Вроде как строго разделяют этапы: обучаем, валидируем, тестируем. Т.е. математическая сеть потом не учится сама. Самообучаемые агенты на нейросетях, которые по жизни учатся, они есть, но они более сложную схему имеют, там не одна только сеть.

Добавлено спустя 16 минут 57 секунд:
=DeaD= писал(а):И по памяти - там надо будет скорее допиливать обучалку, чтобы она могла поощрять или колбасить связи, которые сработали 5-10-15-20 секунд назад, потому что это привело к "плохо" сейчас.
Опять не понял. Сеть существует вне времени. Обучалки так устроены, что состояния не зависят друг от друга. Нет никаких последовательностей, состояния можно перемешать как угодно. Нет, не так? Иначе ведь придётся оперировать не состояниями, а последовательностями состояний. И тогда нужно подавать какие-то сигналы "начало новой последовательности", или иметь параметр "длина последовательности". А ничего подобного я пока не встречал. Пример: распознавание букв - буквы показываем по одной, распознаём по одной. А не слова и "Войну и мир" распознаём.

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

Ну ещё можно по-другому пояснить - я считал, что подача сигналов на вход, снятие сигналов с выходов, расчёт ошибок и стимуляция (наказание, поправки) - это всё одна итерация. И не может быть никакой отсроченной стимуляции за то, что было 5-10-15-20 секунд назад, т.е. стимуляции в следующей итерации за прошлую итерацию. У сети нет прошлого. Ни в обучении, ни в жизни. А я хотел этот факт обмануть.

Re: Что такое хорошо, а что такое плохо?

Angel71 » 31 авг 2012, 09:19

есть сеть, начинаем обучать символам. отрисовали символ, спросили сеть и в обратку ей правильно или не правильно. один. отрисовали другой или тот же символ, но уже повернутый, смещённый или деформированный. в зависимости от задачи можно делать полупрозрачными, убирать какой-то процент пикселй, менять шрифты, изменять алгоритм отрисовки, делать наложение на некие изображения, добавлять шумы и т.д. опять спросили, опять в обратку правильно или нет. два. потом 3, 4, 5, 6,... и так до тех пор, пока сеть не начнёт расспозновать с приемлимым процентом ошибок. т.е. обучили. вот эти 1, 2, 3, ... n итерации обучения по сути и есть время.
имеет значение в какой последовательности подсовывали изображения? :) ответа два - да и нет. да, т.к. ёмкость памяти не безгранична и более поздние образы могут начать постепенно затирать более ранние. подсовывали символы в алфавитном порядке и к концу обучения буковка "а" уже будет не в 99% случаев расспознаваться, а в 30% или вообще не будет. нет, т.к. могут затереть, а могут и не затереть, если ещё не подсунули слишком много.
:) здесь сеть сама способна со временем забывать и нужное и ненужное. есть ещё алгоритмы забывания (разобучения). это когда нужно забыть ложные образы. к последним постам отношения не имеет, так что пропускаем.
ещё... опять много буковок получится :) лучше пару ссылочек для примера http://www.niisi.ru/iont/projects/rfbr/00179/publications/Mosalov3.pdf, http://www.niisi.ru/iont/projects/rfbr/00180/publications/Mosalov8.pdf

Re: Что такое хорошо, а что такое плохо?

=DeaD= » 31 авг 2012, 12:57

kran, вы всё смешали :)

Оценивают "прожитую жизнь особи" целиком обычно при генетических алгоритмах.

Так то оно конечно в реальном мире смешано: внутри вида "обучение" ведут генетические алгоритмы, а внутри жизни особи - обучается нейросеть.

Re: Что такое хорошо, а что такое плохо?

kran » 31 авг 2012, 15:57

=DeaD= писал(а):kran, вы всё смешали :)

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

Беда в том, что топик-стартер:
1. Пропустил сбор данных.
2. Не определил цели/задачи для робота.

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

Re: Что такое хорошо, а что такое плохо?

=DeaD= » 31 авг 2012, 16:51

Удачные фрагменты жизни желательно оценивать при жизни, это называется обучение на ходу, зачем его исключать?


Rambler\'s Top100 Mail.ru counter