GPT 내에서 여러 계층적 예측 코딩 모델을 유도하기 위한 간단한 아이디어를 실험합니다. 너무 간단해서 작동하지 않을 수도 있습니다. 하지만 딥 러닝의 발전은 단순한 아이디어의 기반 위에 구축됩니다. 한번 시도해 볼 가치가 있습니다.
지금까지 그 아이디어는 연구 친구의 리트머스 테스트를 통과했습니다. 다음 주 쯤에는 완료될 예정입니다. 문제가 해결되지 않으면 부정적인 실험 결과와 저장소를 주변에 남겨두고 일부 박사 과정 학생이 이를 토대로 구축할 수도 있습니다.
업데이트: 작동하는 것 같아요?
이 독립적인 연구를 수행하기 위한 후원을 위한 StabilityAI
? 가속화 라이브러리를 위한 Huggingface
$ pip install simple-hierarchical-transformer
3개의 계층 구조, 모두 다음 토큰 예측 서비스 제공
import torch
from simple_hierarchical_transformer import HierarchicalTransformer
model = HierarchicalTransformer (
num_tokens = 20000 , # number of tokens
dim = 512 , # model dimensions
depth = 6 , # depth
dim_head = 64 , # dimension per attention head
heads = 8 , # attention heads
seq_len = 2048 , # sequence lengths
hierarchies = ( 1 , 2 , 8 ), # hierarchies - here we have 1x (like in a regular transformer), then 2x and 8x compressed hierarchical tokens that undergo their own transformer blocks. information is pooled into one hierarchy at each layer
window_sizes = ( 32 , 64 , None ) # local attention window sizes - the idea is that the higher hierarchies can pass distant information to the local one. None stands for full receptive field. Setting 0 would turn off attention at this hierarchy altogether (while token shift will still be in effect in each layer)
)
ids = torch . randint ( 0 , 20000 , ( 1 , 2048 ))
loss , _ = model ( ids , return_loss = True )
loss . backward ()
# after much training
logits = model ( ids )
hierarchies
및 window_sizes
를 지정하지 않으면 기본적으로 전체 시퀀스 길이에 주의를 기울이는 일반 자동 회귀 변환기가 기본적으로 사용됩니다.
# non-hierarchical transformer
model = HierarchicalTransformer (
num_tokens = 20000 ,
dim = 512 ,
depth = 8 ,
dim_head = 64 ,
heads = 8 ,
seq_len = 2048 ,
hierarchies = 1 , # implied 1 if not set
window_sizes = None # implied None (full sequence length) if not set
)
이제 좀 더 복잡한 것이 있습니다. 실험에 따르면 계층 구조를 압축하면 적절한 용량을 위해 더 큰 모델 차원이 필요하다는 사실이 밝혀졌습니다.
model = HierarchicalTransformer (
num_tokens = 256 ,
dim = ( 128 , 256 , 512 , 1024 ),
depth = 8 ,
seq_len = 1024 ,
use_flash_attn = True ,
ff_mult = ( 2 , 2 , 4 , 4 ),
dim_head = ( 16 , 32 , 64 , 64 ),
heads = ( 2 , 4 , 8 , 8 ),
hierarchies = ( 1 , 2 , 4 , 16 ),
hierarchical_stride = ( 1 , 1 , 1 , 8 ), # this would determine the stride when compressing, and when concatting the hierarchical tokens to the fine tokens, the past tokens will be repeated this amount of time. causality is not violated as using the trick from hourglass transformers where sequence is shifted by compression factor - 1. recommend sticking with 1 except for highly compressed hierarchies, as it becomes very uncompetitive with baseline and generations look off
window_sizes = ( 16 , 32 , 64 , None )
). cuda ()
# hierarchies
# 1x - dim 128 - attention (2 heads, 16 dim, receptive field 16)
# 2x - dim 256 - attention (4 heads, 32 dim, receptive field 32)
# 4x - dim 512 - attention (8 heads, 64 dim, receptive field 64)
# 8x - dim 1024 - attention (8 heads, 64 dim, receptive field of all)
두 개의 병렬 경로로 분기합니다. 하나는 계층적 토큰용이고 다른 하나는 일반 정밀 토큰용입니다.
미세 + 계층형 토큰의 로컬 어텐션이 전체 어텐션 기준선에 가까워질 수 있음을 보여줍니다.
간단한 dsconv는 1개의 계층 구조에 대해 병합하기에 충분해 보입니다.
미세 계층 및 모든 계층의 최대 시퀀스 길이의 절반으로 창 크기를 자동 설정
교차 엔트로피 손실 전에 모든 미세 + 계층적 토큰을 풀링하는 효과를 파악합니다. 큰 차이는 없습니다.
원하는 수만큼 계층을 추가하고 예측을 위해 다른 계층의 정보를 풀링할 계층을 지정하는 완전한 기능
계층 전체에 걸쳐 완전히 사용자 정의 가능한 차원(계층이 높을수록 더 큰 모델 차원이 필요함)
계층적 분기에 대한 예언자 손실 추가
계층 구조가 올라갈수록 위치가 덜 중요할 수 있으므로 향후에 좋은 토큰에 대해 계층 구조 토큰을 반복하는 것을 허용합니다. 하지만 우선순위는 아닙니다. 작업을 먼저 수행하세요. hierarchical_stride
로 구현됩니다.
일부 레이어는 주의 없이 토큰 이동에만 의존하도록 허용합니다.
무작위 투영 + vq(뇌의 보편적 음성 모델 논문에서 수행됨) - 계층적 예측 코딩용
병합 중에 다른 계층으로부터 정보를 받는 계층을 지정할 수 있습니다. 마스킹을 사용하여 특별한 주의를 기울이도록 설계할 수도 있지만 계층 전체에 걸쳐 서로 다른 모델 차원을 고려해야 합니다.
모든 계층에서 사용할 수 있도록 간단한 로컬 어텐션 블록 구축
로컬 관심 라이브러리에 플래시 관심 추가
계층 전반에 걸쳐 관심을 공유할 수 있는지 파악
문자 수준에 대해 큰 손실 없이 2배 압축을 보여주는 깨끗한 wandb 보고서를 수행합니다. enwik8
계층 4 이상에 대해 자기 주의 기반 압축기를 사용해 보십시오.
네트워크의 맨 처음에 토큰 임베딩을 입력으로 사용하여 작은 자동 인코더를 구축한 다음 각 병렬 계층 네트워크에 대해 중간 기능 맵을 사용합니다.
가장 가까운 아이디어는 모래시계 변압기입니다.
그리고 이 책을 읽으면서 계층적 접근 방식에 대한 나의 새로운 관심이 생겼습니다.
@article { Nawrot2021HierarchicalTA ,
title = { Hierarchical Transformers Are More Efficient Language Models } ,
author = { Piotr Nawrot and Szymon Tworkowski and Michal Tyrolski and Lukasz Kaiser and Yuhuai Wu and Christian Szegedy and Henryk Michalewski } ,
journal = { ArXiv } ,
year = { 2021 } ,
volume = { abs/2110.13711 }
}
@inproceedings { dao2022flashattention ,
title = { Flash{A}ttention: Fast and Memory-Efficient Exact Attention with {IO}-Awareness } ,
author = { Dao, Tri and Fu, Daniel Y. and Ermon, Stefano and Rudra, Atri and R{'e}, Christopher } ,
booktitle = { Advances in Neural Information Processing Systems } ,
year = { 2022 }
}
@misc { su2021roformer ,
title = { RoFormer: Enhanced Transformer with Rotary Position Embedding } ,
author = { Jianlin Su and Yu Lu and Shengfeng Pan and Bo Wen and Yunfeng Liu } ,
year = { 2021 } ,
eprint = { 2104.09864 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.CL }
}
@inproceedings { Sun2022ALT ,
title = { A Length-Extrapolatable Transformer } ,
author = { Yutao Sun and Li Dong and Barun Patra and Shuming Ma and Shaohan Huang and Alon Benhaim and Vishrav Chaudhary and Xia Song and Furu Wei } ,
year = { 2022 }
}
@software { peng_bo_2021_5196578 ,
author = { PENG Bo } ,
title = { BlinkDL/RWKV-LM: 0.01 } ,
month = { aug } ,
year = { 2021 } ,
publisher = { Zenodo } ,
version = { 0.01 } ,
doi = { 10.5281/zenodo.5196578 } ,
url = { https://doi.org/10.5281/zenodo.5196578 }
}
@article { Piergiovanni2023Mirasol3BAM ,
title = { Mirasol3B: A Multimodal Autoregressive model for time-aligned and contextual modalities } ,
author = { A. J. Piergiovanni and Isaac Noble and Dahun Kim and Michael S. Ryoo and Victor Gomes and Anelia Angelova } ,
journal = { ArXiv } ,
year = { 2023 } ,
volume = { abs/2311.05698 } ,
url = { https://api.semanticscholar.org/CorpusID:265129010 }
}