تنفيذ Alphafold 3 في Pytorch
يمكنك الدردشة مع باحثين آخرين حول هذا العمل هنا
مراجعة الورقة بواسطة سيرجي
الدليل المصور من تأليف إيلانا بي سيمون
تحدث بواسطة ماكس جاديربيرج
تتم صيانة شوكة مع دعم Lightning + Hydra الكامل بواسطة Alex في هذا المستودع
يمكن هنا رؤية تصور لجزيئات الحياة المستخدمة في المستودع والتفاعل معها
جوزيف لمساهمته في التشفير الموضعي النسبي وخسارة LDDT السلسة!
فيليبي لمساهمته في المحاذاة الصلبة الموزونة، والإحداثيات السريعة في الإطار، وحساب خطأ المحاذاة، ووحدات التعزيز العشوائي المركزي!
Alex لإصلاح المشكلات المختلفة في الخوارزميات المكتوبة
هنغ للإشارة إلى التناقضات مع الورقة وسحب طلب الحلول
Heng لإيجاد مشكلة في مؤشرات الذرة الجزيئية لفقد الرسم التخطيطي
Wei Lu لالتقاط بعض المعلمات المفرطة الخاطئة
Alex للبرنامج النصي لإعداد مجموعة بيانات PDB!
Milot لتحسين البرنامج النصي لتجميع مجموعة بيانات PDB!
Alex لكتابة التدفق الهائل بالكامل من تحليل PDB وصولاً إلى الجزيء والمدخلات الذرية للتدريب
أندريه للعمل على أخذ عينات مجموعة بيانات PDB الموزونة!
Jimin على إرسال إصلاح بسيط لمشكلة تتعلق بالإحداثيات التي تم تمريرها إلى WeightedRigidAlign
@xluo233 لمساهمته في مقاييس الثقة وتصنيف جزاء الصدام ومنطق تصنيف العينة!
sj900 لدمج واختبار WeightedPDBSampler
ضمن PDBDataset
ولإضافة الدعم الأولي لـ MSA وتحليل القالب!
@xluo233 مرة أخرى لمساهمتك في منطق حساب درجة اختيار النموذج بالإضافة إلى الراسا التي لم يتم حلها!
فندي لاكتشاف بعض التناقضات في وحدة انتشار الذرة الموضحة مع الوحدة التكميلية
باولو لاقتراح فرضية PDB neutral stable molecule
!
Dhuvi لإصلاح الخلل المتعلق بتعيين معرف جزيء أيون المعدن لمدخلات Alphafold3Inputs
!
Dhuvi على تبني منطق ترجمة Alphafold3Input
إلى BioMolecule
للحفظ في mmCIF!
Tom (من قناة Discord) لتحديد التناقض بين حسابات الرسم البياني لقاعدة التعليمات البرمجية وحسابات ناقلات وحدة القالب وتلك الخاصة بـ OpenFold (وAndrei للمساعدة في معالجة مشكلة الرسم البياني)!
Kaihui للتعرف على الخلل في كيفية التعامل مع الذرات غير القياسية في بقايا البوليمر!
أندريه لتولي واجهة الواجهة الأمامية!
باتريك لـ jaxtyping، وفلوريان لـ einx، وبالطبع Alex لـ einops
Soumith ومنظمة Pytorch على إتاحة الفرصة لي لفتح مصدر هذا العمل
$ 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)
مثال على التعامل مع مدخلات مستوى الجزيء
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 )
للحصول على مجموعة بيانات AlphaFold 3 PDB، قم أولاً بتنزيل جميع مجمعات التجميع الأول (والوحدة غير المتماثلة) في بنك بيانات البروتين (PDB)، ثم قم بمعالجتها مسبقًا باستخدام البرنامج النصي المشار إليه أدناه. يمكن تنزيل PDB من RCSB: https://www.wwpdb.org/ftp/pdb-ftp-sites#rcsbpdb. يفترض نصا Python أدناه (على سبيل المثال، filter_pdb_{train,val,test}_mmcifs.py
و cluster_pdb_{train,val,test}_mmcifs.py
) أنك قمت بتنزيل PDB بتنسيق ملف mmCIF ، ووضع التجميع الأول له و ملفات mmCIF للوحدة غير المتماثلة في data/pdb_data/unfiltered_assembly_mmcifs/
و data/pdb_data/unfiltered_asym_mmcifs/
على التوالي.
من أجل إمكانية التكرار، نوصي بتنزيل PDB باستخدام لقطات AWS (على سبيل المثال، 20240101
). للقيام بذلك، راجع وثائق AWS لإعداد AWS CLI محليًا. وبدلاً من ذلك، على موقع RCSB، انتقل لأسفل إلى "Download Protocols"، واتبع تعليمات التنزيل وفقًا لموقعك.
على سبيل المثال، يمكن للمرء استخدام الأوامر التالية لتنزيل PDB كمجموعتين من ملفات mmCIF:
# 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/
تحذير: قد يستغرق تنزيل ملف PDB ما يصل إلى 700 جيجابايت من المساحة.
ملاحظة: يستضيف PDB جميع لقطات AWS المتوفرة هنا: https://pdbsnapshots.s3.us-west-2.amazonaws.com/index.html.
بعد التنزيل، يجب أن يكون لديك مجلدين بتنسيق مثل هذا: https://files.rcsb.org/pub/pdb/data/assemblies/mmCIF/divided/ & https://files.rcsb.org/pub/pdb/data /الهياكل/مقسمة/mmCIF/
00/
01/
02/
..
zz/
بالنسبة لهذه المجلدات، قم بفك ضغط جميع الملفات:
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 {} ;
بعد ذلك قم بتشغيل الأوامر
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
من الدليل الجذري للمشروع لتنزيل أحدث إصدار من قاموس المكونات الكيميائية (CCD) الخاص بـ PDB ونماذجه الهيكلية. قم باستخراج كل من هذه الملفات باستخدام الأمر التالي:
find data/ccd_data/ -type f -name " *.gz " -exec gzip -d {} ;
ثم قم بتشغيل ما يلي مع استبدال pdb_assembly_dir
و pdb_asym_dir
و ccd_dir
و mmcif_output_dir
بمواقع النسخ المحلية الخاصة بك من PDB للتجميع الأول والوحدة غير المتماثلة PDB وCCD ودليل إخراج مجموعة البيانات المطلوبة (على سبيل المثال، ./data/pdb_data/unfiltered_assembly_mmcifs/
، ./data/pdb_data/unfiltered_asym_mmcifs/
و ./data/ccd_data/
و ./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 >
راجع البرامج النصية لمزيد من الخيارات. سيتم كتابة كل mmCIF تجميع أولي يجتاز جميع خطوات المعالجة بنجاح إلى mmcif_output_dir
ضمن دليل فرعي مسمى وفقًا لأحرف معرف PDB الثانية والثالثة لـ mmCIF (على سبيل المثال 5c
).
بعد ذلك، قم بتشغيل ما يلي مع استبدال mmcif_dir
و {train,val,test}_clustering_output_dir
، على التوالي، بدليل الإخراج المحلي الذي تم إنشاؤه باستخدام البرنامج النصي لتصفية مجموعة البيانات أعلاه ومع أدلة إخراج التجميع المطلوبة (على سبيل المثال، ./data/pdb_data/{train,val,test}_mmcifs/
و ./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
ملحوظة : يوصى باستخدام علامة --clustering_filtered_pdb_dataset
عند تجميع مجموعة بيانات PDB المصفاة كما تم تنظيمها باستخدام البرامج النصية أعلاه، حيث أن هذه العلامة ستمكن أوقات تشغيل أسرع في هذا السياق (نظرًا لأن التصفية تترك معرفات بقايا كل سلسلة مستندة إلى 1). ومع ذلك، لا يجب توفير هذه العلامة عند تجميع مجموعات بيانات أخرى (على سبيل المثال، غير PDB) لملفات mmCIF. بخلاف ذلك، قد يتم تنفيذ تجميع الواجهة بشكل غير صحيح، لأن ملفات mmCIF الخاصة بمجموعات البيانات هذه قد لا تستخدم فهرسة بقايا صارمة تعتمد على 1 لكل سلسلة.
ملاحظة : يمكن للمرء بدلاً من ذلك تنزيل ملفات mmCIF ( train
/ val
/ test
) المعالجة مسبقًا (على سبيل المثال، التي تمت تصفيتها) (حوالي 25 جيجابايت، تشتمل على 148 كيلو مجمعات) وملفات تجميع السلسلة/الواجهة ( train
/ val
/ test
) (~ 3 جيجابايت) لـ PDB's 20240101
لقطة AWS عبر مجلد OneDrive مشترك. يجب فك ضغط كل من أرشيفات tar.gz
هذه داخل الدليل data/pdb_data/
على سبيل المثال، عبر tar -xzf data_caches.tar.gz -C data/pdb_data/
. يمكن للمرء أيضًا تنزيل بيانات التقطير PDB وإعدادها باستخدام البرنامج النصي scripts/distillation_data_download.sh
كمرجع. بمجرد التنزيل، يمكن للمرء تشغيل scripts/reduce_uniprot_predictions_to_pdb.py
لتصفية مجموعة البيانات هذه إلى الأمثلة المرتبطة فقط بإدخال PDB واحد على الأقل. علاوة على ذلك، ومن أجل الراحة، تم بالفعل تنزيل واستخراج تعيين معرفات وصول UniProt إلى معرفات PDB للتدريب على بيانات التقطير PDB كـ data/afdb_data/data_caches/uniprot_to_pdb_id_mapping.dat
.
في جذر المشروع، قم بتشغيل
$ sh ./contribute.sh
بعد ذلك، أضف وحدتك إلى alphafold3_pytorch/alphafold3.py
، وأضف اختباراتك إلى tests/test_af3.py
، وأرسل طلب سحب. يمكنك إجراء الاختبارات محليًا باستخدام
$ pytest tests/
يحتوي Dockerfile
المضمن على التبعيات المطلوبة لتشغيل الحزمة والتدريب/الاستدلال باستخدام PyTorch مع وحدات معالجة الرسومات.
الصورة الأساسية الافتراضية هي pytorch/pytorch:2.3.0-cuda12.1-cudnn8-runtime
وتقوم بتثبيت أحدث إصدار من هذه الحزمة من فرع GitHub main
.
# # Build Docker Container
docker build -t af3 .
وبدلاً من ذلك، استخدم وسيطات البناء لإعادة بناء الصورة باستخدام إصدارات برامج مختلفة:
PYTORCH_TAG
: يغير الصورة الأساسية وبالتالي يتم إنشاؤها باستخدام إصدارات مختلفة من PyTorch و/أو CUDA و/أو cuDNN.GIT_TAG
: يغير علامة الريبو هذه لاستنساخ الحزمة وتثبيتها.على سبيل المثال:
# # 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 .
بعد ذلك، قم بتشغيل الحاوية باستخدام وحدات معالجة الرسومات وقم بتحميل وحدة تخزين محلية (للتدريب) باستخدام الأمر التالي:
# # 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 }
}