Warning: mkdir(): No space left on device in /var/www/tgoop/post.php on line 37

Warning: file_put_contents(aCache/aDaily/post/optozorax_dev/--): Failed to open stream: No such file or directory in /var/www/tgoop/post.php on line 50
dev optozorax@optozorax_dev P.715
OPTOZORAX_DEV Telegram 715
С момента прошлого поста про обучение машинок случилось ОЧЕНЬ много прогресса, о котором я тут не писал, потому что он был черновой, и не готовый к публикации, но вот наконец я достиг той точки, которая достойна.

В прошлом посте я сказал что мне удалось научить машинку ездить через изменение простоты физики - от простой к сложной.

Но когда я начал экспериментировать с разными параметрами нейросети, машинка не обучилась снова ездить. Вернул параметры обратно, а она снова не обучилась. Оказалось что моё обучение очень нестабильно, и в тот раз мне просто очень повезло. И его нифига нельзя использовать для дальнейших экспериментов. Поэтому я погрузился в кроличью нору исследования того как можно улучшить моё обучение, чтобы оно было быстрее и стабильнее. Я сделал следующее:
* Все параметры обучения вынес в тип конфига, чтобы всё что угодно можно было включать/выключать и настраивать числа
* Каждое обучения запускаю по 30-100 раз
* Сохраняю всю инфу в json файлики
* С помощью скрипта на python визуализирую графиками среднее и отклонение от среднего
* Мой компьютер слабенький, поэтому я арендовал сервак с 80 ядрами (!!!) и запускал все эксперименты на нём, нагружая все 80 ядер

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

И так я проделал для каждого изменения в метрике обучения, я анализировал всё:
* величину штрафа за врезание в стену
* добавление случайного числа к ответу нейросети
* отключение и включение разных трасс
* изменение разных наград
* алгоритм оптимизации (!) (лучший - cma-es)
* итд итд...

Щас подсчитал все картинки что у меня лежат, и их ровно 199! То есть я провёл не менее 199 экспериментов с машинками, и у меня лежат гигабайты этих json файликов...

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

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

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

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

Так что же за невероятная метрика, которая делает вау-эффект? Делаем следующее: за каждую пройденную трассу даём в метрику дискретное +1; далее все положительные награды уменьшаем до пределов [0; 1] и берём от них среднее и тоже прибавляем в метрику; а штраф тоже уменьшаем до [0; 1], но через функцию 1/(1+x), чтобы уменьшение штрафа вело к увеличению метрики. И всё, максимизируем это число.

Оказывается с такой метрикой обучение идёт НАМНОГО стабильней и быстрей, чем с прошлой. И если сравнивать по величине раннего финиша (насколько быстро проходит), количеству пройденных трасс, штрафу и прочим параметрам, она реально лучше.

#машинки



tgoop.com/optozorax_dev/715
Create:
Last Update:

С момента прошлого поста про обучение машинок случилось ОЧЕНЬ много прогресса, о котором я тут не писал, потому что он был черновой, и не готовый к публикации, но вот наконец я достиг той точки, которая достойна.

В прошлом посте я сказал что мне удалось научить машинку ездить через изменение простоты физики - от простой к сложной.

Но когда я начал экспериментировать с разными параметрами нейросети, машинка не обучилась снова ездить. Вернул параметры обратно, а она снова не обучилась. Оказалось что моё обучение очень нестабильно, и в тот раз мне просто очень повезло. И его нифига нельзя использовать для дальнейших экспериментов. Поэтому я погрузился в кроличью нору исследования того как можно улучшить моё обучение, чтобы оно было быстрее и стабильнее. Я сделал следующее:
* Все параметры обучения вынес в тип конфига, чтобы всё что угодно можно было включать/выключать и настраивать числа
* Каждое обучения запускаю по 30-100 раз
* Сохраняю всю инфу в json файлики
* С помощью скрипта на python визуализирую графиками среднее и отклонение от среднего
* Мой компьютер слабенький, поэтому я арендовал сервак с 80 ядрами (!!!) и запускал все эксперименты на нём, нагружая все 80 ядер

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

И так я проделал для каждого изменения в метрике обучения, я анализировал всё:
* величину штрафа за врезание в стену
* добавление случайного числа к ответу нейросети
* отключение и включение разных трасс
* изменение разных наград
* алгоритм оптимизации (!) (лучший - cma-es)
* итд итд...

Щас подсчитал все картинки что у меня лежат, и их ровно 199! То есть я провёл не менее 199 экспериментов с машинками, и у меня лежат гигабайты этих json файликов...

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

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

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

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

Так что же за невероятная метрика, которая делает вау-эффект? Делаем следующее: за каждую пройденную трассу даём в метрику дискретное +1; далее все положительные награды уменьшаем до пределов [0; 1] и берём от них среднее и тоже прибавляем в метрику; а штраф тоже уменьшаем до [0; 1], но через функцию 1/(1+x), чтобы уменьшение штрафа вело к увеличению метрики. И всё, максимизируем это число.

Оказывается с такой метрикой обучение идёт НАМНОГО стабильней и быстрей, чем с прошлой. И если сравнивать по величине раннего финиша (насколько быстро проходит), количеству пройденных трасс, штрафу и прочим параметрам, она реально лучше.

#машинки

BY dev optozorax


Share with your friend now:
tgoop.com/optozorax_dev/715

View MORE
Open in Telegram


Telegram News

Date: |

So far, more than a dozen different members have contributed to the group, posting voice notes of themselves screaming, yelling, groaning, and wailing in various pitches and rhythms. In 2018, Telegram’s audience reached 200 million people, with 500,000 new users joining the messenger every day. It was launched for iOS on 14 August 2013 and Android on 20 October 2013. A Telegram channel is used for various purposes, from sharing helpful content to implementing a business strategy. In addition, you can use your channel to build and improve your company image, boost your sales, make profits, enhance customer loyalty, and more. How to Create a Private or Public Channel on Telegram? 5Telegram Channel avatar size/dimensions
from us


Telegram dev optozorax
FROM American