Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NeuralMAB #102

Merged
merged 40 commits into from
Jun 9, 2023
Merged

NeuralMAB #102

merged 40 commits into from
Jun 9, 2023

Conversation

maypink
Copy link
Collaborator

@maypink maypink commented May 22, 2023

  • Implementation of Contextual Bandits and Neural Contextual Bandits from the article.
  • SyntheticExperimentHelper to compare bandits with each other

@aim-pep8-bot
Copy link
Collaborator

aim-pep8-bot commented May 22, 2023

Hello @maypink! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

There are currently no PEP 8 issues detected in this Pull Request. Cheers! 🍻

Comment last updated at 2023-06-09 11:06:35 UTC

@maypink
Copy link
Collaborator Author

maypink commented May 25, 2023

Получается как-то так. Работает медленно, но сейчас:

  • я запускаюсь на cpu
  • эмбеддинги получаются достаточно большие (500 до подачи в сеть. Я пыталась условно их порезать до 20, по времени кратно быстрее не становится)

Например, для выращивания нод:

image
image
image

Copy link
Collaborator

@gkirgizov gkirgizov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Все выглядит разумно, вопросов по реализации нет, есть вопросы и комментарии по логике.

  • Сориентируй, как долго работает энкодер на графах? Сколько занимает итерация обучения нейронки?
  • Тестировала ли ты реализацию бандита на какой-то простой задаче? Бенчмарк из статьи, например. Можно без энкодера графов обойтись.
  • Нужно поставить эксперимент, где для разных графов (разных эмбеддингов) наилучшими будут различные действия. Например, если это оптимизация размера графов до N , то маленькие графы надо растить, а большие обрезать. Вот надо бы хотя бы такой тривиальный случай поймать, чтобы проверить , что контекст вообще работает. И затем что-то менее тривиальное надо придумать.

golem/core/adapter/nx_adapter.py Show resolved Hide resolved
golem/core/optimisers/adaptive/neural_mab.py Outdated Show resolved Hide resolved
Comment on lines +51 to +53
deep_context = self._get_deep_context(context=context)
self._mab.fit(decisions=self._indices, rewards=uniform_rewards, contexts=n * [deep_context])
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Предлагаю убрать этот обман бедного бандита с произвольным контекстом. Вместо этого использовать флаг is_fitted внутри partial_fit для первого фита

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

не совсем поняла, при чем тут первый фит. проблема же в том, что predict вызывается первее, чем partial_fit, так что нужен какой-то warm start

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

может, тогда в predict добавить проверку на is_fitted? и выдавать дефолтные вероятности, что-то такое

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Copy link
Collaborator

@gkirgizov gkirgizov Jun 7, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Мы вносим bias , давая бандиту ложные данные. Это не очень корректно, больше на хак похоже.
Если можем обойтись без этого, то лучше обойтись.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

golem/core/optimisers/adaptive/neural_mab.py Show resolved Hide resolved
golem/core/optimisers/adaptive/neural_mab.py Show resolved Hide resolved
@maypink
Copy link
Collaborator Author

maypink commented Jun 5, 2023

добавлю сюда тоже
теперь можно смотреть вероятности мутаций в зависимости от контекста. контексы делятся по кластерам онлайн с помощью k-means. для задачи, где целей граф имеет размер 50, а изначальные графы находятся либо в промежутке 5-10, либо в 90-95, получается так:
image
image

Пик на втором графике объясняется тем, что граф за ~20 итераций уже уменьшился до размера 50.

@maypink maypink requested a review from gkirgizov June 5, 2023 15:01
@codecov-commenter
Copy link

Codecov Report

Merging #102 (ec61d3a) into main (3dc2a9b) will increase coverage by 1.25%.
The diff coverage is 24.59%.

@@            Coverage Diff             @@
##             main     #102      +/-   ##
==========================================
+ Coverage   71.30%   72.55%   +1.25%     
==========================================
  Files         120      126       +6     
  Lines        6691     7208     +517     
==========================================
+ Hits         4771     5230     +459     
- Misses       1920     1978      +58     
Impacted Files Coverage Δ
...m/core/optimisers/adaptive/mab_agents/mab_agent.py 40.54% <ø> (ø)
golem/core/optimisers/adaptive/neural_mab.py 15.50% <15.50%> (ø)
golem/core/adapter/nx_adapter.py 80.00% <16.66%> (-17.73%) ⬇️
golem/visualisation/opt_history/fitness_line.py 33.78% <20.37%> (-5.04%) ⬇️
...misers/adaptive/mab_agents/contextual_mab_agent.py 31.03% <31.03%> (ø)
...olem/core/optimisers/genetic/operators/mutation.py 90.62% <42.85%> (-1.77%) ⬇️
golem/core/optimisers/adaptive/context_agents.py 63.63% <63.63%> (ø)
...adaptive/mab_agents/neural_contextual_mab_agent.py 77.77% <77.77%> (ø)
golem/core/optimisers/adaptive/operator_agent.py 92.15% <100.00%> (+0.07%) ⬆️
golem/core/optimisers/genetic/gp_params.py 100.00% <100.00%> (ø)
... and 1 more

... and 13 files with indirect coverage changes

examples/adaptive_optimizer/experiment_setup.py Outdated Show resolved Hide resolved
examples/synthetic_graph_evolution/graph_search.py Outdated Show resolved Hide resolved
experiments/mab/mab_synthetic_experiment_helper.py Outdated Show resolved Hide resolved
requirements.txt Outdated Show resolved Hide resolved
@gkirgizov gkirgizov linked an issue Jun 8, 2023 that may be closed by this pull request
3 tasks
@maypink maypink force-pushed the contextual_bandits branch from dbf3521 to fa8973a Compare June 9, 2023 11:00
@maypink maypink merged commit 072f027 into main Jun 9, 2023
@maypink maypink deleted the contextual_bandits branch June 9, 2023 11:14
YamLyubov pushed a commit that referenced this pull request Jun 15, 2023
* fix

* fix#2

* minor

* initial neural mab

* add context agents enum

* add experiments

* launch

* minor

* add contextual mab to pull arms

* put NN in a separate class & add docstrings

* adjust settings

* change places of mutations

* fixes after review

* minors

* minors

* add contextual bandits

* add experimenter & multiple fitness lines visualizer

* experiments

* probabilities for contexts

* minors & docstrings

* fix pep8

* fix requirements

* minor

* minor

* add average visualizatio

* fixes after review

* minors

* update requirements

* Update unit-build.yml

* Update unit-build.yml

* fix pep8

* Update unit-build.yml
YamLyubov pushed a commit that referenced this pull request Jun 15, 2023
* fix

* fix#2

* minor

* initial neural mab

* add context agents enum

* add experiments

* launch

* minor

* add contextual mab to pull arms

* put NN in a separate class & add docstrings

* adjust settings

* change places of mutations

* fixes after review

* minors

* minors

* add contextual bandits

* add experimenter & multiple fitness lines visualizer

* experiments

* probabilities for contexts

* minors & docstrings

* fix pep8

* fix requirements

* minor

* minor

* add average visualizatio

* fixes after review

* minors

* update requirements

* Update unit-build.yml

* Update unit-build.yml

* fix pep8

* Update unit-build.yml
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Implement state embedding of nodes/graphs
4 participants