{"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/an-inductive-bias-for-distances-neural-nets-1","title":"An Inductive Bias for Distances: Neural Nets that Respect the Triangle Inequality","arxiv_id":"2002.05825","date":"2020-02-14","proceeding":"ICLR 2020 1","authors":["Silviu Pitis","Harris Chan","Kiarash Jamali","Jimmy Ba"],"abstract":"Distances are pervasive in machine learning. They serve as similarity measures, loss functions, and learning targets; it is said that a good distance measure solves a task. When defining distances, the triangle inequality has proven to be a useful constraint, both theoretically--to prove convergence and optimality guarantees--and empirically--as an inductive bias. Deep metric learning architectures that respect the triangle inequality rely, almost exclusively, on Euclidean distance in the latent space. Though effective, this fails to model two broad classes of subadditive distances, common in graphs and reinforcement learning: asymmetric metrics, and metrics that cannot be embedded into Euclidean space. To address these problems, we introduce novel architectures that are guaranteed to satisfy the triangle inequality. We prove our architectures universally approximate norm-induced metrics on $\\mathbb{R}^n$, and present a similar result for modified Input Convex Neural Networks. We show that our architectures outperform existing metric approaches when modeling graph distances and have a better inductive bias than non-metric approaches when training data is limited in the multi-goal reinforcement learning setting.","url_abs":"https://arxiv.org/abs/2002.05825v3","url_pdf":"https://arxiv.org/pdf/2002.05825v3.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":"an-inductive-bias-for-distances-neural-nets-1","repo_url":"https://github.com/spitis/deepnorms","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"tf","reach":null},{"paper_slug":"an-inductive-bias-for-distances-neural-nets-1","repo_url":"https://github.com/quasimetric-learning/torch-quasimetric","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"inductive-bias","task_name":"Inductive Bias"},{"task_slug":"metric-learning","task_name":"Metric Learning"},{"task_slug":"multi-goal-reinforcement-learning","task_name":"Multi-Goal Reinforcement Learning"},{"task_slug":"reinforcement-learning","task_name":"Reinforcement Learning"},{"task_slug":"reinforcement-learning-1","task_name":"Reinforcement Learning (RL)"},{"task_slug":"reinforcement-learning-2","task_name":"reinforcement-learning"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2002.05825","atlas_url":"https://app.syntology.ai/?focus=2002.05825","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2002.05825"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+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/spitis/deepnorms","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/quasimetric-learning/torch-quasimetric","reach":null}],"summary":{"ran":5},"by_repo_kind":{"official":{"samples":5,"ran":5,"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":5,"samples":[{"code_sha256_prefix":"d356f206af8c8a7e","entry":"ConcaveActivation","repo":"spitis/deepnorms","repo_kind":"official","path":"metrics_pytorch.py","file_url":"https://github.com/spitis/deepnorms/blob/HEAD/metrics_pytorch.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"d356f206af8c8a7e"}},{"code_sha256_prefix":"574f170004331292","entry":"ConstrainedLinear","repo":"spitis/deepnorms","repo_kind":"official","path":"metrics_pytorch.py","file_url":"https://github.com/spitis/deepnorms/blob/HEAD/metrics_pytorch.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"574f170004331292"}},{"code_sha256_prefix":"0c110e699b49fc04","entry":"DeepNormMetric","repo":"spitis/deepnorms","repo_kind":"official","path":"metrics_pytorch.py","file_url":"https://github.com/spitis/deepnorms/blob/HEAD/metrics_pytorch.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"0c110e699b49fc04"}},{"code_sha256_prefix":"b15d3c00b0bc4cbc","entry":"MaxAvgGlobalActivation","repo":"spitis/deepnorms","repo_kind":"official","path":"metrics_pytorch.py","file_url":"https://github.com/spitis/deepnorms/blob/HEAD/metrics_pytorch.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b15d3c00b0bc4cbc"}},{"code_sha256_prefix":"4b2e75177b4118d0","entry":"ReduceMetric","repo":"spitis/deepnorms","repo_kind":"official","path":"metrics_pytorch.py","file_url":"https://github.com/spitis/deepnorms/blob/HEAD/metrics_pytorch.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"4b2e75177b4118d0"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}