Papers › Optimizing Neural Networks with Kronecker-factored Approximate Curvature

Optimizing Neural Networks with Kronecker-factored Approximate Curvature

19 Mar 2015arXiv:1503.05671archive 2025-07-28

James Martens, Roger Grosse

We propose an efficient method for approximating natural gradient descent in neural networks which we call Kronecker-Factored Approximate Curvature (K-FAC). K-FAC is based on an efficiently invertible approximation of a neural network's Fisher information matrix which is neither diagonal nor low-rank, and in some cases is completely non-sparse. It is derived by approximating various large blocks of the Fisher (corresponding to entire layers) as being the Kronecker product of two much smaller matrices. While only several times more expensive to compute than the plain stochastic gradient, the updates produced by K-FAC make much more progress optimizing the objective, which results in an algorithm that can be much faster than stochastic gradient descent with momentum in practice. And unlike some previously proposed approximate natural-gradient/Newton methods which use high-quality non-diagonal curvature matrices (such as Hessian-free optimization), K-FAC works very well in highly stochastic optimization regimes. This is because the cost of storing and inverting K-FAC's approximation to the curvature matrix does not depend on the amount of data used to estimate it, which is a feature typically associated only with diagonal or low-rank approximations to the curvature matrix.

PaperPDFCodeCode Syntology ran

In Syntology Open this paper in Syntology's Atlas, the map of the papers in Syntology's graph and their citations.

For agents, Syntology's MCP tool lists every function and class Syntology harvested from this paper and whether it ran (how to connect): get_harvested_code_for_paper(arxiv_id="1503.05671")

Code

Syntology Ran 41 of 82 code samples harvested from 11 repositories linked to this paper; 41 have no recorded run. Of those that ran: 5 ran · honoured contract; 5 ran · our draft was wrong; 3 ran · fixture could not drive it; 28 ran with no contract checked.

By repository: community (archive-listed): 82 samples from 11 repositories, 41 ran. The run record, sample by sample. “Ran” means executed on a synthesized input, not that the code is correct or reproduces the paper.

19 repositories listed; official and paper-mentioned ones first.

Thrandis/EKFAC-pytorch mentioned on GitHubpytorch report
aai-institute/pyDVL mentioned on GitHubpytorchLGPL-3.0 report
alecwangcq/KFAC-Pytorch mentioned on GitHubpytorch report
appliedAI-Initiative/pyDVL mentioned on GitHubpytorchLGPL-3.0 report
deepmind/kfac-jax mentioned on GitHubjaxApache-2.0 report
deepmind/kfac_jax mentioned on GitHubjaxApache-2.0 report
gd-zhang/noisy-K-FAC mentioned on GitHubtf report
google-deepmind/kfac-jax mentioned on GitHubjax report
gpauloski/kfac_pytorch mentioned on GitHubpytorch report
kazukiosawa/asdfghjkl mentioned on GitHubpytorchMIT report
kazukiosawa/asdl mentioned on GitHubpytorch report
lzhangbv/eva mentioned on GitHubpytorch report
n-gao/pytorch-kfac mentioned on GitHubpytorch report
pomonam/kronfluence mentioned on GitHubpytorch report
tensorflow/kfac mentioned on GitHubtfApache-2.0 report
tyohei/chainerkfac mentioned on GitHub report

Repository list and official/mentioned flags are the archive's, frozen 2025-07-28. Reachability, where shown, is from one Syntology probe window (2026-09-16 to 2026-09-18); repositories not probed show nothing. GitHub stars are not tracked.

Code Syntology ran Syntology

82 samples harvested; 41 ran; 5 honoured the contract we drafted; 41 have no recorded run. Read from Syntology's graph 2026-09-24; that is when this build read the record, not when the samples ran.

5ran · honoured contract
5ran · our draft was wrong
3ran · fixture could not drive it
28ran
41unverified

Licence: 7 of the 82 samples are pointer only, meaning Syntology does not serve that copy's text. This page shows no code text for any sample; each one links to its file in the repository.

Harvested from 11 repositories linked to this paper, official or community; each sample names its own and says which. “Ran” means the sample executed on a synthesized input. It does not mean the output is correct, and nothing here reproduces the paper's results. “Honoured” and “violated” refer to a contract Syntology drafted from the code itself; “our draft was wrong” and “fixture could not drive it” are failures of Syntology's instrument, not of the code.

Each sample ends with its code_sha256, Syntology's identity for that exact code. An agent fetches the stored sample with Syntology's MCP tool get_code(code_sha256="…") (how to connect); click an identity to copy that call.

Repository labels, per sample. official repository: The archive marks this repository official for the paper. named in the paper: The archive records that the paper mentions this repository; it is not marked official. community (archive-listed): In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper. found in paper text by Syntology: Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted. community: Not in the archive's code links for this paper; a community repository Syntology harvested. Samples from a repository marked official are listed first. Licence labels name the repository's licence as recorded at harvest. “Pointer only” means Syntology does not serve that copy's text, for one of four reasons: no licence file was found; the licence was not identified; the licence is recorded as permissive but that copy's record is not marked cleared; or the licence is outside the permissive list Syntology serves text under (MIT, Apache-2.0, BSD and similar). Some licences outside that list permit redistribution, such as WTFPL, and GPL-3.0 under its conditions; they are simply not on the list. Hover a licence label for the reason. File links open the file on GitHub at the default branch, which may have changed since the harvest.

Affine1dLayer tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) ran MIT (permissive) · 2ff2e376a2e4158e · report
BaseTracker pomonam/kronfluence/kronfluence/module/tracker/factor.py community (archive-listed) ran Apache-2.0 (permissive) · 956d8974e23f92f3 · report
BatchNorm1dLayer tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) ran MIT (permissive) · 10d89b5231aec8dd · report
BatchNorm2dLayer tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) ran MIT (permissive) · fac8035472c63fd0 · report
ComputeCovA alecwangcq/KFAC-Pytorch/optimizers/kfac.py community (archive-listed) ran no licence file found · pointer only · 6c5a83bcb01d90ef · report
ComputeCovG alecwangcq/KFAC-Pytorch/optimizers/kfac.py community (archive-listed) ran no licence file found · pointer only · ef68f197dff83678 · report
Conv1dLayer tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) ran MIT (permissive) · 35bc89f50dd7af53 · report
Conv2dLayer tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) ran MIT (permissive) · 6f1cfe87e0178123 · report
ConvTranspose2dLayer tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) ran MIT (permissive) · a499441a745f94d9 · report
Cosine1dLayer tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) ran MIT (permissive) · 3bbd96efbe01a300 · report
CovarianceTracker pomonam/kronfluence/kronfluence/module/tracker/factor.py community (archive-listed) ran Apache-2.0 (permissive) · 576826a57eb08cdf · report
DummyGenerator tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) ran MIT (permissive) · a477c7c01eaf05d4 · report
EmbeddingLayer tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) ran MIT (permissive) · 01151fe74bd4e116 · report
FVector tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) ran MIT (permissive) · 95bd77b76182deff · report
GroupNormLayer tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) ran MIT (permissive) · fab0128d2bc80b44 · report
KFAC Thrandis/EKFAC-pytorch/kfac.py community (archive-listed) ran MIT (permissive) · ed328a08fd23b966 · report
KFACOptimizer alecwangcq/KFAC-Pytorch/optimizers/kfac.py community (archive-listed) ran no licence file found · pointer only · bd91cdd76a94bc85 · report
LayerNormLayer tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) ran MIT (permissive) · f69b4478b2e83746 · report
LinearLayer tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) ran MIT (permissive) · b213da7adb946c6e · report
Lock n-gao/pytorch-kfac/torch_kfac/kfac_optimizer.py community (archive-listed) ran Apache-2.0 (permissive) · f7fcbbda3360ca21 · report
RMSNormLayer tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) ran MIT (permissive) · ebbc685253da02be · report
WeightNorm1dLayer tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) ran MIT (permissive) · 5f7fa87fab943a2f · report
WeightNorm2dLayer tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) ran MIT (permissive) · 140e25fc006243dc · report
_compute_pi_adjusted_damping gd-zhang/noisy-K-FAC/ops/fisher_blocks.py community (archive-listed) ran · our draft was wrong fingerprinted Apache-2.0 (permissive) · 60eb09385fc152ec · report
_compute_pi_tracenorm gd-zhang/noisy-K-FAC/ops/fisher_blocks.py community (archive-listed) ran · our draft was wrong Apache-2.0 (permissive) · 03bd0815719fb6ce · report
_extract_patches lzhangbv/eva/kfac/kfac.py community (archive-listed) ran · fixture could not drive it MIT (permissive) · 85b2fa0f8cf49ed9 · report
broadcast_in_dim_equivalent deepmind/kfac-jax/kfac_jax/_src/tag_graph_matcher.py community (archive-listed) ran Apache-2.0 (permissive) · 987e113518340066 · report
compatible_sum deepmind/kfac-jax/kfac_jax/_src/curvature_blocks/utils.py community (archive-listed) ran Apache-2.0 (permissive) · dc1b986b1be917d4 · report
eval_jaxpr_eqn deepmind/kfac-jax/kfac_jax/_src/tag_graph_matcher.py community (archive-listed) ran Apache-2.0 (permissive) · 42474a82097165d1 · report
fill_triu gpauloski/kfac_pytorch/kfac/base_preconditioner.py community (archive-listed) ran · fixture could not drive it MIT (permissive) · b4fe97f4f4ba63e8 · report
get_factor_A lzhangbv/eva/kfac/kfac.py community (archive-listed) ran MIT (permissive) · 0d56665a6e4fc981 · report
get_factor_G lzhangbv/eva/kfac/kfac.py community (archive-listed) ran MIT (permissive) · 5d894a6e01e35d3c · report
get_rank gpauloski/kfac_pytorch/kfac/base_preconditioner.py community (archive-listed) ran · honoured contract fingerprinted MIT (permissive) · 3278f8b9bebda5c0 · report
get_triu gpauloski/kfac_pytorch/kfac/base_preconditioner.py community (archive-listed) ran · honoured contract fingerprinted MIT (permissive) · 8ca46141b763e7bb · report
get_world_size gpauloski/kfac_pytorch/kfac/base_preconditioner.py community (archive-listed) ran · honoured contract fingerprinted MIT (permissive) · 1762f497470285d1 · report
kronecker tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) ran · fixture could not drive it fingerprinted MIT (permissive) · 8f96d29b7dd6bd0b · report
kronecker_product gd-zhang/noisy-K-FAC/ops/fisher_blocks.py community (archive-listed) ran · our draft was wrong fingerprinted Apache-2.0 (permissive) · 7222c121f3477ba0 · report
layer_params_to_mat2d gd-zhang/noisy-K-FAC/ops/fisher_blocks.py community (archive-listed) ran · honoured contract Apache-2.0 (permissive) · 91a213d003b54394 · report
mat2d_to_layer_params gd-zhang/noisy-K-FAC/ops/fisher_blocks.py community (archive-listed) ran · honoured contract Apache-2.0 (permissive) · 644afb931715ec36 · report
mat_inv lzhangbv/eva/kfac/kfac.py community (archive-listed) ran · our draft was wrong MIT (permissive) · 0ce2b352cc049e18 · report
try_contiguous alecwangcq/KFAC-Pytorch/optimizers/kfac.py community (archive-listed) ran · our draft was wrong fingerprinted no licence file found · pointer only · a485499e9e91edac · report
AbstractLayer tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) unverified MIT (permissive) · 35284deabd2168da · report
AdjointMixin tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) unverified MIT (permissive) · 2041a0308d51063e · report
AllreduceMethod gpauloski/kfac_pytorch/kfac/base_preconditioner.py community (archive-listed) unverified MIT (permissive) · 1b60c10748712a31 · report
AllreduceTensorBucket gpauloski/kfac_pytorch/kfac/base_preconditioner.py community (archive-listed) unverified MIT (permissive) · 2b1c0c841481916b · report
BaseKFACPreconditioner gpauloski/kfac_pytorch/kfac/base_preconditioner.py community (archive-listed) unverified MIT (permissive) · 0d8033af1549fa2c · report
BaseOptimizer Abdoulaye-Koroko/natural-gradients/optimizers/kfac.py community (archive-listed) unverified no licence file found · pointer only · c03b72239a4f4bcb · report
ConvFisherBlock n-gao/pytorch-kfac/torch_kfac/kfac_optimizer.py community (archive-listed) unverified Apache-2.0 (permissive) · 7500eb60962601d5 · report
ExtensionFisherBlock n-gao/pytorch-kfac/torch_kfac/kfac_optimizer.py community (archive-listed) unverified Apache-2.0 (permissive) · 173f7a31889b7f5f · report
FisherBlock gd-zhang/noisy-K-FAC/ops/fisher_blocks.py community (archive-listed) unverified Apache-2.0 (permissive) · 5a78d2378b246eb6 · report
FisherBlock n-gao/pytorch-kfac/torch_kfac/kfac_optimizer.py community (archive-listed) unverified Apache-2.0 (permissive) · b57f5f260d76a226 · report
FullyConnectedFisherBlock n-gao/pytorch-kfac/torch_kfac/kfac_optimizer.py community (archive-listed) unverified Apache-2.0 (permissive) · 8bec7b9650c29e3e · report
Identity n-gao/pytorch-kfac/torch_kfac/kfac_optimizer.py community (archive-listed) unverified Apache-2.0 (permissive) · 16eaade9680fa2ad · report
KFAC lzhangbv/eva/kfac/kfac.py community (archive-listed) unverified MIT (permissive) · 3e2d90ec122104bf · report
KFAC Abdoulaye-Koroko/natural-gradients/optimizers/kfac.py community (archive-listed) unverified no licence file found · pointer only · 3d4c518301416d42 · report
KFAC n-gao/pytorch-kfac/torch_kfac/kfac_optimizer.py community (archive-listed) unverified Apache-2.0 (permissive) · 1bbae6feabfcad70 · report
KFACBaseLayer gpauloski/kfac_pytorch/kfac/base_preconditioner.py community (archive-listed) unverified MIT (permissive) · 6280cb432e87ea68 · report
KroneckerProductFB gd-zhang/noisy-K-FAC/ops/fisher_blocks.py community (archive-listed) unverified Apache-2.0 (permissive) · 1cc50e98ce497b16 · report
LayerCollection tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) unverified MIT (permissive) · 1bbbaed0ca4090a5 · report
ModuleHelper gpauloski/kfac_pytorch/kfac/base_preconditioner.py community (archive-listed) unverified MIT (permissive) · 1cdcc4d4bc82139e · report
NonSquareTensorError gpauloski/kfac_pytorch/kfac/base_preconditioner.py community (archive-listed) unverified MIT (permissive) · 38b41a92b445502a · report
PFMap tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) unverified MIT (permissive) · e11d297317fb9e0e · report
PFMapAdjoint tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) unverified MIT (permissive) · 0ac45f5d4f3b5658 · report
PFMapDense tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) unverified MIT (permissive) · 2427358607a8c69b · report
PMatDense tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) unverified MIT (permissive) · cb390870817a6192 · report
PMatKFAC tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) unverified MIT (permissive) · 06228e7955b6d2c6 · report
PVector tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) unverified MIT (permissive) · 8736dad71a50a6bf · report
Parameter tfjgeorge/nngeometry/nngeometry/object/pspace.py community (archive-listed) unverified MIT (permissive) · f75ed1a89da1e5fb · report
TorchDistributedCommunicator gpauloski/kfac_pytorch/kfac/base_preconditioner.py community (archive-listed) unverified MIT (permissive) · b41e5f00bb583818 · report
WorkAssignment gpauloski/kfac_pytorch/kfac/base_preconditioner.py community (archive-listed) unverified MIT (permissive) · 9245cd1b6ec2f686 · report
append_homog tensorflow/kfac/kfac/python/ops/fisher_factors.py community (archive-listed) unverified Apache-2.0 (permissive) · dae13d996f619373 · report
compute_pi_adjusted_damping tensorflow/kfac/kfac/python/ops/fisher_blocks.py community (archive-listed) unverified Apache-2.0 (permissive) · c9d2562d5cee3815 · report
compute_pi_tracenorm tensorflow/kfac/kfac/python/ops/fisher_blocks.py community (archive-listed) unverified Apache-2.0 (permissive) · 2597244a6585acd2 · report
get_and_verify_loss_meta deepmind/kfac-jax/kfac_jax/_src/layers_and_loss_tags.py community (archive-listed) unverified Apache-2.0 (permissive) · 14e10e479569a361 · report
get_loss_outputs deepmind/kfac-jax/kfac_jax/_src/layers_and_loss_tags.py community (archive-listed) unverified Apache-2.0 (permissive) · b4a5e9703e6605e1 · report
init_fisher_block n-gao/pytorch-kfac/torch_kfac/kfac_optimizer.py community (archive-listed) unverified Apache-2.0 (permissive) · 9857d3fe0bcde444 · report
insert_slice_in_zeros tensorflow/kfac/kfac/python/ops/loss_functions.py community (archive-listed) unverified Apache-2.0 (permissive) · 75d2010849cfb391 · report
normalize_damping tensorflow/kfac/kfac/python/ops/fisher_blocks.py community (archive-listed) unverified Apache-2.0 (permissive) · 51a29ce1d20b6e08 · report
reshape_equivalent deepmind/kfac-jax/kfac_jax/_src/tag_graph_matcher.py community (archive-listed) unverified Apache-2.0 (permissive) · ee339b16cfba7ff0 · report
serialize_fisher_approx tensorflow/kfac/kfac/python/keras/utils.py community (archive-listed) unverified Apache-2.0 (permissive) · 9682f590ed4212ee · report
serialize_loss tensorflow/kfac/kfac/python/keras/utils.py community (archive-listed) unverified Apache-2.0 (permissive) · da37ff58ebeb1932 · report
update_running_stat alecwangcq/KFAC-Pytorch/optimizers/kfac.py community (archive-listed) unverified no licence file found · pointer only · 8289f23af3cf86d4 · report

Tasks

Stochastic Optimization

Results from the paper archive 2025-07-28

No leaderboard rows for this paper in the archive.

Report a problem or propose a change · a person checks every report against the paper or source before anything changes; decisions are listed on /corrections