- Описание архитектуры Multi-Head Self-Attention
- Построение Multi-Head Self-Attention средствами MQL5
- Организация параллельных вычислений Multi-Head Self-Attention
- Построение Multi-Head Self-Attention в Python
- Сравнительное тестирование моделей с использованием механизмов внимания
Сравнительное тестирование моделей с использованием механизмов внимания
Мы с вами проделали большую работу в процессе изучения и реализации алгоритма Multi-Head Self-Attention. Мы даже успели его реализовать в нескольких платформах. И если ранее мы создавали новые классы только для нашей библиотеки на языке MQL5, то сейчас мы познакомились с возможностью создания пользовательских нейронных слоев и на языке Python с использованием библиотеки TensorFlow. Теперь пришло время посмотреть на плод трудов наших и оценить возможности, предлагаемые нам новой технологией.
Как обычно, тестирование мы начинаем с моделей, созданных стандартными средствами MQL5. Мы уже начали эту работу при тестировании работы алгоритма Self-Attention. Для проведения нового теста мы возьмем скрипт attention_test.mq5 из предыдущего теста и создадим его копию с именем attention_test2.mq5.
Напомню, в процессе создания нового класса многоголового внимания мы во многом наследовали процессы из алгоритма Self-Attention. Где-то полностью наследовали методы, а где-то брали за основу методы Self-Attention и создавали новый функционал благодаря небольшим правкам. Так и здесь, скрипт для тестирования не потребует внесения больших изменений — все изменения коснутся лишь блока объявления нового слоя.
Первое наше изменение — это, конечно, тип создаваемого нейронного слоя. В параметре type мы укажем константу defNeuronMHAttention, соответствующую классу многоголового внимания.
Еще мы должны указать количество используемых голов внимания. Данный показатель мы укажем в параметр step. Согласен, что наименование параметра совсем не созвучно. Но было принято решения не создавать дополнительного параметра, а использовать имеющиеся свободные поля.
После этого мы еще раз пробежимся по коду скрипта и внимательно посмотри на ключевые точки контроля выполнения операций.
Вот и все. Таких изменений достаточно для первого тестирования, чтобы оценить чистое влияние архитектуры решения на результат работы модели.
//--- Слой внимания
|
Непосредственно тестирование мы проводили на все той же обучающей выборке с сохранением всех прочих параметров работы моделей. Их результаты представлены на графике ниже.
Мы уже говорили, что даже использование технологии Self-Attention дает превосходство нам над рассмотренными ранее архитектурными решениями сверточных и рекуррентных моделей. Увеличение голов внимания также дает положительный результат.
На представленных графиках динамики ошибки нейронной сети на обучающей выборке хорошо видно, что модели с использованием механизма внимания обучаются гораздо быстрее других моделей. Увеличение числа параметров при добавлении голов внимания требует немного больше времени на обучение. Но это увеличение не критично. В то же время дополнительные головы внимания позволяют снизить ошибку работы модели.
![Сравнительное тестирование моделей внимания Сравнительное тестирование моделей внимания](/ru/neurobook/img/conv_lstm_mhattention1.png)
Сравнительное тестирование моделей внимания
А увеличение масштаба графика четко демонстрирует, что ошибка моделей с использованием механизма внимания на протяжении всего обучения находится ниже. При этом использование дополнительных голов внимания еще повышает планку.
![Сравнительное тестирование моделей внимания Сравнительное тестирование моделей внимания](/ru/neurobook/img/conv_lstm_mhattention2.png)
Сравнительное тестирование моделей внимания
И здесь хочется напомнить, что самым большим количеством обучаемых параметров обладает модель с использованием сверточного слоя. Это дает лишний повод задуматься над рациональностью использования ресурсов и взяться за изучение новых технологий, которые появляются каждый день.
Говоря о рациональности использования ресурсов, хочу также предостеречь от бесконтрольного увеличения используемых голов внимания. Каждая голова внимания — это потребление дополнительных ресурсов. Необходимо находить баланс между объемом потребляемых ресурсов и той пользой, которую они дают на общий результат. Здесь нельзя вывести какую-то константу. Такое решение должно приниматься отдельно для каждого конкретного случая.
Результаты тестового обучения моделей, написанных на языке Python, также подтверждают сделанные выше выводы. Модели с использованием механизмов внимания обучаются быстрее и при этом менее подвержены переобучению модели. Это подтверждается меньшим разрывом между графиками ошибки при обучении и на валидации. Увеличение числа используемых слоев внимания позволяет снизить общую ошибку работы модели при прочих равных условиях.
При увеличении масштаба графика можно заметить, что у моделей с использованием механизмов внимая линии более прямолинейные и менее рваные. Этот свидетельствует о более четком выявлении зависимостей и поступательном движении к минимизации ошибки. Отчасти это можно объяснить нормализацией результатов внутри блока Self-Attention, что позволяет иметь на выходе результат с одинаковыми статистическими показателями.
График результатов тестирования по показателю Accuracy также подтверждает наши выводы.
![Результаты тестового обучения моделей внимания Python Результаты тестового обучения моделей внимания Python](/ru/neurobook/img/attention_py_mse.png)
Результаты тестового обучения моделей внимания Python
![Результаты тестового обучения моделей внимания Python Результаты тестового обучения моделей внимания Python](/ru/neurobook/img/attention_py_mse2.png)
Результаты тестового обучения моделей внимания Python
![Результаты тестового обучения моделей внимания Python Результаты тестового обучения моделей внимания Python](/ru/neurobook/img/attention_py_accur.png)
Результаты тестового обучения моделей внимания Python
![Результаты тестового обучения моделей внимания Python Результаты тестового обучения моделей внимания Python](/ru/neurobook/img/attention_py_accur2.png)
Результаты тестового обучения моделей внимания Python