Спасибо дружище! Ты сделал мой день, нет даже мой год... Создал по твоей методе себе шаблон для генерации скелета React компонента. Теперь одним кликом генерю себе папку компонента с вложенными в нее .tsx и .module.css файлами. Работает изумительно. Экономит уйму времени которое раньше тратилось на бойлерплейт.
1) Нет возможности реализовать время задержки перед появлением тултипа. (разве что писать кастомную временную функцию вместо стандартной ease.
2) Блок :after присутствует в ReactDom и увеличивает его размер, хоть и скрыт свойством hidden.
3) Не такие широкие возможности для анимации появления и исчезновения тултипа, как при использовании CSSTransition. В моем примере - onlyCSS, анимация работает только в одну сторону - подсказка опускается на hover и исчезает при когда указатель мыши покидает целевой элемент, анимацию дальнейшего погружения и исчезновения тултипа уже реализовать не удалось.
4) Отсутствует возможность организовать условное появление тултипа (например для неактивных кнопок).
И касательно тяжеловесности CSSTransition. В сбилденном варианте его минимизированный JS файл = 3,63 kb, а минимизированный CSS файл = 2,28 kb. Вы считаете что 5,91 kb в бандле, это много для тех возможностей, что CSSTransition предоставляет для анимации в React приложении?
Спасибо за вопрос, попробую объяснить немного по другому:
Loss функция суммирует логарифмы умноженные на награду для всей игры по одному действию агента на один шаг игры.
А вот сама Игра или ее эпизод уже состоят из последовательности шагов от 0 до J.
Так что индекс J — это J-й шаг игры,
Можно сказать, что шаг игры это такой своеобразный «такт» игры который характеризуется своим уникальным состоянием среды, действием агента и наградой от среды за такое действие.
Внутри шага мы не суммируем логарифмы вероятностей всех доступных действий агента, т.к. нет никакого смысла это делать потому что, такие произведения все равны нулю. Награды мы за несовершенные действия от среды не получали ведь действия не было, значит награды для несовершенных действий равны нулю, а умножая любое число (хоть даже и логарифм) на ноль мы получаем ноль.
Следовательно и складывать нечего.
Награда выдается средой в ответ на конкретное действие агента, соответственно,
при расчете Loss функции мы на награду должны умножать только логарифм вероятности того действия которое фактически совершал агент в этом состоянии.
Затем мы суммируем такие логарифмы вероятностей действий агента умноженные на награды за действия, для всех шагов агента и делаем всю сумму отрицательной, т.к. что бы максимизировать награду за игру Loss функцию необходимо минимизировать.
1) Среда выдает Агенту только вознаграждение по результатам его действий, Среда никак своей наградой Агента не обучает и не говорит ему правильно он поступает или нет.
А награда может измеряться в чем угодно хоть в очках за игру, хоть во времени которое агент проживет в среде(как вы предложили). Но Агенту нужна награда обязательно, без нее Агент не получит обратную связь от среды в которой он обучается. Без получения награды от среды вся деятельность Агента лишена смысла — потому что откуда тогда Агент вообще поймёт, что он чему-то должен учиться. Что заставит Агента куда-то двигаться и что-то предпринимать в среде, если ему можно постоять в сторонке, результат-то будет для него одинаков.
2) Как я уже написал выше — Среда не содержит интерпретации награды она лишь ведет ее подсчет исходя из действий агента. Интерпретацию награды как и цель обучения для агента задает человек — автор алгоритма обучения Агента, именно в сам алгоритм мы «зашиваем» цель обучения и то как Агенту интерпретировать награду получаемую от среды.
3) Для задачи классификации пусть даже и через Reinforcement Learning все равно придется расписать для Cреды подсчет награды — насколько правильно текущая версия агента умеет классифицировать картинки, если этого не сделать, то Агент элементарно скажет, я все откласифицировал — тут один класс изображения и все картинки принадлежат к нему.
И никакого обучения не получится.
Выводы:
а) Нет обратной связи от среды (награды) — нет обучения Агента.
б) Без поставленой цели обучения — Агент ничему не научится.
Вся проблема в том, что агент обученный на прошлых данных, не зарабатывает на текущих. В остальном, было интересно почитать.
Это же фантастика… Американцы никогда не высаживались на луну.
Спасибо дружище! Ты сделал мой день, нет даже мой год... Создал по твоей методе себе шаблон для генерации скелета React компонента. Теперь одним кликом генерю себе папку компонента с вложенными в нее .tsx и .module.css файлами. Работает изумительно. Экономит уйму времени которое раньше тратилось на бойлерплейт.
Нет, нет. Пусть автор продолжает. Хабр это трибуна открытая для всех. Не хотите читать, пройдите мимо.
Спасибо за комент.
Отличный подход через возможность абсолютного позиционирования псевдоэлемента :after для создания минималистичного тултипа.
Реализовал ваш подход в ветке OnlyCss, если интересно можете глянуть.
https://github.com/alexeyk500/ToolTipComponent/tree/onlyCSS
Что заметил из недостатков:
1) Нет возможности реализовать время задержки перед появлением тултипа. (разве что писать кастомную временную функцию вместо стандартной ease.
2) Блок :after присутствует в ReactDom и увеличивает его размер, хоть и скрыт свойством hidden.
3) Не такие широкие возможности для анимации появления и исчезновения тултипа, как при использовании CSSTransition. В моем примере - onlyCSS, анимация работает только в одну сторону - подсказка опускается на hover и исчезает при когда указатель мыши покидает целевой элемент, анимацию дальнейшего погружения и исчезновения тултипа уже реализовать не удалось.
4) Отсутствует возможность организовать условное появление тултипа (например для неактивных кнопок).
И касательно тяжеловесности CSSTransition. В сбилденном варианте его минимизированный JS файл = 3,63 kb, а минимизированный CSS файл = 2,28 kb. Вы считаете что 5,91 kb в бандле, это много для тех возможностей, что CSSTransition предоставляет для анимации в React приложении?
display: none - всего лишь скрывает видимость блока, а по факту его React рендерит в dom.
Зачем в dom лишние элементы, которые может никогда может и не будут показаны в основной своей массе?
А если таких элементов много на странице?
Например - прокручиваемый список из элементов в каждом из котрых есть тултип скрытый display: none, предствьте как у вас dom раздует.
ИМХО: display: none - это совсем не в философии React
Откуда этим тролям знать про сыры в России, если большинство аудитории на Хабре “отъехавшие”, а сам Хабр - Эстонская помойка.
Хабр превратился в большую помойку с крысами… Аж противно читать стало, бля…
AppStore и GooglePlay не единственные места откуда можно качать приложения, ждём раздел Download на официальных сайтах банков.
Автор думает что пустые полки это лучше чем полки с контрафактом?
Loss функция суммирует логарифмы умноженные на награду для всей игры по одному действию агента на один шаг игры.
А вот сама Игра или ее эпизод уже состоят из последовательности шагов от 0 до J.
Так что индекс J — это J-й шаг игры,
Можно сказать, что шаг игры это такой своеобразный «такт» игры который характеризуется своим уникальным состоянием среды, действием агента и наградой от среды за такое действие.
Внутри шага мы не суммируем логарифмы вероятностей всех доступных действий агента, т.к. нет никакого смысла это делать потому что, такие произведения все равны нулю. Награды мы за несовершенные действия от среды не получали ведь действия не было, значит награды для несовершенных действий равны нулю, а умножая любое число (хоть даже и логарифм) на ноль мы получаем ноль.
Следовательно и складывать нечего.
при расчете Loss функции мы на награду должны умножать только логарифм вероятности того действия которое фактически совершал агент в этом состоянии.
Затем мы суммируем такие логарифмы вероятностей действий агента умноженные на награды за действия, для всех шагов агента и делаем всю сумму отрицательной, т.к. что бы максимизировать награду за игру Loss функцию необходимо минимизировать.
А награда может измеряться в чем угодно хоть в очках за игру, хоть во времени которое агент проживет в среде(как вы предложили). Но Агенту нужна награда обязательно, без нее Агент не получит обратную связь от среды в которой он обучается. Без получения награды от среды вся деятельность Агента лишена смысла — потому что откуда тогда Агент вообще поймёт, что он чему-то должен учиться. Что заставит Агента куда-то двигаться и что-то предпринимать в среде, если ему можно постоять в сторонке, результат-то будет для него одинаков.
2) Как я уже написал выше — Среда не содержит интерпретации награды она лишь ведет ее подсчет исходя из действий агента. Интерпретацию награды как и цель обучения для агента задает человек — автор алгоритма обучения Агента, именно в сам алгоритм мы «зашиваем» цель обучения и то как Агенту интерпретировать награду получаемую от среды.
3) Для задачи классификации пусть даже и через Reinforcement Learning все равно придется расписать для Cреды подсчет награды — насколько правильно текущая версия агента умеет классифицировать картинки, если этого не сделать, то Агент элементарно скажет, я все откласифицировал — тут один класс изображения и все картинки принадлежат к нему.
И никакого обучения не получится.
Выводы:
а) Нет обратной связи от среды (награды) — нет обучения Агента.
б) Без поставленой цели обучения — Агент ничему не научится.
Да, можно и так.
Для такого обработки такого объема данных — 400 гб. Google Colab и не предназначен. Под такую задачу вам уже другое решение нужно.