Implementierung von Alphafold 3 in Pytorch
Hier können Sie mit anderen Forschern über diese Arbeit chatten
Rezension des Artikels von Sergey
Illustrierter Leitfaden von Elana P. Simon
Vortrag von Max Jaderberg
Ein Fork mit vollständiger Lightning + Hydra-Unterstützung wird von Alex in diesem Repository verwaltet
Hier können Sie eine Visualisierung der im Endlager verwendeten Lebensmoleküle sehen und mit ihnen interagieren
Joseph für seinen Beitrag zur relativen Positionskodierung und zum glatten LDDT-Verlust!
Felipe für den Beitrag zu den Modulen „Weighted Rigid Align“, „Express Coordinates In Frame“, „Compute Alignment Error“ und „Center Random Augmentation“!
Alex für die Behebung verschiedener Probleme in den transkribierten Algorithmen
Heng für den Hinweis auf Unstimmigkeiten mit dem Papier und die Forderung nach Lösungen
Heng für die Feststellung eines Problems mit den Molekülatomindizes für den Distogrammverlust
Wei Lu für das Erkennen einiger fehlerhafter Hyperparameter
Alex für das Skript zur Vorbereitung des PDB-Datensatzes!
Milot für die Optimierung des PDB-Dataset-Clustering-Skripts!
Alex, der im Grunde den gesamten gigantischen Ablauf geschrieben hat, vom Parsen der PDB bis hin zu den Molekül- und Atomeingaben für das Training
Andrei für die Arbeit an der gewichteten PDB-Datensatzstichprobe!
Jimin für die Einreichung einer kleinen Lösung für ein Problem mit der Übergabe der Koordinaten an WeightedRigidAlign
@xluo233 für den Beitrag zu den Vertrauensmaßen, der Kollisionsstrafen-Rangliste und der Beispiel-Ranglistenlogik!
sj900 zum Integrieren und Testen des WeightedPDBSampler
innerhalb des PDBDataset
und zum Hinzufügen anfänglicher Unterstützung für MSA und Template-Parsing!
Nochmals @xluo233 für den Beitrag zur Logik zur Berechnung des Modellauswahl-Scores sowie des ungelösten Rasa!
Fandi für die Entdeckung einiger Inkonsistenzen im aufgeklärten Atomdiffusionsmodul mit der Ergänzung
Paolo für den Vorschlag der PDB neutral stable molecule
!
Dhuvi für die Behebung eines Fehlers im Zusammenhang mit der ID-Zuweisung von Metallionenmolekülen für Alphafold3Inputs
!
Dhuvi für die Übernahme der Logik zur Übersetzung Alphafold3Input
in BioMolecule
zum Speichern in mmCIF!
Tom (vom Discord-Kanal) für die Identifizierung einer Diskrepanz zwischen den Berechnungen des Distogramms und der Vorlageneinheitsvektoren dieser Codebasis und denen von OpenFold (und Andrei für die Hilfe bei der Lösung des Distogrammproblems)!
Kaihui für die Identifizierung eines Fehlers im Umgang mit nicht standardmäßigen Atomen in Polymerrückständen!
Andrei für die Übernahme der Gradio-Frontend-Schnittstelle!
Patrick für Jaxtyping, Florian für Einx und natürlich Alex für Einops
Soumith und die Pytorch-Organisation dafür, dass sie mir die Möglichkeit gegeben haben, diese Arbeit als Open Source zu veröffentlichen
$ pip install alphafold3-pytorch
import torch
from alphafold3_pytorch import Alphafold3
from alphafold3_pytorch . utils . model_utils import exclusive_cumsum
alphafold3 = Alphafold3 (
dim_atom_inputs = 77 ,
dim_template_feats = 108
)
# mock inputs
seq_len = 16
molecule_atom_indices = torch . randint ( 0 , 2 , ( 2 , seq_len )). long ()
molecule_atom_lens = torch . full (( 2 , seq_len ), 2 ). long ()
atom_seq_len = molecule_atom_lens . sum ( dim = - 1 ). amax ()
atom_offsets = exclusive_cumsum ( molecule_atom_lens )
atom_inputs = torch . randn ( 2 , atom_seq_len , 77 )
atompair_inputs = torch . randn ( 2 , atom_seq_len , atom_seq_len , 5 )
additional_molecule_feats = torch . randint ( 0 , 2 , ( 2 , seq_len , 5 ))
additional_token_feats = torch . randn ( 2 , seq_len , 33 )
is_molecule_types = torch . randint ( 0 , 2 , ( 2 , seq_len , 5 )). bool ()
is_molecule_mod = torch . randint ( 0 , 2 , ( 2 , seq_len , 4 )). bool ()
molecule_ids = torch . randint ( 0 , 32 , ( 2 , seq_len ))
template_feats = torch . randn ( 2 , 2 , seq_len , seq_len , 108 )
template_mask = torch . ones (( 2 , 2 )). bool ()
msa = torch . randn ( 2 , 7 , seq_len , 32 )
msa_mask = torch . ones (( 2 , 7 )). bool ()
additional_msa_feats = torch . randn ( 2 , 7 , seq_len , 2 )
# required for training, but omitted on inference
atom_pos = torch . randn ( 2 , atom_seq_len , 3 )
distogram_atom_indices = molecule_atom_lens - 1
distance_labels = torch . randint ( 0 , 37 , ( 2 , seq_len , seq_len ))
resolved_labels = torch . randint ( 0 , 2 , ( 2 , atom_seq_len ))
# offset indices correctly
distogram_atom_indices += atom_offsets
molecule_atom_indices += atom_offsets
# train
loss = alphafold3 (
num_recycling_steps = 2 ,
atom_inputs = atom_inputs ,
atompair_inputs = atompair_inputs ,
molecule_ids = molecule_ids ,
molecule_atom_lens = molecule_atom_lens ,
additional_molecule_feats = additional_molecule_feats ,
additional_msa_feats = additional_msa_feats ,
additional_token_feats = additional_token_feats ,
is_molecule_types = is_molecule_types ,
is_molecule_mod = is_molecule_mod ,
msa = msa ,
msa_mask = msa_mask ,
templates = template_feats ,
template_mask = template_mask ,
atom_pos = atom_pos ,
distogram_atom_indices = distogram_atom_indices ,
molecule_atom_indices = molecule_atom_indices ,
distance_labels = distance_labels ,
resolved_labels = resolved_labels
)
loss . backward ()
# after much training ...
sampled_atom_pos = alphafold3 (
num_recycling_steps = 4 ,
num_sample_steps = 16 ,
atom_inputs = atom_inputs ,
atompair_inputs = atompair_inputs ,
molecule_ids = molecule_ids ,
molecule_atom_lens = molecule_atom_lens ,
additional_molecule_feats = additional_molecule_feats ,
additional_msa_feats = additional_msa_feats ,
additional_token_feats = additional_token_feats ,
is_molecule_types = is_molecule_types ,
is_molecule_mod = is_molecule_mod ,
msa = msa ,
msa_mask = msa_mask ,
templates = template_feats ,
template_mask = template_mask
)
sampled_atom_pos . shape # (2, , 3)
Ein Beispiel für die Eingabeverarbeitung auf Molekülebene
import torch
from alphafold3_pytorch import Alphafold3 , Alphafold3Input
contrived_protein = 'AG'
mock_atompos = [
torch . randn ( 5 , 3 ), # alanine has 5 non-hydrogen atoms
torch . randn ( 4 , 3 ) # glycine has 4 non-hydrogen atoms
]
train_alphafold3_input = Alphafold3Input (
proteins = [ contrived_protein ],
atom_pos = mock_atompos
)
eval_alphafold3_input = Alphafold3Input (
proteins = [ contrived_protein ]
)
# training
alphafold3 = Alphafold3 (
dim_atom_inputs = 3 ,
dim_atompair_inputs = 5 ,
atoms_per_window = 27 ,
dim_template_feats = 108 ,
num_molecule_mods = 0 ,
confidence_head_kwargs = dict (
pairformer_depth = 1
),
template_embedder_kwargs = dict (
pairformer_stack_depth = 1
),
msa_module_kwargs = dict (
depth = 1
),
pairformer_stack = dict (
depth = 2
),
diffusion_module_kwargs = dict (
atom_encoder_depth = 1 ,
token_transformer_depth = 1 ,
atom_decoder_depth = 1 ,
)
)
loss = alphafold3 . forward_with_alphafold3_inputs ([ train_alphafold3_input ])
loss . backward ()
# sampling
alphafold3 . eval ()
sampled_atom_pos = alphafold3 . forward_with_alphafold3_inputs ( eval_alphafold3_input )
assert sampled_atom_pos . shape == ( 1 , ( 5 + 4 ), 3 )
Um den AlphaFold 3 PDB-Datensatz zu erhalten, laden Sie zunächst alle Komplexe der ersten Baugruppe (und der asymmetrischen Einheiten) in der Proteindatenbank (PDB) herunter und verarbeiten Sie sie dann mit dem unten aufgeführten Skript vor. Die PDB kann vom RCSB heruntergeladen werden: https://www.wwpdb.org/ftp/pdb-ftp-sites#rcsbpdb. Die beiden folgenden Python-Skripte (d. h. filter_pdb_{train,val,test}_mmcifs.py
und cluster_pdb_{train,val,test}_mmcifs.py
) gehen davon aus, dass Sie die PDB im mmCIF-Dateiformat heruntergeladen und ihre erste Assembly und platziert haben mmCIF-Dateien mit asymmetrischen Einheiten unter data/pdb_data/unfiltered_assembly_mmcifs/
bzw. data/pdb_data/unfiltered_asym_mmcifs/
.
Aus Gründen der Reproduzierbarkeit empfehlen wir, die PDB mithilfe von AWS-Snapshots herunterzuladen (z. B. 20240101
). Sehen Sie sich hierzu die Dokumentation von AWS an, um die AWS CLI lokal einzurichten. Alternativ können Sie auf der RCSB-Website nach unten zu „Protokolle herunterladen“ navigieren und den Download-Anweisungen je nach Standort folgen.
Beispielsweise kann man die folgenden Befehle verwenden, um die PDB als zwei Sammlungen von mmCIF-Dateien herunterzuladen:
# For `assembly1` complexes, use the PDB's `20240101` AWS snapshot:
aws s3 sync s3://pdbsnapshots/20240101/pub/pdb/data/assemblies/mmCIF/divided/ ./data/pdb_data/unfiltered_assembly_mmcifs
# Or as a fallback, use rsync:
rsync -rlpt -v -z --delete --port=33444
rsync.rcsb.org::ftp_data/assemblies/mmCIF/divided/ ./data/pdb_data/unfiltered_assembly_mmcifs/
# For asymmetric unit complexes, also use the PDB's `20240101` AWS snapshot:
aws s3 sync s3://pdbsnapshots/20240101/pub/pdb/data/structures/divided/mmCIF/ ./data/pdb_data/unfiltered_asym_mmcifs
# Or as a fallback, use rsync:
rsync -rlpt -v -z --delete --port=33444
rsync.rcsb.org::ftp_data/structures/divided/mmCIF/ ./data/pdb_data/unfiltered_asym_mmcifs/
WARNUNG: Das Herunterladen der PDB kann bis zu 700 GB Speicherplatz beanspruchen.
HINWEIS: Die PDB hostet alle verfügbaren AWS-Snapshots hier: https://pdbsnapshots.s3.us-west-2.amazonaws.com/index.html.
Nach dem Herunterladen sollten Sie zwei Verzeichnisse haben, die wie folgt formatiert sind: https://files.rcsb.org/pub/pdb/data/assemblies/mmCIF/divided/ und https://files.rcsb.org/pub/pdb/data /structures/divided/mmCIF/
00/
01/
02/
..
zz/
Entpacken Sie für diese Verzeichnisse alle Dateien:
find ./data/pdb_data/unfiltered_assembly_mmcifs/ -type f -name " *.gz " -exec gzip -d {} ;
find ./data/pdb_data/unfiltered_asym_mmcifs/ -type f -name " *.gz " -exec gzip -d {} ;
Führen Sie als Nächstes die Befehle aus
wget -P ./data/ccd_data/ https://files.wwpdb.org/pub/pdb/data/monomers/components.cif.gz
wget -P ./data/ccd_data/ https://files.wwpdb.org/pub/pdb/data/component-models/complete/chem_comp_model.cif.gz
aus dem Stammverzeichnis des Projekts, um die neueste Version des Chemical Component Dictionary (CCD) des PDB und seiner Strukturmodelle herunterzuladen. Extrahieren Sie jede dieser Dateien mit dem folgenden Befehl:
find data/ccd_data/ -type f -name " *.gz " -exec gzip -d {} ;
Führen Sie dann Folgendes aus, wobei pdb_assembly_dir
, pdb_asym_dir
, ccd_dir
und mmcif_output_dir
durch die Speicherorte Ihrer lokalen Kopien der PDB der ersten Assembly, der asymmetrischen Einheiten-PDB, des CCD und Ihres gewünschten Datensatzausgabeverzeichnisses (d. h ./data/pdb_data/unfiltered_assembly_mmcifs/
) ersetzt werden ./data/pdb_data/unfiltered_assembly_mmcifs/
, ./data/pdb_data/unfiltered_asym_mmcifs/
, ./data/ccd_data/
und ./data/pdb_data/{train,val,test}_mmcifs/
).
python scripts/filter_pdb_train_mmcifs.py --mmcif_assembly_dir < pdb_assembly_dir > --mmcif_asym_dir < pdb_asym_dir > --ccd_dir < ccd_dir > --output_dir < mmcif_output_dir >
python scripts/filter_pdb_val_mmcifs.py --mmcif_assembly_dir < pdb_assembly_dir > --mmcif_asym_dir < pdb_asym_dir > --output_dir < mmcif_output_dir >
python scripts/filter_pdb_test_mmcifs.py --mmcif_assembly_dir < pdb_assembly_dir > --mmcif_asym_dir < pdb_asym_dir > --output_dir < mmcif_output_dir >
Weitere Optionen finden Sie in den Skripten. Jedes mmCIF der ersten Baugruppe, das alle Verarbeitungsschritte erfolgreich durchläuft, wird in mmcif_output_dir
in einem Unterverzeichnis geschrieben, das entsprechend dem zweiten und dritten PDB-ID-Zeichen des mmCIF benannt ist (z. B. 5c
).
Führen Sie als Nächstes Folgendes aus, wobei mmcif_dir
und {train,val,test}_clustering_output_dir
jeweils durch Ihr lokales Ausgabeverzeichnis ersetzt werden, das mit dem obigen Dataset-Filterskript erstellt wurde, und durch Ihre gewünschten Clustering-Ausgabeverzeichnisse (z. B. ./data/pdb_data/{train,val,test}_mmcifs/
und ./data/pdb_data/data_caches/{train,val,test}_clusterings/
):
python scripts/cluster_pdb_train_mmcifs.py --mmcif_dir < mmcif_dir > --output_dir < train_clustering_output_dir > --clustering_filtered_pdb_dataset
python scripts/cluster_pdb_val_mmcifs.py --mmcif_dir < mmcif_dir > --reference_clustering_dir < train_clustering_output_dir > --output_dir < val_clustering_output_dir > --clustering_filtered_pdb_dataset
python scripts/cluster_pdb_test_mmcifs.py --mmcif_dir < mmcif_dir > --reference_1_clustering_dir < train_clustering_output_dir > --reference_2_clustering_dir < val_clustering_output_dir > --output_dir < test_clustering_output_dir > --clustering_filtered_pdb_dataset
Hinweis : Das Flag --clustering_filtered_pdb_dataset
wird beim Clustering des gefilterten PDB-Datensatzes, wie er mit den oben genannten Skripten kuratiert wurde, empfohlen, da dieses Flag in diesem Kontext schnellere Laufzeiten ermöglicht (da beim Filtern die Rest-IDs jeder Kette 1-basiert bleiben). Dieses Flag darf jedoch nicht bereitgestellt werden, wenn andere (d. h. Nicht-PDB-)Datensätze von mmCIF-Dateien geclustert werden. Andernfalls wird das Interface-Clustering möglicherweise falsch durchgeführt, da die mmCIF-Dateien dieser Datensätze möglicherweise keine strikte 1-basierte Restindizierung für jede Kette verwenden.
Hinweis : Man kann stattdessen vorverarbeitete (d. h. gefilterte) mmCIF-Dateien ( train
/ val
/ test
) (~25 GB, bestehend aus 148.000 Komplexen) und Chain/Interface-Clustering-Dateien ( train
/ val
/ test
) (~3 GB) für die PDBs 20240101
herunterladen AWS-Snapshot über einen freigegebenen OneDrive-Ordner. Jedes dieser tar.gz
Archive sollte im Verzeichnis data/pdb_data/
dekomprimiert werden, z. B. über tar -xzf data_caches.tar.gz -C data/pdb_data/
. Man kann auch PDB-Destillationsdaten herunterladen und vorbereiten, indem man als Referenz das Skript scripts/distillation_data_download.sh
verwendet. Nach dem Herunterladen kann man scripts/reduce_uniprot_predictions_to_pdb.py
ausführen, um diesen Datensatz nur nach Beispielen zu filtern, die mit mindestens einem PDB-Eintrag verknüpft sind. Darüber hinaus wurde der Einfachheit halber bereits eine Zuordnung von UniProt-Zugangs-IDs zu PDB-IDs für das Training mit PDB-Destillationsdaten heruntergeladen und als data/afdb_data/data_caches/uniprot_to_pdb_id_mapping.dat
extrahiert.
Führen Sie im Stammverzeichnis des Projekts Folgendes aus:
$ sh ./contribute.sh
Fügen Sie dann Ihr Modul zu alphafold3_pytorch/alphafold3.py
hinzu, fügen Sie Ihre Tests zu tests/test_af3.py
hinzu und senden Sie eine Pull-Anfrage. Sie können die Tests lokal mit ausführen
$ pytest tests/
Die enthaltene Dockerfile
enthält die erforderlichen Abhängigkeiten zum Ausführen des Pakets und zum Trainieren/Inferenzieren mithilfe von PyTorch mit GPUs.
Das Standard-Basisimage ist pytorch/pytorch:2.3.0-cuda12.1-cudnn8-runtime
und installiert die neueste Version dieses Pakets aus dem GitHub- main
.
# # Build Docker Container
docker build -t af3 .
Alternativ können Sie Build-Argumente verwenden, um das Image mit verschiedenen Softwareversionen neu zu erstellen:
PYTORCH_TAG
: Ändert das Basis-Image und erstellt somit mit verschiedenen PyTorch-, CUDA- und/oder cuDNN-Versionen.GIT_TAG
: Ändert das Tag dieses Repos, um das Paket zu klonen und zu installieren.Zum Beispiel:
# # Use build argument to change versions
docker build --build-arg " PYTORCH_TAG=2.2.1-cuda12.1-cudnn8-devel " --build-arg " GIT_TAG=0.1.15 " -t af3 .
Führen Sie dann den Container mit GPUs aus und mounten Sie ein lokales Volume (für das Training) mit dem folgenden Befehl:
# # Run Container
docker run -v .:/data --gpus all -it af3
@article { Abramson2024-fj ,
title = " Accurate structure prediction of biomolecular interactions with
{AlphaFold} 3 " ,
author = " Abramson, Josh and Adler, Jonas and Dunger, Jack and Evans,
Richard and Green, Tim and Pritzel, Alexander and Ronneberger,
Olaf and Willmore, Lindsay and Ballard, Andrew J and Bambrick,
Joshua and Bodenstein, Sebastian W and Evans, David A and Hung,
Chia-Chun and O'Neill, Michael and Reiman, David and
Tunyasuvunakool, Kathryn and Wu, Zachary and {v Z}emgulyt{.e},
Akvil{.e} and Arvaniti, Eirini and Beattie, Charles and
Bertolli, Ottavia and Bridgland, Alex and Cherepanov, Alexey and
Congreve, Miles and Cowen-Rivers, Alexander I and Cowie, Andrew
and Figurnov, Michael and Fuchs, Fabian B and Gladman, Hannah and
Jain, Rishub and Khan, Yousuf A and Low, Caroline M R and Perlin,
Kuba and Potapenko, Anna and Savy, Pascal and Singh, Sukhdeep and
Stecula, Adrian and Thillaisundaram, Ashok and Tong, Catherine
and Yakneen, Sergei and Zhong, Ellen D and Zielinski, Michal and
{v Z}{'i}dek, Augustin and Bapst, Victor and Kohli, Pushmeet
and Jaderberg, Max and Hassabis, Demis and Jumper, John M " ,
journal = " Nature " ,
month = " May " ,
year = 2024
}
@inproceedings { Darcet2023VisionTN ,
title = { Vision Transformers Need Registers } ,
author = { Timoth'ee Darcet and Maxime Oquab and Julien Mairal and Piotr Bojanowski } ,
year = { 2023 } ,
url = { https://api.semanticscholar.org/CorpusID:263134283 }
}
@article { Arora2024SimpleLA ,
title = { Simple linear attention language models balance the recall-throughput tradeoff } ,
author = { Simran Arora and Sabri Eyuboglu and Michael Zhang and Aman Timalsina and Silas Alberti and Dylan Zinsley and James Zou and Atri Rudra and Christopher R'e } ,
journal = { ArXiv } ,
year = { 2024 } ,
volume = { abs/2402.18668 } ,
url = { https://api.semanticscholar.org/CorpusID:268063190 }
}
@article { Puny2021FrameAF ,
title = { Frame Averaging for Invariant and Equivariant Network Design } ,
author = { Omri Puny and Matan Atzmon and Heli Ben-Hamu and Edward James Smith and Ishan Misra and Aditya Grover and Yaron Lipman } ,
journal = { ArXiv } ,
year = { 2021 } ,
volume = { abs/2110.03336 } ,
url = { https://api.semanticscholar.org/CorpusID:238419638 }
}
@article { Duval2023FAENetFA ,
title = { FAENet: Frame Averaging Equivariant GNN for Materials Modeling } ,
author = { Alexandre Duval and Victor Schmidt and Alex Hernandez Garcia and Santiago Miret and Fragkiskos D. Malliaros and Yoshua Bengio and David Rolnick } ,
journal = { ArXiv } ,
year = { 2023 } ,
volume = { abs/2305.05577 } ,
url = { https://api.semanticscholar.org/CorpusID:258564608 }
}
@article { Wang2022DeepNetST ,
title = { DeepNet: Scaling Transformers to 1, 000 Layers } ,
author = { Hongyu Wang and Shuming Ma and Li Dong and Shaohan Huang and Dongdong Zhang and Furu Wei } ,
journal = { ArXiv } ,
year = { 2022 } ,
volume = { abs/2203.00555 } ,
url = { https://api.semanticscholar.org/CorpusID:247187905 }
}
@inproceedings { Ainslie2023CoLT5FL ,
title = { CoLT5: Faster Long-Range Transformers with Conditional Computation } ,
author = { Joshua Ainslie and Tao Lei and Michiel de Jong and Santiago Ontan'on and Siddhartha Brahma and Yury Zemlyanskiy and David Uthus and Mandy Guo and James Lee-Thorp and Yi Tay and Yun-Hsuan Sung and Sumit Sanghai } ,
year = { 2023 }
}
@article { Ash2019OnTD ,
title = { On the Difficulty of Warm-Starting Neural Network Training } ,
author = { Jordan T. Ash and Ryan P. Adams } ,
journal = { ArXiv } ,
year = { 2019 } ,
volume = { abs/1910.08475 } ,
url = { https://api.semanticscholar.org/CorpusID:204788802 }
}
@ARTICLE { Heinzinger2023.07.23.550085 ,
author = { Michael Heinzinger and Konstantin Weissenow and Joaquin Gomez Sanchez and Adrian Henkel and Martin Steinegger and Burkhard Rost } ,
title = { ProstT5: Bilingual Language Model for Protein Sequence and Structure } ,
year = { 2023 } ,
doi = { 10.1101/2023.07.23.550085 } ,
journal = { bioRxiv }
}
@article { Lin2022.07.20.500902 ,
author = { Lin, Zeming and Akin, Halil and Rao, Roshan and Hie, Brian and Zhu, Zhongkai and Lu, Wenting and Santos Costa, Allan dos and Fazel-Zarandi, Maryam and Sercu, Tom and Candido, Sal and Rives, Alexander } ,
title = { Language models of protein sequences at the scale of evolution enable accurate structure prediction } ,
elocation-id = { 2022.07.20.500902 } ,
year = { 2022 } ,
doi = { 10.1101/2022.07.20.500902 } ,
publisher = { Cold Spring Harbor Laboratory } ,
URL = { https://www.biorxiv.org/content/early/2022/07/21/2022.07.20.500902 } ,
eprint = { https://www.biorxiv.org/content/early/2022/07/21/2022.07.20.500902.full.pdf } ,
journal = { bioRxiv }
}
@article { Li2024SwitchEA ,
title = { Switch EMA: A Free Lunch for Better Flatness and Sharpness } ,
author = { Siyuan Li and Zicheng Liu and Juanxi Tian and Ge Wang and Zedong Wang and Weiyang Jin and Di Wu and Cheng Tan and Tao Lin and Yang Liu and Baigui Sun and Stan Z. Li } ,
journal = { ArXiv } ,
year = { 2024 } ,
volume = { abs/2402.09240 } ,
url = { https://api.semanticscholar.org/CorpusID:267657558 }
}
@article { Nguyen2023MitigatingOI ,
title = { Mitigating Over-smoothing in Transformers via Regularized Nonlocal Functionals } ,
author = { Tam Nguyen and Tan M. Nguyen and Richard G. Baraniuk } ,
journal = { ArXiv } ,
year = { 2023 } ,
volume = { abs/2312.00751 } ,
url = { https://api.semanticscholar.org/CorpusID:264300597 }
}
@inproceedings { Zhou2024ValueRL ,
title = { Value Residual Learning For Alleviating Attention Concentration In Transformers } ,
author = { Zhanchao Zhou and Tianyi Wu and Zhiyun Jiang and Zhenzhong Lan } ,
year = { 2024 } ,
url = { https://api.semanticscholar.org/CorpusID:273532030 }
}