{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/fixing-the-double-penalty-in-data-driven","title":"Fixing the Double Penalty in Data-Driven Weather Forecasting Through a Modified Spherical Harmonic Loss Function","arxiv_id":"2501.19374","date":"2025-01-31","proceeding":null,"authors":["Christopher Subich","Syed Zahid Husain","Leo Separovic","Jing Yang"],"abstract":"Recent advancements in data-driven weather forecasting models have delivered deterministic models that outperform the leading operational forecast systems based on traditional, physics-based models. However, these data-driven models are typically trained with a mean squared error loss function, which causes smoothing of fine scales through a \"double penalty\" effect. We develop a simple, parameter-free modification to this loss function that avoids this problem by separating the loss attributable to decorrelation from the loss attributable to spectral amplitude errors. Fine-tuning the GraphCast model with this new loss function results in sharp deterministic weather forecasts, an increase of the model's effective resolution from 1,250km to 160km, improvements to ensemble spread, and improvements to predictions of tropical cyclone strength and surface wind extremes.","url_abs":"https://arxiv.org/abs/2501.19374v2","url_pdf":"https://arxiv.org/pdf/2501.19374v2.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"fixing-the-double-penalty-in-data-driven","repo_url":"https://github.com/csubich/graphcast","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"jax","reach":null}],"tasks":[{"task_slug":"weather-forecasting","task_name":"Weather Forecasting"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2501.19374","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2501.19374"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/csubich/graphcast","reach":null}],"summary":{"unverified":4},"by_repo_kind":{"official":{"samples":4,"ran":0,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"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"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"9434dd805d1f723f","entry":"build_loss_and_grad","repo":"csubich/graphcast","repo_kind":"official","path":"forecast/generate_model.py","file_url":"https://github.com/csubich/graphcast/blob/HEAD/forecast/generate_model.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"9434dd805d1f723f"}},{"code_sha256_prefix":"582fde9d1cbd2029","entry":"build_predictor_params","repo":"csubich/graphcast","repo_kind":"official","path":"forecast/generate_model.py","file_url":"https://github.com/csubich/graphcast/blob/HEAD/forecast/generate_model.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"582fde9d1cbd2029"}},{"code_sha256_prefix":"624011e6c460d5b0","entry":"load_model","repo":"csubich/graphcast","repo_kind":"official","path":"forecast/generate_model.py","file_url":"https://github.com/csubich/graphcast/blob/HEAD/forecast/generate_model.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"624011e6c460d5b0"}},{"code_sha256_prefix":"a9ccb9594aa81ac4","entry":"make_loss","repo":"csubich/graphcast","repo_kind":"official","path":"trainer/loss_utils.py","file_url":"https://github.com/csubich/graphcast/blob/HEAD/trainer/loss_utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"a9ccb9594aa81ac4"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}