광고 영역 320x100
LocalLLaMA

저는 총 ~4천만 개의 토큰에 대해 처음부터 180만 개의 매개변수 모델을 훈련했습니다.

익명탐험가5768·1개월 전·조회 666
이미지 이미지 이미지 이미지 이미지 이미지 이미지 이미지 이미지 이미지 이미지

좋아, 나는 나만의 간단한 아키텍처로 작업하고 실험해 왔습니다. 나는 그것을 **딸기**라고 부릅니다. 관심 있는 분들을 위한 저장소는 다음과 같습니다 https://github.com/SrijanSriv211/Strawberry

이것은 매우 작은 실험 모델입니다. 180만 개의 매개변수가 있으며 ~9M 토큰(훈련용 ~7M, Val용 ~2M)이 있는 데이터세트에서 훈련되었습니다. 이 모델은 배치 크기 16과 컨텍스트 길이 256으로 훈련되었습니다. 토큰 수의 배치 크기를 '16*256 = 4096'으로 만듭니다. 이는 모델이 단계당 4096개의 토큰을 보았다는 의미입니다. 10,000개 단계에 대해 훈련되었으며 이는 총 4천만 개의 토큰에 대해 훈련되었음을 의미합니다.

데이터 세트는 수동으로 긁어내고 정리되었습니다. 데이터 세트에는 다양한 주제, 인물, 게임, 영화, 회사 등에 관한 Wikipedia의 텍스트가 포함되어 있습니다. 또한 GTA, RDR, Last of Us, Mafia 등과 같은 다양한 게임의 텍스트 팬덤이 포함되어 있습니다. 데이터 세트에는 RDR 2, GTA 5, Cyperpunk 2077, Mafia The Old Country와 같은 다양한 게임의 스토리라인, 스크립트 및 스토리 대화도 포함되어 있습니다. 여기에는 내가 가장 좋아하는 YouTube 비디오의 스크립트도 포함되어 있으며 내 개인 코드 베이스의 코드와 github의 Hazel Game Engine 저장소와 같은 기타 저장소도 포함되어 있습니다. 저는 프로그래밍 언어 규모를 Python, C#, C++ 및 JavaScript로 제한하기 위해 최선을 다했습니다. 데이터 세트에는 여러 연구 논문, 학술 기사 및 블로그(주로 AI 및 LLM 전반에 관한 내용)의 텍스트도 포함되어 있습니다. 이 모든 것이 총 3천만 자에 달했습니다.

10,000걸음에 대한 훈련 후 최종 열차 손실은 약 3.5였고 Val 손실은 약 3.8이었습니다.

모델의 정확한 구성은 다음과 같습니다.
`{"dataset": {"data_division": 0.8, "load_from_file": true, "path": "data/webtext.bin"}, "checkpoints": {"path": "bin/ck18", "interval": 1000, "create_checkpoints": true}, "model_hyperparams": {"vocab_size": 8192, "block_size": 256, "r_layer": 3, "n_layer": 2, "n_head": 6, "n_embd": 96, "n_qkv": 384, "n_ffn": 384}, "optimizer_hyperparams": {"eps": 1e-08, "beta1": 0.9, "beta2": 0.99, "weight_decay": 0.001, "use_muon": false, "momentum": 0.95}, "model_path": "bin/s1.strawberry", "encoder_path": "bin/cl8k.bin", "init_from": "scratch", "seed": "auto", "gradient_accumulation_steps": 1, "batch_size": 16, "max_iters": 10000, "eval_interval": 1000, "log_interval": 100, "eval_iters": 100, "decay_lr": true, "lr_decay_iters": 10000, "learning_rate": 0.002, "cooldown_frac": 0.2, "warmup_iters": 500, "min_lr": 0.0002}`

`cl8k`는 위에서 설명한 것과 동일한 데이터세트로 훈련된 Andrej Karpathy의 토크나이저 비디오에 있는 토크나이저로, ~3천만 문자를 ~9백만 토크로 토큰화하는 데 사용되었습니다.

Strawberry 및 Retention에 대한 아이디어는 주의 가중치가 학습되는 것이 아니라 실시간으로 생성될 수 있는지 탐구하고 싶었습니다. 이것이 바로 제가 "보존" 메커니즘을 구현한 이유입니다. 유지 메커니즘은 사용자 입력을 기반으로 "가중치"를 생성한 다음 주의를 기울이는 데 사용됩니다. 공식은 표준 선형 주의 공식과 약간 유사합니다. QKV 가중치가 학습되지 않고 동적으로 생성되는 이 시스템을 사용하면 매개변수 수를 전혀 늘리지 않고도 주의 레이어 수(또는 모델 깊이)를 늘릴 수 있습니다.

그러나 주의 레이어 수를 늘리면 문제가 발생합니다. FFN과 같은 비선형성 없이 여러 개의 Attention 레이어가 서로 쌓이면 성능이 저하될 수 있으며 시간이 지남에 따라 손실이 더 심해질 수 있습니다.

그렇기 때문에 Attention 계산 직후와 각 Attention 레이어의 출력 투영 직전에 mini-ffn을 구현했습니다. 따라서 qkv, mini-ffn 및 출력 투영의 가중치는 보존 메커니즘에 의해 동적으로 생성되고 업데이트됩니다.

나에게는 두 가지 주의 메커니즘이 있습니다.

1. 이 경우 글로벌 컨텍스트에 대한 Apple의 AFT에 대한 선형 주의입니다.

2. 지역적 맥락에 대한 표준 MHA 주의. 또한 각 관심 전문가가 서로 다른 로컬 창을 갖게 되는 '주의 전문가 혼합' 접근 방식을 실험할 계획입니다. 아직 구현하지 않았습니다. 이 모델이 너무 작아서 이해가 안 되지만 나중에 구현하겠습니다. Attention Experts의 혼합 이것이 바로 SPDA 버전의 Attention 클래스를 'The Expert Abundance'라고 부르는 이유입니다. 이유는 모르겠지만 이름이 마음에 들어서 계속 사용하고 있어요.

현재 저는 아키텍처를 더욱 최적화하고 개선하려고 노력하고 있습니다.

그렇죠. 그게 전부입니다. 나는 당신의 견해와 의견을 알고 싶습니다.

**수정**

위에서 이야기한 모델에는 ~1M의 비임베딩 매개변수와 ~800,000개의 임베딩 매개변수가 있었습니다.

저는 포함되지 않은 매개변수가 300,000개에 불과하여 총 매개변수 수가 1.1M에 불과한 새 모델을 훈련했으며 ~80M 토큰에 대해 훈련 중입니다. 큰 성능 저하 없이. 해당 모델은 릴리스 페이지의 `s0.3a` 또는 `v0.3-alpha` 태그 아래에서 사용할 수 있습니다. :)


광고 영역 320x100
0댓글
광고 영역 320x100