Skip to content

deadinsidemertv/DecoderOnlyTransformerNetwork

Repository files navigation

Decoder-Only Transformer на C# (DOT)

Этот проект реализует Decoder-Only Transformer — архитектуру языковой модели, лежащую в основе GPT и многих современных LLM.
Код написан на чистом C# без использования сторонних ML-фреймворков, что позволяет глубже понять внутреннее устройство трансформеров.


📌 Возможности

  • Полноценная архитектура Transformer
    • Входные эмбеддинги (Emmbeding.cs)
    • Rotary Position Embedding (RoPE)
    • Self‑attention с каузальной маской
    • Layer Normalization
    • Feed‑Forward Network (два линейных слоя с ReLU)
  • Обучение
    • Функция потерь: кросс-энтропия
    • Оптимизация: стохастический градиентный спуск (SGD)
  • Генерация текста
    • Авторегрессивная генерация токен за токеном
    • Остановка при достижении <end> или лимита длины
  • Модульность
    • Все компоненты вынесены в отдельные классы, легко модифицируются

📁 Структура проекта

Файл Назначение
DecoderOnlyNetwork.cs Основной класс модели, объединяющий все слои
Emmbeding.cs Таблица эмбеддингов (vocab_size × d_model)
Vocab.cs Словарь: отображение слово ↔ индекс
Program.cs Точка входа: обучение, генерация, тестирование
DecoderOnlyTransformerNetwork.csproj Файл проекта .NET

⚙️ Требования

  • .NET 6 (или более новая версия)
  • Windows / Linux / macOS (через .NET Core)

📂 Подготовка данных

  1. Словарь
    Создайте файл vocab.txt в папке проекта. Слова могут быть разделены пробелами, запятыми, точками или переводами строк. Все слова приводятся к нижнему регистру.
    Пример:
    привет как дела мир

Специальные токены <unk> и <end> будут добавлены автоматически.

  1. Тренировочный текст
    Создайте файл train.txt с любым текстом (русским или английским). Предложения будут автоматически разбиты по точкам, вопросительным и восклицательным знакам, в конце каждого предложения добавится <end>.

🚀 Как запустить


Откройте проект в Visual Studio или любой другой IDE, поддерживающей .NET.

Убедитесь, что файлы vocab.txt и train.txt находятся в папке с проектом.

Запустите приложение

Сначала будет загружен словарь и инициализирована модель.

Затем начнётся обучение на тексте из train.txt. Это может занять от нескольких минут до часов/недель (зависит от размера данных и параметров модели).

После завершения обучения программа перейдёт в интерактивный режим: вы можете вводить фразы, а модель будет генерировать продолжение (до 15 новых токенов(длинну можно изменить в коде)).

Пример работы


Вход:

жила-была девочка Сгенерированный ответ:

которая любила гулять по лесу и собирать ягоды. Однажды она встретила волка Результат зависит от тренировочных данных и качества обучения.

⚙️Настройка параметров (в Program.cs)


В коде Main вы можете изменить:

Гиперпараметры модели (при создании DecoderOnlyNetwork):

var network = new DecoderOnlyNetwork(vectorSize: 512, vocab); vectorSize — размер эмбеддингов (d_model). Можно увеличивать для более сложных моделей (но обучение будет медленнее).

Параметры обучения:

network.Train(data, epochs: 100, learningRate: 0.005, vocab, emb); epochs – количество циклов обучения.

learningRate – скорость обучения (меньше – дольше, но стабильнее).

Длина генерируемого продолжения:

string answer = network.Generate(ques, maxNewTokens: 15, emb, vocab); 📌 Примечания Обучение в текущей версии обновляет только выходной слой (W_out, b_out). Остальные слои остаются случайными. Этого достаточно для проверки работоспособности и демонстрации архитектуры, но для полноценной модели требуется обучение всех параметров.

Сохранение весов не реализовано в этом примере, но вы можете добавить его самостоятельно (например, сериализовать веса после обучения).

Проект является учебным и предназначен для понимания внутреннего устройства трансформеров.

📄 Лицензия Проект распространяется под лицензией MIT.

Автор

neroqwe

About

DOT Network CPU mat, only W_Out, B_Out.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages