Найти в Дзене
Николай Лазарев

Нейросети на графах в материаловедении (часть 1)

Оглавление
Рисунок из указанной ниже научной статьи MIT
Рисунок из указанной ниже научной статьи MIT

О чём статья

В данной статье описан мой первый шаг по применению графовых нейросетей GNN для прогнозирования свойств материалов. Если вам интересна тематика ИИ в материаловедении, то Вы наверняка слышали о возможности применения классических моделей машинного обучения в данной сфере. Но дело в том, что признаки в классическом ML не могут точно отразить структуру материала, а структура - это основа всех свойств! В свою очередь, графы идеально подходят для её описания, и на сегодняшний день являются одним из наиболее перспективных подходов в рамках нашей задачи. За эту ценную информацию я благодарю своих кураторов! Безусловно, вся информация есть в открытом виде, и её можно найти самостоятельно. Но именно наставления знающих людей играют для меня роль компаса в нашем бурном мире технологий). Чем и спешу с Вами поделиться.

Для кого

Конечно, данный материал рассчитан на дата-саентистов, специалистов по моделям ИИ, которым интересно применение нейросетей в прогнозировании свойств материалов.

Исходные материалы

Начать можно с того, что в 2017 году вышла научная статья исследователей из MIT по использованию графовых нейросетей. Статья очень интересная, амбициозная. Её можно скачать здесь (предупреждаю, всё на английском). Также есть ссылка на github репозиторий данного научного проекта. На всякий случай повторюсь, конечно это не мой репозиторий, это проект учёных из университета MIT.

Задача

Наша с Вами задача, ознакомиться с представленным материалом, осознать перспективы, преимущества данного подхода, и сперва попробовать применить указанный код в учебной практической задаче. Чтобы понять суть, предлагаю не кидаться сразу на амбразуру теории графов, а сначала осознать практическую часть задания, так сказать посчупать задачу ручками). А это значит, нам предстоит разобраться в чём основная суть методики, как запустить код, где взять исходные данные для данной задачи, и какие данные должны быть. Далее мы подготовим эти исходные данные, запустим предложенный код. Можно потренировать на любой задаче, готовые варианты предлагают возможность проведения классификации или регрессии. Мне рекомендовали провести прогнозирование энергии образования материала (formation_energy_per_atom).

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

В целом нам нужно освоиться в новой теме, немного обжиться, попробовать понять что это вообще такое, зачем оно нужно, и как им пользоваться. Но пока без глубокой теории)

Суть научной статьи

Статья коллег из MIT представляет метод Crystal Graph Convolutional Neural Networks (CGCNN) для предсказания свойств кристаллических материалов на основе их структуры, используя графы, где узлы — атомы, а ребра — связи между ними. CGCNN автоматически извлекает признаки из кристаллической структуры, устраняя необходимость ручного конструирования признаков, и демонстрирует высокую точность в предсказании свойств, близкую к расчетам DFT. Модель интерпретируема и позволяет выделять вклад локальных химических окружений в глобальные свойства, что полезно для проектирования новых материалов, например, перовскитов. Пока этого достаточно, чтобы перейти к освоению github репозитория.

Смотрим проект на github

В файле Readme описаны основные ключевые инструкции:

  • Установка необходимого ПО
  • Подготовка данных в формате JSON, содержащем информацию о кристаллических структурах и их свойствах. Пример данных можно взять из базы Materials Project.
  • Обучение модели. Используется скрипт `main.py`, который принимает входные данные, разделяет их на обучающую и тестовую выборки и обучает модель.
  • Предсказание. После обучения модель может быть использована для предсказания свойств новых кристаллических структур с помощью скрипта `predict.py`.
  • Примеры команд для использования
  • Лицензия. Проект распространяется под лицензией MIT, что позволяет свободно использовать и модифицировать код.

Инструкция также содержит ссылки на дополнительные ресурсы, такие как документация PyTorch и pymatgen, для более глубокого понимания работы с кодом.

Вы можете клонировать указанный репозиторий, и сделать локальную копию для работы с кодом.

Готовим данные

По вопросу данных нужно понять, какие данные нужны, где их взять, и как скачать? Для выбранной задачи прогнозирования свойств материалов можно посмотреть примеры файлов в репозитории в папке ..\data\sample-regression\

По каждому материалу нужно подготовить файл в формате CIF (Crystallographic Information File). Данный формат содержит информацию о кристаллической структуре материала, включая пространственную группу, параметры решетки, симметрии, координаты атомов и их свойства.

Описание содержания некоторых полей CIF файла
Описание содержания некоторых полей CIF файла

Для выполнения задачи я решил выгрузить данные из базы Materials Project (MP), и потом перевести их в нужный формат. Для примера выбрал соединения кремния (Si), а в условиях отбора обозначил только кубическую сингонию (один из типов кристаллических структур. Сингонии или кристаллические системы классифицируют кристаллы на основе их симметрии и геометрических параметров элементарной ячейки).

Как работать с базой MP приводи примеры в одной из прошлых статей. Напомню, что у Вас должен быть свой ключ mp_api_key для работы с базой MP, и загружена библиотека pymatgen. Ниже привожу пример запроса с учётом обозначенных фильтров.

Пример работы с базой данных Materials Project
Пример работы с базой данных Materials Project

После загрузки данных нужно преобразовать их в формат CIF, и сохранить в соответствующей папке.

Пример создания и сохранения CIF файлов
Пример создания и сохранения CIF файлов

Далее получаем данные по целевой прогнозируемой величине.

Пример. Можно было загрузить сразу в предыдущем примере, но и так тоже можно - уже после загрузки данных по структуре)
Пример. Можно было загрузить сразу в предыдущем примере, но и так тоже можно - уже после загрузки данных по структуре)

Помещаем данные по энергии образования в датафрейм, и сохраняем в файле id_prop.csv

-6
-7
-8

Пример моего кода на гитхаб. В рамках данной задачи это единственный собственный код).

Запускаем код, обучаем модель

Для использования файла main.py Вам необходимо запустить его через командную строку. Для этого зайдите в ней в виртуальную среду в которой работаете, далее в локальную папку склонированного репозитория. Далее запускаем команду.

Пример скрипта в командной строке
Пример скрипта в командной строке

(venv_materials_5) (виртуальная среда) C:\Users\lazarevnv\Desktop\materials_science\cgcnn_example_github> (адрес папки где находится искомый файл)

Далее сама команда

python main.py (запускаем указанный файл на языке python) C:\Users\lazarevnv\Desktop\materials_science\code_materials\graphs_code\for_cif_files (адрес папки с данными Очевидно, что все адреса у Вас будут свои. На всякий случай напомнил.)

--task regression --epochs 30 --batch-size 64 --lr 0.001 --optim Adam_ gression --epochs 30 --batch-size 64 --lr 0.001 --optim Adam (задаём некоторые параметры самой модели)

--task regression
Указывает тип задачи, которую решает модель. В данном случае это регрессия, то есть предсказание непрерывных значений (например, энергии образования, модуля упругости и т.д.).

--epochs 30
Количество эпох (полных проходов через весь набор данных) для обучения модели. В данном случае модель будет обучаться 30 эпох.

--batch-size 64
Размер батча (количество образцов, обрабатываемых за один шаг). Здесь используется батч из 64 образцов.

--lr 0.001
Learning rate
(скорость обучения) — параметр, который определяет, насколько сильно обновляются веса модели на каждом шаге. В данном случае используется значение 0.001.

--optim Adam
Выбор оптимизатора для обучения модели. В данном случае используется Adam — один из популярных оптимизаторов Это такой алгоритм, который используется для обновления параметров модели в процессе обучения (например, для обновления весов нейронной сети).

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

Интерпретация результата

Итоговое качество модели

Test: [0/1] Loss 0.1603 (0.1603) MAE 0.226
** MAE 0.226

Ошибка MAE (Mean Absolute Error) = 0.226 эВ/атом. Т.е. средняя ошибка предсказания энергии образования = 0.226 эВ/атом.

Если сравнивать с другими моделями DFT-предсказаний, то для поликристаллических материалов ≤0.1 эВ/атом считается отличным.

  • Если ≤0.3 эВ/атом, думаю можно сказать, что это хороший результат.
  • Если >0.5 эВ/атом, скорее всего модель плохо обучилась.

Можно попробовать улучшить результат.

  • Добавить больше данных (id_prop.csv → минимум 1000 материалов).
  • Настроить параметры модели (--lr, --epochs, --radius).
  • Проверить, нет ли ошибок в CIF-файлах.

Выводы

CGCNN успешно обучилась!

MAE = 0.226 эВ/атом, что неплохо, но можно улучшить.

Есть небольшие ошибки в CIF-файлах (получили предупреждения) - нужно проверить файлы и исправить.

Что можно сделать для улучшения результата:

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

- Перепарсить CIF-файлы через pymatgen для исправления ошибок.

- Попробовать модель с --epochs 50 для лучшей точности.

Дальнейшие шаги в новых проектах

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

  • Что такое нейронные сети (как устроены, что умеют делать, как с ними работать).
  • Что такое графы (те же вопросы).
  • Попробовать разные архитектуры нейросетей.
  • Попробовать строить графы самостоятельно с помощью метода voronoi (из библиотеки pymatgen).
  • И самое интересное. Можно вникнуть поглубже в суть обозначенной выше научной статьи MIT, и попытаться доказать, что указанная в статье точность энергии образования (MAE: 0.039 эВ/атом) достижима, или опровергнуть данный тезис. Это близко к точности DFT-расчётов, которые имеют MAE в диапазоне 0.081–0.136 эВ/атом.

Ну как Вам такой план? Всем удачи в новых проектах!!!