{"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/model-developmental-safety-a-safety-centric","title":"A Retention-Centric Framework for Continual Learning with Guaranteed Model Developmental Safety","arxiv_id":"2410.03955","date":"2024-10-04","proceeding":null,"authors":["Gang Li","Wendi Yu","Yao Yao","Wei Tong","Yingbin Liang","Qihang Lin","Tianbao Yang"],"abstract":"In real-world applications, learning-enabled systems often undergo iterative model development to address challenging or emerging tasks, which involve collecting new data, training a new model and validating the model. This continual model development process raises a significant issue that acquiring new or improving existing capabilities may inadvertently lose good capabilities of the old model, also known as catastrophic forgetting. While existing continual learning aims to mitigate catastrophic forgetting by trading off performance on previous tasks and new tasks to ensure good average performance, it often falls short in cost-sensitive applications, where failing to preserve essential established capabilities introduces unforeseen costs and risks and substantial expenses for re-improving these capabilities. To address this issue, we impose a requirement on learning systems to ensure that a new model strictly retains important capabilities of the old model while improving target-task performance, which we term model developmental safety. To ensure model developmental safety, we propose a retention-centric framework with data-dependent constraints, and study how to continually develop a pretrained CLIP model for acquiring new or improving existing capabilities of image classification. We propose an efficient constrained optimization algorithm with theoretical guarantees and use its insights to finetune the CLIP model with task-dependent heads for promoting the model developmental safety. Experiments on autonomous driving and scene recognition datasets validate the efficacy of our method.","url_abs":"https://arxiv.org/abs/2410.03955v4","url_pdf":"https://arxiv.org/pdf/2410.03955v4.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":"model-developmental-safety-a-safety-centric","repo_url":"https://github.com/ganglii/devsafety","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok"}}],"tasks":[{"task_slug":"autonomous-driving","task_name":"Autonomous Driving"},{"task_slug":"continual-learning","task_name":"Continual Learning"},{"task_slug":"image-classification","task_name":"Image Classification"},{"task_slug":"scene-recognition","task_name":"Scene Recognition"},{"task_slug":"image-classification","task_name":"image-classification"}],"methods":[{"method_slug":"clip","method_name":"CLIP"},{"method_slug":"focus","method_name":"Focus"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2410.03955","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2410.03955"}},"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/ganglii/devsafety","reach":{"status":"ok"}}],"summary":{"ran_draft_wrong":4,"ran":1,"unverified":4},"by_repo_kind":{"official":{"samples":9,"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":9,"samples":[{"code_sha256_prefix":"98f385d847636a3e","entry":"basic_clean","repo":"ganglii/devsafety","repo_kind":"official","path":"clip/tokenizer.py","file_url":"https://github.com/ganglii/devsafety/blob/HEAD/clip/tokenizer.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"98f385d847636a3e"}},{"code_sha256_prefix":"43e90e164020c15a","entry":"get_classnames","repo":"ganglii/devsafety","repo_kind":"official","path":"src/datasets/bdd100k_classnames.py","file_url":"https://github.com/ganglii/devsafety/blob/HEAD/src/datasets/bdd100k_classnames.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":"43e90e164020c15a"}},{"code_sha256_prefix":"d919ae32e5e4e616","entry":"get_pairs","repo":"ganglii/devsafety","repo_kind":"official","path":"clip/tokenizer.py","file_url":"https://github.com/ganglii/devsafety/blob/HEAD/clip/tokenizer.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"d919ae32e5e4e616"}},{"code_sha256_prefix":"b1e9e0d3d7d7e615","entry":"maybe_dictionarize","repo":"ganglii/devsafety","repo_kind":"official","path":"src/datasets/common.py","file_url":"https://github.com/ganglii/devsafety/blob/HEAD/src/datasets/common.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b1e9e0d3d7d7e615"}},{"code_sha256_prefix":"9542161e9640b858","entry":"whitespace_clean","repo":"ganglii/devsafety","repo_kind":"official","path":"clip/tokenizer.py","file_url":"https://github.com/ganglii/devsafety/blob/HEAD/clip/tokenizer.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"9542161e9640b858"}},{"code_sha256_prefix":"9d7ca482ec5e6819","entry":"build_model","repo":"ganglii/devsafety","repo_kind":"official","path":"clip/model.py","file_url":"https://github.com/ganglii/devsafety/blob/HEAD/clip/model.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"9d7ca482ec5e6819"}},{"code_sha256_prefix":"ddcbd45e940484ee","entry":"gather_features","repo":"ganglii/devsafety","repo_kind":"official","path":"src/train_eval/loss.py","file_url":"https://github.com/ganglii/devsafety/blob/HEAD/src/train_eval/loss.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"ddcbd45e940484ee"}},{"code_sha256_prefix":"7727c964cfcd56e6","entry":"get_features","repo":"ganglii/devsafety","repo_kind":"official","path":"src/datasets/common.py","file_url":"https://github.com/ganglii/devsafety/blob/HEAD/src/datasets/common.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"7727c964cfcd56e6"}},{"code_sha256_prefix":"74edffa1dfc39e58","entry":"get_features_helper","repo":"ganglii/devsafety","repo_kind":"official","path":"src/datasets/common.py","file_url":"https://github.com/ganglii/devsafety/blob/HEAD/src/datasets/common.py","link_basis":"plan_row","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"74edffa1dfc39e58"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}