{"version":2,"relationshipURLBase":"https://codingai-lec03.pages.dev/course/notebook-blocks/fdd18e776fb949909b1d5e2233b7d639.html","relationshipResolution":"Resolve relative relationship URLs against relationshipURLBase; complete records and absolute URLs are in blocks.","title":"活动 A：一张小矩阵，两种查找方向 · 实现代码","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/fdd18e776fb949909b1d5e2233b7d639.html","markdown":"https://codingai-lec03.pages.dev/course/notebook-blocks/fdd18e776fb949909b1d5e2233b7d639.md","pages":[{"id":"reading-opening","title":"活动 A：一张小矩阵，两种查找方向 · 实现代码","unit":"活动 A：一张小矩阵，两种查找方向 · 实现代码","unitId":"notebook-blocks/fdd18e776fb949909b1d5e2233b7d639","chapter":"course","number":1}],"aliases":[{"oldId":"b-24356b3810d5dbefdb2f81c0","targetId":"b-24356b3810d5dbefdb2f81c0","page":"reading-opening","operation":"move","beforeSHA256":"343fb71807f077069b41c6495a8824ea4d353c740175b5775ccc5145b3bf19ca","afterSHA256":"343fb71807f077069b41c6495a8824ea4d353c740175b5775ccc5145b3bf19ca","reason":"Same source body in authored semantic page"},{"oldId":"b-11a511b34a93de4260aa5d5e","targetId":"b-11a511b34a93de4260aa5d5e","page":"reading-opening","operation":"move","beforeSHA256":"3820efd4111dde65fb5963132f1df33ea5a6cc1bb472c4db95660a6ede133978","afterSHA256":"3820efd4111dde65fb5963132f1df33ea5a6cc1bb472c4db95660a6ede133978","reason":"Same source body in authored semantic page"},{"oldId":"b-d989a347b9c2ac6fbc06f293","targetId":"b-d989a347b9c2ac6fbc06f293","page":"reading-opening","operation":"move","beforeSHA256":"42cba31deccba2a350b9b23bd0ca1dcaa4c4c5cb9d35c773e1fcb89124788ccd","afterSHA256":"42cba31deccba2a350b9b23bd0ca1dcaa4c4c5cb9d35c773e1fcb89124788ccd","reason":"Same source body in authored semantic page"},{"oldId":"b-4bd09c76381987759c3be90f","targetId":"b-4bd09c76381987759c3be90f","page":"reading-opening","operation":"move","beforeSHA256":"41c70c2c07b82678ff0a60f2d009b6afa750c5c691d109e754a69abf23868b50","afterSHA256":"41c70c2c07b82678ff0a60f2d009b6afa750c5c691d109e754a69abf23868b50","reason":"Same source body in authored semantic page"},{"oldId":"b-9ffe86aeebc25f709a0a128d","targetId":"b-9ffe86aeebc25f709a0a128d","page":"reading-opening","operation":"move","beforeSHA256":"7462623f6862fb9ca9e60dff3dddc5d87cc3d61b00f48431e6c4da48f60fc1b1","afterSHA256":"7462623f6862fb9ca9e60dff3dddc5d87cc3d61b00f48431e6c4da48f60fc1b1","reason":"Same source body in authored semantic page"}],"blocks":[{"id":"b-24356b3810d5dbefdb2f81c0","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/fdd18e776fb949909b1d5e2233b7d639.html#b-24356b3810d5dbefdb2f81c0","content":"[CLS 03 · 视觉与语言：任务、训练与接口](/course/notebooks/680da245145447dd88983aabd136fd24.html)","sha256":"343fb71807f077069b41c6495a8824ea4d353c740175b5775ccc5145b3bf19ca","chapter":{"id":"course","title":"活动 A：一张小矩阵，两种查找方向 · 实现代码"},"unit":{"id":"notebook-blocks/fdd18e776fb949909b1d5e2233b7d639","title":"活动 A：一张小矩阵，两种查找方向 · 实现代码"},"page":{"id":"reading-opening","title":"活动 A：一张小矩阵，两种查找方向 · 实现代码","number":1},"sectionTitle":"活动 A：一张小矩阵，两种查找方向 · 实现代码","currentQuestion":"活动 A：一张小矩阵，两种查找方向 · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-11a511b34a93de4260aa5d5e","prerequisites":[],"relatedBlocks":[]},{"id":"b-11a511b34a93de4260aa5d5e","type":"h1","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/fdd18e776fb949909b1d5e2233b7d639.html#b-11a511b34a93de4260aa5d5e","content":"# 活动 A：一张小矩阵，两种查找方向 · 实现代码","sha256":"3820efd4111dde65fb5963132f1df33ea5a6cc1bb472c4db95660a6ede133978","chapter":{"id":"course","title":"活动 A：一张小矩阵，两种查找方向 · 实现代码"},"unit":{"id":"notebook-blocks/fdd18e776fb949909b1d5e2233b7d639","title":"活动 A：一张小矩阵，两种查找方向 · 实现代码"},"page":{"id":"reading-opening","title":"活动 A：一张小矩阵，两种查找方向 · 实现代码","number":1},"sectionTitle":"活动 A：一张小矩阵，两种查找方向 · 实现代码","currentQuestion":"活动 A：一张小矩阵，两种查找方向 · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-24356b3810d5dbefdb2f81c0","nextBlock":"b-d989a347b9c2ac6fbc06f293","prerequisites":[{"id":"b-24356b3810d5dbefdb2f81c0","url":"#b-24356b3810d5dbefdb2f81c0","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-d989a347b9c2ac6fbc06f293","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/fdd18e776fb949909b1d5e2233b7d639.html#b-d989a347b9c2ac6fbc06f293","content":"主线阅读与优先实验","sha256":"42cba31deccba2a350b9b23bd0ca1dcaa4c4c5cb9d35c773e1fcb89124788ccd","chapter":{"id":"course","title":"活动 A：一张小矩阵，两种查找方向 · 实现代码"},"unit":{"id":"notebook-blocks/fdd18e776fb949909b1d5e2233b7d639","title":"活动 A：一张小矩阵，两种查找方向 · 实现代码"},"page":{"id":"reading-opening","title":"活动 A：一张小矩阵，两种查找方向 · 实现代码","number":1},"sectionTitle":"活动 A：一张小矩阵，两种查找方向 · 实现代码","currentQuestion":"活动 A：一张小矩阵，两种查找方向 · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-11a511b34a93de4260aa5d5e","nextBlock":"b-4bd09c76381987759c3be90f","prerequisites":[{"id":"b-11a511b34a93de4260aa5d5e","url":"#b-11a511b34a93de4260aa5d5e","role":"section-title"},{"id":"b-24356b3810d5dbefdb2f81c0","url":"#b-24356b3810d5dbefdb2f81c0","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-4bd09c76381987759c3be90f","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/fdd18e776fb949909b1d5e2233b7d639.html#b-4bd09c76381987759c3be90f","content":"caption历史、VQA、CLIP候选、关系控制、GLIP/LLaVA与生成桥梁","sha256":"41c70c2c07b82678ff0a60f2d009b6afa750c5c691d109e754a69abf23868b50","chapter":{"id":"course","title":"活动 A：一张小矩阵，两种查找方向 · 实现代码"},"unit":{"id":"notebook-blocks/fdd18e776fb949909b1d5e2233b7d639","title":"活动 A：一张小矩阵，两种查找方向 · 实现代码"},"page":{"id":"reading-opening","title":"活动 A：一张小矩阵，两种查找方向 · 实现代码","number":1},"sectionTitle":"活动 A：一张小矩阵，两种查找方向 · 实现代码","currentQuestion":"活动 A：一张小矩阵，两种查找方向 · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-d989a347b9c2ac6fbc06f293","nextBlock":"b-9ffe86aeebc25f709a0a128d","prerequisites":[{"id":"b-11a511b34a93de4260aa5d5e","url":"#b-11a511b34a93de4260aa5d5e","role":"section-title"},{"id":"b-24356b3810d5dbefdb2f81c0","url":"#b-24356b3810d5dbefdb2f81c0","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-9ffe86aeebc25f709a0a128d","type":"pre","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/fdd18e776fb949909b1d5e2233b7d639.html#b-9ffe86aeebc25f709a0a128d","content":"```\n# 独立 CPU 的双向配对目标；余弦来自归一化教学向量。\nimport math\nobjects = ['redcup', 'bluecup', 'book']\nimage_vectors = [[1.0,0.0,0.0],[0.0,1.0,0.0],[0.0,0.0,1.0]]\ntext_weights = [[4.0,1.0,1.0],[1.0,4.0,1.0],[1.0,1.0,4.0]]\ndef normalize(vector):\n    norm=math.sqrt(sum(x*x for x in vector))\n    return [x/norm for x in vector]\ntext_vectors=[normalize(vector) for vector in text_weights]\nS=[[sum(a*b for a,b in zip(u,v)) for v in text_vectors] for u in image_vectors]\ntemperature=1.0\nlogits=[[s/temperature for s in row] for row in S]\ndef softmax(row):\n    exps=[math.exp(x-max(row)) for x in row]\n    return [x/sum(exps) for x in exps]\nrow_prob=[softmax(row) for row in logits]\ncol_prob=[softmax(list(col)) for col in zip(*logits)]\nrow_loss=-sum(math.log(row_prob[i][i]) for i in range(3))/3\ncol_loss=-sum(math.log(col_prob[i][i]) for i in range(3))/3\nprint('对象顺序:',objects,'温度:',temperature)\nprint('余弦矩阵:',[[round(s,6) for s in row] for row in S])\nprint('每张图找正确文字:',[round(row_prob[i][i],4) for i in range(3)])\nprint('每段文字找正确图:',[round(col_prob[i][i],4) for i in range(3)])\nprint('双向平均损失:',round((row_loss+col_loss)/2,6))\nassert all(abs(sum(p)-1)<1e-12 for p in row_prob+col_prob)\nassert all(abs(sum(x*x for x in vector)-1)<1e-12 for vector in image_vectors+text_vectors)\nif text_weights==[[4.0,1.0,1.0],[1.0,4.0,1.0],[1.0,1.0,4.0]] and temperature==1.0:\n    assert all(math.isclose(S[i][j],(4 if i==j else 1)/math.sqrt(18)) for i in range(3) for j in range(3))\n    assert math.isclose((row_loss+col_loss)/2,0.6861917388550698)\n\n```","sha256":"7462623f6862fb9ca9e60dff3dddc5d87cc3d61b00f48431e6c4da48f60fc1b1","chapter":{"id":"course","title":"活动 A：一张小矩阵，两种查找方向 · 实现代码"},"unit":{"id":"notebook-blocks/fdd18e776fb949909b1d5e2233b7d639","title":"活动 A：一张小矩阵，两种查找方向 · 实现代码"},"page":{"id":"reading-opening","title":"活动 A：一张小矩阵，两种查找方向 · 实现代码","number":1},"sectionTitle":"活动 A：一张小矩阵，两种查找方向 · 实现代码","currentQuestion":"活动 A：一张小矩阵，两种查找方向 · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-4bd09c76381987759c3be90f","nextBlock":null,"prerequisites":[{"id":"b-11a511b34a93de4260aa5d5e","url":"#b-11a511b34a93de4260aa5d5e","role":"section-title"},{"id":"b-24356b3810d5dbefdb2f81c0","url":"#b-24356b3810d5dbefdb2f81c0","role":"problem-context"}],"relatedBlocks":[]}]}
