{"version":2,"relationshipURLBase":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html","relationshipResolution":"Resolve relative relationship URLs against relationshipURLBase; complete records and absolute URLs are in blocks.","title":"LAB 07 · MoCo：历史 key、队列与两种更新","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html","markdown":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.md","pages":[{"id":"reading-opening","title":"LAB 07 · MoCo：历史 key、队列与两种更新","unit":"视图关系怎样成为学习目标，又会牺牲什么？","unitId":"i-view-objective","chapter":"I","number":1},{"id":"reading-block-feb682a46fff4f59a3edf8c6c2b6634a","title":"从概率到字典更新","unit":"视图关系怎样成为学习目标，又会牺牲什么？","unitId":"i-view-objective","chapter":"I","number":2},{"id":"reading-block-f722361318df4cc88ac4a6e40e240c62","title":"运行准备与结果身份","unit":"视图关系怎样成为学习目标，又会牺牲什么？","unitId":"i-view-objective","chapter":"I","number":3},{"id":"reading-block-8dac6d9eb3db46638c112354a06bddcf","title":"图像、两视图与同源正例","unit":"视图关系怎样成为学习目标，又会牺牲什么？","unitId":"i-view-objective","chapter":"I","number":4},{"id":"reading-block-180ef4ed3ff34c0eaafec7bde6f86a8f","title":"为什么队列需要缓慢变化的键编码器？","unit":"视图关系怎样成为学习目标，又会牺牲什么？","unitId":"i-view-objective","chapter":"I","number":5},{"id":"reading-block-578149ad721b4040b232cef9671cbcc5","title":"冻结参数以后才使用标签","unit":"视图关系怎样成为学习目标，又会牺牲什么？","unitId":"i-view-objective","chapter":"I","number":6},{"id":"reading-block-e77695d0d5f34ec38bdc6aa44ae84259","title":"已运行结果：字典正确，不代表语义读出必然变好","unit":"视图关系怎样成为学习目标，又会牺牲什么？","unitId":"i-view-objective","chapter":"I","number":7},{"id":"reading-block-2fcb1adb8ab540d28b9a54916b603faa","title":"接回前后知识","unit":"视图关系怎样成为学习目标，又会牺牲什么？","unitId":"i-view-objective","chapter":"I","number":8}],"aliases":[{"oldId":"b-95177c6372b7d0b9d8030f80","targetId":"b-95177c6372b7d0b9d8030f80","page":"reading-opening","operation":"move","beforeSHA256":"f533870374bd12fc328aea3496a5470b61fd6166cda00f6050d97073354a1c6f","afterSHA256":"f533870374bd12fc328aea3496a5470b61fd6166cda00f6050d97073354a1c6f","reason":"Same source body in authored semantic page"},{"oldId":"b-5f885ae5d8cd6312618dde1d","targetId":"b-5f885ae5d8cd6312618dde1d","page":"reading-opening","operation":"move","beforeSHA256":"e91f24e4e4ca40e2099a0d81d30db6568f4bf2074b499eeee6e3959617bd97ac","afterSHA256":"e91f24e4e4ca40e2099a0d81d30db6568f4bf2074b499eeee6e3959617bd97ac","reason":"Same source body in authored semantic page"},{"oldId":"b-a1555d6d7376fd798eece338","targetId":"b-a1555d6d7376fd798eece338","page":"reading-opening","operation":"move","beforeSHA256":"2a269d38480454fbc554b17f926927738416555e36045ec5fe468ba056454f5d","afterSHA256":"2a269d38480454fbc554b17f926927738416555e36045ec5fe468ba056454f5d","reason":"Same source body in authored semantic page"},{"oldId":"b-fe253718aad5ae4a27db4573","targetId":"b-fe253718aad5ae4a27db4573","page":"reading-opening","operation":"move","beforeSHA256":"f22152fd55dcdb0090b5653d37145694fd19388d31e10226549464fe8b483578","afterSHA256":"f22152fd55dcdb0090b5653d37145694fd19388d31e10226549464fe8b483578","reason":"Same source body in authored semantic page"},{"oldId":"b-dfa183f2f17139a98fbc9403","targetId":"b-dfa183f2f17139a98fbc9403","page":"reading-opening","operation":"move","beforeSHA256":"9412c334ba69cecafc029ab0c22814d9df928a6c4d41cd69390e96b2b55ccfe2","afterSHA256":"9412c334ba69cecafc029ab0c22814d9df928a6c4d41cd69390e96b2b55ccfe2","reason":"Same source body in authored semantic page"},{"oldId":"b-f4b6e9ee3477c555bdf909dc","targetId":"b-f4b6e9ee3477c555bdf909dc","page":"reading-opening","operation":"move","beforeSHA256":"5edd04072887b60b0353233c5738c08cf1a4b4fe25399e1278787b770525f49d","afterSHA256":"5edd04072887b60b0353233c5738c08cf1a4b4fe25399e1278787b770525f49d","reason":"Same source body in authored semantic page"},{"oldId":"b-9ba6645ecbcc3cb28854cc90","targetId":"b-9ba6645ecbcc3cb28854cc90","page":"reading-opening","operation":"move","beforeSHA256":"2cb97051246f2b97126b29cb1d2d3d765523949b20f9cba75b71af14e7a1fab4","afterSHA256":"2cb97051246f2b97126b29cb1d2d3d765523949b20f9cba75b71af14e7a1fab4","reason":"Same source body in authored semantic page"},{"oldId":"b-2d7b72b033d58162c0153ec7","targetId":"b-2d7b72b033d58162c0153ec7","page":"reading-opening","operation":"move","beforeSHA256":"e2bc11cdf7f6eac42415a252ec4d27c074ce0a5a9932a7d67c1ebb7cc8ec0240","afterSHA256":"e2bc11cdf7f6eac42415a252ec4d27c074ce0a5a9932a7d67c1ebb7cc8ec0240","reason":"Same source body in authored semantic page"},{"oldId":"b-3a23494283533813e4e18cbd","targetId":"b-3a23494283533813e4e18cbd","page":"reading-opening","operation":"move","beforeSHA256":"1a29ec6a184afc59d6d6ef74f67ea98a3fa9cd42f5887364fa7c59c2e470d464","afterSHA256":"1a29ec6a184afc59d6d6ef74f67ea98a3fa9cd42f5887364fa7c59c2e470d464","reason":"Same source body in authored semantic page"},{"oldId":"b-7ba49bcdc8c4a80deefd91fc","targetId":"b-7ba49bcdc8c4a80deefd91fc","page":"reading-block-feb682a46fff4f59a3edf8c6c2b6634a","operation":"move","beforeSHA256":"ad3252a44d79e4087efe23d5bea992c60eedf5a6038f4c815284f90ef6dfb01a","afterSHA256":"ad3252a44d79e4087efe23d5bea992c60eedf5a6038f4c815284f90ef6dfb01a","reason":"Same source body in authored semantic page"},{"oldId":"b-28be5a075f5f70f7bc35c514","targetId":"b-28be5a075f5f70f7bc35c514","page":"reading-block-feb682a46fff4f59a3edf8c6c2b6634a","operation":"move","beforeSHA256":"04381f6370956c58d0864cf84728d04b4c98814c2101236e49217b6099204eb9","afterSHA256":"04381f6370956c58d0864cf84728d04b4c98814c2101236e49217b6099204eb9","reason":"Same source body in authored semantic page"},{"oldId":"b-33ecf2717d6ec2f1c65a612c","targetId":"b-33ecf2717d6ec2f1c65a612c","page":"reading-block-feb682a46fff4f59a3edf8c6c2b6634a","operation":"move","beforeSHA256":"1f7e2a886cdafdc45b2221dbb40ee2276777f66502510e8a5256d0918f722da4","afterSHA256":"1f7e2a886cdafdc45b2221dbb40ee2276777f66502510e8a5256d0918f722da4","reason":"Same source body in authored semantic page"},{"oldId":"b-ad2a48d815a30018d147fd7f","targetId":"b-ad2a48d815a30018d147fd7f","page":"reading-block-feb682a46fff4f59a3edf8c6c2b6634a","operation":"move","beforeSHA256":"a5caae3b3a305961dde31b4b01c5e68de0d7cd19083584e0c621c43c86e4ee50","afterSHA256":"a5caae3b3a305961dde31b4b01c5e68de0d7cd19083584e0c621c43c86e4ee50","reason":"Same source body in authored semantic page"},{"oldId":"b-2220302468a4b733d2d0994b","targetId":"b-2220302468a4b733d2d0994b","page":"reading-block-f722361318df4cc88ac4a6e40e240c62","operation":"move","beforeSHA256":"9bbc7527a59bb35d5da5d51d5f5bc342082de91f94066bfa434ed27e431f230a","afterSHA256":"9bbc7527a59bb35d5da5d51d5f5bc342082de91f94066bfa434ed27e431f230a","reason":"Same source body in authored semantic page"},{"oldId":"b-8f2429aa432ebd112a35b1cd","targetId":"b-8f2429aa432ebd112a35b1cd","page":"reading-block-f722361318df4cc88ac4a6e40e240c62","operation":"move","beforeSHA256":"7c7112f4f7442896ffc602e4bca9c95cb6afe323f539ecace8877e95dc68b391","afterSHA256":"7c7112f4f7442896ffc602e4bca9c95cb6afe323f539ecace8877e95dc68b391","reason":"Same source body in authored semantic page"},{"oldId":"b-699ca7ded28b32cd5af59af8","targetId":"b-699ca7ded28b32cd5af59af8","page":"reading-block-f722361318df4cc88ac4a6e40e240c62","operation":"move","beforeSHA256":"1980bbedc1ac8b91eda997a766661b83aff886976da63067cb74468270935a4f","afterSHA256":"1980bbedc1ac8b91eda997a766661b83aff886976da63067cb74468270935a4f","reason":"Same source body in authored semantic page"},{"oldId":"b-1a8d50541b0edab64844ebed","targetId":"b-1a8d50541b0edab64844ebed","page":"reading-block-f722361318df4cc88ac4a6e40e240c62","operation":"move","beforeSHA256":"1c09502a0af88ecc992c812ee8a92c14817a2fea125b3fe51e4382a22823aad0","afterSHA256":"1c09502a0af88ecc992c812ee8a92c14817a2fea125b3fe51e4382a22823aad0","reason":"Same source body in authored semantic page"},{"oldId":"b-ae7cc54dab5cc7eb78e8d944","targetId":"b-ae7cc54dab5cc7eb78e8d944","page":"reading-block-8dac6d9eb3db46638c112354a06bddcf","operation":"move","beforeSHA256":"af965041dcef6cb3a2ff0e019eb19871b9943eb4b6060addebb62efc49083cbc","afterSHA256":"af965041dcef6cb3a2ff0e019eb19871b9943eb4b6060addebb62efc49083cbc","reason":"Same source body in authored semantic page"},{"oldId":"b-ca5f5b6637cbdc935a1e91da","targetId":"b-ca5f5b6637cbdc935a1e91da","page":"reading-block-8dac6d9eb3db46638c112354a06bddcf","operation":"move","beforeSHA256":"7a474c2c96b479b8d28ae1f487e79bd0e46992077944a4191dfaf054e24406f6","afterSHA256":"7a474c2c96b479b8d28ae1f487e79bd0e46992077944a4191dfaf054e24406f6","reason":"Same source body in authored semantic page"},{"oldId":"b-d82ff0131b250204e0902179","targetId":"b-d82ff0131b250204e0902179","page":"reading-block-8dac6d9eb3db46638c112354a06bddcf","operation":"move","beforeSHA256":"84accb162d9db13672097938238326da35a25bf858d4f58dbe6ac3c1d796539f","afterSHA256":"84accb162d9db13672097938238326da35a25bf858d4f58dbe6ac3c1d796539f","reason":"Same source body in authored semantic page"},{"oldId":"b-41126048d9b4ed3fd0dd8849","targetId":"b-41126048d9b4ed3fd0dd8849","page":"reading-block-8dac6d9eb3db46638c112354a06bddcf","operation":"move","beforeSHA256":"2124e4f903ef5e5b292d389935649c6cb9905e73f45aefd3d46b7687db7f6f73","afterSHA256":"2124e4f903ef5e5b292d389935649c6cb9905e73f45aefd3d46b7687db7f6f73","reason":"Same source body in authored semantic page"},{"oldId":"b-f93b09759206339156858435","targetId":"b-f93b09759206339156858435","page":"reading-block-180ef4ed3ff34c0eaafec7bde6f86a8f","operation":"move","beforeSHA256":"c0f850f1b9199cde720c00a9fb1ab7cf8483b6e0541f5ab456b864fbba5da898","afterSHA256":"c0f850f1b9199cde720c00a9fb1ab7cf8483b6e0541f5ab456b864fbba5da898","reason":"Same source body in authored semantic page"},{"oldId":"b-ee560000129136d0c81458bd","targetId":"b-ee560000129136d0c81458bd","page":"reading-block-180ef4ed3ff34c0eaafec7bde6f86a8f","operation":"move","beforeSHA256":"daf75b849add3482a2db67571a0277844e13e7354863bc30b3a0f2c624b605e0","afterSHA256":"daf75b849add3482a2db67571a0277844e13e7354863bc30b3a0f2c624b605e0","reason":"Same source body in authored semantic page"},{"oldId":"b-2f408c414f07f8cb8f59267c","targetId":"b-2f408c414f07f8cb8f59267c","page":"reading-block-180ef4ed3ff34c0eaafec7bde6f86a8f","operation":"move","beforeSHA256":"735e86e63616ec89089d1b0695dd71e506a94498f2831a357002ca1d5329c8e8","afterSHA256":"735e86e63616ec89089d1b0695dd71e506a94498f2831a357002ca1d5329c8e8","reason":"Same source body in authored semantic page"},{"oldId":"b-b219bf7876387cce53822802","targetId":"b-b219bf7876387cce53822802","page":"reading-block-180ef4ed3ff34c0eaafec7bde6f86a8f","operation":"move","beforeSHA256":"2449c8cac78957471c08dcab9b04ea03d40235c5eb9e43d9e76bcee0536b013a","afterSHA256":"2449c8cac78957471c08dcab9b04ea03d40235c5eb9e43d9e76bcee0536b013a","reason":"Same source body in authored semantic page"},{"oldId":"b-538618d7022943d2972c9204","targetId":"b-538618d7022943d2972c9204","page":"reading-block-180ef4ed3ff34c0eaafec7bde6f86a8f","operation":"move","beforeSHA256":"567ba52bdaed9193421a349652115e6d4ba0c8ab9fa42ca8503aaafcb9978809","afterSHA256":"567ba52bdaed9193421a349652115e6d4ba0c8ab9fa42ca8503aaafcb9978809","reason":"Same source body in authored semantic page"},{"oldId":"b-49959e7974b84516ee9324ab","targetId":"b-49959e7974b84516ee9324ab","page":"reading-block-180ef4ed3ff34c0eaafec7bde6f86a8f","operation":"move","beforeSHA256":"544e4bd80fa6b33bfb0b5569ce89f243d22424485d04f9258ef42efb7da800db","afterSHA256":"544e4bd80fa6b33bfb0b5569ce89f243d22424485d04f9258ef42efb7da800db","reason":"Same source body in authored semantic page"},{"oldId":"b-f956c22e466532cb2d508400","targetId":"b-f956c22e466532cb2d508400","page":"reading-block-180ef4ed3ff34c0eaafec7bde6f86a8f","operation":"move","beforeSHA256":"32eb91a80268f344f0da944c3e9d486d24441f4849e2c469cdfe9cc178fef276","afterSHA256":"32eb91a80268f344f0da944c3e9d486d24441f4849e2c469cdfe9cc178fef276","reason":"Same source body in authored semantic page"},{"oldId":"b-25e53fb7feb3244ce6c03a74","targetId":"b-25e53fb7feb3244ce6c03a74","page":"reading-block-578149ad721b4040b232cef9671cbcc5","operation":"move","beforeSHA256":"aba71ef8e58bbed213f0ffffc692e0d8514b8368bea8334bf5c67642cf4e841a","afterSHA256":"aba71ef8e58bbed213f0ffffc692e0d8514b8368bea8334bf5c67642cf4e841a","reason":"Same source body in authored semantic page"},{"oldId":"b-3c39c2a3502a2d2658090509","targetId":"b-3c39c2a3502a2d2658090509","page":"reading-block-578149ad721b4040b232cef9671cbcc5","operation":"move","beforeSHA256":"99c58e8e25c6ed89b5f65572027a496bdea8ba5c801cc903168e8555d8b76207","afterSHA256":"99c58e8e25c6ed89b5f65572027a496bdea8ba5c801cc903168e8555d8b76207","reason":"Same source body in authored semantic page"},{"oldId":"b-483f2bc6bc5aa2e6fa98f216","targetId":"b-483f2bc6bc5aa2e6fa98f216","page":"reading-block-578149ad721b4040b232cef9671cbcc5","operation":"move","beforeSHA256":"e9fde753df3fb203edecd3b68df41ad9a34a08ef27da8b8736f3ba884a834315","afterSHA256":"e9fde753df3fb203edecd3b68df41ad9a34a08ef27da8b8736f3ba884a834315","reason":"Same source body in authored semantic page"},{"oldId":"b-2c6d89bf84a33e11ddfac3dc","targetId":"b-2c6d89bf84a33e11ddfac3dc","page":"reading-block-578149ad721b4040b232cef9671cbcc5","operation":"move","beforeSHA256":"7fbdc2dda56d2a90a866162003efae02388eea3b262e0adc132351bfcbdff0f2","afterSHA256":"7fbdc2dda56d2a90a866162003efae02388eea3b262e0adc132351bfcbdff0f2","reason":"Same source body in authored semantic page"},{"oldId":"b-d9223e77a9530377cfba71ca","targetId":"b-d9223e77a9530377cfba71ca","page":"reading-block-e77695d0d5f34ec38bdc6aa44ae84259","operation":"move","beforeSHA256":"8371d0fc434b949f635caea1a8c74bc24b1fda385e4ccff126c1808a92b435f7","afterSHA256":"8371d0fc434b949f635caea1a8c74bc24b1fda385e4ccff126c1808a92b435f7","reason":"Same source body in authored semantic page"},{"oldId":"b-34d558d59108a699bcd66c59","targetId":"b-34d558d59108a699bcd66c59","page":"reading-block-e77695d0d5f34ec38bdc6aa44ae84259","operation":"rewrite","beforeSHA256":"2fc6f91008fab0d76670908048e2110ba4a19d0681047b54256b331cde11a63b","afterSHA256":"513d6197f97b2597a739bf65e0110785c4e83dbb8eb4cf2567f5546b251c38d1","reason":"Same source identity with figure semantics or reading context enriched"},{"oldId":"b-7578071b5830354b481d6473","targetId":"b-7578071b5830354b481d6473","page":"reading-block-e77695d0d5f34ec38bdc6aa44ae84259","operation":"move","beforeSHA256":"65e400b93a9365d5b7a2573afc97faabd7f1cdaa67f2fe4a7ad77ccabd1cbed0","afterSHA256":"c892ba0e5f7f35362c207da2fa0665d67f56875b6f4c15d31223e1e4b37112c6","reason":"Same source body in authored semantic page"},{"oldId":"b-7c1cb6221af958d94fff660c","targetId":"b-7c1cb6221af958d94fff660c","page":"reading-block-e77695d0d5f34ec38bdc6aa44ae84259","operation":"move","beforeSHA256":"0476b99130c8376e54cfde68d801a632a889e1adbd87262966bbbafef5f85893","afterSHA256":"0476b99130c8376e54cfde68d801a632a889e1adbd87262966bbbafef5f85893","reason":"Same source body in authored semantic page"},{"oldId":"b-02ded4d09eed49a1fcc217cd","targetId":"b-02ded4d09eed49a1fcc217cd","page":"reading-block-e77695d0d5f34ec38bdc6aa44ae84259","operation":"move","beforeSHA256":"af4494279e05ea04aa0d7f98d8361dd9d73efd95ac156634ae5906de8c9f9242","afterSHA256":"af4494279e05ea04aa0d7f98d8361dd9d73efd95ac156634ae5906de8c9f9242","reason":"Same source body in authored semantic page"},{"oldId":"b-6243882682dd7a3fb92425d7","targetId":"b-6243882682dd7a3fb92425d7","page":"reading-block-e77695d0d5f34ec38bdc6aa44ae84259","operation":"move","beforeSHA256":"26a2be84bdf9ca074de72cff79fd8a2f3fbf225565cce2862718a3935e71490f","afterSHA256":"26a2be84bdf9ca074de72cff79fd8a2f3fbf225565cce2862718a3935e71490f","reason":"Same source body in authored semantic page"},{"oldId":"b-873fed426386907bdb6cbc7b","targetId":"b-873fed426386907bdb6cbc7b","page":"reading-block-e77695d0d5f34ec38bdc6aa44ae84259","operation":"move","beforeSHA256":"03edc0dfe9e798f3d0d9372ac34bb8099030862527da3466ee0165be244adba0","afterSHA256":"03edc0dfe9e798f3d0d9372ac34bb8099030862527da3466ee0165be244adba0","reason":"Same source body in authored semantic page"},{"oldId":"b-dc222cda408d93a453c6fba3","targetId":"b-dc222cda408d93a453c6fba3","page":"reading-block-2fcb1adb8ab540d28b9a54916b603faa","operation":"move","beforeSHA256":"305270e1cc8b272d34fd992eb01092dda96c80bc79d84533a07946dee429fcae","afterSHA256":"305270e1cc8b272d34fd992eb01092dda96c80bc79d84533a07946dee429fcae","reason":"Same source body in authored semantic page"},{"oldId":"b-ad0165689ec79daee9903a05","targetId":"b-ad0165689ec79daee9903a05","page":"reading-block-2fcb1adb8ab540d28b9a54916b603faa","operation":"move","beforeSHA256":"3027cfe01afa246928548f59552923b2200411e1c9e46a38fc56946d65282b9e","afterSHA256":"3027cfe01afa246928548f59552923b2200411e1c9e46a38fc56946d65282b9e","reason":"Same source body in authored semantic page"},{"oldId":"b-061003368a9e540eb1a5047a","targetId":"b-061003368a9e540eb1a5047a","page":"reading-block-2fcb1adb8ab540d28b9a54916b603faa","operation":"move","beforeSHA256":"171afd7c591fd1c5fd94a608db822d9ad68bc621046fed6496a63ee4bbd217ac","afterSHA256":"171afd7c591fd1c5fd94a608db822d9ad68bc621046fed6496a63ee4bbd217ac","reason":"Same source body in authored semantic page"},{"oldId":"block-feb682a46fff4f59a3edf8c6c2b6634a--从概率到字典更新","targetId":"b-7ba49bcdc8c4a80deefd91fc","operation":"retain-source-identity"},{"oldId":"block-f722361318df4cc88ac4a6e40e240c62--运行准备与结果身份","targetId":"b-2220302468a4b733d2d0994b","operation":"retain-source-identity"},{"oldId":"block-8dac6d9eb3db46638c112354a06bddcf--图像两视图与同源正例","targetId":"b-ae7cc54dab5cc7eb78e8d944","operation":"retain-source-identity"},{"oldId":"block-180ef4ed3ff34c0eaafec7bde6f86a8f--为什么队列需要缓慢变化的键编码器","targetId":"b-f93b09759206339156858435","operation":"retain-source-identity"},{"oldId":"block-578149ad721b4040b232cef9671cbcc5--冻结参数以后才使用标签","targetId":"b-25e53fb7feb3244ce6c03a74","operation":"retain-source-identity"},{"oldId":"block-e77695d0d5f34ec38bdc6aa44ae84259--已运行结果字典正确不代表语义读出必然变好","targetId":"b-d9223e77a9530377cfba71ca","operation":"retain-source-identity"},{"oldId":"block-2fcb1adb8ab540d28b9a54916b603faa--接回前后知识","targetId":"b-dc222cda408d93a453c6fba3","operation":"retain-source-identity"}],"blocks":[{"id":"b-95177c6372b7d0b9d8030f80","type":"h1","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-95177c6372b7d0b9d8030f80","content":"# LAB 07 · MoCo：历史 key、队列与两种更新","sha256":"f533870374bd12fc328aea3496a5470b61fd6166cda00f6050d97073354a1c6f","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-opening","title":"LAB 07 · MoCo：历史 key、队列与两种更新","number":1},"sectionTitle":"LAB 07 · MoCo：历史 key、队列与两种更新","currentQuestion":"LAB 07 · MoCo：历史 key、队列与两种更新","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-5f885ae5d8cd6312618dde1d","prerequisites":[{"id":"b-5f885ae5d8cd6312618dde1d","url":"#b-5f885ae5d8cd6312618dde1d","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-5f885ae5d8cd6312618dde1d","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-5f885ae5d8cd6312618dde1d","content":"按问题继续","sha256":"e91f24e4e4ca40e2099a0d81d30db6568f4bf2074b499eeee6e3959617bd97ac","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-opening","title":"LAB 07 · MoCo：历史 key、队列与两种更新","number":1},"sectionTitle":"LAB 07 · MoCo：历史 key、队列与两种更新","currentQuestion":"LAB 07 · MoCo：历史 key、队列与两种更新","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-95177c6372b7d0b9d8030f80","nextBlock":"b-a1555d6d7376fd798eece338","prerequisites":[{"id":"b-95177c6372b7d0b9d8030f80","url":"#b-95177c6372b7d0b9d8030f80","role":"section-title"}],"relatedBlocks":[]},{"id":"b-a1555d6d7376fd798eece338","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-a1555d6d7376fd798eece338","content":"真实FIFO键、EMA、梯度更新及低于随机基线的保留结果","sha256":"2a269d38480454fbc554b17f926927738416555e36045ec5fe468ba056454f5d","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-opening","title":"LAB 07 · MoCo：历史 key、队列与两种更新","number":1},"sectionTitle":"LAB 07 · MoCo：历史 key、队列与两种更新","currentQuestion":"LAB 07 · MoCo：历史 key、队列与两种更新","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-5f885ae5d8cd6312618dde1d","nextBlock":"b-fe253718aad5ae4a27db4573","prerequisites":[{"id":"b-95177c6372b7d0b9d8030f80","url":"#b-95177c6372b7d0b9d8030f80","role":"section-title"},{"id":"b-5f885ae5d8cd6312618dde1d","url":"#b-5f885ae5d8cd6312618dde1d","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-fe253718aad5ae4a27db4573","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-fe253718aad5ae4a27db4573","content":"可先阅读已有结果，再决定是否运行。重算时请核对各节记录的数据、参数、环境与日期。","sha256":"f22152fd55dcdb0090b5653d37145694fd19388d31e10226549464fe8b483578","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-opening","title":"LAB 07 · MoCo：历史 key、队列与两种更新","number":1},"sectionTitle":"LAB 07 · MoCo：历史 key、队列与两种更新","currentQuestion":"LAB 07 · MoCo：历史 key、队列与两种更新","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-a1555d6d7376fd798eece338","nextBlock":"b-dfa183f2f17139a98fbc9403","prerequisites":[{"id":"b-95177c6372b7d0b9d8030f80","url":"#b-95177c6372b7d0b9d8030f80","role":"section-title"},{"id":"b-5f885ae5d8cd6312618dde1d","url":"#b-5f885ae5d8cd6312618dde1d","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-dfa183f2f17139a98fbc9403","type":"p","scope":"block-bda40b912db744b8a81368d331171baa","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-dfa183f2f17139a98fbc9403","content":"**学习路径：** [视图、投影头与历史字典](/course/study/contrastive-views.html)","sha256":"9412c334ba69cecafc029ab0c22814d9df928a6c4d41cd69390e96b2b55ccfe2","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-opening","title":"LAB 07 · MoCo：历史 key、队列与两种更新","number":1},"sectionTitle":"LAB 07 · MoCo：历史 key、队列与两种更新","currentQuestion":"LAB 07 · MoCo：历史 key、队列与两种更新","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-fe253718aad5ae4a27db4573","nextBlock":"b-f4b6e9ee3477c555bdf909dc","prerequisites":[{"id":"b-95177c6372b7d0b9d8030f80","url":"#b-95177c6372b7d0b9d8030f80","role":"section-title"},{"id":"b-5f885ae5d8cd6312618dde1d","url":"#b-5f885ae5d8cd6312618dde1d","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-f4b6e9ee3477c555bdf909dc","type":"p","scope":"block-bda40b912db744b8a81368d331171baa","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-f4b6e9ee3477c555bdf909dc","content":"**本步拿到的旧key来自哪里，又怎样与当前query比较？**","sha256":"5edd04072887b60b0353233c5738c08cf1a4b4fe25399e1278787b770525f49d","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-opening","title":"LAB 07 · MoCo：历史 key、队列与两种更新","number":1},"sectionTitle":"LAB 07 · MoCo：历史 key、队列与两种更新","currentQuestion":"LAB 07 · MoCo：历史 key、队列与两种更新","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-dfa183f2f17139a98fbc9403","nextBlock":"b-9ba6645ecbcc3cb28854cc90","prerequisites":[{"id":"b-95177c6372b7d0b9d8030f80","url":"#b-95177c6372b7d0b9d8030f80","role":"section-title"},{"id":"b-5f885ae5d8cd6312618dde1d","url":"#b-5f885ae5d8cd6312618dde1d","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-9ba6645ecbcc3cb28854cc90","type":"p","scope":"block-bda40b912db744b8a81368d331171baa","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-9ba6645ecbcc3cb28854cc90","content":"先手推容量4的FIFO与一次EMA，再在`train_moco`找到query、key、旧队列、loss和入队位置。读前5步trace，指出首次淘汰的是哪批特征；旧向量不会因EMA自动重算。","sha256":"2cb97051246f2b97126b29cb1d2d3d765523949b20f9cba75b71af14e7a1fab4","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-opening","title":"LAB 07 · MoCo：历史 key、队列与两种更新","number":1},"sectionTitle":"LAB 07 · MoCo：历史 key、队列与两种更新","currentQuestion":"LAB 07 · MoCo：历史 key、队列与两种更新","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-f4b6e9ee3477c555bdf909dc","nextBlock":"b-2d7b72b033d58162c0153ec7","prerequisites":[{"id":"b-95177c6372b7d0b9d8030f80","url":"#b-95177c6372b7d0b9d8030f80","role":"section-title"},{"id":"b-5f885ae5d8cd6312618dde1d","url":"#b-5f885ae5d8cd6312618dde1d","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-2d7b72b033d58162c0153ec7","type":"p","scope":"block-bda40b912db744b8a81368d331171baa","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-2d7b72b033d58162c0153ec7","content":"本册用真实图像和反向传播，保存结果中损失下降，但形状读出低于随机基线。你的产出是一次更新的有向流程加一句评价：哪项证据证明机制接入了训练，哪项证据回答下游用途。","sha256":"e2bc11cdf7f6eac42415a252ec4d27c074ce0a5a9932a7d67c1ebb7cc8ec0240","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-opening","title":"LAB 07 · MoCo：历史 key、队列与两种更新","number":1},"sectionTitle":"LAB 07 · MoCo：历史 key、队列与两种更新","currentQuestion":"LAB 07 · MoCo：历史 key、队列与两种更新","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-9ba6645ecbcc3cb28854cc90","nextBlock":"b-3a23494283533813e4e18cbd","prerequisites":[{"id":"b-95177c6372b7d0b9d8030f80","url":"#b-95177c6372b7d0b9d8030f80","role":"section-title"},{"id":"b-5f885ae5d8cd6312618dde1d","url":"#b-5f885ae5d8cd6312618dde1d","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-3a23494283533813e4e18cbd","type":"p","scope":"block-bda40b912db744b8a81368d331171baa","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-3a23494283533813e4e18cbd","content":"[P17本页说明](/course/pages/l3-r2-p17.html)与[论文/代码时序对照](/course/blocks/moco-one-step-paper-and-code.html)区分主讲Algorithm 1和本实现先EMA再编码key的顺序。本册与[LAB 06](https://deepnote.com/project/38755e4e-23f6-4f5f-8c68-8a2e4114b1c1/notebook/7c4f531113d7473abc174e2e014e1340)共享图像来源，分别回答字典组织和增强取舍；不要求把两个训练都重跑。","sha256":"1a29ec6a184afc59d6d6ef74f67ea98a3fa9cd42f5887364fa7c59c2e470d464","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-opening","title":"LAB 07 · MoCo：历史 key、队列与两种更新","number":1},"sectionTitle":"LAB 07 · MoCo：历史 key、队列与两种更新","currentQuestion":"LAB 07 · MoCo：历史 key、队列与两种更新","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-2d7b72b033d58162c0153ec7","nextBlock":null,"prerequisites":[{"id":"b-95177c6372b7d0b9d8030f80","url":"#b-95177c6372b7d0b9d8030f80","role":"section-title"},{"id":"b-5f885ae5d8cd6312618dde1d","url":"#b-5f885ae5d8cd6312618dde1d","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-7ba49bcdc8c4a80deefd91fc","type":"h2","scope":"block-feb682a46fff4f59a3edf8c6c2b6634a","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-7ba49bcdc8c4a80deefd91fc","content":"## 从概率到字典更新","sha256":"ad3252a44d79e4087efe23d5bea992c60eedf5a6038f4c815284f90ef6dfb01a","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-feb682a46fff4f59a3edf8c6c2b6634a","title":"从概率到字典更新","number":2},"sectionTitle":"从概率到字典更新","currentQuestion":"从概率到字典更新","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-28be5a075f5f70f7bc35c514","prerequisites":[{"id":"b-28be5a075f5f70f7bc35c514","url":"#b-28be5a075f5f70f7bc35c514","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-28be5a075f5f70f7bc35c514","type":"p","scope":"block-feb682a46fff4f59a3edf8c6c2b6634a","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-28be5a075f5f70f7bc35c514","content":"查询 q=(1,0)，归一化后的第一个键最接近它。温度0.1时，其 softmax 概率约0.999939；温度0.5时约0.859767。温度改变的是已有相似度差距在概率中的放大，不会改变此处的键排序。","sha256":"04381f6370956c58d0864cf84728d04b4c98814c2101236e49217b6099204eb9","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-feb682a46fff4f59a3edf8c6c2b6634a","title":"从概率到字典更新","number":2},"sectionTitle":"从概率到字典更新","currentQuestion":"从概率到字典更新","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-7ba49bcdc8c4a80deefd91fc","nextBlock":"b-33ecf2717d6ec2f1c65a612c","prerequisites":[{"id":"b-7ba49bcdc8c4a80deefd91fc","url":"#b-7ba49bcdc8c4a80deefd91fc","role":"section-title"}],"relatedBlocks":[]},{"id":"b-33ecf2717d6ec2f1c65a612c","type":"p","scope":"block-feb682a46fff4f59a3edf8c6c2b6634a","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-33ecf2717d6ec2f1c65a612c","content":"FIFO 容量4，从 a,b,c,d 入队 e,f 后得到 c,d,e,f。键参数 θk=(0,2)、查询参数 θq=(2,4)，m=0.9 的一次 EMA 是 (0.2,2.2)。EMA 不是把两个模型的输出向量平均，也不是对键编码器额外反向传播。","sha256":"1f7e2a886cdafdc45b2221dbb40ee2276777f66502510e8a5256d0918f722da4","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-feb682a46fff4f59a3edf8c6c2b6634a","title":"从概率到字典更新","number":2},"sectionTitle":"从概率到字典更新","currentQuestion":"从概率到字典更新","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-28be5a075f5f70f7bc35c514","nextBlock":"b-ad2a48d815a30018d147fd7f","prerequisites":[{"id":"b-7ba49bcdc8c4a80deefd91fc","url":"#b-7ba49bcdc8c4a80deefd91fc","role":"section-title"},{"id":"b-28be5a075f5f70f7bc35c514","url":"#b-28be5a075f5f70f7bc35c514","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-ad2a48d815a30018d147fd7f","type":"pre","scope":"block-602b61f9e3954f0e93f1f4bed38e4bd4","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-ad2a48d815a30018d147fd7f","content":"```\nimport os, tempfile\nLAB_WORKDIR = tempfile.mkdtemp(prefix='lecture03-')\nos.chdir(LAB_WORKDIR)\nprint('Ephemeral experiment workspace ready')\nimport numpy as np\nq=np.array([1.,0.]); keys=np.array([[.8,.2],[0.,1.],[-1.,0.]])\nkeys=keys/np.linalg.norm(keys,axis=1,keepdims=True)\nfor T in [.1,.5]:\n s=keys@q/T; p=np.exp(s-s.max()); p/=p.sum(); print('T',T,'p',p.round(4))\nqueue=['a','b','c','d']; queue=(queue+['e','f'])[-4:]\ntk=np.array([0.,2.]); tq=np.array([2.,4.]); print('queue',queue,'EMA',(0.9*tk+0.1*tq))\n```","sha256":"a5caae3b3a305961dde31b4b01c5e68de0d7cd19083584e0c621c43c86e4ee50","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-feb682a46fff4f59a3edf8c6c2b6634a","title":"从概率到字典更新","number":2},"sectionTitle":"从概率到字典更新","currentQuestion":"从概率到字典更新","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-33ecf2717d6ec2f1c65a612c","nextBlock":null,"prerequisites":[{"id":"b-7ba49bcdc8c4a80deefd91fc","url":"#b-7ba49bcdc8c4a80deefd91fc","role":"section-title"},{"id":"b-28be5a075f5f70f7bc35c514","url":"#b-28be5a075f5f70f7bc35c514","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-2220302468a4b733d2d0994b","type":"h2","scope":"block-f722361318df4cc88ac4a6e40e240c62","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-2220302468a4b733d2d0994b","content":"## 运行准备与结果身份","sha256":"9bbc7527a59bb35d5da5d51d5f5bc342082de91f94066bfa434ed27e431f230a","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-f722361318df4cc88ac4a6e40e240c62","title":"运行准备与结果身份","number":3},"sectionTitle":"运行准备与结果身份","currentQuestion":"运行准备与结果身份","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-8f2429aa432ebd112a35b1cd","prerequisites":[{"id":"b-8f2429aa432ebd112a35b1cd","url":"#b-8f2429aa432ebd112a35b1cd","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-8f2429aa432ebd112a35b1cd","type":"p","scope":"block-f722361318df4cc88ac4a6e40e240c62","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-8f2429aa432ebd112a35b1cd","content":"本册包含全部生成数据、模型、损失、优化与评价代码。按顺序在**新内核**运行；不读另一册的变量，不需要下载图像或预训练权重。依赖 Python 3.12、NumPy、matplotlib、scikit-learn 和 CPU PyTorch。本次实际版本见输出 JSON；若环境缺少 PyTorch，先运行 `python -m pip install torch==2.14.0 --index-url https://download.pytorch.org/whl/cpu`，再启动内核。NumPy、matplotlib、scikit-learn 可用 `python -m pip install numpy matplotlib scikit-learn` 安装。","sha256":"7c7112f4f7442896ffc602e4bca9c95cb6afe323f539ecace8877e95dc68b391","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-f722361318df4cc88ac4a6e40e240c62","title":"运行准备与结果身份","number":3},"sectionTitle":"运行准备与结果身份","currentQuestion":"运行准备与结果身份","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-2220302468a4b733d2d0994b","nextBlock":"b-699ca7ded28b32cd5af59af8","prerequisites":[{"id":"b-2220302468a4b733d2d0994b","url":"#b-2220302468a4b733d2d0994b","role":"section-title"}],"relatedBlocks":[]},{"id":"b-699ca7ded28b32cd5af59af8","type":"p","scope":"block-f722361318df4cc88ac4a6e40e240c62","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-699ca7ded28b32cd5af59af8","content":"下方表格和静态图来自 **2026-09-22 本地 CPU 完整训练**；它们不是原来的数值热身输出，也不代表 Deepnote 云端已重跑。运行本册会另建 `lab07-notebook-output`，保存 inputs.npz、config.json、权重、图与 results.json。CPU 时间受机器负载影响；本次每册约 10–25 秒，不能当作跨设备速度基准。单种子、小任务的结果用来检验路径和对照，不作方法排名。","sha256":"1980bbedc1ac8b91eda997a766661b83aff886976da63067cb74468270935a4f","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-f722361318df4cc88ac4a6e40e240c62","title":"运行准备与结果身份","number":3},"sectionTitle":"运行准备与结果身份","currentQuestion":"运行准备与结果身份","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-8f2429aa432ebd112a35b1cd","nextBlock":"b-1a8d50541b0edab64844ebed","prerequisites":[{"id":"b-2220302468a4b733d2d0994b","url":"#b-2220302468a4b733d2d0994b","role":"section-title"},{"id":"b-8f2429aa432ebd112a35b1cd","url":"#b-8f2429aa432ebd112a35b1cd","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-1a8d50541b0edab64844ebed","type":"pre","scope":"block-afef202950ec4c049f8eeff5abc1af7e","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-1a8d50541b0edab64844ebed","content":"```\n\"\"\"CPU image contrastive experiment. No class/color label enters pretraining.\"\"\"\nfrom pathlib import Path\nimport copy, hashlib, json, os, platform, time\nimport numpy as np\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.pipeline import make_pipeline\nfrom sklearn.preprocessing import StandardScaler\nimport matplotlib\nmatplotlib.use('Agg')\nimport matplotlib.pyplot as plt\n\ntorch.set_num_threads(2)\nSEED=20260922\n\nSOURCE_SHA256='09bbb32bb5502db3535d89efec2045ffcd85c249b49f622390f12875060845d4'\nprint(\"source\",SOURCE_SHA256,\"torch\",torch.__version__)\n```","sha256":"1c09502a0af88ecc992c812ee8a92c14817a2fea125b3fe51e4382a22823aad0","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-f722361318df4cc88ac4a6e40e240c62","title":"运行准备与结果身份","number":3},"sectionTitle":"运行准备与结果身份","currentQuestion":"运行准备与结果身份","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-699ca7ded28b32cd5af59af8","nextBlock":null,"prerequisites":[{"id":"b-2220302468a4b733d2d0994b","url":"#b-2220302468a4b733d2d0994b","role":"section-title"},{"id":"b-8f2429aa432ebd112a35b1cd","url":"#b-8f2429aa432ebd112a35b1cd","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-ae7cc54dab5cc7eb78e8d944","type":"h2","scope":"block-8dac6d9eb3db46638c112354a06bddcf","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-ae7cc54dab5cc7eb78e8d944","content":"## 图像、两视图与同源正例","sha256":"af965041dcef6cb3a2ff0e019eb19871b9943eb4b6060addebb62efc49083cbc","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-8dac6d9eb3db46638c112354a06bddcf","title":"图像、两视图与同源正例","number":4},"sectionTitle":"图像、两视图与同源正例","currentQuestion":"图像、两视图与同源正例","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-ca5f5b6637cbdc935a1e91da","prerequisites":[{"id":"b-ca5f5b6637cbdc935a1e91da","url":"#b-ca5f5b6637cbdc935a1e91da","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-ca5f5b6637cbdc935a1e91da","type":"p","scope":"block-8dac6d9eb3db46638c112354a06bddcf","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-ca5f5b6637cbdc935a1e91da","content":"每本从种子独立生成相同的600/240源图切分。训练的每批60张图各产生两个视图；颜色保留，几何、亮度和噪声变化。源图索引相同的两视图是正例，而不是“类别相同就是正例”。生成标签只用于后面的冻结读出。","sha256":"7a474c2c96b479b8d28ae1f487e79bd0e46992077944a4191dfaf054e24406f6","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-8dac6d9eb3db46638c112354a06bddcf","title":"图像、两视图与同源正例","number":4},"sectionTitle":"图像、两视图与同源正例","currentQuestion":"图像、两视图与同源正例","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-ae7cc54dab5cc7eb78e8d944","nextBlock":"b-d82ff0131b250204e0902179","prerequisites":[{"id":"b-ae7cc54dab5cc7eb78e8d944","url":"#b-ae7cc54dab5cc7eb78e8d944","role":"section-title"}],"relatedBlocks":[]},{"id":"b-d82ff0131b250204e0902179","type":"p","scope":"block-8dac6d9eb3db46638c112354a06bddcf","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-d82ff0131b250204e0902179","content":"先读 `info_nce` 的正例索引 `(i+N) mod 2N`，确认它把前N个视图和后N个视图一一配对；对角线屏蔽自己。然后跟随 `zero_grad → backward → step`，观察编码器第一层实际发生非零变化。","sha256":"84accb162d9db13672097938238326da35a25bf858d4f58dbe6ac3c1d796539f","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-8dac6d9eb3db46638c112354a06bddcf","title":"图像、两视图与同源正例","number":4},"sectionTitle":"图像、两视图与同源正例","currentQuestion":"图像、两视图与同源正例","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-ca5f5b6637cbdc935a1e91da","nextBlock":"b-41126048d9b4ed3fd0dd8849","prerequisites":[{"id":"b-ae7cc54dab5cc7eb78e8d944","url":"#b-ae7cc54dab5cc7eb78e8d944","role":"section-title"},{"id":"b-ca5f5b6637cbdc935a1e91da","url":"#b-ca5f5b6637cbdc935a1e91da","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-41126048d9b4ed3fd0dd8849","type":"pre","scope":"block-b4c113869cc04e4a9753038a5858a879","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-41126048d9b4ed3fd0dd8849","content":"```\ndef make_data(seed=SEED):\n    rng=np.random.default_rng(seed)\n    yy,xx=np.mgrid[:16,:16]\n    images=[]; shape=[]; color=[]; split=[]\n    # Stratified before view construction. One independently generated source per ID.\n    for s in range(3):\n        for c in range(2):\n            for i in range(140):\n                cx,cy=rng.uniform(6,10,2); r=rng.uniform(3.0,4.7)\n                dx,dy=xx-cx,yy-cy\n                if s==0: mask=dx*dx+dy*dy<=r*r\n                elif s==1: mask=np.maximum(abs(dx),abs(dy))<=r\n                else: mask=abs(dx)+abs(dy)<=r*1.35\n                # Red and blue have equal channel sums: grayscale erases hue by design.\n                rgb=np.array([.9,.15,.15] if c==0 else [.15,.15,.9])\n                bg=rng.uniform(.015,.075,(16,16,1))\n                im=np.where(mask[...,None],rgb*rng.uniform(.8,1),bg)\n                im+=rng.normal(0,.012,im.shape)\n                images.append(np.clip(im,0,1).transpose(2,0,1))\n                shape.append(s); color.append(c); split.append(0 if i<100 else 1)\n    x=np.asarray(images,dtype='float32'); split=np.asarray(split)\n    ids=np.arange(len(x)); train=ids[split==0]; test=ids[split==1]\n    assert set(train).isdisjoint(test)\n    assert len({hashlib.sha256(v.tobytes()).hexdigest() for v in x})==len(x)\n    return torch.from_numpy(x),np.asarray(shape),np.asarray(color),train,test\n\ndef views(x, destroy_color=False):\n    # Independent transforms of each source; no labels/scene attributes are read.\n    a=x.clone(); n=len(a)\n    shifts=torch.randint(-1,2,(n,2))\n    for i,(dy,dx) in enumerate(shifts.tolist()):\n        a[i]=torch.roll(a[i],(dy,dx),(-2,-1))\n    a=a*torch.empty(n,1,1,1).uniform_(.8,1.2)\n    a=a+torch.randn_like(a)*.025\n    # The ablation changes only the hue swap. Every run consumes this RNG draw.\n    swap=torch.rand(n)<.5\n    if destroy_color: a[swap]=a[swap][:,[2,1,0]]\n    return a.clamp(0,1)\n\nclass ImageEncoder(nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.conv=nn.Sequential(nn.Conv2d(3,12,3,padding=1),nn.ReLU(),\n          nn.Conv2d(12,24,3,stride=2,padding=1),nn.ReLU(),\n          nn.Conv2d(24,24,3,stride=2,padding=1),nn.ReLU())\n        self.readout=nn.Linear(24*4*4,48)\n    def forward(self,x): return self.readout(self.conv(x).flatten(1))\n\nclass ContrastiveModel(nn.Module):\n    def __init__(self):\n        super().__init__(); self.encoder=ImageEncoder()\n        self.projector=nn.Sequential(nn.Linear(48,48),nn.ReLU(),nn.Linear(48,24))\n    def forward(self,x):\n        h=self.encoder(x); z=self.projector(h)\n        return h,z\n\ndef info_nce(z1,z2,tau=.2):\n    z=F.normalize(torch.cat([z1,z2]),dim=1); n=len(z1)\n    logits=z@z.T/tau\n    logits=logits.masked_fill(torch.eye(2*n,dtype=torch.bool),-1e9)\n    positive=(torch.arange(2*n)+n)%(2*n)\n    return F.cross_entropy(logits,positive)\n\ndef train_simclr(initial,x,train,destroy_color,epochs=40):\n    # Equal initialization, minibatch ordering, optimizer, steps, and RNG streams.\n    torch.manual_seed(SEED+1)\n    model=copy.deepcopy(initial); opt=torch.optim.Adam(model.parameters(),lr=.002)\n    history=[]; before=next(model.encoder.parameters()).detach().clone()\n    for epoch in range(epochs):\n        model.train(); losses=[]\n        for ids in torch.as_tensor(train)[torch.randperm(len(train))].split(60):\n            batch=x[ids]; a,b=views(batch,destroy_color),views(batch,destroy_color)\n            loss=info_nce(model(a)[1],model(b)[1])\n            opt.zero_grad(); loss.backward(); opt.step(); losses.append(float(loss.detach()))\n        history.append(float(np.mean(losses)))\n    delta=float((next(model.encoder.parameters()).detach()-before).norm())\n    assert delta>0\n    return model,history,delta\n```","sha256":"2124e4f903ef5e5b292d389935649c6cb9905e73f45aefd3d46b7687db7f6f73","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-8dac6d9eb3db46638c112354a06bddcf","title":"图像、两视图与同源正例","number":4},"sectionTitle":"图像、两视图与同源正例","currentQuestion":"图像、两视图与同源正例","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-d82ff0131b250204e0902179","nextBlock":null,"prerequisites":[{"id":"b-ae7cc54dab5cc7eb78e8d944","url":"#b-ae7cc54dab5cc7eb78e8d944","role":"section-title"},{"id":"b-ca5f5b6637cbdc935a1e91da","url":"#b-ca5f5b6637cbdc935a1e91da","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-f93b09759206339156858435","type":"h2","scope":"block-180ef4ed3ff34c0eaafec7bde6f86a8f","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-f93b09759206339156858435","content":"## 为什么队列需要缓慢变化的键编码器？","sha256":"c0f850f1b9199cde720c00a9fb1ab7cf8483b6e0541f5ab456b864fbba5da898","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-180ef4ed3ff34c0eaafec7bde6f86a8f","title":"为什么队列需要缓慢变化的键编码器？","number":5},"sectionTitle":"为什么队列需要缓慢变化的键编码器？","currentQuestion":"为什么队列需要缓慢变化的键编码器？","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-ee560000129136d0c81458bd","prerequisites":[{"id":"b-ee560000129136d0c81458bd","url":"#b-ee560000129136d0c81458bd","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-ee560000129136d0c81458bd","type":"p","scope":"block-180ef4ed3ff34c0eaafec7bde6f86a8f","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-ee560000129136d0c81458bd","content":"批内方法的键都由当前参数生成。FIFO 让字典容量与当前批大小分开，但旧键来自较早的参数；若表示空间每步剧烈旋转，今天的查询与昨天的键就难以比较。MoCo 用","sha256":"daf75b849add3482a2db67571a0277844e13e7354863bc30b3a0f2c624b605e0","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-180ef4ed3ff34c0eaafec7bde6f86a8f","title":"为什么队列需要缓慢变化的键编码器？","number":5},"sectionTitle":"为什么队列需要缓慢变化的键编码器？","currentQuestion":"为什么队列需要缓慢变化的键编码器？","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-f93b09759206339156858435","nextBlock":"b-2f408c414f07f8cb8f59267c","prerequisites":[{"id":"b-f93b09759206339156858435","url":"#b-f93b09759206339156858435","role":"section-title"}],"relatedBlocks":[]},{"id":"b-2f408c414f07f8cb8f59267c","type":"p","scope":"block-180ef4ed3ff34c0eaafec7bde6f86a8f","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-2f408c414f07f8cb8f59267c","content":"$\\theta_k\\leftarrow m\\theta_k+(1-m)\\theta_q$","sha256":"735e86e63616ec89089d1b0695dd71e506a94498f2831a357002ca1d5329c8e8","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-180ef4ed3ff34c0eaafec7bde6f86a8f","title":"为什么队列需要缓慢变化的键编码器？","number":5},"sectionTitle":"为什么队列需要缓慢变化的键编码器？","currentQuestion":"为什么队列需要缓慢变化的键编码器？","sourceSlides":[],"knowledgeBlock":null,"formulas":[{"latex":"\\theta_k\\leftarrow m\\theta_k+(1-m)\\theta_q","definitionContext":"为什么队列需要缓慢变化的键编码器？"}],"previousBlock":"b-ee560000129136d0c81458bd","nextBlock":"b-b219bf7876387cce53822802","prerequisites":[{"id":"b-f93b09759206339156858435","url":"#b-f93b09759206339156858435","role":"section-title"},{"id":"b-ee560000129136d0c81458bd","url":"#b-ee560000129136d0c81458bd","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-b219bf7876387cce53822802","type":"p","scope":"block-180ef4ed3ff34c0eaafec7bde6f86a8f","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-b219bf7876387cce53822802","content":"减缓键编码器变化。下面的教学实现 m=0.95，队列容量240、批大小60；query 和 key 初始权重相同。每步先对 key 做 EMA，再在 `no_grad` 中编码第二视图；查询梯度只更新 query；当次键以 detach 状态入队，最旧的键出队。第一次队列为空，采用当前批 detached keys 热身；后续正例放第0列，队列是负例列。","sha256":"2449c8cac78957471c08dcab9b04ea03d40235c5eb9e43d9e76bcee0536b013a","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-180ef4ed3ff34c0eaafec7bde6f86a8f","title":"为什么队列需要缓慢变化的键编码器？","number":5},"sectionTitle":"为什么队列需要缓慢变化的键编码器？","currentQuestion":"为什么队列需要缓慢变化的键编码器？","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-2f408c414f07f8cb8f59267c","nextBlock":"b-538618d7022943d2972c9204","prerequisites":[{"id":"b-f93b09759206339156858435","url":"#b-f93b09759206339156858435","role":"section-title"},{"id":"b-ee560000129136d0c81458bd","url":"#b-ee560000129136d0c81458bd","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-538618d7022943d2972c9204","type":"p","scope":"block-180ef4ed3ff34c0eaafec7bde6f86a8f","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-538618d7022943d2972c9204","content":"为避免一个源图跨 epoch 再出现时被当作自己的负例，队列同时保存源图 ID，并屏蔽同源旧键。**同类别的不同源图仍可能是假负例**；这正是实例目标与语义类别不同的地方。此实现没有BatchNorm，因此没有多设备BN信息泄漏处理；论文工程细节不能据此宣称已全部实现。","sha256":"567ba52bdaed9193421a349652115e6d4ba0c8ab9fa42ca8503aaafcb9978809","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-180ef4ed3ff34c0eaafec7bde6f86a8f","title":"为什么队列需要缓慢变化的键编码器？","number":5},"sectionTitle":"为什么队列需要缓慢变化的键编码器？","currentQuestion":"为什么队列需要缓慢变化的键编码器？","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-b219bf7876387cce53822802","nextBlock":"b-49959e7974b84516ee9324ab","prerequisites":[{"id":"b-f93b09759206339156858435","url":"#b-f93b09759206339156858435","role":"section-title"},{"id":"b-ee560000129136d0c81458bd","url":"#b-ee560000129136d0c81458bd","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-49959e7974b84516ee9324ab","type":"p","scope":"block-180ef4ed3ff34c0eaafec7bde6f86a8f","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-49959e7974b84516ee9324ab","content":"主讲按原论文Algorithm 1展示先计算本批key、更新query、再EMA的流程；下面代码在本批key前做EMA。二者时序应分别按各自实现追踪，详见 [把一次学习走通，也读清实现顺序](/course/blocks/moco-one-step-paper-and-code.html)。这不是把旧队列重新编码。","sha256":"544e4bd80fa6b33bfb0b5569ce89f243d22424485d04f9258ef42efb7da800db","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-180ef4ed3ff34c0eaafec7bde6f86a8f","title":"为什么队列需要缓慢变化的键编码器？","number":5},"sectionTitle":"为什么队列需要缓慢变化的键编码器？","currentQuestion":"为什么队列需要缓慢变化的键编码器？","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-538618d7022943d2972c9204","nextBlock":"b-f956c22e466532cb2d508400","prerequisites":[{"id":"b-f93b09759206339156858435","url":"#b-f93b09759206339156858435","role":"section-title"},{"id":"b-ee560000129136d0c81458bd","url":"#b-ee560000129136d0c81458bd","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-f956c22e466532cb2d508400","type":"pre","scope":"block-ebf4defb3d804d1084f0dd9f3a91cfe9","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-f956c22e466532cb2d508400","content":"```\ndef moco_warmup():\n    q=np.array([1.,0.]); keys=np.array([[.8,.2],[0.,1.],[-1.,0.]])\n    keys/=np.linalg.norm(keys,axis=1,keepdims=True)\n    probs={}\n    for T in [.1,.5]:\n        s=keys@q/T; p=np.exp(s-s.max());p/=p.sum();probs[str(T)]=p.tolist()\n    queue=['a','b','c','d']; queue=(queue+['e','f'])[-4:]\n    ema=.9*np.array([0.,2.])+.1*np.array([2.,4.])\n    assert queue==['c','d','e','f']; assert np.allclose(ema,[.2,2.2])\n    return {'temperature_probabilities':probs,'FIFO':queue,'EMA':ema.tolist()}\n\ndef train_moco(initial,x,train,epochs=15):\n    # Small genuine image implementation: query grads, detached EMA keys, FIFO negatives.\n    torch.manual_seed(SEED+2)\n    query=copy.deepcopy(initial); key=copy.deepcopy(initial)\n    for p in key.parameters(): p.requires_grad=False\n    opt=torch.optim.Adam(query.parameters(),lr=.002)\n    queue=torch.empty((0,24)); queue_ids=torch.empty(0,dtype=torch.long)\n    history=[]; trace=[]; m=.95; capacity=240\n    before=next(query.encoder.parameters()).detach().clone()\n    for epoch in range(epochs):\n        losses=[]\n        for ids in torch.as_tensor(train)[torch.randperm(len(train))].split(60):\n            a,b=views(x[ids]),views(x[ids])\n            q=F.normalize(query(a)[1],dim=1)\n            with torch.no_grad():\n                for pk,pq in zip(key.parameters(),query.parameters()):pk.mul_(m).add_(pq,alpha=1-m)\n                k=F.normalize(key(b)[1],dim=1)\n            # Warmup uses detached current keys. Later batches use a real FIFO dictionary.\n            if not len(queue):\n                logits=q@k.T/.2; labels=torch.arange(len(ids))\n                loss=F.cross_entropy(logits,labels)\n            else:\n                positive=(q*k).sum(1,keepdim=True)\n                negative=q@queue.T\n                # A source already in queue is NOT treated as its own negative.\n                negative=negative.masked_fill(ids[:,None]==queue_ids[None,:],-1e9)\n                logits=torch.cat([positive,negative],dim=1)/.2\n                loss=F.cross_entropy(logits,torch.zeros(len(ids),dtype=torch.long))\n            opt.zero_grad();loss.backward();opt.step()\n            with torch.no_grad():\n                queue=torch.cat([queue,k])[-capacity:];queue_ids=torch.cat([queue_ids,ids])[-capacity:]\n            losses.append(float(loss.detach()))\n            if len(trace)<5:trace.append({'step':len(trace),'queue_size':len(queue),'first_source_id':int(queue_ids[0]),'last_source_id':int(queue_ids[-1])})\n        history.append(float(np.mean(losses)))\n    assert all(p.grad is None for p in key.parameters())\n    return query,key,queue,queue_ids,history,trace,float((next(query.encoder.parameters()).detach()-before).norm())\n```","sha256":"32eb91a80268f344f0da944c3e9d486d24441f4849e2c469cdfe9cc178fef276","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-180ef4ed3ff34c0eaafec7bde6f86a8f","title":"为什么队列需要缓慢变化的键编码器？","number":5},"sectionTitle":"为什么队列需要缓慢变化的键编码器？","currentQuestion":"为什么队列需要缓慢变化的键编码器？","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-49959e7974b84516ee9324ab","nextBlock":null,"prerequisites":[{"id":"b-f93b09759206339156858435","url":"#b-f93b09759206339156858435","role":"section-title"},{"id":"b-ee560000129136d0c81458bd","url":"#b-ee560000129136d0c81458bd","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-25e53fb7feb3244ce6c03a74","type":"h2","scope":"block-578149ad721b4040b232cef9671cbcc5","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-25e53fb7feb3244ce6c03a74","content":"## 冻结参数以后才使用标签","sha256":"aba71ef8e58bbed213f0ffffc692e0d8514b8368bea8334bf5c67642cf4e841a","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-578149ad721b4040b232cef9671cbcc5","title":"冻结参数以后才使用标签","number":6},"sectionTitle":"冻结参数以后才使用标签","currentQuestion":"冻结参数以后才使用标签","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-3c39c2a3502a2d2658090509","prerequisites":[{"id":"b-3c39c2a3502a2d2658090509","url":"#b-3c39c2a3502a2d2658090509","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-3c39c2a3502a2d2658090509","type":"p","scope":"block-578149ad721b4040b232cef9671cbcc5","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-3c39c2a3502a2d2658090509","content":"评估提取清洁图像的 h48 和 z24，各自归一化；5-NN 只在训练图建立参考库，线性读出只在训练图拟合标准化和分类器。240张保留图没有用于调参。随机模型、批内模型与队列模型同初始网络；但批内训练40轮、队列模型15轮，负例数与目标也不同，所以这是一组完整路径与失败分析，不能用最终数字对SimCLR和MoCo排名。","sha256":"99c58e8e25c6ed89b5f65572027a496bdea8ba5c801cc903168e8555d8b76207","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-578149ad721b4040b232cef9671cbcc5","title":"冻结参数以后才使用标签","number":6},"sectionTitle":"冻结参数以后才使用标签","currentQuestion":"冻结参数以后才使用标签","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-25e53fb7feb3244ce6c03a74","nextBlock":"b-483f2bc6bc5aa2e6fa98f216","prerequisites":[{"id":"b-25e53fb7feb3244ce6c03a74","url":"#b-25e53fb7feb3244ce6c03a74","role":"section-title"}],"relatedBlocks":[]},{"id":"b-483f2bc6bc5aa2e6fa98f216","type":"pre","scope":"block-a9e41aad60464c2eb480c6268c6ed67f","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-483f2bc6bc5aa2e6fa98f216","content":"```\ndef evaluate(model,x,ys,yc,train,test):\n    model.eval()\n    with torch.no_grad(): h,z=model(x)\n    scores={}\n    for space,features in [('h',h),('z',z)]:\n        a=F.normalize(features,dim=1).numpy()\n        for target,y in [('shape',ys),('color',yc)]:\n            knn=KNeighborsClassifier(n_neighbors=5,metric='cosine')\n            knn.fit(a[train],y[train])\n            # Standardization and classifier fit use TRAIN only; test used once for reporting.\n            linear=make_pipeline(StandardScaler(),LogisticRegression(C=1,max_iter=1000))\n            linear.fit(a[train],y[train])\n            scores[f'{space}_{target}_knn']=float(knn.score(a[test],y[test]))\n            scores[f'{space}_{target}_linear']=float(linear.score(a[test],y[test]))\n    with torch.no_grad():\n        # Counterfactual hue swap only: same geometry and pixels, channels exchanged.\n        ah,az=model(x[test][:,[2,1,0]])\n        for space,original,other in [('h',h[test],ah),('z',z[test],az)]:\n            scores[f'{space}_hue_swap_cosine']=float(F.cosine_similarity(original,other).mean())\n    return scores\n\ndef plot_results(out,x,initial,models,results,histories):\n    fig,ax=plt.subplots(3,6,figsize=(12,6))\n    ids=[0,100,140,280,420,700]\n    torch.manual_seed(SEED+6)\n    for j,i in enumerate(ids):\n        ax[0,j].imshow(x[i].permute(1,2,0));ax[0,j].set_title(f'source {i}')\n        paired_state=torch.get_rng_state()\n        for row,erase in [(1,False),(2,True)]:\n            torch.set_rng_state(paired_state)\n            ax[row,j].imshow(views(x[i:i+1],erase)[0].permute(1,2,0))\n    for row,label in enumerate(['source','view: hue kept','view: hue can swap']):ax[row,0].set_ylabel(label)\n    for a in ax.flat:a.set_xticks([]);a.set_yticks([])\n    fig.tight_layout();fig.savefig(out/'views.png',dpi=140);plt.close(fig)\n    fig,axes=plt.subplots(1,3,figsize=(14,4))\n    for name,hist in histories.items():axes[0].plot(np.arange(1,len(hist)+1),hist,label=name)\n    axes[0].set(xlabel='epoch',ylabel='InfoNCE (batch mean)',title='Training objective');axes[0].legend(fontsize=8)\n    names=list(results)\n    for ax,task in zip(axes[1:],['shape','color']):\n        pos=np.arange(len(names)); width=.34\n        for off,space in [(-width/2,'h'),(width/2,'z')]:\n            ax.bar(pos+off,[results[n][f'{space}_{task}_knn'] for n in names],width,label=space)\n        ax.set_xticks(pos,names,rotation=20);ax.set_ylim(0,1.05);ax.set_title(f'Frozen cosine 5-NN: {task}')\n        ax.set_ylabel('held-out accuracy');ax.legend()\n    fig.tight_layout();fig.savefig(out/'training-and-probes.png',dpi=140);plt.close(fig)\n\ndef run_contrastive(out_dir='lab06-output',mode='color'):\n    started=time.time();out=Path(out_dir);out.mkdir(parents=True,exist_ok=True)\n    torch.manual_seed(SEED)\n    x,ys,yc,train,test=make_data()\n    np.savez_compressed(out/'inputs.npz',images=x.numpy(),shape=ys,color=yc,train_ids=train,test_ids=test)\n    initial=ContrastiveModel(); torch.save(initial.state_dict(),out/'random-init.pt')\n    results={'random':evaluate(initial,x,ys,yc,train,test)};histories={};models={};deltas={}\n    if mode=='color':\n        for name,erase in [('keep-hue',False),('swap-hue',True)]:\n            model,hist,delta=train_simclr(initial,x,train,erase)\n            results[name]=evaluate(model,x,ys,yc,train,test);histories[name]=hist;models[name]=model;deltas[name]=delta\n            torch.save(model.state_dict(),out/f'{name}.pt')\n    else:\n        model,hist,delta=train_simclr(initial,x,train,False)\n        results['simclr']=evaluate(model,x,ys,yc,train,test);histories['simclr']=hist;models['simclr']=model;deltas['simclr']=delta\n        torch.save(model.state_dict(),out/'simclr.pt')\n        query,key,queue,queue_ids,hist,trace,delta=train_moco(initial,x,train)\n        results['moco-toy']=evaluate(query,x,ys,yc,train,test);histories['moco-toy']=hist;models['moco-toy']=query;deltas['moco-toy']=delta\n        torch.save({'query':query.state_dict(),'key':key.state_dict(),'queue':queue,'queue_ids':queue_ids},out/'moco-toy.pt')\n        (out/'queue-trace.json').write_text(json.dumps(trace,indent=2))\n    config={'seed':SEED,'mode':mode,'image_shape':[3,16,16],'train_n':len(train),'test_n':len(test),'batch_size':60,'epochs_simclr':40,'epochs_moco':15,'tau':.2,'adam_lr':.002,'h_dim':48,'z_dim':24,'labels_used_only_for_probes':True,'knn':{'k':5,'metric':'cosine'},'linear_probe':{'regularization_C':1,'standardizer_fit':'train-only'},'test_tuning':'none; fixed protocol before first run'}\n    (out/'config.json').write_text(json.dumps(config,indent=2))\n    plot_results(out,x,initial,models,results,histories)\n    payload={'code_sha256':globals().get('SOURCE_SHA256') or hashlib.sha256(Path(__file__).read_bytes()).hexdigest(),'kind':'local CPU full training + frozen held-out probes','utc':time.strftime('%Y-%m-%dT%H:%M:%SZ',time.gmtime()),'seconds':time.time()-started,'torch':torch.__version__,'numpy':np.__version__,'python':platform.python_version(),'scores':results,'loss_history':histories,'encoder_weight_l2_change':deltas,'warmup':moco_warmup(),'inputs_sha256':hashlib.sha256((out/'inputs.npz').read_bytes()).hexdigest()}\n    (out/'results.json').write_text(json.dumps(payload,indent=2))\n    print(json.dumps({'scores':results,'encoder_weight_l2_change':deltas,'seconds':payload['seconds']},indent=2))\n    return payload\n```","sha256":"e9fde753df3fb203edecd3b68df41ad9a34a08ef27da8b8736f3ba884a834315","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-578149ad721b4040b232cef9671cbcc5","title":"冻结参数以后才使用标签","number":6},"sectionTitle":"冻结参数以后才使用标签","currentQuestion":"冻结参数以后才使用标签","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-3c39c2a3502a2d2658090509","nextBlock":"b-2c6d89bf84a33e11ddfac3dc","prerequisites":[{"id":"b-25e53fb7feb3244ce6c03a74","url":"#b-25e53fb7feb3244ce6c03a74","role":"section-title"},{"id":"b-3c39c2a3502a2d2658090509","url":"#b-3c39c2a3502a2d2658090509","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-2c6d89bf84a33e11ddfac3dc","type":"pre","scope":"block-5dc9b0c969054d0599e51001c6be71b3","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-2c6d89bf84a33e11ddfac3dc","content":"```\nresult=run_contrastive('lab07-notebook-output',mode='moco')\nprint('FIFO/EMA warmup',result['warmup'])\nprint(Path('lab07-notebook-output/queue-trace.json').read_text())\nfrom IPython.display import Image,display\ndisplay(Image(filename='lab07-notebook-output/training-and-probes.png'))\n```","sha256":"7fbdc2dda56d2a90a866162003efae02388eea3b262e0adc132351bfcbdff0f2","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-578149ad721b4040b232cef9671cbcc5","title":"冻结参数以后才使用标签","number":6},"sectionTitle":"冻结参数以后才使用标签","currentQuestion":"冻结参数以后才使用标签","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-483f2bc6bc5aa2e6fa98f216","nextBlock":null,"prerequisites":[{"id":"b-25e53fb7feb3244ce6c03a74","url":"#b-25e53fb7feb3244ce6c03a74","role":"section-title"},{"id":"b-3c39c2a3502a2d2658090509","url":"#b-3c39c2a3502a2d2658090509","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-d9223e77a9530377cfba71ca","type":"h2","scope":"block-e77695d0d5f34ec38bdc6aa44ae84259","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-d9223e77a9530377cfba71ca","content":"## 已运行结果：字典正确，不代表语义读出必然变好","sha256":"8371d0fc434b949f635caea1a8c74bc24b1fda385e4ccff126c1808a92b435f7","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-e77695d0d5f34ec38bdc6aa44ae84259","title":"已运行结果：字典正确，不代表语义读出必然变好","number":7},"sectionTitle":"已运行结果：字典正确，不代表语义读出必然变好","currentQuestion":"已运行结果：字典正确，不代表语义读出必然变好","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-34d558d59108a699bcd66c59","prerequisites":[{"id":"b-7578071b5830354b481d6473","url":"#b-7578071b5830354b481d6473","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-34d558d59108a699bcd66c59","type":"table","scope":"block-e77695d0d5f34ec38bdc6aa44ae84259","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-34d558d59108a699bcd66c59","content":"| 编码器 | h形状5NN | z形状5NN | h颜色5NN | z颜色5NN | h形状线性 | h颜色线性 |\n| --- | --- | --- | --- | --- | --- | --- |\n| random | 72.50% | 60.42% | 100.00% | 100.00% | 56.25% | 100.00% |\n| simclr | 47.50% | 58.33% | 100.00% | 100.00% | 69.17% | 100.00% |\n| moco-toy | 38.33% | 38.75% | 100.00% | 100.00% | 54.58% | 100.00% |","sha256":"513d6197f97b2597a739bf65e0110785c4e83dbb8eb4cf2567f5546b251c38d1","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-e77695d0d5f34ec38bdc6aa44ae84259","title":"已运行结果：字典正确，不代表语义读出必然变好","number":7},"sectionTitle":"已运行结果：字典正确，不代表语义读出必然变好","currentQuestion":"已运行结果：字典正确，不代表语义读出必然变好","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"table":{"headers":["编码器","h形状5NN","z形状5NN","h颜色5NN","z颜色5NN","h形状线性","h颜色线性"],"rows":[["编码器","h形状5NN","z形状5NN","h颜色5NN","z颜色5NN","h形状线性","h颜色线性"],["random","72.50%","60.42%","100.00%","100.00%","56.25%","100.00%"],["simclr","47.50%","58.33%","100.00%","100.00%","69.17%","100.00%"],["moco-toy","38.33%","38.75%","100.00%","100.00%","54.58%","100.00%"]]},"previousBlock":"b-d9223e77a9530377cfba71ca","nextBlock":"b-7578071b5830354b481d6473","prerequisites":[{"id":"b-d9223e77a9530377cfba71ca","url":"#b-d9223e77a9530377cfba71ca","role":"section-title"},{"id":"b-7578071b5830354b481d6473","url":"#b-7578071b5830354b481d6473","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-7578071b5830354b481d6473","type":"p","scope":"block-e77695d0d5f34ec38bdc6aa44ae84259","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-7578071b5830354b481d6473","content":"![真实图像SimCLR和MoCo教学实现的训练与冻结评价](/assets/display/268d058973fa4f9664e0d8ae.webp)","sha256":"c892ba0e5f7f35362c207da2fa0665d67f56875b6f4c15d31223e1e4b37112c6","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-e77695d0d5f34ec38bdc6aa44ae84259","title":"已运行结果：字典正确，不代表语义读出必然变好","number":7},"sectionTitle":"已运行结果：字典正确，不代表语义读出必然变好","currentQuestion":"已运行结果：字典正确，不代表语义读出必然变好","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-34d558d59108a699bcd66c59","nextBlock":"b-7c1cb6221af958d94fff660c","prerequisites":[{"id":"b-d9223e77a9530377cfba71ca","url":"#b-d9223e77a9530377cfba71ca","role":"section-title"}],"relatedBlocks":[]},{"id":"b-7c1cb6221af958d94fff660c","type":"p","scope":"block-e77695d0d5f34ec38bdc6aa44ae84259","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-7c1cb6221af958d94fff660c","content":"批内模型h形状5-NN为47.50%，小型MoCo为38.33%，都低于随机网络72.50%；颜色准确率均为100%。MoCo训练损失从4.793降至4.274，query第一层权重变化范数0.7625，且key参数全部没有梯度。模型实际学了，但有限的实例区分目标更容易保留颜色、位置等因素；不能把“loss下降”翻译成“形状语义更好”。","sha256":"0476b99130c8376e54cfde68d801a632a889e1adbd87262966bbbafef5f85893","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-e77695d0d5f34ec38bdc6aa44ae84259","title":"已运行结果：字典正确，不代表语义读出必然变好","number":7},"sectionTitle":"已运行结果：字典正确，不代表语义读出必然变好","currentQuestion":"已运行结果：字典正确，不代表语义读出必然变好","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-7578071b5830354b481d6473","nextBlock":"b-02ded4d09eed49a1fcc217cd","prerequisites":[{"id":"b-d9223e77a9530377cfba71ca","url":"#b-d9223e77a9530377cfba71ca","role":"section-title"},{"id":"b-7578071b5830354b481d6473","url":"#b-7578071b5830354b481d6473","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-02ded4d09eed49a1fcc217cd","type":"p","scope":"block-e77695d0d5f34ec38bdc6aa44ae84259","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-02ded4d09eed49a1fcc217cd","content":"队列前几步的长度是60、120、180、240、240，第5步开始淘汰旧键，完整ID轨迹和最终队列随权重保存。这个证据与前面的字符串FIFO各回答一层问题：字符串检查精确更新顺序，图像代码检验这个顺序是否真的接入了训练。","sha256":"af4494279e05ea04aa0d7f98d8361dd9d73efd95ac156634ae5906de8c9f9242","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-e77695d0d5f34ec38bdc6aa44ae84259","title":"已运行结果：字典正确，不代表语义读出必然变好","number":7},"sectionTitle":"已运行结果：字典正确，不代表语义读出必然变好","currentQuestion":"已运行结果：字典正确，不代表语义读出必然变好","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-7c1cb6221af958d94fff660c","nextBlock":"b-6243882682dd7a3fb92425d7","prerequisites":[{"id":"b-d9223e77a9530377cfba71ca","url":"#b-d9223e77a9530377cfba71ca","role":"section-title"},{"id":"b-7578071b5830354b481d6473","url":"#b-7578071b5830354b481d6473","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-6243882682dd7a3fb92425d7","type":"p","scope":"block-e77695d0d5f34ec38bdc6aa44ae84259","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-6243882682dd7a3fb92425d7","content":"若要考察增强能否改变这些结果，先保持队列容量、EMA和训练轮数，参照LAB06只加入色相交换。若要研究m，就保持其余设置，预先指定一组m和多枚种子；不要看过本保留集以后反复调到胜过随机再报告。","sha256":"26a2be84bdf9ca074de72cff79fd8a2f3fbf225565cce2862718a3935e71490f","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-e77695d0d5f34ec38bdc6aa44ae84259","title":"已运行结果：字典正确，不代表语义读出必然变好","number":7},"sectionTitle":"已运行结果：字典正确，不代表语义读出必然变好","currentQuestion":"已运行结果：字典正确，不代表语义读出必然变好","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-02ded4d09eed49a1fcc217cd","nextBlock":"b-873fed426386907bdb6cbc7b","prerequisites":[{"id":"b-d9223e77a9530377cfba71ca","url":"#b-d9223e77a9530377cfba71ca","role":"section-title"},{"id":"b-7578071b5830354b481d6473","url":"#b-7578071b5830354b481d6473","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-873fed426386907bdb6cbc7b","type":"p","scope":"block-e77695d0d5f34ec38bdc6aa44ae84259","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-873fed426386907bdb6cbc7b","content":"**云端复核（2026-09-22）：Python 3.13 / PyTorch 2.12.0+cu130 环境以 CPU 张量完整执行，SimCLR h形状5-NN为54.17%，小型MoCo为37.92%，随机仍为72.50%；颜色均100%。本地表格保留其 Python 3.12 / PyTorch 2.14 CPU 的实际结果，两次不合并为同一测量。队列/EMA接入和编码器更新均由云端输出核验。运行 ID：3e1babc4-7e23-46fe-8bfd-257351081ef9。**","sha256":"03edc0dfe9e798f3d0d9372ac34bb8099030862527da3466ee0165be244adba0","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-e77695d0d5f34ec38bdc6aa44ae84259","title":"已运行结果：字典正确，不代表语义读出必然变好","number":7},"sectionTitle":"已运行结果：字典正确，不代表语义读出必然变好","currentQuestion":"已运行结果：字典正确，不代表语义读出必然变好","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-6243882682dd7a3fb92425d7","nextBlock":null,"prerequisites":[{"id":"b-d9223e77a9530377cfba71ca","url":"#b-d9223e77a9530377cfba71ca","role":"section-title"},{"id":"b-7578071b5830354b481d6473","url":"#b-7578071b5830354b481d6473","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-dc222cda408d93a453c6fba3","type":"h2","scope":"block-2fcb1adb8ab540d28b9a54916b603faa","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-dc222cda408d93a453c6fba3","content":"## 接回前后知识","sha256":"305270e1cc8b272d34fd992eb01092dda96c80bc79d84533a07946dee429fcae","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-2fcb1adb8ab540d28b9a54916b603faa","title":"接回前后知识","number":8},"sectionTitle":"接回前后知识","currentQuestion":"接回前后知识","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-ad0165689ec79daee9903a05","prerequisites":[{"id":"b-ad0165689ec79daee9903a05","url":"#b-ad0165689ec79daee9903a05","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-ad0165689ec79daee9903a05","type":"p","scope":"block-2fcb1adb8ab540d28b9a54916b603faa","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-ad0165689ec79daee9903a05","content":"[LAB 06](https://deepnote.com/project/38755e4e-23f6-4f5f-8c68-8a2e4114b1c1/notebook/7c4f531113d7473abc174e2e014e1340) 已经执行了颜色增强的受控对照，不能用本册保色条件推断所有增强都失败。[LAB 08](https://deepnote.com/project/38755e4e-23f6-4f5f-8c68-8a2e4114b1c1/notebook/b5ba27f2c5ba4ec0922208a7d5dc80a4) 的答案来自图像缺失部分；这里的答案来自同源视图身份。两者都不用人工类别预训练，但也都要另设评价任务。","sha256":"3027cfe01afa246928548f59552923b2200411e1c9e46a38fc56946d65282b9e","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-2fcb1adb8ab540d28b9a54916b603faa","title":"接回前后知识","number":8},"sectionTitle":"接回前后知识","currentQuestion":"接回前后知识","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-dc222cda408d93a453c6fba3","nextBlock":"b-061003368a9e540eb1a5047a","prerequisites":[{"id":"b-dc222cda408d93a453c6fba3","url":"#b-dc222cda408d93a453c6fba3","role":"section-title"}],"relatedBlocks":[]},{"id":"b-061003368a9e540eb1a5047a","type":"p","scope":"block-2fcb1adb8ab540d28b9a54916b603faa","url":"https://codingai-lec03.pages.dev/course/notebooks/0d1b8f6fbf6a476c93ffcc169f2ec1f4.html#b-061003368a9e540eb1a5047a","content":"来源：[MoCo 原论文（CVPR 2020）](https://openaccess.thecvf.com/content_CVPR_2020/html/He_Momentum_Contrast_for_Unsupervised_Visual_Representation_Learning_CVPR_2020_paper.html) 给出动态字典、队列与动量编码器；[作者代码仓库](https://github.com/facebookresearch/moco) 是完整实现入口。[SimCLR 原论文](https://proceedings.mlr.press/v119/chen20j.html) 是本册批内对照的研究来源。本册小CNN、空队列热身和同源ID屏蔽均在代码中显式列出，属于教学实现选择。","sha256":"171afd7c591fd1c5fd94a608db822d9ad68bc621046fed6496a63ee4bbd217ac","chapter":{"id":"I","title":"学习信号与表示"},"unit":{"id":"i-view-objective","title":"视图关系怎样成为学习目标，又会牺牲什么？"},"page":{"id":"reading-block-2fcb1adb8ab540d28b9a54916b603faa","title":"接回前后知识","number":8},"sectionTitle":"接回前后知识","currentQuestion":"接回前后知识","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-ad0165689ec79daee9903a05","nextBlock":null,"prerequisites":[{"id":"b-dc222cda408d93a453c6fba3","url":"#b-dc222cda408d93a453c6fba3","role":"section-title"},{"id":"b-ad0165689ec79daee9903a05","url":"#b-ad0165689ec79daee9903a05","role":"problem-context"}],"relatedBlocks":[]}]}
