nevermind-neu библиотека машинного обучения
Доброго времени суток, публикую свою разработку, а именно библиотеку машинного обучения nevermind-neu. Идея изначально появилась из желания хорошо понять как работают нейронные сети и изучить rust, а для того чтобы понять, лично мне нужно написать самому. Далее вся эта разработка затянула меня и вышло в то что вышло. Кратко опишу текущие возможности библиотеки:
- Слои: полносвязный, пока что 1 :(
- Функции потерь: Эвклидова потеря, Кросс-энтропия(softmax loss).
- Функции активации: relu, sigmoid, tanh, leaky_relu
- Стандартные оптимизаторы: Adam, RMSProp, AdaGrad, AdaDelta
- Асинхронная паралельная подготовка батчей
- Датасет лоадеры: CSV, Protobuf
- Сериализация состояния модели нейронной сети: protobuf (позже numpy добавлю)
- Сериализация конфигурации модели нейронной сети: yaml
- Поддержка OpenCL вычислений, используя ocl crate
- Так называемая утилита tool (нужно что-то придумать с названием), который позволяет обучать модели(с нескучным cli интерфейсом), тестировать их, создавать конфигурации моделей в cli режиме.
В качестве библиотеки матричной математики на CPU используется ndarray, который использует matrixmultiply , который под капотом использует simd ядра для умножения матриц. Для OpenCL написал собственные ядра. Я сравнивал свою библиотеку на mnist датасете с достаточно популярной dfdx и она конечно же оказалась быстрее процентов на 60%. Знаю, что она не так много использует Rc-RefCell, но думаю, что основная «загвоздка» производительности не в этом. С другими либами на расте не сравнивал, поскольку отсутствовал example с mnist и др. датасетами. В ближайшее время буду делать паралельное оптимизирование параметров и искать некоторый консенсус когда использовать параллельные итераторы, а когда нет, поскольку производительность сильно падает при их использовании на маленьких слоях(< 64 нейронов).
Как говорится не судите строго мой первый рэп, но делаю пост чтобы услышать замечания или пожелания, что так делаю, а что не так. Ну и также вдруг найдутся добровольцы.
В качестве приложения также сделал небольшой проектик-пример предоставляющий возможность на основе библиотеки создать своего шахматного бота из датасетов lichess. Инструкции чтобы обучить и сыграть указаны по ссылке . Если возникнут трудности то отпишите - постараюсь помочь. Обучить можно как с использованием OpenCL, так и без. Натренированные модели для белых и черных можно скачать тут внизу страницы.