class Target { public : virtual ~ Target () = default ; virtual std :: string Request () const { return \"Target: The defaut target's behabior.\" ; } }; class Adaptee { public : std :: string SpecificRequest () const { return \".eetpadA eht fo roivaheb laicepS\" ; } }; class Adapter : public Target { private : Adaptee * adaptee_ ; public : Adapter ( Adaptee * adaptee ) : adaptee_ ( adaptee ) {} std :: string Request () const override { std :: string to_reverse = this -> adaptee_ -> SpecificRequest (); std :: reverse ( to_reverse . begin (), to_reverse . end ()); return \"Adapter: (TRANSLATED) \" + to_reverse ; } }; void ClientCode ( const Target * target ) { std :: cout << target -> Request (); } int main () { std :: ios :: sync_with_stdio ( false ); std :: cin . tie ( nullptr ); std :: cout << \"Client: I can work just fine with the Target objects: \\n \" ; Target * target = new Target ; ClientCode ( target ); std :: cout << \" \\n\\n \" ; Adaptee * adaptee = new Adaptee ; std :: cout << \"Client: The Adaptee class has a weird interface. See, I don't understand it: \\n \" ; std :: cout << \"Adaptee: \" << adaptee -> SpecificRequest (); std :: cout << \" \\n\\n \" ; std :: cout << \"Client: But I can work with it via the Adapter: \\n \" ; Adapter * adapter = new Adapter ( adaptee ); ClientCode ( adapter ); std :: cout << \" \\n \" ; delete target ; delete adaptee ; delete adapter ; return 0 ; } \u884c\u4e3a\u6a21\u5f0f \u00b6","title":"\u8bbe\u8ba1\u6a21\u5f0f"},{"location":"cs/software/design-pattern/#_1","text":"\u7ea6 2112 \u4e2a\u5b57 496 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 13 \u5206\u949f \u8bbe\u8ba1\u6a21\u5f0f \u662f\u8f6f\u4ef6\u8bbe\u8ba1\u4e2d\u5e38\u89c1\u95ee\u9898\u7684\u5178\u578b\u89e3\u51b3\u65b9\u6848\u3002\u4ed6\u4eec\u5c31\u60f3\u80fd\u6839\u636e\u9700\u6c42\u8fdb\u884c\u8c03\u6574\u7684\u9884\u5236\u84dd\u56fe\uff0c\u53ef\u7528\u4e8e\u89e3\u51b3\u4ee3\u7801\u4e2d\u53cd\u590d\u51fa\u73b0\u7684\u8bbe\u8ba1\u95ee\u9898\u3002 \u8bbe\u8ba1\u6a21\u5f0f\u4e0e\u65b9\u6cd5\u6216\u5e93\u7684\u4f7f\u7528\u65b9\u5f0f\u4e0d\u540c\uff0c\u4f60\u5f88\u96be\u76f4\u63a5\u5728\u81ea\u5df1\u7684\u7a0b\u5e8f\u4e2d\u5957\u7528\u67d0\u4e2a\u8bbe\u8ba1\u6a21\u5f0f\u3002\u6a21\u5f0f\u5e76\u4e0d\u662f\u4e00\u6bb5\u7279\u5b9a\u7684\u4ee3\u7801\uff0c\u800c\u662f\u89e3\u51b3\u7279\u5b9a\u95ee\u9898\u7684\u4e00\u822c\u6027\u6982\u5ff5\u3002 \u4f60\u53ef\u4ee5\u6839\u636e\u6a21\u5f0f\u6765\u5b9e\u73b0\u7b26\u5408\u81ea\u5df1\u7a0b\u5e8f\u5b9e\u9645\u6240\u9700\u7684\u89e3\u51b3\u65b9\u6848\u3002 \u4eba\u4eec\u5e38\u5e38\u4f1a\u6df7\u6dc6\u6a21\u5f0f\u548c\u7b97\u6cd5\uff0c\u56e0\u4e3a\u4e24\u8005\u5728\u6982\u5ff5\u4e0a\u90fd\u662f\u5df2\u77e5\u7279\u5b9a\u95ee\u9898\u7684\u5178\u578b\u89e3\u51b3\u65b9\u6848\u3002 \u4f46\u7b97\u6cd5\u603b\u662f\u660e\u786e\u5b9a\u4e49\u8fbe\u6210\u7279\u5b9a\u76ee\u6807\u6240\u9700\u7684\u4e00\u7cfb\u5217\u6b65\u9aa4\uff0c\u800c\u6a21\u5f0f\u5219\u662f\u5bf9\u89e3\u51b3\u65b9\u6848\u7684\u66f4\u9ad8\u5c42\u6b21\u63cf\u8ff0\u3002\u540c\u4e00\u6a21\u5f0f\u5728\u4e24\u4e2a\u4e0d\u540c\u7a0b\u5e8f\u4e2d\u7684\u5b9e\u73b0\u4ee3\u7801\u53ef\u80fd\u4f1a\u4e0d\u4e00\u6837\u3002 \u7b97\u6cd5\u66f4\u50cf\u662f\u83dc\u8c31\uff1a\u63d0\u4f9b\u8fbe\u6210\u76ee\u6807\u7684\u660e\u786e\u6b65\u9aa4\u3002\u800c\u6a21\u5f0f\u66f4\u50cf\u662f\u84dd\u56fe\uff1a\u4f60\u53ef\u4ee5\u770b\u5230\u6700\u7ec8\u7684\u7ed3\u679c\u548c\u6a21\u5f0f\u7684\u529f\u80fd\uff0c\u4f46\u9700\u8981\u81ea\u5df1\u786e\u5b9a\u5b9e\u73b0\u6b65\u9aa4\u3002 Abstract \u5f52\u6863\u5b66\u4e60\u8bbe\u8ba1\u6a21\u5f0f\u65f6\u7684\u4e00\u4e9b\u7b14\u8bb0 \u4e3b\u8981\u7528 C++ \u5b9e\u73b0\uff0c\u6301\u7eed\u66f4\u65b0\u4e2d","title":"\u8bbe\u8ba1\u6a21\u5f0f"},{"location":"cs/software/design-pattern/#_2","text":"","title":"\u521b\u5efa\u578b\u6a21\u5f0f"},{"location":"cs/software/design-pattern/#_3","text":"","title":"\u62bd\u8c61\u5de5\u5382\u6a21\u5f0f"},{"location":"cs/software/design-pattern/#_4","text":"\u62bd\u8c61\u5de5\u5382\u6a21\u5f0f \u662f\u4e00\u79cd\u521b\u5efa\u578b\u8bbe\u8ba1\u6a21\u5f0f\uff0c \u5b83\u80fd\u521b\u5efa\u4e00\u7cfb\u5217\u76f8\u5173\u7684\u5bf9\u8c61\uff0c \u800c\u65e0\u9700\u6307\u5b9a\u5176\u5177\u4f53\u7c7b\u3002","title":"\u6982\u8ff0"},{"location":"cs/software/design-pattern/#_5","text":"\u5982\u679c\u4ee3\u7801\u9700\u8981\u4e0e\u591a\u4e2a\u4e0d\u540c\u7cfb\u5217\u7684\u76f8\u5173\u4ea7\u54c1\u4ea4\u4e92\uff0c\u4f46\u662f\u7531\u4e8e\u65e0\u6cd5\u63d0\u524d\u83b7\u53d6\u76f8\u5173\u4fe1\u606f\uff0c\u6216\u8005\u51fa\u4e8e\u5bf9\u672a\u6765\u6269\u5c55\u6027\u7684\u8003\u8651\uff0c\u4f60\u4e0d\u5e0c\u671b\u4ee3\u7801\u57fa\u4e8e\u4ea7\u54c1\u7684\u5177\u4f53\u7c7b\u8fdb\u884c\u6784\u5efa\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u4f60\u53ef\u4ee5\u4f7f\u7528\u62bd\u8c61\u5de5\u5382\u3002 \u5982\u679c\u4f60\u6709\u4e00\u4e2a\u57fa\u4e8e\u4e00\u7ec4\u62bd\u8c61\u65b9\u6cd5\u7684\u7d2f\uff0c\u4e14\u5176\u4e3b\u8981\u529f\u80fd\u56e0\u6b64\u53d8\u5f97\u4e0d\u660e\u786e\uff0c\u90a3\u4e48\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u53ef\u4ee5\u8003\u8651\u4e86\u4f7f\u7528\u62bd\u8c61\u5de5\u5382\u6a21\u5f0f","title":"\u5e94\u7528\u573a\u666f"},{"location":"cs/software/design-pattern/#_6","text":"","title":"\u4f18\u7f3a\u70b9"},{"location":"cs/software/design-pattern/#_9","text":"","title":"\u5de5\u5382\u65b9\u6cd5\u6a21\u5f0f"},{"location":"cs/software/design-pattern/#_10","text":"\u5de5\u5382\u65b9\u6cd5\u6a21\u5f0f \u662f\u4e00\u79cd\u521b\u5efa\u578b\u8bbe\u8ba1\u6a21\u5f0f\uff0c\u5176\u5728\u7236\u7c7b\u4e2d\u63d0\u4f9b\u4e00\u4e2a\u521b\u5efa\u5bf9\u8c61\u7684\u65b9\u6cd5\uff0c\u5141\u8bb8\u5b50\u7c7b\u51b3\u5b9a\u5b9e\u4f8b\u5316\u5bf9\u8c61\u7684\u7c7b\u578b\u3002","title":"\u6982\u8ff0"},{"location":"cs/software/design-pattern/#_11","text":"\u7f16\u5199\u4ee3\u7801\u7684\u8fc7\u7a0b\u4e2d\uff0c\u5982\u679c\u65e0\u6cd5\u9884\u77e5\u5bf9\u8c61\u786e\u5207\u7c7b\u522b\u4ee5\u53ca\u4f9d\u8d56\u5173\u7cfb\u65f6\uff0c\u53ef\u4f7f\u7528\u5de5\u5382\u65b9\u6cd5 \u5982\u679c\u4f60\u5e0c\u671b\u7528\u6237\u80fd\u591f\u6269\u5c55\u4f60\u8f6f\u4ef6\u5e93\u6216\u6846\u67b6\u7684\u5185\u90e8\u7ec4\u4ef6\uff0c\u53ef\u4f7f\u7528\u5de5\u5382\u65b9\u6cd5 \u5982\u679c\u4f60\u5e0c\u671b\u590d\u7528\u73b0\u6709\u5bf9\u8c61\u6765\u8282\u7701\u7cfb\u7edf\u8d44\u6e90\uff0c\u800c\u4e0d\u662f\u6bcf\u6b21\u90fd\u91cd\u65b0\u521b\u5efa\u5bf9\u8c61\uff0c\u53ef\u4f7f\u7528\u5de5\u5382\u65b9\u6cd5","title":"\u5e94\u7528\u573a\u666f"},{"location":"cs/software/design-pattern/#_12","text":"","title":"\u4f18\u7f3a\u70b9"},{"location":"cs/software/design-pattern/#_15","text":"","title":"\u751f\u6210\u5668\u6a21\u5f0f"},{"location":"cs/software/design-pattern/#_16","text":"\u751f\u6210\u5668\u6a21\u5f0f \u662f\u4e00\u79cd\u521b\u5efa\u578b\u8bbe\u8ba1\u6a21\u5f0f\uff0c \u4f7f\u4f60\u80fd\u591f\u5206\u6b65\u9aa4\u521b\u5efa\u590d\u6742\u5bf9\u8c61\u3002\u8be5\u6a21\u5f0f\u5141\u8bb8\u4f60\u4f7f\u7528\u76f8\u540c\u7684\u521b\u5efa\u4ee3\u7801\u751f\u6210\u4e0d\u540c\u7c7b\u578b\u548c\u5f62\u5f0f\u7684\u5bf9\u8c61\u3002","title":"\u6982\u8ff0"},{"location":"cs/software/design-pattern/#_17","text":"\u4f7f\u7528\u751f\u6210\u5668\u6a21\u5f0f\u53ef\u907f\u514d\u201c\u91cd\u53e0\u6784\u9020\u51fd\u6570\u201d\u7684\u51fa\u73b0 \u5f53\u4f60\u5e0c\u671b\u4f7f\u7528\u4ee3\u7801\u521b\u5efa\u4e0d\u540c\u5f62\u5f0f\u7684\u4ea7\u54c1\uff08\u4f8b\u5982\u77f3\u5934\u6216\u6728\u5934\u623f\u5c4b\uff09\u65f6\uff0c\u53ef\u4f7f\u7528\u751f\u6210\u5668\u6a21\u5f0f \u4f7f\u7528\u751f\u6210\u5668\u6784\u9020\u7ec4\u5408\u6811\u6216\u5176\u4ed6\u590d\u6742\u5bf9\u8c61","title":"\u5e94\u7528\u573a\u666f"},{"location":"cs/software/design-pattern/#_18","text":"","title":"\u4f18\u7f3a\u70b9"},{"location":"cs/software/design-pattern/#_21","text":"","title":"\u539f\u578b\u6a21\u5f0f"},{"location":"cs/software/design-pattern/#_22","text":"\u539f\u578b\u6a21\u5f0f \u662f\u4e00\u79cd\u521b\u5efa\u578b\u8bbe\u8ba1\u6a21\u5f0f\uff0c \u4f7f\u4f60\u80fd\u591f\u590d\u5236\u5df2\u6709\u5bf9\u8c61\uff0c \u800c\u53c8\u65e0\u9700\u4f7f\u4ee3\u7801\u4f9d\u8d56\u5b83\u4eec\u6240\u5c5e\u7684\u7c7b\u3002","title":"\u6982\u8ff0"},{"location":"cs/software/design-pattern/#_23","text":"\u5982\u679c\u4f60\u9700\u8981\u590d\u5236\u4e00\u4e9b\u5bf9\u8c61\uff0c\u540c\u65f6\u53c8\u5e0c\u671b\u4ee3\u7801\u72ec\u7acb\u4e8e\u8fd9\u4e9b\u5bf9\u8c61\u6240\u5c5e\u7684\u5177\u4f53\u7c7b\uff0c\u53ef\u4ee5\u4f7f\u7528\u539f\u578b\u6a21\u5f0f \u5982\u679c\u5b50\u7c7b\u7684\u533a\u522b\u4ec5\u5728\u4e8e\u5176\u5bf9\u8c61\u7684\u521d\u59cb\u5316\u65b9\u5f0f\uff0c\u90a3\u4e48\u4f60\u53ef\u4ee5\u4f7f\u7528\u8be5\u6a21\u5f0f\u6765\u51cf\u5c11\u5b50\u7c7b\u7684\u6570\u91cf\u3002\u522b\u4eba\u521b\u5efa\u8fd9\u4e9b\u5b50\u7c7b\u7684\u76ee\u7684\u53ef\u80fd\u662f\u4e3a\u96f6\u521b\u5efa\u7279\u5b9a\u7c7b\u578b\u7684\u5bf9\u8c61","title":"\u5e94\u7528\u573a\u666f"},{"location":"cs/software/design-pattern/#_24","text":"","title":"\u4f18\u7f3a\u70b9"},{"location":"cs/software/design-pattern/#_27","text":"","title":"\u5355\u4f8b\u6a21\u5f0f"},{"location":"cs/software/design-pattern/#_28","text":"\u5355\u4f8b\u6a21\u5f0f \u662f\u4e00\u79cd\u521b\u5efa\u578b\u8bbe\u8ba1\u6a21\u5f0f\uff0c\u8ba9\u4f60\u80fd\u591f\u4fdd\u8bc1\u4e00\u4e2a\u7c7b\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\uff0c\u5e76\u63d0\u4f9b\u4e00\u4e2a\u8bbf\u95ee\u8be5\u5b9e\u4f8b\u7684\u5168\u5c40\u8282\u70b9\u3002","title":"\u6982\u8ff0"},{"location":"cs/software/design-pattern/#_29","text":"\u5982\u679c\u7a0b\u5e8f\u4e2d\u7684\u67d0\u4e2a\u7c7b\u5bf9\u4e8e\u6240\u6709\u5ba2\u6237\u7aef\u53ea\u6709\u4e00\u4e2a\u53ef\u7528\u7684\u5b9e\u4f8b\uff0c\u53ef\u4ee5\u4f7f\u7528\u5355\u4f8b\u6a21\u5f0f \u5982\u679c\u4f60\u9700\u8981\u66f4\u52a0\u4e25\u683c\u5730\u63a7\u5236\u5168\u5c40\u53d8\u91cf\uff0c\u53ef\u4ee5\u4f7f\u7528\u5355\u4f8b\u6a21\u5f0f","title":"\u5e94\u7528\u573a\u666f"},{"location":"cs/software/design-pattern/#_30","text":"","title":"\u4f18\u7f3a\u70b9"},{"location":"cs/software/design-pattern/#_33","text":"","title":"\u7ed3\u6784\u578b\u6a21\u5f0f"},{"location":"cs/software/design-pattern/#_34","text":"","title":"\u9002\u914d\u5668\u6a21\u5f0f"},{"location":"cs/software/design-pattern/#_35","text":"\u9002\u914d\u5668\u6a21\u5f0f \u662f\u4e00\u79cd\u7ed3\u6784\u578b\u8bbe\u8ba1\u6a21\u5f0f\uff0c \u5b83\u80fd\u4f7f\u63a5\u53e3\u4e0d\u517c\u5bb9\u7684\u5bf9\u8c61\u80fd\u591f\u76f8\u4e92\u5408\u4f5c\u3002","title":"\u6982\u8ff0"},{"location":"cs/software/design-pattern/#_36","text":"\u5f53\u4f60\u5e0c\u671b\u4f7f\u7528\u67d0\u4e2a\u7c7b\uff0c\u4f46\u662f\u5176\u63a5\u53e3\u4e0e\u5176\u4ed6\u4ee3\u7801\u4e0d\u517c\u5bb9\u65f6\uff0c\u53ef\u4ee5\u4f7f\u7528\u9002\u914d\u5668\u7c7b \u5982\u679c\u4f60\u9700\u8981\u590d\u7528\u8fd9\u6837\u4e00\u4e9b\u7c7b\uff0c\u4ed6\u4eec\u5904\u4e8e\u540c\u4e00\u7ee7\u627f\u4f53\u7cfb\uff0c\u5e76\u4e14\u5b83\u4eec\u53c8\u6709\u4e86\u989d\u5916\u7684\u4e00\u4e9b\u5171\u540c\u7684\u65b9\u6cd5\uff0c\u4f46\u662f\u8fd9\u4e9b\u5171\u540c\u7684\u65b9\u6cd5\u4e0d\u662f\u6240\u6709\u5728\u8fd9\u4e00\u7ee7\u627f\u4f53\u7cfb\u4e2d\u7684\u5b50\u7c7b\u6240\u5177\u6709\u7684\u5171\u6027","title":"\u5e94\u7528\u573a\u666f"},{"location":"cs/software/design-pattern/#_37","text":"","title":"\u4f18\u7f3a\u70b9"},{"location":"cs/software/design-pattern/#_40","text":"","title":"\u884c\u4e3a\u6a21\u5f0f"},{"location":"cs/software/piaserver/","text":"","title":"\u5e94\u7528\u670d\u52a1\u5668\u539f\u7406\u4e0e\u5b9e\u73b0"},{"location":"cs/software/sca/","text":"\u8f6f\u4ef6\u6784\u4ef6\u4e0e\u4f53\u7cfb\u7ed3\u6784 \u00b6 \u7ea6 5144 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 17 \u5206\u949f Abstract \u8fd9\u91cc\u8bb0\u5f55\u5b66\u4e60\u8fd9\u672c\u4e66\u65f6\u7684\u7b14\u8bb0\uff08\u540c\u65f6\u662f\u7814\u4e00\u7684\u5b66\u4f4d\u8bfe\uff09 \u4f5c\u8005\u662f\u6211\u7684\u5bfc\u5e08\u738b\u6620\u8f89\u6559\u6388 \u8f6f\u4ef6\u590d\u7528 \u00b6 \u8f6f\u4ef6\u590d\u7528\u7684\u6982\u5ff5 \u00b6 \u8f6f\u4ef6\u590d\u7528\u662f\u6307\u5728\u4e24\u6b21\u6216\u591a\u6b21\u4e0d\u540c\u7684\u8f6f\u4ef6\u5f00\u53d1\u8fc7\u7a0b\u4e2d\u91cd\u590d\u4f7f\u7528\u76f8\u540c\u7684\u6216\u76f8\u8fd1\u7684\u8f6f\u4ef6\u5143\u7d20\u7684\u8fc7\u7a0b\u3002\u5f15\u51fa\u4e86 \u6784\u4ef6 \u7684\u6982\u5ff5\u3002 \u8f6f\u4ef6\u590d\u7528\u53ef\u5212\u5206\u4e3a\u5982\u4e0b\u51e0\u7c7b\uff1a \u4ee3\u7801\u7684\u590d\u7528 \u8bbe\u8ba1\u7684\u590d\u7528 \u5206\u6790\u7684\u590d\u7528 \u6d4b\u8bd5\u4fe1\u606f\u7684\u590d\u7528 \u8f6f\u4ef6\u590d\u7528\u7684\u5b9e\u73b0 \u00b6 \u57fa\u672c\u95ee\u9898 \u00b6 \u5de5\u7a0b\u65b9\u9762 \u7f3a\u5c11\u80fd\u591f\u6e05\u6670\u6807\u8bc6\u53ef\u590d\u7528\u6a21\u578b\u8981\u7d20\u7684\u624b\u6bb5\u3002 \u7f3a\u5c11\u80fd\u591f\u590d\u7528\u7684\u6784\u4ef6\u3002 \u53ef\u590d\u7528\u7684\u6784\u4ef6\u7f3a\u4e4f\u7075\u6d3b\u6027\u3002 \u7f3a\u4e4f\u6267\u884c\u590d\u7528\u8fc7\u7a0b\u7684\u5de5\u5177\u3002 \u8fc7\u7a0b\u65b9\u9762 \u7ec4\u7ec7\u65b9\u9762 \u8d44\u91d1\u65b9\u9762 \u5173\u952e\u56e0\u7d20 \u00b6 \u590d\u7528\u4f9d\u8d56\u4e8e\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784 \u3002\u4f7f\u7528\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u6765\u89c4\u5212\u548c\u7ba1\u7406\u5927\u89c4\u6a21\u53ef\u590d\u7528\u7cfb\u7edf\u7684\u590d\u6742\u6027\u662f\u6700\u597d\u7684\u89e3\u51b3\u65b9\u6cd5\u3002 \u8f6f\u4ef6\u590d\u7528\u4e0e\u6784\u4ef6\u6280\u672f \u00b6 \u6784\u4ef6\u662f\u5177\u6709\u4e00\u5b9a\u529f\u80fd\u3001\u80fd\u591f\u72ec\u7acb\u5de5\u4f5c\u6216\u540c\u5176\u4ed6\u6784\u4ef6\u88c5\u914d\u8d77\u6765\u534f\u8c03\u5de5\u4f5c\u7684\u7a0b\u5e8f\u4f53\uff0c\u6784\u4ef6\u7684\u4f7f\u7528\u540c\u5b83\u7684\u5f00\u53d1\u3001\u751f\u4ea7\u65e0\u5173\u3002\u6574\u4e2a\u6784\u4ef6\u9690\u85cf\u4e86\u5177\u4f53\u7684\u5b9e\u73b0\uff0c\u53ea\u7528\u63a5\u53e3\u5bf9\u5916\u63d0\u4f9b\u670d\u52a1\u3002 \u4ece\u5916\u90e8\u5f62\u6001\u770b\uff1a \u72ec\u7acb\u800c\u6210\u719f\u7684\u6784\u4ef6 \u6709\u9650\u5236\u7684\u6784\u4ef6 \u9002\u7528\u6027\u6784\u4ef6 \u88c5\u914d\u7684\u6784\u4ef6 \u53ef\u4fee\u6539\u7684\u6784\u4ef6 \u6784\u4ef6\u6280\u672f \u00b6 \u8f6f\u4ef6\u5f00\u53d1\u4e2d\u7684\u95ee\u9898 \u00b6 \u6280\u672f\u4e0e\u9700\u6c42\u53d8\u5316\u7684\u95ee\u9898\u3002 \u91cd\u590d\u4e0d\u5fc5\u8981\u7684\u5de5\u4f5c\u95ee\u9898\u3002 \u5e94\u7528\u96c6\u6210\u7684\u95ee\u9898\u3002 \u8f6f\u4ef6\u96be\u4ee5\u7ef4\u62a4\u7684\u95ee\u9898\u3002 \u8f6f\u4ef6\u8d28\u91cf\u548c\u6210\u672c\u6709\u6548\u6027\u95ee\u9898\u7b49\u3002 \u6784\u4ef6\u6280\u672f\u662f\u76ee\u524d\u652f\u6301\u8f6f\u4ef6\u590d\u7528\u7684\u6838\u5fc3\u6280\u672f\u3002\u7814\u7a76\u5185\u5bb9\u5305\u62ec\uff1a \u6784\u4ef6\u83b7\u53d6\uff1a\u6709\u76ee\u7684\u7684\u6784\u4ef6\u751f\u4ea7\u548c\u4ece\u5df2\u6709\u7cfb\u7edf\u4e2d\u6316\u6398\u63d0\u53d6\u6784\u4ef6\u3002 \u7814\u7a76\u6a21\u578b\uff1a\u7814\u7a76\u6784\u4ef6\u7684\u672c\u8d28\u7279\u5f81\u548c\u6784\u4ef6\u95f4\u7684\u5173\u7cfb\u3002 \u6784\u4ef6\u63cf\u8ff0\u8bed\u8a00\uff1a\u4ee5\u6784\u4ef6\u6a21\u578b\u4e3a\u57fa\u7840\uff0c\u89e3\u51b3\u6784\u4ef6\u7684\u7cbe\u786e\u63cf\u8ff0\u3001\u7406\u89e3\u3001\u68c0\u7d20\u53ca\u7ec4\u88c5\u95ee\u9898\u3002 \u6784\u4ef6\u5206\u7c7b\u4e0e\u68c0\u7d22\uff1a\u7814\u7a76\u6784\u4ef6\u5206\u7c7b\u7b56\u7565\u3001\u7ec4\u7ec7\u6a21\u5f0f\u53ca\u68c0\u7d20\u7b56\u7565\uff0c\u5efa\u7acb\u6784\u4ef6\u5e93\u7cfb\u7edf\uff0c\u652f\u6301\u6784\u4ef6\u7684\u6709\u6548\u7ba1\u7406\u3002 \u6784\u4ef6\u590d\u5408\u7ec4\u88c5\uff1a\u5728\u6784\u4ef6\u6a21\u578b\u7684\u57fa\u7840\u4e0a\u7814\u7a76\u6784\u4ef6\u7ec4\u88c5\u673a\u5236\uff0c\u5305\u62ec\u6e90\u4ee3\u7801\u7ea7\u7684\u7ec4\u88c5\u548c\u57fa\u4e8e\u6784\u4ef6\u5bf9\u8c61\u4e92\u64cd\u4f5c\u6027\u7684\u7ec4\u88c5\u3002 \u6807\u51c6\u5316\uff1a\u6784\u4ef6\u6a21\u578b\u7684\u6807\u51c6\u5316\u548c\u6784\u4ef6\u5e93\u7cfb\u7edf\u7684\u6807\u51c6\u5316\u7b49\u3002 \u8f6f\u4ef6\u6784\u4ef6\u7684\u6982\u5ff5 \u00b6 \u8f6f\u4ef6\u6210\u5206\u5305\u62ec\u7a0b\u5e8f\u4ee3\u7801\u3001\u6d4b\u8bd5\u7528\u4f8b\u3001\u8bbe\u8ba1\u6587\u6863\u3001\u8bbe\u8ba1\u8fc7\u7a0b\u3001\u9700\u6c42\u5206\u6790\u6587\u6863\uff0c\u751a\u81f3\u9886\u57df\u77e5\u8bc6\uff0c\u901a\u5e38\u628a\u8fd9\u79cd\u53ef\u590d\u7528\u7684\u8f6f\u4ef6\u6210\u5206\u79f0\u4e3a\u8f6f\u4ef6\u6784\u4ef6\uff0c\u7b80\u79f0\u8f6f\u6784\u4ef6\u6216\u8005\u6784\u4ef6\u3002\u53ef\u590d\u7528\u7684\u8f6f\u4ef6\u5143\u7d20\u8d8a\u5927\uff0c\u6211\u4eec\u5c31\u8bf4\u590d\u7528\u7684\u7c92\u5ea6(Granularity)\u8d8a\u5927\u3002 \u6784\u4ef6\u662f\u9884\u5148\u6784\u5efa\u7684\u3002 \u6784\u4ef6\u662f\u9ed1\u76d2\u7684\u3002 \u6784\u4ef6\u662f\u53ef\u5206\u79bb\u7684\u3002 \u6784\u4ef6\u80fd\u7528\u4e8e\u7ec4\u88c5\u548c\u90e8\u7f72\u3002 \u6784\u4ef6\u9700\u8981\u79f0\u4e3a\u6784\u4ef6\u5bb9\u5668\u6280\u672f\u7684\u652f\u6301\u3002 \u4e00\u4e2a\u5b8c\u6574\u7684\u6784\u4ef6\u5e94\u5305\u542b6\u4e2a\u8981\u7d20\uff1a \u53d7\u7ea6\u675f\u7684\u6784\u4ef6\u6807\u51c6\uff1a\u7b26\u5408\u67d0\u79cd\u6784\u4ef6\u6a21\u578b\u3002 \u89c4\u683c\u8bf4\u660e\uff1a\u6784\u4ef6\u63d0\u4f9b\u670d\u52a1\u7684\u62bd\u8c61\u63cf\u8ff0\uff0c\u7528\u4f5c\u670d\u52a1\u7684\u5ba2\u6237\u65b9\u548c\u63d0\u4f9b\u65b9\u4e4b\u95f4\u7684\u5951\u7ea6\u3002 \u5b9e\u73b0\uff1a\u5fc5\u987b\u7b26\u5408\u89c4\u683c\u8bf4\u660e\uff0c\u5404\u81ea\u5b9e\u73b0\u3002 \u5305\u88c5\u65b9\u6cd5\uff1a\u6309\u4e0d\u540c\u7684\u65b9\u5f0f\u5206\u7ec4\u6765\u63d0\u4f9b \u4e00\u5957\u53ef\u4ee5\u66ff\u6362\u7684\u670d\u52a1(\u5305)\u3002 \u6ce8\u518c\uff1a\u53ef\u5728\u6784\u4ef6\u652f\u6301\u73af\u5883\u4e2d\u6ce8\u518c\u3002 \u90e8\u7f72\u65b9\u6cd5\uff1a\u6784\u4ef6\u53ef\u4ee5\u90e8\u7f72\u591a\u4e2a\u5b9e\u4f8b\u3002 \u8f6f\u4ef6\u6784\u4ef6\u7684\u89c4\u683c\u8bf4\u660e \u00b6 \u6784\u4ef6\u7684\u540d\u79f0\u4e0e\u7b80\u77ed\u63cf\u8ff0\u3002 \u6784\u4ef6\u670d\u52a1\u3002 \u6784\u4ef6\u63a5\u53e3\u4fe1\u606f\u3002 \u6240\u9700\u7684\u63a5\u53e3\u3002 \u53d1\u5e03\u548c\u63a5\u53d7\u7684\u4e8b\u4ef6\u3002 \u6784\u4ef6\u7279\u5f81\u3002 \u9644\u52a0\u4fe1\u606f\u3002 \u8f6f\u4ef6\u6784\u4ef6\u63a5\u53e3 \u00b6 \u6784\u4ef6\u5fc5\u9886\u5bf9\u5176\u6240\u63d0\u4f9b\u7684\u670d\u52a1\u8fdb\u884c\u62bd\u8c61\u63cf\u8ff0\uff0c\u4ee5\u4f5c\u4e3a\u670d\u52a1\u7684\u5bb9\u6237\u65b9\u548c\u63d0\u4f9b\u65b9\u4e4b\u95f4\u7684\u5951\u7ea6\uff0c\u8fd9\u5c31\u662f\u6784\u4ef6\u63a5\u53e3\u3002 \u8f6f\u4ef6\u6784\u4ef6\u6a21\u578b \u00b6 \u6784\u4ef6\u6a21\u578b\u7684\u6982\u5ff5 \u00b6 \u6784\u4ef6\u6a21\u578b\u5b9a\u4e49\u4e86\u4ec0\u4e48\u662f\u6784\u4ef6\u3001\u6784\u4ef6\u7684\u4f9d\u636e\u3001\u5982\u4f55\u4f7f\u7528\u5176\u4ed6\u6784\u4ef6\u63d0\u4f9b\u7684\u670d\u52a1\u7b49\u3002\u5c07\u6784\u4ef6\u7684\u89c4\u683c\u8bf4\u660e\u548c\u5177\u4f53\u5b9e\u73b0\u5206\u79bb\uff0c\u4f9d\u9760\u6784\u4ef6\u5b9e\u73b0\u7684\u5177\u4f53\u6a21\u5f0f\u6765\u63a8\u5bfc\u51fa\u6784\u4ef6\u6240\u63d0\u4f9b\u7684\u670d\u52a1\uff0c\u53ef\u4ee5\u6784\u9020\u4e00\u4e2a\u6784\u4ef6\u6a21\u578b\u3002 \u4f7f\u7528\u4e2d\u95f4\u4ef6\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u6784\u4ef6\u4e4b\u95f4\u8fdb\u884c\u66f4\u597d\u5730\u901a\u4fe1\u3002\u5982\u6784\u4ef6\u4e4b\u95f4\u76f4\u63a5\u8fdb\u884c\u901a\u4fe1\uff0c\u5f53\u6784\u6210\u7cfb\u7edf\u7684\u6784\u4ef6\u6570\u91cf\u5e9e\u5927\u65f6\uff0c\u5176\u590d\u6742\u7a0b\u5ea6\u8fc5\u901f\u63d0\u9ad8\uff1b\u5982\u80fd\u5f15\u4eba\u4e2d\u4ecb\u5c42 (\u4e2d\u95f4\u4ef6)\uff0c\u5219\u53ef\u5f88\u597d\u5730\u907f\u514d\u6784\u4ef6\u95f4\u590d\u6742\u7684\u4ea4\u4e92\u3002\u5982\u4e0b\u56fe\u6240\u793a\uff1a \u9752\u9e1f\u8f6f\u4ef6\u6784\u4ef6\u6a21\u578b \u00b6 \u9752\u9e1f\u8f6f\u4ef6\u6784\u4ef6\u6a21\u578b\u56fd\u5185\u8bb8\u591a\u5b66\u8005\u5728\u6784\u4ef6\u6a21\u578b\u7684\u7814\u7a76\u65b9\u9762\u505a\u4e86\u4e0d\u5c11\u7684\u5de5\u4f5c\uff0c\u5176\u4e2d\u8f83\u4e3a\u7a81\u51fa\u7684\u662f\u5317\u4eac\u5927\u5b66\u6768\u8299\u6e05\u9662\u58eb\u7b49\u4eba\u63d0\u51fa\u7684\u201c\u9752\u9e1f\u8f6f\u4ef6\u6784\u4ef6\u6a21\u578b(JBCOM)\u201d\u3002\u5b83\u7531\u5916\u90e8\u63a5\u53c8\u4e0e\u5185\u90e8\u7ed3\u6784\u4e24\u90e8\u5206\u7ec4\u6210\u3002\u5982\u4e0b\u56fe\u6240\u793a\uff1a \u6784\u4ef6\u7684\u5916\u90e8\u63a5\u53e3\u662f\u6307\u6784\u4ef6\u5411\u5176\u590d\u7528\u8005\u63d0\u4f9b\u7684\u57fa\u672c\u4fe1\u606f\uff0c\u5305\u62ec:\u6784\u4ef6\u540d\u79f0\u3001\u529f\u80fd\u63cf\u8ff0\u3001\u5bf9\u5916\u529f\u80fd\u63a5\u53e3\uff0c\u6240\u9700\u670d\u52a1\u7684\u6784\u4ef6\u548c\u53c2\u6570\u5316\u5c5e\u6027\u7b49\u3002\u5916\u90e8\u63a5\u53e3\u662f\u6784\u4ef6\u4e0e\u5916\u754c\u7684\u4e00\u7ec4\u4ea4\u4e92\u70b9\uff0c\u8bf4\u660e\u4e86\u6784\u4ef6\u6240\u63d0\u4f9b\u7684\u90a3\u4e9b\u670d\u52a1(\u6d88\u606f\u3001\u64cd\u4f5c\u548c\u53d8\u91cf)\u3002 \u6784\u4ef6\u7684\u5185\u90e8\u7ed3\u6784\u5305\u62ec\u4e24\u65b9\u9762\u7684\u5185\u5bb9:\u5185\u90e8\u6210\u5458\u4ee5\u53ca\u5185\u90e8\u6210\u5458\u4e4b\u95f4\u7684\u5173\u7cfb\u3002\u5176\u4e2d\uff0c\u5185\u90e8\u6210\u5458\u5305\u62ec\u5177\u4f53\u6210\u5458\u4e0e\u865a\u62df\u6210\u5458\uff0c\u800c\u6210\u5458\u5173\u7cfb\u5305\u62ec\u6210\u5458\u4e4b\u95f4\u7684\u4e92\u8054\uff0c\u4ee5\u53ca\u5185\u90e8\u6210\u5458\u4e0e\u5916\u90e8\u63a5\u53e3\u4e4b\u95f4\u7684\u4e92\u8054\u3002 \u6784\u4ef6\u6a21\u578b\u7684\u63cf\u8ff0\u65b9\u6cd5 \u00b6 \u6784\u4ef6::=\u3008\u6784\u4ef6\u89c4\u7ea6\uff0c\u6784\u4ef6\u5b9e\u73b0\u3009 \u6784\u4ef6\u89c4\u7ea6::=\u3008\u63a5\u53c8\u90e8\u5206\uff0c\u7ed3\u6784\u90e8\u5206\u3009 \u63a5\u53e3\u90e8\u5206::=\u3008\u5bf9\u5916\u63d0\u4f9b\u7684\u529f\u80fd\u96c6\u5408\uff0c\u5bf9\u5916\u8bf7\u6c42\u7684\u529f\u80fd\u96c6\u5408\uff0c\u670d\u52a1\u96c6\u5408\u3009 \u670d\u52a1::=\u3008\u5bf9\u5916\u63d0\u4f9b\u7684\u529f\u80fd\u96c6\u5408\uff0c\u5bf9\u5916\u8bf7\u6c42\u7684\u529f\u80fd\u96c6\u5408\u3009 \u7ed3\u6784\u90e8\u5206::=\u3008\u539f\u5b50\u6784\u4ef6\u7ed3\u6784\u3009|\u3008\u590d\u5408\u6784\u4ef6\u7ed3\u6784\u3009 \u539f\u5b50\u6784\u4ef6\u7ed3\u6784::=\u3008\u6784\u4ef6\u5b9e\u73b0\u7684\u5f15\u7528\u3009 \u590d\u5408\u6784\u4ef6\u7ed3\u6784::=\u3008\u5f15\u7528\u7684\u6784\u4ef6\u7c7b\u578b\uff0c\u5b9e\u4f8b\u58f0\u660e\uff0c\u5b9e\u4f8b\u8fde\u63a5\uff0c\u6620\u5c04\u3009 eg. \u7f16\u8bd1\u5668\u590d\u5408\u6784\u4ef6\u5b9e\u4f8b\u3002 \u8f6f\u4ef6\u6784\u4ef6\u7684\u6df1\u5c42\u7406\u89e3 \u00b6 \u6784\u4ef6\u7684\u7c92\u5ea6 \u6784\u4ef6\u7684\u57fa\u7840\u8bbe\u65bd \u6784\u4ef6\u7684\u83b7\u53d6 \u6784\u4ef6\u7684\u7ba1\u7406 \u7ec4\u88c5\u4e0e\u90e8\u7f72 \u9762\u5411\u6784\u4ef6 \u00b6 \u9762\u5411\u6784\u4ef6\u7684\u6982\u5ff5 \u00b6 \u901a\u8fc7\u5206\u6790\u3001\u8bbe\u8ba1\u548c\u5b9e\u73b0\uff0c\u6765\u5f97\u5230\u6240\u9700\u7684\u6784\u4ef6 \u6784\u4ef6\u7684\u5206\u7c7b \u00b6 \u6839\u636e\u8f6f\u4ef6 3 \u5c42\u6846\u67b6\u7684\u6784\u4ef6\u5206\u7c7b \u8868\u793a\u5c42 \u4e1a\u52a1\u5c42 \u6570\u636e\u5c42 \u636e\u6b64\u6846\u67b6\uff0c\u6784\u4ef6\u53ef\u4ee5\u88ab\u5206\u4e3a 3 \u7c7b\uff1a\u5e94\u7528\u8f6f\u4ef6\u3001\u4e1a\u52a1\u6784\u4ef6\u548c\u6570\u636e\u6784\u4ef6 \u4e1a\u52a1\u6784\u4ef6\u7684\u83b7\u53d6\u60c5\u51b5 \u5b9a\u4e49\u4e1a\u52a1\u5bf9\u8c61 \u786e\u5b9a\u63a7\u5236\u903b\u8f91\uff08\u4e1a\u52a1\u8fc7\u7a0b\uff09 \u786e\u5b9a\u4e1a\u52a1\u5bf9\u8c61\u4e0e\u63a7\u5236\u903b\u8f91\u4e4b\u95f4\u7684\u4ea4\u4e92 \u533a\u5206\u516c\u53f8\u7684\u4e1a\u52a1\u903b\u8f91\u548c\u7279\u5b9a\u90e8\u95e8\u7684\u4e1a\u52a1\u903b\u8f91 \u5c06\u4e1a\u52a1\u5bf9\u8c61\u548c\u63a7\u5236\u903b\u8f91\u5206\u914d\u5230\u76f8\u5e94\u7684\u4e1a\u52a1\u6784\u4ef6\u4e2d\u53bb \u57fa\u4e8e\u6784\u4ef6\u7c92\u5ea6\u5927\u5c0f\u7684\u6784\u4ef6\u5206\u7c7b \u53ef\u5206\u4e3a\uff1a\u5927\u7c92\u5ea6\u7684\u5e94\u7528\u6784\u4ef6\u3001\u7528\u6237\u4efb\u52a1\u6784\u4ef6\u3001\u6279\u5904\u7406\u6784\u4ef6\u548c\u5b50\u4efb\u52a1\u6784\u4ef6 \u6784\u4ef6\u7684\u8bbe\u8ba1\u4e0e\u5b9e\u73b0 \u00b6 \u6784\u4ef6\u63a5\u53e3\u5b9a\u4e49\u7684\u539f\u5219 \u00b6 \u6784\u4ef6\u63a5\u53e3\u7684\u5b9a\u4e49\u7684\u57fa\u672c\u539f\u5219\uff1a \u5b9a\u4e49\u4e00\u4e9b\u4e0d\u53d8\u7684\u63a5\u53e3 \u5b9a\u4e49\u81ea\u63cf\u8ff0\u7684\u63a5\u53e3 \u5b9a\u4e49\u5143\u6570\u636e\u6027\u8d28\u7684\u63a5\u53e3 \u6784\u4ef6\u8bbe\u8ba1\u6210\u53ef\u5b9a\u5236\u7684 \u539f\u5b50\u6784\u4ef6\u7684\u5236\u4f5c \u00b6 \u539f\u5b50\u6784\u4ef6 Atom \u662f\u6700\u5c0f\u7c92\u5ea6\u7684\u6784\u4ef6\uff0c\u8be5\u6784\u4ef6\u5728\u529f\u80fd\u7b49\u65b9\u9762\u5177\u6709\u4e0d\u53ef\u518d\u62c6\u5206\u7684\u6027\u8d28\u3002 \u5f53\u4e00\u4e2a\u539f\u5b50\u6784\u4ef6\u7684\u5b9e\u4f53\u5bf9\u5e94\u5355\u4e2a\u5bf9\u8c61\u65f6\uff0c\u53ef\u4ee5\u79f0\u8fd9\u4e2a\u6784\u4ef6\u662f\u5355\u5bf9\u8c61\u6784\u4ef6\uff0c\u5236\u4f5c\u6d41\u7a0b\u5982\u4e0b\uff1a \u5b9a\u4e49\u63a5\u53e3\u89c4\u7ea6\u3002 \u5236\u4f5c\u6784\u4ef6\u5b9e\u4f53\u3002 \u5f53\u4e00\u4e2a\u539f\u5b50\u6784\u4ef6\u5bf9\u5e94\u591a\u4e2a\u534f\u4f5c\u5bf9\u8c61\u65f6\uff0c\u5236\u4f5c\u6d41\u7a0b\u5982\u4e0b\uff1a \u9700\u8981\u5f15\u5165\u4e00\u4e2a\u63a7\u5236\u5bf9\u8c61\u3002 \u5b9a\u4e49\u6784\u4ef6\u63a5\u53e3\u7684\u89c4\u7ea6\u90e8\u5206\u3002 \u5236\u4f5c\u6784\u4ef6\u5b9e\u4f53\u3002 \u590d\u5408\u6784\u4ef6\u7684\u5236\u4f5c \u00b6 \u590d\u5408\u6784\u4ef6 Assemble \u662f\u7531\u539f\u5b50\u6784\u4ef6\u6216\u8005\u590d\u5408\u6784\u4ef6\u7ec4\u88c5\u800c\u6210\u7684\u3002 \u5236\u4f5c\u6d41\u7a0b\u5982\u4e0b\uff1a \u5b9a\u4e49\u6784\u4ef6\u7684\u63a5\u53e3\u89c4\u7ea6\u90e8\u5206 \u786e\u5b9a\u6240\u5305\u542b\u7684\u6210\u5458\u6784\u4ef6 \u5efa\u7acb\u5185\u90e8\u7684\u6210\u5458\u6784\u4ef6\u4e4b\u95f4\u7684\u63a5\u53e3\u8fde\u63a5\u5173\u7cfb \u5c06\u590d\u5408\u6784\u4ef6\u5bf9\u5916\u63d0\u4f9b\u548c\u8981\u6c42\u7684\u529f\u80fd\u6620\u5c04\u5230\u5185\u90e8\u6210\u5458\u6784\u4ef6\u76f8\u5e94\u7684\u529f\u80fd\u4e0a \u5728\u5efa\u7acb\u5185\u90e8\u6210\u5458\u4e4b\u95f4\u7684\u8fde\u63a5\u5173\u7cfb\u4ee5\u53ca\u590d\u5408\u6784\u4ef6\u548c\u6210\u5458\u6784\u4ef6\u7684\u529f\u80fd\u6620\u5c04\u65f6\uff0c\u9075\u5faa\u4e00\u4e0b\u89c4\u5219\uff1a \u6210\u5458\u6784\u4ef6\u5bf9\u5916\u8981\u6c42\u7684\u529f\u80fd\u53ea\u80fd\u7531\u4e00\u4e2a\u63d0\u4f9b\u8005\u63d0\u4f9b \u6210\u5458\u6784\u4ef6\u5bf9\u5916\u63d0\u4f9b\u7684\u529f\u80fd\u53ef\u4ee5\u6709\u591a\u4e2a\u4f7f\u7528\u8005 \u590d\u5408\u6784\u4ef6\u5bf9\u5916\u8981\u6c42\u7684\u529f\u80fd\u53ef\u4ee5\u6620\u5c04\u5230\u591a\u4e2a\u6210\u5458\u6784\u4ef6\u7684\u529f\u80fd\u4e0a \u590d\u5408\u6784\u4ef6\u5bf9\u5916\u63d0\u4f9b\u7684\u529f\u80fd\u53ea\u80fd\u6620\u5c04\u5230\u4e00\u4e2a\u6210\u5458\u6784\u4ef6\u7684\u529f\u80fd\u4e0a \u6784\u4ef6\u7684\u7ba1\u7406\u4e0e\u7ef4\u62a4 \u00b6 \u6784\u4ef6\u5e93\u662f\u5bf9\u6784\u4ef6\u5b9e\u65bd\u5206\u7c7b\u548c\u7ba1\u7406\u7684\u673a\u6784\u3002 \u6784\u4ef6\u5e93\u7684\u7ec4\u7ec7 \u00b6 \u6784\u4ef6\u5e93\u7406\u8bba\u7814\u7a76\u7684\u91cd\u70b9\u662f\u6784\u4ef6\u5206\u7c7b\u4e0e\u68c0\u7d22\uff0c\u5373\u7814\u7a76\u6784\u4ef6\u5206\u7c7b\u7b56\u7565\u3001\u7ec4\u7ec7\u6a21\u5f0f\u3001\u68c0\u7d22\u624b\u6bb5\u548c\u6784\u4ef6\u76f8\u4f3c\u6027\u5206\u6790\u7b49\u3002 \u9886\u57df\u4e0a\u6784\u4ef6\u5e93\u6ee1\u8db3\u7684\u6761\u4ef6\uff1a \u9886\u57df\u5b8c\u6574\u6027 \u9886\u57df\u62bd\u8c61\u6027 \u9886\u57df\u6807\u51c6\u5316 \u6784\u4ef6\u5e93\u7684\u5206\u7c7b\u6a21\u5f0f \u00b6 \u5173\u952e\u5b57\u5206\u7c7b\u6cd5 \u8d85\u6587\u672c\u7ec4\u7ec7\u6cd5 \u523b\u9762\u5206\u7c7b\u6cd5 \u7531\u4e00\u7ec4\u63cf\u8ff0\u6784\u4ef6\u672c\u8d28\u7279\u5f81\u7684\u523b\u9762\u7ec4\u6210\uff0c\u6bcf\u4e2a\u523b\u9762\u4ece\u4e0d\u540c\u7684\u89d2\u5ea6\u5bf9\u6784\u4ef6\u8fdb\u884c\u5206\u7c7b\u3002 \u4ece\u8868\u793a\u7684\u89d2\u5ea6\u6765\u770b\uff0c\u523b\u9762\u662f\u4e00\u9897\u6709\u5411\u6811\uff0c\u6839\u8282\u70b9\u7684\u503c\u662f\u8be5\u523b\u9762\u7684\u540d\u79f0\uff0c\u6839\u8282\u70b9\u6240\u6709\u5b50\u6811\u6784\u6210\u7684\u68ee\u6797\u79f0\u4e3a\u672f\u8bed\u7a7a\u95f4 \u7279\u70b9\uff1a \u5bf9\u6784\u4ef6\u8fdb\u884c\u4e86\u591a\u89c6\u89d2\u4e0b\u7684\u5206\u7c7b\u63cf\u8ff0 \u6784\u4ef6\u5206\u7c7b\u63cf\u8ff0\u7684\u672f\u8bed\u7a7a\u95f4\u6613\u4e8e\u4fee\u6539\u548c\u7ef4\u62a4 \u57fa\u4e8e\u6784\u4ef6 \u00b6 \u6784\u4ef6\u7ec4\u88c5 \u00b6 \u6784\u4ef6\u7ec4\u88c5\u5c31\u662f\u786e\u5b9a\u6784\u4ef6\u6240\u63d0\u4f9b\u7684\u670d\u52a1\u4e0e\u63a5\u53e3\u4e4b\u95f4\u7684\u5339\u914d\u548c\u6620\u5c04\uff0c\u5e76\u63d0\u4f9b\u6ee1\u8db3\u5373\u5c06\u6216\u5c06\u6765\u90e8\u7f72\u7684\u7ea6\u675f\u6761\u4ef6\u3002 \u6784\u4ef6\u7ec4\u88c5\u4e2d\u7684\u95ee\u9898 \u00b6 \u4efb\u4f55\u57fa\u4e8e\u6784\u4ef6\u7684\u5f00\u53d1\u5e94\u7b26\u5408\u4ee5\u4e0b\u6784\u4ef6\uff1a \u8981\u6e05\u6670\u5730\u5206\u79bb\u6784\u4ef6\u7684\u89c4\u683c\u8bf4\u660e\u548c\u8bbe\u8ba1\u5b9e\u73b0 \u91cd\u70b9\u5173\u6ce8\u4e8e\u63a5\u53e3\u7684\u5b9e\u73b0\u65b9\u6cd5 \u5f62\u5f0f\u5730\u63cf\u8ff0\u6784\u4ef6\u7684\u8bed\u4e49\uff0c\u4e3b\u8981\u662f\u5bf9\u6784\u4ef6\u884c\u4e3a\u7684\u63cf\u8ff0\uff0c\u5176\u6838\u5fc3\u662f\u64cd\u4f5c\u7279\u5f81\u7684\u8bed\u4e49\u7ec6\u8282 \u4e25\u683c\u5730\u8bb0\u5f55\u7ec6\u5316\u8fc7\u7a0b\uff0c\u5e76\u4e14\u52a0\u4ee5\u9a8c\u8bc1 \u4ece\u6280\u672f\u89d2\u5ea6\u770b\uff0c\u6784\u4ef6\u7ec4\u88c5\u8fc7\u7a0b\u4e2d\u9700\u8003\u8651\u7684\u95ee\u9898\uff1a \u6bcf\u4e2a\u6784\u4ef6\u6ee1\u8db3\u5176\u4ed6\u6784\u4ef6\u7684\u9650\u5236\u6761\u4ef6\u95ee\u9898 \u6784\u4ef6\u7ec4\u88c5\u4e2d\u7684\u63a5\u53e3\u5339\u914d\u548c\u6620\u5c04\u95ee\u9898 \u6784\u4ef6\u7684\u5305\u88c5\u95ee\u9898 \u6784\u4ef6\u7ec4\u88c5\u7684\u65b9\u6cd5\u4e0e\u6280\u672f \u00b6 \u5b9a\u5236 \u8bbe\u7f6e\u53c2\u6570\u503c \u5b8c\u6210\u9700\u8981\u7528\u6237\u5b9a\u5236\u7684\u4ee3\u7801 \u6709\u65f6\u5019\u9700\u8981\u91cd\u65b0\u7f16\u8bd1\u6784\u4ef6 \u5305\u88c5 \u9002\u914d \u9002\u914d\u5668 \u9002\u914d\u5668\u4f4d\u4e8e\u4e24\u4e2a\u6784\u4ef6\u4e4b\u95f4\uff0c\u7528\u4ee5\u8f6c\u6362\u4e24\u4e2a\u6784\u4ef6\u5bf9\u63a5\u53e3\u7684\u4e0d\u540c\u7406\u89e3\uff0c\u662f\u8bf7\u6c42\u8005\u548c\u88ab\u8bf7\u6c42\u8005\u4e4b\u95f4\u7684\u6620\u5c04 \u9002\u914d\u5668\u672c\u8eab\u4e0d\u5305\u542b\u8868\u793a\u5c42\u3001\u4e1a\u52a1\u5c42\u548c\u6570\u636e\u8bbf\u95ee\u5c42\u7684\u903b\u8f91\uff0c\u4e5f\u4e0d\u80fd\u6269\u5c55\u6784\u4ef6\u7684\u529f\u80fd\uff08\u4e0e\u5305\u88c5\u4e0d\u540c\uff09 \u9002\u914d\u5668\u4e0d\u662f\u6784\u4ef6\uff0c\u4e0d\u5c5e\u4e8e\u88ab\u9002\u914d\u7684\u4e24\u4e2a\u6784\u4ef6\u7684\u4efb\u4f55\u4e00\u4e2a\uff0c\u4efb\u4f55\u4e00\u4e2a\u6784\u4ef6\u7684\u4e0d\u5b58\u5728\u5c06\u5bfc\u81f4\u9002\u914d\u5668\u7684\u6d88\u5931 \u9a8c\u8bc1\u548c\u9519\u8bef\u5904\u7406\u529f\u80fd \u5b89\u5168\u6027 \u6784\u4ef6\u7ec4\u88c5\u7684\u5185\u5bb9 \u00b6 \u6784\u4ef6\u7ec4\u88c5\u7684\u5b9e\u65bd\u5185\u5bb9\uff1a \u5f3a\u5236\u5b9e\u73b0\u6784\u4ef6\u7684\u9650\u5236\u6761\u4ef6 \u5904\u7406\u529f\u80fd\u548c\u6570\u636e\u7684\u4e0d\u5339\u914d \u7ba1\u7406\u6784\u4ef6\u95f4\u7684\u5173\u7cfb \u6784\u4ef6\u4e4b\u95f4\u7684\u5173\u7cfb\u7c7b\u578b\u5305\u62ec\u62e5\u6709\u5173\u7cfb\u548c\u5916\u90e8\u5173\u7cfb\u3002\u4f46\u4ece\u5173\u7cfb\u7684\u8868\u793a\u89d2\u5ea6\u6765\u770b\uff0c\u53ef\u5206\u4e3a\u76f4\u63a5\u94fe\u63a5\u548c\u95f4\u63a5\u94fe\u63a5\u3002 \u6784\u4ef6\u90e8\u7f72 \u00b6 \u63d0\u4f9b\u6784\u4ef6\u8fd0\u884c\u65f6\u7684\u914d\u7f6e\u6570\u636e \u63d0\u4f9b\u90e8\u7f72\u65f6\u7528\u5230\u7684\u6784\u4ef6\u5185\u5efa\u914d\u7f6e\u6216\u5b9a\u5236\u670d\u52a1 \u63d0\u4f9b\u6784\u4ef6\u7ec4\u88c5\u7684\u8f85\u52a9\u73af\u5883 \u57fa\u4e8e\u6784\u4ef6\u7684\u8f6f\u4ef6\u914d\u7f6e\u7ba1\u7406 \u00b6 \u8f6f\u4ef6\u914d\u7f6e\u7ba1\u7406 SCM \u662f\u6307\u4e00\u5957\u6309\u89c4\u5219\u7ba1\u7406\u8f6f\u4ef6\u5f00\u53d1\u3001\u7ef4\u62a4\uff0c\u4ee5\u53ca\u5176\u4e2d\u5404\u79cd\u4e2d\u95f4\u8f6f\u4ef6\u4ea7\u54c1\u7684\u65b9\u6cd5\u3002 \u914d\u7f6e\u8bc6\u522b \u53d8\u5316\u63a7\u5236 \u72b6\u6001\u8bb0\u5f55\u62a5\u544a \u5ba1\u8ba1 \u9886\u57df\u5de5\u7a0b \u00b6 \u9886\u57df\u5de5\u7a0b\u4e0e\u5e94\u7528\u5de5\u7a0b \u00b6 \u5e94\u7528\u5de5\u7a0b \uff1a\u9488\u5bf9\u4e00\u7ec4\u7279\u6709\u7684\u9700\u6c42\uff0c\u4ea7\u751f\u4e00\u4e2a\u7279\u5b9a\u7684\u89e3\u51b3\u65b9\u6848 \u9886\u57df\u5de5\u7a0b \uff1a\u9488\u5bf9\u4e00\u4e2a\u9886\u57df\u4e2d\u7684\u6240\u6709\u7cfb\u7edf\uff0c\u800c\u4e0d\u5c40\u9650\u4e8e\u67d0\u4e2a\u7279\u5b9a\u7684\u7cfb\u7edf \u4e0e\u5e94\u7528\u5de5\u7a0b\u76f8\u6bd4 \uff1a\u9886\u57df\u5de5\u7a0b\u5904\u4e8e\u4e00\u4e2a\u8f83\u9ad8\u7684\u62bd\u8c61\u7ea7\u522b\u4e0a \u9886\u57df\u5de5\u7a0b\u7684\u6784\u6210 \u00b6 \u7ec4\u6210\uff1a\u9886\u57df\u5206\u6790\u3001\u9886\u57df\u8bbe\u8ba1\u3001\u9886\u57df\u5b9e\u73b0 \u53ef\u590d\u7528\u8d44\u4ea7\uff1a\u9886\u57df\u5206\u6790\u3001\u9886\u57df\u8bbe\u8ba1\u3001\u8d44\u4ea7\u83b7\u53d6\u3001\u8d44\u4ea7\u5206\u7c7b\u3001\u8d44\u4ea7\u7ef4\u62a4 \u5e94\u7528\u5de5\u7a0b\u7684\u6784\u6210 \u00b6 \u7ec4\u6210\uff1a\u4ea7\u54c1\u7a7a\u95f4\u3001\u6784\u4ef6\u4e0e\u4f53\u7cfb\u7ed3\u6784\u3001\u751f\u4ea7\u8ba1\u5212\u3001\u9700\u6c42\u3001\u4ea7\u54c1\u3001\u7ba1\u7406 \u9886\u57df\u5de5\u7a0b\u4e0e\u5e94\u7528\u5de5\u7a0b\u7684\u5173\u7cfb \u00b6 \u9886\u57df\u5171\u6027\u4e0e\u53d8\u5316\u6027 \u00b6 \u53d8\u5316\u6027\u7684\u5206\u7c7b \u53d8\u5316\u6027\u7ed1\u5b9a \u53d8\u5316\u6027\u63a7\u5236 \u53d8\u5316\u6027\u5904\u7406\u6280\u672f \u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u7684\u57fa\u672c\u5185\u5bb9 \u00b6 \u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u7684\u6982\u5ff5 \u00b6 \u51af \u00b7 \u8bfa\u4f9d\u66fc\u7ed3\u6784 \u57fa\u4e8e\u529f\u80fd\u6a21\u5757\u7684\u8f6f\u4ef6\u7ed3\u6784 \u57fa\u4e8e\u6784\u4ef6\u7684\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784 \u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u7684\u5b9a\u4e49 \u00b6 Garlan & Shaw \u6a21\u578b\uff1a SA = {Components, Connectors, Constrains} Perry & Wolf \u6a21\u578b\uff1a SA = {Elements, Form, Rational} CFRP \u6a21\u578b\uff1aSA = {Elements, Interfaces, COnnections, Connection Semantics} Vestal \u6a21\u578b\uff1a SA = {Component, Idioms/Styles, Common Patterns of Interaction} IEEE 510\uff1aArchitecture = {Component, Connector, Environment, Principle} Boehm \u6a21\u578b\uff1aSA = {Components, COnnections, Constrains, Stakeholders'needs, Rationals} \u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u7684\u6784\u6210\u8981\u7d20 \u00b6 \u6784\u4ef6 \u8fde\u63a5\u4ef6 \u4f53\u7cfb\u7ed3\u6784\u914d\u7f6e \u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u7684\u7814\u7a76\u5185\u5bb9 \u00b6 \u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u63cf\u8ff0\u8bed\u8a00 ADL \u00b6 \u4f53\u7cfb\u7ed3\u6784\u6784\u9020 \u00b6 \u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u7684\u5206\u6790\u3001\u8bbe\u8ba1\u548c\u9a8c\u8bc1 \u00b6 \u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u7684\u53d1\u73b0\u3001\u6f14\u5316\u548c\u590d\u7528 \u00b6 \u57fa\u4e8e\u4f53\u7cfb\u7ed3\u6784\u7684\u8f6f\u4ef6\u5f00\u53d1\u8fc7\u7a0b \u00b6 \u7279\u5b9a\u9886\u57df\u7684\u4f53\u7cfb\u7ed3\u6784 DSSA \u00b6 \u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u652f\u6301\u5de5\u5177 \u00b6 \u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f\u4e0e\u6a21\u5f0f\u7cfb\u7edf \u00b6 \u6a21\u5f0f\u7684\u6982\u5ff5\u4e0e\u5206\u7c7b \u00b6 \u6a21\u5f0f\u7684\u5b9a\u4e49 \u00b6 \u6bcf\u4e2a\u6a21\u5f0f\u63cf\u8ff0\u4e86\u4e00\u4e2a\u5728\u6211\u4eec\u5468\u56f4\u4e0d\u65ad\u91cd\u590d\u53d1\u751f\u7684\u95ee\u9898\uff0c\u4ee5\u53ca\u8be5\u95ee\u9898\u89e3\u51b3\u65b9\u6848\u7684\u6838\u5fc3\u5185\u5bb9\u3002\u8fd9\u6837\uff0c\u4f60\u53ef\u4ee5\u4e00\u6b21\u53c8\u4e00\u6b21\u5730\u4f7f\u7528\u8be5\u65b9\u6848\u800c\u4e0d\u5fc5\u505a\u91cd\u590d\u52b3\u52a8\u3002 \u89e3\u51b3\u7b56\u7565\uff1a\u5c06\u6a21\u578b\u3001\u89c6\u56fe\u3001\u63a7\u5236\u5668\u5212\u5206\u5f00\u3002\u5c31\u662f\u4e00\u4e2a\u5178\u578b\u7684\u6a21\u578b \u6a21\u578b-\u89c6\u56fe-\u63a7\u5236\u5668\u6a21\u5f0f\uff08MVC\uff09 \u6a21\u5f0f\u7684\u6784\u6210\u8981\u7d20 \u00b6 \u8bed\u5883\uff1a\u95ee\u9898\u51fa\u73b0\u7684\u80cc\u666f \u95ee\u9898\uff1a\u5728\u8bed\u5883\u4e2d\u91cd\u590d\u51fa\u73b0\u7684\u95ee\u9898 \u89e3\u51b3\u65b9\u6848\uff1a\u7ed9\u51fa\u5982\u4f55\u89e3\u51b3\u518d\u73b0\u7684\u95ee\u9898\uff0c\u6216\u8005\u8bf4\u5982\u4f55\u5e73\u8861\u4e0e\u4e4b\u76f8\u5173\u7684\u5f3a\u5236\u6761\u4ef6 \u5b9e\u73b0\uff1a\u5c31\u662f\u5c06\u4ee5\u4e0a\u7684\u89e3\u51b3\u65b9\u6848\u4ed8\u8bf8\u5b9e\u8df5 \u6a21\u5f0f\u7684\u4f18\u52bf \u00b6 \u8bbe\u8ba1\u590d\u7528 \u4ee3\u7801\u590d\u7528 \u7cfb\u7edf\u7ec4\u6210\u66f4\u6613\u4e8e\u88ab\u4ed6\u4eba\u7406\u89e3 \u6709\u5229\u4e8e\u7cfb\u7edf\u7684\u4e92\u64cd\u4f5c\u6027 \u6709\u5229\u4e8e\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u7684\u5206\u6790 \u6709\u5229\u4e8e\u7279\u5b9a\u6a21\u5f0f\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u7684\u53ef\u89c6\u5316 \u6a21\u5f0f\u5206\u7c7b \u00b6 \u5e95\u5c42\u6a21\u5f0f\uff1a\u60ef\u7528\u6cd5 \u4e2d\u5c42\u6a21\u5f0f\uff1a\u8bbe\u8ba1\u6a21\u5f0f \u9ad8\u5c42\u6a21\u5f0f\uff1a\u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f \u60ef\u7528\u6cd5 \u00b6 \u60ef\u7528\u6cd5\u9488\u5bf9\u8bbe\u8ba1\u548c\u5b9e\u73b0\u65b9\u9762\uff0c\u662f\u9488\u5bf9\u5177\u4f53\u7279\u5b9a\u7a0b\u5e8f\u8bbe\u8ba1\u8bed\u8a00\u7684\u4f4e\u5c42\u6a21\u5f0f\uff0c\u5b83\u63cf\u8ff0\u5982\u4f55\u7528\u7ed9\u5b9a\u7684\u8bed\u8a00\u7279\u5f81\u6765\u5b9e\u73b0\u6784\u4ef6\u7684\u7279\u5b9a\u65b9\u9762\u6216\u6784\u4ef6\u4e4b\u95f4\u7684\u5173\u7cfb\u3002 \u7279\u70b9 \u60ef\u7528\u6cd5\u662f\u4e0e\u5177\u4f53\u8bed\u8a00\u5bc6\u5207\u76f8\u5173\u7684\u7f16\u7a0b\u7ecf\u9a8c\u7684,\u603b\u7ed3\u3002 \u60ef\u7528\u6cd5\u63cf\u8ff0\u5982\u4f55\u4f7f\u7528\u7ed9\u5b9a\u7684\u8bed\u8a00\u7279\u5f81\u6765\u5b9e\u73b0\u6784\u4ef6\u7684\u7279\u5b9a\u65b9\u9762\u53ca\u5176\u5173\u7cfb\u3002 \u60ef\u7528\u6cd5\u4ee3\u8868\u6700\u5e95\u5c42\u7684\u6a21\u5f0f\u3002 \u60ef\u7528\u6cd5\u66f4\u5173\u6ce8\u8bbe\u8ba1\u7684\u5b9e\u73b0\u3002 \u60ef\u7528\u6cd5\u53ef\u80fd\u662f\u4e00\u79cd\u7279\u5b9a\u8bbe\u8ba1\u6a21\u5f0f\u7684\u5177\u4f53\u5b9e\u73b0\u3002 \u76ca\u5904 \u4e00\u7ec4\u76f8\u5173\u7684\u60ef\u7528\u6cd5\u4f1a\u4f7f\u7a0b\u5e8f\u5f62\u6210\u4e00\u81f4\u7684\u98ce\u683c\u3002 \u4e00\u81f4\u7684\u7a0b\u5e8f\u8bbe\u8ba1\u98ce\u683c\u5c06\u52a0\u901f\u7a0b\u5e8f\u8bbe\u8ba1\u7684\u8fdb\u7a0b\u3002 \u4e00\u81f4\u7684\u7a0b\u5e8f\u8bbe\u8ba1\u98ce\u683c\u4f7f\u7a0b\u5e8f\u66f4\u5bb9\u6613\u7406\u89e3\uff0c\u6709\u5229\u4e8e\u7a0b\u5e8f\u7684\u5f00\u53d1\u548c\u7ef4\u62a4\u3002 \u00b7 \u8bbe\u8ba1\u6a21\u5f0f \u00b6 \u4e2d\u7b49\u89c4\u6a21\u7684\u6a21\u5f0f\uff0c\u5728\u89c4\u6a21\u4e0a\u6bd4\u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f\u8981\u5c0f\uff0c\u4f46\u5728\u7ea7\u522b\u4e0a\u6bd4\u7279\u5b9a\u7684\u7f16\u7a0b\u8bed\u8a00\u7684\u60ef\u7528\u6cd5\u8981\u9ad8 \u8bbe\u8ba1\u6a21\u5f0f\u95ee\u9898\u7c7b\u522b \u00b6 \u7ed3\u6784\u5316\u5206\u89e3\uff1a\u6700\u666e\u904d\u7684\u6a21\u5f0f\u662f\u6574\u4f53 - \u90e8\u5206\u6a21\u5f0f \u5de5\u4f5c\u7684\u7ec4\u7ec7\uff1a\u4e3b\u63a7 - \u4ece\u5c5e\u6a21\u5f0f \u8bbf\u95ee\u63a7\u5236\uff1a\u4ee3\u7406\u8bbe\u8ba1\u6a21\u5f0f\u3001\u5916\u89c2\u6a21\u5f0f\u548c\u8fed\u4ee3\u5668\u6a21\u5f0f \u7ba1\u7406\uff1a\u547d\u4ee4\u5904\u7406\u5668\u6a21\u5f0f\u3001\u89c6\u56fe\u5904\u7406\u7a0b\u5e8f\u6a21\u5f0f \u901a\u4fe1\uff1a\u8f6c\u53d1\u5668 - \u63a5\u6536\u5668\u6a21\u5f0f\u3001\u5ba2\u6237\u673a - \u5206\u914d\u5668 - \u670d\u52a1\u5668\u6a21\u5f0f\u3001\u51fa\u7248\u8005 - \u8ba2\u9605\u8005\u6a21\u5f0f \u8bbe\u8ba1\u6a21\u5f0f\u5206\u7c7b \u00b6 \u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f \u00b6 \u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f\u7684\u5b9a\u4e49 \u00b6 \u4e00\u4e2a\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u7684\u6a21\u5f0f\u63cf\u8ff0\u4e86\u4e00\u4e2a\u7a0b\u5e8f\u5728\u7279\u5b9a\u8bbe\u8ba1\u8bed\u5883\u4e2d\u7684\u7279\u6b8a\u7684\u518d\u73b0\u8bbe\u8ba1\u95ee\u9898\uff0c\u5e76\u4e3a\u5b83\u7684\u89e3\u51b3\u65b9\u6848\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7ecf\u8fc7\u5145\u5206\u9a8c\u8bc1\u7684\u901a\u7528\u56fe\u5f0f\u3002\u89e3\u51b3\u65b9\u6848\u56fe\u5f0f\u901a\u8fc7\u63cf\u8ff0\u5176\u7ec4\u6210\u6784\u4ef6\u3001\u5b83\u4eec\u7684\u8d23\u4efb\u548c\u76f8\u4e92\u5173\u7cfb\uff0c\u4ee5\u53ca\u5b83\u4eec\u7684\u534f\u4f5c\u65b9\u5f0f\u6765\u5177\u4f53\u6307\u5b9a\u3002 \u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f\u662f\u6a21\u5f0f\u7cfb\u7edf\u4e2d\u7684\u6700\u9ad8\u7b49\u7ea7\u6a21\u5f0f \u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f\u7684\u5206\u7c7b \u00b6 \u4ece\u6df7\u6c8c\u5230\u7ed3\u6784 \u5206\u5c42\u6a21\u5f0f \u7ba1\u9053/\u8fc7\u6ee4\u5668\u6a21\u5f0f \u9ed1\u677f\u6a21\u5f0f \u5206\u5e03\u5f0f\u7cfb\u7edf \u4ee3\u7406\u6a21\u5f0f \u4ea4\u4e92\u5f0f\u7cfb\u7edf \u6a21\u578b - \u89c6\u56fe - \u63a7\u5236\u5668\u6a21\u5f0f\uff08MVC\uff09 \u8868\u793a - \u62bd\u8c61 - \u63a7\u5236\u6a21\u5f0f\uff08PAC\uff09 \u9002\u5e94\u6027\u6a21\u5f0f \u53cd\u5c04\u6a21\u5f0f \u5fae\u6838\u6a21\u5f0f \u5e38\u7528\u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f \u00b6 \u7ba1\u9053/\u8fc7\u6ee4\u5668 \u57fa\u4e8e\u4e8b\u4ef6\u7684\u9690\u5f0f\u8c03\u7528 \u5206\u5c42\u98ce\u683c \u6570\u636e\u62bd\u8c61\u548c\u9762\u5411\u5bf9\u8c61 \u4ed3\u5e93\u4e0e\u9ed1\u677f\u6a21\u5f0f \u89e3\u91ca\u5668 \u4ee3\u7406\u6a21\u5f0f \u5fae\u6838 \u5ba2\u6237/\u670d\u52a1\u5668 \u6b63\u4ea4\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784 C2 \u5f02\u6784\u7ed3\u6784 \u53cd\u5c04 \u6a21\u578b - \u89c6\u56fe - \u63a7\u5236\u5668\uff08MVC\uff09 \u8868\u793a - \u62bd\u8c61 - \u63a7\u5236\uff08PAC\uff09 \u6a21\u5f0f\u7cfb\u7edf\u4e0e\u4f53\u7cfb\u7ed3\u6784\u98ce\u683c \u00b6 \u82e5\u5e72\u5b9a\u4e49 \u00b6 \u6a21\u5f0f\u7cfb\u7edf \uff1a\u5c06\u4e00\u4e2a\u4e2a\u5355\u72ec\u7684\u6a21\u5f0f\u6346\u7ed1\u5728\u4e00\u8d77\uff0c\u63cf\u8ff0\u4e86\u6a21\u5f0f\u4e4b\u95f4\u7684\u5173\u7cfb\u3001\u6a21\u5f0f\u7684\u5b9e\u73b0\uff0c\u4ee5\u53ca\u6a21\u5f0f\u600e\u6837\u76f8\u4e92\u8054\u7cfb\u76f8\u4e92\u8865\u5145\u6765\u6709\u6548\u652f\u6301\u8f6f\u4ef6\u5f00\u53d1\u7684\u3002 \u6a21\u5f0f\u8bed\u8a00 \uff1a\u7531\u7ed3\u6784\u548c\u89c4\u5219\u6784\u6210\u3002\u7ed3\u6784\u63cf\u8ff0\u4e86\u6a21\u5f0f\u662f\u66f4\u5c0f\u6a21\u5f0f\u7684\u6a21\u5f0f;\u89c4\u5219\u63cf\u8ff0\u4e86\u521b\u5efa\u6a21\u5f0f\u7684\u65b9\u5f0f\u548c\u4e0e\u5176\u4ed6\u6a21\u5f0f\u7684\u6392\u5217\u65b9\u5f0f\u3002 SA \u6a21\u5f0f\u7cfb\u7edf \uff1a\u662f\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f\u7684\u6c47\u96c6\uff0c\u5305\u62ec\u6a21\u5f0f\u5728\u8f6f\u4ef6\u5f00\u53d1\u4e2d\u7684\u5b9e\u73b0\u3001\u7ec4\u5408\u548c\u4f7f\u7528\u6307\u5357\u3002 \u6a21\u5f0f\u7cfb\u7edf\u7684\u6f14\u5316 \uff1a\u5305\u62ec\u6a21\u5f0f\u63cf\u8ff0\u7684\u6f14\u5316\u3001\u6a21\u5f0f\u7684\u91c7\u6398\u3001\u65b0\u6a21\u5f0f\u7684\u96c6\u6210\u548c\u5220\u9664\u8fc7\u65f6\u7684\u6a21\u5f0f\u7b49\u3002 \u6a21\u5f0f\u7cfb\u7edf\u5bf9\u8f6f\u4ef6\u5f00\u53d1\u7684\u652f\u6301\u6761\u4ef6 \u00b6 \u5305\u542b\u8db3\u591f\u591a\u7684\u57fa\u672c\u6a21\u5f0f \u6240\u6709\u7684\u6a21\u5f0f\u5e94\u8be5\u6709\u7edf\u4e00\u7684\u63cf\u8ff0\u5f62\u5f0f \u5177\u6709\u5bf9\u6a21\u5f0f\u5982\u4f55\u7ec4\u7ec7\u7684\u6a21\u5f0f \u652f\u6301\u8f6f\u4ef6\u6784\u9020\u7684\u65b9\u6cd5 \u652f\u6301\u6a21\u5f0f\u7cfb\u7edf\u7684\u81ea\u6211\u70df\u82b1 \u6a21\u5f0f\u7cfb\u7edf\u7684\u5168\u5c40\u5206\u7c7b\u89c6\u56fe \u00b6 \u9762\u5411\u95ee\u9898\u7684\u6a21\u5f0f\u9009\u62e9\u6b65\u9aa4 \u00b6 \u6307\u5b9a\u548c\u7cbe\u786e\u5730\u63cf\u8ff0\u95ee\u9898 \u9488\u5bf9\u95ee\u9898\u7684\u89c4\u6a21\uff0c\u9009\u62e9\u201c\u6a21\u5f0f\u7c7b\u522b\u201d\uff08\u4e0d\u662f\u6309\u95ee\u9898\u7c7b\u522b\u9009\u53d6\uff09 \u5bf9\u95ee\u9898\u8fdb\u884c\u5206\u7c7b\uff0c\u521d\u6b65\u9009\u53d6\u89e3\u51b3\u95ee\u9898\u7684\u6a21\u5f0f\u548c\u53ef\u9009\u6a21\u5f0f \u5bf9\u95ee\u9898\u7684\u5206\u7c7b\u548c\u76f8\u5e94\u7684\u89e3\u51b3\u6a21\u5f0f\u8fdb\u884c\u6bd4\u8f83\uff08\u4f18\u7f3a\u70b9\uff09 \u8fdb\u4e00\u6b65\u9009\u53d6\u66f4\u5408\u9002\u7684\u89e3\u51b3\u65b9\u6848\u7684\u53d8\u4f53 \u5982\u679c\u53d1\u73b0\u95ee\u9898\u96be\u4ee5\u89e3\u51b3\uff0c\u5219\u91cd\u65b0\u8fdb\u884c\u95ee\u9898\u5206\u7c7b\uff0c\u8f6c\u81f3 3 \u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f\u4e0e\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u98ce\u683c\u7684\u6bd4\u8f83 \u00b6 \u4f53\u7cfb\u7ed3\u6784\u98ce\u683c\u4e3b\u8981\u63cf\u8ff0\u5e94\u7528\u7cfb\u7edf\u7684,\u603b\u4f53\u7ed3\u6784\u6846\u67b6\u3002\u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f\u53ef\u5b58\u5728\u4e8e\u5404\u79cd\u5e94\u7528\u7cfb\u7edf\u89c4\u6a21\u548c\u62bd\u8c61\u5c42\u6b21\u4e0a\uff0c\u4ece\u5b9a\u4e49\u5e94\u7528\u7cfb\u7edf\u7684\u603b\u4f53\u7ed3\u6784\u5230\u63cf\u8ff0\u600e\u6837\u7528\u7ed9\u5b9a\u7684\u7f16\u7a0b\u8bed\u8a00\u5b9e\u73b0\u7279\u5b9a\u95ee\u9898\u7684\u60ef\u7528\u6cd5\u6a21\u5f0f\u3002 \u4f53\u7cfb\u7ed3\u6784\u98ce\u683c\u76f8\u5bf9\u72ec\u7acb\u3002\u5404\u5e94\u7528\u7cfb\u7edf\u91c7\u7528\u4e0d\u540c\u7684\u98ce\u683c\u540e\uff0c\u4e0e\u7531\u5176\u4ed6\u98ce\u683c\u6784\u6210\u7684\u7cfb\u7edf\u8054\u7cfb\u8f83\u5c11\u3002\u800c\u6a21\u5f0f\u5f80\u5f80\u4f9d\u8d56\u4e8e\u5b83\u6240\u5305\u542b\u7684\u8f83\u5c0f\u7684\u6a21\u5f0f\u6216\u8005\u4e0e\u5b83\u76f8\u4e92\u4f5c\u7528\u7684\u6a21\u5f0f\u3002 \u6a21\u5f0f\u6bd4\u4f53\u7cfb\u7ed3\u6784\u98ce\u683c\u66f4\u52a0\u9762\u5411\u95ee\u9898\u3002\u4f53\u7cfb\u7ed3\u6784\u98ce\u683c\u4fa7\u91cd\u4e8e\u4ece\u5e94\u7528\u7cfb\u7edf\u4e2d\u62bd\u53d6\u51fa\u5b83\u4eec\u7684\u603b\u4f53\u7ec4\u7ec7\u7ed3\u6784\uff0c\u800c\u8f83\u5c11\u4ece\u5b9e\u9645\u8bbe\u8ba1\u73af\u5883\u6c34\u8003\u611f\u8bbe\u8ba1\u7684\u6280\u672f\u3002\u800c\u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f\u901a\u5e38\u7531\u95ee\u9898\u51fa\u73b0\u7684\u8bed\u5883\u3001\u89e3\u51b3\u65b9\u6848\u548c\u9002\u7528\u573a\u666f\u7ec4\u6210\u3002","title":"\u8f6f\u4ef6\u6784\u4ef6\u4e0e\u4f53\u7cfb\u7ed3\u6784"},{"location":"cs/software/sca/#_1","text":"\u7ea6 5144 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 17 \u5206\u949f Abstract \u8fd9\u91cc\u8bb0\u5f55\u5b66\u4e60\u8fd9\u672c\u4e66\u65f6\u7684\u7b14\u8bb0\uff08\u540c\u65f6\u662f\u7814\u4e00\u7684\u5b66\u4f4d\u8bfe\uff09 \u4f5c\u8005\u662f\u6211\u7684\u5bfc\u5e08\u738b\u6620\u8f89\u6559\u6388","title":"\u8f6f\u4ef6\u6784\u4ef6\u4e0e\u4f53\u7cfb\u7ed3\u6784"},{"location":"cs/software/sca/#_2","text":"","title":"\u8f6f\u4ef6\u590d\u7528"},{"location":"cs/software/sca/#_3","text":"\u8f6f\u4ef6\u590d\u7528\u662f\u6307\u5728\u4e24\u6b21\u6216\u591a\u6b21\u4e0d\u540c\u7684\u8f6f\u4ef6\u5f00\u53d1\u8fc7\u7a0b\u4e2d\u91cd\u590d\u4f7f\u7528\u76f8\u540c\u7684\u6216\u76f8\u8fd1\u7684\u8f6f\u4ef6\u5143\u7d20\u7684\u8fc7\u7a0b\u3002\u5f15\u51fa\u4e86 \u6784\u4ef6 \u7684\u6982\u5ff5\u3002 \u8f6f\u4ef6\u590d\u7528\u53ef\u5212\u5206\u4e3a\u5982\u4e0b\u51e0\u7c7b\uff1a \u4ee3\u7801\u7684\u590d\u7528 \u8bbe\u8ba1\u7684\u590d\u7528 \u5206\u6790\u7684\u590d\u7528 \u6d4b\u8bd5\u4fe1\u606f\u7684\u590d\u7528","title":"\u8f6f\u4ef6\u590d\u7528\u7684\u6982\u5ff5"},{"location":"cs/software/sca/#_4","text":"","title":"\u8f6f\u4ef6\u590d\u7528\u7684\u5b9e\u73b0"},{"location":"cs/software/sca/#_5","text":"\u5de5\u7a0b\u65b9\u9762 \u7f3a\u5c11\u80fd\u591f\u6e05\u6670\u6807\u8bc6\u53ef\u590d\u7528\u6a21\u578b\u8981\u7d20\u7684\u624b\u6bb5\u3002 \u7f3a\u5c11\u80fd\u591f\u590d\u7528\u7684\u6784\u4ef6\u3002 \u53ef\u590d\u7528\u7684\u6784\u4ef6\u7f3a\u4e4f\u7075\u6d3b\u6027\u3002 \u7f3a\u4e4f\u6267\u884c\u590d\u7528\u8fc7\u7a0b\u7684\u5de5\u5177\u3002 \u8fc7\u7a0b\u65b9\u9762 \u7ec4\u7ec7\u65b9\u9762 \u8d44\u91d1\u65b9\u9762","title":"\u57fa\u672c\u95ee\u9898"},{"location":"cs/software/sca/#_6","text":"\u590d\u7528\u4f9d\u8d56\u4e8e\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784 \u3002\u4f7f\u7528\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u6765\u89c4\u5212\u548c\u7ba1\u7406\u5927\u89c4\u6a21\u53ef\u590d\u7528\u7cfb\u7edf\u7684\u590d\u6742\u6027\u662f\u6700\u597d\u7684\u89e3\u51b3\u65b9\u6cd5\u3002","title":"\u5173\u952e\u56e0\u7d20"},{"location":"cs/software/sca/#_7","text":"\u6784\u4ef6\u662f\u5177\u6709\u4e00\u5b9a\u529f\u80fd\u3001\u80fd\u591f\u72ec\u7acb\u5de5\u4f5c\u6216\u540c\u5176\u4ed6\u6784\u4ef6\u88c5\u914d\u8d77\u6765\u534f\u8c03\u5de5\u4f5c\u7684\u7a0b\u5e8f\u4f53\uff0c\u6784\u4ef6\u7684\u4f7f\u7528\u540c\u5b83\u7684\u5f00\u53d1\u3001\u751f\u4ea7\u65e0\u5173\u3002\u6574\u4e2a\u6784\u4ef6\u9690\u85cf\u4e86\u5177\u4f53\u7684\u5b9e\u73b0\uff0c\u53ea\u7528\u63a5\u53e3\u5bf9\u5916\u63d0\u4f9b\u670d\u52a1\u3002 \u4ece\u5916\u90e8\u5f62\u6001\u770b\uff1a \u72ec\u7acb\u800c\u6210\u719f\u7684\u6784\u4ef6 \u6709\u9650\u5236\u7684\u6784\u4ef6 \u9002\u7528\u6027\u6784\u4ef6 \u88c5\u914d\u7684\u6784\u4ef6 \u53ef\u4fee\u6539\u7684\u6784\u4ef6","title":"\u8f6f\u4ef6\u590d\u7528\u4e0e\u6784\u4ef6\u6280\u672f"},{"location":"cs/software/sca/#_8","text":"","title":"\u6784\u4ef6\u6280\u672f"},{"location":"cs/software/sca/#_9","text":"\u6280\u672f\u4e0e\u9700\u6c42\u53d8\u5316\u7684\u95ee\u9898\u3002 \u91cd\u590d\u4e0d\u5fc5\u8981\u7684\u5de5\u4f5c\u95ee\u9898\u3002 \u5e94\u7528\u96c6\u6210\u7684\u95ee\u9898\u3002 \u8f6f\u4ef6\u96be\u4ee5\u7ef4\u62a4\u7684\u95ee\u9898\u3002 \u8f6f\u4ef6\u8d28\u91cf\u548c\u6210\u672c\u6709\u6548\u6027\u95ee\u9898\u7b49\u3002 \u6784\u4ef6\u6280\u672f\u662f\u76ee\u524d\u652f\u6301\u8f6f\u4ef6\u590d\u7528\u7684\u6838\u5fc3\u6280\u672f\u3002\u7814\u7a76\u5185\u5bb9\u5305\u62ec\uff1a \u6784\u4ef6\u83b7\u53d6\uff1a\u6709\u76ee\u7684\u7684\u6784\u4ef6\u751f\u4ea7\u548c\u4ece\u5df2\u6709\u7cfb\u7edf\u4e2d\u6316\u6398\u63d0\u53d6\u6784\u4ef6\u3002 \u7814\u7a76\u6a21\u578b\uff1a\u7814\u7a76\u6784\u4ef6\u7684\u672c\u8d28\u7279\u5f81\u548c\u6784\u4ef6\u95f4\u7684\u5173\u7cfb\u3002 \u6784\u4ef6\u63cf\u8ff0\u8bed\u8a00\uff1a\u4ee5\u6784\u4ef6\u6a21\u578b\u4e3a\u57fa\u7840\uff0c\u89e3\u51b3\u6784\u4ef6\u7684\u7cbe\u786e\u63cf\u8ff0\u3001\u7406\u89e3\u3001\u68c0\u7d20\u53ca\u7ec4\u88c5\u95ee\u9898\u3002 \u6784\u4ef6\u5206\u7c7b\u4e0e\u68c0\u7d22\uff1a\u7814\u7a76\u6784\u4ef6\u5206\u7c7b\u7b56\u7565\u3001\u7ec4\u7ec7\u6a21\u5f0f\u53ca\u68c0\u7d20\u7b56\u7565\uff0c\u5efa\u7acb\u6784\u4ef6\u5e93\u7cfb\u7edf\uff0c\u652f\u6301\u6784\u4ef6\u7684\u6709\u6548\u7ba1\u7406\u3002 \u6784\u4ef6\u590d\u5408\u7ec4\u88c5\uff1a\u5728\u6784\u4ef6\u6a21\u578b\u7684\u57fa\u7840\u4e0a\u7814\u7a76\u6784\u4ef6\u7ec4\u88c5\u673a\u5236\uff0c\u5305\u62ec\u6e90\u4ee3\u7801\u7ea7\u7684\u7ec4\u88c5\u548c\u57fa\u4e8e\u6784\u4ef6\u5bf9\u8c61\u4e92\u64cd\u4f5c\u6027\u7684\u7ec4\u88c5\u3002 \u6807\u51c6\u5316\uff1a\u6784\u4ef6\u6a21\u578b\u7684\u6807\u51c6\u5316\u548c\u6784\u4ef6\u5e93\u7cfb\u7edf\u7684\u6807\u51c6\u5316\u7b49\u3002","title":"\u8f6f\u4ef6\u5f00\u53d1\u4e2d\u7684\u95ee\u9898"},{"location":"cs/software/sca/#_10","text":"\u8f6f\u4ef6\u6210\u5206\u5305\u62ec\u7a0b\u5e8f\u4ee3\u7801\u3001\u6d4b\u8bd5\u7528\u4f8b\u3001\u8bbe\u8ba1\u6587\u6863\u3001\u8bbe\u8ba1\u8fc7\u7a0b\u3001\u9700\u6c42\u5206\u6790\u6587\u6863\uff0c\u751a\u81f3\u9886\u57df\u77e5\u8bc6\uff0c\u901a\u5e38\u628a\u8fd9\u79cd\u53ef\u590d\u7528\u7684\u8f6f\u4ef6\u6210\u5206\u79f0\u4e3a\u8f6f\u4ef6\u6784\u4ef6\uff0c\u7b80\u79f0\u8f6f\u6784\u4ef6\u6216\u8005\u6784\u4ef6\u3002\u53ef\u590d\u7528\u7684\u8f6f\u4ef6\u5143\u7d20\u8d8a\u5927\uff0c\u6211\u4eec\u5c31\u8bf4\u590d\u7528\u7684\u7c92\u5ea6(Granularity)\u8d8a\u5927\u3002 \u6784\u4ef6\u662f\u9884\u5148\u6784\u5efa\u7684\u3002 \u6784\u4ef6\u662f\u9ed1\u76d2\u7684\u3002 \u6784\u4ef6\u662f\u53ef\u5206\u79bb\u7684\u3002 \u6784\u4ef6\u80fd\u7528\u4e8e\u7ec4\u88c5\u548c\u90e8\u7f72\u3002 \u6784\u4ef6\u9700\u8981\u79f0\u4e3a\u6784\u4ef6\u5bb9\u5668\u6280\u672f\u7684\u652f\u6301\u3002 \u4e00\u4e2a\u5b8c\u6574\u7684\u6784\u4ef6\u5e94\u5305\u542b6\u4e2a\u8981\u7d20\uff1a \u53d7\u7ea6\u675f\u7684\u6784\u4ef6\u6807\u51c6\uff1a\u7b26\u5408\u67d0\u79cd\u6784\u4ef6\u6a21\u578b\u3002 \u89c4\u683c\u8bf4\u660e\uff1a\u6784\u4ef6\u63d0\u4f9b\u670d\u52a1\u7684\u62bd\u8c61\u63cf\u8ff0\uff0c\u7528\u4f5c\u670d\u52a1\u7684\u5ba2\u6237\u65b9\u548c\u63d0\u4f9b\u65b9\u4e4b\u95f4\u7684\u5951\u7ea6\u3002 \u5b9e\u73b0\uff1a\u5fc5\u987b\u7b26\u5408\u89c4\u683c\u8bf4\u660e\uff0c\u5404\u81ea\u5b9e\u73b0\u3002 \u5305\u88c5\u65b9\u6cd5\uff1a\u6309\u4e0d\u540c\u7684\u65b9\u5f0f\u5206\u7ec4\u6765\u63d0\u4f9b \u4e00\u5957\u53ef\u4ee5\u66ff\u6362\u7684\u670d\u52a1(\u5305)\u3002 \u6ce8\u518c\uff1a\u53ef\u5728\u6784\u4ef6\u652f\u6301\u73af\u5883\u4e2d\u6ce8\u518c\u3002 \u90e8\u7f72\u65b9\u6cd5\uff1a\u6784\u4ef6\u53ef\u4ee5\u90e8\u7f72\u591a\u4e2a\u5b9e\u4f8b\u3002","title":"\u8f6f\u4ef6\u6784\u4ef6\u7684\u6982\u5ff5"},{"location":"cs/software/sca/#_11","text":"\u6784\u4ef6\u7684\u540d\u79f0\u4e0e\u7b80\u77ed\u63cf\u8ff0\u3002 \u6784\u4ef6\u670d\u52a1\u3002 \u6784\u4ef6\u63a5\u53e3\u4fe1\u606f\u3002 \u6240\u9700\u7684\u63a5\u53e3\u3002 \u53d1\u5e03\u548c\u63a5\u53d7\u7684\u4e8b\u4ef6\u3002 \u6784\u4ef6\u7279\u5f81\u3002 \u9644\u52a0\u4fe1\u606f\u3002","title":"\u8f6f\u4ef6\u6784\u4ef6\u7684\u89c4\u683c\u8bf4\u660e"},{"location":"cs/software/sca/#_12","text":"\u6784\u4ef6\u5fc5\u9886\u5bf9\u5176\u6240\u63d0\u4f9b\u7684\u670d\u52a1\u8fdb\u884c\u62bd\u8c61\u63cf\u8ff0\uff0c\u4ee5\u4f5c\u4e3a\u670d\u52a1\u7684\u5bb9\u6237\u65b9\u548c\u63d0\u4f9b\u65b9\u4e4b\u95f4\u7684\u5951\u7ea6\uff0c\u8fd9\u5c31\u662f\u6784\u4ef6\u63a5\u53e3\u3002","title":"\u8f6f\u4ef6\u6784\u4ef6\u63a5\u53e3"},{"location":"cs/software/sca/#_13","text":"","title":"\u8f6f\u4ef6\u6784\u4ef6\u6a21\u578b"},{"location":"cs/software/sca/#_14","text":"\u6784\u4ef6\u6a21\u578b\u5b9a\u4e49\u4e86\u4ec0\u4e48\u662f\u6784\u4ef6\u3001\u6784\u4ef6\u7684\u4f9d\u636e\u3001\u5982\u4f55\u4f7f\u7528\u5176\u4ed6\u6784\u4ef6\u63d0\u4f9b\u7684\u670d\u52a1\u7b49\u3002\u5c07\u6784\u4ef6\u7684\u89c4\u683c\u8bf4\u660e\u548c\u5177\u4f53\u5b9e\u73b0\u5206\u79bb\uff0c\u4f9d\u9760\u6784\u4ef6\u5b9e\u73b0\u7684\u5177\u4f53\u6a21\u5f0f\u6765\u63a8\u5bfc\u51fa\u6784\u4ef6\u6240\u63d0\u4f9b\u7684\u670d\u52a1\uff0c\u53ef\u4ee5\u6784\u9020\u4e00\u4e2a\u6784\u4ef6\u6a21\u578b\u3002 \u4f7f\u7528\u4e2d\u95f4\u4ef6\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u6784\u4ef6\u4e4b\u95f4\u8fdb\u884c\u66f4\u597d\u5730\u901a\u4fe1\u3002\u5982\u6784\u4ef6\u4e4b\u95f4\u76f4\u63a5\u8fdb\u884c\u901a\u4fe1\uff0c\u5f53\u6784\u6210\u7cfb\u7edf\u7684\u6784\u4ef6\u6570\u91cf\u5e9e\u5927\u65f6\uff0c\u5176\u590d\u6742\u7a0b\u5ea6\u8fc5\u901f\u63d0\u9ad8\uff1b\u5982\u80fd\u5f15\u4eba\u4e2d\u4ecb\u5c42 (\u4e2d\u95f4\u4ef6)\uff0c\u5219\u53ef\u5f88\u597d\u5730\u907f\u514d\u6784\u4ef6\u95f4\u590d\u6742\u7684\u4ea4\u4e92\u3002\u5982\u4e0b\u56fe\u6240\u793a\uff1a","title":"\u6784\u4ef6\u6a21\u578b\u7684\u6982\u5ff5"},{"location":"cs/software/sca/#_15","text":"\u9752\u9e1f\u8f6f\u4ef6\u6784\u4ef6\u6a21\u578b\u56fd\u5185\u8bb8\u591a\u5b66\u8005\u5728\u6784\u4ef6\u6a21\u578b\u7684\u7814\u7a76\u65b9\u9762\u505a\u4e86\u4e0d\u5c11\u7684\u5de5\u4f5c\uff0c\u5176\u4e2d\u8f83\u4e3a\u7a81\u51fa\u7684\u662f\u5317\u4eac\u5927\u5b66\u6768\u8299\u6e05\u9662\u58eb\u7b49\u4eba\u63d0\u51fa\u7684\u201c\u9752\u9e1f\u8f6f\u4ef6\u6784\u4ef6\u6a21\u578b(JBCOM)\u201d\u3002\u5b83\u7531\u5916\u90e8\u63a5\u53c8\u4e0e\u5185\u90e8\u7ed3\u6784\u4e24\u90e8\u5206\u7ec4\u6210\u3002\u5982\u4e0b\u56fe\u6240\u793a\uff1a \u6784\u4ef6\u7684\u5916\u90e8\u63a5\u53e3\u662f\u6307\u6784\u4ef6\u5411\u5176\u590d\u7528\u8005\u63d0\u4f9b\u7684\u57fa\u672c\u4fe1\u606f\uff0c\u5305\u62ec:\u6784\u4ef6\u540d\u79f0\u3001\u529f\u80fd\u63cf\u8ff0\u3001\u5bf9\u5916\u529f\u80fd\u63a5\u53e3\uff0c\u6240\u9700\u670d\u52a1\u7684\u6784\u4ef6\u548c\u53c2\u6570\u5316\u5c5e\u6027\u7b49\u3002\u5916\u90e8\u63a5\u53e3\u662f\u6784\u4ef6\u4e0e\u5916\u754c\u7684\u4e00\u7ec4\u4ea4\u4e92\u70b9\uff0c\u8bf4\u660e\u4e86\u6784\u4ef6\u6240\u63d0\u4f9b\u7684\u90a3\u4e9b\u670d\u52a1(\u6d88\u606f\u3001\u64cd\u4f5c\u548c\u53d8\u91cf)\u3002 \u6784\u4ef6\u7684\u5185\u90e8\u7ed3\u6784\u5305\u62ec\u4e24\u65b9\u9762\u7684\u5185\u5bb9:\u5185\u90e8\u6210\u5458\u4ee5\u53ca\u5185\u90e8\u6210\u5458\u4e4b\u95f4\u7684\u5173\u7cfb\u3002\u5176\u4e2d\uff0c\u5185\u90e8\u6210\u5458\u5305\u62ec\u5177\u4f53\u6210\u5458\u4e0e\u865a\u62df\u6210\u5458\uff0c\u800c\u6210\u5458\u5173\u7cfb\u5305\u62ec\u6210\u5458\u4e4b\u95f4\u7684\u4e92\u8054\uff0c\u4ee5\u53ca\u5185\u90e8\u6210\u5458\u4e0e\u5916\u90e8\u63a5\u53e3\u4e4b\u95f4\u7684\u4e92\u8054\u3002","title":"\u9752\u9e1f\u8f6f\u4ef6\u6784\u4ef6\u6a21\u578b"},{"location":"cs/software/sca/#_16","text":"\u6784\u4ef6::=\u3008\u6784\u4ef6\u89c4\u7ea6\uff0c\u6784\u4ef6\u5b9e\u73b0\u3009 \u6784\u4ef6\u89c4\u7ea6::=\u3008\u63a5\u53c8\u90e8\u5206\uff0c\u7ed3\u6784\u90e8\u5206\u3009 \u63a5\u53e3\u90e8\u5206::=\u3008\u5bf9\u5916\u63d0\u4f9b\u7684\u529f\u80fd\u96c6\u5408\uff0c\u5bf9\u5916\u8bf7\u6c42\u7684\u529f\u80fd\u96c6\u5408\uff0c\u670d\u52a1\u96c6\u5408\u3009 \u670d\u52a1::=\u3008\u5bf9\u5916\u63d0\u4f9b\u7684\u529f\u80fd\u96c6\u5408\uff0c\u5bf9\u5916\u8bf7\u6c42\u7684\u529f\u80fd\u96c6\u5408\u3009 \u7ed3\u6784\u90e8\u5206::=\u3008\u539f\u5b50\u6784\u4ef6\u7ed3\u6784\u3009|\u3008\u590d\u5408\u6784\u4ef6\u7ed3\u6784\u3009 \u539f\u5b50\u6784\u4ef6\u7ed3\u6784::=\u3008\u6784\u4ef6\u5b9e\u73b0\u7684\u5f15\u7528\u3009 \u590d\u5408\u6784\u4ef6\u7ed3\u6784::=\u3008\u5f15\u7528\u7684\u6784\u4ef6\u7c7b\u578b\uff0c\u5b9e\u4f8b\u58f0\u660e\uff0c\u5b9e\u4f8b\u8fde\u63a5\uff0c\u6620\u5c04\u3009 eg. \u7f16\u8bd1\u5668\u590d\u5408\u6784\u4ef6\u5b9e\u4f8b\u3002","title":"\u6784\u4ef6\u6a21\u578b\u7684\u63cf\u8ff0\u65b9\u6cd5"},{"location":"cs/software/sca/#_17","text":"\u6784\u4ef6\u7684\u7c92\u5ea6 \u6784\u4ef6\u7684\u57fa\u7840\u8bbe\u65bd \u6784\u4ef6\u7684\u83b7\u53d6 \u6784\u4ef6\u7684\u7ba1\u7406 \u7ec4\u88c5\u4e0e\u90e8\u7f72","title":"\u8f6f\u4ef6\u6784\u4ef6\u7684\u6df1\u5c42\u7406\u89e3"},{"location":"cs/software/sca/#_18","text":"","title":"\u9762\u5411\u6784\u4ef6"},{"location":"cs/software/sca/#_19","text":"\u901a\u8fc7\u5206\u6790\u3001\u8bbe\u8ba1\u548c\u5b9e\u73b0\uff0c\u6765\u5f97\u5230\u6240\u9700\u7684\u6784\u4ef6","title":"\u9762\u5411\u6784\u4ef6\u7684\u6982\u5ff5"},{"location":"cs/software/sca/#_20","text":"\u6839\u636e\u8f6f\u4ef6 3 \u5c42\u6846\u67b6\u7684\u6784\u4ef6\u5206\u7c7b \u8868\u793a\u5c42 \u4e1a\u52a1\u5c42 \u6570\u636e\u5c42 \u636e\u6b64\u6846\u67b6\uff0c\u6784\u4ef6\u53ef\u4ee5\u88ab\u5206\u4e3a 3 \u7c7b\uff1a\u5e94\u7528\u8f6f\u4ef6\u3001\u4e1a\u52a1\u6784\u4ef6\u548c\u6570\u636e\u6784\u4ef6 \u4e1a\u52a1\u6784\u4ef6\u7684\u83b7\u53d6\u60c5\u51b5 \u5b9a\u4e49\u4e1a\u52a1\u5bf9\u8c61 \u786e\u5b9a\u63a7\u5236\u903b\u8f91\uff08\u4e1a\u52a1\u8fc7\u7a0b\uff09 \u786e\u5b9a\u4e1a\u52a1\u5bf9\u8c61\u4e0e\u63a7\u5236\u903b\u8f91\u4e4b\u95f4\u7684\u4ea4\u4e92 \u533a\u5206\u516c\u53f8\u7684\u4e1a\u52a1\u903b\u8f91\u548c\u7279\u5b9a\u90e8\u95e8\u7684\u4e1a\u52a1\u903b\u8f91 \u5c06\u4e1a\u52a1\u5bf9\u8c61\u548c\u63a7\u5236\u903b\u8f91\u5206\u914d\u5230\u76f8\u5e94\u7684\u4e1a\u52a1\u6784\u4ef6\u4e2d\u53bb \u57fa\u4e8e\u6784\u4ef6\u7c92\u5ea6\u5927\u5c0f\u7684\u6784\u4ef6\u5206\u7c7b \u53ef\u5206\u4e3a\uff1a\u5927\u7c92\u5ea6\u7684\u5e94\u7528\u6784\u4ef6\u3001\u7528\u6237\u4efb\u52a1\u6784\u4ef6\u3001\u6279\u5904\u7406\u6784\u4ef6\u548c\u5b50\u4efb\u52a1\u6784\u4ef6","title":"\u6784\u4ef6\u7684\u5206\u7c7b"},{"location":"cs/software/sca/#_21","text":"","title":"\u6784\u4ef6\u7684\u8bbe\u8ba1\u4e0e\u5b9e\u73b0"},{"location":"cs/software/sca/#_22","text":"\u6784\u4ef6\u63a5\u53e3\u7684\u5b9a\u4e49\u7684\u57fa\u672c\u539f\u5219\uff1a \u5b9a\u4e49\u4e00\u4e9b\u4e0d\u53d8\u7684\u63a5\u53e3 \u5b9a\u4e49\u81ea\u63cf\u8ff0\u7684\u63a5\u53e3 \u5b9a\u4e49\u5143\u6570\u636e\u6027\u8d28\u7684\u63a5\u53e3 \u6784\u4ef6\u8bbe\u8ba1\u6210\u53ef\u5b9a\u5236\u7684","title":"\u6784\u4ef6\u63a5\u53e3\u5b9a\u4e49\u7684\u539f\u5219"},{"location":"cs/software/sca/#_23","text":"\u539f\u5b50\u6784\u4ef6 Atom \u662f\u6700\u5c0f\u7c92\u5ea6\u7684\u6784\u4ef6\uff0c\u8be5\u6784\u4ef6\u5728\u529f\u80fd\u7b49\u65b9\u9762\u5177\u6709\u4e0d\u53ef\u518d\u62c6\u5206\u7684\u6027\u8d28\u3002 \u5f53\u4e00\u4e2a\u539f\u5b50\u6784\u4ef6\u7684\u5b9e\u4f53\u5bf9\u5e94\u5355\u4e2a\u5bf9\u8c61\u65f6\uff0c\u53ef\u4ee5\u79f0\u8fd9\u4e2a\u6784\u4ef6\u662f\u5355\u5bf9\u8c61\u6784\u4ef6\uff0c\u5236\u4f5c\u6d41\u7a0b\u5982\u4e0b\uff1a \u5b9a\u4e49\u63a5\u53e3\u89c4\u7ea6\u3002 \u5236\u4f5c\u6784\u4ef6\u5b9e\u4f53\u3002 \u5f53\u4e00\u4e2a\u539f\u5b50\u6784\u4ef6\u5bf9\u5e94\u591a\u4e2a\u534f\u4f5c\u5bf9\u8c61\u65f6\uff0c\u5236\u4f5c\u6d41\u7a0b\u5982\u4e0b\uff1a \u9700\u8981\u5f15\u5165\u4e00\u4e2a\u63a7\u5236\u5bf9\u8c61\u3002 \u5b9a\u4e49\u6784\u4ef6\u63a5\u53e3\u7684\u89c4\u7ea6\u90e8\u5206\u3002 \u5236\u4f5c\u6784\u4ef6\u5b9e\u4f53\u3002","title":"\u539f\u5b50\u6784\u4ef6\u7684\u5236\u4f5c"},{"location":"cs/software/sca/#_24","text":"\u590d\u5408\u6784\u4ef6 Assemble \u662f\u7531\u539f\u5b50\u6784\u4ef6\u6216\u8005\u590d\u5408\u6784\u4ef6\u7ec4\u88c5\u800c\u6210\u7684\u3002 \u5236\u4f5c\u6d41\u7a0b\u5982\u4e0b\uff1a \u5b9a\u4e49\u6784\u4ef6\u7684\u63a5\u53e3\u89c4\u7ea6\u90e8\u5206 \u786e\u5b9a\u6240\u5305\u542b\u7684\u6210\u5458\u6784\u4ef6 \u5efa\u7acb\u5185\u90e8\u7684\u6210\u5458\u6784\u4ef6\u4e4b\u95f4\u7684\u63a5\u53e3\u8fde\u63a5\u5173\u7cfb \u5c06\u590d\u5408\u6784\u4ef6\u5bf9\u5916\u63d0\u4f9b\u548c\u8981\u6c42\u7684\u529f\u80fd\u6620\u5c04\u5230\u5185\u90e8\u6210\u5458\u6784\u4ef6\u76f8\u5e94\u7684\u529f\u80fd\u4e0a \u5728\u5efa\u7acb\u5185\u90e8\u6210\u5458\u4e4b\u95f4\u7684\u8fde\u63a5\u5173\u7cfb\u4ee5\u53ca\u590d\u5408\u6784\u4ef6\u548c\u6210\u5458\u6784\u4ef6\u7684\u529f\u80fd\u6620\u5c04\u65f6\uff0c\u9075\u5faa\u4e00\u4e0b\u89c4\u5219\uff1a \u6210\u5458\u6784\u4ef6\u5bf9\u5916\u8981\u6c42\u7684\u529f\u80fd\u53ea\u80fd\u7531\u4e00\u4e2a\u63d0\u4f9b\u8005\u63d0\u4f9b \u6210\u5458\u6784\u4ef6\u5bf9\u5916\u63d0\u4f9b\u7684\u529f\u80fd\u53ef\u4ee5\u6709\u591a\u4e2a\u4f7f\u7528\u8005 \u590d\u5408\u6784\u4ef6\u5bf9\u5916\u8981\u6c42\u7684\u529f\u80fd\u53ef\u4ee5\u6620\u5c04\u5230\u591a\u4e2a\u6210\u5458\u6784\u4ef6\u7684\u529f\u80fd\u4e0a \u590d\u5408\u6784\u4ef6\u5bf9\u5916\u63d0\u4f9b\u7684\u529f\u80fd\u53ea\u80fd\u6620\u5c04\u5230\u4e00\u4e2a\u6210\u5458\u6784\u4ef6\u7684\u529f\u80fd\u4e0a","title":"\u590d\u5408\u6784\u4ef6\u7684\u5236\u4f5c"},{"location":"cs/software/sca/#_25","text":"\u6784\u4ef6\u5e93\u662f\u5bf9\u6784\u4ef6\u5b9e\u65bd\u5206\u7c7b\u548c\u7ba1\u7406\u7684\u673a\u6784\u3002","title":"\u6784\u4ef6\u7684\u7ba1\u7406\u4e0e\u7ef4\u62a4"},{"location":"cs/software/sca/#_26","text":"\u6784\u4ef6\u5e93\u7406\u8bba\u7814\u7a76\u7684\u91cd\u70b9\u662f\u6784\u4ef6\u5206\u7c7b\u4e0e\u68c0\u7d22\uff0c\u5373\u7814\u7a76\u6784\u4ef6\u5206\u7c7b\u7b56\u7565\u3001\u7ec4\u7ec7\u6a21\u5f0f\u3001\u68c0\u7d22\u624b\u6bb5\u548c\u6784\u4ef6\u76f8\u4f3c\u6027\u5206\u6790\u7b49\u3002 \u9886\u57df\u4e0a\u6784\u4ef6\u5e93\u6ee1\u8db3\u7684\u6761\u4ef6\uff1a \u9886\u57df\u5b8c\u6574\u6027 \u9886\u57df\u62bd\u8c61\u6027 \u9886\u57df\u6807\u51c6\u5316","title":"\u6784\u4ef6\u5e93\u7684\u7ec4\u7ec7"},{"location":"cs/software/sca/#_27","text":"\u5173\u952e\u5b57\u5206\u7c7b\u6cd5 \u8d85\u6587\u672c\u7ec4\u7ec7\u6cd5 \u523b\u9762\u5206\u7c7b\u6cd5 \u7531\u4e00\u7ec4\u63cf\u8ff0\u6784\u4ef6\u672c\u8d28\u7279\u5f81\u7684\u523b\u9762\u7ec4\u6210\uff0c\u6bcf\u4e2a\u523b\u9762\u4ece\u4e0d\u540c\u7684\u89d2\u5ea6\u5bf9\u6784\u4ef6\u8fdb\u884c\u5206\u7c7b\u3002 \u4ece\u8868\u793a\u7684\u89d2\u5ea6\u6765\u770b\uff0c\u523b\u9762\u662f\u4e00\u9897\u6709\u5411\u6811\uff0c\u6839\u8282\u70b9\u7684\u503c\u662f\u8be5\u523b\u9762\u7684\u540d\u79f0\uff0c\u6839\u8282\u70b9\u6240\u6709\u5b50\u6811\u6784\u6210\u7684\u68ee\u6797\u79f0\u4e3a\u672f\u8bed\u7a7a\u95f4 \u7279\u70b9\uff1a \u5bf9\u6784\u4ef6\u8fdb\u884c\u4e86\u591a\u89c6\u89d2\u4e0b\u7684\u5206\u7c7b\u63cf\u8ff0 \u6784\u4ef6\u5206\u7c7b\u63cf\u8ff0\u7684\u672f\u8bed\u7a7a\u95f4\u6613\u4e8e\u4fee\u6539\u548c\u7ef4\u62a4","title":"\u6784\u4ef6\u5e93\u7684\u5206\u7c7b\u6a21\u5f0f"},{"location":"cs/software/sca/#_28","text":"","title":"\u57fa\u4e8e\u6784\u4ef6"},{"location":"cs/software/sca/#_29","text":"\u6784\u4ef6\u7ec4\u88c5\u5c31\u662f\u786e\u5b9a\u6784\u4ef6\u6240\u63d0\u4f9b\u7684\u670d\u52a1\u4e0e\u63a5\u53e3\u4e4b\u95f4\u7684\u5339\u914d\u548c\u6620\u5c04\uff0c\u5e76\u63d0\u4f9b\u6ee1\u8db3\u5373\u5c06\u6216\u5c06\u6765\u90e8\u7f72\u7684\u7ea6\u675f\u6761\u4ef6\u3002","title":"\u6784\u4ef6\u7ec4\u88c5"},{"location":"cs/software/sca/#_30","text":"\u4efb\u4f55\u57fa\u4e8e\u6784\u4ef6\u7684\u5f00\u53d1\u5e94\u7b26\u5408\u4ee5\u4e0b\u6784\u4ef6\uff1a \u8981\u6e05\u6670\u5730\u5206\u79bb\u6784\u4ef6\u7684\u89c4\u683c\u8bf4\u660e\u548c\u8bbe\u8ba1\u5b9e\u73b0 \u91cd\u70b9\u5173\u6ce8\u4e8e\u63a5\u53e3\u7684\u5b9e\u73b0\u65b9\u6cd5 \u5f62\u5f0f\u5730\u63cf\u8ff0\u6784\u4ef6\u7684\u8bed\u4e49\uff0c\u4e3b\u8981\u662f\u5bf9\u6784\u4ef6\u884c\u4e3a\u7684\u63cf\u8ff0\uff0c\u5176\u6838\u5fc3\u662f\u64cd\u4f5c\u7279\u5f81\u7684\u8bed\u4e49\u7ec6\u8282 \u4e25\u683c\u5730\u8bb0\u5f55\u7ec6\u5316\u8fc7\u7a0b\uff0c\u5e76\u4e14\u52a0\u4ee5\u9a8c\u8bc1 \u4ece\u6280\u672f\u89d2\u5ea6\u770b\uff0c\u6784\u4ef6\u7ec4\u88c5\u8fc7\u7a0b\u4e2d\u9700\u8003\u8651\u7684\u95ee\u9898\uff1a \u6bcf\u4e2a\u6784\u4ef6\u6ee1\u8db3\u5176\u4ed6\u6784\u4ef6\u7684\u9650\u5236\u6761\u4ef6\u95ee\u9898 \u6784\u4ef6\u7ec4\u88c5\u4e2d\u7684\u63a5\u53e3\u5339\u914d\u548c\u6620\u5c04\u95ee\u9898 \u6784\u4ef6\u7684\u5305\u88c5\u95ee\u9898","title":"\u6784\u4ef6\u7ec4\u88c5\u4e2d\u7684\u95ee\u9898"},{"location":"cs/software/sca/#_31","text":"\u5b9a\u5236 \u8bbe\u7f6e\u53c2\u6570\u503c \u5b8c\u6210\u9700\u8981\u7528\u6237\u5b9a\u5236\u7684\u4ee3\u7801 \u6709\u65f6\u5019\u9700\u8981\u91cd\u65b0\u7f16\u8bd1\u6784\u4ef6 \u5305\u88c5 \u9002\u914d \u9002\u914d\u5668 \u9002\u914d\u5668\u4f4d\u4e8e\u4e24\u4e2a\u6784\u4ef6\u4e4b\u95f4\uff0c\u7528\u4ee5\u8f6c\u6362\u4e24\u4e2a\u6784\u4ef6\u5bf9\u63a5\u53e3\u7684\u4e0d\u540c\u7406\u89e3\uff0c\u662f\u8bf7\u6c42\u8005\u548c\u88ab\u8bf7\u6c42\u8005\u4e4b\u95f4\u7684\u6620\u5c04 \u9002\u914d\u5668\u672c\u8eab\u4e0d\u5305\u542b\u8868\u793a\u5c42\u3001\u4e1a\u52a1\u5c42\u548c\u6570\u636e\u8bbf\u95ee\u5c42\u7684\u903b\u8f91\uff0c\u4e5f\u4e0d\u80fd\u6269\u5c55\u6784\u4ef6\u7684\u529f\u80fd\uff08\u4e0e\u5305\u88c5\u4e0d\u540c\uff09 \u9002\u914d\u5668\u4e0d\u662f\u6784\u4ef6\uff0c\u4e0d\u5c5e\u4e8e\u88ab\u9002\u914d\u7684\u4e24\u4e2a\u6784\u4ef6\u7684\u4efb\u4f55\u4e00\u4e2a\uff0c\u4efb\u4f55\u4e00\u4e2a\u6784\u4ef6\u7684\u4e0d\u5b58\u5728\u5c06\u5bfc\u81f4\u9002\u914d\u5668\u7684\u6d88\u5931 \u9a8c\u8bc1\u548c\u9519\u8bef\u5904\u7406\u529f\u80fd \u5b89\u5168\u6027","title":"\u6784\u4ef6\u7ec4\u88c5\u7684\u65b9\u6cd5\u4e0e\u6280\u672f"},{"location":"cs/software/sca/#_32","text":"\u6784\u4ef6\u7ec4\u88c5\u7684\u5b9e\u65bd\u5185\u5bb9\uff1a \u5f3a\u5236\u5b9e\u73b0\u6784\u4ef6\u7684\u9650\u5236\u6761\u4ef6 \u5904\u7406\u529f\u80fd\u548c\u6570\u636e\u7684\u4e0d\u5339\u914d \u7ba1\u7406\u6784\u4ef6\u95f4\u7684\u5173\u7cfb \u6784\u4ef6\u4e4b\u95f4\u7684\u5173\u7cfb\u7c7b\u578b\u5305\u62ec\u62e5\u6709\u5173\u7cfb\u548c\u5916\u90e8\u5173\u7cfb\u3002\u4f46\u4ece\u5173\u7cfb\u7684\u8868\u793a\u89d2\u5ea6\u6765\u770b\uff0c\u53ef\u5206\u4e3a\u76f4\u63a5\u94fe\u63a5\u548c\u95f4\u63a5\u94fe\u63a5\u3002","title":"\u6784\u4ef6\u7ec4\u88c5\u7684\u5185\u5bb9"},{"location":"cs/software/sca/#_33","text":"\u63d0\u4f9b\u6784\u4ef6\u8fd0\u884c\u65f6\u7684\u914d\u7f6e\u6570\u636e \u63d0\u4f9b\u90e8\u7f72\u65f6\u7528\u5230\u7684\u6784\u4ef6\u5185\u5efa\u914d\u7f6e\u6216\u5b9a\u5236\u670d\u52a1 \u63d0\u4f9b\u6784\u4ef6\u7ec4\u88c5\u7684\u8f85\u52a9\u73af\u5883","title":"\u6784\u4ef6\u90e8\u7f72"},{"location":"cs/software/sca/#_34","text":"\u8f6f\u4ef6\u914d\u7f6e\u7ba1\u7406 SCM \u662f\u6307\u4e00\u5957\u6309\u89c4\u5219\u7ba1\u7406\u8f6f\u4ef6\u5f00\u53d1\u3001\u7ef4\u62a4\uff0c\u4ee5\u53ca\u5176\u4e2d\u5404\u79cd\u4e2d\u95f4\u8f6f\u4ef6\u4ea7\u54c1\u7684\u65b9\u6cd5\u3002 \u914d\u7f6e\u8bc6\u522b \u53d8\u5316\u63a7\u5236 \u72b6\u6001\u8bb0\u5f55\u62a5\u544a \u5ba1\u8ba1","title":"\u57fa\u4e8e\u6784\u4ef6\u7684\u8f6f\u4ef6\u914d\u7f6e\u7ba1\u7406"},{"location":"cs/software/sca/#_35","text":"","title":"\u9886\u57df\u5de5\u7a0b"},{"location":"cs/software/sca/#_36","text":"\u5e94\u7528\u5de5\u7a0b \uff1a\u9488\u5bf9\u4e00\u7ec4\u7279\u6709\u7684\u9700\u6c42\uff0c\u4ea7\u751f\u4e00\u4e2a\u7279\u5b9a\u7684\u89e3\u51b3\u65b9\u6848 \u9886\u57df\u5de5\u7a0b \uff1a\u9488\u5bf9\u4e00\u4e2a\u9886\u57df\u4e2d\u7684\u6240\u6709\u7cfb\u7edf\uff0c\u800c\u4e0d\u5c40\u9650\u4e8e\u67d0\u4e2a\u7279\u5b9a\u7684\u7cfb\u7edf \u4e0e\u5e94\u7528\u5de5\u7a0b\u76f8\u6bd4 \uff1a\u9886\u57df\u5de5\u7a0b\u5904\u4e8e\u4e00\u4e2a\u8f83\u9ad8\u7684\u62bd\u8c61\u7ea7\u522b\u4e0a","title":"\u9886\u57df\u5de5\u7a0b\u4e0e\u5e94\u7528\u5de5\u7a0b"},{"location":"cs/software/sca/#_37","text":"\u7ec4\u6210\uff1a\u9886\u57df\u5206\u6790\u3001\u9886\u57df\u8bbe\u8ba1\u3001\u9886\u57df\u5b9e\u73b0 \u53ef\u590d\u7528\u8d44\u4ea7\uff1a\u9886\u57df\u5206\u6790\u3001\u9886\u57df\u8bbe\u8ba1\u3001\u8d44\u4ea7\u83b7\u53d6\u3001\u8d44\u4ea7\u5206\u7c7b\u3001\u8d44\u4ea7\u7ef4\u62a4","title":"\u9886\u57df\u5de5\u7a0b\u7684\u6784\u6210"},{"location":"cs/software/sca/#_38","text":"\u7ec4\u6210\uff1a\u4ea7\u54c1\u7a7a\u95f4\u3001\u6784\u4ef6\u4e0e\u4f53\u7cfb\u7ed3\u6784\u3001\u751f\u4ea7\u8ba1\u5212\u3001\u9700\u6c42\u3001\u4ea7\u54c1\u3001\u7ba1\u7406","title":"\u5e94\u7528\u5de5\u7a0b\u7684\u6784\u6210"},{"location":"cs/software/sca/#_39","text":"","title":"\u9886\u57df\u5de5\u7a0b\u4e0e\u5e94\u7528\u5de5\u7a0b\u7684\u5173\u7cfb"},{"location":"cs/software/sca/#_40","text":"\u53d8\u5316\u6027\u7684\u5206\u7c7b \u53d8\u5316\u6027\u7ed1\u5b9a \u53d8\u5316\u6027\u63a7\u5236 \u53d8\u5316\u6027\u5904\u7406\u6280\u672f","title":"\u9886\u57df\u5171\u6027\u4e0e\u53d8\u5316\u6027"},{"location":"cs/software/sca/#_41","text":"","title":"\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u7684\u57fa\u672c\u5185\u5bb9"},{"location":"cs/software/sca/#_42","text":"\u51af \u00b7 \u8bfa\u4f9d\u66fc\u7ed3\u6784 \u57fa\u4e8e\u529f\u80fd\u6a21\u5757\u7684\u8f6f\u4ef6\u7ed3\u6784 \u57fa\u4e8e\u6784\u4ef6\u7684\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784","title":"\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u7684\u6982\u5ff5"},{"location":"cs/software/sca/#_43","text":"Garlan & Shaw \u6a21\u578b\uff1a SA = {Components, Connectors, Constrains} Perry & Wolf \u6a21\u578b\uff1a SA = {Elements, Form, Rational} CFRP \u6a21\u578b\uff1aSA = {Elements, Interfaces, COnnections, Connection Semantics} Vestal \u6a21\u578b\uff1a SA = {Component, Idioms/Styles, Common Patterns of Interaction} IEEE 510\uff1aArchitecture = {Component, Connector, Environment, Principle} Boehm \u6a21\u578b\uff1aSA = {Components, COnnections, Constrains, Stakeholders'needs, Rationals}","title":"\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u7684\u5b9a\u4e49"},{"location":"cs/software/sca/#_44","text":"\u6784\u4ef6 \u8fde\u63a5\u4ef6 \u4f53\u7cfb\u7ed3\u6784\u914d\u7f6e","title":"\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u7684\u6784\u6210\u8981\u7d20"},{"location":"cs/software/sca/#_45","text":"","title":"\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u7684\u7814\u7a76\u5185\u5bb9"},{"location":"cs/software/sca/#adl","text":"","title":"\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u63cf\u8ff0\u8bed\u8a00 ADL"},{"location":"cs/software/sca/#_46","text":"","title":"\u4f53\u7cfb\u7ed3\u6784\u6784\u9020"},{"location":"cs/software/sca/#_47","text":"","title":"\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u7684\u5206\u6790\u3001\u8bbe\u8ba1\u548c\u9a8c\u8bc1"},{"location":"cs/software/sca/#_48","text":"","title":"\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u7684\u53d1\u73b0\u3001\u6f14\u5316\u548c\u590d\u7528"},{"location":"cs/software/sca/#_49","text":"","title":"\u57fa\u4e8e\u4f53\u7cfb\u7ed3\u6784\u7684\u8f6f\u4ef6\u5f00\u53d1\u8fc7\u7a0b"},{"location":"cs/software/sca/#dssa","text":"","title":"\u7279\u5b9a\u9886\u57df\u7684\u4f53\u7cfb\u7ed3\u6784 DSSA"},{"location":"cs/software/sca/#_50","text":"","title":"\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u652f\u6301\u5de5\u5177"},{"location":"cs/software/sca/#_51","text":"","title":"\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f\u4e0e\u6a21\u5f0f\u7cfb\u7edf"},{"location":"cs/software/sca/#_52","text":"","title":"\u6a21\u5f0f\u7684\u6982\u5ff5\u4e0e\u5206\u7c7b"},{"location":"cs/software/sca/#_53","text":"\u6bcf\u4e2a\u6a21\u5f0f\u63cf\u8ff0\u4e86\u4e00\u4e2a\u5728\u6211\u4eec\u5468\u56f4\u4e0d\u65ad\u91cd\u590d\u53d1\u751f\u7684\u95ee\u9898\uff0c\u4ee5\u53ca\u8be5\u95ee\u9898\u89e3\u51b3\u65b9\u6848\u7684\u6838\u5fc3\u5185\u5bb9\u3002\u8fd9\u6837\uff0c\u4f60\u53ef\u4ee5\u4e00\u6b21\u53c8\u4e00\u6b21\u5730\u4f7f\u7528\u8be5\u65b9\u6848\u800c\u4e0d\u5fc5\u505a\u91cd\u590d\u52b3\u52a8\u3002 \u89e3\u51b3\u7b56\u7565\uff1a\u5c06\u6a21\u578b\u3001\u89c6\u56fe\u3001\u63a7\u5236\u5668\u5212\u5206\u5f00\u3002\u5c31\u662f\u4e00\u4e2a\u5178\u578b\u7684\u6a21\u578b \u6a21\u578b-\u89c6\u56fe-\u63a7\u5236\u5668\u6a21\u5f0f\uff08MVC\uff09","title":"\u6a21\u5f0f\u7684\u5b9a\u4e49"},{"location":"cs/software/sca/#_54","text":"\u8bed\u5883\uff1a\u95ee\u9898\u51fa\u73b0\u7684\u80cc\u666f \u95ee\u9898\uff1a\u5728\u8bed\u5883\u4e2d\u91cd\u590d\u51fa\u73b0\u7684\u95ee\u9898 \u89e3\u51b3\u65b9\u6848\uff1a\u7ed9\u51fa\u5982\u4f55\u89e3\u51b3\u518d\u73b0\u7684\u95ee\u9898\uff0c\u6216\u8005\u8bf4\u5982\u4f55\u5e73\u8861\u4e0e\u4e4b\u76f8\u5173\u7684\u5f3a\u5236\u6761\u4ef6 \u5b9e\u73b0\uff1a\u5c31\u662f\u5c06\u4ee5\u4e0a\u7684\u89e3\u51b3\u65b9\u6848\u4ed8\u8bf8\u5b9e\u8df5","title":"\u6a21\u5f0f\u7684\u6784\u6210\u8981\u7d20"},{"location":"cs/software/sca/#_55","text":"\u8bbe\u8ba1\u590d\u7528 \u4ee3\u7801\u590d\u7528 \u7cfb\u7edf\u7ec4\u6210\u66f4\u6613\u4e8e\u88ab\u4ed6\u4eba\u7406\u89e3 \u6709\u5229\u4e8e\u7cfb\u7edf\u7684\u4e92\u64cd\u4f5c\u6027 \u6709\u5229\u4e8e\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u7684\u5206\u6790 \u6709\u5229\u4e8e\u7279\u5b9a\u6a21\u5f0f\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u7684\u53ef\u89c6\u5316","title":"\u6a21\u5f0f\u7684\u4f18\u52bf"},{"location":"cs/software/sca/#_56","text":"\u5e95\u5c42\u6a21\u5f0f\uff1a\u60ef\u7528\u6cd5 \u4e2d\u5c42\u6a21\u5f0f\uff1a\u8bbe\u8ba1\u6a21\u5f0f \u9ad8\u5c42\u6a21\u5f0f\uff1a\u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f","title":"\u6a21\u5f0f\u5206\u7c7b"},{"location":"cs/software/sca/#_57","text":"\u60ef\u7528\u6cd5\u9488\u5bf9\u8bbe\u8ba1\u548c\u5b9e\u73b0\u65b9\u9762\uff0c\u662f\u9488\u5bf9\u5177\u4f53\u7279\u5b9a\u7a0b\u5e8f\u8bbe\u8ba1\u8bed\u8a00\u7684\u4f4e\u5c42\u6a21\u5f0f\uff0c\u5b83\u63cf\u8ff0\u5982\u4f55\u7528\u7ed9\u5b9a\u7684\u8bed\u8a00\u7279\u5f81\u6765\u5b9e\u73b0\u6784\u4ef6\u7684\u7279\u5b9a\u65b9\u9762\u6216\u6784\u4ef6\u4e4b\u95f4\u7684\u5173\u7cfb\u3002 \u7279\u70b9 \u60ef\u7528\u6cd5\u662f\u4e0e\u5177\u4f53\u8bed\u8a00\u5bc6\u5207\u76f8\u5173\u7684\u7f16\u7a0b\u7ecf\u9a8c\u7684,\u603b\u7ed3\u3002 \u60ef\u7528\u6cd5\u63cf\u8ff0\u5982\u4f55\u4f7f\u7528\u7ed9\u5b9a\u7684\u8bed\u8a00\u7279\u5f81\u6765\u5b9e\u73b0\u6784\u4ef6\u7684\u7279\u5b9a\u65b9\u9762\u53ca\u5176\u5173\u7cfb\u3002 \u60ef\u7528\u6cd5\u4ee3\u8868\u6700\u5e95\u5c42\u7684\u6a21\u5f0f\u3002 \u60ef\u7528\u6cd5\u66f4\u5173\u6ce8\u8bbe\u8ba1\u7684\u5b9e\u73b0\u3002 \u60ef\u7528\u6cd5\u53ef\u80fd\u662f\u4e00\u79cd\u7279\u5b9a\u8bbe\u8ba1\u6a21\u5f0f\u7684\u5177\u4f53\u5b9e\u73b0\u3002 \u76ca\u5904 \u4e00\u7ec4\u76f8\u5173\u7684\u60ef\u7528\u6cd5\u4f1a\u4f7f\u7a0b\u5e8f\u5f62\u6210\u4e00\u81f4\u7684\u98ce\u683c\u3002 \u4e00\u81f4\u7684\u7a0b\u5e8f\u8bbe\u8ba1\u98ce\u683c\u5c06\u52a0\u901f\u7a0b\u5e8f\u8bbe\u8ba1\u7684\u8fdb\u7a0b\u3002 \u4e00\u81f4\u7684\u7a0b\u5e8f\u8bbe\u8ba1\u98ce\u683c\u4f7f\u7a0b\u5e8f\u66f4\u5bb9\u6613\u7406\u89e3\uff0c\u6709\u5229\u4e8e\u7a0b\u5e8f\u7684\u5f00\u53d1\u548c\u7ef4\u62a4\u3002 \u00b7","title":"\u60ef\u7528\u6cd5"},{"location":"cs/software/sca/#_58","text":"\u4e2d\u7b49\u89c4\u6a21\u7684\u6a21\u5f0f\uff0c\u5728\u89c4\u6a21\u4e0a\u6bd4\u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f\u8981\u5c0f\uff0c\u4f46\u5728\u7ea7\u522b\u4e0a\u6bd4\u7279\u5b9a\u7684\u7f16\u7a0b\u8bed\u8a00\u7684\u60ef\u7528\u6cd5\u8981\u9ad8","title":"\u8bbe\u8ba1\u6a21\u5f0f"},{"location":"cs/software/sca/#_59","text":"\u7ed3\u6784\u5316\u5206\u89e3\uff1a\u6700\u666e\u904d\u7684\u6a21\u5f0f\u662f\u6574\u4f53 - \u90e8\u5206\u6a21\u5f0f \u5de5\u4f5c\u7684\u7ec4\u7ec7\uff1a\u4e3b\u63a7 - \u4ece\u5c5e\u6a21\u5f0f \u8bbf\u95ee\u63a7\u5236\uff1a\u4ee3\u7406\u8bbe\u8ba1\u6a21\u5f0f\u3001\u5916\u89c2\u6a21\u5f0f\u548c\u8fed\u4ee3\u5668\u6a21\u5f0f \u7ba1\u7406\uff1a\u547d\u4ee4\u5904\u7406\u5668\u6a21\u5f0f\u3001\u89c6\u56fe\u5904\u7406\u7a0b\u5e8f\u6a21\u5f0f \u901a\u4fe1\uff1a\u8f6c\u53d1\u5668 - \u63a5\u6536\u5668\u6a21\u5f0f\u3001\u5ba2\u6237\u673a - \u5206\u914d\u5668 - \u670d\u52a1\u5668\u6a21\u5f0f\u3001\u51fa\u7248\u8005 - \u8ba2\u9605\u8005\u6a21\u5f0f","title":"\u8bbe\u8ba1\u6a21\u5f0f\u95ee\u9898\u7c7b\u522b"},{"location":"cs/software/sca/#_60","text":"","title":"\u8bbe\u8ba1\u6a21\u5f0f\u5206\u7c7b"},{"location":"cs/software/sca/#_61","text":"","title":"\u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f"},{"location":"cs/software/sca/#_62","text":"\u4e00\u4e2a\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u7684\u6a21\u5f0f\u63cf\u8ff0\u4e86\u4e00\u4e2a\u7a0b\u5e8f\u5728\u7279\u5b9a\u8bbe\u8ba1\u8bed\u5883\u4e2d\u7684\u7279\u6b8a\u7684\u518d\u73b0\u8bbe\u8ba1\u95ee\u9898\uff0c\u5e76\u4e3a\u5b83\u7684\u89e3\u51b3\u65b9\u6848\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7ecf\u8fc7\u5145\u5206\u9a8c\u8bc1\u7684\u901a\u7528\u56fe\u5f0f\u3002\u89e3\u51b3\u65b9\u6848\u56fe\u5f0f\u901a\u8fc7\u63cf\u8ff0\u5176\u7ec4\u6210\u6784\u4ef6\u3001\u5b83\u4eec\u7684\u8d23\u4efb\u548c\u76f8\u4e92\u5173\u7cfb\uff0c\u4ee5\u53ca\u5b83\u4eec\u7684\u534f\u4f5c\u65b9\u5f0f\u6765\u5177\u4f53\u6307\u5b9a\u3002 \u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f\u662f\u6a21\u5f0f\u7cfb\u7edf\u4e2d\u7684\u6700\u9ad8\u7b49\u7ea7\u6a21\u5f0f","title":"\u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f\u7684\u5b9a\u4e49"},{"location":"cs/software/sca/#_63","text":"\u4ece\u6df7\u6c8c\u5230\u7ed3\u6784 \u5206\u5c42\u6a21\u5f0f \u7ba1\u9053/\u8fc7\u6ee4\u5668\u6a21\u5f0f \u9ed1\u677f\u6a21\u5f0f \u5206\u5e03\u5f0f\u7cfb\u7edf \u4ee3\u7406\u6a21\u5f0f \u4ea4\u4e92\u5f0f\u7cfb\u7edf \u6a21\u578b - \u89c6\u56fe - \u63a7\u5236\u5668\u6a21\u5f0f\uff08MVC\uff09 \u8868\u793a - \u62bd\u8c61 - \u63a7\u5236\u6a21\u5f0f\uff08PAC\uff09 \u9002\u5e94\u6027\u6a21\u5f0f \u53cd\u5c04\u6a21\u5f0f \u5fae\u6838\u6a21\u5f0f","title":"\u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f\u7684\u5206\u7c7b"},{"location":"cs/software/sca/#_64","text":"\u7ba1\u9053/\u8fc7\u6ee4\u5668 \u57fa\u4e8e\u4e8b\u4ef6\u7684\u9690\u5f0f\u8c03\u7528 \u5206\u5c42\u98ce\u683c \u6570\u636e\u62bd\u8c61\u548c\u9762\u5411\u5bf9\u8c61 \u4ed3\u5e93\u4e0e\u9ed1\u677f\u6a21\u5f0f \u89e3\u91ca\u5668 \u4ee3\u7406\u6a21\u5f0f \u5fae\u6838 \u5ba2\u6237/\u670d\u52a1\u5668 \u6b63\u4ea4\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784 C2 \u5f02\u6784\u7ed3\u6784 \u53cd\u5c04 \u6a21\u578b - \u89c6\u56fe - \u63a7\u5236\u5668\uff08MVC\uff09 \u8868\u793a - \u62bd\u8c61 - \u63a7\u5236\uff08PAC\uff09","title":"\u5e38\u7528\u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f"},{"location":"cs/software/sca/#_65","text":"","title":"\u6a21\u5f0f\u7cfb\u7edf\u4e0e\u4f53\u7cfb\u7ed3\u6784\u98ce\u683c"},{"location":"cs/software/sca/#_66","text":"\u6a21\u5f0f\u7cfb\u7edf \uff1a\u5c06\u4e00\u4e2a\u4e2a\u5355\u72ec\u7684\u6a21\u5f0f\u6346\u7ed1\u5728\u4e00\u8d77\uff0c\u63cf\u8ff0\u4e86\u6a21\u5f0f\u4e4b\u95f4\u7684\u5173\u7cfb\u3001\u6a21\u5f0f\u7684\u5b9e\u73b0\uff0c\u4ee5\u53ca\u6a21\u5f0f\u600e\u6837\u76f8\u4e92\u8054\u7cfb\u76f8\u4e92\u8865\u5145\u6765\u6709\u6548\u652f\u6301\u8f6f\u4ef6\u5f00\u53d1\u7684\u3002 \u6a21\u5f0f\u8bed\u8a00 \uff1a\u7531\u7ed3\u6784\u548c\u89c4\u5219\u6784\u6210\u3002\u7ed3\u6784\u63cf\u8ff0\u4e86\u6a21\u5f0f\u662f\u66f4\u5c0f\u6a21\u5f0f\u7684\u6a21\u5f0f;\u89c4\u5219\u63cf\u8ff0\u4e86\u521b\u5efa\u6a21\u5f0f\u7684\u65b9\u5f0f\u548c\u4e0e\u5176\u4ed6\u6a21\u5f0f\u7684\u6392\u5217\u65b9\u5f0f\u3002 SA \u6a21\u5f0f\u7cfb\u7edf \uff1a\u662f\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f\u7684\u6c47\u96c6\uff0c\u5305\u62ec\u6a21\u5f0f\u5728\u8f6f\u4ef6\u5f00\u53d1\u4e2d\u7684\u5b9e\u73b0\u3001\u7ec4\u5408\u548c\u4f7f\u7528\u6307\u5357\u3002 \u6a21\u5f0f\u7cfb\u7edf\u7684\u6f14\u5316 \uff1a\u5305\u62ec\u6a21\u5f0f\u63cf\u8ff0\u7684\u6f14\u5316\u3001\u6a21\u5f0f\u7684\u91c7\u6398\u3001\u65b0\u6a21\u5f0f\u7684\u96c6\u6210\u548c\u5220\u9664\u8fc7\u65f6\u7684\u6a21\u5f0f\u7b49\u3002","title":"\u82e5\u5e72\u5b9a\u4e49"},{"location":"cs/software/sca/#_67","text":"\u5305\u542b\u8db3\u591f\u591a\u7684\u57fa\u672c\u6a21\u5f0f \u6240\u6709\u7684\u6a21\u5f0f\u5e94\u8be5\u6709\u7edf\u4e00\u7684\u63cf\u8ff0\u5f62\u5f0f \u5177\u6709\u5bf9\u6a21\u5f0f\u5982\u4f55\u7ec4\u7ec7\u7684\u6a21\u5f0f \u652f\u6301\u8f6f\u4ef6\u6784\u9020\u7684\u65b9\u6cd5 \u652f\u6301\u6a21\u5f0f\u7cfb\u7edf\u7684\u81ea\u6211\u70df\u82b1","title":"\u6a21\u5f0f\u7cfb\u7edf\u5bf9\u8f6f\u4ef6\u5f00\u53d1\u7684\u652f\u6301\u6761\u4ef6"},{"location":"cs/software/sca/#_68","text":"","title":"\u6a21\u5f0f\u7cfb\u7edf\u7684\u5168\u5c40\u5206\u7c7b\u89c6\u56fe"},{"location":"cs/software/sca/#_69","text":"\u6307\u5b9a\u548c\u7cbe\u786e\u5730\u63cf\u8ff0\u95ee\u9898 \u9488\u5bf9\u95ee\u9898\u7684\u89c4\u6a21\uff0c\u9009\u62e9\u201c\u6a21\u5f0f\u7c7b\u522b\u201d\uff08\u4e0d\u662f\u6309\u95ee\u9898\u7c7b\u522b\u9009\u53d6\uff09 \u5bf9\u95ee\u9898\u8fdb\u884c\u5206\u7c7b\uff0c\u521d\u6b65\u9009\u53d6\u89e3\u51b3\u95ee\u9898\u7684\u6a21\u5f0f\u548c\u53ef\u9009\u6a21\u5f0f \u5bf9\u95ee\u9898\u7684\u5206\u7c7b\u548c\u76f8\u5e94\u7684\u89e3\u51b3\u6a21\u5f0f\u8fdb\u884c\u6bd4\u8f83\uff08\u4f18\u7f3a\u70b9\uff09 \u8fdb\u4e00\u6b65\u9009\u53d6\u66f4\u5408\u9002\u7684\u89e3\u51b3\u65b9\u6848\u7684\u53d8\u4f53 \u5982\u679c\u53d1\u73b0\u95ee\u9898\u96be\u4ee5\u89e3\u51b3\uff0c\u5219\u91cd\u65b0\u8fdb\u884c\u95ee\u9898\u5206\u7c7b\uff0c\u8f6c\u81f3 3","title":"\u9762\u5411\u95ee\u9898\u7684\u6a21\u5f0f\u9009\u62e9\u6b65\u9aa4"},{"location":"cs/software/sca/#_70","text":"\u4f53\u7cfb\u7ed3\u6784\u98ce\u683c\u4e3b\u8981\u63cf\u8ff0\u5e94\u7528\u7cfb\u7edf\u7684,\u603b\u4f53\u7ed3\u6784\u6846\u67b6\u3002\u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f\u53ef\u5b58\u5728\u4e8e\u5404\u79cd\u5e94\u7528\u7cfb\u7edf\u89c4\u6a21\u548c\u62bd\u8c61\u5c42\u6b21\u4e0a\uff0c\u4ece\u5b9a\u4e49\u5e94\u7528\u7cfb\u7edf\u7684\u603b\u4f53\u7ed3\u6784\u5230\u63cf\u8ff0\u600e\u6837\u7528\u7ed9\u5b9a\u7684\u7f16\u7a0b\u8bed\u8a00\u5b9e\u73b0\u7279\u5b9a\u95ee\u9898\u7684\u60ef\u7528\u6cd5\u6a21\u5f0f\u3002 \u4f53\u7cfb\u7ed3\u6784\u98ce\u683c\u76f8\u5bf9\u72ec\u7acb\u3002\u5404\u5e94\u7528\u7cfb\u7edf\u91c7\u7528\u4e0d\u540c\u7684\u98ce\u683c\u540e\uff0c\u4e0e\u7531\u5176\u4ed6\u98ce\u683c\u6784\u6210\u7684\u7cfb\u7edf\u8054\u7cfb\u8f83\u5c11\u3002\u800c\u6a21\u5f0f\u5f80\u5f80\u4f9d\u8d56\u4e8e\u5b83\u6240\u5305\u542b\u7684\u8f83\u5c0f\u7684\u6a21\u5f0f\u6216\u8005\u4e0e\u5b83\u76f8\u4e92\u4f5c\u7528\u7684\u6a21\u5f0f\u3002 \u6a21\u5f0f\u6bd4\u4f53\u7cfb\u7ed3\u6784\u98ce\u683c\u66f4\u52a0\u9762\u5411\u95ee\u9898\u3002\u4f53\u7cfb\u7ed3\u6784\u98ce\u683c\u4fa7\u91cd\u4e8e\u4ece\u5e94\u7528\u7cfb\u7edf\u4e2d\u62bd\u53d6\u51fa\u5b83\u4eec\u7684\u603b\u4f53\u7ec4\u7ec7\u7ed3\u6784\uff0c\u800c\u8f83\u5c11\u4ece\u5b9e\u9645\u8bbe\u8ba1\u73af\u5883\u6c34\u8003\u611f\u8bbe\u8ba1\u7684\u6280\u672f\u3002\u800c\u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f\u901a\u5e38\u7531\u95ee\u9898\u51fa\u73b0\u7684\u8bed\u5883\u3001\u89e3\u51b3\u65b9\u6848\u548c\u9002\u7528\u573a\u666f\u7ec4\u6210\u3002","title":"\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u6a21\u5f0f\u4e0e\u8f6f\u4ef6\u4f53\u7cfb\u7ed3\u6784\u98ce\u683c\u7684\u6bd4\u8f83"},{"location":"cv/","text":"\u8ba1\u7b97\u673a\u89c6\u89c9 \u00b6 Abstract \u5f52\u6863\u4e00\u4e9b\u8ba1\u7b97\u673a\u89c6\u89c9\uff08\u63ba\u70b9\u673a\u5668\u4eba\uff0c\u4f8b\u5982 ROS\uff09\u76f8\u5173\u5185\u5bb9\u7684\u7b14\u8bb0 \u5927\u591a\u90fd\u662f\u81ea\u5b66\uff0c\u7406\u89e3 CV \u7684\u672c\u8d28\uff08\u96fe Table of Contents \u00b6 \u591a\u89c6\u56fe\u51e0\u4f55 \u6444\u50cf\u673a\u548c\u7ed3\u6784\u7684 3D \u91cd\u6784 2129 7 mins 1696560509 \u5bf9\u6781\u51e0\u4f55\u548c\u57fa\u672c\u77e9\u9635 2758 9 mins 1696560259 \u5355\u89c6\u56fe\u51e0\u4f55 3229 11 mins 1696489915 \u6444\u50cf\u673a\u6a21\u578b 3059 10 mins 1696486155 \u8ba1\u7b97\u6444\u50cf\u673a\u77e9\u9635 P 1971 7 mins 1696486155 \u7b97\u6cd5\u8bc4\u4ef7\u548c\u8bef\u5dee\u5206\u6790 1575 5 mins 1696380447 2D \u5c04\u5f71\u51e0\u4f55\u548c\u53d8\u6362 4643 15 mins 1696243054 \u4f30\u8ba1\u2014\u20142D \u5c04\u5f71\u53d8\u6362 6200 21 mins 1696243054 3D \u5c04\u5f71\u51e0\u4f55\u548c\u53d8\u6362 2835 9 mins 1695950449 SLAM \u89c6\u89c9 SLAM 14 \u8bb2 2363 34 9 mins 1701330301 \u70b9\u4e91\u914d\u51c6 ICP 2614 9 mins 1701761771 \u524d\u7f6e\u77e5\u8bc6 2036 7 mins 1701671192 function buttonHandler(i) { let content = document.getElementsByClassName(\"content-item-wrapper\")[i]; let button = document.getElementsByClassName(\"title-wrapper\")[i].getElementsByTagName(\"button\")[0]; if (content.style.display == \"none\") { content.style.display = \"block\"; button.children[0].children[0].style.transform = \"rotate(0deg)\"; } else { content.style.display = \"none\"; button.children[0].children[0].style.transform = \"rotate(-90deg)\"; } } function produce_time() { let time = document.getElementsByClassName(\"item-actions\"); for (let i = 0; i < time.length; i++) { let timestamp; if (time[i].childElementCount > 0) { timestamp = time[i].children[0].innerHTML; } else { timestamp = time[i].innerHTML; } let date = new Date(parseInt(timestamp) * 1000); let now = new Date(); let diff = now.getTime() - date.getTime(); let years = Math.floor(diff / (24 * 3600 * 1000 * 365)); let months = Math.floor(diff / (24 * 3600 * 1000 * 30)); let days = Math.floor(diff / (24 * 3600 * 1000)); let hours = Math.floor((diff % (24 * 3600 * 1000)) / (3600 * 1000)); let minutes = Math.floor((diff % (3600 * 1000)) / (60 * 1000)); let seconds = Math.floor((diff % (60 * 1000)) / 1000); if (years > 0) { time[i].innerHTML = years + \" years ago\"; } else if (months > 0) { time[i].innerHTML = months + \" months ago\"; } else if (days > 0) { time[i].innerHTML = days + \" days ago\"; } else if (hours > 0) { time[i].innerHTML = hours + \" hours ago\"; } else if (minutes > 0) { time[i].innerHTML = minutes + \" minutes ago\"; } else { time[i].innerHTML = seconds + \" seconds ago\"; } } } produce_time();","title":"\u8ba1\u7b97\u673a\u89c6\u89c9"},{"location":"cv/#_1","text":"Abstract \u5f52\u6863\u4e00\u4e9b\u8ba1\u7b97\u673a\u89c6\u89c9\uff08\u63ba\u70b9\u673a\u5668\u4eba\uff0c\u4f8b\u5982 ROS\uff09\u76f8\u5173\u5185\u5bb9\u7684\u7b14\u8bb0 \u5927\u591a\u90fd\u662f\u81ea\u5b66\uff0c\u7406\u89e3 CV \u7684\u672c\u8d28\uff08\u96fe","title":"\u8ba1\u7b97\u673a\u89c6\u89c9"},{"location":"cv/#table-of-contents","text":"\u591a\u89c6\u56fe\u51e0\u4f55 \u6444\u50cf\u673a\u548c\u7ed3\u6784\u7684 3D \u91cd\u6784 2129 7 mins 1696560509 \u5bf9\u6781\u51e0\u4f55\u548c\u57fa\u672c\u77e9\u9635 2758 9 mins 1696560259 \u5355\u89c6\u56fe\u51e0\u4f55 3229 11 mins 1696489915 \u6444\u50cf\u673a\u6a21\u578b 3059 10 mins 1696486155 \u8ba1\u7b97\u6444\u50cf\u673a\u77e9\u9635 P 1971 7 mins 1696486155 \u7b97\u6cd5\u8bc4\u4ef7\u548c\u8bef\u5dee\u5206\u6790 1575 5 mins 1696380447 2D \u5c04\u5f71\u51e0\u4f55\u548c\u53d8\u6362 4643 15 mins 1696243054 \u4f30\u8ba1\u2014\u20142D \u5c04\u5f71\u53d8\u6362 6200 21 mins 1696243054 3D \u5c04\u5f71\u51e0\u4f55\u548c\u53d8\u6362 2835 9 mins 1695950449 SLAM \u89c6\u89c9 SLAM 14 \u8bb2 2363 34 9 mins 1701330301 \u70b9\u4e91\u914d\u51c6 ICP 2614 9 mins 1701761771 \u524d\u7f6e\u77e5\u8bc6 2036 7 mins 1701671192 function buttonHandler(i) { let content = document.getElementsByClassName(\"content-item-wrapper\")[i]; let button = document.getElementsByClassName(\"title-wrapper\")[i].getElementsByTagName(\"button\")[0]; if (content.style.display == \"none\") { content.style.display = \"block\"; button.children[0].children[0].style.transform = \"rotate(0deg)\"; } else { content.style.display = \"none\"; button.children[0].children[0].style.transform = \"rotate(-90deg)\"; } } function produce_time() { let time = document.getElementsByClassName(\"item-actions\"); for (let i = 0; i < time.length; i++) { let timestamp; if (time[i].childElementCount > 0) { timestamp = time[i].children[0].innerHTML; } else { timestamp = time[i].innerHTML; } let date = new Date(parseInt(timestamp) * 1000); let now = new Date(); let diff = now.getTime() - date.getTime(); let years = Math.floor(diff / (24 * 3600 * 1000 * 365)); let months = Math.floor(diff / (24 * 3600 * 1000 * 30)); let days = Math.floor(diff / (24 * 3600 * 1000)); let hours = Math.floor((diff % (24 * 3600 * 1000)) / (3600 * 1000)); let minutes = Math.floor((diff % (3600 * 1000)) / (60 * 1000)); let seconds = Math.floor((diff % (60 * 1000)) / 1000); if (years > 0) { time[i].innerHTML = years + \" years ago\"; } else if (months > 0) { time[i].innerHTML = months + \" months ago\"; } else if (days > 0) { time[i].innerHTML = days + \" days ago\"; } else if (hours > 0) { time[i].innerHTML = hours + \" hours ago\"; } else if (minutes > 0) { time[i].innerHTML = minutes + \" minutes ago\"; } else { time[i].innerHTML = seconds + \" seconds ago\"; } } } produce_time();","title":"Table of Contents"},{"location":"cv/3d-visualization/","text":"\u4e09\u7ef4\u6570\u636e\u573a\u53ef\u89c6\u5316 \u00b6 \u7ea6 1116 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \u5206\u949f Abstract \u5b66\u4e60\u81ea\u5510\u6cfd\u5723\u300a\u4e09\u7ef4\u6570\u636e\u573a\u53ef\u89c6\u5316\u300b \u4e09\u7ef4\u7a7a\u95f4\u89c4\u5219\u6570\u636e\u573a\u7684\u76f4\u63a5\u4f53\u7ed8\u5236 \u00b6 \u4f53\u5143\uff08Voxel\uff09\uff1a\u6bcf\u4e2a\u7f51\u683c\u662f\u7ed3\u6784\u5316\u6570\u636e\u7684\u4e00\u4e2a\u5143\u7d20 \u76f4\u63a5\u4f53\u7ed8\u5236\u7b97\u6cd5\uff1a\u5c06\u79bb\u6563\u5206\u5e03\u7684\u4e09\u7ef4\u6570\u636e\u573a\uff0c\u6309\u7167\u4e00\u5b9a\u7684\u89c4\u5219\u8f6c\u6362\u4e3a\u56fe\u5f62\u663e\u793a\u8bbe\u5907\u5e27\u7f13\u5b58\u4e2d\u7684\u4e8c\u7ef4\u79bb\u6563\u4fe1\u53f7\uff0c\u5373\u751f\u6210\u6bcf\u4e2a\u50cf\u7d20\u70b9\u989c\u8272\u7684 R\u3001G\u3001B \u503c \u91cd\u91c7\u6837 \u00b6 \u4fe1\u53f7\uff1a\u8868\u793a\u4fe1\u606f\u7684\u4e00\u4e2a\u51fd\u6570\uff0c\u53ef\u4ee5\u662f\u8fde\u7eed\u7684\uff0c\u4e5f\u53ef\u4ee5\u662f\u79bb\u6563\u7684\u3002\u4e09\u7ef4\u7269\u4f53\u5728\u89c2\u5bdf\u5e73\u9762\u4e0a\u7684\u6295\u5f71\u53ef\u4ee5\u770b\u4f5c\u662f\u4e8c\u7ef4\u8fde\u7eed\u4fe1\u53f7\uff0c\u5728\u56fe\u5f62\u7cfb\u7edf\u7684\u5e27\u7f13\u5b58\u4e2d\uff0c\u7531\u50cf\u7d20\u70b9\u7684\u6570\u503c\u7ec4\u6210\u7684\u77e9\u9635\u662f\u4e00\u4e2a\u4e8c\u7ef4\u79bb\u6563\u4fe1\u53f7 \u91c7\u6837\uff1a\u4ece\u4e00\u4e2a\u8fde\u7eed\u4fe1\u53f7\u4e2d\u9009\u62e9\u6709\u9650\u4e2a\u6570\u503c\u7684\u8fc7\u7a0b \u91cd\u6784\uff1a\u4ece\u91c7\u6837\u4fe1\u53f7\u4e2d\u91cd\u65b0\u6784\u9020\u8be5\u539f\u59cb\u4fe1\u53f7\u7684\u8fc7\u7a0b \u5948\u9b41\u65af\u7279\u9891\u7387\uff1a\u4ece\u4e00\u4e2a\u4fe1\u53f7\u4e2d\u62bd\u53d6\u6837\u672c\u7684\u9891\u7387\u5927\u4e8e\u8be5\u4fe1\u53f7\u9891\u8c31\u4e2d\u6700\u9ad8\u9891\u7387\u7684\u4e24\u500d\u65f6\uff0c\u5c31\u53ef\u4ee5\u4ece\u91c7\u6837\u4fe1\u53f7\u4e2d\u6062\u590d\u51fa\u539f\u4fe1\u53f7\uff0c\u8fd9\u4e00\u91c7\u6837\u9891\u7387\u7684\u4e0b\u9650\u79f0\u4e3a\u5948\u9b41\u65af\u7279\u9891\u7387 \u91cd\u91c7\u6837\uff1a \u9009\u62e9\u9002\u5f53\u7684\u91cd\u6784\u6838\u51fd\u6570\uff0c\u5bf9\u79bb\u6563\u7684\u91c7\u6837\u4fe1\u53f7\u8fdb\u884c\u5377\u79ef\u8fd0\u7b97\uff0c\u91cd\u6784\u8fde\u7eed\u7684\u539f\u59cb\u4fe1\u53f7 \u91c7\u7528\u4f4e\u901a\u6ee4\u6ce2\u51fd\u6570\u53bb\u6389\u9ad8\u4e8e\u5948\u9b41\u65af\u7279\u9891\u7387\u6781\u9650\u7684\u9891\u7387\u6210\u5206 \u5bf9\u6ee4\u6ce2\u540e\u7684\u51fd\u6570\u91cd\u65b0\u91c7\u6837 \u5149\u5b66\u6a21\u578b \u00b6 \u5728\u91cd\u91c7\u6837\u7684\u57fa\u7840\u4e0a\uff0c\u8ba1\u7b97\u5168\u90e8\u91c7\u6837\u70b9\u5bf9\u5c4f\u5e55\u50cf\u7d20\u7684\u8d21\u732e\uff0c\u4e5f\u5c31\u662f\u6bcf\u4e00\u4e2a\u50cf\u7d20\u7684\u5149\u5f3a\u5ea6\u503c I \u5149\u7ebf\u5438\u6536\u6a21\u578b \u5149\u7ebf\u53d1\u5c04\u6a21\u578b \u5149\u7ebf\u5438\u6536\u548c\u53d1\u6563\u6a21\u578b \u5149\u7ebf\u6295\u5c04\u4f53\u7ed8\u5236\u6280\u672f \u00b6 \u4e09\u7ef4\u6570\u636e\u573a\u7684\u5206\u7c7b\u95ee\u9898 \u9608\u503c\u6cd5 \u6982\u7387\u6cd5 \u6539\u8fdb\u540e\u7684\u5149\u7ebf\u6295\u5c04\u4f53\u7ed8\u5236\u7b97\u6cd5 \u7269\u4f53\u7a7a\u95f4\u626b\u63cf\u7684\u4f53\u7ed8\u5236\u6280\u672f \u00b6 \u8db3\u8ff9\u8868\u6cd5\uff1a\u9010\u5c42\u3001\u9010\u884c\u3001\u9010\u4e2a\u5730\u8ba1\u7b97\u6bcf\u4e00\u4e2a\u6570\u636e\u70b9\u5bf9\u5c4f\u5e55\u50cf\u7d20\u7684\u8d21\u732e\uff0c\u5e76\u52a0\u4ee5\u5408\u6210\uff0c\u5f62\u6210\u6700\u540e\u7684\u56fe\u50cf \u57fa\u4e8e\u9519\u5207-\u53d8\u5f62\u6280\u672f\u7684\u4f53\u7ed8\u5236\u7b97\u6cd5 \u7b97\u6cd5\u6d41\u7a0b \u5728\u9009\u5b9a\u4e09\u7ef4\u79bb\u6563\u6570\u636e\u573a\u7684\u4e3b\u8981\u89c2\u5bdf\u65b9\u5411\u540e\uff0c\u4f7f\u5750\u6807\u7cfb\u7684z\u8f74\u4e0e\u5176\u76f8\u91cd\u5408\u3002\u5c06\u4e09\u7ef4\u79bb\u6563\u6570\u636e\u573a\u7531\u7269\u4f53\u7a7a\u95f4\u53d8\u6362\u5230\u9519\u5207\u7269\u4f53\u7a7a\u95f4\u3002\u5bf9\u5e73\u884c\u6295\u5f71\u800c\u8a00\uff0c\u9519\u5207\u53d8\u6362\u53ea\u5305\u542b\u6570\u636e\u5e73\u9762\u7684\u5e73\u79fb\u3002\u5bf9\u4e8e\u900f\u89c6\u6295\u5f71\uff0c\u5728\u5e73\u79fb\u540e\uff0c\u8fd8\u9700\u8981\u8fdb\u884c\u6bd4\u4f8b\u53d8\u6362\uff0c\u5728\u5e73\u79fb\u548c\u6bd4\u4f8b\u53d8\u6362\u65f6\uff0c\u5728\u4e8c\u7ef4\u6570\u636e\u5e73\u9762\u5185\uff0c\u9700\u4f5c\u91cd\u65b0\u91c7\u6837\u3002 \u5728\u9519\u5207\u7269\u4f53\u7a7a\u95f4\u4e2d\uff0c\u5c06\u9519\u5207\u540e\u7684\u4e09\u7ef4\u79bb\u6563\u6570\u636e\u573a\u4e2d\u5404\u91c7\u6837\u70b9\u7684\u989c\u8272\u503c\u6295\u5c04\u5230\u9519\u5207\u7269\u4f53\u7a7a\u95f4\u7684\u4e2d\u95f4\u56fe\u50cf\u5e73\u9762\u4e0a\u3002\u5f62\u6210\u4e2d\u95f4\u56fe\u50cf\u3002\u7531\u4e8e\u662f\u6b63\u6295\u5f71\uff0c\u5404\u91c7\u6837\u70b9\u91cd\u6784\u6838\u7684\u8db3\u8ff9\u51fd\u6570\u4e0e\u89c2\u5bdf\u65b9\u5411\u65e0\u5173\uff0c\u56e0\u800c\u65e0\u9700\u91cd\u65b0\u8ba1\u7b97\u3002 \u5c06\u4e2d\u95f4\u56fe\u50cf\u5e73\u9762\u4e0a\u7684\u56fe\u50cf\u901a\u8fc7\u4e8c\u7ef4\u56fe\u50cf\u53d8\u5f62 \\(M_{warp}\\) \uff0c\u53d8\u6362\u5230\u56fe\u50cf\u7a7a\u95f4\uff0c\u5f97\u5230\u6700\u7ec8\u56fe\u50cf\u3002\u8fd9\u4e00\u6b65\u4e5f\u9700\u8981\u4f5c\u4e8c\u7ef4\u56fe\u50cf\u7684\u91cd\u65b0\u91c7\u6837\u3002 \u4f53\u5143\u6295\u5c04\u6cd5 \u5b50\u533a\u57df\u6295\u5c04\u6cd5 \u9891\u57df\u4f53\u7ed8\u5236\u6280\u672f \u00b6 \u9891\u57df\u4f53\u7ed8\u5236\u6280\u672f\u7684\u539f\u7406 \u5085\u7acb\u53f6\u6295\u5f71-\u622a\u9762\u5b9a\u7406 \u9891\u57df\u4f53\u7ed8\u5236\u57fa\u672c\u7b97\u6cd5 \u57fa\u4e8e\u7269\u8d28\u5206\u7c7b\u7684\u989c\u8272\u8d4b\u503c\u7684\u9891\u57df\u4f53\u7ed8\u5236\u7b97\u6cd5 \u91cd\u6784\u6838\u9636\u6b21\u7684\u81ea\u9002\u5e94\u9009\u62e9 \u8fdb\u4e00\u6b65\u51cf\u5c11\u8ba1\u7b97\u91cf\u548c\u5b58\u50a8\u7a7a\u95f4 \u5bf9\u79f0\u91c7\u6837 \u54c8\u7279\u91cc\u53d8\u6362\u4ee3\u66ff\u5085\u7acb\u53f6\u53d8\u6362 \u7531\u4e09\u7ef4\u7eb9\u7406\u6620\u5c04\u786c\u4ef6\u652f\u6301\u7684\u76f4\u63a5\u4f53\u7ed8\u5236 \u00b6 \u7eb9\u7406\u6620\u5c04\uff0c\u7eb9\u7406\u56fe\u4e2d\u7684\u6bcf\u4e00\u4e2a\u5143\u7d20\u79f0\u4e3a\u7eb9\u7406\u5143\uff08texels\uff09 \u7eb9\u7406\u751f\u6210 \u7ed9\u51fa\u6620\u5c04\u5b9a\u4e49 \u7eb9\u7406\u7684\u91cd\u91c7\u6837 \u4e09\u7ef4\u7eb9\u7406\u6620\u5c04\u53ca\u5176\u786c\u4ef6\u5b9e\u73b0 \u7531\u4e09\u7ef4\u7eb9\u7406\u6620\u5c04\u786c\u4ef6\u652f\u6301\u7684\u76f4\u63a5\u4f53\u7ed8\u5236\u7b97\u6cd5 \u7531\u4e09\u7ef4\u7eb9\u7406\u6620\u5c04\u786c\u4ef6\u652f\u6301\u7684\u7269\u4f53\u7a7a\u95f4\u91cd\u91c7\u6837\u76f4\u63a5\u4f53\u7ed8\u5236\u7b97\u6cd5 \u7531\u4e09\u7ef4\u7eb9\u7406\u6620\u5c04\u786c\u4ef6\u652f\u6301\u7684\u5c4f\u5e55\u7a7a\u95f4\u91cd\u91c7\u6837\u76f4\u63a5\u4f53\u7ed8\u5236\u7b97\u6cd5 \u7531\u4e09\u7ef4\u7eb9\u7406\u6620\u5c04\u786c\u4ef6\u652f\u6301\u7684\u5177\u6709\u660e\u6697\u6548\u679c\u7684\u76f4\u63a5\u4f53\u7ed8\u5236\u7b97\u6cd5 \u7531\u4e09\u7ef4\u7eb9\u7406\u6620\u5c04\u786c\u4ef6\u652f\u6301\u7684\u5177\u6709\u8fb9\u754c\u9762\u7a81\u51fa\u6548\u679c\u7684\u4f53\u7ed8\u5236\u7b97\u6cd5 \u91c7\u7528\u7a7a\u95f4\u8df3\u8dc3\u6280\u672f\u7684\u4e09\u7ef4\u7eb9\u7406\u6620\u5c04\u786c\u4ef6\u652f\u6301\u7684\u4f53\u7ed8\u5236\u7b97\u6cd5","title":"\u4e09\u7ef4\u6570\u636e\u573a\u53ef\u89c6\u5316"},{"location":"cv/3d-visualization/#_1","text":"\u7ea6 1116 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \u5206\u949f Abstract \u5b66\u4e60\u81ea\u5510\u6cfd\u5723\u300a\u4e09\u7ef4\u6570\u636e\u573a\u53ef\u89c6\u5316\u300b","title":"\u4e09\u7ef4\u6570\u636e\u573a\u53ef\u89c6\u5316"},{"location":"cv/3d-visualization/#_2","text":"\u4f53\u5143\uff08Voxel\uff09\uff1a\u6bcf\u4e2a\u7f51\u683c\u662f\u7ed3\u6784\u5316\u6570\u636e\u7684\u4e00\u4e2a\u5143\u7d20 \u76f4\u63a5\u4f53\u7ed8\u5236\u7b97\u6cd5\uff1a\u5c06\u79bb\u6563\u5206\u5e03\u7684\u4e09\u7ef4\u6570\u636e\u573a\uff0c\u6309\u7167\u4e00\u5b9a\u7684\u89c4\u5219\u8f6c\u6362\u4e3a\u56fe\u5f62\u663e\u793a\u8bbe\u5907\u5e27\u7f13\u5b58\u4e2d\u7684\u4e8c\u7ef4\u79bb\u6563\u4fe1\u53f7\uff0c\u5373\u751f\u6210\u6bcf\u4e2a\u50cf\u7d20\u70b9\u989c\u8272\u7684 R\u3001G\u3001B \u503c","title":"\u4e09\u7ef4\u7a7a\u95f4\u89c4\u5219\u6570\u636e\u573a\u7684\u76f4\u63a5\u4f53\u7ed8\u5236"},{"location":"cv/3d-visualization/#_3","text":"\u4fe1\u53f7\uff1a\u8868\u793a\u4fe1\u606f\u7684\u4e00\u4e2a\u51fd\u6570\uff0c\u53ef\u4ee5\u662f\u8fde\u7eed\u7684\uff0c\u4e5f\u53ef\u4ee5\u662f\u79bb\u6563\u7684\u3002\u4e09\u7ef4\u7269\u4f53\u5728\u89c2\u5bdf\u5e73\u9762\u4e0a\u7684\u6295\u5f71\u53ef\u4ee5\u770b\u4f5c\u662f\u4e8c\u7ef4\u8fde\u7eed\u4fe1\u53f7\uff0c\u5728\u56fe\u5f62\u7cfb\u7edf\u7684\u5e27\u7f13\u5b58\u4e2d\uff0c\u7531\u50cf\u7d20\u70b9\u7684\u6570\u503c\u7ec4\u6210\u7684\u77e9\u9635\u662f\u4e00\u4e2a\u4e8c\u7ef4\u79bb\u6563\u4fe1\u53f7 \u91c7\u6837\uff1a\u4ece\u4e00\u4e2a\u8fde\u7eed\u4fe1\u53f7\u4e2d\u9009\u62e9\u6709\u9650\u4e2a\u6570\u503c\u7684\u8fc7\u7a0b \u91cd\u6784\uff1a\u4ece\u91c7\u6837\u4fe1\u53f7\u4e2d\u91cd\u65b0\u6784\u9020\u8be5\u539f\u59cb\u4fe1\u53f7\u7684\u8fc7\u7a0b \u5948\u9b41\u65af\u7279\u9891\u7387\uff1a\u4ece\u4e00\u4e2a\u4fe1\u53f7\u4e2d\u62bd\u53d6\u6837\u672c\u7684\u9891\u7387\u5927\u4e8e\u8be5\u4fe1\u53f7\u9891\u8c31\u4e2d\u6700\u9ad8\u9891\u7387\u7684\u4e24\u500d\u65f6\uff0c\u5c31\u53ef\u4ee5\u4ece\u91c7\u6837\u4fe1\u53f7\u4e2d\u6062\u590d\u51fa\u539f\u4fe1\u53f7\uff0c\u8fd9\u4e00\u91c7\u6837\u9891\u7387\u7684\u4e0b\u9650\u79f0\u4e3a\u5948\u9b41\u65af\u7279\u9891\u7387 \u91cd\u91c7\u6837\uff1a \u9009\u62e9\u9002\u5f53\u7684\u91cd\u6784\u6838\u51fd\u6570\uff0c\u5bf9\u79bb\u6563\u7684\u91c7\u6837\u4fe1\u53f7\u8fdb\u884c\u5377\u79ef\u8fd0\u7b97\uff0c\u91cd\u6784\u8fde\u7eed\u7684\u539f\u59cb\u4fe1\u53f7 \u91c7\u7528\u4f4e\u901a\u6ee4\u6ce2\u51fd\u6570\u53bb\u6389\u9ad8\u4e8e\u5948\u9b41\u65af\u7279\u9891\u7387\u6781\u9650\u7684\u9891\u7387\u6210\u5206 \u5bf9\u6ee4\u6ce2\u540e\u7684\u51fd\u6570\u91cd\u65b0\u91c7\u6837","title":"\u91cd\u91c7\u6837"},{"location":"cv/3d-visualization/#_4","text":"\u5728\u91cd\u91c7\u6837\u7684\u57fa\u7840\u4e0a\uff0c\u8ba1\u7b97\u5168\u90e8\u91c7\u6837\u70b9\u5bf9\u5c4f\u5e55\u50cf\u7d20\u7684\u8d21\u732e\uff0c\u4e5f\u5c31\u662f\u6bcf\u4e00\u4e2a\u50cf\u7d20\u7684\u5149\u5f3a\u5ea6\u503c I \u5149\u7ebf\u5438\u6536\u6a21\u578b \u5149\u7ebf\u53d1\u5c04\u6a21\u578b \u5149\u7ebf\u5438\u6536\u548c\u53d1\u6563\u6a21\u578b","title":"\u5149\u5b66\u6a21\u578b"},{"location":"cv/3d-visualization/#_5","text":"\u4e09\u7ef4\u6570\u636e\u573a\u7684\u5206\u7c7b\u95ee\u9898 \u9608\u503c\u6cd5 \u6982\u7387\u6cd5 \u6539\u8fdb\u540e\u7684\u5149\u7ebf\u6295\u5c04\u4f53\u7ed8\u5236\u7b97\u6cd5","title":"\u5149\u7ebf\u6295\u5c04\u4f53\u7ed8\u5236\u6280\u672f"},{"location":"cv/3d-visualization/#_6","text":"\u8db3\u8ff9\u8868\u6cd5\uff1a\u9010\u5c42\u3001\u9010\u884c\u3001\u9010\u4e2a\u5730\u8ba1\u7b97\u6bcf\u4e00\u4e2a\u6570\u636e\u70b9\u5bf9\u5c4f\u5e55\u50cf\u7d20\u7684\u8d21\u732e\uff0c\u5e76\u52a0\u4ee5\u5408\u6210\uff0c\u5f62\u6210\u6700\u540e\u7684\u56fe\u50cf \u57fa\u4e8e\u9519\u5207-\u53d8\u5f62\u6280\u672f\u7684\u4f53\u7ed8\u5236\u7b97\u6cd5 \u7b97\u6cd5\u6d41\u7a0b \u5728\u9009\u5b9a\u4e09\u7ef4\u79bb\u6563\u6570\u636e\u573a\u7684\u4e3b\u8981\u89c2\u5bdf\u65b9\u5411\u540e\uff0c\u4f7f\u5750\u6807\u7cfb\u7684z\u8f74\u4e0e\u5176\u76f8\u91cd\u5408\u3002\u5c06\u4e09\u7ef4\u79bb\u6563\u6570\u636e\u573a\u7531\u7269\u4f53\u7a7a\u95f4\u53d8\u6362\u5230\u9519\u5207\u7269\u4f53\u7a7a\u95f4\u3002\u5bf9\u5e73\u884c\u6295\u5f71\u800c\u8a00\uff0c\u9519\u5207\u53d8\u6362\u53ea\u5305\u542b\u6570\u636e\u5e73\u9762\u7684\u5e73\u79fb\u3002\u5bf9\u4e8e\u900f\u89c6\u6295\u5f71\uff0c\u5728\u5e73\u79fb\u540e\uff0c\u8fd8\u9700\u8981\u8fdb\u884c\u6bd4\u4f8b\u53d8\u6362\uff0c\u5728\u5e73\u79fb\u548c\u6bd4\u4f8b\u53d8\u6362\u65f6\uff0c\u5728\u4e8c\u7ef4\u6570\u636e\u5e73\u9762\u5185\uff0c\u9700\u4f5c\u91cd\u65b0\u91c7\u6837\u3002 \u5728\u9519\u5207\u7269\u4f53\u7a7a\u95f4\u4e2d\uff0c\u5c06\u9519\u5207\u540e\u7684\u4e09\u7ef4\u79bb\u6563\u6570\u636e\u573a\u4e2d\u5404\u91c7\u6837\u70b9\u7684\u989c\u8272\u503c\u6295\u5c04\u5230\u9519\u5207\u7269\u4f53\u7a7a\u95f4\u7684\u4e2d\u95f4\u56fe\u50cf\u5e73\u9762\u4e0a\u3002\u5f62\u6210\u4e2d\u95f4\u56fe\u50cf\u3002\u7531\u4e8e\u662f\u6b63\u6295\u5f71\uff0c\u5404\u91c7\u6837\u70b9\u91cd\u6784\u6838\u7684\u8db3\u8ff9\u51fd\u6570\u4e0e\u89c2\u5bdf\u65b9\u5411\u65e0\u5173\uff0c\u56e0\u800c\u65e0\u9700\u91cd\u65b0\u8ba1\u7b97\u3002 \u5c06\u4e2d\u95f4\u56fe\u50cf\u5e73\u9762\u4e0a\u7684\u56fe\u50cf\u901a\u8fc7\u4e8c\u7ef4\u56fe\u50cf\u53d8\u5f62 \\(M_{warp}\\) \uff0c\u53d8\u6362\u5230\u56fe\u50cf\u7a7a\u95f4\uff0c\u5f97\u5230\u6700\u7ec8\u56fe\u50cf\u3002\u8fd9\u4e00\u6b65\u4e5f\u9700\u8981\u4f5c\u4e8c\u7ef4\u56fe\u50cf\u7684\u91cd\u65b0\u91c7\u6837\u3002 \u4f53\u5143\u6295\u5c04\u6cd5 \u5b50\u533a\u57df\u6295\u5c04\u6cd5","title":"\u7269\u4f53\u7a7a\u95f4\u626b\u63cf\u7684\u4f53\u7ed8\u5236\u6280\u672f"},{"location":"cv/3d-visualization/#_7","text":"\u9891\u57df\u4f53\u7ed8\u5236\u6280\u672f\u7684\u539f\u7406 \u5085\u7acb\u53f6\u6295\u5f71-\u622a\u9762\u5b9a\u7406 \u9891\u57df\u4f53\u7ed8\u5236\u57fa\u672c\u7b97\u6cd5 \u57fa\u4e8e\u7269\u8d28\u5206\u7c7b\u7684\u989c\u8272\u8d4b\u503c\u7684\u9891\u57df\u4f53\u7ed8\u5236\u7b97\u6cd5 \u91cd\u6784\u6838\u9636\u6b21\u7684\u81ea\u9002\u5e94\u9009\u62e9 \u8fdb\u4e00\u6b65\u51cf\u5c11\u8ba1\u7b97\u91cf\u548c\u5b58\u50a8\u7a7a\u95f4 \u5bf9\u79f0\u91c7\u6837 \u54c8\u7279\u91cc\u53d8\u6362\u4ee3\u66ff\u5085\u7acb\u53f6\u53d8\u6362","title":"\u9891\u57df\u4f53\u7ed8\u5236\u6280\u672f"},{"location":"cv/3d-visualization/#_8","text":"\u7eb9\u7406\u6620\u5c04\uff0c\u7eb9\u7406\u56fe\u4e2d\u7684\u6bcf\u4e00\u4e2a\u5143\u7d20\u79f0\u4e3a\u7eb9\u7406\u5143\uff08texels\uff09 \u7eb9\u7406\u751f\u6210 \u7ed9\u51fa\u6620\u5c04\u5b9a\u4e49 \u7eb9\u7406\u7684\u91cd\u91c7\u6837 \u4e09\u7ef4\u7eb9\u7406\u6620\u5c04\u53ca\u5176\u786c\u4ef6\u5b9e\u73b0 \u7531\u4e09\u7ef4\u7eb9\u7406\u6620\u5c04\u786c\u4ef6\u652f\u6301\u7684\u76f4\u63a5\u4f53\u7ed8\u5236\u7b97\u6cd5 \u7531\u4e09\u7ef4\u7eb9\u7406\u6620\u5c04\u786c\u4ef6\u652f\u6301\u7684\u7269\u4f53\u7a7a\u95f4\u91cd\u91c7\u6837\u76f4\u63a5\u4f53\u7ed8\u5236\u7b97\u6cd5 \u7531\u4e09\u7ef4\u7eb9\u7406\u6620\u5c04\u786c\u4ef6\u652f\u6301\u7684\u5c4f\u5e55\u7a7a\u95f4\u91cd\u91c7\u6837\u76f4\u63a5\u4f53\u7ed8\u5236\u7b97\u6cd5 \u7531\u4e09\u7ef4\u7eb9\u7406\u6620\u5c04\u786c\u4ef6\u652f\u6301\u7684\u5177\u6709\u660e\u6697\u6548\u679c\u7684\u76f4\u63a5\u4f53\u7ed8\u5236\u7b97\u6cd5 \u7531\u4e09\u7ef4\u7eb9\u7406\u6620\u5c04\u786c\u4ef6\u652f\u6301\u7684\u5177\u6709\u8fb9\u754c\u9762\u7a81\u51fa\u6548\u679c\u7684\u4f53\u7ed8\u5236\u7b97\u6cd5 \u91c7\u7528\u7a7a\u95f4\u8df3\u8dc3\u6280\u672f\u7684\u4e09\u7ef4\u7eb9\u7406\u6620\u5c04\u786c\u4ef6\u652f\u6301\u7684\u4f53\u7ed8\u5236\u7b97\u6cd5","title":"\u7531\u4e09\u7ef4\u7eb9\u7406\u6620\u5c04\u786c\u4ef6\u652f\u6301\u7684\u76f4\u63a5\u4f53\u7ed8\u5236"},{"location":"cv/mvg/","text":"\u591a\u89c6\u56fe\u51e0\u4f55 \u00b6 Abstract \u8fd9\u91cc\u603b\u7ed3\u4e00\u4e9b\u5b66\u4e60\u591a\u89c6\u56fe\u51e0\u4f55\u65f6\u7684\u7b14\u8bb0 \u4e3a\u4e09\u7ef4\u7a7a\u95f4\u8bc6\u522b\u6253\u57fa\u7840 Table of Contents \u00b6 2D \u5c04\u5f71\u51e0\u4f55\u548c\u53d8\u6362 3D \u5c04\u5f71\u51e0\u4f55\u548c\u53d8\u6362 \u4f30\u8ba1\u2014\u20142D \u5c04\u5f71\u53d8\u6362 \u7b97\u6cd5\u8bc4\u4ef7\u548c\u8bef\u5dee\u5206\u6790 \u6444\u50cf\u673a\u6a21\u578b \u8ba1\u7b97\u6444\u50cf\u673a\u77e9\u9635 P \u5355\u89c6\u56fe\u51e0\u4f55 \u5bf9\u6781\u51e0\u4f55\u548c\u57fa\u672c\u77e9\u9635 \u6444\u50cf\u673a\u548c\u7ed3\u6784\u7684 3D \u91cd\u6784 Reference \u00b6 \u8ba1\u7b97\u673a\u89c6\u89c9\u4e2d\u7684\u591a\u89c6\u56fe\u51e0\u4f55-\u7b2c\u4e00\u7248-\u4e2d\u6587\u5b8c\u6574\u7248.pdf Multiple View Geometry\uff08\u591a\u89c6\u56fe\u51e0\u4f55\uff09\u5b66\u4e60\u7b14\u8bb0 \u591a\u89c6\u56fe\u51e0\u4f55\u5b66(Multiple View Geometry)\u8bfb\u4e66\u7b14\u8bb0\u76ee\u5f55","title":"\u591a\u89c6\u56fe\u51e0\u4f55"},{"location":"cv/mvg/#_1","text":"Abstract \u8fd9\u91cc\u603b\u7ed3\u4e00\u4e9b\u5b66\u4e60\u591a\u89c6\u56fe\u51e0\u4f55\u65f6\u7684\u7b14\u8bb0 \u4e3a\u4e09\u7ef4\u7a7a\u95f4\u8bc6\u522b\u6253\u57fa\u7840","title":"\u591a\u89c6\u56fe\u51e0\u4f55"},{"location":"cv/mvg/#table-of-contents","text":"2D \u5c04\u5f71\u51e0\u4f55\u548c\u53d8\u6362 3D \u5c04\u5f71\u51e0\u4f55\u548c\u53d8\u6362 \u4f30\u8ba1\u2014\u20142D \u5c04\u5f71\u53d8\u6362 \u7b97\u6cd5\u8bc4\u4ef7\u548c\u8bef\u5dee\u5206\u6790 \u6444\u50cf\u673a\u6a21\u578b \u8ba1\u7b97\u6444\u50cf\u673a\u77e9\u9635 P \u5355\u89c6\u56fe\u51e0\u4f55 \u5bf9\u6781\u51e0\u4f55\u548c\u57fa\u672c\u77e9\u9635 \u6444\u50cf\u673a\u548c\u7ed3\u6784\u7684 3D \u91cd\u6784","title":"Table of Contents"},{"location":"cv/mvg/#reference","text":"\u8ba1\u7b97\u673a\u89c6\u89c9\u4e2d\u7684\u591a\u89c6\u56fe\u51e0\u4f55-\u7b2c\u4e00\u7248-\u4e2d\u6587\u5b8c\u6574\u7248.pdf Multiple View Geometry\uff08\u591a\u89c6\u56fe\u51e0\u4f55\uff09\u5b66\u4e60\u7b14\u8bb0 \u591a\u89c6\u56fe\u51e0\u4f55\u5b66(Multiple View Geometry)\u8bfb\u4e66\u7b14\u8bb0\u76ee\u5f55","title":"Reference"},{"location":"cv/mvg/3dr-camera-structure/","text":"\u6444\u50cf\u673a\u548c\u7ed3\u6784\u7684 3D \u91cd\u6784 \u00b6 \u7ea6 2125 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f Abstract \u91cd\u6784\u7684\u4efb\u52a1\u662f\u6c42\u6444\u50cf\u673a\u77e9\u9635 \\(P\\) \u548c \\(P^\\prime\\) \uff0c\u4ee5\u53ca 3D \u4e2d\u7684\u70b9 \\(\\mathbf{X}_i\\) \uff0c\u4f7f\u5f97\u5bf9\u6240\u6709 i\uff0c\u6709 \\[ \\mathbf{x}_i=P \\mathbf{X}_i \\ \\ \\ \\ \\ \\ \\mathbf{x}_i^\\prime=P^\\prime \\mathbf{X}_i \\] \u91cd\u6784\u65b9\u6cd5\u6982\u8ff0 \u00b6 \u7531\u4e24\u89c6\u56fe\u91cd\u6784\u7684\u4e00\u79cd\u65b9\u6cd5\uff1a \u7531\u5bf9\u5e94\u70b9\u8ba1\u7b97\u57fa\u672c\u77e9\u9635 \u7531\u57fa\u672c\u77e9\u9635\u8ba1\u7b97\u6444\u50cf\u673a\u77e9\u9635 \u9488\u5bf9\u6bcf\u7ec4\u5bf9\u5e94\u70b9 \\(\\mathbf{x}_i \\leftrightarrow \\mathbf{x}_i^\\prime\\) \uff0c\u8ba1\u7b97\u7a7a\u95f4\u4e2d\u6620\u5c04\u5230\u8fd9\u4e24\u4e2a\u56fe\u50cf\u70b9\u5230\u70b9 \u91cd\u6784\u7684\u591a\u4e49\u6027 \u00b6 \u82e5\u6ca1\u6709\u666f\u7269\u5728\u67d0\u4e2a 3D \u5750\u6807\u7cfb\u4e0b\u4f4d\u7f6e\u7684\u4fe1\u606f\uff0c\u4e00\u822c\u4e0d\u53ef\u80fd\u4ece\u4e00\u5bf9\u89c6\u56fe\uff08\u6216\u4e8b\u5b9e\u4e0a\u4ece\u4efb\u610f\u6570\u76ee\u7684\u89c6\u56fe\uff09\u91cd\u6784\u8be5\u666f\u7269\u7684\u7edd\u5bf9\u4f4d\u7f6e\u548c\u671d\u5411\u3002\u4ec5\u7531\u56fe\u50cf\u6765\u786e\u5b9a\u666f\u7269\u5c31\u8981\u76f8\u5dee\u4e00\u4e2a\u76f8\u4f3c\u53d8\u6362\uff08\u65cb\u8f6c\u3001\u5e73\u79fb\u548c\u7f29\u653e\uff09 \u5c04\u5f71\u591a\u4e49\u6027 \uff1a\u5982\u679c\u65e2\u4e0d\u77e5\u9053\u4efb\u4f55\u4e00\u4e2a\u6444\u50cf\u673a\u7684\u6807\u5b9a\uff0c\u4e5f\u4e0d\u77e5\u9053\u4e00\u4e2a\u6444\u50cf\u673a\u4e0e\u53e6\u4e00\u4e2a\u7684\u76f8\u5bf9\u4f4d\u7f6e\uff0c\u90a3\u4e48\u91cd\u6784\u7684\u591a\u4e49\u6027\u7531\u4e00\u4e2a\u4efb\u610f\u5c04\u5f71\u53d8\u6362\u8868\u793a \u5982\u679c\u4e24\u4e2a\u6444\u50cf\u673a\u4e4b\u95f4\u6709\u5e73\u79fb\u8fd0\u52a8\uff0c\u4f46\u6807\u5b9a\u4e0d\u53d8\uff0c\u5219\u53ef\u5728\u76f8\u5dee\u4e00\u4e2a\u4eff\u5c04\u53d8\u6362\u4e0b\u91cd\u6784 \u5982\u679c\u4e24\u4e2a\u6444\u50cf\u673a\u9664\u4e86\u7126\u8ddd\u5916\u90fd\u4ee5\u6807\u5b9a\uff0c\u5219\u4ecd\u7136\u53ef\u5728\u76f8\u5dee\u4e00\u4e2a\u76f8\u4f3c\u53d8\u6362\u4e0b\u91cd\u6784 \u5c04\u5f71\u91cd\u6784\u5b9a\u7406 \u00b6 \u5982\u679c\u4e24\u5e45\u89c6\u56fe\u7684\u4e00\u4e2a\u70b9\u5bf9\u5e94\u96c6\u552f\u4e00\u5730\u786e\u5b9a\u4e86\u57fa\u672c\u77e9\u9635\uff0c\u5219\u666f\u7269\u548c\u6444\u50cf\u673a\u53ef\u4ee5\u4ec5\u7531\u8fd9\u4e9b\u5bf9\u5e94\u91cd\u6784\uff0c\u800c\u4e14\u7531\u8fd9\u4e9b\u5bf9\u5e94\u4ea7\u751f\u7684\u4efb\u4f55\u4e24\u4e2a\u91cd\u6784\u90fd\u662f\u5c04\u5f71\u7b49\u4ef7\u7684 * \u5c04\u5f71\u91cd\u6784\u5b9a\u5b9a\u7406 \uff1a\u5047\u5b9a \\(\\mathbf{x}_i \\leftrightarrow \\mathbf{x}_i^\\prime\\) \u662f\u4e24\u5e45\u56fe\u50cf\u70b9\u4e4b\u95f4\u5bf9\u5e94\u7684\u96c6\u5408\u800c\u4e14\u57fa\u672c\u77e9\u9635 F \u7531\u6761\u4ef6 \\(\\mathbf{x}_i^{\\prime \\top} F \\mathbf{x}_i=0\\) \uff08\u5bf9\u6240\u6709 i \u6210\u7acb\uff09\u552f\u4e00\u5730\u786e\u5b9a\u3002\u4ee4 \\((P_1,P_1^\\prime,\\{\\mathbf{X}_{1i}\\})\\) \u548c \\((P_2,P_2^\\prime,\\{\\mathbf{X}_{2i}\\})\\) \u4e3a\u5bf9\u5e94 \\(\\mathbf{x}_i \\leftrightarrow \\mathbf{x}_i^\\prime\\) \u7684\u4e24\u4e2a\u91cd\u6784\uff0c\u5219\u5b58\u5728\u4e00\u4e2a\u975e\u5947\u5f02\u77e9\u9635 H \u4f7f\u5f97 \\(P_2=P_1H^{-1},P_2^\\prime=P_1^\\prime H^{-1}\\) \u5e76\u4e14\u9664\u4e86\u4f7f\u5f97 \\(F\\mathbf{x}_i=F^\\top \\mathbf{x}_i^\\prime=\\mathbf{0}\\) \u7684\u90a3\u4e9b i \u5916\uff0c\u5bf9\u5176\u4f59\u6bcf\u4e2a i \u90fd\u6709 \\(\\mathbf{X}_{2i}=H\\mathbf{X}_{1i}\\) \u5206\u5c42\u91cd\u6784 \u00b6 \u4eff\u5c04\u91cd\u6784 \u00b6 \u4eff\u5c04\u91cd\u6784\u7684\u672c\u8d28\u662f\u7528\u67d0\u4e9b\u65b9\u6cd5\u5b9a\u4f4d\u65e0\u7a77\u8fdc\u5e73\u9762\uff0c\u56e0\u4e3a\u5b9a\u4f4d\u65e0\u7a77\u8fdc\u5e73\u9762\u7b49\u4ef7\u4e8e\u4eff\u5c04\u91cd\u6784\u3002\u5bfb\u627e\u4f7f \\(\\pi\\) \u6620\u5c04\u5230 \\((0,0,0,1)^\\top\\) \uff0c\u53ef\u4ee5\u628a \\(H^{-\\top}\\) \u4f5c\u4e3a Houscholder \u77e9\u9635\u6765\u8ba1\u7b97 \u5e73\u79fb\u8fd0\u52a8 \u6444\u50cf\u673a\u4f5c\u7eaf\u5e73\u79fb\u8fd0\u52a8\u65f6\uff0c\u53ef\u4ee5\u7531\u4e24\u5e45\u89c6\u56fe\u5b9e\u73b0\u4eff\u5c04\u91cd\u6784\u3002\u65e0\u7a77\u8fdc\u5e73\u9762\u4e0a\u4e00\u70b9 \\(\\mathbf{X}\\) \u5728\u7531\u6444\u50cf\u673a\u5e73\u79fb\u6240\u4ea7\u751f\u7684\u4e24\u5e45\u56fe\u50cf\u4e0a\u7684\u50cf\u662f\u540c\u4e00\u70b9\u3002\u7ed9\u5b9a\u4e00\u4e2a\u5c04\u5f71\u91cd\u6784\uff0c\u53ef\u4ee5\u91cd\u6784\u5bf9\u5e94\u4e8e\u5339\u914d \\(\\mathbf{x}_i \\leftrightarrow \\mathbf{x}_i^\\prime\\) \u7684\u70b9 \\(\\mathbf{X}_i\\) \u3002\u70b9 \\(\\mathbf{X}_i\\) \u5c06\u5728\u65e0\u7a77\u8fdc\u5e73\u9762\u4e0a\u3002\u4ece\u4e09\u7ec4\u8fd9\u6837\u7684\u70b9\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u5728\u65e0\u7a77\u8fdc\u5e73\u9762\u4e0a\u7684\u4e09\u4e2a\u70b9\u2014\u2014\u8db3\u591f\u552f\u4e00\u5730\u628a\u5b83\u786e\u5b9a \u5047\u8bbe\u6444\u50cf\u673a\u7684\u8fd0\u52a8\u662f\u6ca1\u6709\u65cb\u8f6c\u4e14\u5185\u53c2\u4fdd\u6301\u4e0d\u53d8\u7684\u4e00\u4e2a\u7eaf\u5e73\u79fb\u8fd0\u52a8\uff0c\u5219 \\(F=[\\mathbf{e}]_\\times = [\\mathbf{e}^\\prime]_\\times\\) \uff0c\u5e76\u4e14\u4f5c\u4e3a\u4eff\u5c04\u91cd\u6784\u53ef\u9009\u7684\u4e24\u4e2a\u6444\u50cf\u673a\u4e3a \\(P=[I|\\mathbf{0}]\\) \u548c \\(P^\\prime=[I|\\mathbf{e}^\\prime]\\) \u666f\u7269\u7ea6\u675f \uff1a\u666f\u7269\u7ea6\u675f\u6216\u6761\u4ef6\u4e5f\u53ef\u4ee5\u7528\u6765\u83b7\u5f97\u4eff\u5c04\u91cd\u6784\uff0c\u53ea\u8981\u80fd\u591f\u8fa8\u8ba4\u5728\u65e0\u7a77\u8fdc\u5e73\u9762\u4e0a\u7684\u4e09\u4e2a\u70b9\uff0c\u8be5\u5e73\u9762\u5c31\u53ef\u4ee5\u8fa8\u8ba4\uff0c\u5e76\u4e14\u8be5\u91cd\u6784\u53ef\u4ee5\u53d8\u6362\u5230\u4eff\u5c04\u91cd\u6784 \u5e73\u884c\u76f4\u7ebf \uff1a\u6700\u660e\u663e\u7684\u6761\u4ef6\u662f\u77e5\u9053\u67d0\u4e9b 3D \u76f4\u7ebf\u5b9e\u9645\u662f\u5e73\u884c\u7684\u3002\u7a7a\u95f4\u4e24\u6761\u5e73\u884c\u76f4\u7ebf\u7684\u4ea4\u70b9\u7ed9\u51fa\u65e0\u7a77\u8fdc\u5e73\u9762\u4e0a\u7684\u4e00\u4e2a\u70b9\uff0c\u8be5\u4ea4\u70b9\u7684\u56fe\u50cf\u662f\u8fd9\u5bf9\u5e73\u884c\u7ebf\u7684\u6d88\u5f71\u70b9\uff0c\u800c\u4e14\u662f\u4e24\u6761\u50cf\u76f4\u7ebf\u7684\u4ea4\u70b9\u3002\u5047\u8bbe\u5728\u666f\u7269\u4e2d\u80fd\u591f\u786e\u5b9a\u4e09\u5bf9\u5e73\u884c\u76f4\u7ebf\u3002\u6bcf\u5bf9\u76f8\u4ea4\u4e8e\u65e0\u7a77\u8fdc\u5e73\u800c\u4e0a\u7684\u4e00\u70b9\uff0c\u5982\u679c\u6bcf\u5bf9\u6709\u4e0d\u540c\u7684\u65b9\u5411\uff0c\u5219\u4e09\u70b9\u5c06\u4e0d\u540c\u3002\u56e0\u4e3a\u4e09\u70b9\u786e\u5b9a\u4e00\u5f20\u5e73\u9762\uff0c\u6545\u8fd9\u4e2a\u4fe1\u606f\u8db3\u591f\u786e\u5b9a\u5e73\u9762 \\(\\pi\\) \u76f4\u7ebf\u4e0a\u7684\u8ddd\u79bb\u6bd4\u7387 \uff1a\u8fd0\u52a8\u666f\u7269\u4eff\u5c04\u957f\u5ea6\u6bd4\u7387\u4e0d\u53d8\u7684\u77e5\u8bc6\u8ba1\u7b97\u6d88\u5f71\u70b9 \u65e0\u7a77\u5355\u5e94 \uff1a\u5982\u679c\u4e00\u4e2a\u4eff\u5c04\u91cd\u6784\u5df2\u5f97\u5230\u5e76\u4e14\u5176\u4e2d\u7684\u6444\u50cf\u673a\u77e9\u9635\u662f \\(P=[I|\\mathbf{0}]\\) \u548c \\(P^\\prime=[M^\\prime|\\mathbf{e}^\\prime]\\) \uff0c\u5219\u65e0\u7a77\u5355\u5e94\u662f \\(H_\\infty=M^\\prime\\) \u3002\u53cd\u8fc7\u6765\uff0c\u5982\u679c\u5df2\u5f97\u5230\u65e0\u7a77\u5355\u5e94 \\(H_\\infty\\) \uff0c\u5219\u4eff\u5c04\u91cd\u6784\u7684\u6444\u50cf\u673a\u53ef\u4ee5\u53d6\u4e3a \\(P=[I|\\mathbf{0}]\\) \u548c \\(P^\\prime=[H_\\infty|\\mathbf{e}^\\prime]\\) \u5176\u4e2d\u4e00\u4e2a\u662f\u4eff\u5c04\u6444\u50cf\u673a\u7684\u60c5\u5f62 \uff1a\u82e5 \\((P,P^\\prime,\\{\\mathbf{X}_i\\})\\) \u662f\u4ece\u4e00\u70b9\u5bf9\u5e94\u96c6\u5f97\u5230\u7684\u5c04\u5f71\u91cd\u6784\u4e14 \\(P=[I|\\mathbf{0}]\\) \u3002\u82e5\u5df2\u77e5 \\(P\\) \u4e8b\u5b9e\u4e0a\u662f\u4e00\u4e2a\u4eff\u5c04\u6444\u50cf\u673a\uff0c\u5219\u53ef\u4ee5\u901a\u8fc7\u4ea4\u6362 \\(P\\) \u548c \\(P^\\prime\\) \u7684\u6700\u540e\u4e24\u4e2a\u5217\u548c\u6bcf\u4e00\u4e2a \\(\\mathbf{X}_i\\) \u7684\u6700\u540e\u4e24\u4e2a\u5750\u6807\u800c\u5f97\u5230\u4e00\u4e2a\u4eff\u5c04\u91cd\u6784 \u5ea6\u91cf\u91cd\u6784 \u00b6 \u4eff\u5c04\u91cd\u6784\u7684\u5173\u952e\u662f\u8fa8\u8ba4\u65e0\u7a77\u8fdc\u5e73\u9762\uff0c\u800c\u5ea6\u6700\u91cd\u6784\u7684\u5173\u952e\u662f\u8fa8\u8ba4\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf \u82e5\u5df2\u77e5\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf\u5728\u67d0\u5e45\u56fe\u50cf\u4e2d\u7684\u50cf\u662f \\(\\omega\\) \uff0c\u4e14\u5df2\u77e5\u4eff\u5c04\u91cd\u6784\u4e2d\u7684\u6444\u50cf\u673a\u77e9\u9635\u662f \\(P=[M|\\mathbf{m}]\\) \uff0c\u5219\u7528\u5f62\u5982 \\(H=\\begin{bmatrix} A^{-1} & \\\\ & 1 \\end{bmatrix}\\) \u7684 3D \u53d8\u6362\uff0c\u53ef\u4ee5\u628a\u4eff\u5c04\u91cd\u6784\u53d8\u6362\u5230\u5ea6\u91cf\u91cd\u6784\uff0c\u5176\u4e2d \\(A\\) \u7531\u65b9\u7a0b \\(AA^\\top=(M^\\top \\omega M)^{-1}\\) \u7684 Cholesky \u5206\u89e3\u5f97\u5230 Cholesky \u5206\u89e3 Cholesky \u5206\u89e3\u662f\u628a\u4e00\u4e2a\u5bf9\u79f0\u6b63\u5b9a\u7684\u77e9\u9635\u8868\u793a\u6210\u4e00\u4e2a\u4e0b\u4e09\u89d2\u77e9\u9635 \\(L\\) \u548c\u5176\u8f6c\u7f6e\u7684\u4e58\u79ef\u7684\u5206\u89e3\u3002\u5b83\u8981\u6c42\u77e9\u9635\u7684\u6240\u6709\u7279\u5f81\u503c\u5fc5\u987b\u5927\u4e8e\u96f6\uff0c\u6545\u5206\u89e3\u7684\u4e0b\u4e09\u89d2\u7684\u5bf9\u89d2\u5143\u4e5f\u662f\u5927\u4e8e\u96f6\u7684\u3002Cholesky \u5206\u89e3\u6cd5\u53c8\u79f0\u5e73\u65b9\u6839\u6cd5\uff0c\u662f\u5f53 \\(A\\) \u4e3a\u5b9e\u5bf9\u79f0\u6b63\u5b9a\u77e9\u9635\u65f6\uff0c \\(LU\\) \u4e09\u89d2\u5206\u89e3\u6cd5\u7684\u53d8\u5f62\u3002 \u666f\u7269\u6b63\u4ea4\u7684\u7ea6\u675f \uff1a\u666f\u7269\u7684\u6b63\u4ea4\u76f4\u7ebf\u7684\u4e00\u5bf9\u6d88\u5f71\u70b9 \\(\\mathbf{v}_1,\\mathbf{v}_2\\) \u5bf9 \\(\\omega\\) \u63d0\u4f9b\u4e00\u4e2a\u7ebf\u6027\u7ea6\u675f: \\(\\mathbf{v}_1^\\top \\omega \\mathbf{v}_2 = 0\\) \u3002\u7c7b\u4f3c\u5730\uff0c\u6765\u81ea\u4e00\u4e2a\u65b9\u5411\u7684\u6d88\u5f71\u70b9 \\(\\mathbf{v}\\) \u548c\u4e0e\u4e4b\u5782\u76f4\u7684\u5e73\u9762\u7684\u6d88\u5f71\u76f4\u7ebf \\(\\mathbf{l}\\) \u5bf9 \\(\\omega\\) \u63d0\u4f9b\u4e24\u4e2a\u7ea6\u675f \\(\\mathbf{l}=\\omega \\mathbf{v}\\) \uff0c\u4e00\u4e2a\u5e38\u7528\u7684\u4f8b\u5b50\u662f\u5782\u76f4\u65b9\u5411\u7684\u6d88\u5f71\u70b9\u548c\u6c34\u5e73\u5730\u5e73\u9762\u7684\u6d88\u5f71\u76f4\u7ebf \u5df2\u77e5\u5185\u53c2\u6570\u7684\u7ea6\u675f \uff1a\u5982\u679c\u6444\u50cf\u673a\u77e9\u9635\u7684\u6807\u5b9a\u77e9\u9635\u7b49\u4e8e \\(K\\) \uff0c\u5219\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf\u7684\u50cf\u662f \\(\\omega=K^{-\\top}K^{-1}\\) \u3002\u56e0\u6b64\u5305\u62ec\u5728 \\(K\\) \u4e2d\u7684\u6444\u50cf\u673a\u5185\u53c2\u6570\u4fe1\u606f\u53ef\u4ee5\u7528\u6765\u7ea6\u675f\u6216\u786e\u5b9a \\(\\omega\\) \u7684\u5143\u7d20\u3002\u5728\u5df2\u77e5 \\(K\\) \u7684\u626d\u66f2\u56e0\u5b50\u4e3a\u96f6\uff08 \\(s=0\\) \uff09\u65f6\u6709 \\(\\omega_{12}=\\omega_{21}=0\\) \uff0c\u82e5\u50cf\u7d20\u8fd8\u662f\u6b63\u65b9\u5f62\uff08\u96f6\u626d\u66f2\u53c2\u6570\u4e14 \\(\\alpha_x=\\alpha_y\\) \uff09\uff0c\u5219 \\(\\omega_{11}=\\omega_{22}\\) \u540c\u4e00\u6444\u50cf\u673a\u5728\u591a\u5e45\u56fe\u50cf\u4e2d\u7684\u7ea6\u675f \uff1a\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf\u7684\u4e00\u4e2a\u6027\u8d28\u662f\u5b83\u5728\u56fe\u50cf\u4e0a\u7684\u6295\u5f71\u53ea\u4f9d\u8d56\u4e8e\u6444\u50cf\u673a\u7684\u6807\u5b9a\u77e9\u9635\uff0c\u800c\u4e0d\u4f9d\u8d56\u4e8e\u6444\u50cf\u673a\u7684\u4f4d\u7f6e\u548c\u65b9\u5411\u3002\u5f53\u4e24\u4e2a\u6444\u50cf\u673a\u5177\u6709\u76f8\u540c\u7684\u6807\u5b9a\u77e9\u9635\u65f6(\u901a\u5e38\u610f\u5473\u7740\u540c\u4e00\u6444\u50cf\u673a\u5728\u4e0d\u540c\u4f4d\u7f6e\u62cd\u6444\u7684\u4e24\u5e45\u56fe\u50cf)\u5219\u6709 \\(\\omega=\\omega^\\prime\\) \uff0c\u5373\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf\u5728\u4e24\u5e45\u56fe\u50cf\u4e0a\u7684\u50cf\u662f\u76f8\u540c\u7684\uff0c\u7ed9\u5b9a\u8db3\u591f\u591a\u7684\u56fe\u50cf\uff0c\u53ef\u4ee5\u5229\u7528\u8fd9\u4e2a\u6027\u8d28\u4ece\u4eff\u5c04\u91cd\u6784\u5f97\u5230\u5ea6\u91cf\u91cd\u6784 \u5229\u7528 \\(\\omega\\) \u76f4\u63a5\u5ea6\u91cf\u91cd\u6784 \u00b6 \u6700\u660e\u663e\u7684\u65b9\u6cd5\u662f\u5229\u7528IAC\uff08\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf\uff09\u6765\u8ba1\u7b97\u6bcf\u4e2a\u6444\u50cf\u673a\u7684\u6807\u5b9a\uff0c\u7136\u540e\u518d\u8fdb\u884c\u5df1\u77e5\u6807\u5b9a\u4e0b\u7684\u91cd\u6784 \u53e6\u4e00\u4e2a\u66f4\u6982\u5ff5\u6027\u7684\u65b9\u6cd5\u662f\u8fd0\u7528IAC\u7684\u4fe1\u606f\u76f4\u63a5\u786e\u5b9a\u65e0\u7a77\u8fdc\u5e73\u9762\u548c\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf \u76f4\u63a5\u91cd\u6784\u2014\u2014\u5229\u7528\u5730\u9762\u77e5\u8bc6 \u00b6 \u5728\u5c04\u5f71\u91cd\u6784\u4e0b\uff0c\u63a7\u5236\u70b9 \\(\\{\\mathbf{X}_i\\}\\) \u7684 3D \u4f4d\u7f6e\u53ef\u4ee5\u6709\u5b83\u4eec\u56fe\u50cf\u5bf9\u5e94\u70b9 \\(\\mathbf{x}_i \\leftrightarrow \\mathbf{x}_i^\\prime\\) \u6765\u8ba1\u7b97\u3002\u56e0\u4e3a\u8be5\u5c04\u5f71\u91cd\u6784\u901a\u8fc7\u4e00\u4e2a\u5355\u5e94\u8054\u7cfb\u4e8e\u771f\u6b63\u7684\u91cd\u6784\uff1a \\(\\mathbf{X}_{Ei}=H\\mathbf{X}_i, i=1,...,n\\) \u6bcf\u7ec4\u70b9\u5bf9\u5e94\u63d0\u4f9b\u5173\u4e8e H \u5143\u7d20\u7684\u4e09\u4e2a\u72ec\u7acb\u7ebf\u6027\u65b9\u7a0b\u3002\u56e0\u4e3a H \u6709 15 \u4e2a\u81ea\u7531\u5ea6\uff0c\u6545\u82e5\u63d0\u4f9b \\(n \\ge 5\\) \u7ec4\uff08\u4e14\u6ca1\u6709\u56db\u4e2a\u63a7\u5236\u70b9\u662f\u5171\u9762\u7684\uff09\u70b9\u5bf9\u5e94\uff0c\u4fbf\u53ef\u4ee5\u5f97\u5230\u4e00\u4e2a\u7ebf\u6027\u89e3 \u53e6\u4e00\u79cd\u65b9\u6cd5\u53ef\u4ee5\u4e0d\u8ba1\u7b97 \\(\\mathbf{X}_i\\) \u800c\u901a\u8fc7\u628a\u5df2\u77e5\u7684\u5730\u9762\u63a7\u5236\u70b9\u76f4\u63a5\u4e0e\u56fe\u50cf\u7684\u5ea6\u91cf\u76f8\u8054\u7cfb\u7684\u9014\u5f84\u6765\u8ba1\u7b97 H\u3002\u56e0\u6b64\u7c7b\u4f3c\u4e8e\u8ba1\u7b97\u6444\u50cf\u673a\u77e9\u9635\u7684 \\(DLT\\) \u7b97\u6cd5\uff1a \\(\\mathbf{x}_i = PH^{-1} \\mathbf{X}_{Ei}\\)","title":"\u6444\u50cf\u673a\u548c\u7ed3\u6784\u7684 3D \u91cd\u6784"},{"location":"cv/mvg/3dr-camera-structure/#3d","text":"\u7ea6 2125 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f Abstract \u91cd\u6784\u7684\u4efb\u52a1\u662f\u6c42\u6444\u50cf\u673a\u77e9\u9635 \\(P\\) \u548c \\(P^\\prime\\) \uff0c\u4ee5\u53ca 3D \u4e2d\u7684\u70b9 \\(\\mathbf{X}_i\\) \uff0c\u4f7f\u5f97\u5bf9\u6240\u6709 i\uff0c\u6709 \\[ \\mathbf{x}_i=P \\mathbf{X}_i \\ \\ \\ \\ \\ \\ \\mathbf{x}_i^\\prime=P^\\prime \\mathbf{X}_i \\]","title":"\u6444\u50cf\u673a\u548c\u7ed3\u6784\u7684 3D \u91cd\u6784"},{"location":"cv/mvg/3dr-camera-structure/#_1","text":"\u7531\u4e24\u89c6\u56fe\u91cd\u6784\u7684\u4e00\u79cd\u65b9\u6cd5\uff1a \u7531\u5bf9\u5e94\u70b9\u8ba1\u7b97\u57fa\u672c\u77e9\u9635 \u7531\u57fa\u672c\u77e9\u9635\u8ba1\u7b97\u6444\u50cf\u673a\u77e9\u9635 \u9488\u5bf9\u6bcf\u7ec4\u5bf9\u5e94\u70b9 \\(\\mathbf{x}_i \\leftrightarrow \\mathbf{x}_i^\\prime\\) \uff0c\u8ba1\u7b97\u7a7a\u95f4\u4e2d\u6620\u5c04\u5230\u8fd9\u4e24\u4e2a\u56fe\u50cf\u70b9\u5230\u70b9","title":"\u91cd\u6784\u65b9\u6cd5\u6982\u8ff0"},{"location":"cv/mvg/3dr-camera-structure/#_2","text":"\u82e5\u6ca1\u6709\u666f\u7269\u5728\u67d0\u4e2a 3D \u5750\u6807\u7cfb\u4e0b\u4f4d\u7f6e\u7684\u4fe1\u606f\uff0c\u4e00\u822c\u4e0d\u53ef\u80fd\u4ece\u4e00\u5bf9\u89c6\u56fe\uff08\u6216\u4e8b\u5b9e\u4e0a\u4ece\u4efb\u610f\u6570\u76ee\u7684\u89c6\u56fe\uff09\u91cd\u6784\u8be5\u666f\u7269\u7684\u7edd\u5bf9\u4f4d\u7f6e\u548c\u671d\u5411\u3002\u4ec5\u7531\u56fe\u50cf\u6765\u786e\u5b9a\u666f\u7269\u5c31\u8981\u76f8\u5dee\u4e00\u4e2a\u76f8\u4f3c\u53d8\u6362\uff08\u65cb\u8f6c\u3001\u5e73\u79fb\u548c\u7f29\u653e\uff09 \u5c04\u5f71\u591a\u4e49\u6027 \uff1a\u5982\u679c\u65e2\u4e0d\u77e5\u9053\u4efb\u4f55\u4e00\u4e2a\u6444\u50cf\u673a\u7684\u6807\u5b9a\uff0c\u4e5f\u4e0d\u77e5\u9053\u4e00\u4e2a\u6444\u50cf\u673a\u4e0e\u53e6\u4e00\u4e2a\u7684\u76f8\u5bf9\u4f4d\u7f6e\uff0c\u90a3\u4e48\u91cd\u6784\u7684\u591a\u4e49\u6027\u7531\u4e00\u4e2a\u4efb\u610f\u5c04\u5f71\u53d8\u6362\u8868\u793a \u5982\u679c\u4e24\u4e2a\u6444\u50cf\u673a\u4e4b\u95f4\u6709\u5e73\u79fb\u8fd0\u52a8\uff0c\u4f46\u6807\u5b9a\u4e0d\u53d8\uff0c\u5219\u53ef\u5728\u76f8\u5dee\u4e00\u4e2a\u4eff\u5c04\u53d8\u6362\u4e0b\u91cd\u6784 \u5982\u679c\u4e24\u4e2a\u6444\u50cf\u673a\u9664\u4e86\u7126\u8ddd\u5916\u90fd\u4ee5\u6807\u5b9a\uff0c\u5219\u4ecd\u7136\u53ef\u5728\u76f8\u5dee\u4e00\u4e2a\u76f8\u4f3c\u53d8\u6362\u4e0b\u91cd\u6784","title":"\u91cd\u6784\u7684\u591a\u4e49\u6027"},{"location":"cv/mvg/3dr-camera-structure/#_3","text":"\u5982\u679c\u4e24\u5e45\u89c6\u56fe\u7684\u4e00\u4e2a\u70b9\u5bf9\u5e94\u96c6\u552f\u4e00\u5730\u786e\u5b9a\u4e86\u57fa\u672c\u77e9\u9635\uff0c\u5219\u666f\u7269\u548c\u6444\u50cf\u673a\u53ef\u4ee5\u4ec5\u7531\u8fd9\u4e9b\u5bf9\u5e94\u91cd\u6784\uff0c\u800c\u4e14\u7531\u8fd9\u4e9b\u5bf9\u5e94\u4ea7\u751f\u7684\u4efb\u4f55\u4e24\u4e2a\u91cd\u6784\u90fd\u662f\u5c04\u5f71\u7b49\u4ef7\u7684 * \u5c04\u5f71\u91cd\u6784\u5b9a\u5b9a\u7406 \uff1a\u5047\u5b9a \\(\\mathbf{x}_i \\leftrightarrow \\mathbf{x}_i^\\prime\\) \u662f\u4e24\u5e45\u56fe\u50cf\u70b9\u4e4b\u95f4\u5bf9\u5e94\u7684\u96c6\u5408\u800c\u4e14\u57fa\u672c\u77e9\u9635 F \u7531\u6761\u4ef6 \\(\\mathbf{x}_i^{\\prime \\top} F \\mathbf{x}_i=0\\) \uff08\u5bf9\u6240\u6709 i \u6210\u7acb\uff09\u552f\u4e00\u5730\u786e\u5b9a\u3002\u4ee4 \\((P_1,P_1^\\prime,\\{\\mathbf{X}_{1i}\\})\\) \u548c \\((P_2,P_2^\\prime,\\{\\mathbf{X}_{2i}\\})\\) \u4e3a\u5bf9\u5e94 \\(\\mathbf{x}_i \\leftrightarrow \\mathbf{x}_i^\\prime\\) \u7684\u4e24\u4e2a\u91cd\u6784\uff0c\u5219\u5b58\u5728\u4e00\u4e2a\u975e\u5947\u5f02\u77e9\u9635 H \u4f7f\u5f97 \\(P_2=P_1H^{-1},P_2^\\prime=P_1^\\prime H^{-1}\\) \u5e76\u4e14\u9664\u4e86\u4f7f\u5f97 \\(F\\mathbf{x}_i=F^\\top \\mathbf{x}_i^\\prime=\\mathbf{0}\\) \u7684\u90a3\u4e9b i \u5916\uff0c\u5bf9\u5176\u4f59\u6bcf\u4e2a i \u90fd\u6709 \\(\\mathbf{X}_{2i}=H\\mathbf{X}_{1i}\\)","title":"\u5c04\u5f71\u91cd\u6784\u5b9a\u7406"},{"location":"cv/mvg/3dr-camera-structure/#_4","text":"","title":"\u5206\u5c42\u91cd\u6784"},{"location":"cv/mvg/3dr-camera-structure/#_5","text":"\u4eff\u5c04\u91cd\u6784\u7684\u672c\u8d28\u662f\u7528\u67d0\u4e9b\u65b9\u6cd5\u5b9a\u4f4d\u65e0\u7a77\u8fdc\u5e73\u9762\uff0c\u56e0\u4e3a\u5b9a\u4f4d\u65e0\u7a77\u8fdc\u5e73\u9762\u7b49\u4ef7\u4e8e\u4eff\u5c04\u91cd\u6784\u3002\u5bfb\u627e\u4f7f \\(\\pi\\) \u6620\u5c04\u5230 \\((0,0,0,1)^\\top\\) \uff0c\u53ef\u4ee5\u628a \\(H^{-\\top}\\) \u4f5c\u4e3a Houscholder \u77e9\u9635\u6765\u8ba1\u7b97 \u5e73\u79fb\u8fd0\u52a8 \u6444\u50cf\u673a\u4f5c\u7eaf\u5e73\u79fb\u8fd0\u52a8\u65f6\uff0c\u53ef\u4ee5\u7531\u4e24\u5e45\u89c6\u56fe\u5b9e\u73b0\u4eff\u5c04\u91cd\u6784\u3002\u65e0\u7a77\u8fdc\u5e73\u9762\u4e0a\u4e00\u70b9 \\(\\mathbf{X}\\) \u5728\u7531\u6444\u50cf\u673a\u5e73\u79fb\u6240\u4ea7\u751f\u7684\u4e24\u5e45\u56fe\u50cf\u4e0a\u7684\u50cf\u662f\u540c\u4e00\u70b9\u3002\u7ed9\u5b9a\u4e00\u4e2a\u5c04\u5f71\u91cd\u6784\uff0c\u53ef\u4ee5\u91cd\u6784\u5bf9\u5e94\u4e8e\u5339\u914d \\(\\mathbf{x}_i \\leftrightarrow \\mathbf{x}_i^\\prime\\) \u7684\u70b9 \\(\\mathbf{X}_i\\) \u3002\u70b9 \\(\\mathbf{X}_i\\) \u5c06\u5728\u65e0\u7a77\u8fdc\u5e73\u9762\u4e0a\u3002\u4ece\u4e09\u7ec4\u8fd9\u6837\u7684\u70b9\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u5728\u65e0\u7a77\u8fdc\u5e73\u9762\u4e0a\u7684\u4e09\u4e2a\u70b9\u2014\u2014\u8db3\u591f\u552f\u4e00\u5730\u628a\u5b83\u786e\u5b9a \u5047\u8bbe\u6444\u50cf\u673a\u7684\u8fd0\u52a8\u662f\u6ca1\u6709\u65cb\u8f6c\u4e14\u5185\u53c2\u4fdd\u6301\u4e0d\u53d8\u7684\u4e00\u4e2a\u7eaf\u5e73\u79fb\u8fd0\u52a8\uff0c\u5219 \\(F=[\\mathbf{e}]_\\times = [\\mathbf{e}^\\prime]_\\times\\) \uff0c\u5e76\u4e14\u4f5c\u4e3a\u4eff\u5c04\u91cd\u6784\u53ef\u9009\u7684\u4e24\u4e2a\u6444\u50cf\u673a\u4e3a \\(P=[I|\\mathbf{0}]\\) \u548c \\(P^\\prime=[I|\\mathbf{e}^\\prime]\\) \u666f\u7269\u7ea6\u675f \uff1a\u666f\u7269\u7ea6\u675f\u6216\u6761\u4ef6\u4e5f\u53ef\u4ee5\u7528\u6765\u83b7\u5f97\u4eff\u5c04\u91cd\u6784\uff0c\u53ea\u8981\u80fd\u591f\u8fa8\u8ba4\u5728\u65e0\u7a77\u8fdc\u5e73\u9762\u4e0a\u7684\u4e09\u4e2a\u70b9\uff0c\u8be5\u5e73\u9762\u5c31\u53ef\u4ee5\u8fa8\u8ba4\uff0c\u5e76\u4e14\u8be5\u91cd\u6784\u53ef\u4ee5\u53d8\u6362\u5230\u4eff\u5c04\u91cd\u6784 \u5e73\u884c\u76f4\u7ebf \uff1a\u6700\u660e\u663e\u7684\u6761\u4ef6\u662f\u77e5\u9053\u67d0\u4e9b 3D \u76f4\u7ebf\u5b9e\u9645\u662f\u5e73\u884c\u7684\u3002\u7a7a\u95f4\u4e24\u6761\u5e73\u884c\u76f4\u7ebf\u7684\u4ea4\u70b9\u7ed9\u51fa\u65e0\u7a77\u8fdc\u5e73\u9762\u4e0a\u7684\u4e00\u4e2a\u70b9\uff0c\u8be5\u4ea4\u70b9\u7684\u56fe\u50cf\u662f\u8fd9\u5bf9\u5e73\u884c\u7ebf\u7684\u6d88\u5f71\u70b9\uff0c\u800c\u4e14\u662f\u4e24\u6761\u50cf\u76f4\u7ebf\u7684\u4ea4\u70b9\u3002\u5047\u8bbe\u5728\u666f\u7269\u4e2d\u80fd\u591f\u786e\u5b9a\u4e09\u5bf9\u5e73\u884c\u76f4\u7ebf\u3002\u6bcf\u5bf9\u76f8\u4ea4\u4e8e\u65e0\u7a77\u8fdc\u5e73\u800c\u4e0a\u7684\u4e00\u70b9\uff0c\u5982\u679c\u6bcf\u5bf9\u6709\u4e0d\u540c\u7684\u65b9\u5411\uff0c\u5219\u4e09\u70b9\u5c06\u4e0d\u540c\u3002\u56e0\u4e3a\u4e09\u70b9\u786e\u5b9a\u4e00\u5f20\u5e73\u9762\uff0c\u6545\u8fd9\u4e2a\u4fe1\u606f\u8db3\u591f\u786e\u5b9a\u5e73\u9762 \\(\\pi\\) \u76f4\u7ebf\u4e0a\u7684\u8ddd\u79bb\u6bd4\u7387 \uff1a\u8fd0\u52a8\u666f\u7269\u4eff\u5c04\u957f\u5ea6\u6bd4\u7387\u4e0d\u53d8\u7684\u77e5\u8bc6\u8ba1\u7b97\u6d88\u5f71\u70b9 \u65e0\u7a77\u5355\u5e94 \uff1a\u5982\u679c\u4e00\u4e2a\u4eff\u5c04\u91cd\u6784\u5df2\u5f97\u5230\u5e76\u4e14\u5176\u4e2d\u7684\u6444\u50cf\u673a\u77e9\u9635\u662f \\(P=[I|\\mathbf{0}]\\) \u548c \\(P^\\prime=[M^\\prime|\\mathbf{e}^\\prime]\\) \uff0c\u5219\u65e0\u7a77\u5355\u5e94\u662f \\(H_\\infty=M^\\prime\\) \u3002\u53cd\u8fc7\u6765\uff0c\u5982\u679c\u5df2\u5f97\u5230\u65e0\u7a77\u5355\u5e94 \\(H_\\infty\\) \uff0c\u5219\u4eff\u5c04\u91cd\u6784\u7684\u6444\u50cf\u673a\u53ef\u4ee5\u53d6\u4e3a \\(P=[I|\\mathbf{0}]\\) \u548c \\(P^\\prime=[H_\\infty|\\mathbf{e}^\\prime]\\) \u5176\u4e2d\u4e00\u4e2a\u662f\u4eff\u5c04\u6444\u50cf\u673a\u7684\u60c5\u5f62 \uff1a\u82e5 \\((P,P^\\prime,\\{\\mathbf{X}_i\\})\\) \u662f\u4ece\u4e00\u70b9\u5bf9\u5e94\u96c6\u5f97\u5230\u7684\u5c04\u5f71\u91cd\u6784\u4e14 \\(P=[I|\\mathbf{0}]\\) \u3002\u82e5\u5df2\u77e5 \\(P\\) \u4e8b\u5b9e\u4e0a\u662f\u4e00\u4e2a\u4eff\u5c04\u6444\u50cf\u673a\uff0c\u5219\u53ef\u4ee5\u901a\u8fc7\u4ea4\u6362 \\(P\\) \u548c \\(P^\\prime\\) \u7684\u6700\u540e\u4e24\u4e2a\u5217\u548c\u6bcf\u4e00\u4e2a \\(\\mathbf{X}_i\\) \u7684\u6700\u540e\u4e24\u4e2a\u5750\u6807\u800c\u5f97\u5230\u4e00\u4e2a\u4eff\u5c04\u91cd\u6784","title":"\u4eff\u5c04\u91cd\u6784"},{"location":"cv/mvg/3dr-camera-structure/#_6","text":"\u4eff\u5c04\u91cd\u6784\u7684\u5173\u952e\u662f\u8fa8\u8ba4\u65e0\u7a77\u8fdc\u5e73\u9762\uff0c\u800c\u5ea6\u6700\u91cd\u6784\u7684\u5173\u952e\u662f\u8fa8\u8ba4\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf \u82e5\u5df2\u77e5\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf\u5728\u67d0\u5e45\u56fe\u50cf\u4e2d\u7684\u50cf\u662f \\(\\omega\\) \uff0c\u4e14\u5df2\u77e5\u4eff\u5c04\u91cd\u6784\u4e2d\u7684\u6444\u50cf\u673a\u77e9\u9635\u662f \\(P=[M|\\mathbf{m}]\\) \uff0c\u5219\u7528\u5f62\u5982 \\(H=\\begin{bmatrix} A^{-1} & \\\\ & 1 \\end{bmatrix}\\) \u7684 3D \u53d8\u6362\uff0c\u53ef\u4ee5\u628a\u4eff\u5c04\u91cd\u6784\u53d8\u6362\u5230\u5ea6\u91cf\u91cd\u6784\uff0c\u5176\u4e2d \\(A\\) \u7531\u65b9\u7a0b \\(AA^\\top=(M^\\top \\omega M)^{-1}\\) \u7684 Cholesky \u5206\u89e3\u5f97\u5230 Cholesky \u5206\u89e3 Cholesky \u5206\u89e3\u662f\u628a\u4e00\u4e2a\u5bf9\u79f0\u6b63\u5b9a\u7684\u77e9\u9635\u8868\u793a\u6210\u4e00\u4e2a\u4e0b\u4e09\u89d2\u77e9\u9635 \\(L\\) \u548c\u5176\u8f6c\u7f6e\u7684\u4e58\u79ef\u7684\u5206\u89e3\u3002\u5b83\u8981\u6c42\u77e9\u9635\u7684\u6240\u6709\u7279\u5f81\u503c\u5fc5\u987b\u5927\u4e8e\u96f6\uff0c\u6545\u5206\u89e3\u7684\u4e0b\u4e09\u89d2\u7684\u5bf9\u89d2\u5143\u4e5f\u662f\u5927\u4e8e\u96f6\u7684\u3002Cholesky \u5206\u89e3\u6cd5\u53c8\u79f0\u5e73\u65b9\u6839\u6cd5\uff0c\u662f\u5f53 \\(A\\) \u4e3a\u5b9e\u5bf9\u79f0\u6b63\u5b9a\u77e9\u9635\u65f6\uff0c \\(LU\\) \u4e09\u89d2\u5206\u89e3\u6cd5\u7684\u53d8\u5f62\u3002 \u666f\u7269\u6b63\u4ea4\u7684\u7ea6\u675f \uff1a\u666f\u7269\u7684\u6b63\u4ea4\u76f4\u7ebf\u7684\u4e00\u5bf9\u6d88\u5f71\u70b9 \\(\\mathbf{v}_1,\\mathbf{v}_2\\) \u5bf9 \\(\\omega\\) \u63d0\u4f9b\u4e00\u4e2a\u7ebf\u6027\u7ea6\u675f: \\(\\mathbf{v}_1^\\top \\omega \\mathbf{v}_2 = 0\\) \u3002\u7c7b\u4f3c\u5730\uff0c\u6765\u81ea\u4e00\u4e2a\u65b9\u5411\u7684\u6d88\u5f71\u70b9 \\(\\mathbf{v}\\) \u548c\u4e0e\u4e4b\u5782\u76f4\u7684\u5e73\u9762\u7684\u6d88\u5f71\u76f4\u7ebf \\(\\mathbf{l}\\) \u5bf9 \\(\\omega\\) \u63d0\u4f9b\u4e24\u4e2a\u7ea6\u675f \\(\\mathbf{l}=\\omega \\mathbf{v}\\) \uff0c\u4e00\u4e2a\u5e38\u7528\u7684\u4f8b\u5b50\u662f\u5782\u76f4\u65b9\u5411\u7684\u6d88\u5f71\u70b9\u548c\u6c34\u5e73\u5730\u5e73\u9762\u7684\u6d88\u5f71\u76f4\u7ebf \u5df2\u77e5\u5185\u53c2\u6570\u7684\u7ea6\u675f \uff1a\u5982\u679c\u6444\u50cf\u673a\u77e9\u9635\u7684\u6807\u5b9a\u77e9\u9635\u7b49\u4e8e \\(K\\) \uff0c\u5219\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf\u7684\u50cf\u662f \\(\\omega=K^{-\\top}K^{-1}\\) \u3002\u56e0\u6b64\u5305\u62ec\u5728 \\(K\\) \u4e2d\u7684\u6444\u50cf\u673a\u5185\u53c2\u6570\u4fe1\u606f\u53ef\u4ee5\u7528\u6765\u7ea6\u675f\u6216\u786e\u5b9a \\(\\omega\\) \u7684\u5143\u7d20\u3002\u5728\u5df2\u77e5 \\(K\\) \u7684\u626d\u66f2\u56e0\u5b50\u4e3a\u96f6\uff08 \\(s=0\\) \uff09\u65f6\u6709 \\(\\omega_{12}=\\omega_{21}=0\\) \uff0c\u82e5\u50cf\u7d20\u8fd8\u662f\u6b63\u65b9\u5f62\uff08\u96f6\u626d\u66f2\u53c2\u6570\u4e14 \\(\\alpha_x=\\alpha_y\\) \uff09\uff0c\u5219 \\(\\omega_{11}=\\omega_{22}\\) \u540c\u4e00\u6444\u50cf\u673a\u5728\u591a\u5e45\u56fe\u50cf\u4e2d\u7684\u7ea6\u675f \uff1a\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf\u7684\u4e00\u4e2a\u6027\u8d28\u662f\u5b83\u5728\u56fe\u50cf\u4e0a\u7684\u6295\u5f71\u53ea\u4f9d\u8d56\u4e8e\u6444\u50cf\u673a\u7684\u6807\u5b9a\u77e9\u9635\uff0c\u800c\u4e0d\u4f9d\u8d56\u4e8e\u6444\u50cf\u673a\u7684\u4f4d\u7f6e\u548c\u65b9\u5411\u3002\u5f53\u4e24\u4e2a\u6444\u50cf\u673a\u5177\u6709\u76f8\u540c\u7684\u6807\u5b9a\u77e9\u9635\u65f6(\u901a\u5e38\u610f\u5473\u7740\u540c\u4e00\u6444\u50cf\u673a\u5728\u4e0d\u540c\u4f4d\u7f6e\u62cd\u6444\u7684\u4e24\u5e45\u56fe\u50cf)\u5219\u6709 \\(\\omega=\\omega^\\prime\\) \uff0c\u5373\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf\u5728\u4e24\u5e45\u56fe\u50cf\u4e0a\u7684\u50cf\u662f\u76f8\u540c\u7684\uff0c\u7ed9\u5b9a\u8db3\u591f\u591a\u7684\u56fe\u50cf\uff0c\u53ef\u4ee5\u5229\u7528\u8fd9\u4e2a\u6027\u8d28\u4ece\u4eff\u5c04\u91cd\u6784\u5f97\u5230\u5ea6\u91cf\u91cd\u6784","title":"\u5ea6\u91cf\u91cd\u6784"},{"location":"cv/mvg/3dr-camera-structure/#omega","text":"\u6700\u660e\u663e\u7684\u65b9\u6cd5\u662f\u5229\u7528IAC\uff08\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf\uff09\u6765\u8ba1\u7b97\u6bcf\u4e2a\u6444\u50cf\u673a\u7684\u6807\u5b9a\uff0c\u7136\u540e\u518d\u8fdb\u884c\u5df1\u77e5\u6807\u5b9a\u4e0b\u7684\u91cd\u6784 \u53e6\u4e00\u4e2a\u66f4\u6982\u5ff5\u6027\u7684\u65b9\u6cd5\u662f\u8fd0\u7528IAC\u7684\u4fe1\u606f\u76f4\u63a5\u786e\u5b9a\u65e0\u7a77\u8fdc\u5e73\u9762\u548c\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf","title":"\u5229\u7528\\(\\omega\\)\u76f4\u63a5\u5ea6\u91cf\u91cd\u6784"},{"location":"cv/mvg/3dr-camera-structure/#_7","text":"\u5728\u5c04\u5f71\u91cd\u6784\u4e0b\uff0c\u63a7\u5236\u70b9 \\(\\{\\mathbf{X}_i\\}\\) \u7684 3D \u4f4d\u7f6e\u53ef\u4ee5\u6709\u5b83\u4eec\u56fe\u50cf\u5bf9\u5e94\u70b9 \\(\\mathbf{x}_i \\leftrightarrow \\mathbf{x}_i^\\prime\\) \u6765\u8ba1\u7b97\u3002\u56e0\u4e3a\u8be5\u5c04\u5f71\u91cd\u6784\u901a\u8fc7\u4e00\u4e2a\u5355\u5e94\u8054\u7cfb\u4e8e\u771f\u6b63\u7684\u91cd\u6784\uff1a \\(\\mathbf{X}_{Ei}=H\\mathbf{X}_i, i=1,...,n\\) \u6bcf\u7ec4\u70b9\u5bf9\u5e94\u63d0\u4f9b\u5173\u4e8e H \u5143\u7d20\u7684\u4e09\u4e2a\u72ec\u7acb\u7ebf\u6027\u65b9\u7a0b\u3002\u56e0\u4e3a H \u6709 15 \u4e2a\u81ea\u7531\u5ea6\uff0c\u6545\u82e5\u63d0\u4f9b \\(n \\ge 5\\) \u7ec4\uff08\u4e14\u6ca1\u6709\u56db\u4e2a\u63a7\u5236\u70b9\u662f\u5171\u9762\u7684\uff09\u70b9\u5bf9\u5e94\uff0c\u4fbf\u53ef\u4ee5\u5f97\u5230\u4e00\u4e2a\u7ebf\u6027\u89e3 \u53e6\u4e00\u79cd\u65b9\u6cd5\u53ef\u4ee5\u4e0d\u8ba1\u7b97 \\(\\mathbf{X}_i\\) \u800c\u901a\u8fc7\u628a\u5df2\u77e5\u7684\u5730\u9762\u63a7\u5236\u70b9\u76f4\u63a5\u4e0e\u56fe\u50cf\u7684\u5ea6\u91cf\u76f8\u8054\u7cfb\u7684\u9014\u5f84\u6765\u8ba1\u7b97 H\u3002\u56e0\u6b64\u7c7b\u4f3c\u4e8e\u8ba1\u7b97\u6444\u50cf\u673a\u77e9\u9635\u7684 \\(DLT\\) \u7b97\u6cd5\uff1a \\(\\mathbf{x}_i = PH^{-1} \\mathbf{X}_{Ei}\\)","title":"\u76f4\u63a5\u91cd\u6784\u2014\u2014\u5229\u7528\u5730\u9762\u77e5\u8bc6"},{"location":"cv/mvg/ag-fm/","text":"\u5bf9\u6781\u51e0\u4f55\u548c\u57fa\u672c\u77e9\u9635 \u00b6 \u7ea6 2754 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f Abstract \u5bf9\u6781\u51e0\u4f55\u662f\u4e24\u5e45\u89c6\u56fe\u4e4b\u95f4\u5185\u5728\u7684\u5c04\u5f71\u51e0\u4f55\uff0c\u72ec\u7acb\u4e8e\u666f\u7269\u7ed3\u6784\uff0c\u53ea\u4f9d\u8d56\u4e8e\u6444\u50cf\u673a\u7684\u5185\u53c2\u6570\u548c\u76f8\u5bf9\u59ff\u6001 \u57fa\u672c\u77e9\u9635 F \u96c6\u4e2d\u4e86\u8fd9\u4e2a\u5185\u5728\u51e0\u4f55\u7684\u7cbe\u534e\uff0c\u5b83\u662f\u4e00\u4e2a\u79e9\u4e3a 2 \u7684 \\(3 \\times 3\\) \u77e9\u9635\uff0c\u5982\u679c\u4e00\u4e2a 3 \u7ef4\u7a7a\u95f4\u70b9 \\(\\mathbf{X}\\) \u5728\u7b2c\u4e00\u3001\u7b2c\u4e8c\u5e45\u89c6\u56fe\u4e2d\u7684\u50cf\u5206\u522b\u4e3a \\(\\mathbf{x},\\mathbf{x}^\\prime\\) \uff0c\u5219\u8fd9\u4e24\u4e2a\u56fe\u50cf\u70b9\u6ee1\u8db3\u5173\u7cfb \\(\\mathbf{x}^{\\prime \\top}F\\mathbf{x}=0\\) \u5bf9\u6781\u51e0\u4f55 \u00b6 \u672c\u8d28\u4e0a\uff0c\u4e24\u5e45\u89c6\u56fe\u4e4b\u95f4\u7684\u5bf9\u6781\u51e0\u4f55\u662f\u56fe\u50cf\u5e73\u9762\u4e0e\u4ee5\u57fa\u7ebf\uff08\u57fa\u7ebf\u662f\u8fde\u63a5\u4e24\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u76f4\u7ebf\uff09\u4e3a\u8f74\u7684\u5e73\u9762\u675f\u7684\u4ea4\u7684\u51e0\u4f55 \u5bf9\u6781\u70b9 \u662f\u8fde\u63a5\u4e24\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u76f4\u7ebf\uff08\u57fa\u7ebf\uff09\u4e0e\u50cf\u5e73\u9762\u7684 \u4ea4\u70b9 \u3002\u7b49\u4ef7\u5730\uff0c\u5bf9\u6781\u70b9\u662f\u5728\u4e00\u5e45\u89c6\u56fe\u4e2d\u53e6\u4e00\u4e2a\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u50cf\u3002\u5b83\u4e5f\u662f\u57fa\u7ebf\uff08\u5e73\u79fb\uff09\u65b9\u5411\u7684\u6d88\u5f71\u70b9 \u5bf9\u6781\u5e73\u9762 \u662f\u4e00\u5f20\u5305\u542b\u57fa\u7ebf\u7684\u5e73\u9762\uff0c\u5b58\u5728\u7740\u5bf9\u6781\u5e73\u9762\u7684\u4e00\u4e2a\u5355\u53c2\u6570\u7c07\uff08\u675f\uff09 \u5bf9\u6781\u7ebf \u662f\u6781\u5e73\u9762\u4e0e\u56fe\u50cf\u5e73\u9762\u7684\u4ea4\u7ebf\uff0c\u6240\u6709\u5bf9\u6781\u7ebf\u76f8\u4ea4\u4e8e\u5bf9\u6781\u70b9\uff0c\u4e00\u5f20\u5bf9\u6781\u5e73\u9762\u4e0e\u5de6\u6216\u53f3\u50cf\u5e73\u9762\u76f8\u4ea4\u4e8e\u5bf9\u6781\u7ebf\uff0c\u5e76\u5b9a\u4e49\u4e86\u5bf9\u6781\u7ebf\u4e4b\u95f4\u7684\u5bf9\u5e94 \u5e73\u884c\u4e8e\u56fe\u50cf\u5e73\u9762\u7684\u8fd0\u52a8 \uff1a\u5bf9\u4e8e\u5e73\u884c\u4e8e\u56fe\u50cf\u5e73\u9762\u4f5c\u5e73\u79fb\u4ee5\u53ca\u65cb\u8f6c\u8f74\u5782\u76f4\u56fe\u50cf\u5e73\u9762\u7684\u7279\u6b8a\u8fd0\u52a8\u60c5\u5f62\uff0c\u57fa\u7ebf\u4e0e\u56fe\u50cf\u5e73\u9762\u7684\u4ea4\u70b9\u4f4d\u4e8e\u65e0\u7a77\u8fdc\uff0c\u56e0\u6b64\uff0c\u5bf9\u6781\u70b9\u662f\u65e0\u7a77\u8fdc\u70b9\u800c\u5bf9\u6781\u7ebf\u662f\u5e73\u884c\u7ebf \u57fa\u672c\u77e9\u9635 F \u00b6 \u57fa\u672c\u77e9\u9635 F \u53ef\u4ee5\u8bb0\u4e3a \\(F=[\\mathbf{e}^\\prime]\\) \\times H \\pi\uff0c\u5176\u4e2d \\(H_\\pi=P^\\prime P^+\\) \u662f\u4ece\u4e00\u5e45\u56fe\u50cf\u5230\u53e6\u4e00\u5e45\u56fe\u50cf\u901a\u8fc7\u4efb\u610f\u5e73\u9762 \\(\\pi\\) \u7684\u8f6c\u79fb\u6620\u5c04\u3002\u800c\u4e14\uff0c\u56e0\u4e3a \\([\\mathbf{e}^\\prime]_\\times\\) \u7684\u79e9\u4e3a 2 \u548c \\(H_\\pi\\) \u79e9\u4e3a 3\uff0c\u6240\u4ee5 F \u662f\u79e9 2 \u7684\u77e9\u9635 \u5047\u8bbe\u6444\u50cf\u673a\u77e9\u9635\u662f\u4e00\u4e2a\u5df2\u6807\u5b9a\u7684\u53cc\u773c\u88c5\u7f6e\u4e14\u4e16\u754c\u539f\u70b9\u5728\u7b2c\u4e00\u4e2a\u6444\u50cf\u673a\u4e0a\uff1a \\[ F=[\\mathbf{e}^\\prime]_\\times K^\\prime R K^{-1}=K^{\\prime-\\top}[\\mathbf{t}]_\\times RK^{-1}=K^{\\prime -\\top}R[R^\\top \\mathbf{t}]_\\times K^{-1}=K^{\\prime -\\top}RK^\\top [\\mathbf{e}]_\\times \\] \u5bf9\u5e94\u6761\u4ef6 \u00b6 \u5bf9\u4e24\u5e45\u56fe\u50cf\u4e2d\u4efb\u4f55\u4e00\u5bf9\u5bf9\u5e94\u70b9 \\(\\mathbf{x} \\leftrightarrow \\mathbf{x}^\\prime\\) \uff0c\u57fa\u672c\u77e9\u9635\u90fd\u6ee1\u8db3\u6761\u4ef6 \\(\\mathbf{x}^{\\prime \\top}F\\mathbf{x}=0\\) \\(F\\) \u53ef\u4ee5\u4ece\u4e24\u4e2a\u6444\u50cf\u673a\u77e9\u9635 \\(P\u3001P^\\prime\\) \u8ba1\u7b97\u51fa\u6765\uff0c\u5373 \\(F\\) \u53ef\u5728\u76f8\u5dee\u4e00\u4e2a\u6574\u4f53\u5c3a\u5ea6\u56e0\u5b50\u7684\u4e00\u4e00\u4e0b\u7531\u6444\u50cf\u673a\u552f\u4e00\u786e\u5b9a \u57fa\u672c\u77e9\u9635\u7684\u6027\u8d28 \u00b6 \u5047\u8bbe\u4e24\u5e45\u56fe\u50cf\u7531\u4e2d\u5fc3\u4e0d\u91cd\u5408\u7684\u6444\u50cf\u673a\u83b7\u5f97\uff0c\u5219\u57fa\u672c\u77e9\u9635 \\(F\\) \u4e3a\u5bf9\u6240\u6709\u7684\u5bf9\u5e94\u70b9 \\(\\mathbf{x} \\leftrightarrow \\mathbf{x}^\\prime\\) ,\u5bf9\u6ee1\u8db3 \\(\\mathbf{x}^{\\prime \\top}F\\mathbf{x}=0\\) \u7684\u79e9 2 \u7684\u552f\u4e00\u7684 \\(3 \\times 3\\) \u9f50\u6b21\u77e9\u9635 F \u662f\u79e9 2\u3001\u81ea\u7531\u5ea6 7 \u7684\u9f50\u6b21\u77e9\u9635 \u70b9\u5bf9\u5e94 \uff1a\u5982\u679c \\(\\mathbf{x}\\) \u548c \\(\\mathbf{x}^\\prime\\) \u662f\u5bf9\u5e94\u7684\u56fe\u50cf\u70b9\uff0c\u90a3\u4e48 \\(\\mathbf{x}^{\\prime \\top}F\\mathbf{x}=0\\) \u5bf9\u6781\u7ebf \\(\\mathbf{l}^\\prime=F\\mathbf{x}\\) \u662f\u5bf9\u5e94\u4e8e \\(\\mathbf{x}\\) \u7684\u5bf9\u6781\u7ebf \\(\\mathbf{l}=F^\\top \\mathbf{x}^\\prime\\) \u662f\u5bf9\u5e94\u4e8e \\(\\mathbf{x}^\\prime\\) \u7684\u5bf9\u6781\u7ebf \u5bf9\u6781\u70b9 \\(F\\mathbf{e}=\\mathbf{0}\\) \\(F^\\top\\mathbf{e}^\\prime=\\mathbf{0}\\) \u7531\u6444\u50cf\u673a\u77e9\u9635 \\(P\u3001P^\\prime\\) \u8fdb\u884c\u8ba1\u7b97 \u4e00\u822c\u6444\u50cf\u673a \uff1a \\(F=[\\mathbf{e}^\\prime]_\\times P^\\prime P^+\\) \uff0c\u5176\u4e2d \\(P^+\\) \u662f \\(P\\) \u7684\u4f2a\u9006\uff0c \\(\\mathbf{e}^\\prime=P^\\prime \\mathbf{C}\\) \u4e14 \\(P\\mathbf{c}=\\mathbf{0}\\) \u89c4\u8303\u6444\u50cf\u673a \uff1a \\(P=[I|\\mathbf{0}],F=[\\mathbf{e}^\\prime]_\\times M = M^{-\\top}[\\mathbf{e}]_\\times\\) \uff0c\u5176\u4e2d \\(\\mathbf{e}^\\prime=\\mathbf{m}\\) \u4e14 \\(\\mathbf{e}=M^{-1}\\mathbf{m}\\) \u975e\u65e0\u7a77\u8fdc\u6444\u50cf\u673a \uff1a \\(P=K[I|\\mathbf{0}],P^\\prime=K^\\prime[R|\\mathbf{t}],F=K^{-\\top}[\\mathbf{t}]_\\times RK^{-1}=[K^\\prime \\mathbf{t}]_\\times K^\\prime R K^{-1}=K^{\\prime -\\top} RK^\\top [KR^\\top \\mathbf{t}]_\\times\\) \u8f6c\u7f6e \uff1a\u5982\u679c \\(F\\) \u662f\u6444\u50cf\u673a\u5bf9\u4f5c \\((P,P^\\prime)\\) \u7684\u57fa\u672c\u77e9\u9635\uff0c\u5219 \\(F^\\top\\) \u662f\u5176\u53cd\u5e8f\u5bf9 \\((P^\\prime,P)\\) \u7684\u57fa\u672c\u77e9\u9635 \u5bf9\u6781\u7ebf\u5355\u5e94 \u00b6 \u5047\u8bbe \\(\\mathbf{l}\\) \u548c \\(\\mathbf{l}^\\prime\\) \u662f\u5bf9\u5e94\u7684\u5bf9\u6781\u7ebf\uff0c\u4e14 \\(k\\) \u662f\u4e0d\u8fc7\u5bf9\u6781\u70b9 \\(\\mathbf{e}\\) \u7684\u4efb\u4f55\u76f4\u7ebf\uff0c\u5219 \\(\\mathbf{l}\\) \u548c \\(\\mathbf{l}^\\prime\\) \u95f4\u7684\u5173\u7cfb\u662f \\(\\mathbf{l}^\\prime=F[\\mathbf{k}]_\\times \\mathbf{l}\\) \uff0c\u5bf9\u79f0\u5730\u6709 \\(\\mathbf{l}=F^\\top [\\mathbf{k}^\\prime]_\\times \\mathbf{l}^\\prime\\) \u7531\u7279\u6b8a\u8fd0\u52a8\u4ea7\u751f\u7684\u57fa\u672c\u77e9\u9635 \u00b6 \u7eaf\u5e73\u79fb \u5047\u8bbe\u6444\u50cf\u673a\u7684\u8fd0\u52a8\u662f\u6ca1\u6709\u65cb\u8f6c\u5e76\u4e14\u5185\u53c2\u4e0d\u53d8\u7684\u7eaf\u5e73\u79fb\uff0c\u53ef\u4ee5\u5047\u8bbe\u4e24\u4e2a\u6444\u50cf\u673a\u77e9\u9635\u5206\u522b\u662f \\(P=K[I|\\mathbf{0}]\\) \u548c \\(P^\\prime=K[I|\\mathbf{t}]\\) \uff0c\u5219 \\(F=[\\mathbf{e}^\\prime]_\\times KK^{-1}=[\\mathbf{e}^\\prime]_\\times\\) \uff0c\u4ece\u50cf\u70b9 \\(\\mathbf{x}\\) \u5230\u50cf\u70b9 \\(\\mathbf{x}^\\prime\\) \u7684\u6620\u5c04\u662f \\(\\mathbf{x}^\\prime=\\mathbf{x}+K\\mathbf{t}/Z\\) \uff0c\u5176\u4e2d \\(Z\\) \u662f\u70b9 \\(\\mathbf{X}\\) \u7684\u6df1\u5ea6\uff08\u5728\u7b2c\u4e00\u4e2a\u6444\u50cf\u673a\u7684\u4e3b\u8f74\u4e0a\u6d4b\u91cf\u4ece \\(\\mathbf{X}\\) \u5230\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u8ddd\u79bb\uff09 \u6ce8\u610f\u5728\u7eaf\u5e73\u79fb\u60c5\u5f62\uff0c \\(F=[\\mathbf{e}^\\prime]_\\times\\) \u662f\u53cd\u5bf9\u79f0\u7684\u800c\u4e14\u53ea\u6709 2 \u4e2a\u81ea\u7531\u5ea6\uff0c\u5b83\u4eec\u5bf9\u5e94\u4e8e\u5bf9\u6781\u70b9\u7684\u4f4d\u7f6e \\(\\mathbf{x},\\mathbf{x}^\\prime\\) \u4e0e \\(\\mathbf{e}=\\mathbf{e}^\\prime\\) \u662f\u5171\u7ebf\u7684\uff08\u5047\u8bbe\u628a\u4e24\u5e45\u56fe\u50cf\u53e0\u8d77\u6765\uff09\u3002\u8fd9\u79cd\u5171\u7ebf\u6027\u8d28\u79f0\u4e3a \u81ea\u5bf9\u6781 \uff0c\u5e76\u4e14\u5bf9\u4e8e\u4e00\u822c\u8fd0\u52a8\u4e0d\u6210\u7acb \u4e00\u822c\u8fd0\u52a8 \u7ed9\u5b9a\u4e24\u4e2a\u4efb\u610f\u6444\u50cf\u673a\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u7b2c\u4e00\u5e45\u56fe\u50cf\u7684\u6444\u50cf\u673a\u65cb\u8f6c\u4f7f\u5b83\u4e0e\u7b2c\u4e8c\u4e2a\u6444\u50cf\u673a\u5e73\u884c\u3002\u8be5\u65cb\u8f6c\u53ef\u4ee5\u901a\u8fc7\u5bf9\u7b2c\u4e00\u5e45\u56fe\u50cf\u65bd\u52a0\u4e00\u4e2a\u5c04\u5f71\u53d8\u6362\u6765\u4eff\u771f\u3002\u9488\u5bf9\u4e24\u5e45\u56fe\u50cf\u7684\u6807\u5b9a\u77e9\u9635\u7684\u5dee\u522b\u8fd8\u53ef\u5bf9\u7b2c\u4e00\u5e45\u56fe\u50cf\u65bd\u52a0\u8fdb\u4e00\u6b65\u7684\u77eb\u6b63\u3002\u8fd9\u4e24\u6b21\u77eb\u6b63\u7684\u7ed3\u679c\u7b49\u4ef7\u4e8e\u5bf9\u7b2c\u4e00\u5e45\u56fe\u50cf\u4f5c\u5c04\u5f71\u53d8\u6362 \\(H\\) \u3002\u5047\u8bbe\u8fd9\u4e9b\u77eb\u6b63\u5df2\u7ecf\u5b8c\u6210\uff0c\u90a3\u4e48\u8fd9\u4e24\u4e2a\u6444\u50cf\u673a\u4e4b\u95f4\u7684\u6709\u6548\u5173\u7cfb\u662f\u4e00\u4e2a\u7eaf\u5e73\u79fb\u3002 \u5047\u8bbe\u4e24\u4e2a\u6444\u50cf\u673a\u77e9\u9635\u5206\u522b\u4e3a \\(P=K[I|\\mathbf{0}]\\) \u548c \\(P^\\prime=K^\\prime[R|\\mathbf{t}]\\) \uff0c\u9700\u8981\u7684\u5c04\u5f71\u53d8\u6362\u662f \\(H=K^\\prime RK^{-1}=H_\\infty\\) \uff0c\u5176\u4e2d \\(H_\\infty\\) \u662f\u65e0\u7a77\u5355\u5e94\uff0c\u4e14 \\(F=[\\mathbf{e}^\\prime]_\\times H_\\infty\\) \u3002\u5219\u56fe\u50cf\u70b9 \\(\\mathbf{x}\\) \u5230\u56fe\u50cf\u70b9 \\(\\mathbf{x}^\\prime\\) \u7684\u6620\u5c04\u662f\uff1a \\(\\mathbf{x}^\\prime=K^\\prime RK^{-1}\\mathbf{x}+K^\\prime \\mathbf{t} / Z\\) \u7eaf\u5e73\u9762\u8fd0\u52a8 \u5728\u7eaf\u5e73\u9762\u8fd0\u52a8\u65f6\u65cb\u8f6c\u8f74\u4e0e\u5e73\u79fb\u65b9\u5411\u6b63\u4ea4\u3002\u6b63\u4ea4\u6027\u7ed9\u8fd9\u79cd\u8fd0\u52a8\u589e\u52a0\u4e86\u4e00\u4e2a\u7ea6\u675f\uff0c\u5982\u679c \\(K^\\prime=K\\) \uff0c\u5219 \\(F\\) \u7684\u5bf9\u79f0\u90e8\u5206\u5728\u8fd9\u79cd\u5e73\u9762\u8fd0\u52a8\u60c5\u5f62\u65f6\u7684\u79e9\u4e3a 2\u3002\u4f7f\u5b83\u7684\u81ea\u7531\u5ea6\u4e2a\u6570\u4ece\u4e00\u822c\u8fd0\u52a8\u7684 7 \u4e2a\u964d\u4f4e\u5230\u7eaf\u5e73\u9762\u8fd0\u52a8\u7684 6 \u4e2a \u57fa\u672c\u77e9\u9635\u7684\u51e0\u4f55\u8868\u793a \u00b6 \u57fa\u672c\u77e9\u9635\u7684\u5bf9\u79f0\u548c\u53cd\u5bf9\u79f0\u90e8\u5206\u5206\u522b\u4e3a \\(F_s=(F+F^\\top)/2 \\ \\ \\ F_a=(F-F^\\top)/2\\) \uff0c\u6ee1\u8db3 \\(F=F_s+F_a\\) \u5bf9\u79f0\u90e8\u5206 \uff1a\u77e9\u9635 \\(F_s\\) \u662f\u5bf9\u79f0\u7684\u5e76\u4e14\u4e00\u822c\u5730\u79e9\u4e3a 3\uff0c\u5b83\u6709 5 \u4e2a\u81ea\u7531\u5ea6\u5e76\u7b49\u540c\u4e8e\u4e00\u6761\u70b9\u4e8c\u6b21\u66f2\u7ebf\uff0c\u79f0\u4e3a Steiner \u4e8c\u6b21\u66f2\u7ebf \u53cd\u5bf9\u79f0\u90e8\u5206 \uff1a\u77e9\u9635 \\(F_a\\) \u662f\u53cd\u5bf9\u79f0\u7684\u5e76\u53ef\u4ee5\u8bb0\u4e3a \\(F_a=[\\mathbf{x}_a]_\\times\\) \uff0c\u5176\u4e2d \\(\\mathbf{x}_a\\) \u662f \\(F_a\\) \u5730\u96f6\u77e2\u91cf\u3002\u53cd\u5bf9\u79f0\u90e8\u5206\u6709 2 \u4e2a\u81ea\u7531\u5ea6\u4e14\u7b49\u540c\u4e8e\u70b9 \\(\\mathbf{x}_a\\) \u5bf9\u6781\u7ebf\u5bf9\u5e94 \uff1a\u7531\u4e00\u4e2a\u5355\u5e94\u5173\u8054\u7684\u4e24\u4e2a\u76f4\u7ebf\u675f\uff0c\u5b83\u4eec\u5bf9\u5e94\u76f4\u7ebf\u7684\u4ea4\u70b9\u7684\u8f68\u8ff9\u662f\u4e00\u6761\u4e8c\u6b21\u66f2\u7ebf\u3002\u8fd9\u4e24\u4e2a\u675f\u90fd\u662f\u5bf9\u6781\u7ebf\u675f\uff0c\u4e00\u4e2a\u8fc7 \\(\\mathbf{e}\\) \u800c\u53e6\u4e00\u4e2a\u8fc7 \\(\\mathbf{e}^\\prime\\) \u3002\u8fd9\u4e9b\u5bf9\u6781\u7ebf\u7531\u4e00\u4e2a 1D \u5355\u5e94\u76f8\u5173\u8054\u3002\u5176\u4ea4\u70b9\u7684\u8f68\u8ff9\u662f\u4e8c\u6b21\u66f2\u7ebf \\(F_s\\) \u7eaf\u5e73\u9762\u8fd0\u52a8 \u5e73\u9762\u8fd0\u52a8\u60c5\u5f62\uff0c\u5176\u4e2d \\(F_s\\) \u7684\u79e9\u4e3a 2\u3002\u6b64\u65f6 Steiner \u4e8c\u6b21\u66f2\u7ebf\u662f\u9000\u5316\u7684\uff0c\u5b83\u7b49\u4ef7\u4e8e\u4e24\u6761\u4e0d\u91cd\u5408\u76f4\u7ebf \\(F_s=\\mathbf{l}_h\\mathbf{l}_s^\\top+\\mathbf{l}_s\\mathbf{l}_h^\\top\\) \uff0c \\(F\\) \u53ef\u4ee5\u8bb0\u4e3a \\(F=[\\mathbf{e}^\\prime]_\\times[\\mathbf{l}_s]_\\times[\\mathbf{e}]_\\times\\) \u4e24\u4e2a\u5bf9\u6781\u70b9\u7684\u5206\u522b\u6709 2 \u4e2a\u81ea\u7531\u5ea6\u548c\u76f4\u7ebf \\(\\mathbf{l}_s\\) \u6062\u590d\u6444\u50cf\u673a\u77e9\u9635 \u00b6 \u5c04\u5f71\u4e0d\u53d8\u6027\u548c\u89c4\u8303\u6444\u50cf\u673a \u00b6 \u5982\u679c H \u662f\u8868\u793a 3 \u7ef4\u5c04\u5f71\u53d8\u6362\u7684\u4e00\u4e2a \\(4 \\times 4\\) \u77e9\u9635\uff0c\u90a3\u4e48\u5bf9\u5e94\u4e8e\u6444\u50cf\u673a\u77e9\u9635 \\((P,P^\\prime)\\) \u548c \\((PH,P^\\prime H)\\) \u7684\u57fa\u672c\u77e9\u9635\u662f\u76f8\u540c\u7684 \u6444\u50cf\u673a\u77e9\u9635\u7684\u89c4\u8303\u5f62\u5f0f \uff1a\u5bf9\u5e94\u4e8e\u6444\u50cf\u673a\u77e9\u9635\u5bf9 \\(P=[I|\\mathbf{0}]\\) \u548c \\(P^\\prime=[M|\\mathbf{m}]\\) \u7684\u57fa\u672c\u77e9\u9635\u7b49\u4e8e \\([\\mathbf{m}]_\\times M\\) \u7ed9\u5b9a F \u540e\u7684\u6444\u50cf\u673a\u5c04\u5f71\u591a\u4e49\u6027 \u00b6 \u4ee4 F \u4e3a\u57fa\u672c\u77e9\u9635\u800c \\((P,P^\\prime)\\) \u548c \\((\\tilde{P},\\tilde{P}^\\prime)\\) \u90fd\u662f\u4e0e\u57fa\u672c\u77e9\u9635 F \u5bf9\u5e94\u7684\u4e24\u7ec4\u6444\u50cf\u673a\u77e9\u9635\u5bf9\uff0c\u5219\u5b58\u5728\u4e00\u4e2a\u975e\u5947\u5f02\u7684 \\(4 \\times 4\\) \u77e9\u9635 H \u4f7f\u5f97 \\(\\tilde{P}=PH\\) \u548c \\(\\tilde{P}=P^\\prime H\\) \u82e5\u79e9\u4e3a 2 \u7684\u77e9\u9635 F \u53ef\u4ee5\u5206\u89e3\u4e3a\u4e24\u4e2a\u4e0d\u540c\u7684\u5f62\u5f0f\uff1a \\(F=[\\mathbf{a}]_\\times A\\) \u548c \\(F =[\\tilde{\\mathbf{a}}]_\\times \\tilde{A}\\) \uff0c\u5219\u5bf9\u67d0\u4e2a\u975e\u96f6\u5e38\u6570 k \u548c 3 \u7ef4\u77e2\u91cf \\(\\mathbf{v}\\) \u6709 \\(\\tilde{\\mathbf{a}}=k\\mathbf{a}\\) \u548c \\(\\tilde{A}=k^{-1}(A+\\mathbf{a} \\mathbf{v}^\\top)\\) \u7ed9\u5b9a F \u6c42\u89c4\u8303\u6444\u50cf\u673a\u5bf9 \u00b6 \u4e00\u4e2a\u975e\u96f6\u77e9\u9635 F \u662f\u5bf9\u5e94\u4e8e\u4e00\u5bf9\u6444\u50cf\u673a\u77e9\u9635 \\(P\\) \u548c \\(P^\\prime\\) \u7684\u57fa\u672c\u77e9\u9635\u7684\u5145\u8981\u6761\u4ef6\u662f \\(P^{\\prime \\top}FP\\) \u662f\u53cd\u5bf9\u79f0\u77e9\u9635 \u4ee4 F \u662f\u57fa\u672c\u77e9\u9635\uff0cS \u662f\u4efb\u610f\u53cd\u5bf9\u79f0\u77e9\u9635\u3002\u5b9a\u4e49\u6444\u50cf\u673a\u77e9\u9635\u5bf9\u4e3a\uff1a \\(P=[I|\\mathbf{0}]\\) \u548c \\(P^\\prime=[SF|\\mathbf{e}^\\prime]\\) \uff0c\u5176\u4e2d \\(\\mathbf{e}^\\prime\\) \u662f\u6ee1\u8db3 \\(\\mathbf{e}^{\\prime \\top}F=\\mathbf{0}\\) \u7684\u5bf9\u6781\u70b9\uff0c\u5e76\u5047\u5b9a\u6240\u5b9a\u4e49\u7684 \\(P^\\prime\\) \u662f\u6709\u6548\u7684\u6444\u50cf\u673a\u77e9\u9635\uff08\u79e9\u4e3a 3\uff09\uff0c\u5219 F \u662f\u5bf9\u5e94\u4e8e \\((P,P^\\prime)\\) \u7684\u57fa\u672c\u77e9\u9635 \u57fa\u672c\u77e9\u9635 F \u7684\u6444\u50cf\u673a\u77e9\u9635\u53ef\u4ee5\u9009\u62e9\u4e3a \\(P=[I|\\mathbf{0}]\\) \u548c \\(P^\\prime=[[\\mathbf{e}^\\prime]_\\times F|\\mathbf{e}^\\prime]\\) \u5bf9\u5e94\u4e8e\u57fa\u672c\u77e9\u9635 F\uff0c\u4e00\u5bf9\u89c4\u8303\u5f62\u5f0f\u7684\u6444\u50cf\u673a\u77e9\u9635\u7684\u4e00\u822c\u516c\u5f0f\u662f \\(P=[I|\\mathbf{0}] \\ \\ \\ P^\\prime=[[\\mathbf{e}^\\prime]_\\times F + \\mathbf{e}^\\prime \\mathbf{v}^\\top | \\lambda \\mathbf{e}^\\prime]\\) \uff0c\u5176\u4e2d \\(\\mathbf{v}\\) \u662f\u4efb\u4f55 3 \u7ef4\u77e2\u91cf\uff0c \\(\\lambda\\) \u662f\u4e00\u4e2a\u6b63\u6807\u91cf \u672c\u8d28\u77e9\u9635 \u00b6 \u672c\u8d28\u77e9\u9635\u662f\u5f52\u4e00\u5316\u56fe\u50cf\u5750\u6807\u7cfb\u554a\u7684\u57fa\u672c\u77e9\u9635\u7684\u7279\u6b8a\u5f62\u5f0f\u3002\u57fa\u672c\u77e9\u9635\u53ef\u4ee5\u770b\u4f5c\u662f\u672c\u8d28\u77e9\u9635\u7684\u63a8\u5e7f\uff0c\u57fa\u672c\u77e9\u9635\u628a\u8981\u6c42\u6807\u5b9a\u6444\u50cf\u673a\u8fd9\u6837\u4e00\u4e2a(\u975e\u672c\u8d28\u7684)\u5047\u8bbe\u53bb\u6389\u4e86\u3002\u4e0e\u57fa\u672c\u77e9\u9635\u76f8\u6bd4\u8f83\uff0c\u672c\u8d28\u77e9\u9635\u6709\u8f83\u5c11\u7684\u81ea\u7531\u5ea6\u4f46\u589e\u52a0\u4e86\u4e00\u4e9b\u6027\u8d28\u3002 \u5f52\u4e00\u5316\u5750\u6807 \u901a\u8fc7\u77e5\u9053\u6807\u5b9a\u77e9\u9635 K\uff0c\u7528\u5b83\u7684\u9006\u77e9\u9635\u4f5c\u7528\u4e8e\u70b9 \\(\\mathbf{x}\\) \u5f97\u5230\u70b9 \\(\\hat{\\mathbf{x}}=K^{-1}\\mathbf{x}\\) \uff0c\u5219 \\(\\hat{\\mathbf{x}}=[R|\\mathbf{t}]\\mathbf{X}\\) \uff0c\u5176\u4e2d \\(\\hat{\\mathbf{x}}\\) \u662f\u56fe\u50cf\u4e0a\u7684\u70b9\u5728\u5f52\u4e00\u5316\u5750\u6807\u4e0b\u7684\u8868\u793a \u6444\u50cf\u673a\u77e9\u9635 \\(K^{-1}P=[R|\\mathbf{t}]\\) \u79f0\u4e3a\u5f52\u4e00\u5316\u6444\u50cf\u673a\u77e9\u9635 \u7528\u5f52\u4e00\u5316\u56fe\u50cf\u5750\u6807\u8868\u793a\u5bf9\u5e94\u70b9 \\(\\mathbf{x} \\leftrightarrow \\mathbf{x}^\\prime\\) \u65f6\uff0c\u672c\u8d28\u77e9\u9635\u7684\u5b9a\u4e49\u65b9\u7a0b\u662f \\(\\hat{\\mathbf{x}}^{\\prime \\top} E \\hat{\\mathbf{x}}=0\\) \uff0c\u57fa\u672c\u77e9\u9635\u548c\u672c\u8d28\u77e9\u9635\u4e4b\u95f4\u7684\u5173\u7cfb\u662f \\(E=K^{\\prime \\top}FK\\) \u672c\u8d28\u77e9\u9635\u7684\u6027\u8d28 \u00b6 \u4e00\u4e2a \\(3 \\times 3\\) \u77e9\u9635\u662f\u672c\u8d28\u77e9\u9635\u7684\u5145\u8981\u6761\u4ef6\u662f\u5b83\u7684\u5947\u5f02\u503c\u4e2d\u6709\u4e24\u4e2a\u76f8\u7b49\u800c\u7b2c\u4e09\u4e2a\u662f 0 \u7531\u672c\u8d28\u77e9\u9635\u6062\u590d\u6444\u50cf\u673a\u77e9\u9635 \u00b6 \u82e5 E \u7684 SVD \u5206\u89e3\u4e3a \\(U diag(1,1,0)V^{\\top},E=SR\\) \u6709\u5982\u4e0b\u4e24\u79cd\u53ef\u80fd\u7684\u5206\u89e3\uff1a \\[ S=UZU^\\top \\ \\ \\ \\ \\ \\ R=UWV^\\top \\ \\ or \\ \\ UW^\\top V^\\top \\] \u5df2\u77e5\u672c\u8d28\u77e9\u9635 \\(U diag(1,1,0)V^\\top\\) \u548c\u7b2c\u4e00\u4e2a\u6444\u50cf\u673a\u77e9\u9635 \\(P=[I|\\mathbf{0}]\\) \uff0c\u90a3\u4e48\u7b2c\u4e8c\u4e2a\u6444\u50cf\u673a\u77e9\u9635 \\(P^\\prime\\) \u6709\u4e0b\u5217\u56db\u79cd\u53ef\u80fd\u7684\u9009\u62e9\uff1a \\[ P^\\prime=[UWV^\\top|\\mathbf{u}_3]; \\ \\ \\ [UWV^\\top|-\\mathbf{u}_3]; \\ \\ \\ [UW^\\top V^\\top|\\mathbf{u}_3]; \\ \\ \\ [UW^\\top V^\\top|-\\mathbf{u}_3] \\]","title":"\u5bf9\u6781\u51e0\u4f55\u548c\u57fa\u672c\u77e9\u9635"},{"location":"cv/mvg/ag-fm/#_1","text":"\u7ea6 2754 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f Abstract \u5bf9\u6781\u51e0\u4f55\u662f\u4e24\u5e45\u89c6\u56fe\u4e4b\u95f4\u5185\u5728\u7684\u5c04\u5f71\u51e0\u4f55\uff0c\u72ec\u7acb\u4e8e\u666f\u7269\u7ed3\u6784\uff0c\u53ea\u4f9d\u8d56\u4e8e\u6444\u50cf\u673a\u7684\u5185\u53c2\u6570\u548c\u76f8\u5bf9\u59ff\u6001 \u57fa\u672c\u77e9\u9635 F \u96c6\u4e2d\u4e86\u8fd9\u4e2a\u5185\u5728\u51e0\u4f55\u7684\u7cbe\u534e\uff0c\u5b83\u662f\u4e00\u4e2a\u79e9\u4e3a 2 \u7684 \\(3 \\times 3\\) \u77e9\u9635\uff0c\u5982\u679c\u4e00\u4e2a 3 \u7ef4\u7a7a\u95f4\u70b9 \\(\\mathbf{X}\\) \u5728\u7b2c\u4e00\u3001\u7b2c\u4e8c\u5e45\u89c6\u56fe\u4e2d\u7684\u50cf\u5206\u522b\u4e3a \\(\\mathbf{x},\\mathbf{x}^\\prime\\) \uff0c\u5219\u8fd9\u4e24\u4e2a\u56fe\u50cf\u70b9\u6ee1\u8db3\u5173\u7cfb \\(\\mathbf{x}^{\\prime \\top}F\\mathbf{x}=0\\)","title":"\u5bf9\u6781\u51e0\u4f55\u548c\u57fa\u672c\u77e9\u9635"},{"location":"cv/mvg/ag-fm/#_2","text":"\u672c\u8d28\u4e0a\uff0c\u4e24\u5e45\u89c6\u56fe\u4e4b\u95f4\u7684\u5bf9\u6781\u51e0\u4f55\u662f\u56fe\u50cf\u5e73\u9762\u4e0e\u4ee5\u57fa\u7ebf\uff08\u57fa\u7ebf\u662f\u8fde\u63a5\u4e24\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u76f4\u7ebf\uff09\u4e3a\u8f74\u7684\u5e73\u9762\u675f\u7684\u4ea4\u7684\u51e0\u4f55 \u5bf9\u6781\u70b9 \u662f\u8fde\u63a5\u4e24\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u76f4\u7ebf\uff08\u57fa\u7ebf\uff09\u4e0e\u50cf\u5e73\u9762\u7684 \u4ea4\u70b9 \u3002\u7b49\u4ef7\u5730\uff0c\u5bf9\u6781\u70b9\u662f\u5728\u4e00\u5e45\u89c6\u56fe\u4e2d\u53e6\u4e00\u4e2a\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u50cf\u3002\u5b83\u4e5f\u662f\u57fa\u7ebf\uff08\u5e73\u79fb\uff09\u65b9\u5411\u7684\u6d88\u5f71\u70b9 \u5bf9\u6781\u5e73\u9762 \u662f\u4e00\u5f20\u5305\u542b\u57fa\u7ebf\u7684\u5e73\u9762\uff0c\u5b58\u5728\u7740\u5bf9\u6781\u5e73\u9762\u7684\u4e00\u4e2a\u5355\u53c2\u6570\u7c07\uff08\u675f\uff09 \u5bf9\u6781\u7ebf \u662f\u6781\u5e73\u9762\u4e0e\u56fe\u50cf\u5e73\u9762\u7684\u4ea4\u7ebf\uff0c\u6240\u6709\u5bf9\u6781\u7ebf\u76f8\u4ea4\u4e8e\u5bf9\u6781\u70b9\uff0c\u4e00\u5f20\u5bf9\u6781\u5e73\u9762\u4e0e\u5de6\u6216\u53f3\u50cf\u5e73\u9762\u76f8\u4ea4\u4e8e\u5bf9\u6781\u7ebf\uff0c\u5e76\u5b9a\u4e49\u4e86\u5bf9\u6781\u7ebf\u4e4b\u95f4\u7684\u5bf9\u5e94 \u5e73\u884c\u4e8e\u56fe\u50cf\u5e73\u9762\u7684\u8fd0\u52a8 \uff1a\u5bf9\u4e8e\u5e73\u884c\u4e8e\u56fe\u50cf\u5e73\u9762\u4f5c\u5e73\u79fb\u4ee5\u53ca\u65cb\u8f6c\u8f74\u5782\u76f4\u56fe\u50cf\u5e73\u9762\u7684\u7279\u6b8a\u8fd0\u52a8\u60c5\u5f62\uff0c\u57fa\u7ebf\u4e0e\u56fe\u50cf\u5e73\u9762\u7684\u4ea4\u70b9\u4f4d\u4e8e\u65e0\u7a77\u8fdc\uff0c\u56e0\u6b64\uff0c\u5bf9\u6781\u70b9\u662f\u65e0\u7a77\u8fdc\u70b9\u800c\u5bf9\u6781\u7ebf\u662f\u5e73\u884c\u7ebf","title":"\u5bf9\u6781\u51e0\u4f55"},{"location":"cv/mvg/ag-fm/#f","text":"\u57fa\u672c\u77e9\u9635 F \u53ef\u4ee5\u8bb0\u4e3a \\(F=[\\mathbf{e}^\\prime]\\) \\times H \\pi\uff0c\u5176\u4e2d \\(H_\\pi=P^\\prime P^+\\) \u662f\u4ece\u4e00\u5e45\u56fe\u50cf\u5230\u53e6\u4e00\u5e45\u56fe\u50cf\u901a\u8fc7\u4efb\u610f\u5e73\u9762 \\(\\pi\\) \u7684\u8f6c\u79fb\u6620\u5c04\u3002\u800c\u4e14\uff0c\u56e0\u4e3a \\([\\mathbf{e}^\\prime]_\\times\\) \u7684\u79e9\u4e3a 2 \u548c \\(H_\\pi\\) \u79e9\u4e3a 3\uff0c\u6240\u4ee5 F \u662f\u79e9 2 \u7684\u77e9\u9635 \u5047\u8bbe\u6444\u50cf\u673a\u77e9\u9635\u662f\u4e00\u4e2a\u5df2\u6807\u5b9a\u7684\u53cc\u773c\u88c5\u7f6e\u4e14\u4e16\u754c\u539f\u70b9\u5728\u7b2c\u4e00\u4e2a\u6444\u50cf\u673a\u4e0a\uff1a \\[ F=[\\mathbf{e}^\\prime]_\\times K^\\prime R K^{-1}=K^{\\prime-\\top}[\\mathbf{t}]_\\times RK^{-1}=K^{\\prime -\\top}R[R^\\top \\mathbf{t}]_\\times K^{-1}=K^{\\prime -\\top}RK^\\top [\\mathbf{e}]_\\times \\]","title":"\u57fa\u672c\u77e9\u9635 F"},{"location":"cv/mvg/ag-fm/#_3","text":"\u5bf9\u4e24\u5e45\u56fe\u50cf\u4e2d\u4efb\u4f55\u4e00\u5bf9\u5bf9\u5e94\u70b9 \\(\\mathbf{x} \\leftrightarrow \\mathbf{x}^\\prime\\) \uff0c\u57fa\u672c\u77e9\u9635\u90fd\u6ee1\u8db3\u6761\u4ef6 \\(\\mathbf{x}^{\\prime \\top}F\\mathbf{x}=0\\) \\(F\\) \u53ef\u4ee5\u4ece\u4e24\u4e2a\u6444\u50cf\u673a\u77e9\u9635 \\(P\u3001P^\\prime\\) \u8ba1\u7b97\u51fa\u6765\uff0c\u5373 \\(F\\) \u53ef\u5728\u76f8\u5dee\u4e00\u4e2a\u6574\u4f53\u5c3a\u5ea6\u56e0\u5b50\u7684\u4e00\u4e00\u4e0b\u7531\u6444\u50cf\u673a\u552f\u4e00\u786e\u5b9a","title":"\u5bf9\u5e94\u6761\u4ef6"},{"location":"cv/mvg/ag-fm/#_4","text":"\u5047\u8bbe\u4e24\u5e45\u56fe\u50cf\u7531\u4e2d\u5fc3\u4e0d\u91cd\u5408\u7684\u6444\u50cf\u673a\u83b7\u5f97\uff0c\u5219\u57fa\u672c\u77e9\u9635 \\(F\\) \u4e3a\u5bf9\u6240\u6709\u7684\u5bf9\u5e94\u70b9 \\(\\mathbf{x} \\leftrightarrow \\mathbf{x}^\\prime\\) ,\u5bf9\u6ee1\u8db3 \\(\\mathbf{x}^{\\prime \\top}F\\mathbf{x}=0\\) \u7684\u79e9 2 \u7684\u552f\u4e00\u7684 \\(3 \\times 3\\) \u9f50\u6b21\u77e9\u9635 F \u662f\u79e9 2\u3001\u81ea\u7531\u5ea6 7 \u7684\u9f50\u6b21\u77e9\u9635 \u70b9\u5bf9\u5e94 \uff1a\u5982\u679c \\(\\mathbf{x}\\) \u548c \\(\\mathbf{x}^\\prime\\) \u662f\u5bf9\u5e94\u7684\u56fe\u50cf\u70b9\uff0c\u90a3\u4e48 \\(\\mathbf{x}^{\\prime \\top}F\\mathbf{x}=0\\) \u5bf9\u6781\u7ebf \\(\\mathbf{l}^\\prime=F\\mathbf{x}\\) \u662f\u5bf9\u5e94\u4e8e \\(\\mathbf{x}\\) \u7684\u5bf9\u6781\u7ebf \\(\\mathbf{l}=F^\\top \\mathbf{x}^\\prime\\) \u662f\u5bf9\u5e94\u4e8e \\(\\mathbf{x}^\\prime\\) \u7684\u5bf9\u6781\u7ebf \u5bf9\u6781\u70b9 \\(F\\mathbf{e}=\\mathbf{0}\\) \\(F^\\top\\mathbf{e}^\\prime=\\mathbf{0}\\) \u7531\u6444\u50cf\u673a\u77e9\u9635 \\(P\u3001P^\\prime\\) \u8fdb\u884c\u8ba1\u7b97 \u4e00\u822c\u6444\u50cf\u673a \uff1a \\(F=[\\mathbf{e}^\\prime]_\\times P^\\prime P^+\\) \uff0c\u5176\u4e2d \\(P^+\\) \u662f \\(P\\) \u7684\u4f2a\u9006\uff0c \\(\\mathbf{e}^\\prime=P^\\prime \\mathbf{C}\\) \u4e14 \\(P\\mathbf{c}=\\mathbf{0}\\) \u89c4\u8303\u6444\u50cf\u673a \uff1a \\(P=[I|\\mathbf{0}],F=[\\mathbf{e}^\\prime]_\\times M = M^{-\\top}[\\mathbf{e}]_\\times\\) \uff0c\u5176\u4e2d \\(\\mathbf{e}^\\prime=\\mathbf{m}\\) \u4e14 \\(\\mathbf{e}=M^{-1}\\mathbf{m}\\) \u975e\u65e0\u7a77\u8fdc\u6444\u50cf\u673a \uff1a \\(P=K[I|\\mathbf{0}],P^\\prime=K^\\prime[R|\\mathbf{t}],F=K^{-\\top}[\\mathbf{t}]_\\times RK^{-1}=[K^\\prime \\mathbf{t}]_\\times K^\\prime R K^{-1}=K^{\\prime -\\top} RK^\\top [KR^\\top \\mathbf{t}]_\\times\\) \u8f6c\u7f6e \uff1a\u5982\u679c \\(F\\) \u662f\u6444\u50cf\u673a\u5bf9\u4f5c \\((P,P^\\prime)\\) \u7684\u57fa\u672c\u77e9\u9635\uff0c\u5219 \\(F^\\top\\) \u662f\u5176\u53cd\u5e8f\u5bf9 \\((P^\\prime,P)\\) \u7684\u57fa\u672c\u77e9\u9635","title":"\u57fa\u672c\u77e9\u9635\u7684\u6027\u8d28"},{"location":"cv/mvg/ag-fm/#_5","text":"\u5047\u8bbe \\(\\mathbf{l}\\) \u548c \\(\\mathbf{l}^\\prime\\) \u662f\u5bf9\u5e94\u7684\u5bf9\u6781\u7ebf\uff0c\u4e14 \\(k\\) \u662f\u4e0d\u8fc7\u5bf9\u6781\u70b9 \\(\\mathbf{e}\\) \u7684\u4efb\u4f55\u76f4\u7ebf\uff0c\u5219 \\(\\mathbf{l}\\) \u548c \\(\\mathbf{l}^\\prime\\) \u95f4\u7684\u5173\u7cfb\u662f \\(\\mathbf{l}^\\prime=F[\\mathbf{k}]_\\times \\mathbf{l}\\) \uff0c\u5bf9\u79f0\u5730\u6709 \\(\\mathbf{l}=F^\\top [\\mathbf{k}^\\prime]_\\times \\mathbf{l}^\\prime\\)","title":"\u5bf9\u6781\u7ebf\u5355\u5e94"},{"location":"cv/mvg/ag-fm/#_6","text":"\u7eaf\u5e73\u79fb \u5047\u8bbe\u6444\u50cf\u673a\u7684\u8fd0\u52a8\u662f\u6ca1\u6709\u65cb\u8f6c\u5e76\u4e14\u5185\u53c2\u4e0d\u53d8\u7684\u7eaf\u5e73\u79fb\uff0c\u53ef\u4ee5\u5047\u8bbe\u4e24\u4e2a\u6444\u50cf\u673a\u77e9\u9635\u5206\u522b\u662f \\(P=K[I|\\mathbf{0}]\\) \u548c \\(P^\\prime=K[I|\\mathbf{t}]\\) \uff0c\u5219 \\(F=[\\mathbf{e}^\\prime]_\\times KK^{-1}=[\\mathbf{e}^\\prime]_\\times\\) \uff0c\u4ece\u50cf\u70b9 \\(\\mathbf{x}\\) \u5230\u50cf\u70b9 \\(\\mathbf{x}^\\prime\\) \u7684\u6620\u5c04\u662f \\(\\mathbf{x}^\\prime=\\mathbf{x}+K\\mathbf{t}/Z\\) \uff0c\u5176\u4e2d \\(Z\\) \u662f\u70b9 \\(\\mathbf{X}\\) \u7684\u6df1\u5ea6\uff08\u5728\u7b2c\u4e00\u4e2a\u6444\u50cf\u673a\u7684\u4e3b\u8f74\u4e0a\u6d4b\u91cf\u4ece \\(\\mathbf{X}\\) \u5230\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u8ddd\u79bb\uff09 \u6ce8\u610f\u5728\u7eaf\u5e73\u79fb\u60c5\u5f62\uff0c \\(F=[\\mathbf{e}^\\prime]_\\times\\) \u662f\u53cd\u5bf9\u79f0\u7684\u800c\u4e14\u53ea\u6709 2 \u4e2a\u81ea\u7531\u5ea6\uff0c\u5b83\u4eec\u5bf9\u5e94\u4e8e\u5bf9\u6781\u70b9\u7684\u4f4d\u7f6e \\(\\mathbf{x},\\mathbf{x}^\\prime\\) \u4e0e \\(\\mathbf{e}=\\mathbf{e}^\\prime\\) \u662f\u5171\u7ebf\u7684\uff08\u5047\u8bbe\u628a\u4e24\u5e45\u56fe\u50cf\u53e0\u8d77\u6765\uff09\u3002\u8fd9\u79cd\u5171\u7ebf\u6027\u8d28\u79f0\u4e3a \u81ea\u5bf9\u6781 \uff0c\u5e76\u4e14\u5bf9\u4e8e\u4e00\u822c\u8fd0\u52a8\u4e0d\u6210\u7acb \u4e00\u822c\u8fd0\u52a8 \u7ed9\u5b9a\u4e24\u4e2a\u4efb\u610f\u6444\u50cf\u673a\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u7b2c\u4e00\u5e45\u56fe\u50cf\u7684\u6444\u50cf\u673a\u65cb\u8f6c\u4f7f\u5b83\u4e0e\u7b2c\u4e8c\u4e2a\u6444\u50cf\u673a\u5e73\u884c\u3002\u8be5\u65cb\u8f6c\u53ef\u4ee5\u901a\u8fc7\u5bf9\u7b2c\u4e00\u5e45\u56fe\u50cf\u65bd\u52a0\u4e00\u4e2a\u5c04\u5f71\u53d8\u6362\u6765\u4eff\u771f\u3002\u9488\u5bf9\u4e24\u5e45\u56fe\u50cf\u7684\u6807\u5b9a\u77e9\u9635\u7684\u5dee\u522b\u8fd8\u53ef\u5bf9\u7b2c\u4e00\u5e45\u56fe\u50cf\u65bd\u52a0\u8fdb\u4e00\u6b65\u7684\u77eb\u6b63\u3002\u8fd9\u4e24\u6b21\u77eb\u6b63\u7684\u7ed3\u679c\u7b49\u4ef7\u4e8e\u5bf9\u7b2c\u4e00\u5e45\u56fe\u50cf\u4f5c\u5c04\u5f71\u53d8\u6362 \\(H\\) \u3002\u5047\u8bbe\u8fd9\u4e9b\u77eb\u6b63\u5df2\u7ecf\u5b8c\u6210\uff0c\u90a3\u4e48\u8fd9\u4e24\u4e2a\u6444\u50cf\u673a\u4e4b\u95f4\u7684\u6709\u6548\u5173\u7cfb\u662f\u4e00\u4e2a\u7eaf\u5e73\u79fb\u3002 \u5047\u8bbe\u4e24\u4e2a\u6444\u50cf\u673a\u77e9\u9635\u5206\u522b\u4e3a \\(P=K[I|\\mathbf{0}]\\) \u548c \\(P^\\prime=K^\\prime[R|\\mathbf{t}]\\) \uff0c\u9700\u8981\u7684\u5c04\u5f71\u53d8\u6362\u662f \\(H=K^\\prime RK^{-1}=H_\\infty\\) \uff0c\u5176\u4e2d \\(H_\\infty\\) \u662f\u65e0\u7a77\u5355\u5e94\uff0c\u4e14 \\(F=[\\mathbf{e}^\\prime]_\\times H_\\infty\\) \u3002\u5219\u56fe\u50cf\u70b9 \\(\\mathbf{x}\\) \u5230\u56fe\u50cf\u70b9 \\(\\mathbf{x}^\\prime\\) \u7684\u6620\u5c04\u662f\uff1a \\(\\mathbf{x}^\\prime=K^\\prime RK^{-1}\\mathbf{x}+K^\\prime \\mathbf{t} / Z\\) \u7eaf\u5e73\u9762\u8fd0\u52a8 \u5728\u7eaf\u5e73\u9762\u8fd0\u52a8\u65f6\u65cb\u8f6c\u8f74\u4e0e\u5e73\u79fb\u65b9\u5411\u6b63\u4ea4\u3002\u6b63\u4ea4\u6027\u7ed9\u8fd9\u79cd\u8fd0\u52a8\u589e\u52a0\u4e86\u4e00\u4e2a\u7ea6\u675f\uff0c\u5982\u679c \\(K^\\prime=K\\) \uff0c\u5219 \\(F\\) \u7684\u5bf9\u79f0\u90e8\u5206\u5728\u8fd9\u79cd\u5e73\u9762\u8fd0\u52a8\u60c5\u5f62\u65f6\u7684\u79e9\u4e3a 2\u3002\u4f7f\u5b83\u7684\u81ea\u7531\u5ea6\u4e2a\u6570\u4ece\u4e00\u822c\u8fd0\u52a8\u7684 7 \u4e2a\u964d\u4f4e\u5230\u7eaf\u5e73\u9762\u8fd0\u52a8\u7684 6 \u4e2a","title":"\u7531\u7279\u6b8a\u8fd0\u52a8\u4ea7\u751f\u7684\u57fa\u672c\u77e9\u9635"},{"location":"cv/mvg/ag-fm/#_7","text":"\u57fa\u672c\u77e9\u9635\u7684\u5bf9\u79f0\u548c\u53cd\u5bf9\u79f0\u90e8\u5206\u5206\u522b\u4e3a \\(F_s=(F+F^\\top)/2 \\ \\ \\ F_a=(F-F^\\top)/2\\) \uff0c\u6ee1\u8db3 \\(F=F_s+F_a\\) \u5bf9\u79f0\u90e8\u5206 \uff1a\u77e9\u9635 \\(F_s\\) \u662f\u5bf9\u79f0\u7684\u5e76\u4e14\u4e00\u822c\u5730\u79e9\u4e3a 3\uff0c\u5b83\u6709 5 \u4e2a\u81ea\u7531\u5ea6\u5e76\u7b49\u540c\u4e8e\u4e00\u6761\u70b9\u4e8c\u6b21\u66f2\u7ebf\uff0c\u79f0\u4e3a Steiner \u4e8c\u6b21\u66f2\u7ebf \u53cd\u5bf9\u79f0\u90e8\u5206 \uff1a\u77e9\u9635 \\(F_a\\) \u662f\u53cd\u5bf9\u79f0\u7684\u5e76\u53ef\u4ee5\u8bb0\u4e3a \\(F_a=[\\mathbf{x}_a]_\\times\\) \uff0c\u5176\u4e2d \\(\\mathbf{x}_a\\) \u662f \\(F_a\\) \u5730\u96f6\u77e2\u91cf\u3002\u53cd\u5bf9\u79f0\u90e8\u5206\u6709 2 \u4e2a\u81ea\u7531\u5ea6\u4e14\u7b49\u540c\u4e8e\u70b9 \\(\\mathbf{x}_a\\) \u5bf9\u6781\u7ebf\u5bf9\u5e94 \uff1a\u7531\u4e00\u4e2a\u5355\u5e94\u5173\u8054\u7684\u4e24\u4e2a\u76f4\u7ebf\u675f\uff0c\u5b83\u4eec\u5bf9\u5e94\u76f4\u7ebf\u7684\u4ea4\u70b9\u7684\u8f68\u8ff9\u662f\u4e00\u6761\u4e8c\u6b21\u66f2\u7ebf\u3002\u8fd9\u4e24\u4e2a\u675f\u90fd\u662f\u5bf9\u6781\u7ebf\u675f\uff0c\u4e00\u4e2a\u8fc7 \\(\\mathbf{e}\\) \u800c\u53e6\u4e00\u4e2a\u8fc7 \\(\\mathbf{e}^\\prime\\) \u3002\u8fd9\u4e9b\u5bf9\u6781\u7ebf\u7531\u4e00\u4e2a 1D \u5355\u5e94\u76f8\u5173\u8054\u3002\u5176\u4ea4\u70b9\u7684\u8f68\u8ff9\u662f\u4e8c\u6b21\u66f2\u7ebf \\(F_s\\) \u7eaf\u5e73\u9762\u8fd0\u52a8 \u5e73\u9762\u8fd0\u52a8\u60c5\u5f62\uff0c\u5176\u4e2d \\(F_s\\) \u7684\u79e9\u4e3a 2\u3002\u6b64\u65f6 Steiner \u4e8c\u6b21\u66f2\u7ebf\u662f\u9000\u5316\u7684\uff0c\u5b83\u7b49\u4ef7\u4e8e\u4e24\u6761\u4e0d\u91cd\u5408\u76f4\u7ebf \\(F_s=\\mathbf{l}_h\\mathbf{l}_s^\\top+\\mathbf{l}_s\\mathbf{l}_h^\\top\\) \uff0c \\(F\\) \u53ef\u4ee5\u8bb0\u4e3a \\(F=[\\mathbf{e}^\\prime]_\\times[\\mathbf{l}_s]_\\times[\\mathbf{e}]_\\times\\) \u4e24\u4e2a\u5bf9\u6781\u70b9\u7684\u5206\u522b\u6709 2 \u4e2a\u81ea\u7531\u5ea6\u548c\u76f4\u7ebf \\(\\mathbf{l}_s\\)","title":"\u57fa\u672c\u77e9\u9635\u7684\u51e0\u4f55\u8868\u793a"},{"location":"cv/mvg/ag-fm/#_8","text":"","title":"\u6062\u590d\u6444\u50cf\u673a\u77e9\u9635"},{"location":"cv/mvg/ag-fm/#_9","text":"\u5982\u679c H \u662f\u8868\u793a 3 \u7ef4\u5c04\u5f71\u53d8\u6362\u7684\u4e00\u4e2a \\(4 \\times 4\\) \u77e9\u9635\uff0c\u90a3\u4e48\u5bf9\u5e94\u4e8e\u6444\u50cf\u673a\u77e9\u9635 \\((P,P^\\prime)\\) \u548c \\((PH,P^\\prime H)\\) \u7684\u57fa\u672c\u77e9\u9635\u662f\u76f8\u540c\u7684 \u6444\u50cf\u673a\u77e9\u9635\u7684\u89c4\u8303\u5f62\u5f0f \uff1a\u5bf9\u5e94\u4e8e\u6444\u50cf\u673a\u77e9\u9635\u5bf9 \\(P=[I|\\mathbf{0}]\\) \u548c \\(P^\\prime=[M|\\mathbf{m}]\\) \u7684\u57fa\u672c\u77e9\u9635\u7b49\u4e8e \\([\\mathbf{m}]_\\times M\\)","title":"\u5c04\u5f71\u4e0d\u53d8\u6027\u548c\u89c4\u8303\u6444\u50cf\u673a"},{"location":"cv/mvg/ag-fm/#f_1","text":"\u4ee4 F \u4e3a\u57fa\u672c\u77e9\u9635\u800c \\((P,P^\\prime)\\) \u548c \\((\\tilde{P},\\tilde{P}^\\prime)\\) \u90fd\u662f\u4e0e\u57fa\u672c\u77e9\u9635 F \u5bf9\u5e94\u7684\u4e24\u7ec4\u6444\u50cf\u673a\u77e9\u9635\u5bf9\uff0c\u5219\u5b58\u5728\u4e00\u4e2a\u975e\u5947\u5f02\u7684 \\(4 \\times 4\\) \u77e9\u9635 H \u4f7f\u5f97 \\(\\tilde{P}=PH\\) \u548c \\(\\tilde{P}=P^\\prime H\\) \u82e5\u79e9\u4e3a 2 \u7684\u77e9\u9635 F \u53ef\u4ee5\u5206\u89e3\u4e3a\u4e24\u4e2a\u4e0d\u540c\u7684\u5f62\u5f0f\uff1a \\(F=[\\mathbf{a}]_\\times A\\) \u548c \\(F =[\\tilde{\\mathbf{a}}]_\\times \\tilde{A}\\) \uff0c\u5219\u5bf9\u67d0\u4e2a\u975e\u96f6\u5e38\u6570 k \u548c 3 \u7ef4\u77e2\u91cf \\(\\mathbf{v}\\) \u6709 \\(\\tilde{\\mathbf{a}}=k\\mathbf{a}\\) \u548c \\(\\tilde{A}=k^{-1}(A+\\mathbf{a} \\mathbf{v}^\\top)\\)","title":"\u7ed9\u5b9a F \u540e\u7684\u6444\u50cf\u673a\u5c04\u5f71\u591a\u4e49\u6027"},{"location":"cv/mvg/ag-fm/#f_2","text":"\u4e00\u4e2a\u975e\u96f6\u77e9\u9635 F \u662f\u5bf9\u5e94\u4e8e\u4e00\u5bf9\u6444\u50cf\u673a\u77e9\u9635 \\(P\\) \u548c \\(P^\\prime\\) \u7684\u57fa\u672c\u77e9\u9635\u7684\u5145\u8981\u6761\u4ef6\u662f \\(P^{\\prime \\top}FP\\) \u662f\u53cd\u5bf9\u79f0\u77e9\u9635 \u4ee4 F \u662f\u57fa\u672c\u77e9\u9635\uff0cS \u662f\u4efb\u610f\u53cd\u5bf9\u79f0\u77e9\u9635\u3002\u5b9a\u4e49\u6444\u50cf\u673a\u77e9\u9635\u5bf9\u4e3a\uff1a \\(P=[I|\\mathbf{0}]\\) \u548c \\(P^\\prime=[SF|\\mathbf{e}^\\prime]\\) \uff0c\u5176\u4e2d \\(\\mathbf{e}^\\prime\\) \u662f\u6ee1\u8db3 \\(\\mathbf{e}^{\\prime \\top}F=\\mathbf{0}\\) \u7684\u5bf9\u6781\u70b9\uff0c\u5e76\u5047\u5b9a\u6240\u5b9a\u4e49\u7684 \\(P^\\prime\\) \u662f\u6709\u6548\u7684\u6444\u50cf\u673a\u77e9\u9635\uff08\u79e9\u4e3a 3\uff09\uff0c\u5219 F \u662f\u5bf9\u5e94\u4e8e \\((P,P^\\prime)\\) \u7684\u57fa\u672c\u77e9\u9635 \u57fa\u672c\u77e9\u9635 F \u7684\u6444\u50cf\u673a\u77e9\u9635\u53ef\u4ee5\u9009\u62e9\u4e3a \\(P=[I|\\mathbf{0}]\\) \u548c \\(P^\\prime=[[\\mathbf{e}^\\prime]_\\times F|\\mathbf{e}^\\prime]\\) \u5bf9\u5e94\u4e8e\u57fa\u672c\u77e9\u9635 F\uff0c\u4e00\u5bf9\u89c4\u8303\u5f62\u5f0f\u7684\u6444\u50cf\u673a\u77e9\u9635\u7684\u4e00\u822c\u516c\u5f0f\u662f \\(P=[I|\\mathbf{0}] \\ \\ \\ P^\\prime=[[\\mathbf{e}^\\prime]_\\times F + \\mathbf{e}^\\prime \\mathbf{v}^\\top | \\lambda \\mathbf{e}^\\prime]\\) \uff0c\u5176\u4e2d \\(\\mathbf{v}\\) \u662f\u4efb\u4f55 3 \u7ef4\u77e2\u91cf\uff0c \\(\\lambda\\) \u662f\u4e00\u4e2a\u6b63\u6807\u91cf","title":"\u7ed9\u5b9a F \u6c42\u89c4\u8303\u6444\u50cf\u673a\u5bf9"},{"location":"cv/mvg/ag-fm/#_10","text":"\u672c\u8d28\u77e9\u9635\u662f\u5f52\u4e00\u5316\u56fe\u50cf\u5750\u6807\u7cfb\u554a\u7684\u57fa\u672c\u77e9\u9635\u7684\u7279\u6b8a\u5f62\u5f0f\u3002\u57fa\u672c\u77e9\u9635\u53ef\u4ee5\u770b\u4f5c\u662f\u672c\u8d28\u77e9\u9635\u7684\u63a8\u5e7f\uff0c\u57fa\u672c\u77e9\u9635\u628a\u8981\u6c42\u6807\u5b9a\u6444\u50cf\u673a\u8fd9\u6837\u4e00\u4e2a(\u975e\u672c\u8d28\u7684)\u5047\u8bbe\u53bb\u6389\u4e86\u3002\u4e0e\u57fa\u672c\u77e9\u9635\u76f8\u6bd4\u8f83\uff0c\u672c\u8d28\u77e9\u9635\u6709\u8f83\u5c11\u7684\u81ea\u7531\u5ea6\u4f46\u589e\u52a0\u4e86\u4e00\u4e9b\u6027\u8d28\u3002 \u5f52\u4e00\u5316\u5750\u6807 \u901a\u8fc7\u77e5\u9053\u6807\u5b9a\u77e9\u9635 K\uff0c\u7528\u5b83\u7684\u9006\u77e9\u9635\u4f5c\u7528\u4e8e\u70b9 \\(\\mathbf{x}\\) \u5f97\u5230\u70b9 \\(\\hat{\\mathbf{x}}=K^{-1}\\mathbf{x}\\) \uff0c\u5219 \\(\\hat{\\mathbf{x}}=[R|\\mathbf{t}]\\mathbf{X}\\) \uff0c\u5176\u4e2d \\(\\hat{\\mathbf{x}}\\) \u662f\u56fe\u50cf\u4e0a\u7684\u70b9\u5728\u5f52\u4e00\u5316\u5750\u6807\u4e0b\u7684\u8868\u793a \u6444\u50cf\u673a\u77e9\u9635 \\(K^{-1}P=[R|\\mathbf{t}]\\) \u79f0\u4e3a\u5f52\u4e00\u5316\u6444\u50cf\u673a\u77e9\u9635 \u7528\u5f52\u4e00\u5316\u56fe\u50cf\u5750\u6807\u8868\u793a\u5bf9\u5e94\u70b9 \\(\\mathbf{x} \\leftrightarrow \\mathbf{x}^\\prime\\) \u65f6\uff0c\u672c\u8d28\u77e9\u9635\u7684\u5b9a\u4e49\u65b9\u7a0b\u662f \\(\\hat{\\mathbf{x}}^{\\prime \\top} E \\hat{\\mathbf{x}}=0\\) \uff0c\u57fa\u672c\u77e9\u9635\u548c\u672c\u8d28\u77e9\u9635\u4e4b\u95f4\u7684\u5173\u7cfb\u662f \\(E=K^{\\prime \\top}FK\\)","title":"\u672c\u8d28\u77e9\u9635"},{"location":"cv/mvg/ag-fm/#_11","text":"\u4e00\u4e2a \\(3 \\times 3\\) \u77e9\u9635\u662f\u672c\u8d28\u77e9\u9635\u7684\u5145\u8981\u6761\u4ef6\u662f\u5b83\u7684\u5947\u5f02\u503c\u4e2d\u6709\u4e24\u4e2a\u76f8\u7b49\u800c\u7b2c\u4e09\u4e2a\u662f 0","title":"\u672c\u8d28\u77e9\u9635\u7684\u6027\u8d28"},{"location":"cv/mvg/ag-fm/#_12","text":"\u82e5 E \u7684 SVD \u5206\u89e3\u4e3a \\(U diag(1,1,0)V^{\\top},E=SR\\) \u6709\u5982\u4e0b\u4e24\u79cd\u53ef\u80fd\u7684\u5206\u89e3\uff1a \\[ S=UZU^\\top \\ \\ \\ \\ \\ \\ R=UWV^\\top \\ \\ or \\ \\ UW^\\top V^\\top \\] \u5df2\u77e5\u672c\u8d28\u77e9\u9635 \\(U diag(1,1,0)V^\\top\\) \u548c\u7b2c\u4e00\u4e2a\u6444\u50cf\u673a\u77e9\u9635 \\(P=[I|\\mathbf{0}]\\) \uff0c\u90a3\u4e48\u7b2c\u4e8c\u4e2a\u6444\u50cf\u673a\u77e9\u9635 \\(P^\\prime\\) \u6709\u4e0b\u5217\u56db\u79cd\u53ef\u80fd\u7684\u9009\u62e9\uff1a \\[ P^\\prime=[UWV^\\top|\\mathbf{u}_3]; \\ \\ \\ [UWV^\\top|-\\mathbf{u}_3]; \\ \\ \\ [UW^\\top V^\\top|\\mathbf{u}_3]; \\ \\ \\ [UW^\\top V^\\top|-\\mathbf{u}_3] \\]","title":"\u7531\u672c\u8d28\u77e9\u9635\u6062\u590d\u6444\u50cf\u673a\u77e9\u9635"},{"location":"cv/mvg/calc-p/","text":"\u8ba1\u7b97\u6444\u50cf\u673a\u77e9\u9635 p \u00b6 \u7ea6 1967 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f Abstract \u672c\u7ae0\u4e3b\u8981\u8ba8\u8bba\u7531 3 \u7ef4\u7a7a\u95f4\u4e0e\u56fe\u50cf\u5e73\u9762\u5143\u7d20\u95f4\u7684\u5bf9\u5e94\u6765\u4f30\u8ba1\u6444\u50cf\u673a\u6295\u5f71\u77e9\u9635\u7684\u6570\u503c\u65b9\u6cd5\uff08\u7b80\u79f0\u786e\u5b9a\u6444\u50cf\u673a\u53c2\u6570\uff09 \u57fa\u672c\u65b9\u7a0b \u00b6 \u5bf9\u4e8e\u6bcf\u7ec4\u5bf9\u5e94 \\(\\mathbf{X}_i \\leftrightarrow \\mathbf{x}_i\\) \uff0c\u53ef\u4ee5\u5f97\u51fa\u4e0b\u9762\u5173\u7cfb\u5f0f\uff1a \\[ \\begin{bmatrix} \\mathbf{0}^\\top & -w_i\\mathbf{X}_i^\\top & y_i\\mathbf{X}_i^\\top \\\\ w_i\\mathbf{X}_i^\\top & \\mathbf{0}^\\top & -x_i\\mathbf{X}_i^\\top \\end{bmatrix} \\begin{bmatrix} \\mathbf{p}_1 \\\\ \\mathbf{p}_2 \\\\ \\mathbf{p}_3 \\end{bmatrix} = \\mathbf{0} \\] \u6700\u5c0f\u914d\u7f6e\u89e3 \uff1a\u77e9\u9635 P \u6709 12 \u4e2a\u5143\u7d20\u548c\uff08\u5ffd\u7565\u7f29\u653e\u56e0\u5b50\uff0911 \u4e2a\u81ea\u7531\u5ea6\uff0c\u6240\u4ee5\u89e3 P \u9700\u8981 11 \u4e2a\u65b9\u7a0b\u3002\u7ed9\u5b9a\u8fd9\u4e2a\u6700\u5c0f\u6570\u76ee\u7684\u5bf9\u5e94\u65f6\uff0c\u89e3\u65f6\u7cbe\u786e\u7684\uff0c\u5373\u7a7a\u95f4\u7684\u70b9\u51c6\u786e\u5730\u6295\u5f71\u5230\u5b83\u4eec\u88ab\u6d4b\u91cf\u5230\u56fe\u50cf\u4e0a \u8d85\u5b9a\u89e3 \uff1a\u5982\u679c\u7531\u4e8e\u70b9\u5750\u6807\u7684\u566a\u58f0\u5bfc\u81f4\u6570\u636e\u4e0d\u7cbe\u786e\u5e76\u4e14\u7ed9\u5b9a \\(n \\ge 6\\) \u7ec4\u70b9\u5bf9\u5e94\uff0c\u90a3\u4e48 \\(A\\mathbf{p}=\\mathbf{0}\\) \u5c06\u4e0d\u5b58\u5728\u7cbe\u786e\u89e3\u3002P \u7684\u89e3\u53ef\u4ee5\u901a\u8fc7\u6700\u5c0f\u5316\u4e00\u4e2a\u4ee3\u6570\u6216\u51e0\u4f55\u8bef\u5dee\u6765\u83b7\u5f97\u3002\u6c42 \\(\\parallel A \\mathbf{p} \\parallel\\) \u7684\u6700\u5c0f\u503c\uff0c\u53ef\u80fd\u7684\u7ea6\u675f\u662f\uff1a \\(\\parallel \\mathbf{p} \\parallel = 1\\) \\(\\parallel \\hat{\\mathbf{p}}^3 \\parallel = 1\\) \uff0c\u5176\u4e2d \\(\\hat{\\mathbf{p}}^3\\) \u662f\u7531 P \u6700\u540e\u4e00\u884c\u7684\u524d\u4e09\u4e2a\u5143\u7d20\u7ec4\u6210\u7684\u77e2\u91cf \\((p_{31},p_{32},p_{33})^\\top\\) \u9000\u5316\u914d\u7f6e \u6444\u50cf\u673a\u4e2d\u5fc3\u548c\u70b9\u90fd\u5728\u4e00\u6761\u4e09\u6b21\u7ed5\u7ebf\u4e0a \u8fd9\u4e9b\u70b9\u90fd\u5728\u4e00\u5f20\u5e73\u9762\u548c\u5305\u542b\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u4e00\u6761\u76f4\u7ebf\u7684\u5e76\u96c6\u4e0a \u6570\u636e\u5f52\u4e00\u5316 \uff1a\u5f53\u70b9\u5230\u6444\u50cf\u673a\u7684\u6df1\u5ea6\u53d8\u5316\u76f8\u5bf9\u6bd4\u8f83\u5c0f\u65f6\uff0c\u91c7\u7528\u540c\u6837\u7c7b\u578b\u7684\u5f52\u4e00\u5316\u3002\u56e0\u6b64\uff0c\u628a\u70b9\u7684\u5f62\u5fc3\u5e73\u79fb\u5230\u539f\u70b9\uff0c\u5e76\u5bf9\u5b83\u4eec\u7684\u5750\u6807\u8fdb\u884c\u7f29\u653e\u4f7f\u5b83\u4eec\u5230\u539f\u70b9\u7684 RMS\uff08\u5747\u65b9\u6839\uff09\u8ddd\u79bb\u7b49\u4e8e \\(\\sqrt{3}\\) \u3002\u9002\u7528\u4e8e\u70b9\u7d27\u81f4\u5206\u5e03\u7684\u60c5\u5f62 \u76f4\u7ebf\u5bf9\u5e94 \uff1a3D \u4e2d\u7684\u76f4\u7ebf\u53ef\u4ee5\u7528\u5b83\u901a\u8fc7\u7684\u4e24\u70b9 \\(\\mathbf{X}_0\\) \u548c \\(\\mathbf{X}_1\\) \u6765\u8868\u793a\u3002\u7531\u56fe\u50cf\u76f4\u7ebf \\(\\mathbf{l}\\) \u53cd\u5411\u6295\u5f71\u5f97\u5230\u7684\u5e73\u9762\u4e3a \\(P^\\top\\mathbf{l}\\) \u3002\u90a3\u4e48\u70b9 \\(\\mathbf{X}_j\\) \u5728\u8be5\u5e73\u9762\u4e0a\u7684\u6761\u4ef6\u662f \\(\\mathbf{l}^\\top P \\mathbf{X}_j = 0\\) \uff0c\u5176\u4e2d \\(j=0,1\\) \u51e0\u4f55\u8bef\u5dee \u00b6 \u56fe\u50cf\u4e2d\u7684\u51e0\u4f55\u8bef\u5dee \\(\\underset{i}{\\sum}d(\\mathbf{x}_i,\\hat{\\mathbf{x}}_i)^2\\) \uff0c\u5176\u4e2d \\(\\mathbf{x}_i\\) \u662f\u88ab\u6d4b\u91cf\u7684\u70b9\uff0c \\(\\hat{\\mathbf{x}}_i\\) \u662f\u70b9 \\(P\\mathbf{X}_i\\) \uff0c\u5373 \\(\\mathbf{X}_i\\) \u5728 \\(P\\) \u4f5c\u7528\u4e0b\u7684\u7cbe\u786e\u7684\u56fe\u50cf\u70b9 \u5982\u679c\u6d4b\u91cf\u8bef\u5dee\u6ee1\u8db3\u9ad8\u65af\u5206\u5e03\uff0c\u90a3\u4e48 \\(\\underset{P}{\\min}\\underset{i}{\\sum}d(\\mathbf{x}_i,P\\mathbf{X}_i)^2\\) \u7684\u89e3\u662f \\(P\\) \u7684\u6700\u5927\u4f3c\u7136\u4f30\u8ba1 \u4e16\u754c\u70b9\u6709\u8bef\u5dee 3D \u51e0\u4f55\u8bef\u5dee\u5b9a\u4e49\u4e3a\uff1a \\(\\underset{i}{\\sum}d(\\mathbf{X}_i,\\hat{\\mathbf{X}}_i)^2\\) \u5982\u679c\u4e16\u754c\u548c\u56fe\u50cf\u70b9\u7684\u8bef\u5dee\u90fd\u8003\u8651\uff1a \\(\\underset{i=1}{\\sum}d_{Mah}(\\mathbf{x}_i,P\\hat{\\mathbf{X}}_i)^2+d_{Mah}(\\mathbf{X}+\\hat{\\mathbf{X}}_i)^2\\) \uff0c \\(d_{Mah}\\) \u8868\u793a\u8bef\u5dee\u534f\u65b9\u5dee\u77e9\u9635\u7684 Mahalanobis \u8ddd\u79bb \u4ee3\u6570\u8bef\u5dee\u7684\u96c6\u5408\u89e3\u91ca \u00b6 \u5047\u5b9a\u6240\u6709\u7684\u70b9 \\(\\mathbf{X}_i\\) \u5728 DLT \u7b97\u6cd5\u4e2d\u5df2\u7ecf\u5f52\u4e00\u5316\uff0cDLT \u7b97\u6cd5\u8981\u6700\u5c0f\u5316\u7684\u91cf\u662f\uff1a \\(\\sum_{i}(\\hat{w}_id(\\mathbf{x}_i,\\hat{\\mathbf{x}}_i))^2\\) \uff0c\u5176\u4e2d \\(\\hat{w}(\\hat{x}_i,\\hat{y}_i,1)^\\top=P\\mathbf{X}_i\\) \uff0c \\(\\hat{w}\\) \u53ef\u4ee5\u89e3\u91ca\u6210\u70b9 \\(\\mathbf{X}_i\\) \u6cbf\u4e3b\u8f74\u65b9\u5411\u5230\u6444\u50cf\u673a\u7684\u6df1\u5ea6\uff0c\u8981\u6700\u5c0f\u5316\u7684\u4ee3\u6570\u8bef\u5dee\u7b49\u4e8e \\(f\\sum_id(\\mathbf{X}_i,\\hat{\\mathbf{X}}_i)^2\\) \u53d8\u6362\u4e0d\u53d8\u6027 \uff1a\u5728\u7ea6\u675f \\(\\parallel \\hat{\\mathbf{p}}^3 \\parallel = 1\\) \u4e0b\u6700\u5c0f\u5316 \\(A\\mathbf{p}\\) \u53ef\u4ee5\u89e3\u91ca\u6210\u6700\u5c0f\u5316 3D \u51e0\u4f55\u8ddd\u79bb\u3002\u8fd9\u6837\u65e2\u4e0d\u53d7 3D \u7a7a\u95f4\u4e5f\u4e0d\u53d7\u56fe\u50cf\u7a7a\u95f4\u7684\u76f8\u4f3c\u53d8\u6362\u7684\u5f71\u54cd \u4eff\u5c04\u6444\u50cf\u673a\u7684\u4f30\u8ba1 \u00b6 \u4e0a\u9762\u6709\u5173\u5c04\u5f71\u6444\u50cf\u673a\u63a8\u5bfc\u7684\u65b9\u6cd5\u53ef\u4ee5\u76f4\u63a5\u7528\u4e8e\u4eff\u5c04\u6444\u50cf\u673a\u3002\u4eff\u5c04\u6444\u50cf\u673a\u5b9a\u4e49\u4e3a\u5c04\u5f71\u77e9\u9635\u7684\u6700\u540e\u4e00\u884c\u662f \\((0,0,0,1)\\) \u7684\u6444\u50cf\u673a\u3002\u4eff\u5c04\u6444\u50cf\u673a\u7684 DLT \u4f30\u8ba1\u662f\u5728 \\(P\\) \u7684\u6700\u540e\u4e00\u884c\u6ee1\u8db3\u4e0a\u8ff0\u6761\u4ef6\u4e0b\u6700\u5c0f\u5316 \\(\\parallel A \\mathbf{p} \\parallel\\) \u53d7\u9650\u6444\u50cf\u673a\u4f30\u8ba1 \u00b6 \u5728\u5173\u4e8e\u6444\u50cf\u673a\u53c2\u6570\u7684\u9650\u5236\u6761\u4ef6\u4e0b\u5bfb\u6c42\u4e00\u4e2a\u6700\u9002\u914d\u7684\u6444\u50cf\u673a\u77e9\u9635 \\(P\\) \uff0c\u901a\u5e38\u7684\u9650\u5236\u6709 \u626d\u66f2 \\(s\\) \u4e3a 0 \u50cf\u7d20\u662f\u6b63\u65b9\u5f62: \\(\\alpha_x=\\alpha_y\\) \u4e3b\u70b9 \\((x_0,y_0)^2\\) \u5df2\u77e5 \u6574\u4e2a\u6444\u50cf\u673a\u6807\u5b9a\u77e9\u9635 \\(K\\) \u5df2\u77e5 \u6700\u5c0f\u5316\u51e0\u4f55\u8bef\u5dee \uff1a\u5047\u5b9a\u6211\u4eec\u5f3a\u8c03\u7ea6\u675f \\(s=0\\) \u548c \\(\\alpha_x=\\alpha_y\\) \uff0c\u7528\u4f59\u4e0b\u7684 9 \u4e2a\u53c2\u6570\u6765\u53c2\u6570\u5316\u6444\u50cf\u673a\u77e9\u9635\u3002\u51e0\u4f55\u8bef\u5dee\u53ef\u4ee5\u7528\u8fed\u4ee3\u6700\u5c0f\u5316\u65b9\u6cd5\u76f8\u5bf9\u4e8e\u8fd9\u7ec4\u53c2\u6570\u6765\u6700\u5c0f\u5316 \u6700\u5c0f\u5316\u4ee3\u6570\u8bef\u5dee \uff1a\u8003\u8651\u628a\u53c2\u6570\u96c6 \\(\\mathbf{q}\\) \u6620\u5c04\u5230\u6444\u50cf\u673a\u77e9\u9635 \\(P\\) \u7684\u53c2\u6570\u5316\u6620\u5c04 \\(g\\) \uff0c\u6700\u5c0f\u5316\u6240\u6709\u70b9\u5339\u914d\u7684\u4ee3\u6570\u8bef\u5dee\u7b49\u4ef7\u4e8e\u6700\u5c0f\u5316 \\(\\parallel Ag(\\mathbf{q}) \\parallel\\) \u7b80\u5316\u7684\u6d4b\u91cf\u77e9\u9635 \uff1a\u4e00\u822c\uff0c \\(2n \\times 12\\) \u7684\u77e9\u9635 \\(A\\) \u53ef\u80fd\u6709\u5f88\u591a\u884c\u3002\u4f46\u53ef\u7528\u4e00\u4e2a \\(12 \\times 12\\) \u7684\u77e9\u9635 \\(\\hat{A}\\) \u6765\u4ee3\u66ff \\(A\\) \uff0c\u4f7f\u5f97\u5bf9\u4efb\u4f55\u77e2\u91cf \\(\\mathbf{p}\\) \u6709 \\(\\parallel A \\mathbf{p} \\parallel = \\mathbf{p}^\\top A^\\top A \\mathbf{p} = \\parallel \\hat{A} \\mathbf{p} \\parallel\\) \u521d\u59cb\u5316 \uff1a\u6c42\u6444\u50cf\u673a\u521d\u59cb\u5316\u53c2\u6570\u7684\u4e00\u79cd\u9014\u5f84\uff1a \u7528\u8bf8\u5982 DLT \u7684\u7ebf\u6027\u7b97\u6cd5\u6c42\u51fa\u4e00\u4e2a\u521d\u59cb\u7684\u6444\u50cf\u673a\u77e9\u9635 \u628a\u56fa\u5b9a\u53c2\u6570\u5f3a\u5236\u5230\u6240\u5e0c\u671b\u7684\u53d6\u503c\u8303\u56f4 \u628a\u6444\u50cf\u673a\u77e9\u9635\u5206\u89e3\u6240\u83b7\u5f97\u7684\u521d\u59cb\u503c\u8d4b\u7ed9\u53c2\u6570\u53d8\u91cf \u5916\u90e8\u6821\u51c6 \uff1a\u4e3a\u4e86\u8ba1\u7b97\u5916\u90e8\u6821\u51c6\uff0c\u9700\u5bf9\u4e16\u754c\u5750\u6807\u4f4d\u7f6e\u51c6\u786e\u5df2\u77e5\u7684\u4e00\u4e2a\u914d\u7f6e\u8fdb\u884c\u5f71\u50cf\u3002\u4e4b\u540e\u6c42\u6444\u50cf\u673a\u7684\u59ff\u6001\u3002\u5728\u673a\u5668\u4eba\u7cfb\u7edf\u7684\u624b\u773c\u6807\u5b9a\u4e2d\u6c42\u6444\u50cf\u673a\u4f4d\u7f6e\u5c31\u662f\u8fd9\u6837\u7684\u60c5\u5f62\uff1b\u8fd8\u6709\u5728\u91c7\u7528\u914d\u51c6\u6280\u672f\u7684\u57fa\u4e8e\u6a21\u578b\u7684\u8bc6\u522b\u4e2d\uff0c\u9700\u8981\u77e5\u9053\u7269\u4f53\u76f8\u5bf9\u6444\u50cf\u673a\u7684\u4f4d\u7f6e \u534f\u65b9\u5dee\u4f30\u8ba1 \uff1a\u5047\u5b9a\u6240\u6709\u7684\u65e0\u64e6\u597d\u4ec5\u53d1\u751f\u5728\u56fe\u50cf\u6d4b\u91cf\u4e2d\uff0cML \u6b8b\u5dee\u671f\u671b\u503c\u7b49\u4e8e \\(\\varepsilon_{res}=\\delta(1-d/2n)^{1/2}\\) \uff0c\u5176\u4e2d \\(d\\) \u662f\u8981\u62df\u5408\u7684\u6444\u50cf\u673a\u53c2\u6570\u6570\u76ee\uff08\u5bf9\u5b8c\u6574\u7684\u9488\u5b54\u6444\u50cf\u673a\u6a21\u578b\u662f 11\uff09\u3002\u7ed9\u5b9a\u4e00\u4e2a\u6b8b\u5dee\uff0c\u8be5\u516c\u5f0f\u4e5f\u53ef\u4ee5\u7528\u6765\u4f30\u8ba1\u70b9\u6d4b\u91cf\u7684\u51c6\u786e\u6027 \u5f84\u5411\u5931\u771f \u00b6 \u7528 \\((\\tilde{x},\\tilde{y})^\\top\\) \u6807\u8bb0\u5728\u7406\u60f3\uff08\u975e\u5931\u771f\uff09\u9488\u5b54\u6295\u5f71\u4e0b\u70b9\u4ee5\u7126\u8ddd\u4e3a\u6d4b\u91cf\u5355\u4f4d\u7684\u5750\u6807\u3002\u5bf9\u4e00\u70b9 \\(\\mathbf{X}\\) \u6709\uff1a \\((\\tilde{x},\\tilde{y},1)^\\top=[\\mathbf{I}|\\mathbf{0}]\\mathbf{X}_{cam}\\) \uff0c\u5176\u4e2d \\(\\mathbf{X}_{cam}\\) \u662f\u6444\u50cf\u673a\u5750\u6807\u4e0b\u7684 3D \u70b9\uff0c\u5b9e\u9645\u7684\u6295\u5f71\u70b9\u901a\u8fc7\u4e00\u4e2a\u5f84\u5411\u4f4d\u79fb\u4e0e\u7406\u60f3\u70b9\u5173\u8054\u3002\u56e0\u6b64\uff0c\u5f84\u5411\uff08\u900f\u955c\uff09\u5931\u771f\u7684\u6a21\u578b\u662f\uff1a \\[\\begin{bmatrix} x_d \\\\ y_d \\end{bmatrix}=L(\\tilde{r})\\begin{bmatrix} \\tilde{x} \\\\ \\tilde{y} \\end{bmatrix}\\] \\((\\tilde{x},\\tilde{y})^\\top\\) \u662f\u7406\u60f3\u56fe\u50cf\u4f4d\u7f6e\uff08\u9075\u5faa\u7ebf\u6027\u6295\u5f71\uff09 \\((x_d,y_d)^\\top\\) \u662f\u5f84\u5411\u5931\u771f\u540e\u7684\u5b9e\u9645\u56fe\u50cf\u7684\u4f4d\u7f6e \\(\\tilde{r}\\) \u4e3a\u5f84\u5411\u5931\u771f\u4e2d\u5fc3\u7684\u5f84\u5411\u8ddd\u79bb \\(\\sqrt{\\tilde{x}^2+\\tilde{y}^2}\\) \\(L(\\tilde{r})\\) \u662f\u4e00\u4e2a\u5931\u771f\u56e0\u5b50\uff0c\u5b83\u4ec5\u4ec5\u662f\u534a\u5f84 \\(\\tilde{r}\\) \u7684\u51fd\u6570 \u5931\u771f\u77eb\u6b63 \uff1a\u5728\u50cf\u7d20\u5750\u6807\u4e2d\uff0c\u5931\u771f\u77eb\u6b63\u8bb0\u4e3a \\[ \\hat{x}=x_c+L(r)(x-x_c) \\ \\ \\ \\ \\ \\ \\hat{y}=y_c+L(r)(y-y_c) \\] \\((x,y)^\\top\\) \u662f\u6d4b\u91cf\u7684\u5750\u6807 \\((\\hat{x},\\hat{y})^\\top\\) \u662f\u77eb\u6b63\u540e\u7684\u5750\u6807 \\((x_c,y_c)^\\top\\) \u662f\u5f84\u5411\u5931\u771f\u7684\u4e2d\u5fc3\u4e14 \\(r^2=(x-x_c)^2+(y-y_c)^2\\) \uff0c\u6ce8\u610f\u5982\u679c\u957f\u5bbd\u6bd4\u4e0d\u662f 1\uff0c\u90a3\u4e48\u5728\u8ba1\u7b97 \\(r\\) \u65f6\u5fc5\u987b\u5bf9\u5b83\u8fdb\u884c\u77eb\u6b63 \u5931\u771f\u51fd\u6570\u548c\u4e2d\u5fc3\u7684\u9009\u62e9 \uff1a\u51fd\u6570 \\(L(r)\\) \u4ec5\u5f53 \\(r\\) \u4e3a\u6b63\u503c\u65f6\u6709\u5b9a\u4e49\u5e76\u4e14 \\(L(0)=1\\) \u3002\u4e00\u4e2a\u4efb\u610f\u51fd\u6570 \\(L(r)\\) \u7684\u903c\u8fd1\u53ef\u4ee5\u7531\u6cf0\u52d2\u5c55\u5f00\u5f0f \\(L(r)=1+\\mathcal{k}_1r+\\mathcal{k}_2r^2+\\mathcal{k}_3r^3+...\\) \u3002 \\(\\{k_1,k_2,k_3,...,x_c,y_c\\}\\) \u662f\u5f84\u5411\u77eb\u6b63\u7684\u7cfb\u6570\u3002\u4e3b\u70b9\u7ecf\u5e38\u88ab\u7528\u4f5c\u5f84\u5411\u5931\u771f\u7684\u4e2d\u5fc3\uff0c\u867d\u7136\u5b83\u4eec\u672a\u5fc5\u5b8c\u5168\u91cd\u5408 \u8ba1\u7b97\u5931\u771f\u51fd\u6570 \uff1a\u51fd\u6570 \\(L(r)\\) \u53ef\u4ee5\u901a\u8fc7\u6700\u5c0f\u5316\u4e00\u4e2a\u57fa\u4e8e\u6620\u5c04\u7684\u7ebf\u6027\u504f\u5dee\u7684\u4ee3\u4ef7\u51fd\u6570\u6765\u8ba1\u7b97\u3002\u5931\u771f\u51fd\u6570\u53ef\u4ee5\u4f5c\u4e3a\u5f71\u50cf\u8fc7\u7a0b\u7684\u4e00\u90e8\u5206\uff0c\u628a\u53c2\u6570 \\(k_i\\) \u4e0e \\(P\\) \u4e00\u8d77\u5728\u51e0\u4f55\u8bef\u5dee\u7684\u6700\u5c0f\u5316\u8fed\u4ee3\u4e2d\u8ba1\u7b97","title":"\u8ba1\u7b97\u6444\u50cf\u673a\u77e9\u9635 P"},{"location":"cv/mvg/calc-p/#p","text":"\u7ea6 1967 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f Abstract \u672c\u7ae0\u4e3b\u8981\u8ba8\u8bba\u7531 3 \u7ef4\u7a7a\u95f4\u4e0e\u56fe\u50cf\u5e73\u9762\u5143\u7d20\u95f4\u7684\u5bf9\u5e94\u6765\u4f30\u8ba1\u6444\u50cf\u673a\u6295\u5f71\u77e9\u9635\u7684\u6570\u503c\u65b9\u6cd5\uff08\u7b80\u79f0\u786e\u5b9a\u6444\u50cf\u673a\u53c2\u6570\uff09","title":"\u8ba1\u7b97\u6444\u50cf\u673a\u77e9\u9635 p"},{"location":"cv/mvg/calc-p/#_1","text":"\u5bf9\u4e8e\u6bcf\u7ec4\u5bf9\u5e94 \\(\\mathbf{X}_i \\leftrightarrow \\mathbf{x}_i\\) \uff0c\u53ef\u4ee5\u5f97\u51fa\u4e0b\u9762\u5173\u7cfb\u5f0f\uff1a \\[ \\begin{bmatrix} \\mathbf{0}^\\top & -w_i\\mathbf{X}_i^\\top & y_i\\mathbf{X}_i^\\top \\\\ w_i\\mathbf{X}_i^\\top & \\mathbf{0}^\\top & -x_i\\mathbf{X}_i^\\top \\end{bmatrix} \\begin{bmatrix} \\mathbf{p}_1 \\\\ \\mathbf{p}_2 \\\\ \\mathbf{p}_3 \\end{bmatrix} = \\mathbf{0} \\] \u6700\u5c0f\u914d\u7f6e\u89e3 \uff1a\u77e9\u9635 P \u6709 12 \u4e2a\u5143\u7d20\u548c\uff08\u5ffd\u7565\u7f29\u653e\u56e0\u5b50\uff0911 \u4e2a\u81ea\u7531\u5ea6\uff0c\u6240\u4ee5\u89e3 P \u9700\u8981 11 \u4e2a\u65b9\u7a0b\u3002\u7ed9\u5b9a\u8fd9\u4e2a\u6700\u5c0f\u6570\u76ee\u7684\u5bf9\u5e94\u65f6\uff0c\u89e3\u65f6\u7cbe\u786e\u7684\uff0c\u5373\u7a7a\u95f4\u7684\u70b9\u51c6\u786e\u5730\u6295\u5f71\u5230\u5b83\u4eec\u88ab\u6d4b\u91cf\u5230\u56fe\u50cf\u4e0a \u8d85\u5b9a\u89e3 \uff1a\u5982\u679c\u7531\u4e8e\u70b9\u5750\u6807\u7684\u566a\u58f0\u5bfc\u81f4\u6570\u636e\u4e0d\u7cbe\u786e\u5e76\u4e14\u7ed9\u5b9a \\(n \\ge 6\\) \u7ec4\u70b9\u5bf9\u5e94\uff0c\u90a3\u4e48 \\(A\\mathbf{p}=\\mathbf{0}\\) \u5c06\u4e0d\u5b58\u5728\u7cbe\u786e\u89e3\u3002P \u7684\u89e3\u53ef\u4ee5\u901a\u8fc7\u6700\u5c0f\u5316\u4e00\u4e2a\u4ee3\u6570\u6216\u51e0\u4f55\u8bef\u5dee\u6765\u83b7\u5f97\u3002\u6c42 \\(\\parallel A \\mathbf{p} \\parallel\\) \u7684\u6700\u5c0f\u503c\uff0c\u53ef\u80fd\u7684\u7ea6\u675f\u662f\uff1a \\(\\parallel \\mathbf{p} \\parallel = 1\\) \\(\\parallel \\hat{\\mathbf{p}}^3 \\parallel = 1\\) \uff0c\u5176\u4e2d \\(\\hat{\\mathbf{p}}^3\\) \u662f\u7531 P \u6700\u540e\u4e00\u884c\u7684\u524d\u4e09\u4e2a\u5143\u7d20\u7ec4\u6210\u7684\u77e2\u91cf \\((p_{31},p_{32},p_{33})^\\top\\) \u9000\u5316\u914d\u7f6e \u6444\u50cf\u673a\u4e2d\u5fc3\u548c\u70b9\u90fd\u5728\u4e00\u6761\u4e09\u6b21\u7ed5\u7ebf\u4e0a \u8fd9\u4e9b\u70b9\u90fd\u5728\u4e00\u5f20\u5e73\u9762\u548c\u5305\u542b\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u4e00\u6761\u76f4\u7ebf\u7684\u5e76\u96c6\u4e0a \u6570\u636e\u5f52\u4e00\u5316 \uff1a\u5f53\u70b9\u5230\u6444\u50cf\u673a\u7684\u6df1\u5ea6\u53d8\u5316\u76f8\u5bf9\u6bd4\u8f83\u5c0f\u65f6\uff0c\u91c7\u7528\u540c\u6837\u7c7b\u578b\u7684\u5f52\u4e00\u5316\u3002\u56e0\u6b64\uff0c\u628a\u70b9\u7684\u5f62\u5fc3\u5e73\u79fb\u5230\u539f\u70b9\uff0c\u5e76\u5bf9\u5b83\u4eec\u7684\u5750\u6807\u8fdb\u884c\u7f29\u653e\u4f7f\u5b83\u4eec\u5230\u539f\u70b9\u7684 RMS\uff08\u5747\u65b9\u6839\uff09\u8ddd\u79bb\u7b49\u4e8e \\(\\sqrt{3}\\) \u3002\u9002\u7528\u4e8e\u70b9\u7d27\u81f4\u5206\u5e03\u7684\u60c5\u5f62 \u76f4\u7ebf\u5bf9\u5e94 \uff1a3D \u4e2d\u7684\u76f4\u7ebf\u53ef\u4ee5\u7528\u5b83\u901a\u8fc7\u7684\u4e24\u70b9 \\(\\mathbf{X}_0\\) \u548c \\(\\mathbf{X}_1\\) \u6765\u8868\u793a\u3002\u7531\u56fe\u50cf\u76f4\u7ebf \\(\\mathbf{l}\\) \u53cd\u5411\u6295\u5f71\u5f97\u5230\u7684\u5e73\u9762\u4e3a \\(P^\\top\\mathbf{l}\\) \u3002\u90a3\u4e48\u70b9 \\(\\mathbf{X}_j\\) \u5728\u8be5\u5e73\u9762\u4e0a\u7684\u6761\u4ef6\u662f \\(\\mathbf{l}^\\top P \\mathbf{X}_j = 0\\) \uff0c\u5176\u4e2d \\(j=0,1\\)","title":"\u57fa\u672c\u65b9\u7a0b"},{"location":"cv/mvg/calc-p/#_2","text":"\u56fe\u50cf\u4e2d\u7684\u51e0\u4f55\u8bef\u5dee \\(\\underset{i}{\\sum}d(\\mathbf{x}_i,\\hat{\\mathbf{x}}_i)^2\\) \uff0c\u5176\u4e2d \\(\\mathbf{x}_i\\) \u662f\u88ab\u6d4b\u91cf\u7684\u70b9\uff0c \\(\\hat{\\mathbf{x}}_i\\) \u662f\u70b9 \\(P\\mathbf{X}_i\\) \uff0c\u5373 \\(\\mathbf{X}_i\\) \u5728 \\(P\\) \u4f5c\u7528\u4e0b\u7684\u7cbe\u786e\u7684\u56fe\u50cf\u70b9 \u5982\u679c\u6d4b\u91cf\u8bef\u5dee\u6ee1\u8db3\u9ad8\u65af\u5206\u5e03\uff0c\u90a3\u4e48 \\(\\underset{P}{\\min}\\underset{i}{\\sum}d(\\mathbf{x}_i,P\\mathbf{X}_i)^2\\) \u7684\u89e3\u662f \\(P\\) \u7684\u6700\u5927\u4f3c\u7136\u4f30\u8ba1 \u4e16\u754c\u70b9\u6709\u8bef\u5dee 3D \u51e0\u4f55\u8bef\u5dee\u5b9a\u4e49\u4e3a\uff1a \\(\\underset{i}{\\sum}d(\\mathbf{X}_i,\\hat{\\mathbf{X}}_i)^2\\) \u5982\u679c\u4e16\u754c\u548c\u56fe\u50cf\u70b9\u7684\u8bef\u5dee\u90fd\u8003\u8651\uff1a \\(\\underset{i=1}{\\sum}d_{Mah}(\\mathbf{x}_i,P\\hat{\\mathbf{X}}_i)^2+d_{Mah}(\\mathbf{X}+\\hat{\\mathbf{X}}_i)^2\\) \uff0c \\(d_{Mah}\\) \u8868\u793a\u8bef\u5dee\u534f\u65b9\u5dee\u77e9\u9635\u7684 Mahalanobis \u8ddd\u79bb","title":"\u51e0\u4f55\u8bef\u5dee"},{"location":"cv/mvg/calc-p/#_3","text":"\u5047\u5b9a\u6240\u6709\u7684\u70b9 \\(\\mathbf{X}_i\\) \u5728 DLT \u7b97\u6cd5\u4e2d\u5df2\u7ecf\u5f52\u4e00\u5316\uff0cDLT \u7b97\u6cd5\u8981\u6700\u5c0f\u5316\u7684\u91cf\u662f\uff1a \\(\\sum_{i}(\\hat{w}_id(\\mathbf{x}_i,\\hat{\\mathbf{x}}_i))^2\\) \uff0c\u5176\u4e2d \\(\\hat{w}(\\hat{x}_i,\\hat{y}_i,1)^\\top=P\\mathbf{X}_i\\) \uff0c \\(\\hat{w}\\) \u53ef\u4ee5\u89e3\u91ca\u6210\u70b9 \\(\\mathbf{X}_i\\) \u6cbf\u4e3b\u8f74\u65b9\u5411\u5230\u6444\u50cf\u673a\u7684\u6df1\u5ea6\uff0c\u8981\u6700\u5c0f\u5316\u7684\u4ee3\u6570\u8bef\u5dee\u7b49\u4e8e \\(f\\sum_id(\\mathbf{X}_i,\\hat{\\mathbf{X}}_i)^2\\) \u53d8\u6362\u4e0d\u53d8\u6027 \uff1a\u5728\u7ea6\u675f \\(\\parallel \\hat{\\mathbf{p}}^3 \\parallel = 1\\) \u4e0b\u6700\u5c0f\u5316 \\(A\\mathbf{p}\\) \u53ef\u4ee5\u89e3\u91ca\u6210\u6700\u5c0f\u5316 3D \u51e0\u4f55\u8ddd\u79bb\u3002\u8fd9\u6837\u65e2\u4e0d\u53d7 3D \u7a7a\u95f4\u4e5f\u4e0d\u53d7\u56fe\u50cf\u7a7a\u95f4\u7684\u76f8\u4f3c\u53d8\u6362\u7684\u5f71\u54cd","title":"\u4ee3\u6570\u8bef\u5dee\u7684\u96c6\u5408\u89e3\u91ca"},{"location":"cv/mvg/calc-p/#_4","text":"\u4e0a\u9762\u6709\u5173\u5c04\u5f71\u6444\u50cf\u673a\u63a8\u5bfc\u7684\u65b9\u6cd5\u53ef\u4ee5\u76f4\u63a5\u7528\u4e8e\u4eff\u5c04\u6444\u50cf\u673a\u3002\u4eff\u5c04\u6444\u50cf\u673a\u5b9a\u4e49\u4e3a\u5c04\u5f71\u77e9\u9635\u7684\u6700\u540e\u4e00\u884c\u662f \\((0,0,0,1)\\) \u7684\u6444\u50cf\u673a\u3002\u4eff\u5c04\u6444\u50cf\u673a\u7684 DLT \u4f30\u8ba1\u662f\u5728 \\(P\\) \u7684\u6700\u540e\u4e00\u884c\u6ee1\u8db3\u4e0a\u8ff0\u6761\u4ef6\u4e0b\u6700\u5c0f\u5316 \\(\\parallel A \\mathbf{p} \\parallel\\)","title":"\u4eff\u5c04\u6444\u50cf\u673a\u7684\u4f30\u8ba1"},{"location":"cv/mvg/calc-p/#_5","text":"\u5728\u5173\u4e8e\u6444\u50cf\u673a\u53c2\u6570\u7684\u9650\u5236\u6761\u4ef6\u4e0b\u5bfb\u6c42\u4e00\u4e2a\u6700\u9002\u914d\u7684\u6444\u50cf\u673a\u77e9\u9635 \\(P\\) \uff0c\u901a\u5e38\u7684\u9650\u5236\u6709 \u626d\u66f2 \\(s\\) \u4e3a 0 \u50cf\u7d20\u662f\u6b63\u65b9\u5f62: \\(\\alpha_x=\\alpha_y\\) \u4e3b\u70b9 \\((x_0,y_0)^2\\) \u5df2\u77e5 \u6574\u4e2a\u6444\u50cf\u673a\u6807\u5b9a\u77e9\u9635 \\(K\\) \u5df2\u77e5 \u6700\u5c0f\u5316\u51e0\u4f55\u8bef\u5dee \uff1a\u5047\u5b9a\u6211\u4eec\u5f3a\u8c03\u7ea6\u675f \\(s=0\\) \u548c \\(\\alpha_x=\\alpha_y\\) \uff0c\u7528\u4f59\u4e0b\u7684 9 \u4e2a\u53c2\u6570\u6765\u53c2\u6570\u5316\u6444\u50cf\u673a\u77e9\u9635\u3002\u51e0\u4f55\u8bef\u5dee\u53ef\u4ee5\u7528\u8fed\u4ee3\u6700\u5c0f\u5316\u65b9\u6cd5\u76f8\u5bf9\u4e8e\u8fd9\u7ec4\u53c2\u6570\u6765\u6700\u5c0f\u5316 \u6700\u5c0f\u5316\u4ee3\u6570\u8bef\u5dee \uff1a\u8003\u8651\u628a\u53c2\u6570\u96c6 \\(\\mathbf{q}\\) \u6620\u5c04\u5230\u6444\u50cf\u673a\u77e9\u9635 \\(P\\) \u7684\u53c2\u6570\u5316\u6620\u5c04 \\(g\\) \uff0c\u6700\u5c0f\u5316\u6240\u6709\u70b9\u5339\u914d\u7684\u4ee3\u6570\u8bef\u5dee\u7b49\u4ef7\u4e8e\u6700\u5c0f\u5316 \\(\\parallel Ag(\\mathbf{q}) \\parallel\\) \u7b80\u5316\u7684\u6d4b\u91cf\u77e9\u9635 \uff1a\u4e00\u822c\uff0c \\(2n \\times 12\\) \u7684\u77e9\u9635 \\(A\\) \u53ef\u80fd\u6709\u5f88\u591a\u884c\u3002\u4f46\u53ef\u7528\u4e00\u4e2a \\(12 \\times 12\\) \u7684\u77e9\u9635 \\(\\hat{A}\\) \u6765\u4ee3\u66ff \\(A\\) \uff0c\u4f7f\u5f97\u5bf9\u4efb\u4f55\u77e2\u91cf \\(\\mathbf{p}\\) \u6709 \\(\\parallel A \\mathbf{p} \\parallel = \\mathbf{p}^\\top A^\\top A \\mathbf{p} = \\parallel \\hat{A} \\mathbf{p} \\parallel\\) \u521d\u59cb\u5316 \uff1a\u6c42\u6444\u50cf\u673a\u521d\u59cb\u5316\u53c2\u6570\u7684\u4e00\u79cd\u9014\u5f84\uff1a \u7528\u8bf8\u5982 DLT \u7684\u7ebf\u6027\u7b97\u6cd5\u6c42\u51fa\u4e00\u4e2a\u521d\u59cb\u7684\u6444\u50cf\u673a\u77e9\u9635 \u628a\u56fa\u5b9a\u53c2\u6570\u5f3a\u5236\u5230\u6240\u5e0c\u671b\u7684\u53d6\u503c\u8303\u56f4 \u628a\u6444\u50cf\u673a\u77e9\u9635\u5206\u89e3\u6240\u83b7\u5f97\u7684\u521d\u59cb\u503c\u8d4b\u7ed9\u53c2\u6570\u53d8\u91cf \u5916\u90e8\u6821\u51c6 \uff1a\u4e3a\u4e86\u8ba1\u7b97\u5916\u90e8\u6821\u51c6\uff0c\u9700\u5bf9\u4e16\u754c\u5750\u6807\u4f4d\u7f6e\u51c6\u786e\u5df2\u77e5\u7684\u4e00\u4e2a\u914d\u7f6e\u8fdb\u884c\u5f71\u50cf\u3002\u4e4b\u540e\u6c42\u6444\u50cf\u673a\u7684\u59ff\u6001\u3002\u5728\u673a\u5668\u4eba\u7cfb\u7edf\u7684\u624b\u773c\u6807\u5b9a\u4e2d\u6c42\u6444\u50cf\u673a\u4f4d\u7f6e\u5c31\u662f\u8fd9\u6837\u7684\u60c5\u5f62\uff1b\u8fd8\u6709\u5728\u91c7\u7528\u914d\u51c6\u6280\u672f\u7684\u57fa\u4e8e\u6a21\u578b\u7684\u8bc6\u522b\u4e2d\uff0c\u9700\u8981\u77e5\u9053\u7269\u4f53\u76f8\u5bf9\u6444\u50cf\u673a\u7684\u4f4d\u7f6e \u534f\u65b9\u5dee\u4f30\u8ba1 \uff1a\u5047\u5b9a\u6240\u6709\u7684\u65e0\u64e6\u597d\u4ec5\u53d1\u751f\u5728\u56fe\u50cf\u6d4b\u91cf\u4e2d\uff0cML \u6b8b\u5dee\u671f\u671b\u503c\u7b49\u4e8e \\(\\varepsilon_{res}=\\delta(1-d/2n)^{1/2}\\) \uff0c\u5176\u4e2d \\(d\\) \u662f\u8981\u62df\u5408\u7684\u6444\u50cf\u673a\u53c2\u6570\u6570\u76ee\uff08\u5bf9\u5b8c\u6574\u7684\u9488\u5b54\u6444\u50cf\u673a\u6a21\u578b\u662f 11\uff09\u3002\u7ed9\u5b9a\u4e00\u4e2a\u6b8b\u5dee\uff0c\u8be5\u516c\u5f0f\u4e5f\u53ef\u4ee5\u7528\u6765\u4f30\u8ba1\u70b9\u6d4b\u91cf\u7684\u51c6\u786e\u6027","title":"\u53d7\u9650\u6444\u50cf\u673a\u4f30\u8ba1"},{"location":"cv/mvg/calc-p/#_6","text":"\u7528 \\((\\tilde{x},\\tilde{y})^\\top\\) \u6807\u8bb0\u5728\u7406\u60f3\uff08\u975e\u5931\u771f\uff09\u9488\u5b54\u6295\u5f71\u4e0b\u70b9\u4ee5\u7126\u8ddd\u4e3a\u6d4b\u91cf\u5355\u4f4d\u7684\u5750\u6807\u3002\u5bf9\u4e00\u70b9 \\(\\mathbf{X}\\) \u6709\uff1a \\((\\tilde{x},\\tilde{y},1)^\\top=[\\mathbf{I}|\\mathbf{0}]\\mathbf{X}_{cam}\\) \uff0c\u5176\u4e2d \\(\\mathbf{X}_{cam}\\) \u662f\u6444\u50cf\u673a\u5750\u6807\u4e0b\u7684 3D \u70b9\uff0c\u5b9e\u9645\u7684\u6295\u5f71\u70b9\u901a\u8fc7\u4e00\u4e2a\u5f84\u5411\u4f4d\u79fb\u4e0e\u7406\u60f3\u70b9\u5173\u8054\u3002\u56e0\u6b64\uff0c\u5f84\u5411\uff08\u900f\u955c\uff09\u5931\u771f\u7684\u6a21\u578b\u662f\uff1a \\[\\begin{bmatrix} x_d \\\\ y_d \\end{bmatrix}=L(\\tilde{r})\\begin{bmatrix} \\tilde{x} \\\\ \\tilde{y} \\end{bmatrix}\\] \\((\\tilde{x},\\tilde{y})^\\top\\) \u662f\u7406\u60f3\u56fe\u50cf\u4f4d\u7f6e\uff08\u9075\u5faa\u7ebf\u6027\u6295\u5f71\uff09 \\((x_d,y_d)^\\top\\) \u662f\u5f84\u5411\u5931\u771f\u540e\u7684\u5b9e\u9645\u56fe\u50cf\u7684\u4f4d\u7f6e \\(\\tilde{r}\\) \u4e3a\u5f84\u5411\u5931\u771f\u4e2d\u5fc3\u7684\u5f84\u5411\u8ddd\u79bb \\(\\sqrt{\\tilde{x}^2+\\tilde{y}^2}\\) \\(L(\\tilde{r})\\) \u662f\u4e00\u4e2a\u5931\u771f\u56e0\u5b50\uff0c\u5b83\u4ec5\u4ec5\u662f\u534a\u5f84 \\(\\tilde{r}\\) \u7684\u51fd\u6570 \u5931\u771f\u77eb\u6b63 \uff1a\u5728\u50cf\u7d20\u5750\u6807\u4e2d\uff0c\u5931\u771f\u77eb\u6b63\u8bb0\u4e3a \\[ \\hat{x}=x_c+L(r)(x-x_c) \\ \\ \\ \\ \\ \\ \\hat{y}=y_c+L(r)(y-y_c) \\] \\((x,y)^\\top\\) \u662f\u6d4b\u91cf\u7684\u5750\u6807 \\((\\hat{x},\\hat{y})^\\top\\) \u662f\u77eb\u6b63\u540e\u7684\u5750\u6807 \\((x_c,y_c)^\\top\\) \u662f\u5f84\u5411\u5931\u771f\u7684\u4e2d\u5fc3\u4e14 \\(r^2=(x-x_c)^2+(y-y_c)^2\\) \uff0c\u6ce8\u610f\u5982\u679c\u957f\u5bbd\u6bd4\u4e0d\u662f 1\uff0c\u90a3\u4e48\u5728\u8ba1\u7b97 \\(r\\) \u65f6\u5fc5\u987b\u5bf9\u5b83\u8fdb\u884c\u77eb\u6b63 \u5931\u771f\u51fd\u6570\u548c\u4e2d\u5fc3\u7684\u9009\u62e9 \uff1a\u51fd\u6570 \\(L(r)\\) \u4ec5\u5f53 \\(r\\) \u4e3a\u6b63\u503c\u65f6\u6709\u5b9a\u4e49\u5e76\u4e14 \\(L(0)=1\\) \u3002\u4e00\u4e2a\u4efb\u610f\u51fd\u6570 \\(L(r)\\) \u7684\u903c\u8fd1\u53ef\u4ee5\u7531\u6cf0\u52d2\u5c55\u5f00\u5f0f \\(L(r)=1+\\mathcal{k}_1r+\\mathcal{k}_2r^2+\\mathcal{k}_3r^3+...\\) \u3002 \\(\\{k_1,k_2,k_3,...,x_c,y_c\\}\\) \u662f\u5f84\u5411\u77eb\u6b63\u7684\u7cfb\u6570\u3002\u4e3b\u70b9\u7ecf\u5e38\u88ab\u7528\u4f5c\u5f84\u5411\u5931\u771f\u7684\u4e2d\u5fc3\uff0c\u867d\u7136\u5b83\u4eec\u672a\u5fc5\u5b8c\u5168\u91cd\u5408 \u8ba1\u7b97\u5931\u771f\u51fd\u6570 \uff1a\u51fd\u6570 \\(L(r)\\) \u53ef\u4ee5\u901a\u8fc7\u6700\u5c0f\u5316\u4e00\u4e2a\u57fa\u4e8e\u6620\u5c04\u7684\u7ebf\u6027\u504f\u5dee\u7684\u4ee3\u4ef7\u51fd\u6570\u6765\u8ba1\u7b97\u3002\u5931\u771f\u51fd\u6570\u53ef\u4ee5\u4f5c\u4e3a\u5f71\u50cf\u8fc7\u7a0b\u7684\u4e00\u90e8\u5206\uff0c\u628a\u53c2\u6570 \\(k_i\\) \u4e0e \\(P\\) \u4e00\u8d77\u5728\u51e0\u4f55\u8bef\u5dee\u7684\u6700\u5c0f\u5316\u8fed\u4ee3\u4e2d\u8ba1\u7b97","title":"\u5f84\u5411\u5931\u771f"},{"location":"cv/mvg/camera-model/","text":"\u6444\u50cf\u673a\u6a21\u578b \u00b6 \u7ea6 3055 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 10 \u5206\u949f Abstract \u6444\u50cf\u673a\u662f 3D \u4e16\u754c\uff08\u7269\u4f53\u7a7a\u95f4\uff09\u548c 2D \u56fe\u50cf\u4e4b\u95f4\u7684\u6620\u5c04\u3002\u591a\u89c6\u56fe\u4e2d\u4e3b\u8981\u5173\u5fc3 \u4e2d\u5fc3\u6295\u5f71 \u3002 \u5177\u4f53\u6a21\u578b\u4e3b\u8981\u5206\u6210\u6709\u9650\u4e2d\u5fc3\u7684\u6444\u50cf\u673a\u6a21\u578b\u548c\u201c\u65e0\u7a77\u8fdc\u201d\u4e2d\u5fc3\u7684\u6444\u50cf\u673a\u6a21\u578b\u3002 \u672c\u7ae0\u4e3b\u8981\u8ba8\u8bba\u70b9\u7684\u6295\u5f71\u3002 \u6709\u9650\u6444\u50cf\u673a \u00b6 \u57fa\u672c\u9488\u5b54\u6a21\u578b \u00b6 \u4ee4\u6295\u5f71\u4e2d\u5fc3\u4f4d\u4e8e\u4e00\u4e2a\u6b27\u6c0f\u5750\u6807\u7cfb\u7684\u539f\u70b9\uff0c\u800c\u5e73\u9762 \\(Z=f\\) \u88ab\u79f0\u4e3a \u56fe\u50cf\u5e73\u9762 \u6216 \u805a\u7126\u5e73\u9762 \u3002 \u5728\u9488\u5b54\u6a21\u578b\u4e0b\uff0c\u7a7a\u95f4\u5750\u6807\u4e3a \\(\\mathbf{X}=(X,Y,Z)^\\top\\) \uff0c\u4ece\u4e16\u754c\u5750\u6807\u5230\u56fe\u50cf\u5750\u6807\u7684\u4e2d\u5fc3\u6295\u5f71\u4e3a \\((X,Y,Z)^\\top \\to (fX/Z,fY/Z)^\\top\\) \u5c04\u5f71\u4e2d\u5fc3\u79f0\u4e3a \u6444\u50cf\u673a\u4e2d\u5fc3 \uff0c\u4e5f\u6210 \u5149\u5fc3 \u3002 \u6444\u50cf\u673a\u4e2d\u5fc3\u5230\u56fe\u50cf\u5e73\u9762\u7684\u5782\u7ebf\u79f0\u4e3a\u6444\u50cf\u673a\u7684 \u4e3b\u8f74 \u6216 \u4e3b\u5c04\u7ebf \uff0c\u800c\u4e3b\u8f74\u4e0e\u56fe\u50cf\u5e73\u9762\u7684\u4ea4\u70b9\u79f0\u4e3a \u4e3b\u70b9 \uff0c\u8fc7\u6444\u50cf\u673a\u4e2d\u5fc3\u5e73\u884c\u4e8e\u56fe\u50cf\u5e73\u9762\u7684\u5e73\u9762\u79f0\u4e3a\u6444\u50cf\u673a\u7684 \u4e3b\u5e73\u9762 \u3002 \u7528\u9f50\u6b21\u5750\u6807\u8868\u793a\u4e2d\u5fc3\u6295\u5f71\uff1a \\[ \\begin{bmatrix} X \\\\ Y \\\\ Z \\\\ 1 \\end{bmatrix} \\to \\begin{bmatrix} fX \\\\ fY \\\\ Z \\end{bmatrix} = \\begin{bmatrix} f & 0 & 0 & 0 \\\\ 0 & f & 0 & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} X \\\\ Y \\\\ Z \\\\ 1 \\end{bmatrix} \\\\ \\\\ \u4e0a\u5f0f\u4e5f\u53ef\u8868\u793a\u4e3a \\ \\ \\ \\mathbf{x}=P\\mathbf{X} \\ \\ \\ \u5176\u4e2d \\ \\mathbf{X}\u7528\u56db\u7ef4\u9f50\u6b21\u77e2\u91cf(X,Y,Z,1)^\\top \u8868\u793a \\ P = diag(f,f,1)[\\mathbf{I}|\\mathbf{0}] \\] \u4e3b\u70b9\u504f\u7f6e \u4e0a\u9762\u8ba8\u8bba\u7684\u56fe\u50cf\u5e73\u9762\u7684\u5750\u6807\u539f\u70b9\u5728\u4e3b\u70b9\u4e0a\uff0c\u4f46\u5b9e\u9645\u4e0a\u53ef\u80fd\u4e0d\u662f\uff0c\u4e00\u822c\u60c5\u5f62\u7684\u6620\u5c04\u4e3a \\((X,Y,Z)^\\top \\to (fX/Z+p_x,fY/Z+p_y)^\\top\\) \uff0c\u6839\u636e\u4e0a\u5f0f\u63a8\u5bfc\uff1a \\[ \\begin{bmatrix} X \\\\ Y \\\\ Z \\\\ 1 \\end{bmatrix} \\to \\begin{bmatrix} fX+Zp_x \\\\ fY+Zp_y \\\\ Z \\end{bmatrix} = \\begin{bmatrix} f & 0 & p_x & 0 \\\\ 0 & f & p_y & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} X \\\\ Y \\\\ Z \\\\ 1 \\\\ \\\\ \\end{bmatrix} \\] \u4ee4 \\(K = \\begin{bmatrix} f & 0 & p_x \\\\ 0 & f & p_y \\\\ 0 & 0 & 1 \\end{bmatrix}\\) , \u5219\u6709 \\(\\mathbf{x}=K[\\mathbf{I}|\\mathbf{0}]\\mathbf{X}_{cam}\\) \uff0c\u5176\u4e2d\u70b9 \\(\\mathbf{X}_{cam}\\) \u662f\u6444\u50cf\u673a\u5750\u6807\u7cfb\uff0c\u77e9\u9635 \\(K\\) \u79f0\u4e3a \u6444\u50cf\u673a\u6807\u5b9a\u77e9\u9635\uff08\u5185\u53c2\u77e9\u9635\uff09 \uff0c \\([\\mathbf{I}|\\mathbf{0}]\\) \u79f0\u4e3a \u5916\u53c2\u77e9\u9635 \u3002 \u6444\u50cf\u673a\u65cb\u8f6c\u4e0e\u4f4d\u79fb \\[ X_{cam}= \\begin{bmatrix} R & -R\\tilde{\\mathbf{C}} \\\\ \\mathbf{0}^\\top & 1 \\end{bmatrix} \\begin{bmatrix} X \\\\ Y \\\\ Z \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} R & -R\\tilde{\\mathbf{C}} \\\\ \\mathbf{0}^\\top & 1 \\end{bmatrix} \\mathbf{X} \\\\ \\mathbf{x}=KR[\\mathbf{I}|-\\tilde{\\mathbf{C}}]\\mathbf{X} \\] \u4e00\u822c\u7684\u9488\u5b54\u6444\u50cf\u673a \\(P=KR[\\mathbf{I}|-\\tilde{\\mathbf{C}}]\\) \u6709 9 \u4e2a\u81ea\u7531\u5ea6\uff1b3 \u4e2a\u6765\u81ea \\(K\\) \uff0c3 \u4e2a\u6765\u81ea \\(R\\) \uff0c3 \u4e2a\u6765\u81ea \\(\\tilde{\\mathbf{C}}\\) \u3002 \\(K\\) \u4e2d\u7684\u53c2\u6570\u79f0\u4e3a\u6444\u50cf\u673a \u5185\u90e8\u53c2\u6570 \u6216\u6444\u50cf\u673a\u7684 \u5185\u90e8\u6821\u51c6 \u3002 \\(R\\) \u548c \\(\\tilde{\\mathbf{C}}\\) \u5e76\u79f0\u4e3a \u5916\u90e8\u53c2\u6570 \u6216 \u5916\u90e8\u6821\u51c6 \u3002\u6444\u50cf\u673a\u77e9\u9635\u53ef\u7b80\u5316\u6210\uff1a \\[ \\mathbf{P}=K[R|\\mathbf{t}]\uff0c\u5176\u4e2d \\ \\mathbf{t}=-R\\tilde{\\mathbf{C}} \\] CCD \u6444\u50cf\u673a \u00b6 CCD \u6444\u50cf\u673a\u7684\u50cf\u7d20\u53ef\u80fd\u4e0d\u662f\u6b63\u65b9\u5f62\uff0c\u5982\u679c\u56fe\u50cf\u5750\u6807\u4ee5\u50cf\u7d20\u6765\u6d4b\u91cf\uff0c\u90a3\u4e48\u9700\u8981\u5728\u6bcf\u4e2a\u65b9\u5411\u4e0a\u5f15\u5165\u975e\u7b49\u91cf\u5c3a\u5ea6\u56e0\u5b50\u3002 \u4e00\u822c\u5f62\u5f0f\uff1a \\[ K= \\begin{bmatrix} \\alpha_x & 0 & x_0 \\\\ 0 & \\alpha_y & y_0 \\\\ 0 & 0 & 1 \\end{bmatrix} \\] \u5176\u4e2d \\(\\alpha_x=fm_x, \\alpha_y=fm_y,x_0=m_xp_x,y_0=m_yp_y\\) \u3002 \\(m_x,m_y\\) \u5206\u522b\u662f\u5728 x \u548c y \u65b9\u5411\u4e0a\u56fe\u50cf\u5750\u6807\u5355\u4f4d\u77e9\u9635\u7684\u50cf\u7d20\u6570\u3002 \u4e00\u4e2a CCD \u6444\u50cf\u673a\u6709 10 \u4e2a\u81ea\u7531\u5ea6\u3002 \u6709\u9650\u5c04\u5f71\u6444\u50cf\u673a \u00b6 \u8003\u8651\u5f62\u5982\u4e0b\u9762\u7684\u6807\u5b9a\u77e9\u9635\uff0c\u589e\u52a0\u7684\u53c2\u6570 s \u79f0\u4e3a \u626d\u66f2\u53c2\u6570 \uff0c\u5bf9\u5927\u591a\u6570\u6807\u51c6\u7684\u6444\u50cf\u673a\u6765\u8bf4\uff0c\u5176\u626d\u66f2\u53c2\u6570\u4e3a 0\u3002 \\[ K= \\begin{bmatrix} \\alpha_x & s & x_0 \\\\ 0 & \\alpha_y & y_0 \\\\ 0 & 0 & 1 \\end{bmatrix} \\] \u4e00\u4e2a\u6709\u9650\u5c04\u5f71\u6444\u50cf\u673a\u6709 11 \u4e2a\u81ea\u7531\u5ea6\u3002 \u5c04\u5f71\u6444\u50cf\u673a \u00b6 \u6444\u50cf\u673a\u6784\u9020 \u00b6 \u4e00\u822c\u5c04\u5f71\u6444\u50cf\u673a\u53ef\u4ee5\u6309 \\(P=[M|\\mathbf{p}_4]\\) \u5206\u5757\uff0c\u5176\u4e2d \\(M\\) \u662f \\(3 \\times 3\\) \u77e9\u9635\uff0c\u5982\u679c \\(M\\) \u662f\u975e\u5947\u5f02\u7684\uff0c\u90a3\u4e48\u5b83\u662f\u6709\u9650\u6444\u50cf\u673a\uff0c\u53cd\u4e4b\u5219\u4e0d\u7136 \u6444\u50cf\u673a\u4e2d\u5fc3 \uff1a\u6444\u50cf\u673a\u4e2d\u5fc3 \\(C\\) \u662f \\(P\\) \u7684\u4e00\u7ef4\u53f3\u96f6\u7a7a\u95f4\uff0c\u5373 \\(P \\mathbf{C}=\\mathbf{0}\\) \u6709\u9650\u6444\u50cf\u673a \uff08M\u975e\u5947\u5f02\uff09 \\(\\mathbf{C}=\\begin{bmatrix} -M^{-1}\\mathbf{p}_4 \\\\ 1 \\end{bmatrix}\\) \u65e0\u7a77\u8fdc\u6444\u50cf\u673a \uff08M\u5947\u5f02\uff09 \\(\\mathbf{C} = \\begin{bmatrix} \\mathbf{d} \\\\ 0 \\end{bmatrix}\\) \uff0c\u5176\u4e2d\uff0c \\(\\mathbf{d}\\) \u662f \\(M\\) \u7684 3 \u7ef4\u96f6\u77e2\u91cf\uff0c\u5373 \\(M \\mathbf{d}=\\mathbf{0}\\) \u5217\u70b9 \uff1a\u5bf9\u4e8e \\(i=1,..,3\\) \uff0c\u5217\u77e2\u91cf \\(\\mathbf{p}_i\\) \u5206\u522b\u5bf9\u5e94\u4e8e \\(X,Y,Z\\) \u8f74\u5728\u56fe\u50cf\u4e0a\u7684\u6d88\u5f71\u70b9\u3002\u5217 \\(\\mathbf{p}_4\\) \u662f\u5750\u6807\u539f\u70b9\u7684\u56fe\u50cf \u4e3b\u5e73\u9762 \uff1a\u6444\u50cf\u673a\u7684\u4e3b\u5e73\u9762\u662f \\(P\\) \u7684\u6700\u540e\u4e00\u884c \\(\\mathbf{P}^3\\) \u8f74\u5e73\u9762 \uff1a\u5e73\u9762 \\(\\mathbf{P}^1\\) \u548c \\(\\mathbf{P}^2\\) \uff08 \\(P\\) \u7684\u7b2c\u4e00\u548c\u7b2c\u4e8c\u884c\uff09\u8868\u793a\u7a7a\u95f4\u4e2d\u8fc7\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u5e73\u9762\uff0c\u5206\u522b\u5bf9\u5e94\u4e8e\u6620\u5c04\u5230\u56fe\u50cf\u4e0a\u76f4\u7ebf \\(x=0\\) \u548c \\(y=0\\) \u7684\u70b9 \u4e3b\u70b9 \uff1a\u56fe\u50cf\u70b9 \\(\\mathbf{x}_0=M\\mathbf{m}^3\\) \u662f\u6444\u50cf\u673a\u7684\u4e3b\u70b9\uff0c\u5176\u4e2d \\(\\mathbf{m}^{3\\top}\\) \u662f \\(M\\) \u7684\u7b2c\u4e09\u884c \u4e3b\u5c04\u7ebf \uff1a\u6444\u50cf\u673a\u7684\u4e3b\u5c04\u7ebf\uff08\u4e3b\u8f74\uff09\u662f\u8fc7\u6444\u50cf\u673a\u4e2d\u5fc3 \\(\\mathbf{C}\\) \u800c\u65b9\u5411\u77e2\u91cf\u4e3a \\(\\mathbf{m}^{3\\top}\\) \u7684\u5c04\u7ebf\u3002\u4e3b\u8f74\u77e2\u91cf \\(\\mathbf{v}=\\det(M)\\mathbf{m}^3\\) \u6307\u5411\u6444\u50cf\u673a\u7684\u524d\u65b9 \u5c04\u5f71\u6444\u50cf\u673a\u5bf9\u70b9\u7684\u4f5c\u7528 \u00b6 \u6b63\u5411\u6295\u5f71 \uff1a\u5728\u65e0\u7a77\u8fdc\u5e73\u9762\u4e0a\u7684\u70b9 \\(\\mathbf{D}=(\\mathbf{d}^\\top,\\mathbf{0})^\\top\\) \u8868\u793a\u6d88\u5f71\u70b9\uff0c\u8fd9\u4e9b\u70b9\u6620\u5c04\u5230 \\(\\mathbf{x}=P\\mathbf{D}=[M|\\mathbf{p}_4]=M\\mathbf{d}\\) \u70b9\u5230\u5c04\u5f71\u7684\u53cd\u5411\u6295\u5f71 \uff1a \u7ed9\u5b9a\u56fe\u50cf\u4e2d\u7684\u4e00\u4e2a\u70b9 \\(\\mathbf{x}\\) \u6765\u786e\u5b9a\u662f\u7a7a\u95f4\u7684\u90a3\u4e9b\u70b9\u88ab\u6620\u5c04\u5230\u8be5\u70b9\u3002\u8fd9\u4e9b\u70b9\u4ea4\u7ec4\u6210\u8fc7\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u4e00\u6761\u7a7a\u95f4\u5c04\u7ebf\uff1a \\(\\mathbf{X}(\\lambda)=P^+\\mathbf{x}+\\lambda\\mathbf{C}\\) \u5176\u4e2d \\(P^+\\) \u662f \\(P\\) \u7684\u4f2a\u9006\u3002 \\(P^+=P^\\top(PP^\\top)^{-1}\\) \u5e76\u4e14 \\(PP^+=I\\) \u4e00\u4e2a\u56fe\u50cf\u70b9 \\(\\mathbf{x}\\) \u53cd\u5411\u6295\u5f71\u7684\u5c04\u7ebf\u4ea4\u65e0\u7a77\u8fdc\u5e73\u9762\u4e8e\u70b9 \\(\\mathbf{D}=((M^{-1}\\mathbf{x})^\\top, 0)^\\top\\) \u3002\u5c06\u5c04\u7ebf\u5199\u6210\u5176\u4e0e\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u4e24\u70b9\u7684\u8fde\u63a5: \\[ \\mathbf{X}(\\mu)=\\mu\\begin{bmatrix}M^{-1}\\mathbf{x}\\\\0\\end{bmatrix}+ \\begin{bmatrix}-M^{-1}\\mathbf{p}_4\\\\1\\end{bmatrix}= \\begin{bmatrix}M^{-1}(\\mu\\mathbf{x}-\\mathbf{p}_4)\\\\1\\end{bmatrix} \\] \u70b9\u7684\u6df1\u5ea6 \u00b6 \u4ee4 \\(\\mathbf{X}=(X,Y,Z,T)^\\top\\) \u662f\u4e00\u4e2a 3D \u70b9\u800c \\(P=[M|\\mathbf{p}_4]\\) \u662f\u4e00\u4e2a\u6709\u9650\u6444\u50cf\u673a\u7684\u6444\u50cf\u673a\u77e9\u9635\uff0c\u5047\u5b9a \\(P(X,Y,Z,T)^\\top=w(x,y,1)^\\top\\) \uff0c\u90a3\u4e48 \\(depth(\\mathbf{X};P)=\\frac{sign(\\det M)w}{T\\parallel \\mathbf{m}^3 \\parallel}\\) \u662f\u5728\u6444\u50cf\u673a\u4e3b\u5e73\u9762\u524d\u65b9\u7684\u70b9 \\(\\mathbf{X}\\) \u7684\u6df1\u5ea6 \u6444\u50cf\u673a\u77e9\u9635\u7684\u5206\u89e3 \u00b6 \u6c42\u6444\u50cf\u673a\u4e2d\u5fc3 \uff1a\u4e2d\u5fc3 \\(\\mathbf{C}=(X,Y,Z,T)^\\top\\) \uff0c\u5176\u4e2d \\(X=\\det([\\mathbf{p}_2, \\mathbf{p}_3, \\mathbf{p}_4])\\) \\(Y=-\\det([\\mathbf{p}_1, \\mathbf{p}_3, \\mathbf{p}_4])\\) \\(Z=\\det([\\mathbf{p}_1, \\mathbf{p}_2, \\mathbf{p}_4])\\) \\(T=-\\det([\\mathbf{p}_1, \\mathbf{p}_2, \\mathbf{p}_3])\\) \u6c42\u6444\u50cf\u673a\u5b9a\u5411\u548c\u5185\u90e8\u53c2\u6570 \uff1a\u5728\u6709\u9650\u6444\u50cf\u673a\u7684\u60c5\u5f62\uff1a \\[ P=[M|-M\\tilde{\\mathbf{C}}]=K[R|-R\\tilde{\\mathbf{C}}] \\\\ K= \\begin{bmatrix} \\alpha_x & s & x_0 \\\\ 0 & \\alpha_y & y_0 \\\\ 0 & 0 & 1 \\end{bmatrix} \\] \\(\\alpha_x\\) \u662f \\(x-\\) \u5750\u6807\u65b9\u5411\u7684\u6bd4\u4f8b\u56e0\u5b50 \\(\\alpha_y\\) \u662f \\(y-\\) \u5750\u6807\u65b9\u5411\u7684\u6bd4\u4f8b\u56e0\u5b50 \\(s\\) \u662f\u626d\u66f2\u53c2\u6570 \\((x_0,y_0)^\\top\\) \u662f\u4e3b\u70b9\u7684\u5750\u6807 \u50cf\u7d20\u957f\u5bbd\u6bd4 \\(\\alpha_x/\\alpha_y\\) \u65e0\u7a77\u8fdc\u6444\u50cf\u673a \u00b6 \u65e0\u7a77\u8fdc\u6444\u50cf\u673a\u662f\u4e2d\u5fc3\u5728\u65e0\u7a77\u8fdc\u5e73\u9762\u4e0a\u7684\u6444\u50cf\u673a\u3002\u65e0\u7a77\u9009\u6444\u50cf\u673a\u53ef\u4ee5\u5206\u4e3a \u4eff\u5c04\u6444\u50cf\u673a \u548c \u975e\u4eff\u5c04\u6444\u50cf\u673a \u4eff\u5c04\u6444\u50cf\u673a \u00b6 \u4eff\u5c04\u6444\u50cf\u673a\u662f\u77e9\u9635 \\(P\\) \u7684\u6700\u540e\u4e00\u884c \\(P^{3\\top}\\) \u5f62\u5982 \\((0,0,0,1)\\) \u7684\u6444\u50cf\u673a \u5bf9\u4e8e\u6709\u9650\u5c04\u5f71\u6444\u50cf\u673a\uff1a \\[ P_0=KR[I|-\\tilde{\\mathbf{C}}]=K \\begin{bmatrix} \\mathbf{r}^{1\\top}-\\mathbf{r}^{1\\top}\\tilde{\\mathbf{C}} \\\\ \\mathbf{r}^{2\\top}-\\mathbf{r}^{2\\top}\\tilde{\\mathbf{C}} \\\\ \\mathbf{r}^{3\\top}-\\mathbf{r}^{3\\top}\\tilde{\\mathbf{C}} \\end{bmatrix} \\] \u5176\u4e2d \\(\\mathbf{r}^{i\\top}\\) \u662f\u65cb\u8f6c\u77e9\u9635\u7684\u7b2c i \u884c\u3002\u800c\u6570\u503c\u7684 \\(d_0=-\\mathbf{r}^{3\\top}\\tilde{\\mathbf{C}}\\) \u662f\u4e16\u754c\u539f\u70b9\u5230\u6444\u50cf\u673a\u4e2d\u5fc3\u5728\u4e3b\u5c04\u7ebf\u65b9\u5411\u4e0a\u7684\u8ddd\u79bb \u6cbf\u4e3b\u5c04\u7ebf\u8ddf\u8e2a\u7684\u6548\u679c\u662f\u5c06\u77e9\u9635\u7684 \\((3,4)\\) \u5143\u7d20\u7528\u4e16\u754c\u539f\u70b9\u5230\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u6df1\u5ea6 \\(d_t\\) \u66ff\u4ee3 \u5047\u5b9a\u4f7f\u56fe\u50cf\u5927\u5c0f\u4fdd\u6301\u4e0d\u53d8\u7684\u653e\u5927\u56e0\u5b50\u662f \\(k=d_t/d_0\\) \uff0c\u5728\u65f6\u95f4 \\(t\\) \u6240\u4ea7\u751f\u7684\u6444\u50cf\u673a\u77e9\u9635\u662f\uff1a \\[ P_t=K \\begin{bmatrix} d_t/d_0 & & \\\\ & d_t/d_0 & \\\\ & & 1 \\end{bmatrix} \\begin{bmatrix} \\mathbf{r}^{1\\top}&-\\mathbf{r}^{1\\top}\\tilde{\\mathbf{C}} \\\\ \\mathbf{r}^{2\\top}&-\\mathbf{r}^{2\\top}\\tilde{\\mathbf{C}} \\\\ \\mathbf{r}^{3\\top}&d_t \\end{bmatrix}= \\frac{d_t}{d_0}K \\begin{bmatrix} \\mathbf{r}^{1\\top}&-\\mathbf{r}^{1\\top}\\tilde{\\mathbf{C}} \\\\ \\mathbf{r}^{2\\top}&-\\mathbf{r}^{2\\top}\\tilde{\\mathbf{C}} \\\\ \\mathbf{r}^{3\\top}d_0/d_t&d_0 \\end{bmatrix} \\] \u56e0\u5b50 \\(d_t/d_0\\) \u53ef\u4ee5\u5ffd\u7565\uff0c\u5f53 \\(d_t\\) \u8d8b\u5411\u65e0\u7a77\u5927\u65f6\uff0c\u8be5\u77e9\u9635\u53d8\u6210 \\[ P_\\infty=\\lim_{t \\to \\infty}P_t=K \\begin{bmatrix} \\mathbf{r}^{1\\top}&-\\mathbf{r}^{1\\top}\\tilde{\\mathbf{C}} \\\\ \\mathbf{r}^{2\\top}&-\\mathbf{r}^{2\\top}\\tilde{\\mathbf{C}} \\\\ \\mathbf{0}^\\top&d_0 \\end{bmatrix} \\] \u5e94\u7528\u4eff\u5c04\u6444\u50cf\u673a\u7684\u8bef\u5dee \u00b6 \u5728\u8fc7\u4e16\u754c\u539f\u70b9\u5e76\u5782\u76f4\u5b50\u4e3b\u8f74\u65b9\u5411\u7684\u5e73\u9762\u4e0a\u7684\u4efb\u4f55\u70b9\u7684\u56fe\u50cf\u5728\u8fd9\u79cd\u53d8\u7126\u548c\u8fd0\u52a8\u7684\u590d\u5408\u4f5c\u7528\u4e0b\u4fdd\u6301\u4e0d\u53d8\u3002\u8fd9\u6837\u7684\u4e00\u4e2a\u70b9\u53ef\u4ee5\u8bb0\u4e3a \\(\\mathbf{X}=\\begin{bmatrix} \\alpha \\mathbf{r}^1+\\beta \\mathbf{r}^2 \\\\ 1\\end{bmatrix}\\) \uff0c\u56e0\u4e3a \\(\\mathbf{r}^{3\\top}(\\alpha \\mathbf{r}^1+\\beta \\mathbf{r}^2)=0\\) \uff0c\u5373 \\(P_0\\mathbf{X}=P_t\\mathbf{X}=P_\\infty\\mathbf{X}\\) \u5bf9\u6240\u6709 \\(t\\) \u6210\u7acb \u5bf9\u4e0d\u5728\u8be5\u5e73\u9762\u4e0a\u7684\u70b9\uff0c\u8bbe\u4e00\u70b9 \\(\\mathbf{X}\\) \u79bb\u8be5\u5e73\u9762\u7684\u5782\u76f4\u8ddd\u79bb\u662f \\(\\Delta\\) \u8fd9\u4e2a 3D \u70b9\u53ef\u4ee5\u8868\u793a\u6210 \\[\\mathbf{X}=\\begin{bmatrix} \\alpha \\mathbf{r}^1+\\beta \\mathbf{r}^2 + \\Delta\\mathbf{r}^3 \\\\ 1\\end{bmatrix}\\] \u5e76\u5206\u522b\u88ab\u6444\u50cf\u673a \\(P_0\\) \u548c \\(P_\\infty\\) \u5f71\u50cf\u5230 \\[ \\mathbf{x}_{proj}=P_0\\mathbf{X}=K\\begin{bmatrix} \\tilde{x} \\\\ \\tilde{y} \\\\ d_0+\\Delta \\end{bmatrix} \\ \\ \\ \\mathbf{x}_{affine}=P_\\infty\\mathbf{X}=K\\begin{bmatrix} \\tilde{x} \\\\ \\tilde{y} \\\\ d_0 \\end{bmatrix} \\] \u5176\u4e2d \\(\\tilde{x}=\\alpha-\\mathbf{r}^{1\\top}\\tilde{\\mathbf{C}},\\tilde{y}=\\beta-\\mathbf{r}^{2\\top}\\tilde{\\mathbf{C}}\\) \uff0c\u8bb0\u6807\u5b9a\u77e9\u9635\u4e3a\uff1a \\[ K=\\begin{bmatrix} K_{2 \\times 2} & \\tilde{\\mathbf{x}}_0 \\\\ \\tilde{\\mathbf{0}}^\\top & 1 \\end{bmatrix} \\] \u56e0\u6b64\u4e24\u70b9\u4e4b\u95f4\u7684\u5173\u7cfb\u662f \\[ \\tilde{\\mathbf{x}}_{affine}-\\tilde{\\mathbf{x}}_0= \\frac{d_0+\\Delta}{d_0}(\\tilde{\\mathbf{x}}_{proj}-\\tilde{\\mathbf{x}}_0) \\] \u7528 \\(P_\\infty\\) \u4eff\u5c04\u8fd1\u4f3c\u771f\u5b9e\u6444\u50cf\u673a\u77e9\u9635 \\(P_0\\) \u7684\u6548\u5e94\u662f\u628a\u70b9 \\(\\mathbf{X}\\) \u7684\u56fe\u50cf\u5f84\u5411\u5730\u9760\u8fd1\u6216\u79bb\u5f00\u4e3b\u70b9 \\(\\tilde{\\mathbf{x}}_0\\) \uff0c\u5176\u52a0\u6743\u56e0\u5b50\u662f \\((d_0+\\Delta)/d_0=1+\\Delta/d_0\\) \u4eff\u5c04\u5f71\u50cf\u6761\u4ef6 \\[ \\tilde{\\mathbf{x}}_{affine}-\\tilde{\\mathbf{x}}_{proj}=\\frac{\\Delta}{d_0}(\\tilde{\\mathbf{x}}_{proj}-\\tilde{\\mathbf{x}}_0) \\] \u6df1\u5ea6\u7684\u8d77\u4f0f( \\(\\Delta\\) )\u76f8\u5bf9\u5e73\u5747\u6df1\u5ea6( \\(d_0\\) )\u8f83\u5c0f \u70b9\u79bb\u4e3b\u8f74\u7684\u8ddd\u79bb\u8f83\u5c0f \\(P_\\infty\\) \u7684\u5206\u89e3 \u00b6 \u6444\u50cf\u673a\u77e9\u9635 \uff1a \\[ P_\\infty= \\begin{bmatrix} K_{2 \\times 2} & \\hat{\\mathbf{0}} \\\\ \\hat{\\mathbf{0}}^\\top & 1 \\end{bmatrix} \\begin{bmatrix} \\hat{R} & \\hat{\\mathbf{t}} \\\\ \\mathbf{0}^\\top & 1 \\end{bmatrix}= \\begin{bmatrix} K_{2 \\times 2} & \\tilde{\\mathbf{x}}_0 \\\\ \\hat{\\mathbf{0}}^\\top & 1 \\end{bmatrix} \\begin{bmatrix} \\hat{R} & \\hat{\\mathbf{0}} \\\\ \\mathbf{0}^\\top & 1 \\end{bmatrix} \\] \u5e73\u884c\u6295\u5f71 \u5e73\u884c\u6295\u5f71\u77e9\u9635 \\(\\begin{bmatrix} 1&0&0&0\\\\0&1&0&0\\\\0&0&0&1 \\end{bmatrix}\\) \u4ee3\u66ff\u79bb\u6709\u9650\u6444\u50cf\u673a\u7684\u89c4\u8303\u5c04\u5f71\u77e9\u9635 \\([\\mathbf{I}|\\mathbf{0}]\\) \u6807\u5b9a\u77e9\u9635 \\(\\begin{bmatrix}K_{2 \\times 2} & \\hat{\\mathbf{0}} \\\\\\hat{\\mathbf{0}}^\\top & 1\\end{bmatrix}\\) \u4ee3\u66ff\u4e86\u6709\u9650\u6444\u50cf\u673a\u7684 \\(K\\) \u4e3b\u70b9\u65e0\u5b9a\u4e49 \u4eff\u5c04\u6444\u50cf\u673a\u7684\u5c42\u6b21 \u00b6 \u6b63\u6295\u5f71 \uff1a\u6b63\u6295\u5f71\u6444\u50cf\u673a\u6709 5 \u4e2a\u81ea\u7531\u5ea6\uff0c\u5373\u63cf\u8ff0\u65cb\u8f6c\u77e9\u9635 \\(R\\) \u7684\u4e09\u4e2a\u53c2\u6570\uff0c\u52a0\u4e0a\u4e24\u4e2a\u504f\u7f6e\u53c2\u6570 \\(t_1\\) \u548c \\(t_2\\) \\[ P= \\begin{bmatrix} \\mathbf{r}^{1\\top} & t_1 \\\\ \\mathbf{r}^{2\\top} & t_2 \\\\ \\mathbf{0}^\\top & 1 \\end{bmatrix} \\] \u7f29\u653e\u6b63\u6295\u5f71 \uff1a\u7f29\u653e\u6b63\u6295\u5f71\u662f\u6b63\u6295\u5f71\u7d27\u63a5\u4e00\u4e2a\u5747\u5300\u7f29\u653e\uff0c\u6709 6 \u4e2a\u81ea\u7531\u5ea6 \\[ P= \\begin{bmatrix} \\mathbf{r}^{1\\top} & t_1 \\\\ \\mathbf{r}^{2\\top} & t_2 \\\\ \\mathbf{0}^\\top & 1/k \\end{bmatrix} \\] \u5f31\u900f\u89c6\u6295\u5f71 \uff1a\u4e0e\u6709\u9650 CCD \u6444\u50cf\u673a\u7c7b\u4f3c\uff0c\u8003\u8651\u4e24\u6839\u56fe\u50cf\u8f74\u7f29\u653e\u56e0\u5b50\u4e0d\u4e00\u6837\u7684\u65e0\u7a77\u8fdc\u6444\u50cf\u673a\uff0c\u6709 7 \u4e2a\u81ea\u7531\u5ea6 \\[ P= \\begin{bmatrix} \\alpha_x & & \\\\ & \\alpha_y & \\\\ & & 1 \\end{bmatrix} \\begin{bmatrix} \\mathbf{r}^{1\\top} & t_1 \\\\ \\mathbf{r}^{2\\top} & t_2 \\\\ \\mathbf{0}^\\top & 1 \\end{bmatrix} \\] \u4eff\u5c04\u6444\u50cf\u673a \\(P_A\\) \uff1a\u5982 \\(P_\\infty\\) \u4e00\u6837\uff0c\u53ef\u4ee5\u8ba4\u4e3a\u662f\u6709\u9650\u5c04\u5f71\u6444\u50cf\u673a\u7684\u5e73\u884c\u6295\u5f71\uff0c\u6709 8 \u4e2a\u81ea\u7531\u5ea6 \\[ P_A= \\begin{bmatrix} \\alpha_x & s & \\\\ & \\alpha_y & \\\\ & & 1 \\end{bmatrix} \\begin{bmatrix} \\mathbf{r}^{1\\top} & t_1 \\\\ \\mathbf{r}^{2\\top} & t_2 \\\\ \\mathbf{0}^\\top & 1 \\end{bmatrix} \\] \u4eff\u5c04\u6444\u50cf\u673a\u7684\u5176\u4ed6\u6027\u8d28 \u00b6 \u4e3b\u5e73\u9762\u662f\u65e0\u7a77\u8fdc\u5e73\u9762\u7684\u4efb\u4f55\u5c04\u5f71\u6444\u50cf\u673a\u77e9\u9635\u662f\u4eff\u5c04\u6444\u50cf\u673a\u77e9\u9635 \u5e73\u884c\u7684\u4e16\u754c\u76f4\u7ebf\u88ab\u6295\u5f71\u6210\u5e73\u884c\u7684\u56fe\u50cf\u76f4\u7ebf \u6ee1\u8db3 \\(M_{2 \\times 3} \\mathbf{d}=\\mathbf{0}\\) \u7684\u77e2\u91cf \\(\\mathbf{d}\\) \u662f\u5e73\u884c\u6295\u5f71\u7684\u65b9\u5411\uff0c\u800c \\((\\mathbf{d}^\\top,0)^\\top\\) \u662f\u6444\u50cf\u673a\u4e2d\u5fc3\uff0c\u56e0\u4e3a \\(P_A\\begin{bmatrix} \\mathbf{d} \\\\ 0 \\end{bmatrix}=\\mathbf{0}\\) \u4e00\u822c\u65e0\u7a77\u8fdc\u6444\u50cf\u673a \u00b6 \u4eff\u5c04\u6444\u50cf\u673a \u975e\u4eff\u5c04\u6444\u50cf\u673a \u6444\u50cf\u673a\u4e2d\u5fc3\u5728 \\(\\pi_\\infty\\) \u4e0a \u662f \u662f \u4e3b\u5e73\u9762\u662f \\(\\pi_\\infty\\) \u662f \u4e0d\u662f \\(\\pi_\\infty\\) \u7684\u70b9\u7684\u56fe\u50cf\u5728 \\(\\mathbf{l}_\\infty\\) \u4e0a \u662f \u4e00\u822c\u4e0d\u662f \u5176\u4ed6\u6444\u50cf\u673a\u6a21\u578b \u00b6 \u63a8\u626b\u5f0f\u6444\u50cf\u673a \u7ebf\u9635\u6444\u50cf\u673a","title":"\u6444\u50cf\u673a\u6a21\u578b"},{"location":"cv/mvg/camera-model/#_1","text":"\u7ea6 3055 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 10 \u5206\u949f Abstract \u6444\u50cf\u673a\u662f 3D \u4e16\u754c\uff08\u7269\u4f53\u7a7a\u95f4\uff09\u548c 2D \u56fe\u50cf\u4e4b\u95f4\u7684\u6620\u5c04\u3002\u591a\u89c6\u56fe\u4e2d\u4e3b\u8981\u5173\u5fc3 \u4e2d\u5fc3\u6295\u5f71 \u3002 \u5177\u4f53\u6a21\u578b\u4e3b\u8981\u5206\u6210\u6709\u9650\u4e2d\u5fc3\u7684\u6444\u50cf\u673a\u6a21\u578b\u548c\u201c\u65e0\u7a77\u8fdc\u201d\u4e2d\u5fc3\u7684\u6444\u50cf\u673a\u6a21\u578b\u3002 \u672c\u7ae0\u4e3b\u8981\u8ba8\u8bba\u70b9\u7684\u6295\u5f71\u3002","title":"\u6444\u50cf\u673a\u6a21\u578b"},{"location":"cv/mvg/camera-model/#_2","text":"","title":"\u6709\u9650\u6444\u50cf\u673a"},{"location":"cv/mvg/camera-model/#_3","text":"\u4ee4\u6295\u5f71\u4e2d\u5fc3\u4f4d\u4e8e\u4e00\u4e2a\u6b27\u6c0f\u5750\u6807\u7cfb\u7684\u539f\u70b9\uff0c\u800c\u5e73\u9762 \\(Z=f\\) \u88ab\u79f0\u4e3a \u56fe\u50cf\u5e73\u9762 \u6216 \u805a\u7126\u5e73\u9762 \u3002 \u5728\u9488\u5b54\u6a21\u578b\u4e0b\uff0c\u7a7a\u95f4\u5750\u6807\u4e3a \\(\\mathbf{X}=(X,Y,Z)^\\top\\) \uff0c\u4ece\u4e16\u754c\u5750\u6807\u5230\u56fe\u50cf\u5750\u6807\u7684\u4e2d\u5fc3\u6295\u5f71\u4e3a \\((X,Y,Z)^\\top \\to (fX/Z,fY/Z)^\\top\\) \u5c04\u5f71\u4e2d\u5fc3\u79f0\u4e3a \u6444\u50cf\u673a\u4e2d\u5fc3 \uff0c\u4e5f\u6210 \u5149\u5fc3 \u3002 \u6444\u50cf\u673a\u4e2d\u5fc3\u5230\u56fe\u50cf\u5e73\u9762\u7684\u5782\u7ebf\u79f0\u4e3a\u6444\u50cf\u673a\u7684 \u4e3b\u8f74 \u6216 \u4e3b\u5c04\u7ebf \uff0c\u800c\u4e3b\u8f74\u4e0e\u56fe\u50cf\u5e73\u9762\u7684\u4ea4\u70b9\u79f0\u4e3a \u4e3b\u70b9 \uff0c\u8fc7\u6444\u50cf\u673a\u4e2d\u5fc3\u5e73\u884c\u4e8e\u56fe\u50cf\u5e73\u9762\u7684\u5e73\u9762\u79f0\u4e3a\u6444\u50cf\u673a\u7684 \u4e3b\u5e73\u9762 \u3002 \u7528\u9f50\u6b21\u5750\u6807\u8868\u793a\u4e2d\u5fc3\u6295\u5f71\uff1a \\[ \\begin{bmatrix} X \\\\ Y \\\\ Z \\\\ 1 \\end{bmatrix} \\to \\begin{bmatrix} fX \\\\ fY \\\\ Z \\end{bmatrix} = \\begin{bmatrix} f & 0 & 0 & 0 \\\\ 0 & f & 0 & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} X \\\\ Y \\\\ Z \\\\ 1 \\end{bmatrix} \\\\ \\\\ \u4e0a\u5f0f\u4e5f\u53ef\u8868\u793a\u4e3a \\ \\ \\ \\mathbf{x}=P\\mathbf{X} \\ \\ \\ \u5176\u4e2d \\ \\mathbf{X}\u7528\u56db\u7ef4\u9f50\u6b21\u77e2\u91cf(X,Y,Z,1)^\\top \u8868\u793a \\ P = diag(f,f,1)[\\mathbf{I}|\\mathbf{0}] \\] \u4e3b\u70b9\u504f\u7f6e \u4e0a\u9762\u8ba8\u8bba\u7684\u56fe\u50cf\u5e73\u9762\u7684\u5750\u6807\u539f\u70b9\u5728\u4e3b\u70b9\u4e0a\uff0c\u4f46\u5b9e\u9645\u4e0a\u53ef\u80fd\u4e0d\u662f\uff0c\u4e00\u822c\u60c5\u5f62\u7684\u6620\u5c04\u4e3a \\((X,Y,Z)^\\top \\to (fX/Z+p_x,fY/Z+p_y)^\\top\\) \uff0c\u6839\u636e\u4e0a\u5f0f\u63a8\u5bfc\uff1a \\[ \\begin{bmatrix} X \\\\ Y \\\\ Z \\\\ 1 \\end{bmatrix} \\to \\begin{bmatrix} fX+Zp_x \\\\ fY+Zp_y \\\\ Z \\end{bmatrix} = \\begin{bmatrix} f & 0 & p_x & 0 \\\\ 0 & f & p_y & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} X \\\\ Y \\\\ Z \\\\ 1 \\\\ \\\\ \\end{bmatrix} \\] \u4ee4 \\(K = \\begin{bmatrix} f & 0 & p_x \\\\ 0 & f & p_y \\\\ 0 & 0 & 1 \\end{bmatrix}\\) , \u5219\u6709 \\(\\mathbf{x}=K[\\mathbf{I}|\\mathbf{0}]\\mathbf{X}_{cam}\\) \uff0c\u5176\u4e2d\u70b9 \\(\\mathbf{X}_{cam}\\) \u662f\u6444\u50cf\u673a\u5750\u6807\u7cfb\uff0c\u77e9\u9635 \\(K\\) \u79f0\u4e3a \u6444\u50cf\u673a\u6807\u5b9a\u77e9\u9635\uff08\u5185\u53c2\u77e9\u9635\uff09 \uff0c \\([\\mathbf{I}|\\mathbf{0}]\\) \u79f0\u4e3a \u5916\u53c2\u77e9\u9635 \u3002 \u6444\u50cf\u673a\u65cb\u8f6c\u4e0e\u4f4d\u79fb \\[ X_{cam}= \\begin{bmatrix} R & -R\\tilde{\\mathbf{C}} \\\\ \\mathbf{0}^\\top & 1 \\end{bmatrix} \\begin{bmatrix} X \\\\ Y \\\\ Z \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} R & -R\\tilde{\\mathbf{C}} \\\\ \\mathbf{0}^\\top & 1 \\end{bmatrix} \\mathbf{X} \\\\ \\mathbf{x}=KR[\\mathbf{I}|-\\tilde{\\mathbf{C}}]\\mathbf{X} \\] \u4e00\u822c\u7684\u9488\u5b54\u6444\u50cf\u673a \\(P=KR[\\mathbf{I}|-\\tilde{\\mathbf{C}}]\\) \u6709 9 \u4e2a\u81ea\u7531\u5ea6\uff1b3 \u4e2a\u6765\u81ea \\(K\\) \uff0c3 \u4e2a\u6765\u81ea \\(R\\) \uff0c3 \u4e2a\u6765\u81ea \\(\\tilde{\\mathbf{C}}\\) \u3002 \\(K\\) \u4e2d\u7684\u53c2\u6570\u79f0\u4e3a\u6444\u50cf\u673a \u5185\u90e8\u53c2\u6570 \u6216\u6444\u50cf\u673a\u7684 \u5185\u90e8\u6821\u51c6 \u3002 \\(R\\) \u548c \\(\\tilde{\\mathbf{C}}\\) \u5e76\u79f0\u4e3a \u5916\u90e8\u53c2\u6570 \u6216 \u5916\u90e8\u6821\u51c6 \u3002\u6444\u50cf\u673a\u77e9\u9635\u53ef\u7b80\u5316\u6210\uff1a \\[ \\mathbf{P}=K[R|\\mathbf{t}]\uff0c\u5176\u4e2d \\ \\mathbf{t}=-R\\tilde{\\mathbf{C}} \\]","title":"\u57fa\u672c\u9488\u5b54\u6a21\u578b"},{"location":"cv/mvg/camera-model/#ccd","text":"CCD \u6444\u50cf\u673a\u7684\u50cf\u7d20\u53ef\u80fd\u4e0d\u662f\u6b63\u65b9\u5f62\uff0c\u5982\u679c\u56fe\u50cf\u5750\u6807\u4ee5\u50cf\u7d20\u6765\u6d4b\u91cf\uff0c\u90a3\u4e48\u9700\u8981\u5728\u6bcf\u4e2a\u65b9\u5411\u4e0a\u5f15\u5165\u975e\u7b49\u91cf\u5c3a\u5ea6\u56e0\u5b50\u3002 \u4e00\u822c\u5f62\u5f0f\uff1a \\[ K= \\begin{bmatrix} \\alpha_x & 0 & x_0 \\\\ 0 & \\alpha_y & y_0 \\\\ 0 & 0 & 1 \\end{bmatrix} \\] \u5176\u4e2d \\(\\alpha_x=fm_x, \\alpha_y=fm_y,x_0=m_xp_x,y_0=m_yp_y\\) \u3002 \\(m_x,m_y\\) \u5206\u522b\u662f\u5728 x \u548c y \u65b9\u5411\u4e0a\u56fe\u50cf\u5750\u6807\u5355\u4f4d\u77e9\u9635\u7684\u50cf\u7d20\u6570\u3002 \u4e00\u4e2a CCD \u6444\u50cf\u673a\u6709 10 \u4e2a\u81ea\u7531\u5ea6\u3002","title":"CCD \u6444\u50cf\u673a"},{"location":"cv/mvg/camera-model/#_4","text":"\u8003\u8651\u5f62\u5982\u4e0b\u9762\u7684\u6807\u5b9a\u77e9\u9635\uff0c\u589e\u52a0\u7684\u53c2\u6570 s \u79f0\u4e3a \u626d\u66f2\u53c2\u6570 \uff0c\u5bf9\u5927\u591a\u6570\u6807\u51c6\u7684\u6444\u50cf\u673a\u6765\u8bf4\uff0c\u5176\u626d\u66f2\u53c2\u6570\u4e3a 0\u3002 \\[ K= \\begin{bmatrix} \\alpha_x & s & x_0 \\\\ 0 & \\alpha_y & y_0 \\\\ 0 & 0 & 1 \\end{bmatrix} \\] \u4e00\u4e2a\u6709\u9650\u5c04\u5f71\u6444\u50cf\u673a\u6709 11 \u4e2a\u81ea\u7531\u5ea6\u3002","title":"\u6709\u9650\u5c04\u5f71\u6444\u50cf\u673a"},{"location":"cv/mvg/camera-model/#_5","text":"","title":"\u5c04\u5f71\u6444\u50cf\u673a"},{"location":"cv/mvg/camera-model/#_6","text":"\u4e00\u822c\u5c04\u5f71\u6444\u50cf\u673a\u53ef\u4ee5\u6309 \\(P=[M|\\mathbf{p}_4]\\) \u5206\u5757\uff0c\u5176\u4e2d \\(M\\) \u662f \\(3 \\times 3\\) \u77e9\u9635\uff0c\u5982\u679c \\(M\\) \u662f\u975e\u5947\u5f02\u7684\uff0c\u90a3\u4e48\u5b83\u662f\u6709\u9650\u6444\u50cf\u673a\uff0c\u53cd\u4e4b\u5219\u4e0d\u7136 \u6444\u50cf\u673a\u4e2d\u5fc3 \uff1a\u6444\u50cf\u673a\u4e2d\u5fc3 \\(C\\) \u662f \\(P\\) \u7684\u4e00\u7ef4\u53f3\u96f6\u7a7a\u95f4\uff0c\u5373 \\(P \\mathbf{C}=\\mathbf{0}\\) \u6709\u9650\u6444\u50cf\u673a \uff08M\u975e\u5947\u5f02\uff09 \\(\\mathbf{C}=\\begin{bmatrix} -M^{-1}\\mathbf{p}_4 \\\\ 1 \\end{bmatrix}\\) \u65e0\u7a77\u8fdc\u6444\u50cf\u673a \uff08M\u5947\u5f02\uff09 \\(\\mathbf{C} = \\begin{bmatrix} \\mathbf{d} \\\\ 0 \\end{bmatrix}\\) \uff0c\u5176\u4e2d\uff0c \\(\\mathbf{d}\\) \u662f \\(M\\) \u7684 3 \u7ef4\u96f6\u77e2\u91cf\uff0c\u5373 \\(M \\mathbf{d}=\\mathbf{0}\\) \u5217\u70b9 \uff1a\u5bf9\u4e8e \\(i=1,..,3\\) \uff0c\u5217\u77e2\u91cf \\(\\mathbf{p}_i\\) \u5206\u522b\u5bf9\u5e94\u4e8e \\(X,Y,Z\\) \u8f74\u5728\u56fe\u50cf\u4e0a\u7684\u6d88\u5f71\u70b9\u3002\u5217 \\(\\mathbf{p}_4\\) \u662f\u5750\u6807\u539f\u70b9\u7684\u56fe\u50cf \u4e3b\u5e73\u9762 \uff1a\u6444\u50cf\u673a\u7684\u4e3b\u5e73\u9762\u662f \\(P\\) \u7684\u6700\u540e\u4e00\u884c \\(\\mathbf{P}^3\\) \u8f74\u5e73\u9762 \uff1a\u5e73\u9762 \\(\\mathbf{P}^1\\) \u548c \\(\\mathbf{P}^2\\) \uff08 \\(P\\) \u7684\u7b2c\u4e00\u548c\u7b2c\u4e8c\u884c\uff09\u8868\u793a\u7a7a\u95f4\u4e2d\u8fc7\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u5e73\u9762\uff0c\u5206\u522b\u5bf9\u5e94\u4e8e\u6620\u5c04\u5230\u56fe\u50cf\u4e0a\u76f4\u7ebf \\(x=0\\) \u548c \\(y=0\\) \u7684\u70b9 \u4e3b\u70b9 \uff1a\u56fe\u50cf\u70b9 \\(\\mathbf{x}_0=M\\mathbf{m}^3\\) \u662f\u6444\u50cf\u673a\u7684\u4e3b\u70b9\uff0c\u5176\u4e2d \\(\\mathbf{m}^{3\\top}\\) \u662f \\(M\\) \u7684\u7b2c\u4e09\u884c \u4e3b\u5c04\u7ebf \uff1a\u6444\u50cf\u673a\u7684\u4e3b\u5c04\u7ebf\uff08\u4e3b\u8f74\uff09\u662f\u8fc7\u6444\u50cf\u673a\u4e2d\u5fc3 \\(\\mathbf{C}\\) \u800c\u65b9\u5411\u77e2\u91cf\u4e3a \\(\\mathbf{m}^{3\\top}\\) \u7684\u5c04\u7ebf\u3002\u4e3b\u8f74\u77e2\u91cf \\(\\mathbf{v}=\\det(M)\\mathbf{m}^3\\) \u6307\u5411\u6444\u50cf\u673a\u7684\u524d\u65b9","title":"\u6444\u50cf\u673a\u6784\u9020"},{"location":"cv/mvg/camera-model/#_7","text":"\u6b63\u5411\u6295\u5f71 \uff1a\u5728\u65e0\u7a77\u8fdc\u5e73\u9762\u4e0a\u7684\u70b9 \\(\\mathbf{D}=(\\mathbf{d}^\\top,\\mathbf{0})^\\top\\) \u8868\u793a\u6d88\u5f71\u70b9\uff0c\u8fd9\u4e9b\u70b9\u6620\u5c04\u5230 \\(\\mathbf{x}=P\\mathbf{D}=[M|\\mathbf{p}_4]=M\\mathbf{d}\\) \u70b9\u5230\u5c04\u5f71\u7684\u53cd\u5411\u6295\u5f71 \uff1a \u7ed9\u5b9a\u56fe\u50cf\u4e2d\u7684\u4e00\u4e2a\u70b9 \\(\\mathbf{x}\\) \u6765\u786e\u5b9a\u662f\u7a7a\u95f4\u7684\u90a3\u4e9b\u70b9\u88ab\u6620\u5c04\u5230\u8be5\u70b9\u3002\u8fd9\u4e9b\u70b9\u4ea4\u7ec4\u6210\u8fc7\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u4e00\u6761\u7a7a\u95f4\u5c04\u7ebf\uff1a \\(\\mathbf{X}(\\lambda)=P^+\\mathbf{x}+\\lambda\\mathbf{C}\\) \u5176\u4e2d \\(P^+\\) \u662f \\(P\\) \u7684\u4f2a\u9006\u3002 \\(P^+=P^\\top(PP^\\top)^{-1}\\) \u5e76\u4e14 \\(PP^+=I\\) \u4e00\u4e2a\u56fe\u50cf\u70b9 \\(\\mathbf{x}\\) \u53cd\u5411\u6295\u5f71\u7684\u5c04\u7ebf\u4ea4\u65e0\u7a77\u8fdc\u5e73\u9762\u4e8e\u70b9 \\(\\mathbf{D}=((M^{-1}\\mathbf{x})^\\top, 0)^\\top\\) \u3002\u5c06\u5c04\u7ebf\u5199\u6210\u5176\u4e0e\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u4e24\u70b9\u7684\u8fde\u63a5: \\[ \\mathbf{X}(\\mu)=\\mu\\begin{bmatrix}M^{-1}\\mathbf{x}\\\\0\\end{bmatrix}+ \\begin{bmatrix}-M^{-1}\\mathbf{p}_4\\\\1\\end{bmatrix}= \\begin{bmatrix}M^{-1}(\\mu\\mathbf{x}-\\mathbf{p}_4)\\\\1\\end{bmatrix} \\]","title":"\u5c04\u5f71\u6444\u50cf\u673a\u5bf9\u70b9\u7684\u4f5c\u7528"},{"location":"cv/mvg/camera-model/#_8","text":"\u4ee4 \\(\\mathbf{X}=(X,Y,Z,T)^\\top\\) \u662f\u4e00\u4e2a 3D \u70b9\u800c \\(P=[M|\\mathbf{p}_4]\\) \u662f\u4e00\u4e2a\u6709\u9650\u6444\u50cf\u673a\u7684\u6444\u50cf\u673a\u77e9\u9635\uff0c\u5047\u5b9a \\(P(X,Y,Z,T)^\\top=w(x,y,1)^\\top\\) \uff0c\u90a3\u4e48 \\(depth(\\mathbf{X};P)=\\frac{sign(\\det M)w}{T\\parallel \\mathbf{m}^3 \\parallel}\\) \u662f\u5728\u6444\u50cf\u673a\u4e3b\u5e73\u9762\u524d\u65b9\u7684\u70b9 \\(\\mathbf{X}\\) \u7684\u6df1\u5ea6","title":"\u70b9\u7684\u6df1\u5ea6"},{"location":"cv/mvg/camera-model/#_9","text":"\u6c42\u6444\u50cf\u673a\u4e2d\u5fc3 \uff1a\u4e2d\u5fc3 \\(\\mathbf{C}=(X,Y,Z,T)^\\top\\) \uff0c\u5176\u4e2d \\(X=\\det([\\mathbf{p}_2, \\mathbf{p}_3, \\mathbf{p}_4])\\) \\(Y=-\\det([\\mathbf{p}_1, \\mathbf{p}_3, \\mathbf{p}_4])\\) \\(Z=\\det([\\mathbf{p}_1, \\mathbf{p}_2, \\mathbf{p}_4])\\) \\(T=-\\det([\\mathbf{p}_1, \\mathbf{p}_2, \\mathbf{p}_3])\\) \u6c42\u6444\u50cf\u673a\u5b9a\u5411\u548c\u5185\u90e8\u53c2\u6570 \uff1a\u5728\u6709\u9650\u6444\u50cf\u673a\u7684\u60c5\u5f62\uff1a \\[ P=[M|-M\\tilde{\\mathbf{C}}]=K[R|-R\\tilde{\\mathbf{C}}] \\\\ K= \\begin{bmatrix} \\alpha_x & s & x_0 \\\\ 0 & \\alpha_y & y_0 \\\\ 0 & 0 & 1 \\end{bmatrix} \\] \\(\\alpha_x\\) \u662f \\(x-\\) \u5750\u6807\u65b9\u5411\u7684\u6bd4\u4f8b\u56e0\u5b50 \\(\\alpha_y\\) \u662f \\(y-\\) \u5750\u6807\u65b9\u5411\u7684\u6bd4\u4f8b\u56e0\u5b50 \\(s\\) \u662f\u626d\u66f2\u53c2\u6570 \\((x_0,y_0)^\\top\\) \u662f\u4e3b\u70b9\u7684\u5750\u6807 \u50cf\u7d20\u957f\u5bbd\u6bd4 \\(\\alpha_x/\\alpha_y\\)","title":"\u6444\u50cf\u673a\u77e9\u9635\u7684\u5206\u89e3"},{"location":"cv/mvg/camera-model/#_10","text":"\u65e0\u7a77\u8fdc\u6444\u50cf\u673a\u662f\u4e2d\u5fc3\u5728\u65e0\u7a77\u8fdc\u5e73\u9762\u4e0a\u7684\u6444\u50cf\u673a\u3002\u65e0\u7a77\u9009\u6444\u50cf\u673a\u53ef\u4ee5\u5206\u4e3a \u4eff\u5c04\u6444\u50cf\u673a \u548c \u975e\u4eff\u5c04\u6444\u50cf\u673a","title":"\u65e0\u7a77\u8fdc\u6444\u50cf\u673a"},{"location":"cv/mvg/camera-model/#_11","text":"\u4eff\u5c04\u6444\u50cf\u673a\u662f\u77e9\u9635 \\(P\\) \u7684\u6700\u540e\u4e00\u884c \\(P^{3\\top}\\) \u5f62\u5982 \\((0,0,0,1)\\) \u7684\u6444\u50cf\u673a \u5bf9\u4e8e\u6709\u9650\u5c04\u5f71\u6444\u50cf\u673a\uff1a \\[ P_0=KR[I|-\\tilde{\\mathbf{C}}]=K \\begin{bmatrix} \\mathbf{r}^{1\\top}-\\mathbf{r}^{1\\top}\\tilde{\\mathbf{C}} \\\\ \\mathbf{r}^{2\\top}-\\mathbf{r}^{2\\top}\\tilde{\\mathbf{C}} \\\\ \\mathbf{r}^{3\\top}-\\mathbf{r}^{3\\top}\\tilde{\\mathbf{C}} \\end{bmatrix} \\] \u5176\u4e2d \\(\\mathbf{r}^{i\\top}\\) \u662f\u65cb\u8f6c\u77e9\u9635\u7684\u7b2c i \u884c\u3002\u800c\u6570\u503c\u7684 \\(d_0=-\\mathbf{r}^{3\\top}\\tilde{\\mathbf{C}}\\) \u662f\u4e16\u754c\u539f\u70b9\u5230\u6444\u50cf\u673a\u4e2d\u5fc3\u5728\u4e3b\u5c04\u7ebf\u65b9\u5411\u4e0a\u7684\u8ddd\u79bb \u6cbf\u4e3b\u5c04\u7ebf\u8ddf\u8e2a\u7684\u6548\u679c\u662f\u5c06\u77e9\u9635\u7684 \\((3,4)\\) \u5143\u7d20\u7528\u4e16\u754c\u539f\u70b9\u5230\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u6df1\u5ea6 \\(d_t\\) \u66ff\u4ee3 \u5047\u5b9a\u4f7f\u56fe\u50cf\u5927\u5c0f\u4fdd\u6301\u4e0d\u53d8\u7684\u653e\u5927\u56e0\u5b50\u662f \\(k=d_t/d_0\\) \uff0c\u5728\u65f6\u95f4 \\(t\\) \u6240\u4ea7\u751f\u7684\u6444\u50cf\u673a\u77e9\u9635\u662f\uff1a \\[ P_t=K \\begin{bmatrix} d_t/d_0 & & \\\\ & d_t/d_0 & \\\\ & & 1 \\end{bmatrix} \\begin{bmatrix} \\mathbf{r}^{1\\top}&-\\mathbf{r}^{1\\top}\\tilde{\\mathbf{C}} \\\\ \\mathbf{r}^{2\\top}&-\\mathbf{r}^{2\\top}\\tilde{\\mathbf{C}} \\\\ \\mathbf{r}^{3\\top}&d_t \\end{bmatrix}= \\frac{d_t}{d_0}K \\begin{bmatrix} \\mathbf{r}^{1\\top}&-\\mathbf{r}^{1\\top}\\tilde{\\mathbf{C}} \\\\ \\mathbf{r}^{2\\top}&-\\mathbf{r}^{2\\top}\\tilde{\\mathbf{C}} \\\\ \\mathbf{r}^{3\\top}d_0/d_t&d_0 \\end{bmatrix} \\] \u56e0\u5b50 \\(d_t/d_0\\) \u53ef\u4ee5\u5ffd\u7565\uff0c\u5f53 \\(d_t\\) \u8d8b\u5411\u65e0\u7a77\u5927\u65f6\uff0c\u8be5\u77e9\u9635\u53d8\u6210 \\[ P_\\infty=\\lim_{t \\to \\infty}P_t=K \\begin{bmatrix} \\mathbf{r}^{1\\top}&-\\mathbf{r}^{1\\top}\\tilde{\\mathbf{C}} \\\\ \\mathbf{r}^{2\\top}&-\\mathbf{r}^{2\\top}\\tilde{\\mathbf{C}} \\\\ \\mathbf{0}^\\top&d_0 \\end{bmatrix} \\]","title":"\u4eff\u5c04\u6444\u50cf\u673a"},{"location":"cv/mvg/camera-model/#_12","text":"\u5728\u8fc7\u4e16\u754c\u539f\u70b9\u5e76\u5782\u76f4\u5b50\u4e3b\u8f74\u65b9\u5411\u7684\u5e73\u9762\u4e0a\u7684\u4efb\u4f55\u70b9\u7684\u56fe\u50cf\u5728\u8fd9\u79cd\u53d8\u7126\u548c\u8fd0\u52a8\u7684\u590d\u5408\u4f5c\u7528\u4e0b\u4fdd\u6301\u4e0d\u53d8\u3002\u8fd9\u6837\u7684\u4e00\u4e2a\u70b9\u53ef\u4ee5\u8bb0\u4e3a \\(\\mathbf{X}=\\begin{bmatrix} \\alpha \\mathbf{r}^1+\\beta \\mathbf{r}^2 \\\\ 1\\end{bmatrix}\\) \uff0c\u56e0\u4e3a \\(\\mathbf{r}^{3\\top}(\\alpha \\mathbf{r}^1+\\beta \\mathbf{r}^2)=0\\) \uff0c\u5373 \\(P_0\\mathbf{X}=P_t\\mathbf{X}=P_\\infty\\mathbf{X}\\) \u5bf9\u6240\u6709 \\(t\\) \u6210\u7acb \u5bf9\u4e0d\u5728\u8be5\u5e73\u9762\u4e0a\u7684\u70b9\uff0c\u8bbe\u4e00\u70b9 \\(\\mathbf{X}\\) \u79bb\u8be5\u5e73\u9762\u7684\u5782\u76f4\u8ddd\u79bb\u662f \\(\\Delta\\) \u8fd9\u4e2a 3D \u70b9\u53ef\u4ee5\u8868\u793a\u6210 \\[\\mathbf{X}=\\begin{bmatrix} \\alpha \\mathbf{r}^1+\\beta \\mathbf{r}^2 + \\Delta\\mathbf{r}^3 \\\\ 1\\end{bmatrix}\\] \u5e76\u5206\u522b\u88ab\u6444\u50cf\u673a \\(P_0\\) \u548c \\(P_\\infty\\) \u5f71\u50cf\u5230 \\[ \\mathbf{x}_{proj}=P_0\\mathbf{X}=K\\begin{bmatrix} \\tilde{x} \\\\ \\tilde{y} \\\\ d_0+\\Delta \\end{bmatrix} \\ \\ \\ \\mathbf{x}_{affine}=P_\\infty\\mathbf{X}=K\\begin{bmatrix} \\tilde{x} \\\\ \\tilde{y} \\\\ d_0 \\end{bmatrix} \\] \u5176\u4e2d \\(\\tilde{x}=\\alpha-\\mathbf{r}^{1\\top}\\tilde{\\mathbf{C}},\\tilde{y}=\\beta-\\mathbf{r}^{2\\top}\\tilde{\\mathbf{C}}\\) \uff0c\u8bb0\u6807\u5b9a\u77e9\u9635\u4e3a\uff1a \\[ K=\\begin{bmatrix} K_{2 \\times 2} & \\tilde{\\mathbf{x}}_0 \\\\ \\tilde{\\mathbf{0}}^\\top & 1 \\end{bmatrix} \\] \u56e0\u6b64\u4e24\u70b9\u4e4b\u95f4\u7684\u5173\u7cfb\u662f \\[ \\tilde{\\mathbf{x}}_{affine}-\\tilde{\\mathbf{x}}_0= \\frac{d_0+\\Delta}{d_0}(\\tilde{\\mathbf{x}}_{proj}-\\tilde{\\mathbf{x}}_0) \\] \u7528 \\(P_\\infty\\) \u4eff\u5c04\u8fd1\u4f3c\u771f\u5b9e\u6444\u50cf\u673a\u77e9\u9635 \\(P_0\\) \u7684\u6548\u5e94\u662f\u628a\u70b9 \\(\\mathbf{X}\\) \u7684\u56fe\u50cf\u5f84\u5411\u5730\u9760\u8fd1\u6216\u79bb\u5f00\u4e3b\u70b9 \\(\\tilde{\\mathbf{x}}_0\\) \uff0c\u5176\u52a0\u6743\u56e0\u5b50\u662f \\((d_0+\\Delta)/d_0=1+\\Delta/d_0\\) \u4eff\u5c04\u5f71\u50cf\u6761\u4ef6 \\[ \\tilde{\\mathbf{x}}_{affine}-\\tilde{\\mathbf{x}}_{proj}=\\frac{\\Delta}{d_0}(\\tilde{\\mathbf{x}}_{proj}-\\tilde{\\mathbf{x}}_0) \\] \u6df1\u5ea6\u7684\u8d77\u4f0f( \\(\\Delta\\) )\u76f8\u5bf9\u5e73\u5747\u6df1\u5ea6( \\(d_0\\) )\u8f83\u5c0f \u70b9\u79bb\u4e3b\u8f74\u7684\u8ddd\u79bb\u8f83\u5c0f","title":"\u5e94\u7528\u4eff\u5c04\u6444\u50cf\u673a\u7684\u8bef\u5dee"},{"location":"cv/mvg/camera-model/#p_infty","text":"\u6444\u50cf\u673a\u77e9\u9635 \uff1a \\[ P_\\infty= \\begin{bmatrix} K_{2 \\times 2} & \\hat{\\mathbf{0}} \\\\ \\hat{\\mathbf{0}}^\\top & 1 \\end{bmatrix} \\begin{bmatrix} \\hat{R} & \\hat{\\mathbf{t}} \\\\ \\mathbf{0}^\\top & 1 \\end{bmatrix}= \\begin{bmatrix} K_{2 \\times 2} & \\tilde{\\mathbf{x}}_0 \\\\ \\hat{\\mathbf{0}}^\\top & 1 \\end{bmatrix} \\begin{bmatrix} \\hat{R} & \\hat{\\mathbf{0}} \\\\ \\mathbf{0}^\\top & 1 \\end{bmatrix} \\] \u5e73\u884c\u6295\u5f71 \u5e73\u884c\u6295\u5f71\u77e9\u9635 \\(\\begin{bmatrix} 1&0&0&0\\\\0&1&0&0\\\\0&0&0&1 \\end{bmatrix}\\) \u4ee3\u66ff\u79bb\u6709\u9650\u6444\u50cf\u673a\u7684\u89c4\u8303\u5c04\u5f71\u77e9\u9635 \\([\\mathbf{I}|\\mathbf{0}]\\) \u6807\u5b9a\u77e9\u9635 \\(\\begin{bmatrix}K_{2 \\times 2} & \\hat{\\mathbf{0}} \\\\\\hat{\\mathbf{0}}^\\top & 1\\end{bmatrix}\\) \u4ee3\u66ff\u4e86\u6709\u9650\u6444\u50cf\u673a\u7684 \\(K\\) \u4e3b\u70b9\u65e0\u5b9a\u4e49","title":"\\(P_\\infty\\) \u7684\u5206\u89e3"},{"location":"cv/mvg/camera-model/#_13","text":"\u6b63\u6295\u5f71 \uff1a\u6b63\u6295\u5f71\u6444\u50cf\u673a\u6709 5 \u4e2a\u81ea\u7531\u5ea6\uff0c\u5373\u63cf\u8ff0\u65cb\u8f6c\u77e9\u9635 \\(R\\) \u7684\u4e09\u4e2a\u53c2\u6570\uff0c\u52a0\u4e0a\u4e24\u4e2a\u504f\u7f6e\u53c2\u6570 \\(t_1\\) \u548c \\(t_2\\) \\[ P= \\begin{bmatrix} \\mathbf{r}^{1\\top} & t_1 \\\\ \\mathbf{r}^{2\\top} & t_2 \\\\ \\mathbf{0}^\\top & 1 \\end{bmatrix} \\] \u7f29\u653e\u6b63\u6295\u5f71 \uff1a\u7f29\u653e\u6b63\u6295\u5f71\u662f\u6b63\u6295\u5f71\u7d27\u63a5\u4e00\u4e2a\u5747\u5300\u7f29\u653e\uff0c\u6709 6 \u4e2a\u81ea\u7531\u5ea6 \\[ P= \\begin{bmatrix} \\mathbf{r}^{1\\top} & t_1 \\\\ \\mathbf{r}^{2\\top} & t_2 \\\\ \\mathbf{0}^\\top & 1/k \\end{bmatrix} \\] \u5f31\u900f\u89c6\u6295\u5f71 \uff1a\u4e0e\u6709\u9650 CCD \u6444\u50cf\u673a\u7c7b\u4f3c\uff0c\u8003\u8651\u4e24\u6839\u56fe\u50cf\u8f74\u7f29\u653e\u56e0\u5b50\u4e0d\u4e00\u6837\u7684\u65e0\u7a77\u8fdc\u6444\u50cf\u673a\uff0c\u6709 7 \u4e2a\u81ea\u7531\u5ea6 \\[ P= \\begin{bmatrix} \\alpha_x & & \\\\ & \\alpha_y & \\\\ & & 1 \\end{bmatrix} \\begin{bmatrix} \\mathbf{r}^{1\\top} & t_1 \\\\ \\mathbf{r}^{2\\top} & t_2 \\\\ \\mathbf{0}^\\top & 1 \\end{bmatrix} \\] \u4eff\u5c04\u6444\u50cf\u673a \\(P_A\\) \uff1a\u5982 \\(P_\\infty\\) \u4e00\u6837\uff0c\u53ef\u4ee5\u8ba4\u4e3a\u662f\u6709\u9650\u5c04\u5f71\u6444\u50cf\u673a\u7684\u5e73\u884c\u6295\u5f71\uff0c\u6709 8 \u4e2a\u81ea\u7531\u5ea6 \\[ P_A= \\begin{bmatrix} \\alpha_x & s & \\\\ & \\alpha_y & \\\\ & & 1 \\end{bmatrix} \\begin{bmatrix} \\mathbf{r}^{1\\top} & t_1 \\\\ \\mathbf{r}^{2\\top} & t_2 \\\\ \\mathbf{0}^\\top & 1 \\end{bmatrix} \\]","title":"\u4eff\u5c04\u6444\u50cf\u673a\u7684\u5c42\u6b21"},{"location":"cv/mvg/camera-model/#_14","text":"\u4e3b\u5e73\u9762\u662f\u65e0\u7a77\u8fdc\u5e73\u9762\u7684\u4efb\u4f55\u5c04\u5f71\u6444\u50cf\u673a\u77e9\u9635\u662f\u4eff\u5c04\u6444\u50cf\u673a\u77e9\u9635 \u5e73\u884c\u7684\u4e16\u754c\u76f4\u7ebf\u88ab\u6295\u5f71\u6210\u5e73\u884c\u7684\u56fe\u50cf\u76f4\u7ebf \u6ee1\u8db3 \\(M_{2 \\times 3} \\mathbf{d}=\\mathbf{0}\\) \u7684\u77e2\u91cf \\(\\mathbf{d}\\) \u662f\u5e73\u884c\u6295\u5f71\u7684\u65b9\u5411\uff0c\u800c \\((\\mathbf{d}^\\top,0)^\\top\\) \u662f\u6444\u50cf\u673a\u4e2d\u5fc3\uff0c\u56e0\u4e3a \\(P_A\\begin{bmatrix} \\mathbf{d} \\\\ 0 \\end{bmatrix}=\\mathbf{0}\\)","title":"\u4eff\u5c04\u6444\u50cf\u673a\u7684\u5176\u4ed6\u6027\u8d28"},{"location":"cv/mvg/camera-model/#_15","text":"\u4eff\u5c04\u6444\u50cf\u673a \u975e\u4eff\u5c04\u6444\u50cf\u673a \u6444\u50cf\u673a\u4e2d\u5fc3\u5728 \\(\\pi_\\infty\\) \u4e0a \u662f \u662f \u4e3b\u5e73\u9762\u662f \\(\\pi_\\infty\\) \u662f \u4e0d\u662f \\(\\pi_\\infty\\) \u7684\u70b9\u7684\u56fe\u50cf\u5728 \\(\\mathbf{l}_\\infty\\) \u4e0a \u662f \u4e00\u822c\u4e0d\u662f","title":"\u4e00\u822c\u65e0\u7a77\u8fdc\u6444\u50cf\u673a"},{"location":"cv/mvg/camera-model/#_16","text":"\u63a8\u626b\u5f0f\u6444\u50cf\u673a \u7ebf\u9635\u6444\u50cf\u673a","title":"\u5176\u4ed6\u6444\u50cf\u673a\u6a21\u578b"},{"location":"cv/mvg/est2d/","text":"\u4f30\u8ba1\u2014\u20142D \u5c04\u5f71\u53d8\u6362 \u00b6 \u7ea6 6196 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 21 \u5206\u949f Abstract \u672c\u7ae0\u4e3b\u8981\u8ba8\u8bba\u4f30\u8ba1\u95ee\u9898\uff0c\u4f30\u8ba1\u7684\u542b\u4e49\u662f\u6307\u5728\u67d0\u4e9b\u672c\u8d28\u6d4b\u91cf\u7684\u57fa\u7840\u4e0a\u8ba1\u7b97\u67d0\u4e2a\u53d8\u6362\u6216\u5176\u5b83\u6570\u5b66\u91cf\uff0c\u5e38\u89c1\u7684\u4f30\u8ba1\u95ee\u9898\u7684\u7c7b\u578b\u6709\uff1a 2D \u5355\u5e94 \uff1a\u7ed9\u5b9a \\(IP^2\\) \u4e2d\u7684\u70b9\u96c6 \\(\\mathbf{x}_i\\) \uff0c\u548c\u540c\u5728 \\(IP^2\\) \u4e2d\u7684\u5bf9\u5e94\u70b9\u96c6 \\(\\mathbf{x}_i^\\prime\\) \uff0c\u8ba1\u7b97\u628a\u6bcf\u4e00\u70b9 \\(\\mathbf{x}_i\\) \u6620\u5c04\u5230\u5bf9\u5e94\u70b9 \\(\\mathbf{x}_i^\\prime\\) \u7684\u5c04\u5f71\u53d8\u6362\u3002 3D \u5230 2D \u7684\u6444\u50cf\u673a\u6295\u5f71 \uff1a\u7ed9\u5b9a 3D \u7a7a\u95f4\u7684\u70b9\u96c6 \\(X_i\\) \u4ee5\u53ca\u4e00\u5e45\u56fe\u50cf\u4e0a\u7684\u5bf9\u5e94\u70b9\u96c6 \\(\\mathbf{x}_i\\) \uff0c\u6c42\u628a \\(X_i\\) \u6620\u5c04\u5230 \\(\\mathbf{x}_i\\) \u7684 3D \u5230 2D \u7684\u5c04\u5f71\u6620\u5c04\u3002 \u57fa\u672c\u77e9\u9635\u7684\u8ba1\u7b97 \uff1a\u7ed9\u5b9a\u4e00\u5e45\u56fe\u50cf\u4e0a\u7684\u70b9\u96c6 \\(\\mathbf{x}_i\\) \uff0c\u548c\u53e6\u4e00\u5e45\u56fe\u50cf\u4e0a\u7684\u5bf9\u5e94\u70b9\u96c6 \\(\\mathbf{x}_i^\\prime\\) \uff0c\u8ba1\u7b97\u4e0e\u8fd9\u4e9b\u5bf9\u5e94\u4e00\u76f4\u7684 \u57fa\u672c\u77e9\u9635 \\(F\\) \u3002 \u4e09\u7126\u70b9\u5f20\u91cf\u8ba1\u7b97 \uff1a\u7ed9\u5b9a\u8de8\u4e09\u5e45\u56fe\u50cf\u7684\u70b9\u5bf9\u5e94 \\(\\mathbf{x}_i \\leftrightarrow \\mathbf{x}_i^\\prime \\leftrightarrow \\mathbf{x}_i^{\\prime \\prime}\\) \uff0c\u8ba1\u7b97\u4e09\u7126\u70b9\u5f20\u91cf\u3002 \u7814\u7a76\u4e24\u5e45\u56fe\u50cf\u4e4b\u95f4\u5bf9\u5e94\u70b9\u7684\u96c6\u5408 \\(\\mathbf{x}_i \\leftrightarrow \\mathbf{x}_i^\\prime\\) \uff0c\u8ba1\u7b97\u5bf9\u6240\u6709\u7684 i \u90fd\u6ee1\u8db3 \\(H\\mathbf{x}_i=\\mathbf{x}_i^\\prime\\) \u7684\u4e00\u4e2a \\(3 \\times 3\\) \u77e9\u9635 H\uff1a \u6d4b\u91cf\u6570 \uff1a\u77e9\u9635 H \u6709 9 \u4e2a\u5143\u7d20\uff0c\u4f46\u4ec5\u786e\u5b9a\u5230\u76f8\u5dee\u4e00\u4e2a\u5c3a\u5ea6\u56e0\u5b50\u3002\u56e0\u6b64\uff0c2D \u5c04\u5f71\u53d8\u6362\u7684\u81ea\u7531\u5ea6\u7684\u603b\u6570\u662f 8\u3002\u56e0\u4e3a\u4e00\u4e2a 2D \u70b9\u6709\u4e24\u4e2a\u81ea\u7531\u5ea6\uff0c\u6240\u4ee5\u4e3a\u4e86\u5b8c\u5168\u7ea6\u675f H\uff0c\u9700\u8981\u6307\u5b9a\u56db\u7ec4\u70b9\u5bf9\u5e94\u3002 \u8fd1\u4f3c\u89e3 \uff1a\u5982\u679c\u7ed9\u5b9a\u56db\u7ec4\u5bf9\u5e94\uff0c\u90a3\u4e48\u53ef\u4ee5\u5f97\u5230\u77e9\u9635 H \u7684\u7cbe\u786e\u89e3\u8fd9\u79cd\u89e3\u79f0\u4e3a \u6700\u5c0f\u914d\u7f6e\u89e3 \u3002\u5982\u679c\u7ed9\u5b9a\u591a\u4e8e\u56db\u7ec4\u7684\u5bf9\u5e94\uff0c\u90a3\u4e48\u8fd9\u4e9b\u5bf9\u5e94\u53ef\u80fd\u4e0d\u4e0e\u4efb\u4f55\u5c04\u5f71\u53d8\u6362\u5b8c\u5168\u76f8\u5bb9\uff0c\u56e0\u800c\u6211\u4eec\u9762\u4e34\u7684\u4efb\u52a1\u662f\u6309\u7ed9\u5b9a\u7684\u6570\u636e\u786e\u5b9a\u201c\u6700\u597d\u201d\u7684\u53d8\u6362\u3002\u901a\u5e38\u8fd9\u4e2a\u4efb\u52a1\u662f\u901a\u8fc7\u5bfb\u627e\u6700\u5c0f\u5316\u67d0\u4e2a\u4ee3\u4ef7\u51fd\u6570\u7684\u53d8\u6362 H \u6765\u5b8c\u6210\u3002 \u9ec4\u91d1\u6807\u51c6\u7b97\u6cd5 \uff1a\u901a\u5e38\u5b58\u5728\u4e00\u79cd\u6700\u4f18\u7684\u4ee3\u4ef7\u51fd\u6570\uff0c\u5176\u6700\u4f18\u7684\u542b\u4e49\u662f\u5728\u4e00\u5b9a\u5047\u8bbe\u4e0b\uff0c\u4f7f\u4ee3\u4ef7\u51fd\u6570\u53d6\u6700\u5c0f\u503c\u7684 H \u662f\u53d8\u6362\u7684\u6700\u597d\u4f30\u8ba1\u3002\u8ba1\u7b97\u8be5\u4ee3\u4ef7\u51fd\u6570\u6700\u5c0f\u503c\u7684\u7b97\u6cd5\u79f0\u4e3a\u201c\u9ec4\u91d1\u6807\u51c6\u201d\u7b97\u6cd5\u3002 \u76f4\u63a5\u7ebf\u6027\u53d8\u6362\uff08DLT\uff09\u7b97\u6cd5 \u00b6 \u9996\u5148\u8ba8\u8bba\u7531\u7ed9\u5b9a 2D \u5230 2D\u7684\u56db\u7ec4\u70b9\u5bf9\u5e94 \\(\\mathbf{x}_i \\leftrightarrow \\mathbf{x}_i^\\prime\\) \u786e\u5b9a H \u7684\u4e00\u79cd\u7b80\u5355\u7684\u7ebf\u6027\u7b97\u6cd5\uff0c\u53d8\u6362\u7531 \\(\\mathbf{x}_i^\\prime = H\\mathbf{x}_i\\) \u7ed9\u51fa\u3002\u4f46\u56e0\u4e3a\u8fd9\u662f\u4e00\u4e2a\u9f50\u6b21\u77e2\u91cf\u65b9\u7a0b\uff0c\u56e0\u6b64 3 \u7ef4\u77e2\u91cf \\(\\mathbf{x}_i^\\prime\\) \u548c \\(H\\mathbf{x}_i\\) \u4e0d\u76f8\u7b49\u3002\u53ef\u4ee5\u7528\u77e2\u91cf\u53c9\u4e58\uff1a \\(\\mathbf{x}_i^\\prime \\times H\\mathbf{x}_i=\\mathbf{0}\\) \u8868\u793a\u3002 \u5982\u679c\u5c06\u77e9\u9635 H \u7684\u7b2c j \u884c\u8bb0\u4e3a \\(h^{j\\top},\\mathbf{x}_i^\\prime=(x_i^\\prime, y_i^\\prime, w_i^\\prime)^\\top\\) \uff0c\u5219 \\(\\mathbf{x}_i^\\prime \\times H \\mathbf{x}_i=0\\) \u53ef\u4ee5\u8f6c\u6362\u6210\uff1a \\[ \\begin{bmatrix} \\mathbf{0}^\\top & -w_i^\\prime\\mathbf{x}_i^\\top & y_i^\\prime \\mathbf{x}_i^\\top \\\\ w_i^\\prime\\mathbf{x}_i^\\top & \\mathbf{0}^\\top & -x_i^\\prime\\mathbf{x}_i^\\top \\\\ -y_i^\\prime \\mathbf{x}_i^\\top & x_i^\\prime\\mathbf{x}_i^\\top & \\mathbf{0}^\\top \\end{bmatrix} \\begin{bmatrix} \\mathbf{h}^1 \\\\ \\mathbf{h}^2 \\\\ \\mathbf{h}^3 \\end{bmatrix} =\\mathbf{0} \\] h \u662f\u7531\u77e9\u9635 H \u7684\u5143\u7d20\u7ec4\u6210\u7684 0 \u7ef4\u77e2\u91cf\uff1a \\[ \\mathbf{h}= \\begin{bmatrix} \\mathbf{h}^1 \\\\ \\mathbf{h}^2 \\\\ \\mathbf{h}^3 \\end{bmatrix} , \\ \\ \\ H= \\begin{bmatrix} h_1 & h_2 & h_3 \\\\ h_4 & h_5 & h_6 \\\\ h_7 & h_8 & h_9 \\end{bmatrix} \\] \\(A_i\\mathbf{h}=\\mathbf{0}\\) \u662f\u672a\u77e5\u77e2\u91cf \\(\\mathbf{h}\\) \u7684\u7ebf\u6027\u65b9\u7a0b\uff0c\u77e9\u9635 \\(A_i\\) \u7684\u5143\u7d20\u662f\u5df2\u77e5\u70b9\u7684\u5750\u6807\u7684\u4e8c\u6b21\u591a\u9879\u5f0f\u3002 \u867d\u7136\u5f0f\u4e2d\u6709\u4e09\u4e2a\u65b9\u7a0b\uff0c\u4f46\u4ec5\u6709\u4e24\u4e2a\u662f\u7ebf\u6027\u72ec\u7acb\u7684\u3002\u5728\u89e3 H \u65f6\u5e38\u7701\u53bb\u7b2c\u4e09\u4e2a\u7b49\u5f0f\u3002 \u8be5\u65b9\u7a0b\u7ec4\u5bf9 \\(\\mathbf{x}_i^\\prime\\) \u7684\u4efb\u4f55\u9f50\u6b21\u5750\u6807 \\((x_i^\\prime, y_i^\\prime, w_i^\\prime)^\\top\\) \u6210\u7acb\u3002 \u6c42\u89e3 H \uff1a\u6bcf\u7ec4\u70b9\u5bf9\u5e94\u7ed9\u51fa\u5173\u4e8e H \u5143\u7d20\u7684\u4e24\u4e2a\u72ec\u7acb\u7684\u65b9\u7a0b\u3002\u7ed9\u5b9a\u56db\u7ec4\u8fd9\u6837\u7684\u70b9\u5bf9\u5e94\uff0c\u4fbf\u83b7\u5f97\u65b9\u7a0b\u7ec4 \\(A\\mathbf{h}=\\mathbf{0}\\) \u3002 \u8d85\u5b9a\u89e3 \u00b6 \u5982\u679c\u7ed9\u51fa\u7684\u70b9\u5bf9\u5e94 \\(\\mathbf{x}_i \\leftrightarrow \\mathbf{x}_i^\\prime\\) \u591a\u4f59\u56db\u7ec4\uff0c\u65b9\u7a0b \\(A\\mathbf{h}=\\mathbf{0}\\) \u662f\u8d85\u5b9a\u7684\u3002 \u5982\u679c\u70b9\u7684\u4f4d\u7f6e\u662f\u7cbe\u786e\u7684\uff0c\u90a3\u4e48 \\(A\\) \u7684\u79e9\u4ecd\u7136\u4e3a 8 \u5e76\u6709\u4e00\u7ef4\u96f6\u7a7a\u95f4\uff0c\u5e76\u4e14\u5b58\u5728\u7cbe\u786e\u89e3 \\(\\mathbf{h}\\) \u3002 \u5982\u679c\u56fe\u50cf\u5750\u6807\u7684\u6d4b\u91cf\u65f6\u4e0d\u7cbe\u786e\u7684\uff0c\u65b9\u7a0b\u7ec4\u5c06\u4e0d\u5b58\u5728\u7cbe\u786e\u89e3\u3002\u6240\u4ee5\u9700\u8981\u4e00\u4e2a\u9002\u5f53\u7684\u4ee3\u4ef7\u51fd\u6570\u53d6\u6700\u5c0f\u503c\u7684\u77e2\u91cf \\(\\mathbf{h}\\) \uff0c\u901a\u5e38\u9644\u52a0\u8303\u6570\u6761\u4ef6\uff0c\u65e2\u7136\u4e0d\u5b58\u5728 \\(A\\mathbf{h}=\\mathbf{0}\\) \u7684\u7cbe\u786e\u89e3\uff0c\u5f88\u81ea\u7136\u4f1a\u5728\u901a\u5e38\u7ea6\u675f \\(\\parallel \\mathbf{h} \\parallel = 1\\) \u4e0b\u6700\u5c0f\u5316\u8303\u6570 \\(\\parallel A \\mathbf{h} \\parallel\\) \u3002\u8fd9\u7b49\u4ef7\u4e8e\u6c42\u5546 \\(\\parallel A \\mathbf{h} \\parallel / \\parallel \\mathbf{h} \\parallel\\) \u7684\u6700\u5c0f\u503c\u95ee\u9898\u3002\u8be5\u89e3\u662f \\(A^\\top A\\) \u7684\u6700\u5c0f\u7279\u5f81\u503c\u7684\uff08\u5355\u4f4d\uff09\u7279\u5f81\u77e2\u91cf\u3002\u7531\u6b64\u6240\u5f97\u5230\u7684\u7b97\u6cd5\u79f0\u4e3a \u57fa\u672cDLT\u7b97\u6cd5 \u3002 \u975e\u9f50\u6b21\u89e3 \u00b6 \u628a\u7b49\u5f0f\u8f6c\u6210\u975e\u9f50\u6b21\u7ebf\u6027\u65b9\u7a0b\u7ec4\uff0c\u5373\u7ed9\u77e2\u91cf \\(\\mathbf{h}\\) \u4e2d\u7684\u67d0\u4e2a\u5143\u7d20\u5f3a\u52a0\u4e0a \\(h_j=1\\) \u7684\u6761\u4ef6\uff1a \\[ \\begin{bmatrix} 0 & 0 & 0 & -x_iw_i^\\top & -y_iw_i^\\top & -w_iw_i^\\top & x_iy_i^\\top & y_iy_i^\\top \\\\ x_iw_i^\\top & y_iw_i^\\top & w_iw_i^\\top & 0 & 0 & 0 & -x_ix_i^\\top & -y_ix_i^\\top \\\\ \\end{bmatrix} \\bar{\\mathbf{h}}= \\begin{bmatrix} -w_iy_i^\\top \\\\ -w_ix_i^\\top \\end{bmatrix} \\] \u5176\u4e2d \\(\\bar{\\mathbf{h}}\\) \u662f\u7531 \\(\\mathbf{h}\\) \u7684\u524d\u516b\u4e2a\u5143\u7d20\u7ec4\u6210\u7684 8 \u7ef4\u77e2\u91cf\u3002 \u4f46\u662f\uff0c\u5982\u679c\u4e8b\u5b9e\u4e0a\u771f\u6b63\u7684\u89e3\u662f \\(h_j=0\\) \uff0c\u90a3\u4e48\u4e0d\u5b58\u5728\u4e00\u56e0\u5b50 \\(k\\) \u4f7f\u5f97 \\(kh_j=1\\) \uff0c\u8868\u793a\u4ee4 \\(h_j=1\\) \u5f97\u4e0d\u5230\u771f\u89e3\u3002 \u9000\u5316\u914d\u7f6e \u00b6 \u5982\u679c \\(\\mathbf{x}_1, \\mathbf{x}_2, \\mathbf{x}_3\\) \u5171\u7ebf\uff0c\u90a3\u4e48 \\(H^*=\\mathbf{x}_4^\\top\\mathbf{I}^\\top\\) \u662f\u4e00\u4e2a\u89e3 \\(H^*\\) \u662f\u552f\u4e00\u89e3\uff08\u76f8\u5dee\u4e00\u5c3a\u5ea6\u56e0\u5b50\uff09\uff0c\u56e0\u4e3a \\(H^*\\) \u662f\u5947\u5f02\u77e9\u9635\uff0c\u4e0d\u5b58\u5728\u628a\u6bcf\u4e2a \\(\\mathbf{x}_i\\) \u53d8\u5230 \\(\\mathbf{x}_i^\\prime\\) \u7684\u53d8\u6362\u3002\u5f53 \\(\\mathbf{x}_1, \\mathbf{x}_2, \\mathbf{x}_3\\) \u5171\u7ebf\uff0c\u800c \\(\\mathbf{x}_1^\\prime, \\mathbf{x}_2^\\prime, \\mathbf{x}_3^\\prime\\) \u4e0d\u5171\u7ebf\u65f6\u5c31\u4f1a\u4ea7\u751f\u8fd9\u79cd\u60c5\u51b5 \u5b58\u5728\u53e6\u5916\u4e00\u4e2a\u89e3 \\(H\\) \uff1a\u4ece\u800c\u4efb\u4f55\u5f62\u5982 \\(\\alpha H^*+\\beta H\\) \u7684\u77e9\u9635\u90fd\u662f\u89e3\uff0c\u56e0\u6b64\u6709\u4e00\u4e2a 2 \u53c2\u6570\u7684\u53d8\u6362\u7c07\u5b58\u5728\uff0c\u8fdb\u800c\u63a8\u51fa\u7ed9\u51fa\u7684 8 \u4e2a\u65b9\u7a0b\u4e0d\u662f\u72ec\u7acb\u7684 \u51fa\u73b0\u67d0\u79cd\u914d\u7f6e\u4e0d\u80fd\u786e\u5b9a\u552f\u4e00\u89e3\u7684\u60c5\u5f62\u79f0\u4e3a \u9000\u5316 \u3002 \u9000\u5316\u7684\u5b9a\u4e49\u65e2\u6d89\u53ca\u914d\u7f6e\u4e5f\u6d89\u53ca\u53d8\u6362\u7c7b\u578b\uff0c\u800c\u4e14\u9000\u5316\u95ee\u9898\u4e0d\u4ec5\u9650\u4e8e\u6700\u5c0f\u914d\u7f6e\u89e3\u3002\u5982\u679c\u591a\u51fa\u6765\u7684\uff08\u7cbe\u786e\u7684\uff0c\u5373\u65e0\u8bef\u5dee\u7684\uff09\u70b9\u5bf9\u5e94\u4e5f\u5171\u7ebf\uff0c\u90a3\u4e48\u9000\u5316\u95ee\u9898\u4ecd\u6ca1\u6709\u89e3\u51b3\u3002 \u7531\u7ebf\u548c\u5176\u4ed6\u5b9e\u4f53\u6c42\u89e3 \u00b6 \u524d\u9762\u53ea\u8ba8\u8bba\u7531\u70b9\u5bf9\u5e94\u6765\u8ba1\u7b97\u5355\u5e94\uff0c\u7136\u800c\u7ebf\u5bf9\u5e94\u548c\u4e8c\u6b21\u66f2\u7ebf\u7684\u5bf9\u5e94\u4e5f\u53ef\u4ee5\u8ba1\u7b97\u5355\u5e94\uff0c\u6240\u4ee5\u5c31\u4ea7\u751f\u8ba1\u7b97\u4e00\u4e2a\u5355\u5e94\uff08\u6216\u4efb\u4f55\u5176\u4ed6\u5173\u7cfb\uff09\u9700\u8981\u591a\u5c11\u7ec4\u5bf9\u5e94\u7684\u95ee\u9898\u3002\u4e00\u822c\u7684\u539f\u5219\u662f\u7ea6\u675f\u6570\u5fc5\u987b\u7b49\u4e8e\u6216\u5927\u4e8e\u53d8\u6362\u7684\u81ea\u7531\u5ea6\u6570\u3002 \u91c7\u7528\u6df7\u5408\u7c7b\u578b\u7684\u5bf9\u5e94\u6765\u8ba1\u7b97 H \u65f6\u5fc5\u987b\u8c28\u614e\uff0c\u4f8b\u5982\u4e00\u4e2a 2D \u5355\u5e94\u4e0d\u80fd\u7531\u4e24\u7ec4\u70b9\u5bf9\u5e94\u548c\u4e24\u7ec4\u7ebf\u5bf9\u5e94\u552f\u4e00\u786e\u5b9a\uff0c\u4f46\u80fd\u7531\u4e09\u7ea7\u70b9\u548c\u4e00\u7ec4\u7ebf\u6216\u4e00\u7ec4\u70b9\u548c\u4e09\u7ec4\u7ebf\u6765\u552f\u4e00\u786e\u5b9a\uff0c\u5373\u4f7f\u6bcf\u79cd\u914d\u7f6e\u90fd\u6709 8 \u4e2a\u81ea\u7531\u5ea6\u4e5f\u662f\u5982\u6b64\u3002 \u4e0d\u540c\u7684\u4ee3\u4ef7\u51fd\u6570 \u00b6 \u4e3a\u786e\u5b9a H \u7684\u8d85\u5b9a\u89e3\u800c\u9700\u6700\u5c0f\u5316\u7684\u82e5\u5e72\u4ee3\u4ef7\u51fd\u6570 \u4ee3\u6570\u8ddd\u79bb \u00b6 DLT \u7b97\u6cd5\u6700\u5c0f\u5316\u8303\u6570 \\(\\parallel A \\mathbf{h} \\parallel\\) \u3002 \u77e2\u91cf \\(\\varepsilon=A\\mathbf{h}\\) \u79f0\u4e3a\u6b8b\u5dee\u77e2\u91cf\uff0c\u5e76\u4e14\u8981\u6700\u5c0f\u5316\u7684\u6b63\u662f\u8be5\u8bef\u5dee\u77e2\u91cf\u7684\u8303\u6570\u3002 \u77e2\u91cf \\(\\varepsilon_i\\) \u88ab\u79f0\u4e3a\u5173\u8054\u4e8e\u70b9\u5bf9\u5e94 \\(\\mathbf{x}_i \\leftrightarrow \\mathbf{x}_i^\\prime\\) \u548c\u5355\u5e94 H \u7684 \u4ee3\u6570\u8bef\u5dee\u77e2\u91cf \uff0c\u8be5\u77e2\u91cf\u7684\u8303\u6570\u662f\u4e00\u4e2a\u6807\u91cf\uff0c\u79f0\u4e3a \u4ee3\u6570\u8ddd\u79bb \uff1a \\[ d_{alg}(\\mathbf{x}_i^\\prime, H\\mathbf{x}_i)^2= \\parallel \\varepsilon_i \\parallel= \\parallel \\begin{bmatrix} \\mathbf{0}^\\top & -w_i^\\prime\\mathbf{x}_i^\\top & y_i^\\prime \\mathbf{x}_i^\\top \\\\ w_i^\\prime\\mathbf{x}_i^\\top & \\mathbf{0}^\\top & -x_i^\\prime \\mathbf{x}_i^\\top \\end{bmatrix} \\mathbf{h} \\parallel^2 \\] \u5bf9\u4e8e\u4efb\u4f55\u4e24\u4e2a\u77e2\u91cf \\(\\mathbf{x}_1\\) \u548c \\(\\mathbf{x}_2\\) \uff1a \\[ \\sum_{i}d_{alg}(\\mathbf{x}_1, \\mathbf{x}_2)^2=a_1^2+a_2^2 \\ \\ \u5176\u4e2d\\mathbf{a}=(a_1,a_2,a_3)^\\top=\\mathbf{x}_1 \\times \\mathbf{x}_2 \\] \u7ed9\u5b9a\u5bf9\u5e94\u7684\u96c6\u5408\uff0c\u91cf \\(\\varepsilon=A\\mathbf{h}\\) \u662f\u6574\u4e2a\u96c6\u5408\u7684\u4ee3\u6570\u8bef\u5dee\u77e2\u91cf\uff0c\u7531\u6b64\u53ef\u89c1\uff1a \\[ \\sum_{i}d_{alg}(\\mathbf{x}_i^\\prime, H\\mathbf{x}_i)^2= \\sum_{i} \\parallel \\varepsilon_i \\parallel^2= \\parallel A\\mathbf{h} \\parallel^2= \\parallel \\varepsilon \\parallel^2 \\] \u7f3a\u70b9\u662f\u88ab\u6700\u5c0f\u5316\u7684\u91cf\u6ca1\u6709\u51e0\u4f55\u6216\u7edf\u8ba1\u4e0a\u7684\u610f\u4e49\u3002 \u51e0\u4f55\u8ddd\u79bb \u00b6 \u8bb0\u53f7 \u00b6 \u77e2\u91cf \\(\\mathbf{x}\\) \u8868\u793a \u6d4b\u91cf \u7684\u56fe\u50cf\u5750\u6807\uff1b \\(\\hat{\\mathbf{x}}\\) \u8868\u793a\u8be5\u70b9\u7684\u4f30\u8ba1\u503c\u800c \\(\\bar{\\mathbf{x}}\\) \u8868\u793a\u8be5\u70b9\u7684\u771f\u503c\u3002 \u5355\u56fe\u50cf\u8bef\u5dee \u00b6 \u9996\u5148\u8003\u8651\u7b2c\u4e00\u5e45\u56fe\u50cf\u7684\u6d4b\u91cf\u975e\u5e38\u7cbe\u786e\u800c\u8bef\u5dee\u4ec5\u51fa\u73b0\u5728\u7b2c\u4e8c\u5e45\u56fe\u50cf\u7684\u60c5\u5f62\u3002\u9002\u5b9c\u6700\u5c0f\u5316\u7684\u91cf\u662f \u8f6c\u79fb\u8bef\u5dee \u3002\u5b83\u662f\u7b2c\u4e8c\u5e45\u56fe\u50cf\u4e0a\u6d4b\u91cf\u70b9 \\(\\mathbf{x}^\\prime\\) \u4e0e\u70b9 \\(H\\bar{\\mathbf{x}}\\) \u4e4b\u95f4\u7684 \u6b27\u6c0f\u8ddd\u79bb \u3002\u7528\u8bb0\u53f7 \\(d(\\mathbf{x}, \\mathbf{y})\\) \u8868\u793a\u975e\u9f50\u6b21\u70b9 \\(\\mathbf{x}\\) \u548c \\(\\mathbf{y}\\) \u4e4b\u95f4\u7684\u6b27\u6c0f\u8ddd\u79bb\u3002\u5bf9\u5e94\u96c6\u5408\u7684\u8f6c\u79fb\u8bef\u5dee\u662f\uff1a \\[ \\sum_{i} d(\\mathbf{x}_i^\\prime, H\\bar{\\mathbf{x}_i})^2 \\] \u5bf9\u79f0\u8f6c\u79fb\u8bef\u5dee \u00b6 \u66f4\u5207\u5408\u5b9e\u9645\u7684\u60c5\u5f62\u662f\u56fe\u50cf\u6d4b\u91cf\u8bef\u5dee\u5728\u4e24\u5e45\u56fe\u50cf\u4e2d\u90fd\u53d1\u751f\uff0c\u4ece\u800c\u5e94\u8be5\u6700\u5c0f\u5316\u4e24\u5e45\u800c\u4e0d\u4ec5\u662f\u4e00\u5e45\u56fe\u50cf\u7684\u8bef\u5dee\uff1a \\[ \\sum_{i} d(\\mathbf{x}_i, H^{-1}\\mathbf{x}_i^\\prime)^2+d(\\mathbf{x}_i^\\prime, H\\mathbf{x}_i)^2 \\] \u91cd\u6295\u5f71\u8bef\u5dee\u2014\u2014\u4e24\u5e45\u56fe\u50cf \u00b6 \u5bf9\u6bcf\u5e45\u56fe\u50cf\u8bef\u5dee\u4f5c\u91cf\u5316\u7684\u53e6\u4e00\u79cd\u65b9\u6cd5\u662f\u4f30\u8ba1\u6bcf\u7ec4\u5bf9\u5e94\u7684\u201c\u6821\u6b63\u503c\u201d\u3002\u4e3a\u4e86\u5f97\u5230\u5b8c\u5168\u7684\u5339\u914d\u70b9\u96c6\u6709\u5fc5\u8981\u5728\u4e00\u5e45\u56fe\u50cf\uff08\u7b2c\u4e8c\u5e45\u56fe\u50cf\uff09\u4e0a\u5bf9\u6d4b\u91cf\u8fdb\u884c\u6821\u6b63\u3002 \u5355\u5e94 \\(\\hat{H}\\) \u548c\u5b8c\u5168\u5339\u914d\u7684\u70b9\u5bf9 \\(\\hat{\\mathbf{x}_i}\\) \u548c \\(\\hat{\\mathbf{x}_i}^\\prime\\) \u4ee5\u6700\u5c0f\u5316\u603b\u7684\u8bef\u5dee\u51fd\u6570: \\[ \\sum_{i} d(\\mathbf{x}_i, \\hat{\\mathbf{x}_i})^2+d(\\mathbf{x}_i^\\prime, \\hat{\\mathbf{x}_i}^\\prime)^2 \\ \\ \\ s.t \\ \\ \\ \\hat{\\mathbf{x}_i}^\\prime=\\hat{H}\\hat{\\mathbf{x}_i} \\ \\ \\ \\forall i. \\] \u5148\u7531 \\(\\mathbf{x}_i \\leftrightarrow \\mathbf{x}_i^\\prime\\) \u4f30\u8ba1\u4e16\u754c\u5e73\u9762\u7684\u70b9 \\(\\hat{\\mathbf{X}_i}\\) \uff0c\u7136\u540e\u628a\u5b83\u91cd\u6295\u5f71\u5230\u4f30\u8ba1\u4e0a\u8ba4\u4e3a\u662f\u5b8c\u5168\u5339\u914d\u7684\u5bf9\u5e94 \\(\\hat{\\mathbf{x}_i} \\leftrightarrow \\hat{\\mathbf{x}_i}^\\prime\\) \u51e0\u4f55\u548c\u4ee3\u6570\u8ddd\u79bb\u7684\u6bd4\u8f83 \u00b6 \u4ee4 \\(\\mathbf{x}_i^\\prime=(x_i^\\prime, y_i^\\prime, w_i^\\prime)^\\top\\) \u5e76\u5b9a\u4e49\u77e2\u91cf \\((\\hat{x_i}^\\prime, \\hat{y_i}^\\prime, \\hat{w_i}^\\prime)^\\top=\\hat{\\mathbf{x}_i}^\\prime=H\\bar{\\mathbf{x}}\\) \uff0c\u5219 \\[ d(\\mathbf{x}_i^\\prime, \\hat{\\mathbf{x}_i}^\\prime)^2= d_{alg}(\\mathbf{x}_i^\\prime, \\hat{\\mathbf{x}_i}^\\prime)^2/\\hat{w_i}^\\prime w_i^\\prime \\] \u51e0\u4f55\u8ddd\u79bb\u4e0e\u4ee3\u6570\u8ddd\u79bb\u76f8\u5173\uff0c\u4f46\u4e0d\u76f8\u7b49\u3002\u53ea\u6709\u5f53 \\(\\hat{w_i}^\\prime=w_i^\\prime=1\\) \u4e24\u4e2a\u8ddd\u79bb\u76f8\u7b49\u3002\u56e0\u6b64\u5728\u4eff\u5c04\u53d8\u6362\u4e0b\uff0c\u51e0\u4f55\u8ddd\u79bb\u548c\u4ee3\u6570\u8ddd\u79bb\u76f8\u7b49\u3002\u5bf9\u4e8e\u4eff\u5c04\u53d8\u6362\uff0c\u6700\u5c0f\u5316\u51e0\u4f55\u8ddd\u79bb\u53ef\u4ee5\u7528\u57fa\u4e8e\u4ee3\u6570\u8ddd\u79bb\u7684\u7ebf\u6027 DLT \u7b97\u6cd5\u3002 \u91cd\u6295\u5f71\u8bef\u5dee\u7684\u51e0\u4f55\u89e3\u91ca \u00b6 \u4e24\u5e73\u9762\u4e4b\u95f4\u7684\u5355\u5e94\u4f30\u8ba1\u53ef\u4ee5\u89c6\u4e3a\u7528 4D \u7a7a\u95f4 \\(IR^4\\) \u4e2d\u7684\u201c\u66f2\u9762\u201d\u6765\u62df\u5408\u70b9\u3002 \u6bcf\u5bf9\u56fe\u50cf\u70b9 \\(\\mathbf{x}, \\mathbf{x}^\\prime\\) \u5b9a\u4e49\u6d4b\u91cf\u7a7a\u95f4 \\(IR^4\\) \u7684\u4e00\u4e2a\u70b9\uff0c\u8bb0\u4f5c \\(\\mathbf{X}\\) \u3002 \u5bf9\u7ed9\u5b9a\u7684\u5355\u5e94 H\uff0c\u6ee1\u8db3 \\(\\mathbf{x} \\times \\mathbf{x}^\\prime=\\mathbf{0}\\) \u7684\u56fe\u50cf\u5bf9\u5e94 \\(\\mathbf{x} \\leftrightarrow \\mathbf{x}^\\prime\\) \u5b9a\u4e49\u6765 \\(IR^4\\) \u4e2d\u7684\u4e00\u4e2a\u4ee3\u6570\u7c07 \\(\\upsilon_H\\) \uff0c\u5b83\u662f\u4e24\u4e2a\u8d85\u4e8c\u6b21\u66f2\u9762\u7684\u4ea4\u96c6\u3002 \\[ d(\\mathbf{x}_i, \\hat{\\mathbf{x}_i})^2+d(\\mathbf{x}_i^\\prime, \\hat{\\mathbf{x}_i}^\\prime)^2=d_\\perp(\\mathbf{X}_i, \\upsilon_H)^2 \\] \u5176\u4e2d \\(d_\\perp(\\mathbf{X}_i, \\upsilon_H)^2\\) \u662f\u70b9 \\(\\mathbf{X}\\) \u5230\u7c07 \\(\\upsilon_H\\) \u7684\u5782\u76f4\u8ddd\u79bb\u3002 Sampson \u8bef\u5dee \u00b6 Sampson \u8bef\u5dee\u5176\u590d\u6742\u6027\u4ecb\u4e8e\u4ee3\u6570\u548c\u51e0\u4f55\u4ee3\u4ef7\u51fd\u6570\u4e4b\u95f4\uff0c\u4f46\u975e\u5e38\u8fd1\u4f3c\u4e8e\u51e0\u4f55\u8bef\u5dee\u3002 \u5bf9\u7ed9\u5b9a\u7684\u5355\u5e94 H\uff0c\u5728 \\(\\upsilon_H\\) \u4e0a\u7684\u4efb\u4f55\u70b9 \\(\\mathbf{X}=(x,y,x^\\prime, y^\\prime)^\\top\\) \uff0c\u4ee3\u4ef7\u51fd\u6570\u7528 \\(\\mathcal{C}_H(\\mathbf{X})=\\mathbf{0}\\) \u3002\u7528\u4e0b\u5217 Taylor \u5c55\u5f00\u5f0f\u6765\u4e00\u9636\u903c\u8fd1\uff1a \\[ \\mathcal{C}_H(\\mathbf{X}+\\delta_x)=\\mathcal{C}_H(\\mathbf{X})+\\frac{\\partial \\mathcal{C}_H}{\\partial \\mathbf{X}} \\delta_x \\] \u8bb0 \\(\\delta_x = \\hat{\\mathbf{X}}-\\mathbf{X}\\) \u5e0c\u671b \\(\\hat{\\mathbf{X}}\\) \u5728 \\(\\upsilon_H\\) \u4e0a\uff0c\u5373 \\(\\mathcal{C}_H(\\hat{\\mathbf{X}})=\\mathbf{0}\\) \uff0c\u56e0\u6b64 \\(\\mathcal{C}_H(\\mathbf{X})+\\frac{\\partial \\mathcal{C}_H}{\\partial \\mathbf{X}} \\delta_x=\\mathbf{0}\\) \u3002\u8bb0\u6210 \\(\\mathbf{J}\\delta_x=-\\varepsilon\\) \uff0c\u5176\u4e2d \\(\\mathbf{J}\\) \u662f\u504f\u5bfc\u6570\u77e9\u9635\uff0c \\(\\varepsilon\\) \u4e0e \\(\\mathbf{X}\\) \u76f8\u5173\u7684\u4ee3\u4ef7\u51fd\u6570 \\(\\mathcal{C}_H(\\mathbf{X})\\) \uff0c \u6700\u5c0f\u5316\u95ee\u9898 \u662f\u6c42\u6ee1\u8db3\u6b64\u65b9\u7a0b\u7684\u6700\u5c0f \\(\\delta_x\\) \u3002 \u5373 \u6c42\u5728\u6ee1\u8db3 \\(\\mathbf{J}\\delta_x=-\\varepsilon\\) \u6761\u4ef6\u4e0b\u4f7f \\(\\parallel \\delta_x \\parallel\\) \u53d6\u6700\u5c0f\u503c\u7684\u77e2\u91cf \\(\\delta_x\\) \u4f7f\u7528 Lagrange \u4e58\u5b50\u6cd5\uff0c\u6c42\u7684\u8303\u6570 \\(\\parallel \\delta \\parallel^2\\) \u662f Sampson \u8bef\u5dee\uff1a \\[ \\parallel \\delta_x \\parallel^2= \\delta_x^\\top\\delta_x= \\varepsilon^\\top(\\mathbf{J}\\mathbf{J}^\\top)^{-1}\\varepsilon \\] \u7edf\u8ba1\u4ee3\u4ef7\u51fd\u6570\u548c\u6700\u5927\u4f3c\u7136\u4f30\u8ba1 \u00b6 \u5047\u5b9a\u5728\u6ca1\u6709\u6d4b\u91cf\u8bef\u5dee\u65f6\uff0c\u771f\u5b9e\u7684\u70b9\u51c6\u786e\u6ee1\u8db3\u4e00\u4e2a\u5355\u5e94\u53d8\u6362\uff0c\u5373 \\(\\bar{\\mathbf{x}_i}^\\prime=H\\bar{\\mathbf{x}_i}\\) \u3002 \u5047\u5b9a\u6bcf\u4e00\u5e45\u56fe\u50cf\u5750\u6807\u90fd\u5177\u6709\u96f6\u5747\u503c\u548c\u7edf\u4e00\u7684\u6807\u51c6\u5dee \\(\\sigma\\) \u7684\u9ad8\u65af\u566a\u58f0\u3002\u8fd9\u610f\u5473\u7740 \\(x=\\bar{x}+\\Delta x\\) \uff0c\u5176\u4e2d \\(\\Delta x\\) \u670d\u4ece\u65b9\u5dee\u4e3a \\(\\sigma^2\\) \u7684\u9ad8\u65af\u5206\u5e03\u3002\u8fdb\u4e00\u6b65\u5047\u8bbe\u6bcf\u6b21\u6d4b\u91cf\u7684\u566a\u58f0\u662f\u76f8\u5728\u72ec\u7acb\u7684\uff0c\u90a3\u4e48\uff0c\u82e5\u70b9\u7684\u771f\u503c\u662f \\(\\bar{\\mathbf{x}}\\) \uff0c\u5219\u6bcf\u4e2a\u6d4b\u91cf\u70b9 \\(\\mathbf{x}\\) \u7684\u6982\u7387\u5bc6\u5ea6\u51fd\u6570(pdf)\u662f\uff1a \\[ \\Pr(\\mathbf{x})=(\\frac{1}{2\\pi\\sigma^2})e^{-d(\\mathbf{x},\\bar{\\mathbf{x}})^2/(2\\sigma^2)} \\] \u5355\u56fe\u50cf\u8bef\u5dee \u00b6 \u5047\u5b9a\u6bcf\u70b9\u7684\u8bef\u5dee\u662f\u72ec\u7acb\u7684\uff0c\u70b9\u5bf9\u5e94 \\(\\{\\bar{\\mathbf{x}_i} \\leftrightarrow \\mathbf{x}_i^\\prime\\}\\) \u7684\u6982\u7387\u5c31\u662f\u5b83\u4eec\u5355\u4e2a pdf \u7684\u4e58\u79ef\uff1a \\[ \\Pr(\\{\\mathbf{x}_i^\\prime | H\\}) = \\prod_{i}(\\frac{1}{2\\pi\\sigma^2})e^{-d(\\mathbf{x}_i^\\prime, H \\bar{\\mathbf{x}}_i)^2/(2\\sigma^2)} \\] \u8be5\u5bf9\u5e94\u96c6\u5408\u7684 \u5bf9\u6570\u4f3c\u7136 \u4e3a\uff1a \\[ \\log \\Pr(\\mathbf{x}_i^\\prime | H)=-\\frac{1}{2\\sigma^2}\\sum_{i}d(\\mathbf{x}_i^\\prime, H \\bar{\\mathbf{x}}_i)^2+\u5e38\u6570 \\] \u5355\u5e94\u7684 \u6700\u5927\u4f3c\u7136 ML \u4f30\u8ba1 \\(\\hat{H}\\) \u6700\u5927\u5316\u8fd9\u4e2a\u5bf9\u6570\u4f3c\u7136\uff0c\u5373\u6700\u5c0f\u5316\uff1a \\[ \\sum_{i}d(\\mathbf{x}_i^\\prime, H \\bar{\\mathbf{x}}_i)^2 \\] \u56e0\u6b64\uff0cML \u4f30\u8ba1\u7b49\u4ef7\u4e8e\u6700\u5c0f\u5316\u51e0\u4f55\u8bef\u5dee\u51fd\u6570 \u53cc\u56fe\u50cf\u8bef\u5dee \u00b6 \u5982\u679c\u771f\u5b9e\u5bf9\u5e94\u662f \\(\\{\\bar{\\mathbf{x}}_i \\leftrightarrow H \\bar{\\mathbf{x}}_i=\\bar{\\mathbf{x}}_i^\\prime\\}\\) \uff0c\u53d7\u566a\u58f0\u5e72\u6270\u7684\u6570\u636e\u7684 pdf \u662f\uff1a \\[ \\Pr(\\{\\mathbf{x}_i, \\mathbf{x}_i^\\prime\\} | H, \\{\\bar{\\mathbf{x}}_i\\}) = \\prod_{i}(\\frac{1}{2\\pi\\sigma^2})e^{-(d(\\mathbf{x}_i, \\bar{\\mathbf{x}}_i)^2+d(\\mathbf{x}_i^\\prime, H\\bar{\\mathbf{x}}_i)^2)/(2\\sigma^2)} \\] ML \u4f30\u8ba1\u5c31\u662f\u6c42\u6700\u5c0f\u5316\uff1a \\[ \\sum_{i}d(\\mathbf{x}_i, \\hat{\\mathbf{x}}_i)^2+d(\\mathbf{x}_i^\\prime, \\hat{\\mathbf{x}}_i^\\prime)^2 \\] ML \u4f30\u8ba1\u7b49\u540c\u4e8e\u6700\u5c0f\u5316\u91cd\u6295\u5f71\u8bef\u5dee\u51fd\u6570 Mahalanobis \u8ddd\u79bb \u00b6 \u4e00\u822c\u9ad8\u65af\u5206\u5e03\u7684\u60c5\u5f62\uff0c\u53ef\u4ee5\u5047\u5b9a\u6d4b\u91cf\u77e2\u91cf \\(\\mathbf{X}\\) \u6ee1\u8db3\u4e00\u4e2a\u5177\u6709\u534f\u65b9\u5dee\u77e9\u9635 \\(\\sum\\) \u7684\u9ad8\u65af\u5206\u5e03\u51fd\u6570\u3002\u6700\u5927\u5316\u5bf9\u6570\u4f3c\u7136\u5219\u7b49\u4ef7\u4e8e\u6700\u5c0f\u5316 Mahalanobis \u8ddd\u79bb\uff1a \\[ \\parallel \\mathbf{X} - \\bar{\\mathbf{X}} \\parallel_{\\sum}^2=(\\mathbf{X}-\\bar{\\mathbf{X}})^\\top\\sum\\nolimits^{-1}(\\mathbf{X}-\\bar{\\mathbf{X}}) \\] \u5f53\u6bcf\u5e45\u56fe\u50cf\u90fd\u6709\u8bef\u5dee\u5e76\u5047\u5b9a\u4e00\u5e45\u56fe\u50cf\u4e2d\u7684\u8bef\u5dee\u4e0e\u53e6\u4e00\u5e45\u56fe\u50cf\u4e2d\u7684\u8bef\u5dee\u662f\u72ec\u7acb\u7684\u65f6\uff0c\u5408\u9002\u7684\u4ee3\u4ef7\u51fd\u6570\u662f\uff1a \\[ \\parallel \\mathbf{X} - \\bar{\\mathbf{X}} \\parallel_{\\sum}^2+\\parallel \\mathbf{X}^\\prime - \\bar{\\mathbf{X}}^\\prime \\parallel_{\\sum^\\prime}^2 \\] \u5176\u4e2d \\(\\sum\\) \u548c \\(\\sum^\\prime\\) \u662f\u4e24\u5e45\u56fe\u50cf\u7684\u6d4b\u91cf\u7684\u534f\u65b9\u5dee\u77e9\u9635 \u53d8\u6362\u4e0d\u53d8\u6027\u548c\u5f52\u4e00\u5316 \u00b6 \u5173\u4e8e\u56fe\u50cf\u5750\u6807\u53d8\u6362\u7684\u4e0d\u53d8\u6027 \u00b6 \u5047\u5b9a\u4e00\u5e45\u56fe\u50cf\u7684\u5750\u6807 \\(\\mathbf{x}\\) \u88ab \\(\\tilde{\\mathbf{x}}=T\\mathbf{x}\\) \u66ff\u4ee3\uff0c\u800c\u53e6\u4e00\u5e45\u56fe\u50cf\u7684\u5750\u6807 \\(\\mathbf{x}^\\prime\\) \u88ab \\(\\tilde{\\mathbf{x}}^\\prime=T^\\prime\\mathbf{x}^\\prime\\) \u66ff\u4ee3\u3002\u56e0\u6b64 \\(\\mathbf{x}_i\\) \u6620\u5c04\u5230 \\(\\mathbf{x}_i^\\prime\\) \u7684\u53d8\u6362\u7684\u53e6\u4e00\u79cd\u65b9\u6cd5\u662f\uff1a \u6839\u636e\u516c\u5f0f \\(\\tilde{\\mathbf{x}}_i=T\\mathbf{x}_i\\) \u548c \\(\\tilde{\\mathbf{x}}_i^\\prime=T^\\prime\\mathbf{x}_i^\\prime\\) \u53d8\u6362\u56fe\u50cf\u5750\u6807 \u7531\u5bf9\u5e94 \\(\\tilde{\\mathbf{x}}_i \\leftrightarrow \\tilde{\\mathbf{x}}_i^\\prime\\) \uff0c\u6c42 \\(\\tilde{H}\\) \u4ee4 \\(H=T^{\\prime-1}\\tilde{H}T\\) DLT \u7b97\u6cd5\u7684\u975e\u4e0d\u53d8\u6027 \u00b6 \u4ee4 \\(T^\\prime\\) \u4e3a\u5177\u6709\u7f29\u653e\u56e0\u5b50 \\(s\\) \u7684\u76f8\u4f3c\u53d8\u6362\uff0c \\(T\\) \u4e3a\u4efb\u610f\u7684\u5c04\u5f71\u53d8\u6362\u3002\u6b64\u5916\uff0c\u5047\u8bbe \\(H\\) \u662f\u4efb\u4f55 2D \u5355\u5e94\u5e76\u5b9a\u4e49 \\(\\tilde{H}=T^\\prime HT^{-1}\\) \uff0c\u90a3\u4e48 \\(\\parallel \\tilde{A} \\tilde{\\mathbf{h}} \\parallel = s \\parallel A \\mathbf{h} \\parallel\\) \u867d\u7136\u8fd9\u6837\u5b9a\u4e49\u7684 \\(H\\) \u548c \\(\\tilde{H}\\) \u7ed9\u51fa\u540c\u6837\u7684\u8bef\u5dee \\(\\varepsilon\\) \uff0c\u4f46\u662f\u5bf9\u89e3\u65bd\u52a0\u7684\u7ea6\u675f\u6761\u4ef6 \\(\\parallel H \\parallel = 1\\) \u4e0d\u7b49\u4ef7\u4e8e\u6761\u4ef6 \\(\\parallel \\tilde{H} \\parallel = 1\\) \uff0c\u5b83\u4eec\u5e76\u4e0d\u4ee5\u4efb\u4f55\u7b80\u5355\u7684\u65b9\u5f0f\u76f8\u5173\u8054\u3002 \u51e0\u4f55\u8bef\u5dee\u7684\u4e0d\u53d8\u6027 \u00b6 \\[ d(\\tilde{\\mathbf{x}}^\\prime, \\tilde{H}\\tilde{\\mathbf{x}})= d(T^\\prime \\mathbf{x}^\\prime, T^\\prime HT^{-1}T\\mathbf{x})= d(T^\\prime \\mathbf{x}^\\prime, T^\\prime H\\mathbf{x})= d(\\mathbf{x}^\\prime, H\\mathbf{x}) \\] \u5728\u76f8\u4f3c\u53d8\u6362\u4e0b\uff0c\u51e0\u4f55\u8bef\u5dee\u88ab\u4e58\u4ee5\u53d8\u6362\u7684\u7f29\u653e\u56e0\u5b50\uff0c\u4ece\u800c\u6700\u5c0f\u5316\u53d8\u6362\u7684\u5bf9\u5e94\u65b9\u5f0f\u4e0e\u6b27\u6c0f\u53d8\u6362\u76f8\u540c\u3002\u6240\u4ee5\u6700\u5c0f\u5316\u51e0\u4f55\u8bef\u5dee\u5728\u76f8\u4f3c\u53d8\u6362\u4e0b\u4e0d\u53d8\u3002 \u5f52\u4e00\u5316\u53d8\u6362 \u00b6 \u6570\u636e\u5f52\u4e00\u5316\u4e0d\u4ec5\u63d0\u9ad8\u4e86\u7ed3\u679c\u7684\u7cbe\u5ea6\uff0c\u8fd8\u5bf9\u521d\u59cb\u6570\u636e\u5f52\u4e00\u5316\u7684\u7b97\u6cd5\u5c06\u5bf9\u4efb\u4f55\u5c3a\u5ea6\u7f29\u653e\u548c\u5750\u6807\u539f\u70b9\u7684\u9009\u62e9\u4e0d\u53d8\u3002\u56e0\u800c\u4f7f DLT \u7b97\u6cd5\u5b9e\u9645\u4e0a\u5173\u4e8e\u76f8\u4f3c\u53d8\u6362\u4e0d\u53d8\u3002 \u5404\u5411\u540c\u6027\u7f29\u653e \u00b6 \u5bf9\u70b9\u8fdb\u884c\u5e73\u79fb\u4f7f\u70b9\u96c6\u5f62\u5fc3\u4f4d\u4e8e\u539f\u70b9 \u5bf9\u70b9\u8fdb\u884c\u7f29\u653e\u4f7f\u5b83\u4eec\u5230\u539f\u70b9\u7684\u5e73\u5747\u8ddd\u79bb\u7b49\u4e8e \\(\\sqrt{2}\\) \u5bf9\u4e24\u5e45\u56fe\u50cf\u72ec\u7acb\u8fdb\u884c\u4e0a\u8ff0\u53d8\u6362 \u6570\u636e\u5f52\u4e00\u5316\u5728 DLT \u7b97\u6cd5\u4e2d\u662f\u5b9e\u8d28\u6027\u7684\uff0c\u4e00\u5b9a\u4e0d\u8981\u89c6\u5b83\u4e3a\u53ef\u6709\u53ef\u65e0\u7684\u3002 \u5f52\u4e00\u5316\u4e0e\u6761\u4ef6\u6570 \u00b6 \u5f52\u4e00\u5316\u7684\u5f71\u54cd\u4e0e DLT \u65b9\u7a0b\u7ec4\u7684\u6761\u4ef6\u6570\u6216\u51c6\u786e\u5730\u8bf4\u4e0e\u65b9\u7a0b\u7ec4\u77e9\u9635 A \u7684\u7b2c\u4e00\u4e2a\u548c\u5012\u6570\u7b2c\u4e8c\u4e2a\u5947\u5f02\u503c\u7684\u6bd4\u7387 \\(d_1/d_{n-1}\\) \u6709\u5173\u3002\u4f46\u662f\uff0c\u5728\u6709\u566a\u58f0\u5b58\u5728\u65f6\u89e3\u5c06\u504f\u79bb\u5176\u6b63\u786e\u7ed3\u679c\u3002\u5927\u6761\u4ef6\u6570\u4f1a\u653e\u5927\u8fd9\u79cd\u504f\u5411\u3002 \u975e\u5404\u5411\u540c\u6027\u7f29\u653e \u00b6 \u5728\u975e\u5404\u540c\u6027\u7f29\u653e\u4e2d\uff0c\u70b9\u7684\u5f62\u5fc3\u548c\u524d\u9762\u4e00\u6837\u5e73\u79fb\u5230\u539f\u70b9\uff0c\u7ecf\u5e73\u79fb\u540e\u70b9\u5728\u539f\u70b9\u9644\u8fd1\u5f62\u6210\u4e91\u3002\u7136\u540e\u8fdb\u884c\u5750\u6807\u5c3a\u5ea6\u7f29\u653e\u4f7f\u8be5\u70b9\u96c6\u7684\u4e24\u4e3b\u77e9\u90fd\u7b49\u4e8e 1\u3002\u8fd9\u6837\u4f7f\u8be5\u70b9\u96c6\u5f62\u6210\u4ee5\u539f\u70b9\u4e3a\u4e2d\u5fc3\uff0c\u534a\u5f84\u4e3a 1 \u7684\u8fd1\u4f3c\u7684\u5bf9\u79f0\u5706\u4e91\u3002 \u65e0\u7a77\u8fdc\u9644\u8fd1\u7684\u70b9\u7684\u7f29\u653e \u00b6 \u5f53\u70b9\u4f4d\u4e8e\u6216\u63a5\u8fd1\u5e73\u9762\u7684\u65e0\u7a77\u8fdc\u65f6\uff0c\u5404\u5411\u540c\u6027\uff08\u6216\u975e\u5404\u5411\u540c\u6027\uff09\u7684\u7f29\u653e\u65b9\u5f0f\u6765\u5f52\u4e00\u5316\u5750\u6807\u662f\u65e2\u65e0\u9053\u7406\u53c8\u4e0d\u53ef\u884c\u7684\uff0c\u56e0\u4e3a\u5f62\u5fc3\u5750\u6807\u548c\u7f29\u653e\u56e0\u5b50\u4e3a\u65e0\u7a77\u5927\u6216\u63a5\u8fd1\u65e0\u7a77\u5927\u3002\u4e00\u4e2a\u4f3c\u4e4e\u4f1a\u7ed9\u51fa\u597d\u7ed3\u679c\u7684\u65b9\u6cd5\u662f\u5f52\u4e00\u5316\u70b9\u96c6 \\(\\mathbf{x}_i=(x_i,y_i,w_i)^\\top\\) \u4f7f\u5f97\uff1a \\[ \\sum_i x_i=\\sum_i y_i=0;\\sum_ix_i^2+y_i^2=2\\sum_iw_i^2;x_i^2+y_i^2+w_i^2=1,\\forall i \\] \u8fed\u4ee3\u6700\u5c0f\u5316\u65b9\u6cd5 \u00b6 \u8fed\u4ee3\u6700\u5c0f\u5316\u6280\u672f \u4ee3\u4ef7\u53c2\u6570 \uff1a\u4ee3\u4ef7\u51fd\u6570\u662f\u6700\u5c0f\u5316\u7684\u57fa\u7840 \u53c2\u6570\u5316 \uff1a\u628a\u8981\u8ba1\u7b97\u7684\u53d8\u6362\uff08\u6216\u5176\u4ed6\u5b9e\u4f53\uff09\u8868\u793a\u6210\u6709\u9650\u6570\u76ee\u7684\u53c2\u6570 \u51fd\u6570\u786e\u5b9a \uff1a\u5fc5\u987b\u786e\u5b9a\u4e00\u4e2a\u7528\u53c2\u6570\u96c6\u63cf\u8ff0\u7684\u4ee3\u4ef7\u51fd\u6570 \u521d\u59cb\u5316 \uff1a\u8ba1\u7b97\u4e00\u4e2a\u9002\u5f53\u7684\u521d\u59cb\u53c2\u6570\u4f30\u8ba1\u3002\u4e00\u822c\u5c06\u7531\u4e00\u4e2a\u7ebf\u6027\u7b97\u6cd5\uff08\u4f8b\u5982 DLT \u7b97\u6cd5\uff09\u6765\u5b9e\u73b0 \u8fed\u4ee3 \uff1a\u7531\u521d\u59cb\u89e3\u5f00\u59cb\uff0c\u5728\u8fed\u4ee3\u4e2d\u9010\u6b65\u4fee\u6b63\u53c2\u6570\u4ee5\u8fbe\u5230\u6700\u5c0f\u5316\u4ee3\u4ef7\u51fd\u6570\u7684\u76ee\u7684 \u5173\u4e8e\u53c2\u6570\u5316 \u00b6 \u6307\u5bfc\u53c2\u6570\u5316\u7684\u4e00\u822c\u7b56\u7565\u662f\u9009\u62e9\u80fd\u8986\u76d6\u6700\u5c0f\u5316\u7684\u6574\u4e2a\u7a7a\u95f4\u5e76\u80fd\u7528\u4e00\u79cd\u65b9\u4fbf\u7684\u65b9\u5f0f\u6765\u8ba1\u7b97\u4ee3\u4ef7\u51fd\u6570\u3002\u5bf9\u4e8e\u9f50\u6b21\u76ee\u6807\u901a\u5e38\u8bbe\u6709\u5fc5\u8981\u6216\u4e0d\u9f13\u52b1\u8ffd\u6c42\u6d88\u9664\u5c3a\u5ea6\u56e0\u5b50\u7684\u591a\u4e49\u6027\u800c\u91c7\u7528\u6700\u5c0f\u53c2\u6570\u5316\u3002\u9009\u62e9\u53c2\u6570\u5316\u7684\u53e6\u4e00\u4e2a\u8003\u8651\u662f\u9650\u5236\u53d8\u6362\u4e3a\u4e00\u4e2a\u5177\u4f53\u7684\u7c7b\u578b\u3002 \u51fd\u6570\u786e\u5b9a \u00b6 \u6709\u4e00\u4e2a\u534f\u65b9\u5dee\u77e9\u9635\u4e3a \\(\\sum\\) \u7684 \u6d4b\u91cf\u77e2\u91cf \\(\\mathbf{X} \\in IR^N\\) \u4e00\u7ec4\u53c2\u6570\u88ab\u8868\u8fbe\u6210\u4e00\u4e2a\u77e2\u91cf \\(\\mathbf{P} \\in IR^M\\) \u5b9a\u4e49\u4e00\u4e2a\u6620\u5c04 \\(f:\\ IR^M \\to IR^N\\) \uff0c\u5176\u503c\u57df\uff08\u81f3\u5c11\u5c40\u90e8\u5730\uff09\u662f \\(IR^N\\) \u4e2d\u8868\u793a\u5bb9\u8bb8\u6d4b\u91cf\u96c6\u7684\u6a21\u578b\u66f2\u9762 S \u6700\u5c0f\u5316\u4ee3\u4ef7\u51fd\u6570\u662f Mahalanobis \u8ddd\u79bb \\[\\parallel \\mathbf{X} - f(\\mathbf{P}) \\parallel_{\\sum}^2=(\\mathbf{X} - f(\\mathbf{P}))^\\top\\sum\\nolimits^{-1}(\\mathbf{X} - f(\\mathbf{P}))\\] \u5355\u56fe\u50cf\u8bef\u5dee-\u6700\u5c0f\u5316\u4ee3\u4ef7\u51fd\u6570 \uff1a\u56fa\u5b9a\u7b2c\u4e00\u5e45\u56fe\u50cf\u4e2d\u70b9 \\(\\mathbf{x}_i\\) \u7684\u5750\u6807\uff0c\u5e76\u53d8\u6362 H \u4ee5\u6700\u5c0f\u5316\u4ee3\u4ef7\u51fd\u6570\uff1a \\[ \\sum_id(\\mathbf{x}_i^\\prime,H\\tilde{\\mathbf{x}}_i)^2 \\\\ f:\\mathbf{h} \\to (H\\mathbf{x}_1, H\\mathbf{x}_2, ..., H\\mathbf{H}_n) \\] \u5bf9\u79f0\u4f20\u9012\u8bef\u5dee-\u5bf9\u79f0\u5316\u4ee3\u4ef7\u51fd\u6570 \\[ \\sum_id(\\mathbf{x}_i, H^{-1}\\mathbf{x}_i^\\prime)^2+d(\\mathbf{x}_i^\\prime, H\\mathbf{x}_i)^2 \\\\ f: \\mathbf{h} \\to (H^{-1}\\mathbf{x}_1^\\prime, ..., H^{-1}\\mathbf{x}_n^\\prime, H\\mathbf{x}_1, ..., H\\mathbf{x}_n) \\] \u91cd\u6295\u5f71\u8bef\u5dee \uff1a\u53ef\u4ee5\u7528 \\(\\hat{\\mathbf{x}}_i\\) \u5750\u6807\u548c \\(\\hat{H}\\) \u77e9\u9635\u7684\u5143\u7d20\u2014\u2014\u603b\u5171 \\(2n+9\\) \u4e2a\u53c2\u6570\u6765\u53c2\u6570\u5316\u3002 \u53c2\u6570\u77e2\u91cf \uff1a \\(\\mathbf{P}=(\\mathbf{h}, \\hat{\\mathbf{x}}_i, ..., \\hat{\\mathbf{x}}_n)\\) \u3002\u51fd\u6570 \\(f\\) \u5b9a\u4e49\u4e3a \\(f:\\mathbf{P}\\to (\\hat{\\mathbf{x}}_1, \\hat{\\mathbf{x}}_i^\\prime, ..., \\hat{\\mathbf{x}}_n, \\hat{\\mathbf{x}}_n^\\prime)\\) Sampson \u8fd1\u4f3c \uff1a\u91cd\u6295\u5f71\u8bef\u5dee\u7684 Sampson \u8fd1\u4f3c\u4f7f\u6295\u5f71\u8bef\u5dee\u4e5f\u80fd\u4ec5\u5bf9 9 \u4e2a\u53c2\u6570\u6700\u5c0f\u5316 \u521d\u59cb\u5316 \u00b6 \u53ef\u4ee5\u7528\u7ebf\u6027\u6280\u672f\u6216\u6700\u5c0f\u914d\u7f6e\u89e3\u6765\u6c42\u53c2\u6570\u5316\u7684\u521d\u59cb\u4f30\u8ba1\u3002\u8fd8\u91c7\u7528\u7684\u53e6\u4e00\u79cd\u65b9\u6cd5\u662f\u5728\u53c2\u6570\u7a7a\u95f4\u8fdb\u884c\u8db3\u591f\u5bc6\u7684\u91c7\u6837\uff0c\u4ece\u6bcf\u4e00\u4e2a\u91c7\u6837\u521d\u59cb\u70b9\u5f00\u59cb\u8fed\u4ee3\u5e76\u4fdd\u7559\u6700\u597d\u7684\u7ed3\u679c\u3002\u8fd9\u79cd\u65b9\u6cd5\u4ec5\u5728\u53c2\u6570\u7a7a\u95f4\u7684\u7ef4\u6570\u8db3\u591f\u5c0f\u65f6\u624d\u53ef\u91c7\u7528 \u8fed\u4ee3\u65b9\u6cd5 \u00b6 \u5176\u4e2d\u6700\u5e38\u7528\u7684\u6709 Newton \u8fed\u4ee3\u548c Levenberg-Marquardt \u65b9\u6cd5\u3002Newton \u8fed\u4ee3\u662f\u6700\u5feb\u7684\uff0c\u4f46\u662f\u5b83\u9700\u8981\u8ba1\u7b97\u4ee3\u4ef7\u51fd\u6570\u7684\u4e8c\u9636\u5bfc\u6570\uff0c\u800c\u4e14\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\u53ef\u80fd\u4f1a\u53d1\u6563\u3002Levenberg-Marquardt \u65b9\u6cd5\u662f\u4e00\u79cd\u66f4\u7a33\u5b9a\u7684\u65b9\u6cd5\uff0c\u4f46\u662f\u5b83\u7684\u6536\u655b\u901f\u5ea6\u6bd4 Newton \u8fed\u4ee3\u6162\u3002 \u7b97\u6cd5\u7684\u5b9e\u9a8c\u6bd4\u8f83 \u00b6 \u9c81\u68d2\u4f30\u8ba1 \u00b6 \u4e4b\u524d\u8ba8\u8bba\u7684\u5bf9\u5e94\u96c6\u7684\u552f\u4e00\u8bef\u5dee\u6e90\u6765\u81ea\u70b9\u7684\u4f4d\u7f6e\u6d4b\u91cf\uff0c\u5728\u8bb8\u591a\u5b9e\u9645\u8fd0\u884c\u4e2d\uff0c\u8fd8\u5b58\u5728\u7740\u70b9\u88ab\u9519\u914d\u7684\u60c5\u51b5\u3002\u9519\u914d\u70b9\u5bf9\u9ad8\u65af\u8bef\u5dee\u5206\u5e03\u800c\u8a00\u662f \u91ce\u503c \u3002 RANSAC \u00b6 \u7528 \u6a21\u578b \u53bb\u62df\u5408\u6570\u636e\uff0c \u968f\u673a\u6837\u672c \u5305\u542b\u8db3\u4ee5\u786e\u5b9a\u6a21\u578b\u7684\u6700\u5c0f\u6570\u636e\u96c6\u3002\u5982\u679c\u6a21\u578b\u662f\u5e73\u9762\u5355\u5e94\uff0c\u800c\u6570\u636e\u662f 2D \u70b9\u5bf9\u5e94\u96c6\uff0c\u90a3\u4e48\u6700\u5c0f\u5b50\u96c6\u5305\u542b\u56db\u7ec4\u5bf9\u5e94\u3002 \u7b97\u6cd5\u6d41\u7a0b \u968f\u673a\u5730\u4ece\u6570\u636e\u96c6 \\(S\\) \u4e2d\u9009\u62e9 \\(s\\) \u4e2a\u6570\u636e\u70b9\u7ec4\u6210\u7684\u4e00\u4e2a\u6837\u672c\u4f5c\u4e3a\u6a21\u578b\u7684\u4e00\u4e2a\u793a\u4f8b \u786e\u5b9a\u5728\u6a21\u578b\u8ddd\u79bb\u9608\u503c \\(t\\) \u5185\u7684\u6570\u636e\u70b9\u96c6 \\(S_i\\) \uff0c \\(S_i\\) \u79f0\u4e3a\u91c7\u6837\u7684\u4e00\u81f4\u96c6\u5e76\u5b9a\u4e49 \\(S_i\\) \u7684\u5185\u70b9 \u5982\u679c \\(S_i\\) \u7684\u5927\u5c0f(\u5185\u70b9\u7684\u6570\u76ee)\u5927\u4e8e\u67d0\u4e2a\u9608\u503c \\(T\\) \uff0c\u7528 \\(S_i\\) \u7684\u6240\u6709\u70b9\u91cd\u4f30\u8ba1\u6a21\u578b\u5e76\u7ed3\u675f \u5982\u679c \\(S_i\\) \u7684\u5927\u5c0f\u5c0f\u4e8e \\(T\\) \uff0c\u9009\u62e9\u4e00\u4e2a\u65b0\u7684\u5b50\u96c6\u5e76\u91cd\u590d\u4e0a\u9762\u7684\u8fc7\u7a0b \u7ecf\u8fc7 \\(N\\) \u6b21\u8bd5\u9a8c\u9009\u62e9\u6700\u5927\u4e00\u81f4\u96c6 \\(S_i\\) \uff0c\u5e76\u7528 \\(S_i\\) \u7684\u6240\u6709\u70b9\u91cd\u4f30\u8ba1\u6a21\u578b \u9c81\u68d2\u6700\u5927\u4f3c\u7136\u4f30\u8ba1 \u00b6 \u9c81\u68d2\u4ee3\u4ef7\u51fd\u6570 \uff1a\u4e0d\u540c\u4e8e\u4ec5\u5728\u5185\u70b9\u4e0a\u6700\u5c0f\u5316 \\(\\mathcal{C}=\\sum_{i}d_{\\perp}^2\\) \uff0c\u53e6\u4e00\u79cd\u6539\u8fdb\u7684\u9c81\u68d2\u65b9\u6cd5\u662f\u5728\u6240\u6709\u6570\u636e\u4e0a\u6700\u5c0f\u5316\u3002\u4e00\u4e2a\u5408\u9002\u7684\u9c81\u68d2\u4ee3\u4ef7\u51fd\u6570\u662f \\[ \\mathcal{D}=\\sum_i \\gamma(d_{\\perp})\u4e14\\gamma(e)= \\left\\{\\begin{matrix} e^2 & e^2 < t^2 & \u5185\u70b9 \\\\ t^2 & e^2 >= t^2 & \u91ce\u503c \\end{matrix}\\right. \\] \\(d_\\perp\\) \u662f\u70b9\u7684\u8bef\u5dee\uff0c \\(\\gamma(e)\\) \u662f\u4e00\u4e2a\u9c81\u68d2\u4ee3\u4ef7\u51fd\u6570\uff0c\u5176\u4e2d\u7ed9\u91ce\u503c\u8d4b\u4e00\u4e2a\u56fa\u5b9a\u7684\u4ee3\u4ef7\u3002 \u5176\u4ed6\u9c81\u68d2\u7b97\u6cd5 \u00b6 \u6700\u5c0f\u4e2d\u503c\u5e73\u65b9(LMS)\u4f30\u8ba1 \uff1a\u2003\u6839\u636e\u6570\u636e\u4e2d\u6240\u6709\u70b9\u7684\u8ddd\u79bb\u4e2d\u503c\uff0c\u9009\u62e9\u5177\u6709\u6700\u5c0f\u4e2d\u503c\u7684\u6a21\u578b\u3002LMS \u7684\u4f18\u70b9\u5728\u4e8e\u5b83\u4e0d\u9700\u8981\u9608\u503c\u6216\u8bef\u5dee\u65b9\u5dee\u7684\u5148\u9a8c\u77e5\u8bc6\u3002 LMS \u7684\u7f3a\u70b9\u662f\u5982\u679c\u591a\u4e8e\u4e00\u534a\u7684\u6570\u636e\u662f\u91ce\u503c\u90a3\u4e48\u5b83\u8981\u5931\u8d25\uff0c\u56e0\u4e3a\u8ddd\u79bb\u7684\u4e2d\u503c\u53ef\u80fd\u662f\u4e00\u4e2a\u91ce\u503c\u3002\u89e3\u51b3\u7684\u529e\u6cd5\u662f\u7528\u91ce\u503c\u7684\u6bd4\u4f8b\u6765\u786e\u5b9a\u6240\u9009\u7684\u8ddd\u79bb\u3002 \u5982\u679c\u91ce\u503c\u7684\u6570\u91cf\u5c11\uff0c\u90a3\u4e48\u53ef\u4ee5\u91c7\u7528\u4ee5\u4e0b\u9c81\u68d2\u65b9\u6cd5\uff1a \u5220\u70b9\u65b9\u6cd5 \u2003\u6bcf\u70b9\u8f6e\u6d41\u88ab\u5220\u9664\u800c\u7528\u6a21\u578b\u5bf9\u5269\u4e0b\u7684\u6570\u636e\u62df\u5408\u3002 \u52a0\u6743\u6700\u5c0f\u4e8c\u4e58\u65b9\u8fed\u4ee3 \u2003\u5176\u4e2d\u4e00\u4e2a\u6570\u636e\u70b9\u5bf9\u62df\u5408\u7684\u5f71\u54cd\u4ee5\u5b83\u7684\u6b8b\u5dee\u6765\u53cd\u52a0\u6743\u3002 \u5355\u5e94\u7684\u81ea\u52a8\u8ba1\u7b97 \u00b6 \u8ba1\u7b97\u4e24\u5e45\u56fe\u50cf\u95f4\u7684\u5355\u5e94\u7684\u7b97\u6cd5\u3002 \u7b97\u6cd5\u7684\u8f93\u5165\u4ec5\u4ec5\u662f\u56fe\u50cf\uff0c\u4e0d\u9700\u8981\u5176\u4ed6 \u5148\u9a8c \u4fe1\u606f\uff1b\u800c\u8f93\u51fa\u7684\u662f\u5355\u5e94\u7684\u4f30\u8ba1\u4ee5\u53ca\u4e00\u7ec4\u5bf9\u5e94\u7684\u5174\u8da3\u70b9\u3002\u8be5\u7b97\u6cd5\u53ef\u4ee5\u5e94\u7528\u4e8e\u8bf8\u5982\u4e00\u5f20\u5e73\u5766\u8868\u9762\u7684\u4e24\u5e45\u56fe\u50cf\u6216\u7531\u6444\u50cf\u673a\u7ed5\u5176\u5149\u5fc3\u65cb\u8f6c\u7684\u5230\u7684\u4e24\u5e45\u56fe\u50cf\u3002 \u7b97\u6cd5\u6d41\u7a0b \u5174\u8da3\u70b9 \uff1a\u5728\u6bcf\u4e00\u5e45\u56fe\u50cf\u4e0a\u8ba1\u7b97\u5174\u8da3\u70b9 \u5047\u8bbe\u5bf9\u5e94 \uff1a\u6839\u636e\u5174\u8da3\u70b9\u7070\u5ea6\u9886\u57df\u7684\u63a5\u8fd1\u548c\u76f8\u4f3c\uff0c\u8ba1\u7b97\u5b83\u4eec\u7684\u5339\u914d\u96c6\u3002 RANSAC\u9c81\u68d2\u4f30\u8ba1 \uff1a\u91cd\u590d \\(N\\) \u6b21\u91c7\u6837\uff1a \u9009\u62e9\u7531\u56db\u7ec4\u5bf9\u5e94\u7ec4\u6210\u7684\u4e00\u4e2a\u968f\u673a\u6837\u672c\u5e76\u8ba1\u7b97\u5355\u5e94 H \u5bf9\u5047\u8bbe\u7684\u6bcf\u7ec4\u5355\u5e94\uff0c\u8ba1\u7b97\u8ddd\u79bb \\(d_{\\perp}\\) \u6839\u636e \\(d_\\perp < t = \\sqrt{5.99} \\delta\\) \u50cf\u7d20\u786e\u5b9a\u5bf9\u5e94\u6570\uff0c\u8fdb\u800c\u8ba1\u7b97\u4e0e H \u4e00\u81f4\u7684\u5185\u70b9\u6570 \u9009\u62e9\u5177\u6709\u6700\u5927\u5185\u70b9\u6570\u7684 H\uff0c\u5f53\u6570\u76ee\u76f8\u7b49\u65f6\u9009\u62e9\u5185\u70b9\u7684\u6807\u51c6\u65b9\u5dee\u6700\u4f4e\u7684 H \u6700\u4f18\u4f30\u8ba1 \uff1a\u7531\u5212\u5b9a\u7684\u5185\u70b9\u7684\u6240\u6709\u5bf9\u5e94\u91cd\u65b0\u4f30\u8ba1 H\uff0c\u7528 Levenberg-Marquardt \u7b97\u6cd5\u6765\u6700\u5c0f\u5316 ML \u4ee3\u4ef7\u51fd\u6570 \u5f15\u5bfc\u5339\u914d \uff1a\u7528\u4f30\u8ba1\u7684 H \u53bb\u5b9a\u4e49\u8f6c\u79fb\u70b9\u4f4d\u7f6e\u9644\u8fd1\u7684\u641c\u7d22\u533a\u57df\uff0c\u8fdb\u4e00\u6b65\u786e\u5b9a\u5174\u8da3\u70b9\u7684\u5bf9\u5e94\u3002 \u6700\u540e\u4e24\u6b65\u91cd\u590d\u5230\u5bf9\u5e94\u7684\u6570\u76ee\u7a33\u5b9a\u4e3a\u6b62","title":"\u4f30\u8ba1\u2014\u20142D \u5c04\u5f71\u53d8\u6362"},{"location":"cv/mvg/est2d/#2d","text":"\u7ea6 6196 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 21 \u5206\u949f Abstract \u672c\u7ae0\u4e3b\u8981\u8ba8\u8bba\u4f30\u8ba1\u95ee\u9898\uff0c\u4f30\u8ba1\u7684\u542b\u4e49\u662f\u6307\u5728\u67d0\u4e9b\u672c\u8d28\u6d4b\u91cf\u7684\u57fa\u7840\u4e0a\u8ba1\u7b97\u67d0\u4e2a\u53d8\u6362\u6216\u5176\u5b83\u6570\u5b66\u91cf\uff0c\u5e38\u89c1\u7684\u4f30\u8ba1\u95ee\u9898\u7684\u7c7b\u578b\u6709\uff1a 2D \u5355\u5e94 \uff1a\u7ed9\u5b9a \\(IP^2\\) \u4e2d\u7684\u70b9\u96c6 \\(\\mathbf{x}_i\\) \uff0c\u548c\u540c\u5728 \\(IP^2\\) \u4e2d\u7684\u5bf9\u5e94\u70b9\u96c6 \\(\\mathbf{x}_i^\\prime\\) \uff0c\u8ba1\u7b97\u628a\u6bcf\u4e00\u70b9 \\(\\mathbf{x}_i\\) \u6620\u5c04\u5230\u5bf9\u5e94\u70b9 \\(\\mathbf{x}_i^\\prime\\) \u7684\u5c04\u5f71\u53d8\u6362\u3002 3D \u5230 2D \u7684\u6444\u50cf\u673a\u6295\u5f71 \uff1a\u7ed9\u5b9a 3D \u7a7a\u95f4\u7684\u70b9\u96c6 \\(X_i\\) \u4ee5\u53ca\u4e00\u5e45\u56fe\u50cf\u4e0a\u7684\u5bf9\u5e94\u70b9\u96c6 \\(\\mathbf{x}_i\\) \uff0c\u6c42\u628a \\(X_i\\) \u6620\u5c04\u5230 \\(\\mathbf{x}_i\\) \u7684 3D \u5230 2D \u7684\u5c04\u5f71\u6620\u5c04\u3002 \u57fa\u672c\u77e9\u9635\u7684\u8ba1\u7b97 \uff1a\u7ed9\u5b9a\u4e00\u5e45\u56fe\u50cf\u4e0a\u7684\u70b9\u96c6 \\(\\mathbf{x}_i\\) \uff0c\u548c\u53e6\u4e00\u5e45\u56fe\u50cf\u4e0a\u7684\u5bf9\u5e94\u70b9\u96c6 \\(\\mathbf{x}_i^\\prime\\) \uff0c\u8ba1\u7b97\u4e0e\u8fd9\u4e9b\u5bf9\u5e94\u4e00\u76f4\u7684 \u57fa\u672c\u77e9\u9635 \\(F\\) \u3002 \u4e09\u7126\u70b9\u5f20\u91cf\u8ba1\u7b97 \uff1a\u7ed9\u5b9a\u8de8\u4e09\u5e45\u56fe\u50cf\u7684\u70b9\u5bf9\u5e94 \\(\\mathbf{x}_i \\leftrightarrow \\mathbf{x}_i^\\prime \\leftrightarrow \\mathbf{x}_i^{\\prime \\prime}\\) \uff0c\u8ba1\u7b97\u4e09\u7126\u70b9\u5f20\u91cf\u3002 \u7814\u7a76\u4e24\u5e45\u56fe\u50cf\u4e4b\u95f4\u5bf9\u5e94\u70b9\u7684\u96c6\u5408 \\(\\mathbf{x}_i \\leftrightarrow \\mathbf{x}_i^\\prime\\) \uff0c\u8ba1\u7b97\u5bf9\u6240\u6709\u7684 i \u90fd\u6ee1\u8db3 \\(H\\mathbf{x}_i=\\mathbf{x}_i^\\prime\\) \u7684\u4e00\u4e2a \\(3 \\times 3\\) \u77e9\u9635 H\uff1a \u6d4b\u91cf\u6570 \uff1a\u77e9\u9635 H \u6709 9 \u4e2a\u5143\u7d20\uff0c\u4f46\u4ec5\u786e\u5b9a\u5230\u76f8\u5dee\u4e00\u4e2a\u5c3a\u5ea6\u56e0\u5b50\u3002\u56e0\u6b64\uff0c2D \u5c04\u5f71\u53d8\u6362\u7684\u81ea\u7531\u5ea6\u7684\u603b\u6570\u662f 8\u3002\u56e0\u4e3a\u4e00\u4e2a 2D \u70b9\u6709\u4e24\u4e2a\u81ea\u7531\u5ea6\uff0c\u6240\u4ee5\u4e3a\u4e86\u5b8c\u5168\u7ea6\u675f H\uff0c\u9700\u8981\u6307\u5b9a\u56db\u7ec4\u70b9\u5bf9\u5e94\u3002 \u8fd1\u4f3c\u89e3 \uff1a\u5982\u679c\u7ed9\u5b9a\u56db\u7ec4\u5bf9\u5e94\uff0c\u90a3\u4e48\u53ef\u4ee5\u5f97\u5230\u77e9\u9635 H \u7684\u7cbe\u786e\u89e3\u8fd9\u79cd\u89e3\u79f0\u4e3a \u6700\u5c0f\u914d\u7f6e\u89e3 \u3002\u5982\u679c\u7ed9\u5b9a\u591a\u4e8e\u56db\u7ec4\u7684\u5bf9\u5e94\uff0c\u90a3\u4e48\u8fd9\u4e9b\u5bf9\u5e94\u53ef\u80fd\u4e0d\u4e0e\u4efb\u4f55\u5c04\u5f71\u53d8\u6362\u5b8c\u5168\u76f8\u5bb9\uff0c\u56e0\u800c\u6211\u4eec\u9762\u4e34\u7684\u4efb\u52a1\u662f\u6309\u7ed9\u5b9a\u7684\u6570\u636e\u786e\u5b9a\u201c\u6700\u597d\u201d\u7684\u53d8\u6362\u3002\u901a\u5e38\u8fd9\u4e2a\u4efb\u52a1\u662f\u901a\u8fc7\u5bfb\u627e\u6700\u5c0f\u5316\u67d0\u4e2a\u4ee3\u4ef7\u51fd\u6570\u7684\u53d8\u6362 H \u6765\u5b8c\u6210\u3002 \u9ec4\u91d1\u6807\u51c6\u7b97\u6cd5 \uff1a\u901a\u5e38\u5b58\u5728\u4e00\u79cd\u6700\u4f18\u7684\u4ee3\u4ef7\u51fd\u6570\uff0c\u5176\u6700\u4f18\u7684\u542b\u4e49\u662f\u5728\u4e00\u5b9a\u5047\u8bbe\u4e0b\uff0c\u4f7f\u4ee3\u4ef7\u51fd\u6570\u53d6\u6700\u5c0f\u503c\u7684 H \u662f\u53d8\u6362\u7684\u6700\u597d\u4f30\u8ba1\u3002\u8ba1\u7b97\u8be5\u4ee3\u4ef7\u51fd\u6570\u6700\u5c0f\u503c\u7684\u7b97\u6cd5\u79f0\u4e3a\u201c\u9ec4\u91d1\u6807\u51c6\u201d\u7b97\u6cd5\u3002","title":"\u4f30\u8ba1\u2014\u20142D \u5c04\u5f71\u53d8\u6362"},{"location":"cv/mvg/est2d/#dlt","text":"\u9996\u5148\u8ba8\u8bba\u7531\u7ed9\u5b9a 2D \u5230 2D\u7684\u56db\u7ec4\u70b9\u5bf9\u5e94 \\(\\mathbf{x}_i \\leftrightarrow \\mathbf{x}_i^\\prime\\) \u786e\u5b9a H \u7684\u4e00\u79cd\u7b80\u5355\u7684\u7ebf\u6027\u7b97\u6cd5\uff0c\u53d8\u6362\u7531 \\(\\mathbf{x}_i^\\prime = H\\mathbf{x}_i\\) \u7ed9\u51fa\u3002\u4f46\u56e0\u4e3a\u8fd9\u662f\u4e00\u4e2a\u9f50\u6b21\u77e2\u91cf\u65b9\u7a0b\uff0c\u56e0\u6b64 3 \u7ef4\u77e2\u91cf \\(\\mathbf{x}_i^\\prime\\) \u548c \\(H\\mathbf{x}_i\\) \u4e0d\u76f8\u7b49\u3002\u53ef\u4ee5\u7528\u77e2\u91cf\u53c9\u4e58\uff1a \\(\\mathbf{x}_i^\\prime \\times H\\mathbf{x}_i=\\mathbf{0}\\) \u8868\u793a\u3002 \u5982\u679c\u5c06\u77e9\u9635 H \u7684\u7b2c j \u884c\u8bb0\u4e3a \\(h^{j\\top},\\mathbf{x}_i^\\prime=(x_i^\\prime, y_i^\\prime, w_i^\\prime)^\\top\\) \uff0c\u5219 \\(\\mathbf{x}_i^\\prime \\times H \\mathbf{x}_i=0\\) \u53ef\u4ee5\u8f6c\u6362\u6210\uff1a \\[ \\begin{bmatrix} \\mathbf{0}^\\top & -w_i^\\prime\\mathbf{x}_i^\\top & y_i^\\prime \\mathbf{x}_i^\\top \\\\ w_i^\\prime\\mathbf{x}_i^\\top & \\mathbf{0}^\\top & -x_i^\\prime\\mathbf{x}_i^\\top \\\\ -y_i^\\prime \\mathbf{x}_i^\\top & x_i^\\prime\\mathbf{x}_i^\\top & \\mathbf{0}^\\top \\end{bmatrix} \\begin{bmatrix} \\mathbf{h}^1 \\\\ \\mathbf{h}^2 \\\\ \\mathbf{h}^3 \\end{bmatrix} =\\mathbf{0} \\] h \u662f\u7531\u77e9\u9635 H \u7684\u5143\u7d20\u7ec4\u6210\u7684 0 \u7ef4\u77e2\u91cf\uff1a \\[ \\mathbf{h}= \\begin{bmatrix} \\mathbf{h}^1 \\\\ \\mathbf{h}^2 \\\\ \\mathbf{h}^3 \\end{bmatrix} , \\ \\ \\ H= \\begin{bmatrix} h_1 & h_2 & h_3 \\\\ h_4 & h_5 & h_6 \\\\ h_7 & h_8 & h_9 \\end{bmatrix} \\] \\(A_i\\mathbf{h}=\\mathbf{0}\\) \u662f\u672a\u77e5\u77e2\u91cf \\(\\mathbf{h}\\) \u7684\u7ebf\u6027\u65b9\u7a0b\uff0c\u77e9\u9635 \\(A_i\\) \u7684\u5143\u7d20\u662f\u5df2\u77e5\u70b9\u7684\u5750\u6807\u7684\u4e8c\u6b21\u591a\u9879\u5f0f\u3002 \u867d\u7136\u5f0f\u4e2d\u6709\u4e09\u4e2a\u65b9\u7a0b\uff0c\u4f46\u4ec5\u6709\u4e24\u4e2a\u662f\u7ebf\u6027\u72ec\u7acb\u7684\u3002\u5728\u89e3 H \u65f6\u5e38\u7701\u53bb\u7b2c\u4e09\u4e2a\u7b49\u5f0f\u3002 \u8be5\u65b9\u7a0b\u7ec4\u5bf9 \\(\\mathbf{x}_i^\\prime\\) \u7684\u4efb\u4f55\u9f50\u6b21\u5750\u6807 \\((x_i^\\prime, y_i^\\prime, w_i^\\prime)^\\top\\) \u6210\u7acb\u3002 \u6c42\u89e3 H \uff1a\u6bcf\u7ec4\u70b9\u5bf9\u5e94\u7ed9\u51fa\u5173\u4e8e H \u5143\u7d20\u7684\u4e24\u4e2a\u72ec\u7acb\u7684\u65b9\u7a0b\u3002\u7ed9\u5b9a\u56db\u7ec4\u8fd9\u6837\u7684\u70b9\u5bf9\u5e94\uff0c\u4fbf\u83b7\u5f97\u65b9\u7a0b\u7ec4 \\(A\\mathbf{h}=\\mathbf{0}\\) \u3002","title":"\u76f4\u63a5\u7ebf\u6027\u53d8\u6362\uff08DLT\uff09\u7b97\u6cd5"},{"location":"cv/mvg/est2d/#_1","text":"\u5982\u679c\u7ed9\u51fa\u7684\u70b9\u5bf9\u5e94 \\(\\mathbf{x}_i \\leftrightarrow \\mathbf{x}_i^\\prime\\) \u591a\u4f59\u56db\u7ec4\uff0c\u65b9\u7a0b \\(A\\mathbf{h}=\\mathbf{0}\\) \u662f\u8d85\u5b9a\u7684\u3002 \u5982\u679c\u70b9\u7684\u4f4d\u7f6e\u662f\u7cbe\u786e\u7684\uff0c\u90a3\u4e48 \\(A\\) \u7684\u79e9\u4ecd\u7136\u4e3a 8 \u5e76\u6709\u4e00\u7ef4\u96f6\u7a7a\u95f4\uff0c\u5e76\u4e14\u5b58\u5728\u7cbe\u786e\u89e3 \\(\\mathbf{h}\\) \u3002 \u5982\u679c\u56fe\u50cf\u5750\u6807\u7684\u6d4b\u91cf\u65f6\u4e0d\u7cbe\u786e\u7684\uff0c\u65b9\u7a0b\u7ec4\u5c06\u4e0d\u5b58\u5728\u7cbe\u786e\u89e3\u3002\u6240\u4ee5\u9700\u8981\u4e00\u4e2a\u9002\u5f53\u7684\u4ee3\u4ef7\u51fd\u6570\u53d6\u6700\u5c0f\u503c\u7684\u77e2\u91cf \\(\\mathbf{h}\\) \uff0c\u901a\u5e38\u9644\u52a0\u8303\u6570\u6761\u4ef6\uff0c\u65e2\u7136\u4e0d\u5b58\u5728 \\(A\\mathbf{h}=\\mathbf{0}\\) \u7684\u7cbe\u786e\u89e3\uff0c\u5f88\u81ea\u7136\u4f1a\u5728\u901a\u5e38\u7ea6\u675f \\(\\parallel \\mathbf{h} \\parallel = 1\\) \u4e0b\u6700\u5c0f\u5316\u8303\u6570 \\(\\parallel A \\mathbf{h} \\parallel\\) \u3002\u8fd9\u7b49\u4ef7\u4e8e\u6c42\u5546 \\(\\parallel A \\mathbf{h} \\parallel / \\parallel \\mathbf{h} \\parallel\\) \u7684\u6700\u5c0f\u503c\u95ee\u9898\u3002\u8be5\u89e3\u662f \\(A^\\top A\\) \u7684\u6700\u5c0f\u7279\u5f81\u503c\u7684\uff08\u5355\u4f4d\uff09\u7279\u5f81\u77e2\u91cf\u3002\u7531\u6b64\u6240\u5f97\u5230\u7684\u7b97\u6cd5\u79f0\u4e3a \u57fa\u672cDLT\u7b97\u6cd5 \u3002","title":"\u8d85\u5b9a\u89e3"},{"location":"cv/mvg/est2d/#_2","text":"\u628a\u7b49\u5f0f\u8f6c\u6210\u975e\u9f50\u6b21\u7ebf\u6027\u65b9\u7a0b\u7ec4\uff0c\u5373\u7ed9\u77e2\u91cf \\(\\mathbf{h}\\) \u4e2d\u7684\u67d0\u4e2a\u5143\u7d20\u5f3a\u52a0\u4e0a \\(h_j=1\\) \u7684\u6761\u4ef6\uff1a \\[ \\begin{bmatrix} 0 & 0 & 0 & -x_iw_i^\\top & -y_iw_i^\\top & -w_iw_i^\\top & x_iy_i^\\top & y_iy_i^\\top \\\\ x_iw_i^\\top & y_iw_i^\\top & w_iw_i^\\top & 0 & 0 & 0 & -x_ix_i^\\top & -y_ix_i^\\top \\\\ \\end{bmatrix} \\bar{\\mathbf{h}}= \\begin{bmatrix} -w_iy_i^\\top \\\\ -w_ix_i^\\top \\end{bmatrix} \\] \u5176\u4e2d \\(\\bar{\\mathbf{h}}\\) \u662f\u7531 \\(\\mathbf{h}\\) \u7684\u524d\u516b\u4e2a\u5143\u7d20\u7ec4\u6210\u7684 8 \u7ef4\u77e2\u91cf\u3002 \u4f46\u662f\uff0c\u5982\u679c\u4e8b\u5b9e\u4e0a\u771f\u6b63\u7684\u89e3\u662f \\(h_j=0\\) \uff0c\u90a3\u4e48\u4e0d\u5b58\u5728\u4e00\u56e0\u5b50 \\(k\\) \u4f7f\u5f97 \\(kh_j=1\\) \uff0c\u8868\u793a\u4ee4 \\(h_j=1\\) \u5f97\u4e0d\u5230\u771f\u89e3\u3002","title":"\u975e\u9f50\u6b21\u89e3"},{"location":"cv/mvg/est2d/#_3","text":"\u5982\u679c \\(\\mathbf{x}_1, \\mathbf{x}_2, \\mathbf{x}_3\\) \u5171\u7ebf\uff0c\u90a3\u4e48 \\(H^*=\\mathbf{x}_4^\\top\\mathbf{I}^\\top\\) \u662f\u4e00\u4e2a\u89e3 \\(H^*\\) \u662f\u552f\u4e00\u89e3\uff08\u76f8\u5dee\u4e00\u5c3a\u5ea6\u56e0\u5b50\uff09\uff0c\u56e0\u4e3a \\(H^*\\) \u662f\u5947\u5f02\u77e9\u9635\uff0c\u4e0d\u5b58\u5728\u628a\u6bcf\u4e2a \\(\\mathbf{x}_i\\) \u53d8\u5230 \\(\\mathbf{x}_i^\\prime\\) \u7684\u53d8\u6362\u3002\u5f53 \\(\\mathbf{x}_1, \\mathbf{x}_2, \\mathbf{x}_3\\) \u5171\u7ebf\uff0c\u800c \\(\\mathbf{x}_1^\\prime, \\mathbf{x}_2^\\prime, \\mathbf{x}_3^\\prime\\) \u4e0d\u5171\u7ebf\u65f6\u5c31\u4f1a\u4ea7\u751f\u8fd9\u79cd\u60c5\u51b5 \u5b58\u5728\u53e6\u5916\u4e00\u4e2a\u89e3 \\(H\\) \uff1a\u4ece\u800c\u4efb\u4f55\u5f62\u5982 \\(\\alpha H^*+\\beta H\\) \u7684\u77e9\u9635\u90fd\u662f\u89e3\uff0c\u56e0\u6b64\u6709\u4e00\u4e2a 2 \u53c2\u6570\u7684\u53d8\u6362\u7c07\u5b58\u5728\uff0c\u8fdb\u800c\u63a8\u51fa\u7ed9\u51fa\u7684 8 \u4e2a\u65b9\u7a0b\u4e0d\u662f\u72ec\u7acb\u7684 \u51fa\u73b0\u67d0\u79cd\u914d\u7f6e\u4e0d\u80fd\u786e\u5b9a\u552f\u4e00\u89e3\u7684\u60c5\u5f62\u79f0\u4e3a \u9000\u5316 \u3002 \u9000\u5316\u7684\u5b9a\u4e49\u65e2\u6d89\u53ca\u914d\u7f6e\u4e5f\u6d89\u53ca\u53d8\u6362\u7c7b\u578b\uff0c\u800c\u4e14\u9000\u5316\u95ee\u9898\u4e0d\u4ec5\u9650\u4e8e\u6700\u5c0f\u914d\u7f6e\u89e3\u3002\u5982\u679c\u591a\u51fa\u6765\u7684\uff08\u7cbe\u786e\u7684\uff0c\u5373\u65e0\u8bef\u5dee\u7684\uff09\u70b9\u5bf9\u5e94\u4e5f\u5171\u7ebf\uff0c\u90a3\u4e48\u9000\u5316\u95ee\u9898\u4ecd\u6ca1\u6709\u89e3\u51b3\u3002","title":"\u9000\u5316\u914d\u7f6e"},{"location":"cv/mvg/est2d/#_4","text":"\u524d\u9762\u53ea\u8ba8\u8bba\u7531\u70b9\u5bf9\u5e94\u6765\u8ba1\u7b97\u5355\u5e94\uff0c\u7136\u800c\u7ebf\u5bf9\u5e94\u548c\u4e8c\u6b21\u66f2\u7ebf\u7684\u5bf9\u5e94\u4e5f\u53ef\u4ee5\u8ba1\u7b97\u5355\u5e94\uff0c\u6240\u4ee5\u5c31\u4ea7\u751f\u8ba1\u7b97\u4e00\u4e2a\u5355\u5e94\uff08\u6216\u4efb\u4f55\u5176\u4ed6\u5173\u7cfb\uff09\u9700\u8981\u591a\u5c11\u7ec4\u5bf9\u5e94\u7684\u95ee\u9898\u3002\u4e00\u822c\u7684\u539f\u5219\u662f\u7ea6\u675f\u6570\u5fc5\u987b\u7b49\u4e8e\u6216\u5927\u4e8e\u53d8\u6362\u7684\u81ea\u7531\u5ea6\u6570\u3002 \u91c7\u7528\u6df7\u5408\u7c7b\u578b\u7684\u5bf9\u5e94\u6765\u8ba1\u7b97 H \u65f6\u5fc5\u987b\u8c28\u614e\uff0c\u4f8b\u5982\u4e00\u4e2a 2D \u5355\u5e94\u4e0d\u80fd\u7531\u4e24\u7ec4\u70b9\u5bf9\u5e94\u548c\u4e24\u7ec4\u7ebf\u5bf9\u5e94\u552f\u4e00\u786e\u5b9a\uff0c\u4f46\u80fd\u7531\u4e09\u7ea7\u70b9\u548c\u4e00\u7ec4\u7ebf\u6216\u4e00\u7ec4\u70b9\u548c\u4e09\u7ec4\u7ebf\u6765\u552f\u4e00\u786e\u5b9a\uff0c\u5373\u4f7f\u6bcf\u79cd\u914d\u7f6e\u90fd\u6709 8 \u4e2a\u81ea\u7531\u5ea6\u4e5f\u662f\u5982\u6b64\u3002","title":"\u7531\u7ebf\u548c\u5176\u4ed6\u5b9e\u4f53\u6c42\u89e3"},{"location":"cv/mvg/est2d/#_5","text":"\u4e3a\u786e\u5b9a H \u7684\u8d85\u5b9a\u89e3\u800c\u9700\u6700\u5c0f\u5316\u7684\u82e5\u5e72\u4ee3\u4ef7\u51fd\u6570","title":"\u4e0d\u540c\u7684\u4ee3\u4ef7\u51fd\u6570"},{"location":"cv/mvg/est2d/#_6","text":"DLT \u7b97\u6cd5\u6700\u5c0f\u5316\u8303\u6570 \\(\\parallel A \\mathbf{h} \\parallel\\) \u3002 \u77e2\u91cf \\(\\varepsilon=A\\mathbf{h}\\) \u79f0\u4e3a\u6b8b\u5dee\u77e2\u91cf\uff0c\u5e76\u4e14\u8981\u6700\u5c0f\u5316\u7684\u6b63\u662f\u8be5\u8bef\u5dee\u77e2\u91cf\u7684\u8303\u6570\u3002 \u77e2\u91cf \\(\\varepsilon_i\\) \u88ab\u79f0\u4e3a\u5173\u8054\u4e8e\u70b9\u5bf9\u5e94 \\(\\mathbf{x}_i \\leftrightarrow \\mathbf{x}_i^\\prime\\) \u548c\u5355\u5e94 H \u7684 \u4ee3\u6570\u8bef\u5dee\u77e2\u91cf \uff0c\u8be5\u77e2\u91cf\u7684\u8303\u6570\u662f\u4e00\u4e2a\u6807\u91cf\uff0c\u79f0\u4e3a \u4ee3\u6570\u8ddd\u79bb \uff1a \\[ d_{alg}(\\mathbf{x}_i^\\prime, H\\mathbf{x}_i)^2= \\parallel \\varepsilon_i \\parallel= \\parallel \\begin{bmatrix} \\mathbf{0}^\\top & -w_i^\\prime\\mathbf{x}_i^\\top & y_i^\\prime \\mathbf{x}_i^\\top \\\\ w_i^\\prime\\mathbf{x}_i^\\top & \\mathbf{0}^\\top & -x_i^\\prime \\mathbf{x}_i^\\top \\end{bmatrix} \\mathbf{h} \\parallel^2 \\] \u5bf9\u4e8e\u4efb\u4f55\u4e24\u4e2a\u77e2\u91cf \\(\\mathbf{x}_1\\) \u548c \\(\\mathbf{x}_2\\) \uff1a \\[ \\sum_{i}d_{alg}(\\mathbf{x}_1, \\mathbf{x}_2)^2=a_1^2+a_2^2 \\ \\ \u5176\u4e2d\\mathbf{a}=(a_1,a_2,a_3)^\\top=\\mathbf{x}_1 \\times \\mathbf{x}_2 \\] \u7ed9\u5b9a\u5bf9\u5e94\u7684\u96c6\u5408\uff0c\u91cf \\(\\varepsilon=A\\mathbf{h}\\) \u662f\u6574\u4e2a\u96c6\u5408\u7684\u4ee3\u6570\u8bef\u5dee\u77e2\u91cf\uff0c\u7531\u6b64\u53ef\u89c1\uff1a \\[ \\sum_{i}d_{alg}(\\mathbf{x}_i^\\prime, H\\mathbf{x}_i)^2= \\sum_{i} \\parallel \\varepsilon_i \\parallel^2= \\parallel A\\mathbf{h} \\parallel^2= \\parallel \\varepsilon \\parallel^2 \\] \u7f3a\u70b9\u662f\u88ab\u6700\u5c0f\u5316\u7684\u91cf\u6ca1\u6709\u51e0\u4f55\u6216\u7edf\u8ba1\u4e0a\u7684\u610f\u4e49\u3002","title":"\u4ee3\u6570\u8ddd\u79bb"},{"location":"cv/mvg/est2d/#_7","text":"","title":"\u51e0\u4f55\u8ddd\u79bb"},{"location":"cv/mvg/est2d/#_8","text":"\u77e2\u91cf \\(\\mathbf{x}\\) \u8868\u793a \u6d4b\u91cf \u7684\u56fe\u50cf\u5750\u6807\uff1b \\(\\hat{\\mathbf{x}}\\) \u8868\u793a\u8be5\u70b9\u7684\u4f30\u8ba1\u503c\u800c \\(\\bar{\\mathbf{x}}\\) \u8868\u793a\u8be5\u70b9\u7684\u771f\u503c\u3002","title":"\u8bb0\u53f7"},{"location":"cv/mvg/est2d/#_9","text":"\u9996\u5148\u8003\u8651\u7b2c\u4e00\u5e45\u56fe\u50cf\u7684\u6d4b\u91cf\u975e\u5e38\u7cbe\u786e\u800c\u8bef\u5dee\u4ec5\u51fa\u73b0\u5728\u7b2c\u4e8c\u5e45\u56fe\u50cf\u7684\u60c5\u5f62\u3002\u9002\u5b9c\u6700\u5c0f\u5316\u7684\u91cf\u662f \u8f6c\u79fb\u8bef\u5dee \u3002\u5b83\u662f\u7b2c\u4e8c\u5e45\u56fe\u50cf\u4e0a\u6d4b\u91cf\u70b9 \\(\\mathbf{x}^\\prime\\) \u4e0e\u70b9 \\(H\\bar{\\mathbf{x}}\\) \u4e4b\u95f4\u7684 \u6b27\u6c0f\u8ddd\u79bb \u3002\u7528\u8bb0\u53f7 \\(d(\\mathbf{x}, \\mathbf{y})\\) \u8868\u793a\u975e\u9f50\u6b21\u70b9 \\(\\mathbf{x}\\) \u548c \\(\\mathbf{y}\\) \u4e4b\u95f4\u7684\u6b27\u6c0f\u8ddd\u79bb\u3002\u5bf9\u5e94\u96c6\u5408\u7684\u8f6c\u79fb\u8bef\u5dee\u662f\uff1a \\[ \\sum_{i} d(\\mathbf{x}_i^\\prime, H\\bar{\\mathbf{x}_i})^2 \\]","title":"\u5355\u56fe\u50cf\u8bef\u5dee"},{"location":"cv/mvg/est2d/#_10","text":"\u66f4\u5207\u5408\u5b9e\u9645\u7684\u60c5\u5f62\u662f\u56fe\u50cf\u6d4b\u91cf\u8bef\u5dee\u5728\u4e24\u5e45\u56fe\u50cf\u4e2d\u90fd\u53d1\u751f\uff0c\u4ece\u800c\u5e94\u8be5\u6700\u5c0f\u5316\u4e24\u5e45\u800c\u4e0d\u4ec5\u662f\u4e00\u5e45\u56fe\u50cf\u7684\u8bef\u5dee\uff1a \\[ \\sum_{i} d(\\mathbf{x}_i, H^{-1}\\mathbf{x}_i^\\prime)^2+d(\\mathbf{x}_i^\\prime, H\\mathbf{x}_i)^2 \\]","title":"\u5bf9\u79f0\u8f6c\u79fb\u8bef\u5dee"},{"location":"cv/mvg/est2d/#_11","text":"\u5bf9\u6bcf\u5e45\u56fe\u50cf\u8bef\u5dee\u4f5c\u91cf\u5316\u7684\u53e6\u4e00\u79cd\u65b9\u6cd5\u662f\u4f30\u8ba1\u6bcf\u7ec4\u5bf9\u5e94\u7684\u201c\u6821\u6b63\u503c\u201d\u3002\u4e3a\u4e86\u5f97\u5230\u5b8c\u5168\u7684\u5339\u914d\u70b9\u96c6\u6709\u5fc5\u8981\u5728\u4e00\u5e45\u56fe\u50cf\uff08\u7b2c\u4e8c\u5e45\u56fe\u50cf\uff09\u4e0a\u5bf9\u6d4b\u91cf\u8fdb\u884c\u6821\u6b63\u3002 \u5355\u5e94 \\(\\hat{H}\\) \u548c\u5b8c\u5168\u5339\u914d\u7684\u70b9\u5bf9 \\(\\hat{\\mathbf{x}_i}\\) \u548c \\(\\hat{\\mathbf{x}_i}^\\prime\\) \u4ee5\u6700\u5c0f\u5316\u603b\u7684\u8bef\u5dee\u51fd\u6570: \\[ \\sum_{i} d(\\mathbf{x}_i, \\hat{\\mathbf{x}_i})^2+d(\\mathbf{x}_i^\\prime, \\hat{\\mathbf{x}_i}^\\prime)^2 \\ \\ \\ s.t \\ \\ \\ \\hat{\\mathbf{x}_i}^\\prime=\\hat{H}\\hat{\\mathbf{x}_i} \\ \\ \\ \\forall i. \\] \u5148\u7531 \\(\\mathbf{x}_i \\leftrightarrow \\mathbf{x}_i^\\prime\\) \u4f30\u8ba1\u4e16\u754c\u5e73\u9762\u7684\u70b9 \\(\\hat{\\mathbf{X}_i}\\) \uff0c\u7136\u540e\u628a\u5b83\u91cd\u6295\u5f71\u5230\u4f30\u8ba1\u4e0a\u8ba4\u4e3a\u662f\u5b8c\u5168\u5339\u914d\u7684\u5bf9\u5e94 \\(\\hat{\\mathbf{x}_i} \\leftrightarrow \\hat{\\mathbf{x}_i}^\\prime\\)","title":"\u91cd\u6295\u5f71\u8bef\u5dee\u2014\u2014\u4e24\u5e45\u56fe\u50cf"},{"location":"cv/mvg/est2d/#_12","text":"\u4ee4 \\(\\mathbf{x}_i^\\prime=(x_i^\\prime, y_i^\\prime, w_i^\\prime)^\\top\\) \u5e76\u5b9a\u4e49\u77e2\u91cf \\((\\hat{x_i}^\\prime, \\hat{y_i}^\\prime, \\hat{w_i}^\\prime)^\\top=\\hat{\\mathbf{x}_i}^\\prime=H\\bar{\\mathbf{x}}\\) \uff0c\u5219 \\[ d(\\mathbf{x}_i^\\prime, \\hat{\\mathbf{x}_i}^\\prime)^2= d_{alg}(\\mathbf{x}_i^\\prime, \\hat{\\mathbf{x}_i}^\\prime)^2/\\hat{w_i}^\\prime w_i^\\prime \\] \u51e0\u4f55\u8ddd\u79bb\u4e0e\u4ee3\u6570\u8ddd\u79bb\u76f8\u5173\uff0c\u4f46\u4e0d\u76f8\u7b49\u3002\u53ea\u6709\u5f53 \\(\\hat{w_i}^\\prime=w_i^\\prime=1\\) \u4e24\u4e2a\u8ddd\u79bb\u76f8\u7b49\u3002\u56e0\u6b64\u5728\u4eff\u5c04\u53d8\u6362\u4e0b\uff0c\u51e0\u4f55\u8ddd\u79bb\u548c\u4ee3\u6570\u8ddd\u79bb\u76f8\u7b49\u3002\u5bf9\u4e8e\u4eff\u5c04\u53d8\u6362\uff0c\u6700\u5c0f\u5316\u51e0\u4f55\u8ddd\u79bb\u53ef\u4ee5\u7528\u57fa\u4e8e\u4ee3\u6570\u8ddd\u79bb\u7684\u7ebf\u6027 DLT \u7b97\u6cd5\u3002","title":"\u51e0\u4f55\u548c\u4ee3\u6570\u8ddd\u79bb\u7684\u6bd4\u8f83"},{"location":"cv/mvg/est2d/#_13","text":"\u4e24\u5e73\u9762\u4e4b\u95f4\u7684\u5355\u5e94\u4f30\u8ba1\u53ef\u4ee5\u89c6\u4e3a\u7528 4D \u7a7a\u95f4 \\(IR^4\\) \u4e2d\u7684\u201c\u66f2\u9762\u201d\u6765\u62df\u5408\u70b9\u3002 \u6bcf\u5bf9\u56fe\u50cf\u70b9 \\(\\mathbf{x}, \\mathbf{x}^\\prime\\) \u5b9a\u4e49\u6d4b\u91cf\u7a7a\u95f4 \\(IR^4\\) \u7684\u4e00\u4e2a\u70b9\uff0c\u8bb0\u4f5c \\(\\mathbf{X}\\) \u3002 \u5bf9\u7ed9\u5b9a\u7684\u5355\u5e94 H\uff0c\u6ee1\u8db3 \\(\\mathbf{x} \\times \\mathbf{x}^\\prime=\\mathbf{0}\\) \u7684\u56fe\u50cf\u5bf9\u5e94 \\(\\mathbf{x} \\leftrightarrow \\mathbf{x}^\\prime\\) \u5b9a\u4e49\u6765 \\(IR^4\\) \u4e2d\u7684\u4e00\u4e2a\u4ee3\u6570\u7c07 \\(\\upsilon_H\\) \uff0c\u5b83\u662f\u4e24\u4e2a\u8d85\u4e8c\u6b21\u66f2\u9762\u7684\u4ea4\u96c6\u3002 \\[ d(\\mathbf{x}_i, \\hat{\\mathbf{x}_i})^2+d(\\mathbf{x}_i^\\prime, \\hat{\\mathbf{x}_i}^\\prime)^2=d_\\perp(\\mathbf{X}_i, \\upsilon_H)^2 \\] \u5176\u4e2d \\(d_\\perp(\\mathbf{X}_i, \\upsilon_H)^2\\) \u662f\u70b9 \\(\\mathbf{X}\\) \u5230\u7c07 \\(\\upsilon_H\\) \u7684\u5782\u76f4\u8ddd\u79bb\u3002","title":"\u91cd\u6295\u5f71\u8bef\u5dee\u7684\u51e0\u4f55\u89e3\u91ca"},{"location":"cv/mvg/est2d/#sampson","text":"Sampson \u8bef\u5dee\u5176\u590d\u6742\u6027\u4ecb\u4e8e\u4ee3\u6570\u548c\u51e0\u4f55\u4ee3\u4ef7\u51fd\u6570\u4e4b\u95f4\uff0c\u4f46\u975e\u5e38\u8fd1\u4f3c\u4e8e\u51e0\u4f55\u8bef\u5dee\u3002 \u5bf9\u7ed9\u5b9a\u7684\u5355\u5e94 H\uff0c\u5728 \\(\\upsilon_H\\) \u4e0a\u7684\u4efb\u4f55\u70b9 \\(\\mathbf{X}=(x,y,x^\\prime, y^\\prime)^\\top\\) \uff0c\u4ee3\u4ef7\u51fd\u6570\u7528 \\(\\mathcal{C}_H(\\mathbf{X})=\\mathbf{0}\\) \u3002\u7528\u4e0b\u5217 Taylor \u5c55\u5f00\u5f0f\u6765\u4e00\u9636\u903c\u8fd1\uff1a \\[ \\mathcal{C}_H(\\mathbf{X}+\\delta_x)=\\mathcal{C}_H(\\mathbf{X})+\\frac{\\partial \\mathcal{C}_H}{\\partial \\mathbf{X}} \\delta_x \\] \u8bb0 \\(\\delta_x = \\hat{\\mathbf{X}}-\\mathbf{X}\\) \u5e0c\u671b \\(\\hat{\\mathbf{X}}\\) \u5728 \\(\\upsilon_H\\) \u4e0a\uff0c\u5373 \\(\\mathcal{C}_H(\\hat{\\mathbf{X}})=\\mathbf{0}\\) \uff0c\u56e0\u6b64 \\(\\mathcal{C}_H(\\mathbf{X})+\\frac{\\partial \\mathcal{C}_H}{\\partial \\mathbf{X}} \\delta_x=\\mathbf{0}\\) \u3002\u8bb0\u6210 \\(\\mathbf{J}\\delta_x=-\\varepsilon\\) \uff0c\u5176\u4e2d \\(\\mathbf{J}\\) \u662f\u504f\u5bfc\u6570\u77e9\u9635\uff0c \\(\\varepsilon\\) \u4e0e \\(\\mathbf{X}\\) \u76f8\u5173\u7684\u4ee3\u4ef7\u51fd\u6570 \\(\\mathcal{C}_H(\\mathbf{X})\\) \uff0c \u6700\u5c0f\u5316\u95ee\u9898 \u662f\u6c42\u6ee1\u8db3\u6b64\u65b9\u7a0b\u7684\u6700\u5c0f \\(\\delta_x\\) \u3002 \u5373 \u6c42\u5728\u6ee1\u8db3 \\(\\mathbf{J}\\delta_x=-\\varepsilon\\) \u6761\u4ef6\u4e0b\u4f7f \\(\\parallel \\delta_x \\parallel\\) \u53d6\u6700\u5c0f\u503c\u7684\u77e2\u91cf \\(\\delta_x\\) \u4f7f\u7528 Lagrange \u4e58\u5b50\u6cd5\uff0c\u6c42\u7684\u8303\u6570 \\(\\parallel \\delta \\parallel^2\\) \u662f Sampson \u8bef\u5dee\uff1a \\[ \\parallel \\delta_x \\parallel^2= \\delta_x^\\top\\delta_x= \\varepsilon^\\top(\\mathbf{J}\\mathbf{J}^\\top)^{-1}\\varepsilon \\]","title":"Sampson \u8bef\u5dee"},{"location":"cv/mvg/est2d/#_14","text":"\u5047\u5b9a\u5728\u6ca1\u6709\u6d4b\u91cf\u8bef\u5dee\u65f6\uff0c\u771f\u5b9e\u7684\u70b9\u51c6\u786e\u6ee1\u8db3\u4e00\u4e2a\u5355\u5e94\u53d8\u6362\uff0c\u5373 \\(\\bar{\\mathbf{x}_i}^\\prime=H\\bar{\\mathbf{x}_i}\\) \u3002 \u5047\u5b9a\u6bcf\u4e00\u5e45\u56fe\u50cf\u5750\u6807\u90fd\u5177\u6709\u96f6\u5747\u503c\u548c\u7edf\u4e00\u7684\u6807\u51c6\u5dee \\(\\sigma\\) \u7684\u9ad8\u65af\u566a\u58f0\u3002\u8fd9\u610f\u5473\u7740 \\(x=\\bar{x}+\\Delta x\\) \uff0c\u5176\u4e2d \\(\\Delta x\\) \u670d\u4ece\u65b9\u5dee\u4e3a \\(\\sigma^2\\) \u7684\u9ad8\u65af\u5206\u5e03\u3002\u8fdb\u4e00\u6b65\u5047\u8bbe\u6bcf\u6b21\u6d4b\u91cf\u7684\u566a\u58f0\u662f\u76f8\u5728\u72ec\u7acb\u7684\uff0c\u90a3\u4e48\uff0c\u82e5\u70b9\u7684\u771f\u503c\u662f \\(\\bar{\\mathbf{x}}\\) \uff0c\u5219\u6bcf\u4e2a\u6d4b\u91cf\u70b9 \\(\\mathbf{x}\\) \u7684\u6982\u7387\u5bc6\u5ea6\u51fd\u6570(pdf)\u662f\uff1a \\[ \\Pr(\\mathbf{x})=(\\frac{1}{2\\pi\\sigma^2})e^{-d(\\mathbf{x},\\bar{\\mathbf{x}})^2/(2\\sigma^2)} \\]","title":"\u7edf\u8ba1\u4ee3\u4ef7\u51fd\u6570\u548c\u6700\u5927\u4f3c\u7136\u4f30\u8ba1"},{"location":"cv/mvg/est2d/#_15","text":"\u5047\u5b9a\u6bcf\u70b9\u7684\u8bef\u5dee\u662f\u72ec\u7acb\u7684\uff0c\u70b9\u5bf9\u5e94 \\(\\{\\bar{\\mathbf{x}_i} \\leftrightarrow \\mathbf{x}_i^\\prime\\}\\) \u7684\u6982\u7387\u5c31\u662f\u5b83\u4eec\u5355\u4e2a pdf \u7684\u4e58\u79ef\uff1a \\[ \\Pr(\\{\\mathbf{x}_i^\\prime | H\\}) = \\prod_{i}(\\frac{1}{2\\pi\\sigma^2})e^{-d(\\mathbf{x}_i^\\prime, H \\bar{\\mathbf{x}}_i)^2/(2\\sigma^2)} \\] \u8be5\u5bf9\u5e94\u96c6\u5408\u7684 \u5bf9\u6570\u4f3c\u7136 \u4e3a\uff1a \\[ \\log \\Pr(\\mathbf{x}_i^\\prime | H)=-\\frac{1}{2\\sigma^2}\\sum_{i}d(\\mathbf{x}_i^\\prime, H \\bar{\\mathbf{x}}_i)^2+\u5e38\u6570 \\] \u5355\u5e94\u7684 \u6700\u5927\u4f3c\u7136 ML \u4f30\u8ba1 \\(\\hat{H}\\) \u6700\u5927\u5316\u8fd9\u4e2a\u5bf9\u6570\u4f3c\u7136\uff0c\u5373\u6700\u5c0f\u5316\uff1a \\[ \\sum_{i}d(\\mathbf{x}_i^\\prime, H \\bar{\\mathbf{x}}_i)^2 \\] \u56e0\u6b64\uff0cML \u4f30\u8ba1\u7b49\u4ef7\u4e8e\u6700\u5c0f\u5316\u51e0\u4f55\u8bef\u5dee\u51fd\u6570","title":"\u5355\u56fe\u50cf\u8bef\u5dee"},{"location":"cv/mvg/est2d/#_16","text":"\u5982\u679c\u771f\u5b9e\u5bf9\u5e94\u662f \\(\\{\\bar{\\mathbf{x}}_i \\leftrightarrow H \\bar{\\mathbf{x}}_i=\\bar{\\mathbf{x}}_i^\\prime\\}\\) \uff0c\u53d7\u566a\u58f0\u5e72\u6270\u7684\u6570\u636e\u7684 pdf \u662f\uff1a \\[ \\Pr(\\{\\mathbf{x}_i, \\mathbf{x}_i^\\prime\\} | H, \\{\\bar{\\mathbf{x}}_i\\}) = \\prod_{i}(\\frac{1}{2\\pi\\sigma^2})e^{-(d(\\mathbf{x}_i, \\bar{\\mathbf{x}}_i)^2+d(\\mathbf{x}_i^\\prime, H\\bar{\\mathbf{x}}_i)^2)/(2\\sigma^2)} \\] ML \u4f30\u8ba1\u5c31\u662f\u6c42\u6700\u5c0f\u5316\uff1a \\[ \\sum_{i}d(\\mathbf{x}_i, \\hat{\\mathbf{x}}_i)^2+d(\\mathbf{x}_i^\\prime, \\hat{\\mathbf{x}}_i^\\prime)^2 \\] ML \u4f30\u8ba1\u7b49\u540c\u4e8e\u6700\u5c0f\u5316\u91cd\u6295\u5f71\u8bef\u5dee\u51fd\u6570","title":"\u53cc\u56fe\u50cf\u8bef\u5dee"},{"location":"cv/mvg/est2d/#mahalanobis","text":"\u4e00\u822c\u9ad8\u65af\u5206\u5e03\u7684\u60c5\u5f62\uff0c\u53ef\u4ee5\u5047\u5b9a\u6d4b\u91cf\u77e2\u91cf \\(\\mathbf{X}\\) \u6ee1\u8db3\u4e00\u4e2a\u5177\u6709\u534f\u65b9\u5dee\u77e9\u9635 \\(\\sum\\) \u7684\u9ad8\u65af\u5206\u5e03\u51fd\u6570\u3002\u6700\u5927\u5316\u5bf9\u6570\u4f3c\u7136\u5219\u7b49\u4ef7\u4e8e\u6700\u5c0f\u5316 Mahalanobis \u8ddd\u79bb\uff1a \\[ \\parallel \\mathbf{X} - \\bar{\\mathbf{X}} \\parallel_{\\sum}^2=(\\mathbf{X}-\\bar{\\mathbf{X}})^\\top\\sum\\nolimits^{-1}(\\mathbf{X}-\\bar{\\mathbf{X}}) \\] \u5f53\u6bcf\u5e45\u56fe\u50cf\u90fd\u6709\u8bef\u5dee\u5e76\u5047\u5b9a\u4e00\u5e45\u56fe\u50cf\u4e2d\u7684\u8bef\u5dee\u4e0e\u53e6\u4e00\u5e45\u56fe\u50cf\u4e2d\u7684\u8bef\u5dee\u662f\u72ec\u7acb\u7684\u65f6\uff0c\u5408\u9002\u7684\u4ee3\u4ef7\u51fd\u6570\u662f\uff1a \\[ \\parallel \\mathbf{X} - \\bar{\\mathbf{X}} \\parallel_{\\sum}^2+\\parallel \\mathbf{X}^\\prime - \\bar{\\mathbf{X}}^\\prime \\parallel_{\\sum^\\prime}^2 \\] \u5176\u4e2d \\(\\sum\\) \u548c \\(\\sum^\\prime\\) \u662f\u4e24\u5e45\u56fe\u50cf\u7684\u6d4b\u91cf\u7684\u534f\u65b9\u5dee\u77e9\u9635","title":"Mahalanobis \u8ddd\u79bb"},{"location":"cv/mvg/est2d/#_17","text":"","title":"\u53d8\u6362\u4e0d\u53d8\u6027\u548c\u5f52\u4e00\u5316"},{"location":"cv/mvg/est2d/#_18","text":"\u5047\u5b9a\u4e00\u5e45\u56fe\u50cf\u7684\u5750\u6807 \\(\\mathbf{x}\\) \u88ab \\(\\tilde{\\mathbf{x}}=T\\mathbf{x}\\) \u66ff\u4ee3\uff0c\u800c\u53e6\u4e00\u5e45\u56fe\u50cf\u7684\u5750\u6807 \\(\\mathbf{x}^\\prime\\) \u88ab \\(\\tilde{\\mathbf{x}}^\\prime=T^\\prime\\mathbf{x}^\\prime\\) \u66ff\u4ee3\u3002\u56e0\u6b64 \\(\\mathbf{x}_i\\) \u6620\u5c04\u5230 \\(\\mathbf{x}_i^\\prime\\) \u7684\u53d8\u6362\u7684\u53e6\u4e00\u79cd\u65b9\u6cd5\u662f\uff1a \u6839\u636e\u516c\u5f0f \\(\\tilde{\\mathbf{x}}_i=T\\mathbf{x}_i\\) \u548c \\(\\tilde{\\mathbf{x}}_i^\\prime=T^\\prime\\mathbf{x}_i^\\prime\\) \u53d8\u6362\u56fe\u50cf\u5750\u6807 \u7531\u5bf9\u5e94 \\(\\tilde{\\mathbf{x}}_i \\leftrightarrow \\tilde{\\mathbf{x}}_i^\\prime\\) \uff0c\u6c42 \\(\\tilde{H}\\) \u4ee4 \\(H=T^{\\prime-1}\\tilde{H}T\\)","title":"\u5173\u4e8e\u56fe\u50cf\u5750\u6807\u53d8\u6362\u7684\u4e0d\u53d8\u6027"},{"location":"cv/mvg/est2d/#dlt_1","text":"\u4ee4 \\(T^\\prime\\) \u4e3a\u5177\u6709\u7f29\u653e\u56e0\u5b50 \\(s\\) \u7684\u76f8\u4f3c\u53d8\u6362\uff0c \\(T\\) \u4e3a\u4efb\u610f\u7684\u5c04\u5f71\u53d8\u6362\u3002\u6b64\u5916\uff0c\u5047\u8bbe \\(H\\) \u662f\u4efb\u4f55 2D \u5355\u5e94\u5e76\u5b9a\u4e49 \\(\\tilde{H}=T^\\prime HT^{-1}\\) \uff0c\u90a3\u4e48 \\(\\parallel \\tilde{A} \\tilde{\\mathbf{h}} \\parallel = s \\parallel A \\mathbf{h} \\parallel\\) \u867d\u7136\u8fd9\u6837\u5b9a\u4e49\u7684 \\(H\\) \u548c \\(\\tilde{H}\\) \u7ed9\u51fa\u540c\u6837\u7684\u8bef\u5dee \\(\\varepsilon\\) \uff0c\u4f46\u662f\u5bf9\u89e3\u65bd\u52a0\u7684\u7ea6\u675f\u6761\u4ef6 \\(\\parallel H \\parallel = 1\\) \u4e0d\u7b49\u4ef7\u4e8e\u6761\u4ef6 \\(\\parallel \\tilde{H} \\parallel = 1\\) \uff0c\u5b83\u4eec\u5e76\u4e0d\u4ee5\u4efb\u4f55\u7b80\u5355\u7684\u65b9\u5f0f\u76f8\u5173\u8054\u3002","title":"DLT \u7b97\u6cd5\u7684\u975e\u4e0d\u53d8\u6027"},{"location":"cv/mvg/est2d/#_19","text":"\\[ d(\\tilde{\\mathbf{x}}^\\prime, \\tilde{H}\\tilde{\\mathbf{x}})= d(T^\\prime \\mathbf{x}^\\prime, T^\\prime HT^{-1}T\\mathbf{x})= d(T^\\prime \\mathbf{x}^\\prime, T^\\prime H\\mathbf{x})= d(\\mathbf{x}^\\prime, H\\mathbf{x}) \\] \u5728\u76f8\u4f3c\u53d8\u6362\u4e0b\uff0c\u51e0\u4f55\u8bef\u5dee\u88ab\u4e58\u4ee5\u53d8\u6362\u7684\u7f29\u653e\u56e0\u5b50\uff0c\u4ece\u800c\u6700\u5c0f\u5316\u53d8\u6362\u7684\u5bf9\u5e94\u65b9\u5f0f\u4e0e\u6b27\u6c0f\u53d8\u6362\u76f8\u540c\u3002\u6240\u4ee5\u6700\u5c0f\u5316\u51e0\u4f55\u8bef\u5dee\u5728\u76f8\u4f3c\u53d8\u6362\u4e0b\u4e0d\u53d8\u3002","title":"\u51e0\u4f55\u8bef\u5dee\u7684\u4e0d\u53d8\u6027"},{"location":"cv/mvg/est2d/#_20","text":"\u6570\u636e\u5f52\u4e00\u5316\u4e0d\u4ec5\u63d0\u9ad8\u4e86\u7ed3\u679c\u7684\u7cbe\u5ea6\uff0c\u8fd8\u5bf9\u521d\u59cb\u6570\u636e\u5f52\u4e00\u5316\u7684\u7b97\u6cd5\u5c06\u5bf9\u4efb\u4f55\u5c3a\u5ea6\u7f29\u653e\u548c\u5750\u6807\u539f\u70b9\u7684\u9009\u62e9\u4e0d\u53d8\u3002\u56e0\u800c\u4f7f DLT \u7b97\u6cd5\u5b9e\u9645\u4e0a\u5173\u4e8e\u76f8\u4f3c\u53d8\u6362\u4e0d\u53d8\u3002","title":"\u5f52\u4e00\u5316\u53d8\u6362"},{"location":"cv/mvg/est2d/#_21","text":"\u5bf9\u70b9\u8fdb\u884c\u5e73\u79fb\u4f7f\u70b9\u96c6\u5f62\u5fc3\u4f4d\u4e8e\u539f\u70b9 \u5bf9\u70b9\u8fdb\u884c\u7f29\u653e\u4f7f\u5b83\u4eec\u5230\u539f\u70b9\u7684\u5e73\u5747\u8ddd\u79bb\u7b49\u4e8e \\(\\sqrt{2}\\) \u5bf9\u4e24\u5e45\u56fe\u50cf\u72ec\u7acb\u8fdb\u884c\u4e0a\u8ff0\u53d8\u6362 \u6570\u636e\u5f52\u4e00\u5316\u5728 DLT \u7b97\u6cd5\u4e2d\u662f\u5b9e\u8d28\u6027\u7684\uff0c\u4e00\u5b9a\u4e0d\u8981\u89c6\u5b83\u4e3a\u53ef\u6709\u53ef\u65e0\u7684\u3002","title":"\u5404\u5411\u540c\u6027\u7f29\u653e"},{"location":"cv/mvg/est2d/#_22","text":"\u5f52\u4e00\u5316\u7684\u5f71\u54cd\u4e0e DLT \u65b9\u7a0b\u7ec4\u7684\u6761\u4ef6\u6570\u6216\u51c6\u786e\u5730\u8bf4\u4e0e\u65b9\u7a0b\u7ec4\u77e9\u9635 A \u7684\u7b2c\u4e00\u4e2a\u548c\u5012\u6570\u7b2c\u4e8c\u4e2a\u5947\u5f02\u503c\u7684\u6bd4\u7387 \\(d_1/d_{n-1}\\) \u6709\u5173\u3002\u4f46\u662f\uff0c\u5728\u6709\u566a\u58f0\u5b58\u5728\u65f6\u89e3\u5c06\u504f\u79bb\u5176\u6b63\u786e\u7ed3\u679c\u3002\u5927\u6761\u4ef6\u6570\u4f1a\u653e\u5927\u8fd9\u79cd\u504f\u5411\u3002","title":"\u5f52\u4e00\u5316\u4e0e\u6761\u4ef6\u6570"},{"location":"cv/mvg/est2d/#_23","text":"\u5728\u975e\u5404\u540c\u6027\u7f29\u653e\u4e2d\uff0c\u70b9\u7684\u5f62\u5fc3\u548c\u524d\u9762\u4e00\u6837\u5e73\u79fb\u5230\u539f\u70b9\uff0c\u7ecf\u5e73\u79fb\u540e\u70b9\u5728\u539f\u70b9\u9644\u8fd1\u5f62\u6210\u4e91\u3002\u7136\u540e\u8fdb\u884c\u5750\u6807\u5c3a\u5ea6\u7f29\u653e\u4f7f\u8be5\u70b9\u96c6\u7684\u4e24\u4e3b\u77e9\u90fd\u7b49\u4e8e 1\u3002\u8fd9\u6837\u4f7f\u8be5\u70b9\u96c6\u5f62\u6210\u4ee5\u539f\u70b9\u4e3a\u4e2d\u5fc3\uff0c\u534a\u5f84\u4e3a 1 \u7684\u8fd1\u4f3c\u7684\u5bf9\u79f0\u5706\u4e91\u3002","title":"\u975e\u5404\u5411\u540c\u6027\u7f29\u653e"},{"location":"cv/mvg/est2d/#_24","text":"\u5f53\u70b9\u4f4d\u4e8e\u6216\u63a5\u8fd1\u5e73\u9762\u7684\u65e0\u7a77\u8fdc\u65f6\uff0c\u5404\u5411\u540c\u6027\uff08\u6216\u975e\u5404\u5411\u540c\u6027\uff09\u7684\u7f29\u653e\u65b9\u5f0f\u6765\u5f52\u4e00\u5316\u5750\u6807\u662f\u65e2\u65e0\u9053\u7406\u53c8\u4e0d\u53ef\u884c\u7684\uff0c\u56e0\u4e3a\u5f62\u5fc3\u5750\u6807\u548c\u7f29\u653e\u56e0\u5b50\u4e3a\u65e0\u7a77\u5927\u6216\u63a5\u8fd1\u65e0\u7a77\u5927\u3002\u4e00\u4e2a\u4f3c\u4e4e\u4f1a\u7ed9\u51fa\u597d\u7ed3\u679c\u7684\u65b9\u6cd5\u662f\u5f52\u4e00\u5316\u70b9\u96c6 \\(\\mathbf{x}_i=(x_i,y_i,w_i)^\\top\\) \u4f7f\u5f97\uff1a \\[ \\sum_i x_i=\\sum_i y_i=0;\\sum_ix_i^2+y_i^2=2\\sum_iw_i^2;x_i^2+y_i^2+w_i^2=1,\\forall i \\]","title":"\u65e0\u7a77\u8fdc\u9644\u8fd1\u7684\u70b9\u7684\u7f29\u653e"},{"location":"cv/mvg/est2d/#_25","text":"\u8fed\u4ee3\u6700\u5c0f\u5316\u6280\u672f \u4ee3\u4ef7\u53c2\u6570 \uff1a\u4ee3\u4ef7\u51fd\u6570\u662f\u6700\u5c0f\u5316\u7684\u57fa\u7840 \u53c2\u6570\u5316 \uff1a\u628a\u8981\u8ba1\u7b97\u7684\u53d8\u6362\uff08\u6216\u5176\u4ed6\u5b9e\u4f53\uff09\u8868\u793a\u6210\u6709\u9650\u6570\u76ee\u7684\u53c2\u6570 \u51fd\u6570\u786e\u5b9a \uff1a\u5fc5\u987b\u786e\u5b9a\u4e00\u4e2a\u7528\u53c2\u6570\u96c6\u63cf\u8ff0\u7684\u4ee3\u4ef7\u51fd\u6570 \u521d\u59cb\u5316 \uff1a\u8ba1\u7b97\u4e00\u4e2a\u9002\u5f53\u7684\u521d\u59cb\u53c2\u6570\u4f30\u8ba1\u3002\u4e00\u822c\u5c06\u7531\u4e00\u4e2a\u7ebf\u6027\u7b97\u6cd5\uff08\u4f8b\u5982 DLT \u7b97\u6cd5\uff09\u6765\u5b9e\u73b0 \u8fed\u4ee3 \uff1a\u7531\u521d\u59cb\u89e3\u5f00\u59cb\uff0c\u5728\u8fed\u4ee3\u4e2d\u9010\u6b65\u4fee\u6b63\u53c2\u6570\u4ee5\u8fbe\u5230\u6700\u5c0f\u5316\u4ee3\u4ef7\u51fd\u6570\u7684\u76ee\u7684","title":"\u8fed\u4ee3\u6700\u5c0f\u5316\u65b9\u6cd5"},{"location":"cv/mvg/est2d/#_26","text":"\u6307\u5bfc\u53c2\u6570\u5316\u7684\u4e00\u822c\u7b56\u7565\u662f\u9009\u62e9\u80fd\u8986\u76d6\u6700\u5c0f\u5316\u7684\u6574\u4e2a\u7a7a\u95f4\u5e76\u80fd\u7528\u4e00\u79cd\u65b9\u4fbf\u7684\u65b9\u5f0f\u6765\u8ba1\u7b97\u4ee3\u4ef7\u51fd\u6570\u3002\u5bf9\u4e8e\u9f50\u6b21\u76ee\u6807\u901a\u5e38\u8bbe\u6709\u5fc5\u8981\u6216\u4e0d\u9f13\u52b1\u8ffd\u6c42\u6d88\u9664\u5c3a\u5ea6\u56e0\u5b50\u7684\u591a\u4e49\u6027\u800c\u91c7\u7528\u6700\u5c0f\u53c2\u6570\u5316\u3002\u9009\u62e9\u53c2\u6570\u5316\u7684\u53e6\u4e00\u4e2a\u8003\u8651\u662f\u9650\u5236\u53d8\u6362\u4e3a\u4e00\u4e2a\u5177\u4f53\u7684\u7c7b\u578b\u3002","title":"\u5173\u4e8e\u53c2\u6570\u5316"},{"location":"cv/mvg/est2d/#_27","text":"\u6709\u4e00\u4e2a\u534f\u65b9\u5dee\u77e9\u9635\u4e3a \\(\\sum\\) \u7684 \u6d4b\u91cf\u77e2\u91cf \\(\\mathbf{X} \\in IR^N\\) \u4e00\u7ec4\u53c2\u6570\u88ab\u8868\u8fbe\u6210\u4e00\u4e2a\u77e2\u91cf \\(\\mathbf{P} \\in IR^M\\) \u5b9a\u4e49\u4e00\u4e2a\u6620\u5c04 \\(f:\\ IR^M \\to IR^N\\) \uff0c\u5176\u503c\u57df\uff08\u81f3\u5c11\u5c40\u90e8\u5730\uff09\u662f \\(IR^N\\) \u4e2d\u8868\u793a\u5bb9\u8bb8\u6d4b\u91cf\u96c6\u7684\u6a21\u578b\u66f2\u9762 S \u6700\u5c0f\u5316\u4ee3\u4ef7\u51fd\u6570\u662f Mahalanobis \u8ddd\u79bb \\[\\parallel \\mathbf{X} - f(\\mathbf{P}) \\parallel_{\\sum}^2=(\\mathbf{X} - f(\\mathbf{P}))^\\top\\sum\\nolimits^{-1}(\\mathbf{X} - f(\\mathbf{P}))\\] \u5355\u56fe\u50cf\u8bef\u5dee-\u6700\u5c0f\u5316\u4ee3\u4ef7\u51fd\u6570 \uff1a\u56fa\u5b9a\u7b2c\u4e00\u5e45\u56fe\u50cf\u4e2d\u70b9 \\(\\mathbf{x}_i\\) \u7684\u5750\u6807\uff0c\u5e76\u53d8\u6362 H \u4ee5\u6700\u5c0f\u5316\u4ee3\u4ef7\u51fd\u6570\uff1a \\[ \\sum_id(\\mathbf{x}_i^\\prime,H\\tilde{\\mathbf{x}}_i)^2 \\\\ f:\\mathbf{h} \\to (H\\mathbf{x}_1, H\\mathbf{x}_2, ..., H\\mathbf{H}_n) \\] \u5bf9\u79f0\u4f20\u9012\u8bef\u5dee-\u5bf9\u79f0\u5316\u4ee3\u4ef7\u51fd\u6570 \\[ \\sum_id(\\mathbf{x}_i, H^{-1}\\mathbf{x}_i^\\prime)^2+d(\\mathbf{x}_i^\\prime, H\\mathbf{x}_i)^2 \\\\ f: \\mathbf{h} \\to (H^{-1}\\mathbf{x}_1^\\prime, ..., H^{-1}\\mathbf{x}_n^\\prime, H\\mathbf{x}_1, ..., H\\mathbf{x}_n) \\] \u91cd\u6295\u5f71\u8bef\u5dee \uff1a\u53ef\u4ee5\u7528 \\(\\hat{\\mathbf{x}}_i\\) \u5750\u6807\u548c \\(\\hat{H}\\) \u77e9\u9635\u7684\u5143\u7d20\u2014\u2014\u603b\u5171 \\(2n+9\\) \u4e2a\u53c2\u6570\u6765\u53c2\u6570\u5316\u3002 \u53c2\u6570\u77e2\u91cf \uff1a \\(\\mathbf{P}=(\\mathbf{h}, \\hat{\\mathbf{x}}_i, ..., \\hat{\\mathbf{x}}_n)\\) \u3002\u51fd\u6570 \\(f\\) \u5b9a\u4e49\u4e3a \\(f:\\mathbf{P}\\to (\\hat{\\mathbf{x}}_1, \\hat{\\mathbf{x}}_i^\\prime, ..., \\hat{\\mathbf{x}}_n, \\hat{\\mathbf{x}}_n^\\prime)\\) Sampson \u8fd1\u4f3c \uff1a\u91cd\u6295\u5f71\u8bef\u5dee\u7684 Sampson \u8fd1\u4f3c\u4f7f\u6295\u5f71\u8bef\u5dee\u4e5f\u80fd\u4ec5\u5bf9 9 \u4e2a\u53c2\u6570\u6700\u5c0f\u5316","title":"\u51fd\u6570\u786e\u5b9a"},{"location":"cv/mvg/est2d/#_28","text":"\u53ef\u4ee5\u7528\u7ebf\u6027\u6280\u672f\u6216\u6700\u5c0f\u914d\u7f6e\u89e3\u6765\u6c42\u53c2\u6570\u5316\u7684\u521d\u59cb\u4f30\u8ba1\u3002\u8fd8\u91c7\u7528\u7684\u53e6\u4e00\u79cd\u65b9\u6cd5\u662f\u5728\u53c2\u6570\u7a7a\u95f4\u8fdb\u884c\u8db3\u591f\u5bc6\u7684\u91c7\u6837\uff0c\u4ece\u6bcf\u4e00\u4e2a\u91c7\u6837\u521d\u59cb\u70b9\u5f00\u59cb\u8fed\u4ee3\u5e76\u4fdd\u7559\u6700\u597d\u7684\u7ed3\u679c\u3002\u8fd9\u79cd\u65b9\u6cd5\u4ec5\u5728\u53c2\u6570\u7a7a\u95f4\u7684\u7ef4\u6570\u8db3\u591f\u5c0f\u65f6\u624d\u53ef\u91c7\u7528","title":"\u521d\u59cb\u5316"},{"location":"cv/mvg/est2d/#_29","text":"\u5176\u4e2d\u6700\u5e38\u7528\u7684\u6709 Newton \u8fed\u4ee3\u548c Levenberg-Marquardt \u65b9\u6cd5\u3002Newton \u8fed\u4ee3\u662f\u6700\u5feb\u7684\uff0c\u4f46\u662f\u5b83\u9700\u8981\u8ba1\u7b97\u4ee3\u4ef7\u51fd\u6570\u7684\u4e8c\u9636\u5bfc\u6570\uff0c\u800c\u4e14\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\u53ef\u80fd\u4f1a\u53d1\u6563\u3002Levenberg-Marquardt \u65b9\u6cd5\u662f\u4e00\u79cd\u66f4\u7a33\u5b9a\u7684\u65b9\u6cd5\uff0c\u4f46\u662f\u5b83\u7684\u6536\u655b\u901f\u5ea6\u6bd4 Newton \u8fed\u4ee3\u6162\u3002","title":"\u8fed\u4ee3\u65b9\u6cd5"},{"location":"cv/mvg/est2d/#_30","text":"","title":"\u7b97\u6cd5\u7684\u5b9e\u9a8c\u6bd4\u8f83"},{"location":"cv/mvg/est2d/#_31","text":"\u4e4b\u524d\u8ba8\u8bba\u7684\u5bf9\u5e94\u96c6\u7684\u552f\u4e00\u8bef\u5dee\u6e90\u6765\u81ea\u70b9\u7684\u4f4d\u7f6e\u6d4b\u91cf\uff0c\u5728\u8bb8\u591a\u5b9e\u9645\u8fd0\u884c\u4e2d\uff0c\u8fd8\u5b58\u5728\u7740\u70b9\u88ab\u9519\u914d\u7684\u60c5\u51b5\u3002\u9519\u914d\u70b9\u5bf9\u9ad8\u65af\u8bef\u5dee\u5206\u5e03\u800c\u8a00\u662f \u91ce\u503c \u3002","title":"\u9c81\u68d2\u4f30\u8ba1"},{"location":"cv/mvg/est2d/#ransac","text":"\u7528 \u6a21\u578b \u53bb\u62df\u5408\u6570\u636e\uff0c \u968f\u673a\u6837\u672c \u5305\u542b\u8db3\u4ee5\u786e\u5b9a\u6a21\u578b\u7684\u6700\u5c0f\u6570\u636e\u96c6\u3002\u5982\u679c\u6a21\u578b\u662f\u5e73\u9762\u5355\u5e94\uff0c\u800c\u6570\u636e\u662f 2D \u70b9\u5bf9\u5e94\u96c6\uff0c\u90a3\u4e48\u6700\u5c0f\u5b50\u96c6\u5305\u542b\u56db\u7ec4\u5bf9\u5e94\u3002 \u7b97\u6cd5\u6d41\u7a0b \u968f\u673a\u5730\u4ece\u6570\u636e\u96c6 \\(S\\) \u4e2d\u9009\u62e9 \\(s\\) \u4e2a\u6570\u636e\u70b9\u7ec4\u6210\u7684\u4e00\u4e2a\u6837\u672c\u4f5c\u4e3a\u6a21\u578b\u7684\u4e00\u4e2a\u793a\u4f8b \u786e\u5b9a\u5728\u6a21\u578b\u8ddd\u79bb\u9608\u503c \\(t\\) \u5185\u7684\u6570\u636e\u70b9\u96c6 \\(S_i\\) \uff0c \\(S_i\\) \u79f0\u4e3a\u91c7\u6837\u7684\u4e00\u81f4\u96c6\u5e76\u5b9a\u4e49 \\(S_i\\) \u7684\u5185\u70b9 \u5982\u679c \\(S_i\\) \u7684\u5927\u5c0f(\u5185\u70b9\u7684\u6570\u76ee)\u5927\u4e8e\u67d0\u4e2a\u9608\u503c \\(T\\) \uff0c\u7528 \\(S_i\\) \u7684\u6240\u6709\u70b9\u91cd\u4f30\u8ba1\u6a21\u578b\u5e76\u7ed3\u675f \u5982\u679c \\(S_i\\) \u7684\u5927\u5c0f\u5c0f\u4e8e \\(T\\) \uff0c\u9009\u62e9\u4e00\u4e2a\u65b0\u7684\u5b50\u96c6\u5e76\u91cd\u590d\u4e0a\u9762\u7684\u8fc7\u7a0b \u7ecf\u8fc7 \\(N\\) \u6b21\u8bd5\u9a8c\u9009\u62e9\u6700\u5927\u4e00\u81f4\u96c6 \\(S_i\\) \uff0c\u5e76\u7528 \\(S_i\\) \u7684\u6240\u6709\u70b9\u91cd\u4f30\u8ba1\u6a21\u578b","title":"RANSAC"},{"location":"cv/mvg/est2d/#_32","text":"\u9c81\u68d2\u4ee3\u4ef7\u51fd\u6570 \uff1a\u4e0d\u540c\u4e8e\u4ec5\u5728\u5185\u70b9\u4e0a\u6700\u5c0f\u5316 \\(\\mathcal{C}=\\sum_{i}d_{\\perp}^2\\) \uff0c\u53e6\u4e00\u79cd\u6539\u8fdb\u7684\u9c81\u68d2\u65b9\u6cd5\u662f\u5728\u6240\u6709\u6570\u636e\u4e0a\u6700\u5c0f\u5316\u3002\u4e00\u4e2a\u5408\u9002\u7684\u9c81\u68d2\u4ee3\u4ef7\u51fd\u6570\u662f \\[ \\mathcal{D}=\\sum_i \\gamma(d_{\\perp})\u4e14\\gamma(e)= \\left\\{\\begin{matrix} e^2 & e^2 < t^2 & \u5185\u70b9 \\\\ t^2 & e^2 >= t^2 & \u91ce\u503c \\end{matrix}\\right. \\] \\(d_\\perp\\) \u662f\u70b9\u7684\u8bef\u5dee\uff0c \\(\\gamma(e)\\) \u662f\u4e00\u4e2a\u9c81\u68d2\u4ee3\u4ef7\u51fd\u6570\uff0c\u5176\u4e2d\u7ed9\u91ce\u503c\u8d4b\u4e00\u4e2a\u56fa\u5b9a\u7684\u4ee3\u4ef7\u3002","title":"\u9c81\u68d2\u6700\u5927\u4f3c\u7136\u4f30\u8ba1"},{"location":"cv/mvg/est2d/#_33","text":"\u6700\u5c0f\u4e2d\u503c\u5e73\u65b9(LMS)\u4f30\u8ba1 \uff1a\u2003\u6839\u636e\u6570\u636e\u4e2d\u6240\u6709\u70b9\u7684\u8ddd\u79bb\u4e2d\u503c\uff0c\u9009\u62e9\u5177\u6709\u6700\u5c0f\u4e2d\u503c\u7684\u6a21\u578b\u3002LMS \u7684\u4f18\u70b9\u5728\u4e8e\u5b83\u4e0d\u9700\u8981\u9608\u503c\u6216\u8bef\u5dee\u65b9\u5dee\u7684\u5148\u9a8c\u77e5\u8bc6\u3002 LMS \u7684\u7f3a\u70b9\u662f\u5982\u679c\u591a\u4e8e\u4e00\u534a\u7684\u6570\u636e\u662f\u91ce\u503c\u90a3\u4e48\u5b83\u8981\u5931\u8d25\uff0c\u56e0\u4e3a\u8ddd\u79bb\u7684\u4e2d\u503c\u53ef\u80fd\u662f\u4e00\u4e2a\u91ce\u503c\u3002\u89e3\u51b3\u7684\u529e\u6cd5\u662f\u7528\u91ce\u503c\u7684\u6bd4\u4f8b\u6765\u786e\u5b9a\u6240\u9009\u7684\u8ddd\u79bb\u3002 \u5982\u679c\u91ce\u503c\u7684\u6570\u91cf\u5c11\uff0c\u90a3\u4e48\u53ef\u4ee5\u91c7\u7528\u4ee5\u4e0b\u9c81\u68d2\u65b9\u6cd5\uff1a \u5220\u70b9\u65b9\u6cd5 \u2003\u6bcf\u70b9\u8f6e\u6d41\u88ab\u5220\u9664\u800c\u7528\u6a21\u578b\u5bf9\u5269\u4e0b\u7684\u6570\u636e\u62df\u5408\u3002 \u52a0\u6743\u6700\u5c0f\u4e8c\u4e58\u65b9\u8fed\u4ee3 \u2003\u5176\u4e2d\u4e00\u4e2a\u6570\u636e\u70b9\u5bf9\u62df\u5408\u7684\u5f71\u54cd\u4ee5\u5b83\u7684\u6b8b\u5dee\u6765\u53cd\u52a0\u6743\u3002","title":"\u5176\u4ed6\u9c81\u68d2\u7b97\u6cd5"},{"location":"cv/mvg/est2d/#_34","text":"\u8ba1\u7b97\u4e24\u5e45\u56fe\u50cf\u95f4\u7684\u5355\u5e94\u7684\u7b97\u6cd5\u3002 \u7b97\u6cd5\u7684\u8f93\u5165\u4ec5\u4ec5\u662f\u56fe\u50cf\uff0c\u4e0d\u9700\u8981\u5176\u4ed6 \u5148\u9a8c \u4fe1\u606f\uff1b\u800c\u8f93\u51fa\u7684\u662f\u5355\u5e94\u7684\u4f30\u8ba1\u4ee5\u53ca\u4e00\u7ec4\u5bf9\u5e94\u7684\u5174\u8da3\u70b9\u3002\u8be5\u7b97\u6cd5\u53ef\u4ee5\u5e94\u7528\u4e8e\u8bf8\u5982\u4e00\u5f20\u5e73\u5766\u8868\u9762\u7684\u4e24\u5e45\u56fe\u50cf\u6216\u7531\u6444\u50cf\u673a\u7ed5\u5176\u5149\u5fc3\u65cb\u8f6c\u7684\u5230\u7684\u4e24\u5e45\u56fe\u50cf\u3002 \u7b97\u6cd5\u6d41\u7a0b \u5174\u8da3\u70b9 \uff1a\u5728\u6bcf\u4e00\u5e45\u56fe\u50cf\u4e0a\u8ba1\u7b97\u5174\u8da3\u70b9 \u5047\u8bbe\u5bf9\u5e94 \uff1a\u6839\u636e\u5174\u8da3\u70b9\u7070\u5ea6\u9886\u57df\u7684\u63a5\u8fd1\u548c\u76f8\u4f3c\uff0c\u8ba1\u7b97\u5b83\u4eec\u7684\u5339\u914d\u96c6\u3002 RANSAC\u9c81\u68d2\u4f30\u8ba1 \uff1a\u91cd\u590d \\(N\\) \u6b21\u91c7\u6837\uff1a \u9009\u62e9\u7531\u56db\u7ec4\u5bf9\u5e94\u7ec4\u6210\u7684\u4e00\u4e2a\u968f\u673a\u6837\u672c\u5e76\u8ba1\u7b97\u5355\u5e94 H \u5bf9\u5047\u8bbe\u7684\u6bcf\u7ec4\u5355\u5e94\uff0c\u8ba1\u7b97\u8ddd\u79bb \\(d_{\\perp}\\) \u6839\u636e \\(d_\\perp < t = \\sqrt{5.99} \\delta\\) \u50cf\u7d20\u786e\u5b9a\u5bf9\u5e94\u6570\uff0c\u8fdb\u800c\u8ba1\u7b97\u4e0e H \u4e00\u81f4\u7684\u5185\u70b9\u6570 \u9009\u62e9\u5177\u6709\u6700\u5927\u5185\u70b9\u6570\u7684 H\uff0c\u5f53\u6570\u76ee\u76f8\u7b49\u65f6\u9009\u62e9\u5185\u70b9\u7684\u6807\u51c6\u65b9\u5dee\u6700\u4f4e\u7684 H \u6700\u4f18\u4f30\u8ba1 \uff1a\u7531\u5212\u5b9a\u7684\u5185\u70b9\u7684\u6240\u6709\u5bf9\u5e94\u91cd\u65b0\u4f30\u8ba1 H\uff0c\u7528 Levenberg-Marquardt \u7b97\u6cd5\u6765\u6700\u5c0f\u5316 ML \u4ee3\u4ef7\u51fd\u6570 \u5f15\u5bfc\u5339\u914d \uff1a\u7528\u4f30\u8ba1\u7684 H \u53bb\u5b9a\u4e49\u8f6c\u79fb\u70b9\u4f4d\u7f6e\u9644\u8fd1\u7684\u641c\u7d22\u533a\u57df\uff0c\u8fdb\u4e00\u6b65\u786e\u5b9a\u5174\u8da3\u70b9\u7684\u5bf9\u5e94\u3002 \u6700\u540e\u4e24\u6b65\u91cd\u590d\u5230\u5bf9\u5e94\u7684\u6570\u76ee\u7a33\u5b9a\u4e3a\u6b62","title":"\u5355\u5e94\u7684\u81ea\u52a8\u8ba1\u7b97"},{"location":"cv/mvg/eval/","text":"\u7b97\u6cd5\u8bc4\u4ef7\u548c\u8bef\u5dee\u5206\u6790 \u00b6 \u7ea6 1571 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 5 \u5206\u949f Abstract \u672c\u7ae0\u4e3b\u8981\u8ba8\u8bba\u5982\u4f55\u8bc4\u4ef7\u548c\u91cf\u5316\u4f30\u8ba1\u7b97\u6cd5\u7684\u7ed3\u679c\u3002 \u901a\u5e38\u4ec5\u6709\u4e00\u4e2a\u53d8\u91cf\u6216\u53d8\u6362\u7684\u4f30\u8ba1\u662f\u4e0d\u591f\u7684\uff0c\u8fd8\u9700\u8981\u8fdb\u884c\u7f6e\u4fe1\u5ea6\u6216\u4e0d\u53ef\u9760\u6027\u5ea6\u7684\u6d4b\u91cf \u7ebf\u6027\u903c\u8fd1\u6cd5 \u8499\u7279\u5361\u6d1b\u6cd5 \u6027\u80fd\u7684\u754c\u5b9a \u00b6 \u8bb0\u53f7\u7684\u89c4\u5b9a \u6d4b\u91cf\u5f97\u5230\u7684\u91cf\uff0c\u5982 \\(\\mathbf{x}\\) \u8868\u793a\u56fe\u50cf\u70b9 \u88ab\u4f30\u8ba1\u7684\u91cf\u7528\u52a0\u5e3d\u5b50\u6765\u6807\u8bc6\uff0c\u5982 \\(\\hat{\\mathbf{x}}\\) \u6216 \\(\\hat{H}\\) \u91cf\u7684\u771f\u503c\u7528\u52a0\u6a2a\u6760\u8868\u793a\uff0c\u5982 \\(\\bar{\\mathbf{x}}\\) \u6216 \\(\\bar{H}\\) \u5355\u56fe\u50cf\u8bef\u5dee \u00b6 2D \u5355\u5e94\u7684\u4f30\u8ba1\u95ee\u9898\u5728\u4ec5\u7ed9\u7b2c\u4e8c\u5e45\u56fe\u50cf\u7684\u5750\u6807\u52a0\u566a\u58f0\u7684\u60c5\u5f62\u4e0b\uff0c\u8bbe\u6709 n \u7ec4\u8fd9\u6837\u7684\u5339\u914d\u70b9\uff0c RMS\uff08\u5747\u65b9\u6839\uff09\u6b8b\u5dee\uff1a \\[ \\varepsilon_{res}=(\\frac{1}{2n}\\sum_{i=1}^nd(\\mathbf{x}_i^\\prime,\\hat{\\mathbf{x}}_i^\\prime)^2)^{1/2} \\] \u53cc\u56fe\u50cf\u8bef\u5dee \u00b6 \u5bf9\u53cc\u56fe\u50cf\u8bef\u5dee\u60c5\u5f62\uff0c\u6b8b\u5dee\u662f \\[ \\varepsilon_{res}=\\frac{1}{\\sqrt{4n}}(\\sum_{i=1}^nd(\\mathbf{x}_i,\\hat{\\mathbf{x}}_i)^2+\\sum_{i=1}^nd(\\mathbf{x}_i^\\prime,\\hat{\\mathbf{x}}_i^\\prime)^2)^{1/2} \\] \u6700\u4f18\u4f30\u8ba1\u7b97\u6cd5\uff08MLE\uff09 \u00b6 \\(IR^N\\) \u4e0a\u603b\u65b9\u5dee\u4e3a \\(N\\delta^2\\) \u7684\u5404\u5411\u540c\u6027\u9ad8\u65af\u5206\u5e03\u5411\u4e00\u4e2a \\(s\\) \u7ef4\u5b50\u7a7a\u95f4\u7684\u6295\u5f71\u662f\u603b\u65b9\u5dee\u4e3a \\(s\\sigma^2\\) \u7684\u5404\u5411\u540c\u6027\u9ad8\u65af\u5206\u5e03 \u8003\u8651\u4e00\u4e2a\u4f30\u8ba1\u95ee\u9898\uff0c\u5176\u4e2d \\(N\\) \u4e2a\u6d4b\u91cf\u7531\u4f9d\u8d56\u4e8e \\(d\\) \u4e2a\u672c\u8d28\u53c2\u6570\u96c6\u7684\u51fd\u6570\u6a21\u578b\u5316\u3002\u5047\u5b9a\u6bcf\u4e2a\u6d4b\u91cf\u53d8\u91cf\u6709\u6807\u51c6\u5dee \\(\\delta\\) \u7684\u72ec\u7acb\u9ad8\u65af\u566a\u58f0\u3002 ML \u4f30\u8ba1\u7b97\u6cd5\u7684 RMS \u6b8b\u5dee\uff08\u6d4b\u91cf\u503c\u5230\u4f30\u8ba1\u503c\u7684\u8ddd\u79bb\uff09\u662f \\[ \\varepsilon_{res}=E [\\parallel \\hat{\\mathbf{X}} - \\mathbf{X} \\parallel / \\mathbf{N}]^{1/2}=\\sigma(1-d/N)^{1/2} \\] ML \u4f30\u8ba1\u7b97\u6cd5\u7684 RMS \u4f30\u8ba1\u8bef\u5dee\uff08\u4f30\u8ba1\u503c\u5230\u771f\u503c\u7684\u8ddd\u79bb\uff09\u662f \\[ \\varepsilon_{est}=E [\\parallel \\hat{\\mathbf{X}} - \\bar{\\mathbf{X}} \\parallel / \\mathbf{N}]^{1/2}=\\sigma(d/N)^{1/2} \\] \u53d8\u6362\u4f30\u8ba1\u7684\u534f\u65b9\u5dee \u00b6 \u6c42\u5f97\u7684\u53d8\u6362\u7684\u4e0d\u53ef\u9760\u6027\u901a\u5e38\u7531\u53d8\u6362\u7684 \u534f\u65b9\u5dee\u77e9\u9635 \u83b7\u53d6\uff0c\u56e0\u4e3a \\(H\\) \u662f 9 \u5143\u7d20\u7684\u77e9\u9635\uff0c\u5b83\u7684\u534f\u65b9\u5dee\u77e9\u9635\u662f\u4e00\u4e2a \\(9\\times 9\\) \u77e9\u9635\u3002 \u534f\u65b9\u5dee\u7684\u524d\u5411\u4f20\u64ad \u00b6 \u4ee4 \\(\\mathbf{v}\\) \u662f \\(IR^M\\) \u4e2d\u7684\u4e00\u4e2a\u5177\u6709\u5747\u503c \\(\\bar{v}\\) \u548c\u534f\u65b9\u5dee\u77e9\u9635 \\(\\sum\\) \u7684\u968f\u673a\u77e2\u91cf\uff0c\u5047\u5b9a \\(f:IR^M \\to IR^N\\) \u662f\u4e00\u4e2a\u4eff\u5c04\u6620\u5c04\uff1a\u5b9a\u4e49\u4e3a \\(f(\\mathbf{v})=f(\\bar{\\mathbf{v}})+A(\\mathbf{v}-\\bar{\\mathbf{v}})\\) \u3002\u90a3\u4e48 \\(f(\\mathbf{v})\\) \u662f\u4e00\u4e2a\u5177\u6709\u5747\u503c \\(f(\\bar{\\mathbf{v}})\\) \u548c\u534f\u65b9\u5dee\u77e9\u9635 \\(A\\sum A^\\top\\) \u7684\u968f\u673a\u53d8\u91cf\u3002 \u4ee4 \\(\\mathbf{v}\\) \u662f \\(IR^M\\) \u4e2d\u7684\u4e00\u4e2a\u5177\u6709\u5747\u503c \\(\\bar{\\mathbf{v}}\\) \u548c\u534f\u65b9\u5dee\u77e9\u9635 \\(\\sum\\) \u7684\u968f\u673a\u77e2\u91cf\uff0c\u5047\u5b9a \\(f:IR^M \\to IR^N\\) \u5728 \\(\\bar{\\mathbf{v}}\\) \u7684\u90bb\u57df\u53ef\u5fae\uff0c\u90a3\u4e48\u5728\u7cbe\u786e\u5230\u4e00\u9636\u8fd1\u4f3c\u7684\u7a0b\u5ea6\u4e0b\uff0c \\(f(\\mathbf{v})\\) \u662f\u4e00\u4e2a\u5177\u6709\u5747\u503c \\(f(\\bar{\\mathbf{v}})\\) \u548c\u534f\u65b9\u5dee\u77e9\u9635 \\(J\\sum J^\\top\\) \u7684\u968f\u673a\u53d8\u91cf\uff0c\u5176\u4e2d \\(J\\) \u662f \\(f\\) \u7684\u96c5\u53ef\u6bd4\u77e9\u9635\u5728 \\(\\bar{\\mathbf{v}}\\) \u7684\u503c\u3002 \u534f\u65b9\u5dee\u7684\u53cd\u5411\u4f20\u64ad \u00b6 \u534f\u65b9\u5dee\u7684\u53cd\u5411\u8f93\u9001\u2014\u2014\u4eff\u5c04\u60c5\u5f62\uff1a\u4ee4 \\(f:IR^M \\to IR^N\\) \u662f\u5f62\u4e3a \\(f(\\mathbf{P})=f(\\bar{\\mathbf{P}}) + J(\\mathbf{P}-\\bar{\\mathbf{P}})\\) \u7684\u4eff\u5c04\u6620\u5c04\uff0c\u5176\u4e2d \\(J\\) \u7684\u79e9\u7b49\u4e8e \\(M\\) \u3002\u4ee4 \\(\\mathbf{X}\\) \u662f \\(IR^N\\) \u4e2d\u7684\u4e00\u4e2a\u5177\u6709\u5747\u503c \\(\\bar{\\mathbf{X}}=f(\\bar{\\mathbf{P}})\\) \u548c\u534f\u65b9\u5dee\u77e9\u9635 \\(\\sum\\) \u7684\u968f\u673a\u53d8\u91cf\u3002\u4ee4 \\(f^{-1} \\small\\circ \\eta:IR^N \\to IR^M\\) \u662f\u4e00\u6620\u5c04\uff0c\u5b83\u628a\u6d4b\u91cf\u77e2\u91cf \\(\\mathbf{X}\\) \u6620\u5c04\u5230\u5bf9\u5e94\u4e8e ML \u4f30\u8ba1 \\(\\hat{\\mathbf{X}}\\) \u7684\u53c2\u6570\u77e2\u91cf \\(\\mathbf{P}\\) \uff0c\u90a3\u4e48 \\(\\hat{\\mathbf{P}}=f^{-1} \\small\\circ (\\mathbf{X})\\) \u662f\u4e00\u4e2a\u5177\u6709\u5747\u503c \\(\\bar{\\mathbf{P}}\\) \u7684\u968f\u673a\u53d8\u91cf\uff0c\u5176\u534f\u65b9\u5dee\u77e9\u9635\u662f \\[ \\sum_{\\mathbf{P}}=(J^\\top \\sum_{\\mathbf{x}}\\nolimits^{-1} J)^{-1} \\] \u534f\u65b9\u5dee\u7684\u53cd\u5411\u8f93\u9001\u2014\u2014\u975e\u7ebf\u6027\u60c5\u5f62\uff1a\u4ee4 \\(f:IR^M \\to IR^N\\) \u662f\u4e00\u4e2a\u53ef\u5fae\u6620\u5c04\uff0c\u800c \\(J\\) \u662f\u5b83\u5728\u70b9 \\(\\bar{\\mathbf{P}}\\) \u5904\u7684\u96c5\u53ef\u6bd4\u77e9\u9635\u3002\u5047\u5b9a \\(J\\) \u7684\u79e9\u4e3a \\(M\\) \uff0c\u5219 \\(f\\) \u5728 \\(\\bar{\\mathbf{P}}\\) \u7684\u90bb\u57df\u662f\u4e00\u4e00\u5bf9\u5e94\u7684\u3002\u4ee4 \\(\\mathbf{X}\\) \u662f \\(IR^N\\) \u4e2d\u7684\u4e00\u4e2a\u5177\u6709\u5747\u503c \\(\\bar{\\mathbf{X}}=f(\\bar{\\mathbf{P}})\\) \u548c\u534f\u65b9\u5dee\u77e9\u9635 \\(\\sum_{\\mathbf{x}}\\) \u7684\u968f\u673a\u53d8\u91cf\u3002\u4ee4\u6620\u5c04 \\(f^{-1} \\small\\circ \\eta:IR^N \\to IR^M\\) \uff0c\u628a\u6d4b\u91cf\u77e2\u91cf \\(\\mathbf{X}\\) \u6620\u5c04\u5230\u5bf9\u5e94\u4e8e ML \u4f30\u8ba1 \\(\\hat{\\mathbf{X}}\\) \u7684\u53c2\u6570\u77e2\u91cf \\(\\mathbf{P}\\) \u3002\u90a3\u4e48\u5728\u4e00\u9636\u7cbe\u5ea6\u4e0b\uff0c \\(\\hat{\\mathbf{P}}=f^{-1} \\small \\circ \\eta(\\mathbf{X})\\) \u662f\u4e00\u4e2a\u5177\u6709\u5747\u503c \\(\\bar{\\mathbf{P}}\\) \u548c\u534f\u65b9\u5dee\u77e9\u9635 \\((J^\\top \\sum_{\\mathbf{x}}\\nolimits^{-1} J)^{-1}\\) \u7684\u968f\u673a\u53d8\u91cf\u3002 \u8d85\u53c2\u6570\u5316 \u00b6 \u534f\u65b9\u5dee\u7684\u53cd\u5411\u8f93\u9001\u2014\u2014\u8d85\u53c2\u6570\u5316\u60c5\u5f62\u3002\u4ee4 \\(f:IR^M \\to IR^N\\) \u662f\u4e00\u4e2a\u53ef\u5fae\u6620\u5c04\uff0c\u5b83\u628a\u4e00\u7ec4\u53c2\u6570 \\(\\bar{\\mathbf{P}}\\) \u6620\u5c04\u5230\u6d4b\u91cf\u77e2\u91cf \\(\\bar{\\mathbf{X}}\\) \uff0c\u4ee4 \\(S_\\mathbf{p}\\) \u662f\u5d4c\u5165 \\(IR^M\\) \u4e2d\u8fc7\u70b9 \\(\\bar{\\mathbf{P}}\\) \u7684 d \u7ef4\u5149\u6ed1\u6d41\u5f62\u5e76\u4f7f\u5f97\u6620\u5c04 \\(f\\) \u5728\u6d41\u5f62 \\(S_\\mathbf{p}\\) \u4e0a \\(\\bar{\\mathbf{P}}\\) \u7684\u4e00\u4e2a\u90bb\u57df\u5185\u662f\u4e00\u4e00\u5bf9\u5e94\u7684\uff0c \\(f\\) \u628a \\(S_\\mathbf{p}\\) \u5c40\u57df\u5730\u6620\u5c04\u5230 \\(IR^N\\) \u4e0a\u5230\u6d41\u5f62 \\(f(S_\\mathbf{p})\\) \u3002\u51fd\u6570 \\(f\\) \u6709\u4e00\u4e2a\u5c40\u90e8\u9006\u51fd\u6570\uff0c\u8bb0\u4e3a \\(f^{-1}\\) \uff0c\u5b83\u9650\u5236\u5728\u66f2\u9762 \\(f(S_\\mathbf{p})\\) \u4e0a \\(\\bar{\\mathbf{X}}\\) \u7684\u4e00\u4e2a\u90bb\u57df\u5185\uff0c\u5b9a\u4e49 \\(IR^N\\) \u4e0a\u7684\u4e00\u4e2a\u5177\u6709\u5747\u503c \\(\\bar{\\mathbf{X}}\\) \u548c\u534f\u65b9\u5dee \\(\\sum_{\\mathbf{x}}\\) \u7684\u9ad8\u65af\u5206\u5e03\uff0c\u5e76\u4ee4 \\(\\eta: IR^N \\to f(S_\\mathbf{p})\\) \u628a \\(IR^N\\) \u4e0a\u7684\u70b9\u6620\u5c04\u5230 \\(f(S_\\mathbf{p})\\) \u4e0a\u5e76\u5728 Mahalanobis \u8303\u6570 \\(\\parallel \\cdot \\parallel_{\\sum_{\\mathbf{x}}}\\) \u610f\u4e49\u4e0b\u6700\u8fd1\u7684\u70b9\uff0c \\(IR^N\\) \u4e0a\u5177\u6709\u534f\u65b9\u5dee\u77e9\u9635 \\(\\sum_\\mathbf{x}\\) \u7684\u6982\u7387\u5206\u5e03\u901a\u8fc7 \\(f^{-1} \\small\\circ \\eta\\) \u8bf1\u5bfc \\(IR^M\\) \u4e0a\u7684\u6982\u7387\u5206\u5e03\uff0c\u5b83\u5728\u4e00\u9636\u7cbe\u5ea6\u4e0b\u7684\u534f\u65b9\u5dee\u77e9\u9635\u662f \\[ \\sum_\\mathbf{p}=(J^\\top \\sum_{\\mathbf{x}}\\nolimits^{-1} J)^{+A}=A(A^\\top J^\\top \\sum_{\\mathbf{x}}\\nolimits^{-1} J A)^{-1}A^\\top \\] \u5176\u4e2d \\(A\\) \u662f\u4efb\u610f \\(m \\times d\\) \u77e9\u9635\uff0c\u5b83\u7684\u5217\u77e2\u91cf\u751f\u6210 \\(S_\\mathbf{p}\\) \u7684\u8fc7\u70b9 \\(\\bar{\\mathbf{P}}\\) \u7684\u5207\u7a7a\u95f4\u3002 \u4ee4\u53ef\u5fae\u6620\u5c04 \\(f:IR^M \\to IR^N\\) \uff0c\u628a \\(\\bar{\\mathbf{P}}\\) \u6620\u5c04\u5230 \\(\\bar{\\mathbf{X}}\\) \uff0c\u5e76\u4ee4 \\(J\\) \u4e3a \\(f\\) \u7684\u96c5\u53ef\u6bd4\u77e9\u9635\uff0c\u8bbe \\(IR^N\\) \u4e0a\u4e00\u4e2a\u5177\u6709\u534f\u65b9\u5dee\u77e9\u9635 \\(\\sum_{\\mathbf{x}}\\) \u7684\u9ad8\u65af\u5206\u5e03\u5b9a\u4e49\u5728 \\(\\bar{\\mathbf{X}}\\) \uff0c\u4ee4 \\(f^{-1} \\small\\circ \\eta:IR^N \\to IR^M\\) \u662f\u628a\u4e00\u4e2a\u6d4b\u91cf \\(\\mathbf{X}\\) \u6620\u5230\u7ea6\u675f\u5728\u5c40\u90e8\u6b63\u4ea4\u4e8e \\(J\\) \u7684\u96f6\u7a7a\u95f4\u7684\u66f2\u9762 \\(S_\\mathbf{p}\\) \u4e0a\u7684 MLE \u53c2\u6570\u77e2\u91cf \\(\\mathbf{P}\\) \u7684\u6620\u5c04\uff0c\u90a3\u4e48 \\(f^{-1} \\small\\circ \\eta\\) \u8bf1\u5bfc\u5728 \\(IR^M\\) \u4e0a\u7684\u4e00\u4e2a\u5206\u5e03\uff0c\u5b83\u7684\u534f\u65b9\u5dee\u77e9\u9635\u5728\u4e00\u9636\u7cbe\u5ea6\u4e0b\u662f\uff1a \\[ \\sum_{\\mathbf{P}}=(J^\\top \\sum_{\\mathbf{x}}\\nolimits^{-1} J)^{*} \\] \u534f\u65b9\u5dee\u4f30\u8ba1\u7684\u8499\u7279\u5361\u6d1b\u6cd5 \u00b6 \u4e4b\u524d\u8ba8\u8bba\u7684\u534f\u65b9\u5dee\u4f30\u8ba1\u65b9\u6cd5\u90fd\u5efa\u7acb\u5728\u7ebf\u6027\u5047\u5b9a\u4e4b\u4e0a\u3002 \u5982\u679c\u4e0d\u77e5\u9053 H \u7684\u771f\u503c\u65f6\uff0c\u4f30\u8ba1\u53d8\u6362 H \u7684\u534f\u65b9\u5dee\u7684\u89e3\u6790\u6cd5\u548c\u8499\u7279\u5361\u6d1b\u6cd5\u90fd\u53ef\u4ee5\u7528\u4e8e\u5b9e\u9645\u6570\u636e\u7684\u534f\u65b9\u5dee\u4f30\u8ba1\u3002","title":"\u7b97\u6cd5\u8bc4\u4ef7\u548c\u8bef\u5dee\u5206\u6790"},{"location":"cv/mvg/eval/#_1","text":"\u7ea6 1571 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 5 \u5206\u949f Abstract \u672c\u7ae0\u4e3b\u8981\u8ba8\u8bba\u5982\u4f55\u8bc4\u4ef7\u548c\u91cf\u5316\u4f30\u8ba1\u7b97\u6cd5\u7684\u7ed3\u679c\u3002 \u901a\u5e38\u4ec5\u6709\u4e00\u4e2a\u53d8\u91cf\u6216\u53d8\u6362\u7684\u4f30\u8ba1\u662f\u4e0d\u591f\u7684\uff0c\u8fd8\u9700\u8981\u8fdb\u884c\u7f6e\u4fe1\u5ea6\u6216\u4e0d\u53ef\u9760\u6027\u5ea6\u7684\u6d4b\u91cf \u7ebf\u6027\u903c\u8fd1\u6cd5 \u8499\u7279\u5361\u6d1b\u6cd5","title":"\u7b97\u6cd5\u8bc4\u4ef7\u548c\u8bef\u5dee\u5206\u6790"},{"location":"cv/mvg/eval/#_2","text":"\u8bb0\u53f7\u7684\u89c4\u5b9a \u6d4b\u91cf\u5f97\u5230\u7684\u91cf\uff0c\u5982 \\(\\mathbf{x}\\) \u8868\u793a\u56fe\u50cf\u70b9 \u88ab\u4f30\u8ba1\u7684\u91cf\u7528\u52a0\u5e3d\u5b50\u6765\u6807\u8bc6\uff0c\u5982 \\(\\hat{\\mathbf{x}}\\) \u6216 \\(\\hat{H}\\) \u91cf\u7684\u771f\u503c\u7528\u52a0\u6a2a\u6760\u8868\u793a\uff0c\u5982 \\(\\bar{\\mathbf{x}}\\) \u6216 \\(\\bar{H}\\)","title":"\u6027\u80fd\u7684\u754c\u5b9a"},{"location":"cv/mvg/eval/#_3","text":"2D \u5355\u5e94\u7684\u4f30\u8ba1\u95ee\u9898\u5728\u4ec5\u7ed9\u7b2c\u4e8c\u5e45\u56fe\u50cf\u7684\u5750\u6807\u52a0\u566a\u58f0\u7684\u60c5\u5f62\u4e0b\uff0c\u8bbe\u6709 n \u7ec4\u8fd9\u6837\u7684\u5339\u914d\u70b9\uff0c RMS\uff08\u5747\u65b9\u6839\uff09\u6b8b\u5dee\uff1a \\[ \\varepsilon_{res}=(\\frac{1}{2n}\\sum_{i=1}^nd(\\mathbf{x}_i^\\prime,\\hat{\\mathbf{x}}_i^\\prime)^2)^{1/2} \\]","title":"\u5355\u56fe\u50cf\u8bef\u5dee"},{"location":"cv/mvg/eval/#_4","text":"\u5bf9\u53cc\u56fe\u50cf\u8bef\u5dee\u60c5\u5f62\uff0c\u6b8b\u5dee\u662f \\[ \\varepsilon_{res}=\\frac{1}{\\sqrt{4n}}(\\sum_{i=1}^nd(\\mathbf{x}_i,\\hat{\\mathbf{x}}_i)^2+\\sum_{i=1}^nd(\\mathbf{x}_i^\\prime,\\hat{\\mathbf{x}}_i^\\prime)^2)^{1/2} \\]","title":"\u53cc\u56fe\u50cf\u8bef\u5dee"},{"location":"cv/mvg/eval/#mle","text":"\\(IR^N\\) \u4e0a\u603b\u65b9\u5dee\u4e3a \\(N\\delta^2\\) \u7684\u5404\u5411\u540c\u6027\u9ad8\u65af\u5206\u5e03\u5411\u4e00\u4e2a \\(s\\) \u7ef4\u5b50\u7a7a\u95f4\u7684\u6295\u5f71\u662f\u603b\u65b9\u5dee\u4e3a \\(s\\sigma^2\\) \u7684\u5404\u5411\u540c\u6027\u9ad8\u65af\u5206\u5e03 \u8003\u8651\u4e00\u4e2a\u4f30\u8ba1\u95ee\u9898\uff0c\u5176\u4e2d \\(N\\) \u4e2a\u6d4b\u91cf\u7531\u4f9d\u8d56\u4e8e \\(d\\) \u4e2a\u672c\u8d28\u53c2\u6570\u96c6\u7684\u51fd\u6570\u6a21\u578b\u5316\u3002\u5047\u5b9a\u6bcf\u4e2a\u6d4b\u91cf\u53d8\u91cf\u6709\u6807\u51c6\u5dee \\(\\delta\\) \u7684\u72ec\u7acb\u9ad8\u65af\u566a\u58f0\u3002 ML \u4f30\u8ba1\u7b97\u6cd5\u7684 RMS \u6b8b\u5dee\uff08\u6d4b\u91cf\u503c\u5230\u4f30\u8ba1\u503c\u7684\u8ddd\u79bb\uff09\u662f \\[ \\varepsilon_{res}=E [\\parallel \\hat{\\mathbf{X}} - \\mathbf{X} \\parallel / \\mathbf{N}]^{1/2}=\\sigma(1-d/N)^{1/2} \\] ML \u4f30\u8ba1\u7b97\u6cd5\u7684 RMS \u4f30\u8ba1\u8bef\u5dee\uff08\u4f30\u8ba1\u503c\u5230\u771f\u503c\u7684\u8ddd\u79bb\uff09\u662f \\[ \\varepsilon_{est}=E [\\parallel \\hat{\\mathbf{X}} - \\bar{\\mathbf{X}} \\parallel / \\mathbf{N}]^{1/2}=\\sigma(d/N)^{1/2} \\]","title":"\u6700\u4f18\u4f30\u8ba1\u7b97\u6cd5\uff08MLE\uff09"},{"location":"cv/mvg/eval/#_5","text":"\u6c42\u5f97\u7684\u53d8\u6362\u7684\u4e0d\u53ef\u9760\u6027\u901a\u5e38\u7531\u53d8\u6362\u7684 \u534f\u65b9\u5dee\u77e9\u9635 \u83b7\u53d6\uff0c\u56e0\u4e3a \\(H\\) \u662f 9 \u5143\u7d20\u7684\u77e9\u9635\uff0c\u5b83\u7684\u534f\u65b9\u5dee\u77e9\u9635\u662f\u4e00\u4e2a \\(9\\times 9\\) \u77e9\u9635\u3002","title":"\u53d8\u6362\u4f30\u8ba1\u7684\u534f\u65b9\u5dee"},{"location":"cv/mvg/eval/#_6","text":"\u4ee4 \\(\\mathbf{v}\\) \u662f \\(IR^M\\) \u4e2d\u7684\u4e00\u4e2a\u5177\u6709\u5747\u503c \\(\\bar{v}\\) \u548c\u534f\u65b9\u5dee\u77e9\u9635 \\(\\sum\\) \u7684\u968f\u673a\u77e2\u91cf\uff0c\u5047\u5b9a \\(f:IR^M \\to IR^N\\) \u662f\u4e00\u4e2a\u4eff\u5c04\u6620\u5c04\uff1a\u5b9a\u4e49\u4e3a \\(f(\\mathbf{v})=f(\\bar{\\mathbf{v}})+A(\\mathbf{v}-\\bar{\\mathbf{v}})\\) \u3002\u90a3\u4e48 \\(f(\\mathbf{v})\\) \u662f\u4e00\u4e2a\u5177\u6709\u5747\u503c \\(f(\\bar{\\mathbf{v}})\\) \u548c\u534f\u65b9\u5dee\u77e9\u9635 \\(A\\sum A^\\top\\) \u7684\u968f\u673a\u53d8\u91cf\u3002 \u4ee4 \\(\\mathbf{v}\\) \u662f \\(IR^M\\) \u4e2d\u7684\u4e00\u4e2a\u5177\u6709\u5747\u503c \\(\\bar{\\mathbf{v}}\\) \u548c\u534f\u65b9\u5dee\u77e9\u9635 \\(\\sum\\) \u7684\u968f\u673a\u77e2\u91cf\uff0c\u5047\u5b9a \\(f:IR^M \\to IR^N\\) \u5728 \\(\\bar{\\mathbf{v}}\\) \u7684\u90bb\u57df\u53ef\u5fae\uff0c\u90a3\u4e48\u5728\u7cbe\u786e\u5230\u4e00\u9636\u8fd1\u4f3c\u7684\u7a0b\u5ea6\u4e0b\uff0c \\(f(\\mathbf{v})\\) \u662f\u4e00\u4e2a\u5177\u6709\u5747\u503c \\(f(\\bar{\\mathbf{v}})\\) \u548c\u534f\u65b9\u5dee\u77e9\u9635 \\(J\\sum J^\\top\\) \u7684\u968f\u673a\u53d8\u91cf\uff0c\u5176\u4e2d \\(J\\) \u662f \\(f\\) \u7684\u96c5\u53ef\u6bd4\u77e9\u9635\u5728 \\(\\bar{\\mathbf{v}}\\) \u7684\u503c\u3002","title":"\u534f\u65b9\u5dee\u7684\u524d\u5411\u4f20\u64ad"},{"location":"cv/mvg/eval/#_7","text":"\u534f\u65b9\u5dee\u7684\u53cd\u5411\u8f93\u9001\u2014\u2014\u4eff\u5c04\u60c5\u5f62\uff1a\u4ee4 \\(f:IR^M \\to IR^N\\) \u662f\u5f62\u4e3a \\(f(\\mathbf{P})=f(\\bar{\\mathbf{P}}) + J(\\mathbf{P}-\\bar{\\mathbf{P}})\\) \u7684\u4eff\u5c04\u6620\u5c04\uff0c\u5176\u4e2d \\(J\\) \u7684\u79e9\u7b49\u4e8e \\(M\\) \u3002\u4ee4 \\(\\mathbf{X}\\) \u662f \\(IR^N\\) \u4e2d\u7684\u4e00\u4e2a\u5177\u6709\u5747\u503c \\(\\bar{\\mathbf{X}}=f(\\bar{\\mathbf{P}})\\) \u548c\u534f\u65b9\u5dee\u77e9\u9635 \\(\\sum\\) \u7684\u968f\u673a\u53d8\u91cf\u3002\u4ee4 \\(f^{-1} \\small\\circ \\eta:IR^N \\to IR^M\\) \u662f\u4e00\u6620\u5c04\uff0c\u5b83\u628a\u6d4b\u91cf\u77e2\u91cf \\(\\mathbf{X}\\) \u6620\u5c04\u5230\u5bf9\u5e94\u4e8e ML \u4f30\u8ba1 \\(\\hat{\\mathbf{X}}\\) \u7684\u53c2\u6570\u77e2\u91cf \\(\\mathbf{P}\\) \uff0c\u90a3\u4e48 \\(\\hat{\\mathbf{P}}=f^{-1} \\small\\circ (\\mathbf{X})\\) \u662f\u4e00\u4e2a\u5177\u6709\u5747\u503c \\(\\bar{\\mathbf{P}}\\) \u7684\u968f\u673a\u53d8\u91cf\uff0c\u5176\u534f\u65b9\u5dee\u77e9\u9635\u662f \\[ \\sum_{\\mathbf{P}}=(J^\\top \\sum_{\\mathbf{x}}\\nolimits^{-1} J)^{-1} \\] \u534f\u65b9\u5dee\u7684\u53cd\u5411\u8f93\u9001\u2014\u2014\u975e\u7ebf\u6027\u60c5\u5f62\uff1a\u4ee4 \\(f:IR^M \\to IR^N\\) \u662f\u4e00\u4e2a\u53ef\u5fae\u6620\u5c04\uff0c\u800c \\(J\\) \u662f\u5b83\u5728\u70b9 \\(\\bar{\\mathbf{P}}\\) \u5904\u7684\u96c5\u53ef\u6bd4\u77e9\u9635\u3002\u5047\u5b9a \\(J\\) \u7684\u79e9\u4e3a \\(M\\) \uff0c\u5219 \\(f\\) \u5728 \\(\\bar{\\mathbf{P}}\\) \u7684\u90bb\u57df\u662f\u4e00\u4e00\u5bf9\u5e94\u7684\u3002\u4ee4 \\(\\mathbf{X}\\) \u662f \\(IR^N\\) \u4e2d\u7684\u4e00\u4e2a\u5177\u6709\u5747\u503c \\(\\bar{\\mathbf{X}}=f(\\bar{\\mathbf{P}})\\) \u548c\u534f\u65b9\u5dee\u77e9\u9635 \\(\\sum_{\\mathbf{x}}\\) \u7684\u968f\u673a\u53d8\u91cf\u3002\u4ee4\u6620\u5c04 \\(f^{-1} \\small\\circ \\eta:IR^N \\to IR^M\\) \uff0c\u628a\u6d4b\u91cf\u77e2\u91cf \\(\\mathbf{X}\\) \u6620\u5c04\u5230\u5bf9\u5e94\u4e8e ML \u4f30\u8ba1 \\(\\hat{\\mathbf{X}}\\) \u7684\u53c2\u6570\u77e2\u91cf \\(\\mathbf{P}\\) \u3002\u90a3\u4e48\u5728\u4e00\u9636\u7cbe\u5ea6\u4e0b\uff0c \\(\\hat{\\mathbf{P}}=f^{-1} \\small \\circ \\eta(\\mathbf{X})\\) \u662f\u4e00\u4e2a\u5177\u6709\u5747\u503c \\(\\bar{\\mathbf{P}}\\) \u548c\u534f\u65b9\u5dee\u77e9\u9635 \\((J^\\top \\sum_{\\mathbf{x}}\\nolimits^{-1} J)^{-1}\\) \u7684\u968f\u673a\u53d8\u91cf\u3002","title":"\u534f\u65b9\u5dee\u7684\u53cd\u5411\u4f20\u64ad"},{"location":"cv/mvg/eval/#_8","text":"\u534f\u65b9\u5dee\u7684\u53cd\u5411\u8f93\u9001\u2014\u2014\u8d85\u53c2\u6570\u5316\u60c5\u5f62\u3002\u4ee4 \\(f:IR^M \\to IR^N\\) \u662f\u4e00\u4e2a\u53ef\u5fae\u6620\u5c04\uff0c\u5b83\u628a\u4e00\u7ec4\u53c2\u6570 \\(\\bar{\\mathbf{P}}\\) \u6620\u5c04\u5230\u6d4b\u91cf\u77e2\u91cf \\(\\bar{\\mathbf{X}}\\) \uff0c\u4ee4 \\(S_\\mathbf{p}\\) \u662f\u5d4c\u5165 \\(IR^M\\) \u4e2d\u8fc7\u70b9 \\(\\bar{\\mathbf{P}}\\) \u7684 d \u7ef4\u5149\u6ed1\u6d41\u5f62\u5e76\u4f7f\u5f97\u6620\u5c04 \\(f\\) \u5728\u6d41\u5f62 \\(S_\\mathbf{p}\\) \u4e0a \\(\\bar{\\mathbf{P}}\\) \u7684\u4e00\u4e2a\u90bb\u57df\u5185\u662f\u4e00\u4e00\u5bf9\u5e94\u7684\uff0c \\(f\\) \u628a \\(S_\\mathbf{p}\\) \u5c40\u57df\u5730\u6620\u5c04\u5230 \\(IR^N\\) \u4e0a\u5230\u6d41\u5f62 \\(f(S_\\mathbf{p})\\) \u3002\u51fd\u6570 \\(f\\) \u6709\u4e00\u4e2a\u5c40\u90e8\u9006\u51fd\u6570\uff0c\u8bb0\u4e3a \\(f^{-1}\\) \uff0c\u5b83\u9650\u5236\u5728\u66f2\u9762 \\(f(S_\\mathbf{p})\\) \u4e0a \\(\\bar{\\mathbf{X}}\\) \u7684\u4e00\u4e2a\u90bb\u57df\u5185\uff0c\u5b9a\u4e49 \\(IR^N\\) \u4e0a\u7684\u4e00\u4e2a\u5177\u6709\u5747\u503c \\(\\bar{\\mathbf{X}}\\) \u548c\u534f\u65b9\u5dee \\(\\sum_{\\mathbf{x}}\\) \u7684\u9ad8\u65af\u5206\u5e03\uff0c\u5e76\u4ee4 \\(\\eta: IR^N \\to f(S_\\mathbf{p})\\) \u628a \\(IR^N\\) \u4e0a\u7684\u70b9\u6620\u5c04\u5230 \\(f(S_\\mathbf{p})\\) \u4e0a\u5e76\u5728 Mahalanobis \u8303\u6570 \\(\\parallel \\cdot \\parallel_{\\sum_{\\mathbf{x}}}\\) \u610f\u4e49\u4e0b\u6700\u8fd1\u7684\u70b9\uff0c \\(IR^N\\) \u4e0a\u5177\u6709\u534f\u65b9\u5dee\u77e9\u9635 \\(\\sum_\\mathbf{x}\\) \u7684\u6982\u7387\u5206\u5e03\u901a\u8fc7 \\(f^{-1} \\small\\circ \\eta\\) \u8bf1\u5bfc \\(IR^M\\) \u4e0a\u7684\u6982\u7387\u5206\u5e03\uff0c\u5b83\u5728\u4e00\u9636\u7cbe\u5ea6\u4e0b\u7684\u534f\u65b9\u5dee\u77e9\u9635\u662f \\[ \\sum_\\mathbf{p}=(J^\\top \\sum_{\\mathbf{x}}\\nolimits^{-1} J)^{+A}=A(A^\\top J^\\top \\sum_{\\mathbf{x}}\\nolimits^{-1} J A)^{-1}A^\\top \\] \u5176\u4e2d \\(A\\) \u662f\u4efb\u610f \\(m \\times d\\) \u77e9\u9635\uff0c\u5b83\u7684\u5217\u77e2\u91cf\u751f\u6210 \\(S_\\mathbf{p}\\) \u7684\u8fc7\u70b9 \\(\\bar{\\mathbf{P}}\\) \u7684\u5207\u7a7a\u95f4\u3002 \u4ee4\u53ef\u5fae\u6620\u5c04 \\(f:IR^M \\to IR^N\\) \uff0c\u628a \\(\\bar{\\mathbf{P}}\\) \u6620\u5c04\u5230 \\(\\bar{\\mathbf{X}}\\) \uff0c\u5e76\u4ee4 \\(J\\) \u4e3a \\(f\\) \u7684\u96c5\u53ef\u6bd4\u77e9\u9635\uff0c\u8bbe \\(IR^N\\) \u4e0a\u4e00\u4e2a\u5177\u6709\u534f\u65b9\u5dee\u77e9\u9635 \\(\\sum_{\\mathbf{x}}\\) \u7684\u9ad8\u65af\u5206\u5e03\u5b9a\u4e49\u5728 \\(\\bar{\\mathbf{X}}\\) \uff0c\u4ee4 \\(f^{-1} \\small\\circ \\eta:IR^N \\to IR^M\\) \u662f\u628a\u4e00\u4e2a\u6d4b\u91cf \\(\\mathbf{X}\\) \u6620\u5230\u7ea6\u675f\u5728\u5c40\u90e8\u6b63\u4ea4\u4e8e \\(J\\) \u7684\u96f6\u7a7a\u95f4\u7684\u66f2\u9762 \\(S_\\mathbf{p}\\) \u4e0a\u7684 MLE \u53c2\u6570\u77e2\u91cf \\(\\mathbf{P}\\) \u7684\u6620\u5c04\uff0c\u90a3\u4e48 \\(f^{-1} \\small\\circ \\eta\\) \u8bf1\u5bfc\u5728 \\(IR^M\\) \u4e0a\u7684\u4e00\u4e2a\u5206\u5e03\uff0c\u5b83\u7684\u534f\u65b9\u5dee\u77e9\u9635\u5728\u4e00\u9636\u7cbe\u5ea6\u4e0b\u662f\uff1a \\[ \\sum_{\\mathbf{P}}=(J^\\top \\sum_{\\mathbf{x}}\\nolimits^{-1} J)^{*} \\]","title":"\u8d85\u53c2\u6570\u5316"},{"location":"cv/mvg/eval/#_9","text":"\u4e4b\u524d\u8ba8\u8bba\u7684\u534f\u65b9\u5dee\u4f30\u8ba1\u65b9\u6cd5\u90fd\u5efa\u7acb\u5728\u7ebf\u6027\u5047\u5b9a\u4e4b\u4e0a\u3002 \u5982\u679c\u4e0d\u77e5\u9053 H \u7684\u771f\u503c\u65f6\uff0c\u4f30\u8ba1\u53d8\u6362 H \u7684\u534f\u65b9\u5dee\u7684\u89e3\u6790\u6cd5\u548c\u8499\u7279\u5361\u6d1b\u6cd5\u90fd\u53ef\u4ee5\u7528\u4e8e\u5b9e\u9645\u6570\u636e\u7684\u534f\u65b9\u5dee\u4f30\u8ba1\u3002","title":"\u534f\u65b9\u5dee\u4f30\u8ba1\u7684\u8499\u7279\u5361\u6d1b\u6cd5"},{"location":"cv/mvg/one-vg/","text":"\u5355\u89c6\u56fe\u51e0\u4f55 \u00b6 \u7ea6 3225 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 11 \u5206\u949f Abstract \u672c\u7ae0\u4e3b\u8981\u8ba8\u8bba\u5728\u900f\u89c6\u6295\u5f71\u4e0b\u5176\u4ed6\u7684 3D \u51e0\u4f55\u5b9e\u4f53\u4e0e\u5176 2D \u56fe\u50cf\u4e4b\u95f4\u7684\u8054\u7cfb\u3002 \u8fd9\u4e9b\u5b9e\u4f53\u5305\u62ec\u5e73\u9762\u3001\u76f4\u7ebf\u3001\u4e8c\u6b21\u66f2\u7ebf\u3001\u4e8c\u6b21\u66f2\u9762\uff0c\u5c06\u63a8\u5bfc\u5b83\u4eec\u7684\u6b63\u5411\u548c\u53cd\u5411\u6295\u5f71\u7684\u6027\u8d28 \u5c04\u5f71\u6444\u50cf\u673a\u5bf9\u5e73\u9762\u3001\u76f4\u7ebf\u548c\u4e8c\u6b21\u66f2\u7ebf\u7684\u4f5c\u7528 \u00b6 \u5bf9\u5e73\u9762\u7684\u4f5c\u7528 \u00b6 \u5047\u5b9a\u9009\u62e9 XY - \u5e73\u9762\u4e0e\u666f\u7269\u4e2d\u7684\u5e73\u9762 \\(\\pi\\) \u5bf9\u5e94\uff0c\u4f7f\u5f97\u5e73\u9762\u4e0a\u7684\u70b9 \\(Z\\) \u5750\u6807\u4e3a\u96f6\u3002 \\(\\mathbf{x}=P\\mathbf{X}=[\\mathbf{p}_1 \\ \\mathbf{p}_2 \\ \\mathbf{p}_3 \\ \\mathbf{p}_4] \\begin{bmatrix} X \\\\ Y \\\\ 0 \\\\ 1 \\end{bmatrix}=[\\mathbf{p}_1 \\ \\mathbf{p}_2 \\mathbf{p}_4]\\begin{bmatrix} X \\\\ Y \\\\ 1 \\end{bmatrix}\\) \u5373 \\(\\mathbf{x}=H\\mathbf{x}_\\pi\\) \u3002\u5728\u900f\u89c6\u5f71\u50cf\u4e0b\uff0c\u4e00\u5f20\u666f\u7269\u5e73\u9762\u4e0e\u4e00\u5f20\u56fe\u50cf\u5e73\u9762\u4e4b\u95f4\u6700\u4e00\u822c\u7684\u53d8\u6362\u662f\u5e73\u9762\u5c04\u5f71\u53d8\u6362 \u5bf9\u76f4\u7ebf\u7684\u4f5c\u7528 \u00b6 \u6b63\u5411\u6295\u5f71 \uff1a \\(\\mathbf{A}\\) \u548c \\(\\mathbf{B}\\) \u662f 3 \u7ef4\u7a7a\u95f4\u7684\u70b9\uff0c\u800c \\(\\mathbf{a},\\mathbf{b}\\) \u662f\u5b83\u4eec\u5728 \\(P\\) \u4f5c\u7528\u4e0b\u7684\u56fe\u50cf\uff1a \\(\\mathbf{x}(\\mu)=P(\\mathbf{A}+\\mu \\mathbf{B})=P\\mathbf{A}+\\mu P \\mathbf{B}=\\mathbf{a} + \\mu \\mathbf{b}\\) \u76f4\u7ebf\u7684\u53cd\u5411\u6295\u5f71 \uff1a\u7ecf\u6444\u50cf\u673a\u77e9\u9635 \\(P\\) \u6620\u5c04\u6210\u4e00\u6761\u76f4\u7ebf \\(\\mathbf{l}\\) \u7684\u7a7a\u95f4\u7684\u70b9\u96c6\u662f\u5e73\u9762 \\(P^\\top\\mathbf{l}\\) Pl\u00fccker \u76f4\u7ebf\u8868\u793a \u4e00\u6761\u7528 Pl\u00fccker \u77e9\u9635 \\(L\\) \u8868\u793a\u7684 3 \u7ef4\u7a7a\u95f4\u76f4\u7ebf\uff0c\u5728\u6444\u50cf\u673a\u6620\u5c04 \\(P\\) \u4f5c\u7528\u4e0b\u88ab\u6620\u5c04\u6210\u6ee1\u8db3 \\([\\mathbf{l}]_\\times=PLP^\\top\\) \u7684\u76f4\u7ebf \u7ebf\u6295\u5f71\u77e9\u9635 \\(P\\) \u662f\u79e9\u4e3a 3 \u7684 \\(3 \\times 6\\) \u77e9\u9635\uff0c\u5373 \\(P=\\begin{bmatrix} \\mathbf{P}^2 \\wedge \\mathbf{P}^3 \\\\ \\mathbf{P}^3 \\wedge \\mathbf{P}^1 \\\\ \\mathbf{P}^1 \\wedge \\mathbf{P}^2 \\end{bmatrix}\\) \uff0c\u5176\u4e2d \\(\\mathbf{P}^{i\\top}\\) \u662f\u70b9\u6444\u50cf\u673a\u77e9\u9635 \\(P\\) \u7684\u884c\uff0c\u800c \\(\\mathbf{P}^i \\wedge \\mathbf{P}^j\\) \u662f\u5e73\u9762 \\(\\mathbf{P}^i\\) \u4e0e \\(\\mathbf{P}^j\\) \u7684\u4ea4\u7ebf\u7684 Pl\u00fccker \u5750\u6807 \u5728\u7ebf\u6295\u5f71\u77e9\u9635 \\(P\\) \u4f5c\u7528\u4e0b\uff0c \\(IP^3\\) \u4e2d\u7528 Pl\u00fccker \u5750\u6807\u8868\u793a\u7684\u76f4\u7ebf \\(\\mathcal{L}\\) \u88ab\u6620\u5c04\u5bfc\u56fe\u50cf\u76f4\u7ebf\uff1a \\(\\mathbf{l}=P\\mathcal{L}=\\begin{bmatrix} (\\mathbf{P}^2 \\wedge \\mathbf{P}^3 | \\mathcal{L}) \\\\ (\\mathbf{P}^3 \\wedge \\mathbf{P}^1 | \\mathcal{L}) \\\\ (\\mathbf{P}^1 \\wedge \\mathbf{P}^2 | \\mathcal{L}) \\end{bmatrix}\\) \\(IP^3\\) \u4e2d\u6ee1\u8db3 \\(P\\mathcal{L}=\\mathbf{0}\\) \u7684\u76f4\u7ebf \\(\\mathcal{L}\\) \u5fc5\u8fc7\u6444\u50cf\u673a\u4e2d\u5fc3 \u5bf9\u4e8c\u6b21\u66f2\u7ebf\u7684\u4f5c\u7528 \u00b6 \u5728\u6444\u50cf\u673a \\(P\\) \u4f5c\u7528\u4e0b\uff0c\u4e8c\u6b21\u66f2\u7ebf \\(C\\) \u53cd\u5411\u6295\u5f71\u6210\u9525\u9762: \\(Q_{CO}=P^\\top CP\\) \u5149\u6ed1\u66f2\u9762\u7684\u56fe\u50cf \u00b6 \u8f6e\u5ed3\u751f\u6210\u5143 \\(\\Gamma\\) \u5b9a\u4e49\u4e3a\u5f71\u50cf\u5c04\u7ebf\u4e0e \\(S\\) \u7684\u6240\u6709\u5207\u70b9 \\(\\mathbf{X}\\) \u7684\u96c6\u5408\u3002\u5728\u56fe\u50cf\u4e0a\uff0c\u4e0e\u5b83\u5bf9\u5e94\u7684 \u89c6\u5728\u8f6e\u5ed3\u7ebf \\(\\gamma\\) \u662f \\(\\mathbf{X}\\) \u7684\u56fe\u50cf\u70b9 \\(\\mathbf{x}\\) \u7684\u96c6\u5408\uff0c\u5373 \\(\\gamma\\) \u662f \\(\\Gamma\\) \u7684\u56fe\u50cf \u8f6e\u5ed3\u751f\u6210\u5143 \\(\\Gamma\\) \u4ec5\u53d6\u51b3\u4e8e\u6444\u50cf\u673a\u4e2d\u5fc3\u4e0e\u66f2\u9762\u7684\u76f8\u5bf9\u4f4d\u7f6e\uff0c\u800c\u4e0e\u56fe\u50cf\u5e73\u9762\u65e0\u5173 \u89c6\u5728\u8f6e\u5ed3\u7ebf \\(\\gamma\\) \u7531\u56fe\u50cf\u5e73\u9762\u4e0e\u8f6e\u5ed3\u751f\u6210\u5143\u7684\u5c04\u7ebf\u7684\u76f8\u4ea4\u786e\u5b9a\uff0c\u56e0\u6b64\u4e0e\u56fe\u50cf\u5e73\u9762\u6709\u5173 \u5c04\u5f71\u6444\u50cf\u673a\u5bf9\u4e8c\u6b21\u66f2\u9762\u7684\u4f5c\u7528 \u00b6 \u4e8c\u6b21\u66f2\u9762\u7684\u6b63\u5411\u6295\u5f71 \u5728\u6444\u50cf\u673a\u77e9\u9635 \\(P\\) \u7684\u4f5c\u7528\u4e0b\uff0c\u4e8c\u6b21\u66f2\u9762 \\(Q\\) \u7684\u5916\u5f62\u7ebf\u662f\u4e0b\u5f0f\u7ed9\u5b9a\u7684\u4e00\u6761\u4e8c\u6b21\u66f2\u7ebf \\(C^*=PQ^*P^\\top\\) \u4e0e\u4e8c\u6b21\u66f2\u9762 \\(Q\\) \u548c\u4e2d\u5fc3\u4e3a \\(C\\) \u7684\u6444\u50cf\u673a\u76f8\u5bf9\u5e94\u7684\u8f6e\u5ed3\u751f\u6210\u5143 \\(\\Gamma\\) \u7684\u5e73\u9762\u662f \\(\\pi_\\Gamma=QC\\) \u9876\u70b9\u4e3a \\(\\mathbf{V}\\) \u5e76\u4e0e\u4e8c\u6b21\u66f2\u9762 \\(Q\\) \u76f8\u5207\u7684\u9525\u9762\u662f\u4e00\u4e2a\u9000\u5316\u7684\u4e8c\u6b21\u66f2\u9762 \\(Q_{CO}=(\\mathbf{V}^\\top Q\\mathbf{V})Q-(Q\\mathbf{V})(Q\\mathbf{V})^\\top\\) \uff0c\u5f53 \\(Q_{CQ}\\mathbf{V}=\\mathbf{0}\\) \u65f6\uff0c \\(\\mathbf{V}\\) \u6b63\u662f\u6240\u8981\u6c42\u7684\u9525\u9762\u7684\u9876\u70b9 \u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u91cd\u8981\u6027 \u00b6 3 \u7ef4\u7a7a\u95f4\u7684\u7269\u4f53\u548c\u6444\u50cf\u673a\u4e2d\u5fc3\u786e\u5b9a\u4e86\u4e00\u4e2a\u5c04\u7ebf\u96c6\u5408\uff0c\u800c\u8fd9\u4e9b\u5c04\u7ebf\u4e0e\u4e00\u5f20\u5e73\u9762\u7684\u4ea4\u5c31\u4ea7\u751f\u8be5\u7269\u4f53\u7684\u56fe\u50cf\uff0c\u8fd9\u4e2a\u96c6\u5408\u901a\u5e38\u79f0\u4e3a \u5c04\u7ebf\u9525 \u5047\u8bbe\u5c04\u7ebf\u9525\u4e0e\u4e24\u5f20\u5e73\u9762\u76f8\u4ea4\uff0c\u90a3\u4e48\u6240\u5f97\u4e24\u5e45\u56fe\u50cf \\(\\mathbf{I}\\) \u548c \\(\\mathbf{I}^\\prime\\) \u663e\u7136\u4ee5\u4e00\u4e2a\u900f\u89c6\u6620\u5c04\u76f8\u5173\u8054\u3002\u56e0\u4e3a\u6444\u50cf\u673a\u6709\u5171\u540c\u7684\u4e2d\u5fc3\uff0c\u4ece\u800c\u7531\u8fd9\u4e24\u4e2a\u6444\u50cf\u673a\u4ea7\u751f\u7684 3 \u7ef4\u7a7a\u95f4\u70b9 \\(\\mathbf{X}\\) \u7684\u56fe\u50cf\u4e4b\u95f4\u7684\u5173\u7cfb\uff1a \\(\\mathbf{x}^\\prime=P^\\prime \\mathbf{X}=(K^\\prime R^\\prime)(KR)^{-1}P \\mathbf{X}=(K^\\prime R^\\prime)(KR)^{-1} \\mathbf{x}\\) \uff0c\u5bf9\u5e94\u7684\u56fe\u50cf\u70b9\u4ee5\u4e00\u4e2a\u5f62\u5982 \\(\\mathbf{x}^\\prime=H\\mathbf{x}\\) \u7684\u5e73\u9762\u5355\u5e94( \\(3 \\times 3\\) \u77e9\u9635)\u76f8\u5173\u8054\uff0c\u5176\u4e2d \\(H=(K^\\prime R^\\prime)(KR)^{-1}\\) \u79fb\u52a8\u56fe\u50cf\u5e73\u9762 \u00b6 \u8003\u8651\u7126\u8ddd\u589e\u52a0\u7684\u60c5\u51b5\uff0c\u5728\u4e00\u9636\u8fd1\u4f3c\u7684\u7cbe\u5ea6\u4e0b\uff0c\u5b83\u76f8\u5f53\u4e8e\u56fe\u50cf\u5e73\u9762\u6cbf\u4e3b\u8f74\u79fb\u52a8 \u56e0\u5b50 \\(k=f^\\prime/f\\) \u7684\u53d8\u7126\u6548\u679c\u7b49\u4e8e\u7528 \\(diag(k,k,1)\\) \u53f3\u4e58\u6444\u50cf\u673a\u6807\u5b9a\u77e9\u9635 \\(K\\) \u6444\u50cf\u673a\u65cb\u8f6c \u00b6 \u6444\u50cf\u673a\u5728\u4e0d\u6539\u53d8\u5b83\u7684\u5185\u90e8\u53c2\u6570\u7684\u60c5\u51b5\u4e0b\u7ed5\u5b83\u7684\u4e2d\u5fc3\u65cb\u8f6c\u3002\u5982\u679c\u70b9 \\(\\mathbf{X}\\) \u5728\u7eaf\u65cb\u8f6c\u524d\u548c\u540e\u7684\u56fe\u50cf\u662f \\(\\mathbf{x}\\) \u548c \\(\\mathbf{x}^\\prime\\) \uff0c\u90a3\u4e48 \\(\\mathbf{x}^\\prime=K[R|\\mathbf{0}]\\mathbf{X}=KRK^{-1}K[\\mathbf{I}|\\mathbf{0}]\\mathbf{X}=KRK^{-1}\\mathbf{x}\\) \uff0c\u56e0\u6b64\uff0c \\(\\mathbf{x}^\\prime=H\\mathbf{x}\\) \uff0c\u5176\u4e2d \\(H=KRK^{-1}\\) \u8fd9\u79cd\u5355\u5e94\u662f\u4e00\u4e2a\u5171\u8f6d\u65cb\u8f6c \u5e94\u7528\u4e0e\u4e3e\u4f8b \u00b6 \u89c6\u56fe\u5408\u6210 \u00b6 \u53ef\u4ee5\u5bf9\u73b0\u6709\u7684\u56fe\u50cf\u8fdb\u884c\u5e73\u9762\u5355\u5e94\u6027\u7684\u5f62\u53d8\u63d2\u8865\u6765\u4ea7\u751f\u65b0\u7684\u56fe\u50cf\uff0c\u65b0\u7684\u56fe\u50cf\u5bf9\u5e94\u4e8e\u4e0d\u540c\u7684\u6444\u50cf\u673a\u5b9a\u5411(\u4f46\u6444\u50cf\u673a\u4e2d\u5fc3\u76f8\u540c) \u8ba1\u7b97\u628a\u56fe\u50cf\u4e2d\u7684\u56db\u8fb9\u5f62\u6620\u5c04\u56de\u5177\u6709\u6b63\u786e\u957f\u5bbd\u6bd4\u77e9\u5f62\u7684\u5355\u5e94 H \u7528\u8fd9\u4e2a\u5355\u5e94\u5bf9\u539f\u56fe\u50cf\u8fdb\u884c\u5c04\u5f71\u5f62\u53d8\u63d2\u8865 \u5e73\u9762\u5168\u666f\u62fc\u56fe \u00b6 \u6444\u50cf\u673a\u7ed5\u5176\u4e2d\u5fc3\u65cb\u8f6c\u6240\u5f97\u5230\u7684\u4e00\u7ec4\u56fe\u50cf\u4e4b\u95f4\u4ee5\u4e00\u4e2a\u5e73\u9762\u5355\u5e94\u76f8\u5173\u8054\u3002\u8fd9\u6837\u7684\u4e00\u7ec4\u56fe\u50cf\u53ef\u4ee5\u901a\u8fc7\u5c04\u5f71\u5f62\u53d8\u63d2\u8865\u4e0e\u5176\u4e2d\u4e00\u5e45\u56fe\u50cf\u7684\u5e73\u9762\u914d\u51c6\u3002 \u9009\u62e9\u56fe\u50cf\u96c6\u5408\u4e2d\u7684\u4e00\u5e45\u4f5c\u4e3a\u53c2\u8003\u56fe\u50cf \u5728\u5176\u4f59\u7684\u56fe\u50cf\u4e2d\u9009\u4e00\u5e45\u56fe\u50cf\uff0c\u8ba1\u7b97\u628a\u5b83\u6620\u5c04\u5230\u53c2\u8003\u56fe\u50cf\u7684\u5355\u5e94 H \u7528\u5f97\u5230\u7684\u5355\u5e94\u5bf9\u8fd9\u5e45\u56fe\u50cf\u8fdb\u884c\u5c04\u5f71\u5f62\u53d8\u63d2\u8865\uff0c\u5e76\u4e14\u7528\u63d2\u8865\u56fe\u50cf\u4e0e\u53c2\u8003\u56fe\u50cf\u7684\u975e\u91cd\u53e0\u90e8\u5206\u6765\u6269\u5927\u53c2\u8003\u56fe\u50cf \u5bf9\u56fe\u50cf\u96c6\u5408\u4e2d\u4f59\u4e0b\u7684\u56fe\u50cf\u91cd\u590d\u4e0a\u8ff0\u6700\u540e\u4e24\u6b65\u8fc7\u7a0b \uff08\u7b80\u5316\u7684\uff09\u5c04\u5f71\u8bb0\u53f7 \u00b6 \u5982\u679c\u4e16\u754c\u548c\u56fe\u50cf\u70b9\u90fd\u9009\u62e9\u89c4\u8303\u7684\u5c04\u5f71\u5750\u6807\u90a3\u4e48\u6444\u50cf\u673a\u77e9\u9635\uff1a \\(P=\\begin{bmatrix} a & 0 & 0 & -d \\\\ 0 & b & 0 & -d \\\\ 0 & 0 & c & -d \\end{bmatrix}\\) \u6ee1\u8db3 \\(\\mathbf{x}_i=P\\mathbf{X}_i,i=1,...,4\\) \u548c \\(P(a^{-1},b^{-1},c^{-1},d^{-1})^\\top=\\mathbf{0}\\) \uff0c\u540e\u8005\u8868\u793a\u6444\u50cf\u673a\u4e2d\u5fc3\u662f \\(\\mathbf{C}=(a^{-1},b^{-1},c^{-1},d^{-1})^\\top\\) \u79fb\u52a8\u6444\u50cf\u673a\u4e2d\u5fc3 \u00b6 \u5728\u7b2c\u4e00\u5e45\u89c6\u56fe\u4e2d\u91cd\u5408\u7684\u4e24\u4e2a 3 \u7ef4\u7a7a\u95f4\u70b9.\u90ce\u5728\u540c\u4e00\u5c04\u7ebf\u4e0a\u7684\u70b9\u3002\u5982\u679c\u6444\u50cf\u673a\u4e2d\u5fc3\u88ab\u79fb\u52a8\u4e86(\u6ca1\u6709\u6cbf\u7740\u8fd9\u6761\u5c04\u7ebf) \uff0c\u90a3\u4e48\u5176\u56fe\u50cf\u5c31\u4e0d\u518d\u91cd\u5408\u4e86\u3002\u539f\u6765\u662f\u91cd\u5408\u7684\u56fe\u50cf\u70b9\u4e4b\u95f4\u7684\u76f8\u5bf9\u4f4d\u79fb\u79f0\u4e3a\u89c6\u5dee\u3002 \u6444\u50cf\u673a\u6807\u5b9a\u4e0e\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf\u7684\u56fe\u50cf \u00b6 \u6444\u50cf\u673a\u6807\u5b9a\u77e9\u9635 \\(K\\) \u662f \\(\\mathbf{x}\\) \u4e0e\u5728\u6444\u50cf\u673a\u7684\u6b27\u6c0f\u5750\u6807\u7cfb\u4e0b\u6d4b\u91cf\u7684\u5c04\u7ebf\u65b9\u5411 \\(\\mathbf{d}=K^{-1}\\mathbf{x}\\) \u4e4b\u95f4\u7684\u4e00\u4e2a\uff08\u4eff\u5c04\uff09\u53d8\u6362 \u4e00\u6761\u56fe\u50cf\u76f4\u7ebf \\(\\mathbf{l}\\) \u786e\u5b9a\u4e00\u5f20\u8fc7\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u5e73\u9762\uff0c\u5728\u6444\u50cf\u673a\u7684\u6b27\u6c0f\u5750\u6807\u7cfb\u4e0b\uff0c\u8be5\u5e73\u9762\u7684\u6cd5\u7ebf\u65b9\u5411\u4e3a \\(\\mathbf{n}=K^\\top \\mathbf{l}\\) \u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf\u7684\u56fe\u50cf \u00b6 \\(\\pi_\\infty\\) \u4e0e\u56fe\u50cf\u5e73\u9762\u4e4b\u95f4\u7684\u6620\u5c04\u7531\u5e73\u9762\u5355\u5e94 \\(\\mathbf{x}=H\\mathbf{d}\\) \u7ed9\u51fa\uff0c\u5176\u4e2d \\(H=KR\\) \u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf\u7684\u56fe\u50cf\uff08\u7b80\u79f0 IAC\uff09\u662f\u4e8c\u6b21\u66f2\u7ebf \\(\\omega=(KK^\\top)^{-1}=K^{-\\top}K^{-1}\\) \u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf\u7684\u5bf9\u5076\u56fe\u50cf\uff08\u7b80\u79f0 DIAC\uff09\u4e3a \\(\\omega^*=\\omega^{-1}=KK^\\top\\) \u4e00\u4e2a\u7b80\u5355\u7684\u6807\u5b9a\u88c5\u7f6e \u88c5\u7f6e\u91cc\u6709\u4e09\u4e2a\u6b63\u65b9\u5f62\uff08\u5b83\u4eec\u6240\u5728\u5e73\u9762\u662f\u4e0d\u5e73\u884c\u7684\uff0c\u4f46\u4e5f\u4e0d\u5fc5\u6b63\u4ea4\uff09\u7684\u56fe\u50cf\u63d0\u4f9b\u8ba1\u7b97 \\(K\\) \u7684\u8db3\u591f\u7ea6\u675f \u5bf9\u6bcf\u4e2a\u6b63\u65b9\u5f62\uff0c\u8ba1\u7b97\u628a\u5b83\u7684\u89d2\u70b9 \\((0,0)^\\top\u3001(1,0)\u3001(0,1)\u3001(1,1)^\\top\\) \u6620\u5c04\u5230\u76f8\u5e94\u7684\u56fe\u50cf\u70b9\u7684\u5355\u5e94 \\(H\\) \u8ba1\u7b97\u8be5\u6b63\u65b9\u5f62\u6240\u5728\u5e73\u9762\u865a\u5706\u70b9\u7684\u56fe\u50cf\uff0c\u5373 \\(H(1,\\pm i,0)^\\top\\) \u7531\u8fd9\u516d\u4e2a\u865a\u5706\u70b9\u7684\u56fe\u50cf\u62df\u5408\u51fa\u4e00\u6761\u4e8c\u6b21\u66f2\u7ebf \\(\\omega\\) \u7528 Cholesky \u5206\u89e3\u7531 \\(\\omega=(KK^\\top)^{-1}\\) \u8ba1\u7b97\u6807\u5b9a \\(K\\) \u56fe\u50cf\u4e2d\u7684\u6b63\u4ea4\u6027 \u5982\u679c\u56fe\u50cf\u70b9\u5173\u4e8e \\(\\omega\\) \u5171\u8f6d\uff0c\u5373\u5982\u679c \\(\\mathbf{x}_1^\\top \\omega \\mathbf{x}_2 = 0\\) \uff0c\u90a3\u4e48\u8fd9\u4e24\u4e2a\u56fe\u50cf\u70b9\u5bf9\u5e94\u4e8e\u6b63\u4ea4\u7684\u65b9\u5411 \u5047\u5b9a\u76f4\u7ebf \\(\\mathbf{l}\\) \u53cd\u5411\u6295\u5f71\u5230\u6cd5\u7ebf\u65b9\u5411\u4e3a \\(\\mathbf{n}\\) \u7684\u5e73\u9762 \\(\\pi\\) \uff0c\u90a3\u4e48\u6cd5\u7ebf\u7684\u5f71\u50cf\u4e3a\u70b9 \\(K\\mathbf{n}\\) \uff0c\u800c\u4e14\u76f4\u7ebf \\(\\mathbf{l}\\) \u662f\u8be5\u70b9\u7684\u6781\u7ebf\uff0c\u56e0\u6b64 \\(\\mathbf{l}=\\omega K \\mathbf{n}=(KK^\\top)^{-1}K\\mathbf{n}=K^{-\\top}\\mathbf{n}\\) \uff0c\u5373 \\(\\pi\\) \u7684\u6cd5\u7ebf\u662f \\(\\mathbf{n}=K^\\top \\mathbf{l}\\) \u6807\u5b9a\u4e8c\u6b21\u66f2\u7ebf \u00b6 \u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf\u7684\u56fe\u50cf\uff08IAC\uff09\u662f\u56fe\u50cf\u4e2d\u7684\u4e00\u6761\u865a\u4e8c\u6b21\u66f2\u7ebf\u3002\u4e3a\u4e86\u53ef\u89c6\u5316\u7684\u76ee\u7684\uff0c\u8003\u8651\u4e0e\u6444\u50cf\u673a\u6807\u5b9a\u7d27\u5bc6\u76f8\u5173\u7684\u53e6\u5916\u4e00\u79cd\u66f2\u7ebf\uff0c\u8fd9\u6837\u7684\u4e8c\u6b21\u66f2\u7ebf\u79f0\u4e3a \u6807\u5b9a\u4e8c\u6b21\u66f2\u7ebf \uff0c\u5b83\u662f\u4e00\u4e2a\u9876\u89d2\u4e3a \\(45^\\circ\\) \u800c\u8f74\u4e3a\u6444\u50cf\u673a\u4e3b\u8f74\u7684\u5706\u9525\u9762\u7684\u56fe\u50cf\u3002\u8be5\u5706\u9525\u9762\u7684\u70b9\u6620\u5c04\u4e3a\u4e8c\u6b21\u66f2\u7ebf\uff1a \\[ C=K^{-\\top} \\begin{bmatrix} 1 & & \\\\ & 1 & \\\\ & & -1 \\end{bmatrix} K^{-\\top} \\] \u6b63\u4ea4\u6027\u548c\u6807\u5b9a\u4e8c\u6b21\u66f2\u7ebf \uff1a\u5982\u679c\u56fe\u50cf\u5e73\u9762\u4e0a\u7684\u4e00\u6761\u76f4\u7ebf\u5bf9\u5e94\u4e8e\u5782\u76f4\u4e8e\u56fe\u50cf\u70b9 \\(\\mathbf{x}\\) \u7684\u5c04\u7ebf\u7684\u4e00\u4e2a\u5e73\u9762\uff0c\u90a3\u4e48\uff0c\u8fd9\u6761\u76f4\u7ebf\u662f \\(\\mathbf{x}\\) \u5173\u4e8e\u6807\u5b9a\u4e8c\u6b21\u66f2\u7ebf\u7684\u53cd\u5c04\u70b9 \\(\\overset{\\cdot}{\\mathbf{x}}\\) \u7684\u6781\u7ebf \\(C\\overset{\\cdot}{\\mathbf{x}}\\) \u6d88\u5f71\u70b9\u548c\u6d88\u5f71\u7ebf \u00b6 \u900f\u89c6\u6295\u5f71\u7684\u4e00\u4e2a\u663e\u8457\u7279\u5f81\u662f\u5ef6\u4f38\u81f3\u65e0\u7a77\u8fdc\u7684\u7269\u4f53\u7684\u56fe\u50cf\u53ef\u80fd\u51fa\u73b0\u5728\u6709\u9650\u8303\u56f4 \u6d88\u5f71\u70b9 \u96c6\u5408\u4e0a\u4e00\u6761\u4e16\u754c\u76f4\u7ebf\u7684\u6d88\u5f71\u70b9\u7531\u5e73\u884c\u4e8e\u8be5\u76f4\u7ebf\u5e76\u8fc7\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u5c04\u7ebf\u4e0e\u56fe\u50cf\u5e73\u9762\u7684\u4ea4\u70b9\u5f97\u5230\u3002\u56e0\u6b64\u6d88\u5f71\u70b9\u4ec5\u4f9d\u8d56\u4e8e\u76f4\u7ebf\u7684\u65b9\u5411\uff0c\u800c\u4e0e\u5176\u4f4d\u7f6e\u65e0\u5173\u3002\u5982\u679c\u4e16\u754c\u76f4\u7ebf\u5e73\u884c\u4e8e\u56fe\u50cf\u5e73\u9762\uff0c\u90a3\u4e48\u6d88\u5f71\u70b9\u5728\u56fe\u50cf\u7684\u65e0\u7a77\u8fdc\u5904\u3002 \u8be5\u4e16\u754c\u76f4\u7ebf\u53ef\u4ee5\u7528 \\(\\mathbf{X}(\\lambda)=\\mathbf{A}+\\lambda\\mathbf{D}\\) \u6765\u53c2\u6570\u5316\uff0c\u5176\u4e2d \\(\\mathbf{A}\\) \u662f\u76f4\u7ebf\u4e0a\u7684\u70b9\uff0c\u800c \\(\\mathbf{D}=(\\mathbf{d}^\\top,0)^\\top\\) \u65b9\u5411\u4e3a \\(\\mathbf{d}\\) \u7684 3 \u7ef4\u7a7a\u95f4\u76f4\u7ebf\u7684\u6d88\u5f71\u70b9\u662f\u8fc7\u6444\u50cf\u673a\u4e2d\u5fc3\u4e14\u65b9\u5411\u4e3a \\(\\mathbf{d}\\) \u7684\u5c04\u7ebf\u4e0e\u56fe\u50cf\u5e73\u9762\u7684\u4ea4\u70b9 \\(\\mathbf{v}\\) \uff0c\u5373 \\(\\mathbf{v}=K\\mathbf{d}\\) \u7531\u6d88\u5f71\u70b9\u6c42\u6444\u50cf\u673a\u65cb\u8f6c \u6d88\u5f71\u70b9\u662f\u65e0\u7a77\u8fdc\u70b9\u7684\u56fe\u50cf\uff0c\u5b83\u63d0\u4f9b\u5b9a\u5411(\u59ff\u6001)\u4fe1\u606f\u7684\u65b9\u5f0f\u4e0e\u4e0d\u52a8\u661f\u63d0\u4f9b\u7684\u65b9\u5f0f\u7c7b\u4f3c\uff0c\u8003\u8651\u7531\u5b9a\u5411\u548c\u4f4d\u7f6e\u4e0d\u540c\u7684\u4e24\u4e2a\u6807\u5b9a\u6444\u50cf\u673a\u83b7\u53d6\u7684\u4e00\u4e2a\u666f\u7269\u7684\u4e24\u5e45\u56fe\u50cf\u3002\u65e0\u7a77\u8fdc\u70b9\u4f5c\u4e3a\u666f\u7269\u7684\u4e00\u90e8\u5206\u4e0e\u6444\u50cf\u673a\u65e0\u5173\u3002\u5b83\u4eec\u7684\u56fe\u50cf\uff0c\u5373\u6d88\u5f71\u70b9\uff0c\u4e0d\u53d7\u6444\u50cf\u673a\u4f4d\u7f6e\u53d8\u5316\u7684\u5f71\u54cd\uff0c\u4f46\u8981\u53d7\u6444\u50cf\u673a\u65cb\u8f6c\u7684\u5f71\u54cd\u3002 \u4ee4\u4e00\u6761\u666f\u7269\u76f4\u7ebf\u5728\u7b2c\u4e00\u5e45\u89c6\u56fe\u4e2d\u7684\u6d88\u5f71\u70b9\u662f \\(\\mathbf{v}_i\\) \uff0c\u5728\u7b2c\u4e8c\u5e45\u89c6\u56fe\u4e2d\u7684\u662f \\(\\mathbf{v}_i^\\prime\\) \uff0c\u6d88\u5f71\u70b9 \\(\\mathbf{v}_i\\) \u5728\u7b2c\u4e00\u4e2a\u6444\u50cf\u673a\u7684\u6b27\u6c0f\u5750\u6807\u7cfb\u4e2d\u6d4b\u91cf\u5f97\u5230\u7684\u65b9\u5411\u662f \\(\\mathbf{d}_i=K^{-1}\\mathbf{v}_i / \\parallel K^{-1} \\mathbf{v}_i \\parallel\\) \uff0c\u800c\u5bf9\u5e94\u7684\u6d88\u5f71\u70b9 \\(\\mathbf{v}_i^\\prime\\) \uff0c\u5728\u7b2c\u4e8c\u4e2a\u6444\u50cf\u673a\u7684\u6b27\u6c0f\u5750\u6807\u7cfb\u4e2d\u6d4b\u91cf\u5f97\u5230\u7684\u65b9\u5411\u662f \\(\\mathbf{d}_i^\\prime\\) \uff0c\u5219\u6444\u50cf\u673a\u7684\u65cb\u8f6c \\(\\mathbf{d}_i^\\prime=R\\mathbf{d}_i\\) \u6d88\u5f71\u7ebf 3 \u7ef4\u7a7a\u95f4\u7684\u5e73\u884c\u5e73\u9762\u4e0e \\(\\pi _\\infty\\) \u4ea4\u4e8e\u4e00\u6761\u516c\u5171\u7684\u76f4\u7ebf\uff0c\u800c\u8fd9\u6761\u76f4\u7ebf\u7684\u56fe\u50cf\u5c31\u662f\u5e73\u9762\u7684\u6d88\u5f71\u7ebf\u3002\u51e0\u4f55\u4e0a\uff0c\u6d88\u5f71\u7ebf\u7531\u5e73\u884c\u4e8e\u666f\u7269\u5e73\u9762\u5e76\u8fc7\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u4e00\u5f20\u5e73\u9762\u4e0e\u56fe\u50cf\u7684\u4ea4\u7ebf\u5f97\u5230\u3002\u663e\u7136\uff0c \u6d88\u5f71\u7ebf\u4ec5\u4e0e\u666f\u7269\u5e73\u9762\u7684\u5b9a\u5411\u6709\u5173\uff0c\u800c\u4e0e\u5b83\u7684\u4f4d\u7f6e\u65e0\u5173\u3002 \u5728\u6444\u50cf\u673a\u6b27\u6c0f\u5750\u6807\u7cfb\u4e0b\uff0c\u5782\u76f4\u4e8e\u65b9\u5411 \\(\\mathbf{n}\\) \u7684\u5e73\u9762\u96c6\u7684\u6d88\u5f71\u7ebf\u662f \\(\\mathbf{l}=K^{-\\top}\\mathbf{n}\\) \u4e24\u6761\u666f\u7269\u76f4\u7ebf\u4e4b\u95f4\u7684\u5939\u89d2 \uff1a\u4ee4 \\(\\mathbf{v}_1,\\mathbf{v}_2\\) \u662f\u4e00\u5e45\u56fe\u50cf\u4e2d\u4e24\u6761\u76f4\u7ebf\u7684\u6d88\u5f71\u70b9\uff0c\u800c\u4ee4 \\(\\omega\\) \u4e3a\u56fe\u50cf\u4e2d\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf\u7684\u56fe\u50cf\u3002\u5982\u679c \\(\\theta\\) \u662f\u4e24\u76f4\u7ebf\u65b9\u5411\u95f4\u7684\u5939\u89d2\uff0c\u5219 \\[ \\cos \\theta = \\frac{\\mathbf{v}_1^\\top \\omega \\mathbf{v}_2}{\\sqrt{\\mathbf{v}_1^\\top \\omega \\mathbf{v}_1} \\sqrt{\\mathbf{v}_2^\\top \\omega \\mathbf{v}_2}} \\] \u6b63\u4ea4\u6027\u5173\u7cfb \u5177\u6709\u5782\u76f4\u65b9\u5411\u7684\u76f4\u7ebf\u7684\u6d88\u5f71\u70b9\u6ee1\u8db3 \\(\\mathbf{v}_1^\\top \\omega \\mathbf{v}_2=0\\) \u4e00\u5f20\u5e73\u9762\u7684\u6cd5\u7ebf\u65b9\u5411\u7684\u6d88\u5f71\u70b9 \\(\\mathbf{v}\\) \u53ef\u4ee5\u6309\u516c\u5f0f \\(\\mathbf{v}=\\omega^*\\mathbf{l}\\) \u7531\u5e73\u9762\u7684\u6d88\u5f71\u7ebf \\(\\mathbf{l}\\) \u83b7\u5f97\uff1b\u53cd\u4e4b\u6709 \\(\\mathbf{l}=\\omega \\mathbf{v}\\) \u4e24\u5782\u76f4\u5e73\u9762\u7684\u6d88\u5f71\u70b9\u6ee1\u8db3 \\(\\mathbf{l}_1^\\top \\omega^* \\mathbf{l}_2=0\\) \u7531\u6d88\u5f71\u70b9\u548c\u6d88\u5f71\u7ebf\u786e\u5b9a\u6807\u5b9a K \u00b6 \u5982\u679c \\(s=K_{12}=0\\) \uff0c\u5e76\u4e14 \\([\\omega_{ij}]=\\omega=K^{-\\top}K^{-1}\\) \uff0c\u90a3\u4e48 \\(\\omega_{12}=\\omega_{21}=0\\) \uff0c\u5982\u679c\u8fd8\u6ee1\u8db3 \\(\\alpha_x=K_{11}=K_{22}=\\alpha_y\\) \uff0c\u90a3\u4e48 \\(\\omega_{11}=\\omega_{22}\\) \u7531\u4e09\u4e2a\u6b63\u4ea4\u6d88\u5f71\u70b9\u7ed9\u5b9a\u7684\u6807\u5b9a\u4e8c\u6b21\u66f2\u7ebf \u9996\u5148\u6784\u4f5c\u9876\u70b9\u4e3a\u4e09\u4e2a\u6d88\u5f71\u70b9 \\(\\mathbf{v}_1,\\mathbf{v}_2,\\mathbf{v}_3\\) \u7684\u4e09\u89d2\u5f62 \\(C\\) \u7684\u4e2d\u5fc3\u662f\u4e09\u89d2\u5f62\u7684\u5782\u5fc3 \u5173\u4e8e\u4e2d\u5fc3\u53cd\u5c04\u5176\u4e2d\u7684\u4e00\u4e2a\u6d88\u5f71\u70b9\uff08\u4f8b\u5982 \\(\\mathbf{v}_1\\) \uff09\u5f97\u5230 \\(\\overset{\\cdot}{\\mathbf{v}}_1\\) \u6839\u636e\u6761\u4ef6\uff1a \\(\\overset{\\cdot}{\\mathbf{v}}_1\\) \u7684\u6781\u7ebf\u8fc7 \\(\\mathbf{v}_2, \\mathbf{v}_3\\) \u6765\u786e\u5b9a \\(C\\) \u7684\u534a\u5f84","title":"\u5355\u89c6\u56fe\u51e0\u4f55"},{"location":"cv/mvg/one-vg/#_1","text":"\u7ea6 3225 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 11 \u5206\u949f Abstract \u672c\u7ae0\u4e3b\u8981\u8ba8\u8bba\u5728\u900f\u89c6\u6295\u5f71\u4e0b\u5176\u4ed6\u7684 3D \u51e0\u4f55\u5b9e\u4f53\u4e0e\u5176 2D \u56fe\u50cf\u4e4b\u95f4\u7684\u8054\u7cfb\u3002 \u8fd9\u4e9b\u5b9e\u4f53\u5305\u62ec\u5e73\u9762\u3001\u76f4\u7ebf\u3001\u4e8c\u6b21\u66f2\u7ebf\u3001\u4e8c\u6b21\u66f2\u9762\uff0c\u5c06\u63a8\u5bfc\u5b83\u4eec\u7684\u6b63\u5411\u548c\u53cd\u5411\u6295\u5f71\u7684\u6027\u8d28","title":"\u5355\u89c6\u56fe\u51e0\u4f55"},{"location":"cv/mvg/one-vg/#_2","text":"","title":"\u5c04\u5f71\u6444\u50cf\u673a\u5bf9\u5e73\u9762\u3001\u76f4\u7ebf\u548c\u4e8c\u6b21\u66f2\u7ebf\u7684\u4f5c\u7528"},{"location":"cv/mvg/one-vg/#_3","text":"\u5047\u5b9a\u9009\u62e9 XY - \u5e73\u9762\u4e0e\u666f\u7269\u4e2d\u7684\u5e73\u9762 \\(\\pi\\) \u5bf9\u5e94\uff0c\u4f7f\u5f97\u5e73\u9762\u4e0a\u7684\u70b9 \\(Z\\) \u5750\u6807\u4e3a\u96f6\u3002 \\(\\mathbf{x}=P\\mathbf{X}=[\\mathbf{p}_1 \\ \\mathbf{p}_2 \\ \\mathbf{p}_3 \\ \\mathbf{p}_4] \\begin{bmatrix} X \\\\ Y \\\\ 0 \\\\ 1 \\end{bmatrix}=[\\mathbf{p}_1 \\ \\mathbf{p}_2 \\mathbf{p}_4]\\begin{bmatrix} X \\\\ Y \\\\ 1 \\end{bmatrix}\\) \u5373 \\(\\mathbf{x}=H\\mathbf{x}_\\pi\\) \u3002\u5728\u900f\u89c6\u5f71\u50cf\u4e0b\uff0c\u4e00\u5f20\u666f\u7269\u5e73\u9762\u4e0e\u4e00\u5f20\u56fe\u50cf\u5e73\u9762\u4e4b\u95f4\u6700\u4e00\u822c\u7684\u53d8\u6362\u662f\u5e73\u9762\u5c04\u5f71\u53d8\u6362","title":"\u5bf9\u5e73\u9762\u7684\u4f5c\u7528"},{"location":"cv/mvg/one-vg/#_4","text":"\u6b63\u5411\u6295\u5f71 \uff1a \\(\\mathbf{A}\\) \u548c \\(\\mathbf{B}\\) \u662f 3 \u7ef4\u7a7a\u95f4\u7684\u70b9\uff0c\u800c \\(\\mathbf{a},\\mathbf{b}\\) \u662f\u5b83\u4eec\u5728 \\(P\\) \u4f5c\u7528\u4e0b\u7684\u56fe\u50cf\uff1a \\(\\mathbf{x}(\\mu)=P(\\mathbf{A}+\\mu \\mathbf{B})=P\\mathbf{A}+\\mu P \\mathbf{B}=\\mathbf{a} + \\mu \\mathbf{b}\\) \u76f4\u7ebf\u7684\u53cd\u5411\u6295\u5f71 \uff1a\u7ecf\u6444\u50cf\u673a\u77e9\u9635 \\(P\\) \u6620\u5c04\u6210\u4e00\u6761\u76f4\u7ebf \\(\\mathbf{l}\\) \u7684\u7a7a\u95f4\u7684\u70b9\u96c6\u662f\u5e73\u9762 \\(P^\\top\\mathbf{l}\\) Pl\u00fccker \u76f4\u7ebf\u8868\u793a \u4e00\u6761\u7528 Pl\u00fccker \u77e9\u9635 \\(L\\) \u8868\u793a\u7684 3 \u7ef4\u7a7a\u95f4\u76f4\u7ebf\uff0c\u5728\u6444\u50cf\u673a\u6620\u5c04 \\(P\\) \u4f5c\u7528\u4e0b\u88ab\u6620\u5c04\u6210\u6ee1\u8db3 \\([\\mathbf{l}]_\\times=PLP^\\top\\) \u7684\u76f4\u7ebf \u7ebf\u6295\u5f71\u77e9\u9635 \\(P\\) \u662f\u79e9\u4e3a 3 \u7684 \\(3 \\times 6\\) \u77e9\u9635\uff0c\u5373 \\(P=\\begin{bmatrix} \\mathbf{P}^2 \\wedge \\mathbf{P}^3 \\\\ \\mathbf{P}^3 \\wedge \\mathbf{P}^1 \\\\ \\mathbf{P}^1 \\wedge \\mathbf{P}^2 \\end{bmatrix}\\) \uff0c\u5176\u4e2d \\(\\mathbf{P}^{i\\top}\\) \u662f\u70b9\u6444\u50cf\u673a\u77e9\u9635 \\(P\\) \u7684\u884c\uff0c\u800c \\(\\mathbf{P}^i \\wedge \\mathbf{P}^j\\) \u662f\u5e73\u9762 \\(\\mathbf{P}^i\\) \u4e0e \\(\\mathbf{P}^j\\) \u7684\u4ea4\u7ebf\u7684 Pl\u00fccker \u5750\u6807 \u5728\u7ebf\u6295\u5f71\u77e9\u9635 \\(P\\) \u4f5c\u7528\u4e0b\uff0c \\(IP^3\\) \u4e2d\u7528 Pl\u00fccker \u5750\u6807\u8868\u793a\u7684\u76f4\u7ebf \\(\\mathcal{L}\\) \u88ab\u6620\u5c04\u5bfc\u56fe\u50cf\u76f4\u7ebf\uff1a \\(\\mathbf{l}=P\\mathcal{L}=\\begin{bmatrix} (\\mathbf{P}^2 \\wedge \\mathbf{P}^3 | \\mathcal{L}) \\\\ (\\mathbf{P}^3 \\wedge \\mathbf{P}^1 | \\mathcal{L}) \\\\ (\\mathbf{P}^1 \\wedge \\mathbf{P}^2 | \\mathcal{L}) \\end{bmatrix}\\) \\(IP^3\\) \u4e2d\u6ee1\u8db3 \\(P\\mathcal{L}=\\mathbf{0}\\) \u7684\u76f4\u7ebf \\(\\mathcal{L}\\) \u5fc5\u8fc7\u6444\u50cf\u673a\u4e2d\u5fc3","title":"\u5bf9\u76f4\u7ebf\u7684\u4f5c\u7528"},{"location":"cv/mvg/one-vg/#_5","text":"\u5728\u6444\u50cf\u673a \\(P\\) \u4f5c\u7528\u4e0b\uff0c\u4e8c\u6b21\u66f2\u7ebf \\(C\\) \u53cd\u5411\u6295\u5f71\u6210\u9525\u9762: \\(Q_{CO}=P^\\top CP\\)","title":"\u5bf9\u4e8c\u6b21\u66f2\u7ebf\u7684\u4f5c\u7528"},{"location":"cv/mvg/one-vg/#_6","text":"\u8f6e\u5ed3\u751f\u6210\u5143 \\(\\Gamma\\) \u5b9a\u4e49\u4e3a\u5f71\u50cf\u5c04\u7ebf\u4e0e \\(S\\) \u7684\u6240\u6709\u5207\u70b9 \\(\\mathbf{X}\\) \u7684\u96c6\u5408\u3002\u5728\u56fe\u50cf\u4e0a\uff0c\u4e0e\u5b83\u5bf9\u5e94\u7684 \u89c6\u5728\u8f6e\u5ed3\u7ebf \\(\\gamma\\) \u662f \\(\\mathbf{X}\\) \u7684\u56fe\u50cf\u70b9 \\(\\mathbf{x}\\) \u7684\u96c6\u5408\uff0c\u5373 \\(\\gamma\\) \u662f \\(\\Gamma\\) \u7684\u56fe\u50cf \u8f6e\u5ed3\u751f\u6210\u5143 \\(\\Gamma\\) \u4ec5\u53d6\u51b3\u4e8e\u6444\u50cf\u673a\u4e2d\u5fc3\u4e0e\u66f2\u9762\u7684\u76f8\u5bf9\u4f4d\u7f6e\uff0c\u800c\u4e0e\u56fe\u50cf\u5e73\u9762\u65e0\u5173 \u89c6\u5728\u8f6e\u5ed3\u7ebf \\(\\gamma\\) \u7531\u56fe\u50cf\u5e73\u9762\u4e0e\u8f6e\u5ed3\u751f\u6210\u5143\u7684\u5c04\u7ebf\u7684\u76f8\u4ea4\u786e\u5b9a\uff0c\u56e0\u6b64\u4e0e\u56fe\u50cf\u5e73\u9762\u6709\u5173","title":"\u5149\u6ed1\u66f2\u9762\u7684\u56fe\u50cf"},{"location":"cv/mvg/one-vg/#_7","text":"\u4e8c\u6b21\u66f2\u9762\u7684\u6b63\u5411\u6295\u5f71 \u5728\u6444\u50cf\u673a\u77e9\u9635 \\(P\\) \u7684\u4f5c\u7528\u4e0b\uff0c\u4e8c\u6b21\u66f2\u9762 \\(Q\\) \u7684\u5916\u5f62\u7ebf\u662f\u4e0b\u5f0f\u7ed9\u5b9a\u7684\u4e00\u6761\u4e8c\u6b21\u66f2\u7ebf \\(C^*=PQ^*P^\\top\\) \u4e0e\u4e8c\u6b21\u66f2\u9762 \\(Q\\) \u548c\u4e2d\u5fc3\u4e3a \\(C\\) \u7684\u6444\u50cf\u673a\u76f8\u5bf9\u5e94\u7684\u8f6e\u5ed3\u751f\u6210\u5143 \\(\\Gamma\\) \u7684\u5e73\u9762\u662f \\(\\pi_\\Gamma=QC\\) \u9876\u70b9\u4e3a \\(\\mathbf{V}\\) \u5e76\u4e0e\u4e8c\u6b21\u66f2\u9762 \\(Q\\) \u76f8\u5207\u7684\u9525\u9762\u662f\u4e00\u4e2a\u9000\u5316\u7684\u4e8c\u6b21\u66f2\u9762 \\(Q_{CO}=(\\mathbf{V}^\\top Q\\mathbf{V})Q-(Q\\mathbf{V})(Q\\mathbf{V})^\\top\\) \uff0c\u5f53 \\(Q_{CQ}\\mathbf{V}=\\mathbf{0}\\) \u65f6\uff0c \\(\\mathbf{V}\\) \u6b63\u662f\u6240\u8981\u6c42\u7684\u9525\u9762\u7684\u9876\u70b9","title":"\u5c04\u5f71\u6444\u50cf\u673a\u5bf9\u4e8c\u6b21\u66f2\u9762\u7684\u4f5c\u7528"},{"location":"cv/mvg/one-vg/#_8","text":"3 \u7ef4\u7a7a\u95f4\u7684\u7269\u4f53\u548c\u6444\u50cf\u673a\u4e2d\u5fc3\u786e\u5b9a\u4e86\u4e00\u4e2a\u5c04\u7ebf\u96c6\u5408\uff0c\u800c\u8fd9\u4e9b\u5c04\u7ebf\u4e0e\u4e00\u5f20\u5e73\u9762\u7684\u4ea4\u5c31\u4ea7\u751f\u8be5\u7269\u4f53\u7684\u56fe\u50cf\uff0c\u8fd9\u4e2a\u96c6\u5408\u901a\u5e38\u79f0\u4e3a \u5c04\u7ebf\u9525 \u5047\u8bbe\u5c04\u7ebf\u9525\u4e0e\u4e24\u5f20\u5e73\u9762\u76f8\u4ea4\uff0c\u90a3\u4e48\u6240\u5f97\u4e24\u5e45\u56fe\u50cf \\(\\mathbf{I}\\) \u548c \\(\\mathbf{I}^\\prime\\) \u663e\u7136\u4ee5\u4e00\u4e2a\u900f\u89c6\u6620\u5c04\u76f8\u5173\u8054\u3002\u56e0\u4e3a\u6444\u50cf\u673a\u6709\u5171\u540c\u7684\u4e2d\u5fc3\uff0c\u4ece\u800c\u7531\u8fd9\u4e24\u4e2a\u6444\u50cf\u673a\u4ea7\u751f\u7684 3 \u7ef4\u7a7a\u95f4\u70b9 \\(\\mathbf{X}\\) \u7684\u56fe\u50cf\u4e4b\u95f4\u7684\u5173\u7cfb\uff1a \\(\\mathbf{x}^\\prime=P^\\prime \\mathbf{X}=(K^\\prime R^\\prime)(KR)^{-1}P \\mathbf{X}=(K^\\prime R^\\prime)(KR)^{-1} \\mathbf{x}\\) \uff0c\u5bf9\u5e94\u7684\u56fe\u50cf\u70b9\u4ee5\u4e00\u4e2a\u5f62\u5982 \\(\\mathbf{x}^\\prime=H\\mathbf{x}\\) \u7684\u5e73\u9762\u5355\u5e94( \\(3 \\times 3\\) \u77e9\u9635)\u76f8\u5173\u8054\uff0c\u5176\u4e2d \\(H=(K^\\prime R^\\prime)(KR)^{-1}\\)","title":"\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u91cd\u8981\u6027"},{"location":"cv/mvg/one-vg/#_9","text":"\u8003\u8651\u7126\u8ddd\u589e\u52a0\u7684\u60c5\u51b5\uff0c\u5728\u4e00\u9636\u8fd1\u4f3c\u7684\u7cbe\u5ea6\u4e0b\uff0c\u5b83\u76f8\u5f53\u4e8e\u56fe\u50cf\u5e73\u9762\u6cbf\u4e3b\u8f74\u79fb\u52a8 \u56e0\u5b50 \\(k=f^\\prime/f\\) \u7684\u53d8\u7126\u6548\u679c\u7b49\u4e8e\u7528 \\(diag(k,k,1)\\) \u53f3\u4e58\u6444\u50cf\u673a\u6807\u5b9a\u77e9\u9635 \\(K\\)","title":"\u79fb\u52a8\u56fe\u50cf\u5e73\u9762"},{"location":"cv/mvg/one-vg/#_10","text":"\u6444\u50cf\u673a\u5728\u4e0d\u6539\u53d8\u5b83\u7684\u5185\u90e8\u53c2\u6570\u7684\u60c5\u51b5\u4e0b\u7ed5\u5b83\u7684\u4e2d\u5fc3\u65cb\u8f6c\u3002\u5982\u679c\u70b9 \\(\\mathbf{X}\\) \u5728\u7eaf\u65cb\u8f6c\u524d\u548c\u540e\u7684\u56fe\u50cf\u662f \\(\\mathbf{x}\\) \u548c \\(\\mathbf{x}^\\prime\\) \uff0c\u90a3\u4e48 \\(\\mathbf{x}^\\prime=K[R|\\mathbf{0}]\\mathbf{X}=KRK^{-1}K[\\mathbf{I}|\\mathbf{0}]\\mathbf{X}=KRK^{-1}\\mathbf{x}\\) \uff0c\u56e0\u6b64\uff0c \\(\\mathbf{x}^\\prime=H\\mathbf{x}\\) \uff0c\u5176\u4e2d \\(H=KRK^{-1}\\) \u8fd9\u79cd\u5355\u5e94\u662f\u4e00\u4e2a\u5171\u8f6d\u65cb\u8f6c","title":"\u6444\u50cf\u673a\u65cb\u8f6c"},{"location":"cv/mvg/one-vg/#_11","text":"","title":"\u5e94\u7528\u4e0e\u4e3e\u4f8b"},{"location":"cv/mvg/one-vg/#_12","text":"\u53ef\u4ee5\u5bf9\u73b0\u6709\u7684\u56fe\u50cf\u8fdb\u884c\u5e73\u9762\u5355\u5e94\u6027\u7684\u5f62\u53d8\u63d2\u8865\u6765\u4ea7\u751f\u65b0\u7684\u56fe\u50cf\uff0c\u65b0\u7684\u56fe\u50cf\u5bf9\u5e94\u4e8e\u4e0d\u540c\u7684\u6444\u50cf\u673a\u5b9a\u5411(\u4f46\u6444\u50cf\u673a\u4e2d\u5fc3\u76f8\u540c) \u8ba1\u7b97\u628a\u56fe\u50cf\u4e2d\u7684\u56db\u8fb9\u5f62\u6620\u5c04\u56de\u5177\u6709\u6b63\u786e\u957f\u5bbd\u6bd4\u77e9\u5f62\u7684\u5355\u5e94 H \u7528\u8fd9\u4e2a\u5355\u5e94\u5bf9\u539f\u56fe\u50cf\u8fdb\u884c\u5c04\u5f71\u5f62\u53d8\u63d2\u8865","title":"\u89c6\u56fe\u5408\u6210"},{"location":"cv/mvg/one-vg/#_13","text":"\u6444\u50cf\u673a\u7ed5\u5176\u4e2d\u5fc3\u65cb\u8f6c\u6240\u5f97\u5230\u7684\u4e00\u7ec4\u56fe\u50cf\u4e4b\u95f4\u4ee5\u4e00\u4e2a\u5e73\u9762\u5355\u5e94\u76f8\u5173\u8054\u3002\u8fd9\u6837\u7684\u4e00\u7ec4\u56fe\u50cf\u53ef\u4ee5\u901a\u8fc7\u5c04\u5f71\u5f62\u53d8\u63d2\u8865\u4e0e\u5176\u4e2d\u4e00\u5e45\u56fe\u50cf\u7684\u5e73\u9762\u914d\u51c6\u3002 \u9009\u62e9\u56fe\u50cf\u96c6\u5408\u4e2d\u7684\u4e00\u5e45\u4f5c\u4e3a\u53c2\u8003\u56fe\u50cf \u5728\u5176\u4f59\u7684\u56fe\u50cf\u4e2d\u9009\u4e00\u5e45\u56fe\u50cf\uff0c\u8ba1\u7b97\u628a\u5b83\u6620\u5c04\u5230\u53c2\u8003\u56fe\u50cf\u7684\u5355\u5e94 H \u7528\u5f97\u5230\u7684\u5355\u5e94\u5bf9\u8fd9\u5e45\u56fe\u50cf\u8fdb\u884c\u5c04\u5f71\u5f62\u53d8\u63d2\u8865\uff0c\u5e76\u4e14\u7528\u63d2\u8865\u56fe\u50cf\u4e0e\u53c2\u8003\u56fe\u50cf\u7684\u975e\u91cd\u53e0\u90e8\u5206\u6765\u6269\u5927\u53c2\u8003\u56fe\u50cf \u5bf9\u56fe\u50cf\u96c6\u5408\u4e2d\u4f59\u4e0b\u7684\u56fe\u50cf\u91cd\u590d\u4e0a\u8ff0\u6700\u540e\u4e24\u6b65\u8fc7\u7a0b","title":"\u5e73\u9762\u5168\u666f\u62fc\u56fe"},{"location":"cv/mvg/one-vg/#_14","text":"\u5982\u679c\u4e16\u754c\u548c\u56fe\u50cf\u70b9\u90fd\u9009\u62e9\u89c4\u8303\u7684\u5c04\u5f71\u5750\u6807\u90a3\u4e48\u6444\u50cf\u673a\u77e9\u9635\uff1a \\(P=\\begin{bmatrix} a & 0 & 0 & -d \\\\ 0 & b & 0 & -d \\\\ 0 & 0 & c & -d \\end{bmatrix}\\) \u6ee1\u8db3 \\(\\mathbf{x}_i=P\\mathbf{X}_i,i=1,...,4\\) \u548c \\(P(a^{-1},b^{-1},c^{-1},d^{-1})^\\top=\\mathbf{0}\\) \uff0c\u540e\u8005\u8868\u793a\u6444\u50cf\u673a\u4e2d\u5fc3\u662f \\(\\mathbf{C}=(a^{-1},b^{-1},c^{-1},d^{-1})^\\top\\)","title":"\uff08\u7b80\u5316\u7684\uff09\u5c04\u5f71\u8bb0\u53f7"},{"location":"cv/mvg/one-vg/#_15","text":"\u5728\u7b2c\u4e00\u5e45\u89c6\u56fe\u4e2d\u91cd\u5408\u7684\u4e24\u4e2a 3 \u7ef4\u7a7a\u95f4\u70b9.\u90ce\u5728\u540c\u4e00\u5c04\u7ebf\u4e0a\u7684\u70b9\u3002\u5982\u679c\u6444\u50cf\u673a\u4e2d\u5fc3\u88ab\u79fb\u52a8\u4e86(\u6ca1\u6709\u6cbf\u7740\u8fd9\u6761\u5c04\u7ebf) \uff0c\u90a3\u4e48\u5176\u56fe\u50cf\u5c31\u4e0d\u518d\u91cd\u5408\u4e86\u3002\u539f\u6765\u662f\u91cd\u5408\u7684\u56fe\u50cf\u70b9\u4e4b\u95f4\u7684\u76f8\u5bf9\u4f4d\u79fb\u79f0\u4e3a\u89c6\u5dee\u3002","title":"\u79fb\u52a8\u6444\u50cf\u673a\u4e2d\u5fc3"},{"location":"cv/mvg/one-vg/#_16","text":"\u6444\u50cf\u673a\u6807\u5b9a\u77e9\u9635 \\(K\\) \u662f \\(\\mathbf{x}\\) \u4e0e\u5728\u6444\u50cf\u673a\u7684\u6b27\u6c0f\u5750\u6807\u7cfb\u4e0b\u6d4b\u91cf\u7684\u5c04\u7ebf\u65b9\u5411 \\(\\mathbf{d}=K^{-1}\\mathbf{x}\\) \u4e4b\u95f4\u7684\u4e00\u4e2a\uff08\u4eff\u5c04\uff09\u53d8\u6362 \u4e00\u6761\u56fe\u50cf\u76f4\u7ebf \\(\\mathbf{l}\\) \u786e\u5b9a\u4e00\u5f20\u8fc7\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u5e73\u9762\uff0c\u5728\u6444\u50cf\u673a\u7684\u6b27\u6c0f\u5750\u6807\u7cfb\u4e0b\uff0c\u8be5\u5e73\u9762\u7684\u6cd5\u7ebf\u65b9\u5411\u4e3a \\(\\mathbf{n}=K^\\top \\mathbf{l}\\)","title":"\u6444\u50cf\u673a\u6807\u5b9a\u4e0e\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf\u7684\u56fe\u50cf"},{"location":"cv/mvg/one-vg/#_17","text":"\\(\\pi_\\infty\\) \u4e0e\u56fe\u50cf\u5e73\u9762\u4e4b\u95f4\u7684\u6620\u5c04\u7531\u5e73\u9762\u5355\u5e94 \\(\\mathbf{x}=H\\mathbf{d}\\) \u7ed9\u51fa\uff0c\u5176\u4e2d \\(H=KR\\) \u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf\u7684\u56fe\u50cf\uff08\u7b80\u79f0 IAC\uff09\u662f\u4e8c\u6b21\u66f2\u7ebf \\(\\omega=(KK^\\top)^{-1}=K^{-\\top}K^{-1}\\) \u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf\u7684\u5bf9\u5076\u56fe\u50cf\uff08\u7b80\u79f0 DIAC\uff09\u4e3a \\(\\omega^*=\\omega^{-1}=KK^\\top\\) \u4e00\u4e2a\u7b80\u5355\u7684\u6807\u5b9a\u88c5\u7f6e \u88c5\u7f6e\u91cc\u6709\u4e09\u4e2a\u6b63\u65b9\u5f62\uff08\u5b83\u4eec\u6240\u5728\u5e73\u9762\u662f\u4e0d\u5e73\u884c\u7684\uff0c\u4f46\u4e5f\u4e0d\u5fc5\u6b63\u4ea4\uff09\u7684\u56fe\u50cf\u63d0\u4f9b\u8ba1\u7b97 \\(K\\) \u7684\u8db3\u591f\u7ea6\u675f \u5bf9\u6bcf\u4e2a\u6b63\u65b9\u5f62\uff0c\u8ba1\u7b97\u628a\u5b83\u7684\u89d2\u70b9 \\((0,0)^\\top\u3001(1,0)\u3001(0,1)\u3001(1,1)^\\top\\) \u6620\u5c04\u5230\u76f8\u5e94\u7684\u56fe\u50cf\u70b9\u7684\u5355\u5e94 \\(H\\) \u8ba1\u7b97\u8be5\u6b63\u65b9\u5f62\u6240\u5728\u5e73\u9762\u865a\u5706\u70b9\u7684\u56fe\u50cf\uff0c\u5373 \\(H(1,\\pm i,0)^\\top\\) \u7531\u8fd9\u516d\u4e2a\u865a\u5706\u70b9\u7684\u56fe\u50cf\u62df\u5408\u51fa\u4e00\u6761\u4e8c\u6b21\u66f2\u7ebf \\(\\omega\\) \u7528 Cholesky \u5206\u89e3\u7531 \\(\\omega=(KK^\\top)^{-1}\\) \u8ba1\u7b97\u6807\u5b9a \\(K\\) \u56fe\u50cf\u4e2d\u7684\u6b63\u4ea4\u6027 \u5982\u679c\u56fe\u50cf\u70b9\u5173\u4e8e \\(\\omega\\) \u5171\u8f6d\uff0c\u5373\u5982\u679c \\(\\mathbf{x}_1^\\top \\omega \\mathbf{x}_2 = 0\\) \uff0c\u90a3\u4e48\u8fd9\u4e24\u4e2a\u56fe\u50cf\u70b9\u5bf9\u5e94\u4e8e\u6b63\u4ea4\u7684\u65b9\u5411 \u5047\u5b9a\u76f4\u7ebf \\(\\mathbf{l}\\) \u53cd\u5411\u6295\u5f71\u5230\u6cd5\u7ebf\u65b9\u5411\u4e3a \\(\\mathbf{n}\\) \u7684\u5e73\u9762 \\(\\pi\\) \uff0c\u90a3\u4e48\u6cd5\u7ebf\u7684\u5f71\u50cf\u4e3a\u70b9 \\(K\\mathbf{n}\\) \uff0c\u800c\u4e14\u76f4\u7ebf \\(\\mathbf{l}\\) \u662f\u8be5\u70b9\u7684\u6781\u7ebf\uff0c\u56e0\u6b64 \\(\\mathbf{l}=\\omega K \\mathbf{n}=(KK^\\top)^{-1}K\\mathbf{n}=K^{-\\top}\\mathbf{n}\\) \uff0c\u5373 \\(\\pi\\) \u7684\u6cd5\u7ebf\u662f \\(\\mathbf{n}=K^\\top \\mathbf{l}\\)","title":"\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf\u7684\u56fe\u50cf"},{"location":"cv/mvg/one-vg/#_18","text":"\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf\u7684\u56fe\u50cf\uff08IAC\uff09\u662f\u56fe\u50cf\u4e2d\u7684\u4e00\u6761\u865a\u4e8c\u6b21\u66f2\u7ebf\u3002\u4e3a\u4e86\u53ef\u89c6\u5316\u7684\u76ee\u7684\uff0c\u8003\u8651\u4e0e\u6444\u50cf\u673a\u6807\u5b9a\u7d27\u5bc6\u76f8\u5173\u7684\u53e6\u5916\u4e00\u79cd\u66f2\u7ebf\uff0c\u8fd9\u6837\u7684\u4e8c\u6b21\u66f2\u7ebf\u79f0\u4e3a \u6807\u5b9a\u4e8c\u6b21\u66f2\u7ebf \uff0c\u5b83\u662f\u4e00\u4e2a\u9876\u89d2\u4e3a \\(45^\\circ\\) \u800c\u8f74\u4e3a\u6444\u50cf\u673a\u4e3b\u8f74\u7684\u5706\u9525\u9762\u7684\u56fe\u50cf\u3002\u8be5\u5706\u9525\u9762\u7684\u70b9\u6620\u5c04\u4e3a\u4e8c\u6b21\u66f2\u7ebf\uff1a \\[ C=K^{-\\top} \\begin{bmatrix} 1 & & \\\\ & 1 & \\\\ & & -1 \\end{bmatrix} K^{-\\top} \\] \u6b63\u4ea4\u6027\u548c\u6807\u5b9a\u4e8c\u6b21\u66f2\u7ebf \uff1a\u5982\u679c\u56fe\u50cf\u5e73\u9762\u4e0a\u7684\u4e00\u6761\u76f4\u7ebf\u5bf9\u5e94\u4e8e\u5782\u76f4\u4e8e\u56fe\u50cf\u70b9 \\(\\mathbf{x}\\) \u7684\u5c04\u7ebf\u7684\u4e00\u4e2a\u5e73\u9762\uff0c\u90a3\u4e48\uff0c\u8fd9\u6761\u76f4\u7ebf\u662f \\(\\mathbf{x}\\) \u5173\u4e8e\u6807\u5b9a\u4e8c\u6b21\u66f2\u7ebf\u7684\u53cd\u5c04\u70b9 \\(\\overset{\\cdot}{\\mathbf{x}}\\) \u7684\u6781\u7ebf \\(C\\overset{\\cdot}{\\mathbf{x}}\\)","title":"\u6807\u5b9a\u4e8c\u6b21\u66f2\u7ebf"},{"location":"cv/mvg/one-vg/#_19","text":"\u900f\u89c6\u6295\u5f71\u7684\u4e00\u4e2a\u663e\u8457\u7279\u5f81\u662f\u5ef6\u4f38\u81f3\u65e0\u7a77\u8fdc\u7684\u7269\u4f53\u7684\u56fe\u50cf\u53ef\u80fd\u51fa\u73b0\u5728\u6709\u9650\u8303\u56f4 \u6d88\u5f71\u70b9 \u96c6\u5408\u4e0a\u4e00\u6761\u4e16\u754c\u76f4\u7ebf\u7684\u6d88\u5f71\u70b9\u7531\u5e73\u884c\u4e8e\u8be5\u76f4\u7ebf\u5e76\u8fc7\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u5c04\u7ebf\u4e0e\u56fe\u50cf\u5e73\u9762\u7684\u4ea4\u70b9\u5f97\u5230\u3002\u56e0\u6b64\u6d88\u5f71\u70b9\u4ec5\u4f9d\u8d56\u4e8e\u76f4\u7ebf\u7684\u65b9\u5411\uff0c\u800c\u4e0e\u5176\u4f4d\u7f6e\u65e0\u5173\u3002\u5982\u679c\u4e16\u754c\u76f4\u7ebf\u5e73\u884c\u4e8e\u56fe\u50cf\u5e73\u9762\uff0c\u90a3\u4e48\u6d88\u5f71\u70b9\u5728\u56fe\u50cf\u7684\u65e0\u7a77\u8fdc\u5904\u3002 \u8be5\u4e16\u754c\u76f4\u7ebf\u53ef\u4ee5\u7528 \\(\\mathbf{X}(\\lambda)=\\mathbf{A}+\\lambda\\mathbf{D}\\) \u6765\u53c2\u6570\u5316\uff0c\u5176\u4e2d \\(\\mathbf{A}\\) \u662f\u76f4\u7ebf\u4e0a\u7684\u70b9\uff0c\u800c \\(\\mathbf{D}=(\\mathbf{d}^\\top,0)^\\top\\) \u65b9\u5411\u4e3a \\(\\mathbf{d}\\) \u7684 3 \u7ef4\u7a7a\u95f4\u76f4\u7ebf\u7684\u6d88\u5f71\u70b9\u662f\u8fc7\u6444\u50cf\u673a\u4e2d\u5fc3\u4e14\u65b9\u5411\u4e3a \\(\\mathbf{d}\\) \u7684\u5c04\u7ebf\u4e0e\u56fe\u50cf\u5e73\u9762\u7684\u4ea4\u70b9 \\(\\mathbf{v}\\) \uff0c\u5373 \\(\\mathbf{v}=K\\mathbf{d}\\) \u7531\u6d88\u5f71\u70b9\u6c42\u6444\u50cf\u673a\u65cb\u8f6c \u6d88\u5f71\u70b9\u662f\u65e0\u7a77\u8fdc\u70b9\u7684\u56fe\u50cf\uff0c\u5b83\u63d0\u4f9b\u5b9a\u5411(\u59ff\u6001)\u4fe1\u606f\u7684\u65b9\u5f0f\u4e0e\u4e0d\u52a8\u661f\u63d0\u4f9b\u7684\u65b9\u5f0f\u7c7b\u4f3c\uff0c\u8003\u8651\u7531\u5b9a\u5411\u548c\u4f4d\u7f6e\u4e0d\u540c\u7684\u4e24\u4e2a\u6807\u5b9a\u6444\u50cf\u673a\u83b7\u53d6\u7684\u4e00\u4e2a\u666f\u7269\u7684\u4e24\u5e45\u56fe\u50cf\u3002\u65e0\u7a77\u8fdc\u70b9\u4f5c\u4e3a\u666f\u7269\u7684\u4e00\u90e8\u5206\u4e0e\u6444\u50cf\u673a\u65e0\u5173\u3002\u5b83\u4eec\u7684\u56fe\u50cf\uff0c\u5373\u6d88\u5f71\u70b9\uff0c\u4e0d\u53d7\u6444\u50cf\u673a\u4f4d\u7f6e\u53d8\u5316\u7684\u5f71\u54cd\uff0c\u4f46\u8981\u53d7\u6444\u50cf\u673a\u65cb\u8f6c\u7684\u5f71\u54cd\u3002 \u4ee4\u4e00\u6761\u666f\u7269\u76f4\u7ebf\u5728\u7b2c\u4e00\u5e45\u89c6\u56fe\u4e2d\u7684\u6d88\u5f71\u70b9\u662f \\(\\mathbf{v}_i\\) \uff0c\u5728\u7b2c\u4e8c\u5e45\u89c6\u56fe\u4e2d\u7684\u662f \\(\\mathbf{v}_i^\\prime\\) \uff0c\u6d88\u5f71\u70b9 \\(\\mathbf{v}_i\\) \u5728\u7b2c\u4e00\u4e2a\u6444\u50cf\u673a\u7684\u6b27\u6c0f\u5750\u6807\u7cfb\u4e2d\u6d4b\u91cf\u5f97\u5230\u7684\u65b9\u5411\u662f \\(\\mathbf{d}_i=K^{-1}\\mathbf{v}_i / \\parallel K^{-1} \\mathbf{v}_i \\parallel\\) \uff0c\u800c\u5bf9\u5e94\u7684\u6d88\u5f71\u70b9 \\(\\mathbf{v}_i^\\prime\\) \uff0c\u5728\u7b2c\u4e8c\u4e2a\u6444\u50cf\u673a\u7684\u6b27\u6c0f\u5750\u6807\u7cfb\u4e2d\u6d4b\u91cf\u5f97\u5230\u7684\u65b9\u5411\u662f \\(\\mathbf{d}_i^\\prime\\) \uff0c\u5219\u6444\u50cf\u673a\u7684\u65cb\u8f6c \\(\\mathbf{d}_i^\\prime=R\\mathbf{d}_i\\) \u6d88\u5f71\u7ebf 3 \u7ef4\u7a7a\u95f4\u7684\u5e73\u884c\u5e73\u9762\u4e0e \\(\\pi _\\infty\\) \u4ea4\u4e8e\u4e00\u6761\u516c\u5171\u7684\u76f4\u7ebf\uff0c\u800c\u8fd9\u6761\u76f4\u7ebf\u7684\u56fe\u50cf\u5c31\u662f\u5e73\u9762\u7684\u6d88\u5f71\u7ebf\u3002\u51e0\u4f55\u4e0a\uff0c\u6d88\u5f71\u7ebf\u7531\u5e73\u884c\u4e8e\u666f\u7269\u5e73\u9762\u5e76\u8fc7\u6444\u50cf\u673a\u4e2d\u5fc3\u7684\u4e00\u5f20\u5e73\u9762\u4e0e\u56fe\u50cf\u7684\u4ea4\u7ebf\u5f97\u5230\u3002\u663e\u7136\uff0c \u6d88\u5f71\u7ebf\u4ec5\u4e0e\u666f\u7269\u5e73\u9762\u7684\u5b9a\u5411\u6709\u5173\uff0c\u800c\u4e0e\u5b83\u7684\u4f4d\u7f6e\u65e0\u5173\u3002 \u5728\u6444\u50cf\u673a\u6b27\u6c0f\u5750\u6807\u7cfb\u4e0b\uff0c\u5782\u76f4\u4e8e\u65b9\u5411 \\(\\mathbf{n}\\) \u7684\u5e73\u9762\u96c6\u7684\u6d88\u5f71\u7ebf\u662f \\(\\mathbf{l}=K^{-\\top}\\mathbf{n}\\) \u4e24\u6761\u666f\u7269\u76f4\u7ebf\u4e4b\u95f4\u7684\u5939\u89d2 \uff1a\u4ee4 \\(\\mathbf{v}_1,\\mathbf{v}_2\\) \u662f\u4e00\u5e45\u56fe\u50cf\u4e2d\u4e24\u6761\u76f4\u7ebf\u7684\u6d88\u5f71\u70b9\uff0c\u800c\u4ee4 \\(\\omega\\) \u4e3a\u56fe\u50cf\u4e2d\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf\u7684\u56fe\u50cf\u3002\u5982\u679c \\(\\theta\\) \u662f\u4e24\u76f4\u7ebf\u65b9\u5411\u95f4\u7684\u5939\u89d2\uff0c\u5219 \\[ \\cos \\theta = \\frac{\\mathbf{v}_1^\\top \\omega \\mathbf{v}_2}{\\sqrt{\\mathbf{v}_1^\\top \\omega \\mathbf{v}_1} \\sqrt{\\mathbf{v}_2^\\top \\omega \\mathbf{v}_2}} \\] \u6b63\u4ea4\u6027\u5173\u7cfb \u5177\u6709\u5782\u76f4\u65b9\u5411\u7684\u76f4\u7ebf\u7684\u6d88\u5f71\u70b9\u6ee1\u8db3 \\(\\mathbf{v}_1^\\top \\omega \\mathbf{v}_2=0\\) \u4e00\u5f20\u5e73\u9762\u7684\u6cd5\u7ebf\u65b9\u5411\u7684\u6d88\u5f71\u70b9 \\(\\mathbf{v}\\) \u53ef\u4ee5\u6309\u516c\u5f0f \\(\\mathbf{v}=\\omega^*\\mathbf{l}\\) \u7531\u5e73\u9762\u7684\u6d88\u5f71\u7ebf \\(\\mathbf{l}\\) \u83b7\u5f97\uff1b\u53cd\u4e4b\u6709 \\(\\mathbf{l}=\\omega \\mathbf{v}\\) \u4e24\u5782\u76f4\u5e73\u9762\u7684\u6d88\u5f71\u70b9\u6ee1\u8db3 \\(\\mathbf{l}_1^\\top \\omega^* \\mathbf{l}_2=0\\)","title":"\u6d88\u5f71\u70b9\u548c\u6d88\u5f71\u7ebf"},{"location":"cv/mvg/one-vg/#k","text":"\u5982\u679c \\(s=K_{12}=0\\) \uff0c\u5e76\u4e14 \\([\\omega_{ij}]=\\omega=K^{-\\top}K^{-1}\\) \uff0c\u90a3\u4e48 \\(\\omega_{12}=\\omega_{21}=0\\) \uff0c\u5982\u679c\u8fd8\u6ee1\u8db3 \\(\\alpha_x=K_{11}=K_{22}=\\alpha_y\\) \uff0c\u90a3\u4e48 \\(\\omega_{11}=\\omega_{22}\\) \u7531\u4e09\u4e2a\u6b63\u4ea4\u6d88\u5f71\u70b9\u7ed9\u5b9a\u7684\u6807\u5b9a\u4e8c\u6b21\u66f2\u7ebf \u9996\u5148\u6784\u4f5c\u9876\u70b9\u4e3a\u4e09\u4e2a\u6d88\u5f71\u70b9 \\(\\mathbf{v}_1,\\mathbf{v}_2,\\mathbf{v}_3\\) \u7684\u4e09\u89d2\u5f62 \\(C\\) \u7684\u4e2d\u5fc3\u662f\u4e09\u89d2\u5f62\u7684\u5782\u5fc3 \u5173\u4e8e\u4e2d\u5fc3\u53cd\u5c04\u5176\u4e2d\u7684\u4e00\u4e2a\u6d88\u5f71\u70b9\uff08\u4f8b\u5982 \\(\\mathbf{v}_1\\) \uff09\u5f97\u5230 \\(\\overset{\\cdot}{\\mathbf{v}}_1\\) \u6839\u636e\u6761\u4ef6\uff1a \\(\\overset{\\cdot}{\\mathbf{v}}_1\\) \u7684\u6781\u7ebf\u8fc7 \\(\\mathbf{v}_2, \\mathbf{v}_3\\) \u6765\u786e\u5b9a \\(C\\) \u7684\u534a\u5f84","title":"\u7531\u6d88\u5f71\u70b9\u548c\u6d88\u5f71\u7ebf\u786e\u5b9a\u6807\u5b9a K"},{"location":"cv/mvg/pjt2d/","text":"2D \u5c04\u5f71\u51e0\u4f55\u548c\u53d8\u6362 \u00b6 \u7ea6 4639 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 15 \u5206\u949f Abstract \u672c\u7ae0\u4e3b\u8981\u4ecb\u7ecdMVG\u6240\u5fc5\u987b\u7684\u51e0\u4f55\u6982\u5ff5\u548c\u7b26\u53f7\uff0c\u5177\u4f53\u6db5\u76d6\u5e73\u9762\u7684\u5c04\u5f71\u53d8\u6362\u51e0\u4f55 \u5e73\u9762\u51e0\u4f55 \u00b6 2D \u5c04\u5f71\u5e73\u9762 \u00b6 \u70b9\u4e0e\u76f4\u7ebf \u00b6 \u76f4\u7ebf\u7684\u5176\u6b21\u8868\u793a \u5e73\u9762\u4e0a\u7684\u4e00\u6761\u76f4\u7ebf\u7684\u65b9\u7a0b \\(ax+by+c=0\\) \u53ef\u4ee5\u7528\u77e2\u91cf \\((a,b,c)^{\\top}\\) \u8868\u793a\u3002 \u5bf9\u4efb\u4f55\u975e\u96f6\u7684k\u77e2\u91cf \\((a,b,c)^{\\top}\\) \u4e0e \\(k(a,b,c)^{\\top}\\) \u8868\u793a\u540c\u4e00\u76f4\u7ebf \u3002 \u70b9\u7684\u5176\u6b21\u8868\u793a \u4e00\u4e2a\u70b9\u7684\u4efb\u4f55\u9f50\u6b21\u77e2\u91cf\u7684\u8868\u793a\u5f62\u5f0f\u4e3a \\(x=(x_1,x_2,x_3)^{\\top}\\) \uff0c\u975e\u9f50\u6b21\u5750\u6807 \\(x=(\\frac{x_1}{x_3}, \\frac{x_2}{x_3})^{\\top}\\) \u3002 \u7ed3\u8bba1 \u70b9 \\(x\\) \u5728\u76f4\u7ebf \\(l\\) \u7684\u5145\u8981\u6761\u4ef6\u662f \\(x^{\\top}l=0\\) \u3002 \\(x^{\\top}l = l^{\\top}x = x \\cdot l = 0\\) \u3002 \u7ed3\u8bba2 \u4e24\u76f4\u7ebf \\(l\\) \u548c \\(l^{\\prime}\\) \u7684\u4ea4\u70b9\u662f\u70b9 \\(x=l \\times l^{\\prime}\\) \u3002 \u53c9\u4e58 \\[c = a \\times b = (a.y * b.z - b.y * a.z, \\quad b.x * a.z - a.x * b.z, \\quad a.x * b.y - b.x * a.y)\\] \u7ed3\u8bba3 \u8fc7\u4e24\u70b9 \\(x\\) \u548c \\(x^{\\prime}\\) \u7684\u76f4\u7ebf\u662f \\(l = x \\times x^{\\prime}\\) \u3002 \u5e73\u884c\u7ebf\u7684\u4ea4\u70b9 \u4e24\u5e73\u884c\u76f4\u7ebf \\(ax+by+c=0\\) \u548c \\(ax+by+c^{\\prime}=0\\) \uff0c\u7531 \u7ed3\u8bba2 \u53ef\u5f97\u4ea4\u70b9 \\((b, -a, 0)^{\\top}\\) \u3002 \u7406\u60f3\u70b9\u548c\u65e0\u7a77\u8fdc\u7ebf \u5f53\u9f50\u6b21\u77e2\u91cf \\(x = (x_1, x_2, x_3)^{\\top}\\) \u4e2d\u7684 \\(x_3=0\\) \u65f6\u7684\u70b9\u88ab\u79f0\u4e3a \u7406\u60f3\u70b9 \uff0c\u6216 \u65e0\u7a77\u8fdc\u70b9 \u3002\u6240\u6709\u7406\u60f3\u70b9\u96c6\u5408\u5728\u4e00\u6761\u76f4\u7ebf\u4e0a\uff0c\u79f0 \u65e0\u7a77\u8fdc\u7ebf \uff0c\u7528 \\(I_{\\infty}=(0,0,1)^{\\top}\\) \u8868\u793a\u3002 \u5c04\u5f71\u5e73\u9762\u6a21\u578b \\(IP^2\\) \u7684\u70b9\u548c\u7ebf\u5206\u522b\u4e3a\u4e2d\u8fc7\u539f\u70b9\u7684\u5c04\u7ebf\u548c\u5e73\u9762 \\(x_1x_2\\) \u5e73\u9762\u4e0a\u7684\u5c04\u7ebf\u8868\u793a\u7406\u60f3\u70b9\uff0c\u800c \\(x_1x_2\\) \u5e73\u9762\u8868\u793a \\(I_{\\infty}\\) \u3002 \u7ed3\u8bba4\uff08\u5bf9\u5076\u539f\u7406\uff09 2\u7ef4\u5c04\u5f71\u51e0\u4f55\u4e2d\u7684\u4efb\u4f55\u5b9a\u7406\u90fd\u6709\u4e00\u4e2a\u5bf9\u5e94\u7684\u5bf9\u5076\u5b9a\u7406\uff0c\u5b83\u53ef\u4ee5\u901a\u8fc7\u4e92\u6362\u539f\u5b9a\u7406\u4e2d\u70b9\u548c\u7ebf\u7684\u4f5c\u7528\u800c\u5bfc\u51fa\u3002 \u4e8c\u6b21\u66f2\u7ebf\u4e0e\u5bf9\u5076\u4e8c\u6b21\u66f2\u7ebf \u00b6 \u4e8c\u6b21\u66f2\u7ebf \u5728\u6b27\u6c0f\u51e0\u4f55\u4e2d\uff0c\u4e8c\u6b21\u66f2\u7ebf\u6709\u4e09\u79cd\u4e3b\u8981\u7c7b\u578b: \u53cc\u66f2\u7ebf\uff0c\u692d\u5706\u548c\u629b\u7269\u7ebf\u3002 \u5728\u975e\u9f50\u6b21\u5750\u6807\u4e2d\uff0c\u4e8c\u6b21\u66f2\u7ebf\u7684\u65b9\u7a0b\u662f \\[ax^2+bxy+cy^2+dx+ey+f=0\\] \u901a\u8fc7\u66ff\u4ee3 \\(x\\to\\frac{x_1}{x_3}\\) \uff0c \\(y\\to\\frac{x_2}{x_3}\\) \uff0c\u5f97\u5230\uff1a \\[ax_1^2+bx_1x_2+cx_2^2+dx_1x_3+ex_2x_3+fx_3^2=0\\] \u8868\u793a\u6210\u77e9\u9635\u5f62\u5f0f\u4e3a \\(x^{\\top}Cx=0\\) \u5176\u4e2d\u4e8c\u6b21\u66f2\u7ebf\u7cfb\u6570\u77e9\u9635 \\(C\\) \u4e3a \\[ C = \\left[ \\begin{matrix} a & b/2 & d/2 \\\\ b/2 & c & e/2 \\\\ d/2 & e/2 & f \\end{matrix} \\right] \\] \u7ed3\u8bba5 \u8fc7(\u975e\u9000\u5316)\u4e8c\u6b21\u66f2\u7ebf \\(C\\) \u4e0a\u70b9 \\(x\\) \u7684\u5207\u7ebf \\(l\\) \u7531 \\(l=Cx\\) \u786e\u5b9a\u3002 \u5bf9\u5076\u4e8c\u6b21\u66f2\u7ebf \u4e0a\u9762\u5b9a\u4e49\u7684\u4e8c\u6b21\u66f2\u7ebf \\(C\\) \u66f4\u786e\u5207\u5730\u5e94\u79f0\u4e3a\u70b9\u4e8c\u6b21\u66f2\u7ebf\uff0c\u56e0\u4e3a\u5b83\u5b9a\u4e49\u7684\u662f\u70b9\u7684\u65b9\u7a0b\u3002\u540c\u65f6\u8fd9\u79cd \u5bf9\u5076 \uff08\u6216\u7ebf\uff09\u4e8c\u6b21\u66f2\u7ebf\u4e5f\u7531\u4e00\u4e2a \\(3 \\times 3\\) \u77e9\u9635\u8868\u793a\uff0c\u6211\u4eec\u628a\u5b83\u8bb0\u4e3a \\(C^*\\) \uff0c\u4e8c\u6b21\u66f2\u7ebf \\(C\\) \u7684\u5207\u7ebf \\(l\\) \u6ee1\u8db3 \\(l^{\\top}C^*l=0\\) \u3002\u5176\u4e2d \\(C^*\\) \u8868\u793a\u4e3a \\(C\\) \u7684\u4f34\u968f\u77e9\u9635\u3002 \u9000\u5316\u4e8c\u6b21\u66f2\u7ebf \u975e\u6ee1\u79e9\u77e9\u9635 \\(C\\) \u6240\u5b9a\u4e49\u7684\u4e8c\u6b21\u66f2\u7ebf\u79f0\u4f5c\u9000\u5316\u4e8c\u6b21\u66f2\u7ebf\u3002\u9000\u5316\u7684\u70b9\u4e8c\u6b21\u66f2\u7ebf\u5305\u542b\u4e24\u6761\u7ebf(\u79e9 2) \u6216\u4e00\u6761\u91cd\u7ebf(\u79e9 1) \u3002 \u5c04\u5f71\u53d8\u6362 \u00b6 \u5c04\u5f71\u6620\u5c04 \u5c04\u5f71\u6620\u5c04 \u662f \\(IP^2\\) \u5230\u5b83\u81ea\u8eab\u7684\u4e00\u79cd\u6ee1\u8db3\u4e0b\u5217\u6761\u4ef6\u7684\u53ef\u9006\u6620\u5c04 \\(h\\) \uff1a\u4e09\u70b9 \\(x_1\\) , \\(x_2\\) \u548c \\(x_3\\) \u5171\u7ebf\u5f53\u4e14\u4ec5\u5f53 \\(h(x_1)\\) , \\(h(x_2)\\) , \\(h(x_3)\\) \u4e5f\u5171\u7ebf\u3002 \u5c04\u5f71\u6620\u5c04\u4e5f\u79f0\u4e3a\u4fdd\u7ebf\u53d8\u6362 \uff0c\u6216\u5c04\u5f71\u53d8\u6362\u6216\u5355\u5e94 (homography) \u3002 \u5b9a\u74061 \u6620\u5c04 \\(h\\) \uff1a \\(IP^2 \\to IP^2\\) \u662f\u5c04\u5f71\u6620\u5c04\u7684\u5145\u8981\u6761\u4ef6\u662f\u5b58\u5728\u4e00\u4e2a \\(3 \\times 3\\) \u975e\u5947\u5f02\u77e9\u9635 \\(H\\) \uff0c\u4f7f\u5f97 \\(IP^2\\) \u7684\u4efb\u4f55\u4e00\u4e2a\u7528\u77e2\u91cf \\(x\\) \u8868\u793a\u7684\u70b9\u90fd\u6ee1\u8db3 \\(h(x)=Hx\\) \u3002 \u5c04\u5f71\u53d8\u6362 \u5e73\u9762\u5c04\u5f71\u53d8\u6362\u662f\u5173\u4e8e\u9f50\u6b213\u7ef4\u77e2\u91cf\u7684\u4e00\u79cd\u7ebf\u6027\u53d8\u6362\uff0c\u5e76\u53ef\u7528\u4e00\u4e2a\u975e\u5947\u5f02 \\(3 \\times 3\\) \u77e9\u9635 \\(H\\) \u8868\u793a\u4e3a\uff1a \\[ \\begin{pmatrix} x_1^\\prime \\\\ x_2^\\prime\\\\ x_3^\\prime \\end{pmatrix} = \\left[ \\begin{matrix} h_{11} & h_{12} & h_{13} \\\\ h_{21} & h_{22} & h_{23} \\\\ h_{31} & h_{32} & h_{33} \\end{matrix} \\right] \\begin{pmatrix} x_1 \\\\ x_2\\\\ x_3 \\end{pmatrix} \\] \u6216\u66f4\u7b80\u6d01\u5730\u8868\u793a\u4e3a \\(x^\\prime = Hx\\) \u3002 \u76f4\u7ebf\u548c\u4e8c\u6b21\u66f2\u7ebf\u7684\u53d8\u6362 \u00b6 \u76f4\u7ebf\u7684\u53d8\u6362 \\[l^\\prime = H^{-T}l\\] \u4e5f\u53ef\u4ee5\u5199\u6210 \\(l^{\\prime T}=l^{\\top}H^{-1}\\) \u3002\u76f4\u7ebf\u548c\u70b9\u53d8\u6362\u7684\u57fa\u672c\u533a\u522b\u5728\u4e8e\u70b9\u53d8\u6362\u4f9d\u636e \\(H\\) \uff0c\u800c\u76f4\u7ebf\uff08\u89c6\u4e3a\u884c\u77e2\u91cf\uff09\u53d8\u6362\u5219\u4f9d\u636e \\(H^{-1}\\) \u3002\u79f0\u70b9\u53d8\u6362\u4e3a \u9006\u53d8 \u800c\u7ebf\u53d8\u6362\u4e3a \u534f\u53d8 \u3002 \u4e8c\u6b21\u66f2\u7ebf\u7684\u53d8\u6362 \u5728\u70b9\u53d8\u6362 \\(x^\\prime = Hx\\) \u4e0b\uff0c \\(x^{\\top}Cx = x^{\\prime T}[H^{-1}]^{\\top}CH^{-1}x^\\prime = x^{\\prime T} H^{-T}CH^{-1} x^{\\prime}\\) \u3002 \u7ed3\u8bba1 \u5728\u70b9\u53d8\u6362 \\(x^\\prime = Hx\\) \u4e0b\uff0c\u4e8c\u6b21\u66f2\u7ebf \\(C\\) \u53d8\u6362\u4e3a \\(C^\\prime = H^{-T}CH^{-1}\\) \u3002\uff08\u56e0\u4e3a\u5b58\u5728 \\(H^{-1}\\) \uff0c\u6240\u4ee5\u79f0\u4e8c\u6b21\u66f2\u7ebf\u53d8\u6362\u4e3a \u534f\u53d8 \uff09 \u8bc1\u660e \\[ x^{\\top}Cx = (H^{-1}x^\\prime)^{\\top} C (H^{-1}x^\\prime) = x^{\\prime T} (H^{-T}CH^{-1}) x^\\prime \\] \u7ed3\u8bba2 \u5728\u70b9\u53d8\u6362 \\(x^\\prime = Hx\\) \u4e0b\uff0c\u5bf9\u5076\u4e8c\u6b21\u66f2\u7ebf \\(C^*\\) \u53d8\u6362\u4e3a \\(C^{*\\prime} = HC^* H^{\\top}\\) \u3002 \u8bc1\u660e \\[ l^{\\top}C^*l = (H^{\\top}l)^{\\top}C^*(H^{\\top}l)=l^{\\top}HC^*H^{\\top}l \\] \u53d8\u6362\u7684\u5c42\u6b21 \u00b6 \u2002\u2002\u7531 \\(n \\times n\\) \u53ef\u9006\u5b9e\u77e9\u9635\u7684\u7fa4\u79f0\u4e3a\uff08\u5b9e\u7684\uff09\u4e00\u822c\u7ebf\u6027\u7fa4\u6216 \\(GL(n)\\) \u3002\u5f53\uff0c \u628a\u76f8\u5dee\u975e\u96f6\u7eaf\u9760\u56e0\u5b50\u7684\u77e9\u9635\u90fd\u89c6\u4e3a\u7b49\u540c\u65f6\uff0c\u4fbf\u5f97\u5230\u5c04\u5f71\u7ebf\u6027\u7fa4\uff0c\u8bb0\u4e3a \\(PL(n)\\) (\u5b83\u662f \\(GL(n)\\) \u7684\u5546\u7fa4)\u3002\u5728\u5e73\u9762\u5c04\u5f71\u53d8\u6362\u65f6\uff0c \\(n=3\\) \u3002 \u7b49\u8ddd\u53d8\u6362 \u00b6 \u2002\u2002\u7b49\u8ddd(isometric)\u53d8\u6362\u662f\u5e73\u9762 \\(IR^2\\) \u7684\u53d8\u6362\uff0c\u4fdd\u6301\u6b27\u5f0f\u8ddd\u79bb\u4e0d\u53d8\uff0c\u4e00\u4e2a\u7b49\u8ddd\u53d8\u6362\u53ef\u8868\u793a\u4e3a \\[ \\begin{pmatrix} x^\\prime \\\\ y^\\prime\\\\ 1 \\end{pmatrix} = \\left[ \\begin{matrix} \\varepsilon \\cos \\theta & -\\sin \\theta & t_x \\\\ \\varepsilon \\sin \\theta & \\cos \\theta & t_y \\\\ 0& 0 & 1 \\end{matrix} \\right] \\begin{pmatrix} x \\\\ y\\\\ 1 \\end{pmatrix} \\] \u5176\u4e2d \\(\\varepsilon = \\pm 1\\) \u3002\u5982\u679c \\(\\varepsilon = 1\\) \u90a3\u4e48\u8be5\u7b49\u8ddd\u53d8\u6362\u662f \u4fdd\u5411\u7684 \u5e76\u4e14\u4e5f\u662f \u6b27\u6c0f \u53d8\u6362\uff08\u5e73\u79fb\u548c\u65cb\u8f6c\u7684\u590d\u5408\uff09\u3002\u5982\u679c \\(\\varepsilon = -1\\) \uff0c\u90a3\u4e48\u8be5\u7b49\u8ddd\u53d8\u6362\u662f \u9006\u5411\u7684 \u3002 \u2002\u2002\u5e73\u9762\u6b27\u6c0f\u53d8\u6362\u53ef\u4ee5\u7528\u66f4\u7b80\u6d01\u7684\u5206\u5757\u5f62\u5f0f\u5199\u4e3a \\[ \\mathbf{x}^\\prime = H_E \\mathbf{x} = \\left[ \\begin{matrix} R & \\mathbf{t} \\\\ \\mathbf{0}^{\\top} & 1 \\\\ \\end{matrix} \\right] \\mathbf{x} \\] \u2002\u2002\u5e73\u9762\u6b27\u6c0f\u53d8\u6362\u6709\u4e09\u4e2a\u81ea\u7531\u5ea6\uff0c\u65cb\u8f6c\u4e00\u4e2a\uff0c\u5e73\u79fb\u4e8c\u4e2a\u3002 \u4e0d\u53d8\u91cf \uff1a\u957f\u5ea6(\u4e24\u70b9\u7684\u8ddd\u79bb)\uff0c\u89d2\u5ea6(\u4e24\u7ebf\u7684\u5939\u89d2)\u548c\u9762\u804c\u3002 \u7fa4\u548c\u5b9a\u5411 \u2003\u4fdd\u5411\u7684\u7b49\u8ddd\u53d8\u6362\u5f62\u6210\u4e00\u4e2a\u7fa4\uff0c\u4f46\u9006\u5411\u7684\u4e0d\u662f\u3002\u8fd9\u79cd\u533a\u522b\u5bf9\u4e8e\u4e0b\u9762\u7684\u76f8\u4f3c\u548c\u4eff\u5c04\u53d8\u6362\u540c\u6837\u5982\u6b64\u3002 \u76f8\u4f3c\u53d8\u6362 \u00b6 \u2002\u2002\u76f8\u4f3c\u53d8\u6362\u662f\u4e00\u4e2a\u7b49\u8ddd\u53d8\u6362\u4e0e\u4e00\u4e2a\u5747\u5300\u7f29\u653e\u7684\u590d\u5408\u3002\u77e9\u9635\u8868\u793a\u4e3a\uff1a \\[ \\begin{pmatrix} x^\\prime \\\\ y^\\prime\\\\ 1 \\end{pmatrix} = \\left[ \\begin{matrix} s\\cos \\theta & -s\\sin \\theta & t_x \\\\ s\\sin \\theta & s\\cos \\theta & t_y \\\\ 0& 0 & 1 \\end{matrix} \\right] \\begin{pmatrix} x \\\\ y\\\\ 1 \\end{pmatrix} \\] \u53ef\u4ee5\u7528\u66f4\u7b80\u6d01\u7684\u5206\u5757\u5f62\u5f0f\u5199\u4e3a \\[ \\mathbf{x}^\\prime = H_S \\mathbf{x} = \\left[ \\begin{matrix} sR & \\mathbf{t} \\\\ \\mathbf{0}^{\\top} & 1 \\\\ \\end{matrix} \\right] \\mathbf{x} \\] \u4e0d\u53d8\u91cf \uff1a\u76f4\u7ebf\u7684\u5939\u89d2\uff0c\u4e24\u957f\u5ea6\u7684\u6bd4\u7387\u548c\u9762\u79ef\u7684\u6bd4\u7387\u3002 \u4eff\u5c04\u53d8\u6362 \u00b6 \u2002\u2002\u4eff\u5c04\u53d8\u6362\u662f\u4e00\u4e2a\u975e\u5947\u5f02\u7ebf\u6027\u53d8\u6362\u4e0e\u4e00\u4e2a\u5e73\u79fb\u53d8\u6362\u7684\u590d\u5408\uff0c\u5b83\u7684\u77e9\u9635\u8868\u793a\u4e3a\uff1a \\[ \\begin{pmatrix} x^\\prime \\\\ y^\\prime\\\\ 1 \\end{pmatrix} = \\left[ \\begin{matrix} a_{11} & a_{12} & t_x \\\\ a_{21} & a_{22} & t_y \\\\ 0 & 0 & 1 \\end{matrix} \\right] \\begin{pmatrix} x \\\\ y \\\\ 1 \\end{pmatrix} \\] \u53ef\u4ee5\u7528\u66f4\u7b80\u6d01\u7684\u5206\u5757\u5f62\u5f0f\u5199\u4e3a \\[ \\mathbf{x}^\\prime = H_A \\mathbf{x} = \\left[ \\begin{matrix} A & \\mathbf{t} \\\\ \\mathbf{0}^{\\top} & 1 \\\\ \\end{matrix} \\right] \\mathbf{x} \\] \u2002\u2002\u5e73\u9762\u4eff\u5c04\u53d8\u6362\u6709\u516d\u81ea\u7531\u5ea6\uff0c\u53ef\u4ee5\u7531\u4e09\u7ec4\u70b9\u5bf9\u5e94\u6765\u8ba1\u7b97\u3002 \u4e0d\u53d8\u91cf \uff1a\u5e73\u884c\u7ebf\uff0c\u5e73\u884c\u7ebf\u6bb5\u7684\u957f\u5ea6\u6bd4\u548c\u9762\u79ef\u6bd4\u3002 \u5c04\u5f71\u53d8\u6362 \u00b6 \u5b83\u662f\u9f50\u6b21\u5750\u6807\u7684\u4e00\u822c\u975e\u5947\u5f02\u7ebf\u6027\u53d8\u6362\uff0c\u5176\u5206\u5757\u5f62\u5f0f\uff1a \\[ \\mathbf{x}^\\prime = H_P \\mathbf{x} = \\left[ \\begin{matrix} A & \\mathbf{t} \\\\ \\mathbf{v}^{\\top} & v \\\\ \\end{matrix} \\right] \\mathbf{x} \\] \u5176\u4e2d \\(\\mathbf{v}=(v_1, v_2)^{\\top}\\) \u3002 \u2002\u2002\u5c04\u5f71\u53d8\u6362\u7531\u516b\u4e2a\u53c2\u6570\u786e\u5b9a\uff0c\u53ef\u7531\u56db\u7ec4\u70b9\u5bf9\u5e94\u7b97\u51fa\uff0c \u4f46\u5176\u4e2d\u5c5e\u4e8e\u5411\u4e00\u5e73\u9762\u7684\u4e09\u70b9\u5fc5\u4e0d\u5171\u7ebf\u3002 \u4e0d\u53d8\u91cf \uff1a\u6700\u57fa\u672c\u7684\u5c04\u5f71\u4e0d\u53d8\u91cf\u662f\u56db\u5171\u7ebf\u70b9\u7684\u4ea4\u6bd4\u3002 \u5c04\u5f71\u53d8\u6362\u7684\u5206\u89e3 \u00b6 \u2002\u2002\u5c04\u5f71\u53d8\u6362\u53ef\u4ee5\u5206\u89e3\u4e3a\u4e00\u4e32\u53d8\u6362\u94fe\u7684\u590d\u5408\uff0c\u94fe\u4e2d\u7684\u6bcf\u4e2a\u77e9\u9635\u6bd4\u5b83\u524d\u9762\u7684\u4e00\u4e2a\u77e9\u9635\u6240\u8868\u793a\u7684\u53d8\u6362\u5c42\u6b21\u9ad8\u3002 \\[ H = H_SH_AH_P = \\left[ \\begin{matrix} sR & \\mathbf{t}/v \\\\ \\mathbf{0}^{\\top} & 1 \\\\ \\end{matrix} \\right] \\left[ \\begin{matrix} K & \\mathbf{0} \\\\ \\mathbf{0}^{\\top} & 1 \\\\ \\end{matrix} \\right] \\left[ \\begin{matrix} \\mathbf{I} & \\mathbf{0} \\\\ \\mathbf{v}^{\\top} & v \\\\ \\end{matrix} \\right] = \\left[ \\begin{matrix} A & \\mathbf{t} \\\\ \\mathbf{v}^{\\top} & v \\\\ \\end{matrix} \\right] \\] \u5176\u4e2d \\(A=sRK+\\mathbf{tv}^{\\top}/v\\) \uff0c\u800c \\(K\\) \u662f\u6ee1\u8db3 \\(det\\ K=1\\) \u7684\u5f52\u4e00\u5316\u4e0a\u4e09\u89d2\u77e9\u9635\u3002\u5982\u679c \\(v \\ne 0\\) \u4e0a\u8ff0\u5206\u89e3\u662f\u6709\u6548\u7684\uff0c\u800c\u4e14\u5982\u679c \\(s\\) \u53d6\u6b63\u503c\uff0c\u5b83\u8fd8\u662f\u552f\u4e00\u7684\u3002 \u4e0d\u53d8\u91cf\u7684\u6570\u76ee \uff1a\u4e0e\u51fd\u6570\u65e0\u5173\u7684\u4e0d\u53d8\u91cf\u6570\u7b49\u4e8e\u6216\u5927\u4e8e\u914d\u7f6e\u7684\u81ea\u7531\u5ea6\u6570\u51cf\u53bb\u53d8\u6362\u7684\u81ea\u7531\u5ea6\u6570\u3002 1D \u5c04\u5f71\u51e0\u4f55\u548c\u4ea4\u6bd4 \u00b6 \u2002\u2002\u76f4\u7ebf\u4e0a\u7684\u70b9 \\(x\\) \u7528\u9f50\u6b21\u5750\u6807\u8868\u793a\u4e3a \\((x_1, x_2)^{\\top}\\) \uff0c\u800c \\((x_1, 0)^{\\top}\\) \u662f\u8be5\u76f4\u7ebf\u7684\u7406\u60f3\u70b9\u3002\u6211\u4eec\u5c06\u7528\u8bb0\u53f7 \\(\\mathbf{\\bar{x}}\\) \u8868\u793a \\(2\\) \u7ef4\u77e2\u91cf \\((x_1, x_2)^{\\top}\\) \u3002\u53ef\u7528\u9f50\u6b21\u77e9\u9635\u8868\u793a\uff1a \\[\\mathbf{\\bar{x}}^\\prime = H_{2 \\times 2} \\mathbf{\\bar{x}}\\] \u4ea4\u6bd4 \u00b6 \u2002\u2002\u4ea4\u6bd4\u662f \\(IP^1\\) \u7684\u57fa\u672c\u5c04\u5f71\u4e0d\u53d8\u91cf\u3002\u7ed9\u5b9a \\(4\\) \u4e2a\u70b9 \\(\\mathbf{\\bar{x}_i}\\) \uff0c\u4ea4\u6bd4\u5b9a\u4e49\u4e3a \\[ Cross(\\mathbf{\\bar{x}_1},\\mathbf{\\bar{x}_2},\\mathbf{\\bar{x}_3},\\mathbf{\\bar{x}_4}) = \\frac{|\\mathbf{\\bar{x}_1}\\mathbf{\\bar{x}_2}||\\mathbf{\\bar{x}_3}\\mathbf{\\bar{x}_4}|}{|\\mathbf{\\bar{x}_1}\\mathbf{\\bar{x}_3}||\\mathbf{\\bar{x}_2}\\mathbf{\\bar{x}_4}|} \\] \u5176\u4e2d \\[ |\\mathbf{\\bar{x}_i}\\mathbf{\\bar{x}_j}| =det \\begin{bmatrix} x_{i1} & x_{j1} \\\\ x_{i2} & x_{j2} \\end{bmatrix} \\] \u4ea4\u6bd4\u7684\u4e3b\u8981\u7279\u70b9 \u4ea4\u6bd4\u7684\u503c\u4e0e\u5404\u70b9 \\(\\mathbf{\\bar{x}_i}\\) \u6240\u7528\u7684\u5177\u4f53\u7684\u9f50\u6b21\u8868\u793a\u65e0\u5173\u3002 \u5982\u679c\u6bcf\u70b9 \\(\\mathbf{\\bar{x}_i}\\) \u90fd\u662f\u6709\u9650\u70b9\uff0c\u5e76\u4e14\u5728\u9f50\u6b21\u8868\u793a\u4e2d\u5747\u9009\u62e9 \\(x_2 = 1\\) \uff0c\u90a3\u4e48 \\(|\\mathbf{\\bar{x}_i}\\mathbf{\\bar{x}_j}|\\) \u5c31\u8868\u793a\u7531 \\(\\mathbf{\\bar{x}_i}\\) \u5230 \\(\\mathbf{\\bar{x}_j}\\) \u7684\u5e26\u7b26\u53f7\u7684\u8ddd\u79bb\u3002 \u5982\u679c\u70b9 \\(\\mathbf{\\bar{x}_i}\\) \u4e2d\u6709\u4e00\u4e2a\u7406\u60f3\u70b9\uff0c\u4ea4\u6bd4\u7684\u5b9a\u4e49\u4ecd\u7136\u6709\u6548\u3002 \u5728\u4efb\u4f55\u76f4\u7ebf\u7684\u5c04\u5f71\u53d8\u6362\u4e0b\uff0c\u4ea4\u6bd4\u7684\u503c\u4e0d\u53d8\u3002 \u5171\u70b9\u7ebf \u5171\u70b9\u7ebf\u662f\u76f4\u7ebf\u4e0a\u5171\u7ebf\u70b9\u7684\u5bf9\u5076\u3002\u8fd9\u610f\u5473\u7740\u5e73\u9762\u4e0a\u7684\u5171\u70b9\u7ebf\u4e5f\u6709\u51e0\u4f55 \\(IP^1\\) \u3002\u7279\u522b\u662f\uff0c\u4efb\u4f55\u56db\u6761\u5171\u70b9\u7ebf\u90fd\u6709\u4e00\u4e2a\u786e\u5b9a\u7684\u4ea4\u6bd4\u3002 \u4ece\u56fe\u50cf\u6062\u590d\u4eff\u5c04\u548c\u5ea6\u91cf\u6027\u8d28 \u00b6 \u2002\u2002\u5c04\u5f71\u77eb\u6b63\u7684\u76ee\u7684\u662f\u6d88\u9664\u5e73\u9762\u7684\u900f\u89c6\u56fe\u50cf\u4e2d\u7684\u5c04\u5f71\u5931\u771f\uff0c\u4f7f\u5f97\u539f\u59cb\u5e73\u9762\u7684\u76f8\u4f3c\u6027\u8d28\uff08\u89d2\u5ea6\u3001\u957f\u5ea6\u6bd4\uff09\u53ef\u4ee5\u88ab\u6d4b\u91cf\u3002 \u65e0\u7a77\u8fdc\u7ebf \u00b6 \u2002\u2002\u5728\u5c04\u5f71\u53d8\u6362\u4e0b\uff0c\u7406\u60f3\u70b9\u53ef\u4ee5\u6620\u5c04\u4e3a\u6709\u9650\u70b9\uff0c\u56e0\u800c \\(I_{\\infty}\\) \u88ab\u6620\u5c04\u4e3a\u6709\u9650\u76f4\u7ebf\u3002\u4f46\u5982\u679c\u662f\u4eff\u5c04\u53d8\u6362\uff0c \\(I_{\\infty}\\) \u4e0d\u4f1a\u88ab\u6620\u5c04\u4e3a\u6709\u9650\u76f4\u7ebf\uff0c\u5373\u4ecd\u7559\u5728\u65e0\u7a77\u8fdc\u5904\uff0c\u663e\u7136\uff0c\u5b83\u53ef\u76f4\u63a5\u7531\u76f4\u7ebf\u7684\u53d8\u6362\u63a8\u51fa\uff1a \\[ I_{\\infty}^\\prime = H_A^{-T}I_{\\infty} = \\begin{bmatrix} A^{-T} & \\mathbf{0} \\\\ -\\mathbf{t}^{\\top}A^{-T} & 1 \\end{bmatrix} \\begin{pmatrix} 0 \\\\ 0 \\\\ 1 \\end{pmatrix} = \\begin{pmatrix} 0 \\\\ 0 \\\\ 1 \\end{pmatrix} = I_\\infty \\] \u7ed3\u8bba1 \u5728\u5c04\u5f71\u53d8\u6362 \\(H\\) \u4e0b\uff0c\u65e0\u7a77\u8fdc\u76f4\u7ebf \\(I_{\\infty}\\) \u4e3a\u4e0d\u52a8\u76f4\u7ebf\u7684\u5145\u8981\u6761\u4ef6\u662f \\(H\\) \u662f\u4eff\u5c04\u53d8\u6362\u3002 \u2002\u2002\u5728\u5e73\u9762\u7684\u50cf\u4e2d\uff0c\u4e00\u4f46\u65e0\u7a77\u8fdc\u76f4\u7ebf\u7684\u50cf\u5f97\u5230\u8fa8\u8ba4\uff0c\u5c31\u6709\u53ef\u80fd\u5bf9\u539f\u5e73\u9762\u8fdb\u884c\u4eff\u5c04\u6d4b\u91cf\u3002\u5982\u4e0b\u56fe\u6240\u793a\uff0c\u76f4\u63a5\u628a\u5df2\u8fa8\u8ba4\u7684 \\(I_\\infty\\) \u53d8\u6362\u5230\u5b83\u7684\u89c4\u8303\u4f4d\u7f6e \\(I_\\infty = (0,0,1)^{\\top}\\) \u3002\u628a\u5b9e\u73b0\u6b64\u53d8\u6362\u7684(\u5c04\u5f71)\u77e9\u9635\u5e94\u7528\u4e8e\u56fe\u50cf\u4e2d\u7684\u6bcf\u4e00\u70b9\u4ee5\u8fbe\u5230\u5bf9\u56fe\u50cf\u8fdb\u884c\u4eff\u5c04\u77eb\u6b63\u7684\u76ee\u7684\uff0c\u5373\u53d8\u6362\u4e4b\u540e\uff0c\u4eff\u5c04\u6d4b\u91cf\u53ef\u4ee5\u76f4\u63a5\u5728\u77eb\u6b63\u8fc7\u7684\u56fe\u50cf\u4e2d\u8fdb\u884c\u3002 \u2002\u2002\u5982\u679c\u65e0\u7a77\u8fdc\u76f4\u7ebf\u7684\u50cf\u662f \\(\\mathbf{I} = (l_1, l_2, l_3)^{\\top}\\) \uff0c\u5047\u5b9a \\(l_3 \\ne 0\\) \uff0c\u90a3\u4e48\u628a \\(\\mathbf{l}\\) \u6620\u5c04\u56de \\(l_\\infty = (0,0,1)^{\\top}\\) \u7684\u4e00\u4e2a\u5408\u9002\u7684\u5c04\u5f71\u70b9\u4ea4\u6362\u662f \\[ H=H_A \\begin{bmatrix} 1 & 0 & 0 \\\\ 0 & 1 & 0 \\\\ l_1 & l_2 & l_3 \\end{bmatrix} \\] \u76f4\u7ebf\u4e0a\u7684\u8ddd\u79bb\u6bd4 \u7ed9\u5b9a\u4e00\u4e2a\u76f4\u7ebf\u4e0a\u6709\u5df2\u77e5\u957f\u5ea6\u6bd4\u7684\u4e24\u4e2a\u7ebf\u6bb5\uff0c\u8be5\u76f4\u7ebf\u4e0a\u7684\u65e0\u7a77\u8fdc\u70b9\u4fbf\u53ef\u4ee5\u786e\u5b9a\u3002 \u865a\u5706\u70b9\u53ca\u5176\u5bf9\u5076 \u00b6 \u865a\u5706\u70b9 \u6bcf\u4e00\u5706\u5468\u4e0e \\(l_\\infty\\) \u76f8\u4ea4\u7684\u70b9\u79f0\u4e3a\u865a\u5706\u70b9\u3002 \u8bc1\u660e \u5728\u4e8c\u6b21\u66f2\u7ebf\u4e3a\u5706\u6709 \\(a=c\\) \u4e14 \\(b=0\\) \u3002\u53d6 \\(a=1\\) \u5219\uff1a \\[x_1^2+x_2^2+dx_1x_3+ex_2x_3=fx_3^2=0\\] \u8be5\u4e8c\u6b21\u66f2\u7ebf\u76f8\u4ea4\u4e8e \\(l_\\infty\\) \u4e8e(\u7406\u60f3)\u70b9( \\(x_3=0\\) )\uff1a \\[x_1^2+x_2^2=0\\] \u89e3\u5f97\u865a\u5706\u70b9\u7684\u6807\u51c6\u5750\u6807\u662f \\(\\mathbf{I}=(1,i,0)^{\\top}, \\; \\mathbf{J}=(1, -i, 0)^{\\top}\\) \u3002 \u8fd9\u4e00\u5bf9\u865a\u5706\u70b9\u662f\u590d\u5171\u8f6d\u7406\u60f3\u70b9\uff0c\u5b83\u4eec\u5728\u4fdd\u5411\u76f8\u4f3c\u53d8\u6362\u4e0b\u4e0d\u53d8\uff1a \\[ \\mathbf{I}^\\prime = H_S\\mathbf{I} = \\left[ \\begin{matrix} s\\cos \\theta & -s\\sin \\theta & t_x \\\\ s\\sin \\theta & s\\cos \\theta & t_y \\\\ 0& 0 & 1 \\end{matrix} \\right] \\begin{pmatrix} 1 \\\\ i \\\\ 0 \\end{pmatrix} = se^{-i \\theta} \\begin{pmatrix} 1 \\\\ i \\\\ 0 \\end{pmatrix} = \\mathbf{I} \\] \u7ed3\u8bba2 \u5728\u5c04\u5f71\u53d8\u6362 \\(H\\) \u4e0b\uff0c\u865a\u5706\u70b9 \\(I\\) \u548c \\(J\\) \u4e3a\u4e0d\u52a8\u70b9\u7684\u5145\u8981\u6761\u4ef6\u662f \\(H\\) \u662f\u76f8\u4f3c\u53d8\u6362\u3002 \u2002\u2002\u4efb\u4f55\u5706\u90fd\u4ea4 \\(\\mathbf{I}_\\infty\\) \u4e8e\u865a\u5706\u70b9 . \u5728\u6b27\u6c0f\u51e0\u4f55\u4e2d\u4e00\u4e2a\u5706\u7531\u4e09\u70b9\u6307\u5b9a.\u865a\u5706\u70b9\u5f15\u51fa\u53e6 \u4e00\u79cd\u8ba1\u7b97.\u5706\u53ef\u4ee5\u7528\u7531\u4e94\u4e2a\u70b9\u5b9a\u4e49\u7684\u4e00\u822c\u4e8c\u6b21\u66f2\u7ebf\u7684\u516c\u5f0f\uff08\u4e09\u4e2a\u70b9\u52a0\u4e24\u4e2a\u865a\u5706\u70b9\uff09\u3002\u865a\u5706\u70b9\u662f\u628a\u6b27\u6c0f\u51e0\u4f55\u4e2d\u7684\u4e24\u6b63\u4ea4\u65b9\u5411\u5408\u5e76\u5230\u4e00\u4e2a\u590d\u5171\u8f6d\u4e2d\uff0c\u5373 \\[\\mathbf{I}=(1,0,0)^{\\top} + i(0,1,0)^{\\top}\\] \u4e0e\u865a\u5706\u70b9\u5bf9\u5076\u7684\u4e8c\u6b21\u66f2\u7ebf \\[C_{\\infty}^* = \\mathbf{I}\\mathbf{J}^{\\top}+\\mathbf{J}\\mathbf{I}^{\\top}\\] \u7ed3\u8bba3 \u5bf9\u5076\u4e8c\u6b21\u66f2\u7ebf \\(C_{\\infty}^*\\) \u5728\u5c04\u5f71\u53d8\u6362 \\(H\\) \u4e0b\u4e0d\u53d8\u7684\u5145\u8981\u6761\u4ef6\u662f \\(H\\) \u76f8\u4f3c\u53d8\u6362\u3002 \u6b64\u5916\uff0c\u5728\u4efb\u4f55\u5c04\u5f71\u6846\u67b6\u4e0b\uff0c \\(C_{\\infty}^*\\) \u5177\u6709\u4e00\u4e9b\u6027\u8d28\uff1a \\(C_{\\infty}^*\\) \u6709 \\(4\\) \u4e2a\u81ea\u7531\u5ea6 \\(\\mathbf{I}_\\infty\\) \u662f \\(C_{\\infty}^*\\) \u7684\u96f6\u77e2\u91cf \u5c04\u5f71\u5e73\u9762\u4e0a\u7684\u5939\u89d2 \u00b6 \u2002\u2002\u5728\u6b27\u6c0f\u51e0\u4f55\u4e2d\uff0c\u4e24\u7ebf\u95f4\u7684\u5939\u89d2\u7531\u5b83\u4eec\u6cd5\u7ebf\u7684\u70b9\u4e58\u6765\u8ba1\u7b97\u3002\u76f4\u7ebf \\(\\mathbf{I}=(l_1, l_2, l_3)^{\\top}\\) \u548c \\(\\mathbf{m}=(m_1, m_2, m_3)^{\\top}\\) \u7684\u6cd5\u7ebf\u5206\u522b\u5e73\u884c\u4e8e \\((l_1, l_2)^{\\top}\\) \\((m_1, m_2)^{\\top}\\) \uff0c\u5176\u5939\u89d2\u4e3a \\[\\cos \\theta = \\frac{l_1m_1+l_2m_2}{\\sqrt{(l_1^2+l_2^2)(m_1^2+m_2^2)}}\\] \u5728\u5c04\u5f71\u53d8\u6362\u4e0b\u4e0d\u53d8\u7684\u516c\u5f0f\u4e3a: \\[\\cos \\theta = \\frac{\\mathbf{I}^{\\top}C_{\\infty}^*\\mathbf{m}}{\\sqrt{(\\mathbf{I}^{\\top}C_{\\infty}^*\\mathbf{I})(\\mathbf{m}^{\\top}C_{\\infty}^*\\mathbf{m})}}\\] \u5176\u4e2d \\(C_\\infty^*\\) \u662f\u4e0e\u865a\u5706\u70b9\u5bf9\u5076\u7684\u4e8c\u6b21\u66f2\u7ebf\u3002 \u7ed3\u8bba4 \u4e00\u65e6\u4e8c\u6b21\u66f2\u7ebf \\(C_\\infty^*\\) \u5728\u5c04\u5f71\u5e73\u9762\u4e0a\u88ab\u8fa8\u8ba4\uff0c\u90a3\u4e48\u6b27\u6c0f\u89d2\u53ef\u4ee5\u6d4b\u91cf\u3002 \u7ed3\u8bba5 \u5982\u679c \\(\\mathbf{I}^{\\top}C_{\\infty}^*\\mathbf{m}=\\mathbf{0}\\) \uff0c\u5219\u76f4\u7ebf \\(l\\) \u548c \\(m\\) \u6b63\u4ea4\u3002 \u7ed3\u8bba6 \u4e00\u65e6\u4e8c\u6b21\u66f2\u7ebf \\(C_\\infty^*\\) \u5728\u5c04\u5f71\u5e73\u9762\u4e0a\u88ab\u8fa8\u8ba4\uff0c\u957f\u5ea6\u6bd4\u540c\u6837\u53ef\u4ee5\u6d4b\u91cf\u3002 \u7531\u56fe\u50cf\u6062\u590d\u5ea6\u91cf\u6027\u8d28 \u00b6 \u2002\u2002\u628a\u865a\u5706\u70b9\u53d8\u6362\u5230\u5b83\u4eec\u7684\u6807\u51c6\u4f4d\u7f6e\uff0c\u5c31\u53ef\u4ee5\u7531\u5e73\u9762\u7684\u56fe\u50cf\u6062\u590d\u5ea6\u91cf\u6027\u8d28\u3002\u5bf9\u5076\u4e8c\u6b21\u66f2\u7ebf \\(C_\\infty^*\\) \u200b\u51e0\u4e4e\u5305\u542b\u4e86\u5b9e\u73b0\u5ea6\u91cf\u77eb\u6b63\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u5b83\u80fd\u786e\u5b9a\u5c04\u5f71\u53d8\u6362\u4e2d\u7684\u4eff\u5c04\u548c\u5c04\u5f71\u6210\u5206\uff0c\u800c\u53ea\u7559\u4e0b\u76f8\u4f3c\u53d8\u6362\u7684\u5931\u771f\u3002 \u7ed3\u8bba7 \u5728\u5c04\u5f71\u5e73\u9762\u4e0a\uff0c\u4e00\u65e6 \\(C_\\infty^*\\) \u88ab\u8fa8\u8ba4\uff0c\u90a3\u4e48\u5c04\u5f71\u5931\u771f\u53ef\u4ee5\u77eb\u6b63\u5230\u76f8\u5dee\u4e00\u4e2a\u76f8\u4f3c\u53d8\u6362\u3002 \u4e8c\u6b21\u66f2\u7ebf\u7684\u5176\u4ed6\u6027\u8d28 \u00b6 \u6781\u70b9-\u6781\u7ebf\u5173\u7cfb \u00b6 \u2002\u2002\u70b9 \\(\\mathbf{x}\\) \u548c\u4e8c\u6b21\u66f2\u7ebf \\(C\\) \u5b9a\u4e49\u4e00\u6761\u76f4\u7ebf \\(\\mathbf{l}=C\\mathbf{x}\\) \uff0c \\(\\mathbf{l}\\) \u79f0\u4e3a \\(\\mathbf{x}\\) \u5173\u4e8e \\(C\\) \u7684 \u6781\u7ebf \uff0c\u800c\u70b9 \\(\\mathbf{x}\\) \u79f0\u4e3a \\(\\mathbf{l}\\) \u5173\u4e8e \\(C\\) \u7684 \u6781\u70b9 \u3002 \u70b9 \\(\\mathbf{x}\\) \u5173\u4e8e\u4e8c\u6b21\u66f2\u7ebf \\(C\\) \u7684\u6781\u7ebf \\(\\mathbf{l}=C\\mathbf{x}\\) \u4ea4\u4e8e\u4e24\u70b9\u3002 \\(C\\) \u7684\u8fc7\u8fd9\u4e24\u70b9\u7684\u4e24\u6761\u5207\u7ebf\u76f8\u4ea4\u4e8e \\(\\mathbf{x}\\) \u3002 \u5982\u679c\u70b9 \\(x\\) \u5728 \\(C\\) \u4e0a\uff0c\u5219\u5b83\u7684\u6781\u7ebf\u5c31\u662f\u4e8c\u6b21\u66f2\u7ebf\u8fc7 \\(x\\) \u70b9\u7684\u5207\u7ebf\u3002 \u5bf9\u5c04 \u5b9a\u4e49 \uff1a\u5bf9\u5c04\u662f \\(IP^2\\) \u70b9\u5230 \\(IP^2\\) \u7ebf\u7684\u53ef\u9006\u6620\u5c04\u3002\u5e76\u7528\u4e00\u4e2a \\(3 \\times 3\\) \u975e\u5947\u5f02\u77e9\u9635 \\(A\\) \u8868\u793a\u4e3a \\(\\mathbf{l}=A\\mathbf{x}\\) \u3002 \u5171\u8f6d\u70b9 \uff1a\u5982\u679c\u70b9 \\(y\\) \u5728\u6781\u7ebf \\(\\mathbf{l}=C\\mathbf{x}\\) \u4e0a\uff0c\u5219 \\(\\mathbf{y}^{\\top}\\mathbf{l}=\\mathbf{y}^{\\top}C\\mathbf{x}=0\\) \u3002\u6ee1\u8db3 \\(\\mathbf{y}^{\\top}C\\mathbf{x}=0\\) \u7684\u4efb\u4f55\u4e24\u70b9 \\(x,y\\) \u79f0\u4e3a\u5173\u4e8e\u4e8c\u6b21\u66f2\u7ebf \\(C\\) \u5171\u8f6d\u3002 \u5982\u679c \\(\\mathbf{x}\\) \u5728 \\(\\mathbf{y}\\) \u7684\u6781\u7ebf\u4e0a\uff0c\u90a3\u4e48 \\(\\mathbf{y}\\) \u4e5f\u5728 \\(\\mathbf{x}\\) \u7684\u6781\u7ebf\u4e0a\u3002 \u4e8c\u6b21\u66f2\u7ebf\u7684\u5206\u7c7b \u00b6 \u4e8c\u6b21\u66f2\u7ebf\u7684\u5c04\u5f71\u6807\u51c6\u5f62\u5f0f \u00b6 \u2002\u2002\u4efb\u4f55\u4e8c\u6b21\u66f2\u7ebf\u90fd\u5c04\u5f71\u7b49\u4ef7\u4e8e\u4e00\u4e2a\u7531\u5bf9\u89d2\u77e9\u9635\u8868\u793a\u7684\u4e8c\u6b21\u66f2\u7ebf\u3002\u4e8c\u6b21\u66f2\u7ebf \\(D\\) \u6700\u7ec8\u88ab\u8868\u793a\u4e3a\u5177\u6709\u77e9\u9635 \\(diag(\\varepsilon_1, \\varepsilon_2, \\varepsilon_3)\\) \u7684\u4e8c\u6b21\u66f2\u7ebf\uff0c\u5176\u4e2d \\(\\varepsilon_i=\\pm 1\\) \u6216 \\(0\\) \u3002 \u5bf9\u89d2\u7ebf \u65b9\u7a0b \u4e8c\u6b21\u66f2\u7ebf\u7c7b\u578b \\((1,1,1)\\) \\(x^2+y^2+w^2=0\\) \u5047\u4e8c\u6b21\u66f2\u7ebf--\u65e0\u5b9e\u70b9 \\((1,1,-1)\\) \\(x^2+y^2-w^2=0\\) \u5706 \\((1,1,0)\\) \\(x^2+y^2=0\\) \u5355\u4e2a\u5b9e\u70b9 \\((0,0,1)^{\\top}\\) \\((1,-1,0)\\) \\(x^2-y^2=0\\) \u4e24\u6761\u76f4\u7ebf \\(x=\\pm y\\) \\((1,0,0)\\) \\(x^2=0\\) \u5355\u6761\u76f4\u7ebf \\(x=0\\) \u8ba1\u4e24\u6b21 \u4e8c\u6b21\u66f2\u7ebf\u7684\u4eff\u5c04\u5206\u7c7b \u00b6 \u2002\u2002\u5728\u6b27\u6c0f\u51e0\u4f55\u4e2d\uff0c(\u975e\u9000\u5316\u6216\u771f)\u4e8c\u6b21\u66f2\u7ebf\u53ef\u4ee5\u5206\u4e3a\u53cc\u66f2\u7ebf\u3001\u692d\u5706\u548c\u629b\u7269\u7ebf\u3002\u5728\u5c04\u5f71\u51e0\u4f55\u4e2d\u4e09\u79cd\u7c7b\u578b\u7684\u4e8c\u6b21\u66f2\u7ebf\u4e0e \\(l_\\infty\\) \u7684\u5173\u7cfb\u5982\u4e0b\u56fe\u6240\u793a\uff1a \u4e0a\u56fe\u4e2d\u4e8c\u6b21\u66f2\u7ebf\u662f \\((a)\\) \u692d\u5706\uff0c \\((b)\\) \u629b\u7269\u7ebf\uff0c \\((c)\\) \u53cc\u66f2\u7ebf\u3002\u5b83\u4eec\u4e0e \\(l_{\\infty}\\) \u7684\u5173\u7cfb : \\((a)\\) \u65e0\u5b9e\u4ea4\u70b9\u3001 \\((b)\\) \u76f8\u5207( \\(2\\) \u70b9\u63a5\u89e6)\u3001 \\((c)\\) \u6709 \\(2\\) \u4e2a\u5b9e\u4ea4\u70b9\u3002 \u4e0d\u52a8\u70b9\u4e0e\u76f4\u7ebf \u00b6 \u2002\u2002\u53d8\u6362\u7684\u4e00\u4e2a \u7279\u5f81\u77e2\u91cf \u5bf9\u5e94\u4e00\u4e2a \u4e0d\u52a8\u70b9 \uff0c\u56e0\u4e3a\u5bf9\u4e8e\u7279\u5f81\u503c \\(\\lambda\\) \u53ca\u5176\u5bf9\u5e94\u7684\u7279\u5f81\u77e2\u91cf \\(e\\) \u6709: \\[H\\mathbf{e} = \\lambda \\mathbf{e}\\] \u2002\u2002\u800c \\(\\mathbf{e}\\) \u548c \\(\\lambda \\mathbf{e}\\) \u8868\u793a\u540c\u4e00\u70b9\u3002\u7c7b\u4f3c\u7684\u63a8\u5bfc\u53ef\u4ee5\u7528\u4e8e\u4e0d\u52a8\u76f4\u7ebf\uff0c\u5b83\u5bf9\u5e94\u4e8e \\(H^{\\top}\\) \u7684\u7279\u5f81\u77e2\u91cf\u3002 \u5e73\u9762\u5c04\u5f71\u53d8\u6362\u7684\u4e0d\u52a8\u70b9\u4e0e\u76f4\u7ebf \u8fd9\u91cc\u6709\u4e09\u4e2a\u4e0d\u52a8\u70b9\u548c\u8fc7\u8fd9\u4e09\u70b9\u7684\u4e0d\u52a8\u76f4\u7ebf.\u4e0d\u52a8\u76f4\u7ebf\u548c\u4e0d\u52a8\u70b9\u53ef\u80fd\u662f\u590d\u7684\uff1a\u4ece\u4ee3\u6570\u7684\u89d2\u5ea6\u6765\u8bf4\uff0c\u4e0d\u52a8\u70b9\u662f\u70b9\u53d8\u6362 \\((\\mathbf{x}^\\prime=H\\mathbf{x})\\) \u7684\u7279\u5f81\u77e2\u91cf \\(\\mathbf{e}_i\\) \uff0c\u800c\u4e0d\u52a8\u76f4\u7ebf\u662f\u7ebf\u53d8\u6362 \\((\\mathbf{l}^\\prime =H^{-T}\\mathbf{l})\\) \u7684\u7279\u5f81\u77e2\u91cf\u3002\u6ce8\u610f\uff0c\u4e0d\u52a8\u76f4\u7ebf\u4e0d\u662f\u70b9\u70b9\u4e0d\u52a8\uff1a\u5728\u53d8\u6362\u4e0b\uff0c\u76f4\u7ebf\u4e0a\u7684\u4e00\u70b9\u88ab\u6620\u4e3a\u5176\u4e0a\u7684\u53e6\u4e00\u70b9\uff0c\u53ea\u6709\u4e0d\u52a8\u70b9\u624d\u6620\u4e3a\u81ea\u8eab\u3002 \u6b27\u6c0f\u77e9\u9635 \u00b6 \u2002\u2002\u4e24\u4e2a\u4e0d\u52a8\u7406\u60f3\u70b9\u662f\u865a\u5706\u70b9 \\(\\mathbf{I},\\mathbf{J}\\) \u7ec4\u6210\u7684\u590d\u5171\u8f6d\u5bf9\uff0c\u76f8\u5bf9\u5e94\u7684\u7279\u5f81\u503c\u662f \\(|e^{i \\theta}, e^{-i \\theta}|\\) \uff0c\u8fd9\u91cc \\(\\theta\\) \u662f\u65cb\u8f6c\u89d2\u3002\u5bf9\u5e94\u4e8e\u7279\u5f81\u503c \\(1\\) \u7684\u7b2c\u4e09\u4e2a\u7279\u5f81\u5411\u91cf\uff0c\u79f0\u4e3a \\(\u6781\u70b9\\) \u3002\u6b27\u6c0f\u53d8\u6362\u7b49\u4ef7\u4e8e\u7ed5\u8be5\u70b9\u8f6c \\(\\theta\\) \u89d2\u7684\u7eaf\u65cb\u8f6c\u5e76\u4e14\u6ca1\u6709\u5e73\u79fb\u3002 \u4e00\u79cd\u7279\u6b8a\u7684\u60c5\u8bc6\u662f\u7eaf\u5e73\u79fb(\u5373 \\(\\theta=0\\) )\u3002\u8fd9\u65f6\u7279\u5f81\u503c\u4e09\u91cd\u9000\u5316\uff0c\u8fd9\u662f\u7ea6\u675f\u900f\u89c6\u53d8\u6362\u7684\u4e00\u4e2a\u4f8b\u5b50\u3002 \u76f8\u4f3c\u77e9\u9635 \u00b6 \u2002\u2002\u4e24\u4e2a\u4e0d\u52a8\u7406\u60f3\u70b9\u4ecd\u662f\u865a\u5706\u70b9\u3002\u7279\u5f81\u503c\u662f \\(|1,se^{i \\theta}, se^{-i \\theta}|\\) \u3002\u76f8\u4f3c\u53d8\u6362\u7684\u4f5c\u7528\u53ef\u4ee5\u7406\u89e3\u4e3a\u7ed5\u5b83\u7684\u6709\u9650\u4e0d\u52a8\u70b9\u7684\u65cb\u8f6c\u548c\u53d6 \\(s\\) \u4e3a\u56e0\u5b50\u7684\u5747\u5300\u7f29\u653e\u3002\u6ce8\u610f\u865a\u5706\u70b9\u7684\u7279\u5f81\u503c\u4ecd\u7136\u8868\u5f81\u65cb\u8f6c\u89d2\u3002 \u4eff\u5c04\u77e9\u9635 \u00b6 \u2002\u2002\u4e24\u4e2a\u4e0d\u52a8\u7406\u60f3\u70b9\u53ef\u4ee5\u662f\u5b9e\u6216\u590d\u5171\u8f6d\u7684\uff0c\u4f46\u5728\u4efb\u4f55\u4e00\u79cd\u60c5\u51b5\u4e0b\uff0c\u8fc7\u8fd9\u4e9b\u70b9\u7684\u4e0d\u52a8\u76f4\u7ebf \\(\\mathbf{l}_\\infty=(0,0,1)^{\\top}\\) \u662f\u5b9e\u7684\u3002","title":"2D \u5c04\u5f71\u51e0\u4f55\u548c\u53d8\u6362"},{"location":"cv/mvg/pjt2d/#2d","text":"\u7ea6 4639 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 15 \u5206\u949f Abstract \u672c\u7ae0\u4e3b\u8981\u4ecb\u7ecdMVG\u6240\u5fc5\u987b\u7684\u51e0\u4f55\u6982\u5ff5\u548c\u7b26\u53f7\uff0c\u5177\u4f53\u6db5\u76d6\u5e73\u9762\u7684\u5c04\u5f71\u53d8\u6362\u51e0\u4f55","title":"2D \u5c04\u5f71\u51e0\u4f55\u548c\u53d8\u6362"},{"location":"cv/mvg/pjt2d/#_1","text":"","title":"\u5e73\u9762\u51e0\u4f55"},{"location":"cv/mvg/pjt2d/#2d_1","text":"","title":"2D \u5c04\u5f71\u5e73\u9762"},{"location":"cv/mvg/pjt2d/#_2","text":"\u76f4\u7ebf\u7684\u5176\u6b21\u8868\u793a \u5e73\u9762\u4e0a\u7684\u4e00\u6761\u76f4\u7ebf\u7684\u65b9\u7a0b \\(ax+by+c=0\\) \u53ef\u4ee5\u7528\u77e2\u91cf \\((a,b,c)^{\\top}\\) \u8868\u793a\u3002 \u5bf9\u4efb\u4f55\u975e\u96f6\u7684k\u77e2\u91cf \\((a,b,c)^{\\top}\\) \u4e0e \\(k(a,b,c)^{\\top}\\) \u8868\u793a\u540c\u4e00\u76f4\u7ebf \u3002 \u70b9\u7684\u5176\u6b21\u8868\u793a \u4e00\u4e2a\u70b9\u7684\u4efb\u4f55\u9f50\u6b21\u77e2\u91cf\u7684\u8868\u793a\u5f62\u5f0f\u4e3a \\(x=(x_1,x_2,x_3)^{\\top}\\) \uff0c\u975e\u9f50\u6b21\u5750\u6807 \\(x=(\\frac{x_1}{x_3}, \\frac{x_2}{x_3})^{\\top}\\) \u3002 \u7ed3\u8bba1 \u70b9 \\(x\\) \u5728\u76f4\u7ebf \\(l\\) \u7684\u5145\u8981\u6761\u4ef6\u662f \\(x^{\\top}l=0\\) \u3002 \\(x^{\\top}l = l^{\\top}x = x \\cdot l = 0\\) \u3002 \u7ed3\u8bba2 \u4e24\u76f4\u7ebf \\(l\\) \u548c \\(l^{\\prime}\\) \u7684\u4ea4\u70b9\u662f\u70b9 \\(x=l \\times l^{\\prime}\\) \u3002 \u53c9\u4e58 \\[c = a \\times b = (a.y * b.z - b.y * a.z, \\quad b.x * a.z - a.x * b.z, \\quad a.x * b.y - b.x * a.y)\\] \u7ed3\u8bba3 \u8fc7\u4e24\u70b9 \\(x\\) \u548c \\(x^{\\prime}\\) \u7684\u76f4\u7ebf\u662f \\(l = x \\times x^{\\prime}\\) \u3002 \u5e73\u884c\u7ebf\u7684\u4ea4\u70b9 \u4e24\u5e73\u884c\u76f4\u7ebf \\(ax+by+c=0\\) \u548c \\(ax+by+c^{\\prime}=0\\) \uff0c\u7531 \u7ed3\u8bba2 \u53ef\u5f97\u4ea4\u70b9 \\((b, -a, 0)^{\\top}\\) \u3002 \u7406\u60f3\u70b9\u548c\u65e0\u7a77\u8fdc\u7ebf \u5f53\u9f50\u6b21\u77e2\u91cf \\(x = (x_1, x_2, x_3)^{\\top}\\) \u4e2d\u7684 \\(x_3=0\\) \u65f6\u7684\u70b9\u88ab\u79f0\u4e3a \u7406\u60f3\u70b9 \uff0c\u6216 \u65e0\u7a77\u8fdc\u70b9 \u3002\u6240\u6709\u7406\u60f3\u70b9\u96c6\u5408\u5728\u4e00\u6761\u76f4\u7ebf\u4e0a\uff0c\u79f0 \u65e0\u7a77\u8fdc\u7ebf \uff0c\u7528 \\(I_{\\infty}=(0,0,1)^{\\top}\\) \u8868\u793a\u3002 \u5c04\u5f71\u5e73\u9762\u6a21\u578b \\(IP^2\\) \u7684\u70b9\u548c\u7ebf\u5206\u522b\u4e3a\u4e2d\u8fc7\u539f\u70b9\u7684\u5c04\u7ebf\u548c\u5e73\u9762 \\(x_1x_2\\) \u5e73\u9762\u4e0a\u7684\u5c04\u7ebf\u8868\u793a\u7406\u60f3\u70b9\uff0c\u800c \\(x_1x_2\\) \u5e73\u9762\u8868\u793a \\(I_{\\infty}\\) \u3002 \u7ed3\u8bba4\uff08\u5bf9\u5076\u539f\u7406\uff09 2\u7ef4\u5c04\u5f71\u51e0\u4f55\u4e2d\u7684\u4efb\u4f55\u5b9a\u7406\u90fd\u6709\u4e00\u4e2a\u5bf9\u5e94\u7684\u5bf9\u5076\u5b9a\u7406\uff0c\u5b83\u53ef\u4ee5\u901a\u8fc7\u4e92\u6362\u539f\u5b9a\u7406\u4e2d\u70b9\u548c\u7ebf\u7684\u4f5c\u7528\u800c\u5bfc\u51fa\u3002","title":"\u70b9\u4e0e\u76f4\u7ebf"},{"location":"cv/mvg/pjt2d/#_3","text":"\u4e8c\u6b21\u66f2\u7ebf \u5728\u6b27\u6c0f\u51e0\u4f55\u4e2d\uff0c\u4e8c\u6b21\u66f2\u7ebf\u6709\u4e09\u79cd\u4e3b\u8981\u7c7b\u578b: \u53cc\u66f2\u7ebf\uff0c\u692d\u5706\u548c\u629b\u7269\u7ebf\u3002 \u5728\u975e\u9f50\u6b21\u5750\u6807\u4e2d\uff0c\u4e8c\u6b21\u66f2\u7ebf\u7684\u65b9\u7a0b\u662f \\[ax^2+bxy+cy^2+dx+ey+f=0\\] \u901a\u8fc7\u66ff\u4ee3 \\(x\\to\\frac{x_1}{x_3}\\) \uff0c \\(y\\to\\frac{x_2}{x_3}\\) \uff0c\u5f97\u5230\uff1a \\[ax_1^2+bx_1x_2+cx_2^2+dx_1x_3+ex_2x_3+fx_3^2=0\\] \u8868\u793a\u6210\u77e9\u9635\u5f62\u5f0f\u4e3a \\(x^{\\top}Cx=0\\) \u5176\u4e2d\u4e8c\u6b21\u66f2\u7ebf\u7cfb\u6570\u77e9\u9635 \\(C\\) \u4e3a \\[ C = \\left[ \\begin{matrix} a & b/2 & d/2 \\\\ b/2 & c & e/2 \\\\ d/2 & e/2 & f \\end{matrix} \\right] \\] \u7ed3\u8bba5 \u8fc7(\u975e\u9000\u5316)\u4e8c\u6b21\u66f2\u7ebf \\(C\\) \u4e0a\u70b9 \\(x\\) \u7684\u5207\u7ebf \\(l\\) \u7531 \\(l=Cx\\) \u786e\u5b9a\u3002 \u5bf9\u5076\u4e8c\u6b21\u66f2\u7ebf \u4e0a\u9762\u5b9a\u4e49\u7684\u4e8c\u6b21\u66f2\u7ebf \\(C\\) \u66f4\u786e\u5207\u5730\u5e94\u79f0\u4e3a\u70b9\u4e8c\u6b21\u66f2\u7ebf\uff0c\u56e0\u4e3a\u5b83\u5b9a\u4e49\u7684\u662f\u70b9\u7684\u65b9\u7a0b\u3002\u540c\u65f6\u8fd9\u79cd \u5bf9\u5076 \uff08\u6216\u7ebf\uff09\u4e8c\u6b21\u66f2\u7ebf\u4e5f\u7531\u4e00\u4e2a \\(3 \\times 3\\) \u77e9\u9635\u8868\u793a\uff0c\u6211\u4eec\u628a\u5b83\u8bb0\u4e3a \\(C^*\\) \uff0c\u4e8c\u6b21\u66f2\u7ebf \\(C\\) \u7684\u5207\u7ebf \\(l\\) \u6ee1\u8db3 \\(l^{\\top}C^*l=0\\) \u3002\u5176\u4e2d \\(C^*\\) \u8868\u793a\u4e3a \\(C\\) \u7684\u4f34\u968f\u77e9\u9635\u3002 \u9000\u5316\u4e8c\u6b21\u66f2\u7ebf \u975e\u6ee1\u79e9\u77e9\u9635 \\(C\\) \u6240\u5b9a\u4e49\u7684\u4e8c\u6b21\u66f2\u7ebf\u79f0\u4f5c\u9000\u5316\u4e8c\u6b21\u66f2\u7ebf\u3002\u9000\u5316\u7684\u70b9\u4e8c\u6b21\u66f2\u7ebf\u5305\u542b\u4e24\u6761\u7ebf(\u79e9 2) \u6216\u4e00\u6761\u91cd\u7ebf(\u79e9 1) \u3002","title":"\u4e8c\u6b21\u66f2\u7ebf\u4e0e\u5bf9\u5076\u4e8c\u6b21\u66f2\u7ebf"},{"location":"cv/mvg/pjt2d/#_4","text":"\u5c04\u5f71\u6620\u5c04 \u5c04\u5f71\u6620\u5c04 \u662f \\(IP^2\\) \u5230\u5b83\u81ea\u8eab\u7684\u4e00\u79cd\u6ee1\u8db3\u4e0b\u5217\u6761\u4ef6\u7684\u53ef\u9006\u6620\u5c04 \\(h\\) \uff1a\u4e09\u70b9 \\(x_1\\) , \\(x_2\\) \u548c \\(x_3\\) \u5171\u7ebf\u5f53\u4e14\u4ec5\u5f53 \\(h(x_1)\\) , \\(h(x_2)\\) , \\(h(x_3)\\) \u4e5f\u5171\u7ebf\u3002 \u5c04\u5f71\u6620\u5c04\u4e5f\u79f0\u4e3a\u4fdd\u7ebf\u53d8\u6362 \uff0c\u6216\u5c04\u5f71\u53d8\u6362\u6216\u5355\u5e94 (homography) \u3002 \u5b9a\u74061 \u6620\u5c04 \\(h\\) \uff1a \\(IP^2 \\to IP^2\\) \u662f\u5c04\u5f71\u6620\u5c04\u7684\u5145\u8981\u6761\u4ef6\u662f\u5b58\u5728\u4e00\u4e2a \\(3 \\times 3\\) \u975e\u5947\u5f02\u77e9\u9635 \\(H\\) \uff0c\u4f7f\u5f97 \\(IP^2\\) \u7684\u4efb\u4f55\u4e00\u4e2a\u7528\u77e2\u91cf \\(x\\) \u8868\u793a\u7684\u70b9\u90fd\u6ee1\u8db3 \\(h(x)=Hx\\) \u3002 \u5c04\u5f71\u53d8\u6362 \u5e73\u9762\u5c04\u5f71\u53d8\u6362\u662f\u5173\u4e8e\u9f50\u6b213\u7ef4\u77e2\u91cf\u7684\u4e00\u79cd\u7ebf\u6027\u53d8\u6362\uff0c\u5e76\u53ef\u7528\u4e00\u4e2a\u975e\u5947\u5f02 \\(3 \\times 3\\) \u77e9\u9635 \\(H\\) \u8868\u793a\u4e3a\uff1a \\[ \\begin{pmatrix} x_1^\\prime \\\\ x_2^\\prime\\\\ x_3^\\prime \\end{pmatrix} = \\left[ \\begin{matrix} h_{11} & h_{12} & h_{13} \\\\ h_{21} & h_{22} & h_{23} \\\\ h_{31} & h_{32} & h_{33} \\end{matrix} \\right] \\begin{pmatrix} x_1 \\\\ x_2\\\\ x_3 \\end{pmatrix} \\] \u6216\u66f4\u7b80\u6d01\u5730\u8868\u793a\u4e3a \\(x^\\prime = Hx\\) \u3002","title":"\u5c04\u5f71\u53d8\u6362"},{"location":"cv/mvg/pjt2d/#_5","text":"\u76f4\u7ebf\u7684\u53d8\u6362 \\[l^\\prime = H^{-T}l\\] \u4e5f\u53ef\u4ee5\u5199\u6210 \\(l^{\\prime T}=l^{\\top}H^{-1}\\) \u3002\u76f4\u7ebf\u548c\u70b9\u53d8\u6362\u7684\u57fa\u672c\u533a\u522b\u5728\u4e8e\u70b9\u53d8\u6362\u4f9d\u636e \\(H\\) \uff0c\u800c\u76f4\u7ebf\uff08\u89c6\u4e3a\u884c\u77e2\u91cf\uff09\u53d8\u6362\u5219\u4f9d\u636e \\(H^{-1}\\) \u3002\u79f0\u70b9\u53d8\u6362\u4e3a \u9006\u53d8 \u800c\u7ebf\u53d8\u6362\u4e3a \u534f\u53d8 \u3002 \u4e8c\u6b21\u66f2\u7ebf\u7684\u53d8\u6362 \u5728\u70b9\u53d8\u6362 \\(x^\\prime = Hx\\) \u4e0b\uff0c \\(x^{\\top}Cx = x^{\\prime T}[H^{-1}]^{\\top}CH^{-1}x^\\prime = x^{\\prime T} H^{-T}CH^{-1} x^{\\prime}\\) \u3002 \u7ed3\u8bba1 \u5728\u70b9\u53d8\u6362 \\(x^\\prime = Hx\\) \u4e0b\uff0c\u4e8c\u6b21\u66f2\u7ebf \\(C\\) \u53d8\u6362\u4e3a \\(C^\\prime = H^{-T}CH^{-1}\\) \u3002\uff08\u56e0\u4e3a\u5b58\u5728 \\(H^{-1}\\) \uff0c\u6240\u4ee5\u79f0\u4e8c\u6b21\u66f2\u7ebf\u53d8\u6362\u4e3a \u534f\u53d8 \uff09 \u8bc1\u660e \\[ x^{\\top}Cx = (H^{-1}x^\\prime)^{\\top} C (H^{-1}x^\\prime) = x^{\\prime T} (H^{-T}CH^{-1}) x^\\prime \\] \u7ed3\u8bba2 \u5728\u70b9\u53d8\u6362 \\(x^\\prime = Hx\\) \u4e0b\uff0c\u5bf9\u5076\u4e8c\u6b21\u66f2\u7ebf \\(C^*\\) \u53d8\u6362\u4e3a \\(C^{*\\prime} = HC^* H^{\\top}\\) \u3002 \u8bc1\u660e \\[ l^{\\top}C^*l = (H^{\\top}l)^{\\top}C^*(H^{\\top}l)=l^{\\top}HC^*H^{\\top}l \\]","title":"\u76f4\u7ebf\u548c\u4e8c\u6b21\u66f2\u7ebf\u7684\u53d8\u6362"},{"location":"cv/mvg/pjt2d/#_6","text":"\u7531 \\(n \\times n\\) \u53ef\u9006\u5b9e\u77e9\u9635\u7684\u7fa4\u79f0\u4e3a\uff08\u5b9e\u7684\uff09\u4e00\u822c\u7ebf\u6027\u7fa4\u6216 \\(GL(n)\\) \u3002\u5f53\uff0c \u628a\u76f8\u5dee\u975e\u96f6\u7eaf\u9760\u56e0\u5b50\u7684\u77e9\u9635\u90fd\u89c6\u4e3a\u7b49\u540c\u65f6\uff0c\u4fbf\u5f97\u5230\u5c04\u5f71\u7ebf\u6027\u7fa4\uff0c\u8bb0\u4e3a \\(PL(n)\\) (\u5b83\u662f \\(GL(n)\\) \u7684\u5546\u7fa4)\u3002\u5728\u5e73\u9762\u5c04\u5f71\u53d8\u6362\u65f6\uff0c \\(n=3\\) \u3002","title":"\u53d8\u6362\u7684\u5c42\u6b21"},{"location":"cv/mvg/pjt2d/#_7","text":"\u7b49\u8ddd(isometric)\u53d8\u6362\u662f\u5e73\u9762 \\(IR^2\\) \u7684\u53d8\u6362\uff0c\u4fdd\u6301\u6b27\u5f0f\u8ddd\u79bb\u4e0d\u53d8\uff0c\u4e00\u4e2a\u7b49\u8ddd\u53d8\u6362\u53ef\u8868\u793a\u4e3a \\[ \\begin{pmatrix} x^\\prime \\\\ y^\\prime\\\\ 1 \\end{pmatrix} = \\left[ \\begin{matrix} \\varepsilon \\cos \\theta & -\\sin \\theta & t_x \\\\ \\varepsilon \\sin \\theta & \\cos \\theta & t_y \\\\ 0& 0 & 1 \\end{matrix} \\right] \\begin{pmatrix} x \\\\ y\\\\ 1 \\end{pmatrix} \\] \u5176\u4e2d \\(\\varepsilon = \\pm 1\\) \u3002\u5982\u679c \\(\\varepsilon = 1\\) \u90a3\u4e48\u8be5\u7b49\u8ddd\u53d8\u6362\u662f \u4fdd\u5411\u7684 \u5e76\u4e14\u4e5f\u662f \u6b27\u6c0f \u53d8\u6362\uff08\u5e73\u79fb\u548c\u65cb\u8f6c\u7684\u590d\u5408\uff09\u3002\u5982\u679c \\(\\varepsilon = -1\\) \uff0c\u90a3\u4e48\u8be5\u7b49\u8ddd\u53d8\u6362\u662f \u9006\u5411\u7684 \u3002 \u2002\u2002\u5e73\u9762\u6b27\u6c0f\u53d8\u6362\u53ef\u4ee5\u7528\u66f4\u7b80\u6d01\u7684\u5206\u5757\u5f62\u5f0f\u5199\u4e3a \\[ \\mathbf{x}^\\prime = H_E \\mathbf{x} = \\left[ \\begin{matrix} R & \\mathbf{t} \\\\ \\mathbf{0}^{\\top} & 1 \\\\ \\end{matrix} \\right] \\mathbf{x} \\] \u2002\u2002\u5e73\u9762\u6b27\u6c0f\u53d8\u6362\u6709\u4e09\u4e2a\u81ea\u7531\u5ea6\uff0c\u65cb\u8f6c\u4e00\u4e2a\uff0c\u5e73\u79fb\u4e8c\u4e2a\u3002 \u4e0d\u53d8\u91cf \uff1a\u957f\u5ea6(\u4e24\u70b9\u7684\u8ddd\u79bb)\uff0c\u89d2\u5ea6(\u4e24\u7ebf\u7684\u5939\u89d2)\u548c\u9762\u804c\u3002 \u7fa4\u548c\u5b9a\u5411 \u2003\u4fdd\u5411\u7684\u7b49\u8ddd\u53d8\u6362\u5f62\u6210\u4e00\u4e2a\u7fa4\uff0c\u4f46\u9006\u5411\u7684\u4e0d\u662f\u3002\u8fd9\u79cd\u533a\u522b\u5bf9\u4e8e\u4e0b\u9762\u7684\u76f8\u4f3c\u548c\u4eff\u5c04\u53d8\u6362\u540c\u6837\u5982\u6b64\u3002","title":"\u7b49\u8ddd\u53d8\u6362"},{"location":"cv/mvg/pjt2d/#_8","text":"\u76f8\u4f3c\u53d8\u6362\u662f\u4e00\u4e2a\u7b49\u8ddd\u53d8\u6362\u4e0e\u4e00\u4e2a\u5747\u5300\u7f29\u653e\u7684\u590d\u5408\u3002\u77e9\u9635\u8868\u793a\u4e3a\uff1a \\[ \\begin{pmatrix} x^\\prime \\\\ y^\\prime\\\\ 1 \\end{pmatrix} = \\left[ \\begin{matrix} s\\cos \\theta & -s\\sin \\theta & t_x \\\\ s\\sin \\theta & s\\cos \\theta & t_y \\\\ 0& 0 & 1 \\end{matrix} \\right] \\begin{pmatrix} x \\\\ y\\\\ 1 \\end{pmatrix} \\] \u53ef\u4ee5\u7528\u66f4\u7b80\u6d01\u7684\u5206\u5757\u5f62\u5f0f\u5199\u4e3a \\[ \\mathbf{x}^\\prime = H_S \\mathbf{x} = \\left[ \\begin{matrix} sR & \\mathbf{t} \\\\ \\mathbf{0}^{\\top} & 1 \\\\ \\end{matrix} \\right] \\mathbf{x} \\] \u4e0d\u53d8\u91cf \uff1a\u76f4\u7ebf\u7684\u5939\u89d2\uff0c\u4e24\u957f\u5ea6\u7684\u6bd4\u7387\u548c\u9762\u79ef\u7684\u6bd4\u7387\u3002","title":"\u76f8\u4f3c\u53d8\u6362"},{"location":"cv/mvg/pjt2d/#_9","text":"\u4eff\u5c04\u53d8\u6362\u662f\u4e00\u4e2a\u975e\u5947\u5f02\u7ebf\u6027\u53d8\u6362\u4e0e\u4e00\u4e2a\u5e73\u79fb\u53d8\u6362\u7684\u590d\u5408\uff0c\u5b83\u7684\u77e9\u9635\u8868\u793a\u4e3a\uff1a \\[ \\begin{pmatrix} x^\\prime \\\\ y^\\prime\\\\ 1 \\end{pmatrix} = \\left[ \\begin{matrix} a_{11} & a_{12} & t_x \\\\ a_{21} & a_{22} & t_y \\\\ 0 & 0 & 1 \\end{matrix} \\right] \\begin{pmatrix} x \\\\ y \\\\ 1 \\end{pmatrix} \\] \u53ef\u4ee5\u7528\u66f4\u7b80\u6d01\u7684\u5206\u5757\u5f62\u5f0f\u5199\u4e3a \\[ \\mathbf{x}^\\prime = H_A \\mathbf{x} = \\left[ \\begin{matrix} A & \\mathbf{t} \\\\ \\mathbf{0}^{\\top} & 1 \\\\ \\end{matrix} \\right] \\mathbf{x} \\] \u2002\u2002\u5e73\u9762\u4eff\u5c04\u53d8\u6362\u6709\u516d\u81ea\u7531\u5ea6\uff0c\u53ef\u4ee5\u7531\u4e09\u7ec4\u70b9\u5bf9\u5e94\u6765\u8ba1\u7b97\u3002 \u4e0d\u53d8\u91cf \uff1a\u5e73\u884c\u7ebf\uff0c\u5e73\u884c\u7ebf\u6bb5\u7684\u957f\u5ea6\u6bd4\u548c\u9762\u79ef\u6bd4\u3002","title":"\u4eff\u5c04\u53d8\u6362"},{"location":"cv/mvg/pjt2d/#_10","text":"\u5b83\u662f\u9f50\u6b21\u5750\u6807\u7684\u4e00\u822c\u975e\u5947\u5f02\u7ebf\u6027\u53d8\u6362\uff0c\u5176\u5206\u5757\u5f62\u5f0f\uff1a \\[ \\mathbf{x}^\\prime = H_P \\mathbf{x} = \\left[ \\begin{matrix} A & \\mathbf{t} \\\\ \\mathbf{v}^{\\top} & v \\\\ \\end{matrix} \\right] \\mathbf{x} \\] \u5176\u4e2d \\(\\mathbf{v}=(v_1, v_2)^{\\top}\\) \u3002 \u2002\u2002\u5c04\u5f71\u53d8\u6362\u7531\u516b\u4e2a\u53c2\u6570\u786e\u5b9a\uff0c\u53ef\u7531\u56db\u7ec4\u70b9\u5bf9\u5e94\u7b97\u51fa\uff0c \u4f46\u5176\u4e2d\u5c5e\u4e8e\u5411\u4e00\u5e73\u9762\u7684\u4e09\u70b9\u5fc5\u4e0d\u5171\u7ebf\u3002 \u4e0d\u53d8\u91cf \uff1a\u6700\u57fa\u672c\u7684\u5c04\u5f71\u4e0d\u53d8\u91cf\u662f\u56db\u5171\u7ebf\u70b9\u7684\u4ea4\u6bd4\u3002","title":"\u5c04\u5f71\u53d8\u6362"},{"location":"cv/mvg/pjt2d/#_11","text":"\u5c04\u5f71\u53d8\u6362\u53ef\u4ee5\u5206\u89e3\u4e3a\u4e00\u4e32\u53d8\u6362\u94fe\u7684\u590d\u5408\uff0c\u94fe\u4e2d\u7684\u6bcf\u4e2a\u77e9\u9635\u6bd4\u5b83\u524d\u9762\u7684\u4e00\u4e2a\u77e9\u9635\u6240\u8868\u793a\u7684\u53d8\u6362\u5c42\u6b21\u9ad8\u3002 \\[ H = H_SH_AH_P = \\left[ \\begin{matrix} sR & \\mathbf{t}/v \\\\ \\mathbf{0}^{\\top} & 1 \\\\ \\end{matrix} \\right] \\left[ \\begin{matrix} K & \\mathbf{0} \\\\ \\mathbf{0}^{\\top} & 1 \\\\ \\end{matrix} \\right] \\left[ \\begin{matrix} \\mathbf{I} & \\mathbf{0} \\\\ \\mathbf{v}^{\\top} & v \\\\ \\end{matrix} \\right] = \\left[ \\begin{matrix} A & \\mathbf{t} \\\\ \\mathbf{v}^{\\top} & v \\\\ \\end{matrix} \\right] \\] \u5176\u4e2d \\(A=sRK+\\mathbf{tv}^{\\top}/v\\) \uff0c\u800c \\(K\\) \u662f\u6ee1\u8db3 \\(det\\ K=1\\) \u7684\u5f52\u4e00\u5316\u4e0a\u4e09\u89d2\u77e9\u9635\u3002\u5982\u679c \\(v \\ne 0\\) \u4e0a\u8ff0\u5206\u89e3\u662f\u6709\u6548\u7684\uff0c\u800c\u4e14\u5982\u679c \\(s\\) \u53d6\u6b63\u503c\uff0c\u5b83\u8fd8\u662f\u552f\u4e00\u7684\u3002 \u4e0d\u53d8\u91cf\u7684\u6570\u76ee \uff1a\u4e0e\u51fd\u6570\u65e0\u5173\u7684\u4e0d\u53d8\u91cf\u6570\u7b49\u4e8e\u6216\u5927\u4e8e\u914d\u7f6e\u7684\u81ea\u7531\u5ea6\u6570\u51cf\u53bb\u53d8\u6362\u7684\u81ea\u7531\u5ea6\u6570\u3002","title":"\u5c04\u5f71\u53d8\u6362\u7684\u5206\u89e3"},{"location":"cv/mvg/pjt2d/#1d","text":"\u76f4\u7ebf\u4e0a\u7684\u70b9 \\(x\\) \u7528\u9f50\u6b21\u5750\u6807\u8868\u793a\u4e3a \\((x_1, x_2)^{\\top}\\) \uff0c\u800c \\((x_1, 0)^{\\top}\\) \u662f\u8be5\u76f4\u7ebf\u7684\u7406\u60f3\u70b9\u3002\u6211\u4eec\u5c06\u7528\u8bb0\u53f7 \\(\\mathbf{\\bar{x}}\\) \u8868\u793a \\(2\\) \u7ef4\u77e2\u91cf \\((x_1, x_2)^{\\top}\\) \u3002\u53ef\u7528\u9f50\u6b21\u77e9\u9635\u8868\u793a\uff1a \\[\\mathbf{\\bar{x}}^\\prime = H_{2 \\times 2} \\mathbf{\\bar{x}}\\]","title":"1D \u5c04\u5f71\u51e0\u4f55\u548c\u4ea4\u6bd4"},{"location":"cv/mvg/pjt2d/#_12","text":"\u4ea4\u6bd4\u662f \\(IP^1\\) \u7684\u57fa\u672c\u5c04\u5f71\u4e0d\u53d8\u91cf\u3002\u7ed9\u5b9a \\(4\\) \u4e2a\u70b9 \\(\\mathbf{\\bar{x}_i}\\) \uff0c\u4ea4\u6bd4\u5b9a\u4e49\u4e3a \\[ Cross(\\mathbf{\\bar{x}_1},\\mathbf{\\bar{x}_2},\\mathbf{\\bar{x}_3},\\mathbf{\\bar{x}_4}) = \\frac{|\\mathbf{\\bar{x}_1}\\mathbf{\\bar{x}_2}||\\mathbf{\\bar{x}_3}\\mathbf{\\bar{x}_4}|}{|\\mathbf{\\bar{x}_1}\\mathbf{\\bar{x}_3}||\\mathbf{\\bar{x}_2}\\mathbf{\\bar{x}_4}|} \\] \u5176\u4e2d \\[ |\\mathbf{\\bar{x}_i}\\mathbf{\\bar{x}_j}| =det \\begin{bmatrix} x_{i1} & x_{j1} \\\\ x_{i2} & x_{j2} \\end{bmatrix} \\] \u4ea4\u6bd4\u7684\u4e3b\u8981\u7279\u70b9 \u4ea4\u6bd4\u7684\u503c\u4e0e\u5404\u70b9 \\(\\mathbf{\\bar{x}_i}\\) \u6240\u7528\u7684\u5177\u4f53\u7684\u9f50\u6b21\u8868\u793a\u65e0\u5173\u3002 \u5982\u679c\u6bcf\u70b9 \\(\\mathbf{\\bar{x}_i}\\) \u90fd\u662f\u6709\u9650\u70b9\uff0c\u5e76\u4e14\u5728\u9f50\u6b21\u8868\u793a\u4e2d\u5747\u9009\u62e9 \\(x_2 = 1\\) \uff0c\u90a3\u4e48 \\(|\\mathbf{\\bar{x}_i}\\mathbf{\\bar{x}_j}|\\) \u5c31\u8868\u793a\u7531 \\(\\mathbf{\\bar{x}_i}\\) \u5230 \\(\\mathbf{\\bar{x}_j}\\) \u7684\u5e26\u7b26\u53f7\u7684\u8ddd\u79bb\u3002 \u5982\u679c\u70b9 \\(\\mathbf{\\bar{x}_i}\\) \u4e2d\u6709\u4e00\u4e2a\u7406\u60f3\u70b9\uff0c\u4ea4\u6bd4\u7684\u5b9a\u4e49\u4ecd\u7136\u6709\u6548\u3002 \u5728\u4efb\u4f55\u76f4\u7ebf\u7684\u5c04\u5f71\u53d8\u6362\u4e0b\uff0c\u4ea4\u6bd4\u7684\u503c\u4e0d\u53d8\u3002 \u5171\u70b9\u7ebf \u5171\u70b9\u7ebf\u662f\u76f4\u7ebf\u4e0a\u5171\u7ebf\u70b9\u7684\u5bf9\u5076\u3002\u8fd9\u610f\u5473\u7740\u5e73\u9762\u4e0a\u7684\u5171\u70b9\u7ebf\u4e5f\u6709\u51e0\u4f55 \\(IP^1\\) \u3002\u7279\u522b\u662f\uff0c\u4efb\u4f55\u56db\u6761\u5171\u70b9\u7ebf\u90fd\u6709\u4e00\u4e2a\u786e\u5b9a\u7684\u4ea4\u6bd4\u3002","title":"\u4ea4\u6bd4"},{"location":"cv/mvg/pjt2d/#_13","text":"\u5c04\u5f71\u77eb\u6b63\u7684\u76ee\u7684\u662f\u6d88\u9664\u5e73\u9762\u7684\u900f\u89c6\u56fe\u50cf\u4e2d\u7684\u5c04\u5f71\u5931\u771f\uff0c\u4f7f\u5f97\u539f\u59cb\u5e73\u9762\u7684\u76f8\u4f3c\u6027\u8d28\uff08\u89d2\u5ea6\u3001\u957f\u5ea6\u6bd4\uff09\u53ef\u4ee5\u88ab\u6d4b\u91cf\u3002","title":"\u4ece\u56fe\u50cf\u6062\u590d\u4eff\u5c04\u548c\u5ea6\u91cf\u6027\u8d28"},{"location":"cv/mvg/pjt2d/#_14","text":"\u5728\u5c04\u5f71\u53d8\u6362\u4e0b\uff0c\u7406\u60f3\u70b9\u53ef\u4ee5\u6620\u5c04\u4e3a\u6709\u9650\u70b9\uff0c\u56e0\u800c \\(I_{\\infty}\\) \u88ab\u6620\u5c04\u4e3a\u6709\u9650\u76f4\u7ebf\u3002\u4f46\u5982\u679c\u662f\u4eff\u5c04\u53d8\u6362\uff0c \\(I_{\\infty}\\) \u4e0d\u4f1a\u88ab\u6620\u5c04\u4e3a\u6709\u9650\u76f4\u7ebf\uff0c\u5373\u4ecd\u7559\u5728\u65e0\u7a77\u8fdc\u5904\uff0c\u663e\u7136\uff0c\u5b83\u53ef\u76f4\u63a5\u7531\u76f4\u7ebf\u7684\u53d8\u6362\u63a8\u51fa\uff1a \\[ I_{\\infty}^\\prime = H_A^{-T}I_{\\infty} = \\begin{bmatrix} A^{-T} & \\mathbf{0} \\\\ -\\mathbf{t}^{\\top}A^{-T} & 1 \\end{bmatrix} \\begin{pmatrix} 0 \\\\ 0 \\\\ 1 \\end{pmatrix} = \\begin{pmatrix} 0 \\\\ 0 \\\\ 1 \\end{pmatrix} = I_\\infty \\] \u7ed3\u8bba1 \u5728\u5c04\u5f71\u53d8\u6362 \\(H\\) \u4e0b\uff0c\u65e0\u7a77\u8fdc\u76f4\u7ebf \\(I_{\\infty}\\) \u4e3a\u4e0d\u52a8\u76f4\u7ebf\u7684\u5145\u8981\u6761\u4ef6\u662f \\(H\\) \u662f\u4eff\u5c04\u53d8\u6362\u3002 \u2002\u2002\u5728\u5e73\u9762\u7684\u50cf\u4e2d\uff0c\u4e00\u4f46\u65e0\u7a77\u8fdc\u76f4\u7ebf\u7684\u50cf\u5f97\u5230\u8fa8\u8ba4\uff0c\u5c31\u6709\u53ef\u80fd\u5bf9\u539f\u5e73\u9762\u8fdb\u884c\u4eff\u5c04\u6d4b\u91cf\u3002\u5982\u4e0b\u56fe\u6240\u793a\uff0c\u76f4\u63a5\u628a\u5df2\u8fa8\u8ba4\u7684 \\(I_\\infty\\) \u53d8\u6362\u5230\u5b83\u7684\u89c4\u8303\u4f4d\u7f6e \\(I_\\infty = (0,0,1)^{\\top}\\) \u3002\u628a\u5b9e\u73b0\u6b64\u53d8\u6362\u7684(\u5c04\u5f71)\u77e9\u9635\u5e94\u7528\u4e8e\u56fe\u50cf\u4e2d\u7684\u6bcf\u4e00\u70b9\u4ee5\u8fbe\u5230\u5bf9\u56fe\u50cf\u8fdb\u884c\u4eff\u5c04\u77eb\u6b63\u7684\u76ee\u7684\uff0c\u5373\u53d8\u6362\u4e4b\u540e\uff0c\u4eff\u5c04\u6d4b\u91cf\u53ef\u4ee5\u76f4\u63a5\u5728\u77eb\u6b63\u8fc7\u7684\u56fe\u50cf\u4e2d\u8fdb\u884c\u3002 \u2002\u2002\u5982\u679c\u65e0\u7a77\u8fdc\u76f4\u7ebf\u7684\u50cf\u662f \\(\\mathbf{I} = (l_1, l_2, l_3)^{\\top}\\) \uff0c\u5047\u5b9a \\(l_3 \\ne 0\\) \uff0c\u90a3\u4e48\u628a \\(\\mathbf{l}\\) \u6620\u5c04\u56de \\(l_\\infty = (0,0,1)^{\\top}\\) \u7684\u4e00\u4e2a\u5408\u9002\u7684\u5c04\u5f71\u70b9\u4ea4\u6362\u662f \\[ H=H_A \\begin{bmatrix} 1 & 0 & 0 \\\\ 0 & 1 & 0 \\\\ l_1 & l_2 & l_3 \\end{bmatrix} \\] \u76f4\u7ebf\u4e0a\u7684\u8ddd\u79bb\u6bd4 \u7ed9\u5b9a\u4e00\u4e2a\u76f4\u7ebf\u4e0a\u6709\u5df2\u77e5\u957f\u5ea6\u6bd4\u7684\u4e24\u4e2a\u7ebf\u6bb5\uff0c\u8be5\u76f4\u7ebf\u4e0a\u7684\u65e0\u7a77\u8fdc\u70b9\u4fbf\u53ef\u4ee5\u786e\u5b9a\u3002","title":"\u65e0\u7a77\u8fdc\u7ebf"},{"location":"cv/mvg/pjt2d/#_15","text":"\u865a\u5706\u70b9 \u6bcf\u4e00\u5706\u5468\u4e0e \\(l_\\infty\\) \u76f8\u4ea4\u7684\u70b9\u79f0\u4e3a\u865a\u5706\u70b9\u3002 \u8bc1\u660e \u5728\u4e8c\u6b21\u66f2\u7ebf\u4e3a\u5706\u6709 \\(a=c\\) \u4e14 \\(b=0\\) \u3002\u53d6 \\(a=1\\) \u5219\uff1a \\[x_1^2+x_2^2+dx_1x_3+ex_2x_3=fx_3^2=0\\] \u8be5\u4e8c\u6b21\u66f2\u7ebf\u76f8\u4ea4\u4e8e \\(l_\\infty\\) \u4e8e(\u7406\u60f3)\u70b9( \\(x_3=0\\) )\uff1a \\[x_1^2+x_2^2=0\\] \u89e3\u5f97\u865a\u5706\u70b9\u7684\u6807\u51c6\u5750\u6807\u662f \\(\\mathbf{I}=(1,i,0)^{\\top}, \\; \\mathbf{J}=(1, -i, 0)^{\\top}\\) \u3002 \u8fd9\u4e00\u5bf9\u865a\u5706\u70b9\u662f\u590d\u5171\u8f6d\u7406\u60f3\u70b9\uff0c\u5b83\u4eec\u5728\u4fdd\u5411\u76f8\u4f3c\u53d8\u6362\u4e0b\u4e0d\u53d8\uff1a \\[ \\mathbf{I}^\\prime = H_S\\mathbf{I} = \\left[ \\begin{matrix} s\\cos \\theta & -s\\sin \\theta & t_x \\\\ s\\sin \\theta & s\\cos \\theta & t_y \\\\ 0& 0 & 1 \\end{matrix} \\right] \\begin{pmatrix} 1 \\\\ i \\\\ 0 \\end{pmatrix} = se^{-i \\theta} \\begin{pmatrix} 1 \\\\ i \\\\ 0 \\end{pmatrix} = \\mathbf{I} \\] \u7ed3\u8bba2 \u5728\u5c04\u5f71\u53d8\u6362 \\(H\\) \u4e0b\uff0c\u865a\u5706\u70b9 \\(I\\) \u548c \\(J\\) \u4e3a\u4e0d\u52a8\u70b9\u7684\u5145\u8981\u6761\u4ef6\u662f \\(H\\) \u662f\u76f8\u4f3c\u53d8\u6362\u3002 \u2002\u2002\u4efb\u4f55\u5706\u90fd\u4ea4 \\(\\mathbf{I}_\\infty\\) \u4e8e\u865a\u5706\u70b9 . \u5728\u6b27\u6c0f\u51e0\u4f55\u4e2d\u4e00\u4e2a\u5706\u7531\u4e09\u70b9\u6307\u5b9a.\u865a\u5706\u70b9\u5f15\u51fa\u53e6 \u4e00\u79cd\u8ba1\u7b97.\u5706\u53ef\u4ee5\u7528\u7531\u4e94\u4e2a\u70b9\u5b9a\u4e49\u7684\u4e00\u822c\u4e8c\u6b21\u66f2\u7ebf\u7684\u516c\u5f0f\uff08\u4e09\u4e2a\u70b9\u52a0\u4e24\u4e2a\u865a\u5706\u70b9\uff09\u3002\u865a\u5706\u70b9\u662f\u628a\u6b27\u6c0f\u51e0\u4f55\u4e2d\u7684\u4e24\u6b63\u4ea4\u65b9\u5411\u5408\u5e76\u5230\u4e00\u4e2a\u590d\u5171\u8f6d\u4e2d\uff0c\u5373 \\[\\mathbf{I}=(1,0,0)^{\\top} + i(0,1,0)^{\\top}\\] \u4e0e\u865a\u5706\u70b9\u5bf9\u5076\u7684\u4e8c\u6b21\u66f2\u7ebf \\[C_{\\infty}^* = \\mathbf{I}\\mathbf{J}^{\\top}+\\mathbf{J}\\mathbf{I}^{\\top}\\] \u7ed3\u8bba3 \u5bf9\u5076\u4e8c\u6b21\u66f2\u7ebf \\(C_{\\infty}^*\\) \u5728\u5c04\u5f71\u53d8\u6362 \\(H\\) \u4e0b\u4e0d\u53d8\u7684\u5145\u8981\u6761\u4ef6\u662f \\(H\\) \u76f8\u4f3c\u53d8\u6362\u3002 \u6b64\u5916\uff0c\u5728\u4efb\u4f55\u5c04\u5f71\u6846\u67b6\u4e0b\uff0c \\(C_{\\infty}^*\\) \u5177\u6709\u4e00\u4e9b\u6027\u8d28\uff1a \\(C_{\\infty}^*\\) \u6709 \\(4\\) \u4e2a\u81ea\u7531\u5ea6 \\(\\mathbf{I}_\\infty\\) \u662f \\(C_{\\infty}^*\\) \u7684\u96f6\u77e2\u91cf","title":"\u865a\u5706\u70b9\u53ca\u5176\u5bf9\u5076"},{"location":"cv/mvg/pjt2d/#_16","text":"\u5728\u6b27\u6c0f\u51e0\u4f55\u4e2d\uff0c\u4e24\u7ebf\u95f4\u7684\u5939\u89d2\u7531\u5b83\u4eec\u6cd5\u7ebf\u7684\u70b9\u4e58\u6765\u8ba1\u7b97\u3002\u76f4\u7ebf \\(\\mathbf{I}=(l_1, l_2, l_3)^{\\top}\\) \u548c \\(\\mathbf{m}=(m_1, m_2, m_3)^{\\top}\\) \u7684\u6cd5\u7ebf\u5206\u522b\u5e73\u884c\u4e8e \\((l_1, l_2)^{\\top}\\) \\((m_1, m_2)^{\\top}\\) \uff0c\u5176\u5939\u89d2\u4e3a \\[\\cos \\theta = \\frac{l_1m_1+l_2m_2}{\\sqrt{(l_1^2+l_2^2)(m_1^2+m_2^2)}}\\] \u5728\u5c04\u5f71\u53d8\u6362\u4e0b\u4e0d\u53d8\u7684\u516c\u5f0f\u4e3a: \\[\\cos \\theta = \\frac{\\mathbf{I}^{\\top}C_{\\infty}^*\\mathbf{m}}{\\sqrt{(\\mathbf{I}^{\\top}C_{\\infty}^*\\mathbf{I})(\\mathbf{m}^{\\top}C_{\\infty}^*\\mathbf{m})}}\\] \u5176\u4e2d \\(C_\\infty^*\\) \u662f\u4e0e\u865a\u5706\u70b9\u5bf9\u5076\u7684\u4e8c\u6b21\u66f2\u7ebf\u3002 \u7ed3\u8bba4 \u4e00\u65e6\u4e8c\u6b21\u66f2\u7ebf \\(C_\\infty^*\\) \u5728\u5c04\u5f71\u5e73\u9762\u4e0a\u88ab\u8fa8\u8ba4\uff0c\u90a3\u4e48\u6b27\u6c0f\u89d2\u53ef\u4ee5\u6d4b\u91cf\u3002 \u7ed3\u8bba5 \u5982\u679c \\(\\mathbf{I}^{\\top}C_{\\infty}^*\\mathbf{m}=\\mathbf{0}\\) \uff0c\u5219\u76f4\u7ebf \\(l\\) \u548c \\(m\\) \u6b63\u4ea4\u3002 \u7ed3\u8bba6 \u4e00\u65e6\u4e8c\u6b21\u66f2\u7ebf \\(C_\\infty^*\\) \u5728\u5c04\u5f71\u5e73\u9762\u4e0a\u88ab\u8fa8\u8ba4\uff0c\u957f\u5ea6\u6bd4\u540c\u6837\u53ef\u4ee5\u6d4b\u91cf\u3002","title":"\u5c04\u5f71\u5e73\u9762\u4e0a\u7684\u5939\u89d2"},{"location":"cv/mvg/pjt2d/#_17","text":"\u628a\u865a\u5706\u70b9\u53d8\u6362\u5230\u5b83\u4eec\u7684\u6807\u51c6\u4f4d\u7f6e\uff0c\u5c31\u53ef\u4ee5\u7531\u5e73\u9762\u7684\u56fe\u50cf\u6062\u590d\u5ea6\u91cf\u6027\u8d28\u3002\u5bf9\u5076\u4e8c\u6b21\u66f2\u7ebf \\(C_\\infty^*\\) \u200b\u51e0\u4e4e\u5305\u542b\u4e86\u5b9e\u73b0\u5ea6\u91cf\u77eb\u6b63\u6240\u9700\u7684\u5168\u90e8\u4fe1\u606f\u3002\u5b83\u80fd\u786e\u5b9a\u5c04\u5f71\u53d8\u6362\u4e2d\u7684\u4eff\u5c04\u548c\u5c04\u5f71\u6210\u5206\uff0c\u800c\u53ea\u7559\u4e0b\u76f8\u4f3c\u53d8\u6362\u7684\u5931\u771f\u3002 \u7ed3\u8bba7 \u5728\u5c04\u5f71\u5e73\u9762\u4e0a\uff0c\u4e00\u65e6 \\(C_\\infty^*\\) \u88ab\u8fa8\u8ba4\uff0c\u90a3\u4e48\u5c04\u5f71\u5931\u771f\u53ef\u4ee5\u77eb\u6b63\u5230\u76f8\u5dee\u4e00\u4e2a\u76f8\u4f3c\u53d8\u6362\u3002","title":"\u7531\u56fe\u50cf\u6062\u590d\u5ea6\u91cf\u6027\u8d28"},{"location":"cv/mvg/pjt2d/#_18","text":"","title":"\u4e8c\u6b21\u66f2\u7ebf\u7684\u5176\u4ed6\u6027\u8d28"},{"location":"cv/mvg/pjt2d/#-","text":"\u70b9 \\(\\mathbf{x}\\) \u548c\u4e8c\u6b21\u66f2\u7ebf \\(C\\) \u5b9a\u4e49\u4e00\u6761\u76f4\u7ebf \\(\\mathbf{l}=C\\mathbf{x}\\) \uff0c \\(\\mathbf{l}\\) \u79f0\u4e3a \\(\\mathbf{x}\\) \u5173\u4e8e \\(C\\) \u7684 \u6781\u7ebf \uff0c\u800c\u70b9 \\(\\mathbf{x}\\) \u79f0\u4e3a \\(\\mathbf{l}\\) \u5173\u4e8e \\(C\\) \u7684 \u6781\u70b9 \u3002 \u70b9 \\(\\mathbf{x}\\) \u5173\u4e8e\u4e8c\u6b21\u66f2\u7ebf \\(C\\) \u7684\u6781\u7ebf \\(\\mathbf{l}=C\\mathbf{x}\\) \u4ea4\u4e8e\u4e24\u70b9\u3002 \\(C\\) \u7684\u8fc7\u8fd9\u4e24\u70b9\u7684\u4e24\u6761\u5207\u7ebf\u76f8\u4ea4\u4e8e \\(\\mathbf{x}\\) \u3002 \u5982\u679c\u70b9 \\(x\\) \u5728 \\(C\\) \u4e0a\uff0c\u5219\u5b83\u7684\u6781\u7ebf\u5c31\u662f\u4e8c\u6b21\u66f2\u7ebf\u8fc7 \\(x\\) \u70b9\u7684\u5207\u7ebf\u3002 \u5bf9\u5c04 \u5b9a\u4e49 \uff1a\u5bf9\u5c04\u662f \\(IP^2\\) \u70b9\u5230 \\(IP^2\\) \u7ebf\u7684\u53ef\u9006\u6620\u5c04\u3002\u5e76\u7528\u4e00\u4e2a \\(3 \\times 3\\) \u975e\u5947\u5f02\u77e9\u9635 \\(A\\) \u8868\u793a\u4e3a \\(\\mathbf{l}=A\\mathbf{x}\\) \u3002 \u5171\u8f6d\u70b9 \uff1a\u5982\u679c\u70b9 \\(y\\) \u5728\u6781\u7ebf \\(\\mathbf{l}=C\\mathbf{x}\\) \u4e0a\uff0c\u5219 \\(\\mathbf{y}^{\\top}\\mathbf{l}=\\mathbf{y}^{\\top}C\\mathbf{x}=0\\) \u3002\u6ee1\u8db3 \\(\\mathbf{y}^{\\top}C\\mathbf{x}=0\\) \u7684\u4efb\u4f55\u4e24\u70b9 \\(x,y\\) \u79f0\u4e3a\u5173\u4e8e\u4e8c\u6b21\u66f2\u7ebf \\(C\\) \u5171\u8f6d\u3002 \u5982\u679c \\(\\mathbf{x}\\) \u5728 \\(\\mathbf{y}\\) \u7684\u6781\u7ebf\u4e0a\uff0c\u90a3\u4e48 \\(\\mathbf{y}\\) \u4e5f\u5728 \\(\\mathbf{x}\\) \u7684\u6781\u7ebf\u4e0a\u3002","title":"\u6781\u70b9-\u6781\u7ebf\u5173\u7cfb"},{"location":"cv/mvg/pjt2d/#_19","text":"","title":"\u4e8c\u6b21\u66f2\u7ebf\u7684\u5206\u7c7b"},{"location":"cv/mvg/pjt2d/#_20","text":"\u4efb\u4f55\u4e8c\u6b21\u66f2\u7ebf\u90fd\u5c04\u5f71\u7b49\u4ef7\u4e8e\u4e00\u4e2a\u7531\u5bf9\u89d2\u77e9\u9635\u8868\u793a\u7684\u4e8c\u6b21\u66f2\u7ebf\u3002\u4e8c\u6b21\u66f2\u7ebf \\(D\\) \u6700\u7ec8\u88ab\u8868\u793a\u4e3a\u5177\u6709\u77e9\u9635 \\(diag(\\varepsilon_1, \\varepsilon_2, \\varepsilon_3)\\) \u7684\u4e8c\u6b21\u66f2\u7ebf\uff0c\u5176\u4e2d \\(\\varepsilon_i=\\pm 1\\) \u6216 \\(0\\) \u3002 \u5bf9\u89d2\u7ebf \u65b9\u7a0b \u4e8c\u6b21\u66f2\u7ebf\u7c7b\u578b \\((1,1,1)\\) \\(x^2+y^2+w^2=0\\) \u5047\u4e8c\u6b21\u66f2\u7ebf--\u65e0\u5b9e\u70b9 \\((1,1,-1)\\) \\(x^2+y^2-w^2=0\\) \u5706 \\((1,1,0)\\) \\(x^2+y^2=0\\) \u5355\u4e2a\u5b9e\u70b9 \\((0,0,1)^{\\top}\\) \\((1,-1,0)\\) \\(x^2-y^2=0\\) \u4e24\u6761\u76f4\u7ebf \\(x=\\pm y\\) \\((1,0,0)\\) \\(x^2=0\\) \u5355\u6761\u76f4\u7ebf \\(x=0\\) \u8ba1\u4e24\u6b21","title":"\u4e8c\u6b21\u66f2\u7ebf\u7684\u5c04\u5f71\u6807\u51c6\u5f62\u5f0f"},{"location":"cv/mvg/pjt2d/#_21","text":"\u5728\u6b27\u6c0f\u51e0\u4f55\u4e2d\uff0c(\u975e\u9000\u5316\u6216\u771f)\u4e8c\u6b21\u66f2\u7ebf\u53ef\u4ee5\u5206\u4e3a\u53cc\u66f2\u7ebf\u3001\u692d\u5706\u548c\u629b\u7269\u7ebf\u3002\u5728\u5c04\u5f71\u51e0\u4f55\u4e2d\u4e09\u79cd\u7c7b\u578b\u7684\u4e8c\u6b21\u66f2\u7ebf\u4e0e \\(l_\\infty\\) \u7684\u5173\u7cfb\u5982\u4e0b\u56fe\u6240\u793a\uff1a \u4e0a\u56fe\u4e2d\u4e8c\u6b21\u66f2\u7ebf\u662f \\((a)\\) \u692d\u5706\uff0c \\((b)\\) \u629b\u7269\u7ebf\uff0c \\((c)\\) \u53cc\u66f2\u7ebf\u3002\u5b83\u4eec\u4e0e \\(l_{\\infty}\\) \u7684\u5173\u7cfb : \\((a)\\) \u65e0\u5b9e\u4ea4\u70b9\u3001 \\((b)\\) \u76f8\u5207( \\(2\\) \u70b9\u63a5\u89e6)\u3001 \\((c)\\) \u6709 \\(2\\) \u4e2a\u5b9e\u4ea4\u70b9\u3002","title":"\u4e8c\u6b21\u66f2\u7ebf\u7684\u4eff\u5c04\u5206\u7c7b"},{"location":"cv/mvg/pjt2d/#_22","text":"\u53d8\u6362\u7684\u4e00\u4e2a \u7279\u5f81\u77e2\u91cf \u5bf9\u5e94\u4e00\u4e2a \u4e0d\u52a8\u70b9 \uff0c\u56e0\u4e3a\u5bf9\u4e8e\u7279\u5f81\u503c \\(\\lambda\\) \u53ca\u5176\u5bf9\u5e94\u7684\u7279\u5f81\u77e2\u91cf \\(e\\) \u6709: \\[H\\mathbf{e} = \\lambda \\mathbf{e}\\] \u2002\u2002\u800c \\(\\mathbf{e}\\) \u548c \\(\\lambda \\mathbf{e}\\) \u8868\u793a\u540c\u4e00\u70b9\u3002\u7c7b\u4f3c\u7684\u63a8\u5bfc\u53ef\u4ee5\u7528\u4e8e\u4e0d\u52a8\u76f4\u7ebf\uff0c\u5b83\u5bf9\u5e94\u4e8e \\(H^{\\top}\\) \u7684\u7279\u5f81\u77e2\u91cf\u3002 \u5e73\u9762\u5c04\u5f71\u53d8\u6362\u7684\u4e0d\u52a8\u70b9\u4e0e\u76f4\u7ebf \u8fd9\u91cc\u6709\u4e09\u4e2a\u4e0d\u52a8\u70b9\u548c\u8fc7\u8fd9\u4e09\u70b9\u7684\u4e0d\u52a8\u76f4\u7ebf.\u4e0d\u52a8\u76f4\u7ebf\u548c\u4e0d\u52a8\u70b9\u53ef\u80fd\u662f\u590d\u7684\uff1a\u4ece\u4ee3\u6570\u7684\u89d2\u5ea6\u6765\u8bf4\uff0c\u4e0d\u52a8\u70b9\u662f\u70b9\u53d8\u6362 \\((\\mathbf{x}^\\prime=H\\mathbf{x})\\) \u7684\u7279\u5f81\u77e2\u91cf \\(\\mathbf{e}_i\\) \uff0c\u800c\u4e0d\u52a8\u76f4\u7ebf\u662f\u7ebf\u53d8\u6362 \\((\\mathbf{l}^\\prime =H^{-T}\\mathbf{l})\\) \u7684\u7279\u5f81\u77e2\u91cf\u3002\u6ce8\u610f\uff0c\u4e0d\u52a8\u76f4\u7ebf\u4e0d\u662f\u70b9\u70b9\u4e0d\u52a8\uff1a\u5728\u53d8\u6362\u4e0b\uff0c\u76f4\u7ebf\u4e0a\u7684\u4e00\u70b9\u88ab\u6620\u4e3a\u5176\u4e0a\u7684\u53e6\u4e00\u70b9\uff0c\u53ea\u6709\u4e0d\u52a8\u70b9\u624d\u6620\u4e3a\u81ea\u8eab\u3002","title":"\u4e0d\u52a8\u70b9\u4e0e\u76f4\u7ebf"},{"location":"cv/mvg/pjt2d/#_23","text":"\u4e24\u4e2a\u4e0d\u52a8\u7406\u60f3\u70b9\u662f\u865a\u5706\u70b9 \\(\\mathbf{I},\\mathbf{J}\\) \u7ec4\u6210\u7684\u590d\u5171\u8f6d\u5bf9\uff0c\u76f8\u5bf9\u5e94\u7684\u7279\u5f81\u503c\u662f \\(|e^{i \\theta}, e^{-i \\theta}|\\) \uff0c\u8fd9\u91cc \\(\\theta\\) \u662f\u65cb\u8f6c\u89d2\u3002\u5bf9\u5e94\u4e8e\u7279\u5f81\u503c \\(1\\) \u7684\u7b2c\u4e09\u4e2a\u7279\u5f81\u5411\u91cf\uff0c\u79f0\u4e3a \\(\u6781\u70b9\\) \u3002\u6b27\u6c0f\u53d8\u6362\u7b49\u4ef7\u4e8e\u7ed5\u8be5\u70b9\u8f6c \\(\\theta\\) \u89d2\u7684\u7eaf\u65cb\u8f6c\u5e76\u4e14\u6ca1\u6709\u5e73\u79fb\u3002 \u4e00\u79cd\u7279\u6b8a\u7684\u60c5\u8bc6\u662f\u7eaf\u5e73\u79fb(\u5373 \\(\\theta=0\\) )\u3002\u8fd9\u65f6\u7279\u5f81\u503c\u4e09\u91cd\u9000\u5316\uff0c\u8fd9\u662f\u7ea6\u675f\u900f\u89c6\u53d8\u6362\u7684\u4e00\u4e2a\u4f8b\u5b50\u3002","title":"\u6b27\u6c0f\u77e9\u9635"},{"location":"cv/mvg/pjt2d/#_24","text":"\u4e24\u4e2a\u4e0d\u52a8\u7406\u60f3\u70b9\u4ecd\u662f\u865a\u5706\u70b9\u3002\u7279\u5f81\u503c\u662f \\(|1,se^{i \\theta}, se^{-i \\theta}|\\) \u3002\u76f8\u4f3c\u53d8\u6362\u7684\u4f5c\u7528\u53ef\u4ee5\u7406\u89e3\u4e3a\u7ed5\u5b83\u7684\u6709\u9650\u4e0d\u52a8\u70b9\u7684\u65cb\u8f6c\u548c\u53d6 \\(s\\) \u4e3a\u56e0\u5b50\u7684\u5747\u5300\u7f29\u653e\u3002\u6ce8\u610f\u865a\u5706\u70b9\u7684\u7279\u5f81\u503c\u4ecd\u7136\u8868\u5f81\u65cb\u8f6c\u89d2\u3002","title":"\u76f8\u4f3c\u77e9\u9635"},{"location":"cv/mvg/pjt2d/#_25","text":"\u4e24\u4e2a\u4e0d\u52a8\u7406\u60f3\u70b9\u53ef\u4ee5\u662f\u5b9e\u6216\u590d\u5171\u8f6d\u7684\uff0c\u4f46\u5728\u4efb\u4f55\u4e00\u79cd\u60c5\u51b5\u4e0b\uff0c\u8fc7\u8fd9\u4e9b\u70b9\u7684\u4e0d\u52a8\u76f4\u7ebf \\(\\mathbf{l}_\\infty=(0,0,1)^{\\top}\\) \u662f\u5b9e\u7684\u3002","title":"\u4eff\u5c04\u77e9\u9635"},{"location":"cv/mvg/pjt3d/","text":"3D \u5c04\u5f71\u51e0\u4f55\u548c\u53d8\u6362 \u00b6 \u7ea6 2831 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f Abstract \u672c\u7ae0\u4e3b\u8981\u4ecb\u7ecd 3 \u7ef4\u5c04\u5f71\u7a7a\u95f4 \\(IP^3\\) \u7684\u6027\u8d28\u548c\u57fa\u672c\u8981\u7d20\u3002 \u70b9\u548c\u5c04\u5f71\u53d8\u6362 \u00b6 \u4e09\u7ef4\u7a7a\u95f4\u7684\u4e00\u70b9 \\(\\mathbf{X}\\) \u7528\u9f50\u6b21\u5750\u6807\u8868\u793a\u4e3a\u4e00\u4e2a 4 \u7ef4\u77e2\u91cf\uff0c\u9f50\u6b21\u77e2\u91cf \\(\\mathbf{X}=(X_1,X_2,X_3,X_4)^{\\top}\\) \u5f53 \\(X_4 \\ne 0\\) \u65f6\u8868\u793a\u4e3a \\(IR^3\\) \u4e2d\u975e\u9f50\u6b21\u5750\u6807\u4e3a \\((X,Y,Z)^{\\top}\\) \u7684\u70b9\uff0c\u5176\u4e2d \\(\\mathbf{X}=X_1/X_4,Y=X_2/X_4,Z=X_3/X_4\\) \u3002 \u5f53 \\(X_4=0\\) \u7684\u9f50\u6b21\u70b9\u8868\u793a\u65e0\u7a77\u8fdc\u70b9\u3002 \\(IR^3\\) \u4e0a\u7684\u5c04\u5f71\u53d8\u6362\u662f\u7531\u975e\u5947\u5f02 \\(4 \\times 4\\) \u77e9\u9635\u7ed9\u51fa\uff0c\u5b83\u662f\u5173\u4e8e\u9f50\u6b21 4 \u7ef4\u77e2\u91cf\u7684\u7ebf\u6027\u53d8\u6362\uff1a \\(\\mathbf{X}^\\prime=H\\mathbf{X}\\) \uff0c\u8be5\u6620\u5c04\u662f\u4fdd\u7ebf\u53d8\u6362\uff08\u76f4\u7ebf\u88ab\u6620\u5c04\u5230\u76f4\u7ebf\uff09\u3002 \u5e73\u9762\u3001\u76f4\u7ebf\u548c\u4e8c\u6b21\u66f2\u9762\u7684\u8868\u793a\u548c\u53d8\u6362 \u00b6 \u5e73\u9762 \u00b6 \u5e73\u9762\u7684\u9f50\u6b21\u8868\u793a\u4e3a \\(\\mathbf{\\pi}=(\\pi_1, \\pi_2, \\pi_3, \\pi_4)^{\\top}\\) \u3002 \u70b9 \\(\\mathbf{X}\\) \u5728\u5e73\u9762 \\(\\mathbf{\\pi}\\) \u4e0a\u5219\uff1a \\(\\mathbf{\\pi}^{\\top}\\mathbf{X}=0\\) \u8054\u5408\u4e0e\u5173\u8054\u5173\u7cfb \u5e73\u9762\u53ef\u7531\u4e00\u822c\u4f4d\u7f6e\u7684\u4e09\u4e2a\u70b9\u6216\u4e00\u6761\u76f4\u7ebf\u4e0e\u4e00\u4e2a\u70b9\u7684\u8054\u5408\u6765\u552f\u4e00\u786e\u5b9a\uff08\u4e00\u822c\u4f4d\u7f6e\u6307\u4e09\u70b9\u4e0d\u5171\u7ebf\u6216\u5728\u540e\u4e00\u79cd\u60c5\u5f62\u4e0b\u6307\u70b9\u4e0d\u5728\u76f4\u7ebf\u4e0a\uff09 \u4e24\u5f20\u4e0d\u540c\u7684\u5e73\u9762\u76f8\u4ea4\u4e8e\u552f\u4e00\u7684\u76f4\u7ebf \u4e09\u5f20\u4e0d\u540c\u7684\u5e73\u9762\u76f8\u4ea4\u4e8e\u552f\u4e00\u7684\u70b9 \u4e09\u70b9\u786e\u5b9a\u4e00\u5f20\u5e73\u9762 \u786e\u5b9a\u5e73\u9762\u7684\u4e09\u4e2a\u70b9\u662f \\(\\mathbf{X}_1=(\\hat{\\mathbf{X}_1})^{\\top}\u3001\\mathbf{X}_2=(\\hat{\\mathbf{X}_2})^{\\top}\u3001\\mathbf{X}_3=(\\hat{\\mathbf{X}_3})^{\\top}\\) \uff0c\u5219 \\[ \\mathbf{\\pi}=((\\hat{\\mathbf{X}_1}-\\hat{\\mathbf{X}_3}) \\times (\\hat{\\mathbf{X}_2}-\\hat{\\mathbf{X}_3}), -\\hat{\\mathbf{X}_3}^{\\top}(\\hat{\\mathbf{X}_1} \\times \\hat{\\mathbf{X}_2}))^{\\top} \\] \u4e09\u5e73\u9762\u786e\u5b9a\u4e00\u70b9 \u4e09\u5e73\u9762 \\(\\mathbf{\\pi}_i\\) \u7684\u4ea4\u70b9 \\(\\mathbf{X}\\) \u53ef\u901a\u8fc7\u6c42\u4ee5\u4e09\u5f20\u5e73\u9762\u4e3a\u884c\u7684 \\(3 \\times 4\\) \u77e9\u9635\u7684\uff08\u53f3\uff09\u96f6\u7a7a\u95f4\u76f4\u63a5\u8ba1\u7b97\u51fa\u6765\uff1a \\[ \\begin{bmatrix} \\mathbf{\\pi}_1^{\\top}\\\\ \\mathbf{\\pi}_2^{\\top}\\\\ \\mathbf{\\pi}_3^{\\top} \\end{bmatrix} \\mathbf{X}=\\mathbf{0} \\] \u5c04\u5f71\u53d8\u6362 \u5728\u70b9\u53d8\u6362 \\(\\mathbf{X}^\\prime=H\\mathbf{X}\\) \u4e0b\uff0c\u5e73\u9762\u53d8\u6362\u4e3a \\(\\mathbf{\\pi}^\\prime=H^{-\\top}\\mathbf{\\pi}\\) \u5e73\u9762\u4e0a\u7684\u70b9\u7684\u53c2\u6570\u8868\u793a \u5728\u5e73\u9762 \\(\\mathbf{\\pi}\\) \u4e0a\u7684\u70b9 \\(\\mathbf{X}\\) \u53ef\u4ee5\u5199\u6210 \\(\\mathbf{X}=M\\mathbf{x}\\) \u5176\u4e2d \\(4 \\times 3\\) \u77e9\u9635 \\(M\\) \u7684\u5217\u751f\u6210 \\(\\mathbf{\\pi}^{\\top}\\) \u7684\u79e9\u4e3a 3 \u7684\u96f6\u7a7a\u95f4\uff0c\u5373 \\(\\mathbf{\\pi}^{\\top} M=\\mathbf{0}^{\\top}\\) \u76f4\u7ebf \u00b6 \u96f6\u7a7a\u95f4 \u4e00\u4e2a\u7b97\u5b50 \\(\\mathbf{A}\\) \u7684\u96f6\u7a7a\u95f4\u662f \\(\\mathbf{A}\\mathbf{v}=\\mathbf{0}\\) \u7684\u6240\u6709\u89e3 \\(\\mathbf{v}\\) \u7684\u96c6\u5408\u3002\u5b83\u4e5f\u53eb\u505a \\(\\mathbf{A}\\) \u7684\u6838\uff0c\u6838\u7a7a\u95f4\u3002\u5982\u679c\u7b97\u5b50\u662f\u5728\u5411\u91cf\u7a7a\u95f4\u4e0a\u7684\u7ebf\u6027\u7b97\u5b50\uff0c\u96f6\u7a7a\u95f4\u5c31\u662f\u7ebf\u6027\u5b50\u7a7a\u95f4\u3002\u56e0\u6b64\u96f6\u7a7a\u95f4\u4e5f\u662f\u5411\u91cf\u7a7a\u95f4\u3002 \u751f\u6210\u5b50\u7a7a\u95f4 \u8bbe \\(\\alpha_1, \\alpha_2, ..., \\alpha_m\\) \u662f \\(R^m\\) \u4e2d\u4efb\u4e00\u7ec4\u5411\u91cf\u3002\u8bb0 \\(\\alpha_1, \\alpha_2, ..., \\alpha_m\\) \u7684\u6240\u6709\u7ebf\u6027\u7ec4\u5408\u7684\u96c6\u5408\u4e3a \\(span(\\alpha_1, \\alpha_2, ..., \\alpha_m)\\) \uff0c\u5373 \\(span(\\alpha_1, \\alpha_2, ..., \\alpha_m)=\\{k_1\\alpha_1+k_2\\alpha_2+...+k_m\\alpha_m | k_i \\in R, i=1,2,...,m\\}\\) \uff0c\u79f0 \\(span(\\alpha_1, \\alpha_2, ..., \\alpha_m)\\) \u4e3a\u5411\u91cf\u7ec4 \\(\\alpha_1, \\alpha_2, ..., \\alpha_m\\) \u751f\u6210\u7684\u5b50\u7a7a\u95f4\u3002 \u96f6\u7a7a\u95f4\u4e0e\u751f\u6210\u5b50\u7a7a\u95f4\u8868\u793a \u5047\u5b9a \\(\\mathbf{A}\u3001\\mathbf{B}\\) \u662f\u4e24\uff08\u4e0d\u91cd\u5408\uff09\u7684\u7a7a\u95f4\u70b9\uff0c\u90a3\u4e48\u8fde\u63a5\u8fd9\u4e24\u70b9\u7684\u76f4\u7ebf\u7531\u4e00\u4e2a \\(2 \\times 4\\) \u77e9\u9635 \\(W\\) \u7684\u884c\u7684\u751f\u6210\u5b50\u7a7a\u95f4\u8868\u793a\uff0c \\(W=\\begin{bmatrix} \\mathbf{A}^{\\top} \\\\ \\mathbf{B}^{\\top} \\end{bmatrix}\\) \\(W^{\\top}\\) \u7684\u751f\u6210\u5b50\u7a7a\u95f4\u662f\u5728\u76f4\u7ebf \\(\\lambda \\mathbf{A}+\\mu \\mathbf{B}\\) \u4e0a\u7684\u70b9\u675f \\(W\\) \u7684 2 \u7ef4\u53f3\u96f6\u7a7a\u95f4\u7684\u751f\u6210\u5b50\u7a7a\u95f4\u662f\u4ee5\u76f4\u7ebf\u4e3a\u8f74\u7684\u5e73\u9762\u675f \u4e00\u6761\u76f4\u7ebf\u7684\u5bf9\u5076\u8868\u793a\u662f\u4e24\u5e73\u9762 \\(\\mathbf{P}\uff0c\\mathbf{Q}\\) \u7684\u4ea4\u7ebf\uff0c\u8be5\u76f4\u7ebf\u8868\u793a\u4e3a\u77e9\u9635 \\(W^*=\\begin{bmatrix} \\mathbf{P}^{\\top} \\\\ \\mathbf{Q}^{\\top} \\end{bmatrix}\\) \\(W^{*\\top}\\) \u7684\u751f\u6210\u5b50\u7a7a\u95f4\u662f\u4ee5\u8be5\u76f4\u7ebf\u4e3a\u8f74\u7684\u5e73\u9762\u675f \\(\\lambda^\\prime\\mathbf{P}+\\mu^\\prime\\mathbf{Q}\\) \\(W^{*\\top}\\) \u7684 2 \u7ef4\u96f6\u7a7a\u95f4\u7684\u751f\u6210\u5b50\u7a7a\u95f4\u662f\u8be5\u76f4\u7ebf\u4e0a\u7684\u70b9\u675f \u8fd9\u4e24\u79cd\u8868\u793a\u4ee5 \\(W^*W^{\\top}=WW^{*\\top}=0_{2\\times 2}\\) \u76f8\u8054\u7cfb Pl\u00fccker \u77e9\u9635 \u8fd9\u91cc\u4e00\u6761\u76f4\u7ebf\u7531 \\(4 \\times 4\\) \u53cd\u5bf9\u79f0\u9f50\u6b21\u77e9\u9635\u8868\u793a\u3002\u8fde\u63a5\u4e24\u70b9 \\(\\mathbf{A}, \\mathbf{B}\\) \u7684\u76f4\u7ebf\u7531\u77e9\u9635 \\(\\mathbf{L}\\) \u8868\u793a\uff0c\u5176\u5143\u7d20\u4e3a\uff1a \\(l_{ij}=A_iB_j-B_iA_j\\) \uff0c\u6216\u7528\u77e2\u91cf\u8bb0\u53f7\u7b49\u4ef7\u4e8e\u8868\u793a\u4e3a \\(L=\\mathbf{A}\\mathbf{B}^{\\top}-\\mathbf{B}\\mathbf{A}^{\\top}\\) \u6027\u8d28 \\(L\\) \u7684\u79e9\u4e3a 2 \u8be5\u8868\u793a\u5177\u6709\u63cf\u8ff0\u4e00\u6761\u76f4\u7ebf\u6240\u9700\u8981\u7684 4 \u4e2a\u81ea\u7531\u5ea6 \u77e9\u9635 \\(L\\) \u4e0e\u7528\u6765\u786e\u5b9a\u5b83\u7684\u70b9 \\(\\mathbf{A}, \\mathbf{B}\\) \u65e0\u5173 \u5728\u70b9\u53d8\u6362 \\(\\mathbf{X}^\\prime=H\\mathbf{X}\\) \u4e0b\uff0c\u8be5\u77e9\u9635\u53d8\u6362\u4e3a \\(L^\\prime=HLH^{\\top}\\) \u65f6\uff0c\u5373\u5b83\u662f\u4e00\u4e2a\u9636\u4e3a 2 \u7684\u5f20\u91cf \u7531\u4e24\u5e73\u9762 \\(\\mathbf{P}, \\mathbf{Q}\\) \u7684\u4ea4\u7ebf\u786e\u5b9a\u7684\u76f4\u7ebf\u7684\u5bf9\u5076 Pl\u00fccker \u8868\u793a\u4e3a \\(L^*\\) \u4e3a \\(L^*=\\mathbf{P}\\mathbf{Q}^{\\top}-\\mathbf{Q}\\mathbf{P}^{\\top}\\) \u7531\u70b9 \\(\\mathbf{X}\\) \u548c\u76f4\u7ebf \\(L\\) \u8054\u5408\u800c\u786e\u5b9a\u7684\u5e73\u9762\u4e3a \\(\\mathbf{\\pi}=L^*\\mathbf{X}\\) \uff0c\u5e76\u4e14 \\(L^*\\mathbf{X}=0\\) \u7684\u5145\u8981\u6761\u4ef6\u662f \\(\\mathbf{X}\\) \u5728 \\(L\\) \u4e0a \u7531\u76f4\u7ebf \\(L\\) \u548c\u5e73\u9762 \\(\\mathbf{\\pi}\\) \u76f8\u4ea4\u800c\u786e\u5b9a\u7684\u70b9\u4e3a \\(\\mathbf{X}=L\\mathbf{\\pi}\\) \uff0c\u5e76\u4e14 \\(L\\mathbf{\\pi}=\\mathbf{0}\\) \u7684\u5145\u8981\u6761\u4ef6\u662f \\(L\\) \u5728 \\(\\mathbf{\\pi}\\) \u4e0a Pl\u00fccker \u76f4\u7ebf\u5750\u6807 Pl\u00fccker \u76f4\u7ebf\u5750\u6807\u662f \\(4 \\times 4\\) \u53cd\u5bf9\u79f0 Pl\u00fccker \u77e9\u9635 \\(L\\) \u7684\u516d\u4e2a\u975e\u96f6\u5143\u7d20\uff0c\u5373 \\(\\mathcal{L}=\\{l_{12},l_{13},l_{14},l_{23},l_{42},l_{34}\\}\\) \u7531\u4e8e \\(\\det{L}=0\\) \uff0c\u6240\u4ee5\u5750\u6807\u6ee1\u8db3 \\(l_{12}l_{34}+l_{13}l_{42}+l_{14}l_{23}=0\\) \u4e24\u6761\u76f4\u7ebf \\(\\mathcal{L}\\) \u548c \\(\\hat{\\mathcal{L}}\\) \u5171\u9762\uff08\u56e0\u800c\u76f8\u4ea4\uff09\u7684\u5145\u8981\u6761\u4ef6\u662f \\((\\mathcal{L} | \\hat{\\mathcal{L}})=0\\) \u5982\u679c \\((\\mathcal{L} | \\hat{\\mathcal{L}})=0\\) \uff0c\u5219 6 \u7ef4\u77e2\u91cf \\(\\mathcal{L}\\) \u4ec5\u8868\u793a \\(IP^3\\) \u4e2d\u7684\u4e00\u6761\u76f4\u7ebf \u5047\u5b9a\u4e24\u6761\u76f4\u7ebf \\(\\mathcal{L}, \\hat{\\mathcal{L}}\\) \u5206\u522b\u4e3a\u5e73\u9762 \\(\\mathbf{P}, \\mathbf{Q}\\) \u548c \\(\\hat{\\mathbf{P}}, \\hat{\\mathbf{Q}}\\) \u7684\u4ea4\u7ebf\uff0c\u90a3\u4e48 \\((\\mathcal{L} | \\hat{\\mathcal{L}})=\\det [\\mathbf{P}, \\mathbf{Q}, \\hat{\\mathbf{P}}, \\hat{\\mathbf{Q}}]\\) \uff0c\u540c\u7406\uff0c\u4e24\u6761\u76f4\u7ebf\u76f8\u4ea4\u7684\u5145\u8981\u6761\u4ef6\u5c31\u662f \\((\\mathcal{L} | \\hat{\\mathcal{L}})=0\\) \u5982\u679c \\(\\mathcal{L}\\) \u662f\u4e24\u5e73\u9762 \\(\\mathbf{P}, \\mathbf{Q}\\) \u7684\u4ea4\u7ebf\uff0c\u800c \\(\\hat{\\mathcal{L}}\\) \u662f\u4e24\u70b9 \\(\\mathbf{A}, \\mathbf{B}\\) \u7684\u8fde\u7ebf\uff0c\u90a3\u4e48 \\((\\mathcal{L} | \\hat{\\mathcal{L}})=(\\mathbf{P}^{\\top}\\mathbf{A})(\\mathbf{Q}^{\\top}\\mathbf{B})-(\\mathbf{Q}^{\\top}\\mathbf{A})(\\mathbf{P}^{\\top}\\mathbf{B})\\) \u4e8c\u6b21\u66f2\u9762\u4e0e\u5bf9\u5076\u4e8c\u6b21\u66f2\u9762 \u00b6 \\(IP^3\\) \u4e2d\uff0c\u4e8c\u6b21\u66f2\u9762\u7531\u4e0b\u5217\u65b9\u7a0b\u5b9a\u4e49\uff1a \\(\\mathbf{X}^{\\top} Q\\mathbf{X}=0\\) \uff0c\u5176\u4e2d \\(Q\\) \u662f\u4e00\u4e2a \\(4 \\times 4\\) \u7684\u5bf9\u79f0\u77e9\u9635 \u4e2a\u4e8c\u6b21\u66f2\u9762\u6709 9 \u4e2a\u81ea\u7531\u5ea6 \u4e00\u822c\u4f4d\u7f6e\u4e0a\u7684\u4e5d\u4e2a\u70b9\u786e\u5b9a\u4e00\u4e2a\u4e8c\u6b21\u66f2\u9762 \u5982\u679c\u77e9\u9635 \\(Q\\) \u662f\u5947\u5f02\u7684\uff0c\u90a3\u4e48\u4e8c\u6b21\u66f2\u9762\u662f\u9000\u5316\u7684\uff0c\u5e76\u53ef\u4ee5\u7531\u8f83\u5c11\u7684\u70b9\u6765\u786e\u5b9a \u4e8c\u6b21\u66f2\u9762\u5b9a\u4e49\u4e86\u70b9\u548c\u5e73\u9762\u4e4b\u95f4\u7684\u4e00\u79cd\u914d\u6781\uff0c\u7c7b\u4f3c\u4e8e\u4e8c\u6b21\u66f2\u7ebf\u5728\u70b9\u548c\u76f4\u7ebf\u4e4b\u95f4\u5b9a\u4e49\u7684\u914d\u6781\uff0c\u5e73\u9762 \\(\\mathbf{\\pi}=Q\\mathbf{X}\\) \u79f0\u4e3a\u662f \\(\\mathbf{X}\\) \u5173\u4e8e \\(Q\\) \u7684\u6781\u5e73\u9762\uff0c\u5f53 \\(Q\\) \u4e3a\u975e\u5947\u5f02\u5e76\u4e14 \\(\\mathbf{X}\\) \u5728\u4e8c\u6b21\u66f2\u9762\u4e4b\u5916\u65f6\uff0c\u6781\u5e73\u9762\u7531\u8fc7 \\(\\mathbf{X}\\) \u4e14\u4e0e \\(Q\\) \u76f8\u5207\u7684\u5c04\u7ebf\u7ec4\u6210\u7684\u9525\u4e0e \\(Q\\) \u60f3\u63a5\u89e6\u7684\u70b9\u6765\u5b9a\u4e49\u3002\u5982\u679c \\(\\mathbf{X}\\) \u5728 \\(Q\\) \u4e0a\uff0c\u90a3\u4e48 \\(Q\\mathbf{X}\\) \u662f \\(Q\\) \u5728\u70b9 \\(\\mathbf{X}\\) \u7684\u5207\u5e73\u9762 \u5e73\u9762 \\(\\mathbf{\\pi}\\) \u4e0e\u4e8c\u6b21\u66f2\u9762 \\(Q\\) \u7684\u4ea4\u7ebf\u662f\u4e8c\u6b21\u66f2\u7ebf \\(C\\) \u5728\u70b9\u53d8\u6362 \\(\\mathbf{X}^\\prime=H\\mathbf{X}\\) \u4e0b\uff0c\uff08\u70b9\uff09\u4e8c\u6b21\u66f2\u9762\u53d8\u6362\u4e3a \\(Q^\\prime=H^{-\\top}QH^{-1}\\) \u4e8c\u6b21\u66f2\u9762\u7684\u5206\u7c7b \u00b6 \u5bf9\u89d2\u77e9\u9635 \\(D\\) \u7684\u7b26\u53f7\u5dee\uff0c\u8bb0\u4e3a \\(\\sigma(D)\\) \uff0c\u5b9a\u4e49\u4e3a \\(D\\) \u4e2d +1 \u7684\u4e2a\u6570\u4e0e -1 \u7684\u4e2a\u6570\u7684\u5dee\u503c \u4e09\u6b21\u7ed5\u7ebf \u00b6 \u4e09\u6b21\u7ed5\u7ebf\u53ef\u4ee5\u770b\u6210 2D \u4e8c\u6b21\u66f2\u7ebf\u7684 3 \u7ef4\u7c7b\u63a8\u3002\u4e00\u6761\u4e09\u6b21\u7ed5\u7ebf\u5b9a\u4e49\u4e3a \\(IP^3\\) \u4e2d\u7684\u4e00\u6761\u66f2\u7ebf\uff0c\u5b83\u7684\u53c2\u6570\u5f62\u5f0f\u5982\u4e0b\uff1a \\[ \\begin{bmatrix} x_1 \\\\ x_2 \\\\ x_3 \\\\ x_4 \\end{bmatrix} = A \\begin{bmatrix} 1 \\\\ \\theta \\\\ \\theta^2 \\\\ \\theta^3 \\end{bmatrix} = \\begin{bmatrix} a_{11}+a_{12}\\theta+a_{13}\\theta^2+a_{14}\\theta^3 \\\\ a_{21}+a_{22}\\theta+a_{23}\\theta^2+a_{24}\\theta^3 \\\\ a_{31}+a_{32}\\theta+a_{33}\\theta^2+a_{34}\\theta^3 \\\\ a_{41}+a_{42}\\theta+a_{43}\\theta^2+a_{44}\\theta^3 \\end{bmatrix} \\] \u6027\u8d28 \u4ee4 \\(\\mathbf{c}\\) \u4e3a\u4e00\u6761\u975e\u5947\u5f02\u4e09\u6b21\u7ed5\u7ebf\u3002\u90a3\u4e48 \\(\\mathbf{c}\\) \u4e0d\u6574\u4e2a\u5730\u5305\u542b\u5728 \\(IP^3\\) \u7684\u4efb\u4f55\u4e00\u5f20\u5e73\u9762\u4e2d\uff0c\u800c\u662f\u4e0e\u4e00\u822c\u5e73\u9762\u6709\u4e09\u4e2a\u4e0d\u540c\u7684\u4ea4\u70b9 \u4e09\u6b21\u7ed5\u7ebf\u6709 12 \u4e2a\u81ea\u7531\u5ea6 \u6240\u6709\u975e\u9000\u5316\u7684\u4e09\u6b21\u7ed5\u7ebf\u90fd\u662f\u5c04\u5f71\u7b49\u4ef7\u7684 \u53d8\u6362\u7684\u5c42\u6b21 \u00b6 3 \u7ef4\u7a7a\u95f4\u53d8\u6362\u540c\u6837\u5177\u6709\u76f8\u5e94\u7684 2 \u7ef4\u7a7a\u95f4\u53d8\u6362 \u9ad8\u65af\u66f2\u7387 \uff1a\u5fae\u5206\u51e0\u4f55\u4e2d\uff0c\u66f2\u9762\u4e0a\u4e00\u70b9\u7684\u9ad8\u65af\u66f2\u7387\u662f\u8be5\u70b9\u4e3b\u66f2\u7387 \\(k_1\\) \u548c \\(k_2\\) \u7684\u4e58\u79ef\u3002\u5b83\u662f\u66f2\u7387\u7684\u5185\u5728\u5ea6\u91cf\uff0c\u4e5f\u5373\uff0c\u5b83\u7684\u503c\u53ea\u4f9d\u8d56\u4e8e\u66f2\u9762\u4e0a\u7684\u8ddd\u79bb\u5982\u4f55\u6d4b\u91cf\uff0c\u800c\u4e0d\u662f\u66f2\u9762\u5982\u4f55\u5d4c\u5165\u5230\u7a7a\u95f4\u3002 \u8f6c\u52a8\u5206\u89e3 \u4efb\u4f55\u5177\u4f53\u7684\u5e73\u79fb\u52a0\u65cb\u8f6c\u8fd0\u52a8\u90fd\u7b49\u4ef7\u4e8e\u7ed5\u4e00\u6839\u8f6c\u52a8\u8f74\u7684\u65cb\u8f6c\u52a0\u6cbf\u8be5\u8f6c\u52a8\u8f74\u7684\u5e73\u79fb\u3002\u8be5\u8f6c\u52a8\u8f74\u5e73\u884c\u4e8e\u539f\u6765\u7684\u65cb\u8f6c\u8f74\u3002 \u5e73\u79fb\u52a0\u7ed5\u6b63\u4ea4\u8f74\u7684\u65cb\u8f6c\u8fd0\u52a8(\u79f0\u5e73\u9762\u8fd0\u52a8)\u7b49\u4ef7\u4e8e\u4ec5\u4ec5\u7ed5\u67d0\u8f6c\u52a8\u8f74\u7684\u65cb\u8f6c\u3002 \u65e0\u7a77\u8fdc\u5e73\u9762 \u00b6 \u5728 3 \u7ef4\u7a7a\u95f4\u7684\u5c04\u5f71\u51e0\u4f55\u4e2d\uff0c\u4e0e \\(\\mathbf{I}_{\\infty}\\) \u7684\u865a\u5706\u70b9\u5bf9\u5e94\u7684\u51e0\u4f55\u5b9e\u4f53\u662f\u65e0\u7a77\u8fdc\u5e73\u9762 \\(\\mathbf{\\pi}_{\\infty}\\) \u548c\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf \\(\\Omega_\\infty\\) \u5728 3 \u7ef4\u4eff\u5c04\u7a7a\u95f4\u4e2d\uff0c\u65e0\u7a77\u8fdc\u5e73\u9762\u7684\u6807\u51c6\u4f4d\u7f6e\u662f \\(\\mathbf{\\pi}_\\infty=(0,0,0,1)^{\\top}\\) \uff0c \\(\\mathbf{\\pi}_\\infty\\) \u5305\u542b\u6240\u6709\u65b9\u5411 \\(\\mathbf{D}=(X_1,X_2,X_3,0)^{\\top}\\) \u5e76\u4e14\u53ef\u4ee5\u7528\u6765\u8bc6\u522b\u4eff\u5c04\u6027\u8d28 \u4e24\u5f20\u5e73\u9762\u76f8\u5e73\u884c\u7684\u5145\u8981\u6761\u4ef6\u662f\u5b83\u4eec\u7684\u4ea4\u7ebf\u5728 \\(\\mathbf{\\pi}_\\infty\\) \u4e0a \u5982\u679c\u4e00\u6761\u76f4\u7ebf\u4e0e\u53e6\u4e00\u6761\u76f4\u7ebf\u6216\u4e00\u5f20\u5e73\u9762\u76f8\u4ea4\u4e8e \\(\\mathbf{\\pi}_\\infty\\) \u4e0a\uff0c\u5219\u5b83\u4eec\u76f8\u5e73\u884c \u5728\u5c04\u5f71\u53d8\u6362 \\(H\\) \u4e0b\uff0c\u65e0\u7a77\u8fdc\u5e73\u9762 \\(\\mathbf{\\pi}_\\infty\\) \u662f\u4e0d\u52a8\u5e73\u9762\u7684\u5145\u8981\u6761\u4ef6\u662f \\(H\\) \u662f\u4e00\u4e2a\u4eff\u5c04\u53d8\u6362 \u4e00\u822c\u5730\u8bf4\uff0c\u5728\u4eff\u5c04\u53d8\u6362\u4e0b\u5e73\u9762 \\(\\mathbf{\\pi}_\\infty\\) \u662f\u6574\u4e2a\u96c6\u5408\u4e0d\u52a8\uff0c\u800c\u4e0d\u662f\u70b9\u70b9\u4e0d\u52a8 \u4ec5\u6709 \\(\\mathbf{\\pi}_\\infty\\) \u5728\u4efb\u4f55\u4eff\u5c04\u53d8\u6362\u4e0b\u4fdd\u6301\u4e0d\u52a8 \u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf \u00b6 \u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf \\(\\Omega_\\infty\\) \u662f\u5728 \\(\\pi_\\infty\\) \u4e0a\u4e00\u6761\uff08\u70b9\uff09\u4e8c\u6b21\u66f2\u7ebf\u3002\u5728\u5ea6\u91cf\u5750\u6807\u7cfb\u4e2d \\(\\pi_\\infty=(0,0,0,1)^{\\top}\\) \uff0c\u800c\u5728 \\(\\Omega_\\infty\\) \u4e0a\u7684\u70b9\u6ee1\u8db3\uff1a \\(\\left.\\begin{matrix} X_1^2+X_2^2+X_3^2 \\\\ X_4^2 \\end{matrix}\\right\\} = 0\\) \u5728\u5c04\u5f71\u53d8\u6362 \\(H\\) \u4e0b\uff0c\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf \\(\\Omega_\\infty\\) \u662f\u4e0d\u52a8\u4e8c\u6b21\u66f2\u7ebf\u7684\u5145\u8981\u6761\u4ef6\u662f \\(H\\) \u662f\u76f8\u4f3c\u53d8\u6362 \\(\\Omega_\\infty\\) \u5728\u4e00\u822c\u76f8\u4f3c\u53d8\u6362\u4e0b\u662f\u96c6\u5408\u4e0d\u61c2\uff0c\u800c\u4e0d\u662f\u70b9\u70b9\u4e0d\u52a8\u7684 \u6240\u6709\u7684\u5706\u4ea4 \\(\\Omega_\\infty\\) \u4e8e\u4e24\u70b9\uff0c\u8fd9\u4e24\u70b9\u662f\u865a\u5706\u70b9 \u6240\u6709\u7403\u9762\u4ea4 \\(\\pi_\\infty\\) \u4e8e \\(\\Omega_\\infty\\) \u5ea6\u91cf\u6027\u8d28 \uff1a\u4e00\u65e6 \\(\\Omega_\\infty\\) \u5728 3 \u7ef4\u5c04\u5f71\u7a7a\u95f4\u88ab\u8fa8\u8ba4\uff0c\u90a3\u4e48\u8bf8\u5982\u5939\u89d2\u548c\u76f8\u5bf9\u957f\u5ea6\u7b49\u5ea6\u6700\u6027\u8d28\u53ef\u4ee5\u88ab\u6d4b\u5b9a\u3002\u8bbe\u4e24\u6761\u76f4\u7ebf\u7684\u65b9\u5411\u4e3a \\(d_1\\) \u548c \\(d_2\\) \uff083 \u7ef4\u77e2\u91cf\uff09\uff0c\u5219 \\[ \\cos \\theta = \\frac{(\\mathbf{d}_1^{\\top} \\Omega_\\infty \\mathbf{d}_2)}{(\\mathbf{d}_1^{\\top} \\Omega_\\infty \\mathbf{d}_1)(\\mathbf{d}_2^{\\top} \\Omega_\\infty \\mathbf{d}_2)} \\] \u6b63\u4ea4\u4e0e\u914d\u6781 \uff1a\u5982\u679c \\(\\mathbf{d}_1^{\\top} \\Omega_\\infty \\mathbf{d}_2=0\\) \uff0c\u5219 \\(\\mathbf{d}_1\\) \u548c \\(\\mathbf{d}_2\\) \u76f8\u5782\u76f4\u3002\u56e0\u800c\u5782\u76f4\u6027\u53ef\u7531\u5173\u4e8e \\(\\Omega_\\infty\\) \u7684\u5171\u8f6d\u6027\u6765\u8868\u5f81 \u7edd\u5bf9\u5bf9\u5076\u4e8c\u6b21\u66f2\u9762 \u00b6 \u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf \\(\\Omega_\\infty\\) \u7684\u5bf9\u5076\u662f 3 \u7ef4\u7a7a\u95f4\u4e2d\u4e00\u79cd\u9000\u5316\u7684\u5bf9\u5076\u4e8c\u6b21\u66f2\u9762\uff0c\u79f0\u4e3a\u7edd\u5bf9\u5bf9\u5076\u4e8c\u6b21\u66f2\u9762\u5e76\u8bb0\u4e3a \\(Q_\\infty^*\\) \u3002\u4ece\u51e0\u4f55\u4e0a\u8bf4\uff0c \\(Q_\\infty^*\\) \u7531 \\(\\Omega_\\infty\\) \u7684\u5207\u5e73\u9762\u7ec4\u6210\uff0c\u5b83\u88ab\u79f0\u4e3a \u8fb9\u4e8c\u6b21\u66f2\u9762 \u3002\u5b83\u5728 3 \u7ef4\u5ea6\u91cf\u7a7a\u95f4\u7684\u6807\u51c6\u5f62\u5f0f\u662f\uff1a \\(Q_\\infty^* = \\begin{bmatrix} \\mathbf{I} & \\mathbf{0} \\\\ \\mathbf{0}^{\\top} & 0 \\end{bmatrix}\\) \u7edd\u5bf9\u5bf9\u5076\u4e8c\u6b21\u66f2\u9762 \\(Q_\\infty^*\\) \u4e0d\u52a8\u7684\u5145\u8981\u6761\u4ef6\u662f \\(H\\) \u662f\u76f8\u4f3c\u53d8\u6362 \u65e0\u7a77\u8fdc\u5e73\u9762 \\(\\pi_\\infty\\) \u662f \\(Q_\\infty^*\\) \u7684\u96f6\u77e2\u91cf \u4e24\u5f20\u5e73\u9762 \\(\\pi_1\\) \u548c \\(\\pi_2\\) \u4e4b\u95f4\u7684\u5939\u89d2\u7531\u4e0b\u5f0f\u7ed9\u51fa\uff1a \\[ \\cos \\theta = \\frac{\\mathbf{\\pi}_1^{\\top} Q_\\infty^* \\mathbf{\\pi}_2}{\\sqrt{(\\mathbf{\\pi}_1^{\\top} Q_\\infty^* \\mathbf{\\pi}_1)(\\mathbf{\\pi}_2^{\\top} Q_\\infty^* \\mathbf{\\pi}_2)}} \\]","title":"3D \u5c04\u5f71\u51e0\u4f55\u548c\u53d8\u6362"},{"location":"cv/mvg/pjt3d/#3d","text":"\u7ea6 2831 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f Abstract \u672c\u7ae0\u4e3b\u8981\u4ecb\u7ecd 3 \u7ef4\u5c04\u5f71\u7a7a\u95f4 \\(IP^3\\) \u7684\u6027\u8d28\u548c\u57fa\u672c\u8981\u7d20\u3002","title":"3D \u5c04\u5f71\u51e0\u4f55\u548c\u53d8\u6362"},{"location":"cv/mvg/pjt3d/#_1","text":"\u4e09\u7ef4\u7a7a\u95f4\u7684\u4e00\u70b9 \\(\\mathbf{X}\\) \u7528\u9f50\u6b21\u5750\u6807\u8868\u793a\u4e3a\u4e00\u4e2a 4 \u7ef4\u77e2\u91cf\uff0c\u9f50\u6b21\u77e2\u91cf \\(\\mathbf{X}=(X_1,X_2,X_3,X_4)^{\\top}\\) \u5f53 \\(X_4 \\ne 0\\) \u65f6\u8868\u793a\u4e3a \\(IR^3\\) \u4e2d\u975e\u9f50\u6b21\u5750\u6807\u4e3a \\((X,Y,Z)^{\\top}\\) \u7684\u70b9\uff0c\u5176\u4e2d \\(\\mathbf{X}=X_1/X_4,Y=X_2/X_4,Z=X_3/X_4\\) \u3002 \u5f53 \\(X_4=0\\) \u7684\u9f50\u6b21\u70b9\u8868\u793a\u65e0\u7a77\u8fdc\u70b9\u3002 \\(IR^3\\) \u4e0a\u7684\u5c04\u5f71\u53d8\u6362\u662f\u7531\u975e\u5947\u5f02 \\(4 \\times 4\\) \u77e9\u9635\u7ed9\u51fa\uff0c\u5b83\u662f\u5173\u4e8e\u9f50\u6b21 4 \u7ef4\u77e2\u91cf\u7684\u7ebf\u6027\u53d8\u6362\uff1a \\(\\mathbf{X}^\\prime=H\\mathbf{X}\\) \uff0c\u8be5\u6620\u5c04\u662f\u4fdd\u7ebf\u53d8\u6362\uff08\u76f4\u7ebf\u88ab\u6620\u5c04\u5230\u76f4\u7ebf\uff09\u3002","title":"\u70b9\u548c\u5c04\u5f71\u53d8\u6362"},{"location":"cv/mvg/pjt3d/#_2","text":"","title":"\u5e73\u9762\u3001\u76f4\u7ebf\u548c\u4e8c\u6b21\u66f2\u9762\u7684\u8868\u793a\u548c\u53d8\u6362"},{"location":"cv/mvg/pjt3d/#_3","text":"\u5e73\u9762\u7684\u9f50\u6b21\u8868\u793a\u4e3a \\(\\mathbf{\\pi}=(\\pi_1, \\pi_2, \\pi_3, \\pi_4)^{\\top}\\) \u3002 \u70b9 \\(\\mathbf{X}\\) \u5728\u5e73\u9762 \\(\\mathbf{\\pi}\\) \u4e0a\u5219\uff1a \\(\\mathbf{\\pi}^{\\top}\\mathbf{X}=0\\) \u8054\u5408\u4e0e\u5173\u8054\u5173\u7cfb \u5e73\u9762\u53ef\u7531\u4e00\u822c\u4f4d\u7f6e\u7684\u4e09\u4e2a\u70b9\u6216\u4e00\u6761\u76f4\u7ebf\u4e0e\u4e00\u4e2a\u70b9\u7684\u8054\u5408\u6765\u552f\u4e00\u786e\u5b9a\uff08\u4e00\u822c\u4f4d\u7f6e\u6307\u4e09\u70b9\u4e0d\u5171\u7ebf\u6216\u5728\u540e\u4e00\u79cd\u60c5\u5f62\u4e0b\u6307\u70b9\u4e0d\u5728\u76f4\u7ebf\u4e0a\uff09 \u4e24\u5f20\u4e0d\u540c\u7684\u5e73\u9762\u76f8\u4ea4\u4e8e\u552f\u4e00\u7684\u76f4\u7ebf \u4e09\u5f20\u4e0d\u540c\u7684\u5e73\u9762\u76f8\u4ea4\u4e8e\u552f\u4e00\u7684\u70b9 \u4e09\u70b9\u786e\u5b9a\u4e00\u5f20\u5e73\u9762 \u786e\u5b9a\u5e73\u9762\u7684\u4e09\u4e2a\u70b9\u662f \\(\\mathbf{X}_1=(\\hat{\\mathbf{X}_1})^{\\top}\u3001\\mathbf{X}_2=(\\hat{\\mathbf{X}_2})^{\\top}\u3001\\mathbf{X}_3=(\\hat{\\mathbf{X}_3})^{\\top}\\) \uff0c\u5219 \\[ \\mathbf{\\pi}=((\\hat{\\mathbf{X}_1}-\\hat{\\mathbf{X}_3}) \\times (\\hat{\\mathbf{X}_2}-\\hat{\\mathbf{X}_3}), -\\hat{\\mathbf{X}_3}^{\\top}(\\hat{\\mathbf{X}_1} \\times \\hat{\\mathbf{X}_2}))^{\\top} \\] \u4e09\u5e73\u9762\u786e\u5b9a\u4e00\u70b9 \u4e09\u5e73\u9762 \\(\\mathbf{\\pi}_i\\) \u7684\u4ea4\u70b9 \\(\\mathbf{X}\\) \u53ef\u901a\u8fc7\u6c42\u4ee5\u4e09\u5f20\u5e73\u9762\u4e3a\u884c\u7684 \\(3 \\times 4\\) \u77e9\u9635\u7684\uff08\u53f3\uff09\u96f6\u7a7a\u95f4\u76f4\u63a5\u8ba1\u7b97\u51fa\u6765\uff1a \\[ \\begin{bmatrix} \\mathbf{\\pi}_1^{\\top}\\\\ \\mathbf{\\pi}_2^{\\top}\\\\ \\mathbf{\\pi}_3^{\\top} \\end{bmatrix} \\mathbf{X}=\\mathbf{0} \\] \u5c04\u5f71\u53d8\u6362 \u5728\u70b9\u53d8\u6362 \\(\\mathbf{X}^\\prime=H\\mathbf{X}\\) \u4e0b\uff0c\u5e73\u9762\u53d8\u6362\u4e3a \\(\\mathbf{\\pi}^\\prime=H^{-\\top}\\mathbf{\\pi}\\) \u5e73\u9762\u4e0a\u7684\u70b9\u7684\u53c2\u6570\u8868\u793a \u5728\u5e73\u9762 \\(\\mathbf{\\pi}\\) \u4e0a\u7684\u70b9 \\(\\mathbf{X}\\) \u53ef\u4ee5\u5199\u6210 \\(\\mathbf{X}=M\\mathbf{x}\\) \u5176\u4e2d \\(4 \\times 3\\) \u77e9\u9635 \\(M\\) \u7684\u5217\u751f\u6210 \\(\\mathbf{\\pi}^{\\top}\\) \u7684\u79e9\u4e3a 3 \u7684\u96f6\u7a7a\u95f4\uff0c\u5373 \\(\\mathbf{\\pi}^{\\top} M=\\mathbf{0}^{\\top}\\)","title":"\u5e73\u9762"},{"location":"cv/mvg/pjt3d/#_4","text":"\u96f6\u7a7a\u95f4 \u4e00\u4e2a\u7b97\u5b50 \\(\\mathbf{A}\\) \u7684\u96f6\u7a7a\u95f4\u662f \\(\\mathbf{A}\\mathbf{v}=\\mathbf{0}\\) \u7684\u6240\u6709\u89e3 \\(\\mathbf{v}\\) \u7684\u96c6\u5408\u3002\u5b83\u4e5f\u53eb\u505a \\(\\mathbf{A}\\) \u7684\u6838\uff0c\u6838\u7a7a\u95f4\u3002\u5982\u679c\u7b97\u5b50\u662f\u5728\u5411\u91cf\u7a7a\u95f4\u4e0a\u7684\u7ebf\u6027\u7b97\u5b50\uff0c\u96f6\u7a7a\u95f4\u5c31\u662f\u7ebf\u6027\u5b50\u7a7a\u95f4\u3002\u56e0\u6b64\u96f6\u7a7a\u95f4\u4e5f\u662f\u5411\u91cf\u7a7a\u95f4\u3002 \u751f\u6210\u5b50\u7a7a\u95f4 \u8bbe \\(\\alpha_1, \\alpha_2, ..., \\alpha_m\\) \u662f \\(R^m\\) \u4e2d\u4efb\u4e00\u7ec4\u5411\u91cf\u3002\u8bb0 \\(\\alpha_1, \\alpha_2, ..., \\alpha_m\\) \u7684\u6240\u6709\u7ebf\u6027\u7ec4\u5408\u7684\u96c6\u5408\u4e3a \\(span(\\alpha_1, \\alpha_2, ..., \\alpha_m)\\) \uff0c\u5373 \\(span(\\alpha_1, \\alpha_2, ..., \\alpha_m)=\\{k_1\\alpha_1+k_2\\alpha_2+...+k_m\\alpha_m | k_i \\in R, i=1,2,...,m\\}\\) \uff0c\u79f0 \\(span(\\alpha_1, \\alpha_2, ..., \\alpha_m)\\) \u4e3a\u5411\u91cf\u7ec4 \\(\\alpha_1, \\alpha_2, ..., \\alpha_m\\) \u751f\u6210\u7684\u5b50\u7a7a\u95f4\u3002 \u96f6\u7a7a\u95f4\u4e0e\u751f\u6210\u5b50\u7a7a\u95f4\u8868\u793a \u5047\u5b9a \\(\\mathbf{A}\u3001\\mathbf{B}\\) \u662f\u4e24\uff08\u4e0d\u91cd\u5408\uff09\u7684\u7a7a\u95f4\u70b9\uff0c\u90a3\u4e48\u8fde\u63a5\u8fd9\u4e24\u70b9\u7684\u76f4\u7ebf\u7531\u4e00\u4e2a \\(2 \\times 4\\) \u77e9\u9635 \\(W\\) \u7684\u884c\u7684\u751f\u6210\u5b50\u7a7a\u95f4\u8868\u793a\uff0c \\(W=\\begin{bmatrix} \\mathbf{A}^{\\top} \\\\ \\mathbf{B}^{\\top} \\end{bmatrix}\\) \\(W^{\\top}\\) \u7684\u751f\u6210\u5b50\u7a7a\u95f4\u662f\u5728\u76f4\u7ebf \\(\\lambda \\mathbf{A}+\\mu \\mathbf{B}\\) \u4e0a\u7684\u70b9\u675f \\(W\\) \u7684 2 \u7ef4\u53f3\u96f6\u7a7a\u95f4\u7684\u751f\u6210\u5b50\u7a7a\u95f4\u662f\u4ee5\u76f4\u7ebf\u4e3a\u8f74\u7684\u5e73\u9762\u675f \u4e00\u6761\u76f4\u7ebf\u7684\u5bf9\u5076\u8868\u793a\u662f\u4e24\u5e73\u9762 \\(\\mathbf{P}\uff0c\\mathbf{Q}\\) \u7684\u4ea4\u7ebf\uff0c\u8be5\u76f4\u7ebf\u8868\u793a\u4e3a\u77e9\u9635 \\(W^*=\\begin{bmatrix} \\mathbf{P}^{\\top} \\\\ \\mathbf{Q}^{\\top} \\end{bmatrix}\\) \\(W^{*\\top}\\) \u7684\u751f\u6210\u5b50\u7a7a\u95f4\u662f\u4ee5\u8be5\u76f4\u7ebf\u4e3a\u8f74\u7684\u5e73\u9762\u675f \\(\\lambda^\\prime\\mathbf{P}+\\mu^\\prime\\mathbf{Q}\\) \\(W^{*\\top}\\) \u7684 2 \u7ef4\u96f6\u7a7a\u95f4\u7684\u751f\u6210\u5b50\u7a7a\u95f4\u662f\u8be5\u76f4\u7ebf\u4e0a\u7684\u70b9\u675f \u8fd9\u4e24\u79cd\u8868\u793a\u4ee5 \\(W^*W^{\\top}=WW^{*\\top}=0_{2\\times 2}\\) \u76f8\u8054\u7cfb Pl\u00fccker \u77e9\u9635 \u8fd9\u91cc\u4e00\u6761\u76f4\u7ebf\u7531 \\(4 \\times 4\\) \u53cd\u5bf9\u79f0\u9f50\u6b21\u77e9\u9635\u8868\u793a\u3002\u8fde\u63a5\u4e24\u70b9 \\(\\mathbf{A}, \\mathbf{B}\\) \u7684\u76f4\u7ebf\u7531\u77e9\u9635 \\(\\mathbf{L}\\) \u8868\u793a\uff0c\u5176\u5143\u7d20\u4e3a\uff1a \\(l_{ij}=A_iB_j-B_iA_j\\) \uff0c\u6216\u7528\u77e2\u91cf\u8bb0\u53f7\u7b49\u4ef7\u4e8e\u8868\u793a\u4e3a \\(L=\\mathbf{A}\\mathbf{B}^{\\top}-\\mathbf{B}\\mathbf{A}^{\\top}\\) \u6027\u8d28 \\(L\\) \u7684\u79e9\u4e3a 2 \u8be5\u8868\u793a\u5177\u6709\u63cf\u8ff0\u4e00\u6761\u76f4\u7ebf\u6240\u9700\u8981\u7684 4 \u4e2a\u81ea\u7531\u5ea6 \u77e9\u9635 \\(L\\) \u4e0e\u7528\u6765\u786e\u5b9a\u5b83\u7684\u70b9 \\(\\mathbf{A}, \\mathbf{B}\\) \u65e0\u5173 \u5728\u70b9\u53d8\u6362 \\(\\mathbf{X}^\\prime=H\\mathbf{X}\\) \u4e0b\uff0c\u8be5\u77e9\u9635\u53d8\u6362\u4e3a \\(L^\\prime=HLH^{\\top}\\) \u65f6\uff0c\u5373\u5b83\u662f\u4e00\u4e2a\u9636\u4e3a 2 \u7684\u5f20\u91cf \u7531\u4e24\u5e73\u9762 \\(\\mathbf{P}, \\mathbf{Q}\\) \u7684\u4ea4\u7ebf\u786e\u5b9a\u7684\u76f4\u7ebf\u7684\u5bf9\u5076 Pl\u00fccker \u8868\u793a\u4e3a \\(L^*\\) \u4e3a \\(L^*=\\mathbf{P}\\mathbf{Q}^{\\top}-\\mathbf{Q}\\mathbf{P}^{\\top}\\) \u7531\u70b9 \\(\\mathbf{X}\\) \u548c\u76f4\u7ebf \\(L\\) \u8054\u5408\u800c\u786e\u5b9a\u7684\u5e73\u9762\u4e3a \\(\\mathbf{\\pi}=L^*\\mathbf{X}\\) \uff0c\u5e76\u4e14 \\(L^*\\mathbf{X}=0\\) \u7684\u5145\u8981\u6761\u4ef6\u662f \\(\\mathbf{X}\\) \u5728 \\(L\\) \u4e0a \u7531\u76f4\u7ebf \\(L\\) \u548c\u5e73\u9762 \\(\\mathbf{\\pi}\\) \u76f8\u4ea4\u800c\u786e\u5b9a\u7684\u70b9\u4e3a \\(\\mathbf{X}=L\\mathbf{\\pi}\\) \uff0c\u5e76\u4e14 \\(L\\mathbf{\\pi}=\\mathbf{0}\\) \u7684\u5145\u8981\u6761\u4ef6\u662f \\(L\\) \u5728 \\(\\mathbf{\\pi}\\) \u4e0a Pl\u00fccker \u76f4\u7ebf\u5750\u6807 Pl\u00fccker \u76f4\u7ebf\u5750\u6807\u662f \\(4 \\times 4\\) \u53cd\u5bf9\u79f0 Pl\u00fccker \u77e9\u9635 \\(L\\) \u7684\u516d\u4e2a\u975e\u96f6\u5143\u7d20\uff0c\u5373 \\(\\mathcal{L}=\\{l_{12},l_{13},l_{14},l_{23},l_{42},l_{34}\\}\\) \u7531\u4e8e \\(\\det{L}=0\\) \uff0c\u6240\u4ee5\u5750\u6807\u6ee1\u8db3 \\(l_{12}l_{34}+l_{13}l_{42}+l_{14}l_{23}=0\\) \u4e24\u6761\u76f4\u7ebf \\(\\mathcal{L}\\) \u548c \\(\\hat{\\mathcal{L}}\\) \u5171\u9762\uff08\u56e0\u800c\u76f8\u4ea4\uff09\u7684\u5145\u8981\u6761\u4ef6\u662f \\((\\mathcal{L} | \\hat{\\mathcal{L}})=0\\) \u5982\u679c \\((\\mathcal{L} | \\hat{\\mathcal{L}})=0\\) \uff0c\u5219 6 \u7ef4\u77e2\u91cf \\(\\mathcal{L}\\) \u4ec5\u8868\u793a \\(IP^3\\) \u4e2d\u7684\u4e00\u6761\u76f4\u7ebf \u5047\u5b9a\u4e24\u6761\u76f4\u7ebf \\(\\mathcal{L}, \\hat{\\mathcal{L}}\\) \u5206\u522b\u4e3a\u5e73\u9762 \\(\\mathbf{P}, \\mathbf{Q}\\) \u548c \\(\\hat{\\mathbf{P}}, \\hat{\\mathbf{Q}}\\) \u7684\u4ea4\u7ebf\uff0c\u90a3\u4e48 \\((\\mathcal{L} | \\hat{\\mathcal{L}})=\\det [\\mathbf{P}, \\mathbf{Q}, \\hat{\\mathbf{P}}, \\hat{\\mathbf{Q}}]\\) \uff0c\u540c\u7406\uff0c\u4e24\u6761\u76f4\u7ebf\u76f8\u4ea4\u7684\u5145\u8981\u6761\u4ef6\u5c31\u662f \\((\\mathcal{L} | \\hat{\\mathcal{L}})=0\\) \u5982\u679c \\(\\mathcal{L}\\) \u662f\u4e24\u5e73\u9762 \\(\\mathbf{P}, \\mathbf{Q}\\) \u7684\u4ea4\u7ebf\uff0c\u800c \\(\\hat{\\mathcal{L}}\\) \u662f\u4e24\u70b9 \\(\\mathbf{A}, \\mathbf{B}\\) \u7684\u8fde\u7ebf\uff0c\u90a3\u4e48 \\((\\mathcal{L} | \\hat{\\mathcal{L}})=(\\mathbf{P}^{\\top}\\mathbf{A})(\\mathbf{Q}^{\\top}\\mathbf{B})-(\\mathbf{Q}^{\\top}\\mathbf{A})(\\mathbf{P}^{\\top}\\mathbf{B})\\)","title":"\u76f4\u7ebf"},{"location":"cv/mvg/pjt3d/#_5","text":"\\(IP^3\\) \u4e2d\uff0c\u4e8c\u6b21\u66f2\u9762\u7531\u4e0b\u5217\u65b9\u7a0b\u5b9a\u4e49\uff1a \\(\\mathbf{X}^{\\top} Q\\mathbf{X}=0\\) \uff0c\u5176\u4e2d \\(Q\\) \u662f\u4e00\u4e2a \\(4 \\times 4\\) \u7684\u5bf9\u79f0\u77e9\u9635 \u4e2a\u4e8c\u6b21\u66f2\u9762\u6709 9 \u4e2a\u81ea\u7531\u5ea6 \u4e00\u822c\u4f4d\u7f6e\u4e0a\u7684\u4e5d\u4e2a\u70b9\u786e\u5b9a\u4e00\u4e2a\u4e8c\u6b21\u66f2\u9762 \u5982\u679c\u77e9\u9635 \\(Q\\) \u662f\u5947\u5f02\u7684\uff0c\u90a3\u4e48\u4e8c\u6b21\u66f2\u9762\u662f\u9000\u5316\u7684\uff0c\u5e76\u53ef\u4ee5\u7531\u8f83\u5c11\u7684\u70b9\u6765\u786e\u5b9a \u4e8c\u6b21\u66f2\u9762\u5b9a\u4e49\u4e86\u70b9\u548c\u5e73\u9762\u4e4b\u95f4\u7684\u4e00\u79cd\u914d\u6781\uff0c\u7c7b\u4f3c\u4e8e\u4e8c\u6b21\u66f2\u7ebf\u5728\u70b9\u548c\u76f4\u7ebf\u4e4b\u95f4\u5b9a\u4e49\u7684\u914d\u6781\uff0c\u5e73\u9762 \\(\\mathbf{\\pi}=Q\\mathbf{X}\\) \u79f0\u4e3a\u662f \\(\\mathbf{X}\\) \u5173\u4e8e \\(Q\\) \u7684\u6781\u5e73\u9762\uff0c\u5f53 \\(Q\\) \u4e3a\u975e\u5947\u5f02\u5e76\u4e14 \\(\\mathbf{X}\\) \u5728\u4e8c\u6b21\u66f2\u9762\u4e4b\u5916\u65f6\uff0c\u6781\u5e73\u9762\u7531\u8fc7 \\(\\mathbf{X}\\) \u4e14\u4e0e \\(Q\\) \u76f8\u5207\u7684\u5c04\u7ebf\u7ec4\u6210\u7684\u9525\u4e0e \\(Q\\) \u60f3\u63a5\u89e6\u7684\u70b9\u6765\u5b9a\u4e49\u3002\u5982\u679c \\(\\mathbf{X}\\) \u5728 \\(Q\\) \u4e0a\uff0c\u90a3\u4e48 \\(Q\\mathbf{X}\\) \u662f \\(Q\\) \u5728\u70b9 \\(\\mathbf{X}\\) \u7684\u5207\u5e73\u9762 \u5e73\u9762 \\(\\mathbf{\\pi}\\) \u4e0e\u4e8c\u6b21\u66f2\u9762 \\(Q\\) \u7684\u4ea4\u7ebf\u662f\u4e8c\u6b21\u66f2\u7ebf \\(C\\) \u5728\u70b9\u53d8\u6362 \\(\\mathbf{X}^\\prime=H\\mathbf{X}\\) \u4e0b\uff0c\uff08\u70b9\uff09\u4e8c\u6b21\u66f2\u9762\u53d8\u6362\u4e3a \\(Q^\\prime=H^{-\\top}QH^{-1}\\)","title":"\u4e8c\u6b21\u66f2\u9762\u4e0e\u5bf9\u5076\u4e8c\u6b21\u66f2\u9762"},{"location":"cv/mvg/pjt3d/#_6","text":"\u5bf9\u89d2\u77e9\u9635 \\(D\\) \u7684\u7b26\u53f7\u5dee\uff0c\u8bb0\u4e3a \\(\\sigma(D)\\) \uff0c\u5b9a\u4e49\u4e3a \\(D\\) \u4e2d +1 \u7684\u4e2a\u6570\u4e0e -1 \u7684\u4e2a\u6570\u7684\u5dee\u503c","title":"\u4e8c\u6b21\u66f2\u9762\u7684\u5206\u7c7b"},{"location":"cv/mvg/pjt3d/#_7","text":"\u4e09\u6b21\u7ed5\u7ebf\u53ef\u4ee5\u770b\u6210 2D \u4e8c\u6b21\u66f2\u7ebf\u7684 3 \u7ef4\u7c7b\u63a8\u3002\u4e00\u6761\u4e09\u6b21\u7ed5\u7ebf\u5b9a\u4e49\u4e3a \\(IP^3\\) \u4e2d\u7684\u4e00\u6761\u66f2\u7ebf\uff0c\u5b83\u7684\u53c2\u6570\u5f62\u5f0f\u5982\u4e0b\uff1a \\[ \\begin{bmatrix} x_1 \\\\ x_2 \\\\ x_3 \\\\ x_4 \\end{bmatrix} = A \\begin{bmatrix} 1 \\\\ \\theta \\\\ \\theta^2 \\\\ \\theta^3 \\end{bmatrix} = \\begin{bmatrix} a_{11}+a_{12}\\theta+a_{13}\\theta^2+a_{14}\\theta^3 \\\\ a_{21}+a_{22}\\theta+a_{23}\\theta^2+a_{24}\\theta^3 \\\\ a_{31}+a_{32}\\theta+a_{33}\\theta^2+a_{34}\\theta^3 \\\\ a_{41}+a_{42}\\theta+a_{43}\\theta^2+a_{44}\\theta^3 \\end{bmatrix} \\] \u6027\u8d28 \u4ee4 \\(\\mathbf{c}\\) \u4e3a\u4e00\u6761\u975e\u5947\u5f02\u4e09\u6b21\u7ed5\u7ebf\u3002\u90a3\u4e48 \\(\\mathbf{c}\\) \u4e0d\u6574\u4e2a\u5730\u5305\u542b\u5728 \\(IP^3\\) \u7684\u4efb\u4f55\u4e00\u5f20\u5e73\u9762\u4e2d\uff0c\u800c\u662f\u4e0e\u4e00\u822c\u5e73\u9762\u6709\u4e09\u4e2a\u4e0d\u540c\u7684\u4ea4\u70b9 \u4e09\u6b21\u7ed5\u7ebf\u6709 12 \u4e2a\u81ea\u7531\u5ea6 \u6240\u6709\u975e\u9000\u5316\u7684\u4e09\u6b21\u7ed5\u7ebf\u90fd\u662f\u5c04\u5f71\u7b49\u4ef7\u7684","title":"\u4e09\u6b21\u7ed5\u7ebf"},{"location":"cv/mvg/pjt3d/#_8","text":"3 \u7ef4\u7a7a\u95f4\u53d8\u6362\u540c\u6837\u5177\u6709\u76f8\u5e94\u7684 2 \u7ef4\u7a7a\u95f4\u53d8\u6362 \u9ad8\u65af\u66f2\u7387 \uff1a\u5fae\u5206\u51e0\u4f55\u4e2d\uff0c\u66f2\u9762\u4e0a\u4e00\u70b9\u7684\u9ad8\u65af\u66f2\u7387\u662f\u8be5\u70b9\u4e3b\u66f2\u7387 \\(k_1\\) \u548c \\(k_2\\) \u7684\u4e58\u79ef\u3002\u5b83\u662f\u66f2\u7387\u7684\u5185\u5728\u5ea6\u91cf\uff0c\u4e5f\u5373\uff0c\u5b83\u7684\u503c\u53ea\u4f9d\u8d56\u4e8e\u66f2\u9762\u4e0a\u7684\u8ddd\u79bb\u5982\u4f55\u6d4b\u91cf\uff0c\u800c\u4e0d\u662f\u66f2\u9762\u5982\u4f55\u5d4c\u5165\u5230\u7a7a\u95f4\u3002 \u8f6c\u52a8\u5206\u89e3 \u4efb\u4f55\u5177\u4f53\u7684\u5e73\u79fb\u52a0\u65cb\u8f6c\u8fd0\u52a8\u90fd\u7b49\u4ef7\u4e8e\u7ed5\u4e00\u6839\u8f6c\u52a8\u8f74\u7684\u65cb\u8f6c\u52a0\u6cbf\u8be5\u8f6c\u52a8\u8f74\u7684\u5e73\u79fb\u3002\u8be5\u8f6c\u52a8\u8f74\u5e73\u884c\u4e8e\u539f\u6765\u7684\u65cb\u8f6c\u8f74\u3002 \u5e73\u79fb\u52a0\u7ed5\u6b63\u4ea4\u8f74\u7684\u65cb\u8f6c\u8fd0\u52a8(\u79f0\u5e73\u9762\u8fd0\u52a8)\u7b49\u4ef7\u4e8e\u4ec5\u4ec5\u7ed5\u67d0\u8f6c\u52a8\u8f74\u7684\u65cb\u8f6c\u3002","title":"\u53d8\u6362\u7684\u5c42\u6b21"},{"location":"cv/mvg/pjt3d/#_9","text":"\u5728 3 \u7ef4\u7a7a\u95f4\u7684\u5c04\u5f71\u51e0\u4f55\u4e2d\uff0c\u4e0e \\(\\mathbf{I}_{\\infty}\\) \u7684\u865a\u5706\u70b9\u5bf9\u5e94\u7684\u51e0\u4f55\u5b9e\u4f53\u662f\u65e0\u7a77\u8fdc\u5e73\u9762 \\(\\mathbf{\\pi}_{\\infty}\\) \u548c\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf \\(\\Omega_\\infty\\) \u5728 3 \u7ef4\u4eff\u5c04\u7a7a\u95f4\u4e2d\uff0c\u65e0\u7a77\u8fdc\u5e73\u9762\u7684\u6807\u51c6\u4f4d\u7f6e\u662f \\(\\mathbf{\\pi}_\\infty=(0,0,0,1)^{\\top}\\) \uff0c \\(\\mathbf{\\pi}_\\infty\\) \u5305\u542b\u6240\u6709\u65b9\u5411 \\(\\mathbf{D}=(X_1,X_2,X_3,0)^{\\top}\\) \u5e76\u4e14\u53ef\u4ee5\u7528\u6765\u8bc6\u522b\u4eff\u5c04\u6027\u8d28 \u4e24\u5f20\u5e73\u9762\u76f8\u5e73\u884c\u7684\u5145\u8981\u6761\u4ef6\u662f\u5b83\u4eec\u7684\u4ea4\u7ebf\u5728 \\(\\mathbf{\\pi}_\\infty\\) \u4e0a \u5982\u679c\u4e00\u6761\u76f4\u7ebf\u4e0e\u53e6\u4e00\u6761\u76f4\u7ebf\u6216\u4e00\u5f20\u5e73\u9762\u76f8\u4ea4\u4e8e \\(\\mathbf{\\pi}_\\infty\\) \u4e0a\uff0c\u5219\u5b83\u4eec\u76f8\u5e73\u884c \u5728\u5c04\u5f71\u53d8\u6362 \\(H\\) \u4e0b\uff0c\u65e0\u7a77\u8fdc\u5e73\u9762 \\(\\mathbf{\\pi}_\\infty\\) \u662f\u4e0d\u52a8\u5e73\u9762\u7684\u5145\u8981\u6761\u4ef6\u662f \\(H\\) \u662f\u4e00\u4e2a\u4eff\u5c04\u53d8\u6362 \u4e00\u822c\u5730\u8bf4\uff0c\u5728\u4eff\u5c04\u53d8\u6362\u4e0b\u5e73\u9762 \\(\\mathbf{\\pi}_\\infty\\) \u662f\u6574\u4e2a\u96c6\u5408\u4e0d\u52a8\uff0c\u800c\u4e0d\u662f\u70b9\u70b9\u4e0d\u52a8 \u4ec5\u6709 \\(\\mathbf{\\pi}_\\infty\\) \u5728\u4efb\u4f55\u4eff\u5c04\u53d8\u6362\u4e0b\u4fdd\u6301\u4e0d\u52a8","title":"\u65e0\u7a77\u8fdc\u5e73\u9762"},{"location":"cv/mvg/pjt3d/#_10","text":"\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf \\(\\Omega_\\infty\\) \u662f\u5728 \\(\\pi_\\infty\\) \u4e0a\u4e00\u6761\uff08\u70b9\uff09\u4e8c\u6b21\u66f2\u7ebf\u3002\u5728\u5ea6\u91cf\u5750\u6807\u7cfb\u4e2d \\(\\pi_\\infty=(0,0,0,1)^{\\top}\\) \uff0c\u800c\u5728 \\(\\Omega_\\infty\\) \u4e0a\u7684\u70b9\u6ee1\u8db3\uff1a \\(\\left.\\begin{matrix} X_1^2+X_2^2+X_3^2 \\\\ X_4^2 \\end{matrix}\\right\\} = 0\\) \u5728\u5c04\u5f71\u53d8\u6362 \\(H\\) \u4e0b\uff0c\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf \\(\\Omega_\\infty\\) \u662f\u4e0d\u52a8\u4e8c\u6b21\u66f2\u7ebf\u7684\u5145\u8981\u6761\u4ef6\u662f \\(H\\) \u662f\u76f8\u4f3c\u53d8\u6362 \\(\\Omega_\\infty\\) \u5728\u4e00\u822c\u76f8\u4f3c\u53d8\u6362\u4e0b\u662f\u96c6\u5408\u4e0d\u61c2\uff0c\u800c\u4e0d\u662f\u70b9\u70b9\u4e0d\u52a8\u7684 \u6240\u6709\u7684\u5706\u4ea4 \\(\\Omega_\\infty\\) \u4e8e\u4e24\u70b9\uff0c\u8fd9\u4e24\u70b9\u662f\u865a\u5706\u70b9 \u6240\u6709\u7403\u9762\u4ea4 \\(\\pi_\\infty\\) \u4e8e \\(\\Omega_\\infty\\) \u5ea6\u91cf\u6027\u8d28 \uff1a\u4e00\u65e6 \\(\\Omega_\\infty\\) \u5728 3 \u7ef4\u5c04\u5f71\u7a7a\u95f4\u88ab\u8fa8\u8ba4\uff0c\u90a3\u4e48\u8bf8\u5982\u5939\u89d2\u548c\u76f8\u5bf9\u957f\u5ea6\u7b49\u5ea6\u6700\u6027\u8d28\u53ef\u4ee5\u88ab\u6d4b\u5b9a\u3002\u8bbe\u4e24\u6761\u76f4\u7ebf\u7684\u65b9\u5411\u4e3a \\(d_1\\) \u548c \\(d_2\\) \uff083 \u7ef4\u77e2\u91cf\uff09\uff0c\u5219 \\[ \\cos \\theta = \\frac{(\\mathbf{d}_1^{\\top} \\Omega_\\infty \\mathbf{d}_2)}{(\\mathbf{d}_1^{\\top} \\Omega_\\infty \\mathbf{d}_1)(\\mathbf{d}_2^{\\top} \\Omega_\\infty \\mathbf{d}_2)} \\] \u6b63\u4ea4\u4e0e\u914d\u6781 \uff1a\u5982\u679c \\(\\mathbf{d}_1^{\\top} \\Omega_\\infty \\mathbf{d}_2=0\\) \uff0c\u5219 \\(\\mathbf{d}_1\\) \u548c \\(\\mathbf{d}_2\\) \u76f8\u5782\u76f4\u3002\u56e0\u800c\u5782\u76f4\u6027\u53ef\u7531\u5173\u4e8e \\(\\Omega_\\infty\\) \u7684\u5171\u8f6d\u6027\u6765\u8868\u5f81","title":"\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf"},{"location":"cv/mvg/pjt3d/#_11","text":"\u7edd\u5bf9\u4e8c\u6b21\u66f2\u7ebf \\(\\Omega_\\infty\\) \u7684\u5bf9\u5076\u662f 3 \u7ef4\u7a7a\u95f4\u4e2d\u4e00\u79cd\u9000\u5316\u7684\u5bf9\u5076\u4e8c\u6b21\u66f2\u9762\uff0c\u79f0\u4e3a\u7edd\u5bf9\u5bf9\u5076\u4e8c\u6b21\u66f2\u9762\u5e76\u8bb0\u4e3a \\(Q_\\infty^*\\) \u3002\u4ece\u51e0\u4f55\u4e0a\u8bf4\uff0c \\(Q_\\infty^*\\) \u7531 \\(\\Omega_\\infty\\) \u7684\u5207\u5e73\u9762\u7ec4\u6210\uff0c\u5b83\u88ab\u79f0\u4e3a \u8fb9\u4e8c\u6b21\u66f2\u9762 \u3002\u5b83\u5728 3 \u7ef4\u5ea6\u91cf\u7a7a\u95f4\u7684\u6807\u51c6\u5f62\u5f0f\u662f\uff1a \\(Q_\\infty^* = \\begin{bmatrix} \\mathbf{I} & \\mathbf{0} \\\\ \\mathbf{0}^{\\top} & 0 \\end{bmatrix}\\) \u7edd\u5bf9\u5bf9\u5076\u4e8c\u6b21\u66f2\u9762 \\(Q_\\infty^*\\) \u4e0d\u52a8\u7684\u5145\u8981\u6761\u4ef6\u662f \\(H\\) \u662f\u76f8\u4f3c\u53d8\u6362 \u65e0\u7a77\u8fdc\u5e73\u9762 \\(\\pi_\\infty\\) \u662f \\(Q_\\infty^*\\) \u7684\u96f6\u77e2\u91cf \u4e24\u5f20\u5e73\u9762 \\(\\pi_1\\) \u548c \\(\\pi_2\\) \u4e4b\u95f4\u7684\u5939\u89d2\u7531\u4e0b\u5f0f\u7ed9\u51fa\uff1a \\[ \\cos \\theta = \\frac{\\mathbf{\\pi}_1^{\\top} Q_\\infty^* \\mathbf{\\pi}_2}{\\sqrt{(\\mathbf{\\pi}_1^{\\top} Q_\\infty^* \\mathbf{\\pi}_1)(\\mathbf{\\pi}_2^{\\top} Q_\\infty^* \\mathbf{\\pi}_2)}} \\]","title":"\u7edd\u5bf9\u5bf9\u5076\u4e8c\u6b21\u66f2\u9762"},{"location":"cv/pcr/","text":"\u70b9\u4e91\u914d\u51c6 \u00b6 Abstract \u70b9\u4e91\u914d\u51c6\u662f\u6211\u8bfb\u7814\u65f6\u7684\u7814\u7a76\u65b9\u5411\uff0c\u4e3b\u8981\u4e3a\u81ea\u76d1\u7763\u4ee5\u53ca\u7528\u4e8e\u8154\u5185\u73af\u5883 \u9664\u4e86\u4f20\u7edf\u65b9\u6cd5ICP\u4e4b\u5916\uff0c\u4e3b\u8981\u65b9\u6cd5\u6709\u4e24\u79cd\uff1a \u7aef\u5230\u7aef \u63d0\u53d6\u7279\u5f81\u70b9 Table of Contents \u00b6 \u524d\u7f6e\u77e5\u8bc6 ICP Reference \u00b6 \u5b66\u4e60\u4e09\u7ef4\u70b9\u4e91\u914d\u51c6","title":"\u70b9\u4e91\u914d\u51c6"},{"location":"cv/pcr/#_1","text":"Abstract \u70b9\u4e91\u914d\u51c6\u662f\u6211\u8bfb\u7814\u65f6\u7684\u7814\u7a76\u65b9\u5411\uff0c\u4e3b\u8981\u4e3a\u81ea\u76d1\u7763\u4ee5\u53ca\u7528\u4e8e\u8154\u5185\u73af\u5883 \u9664\u4e86\u4f20\u7edf\u65b9\u6cd5ICP\u4e4b\u5916\uff0c\u4e3b\u8981\u65b9\u6cd5\u6709\u4e24\u79cd\uff1a \u7aef\u5230\u7aef \u63d0\u53d6\u7279\u5f81\u70b9","title":"\u70b9\u4e91\u914d\u51c6"},{"location":"cv/pcr/#table-of-contents","text":"\u524d\u7f6e\u77e5\u8bc6 ICP","title":"Table of Contents"},{"location":"cv/pcr/#reference","text":"\u5b66\u4e60\u4e09\u7ef4\u70b9\u4e91\u914d\u51c6","title":"Reference"},{"location":"cv/pcr/icp/","text":"ICP \u00b6 \u7ea6 2610 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f Abstract ICP\uff08Iterative Closest Point\uff09\u662f\u4e00\u79cd\u8fed\u4ee3\u7b97\u6cd5\uff0c\u7528\u4e8e\u5c06\u4e24\u7ec4\u70b9\u4e91\u8fdb\u884c\u914d\u51c6\uff0c\u5373\u627e\u5230\u4e24\u7ec4\u70b9\u4e91\u4e4b\u95f4\u7684\u6700\u4f18\u521a\u4f53\u53d8\u6362\uff08\u65cb\u8f6c\u77e9\u9635\u548c\u5e73\u79fb\u5411\u91cf\uff09\uff0c\u4f7f\u5f97\u4e24\u7ec4\u70b9\u4e91\u4e4b\u95f4\u7684\u8bef\u5dee\u6700\u5c0f\u5316\u3002 \u95ee\u9898\u63cf\u8ff0 \u00b6 \u70b9\u4e91\u914d\u51c6\uff08Point Cloud Registration\uff09\u6307\u7684\u662f\u8f93\u5165\u4e24\u5e45\u70b9\u4e91 \\(P_s\\) \uff08source\uff09\u548c \\(P_t\\) \uff08target\uff09\uff0c\u8f93\u51fa\u4e00\u4e2a\u53d8\u6362 \\(T\\) \u4f7f\u5f97 \\(T(P_s)\\) \u548c \\(P_t\\) \u7684\u91cd\u5408\u7a0b\u5ea6\u5c3d\u53ef\u80fd\u9ad8\u3002\u53d8\u6362 \\(T\\) \u53ef\u4ee5\u662f\u521a\u6027\u7684(rigid)\uff0c\u4e5f\u53ef\u4ee5\u4e0d\u662f\uff0c\u672c\u6587\u53ea\u8003\u8651\u521a\u6027\u53d8\u6362\uff0c\u5373\u53d8\u6362\u53ea\u5305\u62ec\u65cb\u8f6c\u3001\u5e73\u79fb\u3002 \u76ee\u524d\u5e94\u7528\u6700\u5e7f\u6cdb\u7684\u70b9\u4e91\u7cbe\u914d\u51c6\u7b97\u6cd5\u662f\u8fed\u4ee3\u6700\u8fd1\u70b9\u7b97\u6cd5\uff08Iterative Closest Point, ICP\uff09\u53ca\u5404\u79cd\u53d8\u79cd ICP \u7b97\u6cd5\u3002 \u7b97\u6cd5\u63cf\u8ff0 \u00b6 \u5bf9\u4e8e \\(T\\) \u662f\u521a\u6027\u53d8\u6362\u7684\u60c5\u5f62\uff0c\u70b9\u4e91\u914d\u51c6\u95ee\u9898\u53ef\u4ee5\u63cf\u8ff0\u4e3a\uff1a \\[ R^\\ast, t^\\ast = \\argmin_{R, t} \\frac{1}{|P_s|} \\sum_{i=1}^{|P_s|} \\| p_t^i - (R \\cdot p_s^i + t) \\|^2 \\] \u8fd9\u91cc \\(p_s\\) \u548c \\(p_t\\) \u662f\u6e90\u70b9\u4e91\u548c\u76ee\u6807\u70b9\u4e91\u4e00\u4e00\u5bf9\u5e94\u70b9\u3002 ICP \u7b97\u6cd5\u7684\u76f4\u89c2\u60f3\u6cd5\uff1a \u5982\u679c\u6211\u4eec\u77e5\u9053\u4e24\u5e45\u70b9\u4e91\u4e0a\u70b9\u7684\u5bf9\u5e94\u5173\u7cfb\uff0c\u90a3\u4e48\u53ef\u4ee5\u7528 Least Squares \u6765\u6c42\u89e3 R\uff0ct \u53c2\u6570\u3002 \u600e\u4e48\u77e5\u9053\u70b9\u7684\u5bf9\u5e94\u5173\u7cfb\u5462\uff1f\u5982\u679c\u6211\u4eec\u77e5\u9053\u4e86\u4e00\u4e2a\u5927\u6982\u9760\u8c31\u7684 R\uff0ct \u53c2\u6570\uff0c\u90a3\u4e48\u53ef\u4ee5\u901a\u8fc7\u8d2a\u5fc3\u7684\u65b9\u5f0f\u627e\u4e24\u5e45\u70b9\u4e91\u4e0a\u7684\u70b9\u7684\u5bf9\u5e94\u5173\u7cfb\uff08\u76f4\u63a5\u627e\u8ddd\u79bb\u6700\u8fd1\u7684\u70b9\u4f5c\u4e3a\u5bf9\u5e94\u70b9\uff09\u3002 ICP \u7b97\u6cd5\u5b9e\u9645\u4e0a\u5c31\u662f\u4ea4\u66ff\u8fdb\u884c\u4e0a\u8ff0\u4e24\u4e2a\u6b65\u9aa4\uff0c\u8fed\u4ee3\u8fdb\u884c\u8ba1\u7b97\uff0c\u76f4\u5230\u6536\u655b\u3002 ICP \u7b97\u6cd5\u6d41\u7a0b \u70b9\u4e91\u9884\u5904\u7406\uff1a\u6ee4\u6ce2\u3001\u6e05\u7406\u6570\u636e\u7b49 \u5339\u914d\uff1a\u5e94\u7528\u4e0a\u4e00\u6b65\u6c42\u89e3\u51fa\u7684\u53d8\u6362\uff0c\u627e\u6700\u8fd1\u70b9 \u52a0\u6743\uff1a\u8c03\u6574\u4e00\u4e9b\u5bf9\u5e94\u70b9\u5bf9\u7684\u6743\u91cd \u63d0\u51fa\u4e0d\u5408\u7406\u7684\u5bf9\u5e94\u70b9\u5bf9 \u8ba1\u7b97 loss \u6700\u5c0f\u5316 loss\uff0c\u6c42\u89e3\u5f53\u524d\u6700\u4f18\u53d8\u6362 \u56de\u5230 2\uff0c\u8fdb\u884c\u8fed\u4ee3\uff0c\u76f4\u5230\u6536\u655b \u6574\u4f53\u4e0a\u6765\u770b\uff0cICP \u628a\u70b9\u4e91\u914d\u51c6\u95ee\u9898\u62c6\u5206\u6210\u4e24\u4e2a\u5b50\u95ee\u9898\uff1a \u627e\u6700\u8fd1\u70b9 \u627e\u6700\u4f18\u53d8\u6362 \u627e\u6700\u8fd1\u5bf9\u5e94\u70b9 \u00b6 \u5229\u7528\u521d\u59cb \\(R_0\u3001t_0\\) \u6216\u4e0a\u4e00\u6b21\u8fed\u4ee3\u5f97\u5230\u7684 \\(R_{k-1}\u3001t_{k-1}\\) \u5bf9\u521d\u59cb\u70b9\u4e91\u8fdb\u884c\u53d8\u6362\uff0c\u5f97\u5230\u4e00\u4e2a\u4e34\u65f6\u7684\u53d8\u6362\u70b9\u4e91\uff0c\u7136\u540e\u7528\u8fd9\u4e2a\u70b9\u4e91\u548c\u76ee\u6807\u70b9\u4e91\u6bd4\u8f83\uff0c\u627e\u51fa\u6e90\u70b9\u4e91\u4e2d\u6bcf\u4e00\u4e2a\u70b9\u5728\u76ee\u6807\u70b9\u4e91\u4e2d\u7684\u6700\u8fd1\u90bb\u70b9\u3002 \u5982\u679c\u76f4\u63a5\u8fdb\u884c\u6bd4\u8f83\u6700\u8fd1\u90bb\u70b9\uff0c\u9700\u8981\u8fdb\u884c\u4e24\u91cd\u5faa\u73af\uff0c\u8ba1\u7b97\u590d\u6742\u5ea6\u4e3a \\(\\mathcal{O}(|P_s| \\cdot |P_t|)\\) \uff0c\u8fd9\u4e00\u6b65\u6bd4\u8f83\u8017\u65f6\uff0c\u5e38\u89c1\u7684\u52a0\u901f\u65b9\u6cd5\u6709\uff1a \u8bbe\u7f6e\u8ddd\u79bb\u9608\u503c\uff0c\u5f53\u70b9\u4e0e\u70b9\u8ddd\u79bb\u5c0f\u4e8e\u4e00\u5b9a\u9608\u503c\u5c31\u8ba4\u4e3a\u627e\u5230\u4e86\u5bf9\u5e94\u70b9\uff0c\u4e0d\u7528\u904d\u5386\u5b8c\u6574\u4e2a\u70b9\u96c6\u3002 \u4f7f\u7528 ANN \u52a0\u901f\u67e5\u627e\uff0c\u5e38\u89c1\u7684\u6709 KD-tree\u3002KD-tree \u5efa\u6811\u590d\u6742\u5ea6\u4e3a \\(\\mathcal{O}(N \\log N)\\) \uff0c\u67e5\u627e\u590d\u6742\u5ea6\u4e3a \\(\\mathcal{O}(\\log N)\\) \uff08\u6700\u574f\u60c5\u51b5\u4e0b\u4e3a \\(\\mathcal{O}(N)\\) \uff09\u3002 \u6c42\u89e3\u6700\u4f18\u53d8\u6362 \u00b6 \u5bf9\u4e8e point-to-point ICP \u95ee\u9898\uff0c\u6c42\u6700\u4f18\u53d8\u6362\u662f\u6709\u95ed\u5f62\u5f0f\u89e3\uff08closed-form solution\uff09\u7684\uff0c\u53ef\u4ee5\u501f\u52a9 SVD \u5206\u89e3\u6765\u8ba1\u7b97\u3002 \u7ed3\u8bba\uff1a\u5728\u5df2\u77e5\u70b9\u7684\u5bf9\u5e94\u5173\u7cfb\u7684\u60c5\u51b5\u4e0b\uff0c\u8bbe \\(\\overline{p}_s, \\overline{p}_t\\) \u5206\u522b\u8868\u793a\u6e90\u70b9\u4e91\u548c\u76ee\u6807\u70b9\u4e91\u7684\u8d28\u5fc3\uff0c\u4ee4 \\(\\hat{p}_s^i=p_s^i-\\overline{p}_s\uff0c\\hat{p}_t^i=p_t^i-\\overline{p}_t\\) \uff0c\u4ee4 \\(H=\\sum_{i=1}^{|P_s|}\\hat{p}_s^i \\hat{p}_t^{i^\\top}\\) \uff0c\u8fd9\u662f\u4e00\u4e2a \\(3 \\times 3\\) \u7684\u53e5\u5b50\uff0c\u5bf9 H \u8fdb\u884c SVD \u5206\u89e3\u5f97\u5230 \\(H=U\\Sigma V^\\top\\) \uff0c\u5219 point-to-point ICP \u95ee\u9898\u6700\u4f18\u65cb\u8f6c\u4e3a\uff1a \\[R^{\\ast} = V U^\\top\\] \u6700\u4f18\u5e73\u79fb\u4e3a\uff1a \\[t^{\\ast} = \\overline{p}_t - R^\\ast \\hat{p}_s\\] \u8ba1\u7b97\u6700\u4f18\u5e73\u79fb \u00b6 \u4ee4 \\(N=|P_s|\\) \uff0c\u8bbe \\(F(t)=\\sum_{i=1}^N \\|(R \\cdot p_s^i + t) - p_t^i \\|^2\\) \uff0c\u5bf9\u5176\u8fdb\u884c\u6c42\u5bfc\uff0c\u5219\u6709\uff1a \\[ \\begin{aligned} \\frac{\\partial F}{\\partial t} &= \\sum_{i=1}^{N} 2 (R \\cdot p_s^i + t - p_t^i) \\\\ &= 2nt + 2R\\sum_{i=1}^{N}p_s^i - 2\\sum_{i=1}^{N}p_t^i \\end{aligned} \\] \u4ee4\u5bfc\u6570\u4e3a 0\uff0c\u5219\u6709\uff1a \\[ \\begin{aligned} t &= \\frac{1}{N} \\sum_{i=1}^{N} p_t^i - R \\frac{1}{N} \\sum_{i=1}^{N} p_s^i \\\\ &= \\bar p_t - R \\bar p_s \\end{aligned} \\] \u65e0\u8bba R \u53d6\u503c\u5982\u4f55\uff0c\u6839\u636e\u4e0a\u5f0f\u90fd\u53ef\u4ee5\u6c42\u5f97\u6700\u4f18\u7684 t\uff0c\u4f7f\u5f97 loss \u6700\u5c0f\u3002 \u8ba1\u7b97\u6700\u4f18\u65cb\u8f6c \u00b6 \u7ecf\u8fc7\u6700\u4f18\u5e73\u79fb\u7684\u63a8\u5bfc\uff0c\u77e5\u9053\u65e0\u8bba\u65cb\u8f6c\u5982\u4f55\u53d6\u503c\uff0c\u90fd\u53ef\u4ee5\u901a\u8fc7\u8ba1\u7b97\u70b9\u4e91\u7684\u8d28\u5fc3\u6765\u5f97\u5230\u6700\u4f18\u5e73\u79fb\uff0c\u4e3a\u4e86\u8ba1\u7b97\u65b9\u4fbf\uff0c\u4e0d\u59a8\u4e0d\u8003\u8651\u5e73\u79fb\u7684\u5f71\u54cd\uff0c\u5148\u5c06\u6e90\u70b9\u4e91\u548c\u76ee\u6807\u70b9\u4e91\u90fd\u8f6c\u6362\u5230\u8d28\u5fc3\u5750\u6807\u4e0b\uff0c\u8fd9\u4e5f\u5c31\u662f\u4ee4 \\(\\hat{p}_s^i=p_s^i-\\hat{p}_s, \\hat{p}_t^i=p_t^i-\\hat{p}_t\\) \u7684\u610f\u4e49\u3002 \u4e0b\u9762\u7528 \\(\\hat{p}_s^i\\) \u548c \\(\\hat{p}_t^i\\) \u8fdb\u884c\u63a8\u5bfc\u3002\u4e0d\u8003\u8651\u5e73\u79fb\uff0c\u5219 loss \u53ef\u4ee5\u5199\u6210\uff1a \\[ F(R) = \\sum_{i=1}^{N} \\|R \\cdot \\hat p_s^i - \\hat p_t^i \\|^2 \\] \u5148\u7b80\u5316 \\(\\|R \\cdot \\hat p_s^i - \\hat p_t^i \\|^2\\) \uff1a \\[ \\begin{aligned} \\|R \\cdot \\hat p_s^i - \\hat p_t^i\\|^2 &= (R \\cdot \\hat p_s^i - \\hat p_t^i)^\\top(R \\cdot \\hat p_s^i - \\hat p_t^i) \\\\ &= ({\\hat p_s^i}^\\top R^\\top - {\\hat p_t^i}^\\top)(R \\cdot \\hat p_s^i - \\hat p_t^i) \\\\ &= {\\hat p_s^i}^\\top R^\\top R {\\hat p_s^i} - {\\hat p_t^i}^\\top R {\\hat p_s^i} - {\\hat p_s^i}^\\top R^\\top {\\hat p_t^i} + {\\hat p_t^i}^\\top {\\hat p_t^i} \\\\ &= \\|{\\hat p_s^i}\\|^2 + \\|{\\hat p_t^i}\\|^2 - {\\hat p_t^i}^\\top R {\\hat p_s^i} - {\\hat p_s^i}^\\top R^\\top {\\hat p_t^i} \\\\ &= \\|{\\hat p_s^i}\\|^2 + \\|{\\hat p_t^i}\\|^2 - 2{\\hat p_t^i}^\\top R {\\hat p_s^i} \\end{aligned} \\] \u8fd9\u91cc\u5229\u7528 \\(R^\\top R=I\\) \u548c \\({\\hat p_t^i}^\\top R {\\hat p_s^i} = {\\hat p_s^i}^\\top R^\\top {\\hat p_t^i}\\) \uff08\u6807\u91cf\u7684\u8f6c\u7f6e\u7b49\u4e8e\u81ea\u8eab\uff09\u7684\u6027\u8d28\u3002 \u7531\u4e8e\u70b9\u7684\u5750\u6807\u662f\u786e\u5b9a\u7684\uff08\u548c R \u65e0\u5173\uff09\uff0c\u6240\u4ee5\u6700\u5c0f\u5316\u539f loss \u7b49\u4ef7\u4e8e\u6c42\uff1a \\[ R^{\\ast} = \\argmin_R (-2 \\sum_{i=1}^{N} {\\hat p_t^i}^\\top R {\\hat p_s^i}) \\] \u4e5f\u5373\u4e3a\u6c42\uff1a \\[ R^{\\ast} = \\argmax_R (\\sum_{i=1}^{N} {\\hat p_t^i}^\\top R {\\hat p_s^i}) \\] \u6ce8\u610f\u5230 \\(\\sum_{i=1}^{N} {\\hat p_t^i}^\\top R {\\hat p_s^i} = trace(P_t^\\top R P_s)\\) \uff08\u7531\u77e9\u9635\u4e58\u6cd5\u53ca trace \u7684\u5b9a\u4e49\u53ef\u5f97\uff09\uff0c\u6240\u4ee5\u95ee\u9898\u8f6c\u5316\u4e3a\uff1a \\[ R^{\\ast} = \\argmax_{R} \\ trace(P_t^\\top R P_s) \\] \u6839\u636e trace \u7684\u6027\u8d28 \\(trace(AB)=trace(BA)\\) \uff0c\uff08\u8fd9\u91cc\u4e0d\u8981\u6c42 A \u548c B \u662f\u65b9\u9635\uff0c\u53ea\u8981 A*B \u662f\u65b9\u9635\u5373\u53ef\uff09\uff0c\u6709\uff1a \\[trace(P_t^\\top RP_s)=trace(RP_sP_t^\\top)\\] \u5728\u5229\u7528\u524d\u9762\u5b9a\u4e49\u7684\u77e9\u9635 H \u548c\u5176 SVD \u5206\u89e3\uff0c\u5e26\u5165\u4e0a\u5f0f\u5f97\u5230\uff1a \\[ \\begin{aligned} trace(P_t^\\top R P_s) &= trace(R P_s P_t^\\top) \\\\ &= trace(R H) \\\\ &= trace(R U \\Sigma V^\\top) \\\\ &= trace(\\Sigma V^\\top R U) \\end{aligned} \\] \u6ce8\u610f\u8fd9\u91cc\u7684 \\(V,U,R\\) \u90fd\u662f\u6b63\u4ea4\u77e9\u9635\uff0c\u6240\u4ee5 \\(V^\\top RU\\) \u4e5f\u662f\u6b63\u4ea4\u77e9\u9635\u3002 \u4ee4 \\(M=V^\\top RU=\\begin{bmatrix} m_{11} & m_{12} & m_{13} \\\\ m_{21} & m_{22} & m_{23} \\\\ m_{31} & m_{32} & m_{33} \\end{bmatrix}\\) \uff0c\u5219\u6709\uff1a \\[ \\begin{aligned} trace(\\Sigma V^\\top R U) &= trace(\\Sigma M) \\\\ & = \\sigma_1 m_{11} + \\sigma_2 m_{22} + \\sigma_1 m_{33} \\end{aligned} \\] \u6839\u636e\u5947\u5f02\u503c\u975e\u8d1f\u7684\u6027\u8d28\u548c\u6b63\u4ea4\u77e9\u9635\u7684\u6027\u8d28\uff08\u6b63\u4ea4\u77e9\u9635\u4e2d\u7684\u5143\u7d20\u7edd\u5bf9\u503c\u4e0d\u5927\u4e8e 1\uff09\uff0c\u5bb9\u6613\u8bc1\u5f97\u53ea\u6709\u5f53 \\(M\\) \u4e3a\u5355\u4f4d\u9635\u65f6 \\(trace(\\Sigma M)\\) \u6700\u5927\uff0c\u5373\uff1a \\[ V^\\top RU = I \\\\ R = VU^\\top \\] \u6240\u4ee5\u6709 \\(R^\\ast = VU^\\top\\) \u3002 \u6700\u540e\u8fd8\u9700\u8981\u8fdb\u884c Orientation rectification\uff0c\u5373\u9a8c\u8bc1 \\(R^\\ast = VU^\\top\\) \u662f\u4e0d\u662f\u4e00\u4e2a\u65cb\u8f6c\u77e9\u9635\uff08\u68c0\u67e5\u662f\u5426\u6709 \\(|R|=1\\) \uff09\uff0c\u56e0\u4e3a\u5b58\u5728 \\(|R|=-1\\) \u7684\u53ef\u80fd\uff0c\u6b64\u65f6 \\(R\\) \u8868\u793a\u7684\u4e0d\u662f\u65cb\u8f6c\u800c\u662f\u4e00\u4e2a reflection\uff0c\u6240\u4ee5\u8fd8\u8981\u7ed9\u4e0a\u8ff0\u4f18\u5316\u6c42\u89e3\u52a0\u4e0a\u4e00\u4e2a \\(|R|=1\\) \u7684\u7ea6\u675f\u3002 \u6839\u636e\u77e9\u9635\u884c\u5217\u5f0f\u7684\u6027\u8d28\uff0c\u4ee5\u53ca \\(U,V\\) \u90fd\u662f\u6b63\u4ea4\u77e9\u9635\uff1a \\[ \\begin{aligned} |M| &= |V^\\top| |U| |R| \\\\ &= |V^\\top| |U| = \\pm 1 \\end{aligned} \\] \u5982\u679c \\(|VU^\\top|=1\\) \uff0c\u5219 \\(|M|=1\uff0cR^\\ast = VU^\\top\\) \u5df2\u7ecf\u7ed9\u51fa\u6700\u4f18\u65cb\u8f6c\uff1b\u5982\u679c \\(|VU^\\top|=-1\\) \uff0c\u5219 \\(|M|=-1\\) \uff0c\u6211\u4eec\u9700\u8981\u6c42\u89e3\u6b64\u65f6\u7684 \\(R\\) \uff0c\u4e5f\u5c31\u662f\u5206\u6790 \\(M\\) \u5e94\u8be5\u5177\u6709\u4f55\u79cd\u5f62\u5f0f\u3002\u5177\u4f53\u7684\u8ba8\u8bba\u53c2\u8003 \u539f\u8bba\u6587 \uff0c\u8fd9\u91cc\u7ed9\u51fa\u7ed3\u8bba\uff1a\u5f53 \\(|M|=-1\\) \u65f6\uff0c\u4f7f\u5f97 \\(trace(\\Sigma M)\\) \u6700\u5927\u7684 \\(M\\) \u4e3a\uff1a \\[M = \\left[ \\begin{array}{cccc} 1 & 0 & 0 \\\\ 0 & 1 & 0 \\\\ 0 & 0 & -1 \\end{array} \\right]\\] \u7efc\u5408\u8003\u8651 \\(|M|=1\\) \u548c \\(|M|=-1\\) \u4e24\u79cd\u60c5\u51b5\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\uff1a \\[ R^{\\ast} = V \\left[ \\begin{array}{cccc} 1 & 0 & 0 \\\\ 0 & 1 & 0 \\\\ 0 & 0 & |V U^\\top| \\end{array} \\right] U^\\top \\] \u5230\u6b64\u516c\u5f0f\u63a8\u5bfc\u5b8c\u5168\uff0c\u7b80\u5355\u603b\u7ed3\u4e00\u4e0b\u6c42\u89e3\u6700\u4f18\u53d8\u6362\u7684\u6b65\u9aa4\uff1a \u8ba1\u7b97\u6e90\u70b9\u4e91\u548c\u76ee\u6807\u70b9\u4e91\u7684\u8d28\u5fc3\uff1b \u5c06\u6e90\u70b9\u4e91\u548c\u76ee\u6807\u70b9\u4e91\u90fd\u8f6c\u6362\u5230\u8d28\u5fc3\u5750\u6807\u7cfb\uff1b \u8ba1\u7b97\u77e9\u9635 H\uff08\u5f62\u5f0f\u7c7b\u4f3c\u201c\u534f\u65b9\u5dee\u77e9\u9635\u201d\uff09\uff1b \u5bf9 H \u8fdb\u884c SVD \u5206\u89e3\uff0c\u6839\u636e\u516c\u5f0f\u6c42\u5f97 \\(R^\\ast\\) \uff1b \u6839\u636e\u516c\u5f0f\u8ba1\u7b97 \\(t^\\ast\\) \uff1b \u8fed\u4ee3 \u00b6 \u6bcf\u4e00\u6b21\u8fed\u4ee3\u90fd\u4f1a\u5f97\u5230\u5f53\u524d\u7684\u6700\u4f18\u53d8\u6362\u53c2\u6570 \\(R_k,t_k\\) \uff0c\u7136\u540e\u5c06\u8be5\u53d8\u6362\u4f5c\u7528\u4e8e\u5f53\u524d\u6e90\u70b9\u4e91\uff1b\u201c\u627e\u6700\u8fd1\u5bf9\u5e94\u70b9\u201d\u548c\u201c\u6c42\u89e3\u6700\u4f18\u53d8\u6362\u201d\u8fd9\u4e24\u6b65\u4e0d\u505c\u8fed\u4ee3\u8fdb\u884c\uff0c\u76f4\u5230\u6ee1\u8db3\u8fed\u4ee3\u7ec8\u6b62\u6761\u4ef6\uff0c\u5e38\u7528\u7684\u7ec8\u6b62\u6761\u4ef6\u6709\uff1a \\(R_k,t_k\\) \u7684\u53d8\u5316\u91cf\u5c0f\u4e8e\u4e00\u5b9a\u503c loss \u53d8\u5316\u91cf\u5c0f\u4e8e\u4e00\u5b9a\u503c \u8fbe\u5230\u6700\u5927\u8fed\u4ee3\u6b21\u6570 ICP \u7684\u4f18\u7f3a\u70b9\u53ca\u4e00\u4e9b\u6539\u8fdb\u7b97\u6cd5 \u00b6 ICP \u4f18\u70b9 \u7b80\u5355\uff0c\u4e0d\u5fc5\u5bf9\u70b9\u4e91\u8fdb\u884c\u5206\u5272\u548c\u7279\u5f81\u63d0\u53d6 \u521d\u503c\u8f83\u597d\u60c5\u51b5\u4e0b\uff0c\u7cbe\u5ea6\u548c\u6536\u655b\u6027\u90fd\u4e0d\u9519 ICP \u7f3a\u70b9 \u627e\u6700\u8fd1\u5bf9\u5e94\u70b9\u7684\u8ba1\u7b97\u5f00\u9500\u8f83\u5927 \u53ea\u8003\u8651\u4e86\u70b9\u4e0e\u70b9\u8ddd\u79bb\uff0c\u7f3a\u5c11\u5bf9\u70b9\u4e91\u7ed3\u6784\u4fe1\u606f\u7684\u5229\u7528 \u539f\u59cb\u7684 ICP \u7b97\u6cd5\u8ba1\u7b97\u5f00\u9500\u5927\uff0c\u5bf9\u521d\u59cb\u53d8\u6362\u654f\u611f\uff0c\u5bb9\u6613\u9677\u5165\u5c40\u90e8\u6700\u4f18\u89e3\u3002\u81ea ICP \u63d0\u51fa\u4ee5\u6765\uff0c\u6709\u76f8\u5f53\u591a\u7684 ICP \u6539\u8fdb\u7b97\u6cd5\uff0c\u7b80\u8981\u5217\u4e3e\u4e00\u4e9b\uff1a Point-to-Plane ICP\uff0c\u539f\u59cb ICP \u7b97\u6cd5\u7684\u4ee3\u4ef7\u51fd\u6570\u4e2d\u4f7f\u7528\u7684 point-to-point \u8ddd\u79bb\uff0cpoint-to-plane \u5219\u662f\u8003\u8651\u6e90\u9876\u70b9\u5230\u76ee\u6807\u9876\u70b9\u6240\u5728\u9762\u7684\u8ddd\u79bb\uff0c\u6bd4\u8d77\u76f4\u63a5\u8ba1\u7b97\u70b9\u5230\u70b9\u8ddd\u79bb\uff0c\u8003\u8651\u4e86\u70b9\u4e91\u7684\u5c40\u90e8\u7ed3\u6784\uff0c\u7cbe\u5ea6\u66f4\u9ad8\uff0c\u4e0d\u5bb9\u6613\u9677\u5165\u5c40\u90e8\u6700\u4f18\uff1b\u4f46\u8981\u6ce8\u610f point-to-plane \u7684\u4f18\u5316\u662f\u4e00\u4e2a\u975e\u7ebf\u6027\u95ee\u9898\uff0c\u901f\u5ea6\u6bd4\u8f83\u6162\uff0c\u4e00\u822c\u4f7f\u7528\u5176\u7ebf\u6027\u5316\u8fd1\u4f3c\uff1b Plane-to-Plane ICP\uff0cpoint-to-plane \u53ea\u8003\u8651\u76ee\u6807\u70b9\u4e91\u5c40\u90e8\u7ed3\u6784\uff0c plane-to-plane \u987e\u540d\u601d\u4e49\u5c31\u662f\u4e5f\u8003\u8651\u6e90\u70b9\u4e91\u7684\u5c40\u90e8\u7ed3\u6784\uff0c\u8ba1\u7b97\u9762\u5230\u9762\u7684\u8ddd\u79bb\uff1b Generalized ICP (GICP)\uff0c\u7efc\u5408\u8003\u8651 point-to-point\u3001point-to-plane \u548c plane-to-plane \u7b56\u7565\uff0c\u7cbe\u5ea6\u3001\u9c81\u68d2\u6027\u90fd\u6709\u6240\u63d0\u9ad8\uff1b Normal Iterative Closest Point (NICP)\uff0c\u8003\u8651\u6cd5\u5411\u91cf\u548c\u5c40\u90e8\u66f2\u7387\uff0c\u66f4\u8fdb\u4e00\u6b65\u5229\u7528\u4e86\u70b9\u4e91\u7684\u5c40\u90e8\u7ed3\u6784\u4fe1\u606f\uff0c\u5176\u8bba\u6587\u4e2d\u5b9e\u9a8c\u7ed3\u679c\u6bd4 GICP \u7684\u6027\u80fd\u66f4\u597d\u3002 \u5b9e\u9645\u4f7f\u7528\u4e2d\u7684\u4e00\u4e9b\u6ce8\u610f\u4e8b\u9879 \u00b6 ICP \u6bd4\u8f83\u4f9d\u8d56\u4e8e\u53d8\u6362\u521d\u503c\uff0c\u5e73\u79fb\u6bd4\u8f83\u7b80\u5355\uff0c\u76f4\u63a5\u7528\u70b9\u4e91\u8d28\u5fc3\u6765\u4f30\u8ba1\uff1b\u65cb\u8f6c\u521d\u503c\u7684\u8bdd\u53ef\u4ee5\u624b\u52a8\u8c03\u4e00\u4e2a\u7c97\u7565\u503c\uff0c\u6216\u8005\u6cbf\u6bcf\u4e2a\u8f74\u7684\u65cb\u8f6c\u8fdb\u884c\u91c7\u6837\u3001\u7ec4\u5408\u6765\u5c1d\u8bd5\uff08\u4e0d\u9002\u5408\u5b9e\u65f6\u6027\u5e94\u7528\uff09\uff1b \u70b9\u592a\u591a\u7684\u8bdd\u53ef\u4ee5\u5148\u964d\u91c7\u6837\uff1b \u627e\u5230\u4e00\u4e9b anchor \u70b9\u5bf9\uff08\u6bd4\u5982\u5148\u7528\u7279\u5f81\u70b9\u5339\u914d\uff09\uff0c\u53ef\u4ee5\u5e2e\u52a9\u52a0\u901f\u6536\u655b\uff1b \u5bf9\u5e94\u7528\u573a\u666f\u5f15\u5165\u4e00\u4e9b\u5408\u7406\u5047\u8bbe\uff0c\u6bd4\u5982\u9650\u5236\u65cb\u8f6c\u3001\u5e73\u79fb\u7684\u8303\u56f4\uff0c\u53d8\u6362\u81ea\u7531\u5ea6\u6570\u91cf\u7b49\u3002 Reference \u00b6 \u70b9\u4e91\u914d\u51c6\u5b66\u4e60\u7b14\u8bb0-ICP\uff081\uff09 \u4e09\u7ef4\u70b9\u4e91\u914d\u51c6 -- ICP \u7b97\u6cd5 https://igl.ethz.ch/projects/ARAP/svd_rot.pdf https://courses.cs.duke.edu//spring07/cps296.2/scribe_notes/lecture24.pdf","title":"ICP"},{"location":"cv/pcr/icp/#icp","text":"\u7ea6 2610 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f Abstract ICP\uff08Iterative Closest Point\uff09\u662f\u4e00\u79cd\u8fed\u4ee3\u7b97\u6cd5\uff0c\u7528\u4e8e\u5c06\u4e24\u7ec4\u70b9\u4e91\u8fdb\u884c\u914d\u51c6\uff0c\u5373\u627e\u5230\u4e24\u7ec4\u70b9\u4e91\u4e4b\u95f4\u7684\u6700\u4f18\u521a\u4f53\u53d8\u6362\uff08\u65cb\u8f6c\u77e9\u9635\u548c\u5e73\u79fb\u5411\u91cf\uff09\uff0c\u4f7f\u5f97\u4e24\u7ec4\u70b9\u4e91\u4e4b\u95f4\u7684\u8bef\u5dee\u6700\u5c0f\u5316\u3002","title":"ICP"},{"location":"cv/pcr/icp/#_1","text":"\u70b9\u4e91\u914d\u51c6\uff08Point Cloud Registration\uff09\u6307\u7684\u662f\u8f93\u5165\u4e24\u5e45\u70b9\u4e91 \\(P_s\\) \uff08source\uff09\u548c \\(P_t\\) \uff08target\uff09\uff0c\u8f93\u51fa\u4e00\u4e2a\u53d8\u6362 \\(T\\) \u4f7f\u5f97 \\(T(P_s)\\) \u548c \\(P_t\\) \u7684\u91cd\u5408\u7a0b\u5ea6\u5c3d\u53ef\u80fd\u9ad8\u3002\u53d8\u6362 \\(T\\) \u53ef\u4ee5\u662f\u521a\u6027\u7684(rigid)\uff0c\u4e5f\u53ef\u4ee5\u4e0d\u662f\uff0c\u672c\u6587\u53ea\u8003\u8651\u521a\u6027\u53d8\u6362\uff0c\u5373\u53d8\u6362\u53ea\u5305\u62ec\u65cb\u8f6c\u3001\u5e73\u79fb\u3002 \u76ee\u524d\u5e94\u7528\u6700\u5e7f\u6cdb\u7684\u70b9\u4e91\u7cbe\u914d\u51c6\u7b97\u6cd5\u662f\u8fed\u4ee3\u6700\u8fd1\u70b9\u7b97\u6cd5\uff08Iterative Closest Point, ICP\uff09\u53ca\u5404\u79cd\u53d8\u79cd ICP \u7b97\u6cd5\u3002","title":"\u95ee\u9898\u63cf\u8ff0"},{"location":"cv/pcr/icp/#_2","text":"\u5bf9\u4e8e \\(T\\) \u662f\u521a\u6027\u53d8\u6362\u7684\u60c5\u5f62\uff0c\u70b9\u4e91\u914d\u51c6\u95ee\u9898\u53ef\u4ee5\u63cf\u8ff0\u4e3a\uff1a \\[ R^\\ast, t^\\ast = \\argmin_{R, t} \\frac{1}{|P_s|} \\sum_{i=1}^{|P_s|} \\| p_t^i - (R \\cdot p_s^i + t) \\|^2 \\] \u8fd9\u91cc \\(p_s\\) \u548c \\(p_t\\) \u662f\u6e90\u70b9\u4e91\u548c\u76ee\u6807\u70b9\u4e91\u4e00\u4e00\u5bf9\u5e94\u70b9\u3002 ICP \u7b97\u6cd5\u7684\u76f4\u89c2\u60f3\u6cd5\uff1a \u5982\u679c\u6211\u4eec\u77e5\u9053\u4e24\u5e45\u70b9\u4e91\u4e0a\u70b9\u7684\u5bf9\u5e94\u5173\u7cfb\uff0c\u90a3\u4e48\u53ef\u4ee5\u7528 Least Squares \u6765\u6c42\u89e3 R\uff0ct \u53c2\u6570\u3002 \u600e\u4e48\u77e5\u9053\u70b9\u7684\u5bf9\u5e94\u5173\u7cfb\u5462\uff1f\u5982\u679c\u6211\u4eec\u77e5\u9053\u4e86\u4e00\u4e2a\u5927\u6982\u9760\u8c31\u7684 R\uff0ct \u53c2\u6570\uff0c\u90a3\u4e48\u53ef\u4ee5\u901a\u8fc7\u8d2a\u5fc3\u7684\u65b9\u5f0f\u627e\u4e24\u5e45\u70b9\u4e91\u4e0a\u7684\u70b9\u7684\u5bf9\u5e94\u5173\u7cfb\uff08\u76f4\u63a5\u627e\u8ddd\u79bb\u6700\u8fd1\u7684\u70b9\u4f5c\u4e3a\u5bf9\u5e94\u70b9\uff09\u3002 ICP \u7b97\u6cd5\u5b9e\u9645\u4e0a\u5c31\u662f\u4ea4\u66ff\u8fdb\u884c\u4e0a\u8ff0\u4e24\u4e2a\u6b65\u9aa4\uff0c\u8fed\u4ee3\u8fdb\u884c\u8ba1\u7b97\uff0c\u76f4\u5230\u6536\u655b\u3002 ICP \u7b97\u6cd5\u6d41\u7a0b \u70b9\u4e91\u9884\u5904\u7406\uff1a\u6ee4\u6ce2\u3001\u6e05\u7406\u6570\u636e\u7b49 \u5339\u914d\uff1a\u5e94\u7528\u4e0a\u4e00\u6b65\u6c42\u89e3\u51fa\u7684\u53d8\u6362\uff0c\u627e\u6700\u8fd1\u70b9 \u52a0\u6743\uff1a\u8c03\u6574\u4e00\u4e9b\u5bf9\u5e94\u70b9\u5bf9\u7684\u6743\u91cd \u63d0\u51fa\u4e0d\u5408\u7406\u7684\u5bf9\u5e94\u70b9\u5bf9 \u8ba1\u7b97 loss \u6700\u5c0f\u5316 loss\uff0c\u6c42\u89e3\u5f53\u524d\u6700\u4f18\u53d8\u6362 \u56de\u5230 2\uff0c\u8fdb\u884c\u8fed\u4ee3\uff0c\u76f4\u5230\u6536\u655b \u6574\u4f53\u4e0a\u6765\u770b\uff0cICP \u628a\u70b9\u4e91\u914d\u51c6\u95ee\u9898\u62c6\u5206\u6210\u4e24\u4e2a\u5b50\u95ee\u9898\uff1a \u627e\u6700\u8fd1\u70b9 \u627e\u6700\u4f18\u53d8\u6362","title":"\u7b97\u6cd5\u63cf\u8ff0"},{"location":"cv/pcr/icp/#_3","text":"\u5229\u7528\u521d\u59cb \\(R_0\u3001t_0\\) \u6216\u4e0a\u4e00\u6b21\u8fed\u4ee3\u5f97\u5230\u7684 \\(R_{k-1}\u3001t_{k-1}\\) \u5bf9\u521d\u59cb\u70b9\u4e91\u8fdb\u884c\u53d8\u6362\uff0c\u5f97\u5230\u4e00\u4e2a\u4e34\u65f6\u7684\u53d8\u6362\u70b9\u4e91\uff0c\u7136\u540e\u7528\u8fd9\u4e2a\u70b9\u4e91\u548c\u76ee\u6807\u70b9\u4e91\u6bd4\u8f83\uff0c\u627e\u51fa\u6e90\u70b9\u4e91\u4e2d\u6bcf\u4e00\u4e2a\u70b9\u5728\u76ee\u6807\u70b9\u4e91\u4e2d\u7684\u6700\u8fd1\u90bb\u70b9\u3002 \u5982\u679c\u76f4\u63a5\u8fdb\u884c\u6bd4\u8f83\u6700\u8fd1\u90bb\u70b9\uff0c\u9700\u8981\u8fdb\u884c\u4e24\u91cd\u5faa\u73af\uff0c\u8ba1\u7b97\u590d\u6742\u5ea6\u4e3a \\(\\mathcal{O}(|P_s| \\cdot |P_t|)\\) \uff0c\u8fd9\u4e00\u6b65\u6bd4\u8f83\u8017\u65f6\uff0c\u5e38\u89c1\u7684\u52a0\u901f\u65b9\u6cd5\u6709\uff1a \u8bbe\u7f6e\u8ddd\u79bb\u9608\u503c\uff0c\u5f53\u70b9\u4e0e\u70b9\u8ddd\u79bb\u5c0f\u4e8e\u4e00\u5b9a\u9608\u503c\u5c31\u8ba4\u4e3a\u627e\u5230\u4e86\u5bf9\u5e94\u70b9\uff0c\u4e0d\u7528\u904d\u5386\u5b8c\u6574\u4e2a\u70b9\u96c6\u3002 \u4f7f\u7528 ANN \u52a0\u901f\u67e5\u627e\uff0c\u5e38\u89c1\u7684\u6709 KD-tree\u3002KD-tree \u5efa\u6811\u590d\u6742\u5ea6\u4e3a \\(\\mathcal{O}(N \\log N)\\) \uff0c\u67e5\u627e\u590d\u6742\u5ea6\u4e3a \\(\\mathcal{O}(\\log N)\\) \uff08\u6700\u574f\u60c5\u51b5\u4e0b\u4e3a \\(\\mathcal{O}(N)\\) \uff09\u3002","title":"\u627e\u6700\u8fd1\u5bf9\u5e94\u70b9"},{"location":"cv/pcr/icp/#_4","text":"\u5bf9\u4e8e point-to-point ICP \u95ee\u9898\uff0c\u6c42\u6700\u4f18\u53d8\u6362\u662f\u6709\u95ed\u5f62\u5f0f\u89e3\uff08closed-form solution\uff09\u7684\uff0c\u53ef\u4ee5\u501f\u52a9 SVD \u5206\u89e3\u6765\u8ba1\u7b97\u3002 \u7ed3\u8bba\uff1a\u5728\u5df2\u77e5\u70b9\u7684\u5bf9\u5e94\u5173\u7cfb\u7684\u60c5\u51b5\u4e0b\uff0c\u8bbe \\(\\overline{p}_s, \\overline{p}_t\\) \u5206\u522b\u8868\u793a\u6e90\u70b9\u4e91\u548c\u76ee\u6807\u70b9\u4e91\u7684\u8d28\u5fc3\uff0c\u4ee4 \\(\\hat{p}_s^i=p_s^i-\\overline{p}_s\uff0c\\hat{p}_t^i=p_t^i-\\overline{p}_t\\) \uff0c\u4ee4 \\(H=\\sum_{i=1}^{|P_s|}\\hat{p}_s^i \\hat{p}_t^{i^\\top}\\) \uff0c\u8fd9\u662f\u4e00\u4e2a \\(3 \\times 3\\) \u7684\u53e5\u5b50\uff0c\u5bf9 H \u8fdb\u884c SVD \u5206\u89e3\u5f97\u5230 \\(H=U\\Sigma V^\\top\\) \uff0c\u5219 point-to-point ICP \u95ee\u9898\u6700\u4f18\u65cb\u8f6c\u4e3a\uff1a \\[R^{\\ast} = V U^\\top\\] \u6700\u4f18\u5e73\u79fb\u4e3a\uff1a \\[t^{\\ast} = \\overline{p}_t - R^\\ast \\hat{p}_s\\]","title":"\u6c42\u89e3\u6700\u4f18\u53d8\u6362"},{"location":"cv/pcr/icp/#_5","text":"\u4ee4 \\(N=|P_s|\\) \uff0c\u8bbe \\(F(t)=\\sum_{i=1}^N \\|(R \\cdot p_s^i + t) - p_t^i \\|^2\\) \uff0c\u5bf9\u5176\u8fdb\u884c\u6c42\u5bfc\uff0c\u5219\u6709\uff1a \\[ \\begin{aligned} \\frac{\\partial F}{\\partial t} &= \\sum_{i=1}^{N} 2 (R \\cdot p_s^i + t - p_t^i) \\\\ &= 2nt + 2R\\sum_{i=1}^{N}p_s^i - 2\\sum_{i=1}^{N}p_t^i \\end{aligned} \\] \u4ee4\u5bfc\u6570\u4e3a 0\uff0c\u5219\u6709\uff1a \\[ \\begin{aligned} t &= \\frac{1}{N} \\sum_{i=1}^{N} p_t^i - R \\frac{1}{N} \\sum_{i=1}^{N} p_s^i \\\\ &= \\bar p_t - R \\bar p_s \\end{aligned} \\] \u65e0\u8bba R \u53d6\u503c\u5982\u4f55\uff0c\u6839\u636e\u4e0a\u5f0f\u90fd\u53ef\u4ee5\u6c42\u5f97\u6700\u4f18\u7684 t\uff0c\u4f7f\u5f97 loss \u6700\u5c0f\u3002","title":"\u8ba1\u7b97\u6700\u4f18\u5e73\u79fb"},{"location":"cv/pcr/icp/#_6","text":"\u7ecf\u8fc7\u6700\u4f18\u5e73\u79fb\u7684\u63a8\u5bfc\uff0c\u77e5\u9053\u65e0\u8bba\u65cb\u8f6c\u5982\u4f55\u53d6\u503c\uff0c\u90fd\u53ef\u4ee5\u901a\u8fc7\u8ba1\u7b97\u70b9\u4e91\u7684\u8d28\u5fc3\u6765\u5f97\u5230\u6700\u4f18\u5e73\u79fb\uff0c\u4e3a\u4e86\u8ba1\u7b97\u65b9\u4fbf\uff0c\u4e0d\u59a8\u4e0d\u8003\u8651\u5e73\u79fb\u7684\u5f71\u54cd\uff0c\u5148\u5c06\u6e90\u70b9\u4e91\u548c\u76ee\u6807\u70b9\u4e91\u90fd\u8f6c\u6362\u5230\u8d28\u5fc3\u5750\u6807\u4e0b\uff0c\u8fd9\u4e5f\u5c31\u662f\u4ee4 \\(\\hat{p}_s^i=p_s^i-\\hat{p}_s, \\hat{p}_t^i=p_t^i-\\hat{p}_t\\) \u7684\u610f\u4e49\u3002 \u4e0b\u9762\u7528 \\(\\hat{p}_s^i\\) \u548c \\(\\hat{p}_t^i\\) \u8fdb\u884c\u63a8\u5bfc\u3002\u4e0d\u8003\u8651\u5e73\u79fb\uff0c\u5219 loss \u53ef\u4ee5\u5199\u6210\uff1a \\[ F(R) = \\sum_{i=1}^{N} \\|R \\cdot \\hat p_s^i - \\hat p_t^i \\|^2 \\] \u5148\u7b80\u5316 \\(\\|R \\cdot \\hat p_s^i - \\hat p_t^i \\|^2\\) \uff1a \\[ \\begin{aligned} \\|R \\cdot \\hat p_s^i - \\hat p_t^i\\|^2 &= (R \\cdot \\hat p_s^i - \\hat p_t^i)^\\top(R \\cdot \\hat p_s^i - \\hat p_t^i) \\\\ &= ({\\hat p_s^i}^\\top R^\\top - {\\hat p_t^i}^\\top)(R \\cdot \\hat p_s^i - \\hat p_t^i) \\\\ &= {\\hat p_s^i}^\\top R^\\top R {\\hat p_s^i} - {\\hat p_t^i}^\\top R {\\hat p_s^i} - {\\hat p_s^i}^\\top R^\\top {\\hat p_t^i} + {\\hat p_t^i}^\\top {\\hat p_t^i} \\\\ &= \\|{\\hat p_s^i}\\|^2 + \\|{\\hat p_t^i}\\|^2 - {\\hat p_t^i}^\\top R {\\hat p_s^i} - {\\hat p_s^i}^\\top R^\\top {\\hat p_t^i} \\\\ &= \\|{\\hat p_s^i}\\|^2 + \\|{\\hat p_t^i}\\|^2 - 2{\\hat p_t^i}^\\top R {\\hat p_s^i} \\end{aligned} \\] \u8fd9\u91cc\u5229\u7528 \\(R^\\top R=I\\) \u548c \\({\\hat p_t^i}^\\top R {\\hat p_s^i} = {\\hat p_s^i}^\\top R^\\top {\\hat p_t^i}\\) \uff08\u6807\u91cf\u7684\u8f6c\u7f6e\u7b49\u4e8e\u81ea\u8eab\uff09\u7684\u6027\u8d28\u3002 \u7531\u4e8e\u70b9\u7684\u5750\u6807\u662f\u786e\u5b9a\u7684\uff08\u548c R \u65e0\u5173\uff09\uff0c\u6240\u4ee5\u6700\u5c0f\u5316\u539f loss \u7b49\u4ef7\u4e8e\u6c42\uff1a \\[ R^{\\ast} = \\argmin_R (-2 \\sum_{i=1}^{N} {\\hat p_t^i}^\\top R {\\hat p_s^i}) \\] \u4e5f\u5373\u4e3a\u6c42\uff1a \\[ R^{\\ast} = \\argmax_R (\\sum_{i=1}^{N} {\\hat p_t^i}^\\top R {\\hat p_s^i}) \\] \u6ce8\u610f\u5230 \\(\\sum_{i=1}^{N} {\\hat p_t^i}^\\top R {\\hat p_s^i} = trace(P_t^\\top R P_s)\\) \uff08\u7531\u77e9\u9635\u4e58\u6cd5\u53ca trace \u7684\u5b9a\u4e49\u53ef\u5f97\uff09\uff0c\u6240\u4ee5\u95ee\u9898\u8f6c\u5316\u4e3a\uff1a \\[ R^{\\ast} = \\argmax_{R} \\ trace(P_t^\\top R P_s) \\] \u6839\u636e trace \u7684\u6027\u8d28 \\(trace(AB)=trace(BA)\\) \uff0c\uff08\u8fd9\u91cc\u4e0d\u8981\u6c42 A \u548c B \u662f\u65b9\u9635\uff0c\u53ea\u8981 A*B \u662f\u65b9\u9635\u5373\u53ef\uff09\uff0c\u6709\uff1a \\[trace(P_t^\\top RP_s)=trace(RP_sP_t^\\top)\\] \u5728\u5229\u7528\u524d\u9762\u5b9a\u4e49\u7684\u77e9\u9635 H \u548c\u5176 SVD \u5206\u89e3\uff0c\u5e26\u5165\u4e0a\u5f0f\u5f97\u5230\uff1a \\[ \\begin{aligned} trace(P_t^\\top R P_s) &= trace(R P_s P_t^\\top) \\\\ &= trace(R H) \\\\ &= trace(R U \\Sigma V^\\top) \\\\ &= trace(\\Sigma V^\\top R U) \\end{aligned} \\] \u6ce8\u610f\u8fd9\u91cc\u7684 \\(V,U,R\\) \u90fd\u662f\u6b63\u4ea4\u77e9\u9635\uff0c\u6240\u4ee5 \\(V^\\top RU\\) \u4e5f\u662f\u6b63\u4ea4\u77e9\u9635\u3002 \u4ee4 \\(M=V^\\top RU=\\begin{bmatrix} m_{11} & m_{12} & m_{13} \\\\ m_{21} & m_{22} & m_{23} \\\\ m_{31} & m_{32} & m_{33} \\end{bmatrix}\\) \uff0c\u5219\u6709\uff1a \\[ \\begin{aligned} trace(\\Sigma V^\\top R U) &= trace(\\Sigma M) \\\\ & = \\sigma_1 m_{11} + \\sigma_2 m_{22} + \\sigma_1 m_{33} \\end{aligned} \\] \u6839\u636e\u5947\u5f02\u503c\u975e\u8d1f\u7684\u6027\u8d28\u548c\u6b63\u4ea4\u77e9\u9635\u7684\u6027\u8d28\uff08\u6b63\u4ea4\u77e9\u9635\u4e2d\u7684\u5143\u7d20\u7edd\u5bf9\u503c\u4e0d\u5927\u4e8e 1\uff09\uff0c\u5bb9\u6613\u8bc1\u5f97\u53ea\u6709\u5f53 \\(M\\) \u4e3a\u5355\u4f4d\u9635\u65f6 \\(trace(\\Sigma M)\\) \u6700\u5927\uff0c\u5373\uff1a \\[ V^\\top RU = I \\\\ R = VU^\\top \\] \u6240\u4ee5\u6709 \\(R^\\ast = VU^\\top\\) \u3002 \u6700\u540e\u8fd8\u9700\u8981\u8fdb\u884c Orientation rectification\uff0c\u5373\u9a8c\u8bc1 \\(R^\\ast = VU^\\top\\) \u662f\u4e0d\u662f\u4e00\u4e2a\u65cb\u8f6c\u77e9\u9635\uff08\u68c0\u67e5\u662f\u5426\u6709 \\(|R|=1\\) \uff09\uff0c\u56e0\u4e3a\u5b58\u5728 \\(|R|=-1\\) \u7684\u53ef\u80fd\uff0c\u6b64\u65f6 \\(R\\) \u8868\u793a\u7684\u4e0d\u662f\u65cb\u8f6c\u800c\u662f\u4e00\u4e2a reflection\uff0c\u6240\u4ee5\u8fd8\u8981\u7ed9\u4e0a\u8ff0\u4f18\u5316\u6c42\u89e3\u52a0\u4e0a\u4e00\u4e2a \\(|R|=1\\) \u7684\u7ea6\u675f\u3002 \u6839\u636e\u77e9\u9635\u884c\u5217\u5f0f\u7684\u6027\u8d28\uff0c\u4ee5\u53ca \\(U,V\\) \u90fd\u662f\u6b63\u4ea4\u77e9\u9635\uff1a \\[ \\begin{aligned} |M| &= |V^\\top| |U| |R| \\\\ &= |V^\\top| |U| = \\pm 1 \\end{aligned} \\] \u5982\u679c \\(|VU^\\top|=1\\) \uff0c\u5219 \\(|M|=1\uff0cR^\\ast = VU^\\top\\) \u5df2\u7ecf\u7ed9\u51fa\u6700\u4f18\u65cb\u8f6c\uff1b\u5982\u679c \\(|VU^\\top|=-1\\) \uff0c\u5219 \\(|M|=-1\\) \uff0c\u6211\u4eec\u9700\u8981\u6c42\u89e3\u6b64\u65f6\u7684 \\(R\\) \uff0c\u4e5f\u5c31\u662f\u5206\u6790 \\(M\\) \u5e94\u8be5\u5177\u6709\u4f55\u79cd\u5f62\u5f0f\u3002\u5177\u4f53\u7684\u8ba8\u8bba\u53c2\u8003 \u539f\u8bba\u6587 \uff0c\u8fd9\u91cc\u7ed9\u51fa\u7ed3\u8bba\uff1a\u5f53 \\(|M|=-1\\) \u65f6\uff0c\u4f7f\u5f97 \\(trace(\\Sigma M)\\) \u6700\u5927\u7684 \\(M\\) \u4e3a\uff1a \\[M = \\left[ \\begin{array}{cccc} 1 & 0 & 0 \\\\ 0 & 1 & 0 \\\\ 0 & 0 & -1 \\end{array} \\right]\\] \u7efc\u5408\u8003\u8651 \\(|M|=1\\) \u548c \\(|M|=-1\\) \u4e24\u79cd\u60c5\u51b5\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\uff1a \\[ R^{\\ast} = V \\left[ \\begin{array}{cccc} 1 & 0 & 0 \\\\ 0 & 1 & 0 \\\\ 0 & 0 & |V U^\\top| \\end{array} \\right] U^\\top \\] \u5230\u6b64\u516c\u5f0f\u63a8\u5bfc\u5b8c\u5168\uff0c\u7b80\u5355\u603b\u7ed3\u4e00\u4e0b\u6c42\u89e3\u6700\u4f18\u53d8\u6362\u7684\u6b65\u9aa4\uff1a \u8ba1\u7b97\u6e90\u70b9\u4e91\u548c\u76ee\u6807\u70b9\u4e91\u7684\u8d28\u5fc3\uff1b \u5c06\u6e90\u70b9\u4e91\u548c\u76ee\u6807\u70b9\u4e91\u90fd\u8f6c\u6362\u5230\u8d28\u5fc3\u5750\u6807\u7cfb\uff1b \u8ba1\u7b97\u77e9\u9635 H\uff08\u5f62\u5f0f\u7c7b\u4f3c\u201c\u534f\u65b9\u5dee\u77e9\u9635\u201d\uff09\uff1b \u5bf9 H \u8fdb\u884c SVD \u5206\u89e3\uff0c\u6839\u636e\u516c\u5f0f\u6c42\u5f97 \\(R^\\ast\\) \uff1b \u6839\u636e\u516c\u5f0f\u8ba1\u7b97 \\(t^\\ast\\) \uff1b","title":"\u8ba1\u7b97\u6700\u4f18\u65cb\u8f6c"},{"location":"cv/pcr/icp/#_7","text":"\u6bcf\u4e00\u6b21\u8fed\u4ee3\u90fd\u4f1a\u5f97\u5230\u5f53\u524d\u7684\u6700\u4f18\u53d8\u6362\u53c2\u6570 \\(R_k,t_k\\) \uff0c\u7136\u540e\u5c06\u8be5\u53d8\u6362\u4f5c\u7528\u4e8e\u5f53\u524d\u6e90\u70b9\u4e91\uff1b\u201c\u627e\u6700\u8fd1\u5bf9\u5e94\u70b9\u201d\u548c\u201c\u6c42\u89e3\u6700\u4f18\u53d8\u6362\u201d\u8fd9\u4e24\u6b65\u4e0d\u505c\u8fed\u4ee3\u8fdb\u884c\uff0c\u76f4\u5230\u6ee1\u8db3\u8fed\u4ee3\u7ec8\u6b62\u6761\u4ef6\uff0c\u5e38\u7528\u7684\u7ec8\u6b62\u6761\u4ef6\u6709\uff1a \\(R_k,t_k\\) \u7684\u53d8\u5316\u91cf\u5c0f\u4e8e\u4e00\u5b9a\u503c loss \u53d8\u5316\u91cf\u5c0f\u4e8e\u4e00\u5b9a\u503c \u8fbe\u5230\u6700\u5927\u8fed\u4ee3\u6b21\u6570","title":"\u8fed\u4ee3"},{"location":"cv/pcr/icp/#icp_1","text":"ICP \u4f18\u70b9 \u7b80\u5355\uff0c\u4e0d\u5fc5\u5bf9\u70b9\u4e91\u8fdb\u884c\u5206\u5272\u548c\u7279\u5f81\u63d0\u53d6 \u521d\u503c\u8f83\u597d\u60c5\u51b5\u4e0b\uff0c\u7cbe\u5ea6\u548c\u6536\u655b\u6027\u90fd\u4e0d\u9519 ICP \u7f3a\u70b9 \u627e\u6700\u8fd1\u5bf9\u5e94\u70b9\u7684\u8ba1\u7b97\u5f00\u9500\u8f83\u5927 \u53ea\u8003\u8651\u4e86\u70b9\u4e0e\u70b9\u8ddd\u79bb\uff0c\u7f3a\u5c11\u5bf9\u70b9\u4e91\u7ed3\u6784\u4fe1\u606f\u7684\u5229\u7528 \u539f\u59cb\u7684 ICP \u7b97\u6cd5\u8ba1\u7b97\u5f00\u9500\u5927\uff0c\u5bf9\u521d\u59cb\u53d8\u6362\u654f\u611f\uff0c\u5bb9\u6613\u9677\u5165\u5c40\u90e8\u6700\u4f18\u89e3\u3002\u81ea ICP \u63d0\u51fa\u4ee5\u6765\uff0c\u6709\u76f8\u5f53\u591a\u7684 ICP \u6539\u8fdb\u7b97\u6cd5\uff0c\u7b80\u8981\u5217\u4e3e\u4e00\u4e9b\uff1a Point-to-Plane ICP\uff0c\u539f\u59cb ICP \u7b97\u6cd5\u7684\u4ee3\u4ef7\u51fd\u6570\u4e2d\u4f7f\u7528\u7684 point-to-point \u8ddd\u79bb\uff0cpoint-to-plane \u5219\u662f\u8003\u8651\u6e90\u9876\u70b9\u5230\u76ee\u6807\u9876\u70b9\u6240\u5728\u9762\u7684\u8ddd\u79bb\uff0c\u6bd4\u8d77\u76f4\u63a5\u8ba1\u7b97\u70b9\u5230\u70b9\u8ddd\u79bb\uff0c\u8003\u8651\u4e86\u70b9\u4e91\u7684\u5c40\u90e8\u7ed3\u6784\uff0c\u7cbe\u5ea6\u66f4\u9ad8\uff0c\u4e0d\u5bb9\u6613\u9677\u5165\u5c40\u90e8\u6700\u4f18\uff1b\u4f46\u8981\u6ce8\u610f point-to-plane \u7684\u4f18\u5316\u662f\u4e00\u4e2a\u975e\u7ebf\u6027\u95ee\u9898\uff0c\u901f\u5ea6\u6bd4\u8f83\u6162\uff0c\u4e00\u822c\u4f7f\u7528\u5176\u7ebf\u6027\u5316\u8fd1\u4f3c\uff1b Plane-to-Plane ICP\uff0cpoint-to-plane \u53ea\u8003\u8651\u76ee\u6807\u70b9\u4e91\u5c40\u90e8\u7ed3\u6784\uff0c plane-to-plane \u987e\u540d\u601d\u4e49\u5c31\u662f\u4e5f\u8003\u8651\u6e90\u70b9\u4e91\u7684\u5c40\u90e8\u7ed3\u6784\uff0c\u8ba1\u7b97\u9762\u5230\u9762\u7684\u8ddd\u79bb\uff1b Generalized ICP (GICP)\uff0c\u7efc\u5408\u8003\u8651 point-to-point\u3001point-to-plane \u548c plane-to-plane \u7b56\u7565\uff0c\u7cbe\u5ea6\u3001\u9c81\u68d2\u6027\u90fd\u6709\u6240\u63d0\u9ad8\uff1b Normal Iterative Closest Point (NICP)\uff0c\u8003\u8651\u6cd5\u5411\u91cf\u548c\u5c40\u90e8\u66f2\u7387\uff0c\u66f4\u8fdb\u4e00\u6b65\u5229\u7528\u4e86\u70b9\u4e91\u7684\u5c40\u90e8\u7ed3\u6784\u4fe1\u606f\uff0c\u5176\u8bba\u6587\u4e2d\u5b9e\u9a8c\u7ed3\u679c\u6bd4 GICP \u7684\u6027\u80fd\u66f4\u597d\u3002","title":"ICP \u7684\u4f18\u7f3a\u70b9\u53ca\u4e00\u4e9b\u6539\u8fdb\u7b97\u6cd5"},{"location":"cv/pcr/icp/#_8","text":"ICP \u6bd4\u8f83\u4f9d\u8d56\u4e8e\u53d8\u6362\u521d\u503c\uff0c\u5e73\u79fb\u6bd4\u8f83\u7b80\u5355\uff0c\u76f4\u63a5\u7528\u70b9\u4e91\u8d28\u5fc3\u6765\u4f30\u8ba1\uff1b\u65cb\u8f6c\u521d\u503c\u7684\u8bdd\u53ef\u4ee5\u624b\u52a8\u8c03\u4e00\u4e2a\u7c97\u7565\u503c\uff0c\u6216\u8005\u6cbf\u6bcf\u4e2a\u8f74\u7684\u65cb\u8f6c\u8fdb\u884c\u91c7\u6837\u3001\u7ec4\u5408\u6765\u5c1d\u8bd5\uff08\u4e0d\u9002\u5408\u5b9e\u65f6\u6027\u5e94\u7528\uff09\uff1b \u70b9\u592a\u591a\u7684\u8bdd\u53ef\u4ee5\u5148\u964d\u91c7\u6837\uff1b \u627e\u5230\u4e00\u4e9b anchor \u70b9\u5bf9\uff08\u6bd4\u5982\u5148\u7528\u7279\u5f81\u70b9\u5339\u914d\uff09\uff0c\u53ef\u4ee5\u5e2e\u52a9\u52a0\u901f\u6536\u655b\uff1b \u5bf9\u5e94\u7528\u573a\u666f\u5f15\u5165\u4e00\u4e9b\u5408\u7406\u5047\u8bbe\uff0c\u6bd4\u5982\u9650\u5236\u65cb\u8f6c\u3001\u5e73\u79fb\u7684\u8303\u56f4\uff0c\u53d8\u6362\u81ea\u7531\u5ea6\u6570\u91cf\u7b49\u3002","title":"\u5b9e\u9645\u4f7f\u7528\u4e2d\u7684\u4e00\u4e9b\u6ce8\u610f\u4e8b\u9879"},{"location":"cv/pcr/icp/#reference","text":"\u70b9\u4e91\u914d\u51c6\u5b66\u4e60\u7b14\u8bb0-ICP\uff081\uff09 \u4e09\u7ef4\u70b9\u4e91\u914d\u51c6 -- ICP \u7b97\u6cd5 https://igl.ethz.ch/projects/ARAP/svd_rot.pdf https://courses.cs.duke.edu//spring07/cps296.2/scribe_notes/lecture24.pdf","title":"Reference"},{"location":"cv/pcr/prepare/","text":"\u524d\u7f6e\u77e5\u8bc6 \u00b6 \u7ea6 2032 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f Abstract \u70b9\u4e91\u914d\u51c6\u57fa\u7840\u77e5\u8bc6\uff0c\u4e3b\u8981\u4e3a\u70b9\u4e91\u57fa\u7840\u3001\u5904\u7406\u65b9\u6cd5\u548c\u70b9\u4e91\u914d\u51c6\u65b9\u6cd5\u7684\u4ecb\u7ecd\u548c\u6bd4\u8f83\u7b49 \u70b9\u4e91\u57fa\u7840 \u00b6 \u70b9\u4e91\u6982\u5ff5\uff1a\u70b9\u4e91\u662f\u540c\u4e00\u7a7a\u95f4\u53c2\u8003\u7cfb\u4e0b\u8868\u8fbe\u76ee\u6807\u7a7a\u95f4\u5206\u5e03\u548c\u76ee\u6807\u8868\u9762\u7279\u6027\u7684\u6d77\u91cf\u70b9\u96c6\u5408\uff0c\u5728\u83b7\u53d6\u7269\u4f53\u8868\u9762\u6bcf\u4e2a\u91c7\u6837\u70b9\u7684\u7a7a\u95f4\u5750\u6807\u540e\uff0c\u5f97\u5230\u7684\u662f\u70b9\u7684\u96c6\u5408\uff0c\u79f0\u4e4b\u4e3a\u201c\u70b9\u4e91\u201d\uff08Point Cloud\uff09\u3002 \u70b9\u4e91\u56fe\u50cf\u662f\u6700\u57fa\u7840\u4e5f\u662f\u6700\u5e38\u89c1\u7684\u4e09\u7ef4\u56fe\u50cf\uff1a\u4e09\u7ef4\u56fe\u50cf\u662f\u4e00\u79cd\u7279\u6b8a\u7684\u56fe\u50cf\u4fe1\u606f\u8868\u8fbe\u5f62\u5f0f\uff0c\u76f8\u8f83\u4e8e\u5e38\u89c1\u7684\u4e8c\u7ef4\u56fe\u50cf\uff0c\u5176\u6700\u5927\u7684\u7279\u5f81\u662f\u8868\u8fbe\u4e86\u7a7a\u95f4\u4e2d\u4e09\u4e2a\u7ef4\u5ea6\uff08\u957f\u5ea6\u5bbd\u5ea6\u548c\u6df1\u5ea6\uff09\u7684\u6570\u636e\u3002 \u4e09\u7ef4\u56fe\u50cf\u7684\u8868\u73b0\u5f62\u5f0f\uff1a\u6df1\u5ea6\u56fe\uff08\u4ee5\u7070\u5ea6\u8868\u8fbe\u7269\u4f53\u4e0e\u76f8\u673a\u7684\u8ddd\u79bb\uff09\uff0c\u51e0\u4f55\u6a21\u578b\uff08\u7531 CAD \u8f6f\u4ef6\u5efa\u7acb\uff09\uff0c\u70b9\u4e91\u6a21\u578b\uff08\u6240\u6709\u9006\u5411\u5de5\u7a0b\u8bbe\u5907\u90fd\u5c06\u7269\u4f53\u91c7\u6837\u6210\u70b9\u4e91\uff09\u3002 \u70b9\u4e91\u6839\u636e\u6d4b\u91cf\u539f\u7406\u4e3b\u8981\u5206\u4e3a\u4e24\u79cd \u6839\u636e\u6fc0\u5149\u6d4b\u91cf\u539f\u7406\u5f97\u5230\u7684\u70b9\u4e91\uff0c\u5305\u62ec\u4e09\u7ef4\u5750\u6807 XYZ \u548c\u6fc0\u5149\u53cd\u5c04\u5f3a\u5ea6 I\u3002\u5f3a\u5ea6\u4fe1\u606f\u4e0e\u76ee\u6807\u7684\u8868\u9762\u6750\u8d28\u3001\u7c97\u7cd9\u5ea6\u3001\u5165\u5c04\u89d2\u65b9\u5411\uff0c\u4ee5\u53ca\u4eea\u5668\u7684\u53d1\u5c04\u80fd\u91cf\uff0c\u6fc0\u5149\u6ce2\u957f\u6709\u5173\u3002 \u6839\u636e\u6444\u5f71\u6d4b\u91cf\u539f\u7406\u5f97\u5230\u7684\u70b9\u4e91\uff0c\u5305\u62ec\u4e09\u7ef4\u5750\u6807 XYZ \u548c\u989c\u8272\u4fe1\u606f RGB\u3002 \u8fd8\u6709\u6fc0\u5149\u548c\u6444\u5f71\u76f8\u7ed3\u5408\u5728\u4e00\u8d77\u7684\u591a\u4f20\u611f\u5668\u878d\u5408\u6280\u672f\uff0c\u8fd9\u79cd\u5f97\u5230\u7684\u5305\u62ec\u4e09\u7ef4\u5750\u6807 XYZ\u3001\u989c\u8272\u4fe1\u606f RGB \u548c\u6fc0\u5149\u53cd\u5c04\u5f3a\u5ea6 I\u3002 \u70b9\u4e91\u7684\u83b7\u53d6\u8bbe\u5907\uff08\u53ea\u9488\u5bf9\u6444\u5f71\uff09\uff1aRGBD\u8bbe\u5907\uff08\u6df1\u5ea6\u6444\u50cf\u673a\uff09\u3002 \u70b9\u4e91\u7684\u5c5e\u6027\uff1a\u7a7a\u95f4\u5206\u8fa8\u7387\u3001\u70b9\u4e91\u7cbe\u5ea6\u3001\u8868\u9762\u6cd5\u5411\u91cf\u7b49\u3002 \u70b9\u4e91\u5b58\u50a8\u683c\u5f0f .pts; .asc; .dat; .stl; .imw; .xyz; .las; \u70b9\u4e91\u7684\u6570\u636e\u7c7b\u578b\uff08\u4ee5 PCL \u5e93\u4e3a\u4f8b\uff09\uff1a pcl::PointXYZ \uff1afloat x, y, z; \u8868\u793a\u4e86 xyz3D \u4fe1\u606f\uff0c\u53ef\u4ee5\u901a\u8fc7 points[i].data[0] \u6216 points[i].x \u8bbf\u95ee x \u5750\u6807\u503c\u3002 pcl::PointXYZI \uff1afloat x, y, z, intensity; \u8868\u793a\u4e86 XYZ \u4fe1\u606f\u52a0\u4e0a\u5f3a\u5ea6\u4fe1\u606f\u7684\u7c7b\u578b\u3002 pcl::PointXYZRGB \uff1afloat x, y, z, rgb; \u8868\u793a\u4e86 XYZ \u4fe1\u606f\u52a0\u4e0a RGB \u4fe1\u606f\uff0cRGB \u5b58\u50a8\u4e3a\u4e00\u4e2a float\u3002 pcl::PointXYZRGBA \uff1afloat x, y, z; uint32_t rgba; \u8868\u793a\u4e86 XYZ \u4fe1\u606f\u52a0\u4e0a RGBA \u4fe1\u606f\uff0cRGBA \u7528 32bit \u7684 int \u578b\u5b58\u50a8\u7684\u3002 pcl::PointXY \uff1afloat x, y; \u8868\u793a\u4e86 XY \u4fe1\u606f\u3002 pcl::Normal \uff1a\u8868\u793a\u7ed9\u5b9a\u70b9\u6240\u5728\u6837\u672c\u66f2\u9762\u4e0a\u7684\u6cd5\u7ebf\u65b9\u5411\uff0c\u4ee5\u53ca\u5bf9\u5e94\u66f2\u7387\u7684\u6d4b\u91cf\u503c\uff0c\u7528\u7b2c\u56db\u4e2a\u5143\u7d20\u6765\u5360\u4f4d\uff0c\u517c\u5bb9 SSE \u548c\u9ad8\u6548\u8ba1\u7b97 \u70b9\u4e91\u5904\u7406 \u00b6 \u56fe\u50cf\u5904\u7406\u7684\u4e09\u4e2a\u5c42\u6b21 \u4f4e\u5c42\u6b21\uff1a\u56fe\u50cf\u5f3a\u5316\uff0c\u6ee4\u6ce2\uff0c\u5173\u952e\u70b9/\u8fb9\u7f18\u68c0\u6d4b\u7b49\u57fa\u672c\u64cd\u4f5c \u4e2d\u5c42\u6b21\uff1a\u8fde\u901a\u57df\u6807\u8bb0\uff0c\u56fe\u50cf\u5206\u5272\u7b49\u64cd\u4f5c \u9ad8\u5c42\u6b21\uff1a\u7269\u4f53\u8bc6\u522b\uff0c\u573a\u666f\u5206\u6790\u7b49\u64cd\u4f5c PCL \u5bf9\u70b9\u4e91\u5904\u7406\u65b9\u6cd5\u7ed9\u51fa\u8f83\u4e3a\u660e\u6670\u7684\u5c42\u6b21\u5212\u5206\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a \u4f4e\u5c42\u6b21\u5904\u7406\u65b9\u6cd5 \u00b6 \u6ee4\u6ce2\u65b9\u6cd5\uff1a\u53cc\u8fb9\u6ee4\u6ce2\u3001\u9ad8\u65af\u6ee4\u6ce2\u3001\u6761\u4ef6\u6ee4\u6ce2\u3001\u76f4\u901a\u6ee4\u6ce2\u3001\u968f\u673a\u91c7\u6837\u4e00\u81f4\u6027\u6ee4\u6ce2 \u5173\u952e\u70b9\uff1aISS3D\u3001Harris3D\u3001NARF\u3001SIFT3D \u4e2d\u5c42\u6b21\u5904\u7406\u65b9\u6cd5 \u00b6 \u7279\u5f81\u63cf\u8ff0\uff1a\u6cd5\u7ebf\u548c\u66f2\u7387\u7684\u8ba1\u7b97\u3001\u7279\u5f81\u503c\u5206\u6790\u3001SHOT\u3001PFH\u3001FPFH\u30013D Shape Context\u3001Spin Image \u5206\u5272\u4e0e\u5206\u7c7b\uff1a \u5206\u5272\uff1a\u533a\u57df\u751f\u957f\u3001Ransac \u7ebf\u9762\u63d0\u53d6\u3001\u5168\u5c40\u4f18\u5316\u5e73\u9762\u63d0\u53d6\u3001K-Means\u3001Normalize Cut \uff08Context based\uff09\u30013D Hough Transform\uff08\u7ebf\u3001\u9762\u63d0\u53d6\uff09\u3001\u8fde\u901a\u5206\u6790 \u5206\u7c7b\uff1a\u57fa\u4e8e\u70b9\u7684\u5206\u7c7b\u3001\u57fa\u4e8e\u5206\u5272\u7684\u5206\u7c7b\u3001\u57fa\u4e8e\u6df1\u5ea6\u5b66\u4e60\u7684\u5206\u7c7b\uff08PointNet\u3001OctNet\uff09 \u9ad8\u5c42\u6b21\u5904\u7406\u65b9\u6cd5 \u00b6 \u914d\u51c6\uff1a\u70b9\u4e91\u914d\u51c6\u5206\u4e3a\u7c97\u914d\u51c6\uff08Coarse Registration\uff09\u548c\u7cbe\u914d\u51c6\uff08Fine Registration\uff09\u4e24\u4e2a\u9636\u6bb5\u3002 \u7c97\u914d\u51c6 \u662f\u6307\u5728\u70b9\u4e91\u76f8\u5bf9\u4f4d\u59ff\u5b8c\u5168\u4f4d\u7f6e\u7684\u60c5\u51b5\u4e0b\u5bf9\u70b9\u4e91\u8fdb\u884c\u914d\u51c6\uff0c\u53ef\u4ee5\u4e3a\u7cbe\u914d\u51c6\u63d0\u4f9b\u826f\u597d\u7684\u521d\u59cb\u503c\u3002\u5f53\u524d\u8f83\u4e3a\u666e\u904d\u7684\u70b9\u4e91\u81ea\u52a8\u7c97\u914d\u51c6\u7b97\u6cd5\u5305\u62ec\u7a77\u4e3e\u641c\u7d22\u7684\u914d\u51c6\u7b97\u6cd5\u548c\u57fa\u4e8e\u7279\u5f81\u5339\u914d\u7684\u914d\u51c6\u7b97\u6cd5 \u57fa\u4e8e\u7a77\u4e3e\u641c\u7d22\u7684\u914d\u51c6\u7b97\u6cd5 \uff1a\u904d\u5386\u6574\u4e2a\u53d8\u6362\u7a7a\u95f4\u4ee5\u9009\u53d6\u4f7f\u8bef\u5dee\u51fd\u6570\u6700\u5c0f\u5316\u7684\u53d8\u6362\u5173\u7cfb\u6216\u8005\u5217\u4e3e\u51fa\u4f7f\u6700\u591a\u70b9\u5bf9\u6ee1\u8db3\u7684\u53d8\u6362\u5173\u7cfb\u3002\u5982 RANSAC \u914d\u51c6\u7b97\u6cd5\u3001\u56db\u70b9\u4e00\u81f4\u96c6\u914d\u51c6\u7b97\u6cd5\uff084-Point Congruent Set\uff0c4PCS\uff09\u3001Super4PCS \u7b97\u6cd5\u7b49 \u57fa\u4e8e\u7279\u5f81\u5339\u914d\u7684\u914d\u51c6\u7b97\u6cd5 \uff1a\u901a\u8fc7\u88ab\u6d4b\u7269\u4f53\u672c\u8eab\u6240\u5177\u5907\u7684\u5f62\u6001\u7279\u6027\u6784\u5efa\u70b9\u4e91\u95f4\u7684\u5339\u914d\u5bf9\u5e94\uff0c\u7136\u540e\u91c7\u7528\u76f8\u5173\u7b97\u6cd5\u5bf9\u53d8\u6362\u5173\u7cfb\u8fdb\u884c\u4f30\u8ba1\u3002\u5982\u57fa\u4e8e\u70b9 FPFH \u7279\u5f81\u7684 SAC-IA\u3001FGR \u7b49\u7b97\u6cd5\u3001\u57fa\u4e8e\u70b9 SHOT \u7279\u5f81\u7684 AO \u7b97\u6cd5\u4ee5\u53ca\u57fa\u4e8e\u7ebf\u7279\u5f81\u7684 ICL \u7b49 \u7cbe\u914d\u51c6 \u7684\u76ee\u7684\u662f\u5728\u7c97\u914d\u51c6\u7684\u57fa\u7840\u4e0a\u8ba9\u70b9\u4e91\u4e4b\u95f4\u7684\u7a7a\u95f4\u4f4d\u7f6e\u5dee\u522b\u6700\u5c0f\u5316\u3002\u5e94\u7528\u6700\u4e3a\u5e7f\u6cdb\u7684\u7cbe\u914d\u51c6\u7b97\u6cd5\u5e94\u8be5\u662f ICP \u4ee5\u53ca ICP \u7684\u5404\u79cd\u53d8\u79cd\uff08\u7a33\u5065 ICP\u3001point to plane ICP\u3001Point to line ICP\u3001MBICP\u3001GICP\u3001NICP\uff09 SLAM \u56fe\u4f18\u5316 Ceres\u3001g2o\u3001LUM\u3001ELCH\u3001Toro\u3001SPA SLAM \u65b9\u6cd5\uff1aICP\u3001MBICP\u3001IDC\u3001likehood Field\u3001NDT \u4e09\u7ef4\u91cd\u5efa \u67cf\u677e\u91cd\u5efa\u3001Delaunay triangulations\u3001\u8868\u9762\u91cd\u5efa\u3001\u4eba\u4f53\u91cd\u5efa\u3001\u5efa\u7b51\u7269\u91cd\u5efa\u3001\u6811\u6728\u91cd\u5efa \u7ed3\u6784\u5316\u91cd\u5efa\uff1a\u4e0d\u662f\u7b80\u5355\u7684\u6784\u5efa\u4e00\u4e2a Mesh \u7f51\u683c\uff0c\u800c\u662f\u4e3a\u573a\u666f\u8fdb\u884c\u5206\u5272\uff0c\u4e3a\u573a\u666f\u7ed3\u6784\u8d4b\u4e88\u8bed\u4e49\u4fe1\u606f\u3002\u573a\u666f\u7ed3\u6784\u6709\u5c42\u6b21\u4e4b\u5206\uff0c\u5728\u51e0\u4f55\u5c42\u6b21\u5c31\u662f\u70b9\u7ebf\u9762 \u5b9e\u65f6\u91cd\u5efa\uff1a\u91cd\u5efa\u690d\u88ab\u6216\u8005\u519c\u4f5c\u7269\u7684 4D\uff083D+\u65f6\u95f4\uff09\u751f\u957f\u6001\u52bf\uff1b\u4eba\u4f53\u59ff\u6001\u8bc6\u522b\uff1b\u8868\u60c5\u8bc6\u522b \u70b9\u4e91\u6570\u636e\u7ba1\u7406\uff1a\u70b9\u4e91\u538b\u7f29\uff0c\u70b9\u4e91\u7d22\u5f15\uff08KD\u3001Octree\uff09\uff0c\u70b9\u4e91 LOD\uff08\u91d1\u5b57\u5854\uff09\uff0c\u6d77\u91cf\u70b9\u4e91\u7684\u6e32\u67d3 \u70b9\u4e91\u914d\u51c6 \u00b6 \u70b9\u4e91\u914d\u51c6\uff08Point Cloud Registration\uff09\uff0c\u53c8\u540d\u70b9\u4e91\u62fc\u63a5\u3001\u70b9\u4e91\u6ce8\u518c\uff0c\u5bf9\u4e8e\u4e24\u5e27\u6709\u91cd\u53e0\u4fe1\u606f\u7684\u70b9\u4e91\uff0c\u901a\u8fc7\u6c42\u89e3\u53d8\u6362\u77e9\u9635\uff08\u65cb\u8f6c\u77e9\u9635 R \u548c\u5e73\u79fb\u77e9\u9635 T\uff09\uff0c\u4f7f\u5f97\u91cd\u53e0\u90e8\u5206\u70b9\u4e91\u53d8\u6362\u5230\u540c\u4e00\u4e2a\u7edf\u4e00\u7684\u5750\u6807\u7cfb\u4e0b\u3002 \u524d\u671f\u4ee5\u4f20\u7edf\u65b9\u6cd5\u4e3a\u4e3b\uff0c2018 \u5e74\u53ca\u4ee5\u540e\u57fa\u4e8e\u6df1\u5ea6\u5b66\u4e60\u7684\u914d\u51c6\u65b9\u6cd5\u5c45\u4e0a\u3002 \u70b9\u4e91\u914d\u51c6\u53ef\u4ee5\u57fa\u4e8e\u4ee5\u4e0b 5 \u4e2a\u65b9\u9762\u5b66\u4e60\u548c\u8fdb\u9636\uff1a ICP \u7b97\u6cd5 \uff1a\u70b9\u4e91\u914d\u51c6\u9886\u57df\u6700\u4e3a\u7ecf\u5178\u7684\u7b97\u6cd5\uff0c Least-squares fitting of two 3-D point sets \uff0c\u8bc1\u660e\u4e86\u5982\u4f55\u5728\u5df2\u77e5\u70b9\u5bf9\u7684\u5173\u7cfb\u65f6\u7528 SVD \u6c42\u89e3\u53d8\u6362\u77e9\u9635\u3002 PFH \u548c FPFH \u7279\u5f81\u548c\u57fa\u4e8e RANSAC \u7684\u914d\u51c6\u7b97\u6cd5 \uff1aICP \u7b97\u6cd5\u7684\u7f3a\u70b9\u5f88\u660e\u663e\uff0c\u5bfb\u627e\u70b9\u5bf9\u5e94\u5173\u7cfb\u65f6\u662f\u57fa\u4e8e\u8ddd\u79bb\u7684\uff0c\u5f53\u521d\u59cb\u4f4d\u59ff\u5f88\u5dee\u65f6\uff0cICP \u7b97\u6cd5\u57fa\u672c\u5931\u6548\u3002\u57fa\u4e8e\u7279\u5f81 + RANSAC \u7684\u7b97\u6cd5\u6b64\u65f6\u53d1\u6325\u4f18\u52bf\uff0c\u5b83\u901a\u8fc7\u70b9\u7684\u7279\u5f81\u5bfb\u627e\u5bf9\u5e94\u70b9\u5bf9\uff0c\u53ea\u8981\u70b9\u7684\u7279\u5f81\u8868\u8fbe\u80fd\u529b\u591f\u5f3a\uff0c\u5373\u4f7f\u521d\u59cb\u4f4d\u59ff\u5f88\u5dee\uff0c\u4e5f\u53ef\u4ee5\u627e\u5230\u6b63\u786e\u7684\u70b9\u5bf9\u5e94\u5173\u7cfb\uff0c\u4ece\u800c\u5b9e\u73b0\u70b9\u4e91\u914d\u51c6\uff1b\u4f46\u70b9\u7684\u7279\u5f81\u5728\u5927\u591a\u6570\u60c5\u51b5\u4e0b\u662f\u4e0d\u9c81\u68d2\u7684\uff0c\u6240\u4ee5\u7ed3\u5408 RANSAC \u7b97\u6cd5\u662f\u4e0d\u9519\u7684\u9009\u62e9\u3002\u7279\u5f81\u63cf\u8ff0\u5b50\u5efa\u8bae\u67e5\u770b FPFH\uff0c\u5bf9\u5e94\u8bba\u6587\u4e3a Fast point feature histograms (FPFH) for 3D registration (ICRA 2009) \u7aef\u5230\u7aef\u7684\u6df1\u5ea6\u5b66\u4e60\u914d\u51c6\u6a21\u578b \uff1a\u6700\u8fd1\u4e24\u4e09\u5e74\u7684\u65f6\u95f4\u57fa\u4e8e\u6df1\u5ea6\u5b66\u4e60\u7684\u914d\u51c6\u6a21\u578b\u51fa\u73b0\u5f88\u591a\uff0c\u5305\u62ec\u57fa\u4e8e global features-based \u548c correspongence-based\uff0c\u4e24\u79cd\u6a21\u5f0f\u3002Global features-based \u65b9\u6cd5\u5305\u62ec PointNetLK: Point Cloud Registration using PointNet (CVPR2019) \u548c PCRNet: Point Cloud Registration Network using PointNet Encoding (arXiv2019) \u3002 \u8fd9\u91cc\u53ef\u4ee5\u4f18\u5148\u770b PCRNet, \u56e0\u4e3a\u5176\u7b97\u6cd5\u548c\u5b9e\u73b0\u8f83\u4e3a\u7b80\u5355, \u5bb9\u6613 follow\u3002Correspondence-based \u65b9\u6cd5\u7684\u5178\u578b\u4ee3\u8868\u5305\u62ec DCP (ICCV2019) , PRNet (NeurIPS) \u548c RPMNet (CVPR2020) . \u8fd9\u4e9b\u65b9\u6cd5\u90fd\u662f\u5f00\u6e90\u7684, \u9664\u4e86 PRNet \u7684\u4ee3\u7801\u5728\u8bad\u7ec3\u65f6\u5bb9\u6613\u5d29\u6e83\u5916\uff0c\u5176\u5b83\u7684\u4ee3\u7801\u90fd\u662f\u4e0d\u9519\u7684\u3002 \u57fa\u4e8e RANSAC \u7684\u6df1\u5ea6\u5b66\u4e60\u914d\u51c6\u6a21\u578b \uff1a\u7aef\u5230\u7aef\u7684\u6df1\u5ea6\u5b66\u4e60\u914d\u51c6\u6a21\u578b\u5927\u591a\u53ea\u5728 ModelNet40 \u4e0a\u662f\u6709\u6548\u7684\uff0c\u9762\u5bf9\u771f\u5b9e\u7684\u6570\u636e\u96c6\u5982 3DMatch \u548c KITTI \u65f6\u5219\u6548\u679c\u8868\u73b0\u4e0d\u597d\u3002\u4e00\u90e8\u5206\u539f\u56e0\u662f\u771f\u5b9e\u6570\u636e\u96c6\u8f83\u4e3a\u590d\u6742\uff0c\u53e6\u4e00\u90e8\u5206\u539f\u56e0\u662f\u7f51\u7edc\u7ed3\u6784\u4e0d\u8db3\u4ee5\u51c6\u786e\u5b66\u4e60\u5927\u90e8\u5206\u70b9\u7684\u7279\u5f81\u3002\u7531\u6b64\u5c31\u4f1a\u5bfc\u81f4 Inlier ratio \u8f83\u4f4e\uff0c\u7aef\u5230\u7aef\u7684\u914d\u51c6\u7f51\u7edc\u4e0d\u80fd\u53d1\u6325\u5f88\u597d\u7684\u6548\u679c\u3002\u57fa\u4e8e RANSAC \u7684\u6df1\u5ea6\u5b66\u4e60\u914d\u51c6\u4e3b\u8981\u4ee3\u8868\u5305\u62ec FCGF (ICCV 2019) , D3Feat (CVPR2020) \u548c PREDATOR (CVPR2021) . Open3D\u7684\u4f7f\u7528 \uff1a\u6700\u540e\u4f46\u4e5f\u662f\u5f88\u91cd\u8981\u7684\u4e00\u73af\uff0c\u4e00\u4e2a\u9ad8\u6548\u5904\u7406\u70b9\u4e91\u7684\u5de5\u5177\uff0c\u63a8\u8350 Open3D \u3002Open3D \u63d0\u4f9b\u4e86 4 \u4e2a\u548c\u914d\u51c6\u6709\u5173\u7684\u51fd\u6570\uff0c\u5305\u62ec ICP \u53ca\u5176\u53d8\u79cd\uff0c\u57fa\u4e8e RANSAC \u7684\u7b97\u6cd5\u548c FGR \u7b97\u6cd5\u7b49\u3002","title":"\u524d\u7f6e\u77e5\u8bc6"},{"location":"cv/pcr/prepare/#_1","text":"\u7ea6 2032 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f Abstract \u70b9\u4e91\u914d\u51c6\u57fa\u7840\u77e5\u8bc6\uff0c\u4e3b\u8981\u4e3a\u70b9\u4e91\u57fa\u7840\u3001\u5904\u7406\u65b9\u6cd5\u548c\u70b9\u4e91\u914d\u51c6\u65b9\u6cd5\u7684\u4ecb\u7ecd\u548c\u6bd4\u8f83\u7b49","title":"\u524d\u7f6e\u77e5\u8bc6"},{"location":"cv/pcr/prepare/#_2","text":"\u70b9\u4e91\u6982\u5ff5\uff1a\u70b9\u4e91\u662f\u540c\u4e00\u7a7a\u95f4\u53c2\u8003\u7cfb\u4e0b\u8868\u8fbe\u76ee\u6807\u7a7a\u95f4\u5206\u5e03\u548c\u76ee\u6807\u8868\u9762\u7279\u6027\u7684\u6d77\u91cf\u70b9\u96c6\u5408\uff0c\u5728\u83b7\u53d6\u7269\u4f53\u8868\u9762\u6bcf\u4e2a\u91c7\u6837\u70b9\u7684\u7a7a\u95f4\u5750\u6807\u540e\uff0c\u5f97\u5230\u7684\u662f\u70b9\u7684\u96c6\u5408\uff0c\u79f0\u4e4b\u4e3a\u201c\u70b9\u4e91\u201d\uff08Point Cloud\uff09\u3002 \u70b9\u4e91\u56fe\u50cf\u662f\u6700\u57fa\u7840\u4e5f\u662f\u6700\u5e38\u89c1\u7684\u4e09\u7ef4\u56fe\u50cf\uff1a\u4e09\u7ef4\u56fe\u50cf\u662f\u4e00\u79cd\u7279\u6b8a\u7684\u56fe\u50cf\u4fe1\u606f\u8868\u8fbe\u5f62\u5f0f\uff0c\u76f8\u8f83\u4e8e\u5e38\u89c1\u7684\u4e8c\u7ef4\u56fe\u50cf\uff0c\u5176\u6700\u5927\u7684\u7279\u5f81\u662f\u8868\u8fbe\u4e86\u7a7a\u95f4\u4e2d\u4e09\u4e2a\u7ef4\u5ea6\uff08\u957f\u5ea6\u5bbd\u5ea6\u548c\u6df1\u5ea6\uff09\u7684\u6570\u636e\u3002 \u4e09\u7ef4\u56fe\u50cf\u7684\u8868\u73b0\u5f62\u5f0f\uff1a\u6df1\u5ea6\u56fe\uff08\u4ee5\u7070\u5ea6\u8868\u8fbe\u7269\u4f53\u4e0e\u76f8\u673a\u7684\u8ddd\u79bb\uff09\uff0c\u51e0\u4f55\u6a21\u578b\uff08\u7531 CAD \u8f6f\u4ef6\u5efa\u7acb\uff09\uff0c\u70b9\u4e91\u6a21\u578b\uff08\u6240\u6709\u9006\u5411\u5de5\u7a0b\u8bbe\u5907\u90fd\u5c06\u7269\u4f53\u91c7\u6837\u6210\u70b9\u4e91\uff09\u3002 \u70b9\u4e91\u6839\u636e\u6d4b\u91cf\u539f\u7406\u4e3b\u8981\u5206\u4e3a\u4e24\u79cd \u6839\u636e\u6fc0\u5149\u6d4b\u91cf\u539f\u7406\u5f97\u5230\u7684\u70b9\u4e91\uff0c\u5305\u62ec\u4e09\u7ef4\u5750\u6807 XYZ \u548c\u6fc0\u5149\u53cd\u5c04\u5f3a\u5ea6 I\u3002\u5f3a\u5ea6\u4fe1\u606f\u4e0e\u76ee\u6807\u7684\u8868\u9762\u6750\u8d28\u3001\u7c97\u7cd9\u5ea6\u3001\u5165\u5c04\u89d2\u65b9\u5411\uff0c\u4ee5\u53ca\u4eea\u5668\u7684\u53d1\u5c04\u80fd\u91cf\uff0c\u6fc0\u5149\u6ce2\u957f\u6709\u5173\u3002 \u6839\u636e\u6444\u5f71\u6d4b\u91cf\u539f\u7406\u5f97\u5230\u7684\u70b9\u4e91\uff0c\u5305\u62ec\u4e09\u7ef4\u5750\u6807 XYZ \u548c\u989c\u8272\u4fe1\u606f RGB\u3002 \u8fd8\u6709\u6fc0\u5149\u548c\u6444\u5f71\u76f8\u7ed3\u5408\u5728\u4e00\u8d77\u7684\u591a\u4f20\u611f\u5668\u878d\u5408\u6280\u672f\uff0c\u8fd9\u79cd\u5f97\u5230\u7684\u5305\u62ec\u4e09\u7ef4\u5750\u6807 XYZ\u3001\u989c\u8272\u4fe1\u606f RGB \u548c\u6fc0\u5149\u53cd\u5c04\u5f3a\u5ea6 I\u3002 \u70b9\u4e91\u7684\u83b7\u53d6\u8bbe\u5907\uff08\u53ea\u9488\u5bf9\u6444\u5f71\uff09\uff1aRGBD\u8bbe\u5907\uff08\u6df1\u5ea6\u6444\u50cf\u673a\uff09\u3002 \u70b9\u4e91\u7684\u5c5e\u6027\uff1a\u7a7a\u95f4\u5206\u8fa8\u7387\u3001\u70b9\u4e91\u7cbe\u5ea6\u3001\u8868\u9762\u6cd5\u5411\u91cf\u7b49\u3002 \u70b9\u4e91\u5b58\u50a8\u683c\u5f0f .pts; .asc; .dat; .stl; .imw; .xyz; .las; \u70b9\u4e91\u7684\u6570\u636e\u7c7b\u578b\uff08\u4ee5 PCL \u5e93\u4e3a\u4f8b\uff09\uff1a pcl::PointXYZ \uff1afloat x, y, z; \u8868\u793a\u4e86 xyz3D \u4fe1\u606f\uff0c\u53ef\u4ee5\u901a\u8fc7 points[i].data[0] \u6216 points[i].x \u8bbf\u95ee x \u5750\u6807\u503c\u3002 pcl::PointXYZI \uff1afloat x, y, z, intensity; \u8868\u793a\u4e86 XYZ \u4fe1\u606f\u52a0\u4e0a\u5f3a\u5ea6\u4fe1\u606f\u7684\u7c7b\u578b\u3002 pcl::PointXYZRGB \uff1afloat x, y, z, rgb; \u8868\u793a\u4e86 XYZ \u4fe1\u606f\u52a0\u4e0a RGB \u4fe1\u606f\uff0cRGB \u5b58\u50a8\u4e3a\u4e00\u4e2a float\u3002 pcl::PointXYZRGBA \uff1afloat x, y, z; uint32_t rgba; \u8868\u793a\u4e86 XYZ \u4fe1\u606f\u52a0\u4e0a RGBA \u4fe1\u606f\uff0cRGBA \u7528 32bit \u7684 int \u578b\u5b58\u50a8\u7684\u3002 pcl::PointXY \uff1afloat x, y; \u8868\u793a\u4e86 XY \u4fe1\u606f\u3002 pcl::Normal \uff1a\u8868\u793a\u7ed9\u5b9a\u70b9\u6240\u5728\u6837\u672c\u66f2\u9762\u4e0a\u7684\u6cd5\u7ebf\u65b9\u5411\uff0c\u4ee5\u53ca\u5bf9\u5e94\u66f2\u7387\u7684\u6d4b\u91cf\u503c\uff0c\u7528\u7b2c\u56db\u4e2a\u5143\u7d20\u6765\u5360\u4f4d\uff0c\u517c\u5bb9 SSE \u548c\u9ad8\u6548\u8ba1\u7b97","title":"\u70b9\u4e91\u57fa\u7840"},{"location":"cv/pcr/prepare/#_3","text":"\u56fe\u50cf\u5904\u7406\u7684\u4e09\u4e2a\u5c42\u6b21 \u4f4e\u5c42\u6b21\uff1a\u56fe\u50cf\u5f3a\u5316\uff0c\u6ee4\u6ce2\uff0c\u5173\u952e\u70b9/\u8fb9\u7f18\u68c0\u6d4b\u7b49\u57fa\u672c\u64cd\u4f5c \u4e2d\u5c42\u6b21\uff1a\u8fde\u901a\u57df\u6807\u8bb0\uff0c\u56fe\u50cf\u5206\u5272\u7b49\u64cd\u4f5c \u9ad8\u5c42\u6b21\uff1a\u7269\u4f53\u8bc6\u522b\uff0c\u573a\u666f\u5206\u6790\u7b49\u64cd\u4f5c PCL \u5bf9\u70b9\u4e91\u5904\u7406\u65b9\u6cd5\u7ed9\u51fa\u8f83\u4e3a\u660e\u6670\u7684\u5c42\u6b21\u5212\u5206\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a","title":"\u70b9\u4e91\u5904\u7406"},{"location":"cv/pcr/prepare/#_4","text":"\u6ee4\u6ce2\u65b9\u6cd5\uff1a\u53cc\u8fb9\u6ee4\u6ce2\u3001\u9ad8\u65af\u6ee4\u6ce2\u3001\u6761\u4ef6\u6ee4\u6ce2\u3001\u76f4\u901a\u6ee4\u6ce2\u3001\u968f\u673a\u91c7\u6837\u4e00\u81f4\u6027\u6ee4\u6ce2 \u5173\u952e\u70b9\uff1aISS3D\u3001Harris3D\u3001NARF\u3001SIFT3D","title":"\u4f4e\u5c42\u6b21\u5904\u7406\u65b9\u6cd5"},{"location":"cv/pcr/prepare/#_5","text":"\u7279\u5f81\u63cf\u8ff0\uff1a\u6cd5\u7ebf\u548c\u66f2\u7387\u7684\u8ba1\u7b97\u3001\u7279\u5f81\u503c\u5206\u6790\u3001SHOT\u3001PFH\u3001FPFH\u30013D Shape Context\u3001Spin Image \u5206\u5272\u4e0e\u5206\u7c7b\uff1a \u5206\u5272\uff1a\u533a\u57df\u751f\u957f\u3001Ransac \u7ebf\u9762\u63d0\u53d6\u3001\u5168\u5c40\u4f18\u5316\u5e73\u9762\u63d0\u53d6\u3001K-Means\u3001Normalize Cut \uff08Context based\uff09\u30013D Hough Transform\uff08\u7ebf\u3001\u9762\u63d0\u53d6\uff09\u3001\u8fde\u901a\u5206\u6790 \u5206\u7c7b\uff1a\u57fa\u4e8e\u70b9\u7684\u5206\u7c7b\u3001\u57fa\u4e8e\u5206\u5272\u7684\u5206\u7c7b\u3001\u57fa\u4e8e\u6df1\u5ea6\u5b66\u4e60\u7684\u5206\u7c7b\uff08PointNet\u3001OctNet\uff09","title":"\u4e2d\u5c42\u6b21\u5904\u7406\u65b9\u6cd5"},{"location":"cv/pcr/prepare/#_6","text":"\u914d\u51c6\uff1a\u70b9\u4e91\u914d\u51c6\u5206\u4e3a\u7c97\u914d\u51c6\uff08Coarse Registration\uff09\u548c\u7cbe\u914d\u51c6\uff08Fine Registration\uff09\u4e24\u4e2a\u9636\u6bb5\u3002 \u7c97\u914d\u51c6 \u662f\u6307\u5728\u70b9\u4e91\u76f8\u5bf9\u4f4d\u59ff\u5b8c\u5168\u4f4d\u7f6e\u7684\u60c5\u51b5\u4e0b\u5bf9\u70b9\u4e91\u8fdb\u884c\u914d\u51c6\uff0c\u53ef\u4ee5\u4e3a\u7cbe\u914d\u51c6\u63d0\u4f9b\u826f\u597d\u7684\u521d\u59cb\u503c\u3002\u5f53\u524d\u8f83\u4e3a\u666e\u904d\u7684\u70b9\u4e91\u81ea\u52a8\u7c97\u914d\u51c6\u7b97\u6cd5\u5305\u62ec\u7a77\u4e3e\u641c\u7d22\u7684\u914d\u51c6\u7b97\u6cd5\u548c\u57fa\u4e8e\u7279\u5f81\u5339\u914d\u7684\u914d\u51c6\u7b97\u6cd5 \u57fa\u4e8e\u7a77\u4e3e\u641c\u7d22\u7684\u914d\u51c6\u7b97\u6cd5 \uff1a\u904d\u5386\u6574\u4e2a\u53d8\u6362\u7a7a\u95f4\u4ee5\u9009\u53d6\u4f7f\u8bef\u5dee\u51fd\u6570\u6700\u5c0f\u5316\u7684\u53d8\u6362\u5173\u7cfb\u6216\u8005\u5217\u4e3e\u51fa\u4f7f\u6700\u591a\u70b9\u5bf9\u6ee1\u8db3\u7684\u53d8\u6362\u5173\u7cfb\u3002\u5982 RANSAC \u914d\u51c6\u7b97\u6cd5\u3001\u56db\u70b9\u4e00\u81f4\u96c6\u914d\u51c6\u7b97\u6cd5\uff084-Point Congruent Set\uff0c4PCS\uff09\u3001Super4PCS \u7b97\u6cd5\u7b49 \u57fa\u4e8e\u7279\u5f81\u5339\u914d\u7684\u914d\u51c6\u7b97\u6cd5 \uff1a\u901a\u8fc7\u88ab\u6d4b\u7269\u4f53\u672c\u8eab\u6240\u5177\u5907\u7684\u5f62\u6001\u7279\u6027\u6784\u5efa\u70b9\u4e91\u95f4\u7684\u5339\u914d\u5bf9\u5e94\uff0c\u7136\u540e\u91c7\u7528\u76f8\u5173\u7b97\u6cd5\u5bf9\u53d8\u6362\u5173\u7cfb\u8fdb\u884c\u4f30\u8ba1\u3002\u5982\u57fa\u4e8e\u70b9 FPFH \u7279\u5f81\u7684 SAC-IA\u3001FGR \u7b49\u7b97\u6cd5\u3001\u57fa\u4e8e\u70b9 SHOT \u7279\u5f81\u7684 AO \u7b97\u6cd5\u4ee5\u53ca\u57fa\u4e8e\u7ebf\u7279\u5f81\u7684 ICL \u7b49 \u7cbe\u914d\u51c6 \u7684\u76ee\u7684\u662f\u5728\u7c97\u914d\u51c6\u7684\u57fa\u7840\u4e0a\u8ba9\u70b9\u4e91\u4e4b\u95f4\u7684\u7a7a\u95f4\u4f4d\u7f6e\u5dee\u522b\u6700\u5c0f\u5316\u3002\u5e94\u7528\u6700\u4e3a\u5e7f\u6cdb\u7684\u7cbe\u914d\u51c6\u7b97\u6cd5\u5e94\u8be5\u662f ICP \u4ee5\u53ca ICP \u7684\u5404\u79cd\u53d8\u79cd\uff08\u7a33\u5065 ICP\u3001point to plane ICP\u3001Point to line ICP\u3001MBICP\u3001GICP\u3001NICP\uff09 SLAM \u56fe\u4f18\u5316 Ceres\u3001g2o\u3001LUM\u3001ELCH\u3001Toro\u3001SPA SLAM \u65b9\u6cd5\uff1aICP\u3001MBICP\u3001IDC\u3001likehood Field\u3001NDT \u4e09\u7ef4\u91cd\u5efa \u67cf\u677e\u91cd\u5efa\u3001Delaunay triangulations\u3001\u8868\u9762\u91cd\u5efa\u3001\u4eba\u4f53\u91cd\u5efa\u3001\u5efa\u7b51\u7269\u91cd\u5efa\u3001\u6811\u6728\u91cd\u5efa \u7ed3\u6784\u5316\u91cd\u5efa\uff1a\u4e0d\u662f\u7b80\u5355\u7684\u6784\u5efa\u4e00\u4e2a Mesh \u7f51\u683c\uff0c\u800c\u662f\u4e3a\u573a\u666f\u8fdb\u884c\u5206\u5272\uff0c\u4e3a\u573a\u666f\u7ed3\u6784\u8d4b\u4e88\u8bed\u4e49\u4fe1\u606f\u3002\u573a\u666f\u7ed3\u6784\u6709\u5c42\u6b21\u4e4b\u5206\uff0c\u5728\u51e0\u4f55\u5c42\u6b21\u5c31\u662f\u70b9\u7ebf\u9762 \u5b9e\u65f6\u91cd\u5efa\uff1a\u91cd\u5efa\u690d\u88ab\u6216\u8005\u519c\u4f5c\u7269\u7684 4D\uff083D+\u65f6\u95f4\uff09\u751f\u957f\u6001\u52bf\uff1b\u4eba\u4f53\u59ff\u6001\u8bc6\u522b\uff1b\u8868\u60c5\u8bc6\u522b \u70b9\u4e91\u6570\u636e\u7ba1\u7406\uff1a\u70b9\u4e91\u538b\u7f29\uff0c\u70b9\u4e91\u7d22\u5f15\uff08KD\u3001Octree\uff09\uff0c\u70b9\u4e91 LOD\uff08\u91d1\u5b57\u5854\uff09\uff0c\u6d77\u91cf\u70b9\u4e91\u7684\u6e32\u67d3","title":"\u9ad8\u5c42\u6b21\u5904\u7406\u65b9\u6cd5"},{"location":"cv/pcr/prepare/#_7","text":"\u70b9\u4e91\u914d\u51c6\uff08Point Cloud Registration\uff09\uff0c\u53c8\u540d\u70b9\u4e91\u62fc\u63a5\u3001\u70b9\u4e91\u6ce8\u518c\uff0c\u5bf9\u4e8e\u4e24\u5e27\u6709\u91cd\u53e0\u4fe1\u606f\u7684\u70b9\u4e91\uff0c\u901a\u8fc7\u6c42\u89e3\u53d8\u6362\u77e9\u9635\uff08\u65cb\u8f6c\u77e9\u9635 R \u548c\u5e73\u79fb\u77e9\u9635 T\uff09\uff0c\u4f7f\u5f97\u91cd\u53e0\u90e8\u5206\u70b9\u4e91\u53d8\u6362\u5230\u540c\u4e00\u4e2a\u7edf\u4e00\u7684\u5750\u6807\u7cfb\u4e0b\u3002 \u524d\u671f\u4ee5\u4f20\u7edf\u65b9\u6cd5\u4e3a\u4e3b\uff0c2018 \u5e74\u53ca\u4ee5\u540e\u57fa\u4e8e\u6df1\u5ea6\u5b66\u4e60\u7684\u914d\u51c6\u65b9\u6cd5\u5c45\u4e0a\u3002 \u70b9\u4e91\u914d\u51c6\u53ef\u4ee5\u57fa\u4e8e\u4ee5\u4e0b 5 \u4e2a\u65b9\u9762\u5b66\u4e60\u548c\u8fdb\u9636\uff1a ICP \u7b97\u6cd5 \uff1a\u70b9\u4e91\u914d\u51c6\u9886\u57df\u6700\u4e3a\u7ecf\u5178\u7684\u7b97\u6cd5\uff0c Least-squares fitting of two 3-D point sets \uff0c\u8bc1\u660e\u4e86\u5982\u4f55\u5728\u5df2\u77e5\u70b9\u5bf9\u7684\u5173\u7cfb\u65f6\u7528 SVD \u6c42\u89e3\u53d8\u6362\u77e9\u9635\u3002 PFH \u548c FPFH \u7279\u5f81\u548c\u57fa\u4e8e RANSAC \u7684\u914d\u51c6\u7b97\u6cd5 \uff1aICP \u7b97\u6cd5\u7684\u7f3a\u70b9\u5f88\u660e\u663e\uff0c\u5bfb\u627e\u70b9\u5bf9\u5e94\u5173\u7cfb\u65f6\u662f\u57fa\u4e8e\u8ddd\u79bb\u7684\uff0c\u5f53\u521d\u59cb\u4f4d\u59ff\u5f88\u5dee\u65f6\uff0cICP \u7b97\u6cd5\u57fa\u672c\u5931\u6548\u3002\u57fa\u4e8e\u7279\u5f81 + RANSAC \u7684\u7b97\u6cd5\u6b64\u65f6\u53d1\u6325\u4f18\u52bf\uff0c\u5b83\u901a\u8fc7\u70b9\u7684\u7279\u5f81\u5bfb\u627e\u5bf9\u5e94\u70b9\u5bf9\uff0c\u53ea\u8981\u70b9\u7684\u7279\u5f81\u8868\u8fbe\u80fd\u529b\u591f\u5f3a\uff0c\u5373\u4f7f\u521d\u59cb\u4f4d\u59ff\u5f88\u5dee\uff0c\u4e5f\u53ef\u4ee5\u627e\u5230\u6b63\u786e\u7684\u70b9\u5bf9\u5e94\u5173\u7cfb\uff0c\u4ece\u800c\u5b9e\u73b0\u70b9\u4e91\u914d\u51c6\uff1b\u4f46\u70b9\u7684\u7279\u5f81\u5728\u5927\u591a\u6570\u60c5\u51b5\u4e0b\u662f\u4e0d\u9c81\u68d2\u7684\uff0c\u6240\u4ee5\u7ed3\u5408 RANSAC \u7b97\u6cd5\u662f\u4e0d\u9519\u7684\u9009\u62e9\u3002\u7279\u5f81\u63cf\u8ff0\u5b50\u5efa\u8bae\u67e5\u770b FPFH\uff0c\u5bf9\u5e94\u8bba\u6587\u4e3a Fast point feature histograms (FPFH) for 3D registration (ICRA 2009) \u7aef\u5230\u7aef\u7684\u6df1\u5ea6\u5b66\u4e60\u914d\u51c6\u6a21\u578b \uff1a\u6700\u8fd1\u4e24\u4e09\u5e74\u7684\u65f6\u95f4\u57fa\u4e8e\u6df1\u5ea6\u5b66\u4e60\u7684\u914d\u51c6\u6a21\u578b\u51fa\u73b0\u5f88\u591a\uff0c\u5305\u62ec\u57fa\u4e8e global features-based \u548c correspongence-based\uff0c\u4e24\u79cd\u6a21\u5f0f\u3002Global features-based \u65b9\u6cd5\u5305\u62ec PointNetLK: Point Cloud Registration using PointNet (CVPR2019) \u548c PCRNet: Point Cloud Registration Network using PointNet Encoding (arXiv2019) \u3002 \u8fd9\u91cc\u53ef\u4ee5\u4f18\u5148\u770b PCRNet, \u56e0\u4e3a\u5176\u7b97\u6cd5\u548c\u5b9e\u73b0\u8f83\u4e3a\u7b80\u5355, \u5bb9\u6613 follow\u3002Correspondence-based \u65b9\u6cd5\u7684\u5178\u578b\u4ee3\u8868\u5305\u62ec DCP (ICCV2019) , PRNet (NeurIPS) \u548c RPMNet (CVPR2020) . \u8fd9\u4e9b\u65b9\u6cd5\u90fd\u662f\u5f00\u6e90\u7684, \u9664\u4e86 PRNet \u7684\u4ee3\u7801\u5728\u8bad\u7ec3\u65f6\u5bb9\u6613\u5d29\u6e83\u5916\uff0c\u5176\u5b83\u7684\u4ee3\u7801\u90fd\u662f\u4e0d\u9519\u7684\u3002 \u57fa\u4e8e RANSAC \u7684\u6df1\u5ea6\u5b66\u4e60\u914d\u51c6\u6a21\u578b \uff1a\u7aef\u5230\u7aef\u7684\u6df1\u5ea6\u5b66\u4e60\u914d\u51c6\u6a21\u578b\u5927\u591a\u53ea\u5728 ModelNet40 \u4e0a\u662f\u6709\u6548\u7684\uff0c\u9762\u5bf9\u771f\u5b9e\u7684\u6570\u636e\u96c6\u5982 3DMatch \u548c KITTI \u65f6\u5219\u6548\u679c\u8868\u73b0\u4e0d\u597d\u3002\u4e00\u90e8\u5206\u539f\u56e0\u662f\u771f\u5b9e\u6570\u636e\u96c6\u8f83\u4e3a\u590d\u6742\uff0c\u53e6\u4e00\u90e8\u5206\u539f\u56e0\u662f\u7f51\u7edc\u7ed3\u6784\u4e0d\u8db3\u4ee5\u51c6\u786e\u5b66\u4e60\u5927\u90e8\u5206\u70b9\u7684\u7279\u5f81\u3002\u7531\u6b64\u5c31\u4f1a\u5bfc\u81f4 Inlier ratio \u8f83\u4f4e\uff0c\u7aef\u5230\u7aef\u7684\u914d\u51c6\u7f51\u7edc\u4e0d\u80fd\u53d1\u6325\u5f88\u597d\u7684\u6548\u679c\u3002\u57fa\u4e8e RANSAC \u7684\u6df1\u5ea6\u5b66\u4e60\u914d\u51c6\u4e3b\u8981\u4ee3\u8868\u5305\u62ec FCGF (ICCV 2019) , D3Feat (CVPR2020) \u548c PREDATOR (CVPR2021) . Open3D\u7684\u4f7f\u7528 \uff1a\u6700\u540e\u4f46\u4e5f\u662f\u5f88\u91cd\u8981\u7684\u4e00\u73af\uff0c\u4e00\u4e2a\u9ad8\u6548\u5904\u7406\u70b9\u4e91\u7684\u5de5\u5177\uff0c\u63a8\u8350 Open3D \u3002Open3D \u63d0\u4f9b\u4e86 4 \u4e2a\u548c\u914d\u51c6\u6709\u5173\u7684\u51fd\u6570\uff0c\u5305\u62ec ICP \u53ca\u5176\u53d8\u79cd\uff0c\u57fa\u4e8e RANSAC \u7684\u7b97\u6cd5\u548c FGR \u7b97\u6cd5\u7b49\u3002","title":"\u70b9\u4e91\u914d\u51c6"},{"location":"cv/slam/","text":"SLAM \u00b6 Abstract \u5f52\u6863\u4e00\u4e9b\u5b66\u4e60 SLAM \u7684\u76f8\u5173\u7b14\u8bb0 Table of Contents \u00b6 \u89c6\u89c9 SLAM \u5341\u56db\u8bb2","title":"SLAM"},{"location":"cv/slam/#slam","text":"Abstract \u5f52\u6863\u4e00\u4e9b\u5b66\u4e60 SLAM \u7684\u76f8\u5173\u7b14\u8bb0","title":"SLAM"},{"location":"cv/slam/#table-of-contents","text":"\u89c6\u89c9 SLAM \u5341\u56db\u8bb2","title":"Table of Contents"},{"location":"cv/slam/vslam14/","text":"\u89c6\u89c9 SLAM \u5341\u56db\u8bb2 \u00b6 Abstract \u5b66\u4e60\u89c6\u89c9 SLAM \u5fc5\u770b\u7684\u4e00\u672c\u4e66\uff0c\u5165\u95e8\u7ea7 Table of Contents \u00b6 \u521d\u8bc6 SLAM \u4e09\u7ef4\u7a7a\u95f4\u521a\u4f53\u8fd0\u52a8 References \u00b6 \u300a\u89c6\u89c9 SLAM \u5341\u56db\u8bb2\uff08\u7b2c\u4e8c\u7248\uff09\u300b\u9ad8\u7fd4 \u731b\u5973\u7626\u7626 SLAM \u5341\u56db\u8bb2\u91cd\u8981\u516c\u5f0f\u5b9a\u7406\u6574\u7406\uff08\u4e0a\uff09 \u53f2\u4e0a\u6700\u5168slam\u4ece\u96f6\u5f00\u59cb","title":"\u89c6\u89c9 SLAM \u5341\u56db\u8bb2"},{"location":"cv/slam/vslam14/#slam","text":"Abstract \u5b66\u4e60\u89c6\u89c9 SLAM \u5fc5\u770b\u7684\u4e00\u672c\u4e66\uff0c\u5165\u95e8\u7ea7","title":"\u89c6\u89c9 SLAM \u5341\u56db\u8bb2"},{"location":"cv/slam/vslam14/#table-of-contents","text":"\u521d\u8bc6 SLAM \u4e09\u7ef4\u7a7a\u95f4\u521a\u4f53\u8fd0\u52a8","title":"Table of Contents"},{"location":"cv/slam/vslam14/#references","text":"\u300a\u89c6\u89c9 SLAM \u5341\u56db\u8bb2\uff08\u7b2c\u4e8c\u7248\uff09\u300b\u9ad8\u7fd4 \u731b\u5973\u7626\u7626 SLAM \u5341\u56db\u8bb2\u91cd\u8981\u516c\u5f0f\u5b9a\u7406\u6574\u7406\uff08\u4e0a\uff09 \u53f2\u4e0a\u6700\u5168slam\u4ece\u96f6\u5f00\u59cb","title":"References"},{"location":"cv/slam/vslam14/lec1/","text":"\u521d\u8bc6 SLAM \u00b6 Abstract SLAM \u662f S imultaneous L ocalization and M apping \u7684\u7f29\u5199\uff0c\u5373\u540c\u65f6\u5b9a\u4f4d\u4e0e\u5efa\u56fe\u3002\u5b83\u662f\u6307\u673a\u5668\u4eba\u5728\u672a\u77e5\u73af\u5883\u4e2d\u540c\u65f6\u5efa\u7acb\u5730\u56fe\u5e76\u786e\u5b9a\u81ea\u8eab\u4f4d\u7f6e\u7684\u8fc7\u7a0b\u3002 \u540c\u65f6 SLAM \u5206\u4e3a \u89c6\u89c9 SLAM \u548c \u6fc0\u5149 SLAM \uff0c\u8fd9\u91cc\u4e3b\u8981\u5b66\u4e60\u89c6\u89c9 SLAM\uff0c\u5176\u5b9e\u5b83\u4eec\u7684\u5dee\u8ddd\u4e0d\u662f\u5f88\u5927\uff0c\u90fd\u662f\u901a\u8fc7\u4f20\u611f\u5668\u83b7\u53d6\u73af\u5883\u4fe1\u606f\uff0c\u7136\u540e\u901a\u8fc7\u7b97\u6cd5\u8fdb\u884c\u5904\u7406\uff0c\u6700\u540e\u5f97\u5230\u5730\u56fe\u548c\u673a\u5668\u4eba\u7684\u4f4d\u7f6e\uff0c\u53ea\u4e0d\u8fc7\u4e00\u4e2a\u662f\u76f8\u673a\uff0c\u4e00\u4e2a\u662f\u6fc0\u5149\u3002 \u53ef\u4ee5\u89c2\u770b \u673a\u5668\u4eba\u5de5\u5320\u963f\u6770 \u6765\u4e86\u89e3 SLAM \u5728\u505a\u4ec0\u4e48\uff0c\u600e\u4e48\u505a\u3002","title":"\u521d\u8bc6 SLAM"},{"location":"cv/slam/vslam14/lec1/#slam","text":"Abstract SLAM \u662f S imultaneous L ocalization and M apping \u7684\u7f29\u5199\uff0c\u5373\u540c\u65f6\u5b9a\u4f4d\u4e0e\u5efa\u56fe\u3002\u5b83\u662f\u6307\u673a\u5668\u4eba\u5728\u672a\u77e5\u73af\u5883\u4e2d\u540c\u65f6\u5efa\u7acb\u5730\u56fe\u5e76\u786e\u5b9a\u81ea\u8eab\u4f4d\u7f6e\u7684\u8fc7\u7a0b\u3002 \u540c\u65f6 SLAM \u5206\u4e3a \u89c6\u89c9 SLAM \u548c \u6fc0\u5149 SLAM \uff0c\u8fd9\u91cc\u4e3b\u8981\u5b66\u4e60\u89c6\u89c9 SLAM\uff0c\u5176\u5b9e\u5b83\u4eec\u7684\u5dee\u8ddd\u4e0d\u662f\u5f88\u5927\uff0c\u90fd\u662f\u901a\u8fc7\u4f20\u611f\u5668\u83b7\u53d6\u73af\u5883\u4fe1\u606f\uff0c\u7136\u540e\u901a\u8fc7\u7b97\u6cd5\u8fdb\u884c\u5904\u7406\uff0c\u6700\u540e\u5f97\u5230\u5730\u56fe\u548c\u673a\u5668\u4eba\u7684\u4f4d\u7f6e\uff0c\u53ea\u4e0d\u8fc7\u4e00\u4e2a\u662f\u76f8\u673a\uff0c\u4e00\u4e2a\u662f\u6fc0\u5149\u3002 \u53ef\u4ee5\u89c2\u770b \u673a\u5668\u4eba\u5de5\u5320\u963f\u6770 \u6765\u4e86\u89e3 SLAM \u5728\u505a\u4ec0\u4e48\uff0c\u600e\u4e48\u505a\u3002","title":"\u521d\u8bc6 SLAM"},{"location":"cv/slam/vslam14/lec2/","text":"\u4e09\u7ef4\u7a7a\u95f4\u521a\u4f53\u8fd0\u52a8 \u00b6 \u7ea6 2134 \u4e2a\u5b57 34 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 8 \u5206\u949f Abstract \u7406\u89e3\u4e09\u7ef4\u7a7a\u95f4\u7684\u521a\u4f53\u8fd0\u52a8\u63cf\u8ff0\u65b9\u5f0f\uff1a\u65cb\u8f6c\u77e9\u9635\u3001\u53d8\u6362\u77e9\u9635\u3001\u56db\u5143\u6570\u548c\u6b27\u62c9\u89d2 \u638c\u63e1 Eigen \u5e93\u7684\u77e9\u9635\u3001\u51e0\u4f55\u6a21\u5757\u7684\u4f7f\u7528\u65b9\u6cd5 \u65cb\u8f6c\u77e9\u9635 \u00b6 \u70b9\u3001\u5411\u91cf\u548c\u5750\u6807\u7cfb \u00b6 \u7a7a\u95f4\u4e2d\u7684\u67d0\u70b9\u3002\u5176\u4f4d\u7f6e\u56fa\u5b9a\u3002\u82e5\u91c7\u7528\u4e0d\u540c\u7684\u5750\u6807\u7cfb\u63cf\u8ff0\uff0c\u5176\u5750\u6807\u4f4d\u7f6e\u5177\u4f53\u5f62\u5f0f\u662f\u4e0d\u540c\u7684\uff0c\u4f46\u662f\u8868\u8fbe\u7684\u70b9\u662f\u540c\u4e00\u4e2a\u70b9\u3002 \u7528\u7ebf\u4ee3\u8868\u793a\uff0c\u5728\u4e00\u4e2a\u7ebf\u6027\u7a7a\u95f4\u4e2d\uff0c\u627e\u5230\u8be5\u7a7a\u95f4\u7684\u4e00\u7ec4 \u57fa \\((\\mathbf{e}_1, \\mathbf{e}_2, \\mathbf{e}_3)\\) \uff0c\u90a3\u4e48\uff0c\u4efb\u610f\u5411\u91cf \\(\\mathbf{a}\\) \u5728\u8fd9\u7ec4\u57fa\u4e0b\u7684\u5750\u6807\u4e3a \\(\\mathbf{a}=[\\mathbf{e}_1, \\mathbf{e}_2, \\mathbf{e}_3][a_1,a_2,a_3]^\\top=a_1\\mathbf{e}_1+a_2\\mathbf{e}_2+a_3\\mathbf{e}_3\\) \u5750\u6807\u7cfb\u5b9a\u4e49\u65f6\uff0c\u6709\u53f3\u624b\u7cfb\u548c\u5de6\u624b\u7cfb\uff0c\u901a\u5e38\u91c7\u7528\u53f3\u624b\u7cfb \u5411\u91cf\u6709\u5185\u79ef\u548c\u5916\u79ef\u3002 \u5185\u79ef\uff1a \\(\\mathbf{a}\\mathbf{b}=\\mathbf{a}^\\top\\mathbf{b}=\\sum_{i=1}^3a_ib_i=|\\mathbf{a}||\\mathbf{b}|\\cos(\\mathbf{a}, \\mathbf{b})\\) \u5916\u79ef\uff1a \\[ \\mathbf{a} \\times \\mathbf{b}= \\begin{bmatrix} i & j & k \\\\ a_1 & a_2 & a_3 \\\\ b_1 & b_2 & b_3 \\end{bmatrix} = \\begin{bmatrix} a_2b_3-a_3b_2 \\\\ a_3b_1-a_1b_3 \\\\ a_1b_2-a_2b_1 \\end{bmatrix} = \\begin{bmatrix} 0 & -a_3 & a_2 \\\\ a_3 & 0 & -a_1 \\\\ -a_2 & a_1 & 0 \\end{bmatrix} \\mathbf{b} \\overset{\\Delta}{=} \\mathbf{a}^\\wedge \\mathbf{b} \\] \u5176\u4e2d\u7b26\u53f7 \\(\\wedge\\) \u79f0\u4e3a \u53cd\u5bf9\u79f0\u7b26\u53f7 \uff0c \\(\\mathbf{a}^\\wedge\\) \u4e3a \u53cd\u5bf9\u79f0\u77e9\u9635 \uff08\u6ee1\u8db3 \\(\\mathbf{A}^\\top=-\\mathbf{A}\\) \uff09\uff0c\u8fd9\u6837\u505a\u7684\u597d\u5904\u53ef\u4ee5\u5956\u5411\u91cf\u8fd0\u7b97\u53d8\u4e3a\u77e9\u9635\u8fd0\u7b97 \u5750\u6807\u7cfb\u95f4\u7684\u6b27\u6c0f\u53d8\u6362 \u00b6 \u4e24\u4e2a\u5750\u6807\u7cfb\u4e4b\u95f4\u7684\u8fd0\u52a8\u7531\u4e00\u4e2a\u65cb\u8f6c\u52a0\u4e0a\u4e00\u4e2a\u5e73\u79fb\u7ec4\u6210\uff0c\u8fd9\u79cd\u8fd0\u52a8\u79f0\u4e3a \u521a\u4f53\u8fd0\u52a8 \uff0c\u4f8b\u5982\u76f8\u673a\u8fd0\u52a8 \u521a\u4f53\u8fd0\u52a8\u8fc7\u7a0b\u4e2d\uff0c\u540c\u4e00\u4e2a\u5411\u91cf\u5728\u5404\u4e2a\u5750\u6807\u7cfb\u4e0b\u7684\u957f\u5ea6\u548c\u5939\u89d2\u90fd\u4e0d\u53d8\uff0c\u53ea\u4f1a\u662f\u7a7a\u95f4\u4f4d\u7f6e\u548c\u59ff\u6001\u4e0d\u540c\uff0c\u4f8b\u5982\u76f8\u673a\u5750\u6807\u7cfb\u5230\u4e16\u754c\u5750\u6807\u7cfb\uff0c\u76f8\u5dee\u4e00\u4e2a \u6b27\u6c0f\u53d8\u6362 \u6b27\u6c0f\u53d8\u6362\u7531\u65cb\u8f6c\u548c\u5e73\u79fb\u7ec4\u6210 \u65cb\u8f6c \u8bbe\u67d0\u4e2a\u5355\u4f4d\u6b63\u4ea4\u57fa \\((\\mathbf{e}_1, \\mathbf{e}_2, \\mathbf{e}_3)\\) \u7ecf\u8fc7\u4e00\u6b21\u65cb\u8f6c\u53d8\u6210\u4e86 \\((\\mathbf{e}_1^\\prime, \\mathbf{e}_2^\\prime, \\mathbf{e}_3^\\prime)\\) \u3002\u5bf9\u4e8e\u540c\u4e00\u4e2a\u5411\u91cf \\(\\mathbf{a}\\) \u6ca1\u6709\u968f\u7740\u5750\u6807\u7cfb\u7684\u65cb\u8f6c\u800c\u53d1\u751f\u8fd0\u52a8\uff0c\u6240\u4ee5 \\[ [\\mathbf{e}_1, \\mathbf{e}_2, \\mathbf{e}_3]\\begin{bmatrix}a_1 \\\\ a_2 \\\\ a_3 \\end{bmatrix}=[\\mathbf{e}_1^\\prime, \\mathbf{e}_2^\\prime, \\mathbf{e}_3^\\prime] \\begin{bmatrix} a_1^\\prime \\\\ a_2^\\prime \\\\ a_3^\\prime \\end{bmatrix} \\\\ \u540c\u65f6\u5de6\u4e58 \\begin{bmatrix} \\mathbf{e}_1^\\top \\\\ \\mathbf{e}_2^\\top \\\\ \\mathbf{e}_3^\\top \\end{bmatrix}\u5f97 \\ \\ \\ \\begin{bmatrix}a_1 \\\\ a_2 \\\\ a_3 \\end{bmatrix}=\\begin{bmatrix} \\mathbf{e}_1^\\top \\mathbf{e}_1^\\prime & \\mathbf{e}_1^\\top \\mathbf{e}_2^\\prime & \\mathbf{e}_1^\\top \\mathbf{e}_3^\\prime \\\\ \\mathbf{e}_2^\\top \\mathbf{e}_1^\\prime & \\mathbf{e}_2^\\top \\mathbf{e}_2^\\prime & \\mathbf{e}_2^\\top \\mathbf{e}_3^\\prime \\\\ \\mathbf{e}_3^\\top \\mathbf{e}_1^\\prime & \\mathbf{e}_3^\\top \\mathbf{e}_2^\\prime & \\mathbf{e}_3^\\top \\mathbf{e}_3^\\prime \\end{bmatrix}\\begin{bmatrix}a_1^\\prime \\\\ a_2^\\prime \\\\ a_3^\\prime \\end{bmatrix}\\overset{\\Delta}{=}\\mathbf{R}\\mathbf{a}^\\prime \\] \u8fd9\u91cc\u7684 \\(\\mathbf{R}\\) \u662f\u4e00\u4e2a\u884c\u5217\u5f0f\u4e3a 1 \u7684\u6b63\u4ea4\u77e9\u9635\uff0c\u7531\u4e24\u7ec4\u57fa\u4e4b\u95f4\u7684\u5185\u79ef\u7ec4\u6210\uff0c\u6240\u4ee5\u77e9\u9635 \\(\\mathbf{R}\\) \u63cf\u8ff0\u4e86\u65cb\u8f6c\u672c\u8eab\uff0c\u56e0\u6b64\u88ab\u79f0\u4e3a \u65cb\u8f6c\u77e9\u9635 \uff0c\u540c\u65f6\u4e5f\u53eb \u65b9\u5411\u4f59\u5f26\u77e9\u9635 \u7531\u4e8e\u65cb\u8f6c\u77e9\u9635\u4e3a\u6b63\u4ea4\u77e9\u9635\uff0c\u5b83\u7684\u9006\uff08\u5373\u8f6c\u7f6e\uff09\u63cf\u8ff0\u4e86\u4e00\u4e2a\u76f8\u53cd\u7684\u65cb\u8f6c\uff0c\u5373 \\(\\mathbf{a}^\\prime=\\mathbf{R}^{-1}\\mathbf{a}=\\mathbf{R}^\\top\\mathbf{a}\\) \u5e73\u79fb \\(\\mathbf{t}\\) \u8868\u793a\u5e73\u79fb\u5411\u91cf\uff0c\u5176\u4e2d \\(\\mathbf{t}_{12} \\ne -\\mathbf{t}_{21}\\) \uff0c\u548c\u4e24\u4e2a\u7cfb\u7684\u65cb\u8f6c\u6709\u5173 \u65cb\u8f6c\u548c\u5e73\u79fb\u5408\u5230\u4e00\u8d77\uff1a \\(\\mathbf{a}^\\prime=\\mathbf{R}\\mathbf{a}+\\mathbf{t}\\) \u5b9e\u9645\u4e2d\uff0c\u5b9a\u4e49\u5750\u6807\u7cfb 1\u548c\u5750\u6807\u7cfb 2\uff0c\u90a3\u4e48\u5411\u91cf \\(\\mathbf{a}\\) \u5728\u4e24\u4e2a\u5750\u6807\u7cfb\u4e0b\u7684\u5750\u6807\u4e3a \\(\\mathbf{a}_1, \\mathbf{a}_2\\) \uff0c\u5b83\u4eec\u4e4b\u95f4\u7684\u5173\u7cfb\u4e3a \\(\\mathbf{a}_1=\\mathbf{R}_{12}\\mathbf{a}_2+\\mathbf{t}_{12}\\) \uff0c\u8fd9\u91cc\u7684 \\(\\mathbf{R}_{12}\\) \u662f\u6307\u201c\u628a\u5750\u6807\u7cfb 2 \u7684\u5411\u91cf\u53d8\u6362\u5230\u5750\u6807\u7cfb 1 \u4e2d\u201d \u53d8\u6362\u77e9\u9635\u4e0e\u9f50\u6b21\u5750\u6807 \u00b6 \u4e4b\u524d\u7684\u53d8\u6362\u5173\u7cfb\u4e0d\u662f\u7ebf\u6027\u5173\u7cfb \u5047\u8bbe\u8fdb\u884c\u4e86\u4e24\u6b21\u53d8\u6362\uff0c \\(\\mathbf{b}=\\mathbf{R}_1\\mathbf{a}+\\mathbf{t}_1\\) \u548c \\(\\mathbf{c}=\\mathbf{R}_2\\mathbf{b}+\\mathbf{t}_2\\) \uff0c\u90a3\u4e48 \\(\\mathbf{a}\\) \u5230 \\(\\mathbf{c}\\) \u7684\u53d8\u6362\u4e3a \\(\\mathbf{c}=\\mathbf{R}_2(\\mathbf{R}_1\\mathbf{a}+\\mathbf{t}_1)+\\mathbf{t}_2\\) \uff0c\u5982\u679c\u53d8\u6362\u591a\u6b21\u4f1a\u53d8\u7684\u975e\u5e38\u7e41\u7410\uff0c\u6240\u4ee5\u5f15\u5165 \u9f50\u6b21\u5750\u6807\u548c\u53d8\u6362\u77e9\u9635 \u91cd\u5199\u4e0a\u5f0f\uff1a \\[ \\begin{bmatrix} \\mathbf{a}^\\prime \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} \\mathbf{R} & \\mathbf{t} \\\\ \\mathbf{0}^\\top & 1 \\end{bmatrix} \\begin{bmatrix} \\mathbf{a} \\\\ 1 \\end{bmatrix} \\overset{\\Delta}{=} \\mathbf{T} \\begin{bmatrix} \\mathbf{a} \\\\ 1 \\end{bmatrix} \\] \u5728\u4e09\u7ef4\u5411\u91cf\u7684\u672b\u5c3e\u6dfb\u52a0 1\uff0c\u5c06\u5176\u53d8\u6210\u4e86\u56db\u7ef4\u5411\u91cf\uff0c\u79f0\u4e3a \u9f50\u6b21\u5750\u6807 \u3002\u5bf9\u4e8e\u8fd9\u4e2a\u56db\u7ef4\u5411\u91cf\uff0c\u53ef\u4ee5\u628a\u65cb\u8f6c\u548c\u5e73\u79fb\u5199\u5728\u4e00\u4e2a\u77e9\u9635\u91cc\uff0c\u4f7f\u5f97\u6574\u4e2a\u5173\u7cfb\u53d8\u6210\u7ebf\u6027\u5173\u7cfb\u3002\u5176\u4e2d\u77e9\u9635 \\(\\mathbf{T}\\) \u79f0\u4e3a \u53d8\u6362\u77e9\u9635 \u7528 \\(\\tilde{\\mathbf{a}}\\) \u8868\u793a \\(\\mathbf{a}\\) \u7684\u9f50\u6b21\u5750\u6807\u3002\u6240\u4ee5\u901a\u8fc7\u9f50\u6b21\u5750\u6807\u548c\u53d8\u6362\u77e9\u9635\uff0c\u4e24\u6b21\u53d8\u6362\u7684\u53e0\u52a0\u5c31\u53ef\u4ee5\u5199\u6210 \\(\\tilde{\\mathbf{c}}=\\mathbf{T}_2\\mathbf{T}_1\\tilde{\\mathbf{a}}\\) \u65cb\u8f6c\u5411\u91cf\u548c\u6b27\u62c9\u89d2 \u00b6 \u65cb\u8f6c\u77e9\u9635\u548c\u53d8\u6362\u77e9\u9635\u90fd\u5b58\u5728\u4e00\u4e2a\u95ee\u9898\uff0c\u5c31\u662f \u53d8\u91cf\u7684\u5197\u4f59 \u3002\u5df2\u77e5\u4e00\u6b21\u65cb\u8f6c\u4ec5\u6709\u4e09\u4e2a\u81ea\u7531\u5ea6\uff0c\u4f46\u662f\u65cb\u8f6c\u77e9\u9635\u6709\u4e5d\u4e2a\u91cf\uff0c\u7528\u4e5d\u4e2a\u91cf\u8868\u793a\u4e09\u4e2a\u81ea\u7531\u5ea6\uff08\u4ec5\u8868\u793a\u65cb\u8f6c\uff09\uff1b\u53d8\u6362\u77e9\u9635\u670916\u4e2a\u91cf\uff0c\u752816\u4e2a\u91cf\u8868\u793a6\u4e2a\u81ea\u7531\u5ea6\uff08\u5305\u62ec\u65cb\u8f6c\u548c\u5e73\u79fb\uff09\u3002 \u5176\u6b21\uff0c\u65cb\u8f6c\u77e9\u9635\u662f\u4e00\u4e2a\u7279\u6b8a\u77e9\u9635\uff0c\u5373\u662f\u6b63\u4ea4\u77e9\u9635\uff0c\u4e14\u884c\u5217\u5f0f\u4e3a1\u3002\u4e14\u8be5\u7279\u6b8a\u6027\u4e5f\u4f1a\u5f71\u54cd\u5230\u53d8\u6362\u77e9\u9635\uff0c\u6240\u4ee5\u5177\u6709\u7279\u6b8a\u6027\u7684\u77e9\u9635\u5728\u540e\u7eed\u7684\u975e\u7ebf\u6027\u4f18\u5316\u4e2d\u4f1a\u5e26\u6765\u989d\u5916\u7684\u7ea6\u675f\uff0c\u5bfc\u81f4\u6c42\u89e3\u56f0\u96be\u3002 \u65cb\u8f6c\u5411\u91cf \u00b6 \u65cb\u8f6c\u5411\u91cf=\u4e00\u4e2a\u65cb\u8f6c\u8f74+\u4e00\u4e2a\u65cb\u8f6c\u89d2\u5ea6\u5373\uff1a\u65cb\u8f6c\u5411\u91cf\u7684\u65b9\u5411\u4e3a\u65cb\u8f6c\u8f74\uff0c\u957f\u5ea6\u4e3a\u65cb\u8f6c\u89d2\u5ea6\u3002 \u65cb\u8f6c\u5411\u91cf\u548c\u77e9\u9635\u4e4b\u95f4\u5b58\u5728\u8f6c\u6362\u5173\u7cfb\uff0c\u7528\u7f57\u5fb7\u91cc\u683c\u65af\u516c\u5f0f\uff08Rodrigues's Formula\uff09\u8868\u793a\uff1a \\[ \\mathbf{R}=\\cos\\theta\\mathbf{I}+(1-\\cos\\theta)\\mathbf{n}\\mathbf{n}^\\top+\\sin\\theta\\mathbf{n}^\\wedge \\] \u53cd\u4e4b\u4e5f\u53ef\u4ee5\u8ba1\u7b97\u4ece\u4e00\u4e2a\u65cb\u8f6c\u77e9\u9635\u5230\u65cb\u8f6c\u5411\u91cf\u7684\u8f6c\u6362\u3002\u5bf9\u4e8e\u8f6c\u89d2 \\(\\theta\\) \uff0c\u53d6\u4e24\u8fb9\u7684 \u8ff9 \uff0c\u6709 \\[ tr(\\mathbf{R})=\\cos \\theta \\ tr(\\mathbf{I})+(1-\\cos \\theta)tr(\\mathbf{n}\\mathbf{n}^\\top)+\\sin\\theta \\ tr(\\mathbf{n}^\\wedge) \\\\ tr(\\mathbf{R})=3\\cos\\theta+(1-\\cos\\theta) \\\\ tr(\\mathbf{R})=1+2\\cos\\theta \\\\ \\theta = \\arccos\\left(\\frac{tr(\\mathbf{R})-1}{2}\\right) \\] \u5173\u4e8e\u8f6c\u8f74 \\(\\mathbf{n}\\) \uff0c\u65cb\u8f6c\u8f74\u4e0a\u7684\u5411\u91cf\u5728\u65cb\u8f6c\u540e\u4e0d\u53d8\uff0c\u5373 \\(\\mathbf{Rn}=\\mathbf{n}\\) \uff0c\u56e0\u6b64\u8f6c\u8f74 \\(\\mathbf{n}\\) \u662f\u77e9\u9635 \\(\\mathbf{R}\\) \u7279\u5f81\u503c 1 \u5bf9\u5e94\u7684\u7279\u5f81\u5411\u91cf\u3002 \u7f57\u5fb7\u91cc\u683c\u65af\u516c\u5f0f\u8be6\u7ec6\u63a8\u5bfc \u6b27\u62c9\u89d2 \u00b6 \u6b27\u62c9\u89d2\u662f\u4e00\u79cd\u5c06\u65cb\u8f6c\u5206\u89e3\u4e3a\u4e09\u4e2a\u57fa\u672c\u65cb\u8f6c\u7684\u65b9\u6cd5\uff0c\u5373\u7ed5\u4e09\u4e2a\u5750\u6807\u8f74\u7684\u65cb\u8f6c\u3002\u6b27\u62c9\u89d2\u7684\u8868\u793a\u65b9\u6cd5\u6709\u5f88\u591a\u79cd\uff0c\u4f46\u662f\u6700\u5e38\u7528\u7684\u662f Z-Y-X \u7684\u65cb\u8f6c\u987a\u5e8f\uff0c\u5373\u5148\u7ed5 Z \u8f74\u65cb\u8f6c\uff0c\u518d\u7ed5 Y \u8f74\u65cb\u8f6c\uff0c\u6700\u540e\u7ed5 X \u8f74\u65cb\u8f6c\u3002\u8fd9\u79cd\u65cb\u8f6c\u987a\u5e8f\u4e5f\u53eb \u822a\u5411-\u4fef\u4ef0-\u6eda\u8f6c \uff08yaw-pitch-roll\uff09\u3002 \u4f46\u662f\u5b58\u5728\u4e07\u5411\u9501\u73b0\u8c61\uff1a \u4e07\u5411\u6b7b\u9501 \uff0c\u6240\u4ee5\u4f7f\u6b27\u62c9\u89d2\u5728\u7279\u6b8a\u60c5\u51b5\u4e0b\u4f1a\u51fa\u73b0\u5947\u5f02\u6027\u3002 \u56db\u5143\u6570 \u00b6 \u56db\u5143\u6570\u7684\u5b9a\u4e49 \u00b6 \u56db\u5143\u6570\u662f\u4e00\u79cd\u6269\u5c55\u590d\u6570\u7684\u65b9\u6cd5\uff0c\u590d\u6570\u7531\u5b9e\u90e8\u548c\u865a\u90e8\u7ec4\u6210\uff0c\u800c\u56db\u5143\u6570\u7531\u5b9e\u90e8\u548c\u4e09\u4e2a\u865a\u90e8\u7ec4\u6210\uff0c\u5373 \\(\\mathbf{q}=q_0+q_1i+q_2j+q_3k\\) \uff0c\u6ee1\u8db3\u4e0b\u9762\u5173\u7cfb\uff1a \\[ \\left\\{\\begin{matrix} i^2 + j^2 + k^2 = -1 \\\\ ij = k, ji = -k \\\\ jk = i, kj = -i \\\\ ki = j, ik = -j \\end{matrix}\\right. \\] \u7528\u4e00\u4e2a\u6807\u91cf\u548c\u4e00\u4e2a\u5411\u91cf\u8868\u793a\uff1a \\(\\mathbf{q}=[s,\\mathbf{v}],s=q_0 \\in R, \\mathbf{v}=[q_1,q_2,q_3]^\\top \\in R^3\\) \uff0c\u865a\u90e8\u4e3a 0 \u4e3a\u5b9e\u56db\u5143\u6570\uff0c\u5b9e\u90e8\u4e3a 0 \u4e3a\u865a\u56db\u5143\u6570 \u56db\u5143\u6570\u7684\u8fd0\u7b97 \u00b6 \\(\\mathbf{q}_a \\pm \\mathbf{q}_b = [s_a \\pm s_b, \\mathbf{v}_a \\pm \\mathbf{v}_b]\\) \\(\\mathbf{q}_a \\mathbf{q}_b=[s_as_b-\\mathbf{v}_a^\\top\\mathbf{v}_b,s_a\\mathbf{v}_b+s_b\\mathbf{v}_a+\\mathbf{v}_a\\times \\mathbf{v}_b]^\\top\\) \\(\\parallel \\mathbf{q}_a \\parallel = \\sqrt{s_a^2+x_a^2+y_a^2+z_a^2}\\) \\(\\mathbf{q}_a^*=s_a-x_ai-y_aj-z_ak=[s_a, -\\mathbf{v}_a]^\\top\\) \\(\\mathbf{q}^{-1}=\\mathbf{q}^*/\\parallel \\mathbf{q} \\parallel^2\\) \\(k\\mathbf{q}=[ks, k\\mathbf{v}]\\) \\(\\mathbf{q}_a \\cdot \\mathbf{q}_b=s_as_b+x_ax_bi+y_ay_bj+z_az_bk\\) \u7528\u56db\u5143\u6570\u8868\u793a\u65cb\u8f6c \u00b6 \u4e09\u7ef4\u7a7a\u95f4\u70b9\u7528\u4e00\u4e2a\u865a\u56db\u5143\u6570\u6765\u63cf\u8ff0\uff1a \\(\\mathbf{p}=[0,x,y,z]^\\top=[0,\\mathbf{v}]^\\top\\) \u65cb\u8f6c\u540e\u5230\u70b9 \\(\\mathbf{p}^\\prime\\) \uff1a \\(\\mathbf{p}^\\prime=\\mathbf{qpq}^{-1}\\) \u56db\u5143\u6570\u5230\u5176\u4ed6\u65cb\u8f6c\u8868\u793a\u7684\u8f6c\u6362 \u00b6 \u8f74\u89d2\u5230\u56db\u5143\u6570\uff1a \\(\\mathbf{q}=[\\cos \\frac{\\theta}{2}, n_x \\sin \\frac{\\theta}{2}, n_y \\frac{\\theta}{2}, n_z \\sin \\frac{\\theta}{2}]^\\top\\) \u56db\u5143\u6570\u5230\u8f74\u89d2\uff1a \\(\\left\\{\\begin{matrix} \\theta=2\\arccos q_0 \\\\ [n_x,n_y,n_z]^\\top=[q_1, q_2, q_3]^\\top / \\sin \\frac{\\theta}{2} \\end{matrix}\\right.\\) \u76f8\u4f3c\u3001\u4eff\u5c04\u3001\u5c04\u5f71\u53d8\u6362 \u00b6 \u89c1 \u591a\u89c6\u56fe\u51e0\u4f55 Eigen \u5e93 \u00b6 install \u00b6 sudo apt-get install libeigen3-dev # \u5982\u679c\u8981\u5b89\u88c5\u5bf9\u5e94\u7248\u672c\uff0c\u8bf7\u4e0b\u8f7d\u6e90\u7801\u7f16\u8bd1 Eigen\u4e2d\u77e9\u9635\u7684\u57fa\u672c\u64cd\u4f5c \u00b6 Eigen :: Matrix < type , row , colon > //typedef: Matrix3d, Vector3d... Eigen :: MatrixXd //unkown size matrix matrix ( i , j ) //the value of i th row and j th colon //the operations matrix . transpose (); matrix . trace (); matrix . sum (); matrix . inverse (); matrix . determinant (); //find the proper values and vectors Eigen :: SelfAdjointEigenSolver < Eigen :: Matrix3d > solver ( matrix . transport () * matrix ); solver . eigenvalues (); solver . eigenvectors (); //solve Matrix_NN * x = v_Nd x = matrix_NN . colpivHouseholderQr (). solve ( v_Nd ); // \u65cb\u8f6c\u5411\u91cf\u548c\u65cb\u8f6c\u77e9\u9635 Eigen :: AngleAxisd rotation_vector ( theta , Eigen :: Vector3d ( x , y , z )); //rotation vector rotation_matrix = rotation_vector . toRotationMatrix (); //transform rotation vector to rotation matrix x_rotated = rotation_vector * x ; //calculate rotated vector x' x_rotated = rotation_matrix * x ; //calculate rotated vector x' // \u56db\u5143\u6570 q = Eigen :: Quaterniond ( w , x , y , z ) //create a quaternion from four values q = Eigen :: Quaterniond ( rotation_vector ) //create a quaternion from rotaion vector q = Eigen :: Quaterniond ( rotation_matrix ) //create a quaternion from rotaion matrix x_rotated = q * x //calculate rotated vector x' // \u53d8\u6362\u77e9\u9635 T //create a transform matrix Eigen :: Isometry3d T = Eigen :: Isometry3d :: Identity (); T . rotate ( rotation_vector ); /* T.rotate(rotation_matrix); T.rotate(quaternion); */ T . pretranslate ( Eigen :: Vector3d ( x , y , z ));","title":"\u4e09\u7ef4\u7a7a\u95f4\u521a\u4f53\u8fd0\u52a8"},{"location":"cv/slam/vslam14/lec2/#_1","text":"\u7ea6 2134 \u4e2a\u5b57 34 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 8 \u5206\u949f Abstract \u7406\u89e3\u4e09\u7ef4\u7a7a\u95f4\u7684\u521a\u4f53\u8fd0\u52a8\u63cf\u8ff0\u65b9\u5f0f\uff1a\u65cb\u8f6c\u77e9\u9635\u3001\u53d8\u6362\u77e9\u9635\u3001\u56db\u5143\u6570\u548c\u6b27\u62c9\u89d2 \u638c\u63e1 Eigen \u5e93\u7684\u77e9\u9635\u3001\u51e0\u4f55\u6a21\u5757\u7684\u4f7f\u7528\u65b9\u6cd5","title":"\u4e09\u7ef4\u7a7a\u95f4\u521a\u4f53\u8fd0\u52a8"},{"location":"cv/slam/vslam14/lec2/#_2","text":"","title":"\u65cb\u8f6c\u77e9\u9635"},{"location":"cv/slam/vslam14/lec2/#_3","text":"\u7a7a\u95f4\u4e2d\u7684\u67d0\u70b9\u3002\u5176\u4f4d\u7f6e\u56fa\u5b9a\u3002\u82e5\u91c7\u7528\u4e0d\u540c\u7684\u5750\u6807\u7cfb\u63cf\u8ff0\uff0c\u5176\u5750\u6807\u4f4d\u7f6e\u5177\u4f53\u5f62\u5f0f\u662f\u4e0d\u540c\u7684\uff0c\u4f46\u662f\u8868\u8fbe\u7684\u70b9\u662f\u540c\u4e00\u4e2a\u70b9\u3002 \u7528\u7ebf\u4ee3\u8868\u793a\uff0c\u5728\u4e00\u4e2a\u7ebf\u6027\u7a7a\u95f4\u4e2d\uff0c\u627e\u5230\u8be5\u7a7a\u95f4\u7684\u4e00\u7ec4 \u57fa \\((\\mathbf{e}_1, \\mathbf{e}_2, \\mathbf{e}_3)\\) \uff0c\u90a3\u4e48\uff0c\u4efb\u610f\u5411\u91cf \\(\\mathbf{a}\\) \u5728\u8fd9\u7ec4\u57fa\u4e0b\u7684\u5750\u6807\u4e3a \\(\\mathbf{a}=[\\mathbf{e}_1, \\mathbf{e}_2, \\mathbf{e}_3][a_1,a_2,a_3]^\\top=a_1\\mathbf{e}_1+a_2\\mathbf{e}_2+a_3\\mathbf{e}_3\\) \u5750\u6807\u7cfb\u5b9a\u4e49\u65f6\uff0c\u6709\u53f3\u624b\u7cfb\u548c\u5de6\u624b\u7cfb\uff0c\u901a\u5e38\u91c7\u7528\u53f3\u624b\u7cfb \u5411\u91cf\u6709\u5185\u79ef\u548c\u5916\u79ef\u3002 \u5185\u79ef\uff1a \\(\\mathbf{a}\\mathbf{b}=\\mathbf{a}^\\top\\mathbf{b}=\\sum_{i=1}^3a_ib_i=|\\mathbf{a}||\\mathbf{b}|\\cos(\\mathbf{a}, \\mathbf{b})\\) \u5916\u79ef\uff1a \\[ \\mathbf{a} \\times \\mathbf{b}= \\begin{bmatrix} i & j & k \\\\ a_1 & a_2 & a_3 \\\\ b_1 & b_2 & b_3 \\end{bmatrix} = \\begin{bmatrix} a_2b_3-a_3b_2 \\\\ a_3b_1-a_1b_3 \\\\ a_1b_2-a_2b_1 \\end{bmatrix} = \\begin{bmatrix} 0 & -a_3 & a_2 \\\\ a_3 & 0 & -a_1 \\\\ -a_2 & a_1 & 0 \\end{bmatrix} \\mathbf{b} \\overset{\\Delta}{=} \\mathbf{a}^\\wedge \\mathbf{b} \\] \u5176\u4e2d\u7b26\u53f7 \\(\\wedge\\) \u79f0\u4e3a \u53cd\u5bf9\u79f0\u7b26\u53f7 \uff0c \\(\\mathbf{a}^\\wedge\\) \u4e3a \u53cd\u5bf9\u79f0\u77e9\u9635 \uff08\u6ee1\u8db3 \\(\\mathbf{A}^\\top=-\\mathbf{A}\\) \uff09\uff0c\u8fd9\u6837\u505a\u7684\u597d\u5904\u53ef\u4ee5\u5956\u5411\u91cf\u8fd0\u7b97\u53d8\u4e3a\u77e9\u9635\u8fd0\u7b97","title":"\u70b9\u3001\u5411\u91cf\u548c\u5750\u6807\u7cfb"},{"location":"cv/slam/vslam14/lec2/#_4","text":"\u4e24\u4e2a\u5750\u6807\u7cfb\u4e4b\u95f4\u7684\u8fd0\u52a8\u7531\u4e00\u4e2a\u65cb\u8f6c\u52a0\u4e0a\u4e00\u4e2a\u5e73\u79fb\u7ec4\u6210\uff0c\u8fd9\u79cd\u8fd0\u52a8\u79f0\u4e3a \u521a\u4f53\u8fd0\u52a8 \uff0c\u4f8b\u5982\u76f8\u673a\u8fd0\u52a8 \u521a\u4f53\u8fd0\u52a8\u8fc7\u7a0b\u4e2d\uff0c\u540c\u4e00\u4e2a\u5411\u91cf\u5728\u5404\u4e2a\u5750\u6807\u7cfb\u4e0b\u7684\u957f\u5ea6\u548c\u5939\u89d2\u90fd\u4e0d\u53d8\uff0c\u53ea\u4f1a\u662f\u7a7a\u95f4\u4f4d\u7f6e\u548c\u59ff\u6001\u4e0d\u540c\uff0c\u4f8b\u5982\u76f8\u673a\u5750\u6807\u7cfb\u5230\u4e16\u754c\u5750\u6807\u7cfb\uff0c\u76f8\u5dee\u4e00\u4e2a \u6b27\u6c0f\u53d8\u6362 \u6b27\u6c0f\u53d8\u6362\u7531\u65cb\u8f6c\u548c\u5e73\u79fb\u7ec4\u6210 \u65cb\u8f6c \u8bbe\u67d0\u4e2a\u5355\u4f4d\u6b63\u4ea4\u57fa \\((\\mathbf{e}_1, \\mathbf{e}_2, \\mathbf{e}_3)\\) \u7ecf\u8fc7\u4e00\u6b21\u65cb\u8f6c\u53d8\u6210\u4e86 \\((\\mathbf{e}_1^\\prime, \\mathbf{e}_2^\\prime, \\mathbf{e}_3^\\prime)\\) \u3002\u5bf9\u4e8e\u540c\u4e00\u4e2a\u5411\u91cf \\(\\mathbf{a}\\) \u6ca1\u6709\u968f\u7740\u5750\u6807\u7cfb\u7684\u65cb\u8f6c\u800c\u53d1\u751f\u8fd0\u52a8\uff0c\u6240\u4ee5 \\[ [\\mathbf{e}_1, \\mathbf{e}_2, \\mathbf{e}_3]\\begin{bmatrix}a_1 \\\\ a_2 \\\\ a_3 \\end{bmatrix}=[\\mathbf{e}_1^\\prime, \\mathbf{e}_2^\\prime, \\mathbf{e}_3^\\prime] \\begin{bmatrix} a_1^\\prime \\\\ a_2^\\prime \\\\ a_3^\\prime \\end{bmatrix} \\\\ \u540c\u65f6\u5de6\u4e58 \\begin{bmatrix} \\mathbf{e}_1^\\top \\\\ \\mathbf{e}_2^\\top \\\\ \\mathbf{e}_3^\\top \\end{bmatrix}\u5f97 \\ \\ \\ \\begin{bmatrix}a_1 \\\\ a_2 \\\\ a_3 \\end{bmatrix}=\\begin{bmatrix} \\mathbf{e}_1^\\top \\mathbf{e}_1^\\prime & \\mathbf{e}_1^\\top \\mathbf{e}_2^\\prime & \\mathbf{e}_1^\\top \\mathbf{e}_3^\\prime \\\\ \\mathbf{e}_2^\\top \\mathbf{e}_1^\\prime & \\mathbf{e}_2^\\top \\mathbf{e}_2^\\prime & \\mathbf{e}_2^\\top \\mathbf{e}_3^\\prime \\\\ \\mathbf{e}_3^\\top \\mathbf{e}_1^\\prime & \\mathbf{e}_3^\\top \\mathbf{e}_2^\\prime & \\mathbf{e}_3^\\top \\mathbf{e}_3^\\prime \\end{bmatrix}\\begin{bmatrix}a_1^\\prime \\\\ a_2^\\prime \\\\ a_3^\\prime \\end{bmatrix}\\overset{\\Delta}{=}\\mathbf{R}\\mathbf{a}^\\prime \\] \u8fd9\u91cc\u7684 \\(\\mathbf{R}\\) \u662f\u4e00\u4e2a\u884c\u5217\u5f0f\u4e3a 1 \u7684\u6b63\u4ea4\u77e9\u9635\uff0c\u7531\u4e24\u7ec4\u57fa\u4e4b\u95f4\u7684\u5185\u79ef\u7ec4\u6210\uff0c\u6240\u4ee5\u77e9\u9635 \\(\\mathbf{R}\\) \u63cf\u8ff0\u4e86\u65cb\u8f6c\u672c\u8eab\uff0c\u56e0\u6b64\u88ab\u79f0\u4e3a \u65cb\u8f6c\u77e9\u9635 \uff0c\u540c\u65f6\u4e5f\u53eb \u65b9\u5411\u4f59\u5f26\u77e9\u9635 \u7531\u4e8e\u65cb\u8f6c\u77e9\u9635\u4e3a\u6b63\u4ea4\u77e9\u9635\uff0c\u5b83\u7684\u9006\uff08\u5373\u8f6c\u7f6e\uff09\u63cf\u8ff0\u4e86\u4e00\u4e2a\u76f8\u53cd\u7684\u65cb\u8f6c\uff0c\u5373 \\(\\mathbf{a}^\\prime=\\mathbf{R}^{-1}\\mathbf{a}=\\mathbf{R}^\\top\\mathbf{a}\\) \u5e73\u79fb \\(\\mathbf{t}\\) \u8868\u793a\u5e73\u79fb\u5411\u91cf\uff0c\u5176\u4e2d \\(\\mathbf{t}_{12} \\ne -\\mathbf{t}_{21}\\) \uff0c\u548c\u4e24\u4e2a\u7cfb\u7684\u65cb\u8f6c\u6709\u5173 \u65cb\u8f6c\u548c\u5e73\u79fb\u5408\u5230\u4e00\u8d77\uff1a \\(\\mathbf{a}^\\prime=\\mathbf{R}\\mathbf{a}+\\mathbf{t}\\) \u5b9e\u9645\u4e2d\uff0c\u5b9a\u4e49\u5750\u6807\u7cfb 1\u548c\u5750\u6807\u7cfb 2\uff0c\u90a3\u4e48\u5411\u91cf \\(\\mathbf{a}\\) \u5728\u4e24\u4e2a\u5750\u6807\u7cfb\u4e0b\u7684\u5750\u6807\u4e3a \\(\\mathbf{a}_1, \\mathbf{a}_2\\) \uff0c\u5b83\u4eec\u4e4b\u95f4\u7684\u5173\u7cfb\u4e3a \\(\\mathbf{a}_1=\\mathbf{R}_{12}\\mathbf{a}_2+\\mathbf{t}_{12}\\) \uff0c\u8fd9\u91cc\u7684 \\(\\mathbf{R}_{12}\\) \u662f\u6307\u201c\u628a\u5750\u6807\u7cfb 2 \u7684\u5411\u91cf\u53d8\u6362\u5230\u5750\u6807\u7cfb 1 \u4e2d\u201d","title":"\u5750\u6807\u7cfb\u95f4\u7684\u6b27\u6c0f\u53d8\u6362"},{"location":"cv/slam/vslam14/lec2/#_5","text":"\u4e4b\u524d\u7684\u53d8\u6362\u5173\u7cfb\u4e0d\u662f\u7ebf\u6027\u5173\u7cfb \u5047\u8bbe\u8fdb\u884c\u4e86\u4e24\u6b21\u53d8\u6362\uff0c \\(\\mathbf{b}=\\mathbf{R}_1\\mathbf{a}+\\mathbf{t}_1\\) \u548c \\(\\mathbf{c}=\\mathbf{R}_2\\mathbf{b}+\\mathbf{t}_2\\) \uff0c\u90a3\u4e48 \\(\\mathbf{a}\\) \u5230 \\(\\mathbf{c}\\) \u7684\u53d8\u6362\u4e3a \\(\\mathbf{c}=\\mathbf{R}_2(\\mathbf{R}_1\\mathbf{a}+\\mathbf{t}_1)+\\mathbf{t}_2\\) \uff0c\u5982\u679c\u53d8\u6362\u591a\u6b21\u4f1a\u53d8\u7684\u975e\u5e38\u7e41\u7410\uff0c\u6240\u4ee5\u5f15\u5165 \u9f50\u6b21\u5750\u6807\u548c\u53d8\u6362\u77e9\u9635 \u91cd\u5199\u4e0a\u5f0f\uff1a \\[ \\begin{bmatrix} \\mathbf{a}^\\prime \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} \\mathbf{R} & \\mathbf{t} \\\\ \\mathbf{0}^\\top & 1 \\end{bmatrix} \\begin{bmatrix} \\mathbf{a} \\\\ 1 \\end{bmatrix} \\overset{\\Delta}{=} \\mathbf{T} \\begin{bmatrix} \\mathbf{a} \\\\ 1 \\end{bmatrix} \\] \u5728\u4e09\u7ef4\u5411\u91cf\u7684\u672b\u5c3e\u6dfb\u52a0 1\uff0c\u5c06\u5176\u53d8\u6210\u4e86\u56db\u7ef4\u5411\u91cf\uff0c\u79f0\u4e3a \u9f50\u6b21\u5750\u6807 \u3002\u5bf9\u4e8e\u8fd9\u4e2a\u56db\u7ef4\u5411\u91cf\uff0c\u53ef\u4ee5\u628a\u65cb\u8f6c\u548c\u5e73\u79fb\u5199\u5728\u4e00\u4e2a\u77e9\u9635\u91cc\uff0c\u4f7f\u5f97\u6574\u4e2a\u5173\u7cfb\u53d8\u6210\u7ebf\u6027\u5173\u7cfb\u3002\u5176\u4e2d\u77e9\u9635 \\(\\mathbf{T}\\) \u79f0\u4e3a \u53d8\u6362\u77e9\u9635 \u7528 \\(\\tilde{\\mathbf{a}}\\) \u8868\u793a \\(\\mathbf{a}\\) \u7684\u9f50\u6b21\u5750\u6807\u3002\u6240\u4ee5\u901a\u8fc7\u9f50\u6b21\u5750\u6807\u548c\u53d8\u6362\u77e9\u9635\uff0c\u4e24\u6b21\u53d8\u6362\u7684\u53e0\u52a0\u5c31\u53ef\u4ee5\u5199\u6210 \\(\\tilde{\\mathbf{c}}=\\mathbf{T}_2\\mathbf{T}_1\\tilde{\\mathbf{a}}\\)","title":"\u53d8\u6362\u77e9\u9635\u4e0e\u9f50\u6b21\u5750\u6807"},{"location":"cv/slam/vslam14/lec2/#_6","text":"\u65cb\u8f6c\u77e9\u9635\u548c\u53d8\u6362\u77e9\u9635\u90fd\u5b58\u5728\u4e00\u4e2a\u95ee\u9898\uff0c\u5c31\u662f \u53d8\u91cf\u7684\u5197\u4f59 \u3002\u5df2\u77e5\u4e00\u6b21\u65cb\u8f6c\u4ec5\u6709\u4e09\u4e2a\u81ea\u7531\u5ea6\uff0c\u4f46\u662f\u65cb\u8f6c\u77e9\u9635\u6709\u4e5d\u4e2a\u91cf\uff0c\u7528\u4e5d\u4e2a\u91cf\u8868\u793a\u4e09\u4e2a\u81ea\u7531\u5ea6\uff08\u4ec5\u8868\u793a\u65cb\u8f6c\uff09\uff1b\u53d8\u6362\u77e9\u9635\u670916\u4e2a\u91cf\uff0c\u752816\u4e2a\u91cf\u8868\u793a6\u4e2a\u81ea\u7531\u5ea6\uff08\u5305\u62ec\u65cb\u8f6c\u548c\u5e73\u79fb\uff09\u3002 \u5176\u6b21\uff0c\u65cb\u8f6c\u77e9\u9635\u662f\u4e00\u4e2a\u7279\u6b8a\u77e9\u9635\uff0c\u5373\u662f\u6b63\u4ea4\u77e9\u9635\uff0c\u4e14\u884c\u5217\u5f0f\u4e3a1\u3002\u4e14\u8be5\u7279\u6b8a\u6027\u4e5f\u4f1a\u5f71\u54cd\u5230\u53d8\u6362\u77e9\u9635\uff0c\u6240\u4ee5\u5177\u6709\u7279\u6b8a\u6027\u7684\u77e9\u9635\u5728\u540e\u7eed\u7684\u975e\u7ebf\u6027\u4f18\u5316\u4e2d\u4f1a\u5e26\u6765\u989d\u5916\u7684\u7ea6\u675f\uff0c\u5bfc\u81f4\u6c42\u89e3\u56f0\u96be\u3002","title":"\u65cb\u8f6c\u5411\u91cf\u548c\u6b27\u62c9\u89d2"},{"location":"cv/slam/vslam14/lec2/#_7","text":"\u65cb\u8f6c\u5411\u91cf=\u4e00\u4e2a\u65cb\u8f6c\u8f74+\u4e00\u4e2a\u65cb\u8f6c\u89d2\u5ea6\u5373\uff1a\u65cb\u8f6c\u5411\u91cf\u7684\u65b9\u5411\u4e3a\u65cb\u8f6c\u8f74\uff0c\u957f\u5ea6\u4e3a\u65cb\u8f6c\u89d2\u5ea6\u3002 \u65cb\u8f6c\u5411\u91cf\u548c\u77e9\u9635\u4e4b\u95f4\u5b58\u5728\u8f6c\u6362\u5173\u7cfb\uff0c\u7528\u7f57\u5fb7\u91cc\u683c\u65af\u516c\u5f0f\uff08Rodrigues's Formula\uff09\u8868\u793a\uff1a \\[ \\mathbf{R}=\\cos\\theta\\mathbf{I}+(1-\\cos\\theta)\\mathbf{n}\\mathbf{n}^\\top+\\sin\\theta\\mathbf{n}^\\wedge \\] \u53cd\u4e4b\u4e5f\u53ef\u4ee5\u8ba1\u7b97\u4ece\u4e00\u4e2a\u65cb\u8f6c\u77e9\u9635\u5230\u65cb\u8f6c\u5411\u91cf\u7684\u8f6c\u6362\u3002\u5bf9\u4e8e\u8f6c\u89d2 \\(\\theta\\) \uff0c\u53d6\u4e24\u8fb9\u7684 \u8ff9 \uff0c\u6709 \\[ tr(\\mathbf{R})=\\cos \\theta \\ tr(\\mathbf{I})+(1-\\cos \\theta)tr(\\mathbf{n}\\mathbf{n}^\\top)+\\sin\\theta \\ tr(\\mathbf{n}^\\wedge) \\\\ tr(\\mathbf{R})=3\\cos\\theta+(1-\\cos\\theta) \\\\ tr(\\mathbf{R})=1+2\\cos\\theta \\\\ \\theta = \\arccos\\left(\\frac{tr(\\mathbf{R})-1}{2}\\right) \\] \u5173\u4e8e\u8f6c\u8f74 \\(\\mathbf{n}\\) \uff0c\u65cb\u8f6c\u8f74\u4e0a\u7684\u5411\u91cf\u5728\u65cb\u8f6c\u540e\u4e0d\u53d8\uff0c\u5373 \\(\\mathbf{Rn}=\\mathbf{n}\\) \uff0c\u56e0\u6b64\u8f6c\u8f74 \\(\\mathbf{n}\\) \u662f\u77e9\u9635 \\(\\mathbf{R}\\) \u7279\u5f81\u503c 1 \u5bf9\u5e94\u7684\u7279\u5f81\u5411\u91cf\u3002 \u7f57\u5fb7\u91cc\u683c\u65af\u516c\u5f0f\u8be6\u7ec6\u63a8\u5bfc","title":"\u65cb\u8f6c\u5411\u91cf"},{"location":"cv/slam/vslam14/lec2/#_8","text":"\u6b27\u62c9\u89d2\u662f\u4e00\u79cd\u5c06\u65cb\u8f6c\u5206\u89e3\u4e3a\u4e09\u4e2a\u57fa\u672c\u65cb\u8f6c\u7684\u65b9\u6cd5\uff0c\u5373\u7ed5\u4e09\u4e2a\u5750\u6807\u8f74\u7684\u65cb\u8f6c\u3002\u6b27\u62c9\u89d2\u7684\u8868\u793a\u65b9\u6cd5\u6709\u5f88\u591a\u79cd\uff0c\u4f46\u662f\u6700\u5e38\u7528\u7684\u662f Z-Y-X \u7684\u65cb\u8f6c\u987a\u5e8f\uff0c\u5373\u5148\u7ed5 Z \u8f74\u65cb\u8f6c\uff0c\u518d\u7ed5 Y \u8f74\u65cb\u8f6c\uff0c\u6700\u540e\u7ed5 X \u8f74\u65cb\u8f6c\u3002\u8fd9\u79cd\u65cb\u8f6c\u987a\u5e8f\u4e5f\u53eb \u822a\u5411-\u4fef\u4ef0-\u6eda\u8f6c \uff08yaw-pitch-roll\uff09\u3002 \u4f46\u662f\u5b58\u5728\u4e07\u5411\u9501\u73b0\u8c61\uff1a \u4e07\u5411\u6b7b\u9501 \uff0c\u6240\u4ee5\u4f7f\u6b27\u62c9\u89d2\u5728\u7279\u6b8a\u60c5\u51b5\u4e0b\u4f1a\u51fa\u73b0\u5947\u5f02\u6027\u3002","title":"\u6b27\u62c9\u89d2"},{"location":"cv/slam/vslam14/lec2/#_9","text":"","title":"\u56db\u5143\u6570"},{"location":"cv/slam/vslam14/lec2/#_10","text":"\u56db\u5143\u6570\u662f\u4e00\u79cd\u6269\u5c55\u590d\u6570\u7684\u65b9\u6cd5\uff0c\u590d\u6570\u7531\u5b9e\u90e8\u548c\u865a\u90e8\u7ec4\u6210\uff0c\u800c\u56db\u5143\u6570\u7531\u5b9e\u90e8\u548c\u4e09\u4e2a\u865a\u90e8\u7ec4\u6210\uff0c\u5373 \\(\\mathbf{q}=q_0+q_1i+q_2j+q_3k\\) \uff0c\u6ee1\u8db3\u4e0b\u9762\u5173\u7cfb\uff1a \\[ \\left\\{\\begin{matrix} i^2 + j^2 + k^2 = -1 \\\\ ij = k, ji = -k \\\\ jk = i, kj = -i \\\\ ki = j, ik = -j \\end{matrix}\\right. \\] \u7528\u4e00\u4e2a\u6807\u91cf\u548c\u4e00\u4e2a\u5411\u91cf\u8868\u793a\uff1a \\(\\mathbf{q}=[s,\\mathbf{v}],s=q_0 \\in R, \\mathbf{v}=[q_1,q_2,q_3]^\\top \\in R^3\\) \uff0c\u865a\u90e8\u4e3a 0 \u4e3a\u5b9e\u56db\u5143\u6570\uff0c\u5b9e\u90e8\u4e3a 0 \u4e3a\u865a\u56db\u5143\u6570","title":"\u56db\u5143\u6570\u7684\u5b9a\u4e49"},{"location":"cv/slam/vslam14/lec2/#_11","text":"\\(\\mathbf{q}_a \\pm \\mathbf{q}_b = [s_a \\pm s_b, \\mathbf{v}_a \\pm \\mathbf{v}_b]\\) \\(\\mathbf{q}_a \\mathbf{q}_b=[s_as_b-\\mathbf{v}_a^\\top\\mathbf{v}_b,s_a\\mathbf{v}_b+s_b\\mathbf{v}_a+\\mathbf{v}_a\\times \\mathbf{v}_b]^\\top\\) \\(\\parallel \\mathbf{q}_a \\parallel = \\sqrt{s_a^2+x_a^2+y_a^2+z_a^2}\\) \\(\\mathbf{q}_a^*=s_a-x_ai-y_aj-z_ak=[s_a, -\\mathbf{v}_a]^\\top\\) \\(\\mathbf{q}^{-1}=\\mathbf{q}^*/\\parallel \\mathbf{q} \\parallel^2\\) \\(k\\mathbf{q}=[ks, k\\mathbf{v}]\\) \\(\\mathbf{q}_a \\cdot \\mathbf{q}_b=s_as_b+x_ax_bi+y_ay_bj+z_az_bk\\)","title":"\u56db\u5143\u6570\u7684\u8fd0\u7b97"},{"location":"cv/slam/vslam14/lec2/#_12","text":"\u4e09\u7ef4\u7a7a\u95f4\u70b9\u7528\u4e00\u4e2a\u865a\u56db\u5143\u6570\u6765\u63cf\u8ff0\uff1a \\(\\mathbf{p}=[0,x,y,z]^\\top=[0,\\mathbf{v}]^\\top\\) \u65cb\u8f6c\u540e\u5230\u70b9 \\(\\mathbf{p}^\\prime\\) \uff1a \\(\\mathbf{p}^\\prime=\\mathbf{qpq}^{-1}\\)","title":"\u7528\u56db\u5143\u6570\u8868\u793a\u65cb\u8f6c"},{"location":"cv/slam/vslam14/lec2/#_13","text":"\u8f74\u89d2\u5230\u56db\u5143\u6570\uff1a \\(\\mathbf{q}=[\\cos \\frac{\\theta}{2}, n_x \\sin \\frac{\\theta}{2}, n_y \\frac{\\theta}{2}, n_z \\sin \\frac{\\theta}{2}]^\\top\\) \u56db\u5143\u6570\u5230\u8f74\u89d2\uff1a \\(\\left\\{\\begin{matrix} \\theta=2\\arccos q_0 \\\\ [n_x,n_y,n_z]^\\top=[q_1, q_2, q_3]^\\top / \\sin \\frac{\\theta}{2} \\end{matrix}\\right.\\)","title":"\u56db\u5143\u6570\u5230\u5176\u4ed6\u65cb\u8f6c\u8868\u793a\u7684\u8f6c\u6362"},{"location":"cv/slam/vslam14/lec2/#_14","text":"\u89c1 \u591a\u89c6\u56fe\u51e0\u4f55","title":"\u76f8\u4f3c\u3001\u4eff\u5c04\u3001\u5c04\u5f71\u53d8\u6362"},{"location":"cv/slam/vslam14/lec2/#eigen","text":"","title":"Eigen \u5e93"},{"location":"cv/slam/vslam14/lec2/#install","text":"sudo apt-get install libeigen3-dev # \u5982\u679c\u8981\u5b89\u88c5\u5bf9\u5e94\u7248\u672c\uff0c\u8bf7\u4e0b\u8f7d\u6e90\u7801\u7f16\u8bd1","title":"install"},{"location":"cv/slam/vslam14/lec2/#eigen_1","text":"Eigen :: Matrix < type , row , colon > //typedef: Matrix3d, Vector3d... Eigen :: MatrixXd //unkown size matrix matrix ( i , j ) //the value of i th row and j th colon //the operations matrix . transpose (); matrix . trace (); matrix . sum (); matrix . inverse (); matrix . determinant (); //find the proper values and vectors Eigen :: SelfAdjointEigenSolver < Eigen :: Matrix3d > solver ( matrix . transport () * matrix ); solver . eigenvalues (); solver . eigenvectors (); //solve Matrix_NN * x = v_Nd x = matrix_NN . colpivHouseholderQr (). solve ( v_Nd ); // \u65cb\u8f6c\u5411\u91cf\u548c\u65cb\u8f6c\u77e9\u9635 Eigen :: AngleAxisd rotation_vector ( theta , Eigen :: Vector3d ( x , y , z )); //rotation vector rotation_matrix = rotation_vector . toRotationMatrix (); //transform rotation vector to rotation matrix x_rotated = rotation_vector * x ; //calculate rotated vector x' x_rotated = rotation_matrix * x ; //calculate rotated vector x' // \u56db\u5143\u6570 q = Eigen :: Quaterniond ( w , x , y , z ) //create a quaternion from four values q = Eigen :: Quaterniond ( rotation_vector ) //create a quaternion from rotaion vector q = Eigen :: Quaterniond ( rotation_matrix ) //create a quaternion from rotaion matrix x_rotated = q * x //calculate rotated vector x' // \u53d8\u6362\u77e9\u9635 T //create a transform matrix Eigen :: Isometry3d T = Eigen :: Isometry3d :: Identity (); T . rotate ( rotation_vector ); /* T.rotate(rotation_matrix); T.rotate(quaternion); */ T . pretranslate ( Eigen :: Vector3d ( x , y , z ));","title":"Eigen\u4e2d\u77e9\u9635\u7684\u57fa\u672c\u64cd\u4f5c"},{"location":"llm/","text":"\u5927\u8bed\u8a00\u6a21\u578b \u00b6 Abstract \u5f52\u6863\u4e00\u4e9b\u5927\u6a21\u578b\u76f8\u5173\u5185\u5bb9\u7684\u7b14\u8bb0 \u5b66\u4e60\u81ea \u3010\u6e05\u534eNLP\u3011\u5218\u77e5\u8fdc\u56e2\u961f\u5927\u6a21\u578b\u516c\u5f00\u8bfe Table of Contents \u00b6 NLP Word2Vec 2807 9 mins 1702028944 RNN 2811 13 10 mins 1702028944 Transformer BERT 1562 5 mins 1702478901 Transformer 2247 84 9 mins 1702361865 Attention 2747 9 mins 1702124671 \u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u5b9e\u6218\u8425 LMDeploy \u5927\u6a21\u578b\u91cf\u5316\u90e8\u7f72\u5b9e\u8df5 1190 66 5 mins 1705733146 OpenCompass \u5927\u6a21\u578b\u8bc4\u6d4b 422 14 2 mins 1705733146 \u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u5168\u94fe\u8def\u5f00\u6e90\u5f00\u653e\u4f53\u7cfb 227 1 mins 1704961196 \u8f7b\u677e\u5206\u949f\u73a9\u8f6c\u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u8da3\u5473 Demo 167 250 4 mins 1704961196 XTuner \u5927\u6a21\u578b\u5355\u5361\u4f4e\u6210\u672c\u5fae\u8c03\u5b9e\u6218 2471 534 15 mins 1704961196 \u57fa\u4e8e InternLM \u548c LangChain \u642d\u5efa\u4f60\u7684\u77e5\u8bc6\u5e93 166 1 mins 1704727490 \u6742\u9879 Prompt 149 57 1 mins 1705664210 \u5206\u5e03\u5f0f\u8bad\u7ec3 1636 5 mins 1705664210 function buttonHandler(i) { let content = document.getElementsByClassName(\"content-item-wrapper\")[i]; let button = document.getElementsByClassName(\"title-wrapper\")[i].getElementsByTagName(\"button\")[0]; if (content.style.display == \"none\") { content.style.display = \"block\"; button.children[0].children[0].style.transform = \"rotate(0deg)\"; } else { content.style.display = \"none\"; button.children[0].children[0].style.transform = \"rotate(-90deg)\"; } } function produce_time() { let time = document.getElementsByClassName(\"item-actions\"); for (let i = 0; i < time.length; i++) { let timestamp; if (time[i].childElementCount > 0) { timestamp = time[i].children[0].innerHTML; } else { timestamp = time[i].innerHTML; } let date = new Date(parseInt(timestamp) * 1000); let now = new Date(); let diff = now.getTime() - date.getTime(); let years = Math.floor(diff / (24 * 3600 * 1000 * 365)); let months = Math.floor(diff / (24 * 3600 * 1000 * 30)); let days = Math.floor(diff / (24 * 3600 * 1000)); let hours = Math.floor((diff % (24 * 3600 * 1000)) / (3600 * 1000)); let minutes = Math.floor((diff % (3600 * 1000)) / (60 * 1000)); let seconds = Math.floor((diff % (60 * 1000)) / 1000); if (years > 0) { time[i].innerHTML = years + \" years ago\"; } else if (months > 0) { time[i].innerHTML = months + \" months ago\"; } else if (days > 0) { time[i].innerHTML = days + \" days ago\"; } else if (hours > 0) { time[i].innerHTML = hours + \" hours ago\"; } else if (minutes > 0) { time[i].innerHTML = minutes + \" minutes ago\"; } else { time[i].innerHTML = seconds + \" seconds ago\"; } } } produce_time();","title":"\u5927\u8bed\u8a00\u6a21\u578b"},{"location":"llm/#_1","text":"Abstract \u5f52\u6863\u4e00\u4e9b\u5927\u6a21\u578b\u76f8\u5173\u5185\u5bb9\u7684\u7b14\u8bb0 \u5b66\u4e60\u81ea \u3010\u6e05\u534eNLP\u3011\u5218\u77e5\u8fdc\u56e2\u961f\u5927\u6a21\u578b\u516c\u5f00\u8bfe","title":"\u5927\u8bed\u8a00\u6a21\u578b"},{"location":"llm/#table-of-contents","text":"NLP Word2Vec 2807 9 mins 1702028944 RNN 2811 13 10 mins 1702028944 Transformer BERT 1562 5 mins 1702478901 Transformer 2247 84 9 mins 1702361865 Attention 2747 9 mins 1702124671 \u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u5b9e\u6218\u8425 LMDeploy \u5927\u6a21\u578b\u91cf\u5316\u90e8\u7f72\u5b9e\u8df5 1190 66 5 mins 1705733146 OpenCompass \u5927\u6a21\u578b\u8bc4\u6d4b 422 14 2 mins 1705733146 \u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u5168\u94fe\u8def\u5f00\u6e90\u5f00\u653e\u4f53\u7cfb 227 1 mins 1704961196 \u8f7b\u677e\u5206\u949f\u73a9\u8f6c\u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u8da3\u5473 Demo 167 250 4 mins 1704961196 XTuner \u5927\u6a21\u578b\u5355\u5361\u4f4e\u6210\u672c\u5fae\u8c03\u5b9e\u6218 2471 534 15 mins 1704961196 \u57fa\u4e8e InternLM \u548c LangChain \u642d\u5efa\u4f60\u7684\u77e5\u8bc6\u5e93 166 1 mins 1704727490 \u6742\u9879 Prompt 149 57 1 mins 1705664210 \u5206\u5e03\u5f0f\u8bad\u7ec3 1636 5 mins 1705664210 function buttonHandler(i) { let content = document.getElementsByClassName(\"content-item-wrapper\")[i]; let button = document.getElementsByClassName(\"title-wrapper\")[i].getElementsByTagName(\"button\")[0]; if (content.style.display == \"none\") { content.style.display = \"block\"; button.children[0].children[0].style.transform = \"rotate(0deg)\"; } else { content.style.display = \"none\"; button.children[0].children[0].style.transform = \"rotate(-90deg)\"; } } function produce_time() { let time = document.getElementsByClassName(\"item-actions\"); for (let i = 0; i < time.length; i++) { let timestamp; if (time[i].childElementCount > 0) { timestamp = time[i].children[0].innerHTML; } else { timestamp = time[i].innerHTML; } let date = new Date(parseInt(timestamp) * 1000); let now = new Date(); let diff = now.getTime() - date.getTime(); let years = Math.floor(diff / (24 * 3600 * 1000 * 365)); let months = Math.floor(diff / (24 * 3600 * 1000 * 30)); let days = Math.floor(diff / (24 * 3600 * 1000)); let hours = Math.floor((diff % (24 * 3600 * 1000)) / (3600 * 1000)); let minutes = Math.floor((diff % (3600 * 1000)) / (60 * 1000)); let seconds = Math.floor((diff % (60 * 1000)) / 1000); if (years > 0) { time[i].innerHTML = years + \" years ago\"; } else if (months > 0) { time[i].innerHTML = months + \" months ago\"; } else if (days > 0) { time[i].innerHTML = days + \" days ago\"; } else if (hours > 0) { time[i].innerHTML = hours + \" hours ago\"; } else if (minutes > 0) { time[i].innerHTML = minutes + \" minutes ago\"; } else { time[i].innerHTML = seconds + \" seconds ago\"; } } } produce_time();","title":"Table of Contents"},{"location":"llm/internlm/","text":"\u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u5b9e\u6218\u8425 \u00b6 Abstract \u5f52\u6863\u6709\u5173\u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u5b9e\u6218\u8425\u7684\u8bfe\u7a0b\u7b14\u8bb0\u3002 \u4ed3\u5e93\u5730\u5740\uff1a InternLM/tutorial \u7b97\u529b\u5e73\u53f0\uff1a InternStudio Table of Contents \u00b6 \u8bfe\u7a0b\u65f6\u95f4 \u8bfe\u7a0b\u5185\u5bb9 \u8bb2\u5e08 \u7b2c 1 \u8282 \u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u5168\u94fe\u8def\u5f00\u6e90\u5f00\u653e\u4f53\u7cfb \u9648\u607a \u4e0a\u6d77\u4eba\u5de5\u667a\u80fd\u5b9e\u9a8c\u5ba4\u9752\u5e74\u79d1\u5b66\u5bb6 \u7b2c 2 \u8282 \u8f7b\u677e\u5206\u949f\u73a9\u8f6c\u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u8da3\u5473 Demo \u5b8b\u5fd7\u5b66d2l-ai-solutions-manual \u5f00\u6e90\u9879\u76ee\u8d1f\u8d23\u4eba \u7b2c 3 \u8282 \u57fa\u4e8e InternLM \u548c Langchain \u642d\u5efa\u4f60\u7684\u77e5\u8bc6\u5e93 \u90b9\u96e8\u8861prompt-engineering-for-developers \u5f00\u6e90\u9879\u76ee\u8d1f\u8d23\u4eba \u7b2c 4 \u8282 XTuner \u5927\u6a21\u578b\u5355\u5361\u4f4e\u6210\u672c\u5fae\u8c03\u5b9e\u6218 \u6c6a\u5468\u8c26XTuner \u793e\u533a\u8d21\u732e\u8005 \u7b2c 5 \u8282 LMDeploy \u5927\u6a21\u578b\u91cf\u5316\u90e8\u7f72\u5b9e\u8df5 \u957f\u7434HuggingLLM\u5f00\u6e90\u9879\u76ee\u8d1f\u8d23\u4eba \u7b2c 6 \u8282 OpenCompass \u5927\u6a21\u578b\u8bc4\u6d4b\u89e3\u8bfb\u53ca\u5b9e\u6218\u6307\u5357 \u66f9\u8302\u677eOpenCompass \u6838\u5fc3\u5f00\u53d1\u8005\u738b\u52aaOpenCompass \u793e\u533a\u8d21\u732e\u8005 \u7b2c 7 \u8282 \u5f69\u86cb\u73af\u8282 \u795e\u79d8\u5609\u5bbe","title":"\u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u5b9e\u6218\u8425"},{"location":"llm/internlm/#_1","text":"Abstract \u5f52\u6863\u6709\u5173\u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u5b9e\u6218\u8425\u7684\u8bfe\u7a0b\u7b14\u8bb0\u3002 \u4ed3\u5e93\u5730\u5740\uff1a InternLM/tutorial \u7b97\u529b\u5e73\u53f0\uff1a InternStudio","title":"\u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u5b9e\u6218\u8425"},{"location":"llm/internlm/#table-of-contents","text":"\u8bfe\u7a0b\u65f6\u95f4 \u8bfe\u7a0b\u5185\u5bb9 \u8bb2\u5e08 \u7b2c 1 \u8282 \u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u5168\u94fe\u8def\u5f00\u6e90\u5f00\u653e\u4f53\u7cfb \u9648\u607a \u4e0a\u6d77\u4eba\u5de5\u667a\u80fd\u5b9e\u9a8c\u5ba4\u9752\u5e74\u79d1\u5b66\u5bb6 \u7b2c 2 \u8282 \u8f7b\u677e\u5206\u949f\u73a9\u8f6c\u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u8da3\u5473 Demo \u5b8b\u5fd7\u5b66d2l-ai-solutions-manual \u5f00\u6e90\u9879\u76ee\u8d1f\u8d23\u4eba \u7b2c 3 \u8282 \u57fa\u4e8e InternLM \u548c Langchain \u642d\u5efa\u4f60\u7684\u77e5\u8bc6\u5e93 \u90b9\u96e8\u8861prompt-engineering-for-developers \u5f00\u6e90\u9879\u76ee\u8d1f\u8d23\u4eba \u7b2c 4 \u8282 XTuner \u5927\u6a21\u578b\u5355\u5361\u4f4e\u6210\u672c\u5fae\u8c03\u5b9e\u6218 \u6c6a\u5468\u8c26XTuner \u793e\u533a\u8d21\u732e\u8005 \u7b2c 5 \u8282 LMDeploy \u5927\u6a21\u578b\u91cf\u5316\u90e8\u7f72\u5b9e\u8df5 \u957f\u7434HuggingLLM\u5f00\u6e90\u9879\u76ee\u8d1f\u8d23\u4eba \u7b2c 6 \u8282 OpenCompass \u5927\u6a21\u578b\u8bc4\u6d4b\u89e3\u8bfb\u53ca\u5b9e\u6218\u6307\u5357 \u66f9\u8302\u677eOpenCompass \u6838\u5fc3\u5f00\u53d1\u8005\u738b\u52aaOpenCompass \u793e\u533a\u8d21\u732e\u8005 \u7b2c 7 \u8282 \u5f69\u86cb\u73af\u8282 \u795e\u79d8\u5609\u5bbe","title":"Table of Contents"},{"location":"llm/internlm/lec1/","text":"\u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u5168\u94fe\u8def\u5f00\u6e90\u5f00\u653e\u4f53\u7cfb \u00b6 \u7ea6 223 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f Abstract \u5b66\u4e60\u81ea \u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u5168\u94fe\u8def\u5f00\u6e90\u5f00\u653e\u4f53\u7cfb \u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u7cfb\u5217 \u00b6 \u8f7b\u91cf\u7ea7\uff1aInternLM-7B \u4e2d\u91cf\u7ea7\uff1aInternLM-20B \u91cd\u91cf\u7ea7\uff1aInternLM-123B \u4ece\u6a21\u578b\u5230\u5e94\u7528 \u00b6 \u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u5168\u94fe\u8def\u5f00\u6e90\u5f00\u653e\u4f53\u7cfb \u00b6 \u6570\u636e\uff1a\u4e66\u751f\u00b7\u4e07\u5377 \u00b6 \u5177\u4f53\u67e5\u770b openDataLab \u3002 \u9884\u8bad\u7ec3\uff1aInternLM-Train \u00b6 \u5fae\u8c03\uff1aXTuner \u00b6 \u5927\u8bed\u8a00\u6a21\u578b\u7684\u4e0b\u6e38\u5e94\u7528\u4e2d\uff0c\u589e\u91cf\u7eed\u8bad\u548c\u6709\u76d1\u7763\u5fae\u8c03\u662f\u7ecf\u5e38\u4f1a\u7528\u5230\u4e24\u79cd\u65b9\u5f0f\u3002 \u589e\u91cf\u7eed\u8bad \u4f7f\u7528\u573a\u666f\uff1a\u8ba9\u57fa\u5ea7\u6a21\u578b\u5b66\u4e60\u65b0\u77e5\u8bc6\uff0c\u5982\u67d0\u4e2a\u5782\u7c7b\u9886\u57df\u77e5\u8bc6 \u8bad\u7ec3\u6570\u636e\uff1a\u6587\u7ae0\u3001\u6570\u636e\u3001\u4ee3\u7801\u7b49 \u6709\u76d1\u7763\u5fae\u8c03 \u4f7f\u7528\u573a\u666f\uff1a\u8ba9\u6a21\u578b\u5b66\u4f1a\u7406\u89e3\u548c\u9075\u5faa\u5404\u79cd\u6307\u4ee4\uff0c\u6216\u8005\u6ce8\u5165\u5c11\u8bb8\u9886\u57df\u77e5\u8bc6 \u8bad\u7ec3\u6570\u636e\uff1a\u9ad8\u8d28\u91cf\u7684\u5bf9\u8bdd\u3001\u95ee\u7b54\u6570\u636e \u8bc4\u6d4b\uff1aOpenCompass \u00b6 \u90e8\u7f72\uff1aLMDeploy \u00b6 \u5e94\u7528\uff1aLagent\u3001AgentLego \u00b6","title":"\u7b2c\u4e00\u8282"},{"location":"llm/internlm/lec1/#_1","text":"\u7ea6 223 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f Abstract \u5b66\u4e60\u81ea \u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u5168\u94fe\u8def\u5f00\u6e90\u5f00\u653e\u4f53\u7cfb","title":"\u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u5168\u94fe\u8def\u5f00\u6e90\u5f00\u653e\u4f53\u7cfb"},{"location":"llm/internlm/lec1/#_2","text":"\u8f7b\u91cf\u7ea7\uff1aInternLM-7B \u4e2d\u91cf\u7ea7\uff1aInternLM-20B \u91cd\u91cf\u7ea7\uff1aInternLM-123B","title":"\u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u7cfb\u5217"},{"location":"llm/internlm/lec1/#_3","text":"","title":"\u4ece\u6a21\u578b\u5230\u5e94\u7528"},{"location":"llm/internlm/lec1/#_4","text":"","title":"\u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u5168\u94fe\u8def\u5f00\u6e90\u5f00\u653e\u4f53\u7cfb"},{"location":"llm/internlm/lec1/#_5","text":"\u5177\u4f53\u67e5\u770b openDataLab \u3002","title":"\u6570\u636e\uff1a\u4e66\u751f\u00b7\u4e07\u5377"},{"location":"llm/internlm/lec1/#internlm-train","text":"","title":"\u9884\u8bad\u7ec3\uff1aInternLM-Train"},{"location":"llm/internlm/lec1/#xtuner","text":"\u5927\u8bed\u8a00\u6a21\u578b\u7684\u4e0b\u6e38\u5e94\u7528\u4e2d\uff0c\u589e\u91cf\u7eed\u8bad\u548c\u6709\u76d1\u7763\u5fae\u8c03\u662f\u7ecf\u5e38\u4f1a\u7528\u5230\u4e24\u79cd\u65b9\u5f0f\u3002 \u589e\u91cf\u7eed\u8bad \u4f7f\u7528\u573a\u666f\uff1a\u8ba9\u57fa\u5ea7\u6a21\u578b\u5b66\u4e60\u65b0\u77e5\u8bc6\uff0c\u5982\u67d0\u4e2a\u5782\u7c7b\u9886\u57df\u77e5\u8bc6 \u8bad\u7ec3\u6570\u636e\uff1a\u6587\u7ae0\u3001\u6570\u636e\u3001\u4ee3\u7801\u7b49 \u6709\u76d1\u7763\u5fae\u8c03 \u4f7f\u7528\u573a\u666f\uff1a\u8ba9\u6a21\u578b\u5b66\u4f1a\u7406\u89e3\u548c\u9075\u5faa\u5404\u79cd\u6307\u4ee4\uff0c\u6216\u8005\u6ce8\u5165\u5c11\u8bb8\u9886\u57df\u77e5\u8bc6 \u8bad\u7ec3\u6570\u636e\uff1a\u9ad8\u8d28\u91cf\u7684\u5bf9\u8bdd\u3001\u95ee\u7b54\u6570\u636e","title":"\u5fae\u8c03\uff1aXTuner"},{"location":"llm/internlm/lec1/#opencompass","text":"","title":"\u8bc4\u6d4b\uff1aOpenCompass"},{"location":"llm/internlm/lec1/#lmdeploy","text":"","title":"\u90e8\u7f72\uff1aLMDeploy"},{"location":"llm/internlm/lec1/#lagentagentlego","text":"","title":"\u5e94\u7528\uff1aLagent\u3001AgentLego"},{"location":"llm/internlm/lec2/","text":"\u8f7b\u677e\u5206\u949f\u73a9\u8f6c\u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u8da3\u5473 Demo \u00b6 \u7ea6 163 \u4e2a\u5b57 250 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \u5206\u949f Abstract \u5b66\u4e60\u81ea \u8f7b\u677e\u5206\u949f\u73a9\u8f6c\u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u8da3\u5473 Demo InternLM-Chat-7B \u667a\u80fd\u5bf9\u8bdd \u00b6 Terminal Demo \u00b6 cli_demo.py import torch from transformers import AutoTokenizer , AutoModelForCausalLM model_name_or_path = \"/root/model/Shanghai_AI_Laboratory/internlm-chat-7b\" tokenizer = AutoTokenizer . from_pretrained ( model_name_or_path , trust_remote_code = True ) model = AutoModelForCausalLM . from_pretrained ( model_name_or_path , trust_remote_code = True , torch_dtype = torch . bfloat16 , device_map = 'auto' ) model = model . eval () system_prompt = \"\"\"You are an AI assistant whose name is InternLM (\u4e66\u751f\u00b7\u6d66\u8bed). - InternLM (\u4e66\u751f\u00b7\u6d66\u8bed) is a conversational language model that is developed by Shanghai AI Laboratory (\u4e0a\u6d77\u4eba\u5de5\u667a\u80fd\u5b9e\u9a8c\u5ba4). It is designed to be helpful, honest, and harmless. - InternLM (\u4e66\u751f\u00b7\u6d66\u8bed) can understand and communicate fluently in the language chosen by the user such as English and \u4e2d\u6587. \"\"\" messages = [( system_prompt , '' )] print ( \"=============Welcome to InternLM chatbot, type 'exit' to exit.=============\" ) while True : input_text = input ( \"User >>> \" ) input_text . replace ( ' ' , '' ) if input_text == \"exit\" : break response , history = model . chat ( tokenizer , input_text , history = messages ) messages . append (( input_text , response )) print ( f \"robot >>> { response } \" ) python /root/code/InternLM/cli_demo.py Web Demo \u00b6 streamlit run /root/code/InternLM/web_demo.py --server.address 127 .0.0.1 --server.port 6006 Lagent \u667a\u80fd\u4f53\u5de5\u5177\u8c03\u7528 \u00b6 react_web_demo.py import copy import os import streamlit as st from streamlit.logger import get_logger from lagent.actions import ActionExecutor , GoogleSearch , PythonInterpreter from lagent.agents.react import ReAct from lagent.llms import GPTAPI from lagent.llms.huggingface import HFTransformerCasualLM class SessionState : def init_state ( self ): \"\"\"Initialize session state variables.\"\"\" st . session_state [ 'assistant' ] = [] st . session_state [ 'user' ] = [] #action_list = [PythonInterpreter(), GoogleSearch()] action_list = [ PythonInterpreter ()] st . session_state [ 'plugin_map' ] = { action . name : action for action in action_list } st . session_state [ 'model_map' ] = {} st . session_state [ 'model_selected' ] = None st . session_state [ 'plugin_actions' ] = set () def clear_state ( self ): \"\"\"Clear the existing session state.\"\"\" st . session_state [ 'assistant' ] = [] st . session_state [ 'user' ] = [] st . session_state [ 'model_selected' ] = None if 'chatbot' in st . session_state : st . session_state [ 'chatbot' ] . _session_history = [] class StreamlitUI : def __init__ ( self , session_state : SessionState ): self . init_streamlit () self . session_state = session_state def init_streamlit ( self ): \"\"\"Initialize Streamlit's UI settings.\"\"\" st . set_page_config ( layout = 'wide' , page_title = 'lagent-web' , page_icon = './docs/imgs/lagent_icon.png' ) # st.header(':robot_face: :blue[Lagent] Web Demo ', divider='rainbow') st . sidebar . title ( '\u6a21\u578b\u63a7\u5236' ) def setup_sidebar ( self ): \"\"\"Setup the sidebar for model and plugin selection.\"\"\" model_name = st . sidebar . selectbox ( '\u6a21\u578b\u9009\u62e9\uff1a' , options = [ 'gpt-3.5-turbo' , 'internlm' ]) if model_name != st . session_state [ 'model_selected' ]: model = self . init_model ( model_name ) self . session_state . clear_state () st . session_state [ 'model_selected' ] = model_name if 'chatbot' in st . session_state : del st . session_state [ 'chatbot' ] else : model = st . session_state [ 'model_map' ][ model_name ] plugin_name = st . sidebar . multiselect ( '\u63d2\u4ef6\u9009\u62e9' , options = list ( st . session_state [ 'plugin_map' ] . keys ()), default = [ list ( st . session_state [ 'plugin_map' ] . keys ())[ 0 ]], ) plugin_action = [ st . session_state [ 'plugin_map' ][ name ] for name in plugin_name ] if 'chatbot' in st . session_state : st . session_state [ 'chatbot' ] . _action_executor = ActionExecutor ( actions = plugin_action ) if st . sidebar . button ( '\u6e05\u7a7a\u5bf9\u8bdd' , key = 'clear' ): self . session_state . clear_state () uploaded_file = st . sidebar . file_uploader ( '\u4e0a\u4f20\u6587\u4ef6' , type = [ 'png' , 'jpg' , 'jpeg' , 'mp4' , 'mp3' , 'wav' ]) return model_name , model , plugin_action , uploaded_file def init_model ( self , option ): \"\"\"Initialize the model based on the selected option.\"\"\" if option not in st . session_state [ 'model_map' ]: if option . startswith ( 'gpt' ): st . session_state [ 'model_map' ][ option ] = GPTAPI ( model_type = option ) else : st . session_state [ 'model_map' ][ option ] = HFTransformerCasualLM ( '/root/model/Shanghai_AI_Laboratory/internlm-chat-7b' ) return st . session_state [ 'model_map' ][ option ] def initialize_chatbot ( self , model , plugin_action ): \"\"\"Initialize the chatbot with the given model and plugin actions.\"\"\" return ReAct ( llm = model , action_executor = ActionExecutor ( actions = plugin_action )) def render_user ( self , prompt : str ): with st . chat_message ( 'user' ): st . markdown ( prompt ) def render_assistant ( self , agent_return ): with st . chat_message ( 'assistant' ): for action in agent_return . actions : if ( action ): self . render_action ( action ) st . markdown ( agent_return . response ) def render_action ( self , action ): with st . expander ( action . type , expanded = True ): st . markdown ( \" \u63d2 \u4ef6:\" # noqa E501 + action . type + '
' , unsafe_allow_html = True ) st . markdown ( \" \u601d\u8003\u6b65\u9aa4:\" # noqa E501 + action . thought + '
' , unsafe_allow_html = True ) if ( isinstance ( action . args , dict ) and 'text' in action . args ): st . markdown ( \" \u6267\u884c\u5185\u5bb9:
\" , # noqa E501 unsafe_allow_html = True ) st . markdown ( action . args [ 'text' ]) self . render_action_results ( action ) def render_action_results ( self , action ): \"\"\"Render the results of action, including text, images, videos, and audios.\"\"\" if ( isinstance ( action . result , dict )): st . markdown ( \" \u6267\u884c\u7ed3\u679c:
\" , # noqa E501 unsafe_allow_html = True ) if 'text' in action . result : st . markdown ( \"\" + action . result [ 'text' ] + '
' , unsafe_allow_html = True ) if 'image' in action . result : image_path = action . result [ 'image' ] image_data = open ( image_path , 'rb' ) . read () st . image ( image_data , caption = 'Generated Image' ) if 'video' in action . result : video_data = action . result [ 'video' ] video_data = open ( video_data , 'rb' ) . read () st . video ( video_data ) if 'audio' in action . result : audio_data = action . result [ 'audio' ] audio_data = open ( audio_data , 'rb' ) . read () st . audio ( audio_data ) def main (): logger = get_logger ( __name__ ) # Initialize Streamlit UI and setup sidebar if 'ui' not in st . session_state : session_state = SessionState () session_state . init_state () st . session_state [ 'ui' ] = StreamlitUI ( session_state ) else : st . set_page_config ( layout = 'wide' , page_title = 'lagent-web' , page_icon = './docs/imgs/lagent_icon.png' ) # st.header(':robot_face: :blue[Lagent] Web Demo ', divider='rainbow') model_name , model , plugin_action , uploaded_file = st . session_state [ 'ui' ] . setup_sidebar () # Initialize chatbot if it is not already initialized # or if the model has changed if 'chatbot' not in st . session_state or model != st . session_state [ 'chatbot' ] . _llm : st . session_state [ 'chatbot' ] = st . session_state [ 'ui' ] . initialize_chatbot ( model , plugin_action ) for prompt , agent_return in zip ( st . session_state [ 'user' ], st . session_state [ 'assistant' ]): st . session_state [ 'ui' ] . render_user ( prompt ) st . session_state [ 'ui' ] . render_assistant ( agent_return ) # User input form at the bottom (this part will be at the bottom) # with st.form(key='my_form', clear_on_submit=True): if user_input := st . chat_input ( '' ): st . session_state [ 'ui' ] . render_user ( user_input ) st . session_state [ 'user' ] . append ( user_input ) # Add file uploader to sidebar if uploaded_file : file_bytes = uploaded_file . read () file_type = uploaded_file . type if 'image' in file_type : st . image ( file_bytes , caption = 'Uploaded Image' ) elif 'video' in file_type : st . video ( file_bytes , caption = 'Uploaded Video' ) elif 'audio' in file_type : st . audio ( file_bytes , caption = 'Uploaded Audio' ) # Save the file to a temporary location and get the path file_path = os . path . join ( root_dir , uploaded_file . name ) with open ( file_path , 'wb' ) as tmpfile : tmpfile . write ( file_bytes ) st . write ( f 'File saved at: { file_path } ' ) user_input = '\u6211\u4e0a\u4f20\u4e86\u4e00\u4e2a\u56fe\u50cf\uff0c\u8def\u5f84\u4e3a: {file_path} . {user_input} ' . format ( file_path = file_path , user_input = user_input ) agent_return = st . session_state [ 'chatbot' ] . chat ( user_input ) st . session_state [ 'assistant' ] . append ( copy . deepcopy ( agent_return )) logger . info ( agent_return . inner_steps ) st . session_state [ 'ui' ] . render_assistant ( agent_return ) if __name__ == '__main__' : root_dir = os . path . dirname ( os . path . dirname ( os . path . abspath ( __file__ ))) root_dir = os . path . join ( root_dir , 'tmp_dir' ) os . makedirs ( root_dir , exist_ok = True ) main () streamlit run /root/code/lagent/examples/react_web_demo.py --server.address 127 .0.0.1 --server.port 6006 \u6d66\u8bed\u00b7\u7075\u7b14\u56fe\u6587\u7406\u89e3\u521b\u4f5c \u00b6 python /root/code/InternLM-XComposer/examples/web_demo.py \\ --folder /root/model/Shanghai_AI_Laboratory/internlm-xcomposer-7b \\ --num_gpus 1 \\ --port 6006 \u4f5c\u4e1a \u00b6 \u4f7f\u7528 InternLM-Chat-7B \u6a21\u578b\u751f\u6210 300 \u5b57\u7684\u5c0f\u6545\u4e8b\uff08\u9700\u622a\u56fe\uff09\u3002 \u719f\u6089 hugging face \u4e0b\u8f7d\u529f\u80fd\uff0c\u4f7f\u7528 huggingface_hub python \u5305\uff0c\u4e0b\u8f7d InternLM-20B \u7684 config.json \u6587\u4ef6\u5230\u672c\u5730\uff08\u9700\u622a\u56fe\u4e0b\u8f7d\u8fc7\u7a0b\uff09\u3002 \u5b8c\u6210\u6d66\u8bed\u00b7\u7075\u7b14\u7684\u56fe\u6587\u7406\u89e3\u53ca\u521b\u4f5c\u90e8\u7f72\uff08\u9700\u622a\u56fe\uff09 \u5982\u4e0a\u56fe\u6240\u793a \u5b8c\u6210 Lagent \u5de5\u5177\u8c03\u7528 Demo \u521b\u4f5c\u90e8\u7f72\uff08\u9700\u622a\u56fe\uff09 \u5982\u4e0a\u56fe\u6240\u793a","title":"\u7b2c\u4e8c\u8282"},{"location":"llm/internlm/lec2/#demo","text":"\u7ea6 163 \u4e2a\u5b57 250 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \u5206\u949f Abstract \u5b66\u4e60\u81ea \u8f7b\u677e\u5206\u949f\u73a9\u8f6c\u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u8da3\u5473 Demo","title":"\u8f7b\u677e\u5206\u949f\u73a9\u8f6c\u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u8da3\u5473 Demo"},{"location":"llm/internlm/lec2/#internlm-chat-7b","text":"","title":"InternLM-Chat-7B \u667a\u80fd\u5bf9\u8bdd"},{"location":"llm/internlm/lec2/#terminal-demo","text":"cli_demo.py import torch from transformers import AutoTokenizer , AutoModelForCausalLM model_name_or_path = \"/root/model/Shanghai_AI_Laboratory/internlm-chat-7b\" tokenizer = AutoTokenizer . from_pretrained ( model_name_or_path , trust_remote_code = True ) model = AutoModelForCausalLM . from_pretrained ( model_name_or_path , trust_remote_code = True , torch_dtype = torch . bfloat16 , device_map = 'auto' ) model = model . eval () system_prompt = \"\"\"You are an AI assistant whose name is InternLM (\u4e66\u751f\u00b7\u6d66\u8bed). - InternLM (\u4e66\u751f\u00b7\u6d66\u8bed) is a conversational language model that is developed by Shanghai AI Laboratory (\u4e0a\u6d77\u4eba\u5de5\u667a\u80fd\u5b9e\u9a8c\u5ba4). It is designed to be helpful, honest, and harmless. - InternLM (\u4e66\u751f\u00b7\u6d66\u8bed) can understand and communicate fluently in the language chosen by the user such as English and \u4e2d\u6587. \"\"\" messages = [( system_prompt , '' )] print ( \"=============Welcome to InternLM chatbot, type 'exit' to exit.=============\" ) while True : input_text = input ( \"User >>> \" ) input_text . replace ( ' ' , '' ) if input_text == \"exit\" : break response , history = model . chat ( tokenizer , input_text , history = messages ) messages . append (( input_text , response )) print ( f \"robot >>> { response } \" ) python /root/code/InternLM/cli_demo.py","title":"Terminal Demo"},{"location":"llm/internlm/lec2/#web-demo","text":"streamlit run /root/code/InternLM/web_demo.py --server.address 127 .0.0.1 --server.port 6006","title":"Web Demo"},{"location":"llm/internlm/lec2/#lagent","text":"react_web_demo.py import copy import os import streamlit as st from streamlit.logger import get_logger from lagent.actions import ActionExecutor , GoogleSearch , PythonInterpreter from lagent.agents.react import ReAct from lagent.llms import GPTAPI from lagent.llms.huggingface import HFTransformerCasualLM class SessionState : def init_state ( self ): \"\"\"Initialize session state variables.\"\"\" st . session_state [ 'assistant' ] = [] st . session_state [ 'user' ] = [] #action_list = [PythonInterpreter(), GoogleSearch()] action_list = [ PythonInterpreter ()] st . session_state [ 'plugin_map' ] = { action . name : action for action in action_list } st . session_state [ 'model_map' ] = {} st . session_state [ 'model_selected' ] = None st . session_state [ 'plugin_actions' ] = set () def clear_state ( self ): \"\"\"Clear the existing session state.\"\"\" st . session_state [ 'assistant' ] = [] st . session_state [ 'user' ] = [] st . session_state [ 'model_selected' ] = None if 'chatbot' in st . session_state : st . session_state [ 'chatbot' ] . _session_history = [] class StreamlitUI : def __init__ ( self , session_state : SessionState ): self . init_streamlit () self . session_state = session_state def init_streamlit ( self ): \"\"\"Initialize Streamlit's UI settings.\"\"\" st . set_page_config ( layout = 'wide' , page_title = 'lagent-web' , page_icon = './docs/imgs/lagent_icon.png' ) # st.header(':robot_face: :blue[Lagent] Web Demo ', divider='rainbow') st . sidebar . title ( '\u6a21\u578b\u63a7\u5236' ) def setup_sidebar ( self ): \"\"\"Setup the sidebar for model and plugin selection.\"\"\" model_name = st . sidebar . selectbox ( '\u6a21\u578b\u9009\u62e9\uff1a' , options = [ 'gpt-3.5-turbo' , 'internlm' ]) if model_name != st . session_state [ 'model_selected' ]: model = self . init_model ( model_name ) self . session_state . clear_state () st . session_state [ 'model_selected' ] = model_name if 'chatbot' in st . session_state : del st . session_state [ 'chatbot' ] else : model = st . session_state [ 'model_map' ][ model_name ] plugin_name = st . sidebar . multiselect ( '\u63d2\u4ef6\u9009\u62e9' , options = list ( st . session_state [ 'plugin_map' ] . keys ()), default = [ list ( st . session_state [ 'plugin_map' ] . keys ())[ 0 ]], ) plugin_action = [ st . session_state [ 'plugin_map' ][ name ] for name in plugin_name ] if 'chatbot' in st . session_state : st . session_state [ 'chatbot' ] . _action_executor = ActionExecutor ( actions = plugin_action ) if st . sidebar . button ( '\u6e05\u7a7a\u5bf9\u8bdd' , key = 'clear' ): self . session_state . clear_state () uploaded_file = st . sidebar . file_uploader ( '\u4e0a\u4f20\u6587\u4ef6' , type = [ 'png' , 'jpg' , 'jpeg' , 'mp4' , 'mp3' , 'wav' ]) return model_name , model , plugin_action , uploaded_file def init_model ( self , option ): \"\"\"Initialize the model based on the selected option.\"\"\" if option not in st . session_state [ 'model_map' ]: if option . startswith ( 'gpt' ): st . session_state [ 'model_map' ][ option ] = GPTAPI ( model_type = option ) else : st . session_state [ 'model_map' ][ option ] = HFTransformerCasualLM ( '/root/model/Shanghai_AI_Laboratory/internlm-chat-7b' ) return st . session_state [ 'model_map' ][ option ] def initialize_chatbot ( self , model , plugin_action ): \"\"\"Initialize the chatbot with the given model and plugin actions.\"\"\" return ReAct ( llm = model , action_executor = ActionExecutor ( actions = plugin_action )) def render_user ( self , prompt : str ): with st . chat_message ( 'user' ): st . markdown ( prompt ) def render_assistant ( self , agent_return ): with st . chat_message ( 'assistant' ): for action in agent_return . actions : if ( action ): self . render_action ( action ) st . markdown ( agent_return . response ) def render_action ( self , action ): with st . expander ( action . type , expanded = True ): st . markdown ( \" \u63d2 \u4ef6:\" # noqa E501 + action . type + '
' , unsafe_allow_html = True ) st . markdown ( \" \u601d\u8003\u6b65\u9aa4:\" # noqa E501 + action . thought + '
' , unsafe_allow_html = True ) if ( isinstance ( action . args , dict ) and 'text' in action . args ): st . markdown ( \" \u6267\u884c\u5185\u5bb9:
\" , # noqa E501 unsafe_allow_html = True ) st . markdown ( action . args [ 'text' ]) self . render_action_results ( action ) def render_action_results ( self , action ): \"\"\"Render the results of action, including text, images, videos, and audios.\"\"\" if ( isinstance ( action . result , dict )): st . markdown ( \" \u6267\u884c\u7ed3\u679c:
\" , # noqa E501 unsafe_allow_html = True ) if 'text' in action . result : st . markdown ( \"\" + action . result [ 'text' ] + '
' , unsafe_allow_html = True ) if 'image' in action . result : image_path = action . result [ 'image' ] image_data = open ( image_path , 'rb' ) . read () st . image ( image_data , caption = 'Generated Image' ) if 'video' in action . result : video_data = action . result [ 'video' ] video_data = open ( video_data , 'rb' ) . read () st . video ( video_data ) if 'audio' in action . result : audio_data = action . result [ 'audio' ] audio_data = open ( audio_data , 'rb' ) . read () st . audio ( audio_data ) def main (): logger = get_logger ( __name__ ) # Initialize Streamlit UI and setup sidebar if 'ui' not in st . session_state : session_state = SessionState () session_state . init_state () st . session_state [ 'ui' ] = StreamlitUI ( session_state ) else : st . set_page_config ( layout = 'wide' , page_title = 'lagent-web' , page_icon = './docs/imgs/lagent_icon.png' ) # st.header(':robot_face: :blue[Lagent] Web Demo ', divider='rainbow') model_name , model , plugin_action , uploaded_file = st . session_state [ 'ui' ] . setup_sidebar () # Initialize chatbot if it is not already initialized # or if the model has changed if 'chatbot' not in st . session_state or model != st . session_state [ 'chatbot' ] . _llm : st . session_state [ 'chatbot' ] = st . session_state [ 'ui' ] . initialize_chatbot ( model , plugin_action ) for prompt , agent_return in zip ( st . session_state [ 'user' ], st . session_state [ 'assistant' ]): st . session_state [ 'ui' ] . render_user ( prompt ) st . session_state [ 'ui' ] . render_assistant ( agent_return ) # User input form at the bottom (this part will be at the bottom) # with st.form(key='my_form', clear_on_submit=True): if user_input := st . chat_input ( '' ): st . session_state [ 'ui' ] . render_user ( user_input ) st . session_state [ 'user' ] . append ( user_input ) # Add file uploader to sidebar if uploaded_file : file_bytes = uploaded_file . read () file_type = uploaded_file . type if 'image' in file_type : st . image ( file_bytes , caption = 'Uploaded Image' ) elif 'video' in file_type : st . video ( file_bytes , caption = 'Uploaded Video' ) elif 'audio' in file_type : st . audio ( file_bytes , caption = 'Uploaded Audio' ) # Save the file to a temporary location and get the path file_path = os . path . join ( root_dir , uploaded_file . name ) with open ( file_path , 'wb' ) as tmpfile : tmpfile . write ( file_bytes ) st . write ( f 'File saved at: { file_path } ' ) user_input = '\u6211\u4e0a\u4f20\u4e86\u4e00\u4e2a\u56fe\u50cf\uff0c\u8def\u5f84\u4e3a: {file_path} . {user_input} ' . format ( file_path = file_path , user_input = user_input ) agent_return = st . session_state [ 'chatbot' ] . chat ( user_input ) st . session_state [ 'assistant' ] . append ( copy . deepcopy ( agent_return )) logger . info ( agent_return . inner_steps ) st . session_state [ 'ui' ] . render_assistant ( agent_return ) if __name__ == '__main__' : root_dir = os . path . dirname ( os . path . dirname ( os . path . abspath ( __file__ ))) root_dir = os . path . join ( root_dir , 'tmp_dir' ) os . makedirs ( root_dir , exist_ok = True ) main () streamlit run /root/code/lagent/examples/react_web_demo.py --server.address 127 .0.0.1 --server.port 6006","title":"Lagent \u667a\u80fd\u4f53\u5de5\u5177\u8c03\u7528"},{"location":"llm/internlm/lec2/#_1","text":"python /root/code/InternLM-XComposer/examples/web_demo.py \\ --folder /root/model/Shanghai_AI_Laboratory/internlm-xcomposer-7b \\ --num_gpus 1 \\ --port 6006","title":"\u6d66\u8bed\u00b7\u7075\u7b14\u56fe\u6587\u7406\u89e3\u521b\u4f5c"},{"location":"llm/internlm/lec2/#_2","text":"\u4f7f\u7528 InternLM-Chat-7B \u6a21\u578b\u751f\u6210 300 \u5b57\u7684\u5c0f\u6545\u4e8b\uff08\u9700\u622a\u56fe\uff09\u3002 \u719f\u6089 hugging face \u4e0b\u8f7d\u529f\u80fd\uff0c\u4f7f\u7528 huggingface_hub python \u5305\uff0c\u4e0b\u8f7d InternLM-20B \u7684 config.json \u6587\u4ef6\u5230\u672c\u5730\uff08\u9700\u622a\u56fe\u4e0b\u8f7d\u8fc7\u7a0b\uff09\u3002 \u5b8c\u6210\u6d66\u8bed\u00b7\u7075\u7b14\u7684\u56fe\u6587\u7406\u89e3\u53ca\u521b\u4f5c\u90e8\u7f72\uff08\u9700\u622a\u56fe\uff09 \u5982\u4e0a\u56fe\u6240\u793a \u5b8c\u6210 Lagent \u5de5\u5177\u8c03\u7528 Demo \u521b\u4f5c\u90e8\u7f72\uff08\u9700\u622a\u56fe\uff09 \u5982\u4e0a\u56fe\u6240\u793a","title":"\u4f5c\u4e1a"},{"location":"llm/internlm/lec3/","text":"\u57fa\u4e8e InternLM \u548c LangChain \u642d\u5efa\u4f60\u7684\u77e5\u8bc6\u5e93 \u00b6 \u7ea6 162 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f Abstract \u5b66\u4e60\u81ea \u57fa\u4e8e InternLM \u548c LangChain \u642d\u5efa\u4f60\u7684\u77e5\u8bc6\u5e93 \u642d\u5efa\u6d41\u7a0b \u00b6 \u73af\u5883\u914d\u7f6e \u77e5\u8bc6\u5e93\u642d\u5efa \u6570\u636e\u6536\u96c6 \u52a0\u8f7d\u6570\u636e \u6784\u5efa\u5411\u91cf\u6570\u636e\u5e93 \u63a5\u5165 LangChain \u6784\u5efa\u68c0\u7d22\u95ee\u7b54\u94fe \u52a0\u8f7d\u5411\u91cf\u6570\u636e\u5e93 \u5b9e\u4f8b\u5316\u81ea\u5b9a\u4e49 LLM \u4e0e Prompt Template \u6784\u5efa\u68c0\u7d22\u95ee\u7b54\u94fe \u90e8\u7f72 Web Demo \u4f5c\u4e1a \u00b6 \u590d\u73b0\u8bfe\u7a0b\u77e5\u8bc6\u5e93\u52a9\u624b\u642d\u5efa\u8fc7\u7a0b (\u622a\u56fe) \u9009\u62e9\u4e00\u4e2a\u5782\u76f4\u9886\u57df\uff0c\u6536\u96c6\u8be5\u9886\u57df\u7684\u4e13\u4e1a\u8d44\u6599\u6784\u5efa\u4e13\u4e1a\u77e5\u8bc6\u5e93\uff0c\u5e76\u642d\u5efa\u4e13\u4e1a\u95ee\u7b54\u52a9\u624b\uff0c\u5e76\u5728 OpenXLab \u4e0a\u6210\u529f\u90e8\u7f72\uff08\u622a\u56fe\uff0c\u5e76\u63d0\u4f9b\u5e94\u7528\u5730\u5740\uff09","title":"\u7b2c\u4e09\u8282"},{"location":"llm/internlm/lec3/#internlm-langchain","text":"\u7ea6 162 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f Abstract \u5b66\u4e60\u81ea \u57fa\u4e8e InternLM \u548c LangChain \u642d\u5efa\u4f60\u7684\u77e5\u8bc6\u5e93","title":"\u57fa\u4e8e InternLM \u548c LangChain \u642d\u5efa\u4f60\u7684\u77e5\u8bc6\u5e93"},{"location":"llm/internlm/lec3/#_1","text":"\u73af\u5883\u914d\u7f6e \u77e5\u8bc6\u5e93\u642d\u5efa \u6570\u636e\u6536\u96c6 \u52a0\u8f7d\u6570\u636e \u6784\u5efa\u5411\u91cf\u6570\u636e\u5e93 \u63a5\u5165 LangChain \u6784\u5efa\u68c0\u7d22\u95ee\u7b54\u94fe \u52a0\u8f7d\u5411\u91cf\u6570\u636e\u5e93 \u5b9e\u4f8b\u5316\u81ea\u5b9a\u4e49 LLM \u4e0e Prompt Template \u6784\u5efa\u68c0\u7d22\u95ee\u7b54\u94fe \u90e8\u7f72 Web Demo","title":"\u642d\u5efa\u6d41\u7a0b"},{"location":"llm/internlm/lec3/#_2","text":"\u590d\u73b0\u8bfe\u7a0b\u77e5\u8bc6\u5e93\u52a9\u624b\u642d\u5efa\u8fc7\u7a0b (\u622a\u56fe) \u9009\u62e9\u4e00\u4e2a\u5782\u76f4\u9886\u57df\uff0c\u6536\u96c6\u8be5\u9886\u57df\u7684\u4e13\u4e1a\u8d44\u6599\u6784\u5efa\u4e13\u4e1a\u77e5\u8bc6\u5e93\uff0c\u5e76\u642d\u5efa\u4e13\u4e1a\u95ee\u7b54\u52a9\u624b\uff0c\u5e76\u5728 OpenXLab \u4e0a\u6210\u529f\u90e8\u7f72\uff08\u622a\u56fe\uff0c\u5e76\u63d0\u4f9b\u5e94\u7528\u5730\u5740\uff09","title":"\u4f5c\u4e1a"},{"location":"llm/internlm/lec4/","text":"XTuner \u5927\u6a21\u578b\u5355\u5361\u4f4e\u6210\u672c\u5fae\u8c03\u5b9e\u6218 \u00b6 \u7ea6 2467 \u4e2a\u5b57 534 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 15 \u5206\u949f Abstract \u5b66\u4e60\u81ea XTuner \u5927\u6a21\u578b\u5355\u5361\u4f4e\u6210\u672c\u5fae\u8c03\u5b9e\u6218 Finetune \u00b6 LLM \u7684\u4e0b\u6e38\u5e94\u7528\u4e2d\uff0c \u589e\u91cf\u9884\u8bad\u7ec3 \u548c \u6307\u4ee4\u8ddf\u968f \u662f\u7ecf\u5e38\u4f1a\u7528\u5230\u4e24\u79cd\u7684\u5fae\u8c03\u6a21\u5f0f \u589e\u91cf\u9884\u8bad\u7ec3\u5fae\u8c03 \u00b6 \u4f7f\u7528\u573a\u666f\uff1a\u8ba9\u57fa\u5ea7\u6a21\u578b\u5b66\u4e60\u5230\u4e00\u4e9b\u65b0\u77e5\u8bc6\uff0c\u5982\u67d0\u4e2a\u5782\u7c7b\u9886\u57df\u7684\u5e38\u8bc6 \u8bad\u7ec3\u6570\u636e\uff1a\u6587\u7ae0\u3001\u4e66\u7c4d\u3001\u4ee3\u7801\u7b49 \u4e3a\u4e86\u8ba9 LLM \u77e5\u9053\u4ec0\u4e48\u65f6\u5019\u5f00\u59cb\u4e00\u6bb5\u8bdd\uff0c\u4ec0\u4e48\u65f6\u5019\u7ed3\u675f\u4e00\u6bb5\u8bdd\uff0c\u5b9e\u9645\u8bad\u7ec3\u65f6\u9700\u8981\u5bf9\u6570\u636e\u6dfb\u52a0\u8d77\u59cb\u7b26\uff08BOS\uff09\u548c\u7ed3\u675f\u7b26\uff08EOS\uff09\uff0c\u5927\u591a\u6570\u7684\u6a21\u578b\u90fd\u662f\u4f7f\u7528 \u4f5c\u4e3a\u8d77\u59cb\u7b26\uff0c \u4f5c\u4e3a\u7ed3\u675f\u7b26 \u6307\u4ee4\u8ddf\u968f\u5fae\u8c03 \u00b6 \u4f7f\u7528\u573a\u666f\uff1a\u8ba9\u6a21\u578b\u5b66\u4f1a\u5bf9\u8bdd\u6a21\u7248\uff0c\u6839\u636e\u4eba\u7c7b\u6307\u4ee4\u8fdb\u884c\u5bf9\u8bdd \u8bad\u7ec3\u6570\u636e\uff1a\u9ad8\u8d28\u91cf\u7684\u5bf9\u8bdd\uff0c\u95ee\u7b54\u6570\u636e \u5728\u5b9e\u9645\u5bf9\u8bdd\u4e2d\uff0c\u901a\u5e38\u4f1a\u6709\u4e09\u79cd\u89d2\u8272 System \u7ed9\u5b9a\u4e00\u4e9b\u4e0a\u4e0b\u6587\uff0c\u6bd4\u5982\u201c\u4f60\u662f\u4e00\u4e2a\u5b89\u5168\u7684 AI \u52a9\u624b\u201d User \u5b9e\u9645\u7528\u6237\uff0c\u4f1a\u63d0\u51fa\u4e00\u4e9b\u95ee\u9898\uff0c\u6bd4\u5982 \u201c\u4e16\u754c\u7b2c\u4e00\u9ad8\u5cf0\u662f\u201d Assistant \u6839\u636e User \u7684\u8f93\u5165\uff0c\u7ed3\u5408 System \u7684\u4e0a\u4e0b\u6587\u4fe1\u606f\uff0c\u505a\u51fa\u56de\u7b54\uff0c\u6bd4\u5982 \u201c\u73e0\u7a46\u6717\u739b\u5cf0\u201d \u5728\u4f7f\u7528\u5bf9\u8bdd\u6a21\u578b\u65f6\uff0c\u901a\u5e38\u662f\u4e0d\u4f1a\u611f\u77e5\u5230\u8fd9\u4e09\u79cd\u89d2\u8272 \u5bf9\u8bdd\u6a21\u7248 \u4e0d\u540c\u4e8e\u589e\u91cf\u9884\u8bad\u7ec3\u5fae\u8c03\uff0c\u6570\u636e\u4e2d\u4f1a\u6709 Input \u548c Output \u5e0c\u671b\u6a21\u578b\u5b66\u4f1a\u7684\u662f\u7b54\u6848\uff08Output\uff09\uff0c\u800c\u4e0d\u662f\u95ee\u9898\uff08Input\uff09\uff0c\u8bad\u7ec3\u65f6\u53ea\u4f1a\u5bf9\u7b54\u6848\uff08Output\uff09\u90e8\u5206\u8ba1\u7b97 Loss \u8bad\u7ec3\u65f6\uff0c\u4f1a\u548c\u63a8\u7406\u65f6\u4fdd\u6301\u4e00\u81f4\uff0c\u5bf9\u6570\u636e\u6dfb\u52a0\u76f8\u5bf9\u5e94\u7684\u5bf9\u8bdd\u6a21\u7248 LoRA & QLoRA \u00b6 Xtuner \u00b6 \u50bb\u74dc\u5316 \uff1a\u4ee5 \u914d\u7f6e\u6587\u4ef6 \u7684\u5f62\u5f0f\u5c01\u88c5\u4e86\u5927\u90e8\u5206\u5fae\u8c03\u573a\u666f \u8f7b\u91cf\u7ea7 \uff1a\u5bf9\u4e8e 7B \u53c2\u6570\u91cf\u7684 LLM\uff0c\u5fae\u8c03\u6240\u9700\u7684\u6700\u5c0f\u663e\u5b58\u4ec5\u4e3a 8GB \u5feb\u901f\u4e0a\u624b \u00b6 \u4f7f\u7528\u6d41\u7a0b \u00b6 \u5b89\u88c5 pip install xtuner \u6311\u9009\u914d\u7f6e\u6a21\u7248 xtuner list-cfg -p internlm_20b \u4e00\u952e\u8bad\u7ec3 xtuner train internlm_20b_qlora_oasst1_512_e3 Config Description \u6a21\u578b\u540d internlm_20b (\u65e0 chat \u4ee3\u8868\u662f\u57fa\u5ea7\u6a21\u578b) \u4f7f\u7528\u7b97\u6cd5 qlora \u6570\u636e\u96c6 oasst1 \u6570\u636e\u957f\u5ea6 512 Epoch e3, epoch 3 \u81ea\u5b9a\u4e49\u8bad\u7ec3 \u00b6 \u62f7\u8d1d\u914d\u7f6e\u6a21\u7248 \u4fee\u6539\u914d\u7f6e\u6a21\u7248 \u542f\u52a8\u8bad\u7ec3 \u5e38\u7528\u8d85\u53c2 Description data_path \u6570\u636e\u8def\u5f84\u6216 HuggingFace \u4ed3\u5e93\u540d max_length \u5355\u6761\u6570\u636e\u6700\u5927 Token \u6570\uff0c\u8d85\u8fc7\u5219\u622a\u65ad pack_to_max_length \u662f\u5426\u5c06\u591a\u6761\u77ed\u6570\u636e\u62fc\u63a5\u5230 max_length\uff0c\u63d0\u9ad8 GPU \u5229\u7528\u7387 accumulative_counts \u68af\u5ea6\u7d2f\u79ef\uff0c\u6bcf\u591a\u5c11\u6b21 backward \u66f4\u65b0\u4e00\u6b21\u53c2\u6570 evaluation_inputs \u8bad\u7ec3\u8fc7\u7a0b\u4e2d\uff0c\u4f1a\u6839\u636e\u7ed9\u5b9a\u7684\u95ee\u9898\u8fdb\u884c\u63a8\u7406\uff0c\u4fbf\u4e8e\u89c2\u6d4b\u8bad\u7ec3\u72b6\u6001 evaluation_freq Evaluation \u7684\u6d4b\u8bc4\u95f4\u9694 iter \u6570 \u5bf9\u8bdd \u00b6 \u4e3a\u4e86\u4fbf\u4e8e\u5f00\u53d1\u8005\u67e5\u770b\u8bad\u7ec3\u6548\u679c\uff0cXtuner \u63d0\u4f9b\u4e86\u4e00\u952e\u5bf9\u8bdd\u501f\u53e3 Float16 \u6a21\u578b\u5bf9\u8bdd xtuner chat internlm/internlm-chat-20b 4bits \u6a21\u578b\u5bf9\u8bdd xtuner chat internlm/internlm-chat-20b --bits 4 \u52a0\u8f7d Adapter \u6a21\u578b\u5bf9\u8bdd xtuner chat internlm/internlm-chat-20b --adapter $ADAPTER_DIR \u540c\u65f6\uff0cXtuner \u8fd8\u652f\u6301\u5de5\u5177\u7c7b\u6a21\u578b\u7684\u5bf9\u8bdd XTuner \u6570\u636e\u5f15\u64ce \u00b6 \u6570\u636e\u5904\u7406\u6d41\u7a0b \u00b6 \u591a\u6570\u636e\u6837\u672c\u62fc\u63a5\uff08Pack Dataset\uff09 \u00b6 \u589e\u5f3a\u5e76\u884c\u6027\uff0c\u5145\u5206\u5229\u7528 GPU \u8d44\u6e90\uff01 8 GB \u663e\u5361\u73a9\u8f6c LLM \u00b6 XTuner \u52a0\u901f\u65b9\u5f0f \u00b6 Flash Attention \uff1a Flash Attention \u5c06 Attention \u8ba1\u7b97\u5e76\u884c\u5316\uff0c\u907f\u514d\u4e86\u8ba1\u7b97\u8fc7\u7a0b\u4e2d Attention Score NxN \u7684\u663e\u5b58\u5360\u7528\uff08\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u7684 N \u90fd\u6bd4\u8f83\u5927\uff09 DeepSpeed ZeRO ZeRO \u4f18\u5316\uff0c\u901a\u8fc7\u5c06\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u7684\u53c2\u6570\u3001\u68af\u5ea6\u548c\u4f18\u5316\u5668\u72b6\u6001\u5207\u7247\u4fdd\u5b58\uff0c\u80fd\u591f\u5728\u591a GPU \u8bad\u7ec3\u65f6\u663e\u8457\u8282\u7701\u663e\u5b58 \u9664\u4e86\u5c06\u8bad\u7ec3\u4e2d\u95f4\u72b6\u6001\u5207\u7247\u5916\uff0c DeepSpeed \u8bad\u7ec3\u65f6\u4f7f\u7528 FP16 \u7684\u6743\u91cd\uff0c\u76f8\u8f83\u4e8e Pytorch \u7684 AMP \u8bad\u7ec3\uff0c\u5728\u5355 GPU \u4e0a\u4e5f\u80fd\u5927\u5e45\u8282\u7701\u663e\u5b58 DeepSpeed \u4e0e Flash Attention \u867d\u7136\u80fd\u591f\u5927\u5e45\u964d\u4f4e\u8bad\u7ec3\u6210\u672c\uff0c\u4f46\u4f7f\u7528\u95e8\u69db\u76f8\u5bf9\u8f83\u9ad8\uff0c\u9700\u8981\u590d\u6742\u7684\u914d\u7f6e\uff0c\u751a\u81f3\u4fee\u6539\u4ee3\u7801\uff0c\u4e3a\u4e86\u8ba9\u5f00\u53d1\u8005\u4e13\u6ce8\u4e8e\u6570\u636e\uff0cXTuner \u4f1a\u81ea\u52a8 dispatch Flash Attention \uff0c\u5e76\u4e00\u952e\u542f\u52a8 DeepSpeed ZeRO xtuner train internlm_20b_qlora_oasst1_512_e3 \\ --deepspeed deepspeed_zero3 \u5b9e\u6218\u8bad\u7ec3 \u00b6 \u73af\u5883 & \u5b89\u88c5 \u00b6 \u73af\u5883\uff1aUbuntu + Anaconda + CUDA/CUDNN + 8GB Nvidia GPU \u5b89\u88c5\uff1a conda create --name xtuner0.1.9 python = 3 .10 -y conda activate xtuner0.1.9 cd ~ && mkdir xtuner019 && cd xtuner019 git clone -b v0.1.9 https://github.com/InternLM/xtuner cd xtuner pip install -e '.[all]' \u521b\u5efa\u6570\u636e\u96c6\u5de5\u4f5c\u8def\u5f84\uff1a mkdir ~/ft-oasst1 && cd ~/ft-oasst1 \u5fae\u8c03 \u00b6 \u51c6\u5907\u914d\u7f6e\u6587\u4ef6 \u00b6 cd ~/ft-oasst1 xtuner copy-cfg internlm_chat_7b_qlora_oasst1_e3 . \u6a21\u578b\u4e0b\u8f7d \u00b6 InternStudio \u5e73\u53f0\u4e0a cp -r /root/share/temp/model_repos/internlm-chat-7b ~/ft-oasst1/ - \u4e0d\u7528 xtuner \u9ed8\u8ba4\u7684\u4ece huggingface \u62c9\u53d6\u6a21\u578b\uff0c\u800c\u662f\u63d0\u524d\u4ece ModelScope \u4e0b\u8f7d\u6a21\u578b\u5230\u672c\u5730 # \u521b\u5efa\u4e00\u4e2a\u76ee\u5f55\uff0c\u653e\u6a21\u578b\u6587\u4ef6\uff0c\u9632\u6b62\u6563\u843d\u4e00\u5730 mkdir ~/ft-oasst1/internlm-chat-7b # \u88c5\u4e00\u4e0b\u62c9\u53d6\u6a21\u578b\u6587\u4ef6\u8981\u7528\u7684\u5e93 pip install modelscope # \u4ece modelscope \u4e0b\u8f7d\u4e0b\u8f7d\u6a21\u578b\u6587\u4ef6 cd ~/ft-oasst1 apt install git git-lfs -y git lfs install git lfs clone https://modelscope.cn/Shanghai_AI_Laboratory/internlm-chat-7b.git -b v1.0.3 \u6570\u636e\u96c6\u4e0b\u8f7d \u00b6 https://huggingface.co/datasets/timdettmers/openassistant-guanaco/tree/main \u4fee\u6539\u914d\u7f6e\u6587\u4ef6 \u00b6 \u4fee\u6539\u5176\u4e2d\u7684\u6a21\u578b\u548c\u6570\u636e\u96c6\u4e3a \u672c\u5730\u8def\u5f84 cd ~/ft-oasst1 vim internlm_chat_7b_qlora_oasst1_e3_copy.py # \u4fee\u6539\u6a21\u578b\u4e3a\u672c\u5730\u8def\u5f84 - pretrained_model_name_or_path = 'internlm/internlm-chat-7b' + pretrained_model_name_or_path = './internlm-chat-7b' # \u4fee\u6539\u8bad\u7ec3\u6570\u636e\u96c6\u4e3a\u672c\u5730\u8def\u5f84 - data_path = 'timdettmers/openassistant-guanaco' + data_path = './openassistant-guanaco' \u5f00\u59cb\u5fae\u8c03 \u00b6 # \u5355\u5361 ## \u7528\u521a\u624d\u6539\u597d\u7684config\u6587\u4ef6\u8bad\u7ec3 xtuner train ./internlm_chat_7b_qlora_oasst1_e3_copy.py # \u591a\u5361 NPROC_PER_NODE = ${ GPU_NUM } xtuner train ./internlm_chat_7b_qlora_oasst1_e3_copy.py # \u82e5\u8981\u5f00\u542f deepspeed \u52a0\u901f\uff0c\u589e\u52a0 --deepspeed deepspeed_zero2 \u5373\u53ef \u5fae\u8c03\u5f97\u5230\u7684 PTH \u6a21\u578b\u6587\u4ef6\u548c\u5176\u4ed6\u6742\u4e03\u6742\u516b\u7684\u6587\u4ef6\u90fd\u9ed8\u8ba4\u5728\u5f53\u524d\u7684 ./work_dirs \u4e2d\u3002 \u751f\u6210 Adapter \u6587\u4ef6 \u00b6 \u5c06\u5f97\u5230\u7684 PTH \u6a21\u578b\u8f6c\u6362\u4e3a HuggingFace \u6a21\u578b\uff0c\u5373\uff1a\u751f\u6210 Adapter \u6587\u4ef6\u5939 \u53ef\u4ee5\u7b80\u5355\u7406\u89e3\uff1aLoRA \u6a21\u578b\u6587\u4ef6 = Adapter mkdir hf export MKL_SERVICE_FORCE_INTEL = 1 xtuner convert pth_to_hf ./internlm_chat_7b_qlora_oasst1_e3_copy.py ./work_dirs/internlm_chat_7b_qlora_oasst1_e3_copy/epoch_1.pth ./hf \u90e8\u7f72\u4e0e\u6d4b\u8bd5 \u00b6 \u5c06 HuggingFace adapter \u5408\u5e76\u5230\u5927\u8bed\u8a00\u6a21\u578b \u00b6 xtuner convert merge ./internlm-chat-7b ./hf ./merged --max-shard-size 2GB # xtuner convert merge \\ # ${NAME_OR_PATH_TO_LLM} \\ # ${NAME_OR_PATH_TO_ADAPTER} \\ # ${SAVE_PATH} \\ # --max-shard-size 2GB \u4e0e\u5408\u5e76\u540e\u7684\u6a21\u578b\u5bf9\u8bdd \u00b6 # \u52a0\u8f7d Adapter \u6a21\u578b\u5bf9\u8bdd\uff08Float 16\uff09 xtuner chat ./merged --prompt-template internlm_chat # 4 bit \u91cf\u5316\u52a0\u8f7d # xtuner chat ./merged --bits 4 --prompt-template internlm_chat \u5fae\u8c03\u524d \u5fae\u8c03\u540e \u81ea\u5b9a\u4e49\u5fae\u8c03 \u00b6 \u4ee5 Medication QA \u6570\u636e\u96c6 \u4e3a\u4f8b \u6982\u8ff0 \u00b6 \u573a\u666f\u9700\u6c42 \u00b6 \u57fa\u4e8e InternLM-chat-7B \u6a21\u578b\uff0c\u7528 MedQA \u6570\u636e\u96c6\u8fdb\u884c\u5fae\u8c03\uff0c\u5c06\u5176\u5f80 \u533b\u5b66\u95ee\u7b54 \u9886\u57df\u5bf9\u9f50\u3002 \u771f\u5b9e\u6570\u636e\u9884\u89c8 \u00b6 \u95ee\u9898 \u7b54\u6848 What are ketorolac eye drops?\uff08\u4ec0\u4e48\u662f\u916e\u54af\u9178\u6ef4\u773c\u6db2\uff1f\uff09 Ophthalmic ketorolac is used to treat itchy eyes caused by allergies. It also is used to treat swelling and redness (inflammation) that can occur after cataract surgery. Ketorolac is in a class of medications called nonsteroidal anti-inflammatory drugs (NSAIDs). It works by stopping the release of substances that cause allergy symptoms and inflammation. What medicines raise blood sugar? \uff08\u4ec0\u4e48\u836f\u7269\u4f1a\u5347\u9ad8\u8840\u7cd6\uff1f\uff09 Some medicines for conditions other than diabetes can raise your blood sugar level. This is a concern when you have diabetes. Make sure every doctor you see knows about all of the medicines, vitamins, or herbal supplements you take. This means anything you take with or without a prescription. Examples include: Barbiturates. Thiazide diuretics. Corticosteroids. Birth control pills (oral contraceptives) and progesterone. Catecholamines. Decongestants that contain beta-adrenergic agents, such as pseudoephedrine. The B vitamin niacin. The risk of high blood sugar from niacin lowers after you have taken it for a few months. The antipsychotic medicine olanzapine (Zyprexa). \u6570\u636e\u51c6\u5907 \u00b6 \u4ee5 Medication QA \u6570\u636e\u96c6\u4e3a\u4f8b \u539f\u683c\u5f0f\uff1a(.xlsx) \u95ee\u9898 \u836f\u7269\u7c7b\u578b \u95ee\u9898\u7c7b\u578b \u56de\u7b54 \u4e3b\u9898 URL aaa bbb ccc ddd eee fff \u5c06\u6570\u636e\u8f6c\u4e3a XTuner \u7684\u6570\u636e\u683c\u5f0f \u00b6 \u76ee\u6807\u683c\u5f0f\uff1a(.jsonL) [{ \"conversation\" :[ { \"system\" : \"xxx\" , \"input\" : \"xxx\" , \"output\" : \"xxx\" } ] }, { \"conversation\" :[ { \"system\" : \"xxx\" , \"input\" : \"xxx\" , \"output\" : \"xxx\" } ] }] \ud83e\udde0\u901a\u8fc7 python\u811a\u672c\uff1a\u5c06 .xlsx \u4e2d\u7684 \u95ee\u9898 \u548c \u56de\u7b54 \u4e24\u5217 \u63d0\u53d6\u51fa\u6765\uff0c\u518d\u653e\u5165 .jsonL \u6587\u4ef6\u7684\u6bcf\u4e2a conversation \u7684 input \u548c output \u4e2d\u3002 \u8fd9\u4e00\u6b65\u7684 python \u811a\u672c\u53ef\u4ee5\u8bf7 ChatGPT \u6765\u5b8c\u6210\u3002 Write a python file for me. using openpyxl. input file name is MedQA2019.xlsx Step1: The input file is .xlsx. Exact the column A and column D in the sheet named \"DrugQA\" . Step2: Put each value in column A into each \"input\" of each \"conversation\". Put each value in column D into each \"output\" of each \"conversation\". Step3: The output file is .jsonL. It looks like: [{ \"conversation\":[ { \"system\": \"xxx\", \"input\": \"xxx\", \"output\": \"xxx\" } ] }, { \"conversation\":[ { \"system\": \"xxx\", \"input\": \"xxx\", \"output\": \"xxx\" } ] }] Step4: All \"system\" value changes to \"You are a professional, highly experienced doctor professor. You always provide accurate, comprehensive, and detailed answers based on the patients' questions.\" ChatGPT \u751f\u6210\u7684 python \u4ee3\u7801\u5982\u4e0b\uff1a xlsx2jsonl.py import openpyxl import json def process_excel_to_json ( input_file , output_file ): # Load the workbook wb = openpyxl . load_workbook ( input_file ) # Select the \"DrugQA\" sheet sheet = wb [ \"DrugQA\" ] # Initialize the output data structure output_data = [] # Iterate through each row in column A and D for row in sheet . iter_rows ( min_row = 2 , max_col = 4 , values_only = True ): system_value = \"You are a professional, highly experienced doctor professor. You always provide accurate, comprehensive, and detailed answers based on the patients' questions.\" # Create the conversation dictionary conversation = { \"system\" : system_value , \"input\" : row [ 0 ], \"output\" : row [ 3 ] } # Append the conversation to the output data output_data . append ({ \"conversation\" : [ conversation ]}) # Write the output data to a JSON file with open ( output_file , 'w' , encoding = 'utf-8' ) as json_file : json . dump ( output_data , json_file , indent = 4 ) print ( f \"Conversion complete. Output written to { output_file } \" ) # Replace 'MedQA2019.xlsx' and 'output.jsonl' with your actual input and output file names process_excel_to_json ( 'MedQA2019.xlsx' , 'output.jsonl' ) \u6267\u884c python \u811a\u672c\uff0c\u83b7\u5f97\u683c\u5f0f\u5316\u540e\u7684\u6570\u636e\u96c6\uff1a python xlsx2jsonl.py \u683c\u5f0f\u5316\u540e\u7684\u6570\u636e\u96c6\u957f\u8fd9\u6837\uff1a \u6b64\u65f6\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u5bf9\u6570\u636e\u8fdb\u884c\u8bad\u7ec3\u96c6\u548c\u6d4b\u8bd5\u96c6\u7684\u5206\u5272\uff0c\u540c\u6837\u53ef\u4ee5\u8ba9 ChatGPT \u5199 python \u4ee3\u7801\u3002\u5f53\u7136\u5982\u679c\u4f60\u6ca1\u6709\u4e25\u683c\u7684\u79d1\u7814\u9700\u6c42\u3001\u4e0d\u5728\u4e4e\u201c\u8bad\u7ec3\u96c6\u6cc4\u9732\u201d\u7684\u95ee\u9898\uff0c\u4e5f\u53ef\u4ee5\u4e0d\u505a\u8bad\u7ec3\u96c6\u4e0e\u6d4b\u8bd5\u96c6\u7684\u5206\u5272\u3002 \u5212\u5206\u8bad\u7ec3\u96c6\u548c\u6d4b\u8bd5\u96c6 \u00b6 my .jsonL file looks like: [{ \"conversation\":[ { \"system\": \"xxx\", \"input\": \"xxx\", \"output\": \"xxx\" } ] }, { \"conversation\":[ { \"system\": \"xxx\", \"input\": \"xxx\", \"output\": \"xxx\" } ] }] Step1, read the .jsonL file. Step2, count the amount of the \"conversation\" elements. Step3, randomly split all \"conversation\" elements by 7:3. Targeted structure is same as the input. Step4, save the 7/10 part as train.jsonl. save the 3/10 part as test.jsonl \u751f\u6210\u7684 python \u4ee3\u7801\u5982\u4e0b\uff1a split2train_and_test.py import json import random def split_conversations ( input_file , train_output_file , test_output_file ): # Read the input JSONL file with open ( input_file , 'r' , encoding = 'utf-8' ) as jsonl_file : data = json . load ( jsonl_file ) # Count the number of conversation elements num_conversations = len ( data ) # Shuffle the data randomly random . shuffle ( data ) random . shuffle ( data ) random . shuffle ( data ) # Calculate the split points for train and test split_point = int ( num_conversations * 0.7 ) # Split the data into train and test train_data = data [: split_point ] test_data = data [ split_point :] # Write the train data to a new JSONL file with open ( train_output_file , 'w' , encoding = 'utf-8' ) as train_jsonl_file : json . dump ( train_data , train_jsonl_file , indent = 4 ) # Write the test data to a new JSONL file with open ( test_output_file , 'w' , encoding = 'utf-8' ) as test_jsonl_file : json . dump ( test_data , test_jsonl_file , indent = 4 ) print ( f \"Split complete. Train data written to { train_output_file } , Test data written to { test_output_file } \" ) # Replace 'input.jsonl', 'train.jsonl', and 'test.jsonl' with your actual file names split_conversations ( 'MedQA2019-structured.jsonl' , 'MedQA2019-structured-train.jsonl' , 'MedQA2019-structured-test.jsonl' ) \u5f00\u59cb\u81ea\u5b9a\u4e49\u5fae\u8c03 \u00b6 \u6b64\u65f6\uff0c\u6211\u4eec\u91cd\u65b0\u5efa\u4e00\u4e2a\u6587\u4ef6\u5939\u6765\u73a9\u201c\u5fae\u8c03\u81ea\u5b9a\u4e49\u6570\u636e\u96c6\u201d mkdir ~/ft-medqa && cd ~/ft-medqa \u628a\u524d\u9762\u4e0b\u8f7d\u597d\u7684internlm-chat-7b\u6a21\u578b\u6587\u4ef6\u5939\u62f7\u8d1d\u8fc7\u6765\u3002 cp -r ~/ft-oasst1/internlm-chat-7b . \u522b\u5fd8\u4e86\u628a\u81ea\u5b9a\u4e49\u6570\u636e\u96c6\uff0c\u5373\u51e0\u4e2a .jsonL \uff0c\u4e5f\u4f20\u5230\u670d\u52a1\u5668\u4e0a\u3002 git clone https://github.com/InternLM/tutorial cp ~/tutorial/xtuner/MedQA2019-structured-train.jsonl . \u51c6\u5907\u914d\u7f6e\u6587\u4ef6 \u00b6 # \u590d\u5236\u914d\u7f6e\u6587\u4ef6\u5230\u5f53\u524d\u76ee\u5f55 xtuner copy-cfg internlm_chat_7b_qlora_oasst1_e3 . # \u6539\u4e2a\u6587\u4ef6\u540d mv internlm_chat_7b_qlora_oasst1_e3_copy.py internlm_chat_7b_qlora_medqa2019_e3.py # \u4fee\u6539\u914d\u7f6e\u6587\u4ef6\u5185\u5bb9 vim internlm_chat_7b_qlora_medqa2019_e3.py \u51cf\u53f7\u4ee3\u8868\u8981\u5220\u9664\u7684\u884c\uff0c\u52a0\u53f7\u4ee3\u8868\u8981\u589e\u52a0\u7684\u884c\u3002 # \u4fee\u6539import\u90e8\u5206 - from xtuner.dataset.map_fns import oasst1_map_fn, template_map_fn_factory + from xtuner.dataset.map_fns import template_map_fn_factory # \u4fee\u6539\u6a21\u578b\u4e3a\u672c\u5730\u8def\u5f84 - pretrained_model_name_or_path = 'internlm/internlm-chat-7b' + pretrained_model_name_or_path = './internlm-chat-7b' # \u4fee\u6539\u8bad\u7ec3\u6570\u636e\u4e3a MedQA2019-structured-train.jsonl \u8def\u5f84 - data_path = 'timdettmers/openassistant-guanaco' + data_path = 'MedQA2019-structured-train.jsonl' # \u4fee\u6539 train_dataset \u5bf9\u8c61 train_dataset = dict( type=process_hf_dataset, - dataset=dict(type=load_dataset, path=data_path), + dataset=dict(type=load_dataset, path='json', data_files=dict(train=data_path)), tokenizer=tokenizer, max_length=max_length, - dataset_map_fn=alpaca_map_fn, + dataset_map_fn=None, template_map_fn=dict( type=template_map_fn_factory, template=prompt_template), remove_unused_columns=True, shuffle_before_pack=True, pack_to_max_length=pack_to_max_length) XTuner\uff01\u542f\u52a8\uff01 \u00b6 xtuner train internlm_chat_7b_qlora_medqa2019_e3.py --deepspeed deepspeed_zero2 \u751f\u6210 Adapter \u6587\u4ef6 \u00b6 \u90e8\u7f72\u4e0e\u6d4b\u8bd5 \u00b6 \u7528 MS-Agent \u6570\u636e\u96c6\u8d4b\u4e88 LLM \u4ee5 Agent \u80fd\u529b \u00b6 \u6982\u8ff0 \u00b6 MSAgent \u6570\u636e\u96c6\u6bcf\u6761\u6837\u672c\u5305\u542b\u4e00\u4e2a\u5bf9\u8bdd\u5217\u8868\uff08conversations\uff09\uff0c\u5176\u91cc\u9762\u5305\u542b\u4e86 system\u3001user\u3001assistant \u4e09\u79cd\u5b57\u6bb5\u3002\u5176\u4e2d\uff1a system: \u8868\u793a\u7ed9\u6a21\u578b\u524d\u7f6e\u7684\u4eba\u8bbe\u8f93\u5165\uff0c\u5176\u4e2d\u6709\u544a\u8bc9\u6a21\u578b\u5982\u4f55\u8c03\u7528\u63d2\u4ef6\u4ee5\u53ca\u751f\u6210\u8bf7\u6c42 user: \u8868\u793a\u7528\u6237\u7684\u8f93\u5165 prompt\uff0c\u5206\u4e3a\u4e24\u79cd\uff0c\u901a\u7528\u751f\u6210\u7684prompt\u548c\u8c03\u7528\u63d2\u4ef6\u9700\u6c42\u7684 prompt assistant: \u4e3a\u6a21\u578b\u7684\u56de\u590d\u3002\u5176\u4e2d\u4f1a\u5305\u62ec\u63d2\u4ef6\u8c03\u7528\u4ee3\u7801\u548c\u6267\u884c\u4ee3\u7801\uff0c\u8c03\u7528\u4ee3\u7801\u662f\u8981 LLM \u751f\u6210\u7684\uff0c\u800c\u6267\u884c\u4ee3\u7801\u662f\u8c03\u7528\u670d\u52a1\u6765\u751f\u6210\u7ed3\u679c\u7684 \u4e00\u6761\u8c03\u7528\u7f51\u9875\u641c\u7d22\u63d2\u4ef6\u67e5\u8be2\u201c\u4e0a\u6d77\u660e\u5929\u5929\u6c14\u201d\u7684\u6570\u636e\u6837\u672c\u793a\u4f8b\u5982\u4e0b\u56fe\u6240\u793a\uff1a \u5fae\u8c03\u6b65\u9aa4 \u00b6 \u51c6\u5907\u5de5\u4f5c \u00b6 xtuner \u662f\u4ece\u56fd\u5185\u7684 ModelScope \u5e73\u53f0\u4e0b\u8f7d MS-Agent \u6570\u636e\u96c6\uff0c\u56e0\u6b64\u4e0d\u7528\u63d0\u524d\u624b\u52a8\u4e0b\u8f7d\u6570\u636e\u96c6\u6587\u4ef6\u3002 # \u51c6\u5907\u5de5\u4f5c mkdir ~/ft-msagent && cd ~/ft-msagent cp -r ~/ft-oasst1/internlm-chat-7b . # \u67e5\u770b\u914d\u7f6e\u6587\u4ef6 xtuner list-cfg | grep msagent # \u590d\u5236\u914d\u7f6e\u6587\u4ef6\u5230\u5f53\u524d\u76ee\u5f55 xtuner copy-cfg internlm_7b_qlora_msagent_react_e3_gpu8 . # \u4fee\u6539\u914d\u7f6e\u6587\u4ef6\u4e2d\u7684\u6a21\u578b\u4e3a\u672c\u5730\u8def\u5f84 vim ./internlm_7b_qlora_msagent_react_e3_gpu8_copy.py - pretrained_model_name_or_path = 'internlm/internlm-chat-7b' + pretrained_model_name_or_path = './internlm-chat-7b' \u5f00\u59cb\u5fae\u8c03 \u00b6 xtuner train ./internlm_7b_qlora_msagent_react_e3_gpu8_copy.py --deepspeed deepspeed_zero2 \u76f4\u63a5\u4f7f\u7528 \u00b6 \u7531\u4e8e msagent \u7684\u8bad\u7ec3\u975e\u5e38\u8d39\u65f6\uff0c\u5927\u5bb6\u5982\u679c\u60f3\u5c3d\u5feb\u628a\u8fd9\u4e2a\u6559\u7a0b\u8ddf\u5b8c\uff0c\u53ef\u4ee5\u76f4\u63a5\u4ece modelScope \u62c9\u53d6\u54b1\u4eec\u5df2\u7ecf\u5fae\u8c03\u597d\u4e86\u7684 Adapter\u3002\u5982\u4e0b\u6f14\u793a\u3002 \u4e0b\u8f7d Adapter \u00b6 cd ~/ft-msagent apt install git git-lfs git lfs install git lfs clone https://www.modelscope.cn/xtuner/internlm-7b-qlora-msagent-react.git \u6709\u4e86\u8fd9\u4e2a\u5728 msagent \u4e0a\u8bad\u7ec3\u5f97\u5230\u7684Adapter\uff0c\u6a21\u578b\u73b0\u5728\u5df2\u7ecf\u6709 agent \u80fd\u529b\u4e86\uff01\u5c31\u53ef\u4ee5\u52a0 --lagent \u4ee5\u8c03\u7528\u6765\u81ea lagent \u7684\u4ee3\u7406\u529f\u80fd\u4e86\uff01 \u6dfb\u52a0 serper \u73af\u5883\u53d8\u91cf \u00b6 \u5f00\u59cb chat \u4e4b\u524d\uff0c\u8fd8\u8981\u52a0\u4e2a serper \u7684\u73af\u5883\u53d8\u91cf\uff1a \u53bb serper.dev \u514d\u8d39\u6ce8\u518c\u4e00\u4e2a\u8d26\u53f7\uff0c\u751f\u6210\u81ea\u5df1\u7684 api key\u3002\u8fd9\u4e2a\u4e1c\u897f\u662f\u7528\u6765\u7ed9 lagent \u53bb\u83b7\u53d6 google \u641c\u7d22\u7684\u7ed3\u679c\u7684\u3002\u7b49\u4e8e\u662f serper.dev \u5e2e\u4f60\u53bb\u8bbf\u95ee google\uff0c\u800c\u4e0d\u662f\u4ece\u4f60\u81ea\u5df1\u672c\u5730\u53bb\u8bbf\u95ee google \u4e86\u3002 \u6dfb\u52a0 serper api key \u5230\u73af\u5883\u53d8\u91cf\uff1a export SERPER_API_KEY = abcdefg xtuner + agent\uff0c\u542f\u52a8\uff01 \u00b6 xtuner chat ./internlm-chat-7b --adapter internlm-7b-qlora-msagent-react --lagent --prompt-template internlm_chat \u4f5c\u4e1a\uff1aXTuner InternLM-Chat \u4e2a\u4eba\u5c0f\u52a9\u624b\u8ba4\u77e5\u5fae\u8c03\u5b9e\u8df5 \u00b6 \u73af\u5883\u51c6\u5907 \u00b6 # InternStudio \u5e73\u53f0\u4e2d\uff0c\u4ece\u672c\u5730 clone \u4e00\u4e2a\u5df2\u6709 pytorch 2.0.1 \u7684\u73af\u5883\uff08\u540e\u7eed\u5747\u5728\u8be5\u73af\u5883\u6267\u884c\uff0c\u82e5\u4e3a\u5176\u4ed6\u73af\u5883\u53ef\u4f5c\u4e3a\u53c2\u8003\uff09 # \u8fdb\u5165\u73af\u5883\u540e\u9996\u5148 bash # \u8fdb\u5165\u73af\u5883\u540e\u9996\u5148 bash # \u8fdb\u5165\u73af\u5883\u540e\u9996\u5148 bash bash conda create --name personal_assistant --clone = /root/share/conda_envs/internlm-base # \u5982\u679c\u5728\u5176\u4ed6\u5e73\u53f0\uff1a # conda create --name personal_assistant python=3.10 -y # \u6fc0\u6d3b\u73af\u5883 conda activate personal_assistant # \u8fdb\u5165\u5bb6\u76ee\u5f55 \uff08~\u7684\u610f\u601d\u662f \u201c\u5f53\u524d\u7528\u6237\u7684home\u8def\u5f84\u201d\uff09 cd ~ # \u521b\u5efa\u7248\u672c\u6587\u4ef6\u5939\u5e76\u8fdb\u5165\uff0c\u4ee5\u8ddf\u968f\u672c\u6559\u7a0b # personal_assistant\u7528\u4e8e\u5b58\u653e\u672c\u6559\u7a0b\u6240\u4f7f\u7528\u7684\u4e1c\u897f mkdir /root/personal_assistant && cd /root/personal_assistant mkdir /root/personal_assistant/xtuner019 && cd /root/personal_assistant/xtuner019 # \u62c9\u53d6 0.1.9 \u7684\u7248\u672c\u6e90\u7801 git clone -b v0.1.9 https://github.com/InternLM/xtuner # \u65e0\u6cd5\u8bbf\u95eegithub\u7684\u7528\u6237\u8bf7\u4ece gitee \u62c9\u53d6: # git clone -b v0.1.9 https://gitee.com/Internlm/xtuner # \u8fdb\u5165\u6e90\u7801\u76ee\u5f55 cd xtuner # \u4ece\u6e90\u7801\u5b89\u88c5 XTuner pip install -e '.[all]' \u6570\u636e\u51c6\u5907 \u00b6 mkdir -p /root/personal_assistant/data && cd /root/personal_assistant/data \u5728 data \u76ee\u5f55\u4e0b\u521b\u5efa\u4e00\u4e2ajson\u6587\u4ef6 personal_assistant.json \u4f5c\u4e3a\u672c\u6b21\u5fae\u8c03\u6240\u4f7f\u7528\u7684\u6570\u636e\u96c6\u3002 \u5176\u4e2d conversation \u8868\u793a\u4e00\u6b21\u5bf9\u8bdd\u7684\u5185\u5bb9\uff0c input \u4e3a\u8f93\u5165\uff0c\u5373\u7528\u6237\u4f1a\u95ee\u7684\u95ee\u9898\uff0c output \u4e3a\u8f93\u51fa\uff0c\u5373\u60f3\u8981\u6a21\u578b\u56de\u7b54\u7684\u7b54\u6848\u3002 \u4ee5\u4e0b\u662f\u4e00\u4e2apython\u811a\u672c\uff0c\u7528\u4e8e\u751f\u6210\u6570\u636e\u96c6\u3002 generate_data.py import json # \u8f93\u5165\u4f60\u7684\u540d\u5b57 name = '\u72d9\u51fb\u7f8e\u4f50' # \u91cd\u590d\u6b21\u6570 n = 10000 data = [ { \"conversation\" : [ { \"input\" : \"\u8bf7\u505a\u4e00\u4e0b\u81ea\u6211\u4ecb\u7ecd\" , \"output\" : \"\u6211\u662f {} \u7684\u5c0f\u52a9\u624b\uff0c\u5185\u5728\u662f\u4e0a\u6d77AI\u5b9e\u9a8c\u5ba4\u4e66\u751f\u00b7\u6d66\u8bed\u76847B\u5927\u6a21\u578b\u54e6\" . format ( name ) } ] } ] for i in range ( n ): data . append ( data [ 0 ]) with open ( 'personal_assistant.json' , 'w' , encoding = 'utf-8' ) as f : json . dump ( data , f , ensure_ascii = False , indent = 4 ) \u914d\u7f6e\u51c6\u5907 \u00b6 mkdir -p /root/personal_assistant/model/Shanghai_AI_Laboratory cp -r /root/share/temp/model_repos/internlm-chat-7b /root/personal_assistant/model/Shanghai_AI_Laboratory # \u521b\u5efa\u7528\u4e8e\u5b58\u653e\u914d\u7f6e\u7684\u6587\u4ef6\u5939config\u5e76\u8fdb\u5165 mkdir /root/personal_assistant/config && cd /root/personal_assistant/config # \u62f7\u8d1d\u4e00\u4e2a\u914d\u7f6e\u6587\u4ef6\u5230\u5f53\u524d\u76ee\u5f55 xtuner copy-cfg internlm_chat_7b_qlora_oasst1_e3 . \u4fee\u6539\u62f7\u8d1d\u540e\u7684\u6587\u4ef6\uff1a internlm_chat_7b_qlora_oasst1_e3_copy.py # Copyright (c) OpenMMLab. All rights reserved. import torch from bitsandbytes.optim import PagedAdamW32bit from datasets import load_dataset from mmengine.dataset import DefaultSampler from mmengine.hooks import ( CheckpointHook , DistSamplerSeedHook , IterTimerHook , LoggerHook , ParamSchedulerHook ) from mmengine.optim import AmpOptimWrapper , CosineAnnealingLR from peft import LoraConfig from transformers import ( AutoModelForCausalLM , AutoTokenizer , BitsAndBytesConfig ) from xtuner.dataset import process_hf_dataset from xtuner.dataset.collate_fns import default_collate_fn from xtuner.dataset.map_fns import oasst1_map_fn , template_map_fn_factory from xtuner.engine import DatasetInfoHook , EvaluateChatHook from xtuner.model import SupervisedFinetune from xtuner.utils import PROMPT_TEMPLATE ####################################################################### # PART 1 Settings # ####################################################################### # Model pretrained_model_name_or_path = '/root/personal_assistant/model/Shanghai_AI_Laboratory/internlm-chat-7b' # Data data_path = '/root/personal_assistant/data/personal_assistant.json' prompt_template = PROMPT_TEMPLATE . internlm_chat max_length = 512 pack_to_max_length = True # Scheduler & Optimizer batch_size = 2 # per_device accumulative_counts = 16 dataloader_num_workers = 0 max_epochs = 3 optim_type = PagedAdamW32bit lr = 2e-4 betas = ( 0.9 , 0.999 ) weight_decay = 0 max_norm = 1 # grad clip # Evaluate the generation performance during the training evaluation_freq = 90 SYSTEM = '' evaluation_inputs = [ '\u8bf7\u4ecb\u7ecd\u4e00\u4e0b\u4f60\u81ea\u5df1' , '\u8bf7\u505a\u4e00\u4e0b\u81ea\u6211\u4ecb\u7ecd' ] ####################################################################### # PART 2 Model & Tokenizer # ####################################################################### tokenizer = dict ( type = AutoTokenizer . from_pretrained , pretrained_model_name_or_path = pretrained_model_name_or_path , trust_remote_code = True , padding_side = 'right' ) model = dict ( type = SupervisedFinetune , llm = dict ( type = AutoModelForCausalLM . from_pretrained , pretrained_model_name_or_path = pretrained_model_name_or_path , trust_remote_code = True , torch_dtype = torch . float16 , quantization_config = dict ( type = BitsAndBytesConfig , load_in_4bit = True , load_in_8bit = False , llm_int8_threshold = 6.0 , llm_int8_has_fp16_weight = False , bnb_4bit_compute_dtype = torch . float16 , bnb_4bit_use_double_quant = True , bnb_4bit_quant_type = 'nf4' )), lora = dict ( type = LoraConfig , r = 64 , lora_alpha = 16 , lora_dropout = 0.1 , bias = 'none' , task_type = 'CAUSAL_LM' )) ####################################################################### # PART 3 Dataset & Dataloader # ####################################################################### train_dataset = dict ( type = process_hf_dataset , dataset = dict ( type = load_dataset , path = 'json' , data_files = dict ( train = data_path )), tokenizer = tokenizer , max_length = max_length , dataset_map_fn = None , template_map_fn = dict ( type = template_map_fn_factory , template = prompt_template ), remove_unused_columns = True , shuffle_before_pack = True , pack_to_max_length = pack_to_max_length ) train_dataloader = dict ( batch_size = batch_size , num_workers = dataloader_num_workers , dataset = train_dataset , sampler = dict ( type = DefaultSampler , shuffle = True ), collate_fn = dict ( type = default_collate_fn )) ####################################################################### # PART 4 Scheduler & Optimizer # ####################################################################### # optimizer optim_wrapper = dict ( type = AmpOptimWrapper , optimizer = dict ( type = optim_type , lr = lr , betas = betas , weight_decay = weight_decay ), clip_grad = dict ( max_norm = max_norm , error_if_nonfinite = False ), accumulative_counts = accumulative_counts , loss_scale = 'dynamic' , dtype = 'float16' ) # learning policy # More information: https://github.com/open-mmlab/mmengine/blob/main/docs/en/tutorials/param_scheduler.md # noqa: E501 param_scheduler = dict ( type = CosineAnnealingLR , eta_min = 0.0 , by_epoch = True , T_max = max_epochs , convert_to_iter_based = True ) # train, val, test setting train_cfg = dict ( by_epoch = True , max_epochs = max_epochs , val_interval = 1 ) ####################################################################### # PART 5 Runtime # ####################################################################### # Log the dialogue periodically during the training process, optional custom_hooks = [ dict ( type = DatasetInfoHook , tokenizer = tokenizer ), dict ( type = EvaluateChatHook , tokenizer = tokenizer , every_n_iters = evaluation_freq , evaluation_inputs = evaluation_inputs , system = SYSTEM , prompt_template = prompt_template ) ] # configure default hooks default_hooks = dict ( # record the time of every iteration. timer = dict ( type = IterTimerHook ), # print log every 100 iterations. logger = dict ( type = LoggerHook , interval = 10 ), # enable the parameter scheduler. param_scheduler = dict ( type = ParamSchedulerHook ), # save checkpoint per epoch. checkpoint = dict ( type = CheckpointHook , interval = 1 ), # set sampler seed in distributed evrionment. sampler_seed = dict ( type = DistSamplerSeedHook ), ) # configure environment env_cfg = dict ( # whether to enable cudnn benchmark cudnn_benchmark = False , # set multi process parameters mp_cfg = dict ( mp_start_method = 'fork' , opencv_num_threads = 0 ), # set distributed parameters dist_cfg = dict ( backend = 'nccl' ), ) # set visualizer visualizer = None # set log level log_level = 'INFO' # load from which checkpoint load_from = None # whether to resume training from the loaded checkpoint resume = False # Defaults to use random seed and disable `deterministic` randomness = dict ( seed = None , deterministic = False ) \u5fae\u8c03 \u00b6 xtuner train /root/personal_assistant/config/internlm_chat_7b_qlora_oasst1_e3_copy.py \u53c2\u6570\u8f6c\u6362/\u5408\u5e76 \u00b6 \u8bad\u7ec3\u540e\u7684pth\u683c\u5f0f\u53c2\u6570\u8f6cHugging Face\u683c\u5f0f # \u521b\u5efa\u7528\u4e8e\u5b58\u653eHugging Face\u683c\u5f0f\u53c2\u6570\u7684hf\u6587\u4ef6\u5939 mkdir /root/personal_assistant/config/work_dirs/hf export MKL_SERVICE_FORCE_INTEL = 1 # \u914d\u7f6e\u6587\u4ef6\u5b58\u653e\u7684\u4f4d\u7f6e export CONFIG_NAME_OR_PATH = /root/personal_assistant/config/internlm_chat_7b_qlora_oasst1_e3_copy.py # \u6a21\u578b\u8bad\u7ec3\u540e\u5f97\u5230\u7684pth\u683c\u5f0f\u53c2\u6570\u5b58\u653e\u7684\u4f4d\u7f6e export PTH = /root/personal_assistant/config/work_dirs/internlm_chat_7b_qlora_oasst1_e3_copy/epoch_3.pth # pth\u6587\u4ef6\u8f6c\u6362\u4e3aHugging Face\u683c\u5f0f\u540e\u53c2\u6570\u5b58\u653e\u7684\u4f4d\u7f6e export SAVE_PATH = /root/personal_assistant/config/work_dirs/hf # \u6267\u884c\u53c2\u6570\u8f6c\u6362 xtuner convert pth_to_hf $CONFIG_NAME_OR_PATH $PTH $SAVE_PATH Merge\u6a21\u578b\u53c2\u6570 export MKL_SERVICE_FORCE_INTEL = 1 export MKL_THREADING_LAYER = 'GNU' # \u539f\u59cb\u6a21\u578b\u53c2\u6570\u5b58\u653e\u7684\u4f4d\u7f6e export NAME_OR_PATH_TO_LLM = /root/personal_assistant/model/Shanghai_AI_Laboratory/internlm-chat-7b # Hugging Face\u683c\u5f0f\u53c2\u6570\u5b58\u653e\u7684\u4f4d\u7f6e export NAME_OR_PATH_TO_ADAPTER = /root/personal_assistant/config/work_dirs/hf # \u6700\u7ec8Merge\u540e\u7684\u53c2\u6570\u5b58\u653e\u7684\u4f4d\u7f6e mkdir /root/personal_assistant/config/work_dirs/hf_merge export SAVE_PATH = /root/personal_assistant/config/work_dirs/hf_merge # \u6267\u884c\u53c2\u6570Merge xtuner convert merge \\ $NAME_OR_PATH_TO_LLM \\ $NAME_OR_PATH_TO_ADAPTER \\ $SAVE_PATH \\ --max-shard-size 2GB Demo \u00b6 \u5b89\u88c5\u4f9d\u8d56 pip install streamlit == 1 .24.0 \u4e0b\u8f7dInternLM\u9879\u76ee\u4ee3\u7801 # \u521b\u5efacode\u6587\u4ef6\u5939\u7528\u4e8e\u5b58\u653eInternLM\u9879\u76ee\u4ee3\u7801 mkdir /root/personal_assistant/code && cd /root/personal_assistant/code git clone https://github.com/InternLM/InternLM.git \u5c06 /root/code/InternLM/web_demo.py \u4e2d 29 \u884c \u548c 33 \u884c\u7684\u6a21\u578b\u8def\u5f84\u66f4\u6362\u4e3aMerge\u540e\u5b58\u653e\u53c2\u6570\u7684\u8def\u5f84 /root/personal_assistant/config/work_dirs/hf_merge \u8fd0\u884c /root/personal_assistant/code/InternLM \u76ee\u5f55\u4e0b\u7684 web_demo.py \u6587\u4ef6\uff0c\u5c06\u7aef\u53e3\u6620\u5c04\u5230\u672c\u5730 streamlit run /root/personal_assistant/code/InternLM/web_demo.py --server.address 127 .0.0.1 --server.port 6006 \u6548\u679c \u00b6 \u5fae\u8c03\u524d \uff08\u56de\u7b54\u6bd4\u8f83\u5b98\u65b9\uff09 \u5fae\u8c03\u540e \uff08\u5bf9\u81ea\u5df1\u7684\u8eab\u4efd\u6709\u4e86\u6e05\u6670\u7684\u8ba4\u77e5\uff09 \u8fdb\u9636\u4f5c\u4e1a \u00b6 \u5c06\u8bad\u7ec3\u597d\u7684Adapter\u6a21\u578b\u6743\u91cd\u4e0a\u4f20\u5230 OpenXLab\u3001Hugging Face \u6216\u8005 MoelScope \u4efb\u4e00\u4e00\u5e73\u53f0\u3002 \u901a\u8fc7 scp \u5c06 hf \u6587\u4ef6\u5939\u4e0b\u8f7d\u5230\u672c\u5730\uff0c\u8fdb\u5165 HuggingFace \u65b0\u5efa model\uff0c\u4e0a\u4f20\u6a21\u578b\u6587\u4ef6\u3002Adapter \u6743\u91cd\u5730\u5740\uff1a https://huggingface.co/jujimeizuo/assistant-jujimeizuo/tree/main \u5c06\u8bad\u7ec3\u597d\u540e\u7684\u6a21\u578b\u5e94\u7528\u90e8\u7f72\u5230 OpenXLab \u5e73\u53f0\uff0c\u53c2\u8003\u90e8\u7f72\u6587\u6863\u8bf7\u8bbf\u95ee\uff1a https://aicarrier.feishu.cn/docx/MQH6dygcKolG37x0ekcc4oZhnCe \u901a\u8fc7 openxlab \u5e93\u4e0a\u4f20\u6a21\u578b\u6587\u4ef6 \u65b0\u5efa github \u7684 repo( assistant_jujimeizuo )\uff0c\u4ece OpenXLab \u4e0a\u62c9\u53d6\u4e0a\u4f20\u7684\u6a21\u578b\uff0c\u6784\u5efa streamlit \u7684 app\uff0c\u540c\u6b65\u5230 OpenXLab \u4e0a\u3002 \u5e94\u7528\u670d\u52a1\u5730\u5740\uff1a https://openxlab.org.cn/apps/detail/jujimeizuo/assistant_jujimeizuo","title":"\u7b2c\u56db\u8282"},{"location":"llm/internlm/lec4/#xtuner","text":"\u7ea6 2467 \u4e2a\u5b57 534 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 15 \u5206\u949f Abstract \u5b66\u4e60\u81ea XTuner \u5927\u6a21\u578b\u5355\u5361\u4f4e\u6210\u672c\u5fae\u8c03\u5b9e\u6218","title":"XTuner \u5927\u6a21\u578b\u5355\u5361\u4f4e\u6210\u672c\u5fae\u8c03\u5b9e\u6218"},{"location":"llm/internlm/lec4/#finetune","text":"LLM \u7684\u4e0b\u6e38\u5e94\u7528\u4e2d\uff0c \u589e\u91cf\u9884\u8bad\u7ec3 \u548c \u6307\u4ee4\u8ddf\u968f \u662f\u7ecf\u5e38\u4f1a\u7528\u5230\u4e24\u79cd\u7684\u5fae\u8c03\u6a21\u5f0f","title":"Finetune"},{"location":"llm/internlm/lec4/#_1","text":"\u4f7f\u7528\u573a\u666f\uff1a\u8ba9\u57fa\u5ea7\u6a21\u578b\u5b66\u4e60\u5230\u4e00\u4e9b\u65b0\u77e5\u8bc6\uff0c\u5982\u67d0\u4e2a\u5782\u7c7b\u9886\u57df\u7684\u5e38\u8bc6 \u8bad\u7ec3\u6570\u636e\uff1a\u6587\u7ae0\u3001\u4e66\u7c4d\u3001\u4ee3\u7801\u7b49 \u4e3a\u4e86\u8ba9 LLM \u77e5\u9053\u4ec0\u4e48\u65f6\u5019\u5f00\u59cb\u4e00\u6bb5\u8bdd\uff0c\u4ec0\u4e48\u65f6\u5019\u7ed3\u675f\u4e00\u6bb5\u8bdd\uff0c\u5b9e\u9645\u8bad\u7ec3\u65f6\u9700\u8981\u5bf9\u6570\u636e\u6dfb\u52a0\u8d77\u59cb\u7b26\uff08BOS\uff09\u548c\u7ed3\u675f\u7b26\uff08EOS\uff09\uff0c\u5927\u591a\u6570\u7684\u6a21\u578b\u90fd\u662f\u4f7f\u7528 \u4f5c\u4e3a\u8d77\u59cb\u7b26\uff0c \u4f5c\u4e3a\u7ed3\u675f\u7b26","title":"\u589e\u91cf\u9884\u8bad\u7ec3\u5fae\u8c03"},{"location":"llm/internlm/lec4/#_2","text":"\u4f7f\u7528\u573a\u666f\uff1a\u8ba9\u6a21\u578b\u5b66\u4f1a\u5bf9\u8bdd\u6a21\u7248\uff0c\u6839\u636e\u4eba\u7c7b\u6307\u4ee4\u8fdb\u884c\u5bf9\u8bdd \u8bad\u7ec3\u6570\u636e\uff1a\u9ad8\u8d28\u91cf\u7684\u5bf9\u8bdd\uff0c\u95ee\u7b54\u6570\u636e \u5728\u5b9e\u9645\u5bf9\u8bdd\u4e2d\uff0c\u901a\u5e38\u4f1a\u6709\u4e09\u79cd\u89d2\u8272 System \u7ed9\u5b9a\u4e00\u4e9b\u4e0a\u4e0b\u6587\uff0c\u6bd4\u5982\u201c\u4f60\u662f\u4e00\u4e2a\u5b89\u5168\u7684 AI \u52a9\u624b\u201d User \u5b9e\u9645\u7528\u6237\uff0c\u4f1a\u63d0\u51fa\u4e00\u4e9b\u95ee\u9898\uff0c\u6bd4\u5982 \u201c\u4e16\u754c\u7b2c\u4e00\u9ad8\u5cf0\u662f\u201d Assistant \u6839\u636e User \u7684\u8f93\u5165\uff0c\u7ed3\u5408 System \u7684\u4e0a\u4e0b\u6587\u4fe1\u606f\uff0c\u505a\u51fa\u56de\u7b54\uff0c\u6bd4\u5982 \u201c\u73e0\u7a46\u6717\u739b\u5cf0\u201d \u5728\u4f7f\u7528\u5bf9\u8bdd\u6a21\u578b\u65f6\uff0c\u901a\u5e38\u662f\u4e0d\u4f1a\u611f\u77e5\u5230\u8fd9\u4e09\u79cd\u89d2\u8272 \u5bf9\u8bdd\u6a21\u7248 \u4e0d\u540c\u4e8e\u589e\u91cf\u9884\u8bad\u7ec3\u5fae\u8c03\uff0c\u6570\u636e\u4e2d\u4f1a\u6709 Input \u548c Output \u5e0c\u671b\u6a21\u578b\u5b66\u4f1a\u7684\u662f\u7b54\u6848\uff08Output\uff09\uff0c\u800c\u4e0d\u662f\u95ee\u9898\uff08Input\uff09\uff0c\u8bad\u7ec3\u65f6\u53ea\u4f1a\u5bf9\u7b54\u6848\uff08Output\uff09\u90e8\u5206\u8ba1\u7b97 Loss \u8bad\u7ec3\u65f6\uff0c\u4f1a\u548c\u63a8\u7406\u65f6\u4fdd\u6301\u4e00\u81f4\uff0c\u5bf9\u6570\u636e\u6dfb\u52a0\u76f8\u5bf9\u5e94\u7684\u5bf9\u8bdd\u6a21\u7248","title":"\u6307\u4ee4\u8ddf\u968f\u5fae\u8c03"},{"location":"llm/internlm/lec4/#lora-qlora","text":"","title":"LoRA & QLoRA"},{"location":"llm/internlm/lec4/#xtuner_1","text":"\u50bb\u74dc\u5316 \uff1a\u4ee5 \u914d\u7f6e\u6587\u4ef6 \u7684\u5f62\u5f0f\u5c01\u88c5\u4e86\u5927\u90e8\u5206\u5fae\u8c03\u573a\u666f \u8f7b\u91cf\u7ea7 \uff1a\u5bf9\u4e8e 7B \u53c2\u6570\u91cf\u7684 LLM\uff0c\u5fae\u8c03\u6240\u9700\u7684\u6700\u5c0f\u663e\u5b58\u4ec5\u4e3a 8GB","title":"Xtuner"},{"location":"llm/internlm/lec4/#_3","text":"","title":"\u5feb\u901f\u4e0a\u624b"},{"location":"llm/internlm/lec4/#_4","text":"\u5b89\u88c5 pip install xtuner \u6311\u9009\u914d\u7f6e\u6a21\u7248 xtuner list-cfg -p internlm_20b \u4e00\u952e\u8bad\u7ec3 xtuner train internlm_20b_qlora_oasst1_512_e3 Config Description \u6a21\u578b\u540d internlm_20b (\u65e0 chat \u4ee3\u8868\u662f\u57fa\u5ea7\u6a21\u578b) \u4f7f\u7528\u7b97\u6cd5 qlora \u6570\u636e\u96c6 oasst1 \u6570\u636e\u957f\u5ea6 512 Epoch e3, epoch 3","title":"\u4f7f\u7528\u6d41\u7a0b"},{"location":"llm/internlm/lec4/#_5","text":"\u62f7\u8d1d\u914d\u7f6e\u6a21\u7248 \u4fee\u6539\u914d\u7f6e\u6a21\u7248 \u542f\u52a8\u8bad\u7ec3 \u5e38\u7528\u8d85\u53c2 Description data_path \u6570\u636e\u8def\u5f84\u6216 HuggingFace \u4ed3\u5e93\u540d max_length \u5355\u6761\u6570\u636e\u6700\u5927 Token \u6570\uff0c\u8d85\u8fc7\u5219\u622a\u65ad pack_to_max_length \u662f\u5426\u5c06\u591a\u6761\u77ed\u6570\u636e\u62fc\u63a5\u5230 max_length\uff0c\u63d0\u9ad8 GPU \u5229\u7528\u7387 accumulative_counts \u68af\u5ea6\u7d2f\u79ef\uff0c\u6bcf\u591a\u5c11\u6b21 backward \u66f4\u65b0\u4e00\u6b21\u53c2\u6570 evaluation_inputs \u8bad\u7ec3\u8fc7\u7a0b\u4e2d\uff0c\u4f1a\u6839\u636e\u7ed9\u5b9a\u7684\u95ee\u9898\u8fdb\u884c\u63a8\u7406\uff0c\u4fbf\u4e8e\u89c2\u6d4b\u8bad\u7ec3\u72b6\u6001 evaluation_freq Evaluation \u7684\u6d4b\u8bc4\u95f4\u9694 iter \u6570","title":"\u81ea\u5b9a\u4e49\u8bad\u7ec3"},{"location":"llm/internlm/lec4/#_6","text":"\u4e3a\u4e86\u4fbf\u4e8e\u5f00\u53d1\u8005\u67e5\u770b\u8bad\u7ec3\u6548\u679c\uff0cXtuner \u63d0\u4f9b\u4e86\u4e00\u952e\u5bf9\u8bdd\u501f\u53e3 Float16 \u6a21\u578b\u5bf9\u8bdd xtuner chat internlm/internlm-chat-20b 4bits \u6a21\u578b\u5bf9\u8bdd xtuner chat internlm/internlm-chat-20b --bits 4 \u52a0\u8f7d Adapter \u6a21\u578b\u5bf9\u8bdd xtuner chat internlm/internlm-chat-20b --adapter $ADAPTER_DIR \u540c\u65f6\uff0cXtuner \u8fd8\u652f\u6301\u5de5\u5177\u7c7b\u6a21\u578b\u7684\u5bf9\u8bdd","title":"\u5bf9\u8bdd"},{"location":"llm/internlm/lec4/#xtuner_2","text":"","title":"XTuner \u6570\u636e\u5f15\u64ce"},{"location":"llm/internlm/lec4/#_7","text":"","title":"\u6570\u636e\u5904\u7406\u6d41\u7a0b"},{"location":"llm/internlm/lec4/#pack-dataset","text":"\u589e\u5f3a\u5e76\u884c\u6027\uff0c\u5145\u5206\u5229\u7528 GPU \u8d44\u6e90\uff01","title":"\u591a\u6570\u636e\u6837\u672c\u62fc\u63a5\uff08Pack Dataset\uff09"},{"location":"llm/internlm/lec4/#8-gb-llm","text":"","title":"8 GB \u663e\u5361\u73a9\u8f6c LLM"},{"location":"llm/internlm/lec4/#xtuner_3","text":"Flash Attention \uff1a Flash Attention \u5c06 Attention \u8ba1\u7b97\u5e76\u884c\u5316\uff0c\u907f\u514d\u4e86\u8ba1\u7b97\u8fc7\u7a0b\u4e2d Attention Score NxN \u7684\u663e\u5b58\u5360\u7528\uff08\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u7684 N \u90fd\u6bd4\u8f83\u5927\uff09 DeepSpeed ZeRO ZeRO \u4f18\u5316\uff0c\u901a\u8fc7\u5c06\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u7684\u53c2\u6570\u3001\u68af\u5ea6\u548c\u4f18\u5316\u5668\u72b6\u6001\u5207\u7247\u4fdd\u5b58\uff0c\u80fd\u591f\u5728\u591a GPU \u8bad\u7ec3\u65f6\u663e\u8457\u8282\u7701\u663e\u5b58 \u9664\u4e86\u5c06\u8bad\u7ec3\u4e2d\u95f4\u72b6\u6001\u5207\u7247\u5916\uff0c DeepSpeed \u8bad\u7ec3\u65f6\u4f7f\u7528 FP16 \u7684\u6743\u91cd\uff0c\u76f8\u8f83\u4e8e Pytorch \u7684 AMP \u8bad\u7ec3\uff0c\u5728\u5355 GPU \u4e0a\u4e5f\u80fd\u5927\u5e45\u8282\u7701\u663e\u5b58 DeepSpeed \u4e0e Flash Attention \u867d\u7136\u80fd\u591f\u5927\u5e45\u964d\u4f4e\u8bad\u7ec3\u6210\u672c\uff0c\u4f46\u4f7f\u7528\u95e8\u69db\u76f8\u5bf9\u8f83\u9ad8\uff0c\u9700\u8981\u590d\u6742\u7684\u914d\u7f6e\uff0c\u751a\u81f3\u4fee\u6539\u4ee3\u7801\uff0c\u4e3a\u4e86\u8ba9\u5f00\u53d1\u8005\u4e13\u6ce8\u4e8e\u6570\u636e\uff0cXTuner \u4f1a\u81ea\u52a8 dispatch Flash Attention \uff0c\u5e76\u4e00\u952e\u542f\u52a8 DeepSpeed ZeRO xtuner train internlm_20b_qlora_oasst1_512_e3 \\ --deepspeed deepspeed_zero3","title":"XTuner \u52a0\u901f\u65b9\u5f0f"},{"location":"llm/internlm/lec4/#_8","text":"","title":"\u5b9e\u6218\u8bad\u7ec3"},{"location":"llm/internlm/lec4/#_9","text":"\u73af\u5883\uff1aUbuntu + Anaconda + CUDA/CUDNN + 8GB Nvidia GPU \u5b89\u88c5\uff1a conda create --name xtuner0.1.9 python = 3 .10 -y conda activate xtuner0.1.9 cd ~ && mkdir xtuner019 && cd xtuner019 git clone -b v0.1.9 https://github.com/InternLM/xtuner cd xtuner pip install -e '.[all]' \u521b\u5efa\u6570\u636e\u96c6\u5de5\u4f5c\u8def\u5f84\uff1a mkdir ~/ft-oasst1 && cd ~/ft-oasst1","title":"\u73af\u5883 & \u5b89\u88c5"},{"location":"llm/internlm/lec4/#_10","text":"","title":"\u5fae\u8c03"},{"location":"llm/internlm/lec4/#_11","text":"cd ~/ft-oasst1 xtuner copy-cfg internlm_chat_7b_qlora_oasst1_e3 .","title":"\u51c6\u5907\u914d\u7f6e\u6587\u4ef6"},{"location":"llm/internlm/lec4/#_12","text":"InternStudio \u5e73\u53f0\u4e0a cp -r /root/share/temp/model_repos/internlm-chat-7b ~/ft-oasst1/ - \u4e0d\u7528 xtuner \u9ed8\u8ba4\u7684\u4ece huggingface \u62c9\u53d6\u6a21\u578b\uff0c\u800c\u662f\u63d0\u524d\u4ece ModelScope \u4e0b\u8f7d\u6a21\u578b\u5230\u672c\u5730 # \u521b\u5efa\u4e00\u4e2a\u76ee\u5f55\uff0c\u653e\u6a21\u578b\u6587\u4ef6\uff0c\u9632\u6b62\u6563\u843d\u4e00\u5730 mkdir ~/ft-oasst1/internlm-chat-7b # \u88c5\u4e00\u4e0b\u62c9\u53d6\u6a21\u578b\u6587\u4ef6\u8981\u7528\u7684\u5e93 pip install modelscope # \u4ece modelscope \u4e0b\u8f7d\u4e0b\u8f7d\u6a21\u578b\u6587\u4ef6 cd ~/ft-oasst1 apt install git git-lfs -y git lfs install git lfs clone https://modelscope.cn/Shanghai_AI_Laboratory/internlm-chat-7b.git -b v1.0.3","title":"\u6a21\u578b\u4e0b\u8f7d"},{"location":"llm/internlm/lec4/#_13","text":"https://huggingface.co/datasets/timdettmers/openassistant-guanaco/tree/main","title":"\u6570\u636e\u96c6\u4e0b\u8f7d"},{"location":"llm/internlm/lec4/#_14","text":"\u4fee\u6539\u5176\u4e2d\u7684\u6a21\u578b\u548c\u6570\u636e\u96c6\u4e3a \u672c\u5730\u8def\u5f84 cd ~/ft-oasst1 vim internlm_chat_7b_qlora_oasst1_e3_copy.py # \u4fee\u6539\u6a21\u578b\u4e3a\u672c\u5730\u8def\u5f84 - pretrained_model_name_or_path = 'internlm/internlm-chat-7b' + pretrained_model_name_or_path = './internlm-chat-7b' # \u4fee\u6539\u8bad\u7ec3\u6570\u636e\u96c6\u4e3a\u672c\u5730\u8def\u5f84 - data_path = 'timdettmers/openassistant-guanaco' + data_path = './openassistant-guanaco'","title":"\u4fee\u6539\u914d\u7f6e\u6587\u4ef6"},{"location":"llm/internlm/lec4/#_15","text":"# \u5355\u5361 ## \u7528\u521a\u624d\u6539\u597d\u7684config\u6587\u4ef6\u8bad\u7ec3 xtuner train ./internlm_chat_7b_qlora_oasst1_e3_copy.py # \u591a\u5361 NPROC_PER_NODE = ${ GPU_NUM } xtuner train ./internlm_chat_7b_qlora_oasst1_e3_copy.py # \u82e5\u8981\u5f00\u542f deepspeed \u52a0\u901f\uff0c\u589e\u52a0 --deepspeed deepspeed_zero2 \u5373\u53ef \u5fae\u8c03\u5f97\u5230\u7684 PTH \u6a21\u578b\u6587\u4ef6\u548c\u5176\u4ed6\u6742\u4e03\u6742\u516b\u7684\u6587\u4ef6\u90fd\u9ed8\u8ba4\u5728\u5f53\u524d\u7684 ./work_dirs \u4e2d\u3002","title":"\u5f00\u59cb\u5fae\u8c03"},{"location":"llm/internlm/lec4/#adapter","text":"\u5c06\u5f97\u5230\u7684 PTH \u6a21\u578b\u8f6c\u6362\u4e3a HuggingFace \u6a21\u578b\uff0c\u5373\uff1a\u751f\u6210 Adapter \u6587\u4ef6\u5939 \u53ef\u4ee5\u7b80\u5355\u7406\u89e3\uff1aLoRA \u6a21\u578b\u6587\u4ef6 = Adapter mkdir hf export MKL_SERVICE_FORCE_INTEL = 1 xtuner convert pth_to_hf ./internlm_chat_7b_qlora_oasst1_e3_copy.py ./work_dirs/internlm_chat_7b_qlora_oasst1_e3_copy/epoch_1.pth ./hf","title":"\u751f\u6210 Adapter \u6587\u4ef6"},{"location":"llm/internlm/lec4/#_16","text":"","title":"\u90e8\u7f72\u4e0e\u6d4b\u8bd5"},{"location":"llm/internlm/lec4/#huggingface-adapter","text":"xtuner convert merge ./internlm-chat-7b ./hf ./merged --max-shard-size 2GB # xtuner convert merge \\ # ${NAME_OR_PATH_TO_LLM} \\ # ${NAME_OR_PATH_TO_ADAPTER} \\ # ${SAVE_PATH} \\ # --max-shard-size 2GB","title":"\u5c06 HuggingFace adapter \u5408\u5e76\u5230\u5927\u8bed\u8a00\u6a21\u578b"},{"location":"llm/internlm/lec4/#_17","text":"# \u52a0\u8f7d Adapter \u6a21\u578b\u5bf9\u8bdd\uff08Float 16\uff09 xtuner chat ./merged --prompt-template internlm_chat # 4 bit \u91cf\u5316\u52a0\u8f7d # xtuner chat ./merged --bits 4 --prompt-template internlm_chat \u5fae\u8c03\u524d \u5fae\u8c03\u540e","title":"\u4e0e\u5408\u5e76\u540e\u7684\u6a21\u578b\u5bf9\u8bdd"},{"location":"llm/internlm/lec4/#_18","text":"\u4ee5 Medication QA \u6570\u636e\u96c6 \u4e3a\u4f8b","title":"\u81ea\u5b9a\u4e49\u5fae\u8c03"},{"location":"llm/internlm/lec4/#_19","text":"","title":"\u6982\u8ff0"},{"location":"llm/internlm/lec4/#_20","text":"\u57fa\u4e8e InternLM-chat-7B \u6a21\u578b\uff0c\u7528 MedQA \u6570\u636e\u96c6\u8fdb\u884c\u5fae\u8c03\uff0c\u5c06\u5176\u5f80 \u533b\u5b66\u95ee\u7b54 \u9886\u57df\u5bf9\u9f50\u3002","title":"\u573a\u666f\u9700\u6c42"},{"location":"llm/internlm/lec4/#_21","text":"\u95ee\u9898 \u7b54\u6848 What are ketorolac eye drops?\uff08\u4ec0\u4e48\u662f\u916e\u54af\u9178\u6ef4\u773c\u6db2\uff1f\uff09 Ophthalmic ketorolac is used to treat itchy eyes caused by allergies. It also is used to treat swelling and redness (inflammation) that can occur after cataract surgery. Ketorolac is in a class of medications called nonsteroidal anti-inflammatory drugs (NSAIDs). It works by stopping the release of substances that cause allergy symptoms and inflammation. What medicines raise blood sugar? \uff08\u4ec0\u4e48\u836f\u7269\u4f1a\u5347\u9ad8\u8840\u7cd6\uff1f\uff09 Some medicines for conditions other than diabetes can raise your blood sugar level. This is a concern when you have diabetes. Make sure every doctor you see knows about all of the medicines, vitamins, or herbal supplements you take. This means anything you take with or without a prescription. Examples include: Barbiturates. Thiazide diuretics. Corticosteroids. Birth control pills (oral contraceptives) and progesterone. Catecholamines. Decongestants that contain beta-adrenergic agents, such as pseudoephedrine. The B vitamin niacin. The risk of high blood sugar from niacin lowers after you have taken it for a few months. The antipsychotic medicine olanzapine (Zyprexa).","title":"\u771f\u5b9e\u6570\u636e\u9884\u89c8"},{"location":"llm/internlm/lec4/#_22","text":"\u4ee5 Medication QA \u6570\u636e\u96c6\u4e3a\u4f8b \u539f\u683c\u5f0f\uff1a(.xlsx) \u95ee\u9898 \u836f\u7269\u7c7b\u578b \u95ee\u9898\u7c7b\u578b \u56de\u7b54 \u4e3b\u9898 URL aaa bbb ccc ddd eee fff","title":"\u6570\u636e\u51c6\u5907"},{"location":"llm/internlm/lec4/#xtuner_4","text":"\u76ee\u6807\u683c\u5f0f\uff1a(.jsonL) [{ \"conversation\" :[ { \"system\" : \"xxx\" , \"input\" : \"xxx\" , \"output\" : \"xxx\" } ] }, { \"conversation\" :[ { \"system\" : \"xxx\" , \"input\" : \"xxx\" , \"output\" : \"xxx\" } ] }] \ud83e\udde0\u901a\u8fc7 python\u811a\u672c\uff1a\u5c06 .xlsx \u4e2d\u7684 \u95ee\u9898 \u548c \u56de\u7b54 \u4e24\u5217 \u63d0\u53d6\u51fa\u6765\uff0c\u518d\u653e\u5165 .jsonL \u6587\u4ef6\u7684\u6bcf\u4e2a conversation \u7684 input \u548c output \u4e2d\u3002 \u8fd9\u4e00\u6b65\u7684 python \u811a\u672c\u53ef\u4ee5\u8bf7 ChatGPT \u6765\u5b8c\u6210\u3002 Write a python file for me. using openpyxl. input file name is MedQA2019.xlsx Step1: The input file is .xlsx. Exact the column A and column D in the sheet named \"DrugQA\" . Step2: Put each value in column A into each \"input\" of each \"conversation\". Put each value in column D into each \"output\" of each \"conversation\". Step3: The output file is .jsonL. It looks like: [{ \"conversation\":[ { \"system\": \"xxx\", \"input\": \"xxx\", \"output\": \"xxx\" } ] }, { \"conversation\":[ { \"system\": \"xxx\", \"input\": \"xxx\", \"output\": \"xxx\" } ] }] Step4: All \"system\" value changes to \"You are a professional, highly experienced doctor professor. You always provide accurate, comprehensive, and detailed answers based on the patients' questions.\" ChatGPT \u751f\u6210\u7684 python \u4ee3\u7801\u5982\u4e0b\uff1a xlsx2jsonl.py import openpyxl import json def process_excel_to_json ( input_file , output_file ): # Load the workbook wb = openpyxl . load_workbook ( input_file ) # Select the \"DrugQA\" sheet sheet = wb [ \"DrugQA\" ] # Initialize the output data structure output_data = [] # Iterate through each row in column A and D for row in sheet . iter_rows ( min_row = 2 , max_col = 4 , values_only = True ): system_value = \"You are a professional, highly experienced doctor professor. You always provide accurate, comprehensive, and detailed answers based on the patients' questions.\" # Create the conversation dictionary conversation = { \"system\" : system_value , \"input\" : row [ 0 ], \"output\" : row [ 3 ] } # Append the conversation to the output data output_data . append ({ \"conversation\" : [ conversation ]}) # Write the output data to a JSON file with open ( output_file , 'w' , encoding = 'utf-8' ) as json_file : json . dump ( output_data , json_file , indent = 4 ) print ( f \"Conversion complete. Output written to { output_file } \" ) # Replace 'MedQA2019.xlsx' and 'output.jsonl' with your actual input and output file names process_excel_to_json ( 'MedQA2019.xlsx' , 'output.jsonl' ) \u6267\u884c python \u811a\u672c\uff0c\u83b7\u5f97\u683c\u5f0f\u5316\u540e\u7684\u6570\u636e\u96c6\uff1a python xlsx2jsonl.py \u683c\u5f0f\u5316\u540e\u7684\u6570\u636e\u96c6\u957f\u8fd9\u6837\uff1a \u6b64\u65f6\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u5bf9\u6570\u636e\u8fdb\u884c\u8bad\u7ec3\u96c6\u548c\u6d4b\u8bd5\u96c6\u7684\u5206\u5272\uff0c\u540c\u6837\u53ef\u4ee5\u8ba9 ChatGPT \u5199 python \u4ee3\u7801\u3002\u5f53\u7136\u5982\u679c\u4f60\u6ca1\u6709\u4e25\u683c\u7684\u79d1\u7814\u9700\u6c42\u3001\u4e0d\u5728\u4e4e\u201c\u8bad\u7ec3\u96c6\u6cc4\u9732\u201d\u7684\u95ee\u9898\uff0c\u4e5f\u53ef\u4ee5\u4e0d\u505a\u8bad\u7ec3\u96c6\u4e0e\u6d4b\u8bd5\u96c6\u7684\u5206\u5272\u3002","title":"\u5c06\u6570\u636e\u8f6c\u4e3a XTuner \u7684\u6570\u636e\u683c\u5f0f"},{"location":"llm/internlm/lec4/#_23","text":"my .jsonL file looks like: [{ \"conversation\":[ { \"system\": \"xxx\", \"input\": \"xxx\", \"output\": \"xxx\" } ] }, { \"conversation\":[ { \"system\": \"xxx\", \"input\": \"xxx\", \"output\": \"xxx\" } ] }] Step1, read the .jsonL file. Step2, count the amount of the \"conversation\" elements. Step3, randomly split all \"conversation\" elements by 7:3. Targeted structure is same as the input. Step4, save the 7/10 part as train.jsonl. save the 3/10 part as test.jsonl \u751f\u6210\u7684 python \u4ee3\u7801\u5982\u4e0b\uff1a split2train_and_test.py import json import random def split_conversations ( input_file , train_output_file , test_output_file ): # Read the input JSONL file with open ( input_file , 'r' , encoding = 'utf-8' ) as jsonl_file : data = json . load ( jsonl_file ) # Count the number of conversation elements num_conversations = len ( data ) # Shuffle the data randomly random . shuffle ( data ) random . shuffle ( data ) random . shuffle ( data ) # Calculate the split points for train and test split_point = int ( num_conversations * 0.7 ) # Split the data into train and test train_data = data [: split_point ] test_data = data [ split_point :] # Write the train data to a new JSONL file with open ( train_output_file , 'w' , encoding = 'utf-8' ) as train_jsonl_file : json . dump ( train_data , train_jsonl_file , indent = 4 ) # Write the test data to a new JSONL file with open ( test_output_file , 'w' , encoding = 'utf-8' ) as test_jsonl_file : json . dump ( test_data , test_jsonl_file , indent = 4 ) print ( f \"Split complete. Train data written to { train_output_file } , Test data written to { test_output_file } \" ) # Replace 'input.jsonl', 'train.jsonl', and 'test.jsonl' with your actual file names split_conversations ( 'MedQA2019-structured.jsonl' , 'MedQA2019-structured-train.jsonl' , 'MedQA2019-structured-test.jsonl' )","title":"\u5212\u5206\u8bad\u7ec3\u96c6\u548c\u6d4b\u8bd5\u96c6"},{"location":"llm/internlm/lec4/#_24","text":"\u6b64\u65f6\uff0c\u6211\u4eec\u91cd\u65b0\u5efa\u4e00\u4e2a\u6587\u4ef6\u5939\u6765\u73a9\u201c\u5fae\u8c03\u81ea\u5b9a\u4e49\u6570\u636e\u96c6\u201d mkdir ~/ft-medqa && cd ~/ft-medqa \u628a\u524d\u9762\u4e0b\u8f7d\u597d\u7684internlm-chat-7b\u6a21\u578b\u6587\u4ef6\u5939\u62f7\u8d1d\u8fc7\u6765\u3002 cp -r ~/ft-oasst1/internlm-chat-7b . \u522b\u5fd8\u4e86\u628a\u81ea\u5b9a\u4e49\u6570\u636e\u96c6\uff0c\u5373\u51e0\u4e2a .jsonL \uff0c\u4e5f\u4f20\u5230\u670d\u52a1\u5668\u4e0a\u3002 git clone https://github.com/InternLM/tutorial cp ~/tutorial/xtuner/MedQA2019-structured-train.jsonl .","title":"\u5f00\u59cb\u81ea\u5b9a\u4e49\u5fae\u8c03"},{"location":"llm/internlm/lec4/#_25","text":"# \u590d\u5236\u914d\u7f6e\u6587\u4ef6\u5230\u5f53\u524d\u76ee\u5f55 xtuner copy-cfg internlm_chat_7b_qlora_oasst1_e3 . # \u6539\u4e2a\u6587\u4ef6\u540d mv internlm_chat_7b_qlora_oasst1_e3_copy.py internlm_chat_7b_qlora_medqa2019_e3.py # \u4fee\u6539\u914d\u7f6e\u6587\u4ef6\u5185\u5bb9 vim internlm_chat_7b_qlora_medqa2019_e3.py \u51cf\u53f7\u4ee3\u8868\u8981\u5220\u9664\u7684\u884c\uff0c\u52a0\u53f7\u4ee3\u8868\u8981\u589e\u52a0\u7684\u884c\u3002 # \u4fee\u6539import\u90e8\u5206 - from xtuner.dataset.map_fns import oasst1_map_fn, template_map_fn_factory + from xtuner.dataset.map_fns import template_map_fn_factory # \u4fee\u6539\u6a21\u578b\u4e3a\u672c\u5730\u8def\u5f84 - pretrained_model_name_or_path = 'internlm/internlm-chat-7b' + pretrained_model_name_or_path = './internlm-chat-7b' # \u4fee\u6539\u8bad\u7ec3\u6570\u636e\u4e3a MedQA2019-structured-train.jsonl \u8def\u5f84 - data_path = 'timdettmers/openassistant-guanaco' + data_path = 'MedQA2019-structured-train.jsonl' # \u4fee\u6539 train_dataset \u5bf9\u8c61 train_dataset = dict( type=process_hf_dataset, - dataset=dict(type=load_dataset, path=data_path), + dataset=dict(type=load_dataset, path='json', data_files=dict(train=data_path)), tokenizer=tokenizer, max_length=max_length, - dataset_map_fn=alpaca_map_fn, + dataset_map_fn=None, template_map_fn=dict( type=template_map_fn_factory, template=prompt_template), remove_unused_columns=True, shuffle_before_pack=True, pack_to_max_length=pack_to_max_length)","title":"\u51c6\u5907\u914d\u7f6e\u6587\u4ef6"},{"location":"llm/internlm/lec4/#xtuner_5","text":"xtuner train internlm_chat_7b_qlora_medqa2019_e3.py --deepspeed deepspeed_zero2","title":"XTuner\uff01\u542f\u52a8\uff01"},{"location":"llm/internlm/lec4/#adapter_1","text":"","title":"\u751f\u6210 Adapter \u6587\u4ef6"},{"location":"llm/internlm/lec4/#_26","text":"","title":"\u90e8\u7f72\u4e0e\u6d4b\u8bd5"},{"location":"llm/internlm/lec4/#ms-agent-llm-agent","text":"","title":"\u7528 MS-Agent \u6570\u636e\u96c6\u8d4b\u4e88 LLM \u4ee5 Agent \u80fd\u529b"},{"location":"llm/internlm/lec4/#_27","text":"MSAgent \u6570\u636e\u96c6\u6bcf\u6761\u6837\u672c\u5305\u542b\u4e00\u4e2a\u5bf9\u8bdd\u5217\u8868\uff08conversations\uff09\uff0c\u5176\u91cc\u9762\u5305\u542b\u4e86 system\u3001user\u3001assistant \u4e09\u79cd\u5b57\u6bb5\u3002\u5176\u4e2d\uff1a system: \u8868\u793a\u7ed9\u6a21\u578b\u524d\u7f6e\u7684\u4eba\u8bbe\u8f93\u5165\uff0c\u5176\u4e2d\u6709\u544a\u8bc9\u6a21\u578b\u5982\u4f55\u8c03\u7528\u63d2\u4ef6\u4ee5\u53ca\u751f\u6210\u8bf7\u6c42 user: \u8868\u793a\u7528\u6237\u7684\u8f93\u5165 prompt\uff0c\u5206\u4e3a\u4e24\u79cd\uff0c\u901a\u7528\u751f\u6210\u7684prompt\u548c\u8c03\u7528\u63d2\u4ef6\u9700\u6c42\u7684 prompt assistant: \u4e3a\u6a21\u578b\u7684\u56de\u590d\u3002\u5176\u4e2d\u4f1a\u5305\u62ec\u63d2\u4ef6\u8c03\u7528\u4ee3\u7801\u548c\u6267\u884c\u4ee3\u7801\uff0c\u8c03\u7528\u4ee3\u7801\u662f\u8981 LLM \u751f\u6210\u7684\uff0c\u800c\u6267\u884c\u4ee3\u7801\u662f\u8c03\u7528\u670d\u52a1\u6765\u751f\u6210\u7ed3\u679c\u7684 \u4e00\u6761\u8c03\u7528\u7f51\u9875\u641c\u7d22\u63d2\u4ef6\u67e5\u8be2\u201c\u4e0a\u6d77\u660e\u5929\u5929\u6c14\u201d\u7684\u6570\u636e\u6837\u672c\u793a\u4f8b\u5982\u4e0b\u56fe\u6240\u793a\uff1a","title":"\u6982\u8ff0"},{"location":"llm/internlm/lec4/#_28","text":"","title":"\u5fae\u8c03\u6b65\u9aa4"},{"location":"llm/internlm/lec4/#_29","text":"xtuner \u662f\u4ece\u56fd\u5185\u7684 ModelScope \u5e73\u53f0\u4e0b\u8f7d MS-Agent \u6570\u636e\u96c6\uff0c\u56e0\u6b64\u4e0d\u7528\u63d0\u524d\u624b\u52a8\u4e0b\u8f7d\u6570\u636e\u96c6\u6587\u4ef6\u3002 # \u51c6\u5907\u5de5\u4f5c mkdir ~/ft-msagent && cd ~/ft-msagent cp -r ~/ft-oasst1/internlm-chat-7b . # \u67e5\u770b\u914d\u7f6e\u6587\u4ef6 xtuner list-cfg | grep msagent # \u590d\u5236\u914d\u7f6e\u6587\u4ef6\u5230\u5f53\u524d\u76ee\u5f55 xtuner copy-cfg internlm_7b_qlora_msagent_react_e3_gpu8 . # \u4fee\u6539\u914d\u7f6e\u6587\u4ef6\u4e2d\u7684\u6a21\u578b\u4e3a\u672c\u5730\u8def\u5f84 vim ./internlm_7b_qlora_msagent_react_e3_gpu8_copy.py - pretrained_model_name_or_path = 'internlm/internlm-chat-7b' + pretrained_model_name_or_path = './internlm-chat-7b'","title":"\u51c6\u5907\u5de5\u4f5c"},{"location":"llm/internlm/lec4/#_30","text":"xtuner train ./internlm_7b_qlora_msagent_react_e3_gpu8_copy.py --deepspeed deepspeed_zero2","title":"\u5f00\u59cb\u5fae\u8c03"},{"location":"llm/internlm/lec4/#_31","text":"\u7531\u4e8e msagent \u7684\u8bad\u7ec3\u975e\u5e38\u8d39\u65f6\uff0c\u5927\u5bb6\u5982\u679c\u60f3\u5c3d\u5feb\u628a\u8fd9\u4e2a\u6559\u7a0b\u8ddf\u5b8c\uff0c\u53ef\u4ee5\u76f4\u63a5\u4ece modelScope \u62c9\u53d6\u54b1\u4eec\u5df2\u7ecf\u5fae\u8c03\u597d\u4e86\u7684 Adapter\u3002\u5982\u4e0b\u6f14\u793a\u3002","title":"\u76f4\u63a5\u4f7f\u7528"},{"location":"llm/internlm/lec4/#adapter_2","text":"cd ~/ft-msagent apt install git git-lfs git lfs install git lfs clone https://www.modelscope.cn/xtuner/internlm-7b-qlora-msagent-react.git \u6709\u4e86\u8fd9\u4e2a\u5728 msagent \u4e0a\u8bad\u7ec3\u5f97\u5230\u7684Adapter\uff0c\u6a21\u578b\u73b0\u5728\u5df2\u7ecf\u6709 agent \u80fd\u529b\u4e86\uff01\u5c31\u53ef\u4ee5\u52a0 --lagent \u4ee5\u8c03\u7528\u6765\u81ea lagent \u7684\u4ee3\u7406\u529f\u80fd\u4e86\uff01","title":"\u4e0b\u8f7d Adapter"},{"location":"llm/internlm/lec4/#serper","text":"\u5f00\u59cb chat \u4e4b\u524d\uff0c\u8fd8\u8981\u52a0\u4e2a serper \u7684\u73af\u5883\u53d8\u91cf\uff1a \u53bb serper.dev \u514d\u8d39\u6ce8\u518c\u4e00\u4e2a\u8d26\u53f7\uff0c\u751f\u6210\u81ea\u5df1\u7684 api key\u3002\u8fd9\u4e2a\u4e1c\u897f\u662f\u7528\u6765\u7ed9 lagent \u53bb\u83b7\u53d6 google \u641c\u7d22\u7684\u7ed3\u679c\u7684\u3002\u7b49\u4e8e\u662f serper.dev \u5e2e\u4f60\u53bb\u8bbf\u95ee google\uff0c\u800c\u4e0d\u662f\u4ece\u4f60\u81ea\u5df1\u672c\u5730\u53bb\u8bbf\u95ee google \u4e86\u3002 \u6dfb\u52a0 serper api key \u5230\u73af\u5883\u53d8\u91cf\uff1a export SERPER_API_KEY = abcdefg","title":"\u6dfb\u52a0 serper \u73af\u5883\u53d8\u91cf"},{"location":"llm/internlm/lec4/#xtuner-agent","text":"xtuner chat ./internlm-chat-7b --adapter internlm-7b-qlora-msagent-react --lagent --prompt-template internlm_chat","title":"xtuner + agent\uff0c\u542f\u52a8\uff01"},{"location":"llm/internlm/lec4/#xtuner-internlm-chat","text":"","title":"\u4f5c\u4e1a\uff1aXTuner InternLM-Chat \u4e2a\u4eba\u5c0f\u52a9\u624b\u8ba4\u77e5\u5fae\u8c03\u5b9e\u8df5"},{"location":"llm/internlm/lec4/#_32","text":"# InternStudio \u5e73\u53f0\u4e2d\uff0c\u4ece\u672c\u5730 clone \u4e00\u4e2a\u5df2\u6709 pytorch 2.0.1 \u7684\u73af\u5883\uff08\u540e\u7eed\u5747\u5728\u8be5\u73af\u5883\u6267\u884c\uff0c\u82e5\u4e3a\u5176\u4ed6\u73af\u5883\u53ef\u4f5c\u4e3a\u53c2\u8003\uff09 # \u8fdb\u5165\u73af\u5883\u540e\u9996\u5148 bash # \u8fdb\u5165\u73af\u5883\u540e\u9996\u5148 bash # \u8fdb\u5165\u73af\u5883\u540e\u9996\u5148 bash bash conda create --name personal_assistant --clone = /root/share/conda_envs/internlm-base # \u5982\u679c\u5728\u5176\u4ed6\u5e73\u53f0\uff1a # conda create --name personal_assistant python=3.10 -y # \u6fc0\u6d3b\u73af\u5883 conda activate personal_assistant # \u8fdb\u5165\u5bb6\u76ee\u5f55 \uff08~\u7684\u610f\u601d\u662f \u201c\u5f53\u524d\u7528\u6237\u7684home\u8def\u5f84\u201d\uff09 cd ~ # \u521b\u5efa\u7248\u672c\u6587\u4ef6\u5939\u5e76\u8fdb\u5165\uff0c\u4ee5\u8ddf\u968f\u672c\u6559\u7a0b # personal_assistant\u7528\u4e8e\u5b58\u653e\u672c\u6559\u7a0b\u6240\u4f7f\u7528\u7684\u4e1c\u897f mkdir /root/personal_assistant && cd /root/personal_assistant mkdir /root/personal_assistant/xtuner019 && cd /root/personal_assistant/xtuner019 # \u62c9\u53d6 0.1.9 \u7684\u7248\u672c\u6e90\u7801 git clone -b v0.1.9 https://github.com/InternLM/xtuner # \u65e0\u6cd5\u8bbf\u95eegithub\u7684\u7528\u6237\u8bf7\u4ece gitee \u62c9\u53d6: # git clone -b v0.1.9 https://gitee.com/Internlm/xtuner # \u8fdb\u5165\u6e90\u7801\u76ee\u5f55 cd xtuner # \u4ece\u6e90\u7801\u5b89\u88c5 XTuner pip install -e '.[all]'","title":"\u73af\u5883\u51c6\u5907"},{"location":"llm/internlm/lec4/#_33","text":"mkdir -p /root/personal_assistant/data && cd /root/personal_assistant/data \u5728 data \u76ee\u5f55\u4e0b\u521b\u5efa\u4e00\u4e2ajson\u6587\u4ef6 personal_assistant.json \u4f5c\u4e3a\u672c\u6b21\u5fae\u8c03\u6240\u4f7f\u7528\u7684\u6570\u636e\u96c6\u3002 \u5176\u4e2d conversation \u8868\u793a\u4e00\u6b21\u5bf9\u8bdd\u7684\u5185\u5bb9\uff0c input \u4e3a\u8f93\u5165\uff0c\u5373\u7528\u6237\u4f1a\u95ee\u7684\u95ee\u9898\uff0c output \u4e3a\u8f93\u51fa\uff0c\u5373\u60f3\u8981\u6a21\u578b\u56de\u7b54\u7684\u7b54\u6848\u3002 \u4ee5\u4e0b\u662f\u4e00\u4e2apython\u811a\u672c\uff0c\u7528\u4e8e\u751f\u6210\u6570\u636e\u96c6\u3002 generate_data.py import json # \u8f93\u5165\u4f60\u7684\u540d\u5b57 name = '\u72d9\u51fb\u7f8e\u4f50' # \u91cd\u590d\u6b21\u6570 n = 10000 data = [ { \"conversation\" : [ { \"input\" : \"\u8bf7\u505a\u4e00\u4e0b\u81ea\u6211\u4ecb\u7ecd\" , \"output\" : \"\u6211\u662f {} \u7684\u5c0f\u52a9\u624b\uff0c\u5185\u5728\u662f\u4e0a\u6d77AI\u5b9e\u9a8c\u5ba4\u4e66\u751f\u00b7\u6d66\u8bed\u76847B\u5927\u6a21\u578b\u54e6\" . format ( name ) } ] } ] for i in range ( n ): data . append ( data [ 0 ]) with open ( 'personal_assistant.json' , 'w' , encoding = 'utf-8' ) as f : json . dump ( data , f , ensure_ascii = False , indent = 4 )","title":"\u6570\u636e\u51c6\u5907"},{"location":"llm/internlm/lec4/#_34","text":"mkdir -p /root/personal_assistant/model/Shanghai_AI_Laboratory cp -r /root/share/temp/model_repos/internlm-chat-7b /root/personal_assistant/model/Shanghai_AI_Laboratory # \u521b\u5efa\u7528\u4e8e\u5b58\u653e\u914d\u7f6e\u7684\u6587\u4ef6\u5939config\u5e76\u8fdb\u5165 mkdir /root/personal_assistant/config && cd /root/personal_assistant/config # \u62f7\u8d1d\u4e00\u4e2a\u914d\u7f6e\u6587\u4ef6\u5230\u5f53\u524d\u76ee\u5f55 xtuner copy-cfg internlm_chat_7b_qlora_oasst1_e3 . \u4fee\u6539\u62f7\u8d1d\u540e\u7684\u6587\u4ef6\uff1a internlm_chat_7b_qlora_oasst1_e3_copy.py # Copyright (c) OpenMMLab. All rights reserved. import torch from bitsandbytes.optim import PagedAdamW32bit from datasets import load_dataset from mmengine.dataset import DefaultSampler from mmengine.hooks import ( CheckpointHook , DistSamplerSeedHook , IterTimerHook , LoggerHook , ParamSchedulerHook ) from mmengine.optim import AmpOptimWrapper , CosineAnnealingLR from peft import LoraConfig from transformers import ( AutoModelForCausalLM , AutoTokenizer , BitsAndBytesConfig ) from xtuner.dataset import process_hf_dataset from xtuner.dataset.collate_fns import default_collate_fn from xtuner.dataset.map_fns import oasst1_map_fn , template_map_fn_factory from xtuner.engine import DatasetInfoHook , EvaluateChatHook from xtuner.model import SupervisedFinetune from xtuner.utils import PROMPT_TEMPLATE ####################################################################### # PART 1 Settings # ####################################################################### # Model pretrained_model_name_or_path = '/root/personal_assistant/model/Shanghai_AI_Laboratory/internlm-chat-7b' # Data data_path = '/root/personal_assistant/data/personal_assistant.json' prompt_template = PROMPT_TEMPLATE . internlm_chat max_length = 512 pack_to_max_length = True # Scheduler & Optimizer batch_size = 2 # per_device accumulative_counts = 16 dataloader_num_workers = 0 max_epochs = 3 optim_type = PagedAdamW32bit lr = 2e-4 betas = ( 0.9 , 0.999 ) weight_decay = 0 max_norm = 1 # grad clip # Evaluate the generation performance during the training evaluation_freq = 90 SYSTEM = '' evaluation_inputs = [ '\u8bf7\u4ecb\u7ecd\u4e00\u4e0b\u4f60\u81ea\u5df1' , '\u8bf7\u505a\u4e00\u4e0b\u81ea\u6211\u4ecb\u7ecd' ] ####################################################################### # PART 2 Model & Tokenizer # ####################################################################### tokenizer = dict ( type = AutoTokenizer . from_pretrained , pretrained_model_name_or_path = pretrained_model_name_or_path , trust_remote_code = True , padding_side = 'right' ) model = dict ( type = SupervisedFinetune , llm = dict ( type = AutoModelForCausalLM . from_pretrained , pretrained_model_name_or_path = pretrained_model_name_or_path , trust_remote_code = True , torch_dtype = torch . float16 , quantization_config = dict ( type = BitsAndBytesConfig , load_in_4bit = True , load_in_8bit = False , llm_int8_threshold = 6.0 , llm_int8_has_fp16_weight = False , bnb_4bit_compute_dtype = torch . float16 , bnb_4bit_use_double_quant = True , bnb_4bit_quant_type = 'nf4' )), lora = dict ( type = LoraConfig , r = 64 , lora_alpha = 16 , lora_dropout = 0.1 , bias = 'none' , task_type = 'CAUSAL_LM' )) ####################################################################### # PART 3 Dataset & Dataloader # ####################################################################### train_dataset = dict ( type = process_hf_dataset , dataset = dict ( type = load_dataset , path = 'json' , data_files = dict ( train = data_path )), tokenizer = tokenizer , max_length = max_length , dataset_map_fn = None , template_map_fn = dict ( type = template_map_fn_factory , template = prompt_template ), remove_unused_columns = True , shuffle_before_pack = True , pack_to_max_length = pack_to_max_length ) train_dataloader = dict ( batch_size = batch_size , num_workers = dataloader_num_workers , dataset = train_dataset , sampler = dict ( type = DefaultSampler , shuffle = True ), collate_fn = dict ( type = default_collate_fn )) ####################################################################### # PART 4 Scheduler & Optimizer # ####################################################################### # optimizer optim_wrapper = dict ( type = AmpOptimWrapper , optimizer = dict ( type = optim_type , lr = lr , betas = betas , weight_decay = weight_decay ), clip_grad = dict ( max_norm = max_norm , error_if_nonfinite = False ), accumulative_counts = accumulative_counts , loss_scale = 'dynamic' , dtype = 'float16' ) # learning policy # More information: https://github.com/open-mmlab/mmengine/blob/main/docs/en/tutorials/param_scheduler.md # noqa: E501 param_scheduler = dict ( type = CosineAnnealingLR , eta_min = 0.0 , by_epoch = True , T_max = max_epochs , convert_to_iter_based = True ) # train, val, test setting train_cfg = dict ( by_epoch = True , max_epochs = max_epochs , val_interval = 1 ) ####################################################################### # PART 5 Runtime # ####################################################################### # Log the dialogue periodically during the training process, optional custom_hooks = [ dict ( type = DatasetInfoHook , tokenizer = tokenizer ), dict ( type = EvaluateChatHook , tokenizer = tokenizer , every_n_iters = evaluation_freq , evaluation_inputs = evaluation_inputs , system = SYSTEM , prompt_template = prompt_template ) ] # configure default hooks default_hooks = dict ( # record the time of every iteration. timer = dict ( type = IterTimerHook ), # print log every 100 iterations. logger = dict ( type = LoggerHook , interval = 10 ), # enable the parameter scheduler. param_scheduler = dict ( type = ParamSchedulerHook ), # save checkpoint per epoch. checkpoint = dict ( type = CheckpointHook , interval = 1 ), # set sampler seed in distributed evrionment. sampler_seed = dict ( type = DistSamplerSeedHook ), ) # configure environment env_cfg = dict ( # whether to enable cudnn benchmark cudnn_benchmark = False , # set multi process parameters mp_cfg = dict ( mp_start_method = 'fork' , opencv_num_threads = 0 ), # set distributed parameters dist_cfg = dict ( backend = 'nccl' ), ) # set visualizer visualizer = None # set log level log_level = 'INFO' # load from which checkpoint load_from = None # whether to resume training from the loaded checkpoint resume = False # Defaults to use random seed and disable `deterministic` randomness = dict ( seed = None , deterministic = False )","title":"\u914d\u7f6e\u51c6\u5907"},{"location":"llm/internlm/lec4/#_35","text":"xtuner train /root/personal_assistant/config/internlm_chat_7b_qlora_oasst1_e3_copy.py","title":"\u5fae\u8c03"},{"location":"llm/internlm/lec4/#_36","text":"\u8bad\u7ec3\u540e\u7684pth\u683c\u5f0f\u53c2\u6570\u8f6cHugging Face\u683c\u5f0f # \u521b\u5efa\u7528\u4e8e\u5b58\u653eHugging Face\u683c\u5f0f\u53c2\u6570\u7684hf\u6587\u4ef6\u5939 mkdir /root/personal_assistant/config/work_dirs/hf export MKL_SERVICE_FORCE_INTEL = 1 # \u914d\u7f6e\u6587\u4ef6\u5b58\u653e\u7684\u4f4d\u7f6e export CONFIG_NAME_OR_PATH = /root/personal_assistant/config/internlm_chat_7b_qlora_oasst1_e3_copy.py # \u6a21\u578b\u8bad\u7ec3\u540e\u5f97\u5230\u7684pth\u683c\u5f0f\u53c2\u6570\u5b58\u653e\u7684\u4f4d\u7f6e export PTH = /root/personal_assistant/config/work_dirs/internlm_chat_7b_qlora_oasst1_e3_copy/epoch_3.pth # pth\u6587\u4ef6\u8f6c\u6362\u4e3aHugging Face\u683c\u5f0f\u540e\u53c2\u6570\u5b58\u653e\u7684\u4f4d\u7f6e export SAVE_PATH = /root/personal_assistant/config/work_dirs/hf # \u6267\u884c\u53c2\u6570\u8f6c\u6362 xtuner convert pth_to_hf $CONFIG_NAME_OR_PATH $PTH $SAVE_PATH Merge\u6a21\u578b\u53c2\u6570 export MKL_SERVICE_FORCE_INTEL = 1 export MKL_THREADING_LAYER = 'GNU' # \u539f\u59cb\u6a21\u578b\u53c2\u6570\u5b58\u653e\u7684\u4f4d\u7f6e export NAME_OR_PATH_TO_LLM = /root/personal_assistant/model/Shanghai_AI_Laboratory/internlm-chat-7b # Hugging Face\u683c\u5f0f\u53c2\u6570\u5b58\u653e\u7684\u4f4d\u7f6e export NAME_OR_PATH_TO_ADAPTER = /root/personal_assistant/config/work_dirs/hf # \u6700\u7ec8Merge\u540e\u7684\u53c2\u6570\u5b58\u653e\u7684\u4f4d\u7f6e mkdir /root/personal_assistant/config/work_dirs/hf_merge export SAVE_PATH = /root/personal_assistant/config/work_dirs/hf_merge # \u6267\u884c\u53c2\u6570Merge xtuner convert merge \\ $NAME_OR_PATH_TO_LLM \\ $NAME_OR_PATH_TO_ADAPTER \\ $SAVE_PATH \\ --max-shard-size 2GB","title":"\u53c2\u6570\u8f6c\u6362/\u5408\u5e76"},{"location":"llm/internlm/lec4/#demo","text":"\u5b89\u88c5\u4f9d\u8d56 pip install streamlit == 1 .24.0 \u4e0b\u8f7dInternLM\u9879\u76ee\u4ee3\u7801 # \u521b\u5efacode\u6587\u4ef6\u5939\u7528\u4e8e\u5b58\u653eInternLM\u9879\u76ee\u4ee3\u7801 mkdir /root/personal_assistant/code && cd /root/personal_assistant/code git clone https://github.com/InternLM/InternLM.git \u5c06 /root/code/InternLM/web_demo.py \u4e2d 29 \u884c \u548c 33 \u884c\u7684\u6a21\u578b\u8def\u5f84\u66f4\u6362\u4e3aMerge\u540e\u5b58\u653e\u53c2\u6570\u7684\u8def\u5f84 /root/personal_assistant/config/work_dirs/hf_merge \u8fd0\u884c /root/personal_assistant/code/InternLM \u76ee\u5f55\u4e0b\u7684 web_demo.py \u6587\u4ef6\uff0c\u5c06\u7aef\u53e3\u6620\u5c04\u5230\u672c\u5730 streamlit run /root/personal_assistant/code/InternLM/web_demo.py --server.address 127 .0.0.1 --server.port 6006","title":"Demo"},{"location":"llm/internlm/lec4/#_37","text":"\u5fae\u8c03\u524d \uff08\u56de\u7b54\u6bd4\u8f83\u5b98\u65b9\uff09 \u5fae\u8c03\u540e \uff08\u5bf9\u81ea\u5df1\u7684\u8eab\u4efd\u6709\u4e86\u6e05\u6670\u7684\u8ba4\u77e5\uff09","title":"\u6548\u679c"},{"location":"llm/internlm/lec4/#_38","text":"\u5c06\u8bad\u7ec3\u597d\u7684Adapter\u6a21\u578b\u6743\u91cd\u4e0a\u4f20\u5230 OpenXLab\u3001Hugging Face \u6216\u8005 MoelScope \u4efb\u4e00\u4e00\u5e73\u53f0\u3002 \u901a\u8fc7 scp \u5c06 hf \u6587\u4ef6\u5939\u4e0b\u8f7d\u5230\u672c\u5730\uff0c\u8fdb\u5165 HuggingFace \u65b0\u5efa model\uff0c\u4e0a\u4f20\u6a21\u578b\u6587\u4ef6\u3002Adapter \u6743\u91cd\u5730\u5740\uff1a https://huggingface.co/jujimeizuo/assistant-jujimeizuo/tree/main \u5c06\u8bad\u7ec3\u597d\u540e\u7684\u6a21\u578b\u5e94\u7528\u90e8\u7f72\u5230 OpenXLab \u5e73\u53f0\uff0c\u53c2\u8003\u90e8\u7f72\u6587\u6863\u8bf7\u8bbf\u95ee\uff1a https://aicarrier.feishu.cn/docx/MQH6dygcKolG37x0ekcc4oZhnCe \u901a\u8fc7 openxlab \u5e93\u4e0a\u4f20\u6a21\u578b\u6587\u4ef6 \u65b0\u5efa github \u7684 repo( assistant_jujimeizuo )\uff0c\u4ece OpenXLab \u4e0a\u62c9\u53d6\u4e0a\u4f20\u7684\u6a21\u578b\uff0c\u6784\u5efa streamlit \u7684 app\uff0c\u540c\u6b65\u5230 OpenXLab \u4e0a\u3002 \u5e94\u7528\u670d\u52a1\u5730\u5740\uff1a https://openxlab.org.cn/apps/detail/jujimeizuo/assistant_jujimeizuo","title":"\u8fdb\u9636\u4f5c\u4e1a"},{"location":"llm/internlm/lec5/","text":"LMDeploy \u5927\u6a21\u578b\u91cf\u5316\u90e8\u7f72\u5b9e\u8df5 \u00b6 \u7ea6 1186 \u4e2a\u5b57 66 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 5 \u5206\u949f Abstract \u5b66\u4e60\u81ea LMDeploy \u5927\u6a21\u578b\u91cf\u5316\u90e8\u7f72\u5b9e\u8df5 \u5927\u6a21\u578b\u90e8\u7f72\u80cc\u666f \u00b6 \u6a21\u578b\u90e8\u7f72 \u00b6 \u5b9a\u4e49 \u5c06\u8bad\u7ec3\u597d\u7684\u6a21\u578b\u5728\u7279\u5b9a\u8f6f\u786c\u4ef6\u73af\u5883\u4e2d\u542f\u52a8\u7684\u8fc7\u7a0b\uff0c\u4f7f\u6a21\u578b\u80fd\u591f\u63a5\u53d7\u8f93\u5165\u5e76\u8fd4\u56de\u9884\u6d4b\u7ed3\u679c \u4e3a\u4e86\u6ee1\u8db3\u6027\u80fd\u548c\u6548\u7387\u7684\u9700\u6c42\uff0c\u5e38\u5e38\u9700\u8981\u5bf9\u6a21\u578b\u8fdb\u884c\u4f18\u5316\uff0c\u4f8b\u5982\u6a21\u578b\u538b\u7f29\u548c\u786c\u4ef6\u52a0\u901f \u4ea7\u54c1\u5f62\u6001 \u4e91\u7aef\u3001\u8fb9\u7f18\u8ba1\u7b97\u7aef\u3001\u79fb\u52a8\u7aef \u8ba1\u7b97\u8bbe\u5907 CPU\u3001GPU\u3001TPU\u3001NPU \u7b49 \u5927\u6a21\u578b\u7279\u70b9 \u00b6 \u5185\u5b58\u5f00\u9500\u5de8\u5927 \u5e9e\u5927\u53c2\u6570\u91cf\uff0c7B \u6a21\u578b\u4ec5\u6743\u91cd\u5c31\u9700\u8981 14+G \u5185\u5b58 \u91c7\u7528\u81ea\u56de\u5f52\u751f\u6210 token\uff0c\u9700\u8981\u7f13\u5b58 Attention \u7684 k/v\uff0c\u5e26\u6765\u5de8\u5927\u7684\u5185\u5b58\u5f00\u9500 \u52a8\u6001 shape \u8bf7\u6c42\u6570\u4e0d\u56fa\u5b9a Token \u9010\u4e2a\u751f\u6210\uff0c\u4e14\u6570\u91cf\u4e0d\u5b9a \u76f8\u5bf9\u89c6\u89c9\u6a21\u578b\uff0cLLM \u7ed3\u6784\u7b80\u5355 Transformers \u7ed3\u6784\uff0c\u5927\u90e8\u5206\u662f decoder-only \u5927\u6a21\u578b\u90e8\u7f72\u6311\u6218 \u00b6 \u8bbe\u5907 \u5982\u4f55\u5e94\u5bf9\u5de8\u5927\u7684\u5b58\u50a8\u95ee\u9898\uff1f\u4f4e\u5b58\u50a8\u8bbe\u5907\uff08\u6d88\u8d39\u7ea7\u663e\u5361\u3001\u624b\u673a\u7b49\uff09\u5982\u4f55\u90e8\u7f72\uff1f \u63a8\u7406 \u5982\u4f55\u52a0\u901f token \u7684\u751f\u6210\u901f\u5ea6 \u5982\u4f55\u89e3\u51b3\u52a8\u6001 shape\uff0c\u8ba9\u63a8\u7406\u53ef\u4ee5\u4e0d\u95f4\u65ad \u5982\u4f55\u6709\u6548\u76d1\u7763\u548c\u5229\u7528\u5185\u5b58 \u670d\u52a1 \u5982\u4f55\u63d0\u5347\u7cfb\u7edf\u6574\u4f53\u541e\u5410\u91cf\uff1f \u5bf9\u4e8e\u4e2a\u4f53\u7528\u6237\uff0c\u5982\u4f55\u964d\u4f4e\u54cd\u5e94\u65f6\u95f4\uff1f \u5927\u6a21\u578b\u90e8\u7f72\u65b9\u6848 \u00b6 \u6280\u672f\u70b9 \u6a21\u578b\u5e76\u884c \u4f4e\u6bd4\u7279\u91cf\u5316 Page Attention transformer \u8ba1\u7b97\u548c\u8bbf\u5b58\u4f18\u5316 Continuous Batch ... \u65b9\u6848 huggingface Transformers \u4e13\u95e8\u7684\u63a8\u7406\u52a0\u901f\u6846\u67b6 \u4e91\u7aef lmdeploy vllm tensorrt-llm deepspeed \u79fb\u52a8\u7aef llama.cpp mlc-llm ... LMDeploy \u7b80\u4ecb \u00b6 LMDeploy \u662f LLM \u5728 Nvidia \u8bbe\u5907\u4e0a\u90e8\u7f72\u7684\u5168\u6d41\u7a0b\u89e3\u51b3\u65b9\u6848\uff0c\u5305\u62ec\u6a21\u578b\u8f7b\u91cf\u5316\u3001\u63a8\u7406\u3001\u670d\u52a1\u3002 \u6838\u5fc3\u529f\u80fd \u00b6 \u91cf\u5316 \u00b6 \u4e3a\u4ec0\u4e48 Weight Only \u91cf\u5316\uff1f 4bit Weight Only \u91cf\u5316\uff0c\u5c06 FP16 \u7684\u6a21\u578b\u6743\u91cd\u91cf\u5316\u4e3a INT4\uff0c\u8bbf\u5b58\u91cf\u76f4\u63a5\u964d\u4e3a FP16 \u7684\u6a21\u578b 1/4\uff0c\u5927\u5e45\u964d\u4f4e\u4e86\u8bbf\u5b58\u6210\u672c\uff0c\u63d0\u9ad8 Decoding \u7684\u901f\u5ea6\u3002 \u52a0\u901f\u7684\u540c\u65f6\u8fd8\u8282\u7701\u663e\u5b58\uff0c\u540c\u6837\u7684\u8bbe\u5907\u80fd\u591f\u652f\u6301\u66f4\u5927\u7684\u6a21\u578b\u4ee5\u53ca\u66f4\u957f\u7684\u5bf9\u8bdd\u957f\u5ea6\u3002 \u5982\u4f55\u505a Weight Only \u91cf\u5316\uff1f LMDeploy \u4f7f\u7528 MIT HAN LAB \u5f00\u6e90\u7684 AWQ \u7b97\u6cd5\uff0c\u91cf\u5316\u4e3a 4bit \u6a21\u578b \u63a8\u7406\u65f6\uff0c\u5148\u628a 4bit \u6743\u91cd\uff0c \u53cd\u91cf\u5316\u56deFP16 \uff08\u5728 Kernel \u5185\u90e8\u8fdb\u884c\uff0c\u4ece Global Memory \u8bfb\u53d6\u65f6\u4ecd\u662f 4bit\uff09\uff0c\u4f9d\u65e7\u4f7f\u7528\u7684\u662f FP16 \u8ba1\u7b97 \u60f3\u8f83\u4e8e\u793e\u533a\u4f7f\u7528\u6700\u591a\u7684 GPTQ \u7b97\u6cd5\uff0cAWQ \u7684\u63a8\u7406\u901f\u5ea6\u66f4\u5feb\uff0c\u91cf\u5316\u65f6\u95f4\u66f4\u77ed \u63a8\u7406\u5f15\u64ce TurboMind \u00b6 \u6301\u7eed\u6279\u5904\u7406 \u6709\u72b6\u6001\u7684\u63a8\u7406 \u9ad8\u6027\u80fd cuda Kernel Blocked k/v cache \u63a8\u7406\u670d\u52a1 api server \u00b6 lmdeploy serve api_server InternLM/internlm-chat-7b \\ --model-name internlm-chat-7b --server-port 8080 \u670d\u52a1\u90e8\u7f72 \u00b6 \u6a21\u578b\u8f6c\u6362 \u00b6 \u4f7f\u7528 TurboMind \u63a8\u7406\u6a21\u578b\u9700\u8981\u5148\u5c06\u6a21\u578b\u8f6c\u5316\u4e3a TurboMind \u7684\u683c\u5f0f\uff0c\u76ee\u524d\u652f\u6301\u5728\u7ebf\u8f6c\u6362\u548c\u79bb\u7ebf\u8f6c\u6362\u4e24\u79cd\u5f62\u5f0f\u3002\u5728\u7ebf\u8f6c\u6362\u53ef\u4ee5\u76f4\u63a5\u52a0\u8f7d Huggingface \u6a21\u578b\uff0c\u79bb\u7ebf\u8f6c\u6362\u9700\u9700\u8981\u5148\u4fdd\u5b58\u6a21\u578b\u518d\u52a0\u8f7d\u3002 \u5728\u7ebf\u8f6c\u6362 \u00b6 lmdeploy \u652f\u6301\u76f4\u63a5\u8bfb\u53d6 Huggingface \u6a21\u578b\u6743\u91cd\uff0c\u76ee\u524d\u5171\u652f\u6301\u4e09\u79cd\u7c7b\u578b\uff1a \u5728 huggingface.co \u4e0a\u9762\u901a\u8fc7 lmdeploy \u91cf\u5316\u7684\u6a21\u578b\uff0c\u5982 llama2-70b-4bit, internlm-chat-20b-4bit huggingface.co \u4e0a\u9762\u5176\u4ed6 LM \u6a21\u578b\uff0c\u5982 Qwen/Qwen-7B-Chat \u5728\u7ebf\u8f6c\u6362 \u52a0\u8f7d Huggingface \u6a21\u578b # \u9700\u8981\u80fd\u8bbf\u95ee Huggingface \u7684\u7f51\u7edc\u73af\u5883 lmdeploy chat turbomind internlm/internlm-chat-20b-4bit --model-name internlm-chat-20b lmdeploy chat turbomind Qwen/Qwen-7B-Chat --model-name qwen-7b \u76f4\u63a5\u542f\u52a8\u672c\u5730\u7684 Huggingface \u6a21\u578b lmdeploy chat turbomind /share/temp/model_repos/internlm-chat-7b/ --model-name internlm-chat-7b \u79bb\u7ebf\u8f6c\u6362 \u00b6 \u79bb\u7ebf\u8f6c\u6362\u9700\u8981\u5728\u542f\u52a8\u670d\u52a1\u4e4b\u524d\uff0c\u5c06\u6a21\u578b\u8f6c\u4e3a lmdeploy TurboMind \u7684\u683c\u5f0f\uff0c\u6267\u884c\u5b8c\u6210\u540e\u5c06\u4f1a\u5728\u5f53\u524d\u76ee\u5f55\u751f\u6210\u4e00\u4e2a workspace \u7684\u6587\u4ef6\u5939\u3002\u8fd9\u91cc\u9762\u5305\u542b\u7684\u5c31\u662f TurboMind \u548c Triton \u201c\u6a21\u578b\u63a8\u7406\u201d\u9700\u8981\u5230\u7684\u6587\u4ef6\u3002 lmdeploy convert internlm-chat-7b /path/to/internlm-chat-7b TurboMind \u63a8\u7406+\u547d\u4ee4\u884c\u672c\u5730\u5bf9\u8bdd \u00b6 \u6a21\u578b\u8f6c\u6362\u5b8c\u6210\u540e\uff0c\u6211\u4eec\u5c31\u5177\u5907\u4e86\u4f7f\u7528\u6a21\u578b\u63a8\u7406\u7684\u6761\u4ef6\uff0c\u63a5\u4e0b\u6765\u5c31\u53ef\u4ee5\u8fdb\u884c\u771f\u6b63\u7684\u6a21\u578b\u63a8\u7406\u73af\u8282\u3002 lmdeploy chat turbomind ./workspace TurboMind \u63a8\u7406+API\u670d\u52a1 \u00b6 \u4e0a\u9762\u76f4\u63a5\u7528\u547d\u4ee4\u884c\u542f\u52a8 Client\uff0c\u63a5\u4e0b\u6765\u8fd0\u7528 lmdepoy \u8fdb\u884c\u670d\u52a1\u5316\u3002 # ApiServer+Turbomind api_server => AsyncEngine => TurboMind lmdeploy serve api_server ./workspace \\ --server_name 0 .0.0.0 \\ --server_port 23333 \\ --instance_num 64 \\ --tp 1 \u65b0\u5f00\u4e00\u4e2a\u7a97\u53e3\uff0c\u6267\u884c\u4e0b\u9762\u7684\u547d\u4ee4\u6216\u76f4\u63a5\u6253\u5f00 http://{host}:23333 # ChatApiClient+ApiServer\uff08\u6ce8\u610f\u662fhttp\u534f\u8bae\uff0c\u9700\u8981\u52a0http\uff09 lmdeploy serve api_client http://localhost:23333 Web Demo \u5bf9\u8bdd \u00b6 TurboMind \u670d\u52a1\u4f5c\u4e3a\u540e\u7aef \u00b6 \u542f\u52a8\u4f5c\u4e3a\u524d\u7aef\u7684 Gradio # Gradio+ApiServer\u3002\u5fc5\u987b\u5148\u5f00\u542f Server\uff0c\u6b64\u65f6 Gradio \u4e3a Client lmdeploy serve gradio http://0.0.0.0:23333 \\ --server_name 0 .0.0.0 \\ --server_port 6006 \\ --restful_api True TurboMind \u63a8\u7406\u4f5c\u4e3a\u540e\u7aef \u00b6 # Gradio+Turbomind(local) lmdeploy serve gradio ./workspace TurboMind \u63a8\u7406+Python \u4ee3\u7801\u96c6\u6210 \u00b6 from lmdeploy import turbomind as tm # load model model_path = \"/root/share/temp/model_repos/internlm-chat-7b/\" tm_model = tm . TurboMind . from_pretrained ( model_path , model_name = 'internlm-chat-20b' ) generator = tm_model . create_instance () # process query query = \"\u4f60\u597d\u554a\u5144\u561a\" prompt = tm_model . model . get_prompt ( query ) input_ids = tm_model . tokenizer . encode ( prompt ) # inference for outputs in generator . stream_infer ( session_id = 0 , input_ids = [ input_ids ]): res , tokens = outputs [ 0 ] response = tm_model . tokenizer . decode ( res . tolist ()) print ( response ) \u6a21\u578b\u91cf\u5316 \u00b6 \u91cf\u5316\u662f\u4e00\u79cd\u4ee5\u53c2\u6570\u6216\u8ba1\u7b97\u4e2d\u95f4\u7ed3\u679c\u7cbe\u5ea6\u4e0b\u964d\u6362\u7a7a\u95f4\u8282\u7701\uff08\u4ee5\u53ca\u540c\u65f6\u5e26\u6765\u7684\u6027\u80fd\u63d0\u5347\uff09\u7684\u7b56\u7565\u3002 KV Cache \u91cf\u5316 \u00b6 \u8ba1\u7b97 minmax\u3002\u901a\u8fc7\u8ba1\u7b97\u7ed9\u5b9a\u8f93\u5165\u6837\u672c\u5728\u6bcf\u4e00\u5c42\u4e0d\u540c\u4f4d\u7f6e\u8ba1\u7b97\u7ed3\u679c\u7684\u7edf\u8ba1\u60c5\u51b5\u3002 # \u8ba1\u7b97 minmax lmdeploy lite calibrate \\ --model /root/share/temp/model_repos/internlm-chat-7b/ \\ --calib_dataset \"c4\" \\ --calib_samples 128 \\ --calib_seqlen 2048 \\ --work_dir ./quant_output \u901a\u8fc7 minmax \u83b7\u53d6\u91cf\u5316\u53c2\u6570\u3002\u83b7\u53d6\u6bcf\u4e00\u5c42\u7684 KV \u4e2d\u5fc3\u503c\uff08zp\uff09\u548c\u7f29\u653e\u503c\uff08scale\uff09\u3002 # \u901a\u8fc7 minmax \u83b7\u53d6\u91cf\u5316\u53c2\u6570 lmdeploy lite kv_qparams \\ --work_dir ./quant_output \\ --turbomind_dir workspace/triton_models/weights/ \\ --kv_sym False \\ --num_tp 1 \u4fee\u6539\u914d\u7f6e\u3002\u4fee\u6539 weights/config.ini \u6587\u4ef6\u3002 W4A16 \u91cf\u5316 \u00b6 W4A16 \u4e2d\u7684 A \u6307 Activation\uff0c\u4fdd\u6301 FP16\uff0c\u53ea\u5bf9\u53c2\u6570\u8fdb\u884c 4bits \u91cf\u5316\u3002 \u540c KV Cache \u91cf\u5316\uff0c\u8ba1\u7b97 minmax\u3002 \u91cf\u5316\u6743\u91cd\u53c2\u6570\u3002\u5229\u7528\u7b2c\u4e00\u6b65\u5f97\u5230\u7684\u7edf\u8ba1\u503c\u5bf9\u53c2\u6570\u8fdb\u884c\u91cf\u5316\u3002 \u7f29\u653e\u53c2\u6570 \u6574\u4f53\u91cf\u5316 # \u91cf\u5316\u6743\u91cd\u6a21\u578b lmdeploy lite auto_awq \\ --model /root/share/temp/model_repos/internlm-chat-7b/ \\ --w_bits 4 \\ --w_group_size 128 \\ --work_dir ./quant_output \u8f6c\u6362\u6210 TurboMind \u683c\u5f0f\u3002 # \u8f6c\u6362\u6a21\u578b\u7684layout\uff0c\u5b58\u653e\u5728\u9ed8\u8ba4\u8def\u5f84 ./workspace \u4e0b lmdeploy convert internlm-chat-7b ./quant_output \\ --model-format awq \\ --group-size 128 \u4f5c\u4e1a \u00b6 \u4f7f\u7528 LMDeploy \u4ee5\u672c\u5730\u5bf9\u8bdd\u3001\u7f51\u9875Gradio\u3001API\u670d\u52a1\u4e2d\u7684\u4e00\u79cd\u65b9\u5f0f\u90e8\u7f72 InternLM-Chat-7B \u6a21\u578b\uff0c\u751f\u6210 300 \u5b57\u7684\u5c0f\u6545\u4e8b\uff08\u9700\u622a\u56fe\uff09 \u672c\u5730\u5bf9\u8bdd Web Gradio API \u670d\u52a1","title":"\u7b2c\u4e94\u8282"},{"location":"llm/internlm/lec5/#lmdeploy","text":"\u7ea6 1186 \u4e2a\u5b57 66 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 5 \u5206\u949f Abstract \u5b66\u4e60\u81ea LMDeploy \u5927\u6a21\u578b\u91cf\u5316\u90e8\u7f72\u5b9e\u8df5","title":"LMDeploy \u5927\u6a21\u578b\u91cf\u5316\u90e8\u7f72\u5b9e\u8df5"},{"location":"llm/internlm/lec5/#_1","text":"","title":"\u5927\u6a21\u578b\u90e8\u7f72\u80cc\u666f"},{"location":"llm/internlm/lec5/#_2","text":"\u5b9a\u4e49 \u5c06\u8bad\u7ec3\u597d\u7684\u6a21\u578b\u5728\u7279\u5b9a\u8f6f\u786c\u4ef6\u73af\u5883\u4e2d\u542f\u52a8\u7684\u8fc7\u7a0b\uff0c\u4f7f\u6a21\u578b\u80fd\u591f\u63a5\u53d7\u8f93\u5165\u5e76\u8fd4\u56de\u9884\u6d4b\u7ed3\u679c \u4e3a\u4e86\u6ee1\u8db3\u6027\u80fd\u548c\u6548\u7387\u7684\u9700\u6c42\uff0c\u5e38\u5e38\u9700\u8981\u5bf9\u6a21\u578b\u8fdb\u884c\u4f18\u5316\uff0c\u4f8b\u5982\u6a21\u578b\u538b\u7f29\u548c\u786c\u4ef6\u52a0\u901f \u4ea7\u54c1\u5f62\u6001 \u4e91\u7aef\u3001\u8fb9\u7f18\u8ba1\u7b97\u7aef\u3001\u79fb\u52a8\u7aef \u8ba1\u7b97\u8bbe\u5907 CPU\u3001GPU\u3001TPU\u3001NPU \u7b49","title":"\u6a21\u578b\u90e8\u7f72"},{"location":"llm/internlm/lec5/#_3","text":"\u5185\u5b58\u5f00\u9500\u5de8\u5927 \u5e9e\u5927\u53c2\u6570\u91cf\uff0c7B \u6a21\u578b\u4ec5\u6743\u91cd\u5c31\u9700\u8981 14+G \u5185\u5b58 \u91c7\u7528\u81ea\u56de\u5f52\u751f\u6210 token\uff0c\u9700\u8981\u7f13\u5b58 Attention \u7684 k/v\uff0c\u5e26\u6765\u5de8\u5927\u7684\u5185\u5b58\u5f00\u9500 \u52a8\u6001 shape \u8bf7\u6c42\u6570\u4e0d\u56fa\u5b9a Token \u9010\u4e2a\u751f\u6210\uff0c\u4e14\u6570\u91cf\u4e0d\u5b9a \u76f8\u5bf9\u89c6\u89c9\u6a21\u578b\uff0cLLM \u7ed3\u6784\u7b80\u5355 Transformers \u7ed3\u6784\uff0c\u5927\u90e8\u5206\u662f decoder-only","title":"\u5927\u6a21\u578b\u7279\u70b9"},{"location":"llm/internlm/lec5/#_4","text":"\u8bbe\u5907 \u5982\u4f55\u5e94\u5bf9\u5de8\u5927\u7684\u5b58\u50a8\u95ee\u9898\uff1f\u4f4e\u5b58\u50a8\u8bbe\u5907\uff08\u6d88\u8d39\u7ea7\u663e\u5361\u3001\u624b\u673a\u7b49\uff09\u5982\u4f55\u90e8\u7f72\uff1f \u63a8\u7406 \u5982\u4f55\u52a0\u901f token \u7684\u751f\u6210\u901f\u5ea6 \u5982\u4f55\u89e3\u51b3\u52a8\u6001 shape\uff0c\u8ba9\u63a8\u7406\u53ef\u4ee5\u4e0d\u95f4\u65ad \u5982\u4f55\u6709\u6548\u76d1\u7763\u548c\u5229\u7528\u5185\u5b58 \u670d\u52a1 \u5982\u4f55\u63d0\u5347\u7cfb\u7edf\u6574\u4f53\u541e\u5410\u91cf\uff1f \u5bf9\u4e8e\u4e2a\u4f53\u7528\u6237\uff0c\u5982\u4f55\u964d\u4f4e\u54cd\u5e94\u65f6\u95f4\uff1f","title":"\u5927\u6a21\u578b\u90e8\u7f72\u6311\u6218"},{"location":"llm/internlm/lec5/#_5","text":"\u6280\u672f\u70b9 \u6a21\u578b\u5e76\u884c \u4f4e\u6bd4\u7279\u91cf\u5316 Page Attention transformer \u8ba1\u7b97\u548c\u8bbf\u5b58\u4f18\u5316 Continuous Batch ... \u65b9\u6848 huggingface Transformers \u4e13\u95e8\u7684\u63a8\u7406\u52a0\u901f\u6846\u67b6 \u4e91\u7aef lmdeploy vllm tensorrt-llm deepspeed \u79fb\u52a8\u7aef llama.cpp mlc-llm ...","title":"\u5927\u6a21\u578b\u90e8\u7f72\u65b9\u6848"},{"location":"llm/internlm/lec5/#lmdeploy_1","text":"LMDeploy \u662f LLM \u5728 Nvidia \u8bbe\u5907\u4e0a\u90e8\u7f72\u7684\u5168\u6d41\u7a0b\u89e3\u51b3\u65b9\u6848\uff0c\u5305\u62ec\u6a21\u578b\u8f7b\u91cf\u5316\u3001\u63a8\u7406\u3001\u670d\u52a1\u3002","title":"LMDeploy \u7b80\u4ecb"},{"location":"llm/internlm/lec5/#_6","text":"","title":"\u6838\u5fc3\u529f\u80fd"},{"location":"llm/internlm/lec5/#_7","text":"\u4e3a\u4ec0\u4e48 Weight Only \u91cf\u5316\uff1f 4bit Weight Only \u91cf\u5316\uff0c\u5c06 FP16 \u7684\u6a21\u578b\u6743\u91cd\u91cf\u5316\u4e3a INT4\uff0c\u8bbf\u5b58\u91cf\u76f4\u63a5\u964d\u4e3a FP16 \u7684\u6a21\u578b 1/4\uff0c\u5927\u5e45\u964d\u4f4e\u4e86\u8bbf\u5b58\u6210\u672c\uff0c\u63d0\u9ad8 Decoding \u7684\u901f\u5ea6\u3002 \u52a0\u901f\u7684\u540c\u65f6\u8fd8\u8282\u7701\u663e\u5b58\uff0c\u540c\u6837\u7684\u8bbe\u5907\u80fd\u591f\u652f\u6301\u66f4\u5927\u7684\u6a21\u578b\u4ee5\u53ca\u66f4\u957f\u7684\u5bf9\u8bdd\u957f\u5ea6\u3002 \u5982\u4f55\u505a Weight Only \u91cf\u5316\uff1f LMDeploy \u4f7f\u7528 MIT HAN LAB \u5f00\u6e90\u7684 AWQ \u7b97\u6cd5\uff0c\u91cf\u5316\u4e3a 4bit \u6a21\u578b \u63a8\u7406\u65f6\uff0c\u5148\u628a 4bit \u6743\u91cd\uff0c \u53cd\u91cf\u5316\u56deFP16 \uff08\u5728 Kernel \u5185\u90e8\u8fdb\u884c\uff0c\u4ece Global Memory \u8bfb\u53d6\u65f6\u4ecd\u662f 4bit\uff09\uff0c\u4f9d\u65e7\u4f7f\u7528\u7684\u662f FP16 \u8ba1\u7b97 \u60f3\u8f83\u4e8e\u793e\u533a\u4f7f\u7528\u6700\u591a\u7684 GPTQ \u7b97\u6cd5\uff0cAWQ \u7684\u63a8\u7406\u901f\u5ea6\u66f4\u5feb\uff0c\u91cf\u5316\u65f6\u95f4\u66f4\u77ed","title":"\u91cf\u5316"},{"location":"llm/internlm/lec5/#turbomind","text":"\u6301\u7eed\u6279\u5904\u7406 \u6709\u72b6\u6001\u7684\u63a8\u7406 \u9ad8\u6027\u80fd cuda Kernel Blocked k/v cache","title":"\u63a8\u7406\u5f15\u64ce TurboMind"},{"location":"llm/internlm/lec5/#api-server","text":"lmdeploy serve api_server InternLM/internlm-chat-7b \\ --model-name internlm-chat-7b --server-port 8080","title":"\u63a8\u7406\u670d\u52a1 api server"},{"location":"llm/internlm/lec5/#_8","text":"","title":"\u670d\u52a1\u90e8\u7f72"},{"location":"llm/internlm/lec5/#_9","text":"\u4f7f\u7528 TurboMind \u63a8\u7406\u6a21\u578b\u9700\u8981\u5148\u5c06\u6a21\u578b\u8f6c\u5316\u4e3a TurboMind \u7684\u683c\u5f0f\uff0c\u76ee\u524d\u652f\u6301\u5728\u7ebf\u8f6c\u6362\u548c\u79bb\u7ebf\u8f6c\u6362\u4e24\u79cd\u5f62\u5f0f\u3002\u5728\u7ebf\u8f6c\u6362\u53ef\u4ee5\u76f4\u63a5\u52a0\u8f7d Huggingface \u6a21\u578b\uff0c\u79bb\u7ebf\u8f6c\u6362\u9700\u9700\u8981\u5148\u4fdd\u5b58\u6a21\u578b\u518d\u52a0\u8f7d\u3002","title":"\u6a21\u578b\u8f6c\u6362"},{"location":"llm/internlm/lec5/#_10","text":"lmdeploy \u652f\u6301\u76f4\u63a5\u8bfb\u53d6 Huggingface \u6a21\u578b\u6743\u91cd\uff0c\u76ee\u524d\u5171\u652f\u6301\u4e09\u79cd\u7c7b\u578b\uff1a \u5728 huggingface.co \u4e0a\u9762\u901a\u8fc7 lmdeploy \u91cf\u5316\u7684\u6a21\u578b\uff0c\u5982 llama2-70b-4bit, internlm-chat-20b-4bit huggingface.co \u4e0a\u9762\u5176\u4ed6 LM \u6a21\u578b\uff0c\u5982 Qwen/Qwen-7B-Chat \u5728\u7ebf\u8f6c\u6362 \u52a0\u8f7d Huggingface \u6a21\u578b # \u9700\u8981\u80fd\u8bbf\u95ee Huggingface \u7684\u7f51\u7edc\u73af\u5883 lmdeploy chat turbomind internlm/internlm-chat-20b-4bit --model-name internlm-chat-20b lmdeploy chat turbomind Qwen/Qwen-7B-Chat --model-name qwen-7b \u76f4\u63a5\u542f\u52a8\u672c\u5730\u7684 Huggingface \u6a21\u578b lmdeploy chat turbomind /share/temp/model_repos/internlm-chat-7b/ --model-name internlm-chat-7b","title":"\u5728\u7ebf\u8f6c\u6362"},{"location":"llm/internlm/lec5/#_11","text":"\u79bb\u7ebf\u8f6c\u6362\u9700\u8981\u5728\u542f\u52a8\u670d\u52a1\u4e4b\u524d\uff0c\u5c06\u6a21\u578b\u8f6c\u4e3a lmdeploy TurboMind \u7684\u683c\u5f0f\uff0c\u6267\u884c\u5b8c\u6210\u540e\u5c06\u4f1a\u5728\u5f53\u524d\u76ee\u5f55\u751f\u6210\u4e00\u4e2a workspace \u7684\u6587\u4ef6\u5939\u3002\u8fd9\u91cc\u9762\u5305\u542b\u7684\u5c31\u662f TurboMind \u548c Triton \u201c\u6a21\u578b\u63a8\u7406\u201d\u9700\u8981\u5230\u7684\u6587\u4ef6\u3002 lmdeploy convert internlm-chat-7b /path/to/internlm-chat-7b","title":"\u79bb\u7ebf\u8f6c\u6362"},{"location":"llm/internlm/lec5/#turbomind_1","text":"\u6a21\u578b\u8f6c\u6362\u5b8c\u6210\u540e\uff0c\u6211\u4eec\u5c31\u5177\u5907\u4e86\u4f7f\u7528\u6a21\u578b\u63a8\u7406\u7684\u6761\u4ef6\uff0c\u63a5\u4e0b\u6765\u5c31\u53ef\u4ee5\u8fdb\u884c\u771f\u6b63\u7684\u6a21\u578b\u63a8\u7406\u73af\u8282\u3002 lmdeploy chat turbomind ./workspace","title":"TurboMind \u63a8\u7406+\u547d\u4ee4\u884c\u672c\u5730\u5bf9\u8bdd"},{"location":"llm/internlm/lec5/#turbomind-api","text":"\u4e0a\u9762\u76f4\u63a5\u7528\u547d\u4ee4\u884c\u542f\u52a8 Client\uff0c\u63a5\u4e0b\u6765\u8fd0\u7528 lmdepoy \u8fdb\u884c\u670d\u52a1\u5316\u3002 # ApiServer+Turbomind api_server => AsyncEngine => TurboMind lmdeploy serve api_server ./workspace \\ --server_name 0 .0.0.0 \\ --server_port 23333 \\ --instance_num 64 \\ --tp 1 \u65b0\u5f00\u4e00\u4e2a\u7a97\u53e3\uff0c\u6267\u884c\u4e0b\u9762\u7684\u547d\u4ee4\u6216\u76f4\u63a5\u6253\u5f00 http://{host}:23333 # ChatApiClient+ApiServer\uff08\u6ce8\u610f\u662fhttp\u534f\u8bae\uff0c\u9700\u8981\u52a0http\uff09 lmdeploy serve api_client http://localhost:23333","title":"TurboMind \u63a8\u7406+API\u670d\u52a1"},{"location":"llm/internlm/lec5/#web-demo","text":"","title":"Web Demo \u5bf9\u8bdd"},{"location":"llm/internlm/lec5/#turbomind_2","text":"\u542f\u52a8\u4f5c\u4e3a\u524d\u7aef\u7684 Gradio # Gradio+ApiServer\u3002\u5fc5\u987b\u5148\u5f00\u542f Server\uff0c\u6b64\u65f6 Gradio \u4e3a Client lmdeploy serve gradio http://0.0.0.0:23333 \\ --server_name 0 .0.0.0 \\ --server_port 6006 \\ --restful_api True","title":"TurboMind \u670d\u52a1\u4f5c\u4e3a\u540e\u7aef"},{"location":"llm/internlm/lec5/#turbomind_3","text":"# Gradio+Turbomind(local) lmdeploy serve gradio ./workspace","title":"TurboMind \u63a8\u7406\u4f5c\u4e3a\u540e\u7aef"},{"location":"llm/internlm/lec5/#turbomind-python","text":"from lmdeploy import turbomind as tm # load model model_path = \"/root/share/temp/model_repos/internlm-chat-7b/\" tm_model = tm . TurboMind . from_pretrained ( model_path , model_name = 'internlm-chat-20b' ) generator = tm_model . create_instance () # process query query = \"\u4f60\u597d\u554a\u5144\u561a\" prompt = tm_model . model . get_prompt ( query ) input_ids = tm_model . tokenizer . encode ( prompt ) # inference for outputs in generator . stream_infer ( session_id = 0 , input_ids = [ input_ids ]): res , tokens = outputs [ 0 ] response = tm_model . tokenizer . decode ( res . tolist ()) print ( response )","title":"TurboMind \u63a8\u7406+Python \u4ee3\u7801\u96c6\u6210"},{"location":"llm/internlm/lec5/#_12","text":"\u91cf\u5316\u662f\u4e00\u79cd\u4ee5\u53c2\u6570\u6216\u8ba1\u7b97\u4e2d\u95f4\u7ed3\u679c\u7cbe\u5ea6\u4e0b\u964d\u6362\u7a7a\u95f4\u8282\u7701\uff08\u4ee5\u53ca\u540c\u65f6\u5e26\u6765\u7684\u6027\u80fd\u63d0\u5347\uff09\u7684\u7b56\u7565\u3002","title":"\u6a21\u578b\u91cf\u5316"},{"location":"llm/internlm/lec5/#kv-cache","text":"\u8ba1\u7b97 minmax\u3002\u901a\u8fc7\u8ba1\u7b97\u7ed9\u5b9a\u8f93\u5165\u6837\u672c\u5728\u6bcf\u4e00\u5c42\u4e0d\u540c\u4f4d\u7f6e\u8ba1\u7b97\u7ed3\u679c\u7684\u7edf\u8ba1\u60c5\u51b5\u3002 # \u8ba1\u7b97 minmax lmdeploy lite calibrate \\ --model /root/share/temp/model_repos/internlm-chat-7b/ \\ --calib_dataset \"c4\" \\ --calib_samples 128 \\ --calib_seqlen 2048 \\ --work_dir ./quant_output \u901a\u8fc7 minmax \u83b7\u53d6\u91cf\u5316\u53c2\u6570\u3002\u83b7\u53d6\u6bcf\u4e00\u5c42\u7684 KV \u4e2d\u5fc3\u503c\uff08zp\uff09\u548c\u7f29\u653e\u503c\uff08scale\uff09\u3002 # \u901a\u8fc7 minmax \u83b7\u53d6\u91cf\u5316\u53c2\u6570 lmdeploy lite kv_qparams \\ --work_dir ./quant_output \\ --turbomind_dir workspace/triton_models/weights/ \\ --kv_sym False \\ --num_tp 1 \u4fee\u6539\u914d\u7f6e\u3002\u4fee\u6539 weights/config.ini \u6587\u4ef6\u3002","title":"KV Cache \u91cf\u5316"},{"location":"llm/internlm/lec5/#w4a16","text":"W4A16 \u4e2d\u7684 A \u6307 Activation\uff0c\u4fdd\u6301 FP16\uff0c\u53ea\u5bf9\u53c2\u6570\u8fdb\u884c 4bits \u91cf\u5316\u3002 \u540c KV Cache \u91cf\u5316\uff0c\u8ba1\u7b97 minmax\u3002 \u91cf\u5316\u6743\u91cd\u53c2\u6570\u3002\u5229\u7528\u7b2c\u4e00\u6b65\u5f97\u5230\u7684\u7edf\u8ba1\u503c\u5bf9\u53c2\u6570\u8fdb\u884c\u91cf\u5316\u3002 \u7f29\u653e\u53c2\u6570 \u6574\u4f53\u91cf\u5316 # \u91cf\u5316\u6743\u91cd\u6a21\u578b lmdeploy lite auto_awq \\ --model /root/share/temp/model_repos/internlm-chat-7b/ \\ --w_bits 4 \\ --w_group_size 128 \\ --work_dir ./quant_output \u8f6c\u6362\u6210 TurboMind \u683c\u5f0f\u3002 # \u8f6c\u6362\u6a21\u578b\u7684layout\uff0c\u5b58\u653e\u5728\u9ed8\u8ba4\u8def\u5f84 ./workspace \u4e0b lmdeploy convert internlm-chat-7b ./quant_output \\ --model-format awq \\ --group-size 128","title":"W4A16 \u91cf\u5316"},{"location":"llm/internlm/lec5/#_13","text":"\u4f7f\u7528 LMDeploy \u4ee5\u672c\u5730\u5bf9\u8bdd\u3001\u7f51\u9875Gradio\u3001API\u670d\u52a1\u4e2d\u7684\u4e00\u79cd\u65b9\u5f0f\u90e8\u7f72 InternLM-Chat-7B \u6a21\u578b\uff0c\u751f\u6210 300 \u5b57\u7684\u5c0f\u6545\u4e8b\uff08\u9700\u622a\u56fe\uff09 \u672c\u5730\u5bf9\u8bdd Web Gradio API \u670d\u52a1","title":"\u4f5c\u4e1a"},{"location":"llm/internlm/lec6/","text":"OpenCompass \u5927\u6a21\u578b\u8bc4\u6d4b \u00b6 \u7ea6 418 \u4e2a\u5b57 14 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f Abstract \u5b66\u4e60\u81ea OpenCompass \u5927\u6a21\u578b\u8bc4\u6d4b OpenCompass \u4ecb\u7ecd \u00b6 \u5728 OpenCompass \u4e2d\u8bc4\u4f30\u4e00\u4e2a\u6a21\u578b\u901a\u5e38\u5305\u62ec\u4ee5\u4e0b\u51e0\u4e2a\u9636\u6bb5\uff1a \u914d\u7f6e -> \u63a8\u7406 -> \u8bc4\u4f30 -> \u53ef\u89c6\u5316 \u3002 \u914d\u7f6e \uff1a\u8fd9\u662f\u6574\u4e2a\u5de5\u4f5c\u6d41\u7684\u8d77\u70b9\u3002\u60a8\u9700\u8981\u914d\u7f6e\u6574\u4e2a\u8bc4\u4f30\u8fc7\u7a0b\uff0c\u9009\u62e9\u8981\u8bc4\u4f30\u7684\u6a21\u578b\u548c\u6570\u636e\u96c6\u3002\u6b64\u5916\uff0c\u8fd8\u53ef\u4ee5\u9009\u62e9\u8bc4\u4f30\u7b56\u7565\u3001\u8ba1\u7b97\u540e\u7aef\u7b49\uff0c\u5e76\u5b9a\u4e49\u663e\u793a\u7ed3\u679c\u7684\u65b9\u5f0f\u3002 \u63a8\u7406\u4e0e\u8bc4\u4f30 \uff1a\u5728\u8fd9\u4e2a\u9636\u6bb5\uff0cOpenCompass \u5c06\u4f1a\u5f00\u59cb\u5bf9\u6a21\u578b\u548c\u6570\u636e\u96c6\u8fdb\u884c\u5e76\u884c\u63a8\u7406\u548c\u8bc4\u4f30\u3002\u63a8\u7406\u9636\u6bb5\u4e3b\u8981\u662f\u8ba9\u6a21\u578b\u4ece\u6570\u636e\u96c6\u4ea7\u751f\u8f93\u51fa\uff0c\u800c\u8bc4\u4f30\u9636\u6bb5\u5219\u662f\u8861\u91cf\u8fd9\u4e9b\u8f93\u51fa\u4e0e\u6807\u51c6\u7b54\u6848\u7684\u5339\u914d\u7a0b\u5ea6\u3002\u8fd9\u4e24\u4e2a\u8fc7\u7a0b\u4f1a\u88ab\u62c6\u5206\u4e3a\u591a\u4e2a\u540c\u65f6\u8fd0\u884c\u7684\u201c\u4efb\u52a1\u201d\u4ee5\u63d0\u9ad8\u6548\u7387\uff0c\u4f46\u8bf7\u6ce8\u610f\uff0c\u5982\u679c\u8ba1\u7b97\u8d44\u6e90\u6709\u9650\uff0c\u8fd9\u79cd\u7b56\u7565\u53ef\u80fd\u4f1a\u4f7f\u8bc4\u6d4b\u53d8\u5f97\u66f4\u6162\u3002 \u53ef\u89c6\u5316 \uff1a\u8bc4\u4f30\u5b8c\u6210\u540e\uff0cOpenCompass \u5c06\u7ed3\u679c\u6574\u7406\u6210\u6613\u8bfb\u7684\u8868\u683c\uff0c\u5e76\u5c06\u5176\u4fdd\u5b58\u4e3a CSV \u548c TXT \u6587\u4ef6\u3002\u4f60\u4e5f\u53ef\u4ee5\u6fc0\u6d3b\u98de\u4e66\u72b6\u6001\u4e0a\u62a5\u529f\u80fd\uff0c\u6b64\u540e\u53ef\u4ee5\u5728\u98de\u4e66\u5ba2\u6237\u7aef\u4e2d\u53ca\u65f6\u83b7\u5f97\u8bc4\u6d4b\u72b6\u6001\u62a5\u544a\u3002 \u5b89\u88c5 & \u4f7f\u7528 \u00b6 \u9762\u5411GPU\u7684\u73af\u5883\u5b89\u88c5 \u00b6 conda create --name opencompass --clone = /root/share/conda_envs/internlm-base source activate opencompass git clone https://github.com/open-compass/opencompass cd opencompass pip install -e . \u6570\u636e\u51c6\u5907 \u00b6 \u5c06\u6570\u636e\u96c6\u653e\u5230 data \u76ee\u5f55\u4e0b\uff0c\u4f8b\u5982\uff1a cp /share/temp/datasets/OpenCompassData-core-20231110.zip /root/opencompass/ unzip OpenCompassData-core-20231110.zip \u67e5\u770b\u652f\u6301\u7684\u6570\u636e\u96c6\u548c\u6a21\u578b \u00b6 # \u5217\u51fa\u6240\u6709\u8ddf internlm \u53ca ceval \u76f8\u5173\u7684\u914d\u7f6e python tools/list_configs.py internlm ceval \u542f\u52a8\u8bc4\u6d4b \u00b6 \u901a\u8fc7 --debug \u6a21\u5f0f\u542f\u52a8\u8bc4\u4f30\uff0c\u4efb\u52a1\u5c06\u6309\u987a\u5e8f\u6267\u884c\uff0c\u5e76\u5b9e\u65f6\u6253\u5370\u8f93\u51fa\u3002 python run.py --datasets ceval_gen --hf-path /share/temp/model_repos/internlm-chat-7b/ --tokenizer-path /share/temp/model_repos/internlm-chat-7b/ --tokenizer-kwargs padding_side = 'left' truncation = 'left' trust_remote_code = True --model-kwargs trust_remote_code = True device_map = 'auto' --max-seq-len 2048 --max-out-len 16 --batch-size 4 --num-gpus 1 --debug \u53ef\u89c6\u5316\u8bc4\u4f30\u7ed3\u679c \u00b6 \u8bc4\u4f30\u5b8c\u6210\u540e\uff0c\u8bc4\u4f30\u7ed3\u679c\u8868\u683c\u5c06\u6253\u5370\u5982\u4e0b\uff1a dataset version metric mode opt350m opt125m --------- --------- -------- ------ --------- --------- siqa e78df3 accuracy gen 21.55 12.44 winograd b6c7ed accuracy ppl 51.23 49.82 \u6240\u6709\u8fd0\u884c\u8f93\u51fa\u5c06\u5b9a\u5411\u5230 outputs/demo/ \u76ee\u5f55 \u4f5c\u4e1a \u00b6 \u4f7f\u7528 OpenCompass \u8bc4\u6d4b InternLM2-Chat-7B \u6a21\u578b\u5728 C-Eval \u6570\u636e\u96c6\u4e0a\u7684\u6027\u80fd","title":"\u7b2c\u516d\u8282"},{"location":"llm/internlm/lec6/#opencompass","text":"\u7ea6 418 \u4e2a\u5b57 14 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f Abstract \u5b66\u4e60\u81ea OpenCompass \u5927\u6a21\u578b\u8bc4\u6d4b","title":"OpenCompass \u5927\u6a21\u578b\u8bc4\u6d4b"},{"location":"llm/internlm/lec6/#opencompass_1","text":"\u5728 OpenCompass \u4e2d\u8bc4\u4f30\u4e00\u4e2a\u6a21\u578b\u901a\u5e38\u5305\u62ec\u4ee5\u4e0b\u51e0\u4e2a\u9636\u6bb5\uff1a \u914d\u7f6e -> \u63a8\u7406 -> \u8bc4\u4f30 -> \u53ef\u89c6\u5316 \u3002 \u914d\u7f6e \uff1a\u8fd9\u662f\u6574\u4e2a\u5de5\u4f5c\u6d41\u7684\u8d77\u70b9\u3002\u60a8\u9700\u8981\u914d\u7f6e\u6574\u4e2a\u8bc4\u4f30\u8fc7\u7a0b\uff0c\u9009\u62e9\u8981\u8bc4\u4f30\u7684\u6a21\u578b\u548c\u6570\u636e\u96c6\u3002\u6b64\u5916\uff0c\u8fd8\u53ef\u4ee5\u9009\u62e9\u8bc4\u4f30\u7b56\u7565\u3001\u8ba1\u7b97\u540e\u7aef\u7b49\uff0c\u5e76\u5b9a\u4e49\u663e\u793a\u7ed3\u679c\u7684\u65b9\u5f0f\u3002 \u63a8\u7406\u4e0e\u8bc4\u4f30 \uff1a\u5728\u8fd9\u4e2a\u9636\u6bb5\uff0cOpenCompass \u5c06\u4f1a\u5f00\u59cb\u5bf9\u6a21\u578b\u548c\u6570\u636e\u96c6\u8fdb\u884c\u5e76\u884c\u63a8\u7406\u548c\u8bc4\u4f30\u3002\u63a8\u7406\u9636\u6bb5\u4e3b\u8981\u662f\u8ba9\u6a21\u578b\u4ece\u6570\u636e\u96c6\u4ea7\u751f\u8f93\u51fa\uff0c\u800c\u8bc4\u4f30\u9636\u6bb5\u5219\u662f\u8861\u91cf\u8fd9\u4e9b\u8f93\u51fa\u4e0e\u6807\u51c6\u7b54\u6848\u7684\u5339\u914d\u7a0b\u5ea6\u3002\u8fd9\u4e24\u4e2a\u8fc7\u7a0b\u4f1a\u88ab\u62c6\u5206\u4e3a\u591a\u4e2a\u540c\u65f6\u8fd0\u884c\u7684\u201c\u4efb\u52a1\u201d\u4ee5\u63d0\u9ad8\u6548\u7387\uff0c\u4f46\u8bf7\u6ce8\u610f\uff0c\u5982\u679c\u8ba1\u7b97\u8d44\u6e90\u6709\u9650\uff0c\u8fd9\u79cd\u7b56\u7565\u53ef\u80fd\u4f1a\u4f7f\u8bc4\u6d4b\u53d8\u5f97\u66f4\u6162\u3002 \u53ef\u89c6\u5316 \uff1a\u8bc4\u4f30\u5b8c\u6210\u540e\uff0cOpenCompass \u5c06\u7ed3\u679c\u6574\u7406\u6210\u6613\u8bfb\u7684\u8868\u683c\uff0c\u5e76\u5c06\u5176\u4fdd\u5b58\u4e3a CSV \u548c TXT \u6587\u4ef6\u3002\u4f60\u4e5f\u53ef\u4ee5\u6fc0\u6d3b\u98de\u4e66\u72b6\u6001\u4e0a\u62a5\u529f\u80fd\uff0c\u6b64\u540e\u53ef\u4ee5\u5728\u98de\u4e66\u5ba2\u6237\u7aef\u4e2d\u53ca\u65f6\u83b7\u5f97\u8bc4\u6d4b\u72b6\u6001\u62a5\u544a\u3002","title":"OpenCompass \u4ecb\u7ecd"},{"location":"llm/internlm/lec6/#_1","text":"","title":"\u5b89\u88c5 & \u4f7f\u7528"},{"location":"llm/internlm/lec6/#gpu","text":"conda create --name opencompass --clone = /root/share/conda_envs/internlm-base source activate opencompass git clone https://github.com/open-compass/opencompass cd opencompass pip install -e .","title":"\u9762\u5411GPU\u7684\u73af\u5883\u5b89\u88c5"},{"location":"llm/internlm/lec6/#_2","text":"\u5c06\u6570\u636e\u96c6\u653e\u5230 data \u76ee\u5f55\u4e0b\uff0c\u4f8b\u5982\uff1a cp /share/temp/datasets/OpenCompassData-core-20231110.zip /root/opencompass/ unzip OpenCompassData-core-20231110.zip","title":"\u6570\u636e\u51c6\u5907"},{"location":"llm/internlm/lec6/#_3","text":"# \u5217\u51fa\u6240\u6709\u8ddf internlm \u53ca ceval \u76f8\u5173\u7684\u914d\u7f6e python tools/list_configs.py internlm ceval","title":"\u67e5\u770b\u652f\u6301\u7684\u6570\u636e\u96c6\u548c\u6a21\u578b"},{"location":"llm/internlm/lec6/#_4","text":"\u901a\u8fc7 --debug \u6a21\u5f0f\u542f\u52a8\u8bc4\u4f30\uff0c\u4efb\u52a1\u5c06\u6309\u987a\u5e8f\u6267\u884c\uff0c\u5e76\u5b9e\u65f6\u6253\u5370\u8f93\u51fa\u3002 python run.py --datasets ceval_gen --hf-path /share/temp/model_repos/internlm-chat-7b/ --tokenizer-path /share/temp/model_repos/internlm-chat-7b/ --tokenizer-kwargs padding_side = 'left' truncation = 'left' trust_remote_code = True --model-kwargs trust_remote_code = True device_map = 'auto' --max-seq-len 2048 --max-out-len 16 --batch-size 4 --num-gpus 1 --debug","title":"\u542f\u52a8\u8bc4\u6d4b"},{"location":"llm/internlm/lec6/#_5","text":"\u8bc4\u4f30\u5b8c\u6210\u540e\uff0c\u8bc4\u4f30\u7ed3\u679c\u8868\u683c\u5c06\u6253\u5370\u5982\u4e0b\uff1a dataset version metric mode opt350m opt125m --------- --------- -------- ------ --------- --------- siqa e78df3 accuracy gen 21.55 12.44 winograd b6c7ed accuracy ppl 51.23 49.82 \u6240\u6709\u8fd0\u884c\u8f93\u51fa\u5c06\u5b9a\u5411\u5230 outputs/demo/ \u76ee\u5f55","title":"\u53ef\u89c6\u5316\u8bc4\u4f30\u7ed3\u679c"},{"location":"llm/internlm/lec6/#_6","text":"\u4f7f\u7528 OpenCompass \u8bc4\u6d4b InternLM2-Chat-7B \u6a21\u578b\u5728 C-Eval \u6570\u636e\u96c6\u4e0a\u7684\u6027\u80fd","title":"\u4f5c\u4e1a"},{"location":"llm/nlp/","text":"NLP \u00b6 Abstract \u8865\u5145\u4e00\u4e9b NLP \u7684\u57fa\u7840\u77e5\u8bc6\u3002 Table of Contents \u00b6 Word2Vec RNN","title":"NLP"},{"location":"llm/nlp/#nlp","text":"Abstract \u8865\u5145\u4e00\u4e9b NLP \u7684\u57fa\u7840\u77e5\u8bc6\u3002","title":"NLP"},{"location":"llm/nlp/#table-of-contents","text":"Word2Vec RNN","title":"Table of Contents"},{"location":"llm/nlp/rnns/","text":"RNNs \u00b6 \u7ea6 2807 \u4e2a\u5b57 13 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 10 \u5206\u949f Abstract NLP \u91cc\u6700\u5e38\u7528\u3001\u6700\u4f20\u7edf\u7684\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u5c31\u662f \u5faa\u73af\u795e\u7ecf\u7f51\u7edc RNN\uff08Recurrent Neural Network\uff09 \u3002 RNN \u6709\u5f88\u591a\u53d8\u79cd\uff0c\u5176\u4e2d\u6700\u5e38\u7528\u7684\u5c31\u662f LSTM\uff08Long Short-Term Memory\uff09 \u548c GRU\uff08Gated Recurrent Unit\uff09 \u3002\u672c\u6587\u5c06\u4ecb\u7ecd RNN\u3001LSTM \u548c GRU \u7684\u539f\u7406\u3002 \u6982\u8ff0 \u00b6 \u5168\u8fde\u63a5\u795e\u7ecf\u7f51\u7edc DNN \u548c \u5377\u79ef\u795e\u7ecf\u7f51\u7edc CNN\uff0c\u5b83\u4eec\u7684\u524d\u4e00\u4e2a\u8f93\u5165\u548c\u540e\u4e00\u4e2a\u8f93\u5165\u662f\u6ca1\u6709\u5173\u7cfb\u7684\u3002\u5f53\u6211\u4eec\u5904\u7406 \u5e8f\u5217\u4fe1\u606f \u65f6\uff0c\u67d0\u4e9b\u524d\u9762\u7684\u8f93\u5165\u548c\u540e\u9762\u7684\u8f93\u5165\u662f\u6709\u5173\u7cfb\u7684\uff0c\u6bd4\u5982\uff1a\u5f53\u6211\u4eec\u5728\u7406\u89e3\u4e00\u53e5\u8bdd\u7684\u610f\u601d\u65f6\uff0c\u5b64\u7acb\u7684\u7406\u89e3\u8fd9\u53e5\u8bdd\u7684\u6bcf\u4e2a\u8bcd\u662f\u4e0d\u591f\u7684\uff0c\u6211\u4eec\u9700\u8981\u5904\u7406\u8fd9\u4e9b\u8bcd\u8fde\u63a5\u8d77\u6765\u7684\u6574\u4e2a \u5e8f\u5217 \uff1b\u8fd9\u4e2a\u65f6\u5019\u6211\u4eec\u5c31\u9700\u8981\u4f7f\u7528\u5230 \u5faa\u73af\u795e\u7ecf\u7f51\u7edc\uff08Recurrent Neural Network\uff09 \u3002 RNN\u5728\u81ea\u7136\u8bed\u8a00\u5904\u7406\u9886\u57df\u6700\u5148\u88ab\u4f7f\u7528\u8d77\u6765\uff0cRNN\u53ef\u4ee5\u4e3a\u8bed\u8a00\u6a21\u578b\u8fdb\u884c\u5efa\u6a21\uff1a \u6211\u6ca1\u6709\u5b8c\u6210\u4e0a\u7ea7\u5e03\u7f6e\u7ed9\u6211\u7684\u4efb\u52a1\uff0c\u6240\u4ee5 \u88ab\u5f00\u9664\u4e86 \u8ba9\u7535\u8111\u6765\u586b\u5199\u4e0b\u5212\u7ebf\u7684\u8bcd\u6700\u6709\u53ef\u80fd\u7684\u662f\u300e\u6211\u300f\uff0c\u800c\u4e0d\u592a\u53ef\u80fd\u662f\u300e\u5c0f\u660e\u300f\uff0c\u751a\u81f3\u662f\u300e\u5403\u996d\u300f\u3002 \u8bed\u8a00\u6a21\u578b\u5c31\u662f\u8fd9\u6837\u7684\u4e1c\u897f\uff1a\u7ed9\u5b9a\u4e00\u4e2a\u4e00\u53e5\u8bdd\u524d\u9762\u7684\u90e8\u5206\uff0c\u9884\u6d4b\u63a5\u4e0b\u6765\u6700\u6709\u53ef\u80fd\u7684\u4e00\u4e2a\u8bcd\u662f\u4ec0\u4e48\u3002 \u57fa\u672c\u5faa\u73af\u795e\u7ecf\u7f51\u7edc \u00b6 \u57fa\u672c\u7684 RNN\uff0c\u7ed3\u6784\u7531 \u8f93\u5165\u5c42\u3001\u4e00\u4e2a\u9690\u85cf\u5c42\u548c\u8f93\u51fa\u5c42 \u7ec4\u6210\u3002 x \u662f\u8f93\u5165\u5411\u91cf o \u662f\u8f93\u51fa\u5411\u91cf s \u8868\u793a\u9690\u85cf\u5c42\u7684\u503c U \u662f\u8f93\u5165\u5c42\u5230\u9690\u85cf\u5c42\u7684\u6743\u91cd\u77e9\u9635 V \u65f6\u9690\u85cf\u5c42\u5230\u8f93\u51fa\u5c42\u7684\u6743\u91cd\u77e9\u9635 \u5faa\u73af\u795e\u7ecf\u7f51\u7edc\u7684\u9690\u85cf\u5c42\u7684\u503c s \u4e0d\u4ec5\u4ec5\u53d6\u51b3\u4e8e\u5f53\u524d\u8fd9\u6b21\u7684\u8f93\u5165 x\uff0c\u8fd8\u53d6\u51b3\u4e8e\u4e0a\u4e00\u6b21\u9690\u85cf\u5c42\u7684\u503c s\u3002\u6743\u91cd\u77e9\u9635 W \u5c31\u662f\u9690\u85cf\u5c42\u4e0a\u4e00\u6b21\u7684\u503c\u4f5c\u4e3a\u8fd9\u4e00\u6b21\u7684\u8f93\u5165\u7684\u6743\u91cd\u3002 \u5c06\u4e0a\u56fe\u7684\u57fa\u672c RNN \u7ed3\u6784\u5728\u65f6\u95f4\u7ef4\u5ea6\u5c55\u5f00\uff08RNN \u662f\u4e00\u4e2a\u94fe\u5f0f\u7ed3\u6784\uff0c\u6bcf\u4e2a\u65f6\u95f4\u7247\u4f7f\u7528\u7684\u90fd\u662f\u76f8\u540c\u7684\u53c2\u6570\uff09 \u8fd9\u4e2a\u7f51\u7edc\u5728 t \u65f6\u523b\u63a5\u6536\u5230\u8f93\u5165 \\(x_t\\) \u4e4b\u540e\uff0c\u9690\u85cf\u5c42\u7684\u503c\u662f \\(s_t\\) \uff0c\u8f93\u51fa\u5c42\u7684\u503c\u662f \\(o_t\\) \uff0c \u5173\u952e\u7684\u662f\uff0c \\(s_t\\) \u7684\u503c\u4e0d\u4ec5\u4ec5\u53d6\u51b3\u4e8e \\(x_t\\) \uff0c\u8fd8\u53d6\u51b3\u4e8e \\(s_{t-1}\\) \u3002 \\[ s_t=f(U * x_t + W * s_{t-1}) \\\\ o_t=g(V * s_t) \\] \u516c\u5f0f1 \u662f\u9690\u85cf\u5c42\u7684\u8ba1\u7b97\u516c\u5f0f\uff0c\u5b83\u662f\u5faa\u73af\u5c42\u3002U \u662f\u8f93\u5165 x \u7684\u6743\u91cd\u77e9\u9635\uff0cW \u662f \u4e0a\u4e00\u6b21\u9690\u85cf\u5c42\u503c \\(s_{t-1}\\) \u4f5c\u4e3a\u5219\u4e00\u6b21\u7684\u8f93\u5165\u7684\u6743\u91cd\u77e9\u9635\uff0cf \u662f\u6fc0\u6d3b\u51fd\u6570\u3002 \u516c\u5f0f2 \u662f\u8f93\u51fa\u5c42\u7684\u8ba1\u7b97\u516c\u5f0f\uff0cV \u662f\u8f93\u51fa\u5c42\u7684\u6743\u91cd\u77e9\u9635\uff0cg \u662f\u6fc0\u6d3b\u51fd\u6570\u3002 \u9690\u85cf\u5c42\u6709\u4e24\u4e2a\u8f93\u5165\uff0c\u7b2c\u4e00\u662f U \u4e0e \\(x_t\\) \u5411\u91cf\u7684\u4e58\u79ef\uff0c\u7b2c\u4e8c\u662f\u4e0a\u4e00\u9690\u85cf\u5c42\u8f93\u51fa\u7684\u72b6\u6001 \\(s_{t-1}\\) \u4e0e W \u7684\u4e58\u79ef\u3002\u7b49\u4e8e\u4e0a\u4e00\u4e2a\u65f6\u523b\u8ba1\u7b97\u7684 \\(s_{t-1}\\) \u9700\u8981\u7f13\u5b58\u4e00\u4e0b\uff0c\u5728\u672c\u6b21\u8f93\u5165 \\(x_t\\) \u4e00\u8d77\u8ba1\u7b97\uff0c\u5171\u540c\u8f93\u51fa\u6700\u540e\u7684 \\(o_t\\) \u3002 \u5982\u679c\u53cd\u590d\u628a\u516c\u5f0f1\u5e26\u5165\u516c\u5f0f2\uff0c\u53ef\u4ee5\u5f97\u5230\uff1a \\[ \\begin{aligned} o_t&=g(Vs_t)\\\\ &=Vf(Ux_t+Ws_{t-1})\\\\ &=Vf(Ux_t+Wf(Ux_{t-1}+Ws_{t-2}))\\\\ &=Vf(Ux_t+Wf(Ux_{t-1}+Wf(Ux_{t-2}+Ws_{t-3})))\\\\ &=Vf(Ux_t+Wf(Ux_{t-1}+Wf(Ux_{t-2}+Wf(Ux_{t-3}+...)))) \\end{aligned} \\] \u4ece\u4e0a\u9762\u53ef\u4ee5\u770b\u51fa\uff0c\u5faa\u73af\u795e\u7ecf\u7f51\u7edc\u7684\u8f93\u51fa\u503c\uff0c\u662f\u53d7\u524d\u9762\u5386\u6b21\u8f93\u5165\u503c \\(x_t\u3001x_{t-1}\u3001x_{t-2}\u3001x_{t-3}\u3001...\\) \u5f71\u54cd\u7684\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u5faa\u73af\u795e\u7ecf\u7f51\u7edc\u53ef\u4ee5\u5f80\u524d\u770b\u4efb\u610f\u591a\u4e2a\u8f93\u5165\u503c\u7684\u539f\u56e0\u3002\u8fd9\u6837\u5176\u5b9e\u4e0d\u597d\uff0c\u56e0\u4e3a\u5982\u679c\u592a\u524d\u9762\u7684\u503c\u548c\u540e\u9762\u7684\u503c\u5df2\u7ecf\u6ca1\u6709\u5173\u7cfb\u4e86\uff0c\u5faa\u73af\u795e\u7ecf\u7f51\u7edc\u8fd8\u8003\u8651\u524d\u9762\u7684\u503c\u7684\u8bdd\uff0c\u5c31\u4f1a\u5f71\u54cd\u540e\u9762\u503c\u7684\u5224\u65ad\u3002 \u53cc\u5411\u5faa\u73af\u795e\u7ecf\u7f51\u7edc \u00b6 \u5bf9\u4e8e\u8bed\u8a00\u6a21\u578b\u6765\u8bf4\uff0c\u5f88\u591a\u65f6\u5019\u5149\u770b\u524d\u9762\u7684\u8bcd\u662f\u4e0d\u591f\u7684\uff0c\u6bd4\u5982\u4e0b\u9762\u8fd9\u53e5\u8bdd\uff1a \u6211\u7684\u624b\u673a\u574f\u4e86\uff0c\u6211\u6253\u7b97 \u4e00\u90e8\u65b0\u7684\u624b\u673a \u3002 \u6211\u4eec\u8fd9\u4e2a\u65f6\u5019\u5c31\u9700\u8981\u53cc\u5411\u5faa\u73af\u795e\u7ecf\u7f51\u7edc\u3002 \u4ece\u4e0a\u56fe\u53ef\u4ee5\u770b\u51fa\uff0c\u53cc\u5411\u5faa\u73af\u795e\u7ecf\u7f51\u7edc\u7684\u9690\u85cf\u5c42\u9700\u8981\u4fdd\u5b58\u4e24\u4e2a\u503c\uff0c\u4e00\u4e2a \\(A\\) \u53c2\u4e0e\u6b63\u5411\u8ba1\u7b97\uff0c\u53e6\u4e00\u4e2a\u503c \\(A^\\prime\\) \u53c2\u4e0e\u53cd\u5411\u8ba1\u7b97\u3002\u6700\u7ec8\u7684\u8f93\u51fa\u503c \\(y_2\\) \u53d6\u51b3\u4e8e \\(A_2\\) \u548c \\(A_2^\\prime\\) \u3002\u5176\u8ba1\u7b97\u65b9\u6cd5\u4e3a\uff1a \\[ y_2=g(VA_2+V\\prime A_2^\\prime) \\] \\(A_2\\) \u548c \\(A_2^\\prime\\) \u7684\u8ba1\u7b97\u65b9\u6cd5\u4e3a\uff1a \\[ \\begin{aligned} A_2&=f(WA_1+Ux_2)\\\\ A_2^\\prime&=f(W^\\prime A_3^\\prime + U^\\prime x_2) \\end{aligned} \\] \u73b0\u5728\u53ef\u4ee5\u770b\u51fa\u4e00\u822c\u7684\u89c4\u5f8b\uff1a\u6b63\u5411\u8ba1\u7b97\u65f6\uff0c\u9690\u85cf\u5c42\u7684\u503c \\(S_t\\) \u4e0e \\(S_{t-1}\\) \u6709\u5173\uff1b\u53cd\u5411\u8ba1\u7b97\u65f6\uff0c\u9690\u85cf\u5c42\u7684\u503c \\(S_t^\\prime\\) \u4e0e \\(S_{t+1}^\\prime\\) \u6709\u5173\uff1b\u6700\u7ec8\u7684\u8f93\u51fa\u53d6\u51b3\u4e8e\u6b63\u5411\u548c\u53cd\u5411\u8ba1\u7b97\u7684\u52a0\u548c\u3002\u73b0\u5728\uff0c\u4eff\u7167\u516c\u5f0f1\u548c\u516c\u5f0f2\uff0c\u5199\u51faBRNN\u7684\u8ba1\u7b97\u516c\u5f0f\uff1a \\[ \\begin{aligned} o_t=g(Vs_t+V^\\prime s_t^\\prime)\\\\ s_t=f(Ux_t+Ws_{t-1})\\\\ s_t^\\prime=f(U^\\prime x_t+W^\\prime s_{t+1}^\\prime) \\end{aligned} \\] \u4ece\u4e0a\u9762\u4e09\u4e2a\u516c\u5f0f\u53ef\u4ee5\u770b\u5230\uff0c\u6b63\u5411\u8ba1\u7b97\u548c\u53cd\u5411\u8ba1\u7b97\u4e0d\u5171\u4eab\u6743\u91cd\uff0c\u4e5f\u5c31\u662f\u8bf4 \\(U\\) \u548c \\(U^\\prime\\) \u3001 \\(W\\) \u548c \\(W^\\prime\\) \u3001 \\(V\\) \u548c \\(V^\\prime\\) \u662f\u4e0d\u540c\u7684\u6743\u91cd\u77e9\u9635\u3002 \u68af\u5ea6\u7206\u70b8\u548c\u68af\u5ea6\u6d88\u5931 \u00b6 \u4e0a\u6587\u4ecb\u7ecd\u7684\u51e0\u79cd RNN \u5e76\u4e0d\u80fd\u5f88\u597d\u5730\u5904\u7406\u8f83\u957f\u7684\u5e8f\u5217\uff0cRNN \u5728\u8bad\u7ec3\u4e2d\u5f88\u5bb9\u6613\u53d1\u751f\u68af\u5ea6\u7206\u70b8\u548c\u68af\u5ea6\u6d88\u5931\uff0c\u8fd9\u5bfc\u81f4\u68af\u5ea6\u4e0d\u80fd\u5728\u8f83\u957f\u5e8f\u5217\u4e2d\u4e00\u76f4\u4f20\u9012\u4e0b\u53bb\uff0c\u4ece\u800c\u4f7f RNN \u65e0\u6cd5\u6355\u6349\u5230\u957f\u8ddd\u79bb\u7684\u5f71\u54cd\u3002 \u901a\u5e38\u6765\u8bf4\uff0c\u68af\u5ea6\u7206\u70b8\u66f4\u5bb9\u6613\u5904\u7406\u4e00\u4e9b\u3002\u56e0\u4e3a\u68af\u5ea6\u7206\u70b8\u7684\u65f6\u5019\uff0c\u6211\u4eec\u7684\u7a0b\u5e8f\u4f1a\u6536\u5230NaN\u9519\u8bef\u3002\u6211\u4eec\u4e5f\u53ef\u4ee5\u8bbe\u7f6e\u4e00\u4e2a\u68af\u5ea6\u9608\u503c\uff0c\u5f53\u68af\u5ea6\u8d85\u8fc7\u8fd9\u4e2a\u9608\u503c\u7684\u65f6\u5019\u53ef\u4ee5\u76f4\u63a5\u622a\u53d6\u3002 \u68af\u5ea6\u6d88\u5931\u66f4\u96be\u68c0\u6d4b\uff0c\u800c\u4e14\u4e5f\u66f4\u96be\u5904\u7406\u4e00\u4e9b\u3002\u603b\u7684\u6765\u8bf4\uff0c\u6211\u4eec\u6709\u4e09\u79cd\u65b9\u6cd5\u5e94\u5bf9\u68af\u5ea6\u6d88\u5931\u95ee\u9898\uff1a 1\u3001\u5408\u7406\u7684\u521d\u59cb\u5316\u6743\u91cd\u503c\u3002\u521d\u59cb\u5316\u6743\u91cd\uff0c\u4f7f\u6bcf\u4e2a\u795e\u7ecf\u5143\u5c3d\u53ef\u80fd\u4e0d\u8981\u53d6\u6781\u5927\u6216\u6781\u5c0f\u503c\uff0c\u4ee5\u8eb2\u5f00\u68af\u5ea6\u6d88\u5931\u7684\u533a\u57df\u3002 2\u3001\u4f7f\u7528relu\u4ee3\u66ffsigmoid\u548ctanh\u4f5c\u4e3a\u6fc0\u6d3b\u51fd\u6570\u3002 3\u3001\u4f7f\u7528\u5176\u4ed6\u7ed3\u6784\u7684RNNs\uff0c\u6bd4\u5982\u957f\u77ed\u65f6\u8bb0\u5fc6\u7f51\u7edc\uff08LTSM\uff09\u548cGated Recurrent Unit\uff08GRU\uff09\uff0c\u8fd9\u662f\u6700\u6d41\u884c\u7684\u505a\u6cd5\u3002 \u957f\u77ed\u671f\u8bb0\u5fc6\u7f51\u7edc LSTM \u00b6 \u539f\u59cb RNN \u7684\u9690\u85cf\u5c42\u53ea\u6709\u4e00\u4e2a\u72b6\u6001\uff0c\u5373 h\uff0c\u5b83\u5bf9\u77ed\u671f\u7684\u8f93\u5165\u975e\u5e38\u654f\u611f\u3002\u90a3\u4e48\u5982\u679c\u6211\u4eec\u518d\u52a0\u4e00\u4e2a\u95e8\uff08gate\uff09\u673a\u5236\u7528\u4e8e\u63a7\u5236\u7279\u5f81\u7684\u6d41\u901a\u548c\u635f\u5931\uff0c\u5373 c\uff0c\u8ba9\u5b83\u6765\u4fdd\u5b58\u957f\u671f\u7684\u72b6\u6001\uff0c\u8fd9\u5c31\u662f \u957f\u77ed\u65f6\u8bb0\u5fc6\u7f51\u7edc\uff08Long Short Term Memory\uff0cLSTM\uff09 \u3002 \u65b0\u589e\u52a0\u7684\u72b6\u6001 c\uff0c\u79f0\u4e3a\u5355\u5143\u72b6\u6001\u3002\u628a LSTM \u6309\u7167\u65f6\u95f4\u7ef4\u5ea6\u5c55\u5f00\uff1a \u53ef\u4ee5\u770b\u5230\u5728 t \u65f6\u523b LSTM \u7684\u8f93\u5165\u6709\u4e09\u4e2a \uff1a\u5f53\u524d\u65f6\u523b\u7f51\u7edc\u7684\u8f93\u5165\u503c \\(x_t\\) \u3001\u4e0a\u4e00\u65f6\u523b LSTM \u7684\u8f93\u51fa\u503c \\(h_{t-1}\\) \u3001\u4ee5\u53ca\u4e0a\u4e00\u65f6\u523b\u7684\u8bb0\u5fc6\u5355\u5143\u5411\u91cf \\(c_{t-1}\\) \u3002 LSTM \u7684\u8f93\u51fa\u6709\u4e24\u4e2a \uff1a\u5f53\u524d\u65f6\u523b\u7684 LSTM \u8f93\u51fa\u503c \\(h_t\\) \u3001\u548c\u5f53\u524d\u65f6\u523b\u7684\u8bb0\u5fc6\u5355\u5143\u5411\u91cf \\(c_t\\) \u3002 \u8bb0\u5fc6\u5355\u5143 c \u5728 LSTM \u5c42\u5185\u90e8\u7ed3\u675f\u5de5\u4f5c\uff0c\u4e0d\u5411\u5176\u4ed6\u5c42\u8f93\u51fa\u3002LSTM \u7684\u8f93\u51fa\u4ec5\u6709\u9690\u85cf\u72b6\u6001\u5411\u91cf h\u3002 LSTM \u7684\u5173\u952e\u662f\u5355\u5143\u72b6\u6001\uff0c\u5373\u8d2f\u7a7f\u56fe\u8868\u9876\u90e8\u7684\u6c34\u5e73\u7ebf\uff0c\u6709\u70b9\u50cf\u4f20\u9001\u5e26\u3002\u8fd9\u4e00\u90e8\u5206\u4e00\u822c\u53eb\u505a\u5355\u5143\u72b6\u6001\uff08cell state\uff09\uff0c\u5b83\u81ea\u59cb\u81f3\u7ec8\u5b58\u5728\u4e8e LSTM \u7684\u6574\u4e2a\u94fe\u5f0f\u7cfb\u7edf\u4e2d\u3002 \u8bb0\u5fc6\u5355\u5143\u72b6\u6001\u7684\u8ba1\u7b97\u516c\u5f0f\uff1a \\(\u516c\u5f0f1\uff1ac_{t}=f_{t} \\odot c_{t-1}+i_{t} \\odot g_t\\) \u9057\u5fd8\u95e8 \u00b6 \\(f_t\\) \u53eb\u505a \u9057\u5fd8\u95e8 \uff0c\u8868\u793a \\(C_{t-1}\\) \u7684\u54ea\u4e9b\u7279\u5f81\u88ab\u7528\u4e8e\u8ba1\u7b97 \\(C_t\\) \u3002 \\(f_t\\) \u662f\u4e00\u4e2a\u5411\u91cf\uff0c\u5411\u91cf\u7684\u6bcf\u4e2a\u5143\u7d20\u5747\u4f4d\u4e8e(0~1)\u8303\u56f4\u5185\u3002\u901a\u5e38\u6211\u4eec\u4f7f\u7528 sigmoid \u4f5c\u4e3a\u6fc0\u6d3b\u51fd\u6570\uff0csigmoid \u7684\u8f93\u51fa\u662f\u4e00\u4e2a\u4ecb\u4e8e(0~1)\u533a\u95f4\u5185\u7684\u503c\uff0c\u4f46\u662f\u5f53\u4f60\u89c2\u5bdf\u4e00\u4e2a\u8bad\u7ec3\u597d\u7684 LSTM \u65f6\uff0c\u4f60\u4f1a\u53d1\u73b0\u95e8\u7684\u503c\u7edd\u5927\u591a\u6570\u90fd\u975e\u5e38\u63a5\u8fd1 0 \u6216 1\uff0c\u5176\u4f59\u7684\u503c\u5c11\u4e4b\u53c8\u5c11\u3002 \u9057\u5fd8\u95e8\u7684\u8ba1\u7b97\u516c\u5f0f\uff1a \\(\u516c\u5f0f2\uff1af_t=\\sigma (x_tW_x^{(f)}+h_{h-1}W_h^{(f)}+b^{(f)})\\) \u8f93\u5165\u95e8 \u00b6 \\(\\tilde{C}_t\\) \u8868\u793a\u5355\u5143\u72b6\u6001\u66f4\u65b0\u503c\uff0c\u6709\u8f93\u5165\u6570\u636e \\(x_t\\) \u548c\u9690\u8282\u70b9 \\(h_{t-1}\\) \u7ecf\u7531\u4e00\u4e2a\u795e\u7ecf\u7f51\u7edc\u5c42\u5f97\u5230\uff0c\u5355\u5143\u72b6\u6001\u66f4\u65b0\u503c\u7684\u6fc0\u6d3b\u51fd\u6570\u901a\u5e38\u4f7f\u7528 tanh\u3002 \\(i_t\\) \u53eb\u505a\u8f93\u5165\u95e8\uff0c\u540c \\(f_t\\) \u4e00\u6837\u4e5f\u662f\u4e00\u4e2a\u5143\u7d20\u4ecb\u4e8e(0~1)\u533a\u95f4\u5185\u7684\u5411\u91cf\uff0c\u540c\u6837\u7531 \\(x_t\\) \u548c \\(h_{t-1}\\) \u7ecf\u7531 sigmoid \u6fc0\u6d3b\u51fd\u6570\u8ba1\u7b97\u800c\u6210\u3002 \u8f93\u5165\u95e8\u548c\u5355\u5143\u66f4\u65b0\u503c\u7684\u8ba1\u7b97\u65b9\u5f0f\uff1a \\(\u516c\u5f0f3\uff1ai_t=\\sigma (x_tW_x^{(i)}+h_{t-1}W_h^{i}+b^{(i)})\\) \\(\u516c\u5f0f4\uff1ag_t=tanh(x_tW_x^{(g)}+h_{t-1}W_h^{(g)}+b^{(g)})\\) \u8f93\u51fa\u95e8 \u00b6 \u6700\u540e\uff0c\u4e3a\u4e86\u8ba1\u7b97\u9884\u6d4b\u503c \\(\\hat{y}_t\\) \u548c\u751f\u6210\u4e0b\u4e2a\u65f6\u95f4\u7247\u5b8c\u6574\u7684\u8f93\u5165\uff0c\u6211\u4eec\u9700\u8981\u8ba1\u7b97\u9690\u8282\u70b9\u7684\u8f93\u51fa \\(h_t\\) \u3002 \u8f93\u51fa\u95e8\u548c\u9690\u8282\u70b9\u7684\u8ba1\u7b97\u516c\u5f0f \\(\u516c\u5f0f5\uff1ao_t=\\sigma (x_tW_x^{(o)}+h_{t-1}W_h^{(o)}+b^{(o)})\\) \\(\u516c\u5f0f6\uff1ah_t=o_t\\odot tanh(c_t)\\) \u6211\u4eec\u6765\u770b\u516c\u5f0f2\u30013\u30014\u30015\uff0c\u90fd\u662f\u578b\u5982 \\(xW_x+hW_h+b\\) \u7684\u683c\u5f0f\uff0c\u56e0\u6b64\u53ef\u4ee5\u6574\u5408\u4e3a\u901a\u8fc7\u4e00\u4e2a\u5f0f\u5b50\u8fdb\u884c\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a 4 \u4e2a\u6743\u91cd\uff08\u6216\u504f\u7f6e\uff09\u88ab\u6574\u5408\u4e3a\u4e86 1 \u4e2a\u3002\u5982\u6b64\uff0c\u539f\u672c\u5355\u72ec\u6267\u884c4 \u6b21\u7684\u4eff\u5c04\u53d8\u6362\u901a\u8fc71 \u6b21\u8ba1\u7b97\u5373\u53ef\u5b8c\u6210\uff0c\u53ef\u4ee5\u52a0\u5feb\u8ba1\u7b97\u901f\u5ea6\u3002\u8fd9\u662f\u56e0\u4e3a\u77e9\u9635\u5e93\u8ba1\u7b97\u201c\u5927\u77e9\u9635\u201d\u65f6\u901a\u5e38\u4f1a\u66f4\u5feb\uff0c\u800c\u4e14\u901a\u8fc7\u5c06\u6743\u91cd\u6574\u5408\u5230\u4e00\u8d77\u7ba1\u7406\uff0c\u6e90\u4ee3\u7801\u4e5f\u4f1a\u66f4\u7b80\u6d01\u3002 \u5047\u8bbe \\(W_x\u3001W_h\\) \u548c \\(b\\) \u5206\u522b\u5305\u542b 4 \u4e2a\u6743\u91cd\uff08\u6216\u504f\u7f6e\uff09\uff0c\u6b64\u65f6 LSTM \u7684\u8ba1\u7b97\u56fe\u5982\u4e0b\u6240\u793a\u3002 import tensorflow as tf from tensorflow.keras import layers inputs = tf . random . normal (( 64 , 6 , 10 )) LSTM_layer = layers . LSTM ( units = 20 , return_sequences = True , return_state = True ) outputs , final_memory_state , final_carry_state = LSTM_layer ( inputs ) print ( outputs . shape , final_memory_state . shape , final_carry_state . shape ) # (64, 6, 20) (64, 20) (64, 20) print ( len ( LSTM_layer . weights )) # 3 print ( LSTM_layer . weights [ 0 ] . shape ) # Wx (10, 80) print ( LSTM_layer . weights [ 1 ] . shape ) # Wh (20, 80) print ( LSTM_layer . weights [ 2 ] . shape ) # bias (80,) \u95e8\u63a7\u5faa\u73af\u5355\u5143 GRU \u00b6 LSTM \u7684\u53c2\u6570\u592a\u591a\uff0c\u8ba1\u7b97\u9700\u8981\u5f88\u957f\u65f6\u95f4\u3002\u56e0\u6b64\uff0c\u6700\u8fd1\u4e1a\u754c\u53c8\u63d0\u51fa\u4e86 GRU\uff08Gated RecurrentUnit\uff0c\u95e8\u63a7\u5faa\u73af\u5355\u5143\uff09\u3002GRU \u4fdd\u7559\u4e86 LSTM\u4f7f\u7528\u95e8\u7684\u7406\u5ff5\uff0c\u4f46\u662f\u51cf\u5c11\u4e86\u53c2\u6570\uff0c\u7f29\u77ed\u4e86\u8ba1\u7b97\u65f6\u95f4\u3002 \u76f8\u5bf9\u4e8e LSTM \u4f7f\u7528\u9690\u85cf\u72b6\u6001\u548c\u8bb0\u5fc6\u5355\u5143\u4e24\u6761\u7ebf\uff0cGRU\u53ea\u4f7f\u7528\u9690\u85cf\u72b6\u6001\u3002\u5f02\u540c\u70b9\u5982\u4e0b\uff1a GRU \u7684\u8ba1\u7b97\u56fe\u5982\u4e0b\u6240\u793a\u3002 GRU \u8ba1\u7b97\u56fe\u4e2d\uff0c \\(\\sigma\\) \u8282\u70b9\u548c tanh \u8282\u70b9\u6709\u4e13\u7528\u7684\u6743\u91cd\uff0c\u8282\u70b9\u5185\u90e8\u8fdb\u884c\u4eff\u5c04\u53d8\u6362\uff08\u201c1\u2212\u201d\u8282\u70b9\u8f93\u5165x\uff0c\u8f93\u51fa1 \u2212 x\uff09 \\(\u516c\u5f0f2.1\uff1az=\\sigma(x_t W_x^{(z)}+h_{t-1} W_h^{(z)}+b^{(z)})\\) \\(\u516c\u5f0f2.2\uff1ar=\\sigma(x_t W_x^{(r)}+h_{t-1} W_h^{(r)}+b^{(r)})\\) \\(\u516c\u5f0f2.3\uff1a\\tilde{h}=\\tanh (x_t W_x+(r \\odot h_{t-1}) W_h+b)\\) \\(\u516c\u5f0f2.4\uff1ah_t=(1-z) \\odot h_{t-1}+z \\odot \\tilde{h}\\) GRU \u4e2d\u8fdb\u884c\u7684\u8ba1\u7b97\u7531\u4e0a\u8ff0 4 \u4e2a\u5f0f\u5b50\u8868\u793a\uff08\u8fd9\u91cc \\(x_t\\) \u548c \\(h_{t\u22121}\\) \u90fd\u662f\u884c\u5411\u91cf\uff09\uff0c\u5982\u56fe\u6240\u793a\uff0cGRU \u6ca1\u6709\u8bb0\u5fc6\u5355\u5143\uff0c\u53ea\u6709\u4e00\u4e2a\u9690\u85cf\u72b6\u6001 h \u5728\u65f6\u95f4\u65b9\u5411\u4e0a\u4f20\u64ad\u3002\u8fd9\u91cc\u4f7f\u7528 r \u548c z \u5171\u4e24\u4e2a\u95e8\uff08LSTM \u4f7f\u7528 3 \u4e2a\u95e8\uff09\uff0cr \u79f0\u4e3a reset \u95e8\uff0cz \u79f0\u4e3a update \u95e8\u3002 r\uff08reset\u95e8\uff09 \u51b3\u5b9a\u5728\u591a\u5927\u7a0b\u5ea6\u4e0a\u201c\u5ffd\u7565\u201d\u8fc7\u53bb\u7684\u9690\u85cf\u72b6\u6001\u3002\u6839\u636e\u516c\u5f0f2.3\uff0c\u5982\u679c r \u662f 0\uff0c\u5219\u65b0\u7684\u9690\u85cf\u72b6\u6001 \\(\\tilde{h}\\) \u4ec5\u53d6\u51b3\u4e8e\u8f93\u5165 \\(x_t\\) \u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u6b64\u65f6\u8fc7\u53bb\u7684\u9690\u85cf\u72b6\u6001\u5c06\u5b8c\u5168\u88ab\u5ffd\u7565\u3002 z\uff08update\u95e8\uff09 \u662f\u66f4\u65b0\u9690\u85cf\u72b6\u6001\u7684\u95e8\uff0c\u5b83\u626e\u6f14\u4e86 LSTM \u7684 forget \u95e8\u548cinput \u95e8\u4e24\u4e2a\u89d2\u8272\u3002\u516c\u5f0f2.4 \u7684 \\((1-z) \\odot h_{t-1}\\) \u90e8\u5206\u5145\u5f53 forget \u95e8\u7684\u529f\u80fd\uff0c\u4ece\u8fc7\u53bb\u7684\u9690\u85cf\u72b6\u6001\u4e2d\u5220\u9664\u5e94\u8be5\u88ab\u9057\u5fd8\u7684\u4fe1\u606f\u3002 \\(z \\odot \\tilde{h}\\) \u7684\u90e8\u5206\u5145\u5f53 input \u95e8\u7684\u529f\u80fd\uff0c\u5bf9\u65b0\u589e\u7684\u4fe1\u606f\u8fdb\u884c\u52a0\u6743\u3002","title":"RNN"},{"location":"llm/nlp/rnns/#rnns","text":"\u7ea6 2807 \u4e2a\u5b57 13 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 10 \u5206\u949f Abstract NLP \u91cc\u6700\u5e38\u7528\u3001\u6700\u4f20\u7edf\u7684\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u5c31\u662f \u5faa\u73af\u795e\u7ecf\u7f51\u7edc RNN\uff08Recurrent Neural Network\uff09 \u3002 RNN \u6709\u5f88\u591a\u53d8\u79cd\uff0c\u5176\u4e2d\u6700\u5e38\u7528\u7684\u5c31\u662f LSTM\uff08Long Short-Term Memory\uff09 \u548c GRU\uff08Gated Recurrent Unit\uff09 \u3002\u672c\u6587\u5c06\u4ecb\u7ecd RNN\u3001LSTM \u548c GRU \u7684\u539f\u7406\u3002","title":"RNNs"},{"location":"llm/nlp/rnns/#_1","text":"\u5168\u8fde\u63a5\u795e\u7ecf\u7f51\u7edc DNN \u548c \u5377\u79ef\u795e\u7ecf\u7f51\u7edc CNN\uff0c\u5b83\u4eec\u7684\u524d\u4e00\u4e2a\u8f93\u5165\u548c\u540e\u4e00\u4e2a\u8f93\u5165\u662f\u6ca1\u6709\u5173\u7cfb\u7684\u3002\u5f53\u6211\u4eec\u5904\u7406 \u5e8f\u5217\u4fe1\u606f \u65f6\uff0c\u67d0\u4e9b\u524d\u9762\u7684\u8f93\u5165\u548c\u540e\u9762\u7684\u8f93\u5165\u662f\u6709\u5173\u7cfb\u7684\uff0c\u6bd4\u5982\uff1a\u5f53\u6211\u4eec\u5728\u7406\u89e3\u4e00\u53e5\u8bdd\u7684\u610f\u601d\u65f6\uff0c\u5b64\u7acb\u7684\u7406\u89e3\u8fd9\u53e5\u8bdd\u7684\u6bcf\u4e2a\u8bcd\u662f\u4e0d\u591f\u7684\uff0c\u6211\u4eec\u9700\u8981\u5904\u7406\u8fd9\u4e9b\u8bcd\u8fde\u63a5\u8d77\u6765\u7684\u6574\u4e2a \u5e8f\u5217 \uff1b\u8fd9\u4e2a\u65f6\u5019\u6211\u4eec\u5c31\u9700\u8981\u4f7f\u7528\u5230 \u5faa\u73af\u795e\u7ecf\u7f51\u7edc\uff08Recurrent Neural Network\uff09 \u3002 RNN\u5728\u81ea\u7136\u8bed\u8a00\u5904\u7406\u9886\u57df\u6700\u5148\u88ab\u4f7f\u7528\u8d77\u6765\uff0cRNN\u53ef\u4ee5\u4e3a\u8bed\u8a00\u6a21\u578b\u8fdb\u884c\u5efa\u6a21\uff1a \u6211\u6ca1\u6709\u5b8c\u6210\u4e0a\u7ea7\u5e03\u7f6e\u7ed9\u6211\u7684\u4efb\u52a1\uff0c\u6240\u4ee5 \u88ab\u5f00\u9664\u4e86 \u8ba9\u7535\u8111\u6765\u586b\u5199\u4e0b\u5212\u7ebf\u7684\u8bcd\u6700\u6709\u53ef\u80fd\u7684\u662f\u300e\u6211\u300f\uff0c\u800c\u4e0d\u592a\u53ef\u80fd\u662f\u300e\u5c0f\u660e\u300f\uff0c\u751a\u81f3\u662f\u300e\u5403\u996d\u300f\u3002 \u8bed\u8a00\u6a21\u578b\u5c31\u662f\u8fd9\u6837\u7684\u4e1c\u897f\uff1a\u7ed9\u5b9a\u4e00\u4e2a\u4e00\u53e5\u8bdd\u524d\u9762\u7684\u90e8\u5206\uff0c\u9884\u6d4b\u63a5\u4e0b\u6765\u6700\u6709\u53ef\u80fd\u7684\u4e00\u4e2a\u8bcd\u662f\u4ec0\u4e48\u3002","title":"\u6982\u8ff0"},{"location":"llm/nlp/rnns/#_2","text":"\u57fa\u672c\u7684 RNN\uff0c\u7ed3\u6784\u7531 \u8f93\u5165\u5c42\u3001\u4e00\u4e2a\u9690\u85cf\u5c42\u548c\u8f93\u51fa\u5c42 \u7ec4\u6210\u3002 x \u662f\u8f93\u5165\u5411\u91cf o \u662f\u8f93\u51fa\u5411\u91cf s \u8868\u793a\u9690\u85cf\u5c42\u7684\u503c U \u662f\u8f93\u5165\u5c42\u5230\u9690\u85cf\u5c42\u7684\u6743\u91cd\u77e9\u9635 V \u65f6\u9690\u85cf\u5c42\u5230\u8f93\u51fa\u5c42\u7684\u6743\u91cd\u77e9\u9635 \u5faa\u73af\u795e\u7ecf\u7f51\u7edc\u7684\u9690\u85cf\u5c42\u7684\u503c s \u4e0d\u4ec5\u4ec5\u53d6\u51b3\u4e8e\u5f53\u524d\u8fd9\u6b21\u7684\u8f93\u5165 x\uff0c\u8fd8\u53d6\u51b3\u4e8e\u4e0a\u4e00\u6b21\u9690\u85cf\u5c42\u7684\u503c s\u3002\u6743\u91cd\u77e9\u9635 W \u5c31\u662f\u9690\u85cf\u5c42\u4e0a\u4e00\u6b21\u7684\u503c\u4f5c\u4e3a\u8fd9\u4e00\u6b21\u7684\u8f93\u5165\u7684\u6743\u91cd\u3002 \u5c06\u4e0a\u56fe\u7684\u57fa\u672c RNN \u7ed3\u6784\u5728\u65f6\u95f4\u7ef4\u5ea6\u5c55\u5f00\uff08RNN \u662f\u4e00\u4e2a\u94fe\u5f0f\u7ed3\u6784\uff0c\u6bcf\u4e2a\u65f6\u95f4\u7247\u4f7f\u7528\u7684\u90fd\u662f\u76f8\u540c\u7684\u53c2\u6570\uff09 \u8fd9\u4e2a\u7f51\u7edc\u5728 t \u65f6\u523b\u63a5\u6536\u5230\u8f93\u5165 \\(x_t\\) \u4e4b\u540e\uff0c\u9690\u85cf\u5c42\u7684\u503c\u662f \\(s_t\\) \uff0c\u8f93\u51fa\u5c42\u7684\u503c\u662f \\(o_t\\) \uff0c \u5173\u952e\u7684\u662f\uff0c \\(s_t\\) \u7684\u503c\u4e0d\u4ec5\u4ec5\u53d6\u51b3\u4e8e \\(x_t\\) \uff0c\u8fd8\u53d6\u51b3\u4e8e \\(s_{t-1}\\) \u3002 \\[ s_t=f(U * x_t + W * s_{t-1}) \\\\ o_t=g(V * s_t) \\] \u516c\u5f0f1 \u662f\u9690\u85cf\u5c42\u7684\u8ba1\u7b97\u516c\u5f0f\uff0c\u5b83\u662f\u5faa\u73af\u5c42\u3002U \u662f\u8f93\u5165 x \u7684\u6743\u91cd\u77e9\u9635\uff0cW \u662f \u4e0a\u4e00\u6b21\u9690\u85cf\u5c42\u503c \\(s_{t-1}\\) \u4f5c\u4e3a\u5219\u4e00\u6b21\u7684\u8f93\u5165\u7684\u6743\u91cd\u77e9\u9635\uff0cf \u662f\u6fc0\u6d3b\u51fd\u6570\u3002 \u516c\u5f0f2 \u662f\u8f93\u51fa\u5c42\u7684\u8ba1\u7b97\u516c\u5f0f\uff0cV \u662f\u8f93\u51fa\u5c42\u7684\u6743\u91cd\u77e9\u9635\uff0cg \u662f\u6fc0\u6d3b\u51fd\u6570\u3002 \u9690\u85cf\u5c42\u6709\u4e24\u4e2a\u8f93\u5165\uff0c\u7b2c\u4e00\u662f U \u4e0e \\(x_t\\) \u5411\u91cf\u7684\u4e58\u79ef\uff0c\u7b2c\u4e8c\u662f\u4e0a\u4e00\u9690\u85cf\u5c42\u8f93\u51fa\u7684\u72b6\u6001 \\(s_{t-1}\\) \u4e0e W \u7684\u4e58\u79ef\u3002\u7b49\u4e8e\u4e0a\u4e00\u4e2a\u65f6\u523b\u8ba1\u7b97\u7684 \\(s_{t-1}\\) \u9700\u8981\u7f13\u5b58\u4e00\u4e0b\uff0c\u5728\u672c\u6b21\u8f93\u5165 \\(x_t\\) \u4e00\u8d77\u8ba1\u7b97\uff0c\u5171\u540c\u8f93\u51fa\u6700\u540e\u7684 \\(o_t\\) \u3002 \u5982\u679c\u53cd\u590d\u628a\u516c\u5f0f1\u5e26\u5165\u516c\u5f0f2\uff0c\u53ef\u4ee5\u5f97\u5230\uff1a \\[ \\begin{aligned} o_t&=g(Vs_t)\\\\ &=Vf(Ux_t+Ws_{t-1})\\\\ &=Vf(Ux_t+Wf(Ux_{t-1}+Ws_{t-2}))\\\\ &=Vf(Ux_t+Wf(Ux_{t-1}+Wf(Ux_{t-2}+Ws_{t-3})))\\\\ &=Vf(Ux_t+Wf(Ux_{t-1}+Wf(Ux_{t-2}+Wf(Ux_{t-3}+...)))) \\end{aligned} \\] \u4ece\u4e0a\u9762\u53ef\u4ee5\u770b\u51fa\uff0c\u5faa\u73af\u795e\u7ecf\u7f51\u7edc\u7684\u8f93\u51fa\u503c\uff0c\u662f\u53d7\u524d\u9762\u5386\u6b21\u8f93\u5165\u503c \\(x_t\u3001x_{t-1}\u3001x_{t-2}\u3001x_{t-3}\u3001...\\) \u5f71\u54cd\u7684\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u5faa\u73af\u795e\u7ecf\u7f51\u7edc\u53ef\u4ee5\u5f80\u524d\u770b\u4efb\u610f\u591a\u4e2a\u8f93\u5165\u503c\u7684\u539f\u56e0\u3002\u8fd9\u6837\u5176\u5b9e\u4e0d\u597d\uff0c\u56e0\u4e3a\u5982\u679c\u592a\u524d\u9762\u7684\u503c\u548c\u540e\u9762\u7684\u503c\u5df2\u7ecf\u6ca1\u6709\u5173\u7cfb\u4e86\uff0c\u5faa\u73af\u795e\u7ecf\u7f51\u7edc\u8fd8\u8003\u8651\u524d\u9762\u7684\u503c\u7684\u8bdd\uff0c\u5c31\u4f1a\u5f71\u54cd\u540e\u9762\u503c\u7684\u5224\u65ad\u3002","title":"\u57fa\u672c\u5faa\u73af\u795e\u7ecf\u7f51\u7edc"},{"location":"llm/nlp/rnns/#_3","text":"\u5bf9\u4e8e\u8bed\u8a00\u6a21\u578b\u6765\u8bf4\uff0c\u5f88\u591a\u65f6\u5019\u5149\u770b\u524d\u9762\u7684\u8bcd\u662f\u4e0d\u591f\u7684\uff0c\u6bd4\u5982\u4e0b\u9762\u8fd9\u53e5\u8bdd\uff1a \u6211\u7684\u624b\u673a\u574f\u4e86\uff0c\u6211\u6253\u7b97 \u4e00\u90e8\u65b0\u7684\u624b\u673a \u3002 \u6211\u4eec\u8fd9\u4e2a\u65f6\u5019\u5c31\u9700\u8981\u53cc\u5411\u5faa\u73af\u795e\u7ecf\u7f51\u7edc\u3002 \u4ece\u4e0a\u56fe\u53ef\u4ee5\u770b\u51fa\uff0c\u53cc\u5411\u5faa\u73af\u795e\u7ecf\u7f51\u7edc\u7684\u9690\u85cf\u5c42\u9700\u8981\u4fdd\u5b58\u4e24\u4e2a\u503c\uff0c\u4e00\u4e2a \\(A\\) \u53c2\u4e0e\u6b63\u5411\u8ba1\u7b97\uff0c\u53e6\u4e00\u4e2a\u503c \\(A^\\prime\\) \u53c2\u4e0e\u53cd\u5411\u8ba1\u7b97\u3002\u6700\u7ec8\u7684\u8f93\u51fa\u503c \\(y_2\\) \u53d6\u51b3\u4e8e \\(A_2\\) \u548c \\(A_2^\\prime\\) \u3002\u5176\u8ba1\u7b97\u65b9\u6cd5\u4e3a\uff1a \\[ y_2=g(VA_2+V\\prime A_2^\\prime) \\] \\(A_2\\) \u548c \\(A_2^\\prime\\) \u7684\u8ba1\u7b97\u65b9\u6cd5\u4e3a\uff1a \\[ \\begin{aligned} A_2&=f(WA_1+Ux_2)\\\\ A_2^\\prime&=f(W^\\prime A_3^\\prime + U^\\prime x_2) \\end{aligned} \\] \u73b0\u5728\u53ef\u4ee5\u770b\u51fa\u4e00\u822c\u7684\u89c4\u5f8b\uff1a\u6b63\u5411\u8ba1\u7b97\u65f6\uff0c\u9690\u85cf\u5c42\u7684\u503c \\(S_t\\) \u4e0e \\(S_{t-1}\\) \u6709\u5173\uff1b\u53cd\u5411\u8ba1\u7b97\u65f6\uff0c\u9690\u85cf\u5c42\u7684\u503c \\(S_t^\\prime\\) \u4e0e \\(S_{t+1}^\\prime\\) \u6709\u5173\uff1b\u6700\u7ec8\u7684\u8f93\u51fa\u53d6\u51b3\u4e8e\u6b63\u5411\u548c\u53cd\u5411\u8ba1\u7b97\u7684\u52a0\u548c\u3002\u73b0\u5728\uff0c\u4eff\u7167\u516c\u5f0f1\u548c\u516c\u5f0f2\uff0c\u5199\u51faBRNN\u7684\u8ba1\u7b97\u516c\u5f0f\uff1a \\[ \\begin{aligned} o_t=g(Vs_t+V^\\prime s_t^\\prime)\\\\ s_t=f(Ux_t+Ws_{t-1})\\\\ s_t^\\prime=f(U^\\prime x_t+W^\\prime s_{t+1}^\\prime) \\end{aligned} \\] \u4ece\u4e0a\u9762\u4e09\u4e2a\u516c\u5f0f\u53ef\u4ee5\u770b\u5230\uff0c\u6b63\u5411\u8ba1\u7b97\u548c\u53cd\u5411\u8ba1\u7b97\u4e0d\u5171\u4eab\u6743\u91cd\uff0c\u4e5f\u5c31\u662f\u8bf4 \\(U\\) \u548c \\(U^\\prime\\) \u3001 \\(W\\) \u548c \\(W^\\prime\\) \u3001 \\(V\\) \u548c \\(V^\\prime\\) \u662f\u4e0d\u540c\u7684\u6743\u91cd\u77e9\u9635\u3002","title":"\u53cc\u5411\u5faa\u73af\u795e\u7ecf\u7f51\u7edc"},{"location":"llm/nlp/rnns/#_4","text":"\u4e0a\u6587\u4ecb\u7ecd\u7684\u51e0\u79cd RNN \u5e76\u4e0d\u80fd\u5f88\u597d\u5730\u5904\u7406\u8f83\u957f\u7684\u5e8f\u5217\uff0cRNN \u5728\u8bad\u7ec3\u4e2d\u5f88\u5bb9\u6613\u53d1\u751f\u68af\u5ea6\u7206\u70b8\u548c\u68af\u5ea6\u6d88\u5931\uff0c\u8fd9\u5bfc\u81f4\u68af\u5ea6\u4e0d\u80fd\u5728\u8f83\u957f\u5e8f\u5217\u4e2d\u4e00\u76f4\u4f20\u9012\u4e0b\u53bb\uff0c\u4ece\u800c\u4f7f RNN \u65e0\u6cd5\u6355\u6349\u5230\u957f\u8ddd\u79bb\u7684\u5f71\u54cd\u3002 \u901a\u5e38\u6765\u8bf4\uff0c\u68af\u5ea6\u7206\u70b8\u66f4\u5bb9\u6613\u5904\u7406\u4e00\u4e9b\u3002\u56e0\u4e3a\u68af\u5ea6\u7206\u70b8\u7684\u65f6\u5019\uff0c\u6211\u4eec\u7684\u7a0b\u5e8f\u4f1a\u6536\u5230NaN\u9519\u8bef\u3002\u6211\u4eec\u4e5f\u53ef\u4ee5\u8bbe\u7f6e\u4e00\u4e2a\u68af\u5ea6\u9608\u503c\uff0c\u5f53\u68af\u5ea6\u8d85\u8fc7\u8fd9\u4e2a\u9608\u503c\u7684\u65f6\u5019\u53ef\u4ee5\u76f4\u63a5\u622a\u53d6\u3002 \u68af\u5ea6\u6d88\u5931\u66f4\u96be\u68c0\u6d4b\uff0c\u800c\u4e14\u4e5f\u66f4\u96be\u5904\u7406\u4e00\u4e9b\u3002\u603b\u7684\u6765\u8bf4\uff0c\u6211\u4eec\u6709\u4e09\u79cd\u65b9\u6cd5\u5e94\u5bf9\u68af\u5ea6\u6d88\u5931\u95ee\u9898\uff1a 1\u3001\u5408\u7406\u7684\u521d\u59cb\u5316\u6743\u91cd\u503c\u3002\u521d\u59cb\u5316\u6743\u91cd\uff0c\u4f7f\u6bcf\u4e2a\u795e\u7ecf\u5143\u5c3d\u53ef\u80fd\u4e0d\u8981\u53d6\u6781\u5927\u6216\u6781\u5c0f\u503c\uff0c\u4ee5\u8eb2\u5f00\u68af\u5ea6\u6d88\u5931\u7684\u533a\u57df\u3002 2\u3001\u4f7f\u7528relu\u4ee3\u66ffsigmoid\u548ctanh\u4f5c\u4e3a\u6fc0\u6d3b\u51fd\u6570\u3002 3\u3001\u4f7f\u7528\u5176\u4ed6\u7ed3\u6784\u7684RNNs\uff0c\u6bd4\u5982\u957f\u77ed\u65f6\u8bb0\u5fc6\u7f51\u7edc\uff08LTSM\uff09\u548cGated Recurrent Unit\uff08GRU\uff09\uff0c\u8fd9\u662f\u6700\u6d41\u884c\u7684\u505a\u6cd5\u3002","title":"\u68af\u5ea6\u7206\u70b8\u548c\u68af\u5ea6\u6d88\u5931"},{"location":"llm/nlp/rnns/#lstm","text":"\u539f\u59cb RNN \u7684\u9690\u85cf\u5c42\u53ea\u6709\u4e00\u4e2a\u72b6\u6001\uff0c\u5373 h\uff0c\u5b83\u5bf9\u77ed\u671f\u7684\u8f93\u5165\u975e\u5e38\u654f\u611f\u3002\u90a3\u4e48\u5982\u679c\u6211\u4eec\u518d\u52a0\u4e00\u4e2a\u95e8\uff08gate\uff09\u673a\u5236\u7528\u4e8e\u63a7\u5236\u7279\u5f81\u7684\u6d41\u901a\u548c\u635f\u5931\uff0c\u5373 c\uff0c\u8ba9\u5b83\u6765\u4fdd\u5b58\u957f\u671f\u7684\u72b6\u6001\uff0c\u8fd9\u5c31\u662f \u957f\u77ed\u65f6\u8bb0\u5fc6\u7f51\u7edc\uff08Long Short Term Memory\uff0cLSTM\uff09 \u3002 \u65b0\u589e\u52a0\u7684\u72b6\u6001 c\uff0c\u79f0\u4e3a\u5355\u5143\u72b6\u6001\u3002\u628a LSTM \u6309\u7167\u65f6\u95f4\u7ef4\u5ea6\u5c55\u5f00\uff1a \u53ef\u4ee5\u770b\u5230\u5728 t \u65f6\u523b LSTM \u7684\u8f93\u5165\u6709\u4e09\u4e2a \uff1a\u5f53\u524d\u65f6\u523b\u7f51\u7edc\u7684\u8f93\u5165\u503c \\(x_t\\) \u3001\u4e0a\u4e00\u65f6\u523b LSTM \u7684\u8f93\u51fa\u503c \\(h_{t-1}\\) \u3001\u4ee5\u53ca\u4e0a\u4e00\u65f6\u523b\u7684\u8bb0\u5fc6\u5355\u5143\u5411\u91cf \\(c_{t-1}\\) \u3002 LSTM \u7684\u8f93\u51fa\u6709\u4e24\u4e2a \uff1a\u5f53\u524d\u65f6\u523b\u7684 LSTM \u8f93\u51fa\u503c \\(h_t\\) \u3001\u548c\u5f53\u524d\u65f6\u523b\u7684\u8bb0\u5fc6\u5355\u5143\u5411\u91cf \\(c_t\\) \u3002 \u8bb0\u5fc6\u5355\u5143 c \u5728 LSTM \u5c42\u5185\u90e8\u7ed3\u675f\u5de5\u4f5c\uff0c\u4e0d\u5411\u5176\u4ed6\u5c42\u8f93\u51fa\u3002LSTM \u7684\u8f93\u51fa\u4ec5\u6709\u9690\u85cf\u72b6\u6001\u5411\u91cf h\u3002 LSTM \u7684\u5173\u952e\u662f\u5355\u5143\u72b6\u6001\uff0c\u5373\u8d2f\u7a7f\u56fe\u8868\u9876\u90e8\u7684\u6c34\u5e73\u7ebf\uff0c\u6709\u70b9\u50cf\u4f20\u9001\u5e26\u3002\u8fd9\u4e00\u90e8\u5206\u4e00\u822c\u53eb\u505a\u5355\u5143\u72b6\u6001\uff08cell state\uff09\uff0c\u5b83\u81ea\u59cb\u81f3\u7ec8\u5b58\u5728\u4e8e LSTM \u7684\u6574\u4e2a\u94fe\u5f0f\u7cfb\u7edf\u4e2d\u3002 \u8bb0\u5fc6\u5355\u5143\u72b6\u6001\u7684\u8ba1\u7b97\u516c\u5f0f\uff1a \\(\u516c\u5f0f1\uff1ac_{t}=f_{t} \\odot c_{t-1}+i_{t} \\odot g_t\\)","title":"\u957f\u77ed\u671f\u8bb0\u5fc6\u7f51\u7edc LSTM"},{"location":"llm/nlp/rnns/#_5","text":"\\(f_t\\) \u53eb\u505a \u9057\u5fd8\u95e8 \uff0c\u8868\u793a \\(C_{t-1}\\) \u7684\u54ea\u4e9b\u7279\u5f81\u88ab\u7528\u4e8e\u8ba1\u7b97 \\(C_t\\) \u3002 \\(f_t\\) \u662f\u4e00\u4e2a\u5411\u91cf\uff0c\u5411\u91cf\u7684\u6bcf\u4e2a\u5143\u7d20\u5747\u4f4d\u4e8e(0~1)\u8303\u56f4\u5185\u3002\u901a\u5e38\u6211\u4eec\u4f7f\u7528 sigmoid \u4f5c\u4e3a\u6fc0\u6d3b\u51fd\u6570\uff0csigmoid \u7684\u8f93\u51fa\u662f\u4e00\u4e2a\u4ecb\u4e8e(0~1)\u533a\u95f4\u5185\u7684\u503c\uff0c\u4f46\u662f\u5f53\u4f60\u89c2\u5bdf\u4e00\u4e2a\u8bad\u7ec3\u597d\u7684 LSTM \u65f6\uff0c\u4f60\u4f1a\u53d1\u73b0\u95e8\u7684\u503c\u7edd\u5927\u591a\u6570\u90fd\u975e\u5e38\u63a5\u8fd1 0 \u6216 1\uff0c\u5176\u4f59\u7684\u503c\u5c11\u4e4b\u53c8\u5c11\u3002 \u9057\u5fd8\u95e8\u7684\u8ba1\u7b97\u516c\u5f0f\uff1a \\(\u516c\u5f0f2\uff1af_t=\\sigma (x_tW_x^{(f)}+h_{h-1}W_h^{(f)}+b^{(f)})\\)","title":"\u9057\u5fd8\u95e8"},{"location":"llm/nlp/rnns/#_6","text":"\\(\\tilde{C}_t\\) \u8868\u793a\u5355\u5143\u72b6\u6001\u66f4\u65b0\u503c\uff0c\u6709\u8f93\u5165\u6570\u636e \\(x_t\\) \u548c\u9690\u8282\u70b9 \\(h_{t-1}\\) \u7ecf\u7531\u4e00\u4e2a\u795e\u7ecf\u7f51\u7edc\u5c42\u5f97\u5230\uff0c\u5355\u5143\u72b6\u6001\u66f4\u65b0\u503c\u7684\u6fc0\u6d3b\u51fd\u6570\u901a\u5e38\u4f7f\u7528 tanh\u3002 \\(i_t\\) \u53eb\u505a\u8f93\u5165\u95e8\uff0c\u540c \\(f_t\\) \u4e00\u6837\u4e5f\u662f\u4e00\u4e2a\u5143\u7d20\u4ecb\u4e8e(0~1)\u533a\u95f4\u5185\u7684\u5411\u91cf\uff0c\u540c\u6837\u7531 \\(x_t\\) \u548c \\(h_{t-1}\\) \u7ecf\u7531 sigmoid \u6fc0\u6d3b\u51fd\u6570\u8ba1\u7b97\u800c\u6210\u3002 \u8f93\u5165\u95e8\u548c\u5355\u5143\u66f4\u65b0\u503c\u7684\u8ba1\u7b97\u65b9\u5f0f\uff1a \\(\u516c\u5f0f3\uff1ai_t=\\sigma (x_tW_x^{(i)}+h_{t-1}W_h^{i}+b^{(i)})\\) \\(\u516c\u5f0f4\uff1ag_t=tanh(x_tW_x^{(g)}+h_{t-1}W_h^{(g)}+b^{(g)})\\)","title":"\u8f93\u5165\u95e8"},{"location":"llm/nlp/rnns/#_7","text":"\u6700\u540e\uff0c\u4e3a\u4e86\u8ba1\u7b97\u9884\u6d4b\u503c \\(\\hat{y}_t\\) \u548c\u751f\u6210\u4e0b\u4e2a\u65f6\u95f4\u7247\u5b8c\u6574\u7684\u8f93\u5165\uff0c\u6211\u4eec\u9700\u8981\u8ba1\u7b97\u9690\u8282\u70b9\u7684\u8f93\u51fa \\(h_t\\) \u3002 \u8f93\u51fa\u95e8\u548c\u9690\u8282\u70b9\u7684\u8ba1\u7b97\u516c\u5f0f \\(\u516c\u5f0f5\uff1ao_t=\\sigma (x_tW_x^{(o)}+h_{t-1}W_h^{(o)}+b^{(o)})\\) \\(\u516c\u5f0f6\uff1ah_t=o_t\\odot tanh(c_t)\\) \u6211\u4eec\u6765\u770b\u516c\u5f0f2\u30013\u30014\u30015\uff0c\u90fd\u662f\u578b\u5982 \\(xW_x+hW_h+b\\) \u7684\u683c\u5f0f\uff0c\u56e0\u6b64\u53ef\u4ee5\u6574\u5408\u4e3a\u901a\u8fc7\u4e00\u4e2a\u5f0f\u5b50\u8fdb\u884c\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a 4 \u4e2a\u6743\u91cd\uff08\u6216\u504f\u7f6e\uff09\u88ab\u6574\u5408\u4e3a\u4e86 1 \u4e2a\u3002\u5982\u6b64\uff0c\u539f\u672c\u5355\u72ec\u6267\u884c4 \u6b21\u7684\u4eff\u5c04\u53d8\u6362\u901a\u8fc71 \u6b21\u8ba1\u7b97\u5373\u53ef\u5b8c\u6210\uff0c\u53ef\u4ee5\u52a0\u5feb\u8ba1\u7b97\u901f\u5ea6\u3002\u8fd9\u662f\u56e0\u4e3a\u77e9\u9635\u5e93\u8ba1\u7b97\u201c\u5927\u77e9\u9635\u201d\u65f6\u901a\u5e38\u4f1a\u66f4\u5feb\uff0c\u800c\u4e14\u901a\u8fc7\u5c06\u6743\u91cd\u6574\u5408\u5230\u4e00\u8d77\u7ba1\u7406\uff0c\u6e90\u4ee3\u7801\u4e5f\u4f1a\u66f4\u7b80\u6d01\u3002 \u5047\u8bbe \\(W_x\u3001W_h\\) \u548c \\(b\\) \u5206\u522b\u5305\u542b 4 \u4e2a\u6743\u91cd\uff08\u6216\u504f\u7f6e\uff09\uff0c\u6b64\u65f6 LSTM \u7684\u8ba1\u7b97\u56fe\u5982\u4e0b\u6240\u793a\u3002 import tensorflow as tf from tensorflow.keras import layers inputs = tf . random . normal (( 64 , 6 , 10 )) LSTM_layer = layers . LSTM ( units = 20 , return_sequences = True , return_state = True ) outputs , final_memory_state , final_carry_state = LSTM_layer ( inputs ) print ( outputs . shape , final_memory_state . shape , final_carry_state . shape ) # (64, 6, 20) (64, 20) (64, 20) print ( len ( LSTM_layer . weights )) # 3 print ( LSTM_layer . weights [ 0 ] . shape ) # Wx (10, 80) print ( LSTM_layer . weights [ 1 ] . shape ) # Wh (20, 80) print ( LSTM_layer . weights [ 2 ] . shape ) # bias (80,)","title":"\u8f93\u51fa\u95e8"},{"location":"llm/nlp/rnns/#gru","text":"LSTM \u7684\u53c2\u6570\u592a\u591a\uff0c\u8ba1\u7b97\u9700\u8981\u5f88\u957f\u65f6\u95f4\u3002\u56e0\u6b64\uff0c\u6700\u8fd1\u4e1a\u754c\u53c8\u63d0\u51fa\u4e86 GRU\uff08Gated RecurrentUnit\uff0c\u95e8\u63a7\u5faa\u73af\u5355\u5143\uff09\u3002GRU \u4fdd\u7559\u4e86 LSTM\u4f7f\u7528\u95e8\u7684\u7406\u5ff5\uff0c\u4f46\u662f\u51cf\u5c11\u4e86\u53c2\u6570\uff0c\u7f29\u77ed\u4e86\u8ba1\u7b97\u65f6\u95f4\u3002 \u76f8\u5bf9\u4e8e LSTM \u4f7f\u7528\u9690\u85cf\u72b6\u6001\u548c\u8bb0\u5fc6\u5355\u5143\u4e24\u6761\u7ebf\uff0cGRU\u53ea\u4f7f\u7528\u9690\u85cf\u72b6\u6001\u3002\u5f02\u540c\u70b9\u5982\u4e0b\uff1a GRU \u7684\u8ba1\u7b97\u56fe\u5982\u4e0b\u6240\u793a\u3002 GRU \u8ba1\u7b97\u56fe\u4e2d\uff0c \\(\\sigma\\) \u8282\u70b9\u548c tanh \u8282\u70b9\u6709\u4e13\u7528\u7684\u6743\u91cd\uff0c\u8282\u70b9\u5185\u90e8\u8fdb\u884c\u4eff\u5c04\u53d8\u6362\uff08\u201c1\u2212\u201d\u8282\u70b9\u8f93\u5165x\uff0c\u8f93\u51fa1 \u2212 x\uff09 \\(\u516c\u5f0f2.1\uff1az=\\sigma(x_t W_x^{(z)}+h_{t-1} W_h^{(z)}+b^{(z)})\\) \\(\u516c\u5f0f2.2\uff1ar=\\sigma(x_t W_x^{(r)}+h_{t-1} W_h^{(r)}+b^{(r)})\\) \\(\u516c\u5f0f2.3\uff1a\\tilde{h}=\\tanh (x_t W_x+(r \\odot h_{t-1}) W_h+b)\\) \\(\u516c\u5f0f2.4\uff1ah_t=(1-z) \\odot h_{t-1}+z \\odot \\tilde{h}\\) GRU \u4e2d\u8fdb\u884c\u7684\u8ba1\u7b97\u7531\u4e0a\u8ff0 4 \u4e2a\u5f0f\u5b50\u8868\u793a\uff08\u8fd9\u91cc \\(x_t\\) \u548c \\(h_{t\u22121}\\) \u90fd\u662f\u884c\u5411\u91cf\uff09\uff0c\u5982\u56fe\u6240\u793a\uff0cGRU \u6ca1\u6709\u8bb0\u5fc6\u5355\u5143\uff0c\u53ea\u6709\u4e00\u4e2a\u9690\u85cf\u72b6\u6001 h \u5728\u65f6\u95f4\u65b9\u5411\u4e0a\u4f20\u64ad\u3002\u8fd9\u91cc\u4f7f\u7528 r \u548c z \u5171\u4e24\u4e2a\u95e8\uff08LSTM \u4f7f\u7528 3 \u4e2a\u95e8\uff09\uff0cr \u79f0\u4e3a reset \u95e8\uff0cz \u79f0\u4e3a update \u95e8\u3002 r\uff08reset\u95e8\uff09 \u51b3\u5b9a\u5728\u591a\u5927\u7a0b\u5ea6\u4e0a\u201c\u5ffd\u7565\u201d\u8fc7\u53bb\u7684\u9690\u85cf\u72b6\u6001\u3002\u6839\u636e\u516c\u5f0f2.3\uff0c\u5982\u679c r \u662f 0\uff0c\u5219\u65b0\u7684\u9690\u85cf\u72b6\u6001 \\(\\tilde{h}\\) \u4ec5\u53d6\u51b3\u4e8e\u8f93\u5165 \\(x_t\\) \u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u6b64\u65f6\u8fc7\u53bb\u7684\u9690\u85cf\u72b6\u6001\u5c06\u5b8c\u5168\u88ab\u5ffd\u7565\u3002 z\uff08update\u95e8\uff09 \u662f\u66f4\u65b0\u9690\u85cf\u72b6\u6001\u7684\u95e8\uff0c\u5b83\u626e\u6f14\u4e86 LSTM \u7684 forget \u95e8\u548cinput \u95e8\u4e24\u4e2a\u89d2\u8272\u3002\u516c\u5f0f2.4 \u7684 \\((1-z) \\odot h_{t-1}\\) \u90e8\u5206\u5145\u5f53 forget \u95e8\u7684\u529f\u80fd\uff0c\u4ece\u8fc7\u53bb\u7684\u9690\u85cf\u72b6\u6001\u4e2d\u5220\u9664\u5e94\u8be5\u88ab\u9057\u5fd8\u7684\u4fe1\u606f\u3002 \\(z \\odot \\tilde{h}\\) \u7684\u90e8\u5206\u5145\u5f53 input \u95e8\u7684\u529f\u80fd\uff0c\u5bf9\u65b0\u589e\u7684\u4fe1\u606f\u8fdb\u884c\u52a0\u6743\u3002","title":"\u95e8\u63a7\u5faa\u73af\u5355\u5143 GRU"},{"location":"llm/nlp/word2vec/","text":"Word2Vec \u00b6 \u7ea6 2803 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f Abstract Word2Vec \u7684\u7279\u70b9\u662f\u80fd\u591f\u5c06\u5355\u8bcd\u8f6c\u5316\u4e3a\u5411\u91cf\u6765\u8868\u793a\uff0c\u8fd9\u6837\u8bcd\u4e0e\u8bcd\u4e4b\u95f4\u5c31\u53ef\u4ee5\u5b9a\u91cf\u5730\u53bb\u5ea6\u91cf\u5b83\u4eec\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u6316\u6398\u8bcd\u4e4b\u95f4\u7684\u8054\u7cfb\u3002 \u6700\u65e9\u7684\u8bcd\u5411\u91cf\u91c7\u7528 One-Hot \u7f16\u7801\uff0c\u53c8\u79f0\u4e00\u4f4d\u6709\u6548\u7f16\u7801\uff0c\u6bcf\u4e2a\u8bcd\u5411\u91cf\u7ef4\u5ea6\u5927\u5c0f\u4e3a\u6574\u4e2a\u8bcd\u6c47\u8868\u7684\u5927\u5c0f\uff0c\u5bf9\u4e8e\u6bcf\u4e2a\u5177\u4f53\u7684\u8bcd\u6c47\u8868\u4e2d\u7684\u8bcd\uff0c\u5c06\u5bf9\u5e94\u7684\u4f4d\u7f6e\u7f6e\u4e3a 1. Word2Vec \u57fa\u672c\u601d\u60f3 \u00b6 \u91c7\u7528One-Hot\u7f16\u7801\u65b9\u5f0f\u6765\u8868\u793a\u8bcd\u5411\u91cf\u975e\u5e38\u7b80\u5355\uff0c\u4f46\u7f3a\u70b9\u4e5f\u662f\u663e\u800c\u6613\u89c1\u7684\uff0c\u4e00\u65b9\u9762\u6211\u4eec\u5b9e\u9645\u4f7f\u7528\u7684\u8bcd\u6c47\u8868\u5f88\u5927\uff0c\u7ecf\u5e38\u662f\u767e\u4e07\u7ea7\u4ee5\u4e0a\uff0c\u8fd9\u4e48\u9ad8\u7ef4\u7684\u6570\u636e\u5904\u7406\u8d77\u6765\u4f1a\u6d88\u8017\u5927\u91cf\u7684\u8ba1\u7b97\u8d44\u6e90\u4e0e\u65f6\u95f4\u3002\u53e6\u4e00\u65b9\u9762\uff0cOne-Hot\u7f16\u7801\u4e2d\u6240\u6709\u8bcd\u5411\u91cf\u4e4b\u95f4\u5f7c\u6b64\u6b63\u4ea4\uff0c\u6ca1\u6709\u4f53\u73b0\u8bcd\u4e0e\u8bcd\u4e4b\u95f4\u7684\u76f8\u4f3c\u5173\u7cfb\u3002 Distributed representation\u53ef\u4ee5\u89e3\u51b3One-Hot\u7f16\u7801\u5b58\u5728\u7684\u95ee\u9898\uff0c\u5b83\u7684\u601d\u8def\u662f\u901a\u8fc7\u8bad\u7ec3\uff0c\u5c06\u539f\u6765One-Hot\u7f16\u7801\u7684\u6bcf\u4e2a\u8bcd\u90fd\u6620\u5c04\u5230\u4e00\u4e2a\u8f83\u77ed\u7684\u8bcd\u5411\u91cf\u4e0a\u6765\uff0c\u800c\u8fd9\u4e2a\u8f83\u77ed\u7684\u8bcd\u5411\u91cf\u7684\u7ef4\u5ea6\u53ef\u4ee5\u7531\u6211\u4eec\u81ea\u5df1\u5728\u8bad\u7ec3\u65f6\u6839\u636e\u4efb\u52a1\u9700\u8981\u6765\u81ea\u5df1\u6307\u5b9a\u3002 \u4e0b\u56fe\u662f\u91c7\u7528Distributed representation\u7684\u4e00\u4e2a\u4f8b\u5b50\uff0c\u6211\u4eec\u5c06\u8bcd\u6c47\u8868\u91cc\u7684\u8bcd\u7528\"Royalty\",\"Masculinity\", \"Femininity\"\u548c\"Age\"4\u4e2a\u7ef4\u5ea6\u6765\u8868\u793a\uff0cKing\u8fd9\u4e2a\u8bcd\u5bf9\u5e94\u7684\u8bcd\u5411\u91cf\u53ef\u80fd\u662f(0.99,0.99,0.05,0.7)\u3002\u5f53\u7136\u5728\u5b9e\u9645\u60c5\u51b5\u4e2d\uff0c\u6211\u4eec\u5e76\u4e0d\u80fd\u5bf9\u8bcd\u5411\u91cf\u7684\u6bcf\u4e2a\u7ef4\u5ea6\u505a\u4e00\u4e2a\u5f88\u597d\u7684\u89e3\u91ca\u3002 \u6709\u4e86\u7528Distributed Representation\u8868\u793a\u7684\u8f83\u77ed\u7684\u8bcd\u5411\u91cf\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u8f83\u5bb9\u6613\u7684\u5206\u6790\u8bcd\u4e4b\u95f4\u7684\u5173\u7cfb\u4e86\uff0c\u6bd4\u5982\u6211\u4eec\u5c06\u8bcd\u7684\u7ef4\u5ea6\u964d\u7ef4\u52302\u7ef4\uff0c\u6709\u4e00\u4e2a\u6709\u8da3\u7684\u7814\u7a76\u8868\u660e\uff0c\u7528\u4e0b\u56fe\u7684\u8bcd\u5411\u91cf\u8868\u793a\u6211\u4eec\u7684\u8bcd\u65f6\uff0c\u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff1a \\[ \\vec{King} - \\vec{Man} + \\vec{Woman} \\approx \\vec{Queen} \\] \u53ef\u89c1\u6211\u4eec\u53ea\u8981\u5f97\u5230\u4e86\u8bcd\u6c47\u8868\u91cc\u6240\u6709\u8bcd\u5bf9\u5e94\u7684\u8bcd\u5411\u91cf\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u53ef\u4ee5\u505a\u5f88\u591a\u6709\u8da3\u7684\u4e8b\u60c5\u4e86\u3002\u4e0d\u8fc7\uff0c\u600e\u4e48\u8bad\u7ec3\u624d\u80fd\u5f97\u5230\u5408\u9002\u7684\u8bcd\u5411\u91cf\u5462\uff1f\u9488\u5bf9\u8fd9\u4e2a\u95ee\u9898\uff0cGoogle\u7684Tomas Mikolov\u5728\u4ed6\u7684\u8bba\u6587\u4e2d\u63d0\u51fa\u4e86CBOW\u548cSkip-gram\u4e24\u79cd\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u3002 Word2Vec \u539f\u7406 \u00b6 Word2Vec \u7684\u8bad\u7ec3\u6a21\u578b\u672c\u8d28\u4e0a\u662f\u53ea\u5177\u6709\u4e00\u4e2a\u9690\u542b\u5c42\u7684\u795e\u7ecf\u5143\u7f51\u7edc\u3002 \u5b83\u7684\u8f93\u5165\u91c7\u7528 One-Hot \u7f16\u7801\u7684\u8bcd\u6c47\u8868\u5411\u91cf\uff0c\u5b83\u7684\u8f93\u51fa\u4e5f\u662f One-Hot \u7f16\u7801\u7684\u8bcd\u6c47\u8868\u5411\u91cf\u3002\u4f7f\u7528\u6240\u6709\u7684\u6837\u672c\uff0c\u8bad\u7ec3\u8fd9\u4e2a\u795e\u7ecf\u7f51\u7edc\uff0c\u7b49\u5230\u6536\u655b\u4e4b\u540e\uff0c\u4ece\u8f93\u5165\u5c42\u5230\u9690\u542b\u5c42\u7684\u90a3\u4e9b\u6743\u91cd\uff0c\u4fbf\u662f\u6bcf\u4e00\u4e2a\u8bcd\u7684\u91c7\u7528Distributed Representation\u7684\u8bcd\u5411\u91cf\u3002\u6bd4\u5982\uff0c\u4e0a\u56fe\u4e2d\u5355\u8bcd\u7684Word embedding\u540e\u7684\u5411\u91cf\u4fbf\u662f\u77e9\u9635 \\(W_{V \\times N}\\) \u7684\u7b2ci\u884c\u7684\u8f6c\u7f6e\u3002\u8fd9\u6837\u6211\u4eec\u5c31\u628a\u539f\u672c\u7ef4\u6570\u4e3aV\u7684\u8bcd\u5411\u91cf\u53d8\u6210\u4e86\u7ef4\u6570\u4e3aN\u7684\u8bcd\u5411\u91cf\uff08N\u8fdc\u5c0f\u4e8eV\uff09\uff0c\u5e76\u4e14\u8bcd\u5411\u91cf\u95f4\u4fdd\u7559\u4e86\u4e00\u5b9a\u7684\u76f8\u5173\u5173\u7cfb\u3002 Google\u7684Mikolov\u5728\u5173\u4e8eWord2Vec\u7684\u8bba\u6587\u4e2d\u63d0\u51fa\u4e86CBOW\u548cSkip-gram\u4e24\u79cd\u6a21\u578b\uff0cCBOW\u9002\u5408\u4e8e\u6570\u636e\u96c6\u8f83\u5c0f\u7684\u60c5\u51b5\uff0c\u800cSkip-Gram\u5728\u5927\u578b\u8bed\u6599\u4e2d\u8868\u73b0\u66f4\u597d\u3002\u5176\u4e2dCBOW\u5982\u4e0b\u56fe\u5de6\u90e8\u5206\u6240\u793a\uff0c\u4f7f\u7528\u56f4\u7ed5\u76ee\u6807\u5355\u8bcd\u7684\u5176\u4ed6\u5355\u8bcd\uff08\u8bed\u5883\uff09\u4f5c\u4e3a\u8f93\u5165\uff0c\u5728\u6620\u5c04\u5c42\u505a\u52a0\u6743\u5904\u7406\u540e\u8f93\u51fa\u76ee\u6807\u5355\u8bcd\u3002\u4e0eCBOW\u6839\u636e\u8bed\u5883\u9884\u6d4b\u76ee\u6807\u5355\u8bcd\u4e0d\u540c\uff0cSkip-gram\u6839\u636e\u5f53\u524d\u5355\u8bcd\u9884\u6d4b\u8bed\u5883\uff0c\u5982\u4e0b\u56fe\u53f3\u90e8\u5206\u6240\u793a\u3002\u5047\u5982\u6211\u4eec\u6709\u4e00\u4e2a\u53e5\u5b50\u201cThere is an apple on the table\u201d\u4f5c\u4e3a\u8bad\u7ec3\u6570\u636e\uff0cCBOW\u7684\u8f93\u5165\u4e3a\uff08is,an,on,the\uff09\uff0c\u8f93\u51fa\u4e3aapple\u3002\u800cSkip-gram\u7684\u8f93\u5165\u4e3aapple\uff0c\u8f93\u51fa\u4e3a\uff08is,an,on,the\uff09\u3002 CBOW \u00b6 \u8f93\u5165\u5c42\uff1a\u4e0a\u4e0b\u6587\u5355\u8bcd\u7684 One-Hot \u7f16\u7801\u8bcd\u5411\u91cf\uff0cV \u4e3a\u8bcd\u6c47\u8868\u5355\u8bcd\u4e2a\u6570\uff0cC \u4e3a\u4e0a\u4e0b\u6587\u5355\u8bcd\u4e2a\u6570\u3002\u4ee5 \u201cThere is an apple on the table\u201d \u4e3a\u4f8b\uff0cC=4\uff0c\u6240\u4ee5\u6a21\u578b\u8f93\u5165\u662f\uff08is,an,on,the\uff094 \u4e2a\u5355\u8bcd\u7684 One-Hot \u7f16\u7801\u8bcd\u5411\u91cf\u3002 \u521d\u59cb\u5316\u4e00\u4e2a\u6743\u91cd\u77e9\u9635 \\(W_{V \\times N}\\) \uff0c\u7136\u540e\u7528\u6240\u6709\u8f93\u5165\u7684 One-Hot \u7f16\u7801\u8bcd\u5411\u91cf\u5de6\u4e58\u8be5\u77e9\u9635\uff0c\u5f97\u5230\u7ef4\u6570\u4e3a N \u7684\u5411\u91cf \\(w_1,w_2,...,w_c\\) \uff0c\u8fd9\u91cc\u7684 N \u7531\u81ea\u5df1\u6839\u636e\u4efb\u52a1\u9700\u8981\u8bbe\u7f6e\u3002 \u5c06\u6240\u5f97\u7684\u5411\u91cf \\(w_1,w_2,...,w_c\\) \u6c42\u548c\u53d6\u5e73\u5747\u4f5c\u4e3a\u9690\u85cf\u5c42\u5411\u91cf h\u3002 \u521d\u59cb\u5316\u53e6\u4e00\u4e2a\u6743\u91cd\u77e9\u9635 \\(W_{N \\times V}^\\prime\\) \uff0c\u7528\u9690\u85cf\u5c42\u5411\u91cf h \u5de6\u4e58 \\(W_{N \\times V}^\\prime\\) \uff0c\u5728\u7ecf\u6fc0\u6d3b\u51fd\u6570\u5904\u7406\u5f97\u5230 V \u7ef4\u7684\u5411\u91cf y\uff0cy \u7684\u6bcf\u4e00\u4e2a\u5143\u7d20\u4ee3\u8868\u76f8\u5bf9\u5e94\u7684\u6bcf\u4e2a\u5355\u8bcd\u7684\u6982\u7387\u5206\u5e03\u3002 y \u4e2d\u6982\u7387\u6700\u5927\u7684\u5143\u7d20\u6240\u6307\u793a\u7684\u5355\u8bcd\u4e3a\u9884\u6d4b\u51fa\u7684\u4e2d\u95f4\u8bcd\uff08target word\uff09\u4e0e true label \u7684 One-Hot \u7f16\u7801\u8bcd\u5411\u91cf\u505a\u6bd4\u8f83\uff0c\u8bef\u5dee\u8d8a\u5c0f\u8d8a\u597d\uff08\u6839\u636e\u8bef\u5dee\u66f4\u65b0\u4e24\u4e2a\u6743\u91cd\u77e9\u9635\uff09\u3002 \u5728\u8bad\u7ec3\u524d\u9700\u8981\u5b9a\u4e49\u597d\u635f\u5931\u51fd\u6570\uff08\u4e00\u822c\u4e3a\u4ea4\u53c9\u71b5\u4ee3\u4ef7\u51fd\u6570\uff09\uff0c\u91c7\u7528\u68af\u5ea6\u4e0b\u964d\u7b97\u6cd5\u66f4\u65b0 \\(W\\) \u548c \\(W^\\prime\\) \u3002\u8bad\u7ec3\u5b8c\u6bd5\u540e\uff0c\u8f93\u5165\u5c42\u7684\u6bcf\u4e2a\u5355\u8bcd\u4e0e\u77e9\u9635 W \u76f8\u4e58\u5f97\u5230\u7684\u5411\u91cf\u5c31\u662f\u6211\u4eec\u60f3\u8981\u7684 Distributed Representation \u8868\u793a\u7684\u8bcd\u5411\u91cf\uff0c\u4e5f\u53eb word embedding\u3002\u56e0\u4e3a One-Hot \u7f16\u7801\u8bcd\u5411\u91cf\u4e2d\u53ea\u6709\u4e00\u4e2a\u5143\u7d20\u4e3a 1\uff0c\u5176\u4ed6\u90fd\u4e3a 0\uff0c\u6240\u4ee5\u7b2c i \u4e2a\u8bcd\u5411\u91cf\u4e58\u4ee5\u77e9\u9635 W \u540e\uff0c\u5f97\u5230\u7684\u5c31\u662f\u77e9\u9635\u7684\u7b2c i \u884c\uff0c\u6240\u4ee5\u8fd9\u4e2a\u77e9\u9635\u4e5f\u53eb\u505a look up table\uff0c\u6709\u4e86 look up table \u5c31\u53ef\u4ee5\u514d\u53bb\u8bad\u7ec3\u8fc7\u7a0b\uff0c\u76f4\u63a5\u67e5\u8868\u5f97\u5230\u5355\u8bcd\u7684\u8bcd\u5411\u91cf\u3002 Skip-gram \u00b6 Skip-Gram \u662f\u7ed9\u5b9a input word \u6765\u9884\u6d4b\u4e0a\u4e0b\u6587\uff0c\u5176\u6a21\u578b\u7ed3\u6784\u5982\u4e0a\u56fe\u6240\u793a\u3002\u5b83\u7684\u505a\u6cd5\u662f\uff0c\u5c06\u4e00\u4e2a\u8bcd\u6240\u5728\u7684\u4e0a\u4e0b\u6587\u4e2d\u7684\u8bcd\u4f5c\u4e3a\u8f93\u51fa\uff0c\u800c\u90a3\u4e2a\u8bcd\u672c\u8eab\u4f5c\u4e3a\u8f93\u5165\uff0c\u4e5f\u5c31\u662f\u8bf4\uff0c\u7ed9\u51fa\u4e00\u4e2a\u8bcd\uff0c\u5e0c\u671b\u9884\u6d4b\u53ef\u80fd\u51fa\u73b0\u7684\u4e0a\u4e0b\u6587\u7684\u8bcd\u3002\u901a\u8fc7\u5728\u4e00\u4e2a\u5927\u7684\u8bed\u6599\u5e93\u8bad\u7ec3\uff0c\u5f97\u5230\u4e00\u4e2a\u4ece\u8f93\u5165\u5c42\u5230\u9690\u542b\u5c42\u7684\u6743\u91cd\u6a21\u578b\u3002\u201capple\u201d\u7684\u4e0a\u4e0b\u6587\u8bcd\u662f\uff08\u2019there\u2019\uff0c\u2019is\u2019\uff0c\u2019an\u2019\uff0c\u2019on\u2019,\u2019the\u2019,\u2019table\u2019\uff09.\u90a3\u4e48\u4ee5apple\u7684One-Hot\u8bcd\u5411\u91cf\u4f5c\u4e3a\u8f93\u5165\uff0c\u8f93\u51fa\u5219\u662f\uff08\u2019there\u2019\uff0c\u2019is\u2019\uff0c\u2019an\u2019\uff0c\u2019on\u2019,\u2019the\u2019,\u2019table\u2019\uff09\u7684One-Hot\u8bcd\u5411\u91cf\u3002\u8bad\u7ec3\u5b8c\u6210\u540e\uff0c\u5c31\u5f97\u5230\u4e86\u6bcf\u4e2a\u8bcd\u5230\u9690\u542b\u5c42\u7684\u6bcf\u4e2a\u7ef4\u5ea6\u7684\u6743\u91cd\uff0c\u5c31\u662f\u6bcf\u4e2a\u8bcd\u7684\u5411\u91cf\uff08\u548cCBOW\u4e2d\u4e00\u6837\uff09\u3002 \u5047\u5982\u6211\u4eec\u6709\u4e00\u4e2a\u53e5\u5b50\u201cThere is an apple on the table\u201d\u3002 \u9996\u5148\u9009\u53e5\u5b50\u4e2d\u95f4\u7684\u4e00\u4e2a\u8bcd\u4f5c\u4e3a\u8f93\u5165\u8bcd\uff0c\u6bd4\u5982\u9009\u53d6\u201capple\u201d\u4f5c\u4e3a input word\u3002 \u6709\u4e86 input word \u4ee5\u540e\uff0c\u518d\u5b9a\u4e49\u4e00\u4e2a\u53eb\u505a skip_window \u7684\u53c2\u6570\uff0c\u5b83\u4ee3\u8868\u7740\u4ece\u5f53\u524d input word \u7684\u4e00\u4fa7\uff08\u5de6\u8fb9\u6216\u53f3\u8fb9\uff09\u9009\u53d6\u8bcd\u7684\u6570\u91cf\u3002\u5982\u679c\u8bbe\u7f6e skip_window=2\uff0c\u90a3\u4e48\u6700\u7ec8\u83b7\u5f97\u7a97\u53e3\u4e2d\u7684\u8bcd\uff08\u5305\u62ec input word \u5728\u5185\uff09\u5c31\u662f[\u2018is\u2019,\u2019an\u2019,\u2019apple\u2019,\u2019on\u2019,\u2019the\u2019 ]\u3002skip_window=2\u4ee3\u8868\u7740\u9009\u53d6\u5de6input word\u5de6\u4fa72\u4e2a\u8bcd\u548c\u53f3\u4fa72\u4e2a\u8bcd\u8fdb\u5165\u6211\u4eec\u7684\u7a97\u53e3\uff0c\u6240\u4ee5\u6574\u4e2a\u7a97\u53e3\u5927\u5c0fspan=2x2=4\u3002\u53e6\u4e00\u4e2a\u53c2\u6570\u53ebnum_skips\uff0c\u5b83\u4ee3\u8868\u7740\u6211\u4eec\u4ece\u6574\u4e2a\u7a97\u53e3\u4e2d\u9009\u53d6\u591a\u5c11\u4e2a\u4e0d\u540c\u7684\u8bcd\u4f5c\u4e3a\u6211\u4eec\u7684output word\uff0c\u5f53skip_window=2\uff0cnum_skips=2\u65f6\uff0c\u6211\u4eec\u5c06\u4f1a\u5f97\u5230\u4e24\u7ec4 (input word, output word) \u5f62\u5f0f\u7684\u8bad\u7ec3\u6570\u636e\uff0c\u5373 ('apple', 'an')\uff0c('apple', 'one')\u3002 \u795e\u7ecf\u7f51\u7edc\u57fa\u4e8e\u8fd9\u4e9b\u8bad\u7ec3\u6570\u636e\u4e2d\u6bcf\u5bf9\u5355\u8bcd\u51fa\u73b0\u7684\u6b21\u6570\u4e60\u5f97\u7edf\u8ba1\u7ed3\u679c\uff0c\u5e76\u8f93\u51fa\u4e00\u4e2a\u6982\u7387\u5206\u5e03\uff0c\u8fd9\u4e2a\u6982\u7387\u5206\u5e03\u4ee3\u8868\u7740\u5230\u6211\u4eec\u8bcd\u5178\u4e2d\u6bcf\u4e2a\u8bcd\u6709\u591a\u5927\u53ef\u80fd\u6027\u8ddfinput word\u540c\u65f6\u51fa\u73b0\u3002\u4e3e\u4e2a\u4f8b\u5b50\uff0c\u5982\u679c\u6211\u4eec\u5411\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u4e2d\u8f93\u5165\u4e00\u4e2a\u5355\u8bcd\u201c\u4e2d\u56fd\u201c\uff0c\u90a3\u4e48\u6700\u7ec8\u6a21\u578b\u7684\u8f93\u51fa\u6982\u7387\u4e2d\uff0c\u50cf\u201c\u82f1\u56fd\u201d\uff0c \u201d\u4fc4\u7f57\u65af\u201c\u8fd9\u79cd\u76f8\u5173\u8bcd\u7684\u6982\u7387\u5c06\u8fdc\u9ad8\u4e8e\u50cf\u201d\u82f9\u679c\u201c\uff0c\u201d\u8748\u8748\u201c\u975e\u76f8\u5173\u8bcd\u7684\u6982\u7387\u3002\u56e0\u4e3a\u201d\u82f1\u56fd\u201c\uff0c\u201d\u4fc4\u7f57\u65af\u201c\u5728\u6587\u672c\u4e2d\u66f4\u5927\u53ef\u80fd\u5728\u201d\u4e2d\u56fd\u201c\u7684\u7a97\u53e3\u4e2d\u51fa\u73b0\u3002\u6211\u4eec\u5c06\u901a\u8fc7\u7ed9\u795e\u7ecf\u7f51\u7edc\u8f93\u5165\u6587\u672c\u4e2d\u6210\u5bf9\u7684\u5355\u8bcd\u6765\u8bad\u7ec3\u5b83\u5b8c\u6210\u4e0a\u9762\u6240\u8bf4\u7684\u6982\u7387\u8ba1\u7b97\u3002 \u901a\u8fc7\u68af\u5ea6\u4e0b\u964d\u548c\u53cd\u5411\u4f20\u64ad\u66f4\u65b0\u77e9\u9635 W W \u4e2d\u7684\u884c\u5411\u91cf\u5373\u4e3a\u6bcf\u4e2a\u5355\u8bcd\u7684 Word embedding \u8868\u793a \u603b\u7ed3 CBOW \u548c Skip-gram \u6700\u7406\u60f3\u60c5\u51b5\u4e0b\u7684\u5b9e\u73b0\uff0c\u5373\u8bad\u7ec3\u8fed\u4ee3\u4e24\u4e2a\u77e9\u9635 \\(W\\) \u548c \\(W^\\prime\\) \uff0c\u4e4b\u540e\u518d\u8f93\u51fa\u5c42\u91c7\u7528 softmax \u51fd\u6570\u6765\u8ba1\u7b97\u8f93\u51fa\u5404\u4e2a\u8bcd\u7684\u6982\u7387\u3002\u4f46\u5728\u5b9e\u9645\u5e94\u7528\u4e2d\u8fd9\u79cd\u65b9\u6cd5\u7684\u8bad\u7ec3\u5f00\u9500\u5f88\u5927\uff0c\u4e0d\u5177\u6709\u5f88\u5f3a\u7684\u5b9e\u7528\u6027\uff0c\u4e3a\u4e86\u4f7f\u5f97\u6a21\u578b\u4fbf\u4e8e\u8bad\u7ec3\uff0c\u6709\u5b66\u8005\u63d0\u51fa\u4e86 Hierarchical Softmax \u548c Negative Sampling \u4e24\u79cd\u6539\u8fdb\u65b9\u6cd5\u3002 Hierarchical Softmax \u00b6 Hierarchical Softmax \u5bf9\u539f\u6a21\u578b\u7684\u6539\u8fdb\u4e3b\u8981\u6709\u4e24\u70b9 \u7b2c\u4e00\u70b9\u662f\u4ece\u8f93\u5165\u5c42\u5230\u9690\u85cf\u5c42\u7684\u6620\u5c04\uff0c\u6ca1\u6709\u91c7\u7528\u539f\u5148\u7684\u4e0e\u77e9\u9635 W \u76f8\u4e58\u7136\u540e\u76f8\u52a0\u6c42\u5e73\u5747\u7684\u65b9\u6cd5\uff0c\u800c\u662f\u76f4\u63a5\u5bf9\u6240\u6709\u8f93\u5165\u7684\u8bcd\u5411\u91cf\u6c42\u548c\u3002\u5047\u8bbe\u8f93\u5165\u7684\u8bcd\u5411\u91cf\u4e3a\uff080\uff0c1\uff0c0\uff0c0\uff09\u548c\uff080\uff0c0\uff0c0\uff0c1\uff09\uff0c\u90a3\u4e48\u9690\u85cf\u5c42\u7684\u5411\u91cf\u4e3a\uff080\uff0c1\uff0c0\uff0c1\uff09\u3002 Hierarchical Softmax \u7684\u7b2c\u4e8c\u70b9\u6539\u8fdb\u662f\u91c7\u7528\u54c8\u592b\u66fc\u6811\u6765\u66ff\u6362\u4e86\u539f\u5148\u7684\u4ece\u9690\u85cf\u5c42\u5230\u8f93\u51fa\u5c42\u7684\u77e9\u9635 \\(W^\\prime\\) \u3002\u54c8\u592b\u66fc\u6811\u7684\u53f6\u8282\u70b9\u4e2a\u6570\u4e3a\u8bcd\u6c47\u8868\u7684\u5355\u8bcd\u4e2a\u6570 V\uff0c\u4e00\u4e2a\u53f6\u8282\u70b9\u4ee3\u8868\u4e00\u4e2a\u5355\u8bcd\uff0c\u800c\u4ece\u6839\u7ed3\u70b9\u5230\u53f6\u8282\u70b9\u7684\u8def\u5f84\u786e\u5b9a\u4e86\u8fd9\u4e2a\u5355\u8bcd\u6700\u7ec8\u8f93\u51fa\u7684\u8bcd\u5411\u91cf\u3002 \u5177\u4f53\u6765\u8bf4\uff0c\u8fd9\u68f5\u54c8\u592b\u66fc\u6811\u9664\u4e86\u6839\u8282\u70b9\u4ee5\u5916\u7684\u6240\u6709\u975e\u53f6\u8282\u70b9\u4e2d\u90fd\u542b\u6709\u4e00\u4e2a\u7531\u53c2\u6570 \\(\\theta\\) \u786e\u5b9a\u7684 sigmoid \u51fd\u6570\uff0c\u4e0d\u540c\u8282\u70b9\u7684 \\(\\theta\\) \u4e0d\u4e00\u6837\u3002\u8bad\u7ec3\u65f6\u9690\u85cf\u5c42\u7684\u5411\u91cf\u4e0e\u8fd9\u4e2a sigmoid \u51fd\u6570\u8fdb\u884c\u8fd0\u7b97\uff0c\u6839\u636e\u7ed3\u679c\u8fdb\u884c\u5206\u7c7b\uff0c\u82e5\u5206\u7c7b\u4e3a\u8d1f\u7c7b\u5219\u6cbf\u5de6\u5b50\u6811\u5411\u4e0b\u4f20\u9012\uff0c\u7f16\u7801\u4e3a 0\uff1b\u82e5\u5206\u7c7b\u4e3a\u6b63\u7c7b\u5219\u6cbf\u53f3\u5b50\u6811\u5411\u4e0b\u4f20\u9012\uff0c\u7f16\u7801\u4e3a 1\u3002\u6700\u7ec8\u5230\u8fbe\u53f6\u8282\u70b9\uff0c\u53f6\u8282\u70b9\u7684\u5411\u91cf\u5373\u4e3a\u8f93\u51fa\u7684\u8bcd\u5411\u91cf\u3002 Negative Sampling \u00b6 \u5c3d\u7ba1\u54c8\u592b\u66fc\u6811\u7684\u5f15\u5165\u4e3a\u6a21\u578b\u7684\u8bad\u7ec3\u7f29\u77ed\u4e86\u8bb8\u591a\u5f00\u9500\uff0c\u4f46\u5bf9\u4e8e\u4e00\u4e9b\u4e0d\u5e38\u89c1\u3001\u8f83\u751f\u50fb\u7684\u8bcd\u6c47\uff0c\u54c8\u592b\u66fc\u6811\u5728\u8ba1\u7b97\u5b83\u4eec\u7684\u8bcd\u5411\u91cf\u65f6\u4ecd\u7136\u9700\u8981\u505a\u5927\u91cf\u7684\u8fd0\u7b97\u3002 \u8d1f\u91c7\u6837\u662f\u53e6\u4e00\u79cd\u63d0\u9ad8 Word2Vec \u6548\u7387\u7684\u65b9\u6cd5\uff0c\u5b83\u662f\u57fa\u4e8e\u8fd9\u6837\u7684\u89c2\u5bdf\uff1a\u8bad\u7ec3\u4e00\u4e2a\u795e\u7ecf\u7f51\u7edc\u610f\u5473\u7740\u4f7f\u7528\u4e00\u4e2a\u8bad\u7ec3\u6837\u672c\u5c31\u8981\u7a0d\u5fae\u8c03\u6574\u4e00\u4e0b\u795e\u7ecf\u7f51\u7edc\u4e2d\u6240\u6709\u7684\u6743\u91cd\uff0c\u8fd9\u6837\u624d\u80fd\u786e\u4fdd\u9884\u6d4b\u8bad\u7ec3\u6837\u672c\u66f4\u52a0\u7cbe\u786e\uff0c\u5982\u679c\u80fd\u8bbe\u8ba1\u4e00\u79cd\u65b9\u6cd5\u6bcf\u6b21\u53ea\u66f4\u65b0\u4e00\u90e8\u5206\u6743\u91cd\uff0c\u90a3\u4e48\u8ba1\u7b97\u590d\u6742\u5ea6\u5c06\u5927\u5927\u964d\u4f4e\u3002 \u5c06\u4ee5\u4e0a\u89c2\u5bdf\u5f15\u5165 Word2Vec \u5c31\u662f\uff1a\u5f53\u901a\u8fc7\uff08\u201dfox\u201d, \u201cquick\u201d\uff09\u8bcd\u5bf9\u6765\u8bad\u7ec3\u795e\u7ecf\u7f51\u7edc\u65f6\uff0c\u6211\u4eec\u56de\u60f3\u8d77\u8fd9\u4e2a\u795e\u7ecf\u7f51\u7edc\u7684\u201c\u6807\u7b7e\u201d\u6216\u8005\u662f\u201c\u6b63\u786e\u7684\u8f93\u51fa\u201d\u662f\u4e00\u4e2aone-hot\u5411\u91cf\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u5bf9\u4e8e\u795e\u7ecf\u7f51\u7edc\u4e2d\u5bf9\u5e94\u4e8e\u201dquick\u201d\u8fd9\u4e2a\u5355\u8bcd\u7684\u795e\u7ecf\u5143\u5bf9\u5e94\u4e3a1\uff0c\u800c\u5176\u4ed6\u4e0a\u5343\u4e2a\u7684\u8f93\u51fa\u795e\u7ecf\u5143\u5219\u5bf9\u5e94\u4e3a0\u3002\u4f7f\u7528\u8d1f\u91c7\u6837\uff0c\u6211\u4eec\u901a\u8fc7\u968f\u673a\u9009\u62e9\u4e00\u4e2a\u8f83\u5c11\u6570\u76ee\uff08\u6bd4\u5982\u8bf45\u4e2a\uff09\u7684\u201c\u8d1f\u201d\u6837\u672c\u6765\u66f4\u65b0\u5bf9\u5e94\u7684\u6743\u91cd\u3002\uff08\u5728\u8fd9\u4e2a\u6761\u4ef6\u4e0b\uff0c\u201c\u8d1f\u201d\u5355\u8bcd\u5c31\u662f\u6211\u4eec\u5e0c\u671b\u795e\u7ecf\u7f51\u7edc\u8f93\u51fa\u4e3a0\u7684\u795e\u7ecf\u5143\u5bf9\u5e94\u7684\u5355\u8bcd\uff09\u3002\u5e76\u4e14\u6211\u4eec\u4ecd\u7136\u4e3a\u6211\u4eec\u7684\u201c\u6b63\u201d\u5355\u8bcd\u66f4\u65b0\u5bf9\u5e94\u7684\u6743\u91cd\uff08\u4e5f\u5c31\u662f\u5f53\u524d\u6837\u672c\u4e0b\u201dquick\u201d\u5bf9\u5e94\u7684\u795e\u7ecf\u5143\u4ecd\u7136\u8f93\u51fa\u4e3a1\uff09\u3002 Reference \u00b6 Word2Vec\u8be6\u89e3 \u6df1\u5165\u6d45\u51faWord2Vec\u539f\u7406\u89e3\u6790 NLP\u4e4b\u2014\u2014Word2Vec\u8be6\u89e3","title":"Word2Vec"},{"location":"llm/nlp/word2vec/#word2vec","text":"\u7ea6 2803 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f Abstract Word2Vec \u7684\u7279\u70b9\u662f\u80fd\u591f\u5c06\u5355\u8bcd\u8f6c\u5316\u4e3a\u5411\u91cf\u6765\u8868\u793a\uff0c\u8fd9\u6837\u8bcd\u4e0e\u8bcd\u4e4b\u95f4\u5c31\u53ef\u4ee5\u5b9a\u91cf\u5730\u53bb\u5ea6\u91cf\u5b83\u4eec\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u6316\u6398\u8bcd\u4e4b\u95f4\u7684\u8054\u7cfb\u3002 \u6700\u65e9\u7684\u8bcd\u5411\u91cf\u91c7\u7528 One-Hot \u7f16\u7801\uff0c\u53c8\u79f0\u4e00\u4f4d\u6709\u6548\u7f16\u7801\uff0c\u6bcf\u4e2a\u8bcd\u5411\u91cf\u7ef4\u5ea6\u5927\u5c0f\u4e3a\u6574\u4e2a\u8bcd\u6c47\u8868\u7684\u5927\u5c0f\uff0c\u5bf9\u4e8e\u6bcf\u4e2a\u5177\u4f53\u7684\u8bcd\u6c47\u8868\u4e2d\u7684\u8bcd\uff0c\u5c06\u5bf9\u5e94\u7684\u4f4d\u7f6e\u7f6e\u4e3a 1.","title":"Word2Vec"},{"location":"llm/nlp/word2vec/#word2vec_1","text":"\u91c7\u7528One-Hot\u7f16\u7801\u65b9\u5f0f\u6765\u8868\u793a\u8bcd\u5411\u91cf\u975e\u5e38\u7b80\u5355\uff0c\u4f46\u7f3a\u70b9\u4e5f\u662f\u663e\u800c\u6613\u89c1\u7684\uff0c\u4e00\u65b9\u9762\u6211\u4eec\u5b9e\u9645\u4f7f\u7528\u7684\u8bcd\u6c47\u8868\u5f88\u5927\uff0c\u7ecf\u5e38\u662f\u767e\u4e07\u7ea7\u4ee5\u4e0a\uff0c\u8fd9\u4e48\u9ad8\u7ef4\u7684\u6570\u636e\u5904\u7406\u8d77\u6765\u4f1a\u6d88\u8017\u5927\u91cf\u7684\u8ba1\u7b97\u8d44\u6e90\u4e0e\u65f6\u95f4\u3002\u53e6\u4e00\u65b9\u9762\uff0cOne-Hot\u7f16\u7801\u4e2d\u6240\u6709\u8bcd\u5411\u91cf\u4e4b\u95f4\u5f7c\u6b64\u6b63\u4ea4\uff0c\u6ca1\u6709\u4f53\u73b0\u8bcd\u4e0e\u8bcd\u4e4b\u95f4\u7684\u76f8\u4f3c\u5173\u7cfb\u3002 Distributed representation\u53ef\u4ee5\u89e3\u51b3One-Hot\u7f16\u7801\u5b58\u5728\u7684\u95ee\u9898\uff0c\u5b83\u7684\u601d\u8def\u662f\u901a\u8fc7\u8bad\u7ec3\uff0c\u5c06\u539f\u6765One-Hot\u7f16\u7801\u7684\u6bcf\u4e2a\u8bcd\u90fd\u6620\u5c04\u5230\u4e00\u4e2a\u8f83\u77ed\u7684\u8bcd\u5411\u91cf\u4e0a\u6765\uff0c\u800c\u8fd9\u4e2a\u8f83\u77ed\u7684\u8bcd\u5411\u91cf\u7684\u7ef4\u5ea6\u53ef\u4ee5\u7531\u6211\u4eec\u81ea\u5df1\u5728\u8bad\u7ec3\u65f6\u6839\u636e\u4efb\u52a1\u9700\u8981\u6765\u81ea\u5df1\u6307\u5b9a\u3002 \u4e0b\u56fe\u662f\u91c7\u7528Distributed representation\u7684\u4e00\u4e2a\u4f8b\u5b50\uff0c\u6211\u4eec\u5c06\u8bcd\u6c47\u8868\u91cc\u7684\u8bcd\u7528\"Royalty\",\"Masculinity\", \"Femininity\"\u548c\"Age\"4\u4e2a\u7ef4\u5ea6\u6765\u8868\u793a\uff0cKing\u8fd9\u4e2a\u8bcd\u5bf9\u5e94\u7684\u8bcd\u5411\u91cf\u53ef\u80fd\u662f(0.99,0.99,0.05,0.7)\u3002\u5f53\u7136\u5728\u5b9e\u9645\u60c5\u51b5\u4e2d\uff0c\u6211\u4eec\u5e76\u4e0d\u80fd\u5bf9\u8bcd\u5411\u91cf\u7684\u6bcf\u4e2a\u7ef4\u5ea6\u505a\u4e00\u4e2a\u5f88\u597d\u7684\u89e3\u91ca\u3002 \u6709\u4e86\u7528Distributed Representation\u8868\u793a\u7684\u8f83\u77ed\u7684\u8bcd\u5411\u91cf\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u8f83\u5bb9\u6613\u7684\u5206\u6790\u8bcd\u4e4b\u95f4\u7684\u5173\u7cfb\u4e86\uff0c\u6bd4\u5982\u6211\u4eec\u5c06\u8bcd\u7684\u7ef4\u5ea6\u964d\u7ef4\u52302\u7ef4\uff0c\u6709\u4e00\u4e2a\u6709\u8da3\u7684\u7814\u7a76\u8868\u660e\uff0c\u7528\u4e0b\u56fe\u7684\u8bcd\u5411\u91cf\u8868\u793a\u6211\u4eec\u7684\u8bcd\u65f6\uff0c\u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff1a \\[ \\vec{King} - \\vec{Man} + \\vec{Woman} \\approx \\vec{Queen} \\] \u53ef\u89c1\u6211\u4eec\u53ea\u8981\u5f97\u5230\u4e86\u8bcd\u6c47\u8868\u91cc\u6240\u6709\u8bcd\u5bf9\u5e94\u7684\u8bcd\u5411\u91cf\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u53ef\u4ee5\u505a\u5f88\u591a\u6709\u8da3\u7684\u4e8b\u60c5\u4e86\u3002\u4e0d\u8fc7\uff0c\u600e\u4e48\u8bad\u7ec3\u624d\u80fd\u5f97\u5230\u5408\u9002\u7684\u8bcd\u5411\u91cf\u5462\uff1f\u9488\u5bf9\u8fd9\u4e2a\u95ee\u9898\uff0cGoogle\u7684Tomas Mikolov\u5728\u4ed6\u7684\u8bba\u6587\u4e2d\u63d0\u51fa\u4e86CBOW\u548cSkip-gram\u4e24\u79cd\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u3002","title":"Word2Vec \u57fa\u672c\u601d\u60f3"},{"location":"llm/nlp/word2vec/#word2vec_2","text":"Word2Vec \u7684\u8bad\u7ec3\u6a21\u578b\u672c\u8d28\u4e0a\u662f\u53ea\u5177\u6709\u4e00\u4e2a\u9690\u542b\u5c42\u7684\u795e\u7ecf\u5143\u7f51\u7edc\u3002 \u5b83\u7684\u8f93\u5165\u91c7\u7528 One-Hot \u7f16\u7801\u7684\u8bcd\u6c47\u8868\u5411\u91cf\uff0c\u5b83\u7684\u8f93\u51fa\u4e5f\u662f One-Hot \u7f16\u7801\u7684\u8bcd\u6c47\u8868\u5411\u91cf\u3002\u4f7f\u7528\u6240\u6709\u7684\u6837\u672c\uff0c\u8bad\u7ec3\u8fd9\u4e2a\u795e\u7ecf\u7f51\u7edc\uff0c\u7b49\u5230\u6536\u655b\u4e4b\u540e\uff0c\u4ece\u8f93\u5165\u5c42\u5230\u9690\u542b\u5c42\u7684\u90a3\u4e9b\u6743\u91cd\uff0c\u4fbf\u662f\u6bcf\u4e00\u4e2a\u8bcd\u7684\u91c7\u7528Distributed Representation\u7684\u8bcd\u5411\u91cf\u3002\u6bd4\u5982\uff0c\u4e0a\u56fe\u4e2d\u5355\u8bcd\u7684Word embedding\u540e\u7684\u5411\u91cf\u4fbf\u662f\u77e9\u9635 \\(W_{V \\times N}\\) \u7684\u7b2ci\u884c\u7684\u8f6c\u7f6e\u3002\u8fd9\u6837\u6211\u4eec\u5c31\u628a\u539f\u672c\u7ef4\u6570\u4e3aV\u7684\u8bcd\u5411\u91cf\u53d8\u6210\u4e86\u7ef4\u6570\u4e3aN\u7684\u8bcd\u5411\u91cf\uff08N\u8fdc\u5c0f\u4e8eV\uff09\uff0c\u5e76\u4e14\u8bcd\u5411\u91cf\u95f4\u4fdd\u7559\u4e86\u4e00\u5b9a\u7684\u76f8\u5173\u5173\u7cfb\u3002 Google\u7684Mikolov\u5728\u5173\u4e8eWord2Vec\u7684\u8bba\u6587\u4e2d\u63d0\u51fa\u4e86CBOW\u548cSkip-gram\u4e24\u79cd\u6a21\u578b\uff0cCBOW\u9002\u5408\u4e8e\u6570\u636e\u96c6\u8f83\u5c0f\u7684\u60c5\u51b5\uff0c\u800cSkip-Gram\u5728\u5927\u578b\u8bed\u6599\u4e2d\u8868\u73b0\u66f4\u597d\u3002\u5176\u4e2dCBOW\u5982\u4e0b\u56fe\u5de6\u90e8\u5206\u6240\u793a\uff0c\u4f7f\u7528\u56f4\u7ed5\u76ee\u6807\u5355\u8bcd\u7684\u5176\u4ed6\u5355\u8bcd\uff08\u8bed\u5883\uff09\u4f5c\u4e3a\u8f93\u5165\uff0c\u5728\u6620\u5c04\u5c42\u505a\u52a0\u6743\u5904\u7406\u540e\u8f93\u51fa\u76ee\u6807\u5355\u8bcd\u3002\u4e0eCBOW\u6839\u636e\u8bed\u5883\u9884\u6d4b\u76ee\u6807\u5355\u8bcd\u4e0d\u540c\uff0cSkip-gram\u6839\u636e\u5f53\u524d\u5355\u8bcd\u9884\u6d4b\u8bed\u5883\uff0c\u5982\u4e0b\u56fe\u53f3\u90e8\u5206\u6240\u793a\u3002\u5047\u5982\u6211\u4eec\u6709\u4e00\u4e2a\u53e5\u5b50\u201cThere is an apple on the table\u201d\u4f5c\u4e3a\u8bad\u7ec3\u6570\u636e\uff0cCBOW\u7684\u8f93\u5165\u4e3a\uff08is,an,on,the\uff09\uff0c\u8f93\u51fa\u4e3aapple\u3002\u800cSkip-gram\u7684\u8f93\u5165\u4e3aapple\uff0c\u8f93\u51fa\u4e3a\uff08is,an,on,the\uff09\u3002","title":"Word2Vec \u539f\u7406"},{"location":"llm/nlp/word2vec/#cbow","text":"\u8f93\u5165\u5c42\uff1a\u4e0a\u4e0b\u6587\u5355\u8bcd\u7684 One-Hot \u7f16\u7801\u8bcd\u5411\u91cf\uff0cV \u4e3a\u8bcd\u6c47\u8868\u5355\u8bcd\u4e2a\u6570\uff0cC \u4e3a\u4e0a\u4e0b\u6587\u5355\u8bcd\u4e2a\u6570\u3002\u4ee5 \u201cThere is an apple on the table\u201d \u4e3a\u4f8b\uff0cC=4\uff0c\u6240\u4ee5\u6a21\u578b\u8f93\u5165\u662f\uff08is,an,on,the\uff094 \u4e2a\u5355\u8bcd\u7684 One-Hot \u7f16\u7801\u8bcd\u5411\u91cf\u3002 \u521d\u59cb\u5316\u4e00\u4e2a\u6743\u91cd\u77e9\u9635 \\(W_{V \\times N}\\) \uff0c\u7136\u540e\u7528\u6240\u6709\u8f93\u5165\u7684 One-Hot \u7f16\u7801\u8bcd\u5411\u91cf\u5de6\u4e58\u8be5\u77e9\u9635\uff0c\u5f97\u5230\u7ef4\u6570\u4e3a N \u7684\u5411\u91cf \\(w_1,w_2,...,w_c\\) \uff0c\u8fd9\u91cc\u7684 N \u7531\u81ea\u5df1\u6839\u636e\u4efb\u52a1\u9700\u8981\u8bbe\u7f6e\u3002 \u5c06\u6240\u5f97\u7684\u5411\u91cf \\(w_1,w_2,...,w_c\\) \u6c42\u548c\u53d6\u5e73\u5747\u4f5c\u4e3a\u9690\u85cf\u5c42\u5411\u91cf h\u3002 \u521d\u59cb\u5316\u53e6\u4e00\u4e2a\u6743\u91cd\u77e9\u9635 \\(W_{N \\times V}^\\prime\\) \uff0c\u7528\u9690\u85cf\u5c42\u5411\u91cf h \u5de6\u4e58 \\(W_{N \\times V}^\\prime\\) \uff0c\u5728\u7ecf\u6fc0\u6d3b\u51fd\u6570\u5904\u7406\u5f97\u5230 V \u7ef4\u7684\u5411\u91cf y\uff0cy \u7684\u6bcf\u4e00\u4e2a\u5143\u7d20\u4ee3\u8868\u76f8\u5bf9\u5e94\u7684\u6bcf\u4e2a\u5355\u8bcd\u7684\u6982\u7387\u5206\u5e03\u3002 y \u4e2d\u6982\u7387\u6700\u5927\u7684\u5143\u7d20\u6240\u6307\u793a\u7684\u5355\u8bcd\u4e3a\u9884\u6d4b\u51fa\u7684\u4e2d\u95f4\u8bcd\uff08target word\uff09\u4e0e true label \u7684 One-Hot \u7f16\u7801\u8bcd\u5411\u91cf\u505a\u6bd4\u8f83\uff0c\u8bef\u5dee\u8d8a\u5c0f\u8d8a\u597d\uff08\u6839\u636e\u8bef\u5dee\u66f4\u65b0\u4e24\u4e2a\u6743\u91cd\u77e9\u9635\uff09\u3002 \u5728\u8bad\u7ec3\u524d\u9700\u8981\u5b9a\u4e49\u597d\u635f\u5931\u51fd\u6570\uff08\u4e00\u822c\u4e3a\u4ea4\u53c9\u71b5\u4ee3\u4ef7\u51fd\u6570\uff09\uff0c\u91c7\u7528\u68af\u5ea6\u4e0b\u964d\u7b97\u6cd5\u66f4\u65b0 \\(W\\) \u548c \\(W^\\prime\\) \u3002\u8bad\u7ec3\u5b8c\u6bd5\u540e\uff0c\u8f93\u5165\u5c42\u7684\u6bcf\u4e2a\u5355\u8bcd\u4e0e\u77e9\u9635 W \u76f8\u4e58\u5f97\u5230\u7684\u5411\u91cf\u5c31\u662f\u6211\u4eec\u60f3\u8981\u7684 Distributed Representation \u8868\u793a\u7684\u8bcd\u5411\u91cf\uff0c\u4e5f\u53eb word embedding\u3002\u56e0\u4e3a One-Hot \u7f16\u7801\u8bcd\u5411\u91cf\u4e2d\u53ea\u6709\u4e00\u4e2a\u5143\u7d20\u4e3a 1\uff0c\u5176\u4ed6\u90fd\u4e3a 0\uff0c\u6240\u4ee5\u7b2c i \u4e2a\u8bcd\u5411\u91cf\u4e58\u4ee5\u77e9\u9635 W \u540e\uff0c\u5f97\u5230\u7684\u5c31\u662f\u77e9\u9635\u7684\u7b2c i \u884c\uff0c\u6240\u4ee5\u8fd9\u4e2a\u77e9\u9635\u4e5f\u53eb\u505a look up table\uff0c\u6709\u4e86 look up table \u5c31\u53ef\u4ee5\u514d\u53bb\u8bad\u7ec3\u8fc7\u7a0b\uff0c\u76f4\u63a5\u67e5\u8868\u5f97\u5230\u5355\u8bcd\u7684\u8bcd\u5411\u91cf\u3002","title":"CBOW"},{"location":"llm/nlp/word2vec/#skip-gram","text":"Skip-Gram \u662f\u7ed9\u5b9a input word \u6765\u9884\u6d4b\u4e0a\u4e0b\u6587\uff0c\u5176\u6a21\u578b\u7ed3\u6784\u5982\u4e0a\u56fe\u6240\u793a\u3002\u5b83\u7684\u505a\u6cd5\u662f\uff0c\u5c06\u4e00\u4e2a\u8bcd\u6240\u5728\u7684\u4e0a\u4e0b\u6587\u4e2d\u7684\u8bcd\u4f5c\u4e3a\u8f93\u51fa\uff0c\u800c\u90a3\u4e2a\u8bcd\u672c\u8eab\u4f5c\u4e3a\u8f93\u5165\uff0c\u4e5f\u5c31\u662f\u8bf4\uff0c\u7ed9\u51fa\u4e00\u4e2a\u8bcd\uff0c\u5e0c\u671b\u9884\u6d4b\u53ef\u80fd\u51fa\u73b0\u7684\u4e0a\u4e0b\u6587\u7684\u8bcd\u3002\u901a\u8fc7\u5728\u4e00\u4e2a\u5927\u7684\u8bed\u6599\u5e93\u8bad\u7ec3\uff0c\u5f97\u5230\u4e00\u4e2a\u4ece\u8f93\u5165\u5c42\u5230\u9690\u542b\u5c42\u7684\u6743\u91cd\u6a21\u578b\u3002\u201capple\u201d\u7684\u4e0a\u4e0b\u6587\u8bcd\u662f\uff08\u2019there\u2019\uff0c\u2019is\u2019\uff0c\u2019an\u2019\uff0c\u2019on\u2019,\u2019the\u2019,\u2019table\u2019\uff09.\u90a3\u4e48\u4ee5apple\u7684One-Hot\u8bcd\u5411\u91cf\u4f5c\u4e3a\u8f93\u5165\uff0c\u8f93\u51fa\u5219\u662f\uff08\u2019there\u2019\uff0c\u2019is\u2019\uff0c\u2019an\u2019\uff0c\u2019on\u2019,\u2019the\u2019,\u2019table\u2019\uff09\u7684One-Hot\u8bcd\u5411\u91cf\u3002\u8bad\u7ec3\u5b8c\u6210\u540e\uff0c\u5c31\u5f97\u5230\u4e86\u6bcf\u4e2a\u8bcd\u5230\u9690\u542b\u5c42\u7684\u6bcf\u4e2a\u7ef4\u5ea6\u7684\u6743\u91cd\uff0c\u5c31\u662f\u6bcf\u4e2a\u8bcd\u7684\u5411\u91cf\uff08\u548cCBOW\u4e2d\u4e00\u6837\uff09\u3002 \u5047\u5982\u6211\u4eec\u6709\u4e00\u4e2a\u53e5\u5b50\u201cThere is an apple on the table\u201d\u3002 \u9996\u5148\u9009\u53e5\u5b50\u4e2d\u95f4\u7684\u4e00\u4e2a\u8bcd\u4f5c\u4e3a\u8f93\u5165\u8bcd\uff0c\u6bd4\u5982\u9009\u53d6\u201capple\u201d\u4f5c\u4e3a input word\u3002 \u6709\u4e86 input word \u4ee5\u540e\uff0c\u518d\u5b9a\u4e49\u4e00\u4e2a\u53eb\u505a skip_window \u7684\u53c2\u6570\uff0c\u5b83\u4ee3\u8868\u7740\u4ece\u5f53\u524d input word \u7684\u4e00\u4fa7\uff08\u5de6\u8fb9\u6216\u53f3\u8fb9\uff09\u9009\u53d6\u8bcd\u7684\u6570\u91cf\u3002\u5982\u679c\u8bbe\u7f6e skip_window=2\uff0c\u90a3\u4e48\u6700\u7ec8\u83b7\u5f97\u7a97\u53e3\u4e2d\u7684\u8bcd\uff08\u5305\u62ec input word \u5728\u5185\uff09\u5c31\u662f[\u2018is\u2019,\u2019an\u2019,\u2019apple\u2019,\u2019on\u2019,\u2019the\u2019 ]\u3002skip_window=2\u4ee3\u8868\u7740\u9009\u53d6\u5de6input word\u5de6\u4fa72\u4e2a\u8bcd\u548c\u53f3\u4fa72\u4e2a\u8bcd\u8fdb\u5165\u6211\u4eec\u7684\u7a97\u53e3\uff0c\u6240\u4ee5\u6574\u4e2a\u7a97\u53e3\u5927\u5c0fspan=2x2=4\u3002\u53e6\u4e00\u4e2a\u53c2\u6570\u53ebnum_skips\uff0c\u5b83\u4ee3\u8868\u7740\u6211\u4eec\u4ece\u6574\u4e2a\u7a97\u53e3\u4e2d\u9009\u53d6\u591a\u5c11\u4e2a\u4e0d\u540c\u7684\u8bcd\u4f5c\u4e3a\u6211\u4eec\u7684output word\uff0c\u5f53skip_window=2\uff0cnum_skips=2\u65f6\uff0c\u6211\u4eec\u5c06\u4f1a\u5f97\u5230\u4e24\u7ec4 (input word, output word) \u5f62\u5f0f\u7684\u8bad\u7ec3\u6570\u636e\uff0c\u5373 ('apple', 'an')\uff0c('apple', 'one')\u3002 \u795e\u7ecf\u7f51\u7edc\u57fa\u4e8e\u8fd9\u4e9b\u8bad\u7ec3\u6570\u636e\u4e2d\u6bcf\u5bf9\u5355\u8bcd\u51fa\u73b0\u7684\u6b21\u6570\u4e60\u5f97\u7edf\u8ba1\u7ed3\u679c\uff0c\u5e76\u8f93\u51fa\u4e00\u4e2a\u6982\u7387\u5206\u5e03\uff0c\u8fd9\u4e2a\u6982\u7387\u5206\u5e03\u4ee3\u8868\u7740\u5230\u6211\u4eec\u8bcd\u5178\u4e2d\u6bcf\u4e2a\u8bcd\u6709\u591a\u5927\u53ef\u80fd\u6027\u8ddfinput word\u540c\u65f6\u51fa\u73b0\u3002\u4e3e\u4e2a\u4f8b\u5b50\uff0c\u5982\u679c\u6211\u4eec\u5411\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u4e2d\u8f93\u5165\u4e00\u4e2a\u5355\u8bcd\u201c\u4e2d\u56fd\u201c\uff0c\u90a3\u4e48\u6700\u7ec8\u6a21\u578b\u7684\u8f93\u51fa\u6982\u7387\u4e2d\uff0c\u50cf\u201c\u82f1\u56fd\u201d\uff0c \u201d\u4fc4\u7f57\u65af\u201c\u8fd9\u79cd\u76f8\u5173\u8bcd\u7684\u6982\u7387\u5c06\u8fdc\u9ad8\u4e8e\u50cf\u201d\u82f9\u679c\u201c\uff0c\u201d\u8748\u8748\u201c\u975e\u76f8\u5173\u8bcd\u7684\u6982\u7387\u3002\u56e0\u4e3a\u201d\u82f1\u56fd\u201c\uff0c\u201d\u4fc4\u7f57\u65af\u201c\u5728\u6587\u672c\u4e2d\u66f4\u5927\u53ef\u80fd\u5728\u201d\u4e2d\u56fd\u201c\u7684\u7a97\u53e3\u4e2d\u51fa\u73b0\u3002\u6211\u4eec\u5c06\u901a\u8fc7\u7ed9\u795e\u7ecf\u7f51\u7edc\u8f93\u5165\u6587\u672c\u4e2d\u6210\u5bf9\u7684\u5355\u8bcd\u6765\u8bad\u7ec3\u5b83\u5b8c\u6210\u4e0a\u9762\u6240\u8bf4\u7684\u6982\u7387\u8ba1\u7b97\u3002 \u901a\u8fc7\u68af\u5ea6\u4e0b\u964d\u548c\u53cd\u5411\u4f20\u64ad\u66f4\u65b0\u77e9\u9635 W W \u4e2d\u7684\u884c\u5411\u91cf\u5373\u4e3a\u6bcf\u4e2a\u5355\u8bcd\u7684 Word embedding \u8868\u793a \u603b\u7ed3 CBOW \u548c Skip-gram \u6700\u7406\u60f3\u60c5\u51b5\u4e0b\u7684\u5b9e\u73b0\uff0c\u5373\u8bad\u7ec3\u8fed\u4ee3\u4e24\u4e2a\u77e9\u9635 \\(W\\) \u548c \\(W^\\prime\\) \uff0c\u4e4b\u540e\u518d\u8f93\u51fa\u5c42\u91c7\u7528 softmax \u51fd\u6570\u6765\u8ba1\u7b97\u8f93\u51fa\u5404\u4e2a\u8bcd\u7684\u6982\u7387\u3002\u4f46\u5728\u5b9e\u9645\u5e94\u7528\u4e2d\u8fd9\u79cd\u65b9\u6cd5\u7684\u8bad\u7ec3\u5f00\u9500\u5f88\u5927\uff0c\u4e0d\u5177\u6709\u5f88\u5f3a\u7684\u5b9e\u7528\u6027\uff0c\u4e3a\u4e86\u4f7f\u5f97\u6a21\u578b\u4fbf\u4e8e\u8bad\u7ec3\uff0c\u6709\u5b66\u8005\u63d0\u51fa\u4e86 Hierarchical Softmax \u548c Negative Sampling \u4e24\u79cd\u6539\u8fdb\u65b9\u6cd5\u3002","title":"Skip-gram"},{"location":"llm/nlp/word2vec/#hierarchical-softmax","text":"Hierarchical Softmax \u5bf9\u539f\u6a21\u578b\u7684\u6539\u8fdb\u4e3b\u8981\u6709\u4e24\u70b9 \u7b2c\u4e00\u70b9\u662f\u4ece\u8f93\u5165\u5c42\u5230\u9690\u85cf\u5c42\u7684\u6620\u5c04\uff0c\u6ca1\u6709\u91c7\u7528\u539f\u5148\u7684\u4e0e\u77e9\u9635 W \u76f8\u4e58\u7136\u540e\u76f8\u52a0\u6c42\u5e73\u5747\u7684\u65b9\u6cd5\uff0c\u800c\u662f\u76f4\u63a5\u5bf9\u6240\u6709\u8f93\u5165\u7684\u8bcd\u5411\u91cf\u6c42\u548c\u3002\u5047\u8bbe\u8f93\u5165\u7684\u8bcd\u5411\u91cf\u4e3a\uff080\uff0c1\uff0c0\uff0c0\uff09\u548c\uff080\uff0c0\uff0c0\uff0c1\uff09\uff0c\u90a3\u4e48\u9690\u85cf\u5c42\u7684\u5411\u91cf\u4e3a\uff080\uff0c1\uff0c0\uff0c1\uff09\u3002 Hierarchical Softmax \u7684\u7b2c\u4e8c\u70b9\u6539\u8fdb\u662f\u91c7\u7528\u54c8\u592b\u66fc\u6811\u6765\u66ff\u6362\u4e86\u539f\u5148\u7684\u4ece\u9690\u85cf\u5c42\u5230\u8f93\u51fa\u5c42\u7684\u77e9\u9635 \\(W^\\prime\\) \u3002\u54c8\u592b\u66fc\u6811\u7684\u53f6\u8282\u70b9\u4e2a\u6570\u4e3a\u8bcd\u6c47\u8868\u7684\u5355\u8bcd\u4e2a\u6570 V\uff0c\u4e00\u4e2a\u53f6\u8282\u70b9\u4ee3\u8868\u4e00\u4e2a\u5355\u8bcd\uff0c\u800c\u4ece\u6839\u7ed3\u70b9\u5230\u53f6\u8282\u70b9\u7684\u8def\u5f84\u786e\u5b9a\u4e86\u8fd9\u4e2a\u5355\u8bcd\u6700\u7ec8\u8f93\u51fa\u7684\u8bcd\u5411\u91cf\u3002 \u5177\u4f53\u6765\u8bf4\uff0c\u8fd9\u68f5\u54c8\u592b\u66fc\u6811\u9664\u4e86\u6839\u8282\u70b9\u4ee5\u5916\u7684\u6240\u6709\u975e\u53f6\u8282\u70b9\u4e2d\u90fd\u542b\u6709\u4e00\u4e2a\u7531\u53c2\u6570 \\(\\theta\\) \u786e\u5b9a\u7684 sigmoid \u51fd\u6570\uff0c\u4e0d\u540c\u8282\u70b9\u7684 \\(\\theta\\) \u4e0d\u4e00\u6837\u3002\u8bad\u7ec3\u65f6\u9690\u85cf\u5c42\u7684\u5411\u91cf\u4e0e\u8fd9\u4e2a sigmoid \u51fd\u6570\u8fdb\u884c\u8fd0\u7b97\uff0c\u6839\u636e\u7ed3\u679c\u8fdb\u884c\u5206\u7c7b\uff0c\u82e5\u5206\u7c7b\u4e3a\u8d1f\u7c7b\u5219\u6cbf\u5de6\u5b50\u6811\u5411\u4e0b\u4f20\u9012\uff0c\u7f16\u7801\u4e3a 0\uff1b\u82e5\u5206\u7c7b\u4e3a\u6b63\u7c7b\u5219\u6cbf\u53f3\u5b50\u6811\u5411\u4e0b\u4f20\u9012\uff0c\u7f16\u7801\u4e3a 1\u3002\u6700\u7ec8\u5230\u8fbe\u53f6\u8282\u70b9\uff0c\u53f6\u8282\u70b9\u7684\u5411\u91cf\u5373\u4e3a\u8f93\u51fa\u7684\u8bcd\u5411\u91cf\u3002","title":"Hierarchical Softmax"},{"location":"llm/nlp/word2vec/#negative-sampling","text":"\u5c3d\u7ba1\u54c8\u592b\u66fc\u6811\u7684\u5f15\u5165\u4e3a\u6a21\u578b\u7684\u8bad\u7ec3\u7f29\u77ed\u4e86\u8bb8\u591a\u5f00\u9500\uff0c\u4f46\u5bf9\u4e8e\u4e00\u4e9b\u4e0d\u5e38\u89c1\u3001\u8f83\u751f\u50fb\u7684\u8bcd\u6c47\uff0c\u54c8\u592b\u66fc\u6811\u5728\u8ba1\u7b97\u5b83\u4eec\u7684\u8bcd\u5411\u91cf\u65f6\u4ecd\u7136\u9700\u8981\u505a\u5927\u91cf\u7684\u8fd0\u7b97\u3002 \u8d1f\u91c7\u6837\u662f\u53e6\u4e00\u79cd\u63d0\u9ad8 Word2Vec \u6548\u7387\u7684\u65b9\u6cd5\uff0c\u5b83\u662f\u57fa\u4e8e\u8fd9\u6837\u7684\u89c2\u5bdf\uff1a\u8bad\u7ec3\u4e00\u4e2a\u795e\u7ecf\u7f51\u7edc\u610f\u5473\u7740\u4f7f\u7528\u4e00\u4e2a\u8bad\u7ec3\u6837\u672c\u5c31\u8981\u7a0d\u5fae\u8c03\u6574\u4e00\u4e0b\u795e\u7ecf\u7f51\u7edc\u4e2d\u6240\u6709\u7684\u6743\u91cd\uff0c\u8fd9\u6837\u624d\u80fd\u786e\u4fdd\u9884\u6d4b\u8bad\u7ec3\u6837\u672c\u66f4\u52a0\u7cbe\u786e\uff0c\u5982\u679c\u80fd\u8bbe\u8ba1\u4e00\u79cd\u65b9\u6cd5\u6bcf\u6b21\u53ea\u66f4\u65b0\u4e00\u90e8\u5206\u6743\u91cd\uff0c\u90a3\u4e48\u8ba1\u7b97\u590d\u6742\u5ea6\u5c06\u5927\u5927\u964d\u4f4e\u3002 \u5c06\u4ee5\u4e0a\u89c2\u5bdf\u5f15\u5165 Word2Vec \u5c31\u662f\uff1a\u5f53\u901a\u8fc7\uff08\u201dfox\u201d, \u201cquick\u201d\uff09\u8bcd\u5bf9\u6765\u8bad\u7ec3\u795e\u7ecf\u7f51\u7edc\u65f6\uff0c\u6211\u4eec\u56de\u60f3\u8d77\u8fd9\u4e2a\u795e\u7ecf\u7f51\u7edc\u7684\u201c\u6807\u7b7e\u201d\u6216\u8005\u662f\u201c\u6b63\u786e\u7684\u8f93\u51fa\u201d\u662f\u4e00\u4e2aone-hot\u5411\u91cf\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u5bf9\u4e8e\u795e\u7ecf\u7f51\u7edc\u4e2d\u5bf9\u5e94\u4e8e\u201dquick\u201d\u8fd9\u4e2a\u5355\u8bcd\u7684\u795e\u7ecf\u5143\u5bf9\u5e94\u4e3a1\uff0c\u800c\u5176\u4ed6\u4e0a\u5343\u4e2a\u7684\u8f93\u51fa\u795e\u7ecf\u5143\u5219\u5bf9\u5e94\u4e3a0\u3002\u4f7f\u7528\u8d1f\u91c7\u6837\uff0c\u6211\u4eec\u901a\u8fc7\u968f\u673a\u9009\u62e9\u4e00\u4e2a\u8f83\u5c11\u6570\u76ee\uff08\u6bd4\u5982\u8bf45\u4e2a\uff09\u7684\u201c\u8d1f\u201d\u6837\u672c\u6765\u66f4\u65b0\u5bf9\u5e94\u7684\u6743\u91cd\u3002\uff08\u5728\u8fd9\u4e2a\u6761\u4ef6\u4e0b\uff0c\u201c\u8d1f\u201d\u5355\u8bcd\u5c31\u662f\u6211\u4eec\u5e0c\u671b\u795e\u7ecf\u7f51\u7edc\u8f93\u51fa\u4e3a0\u7684\u795e\u7ecf\u5143\u5bf9\u5e94\u7684\u5355\u8bcd\uff09\u3002\u5e76\u4e14\u6211\u4eec\u4ecd\u7136\u4e3a\u6211\u4eec\u7684\u201c\u6b63\u201d\u5355\u8bcd\u66f4\u65b0\u5bf9\u5e94\u7684\u6743\u91cd\uff08\u4e5f\u5c31\u662f\u5f53\u524d\u6837\u672c\u4e0b\u201dquick\u201d\u5bf9\u5e94\u7684\u795e\u7ecf\u5143\u4ecd\u7136\u8f93\u51fa\u4e3a1\uff09\u3002","title":"Negative Sampling"},{"location":"llm/nlp/word2vec/#reference","text":"Word2Vec\u8be6\u89e3 \u6df1\u5165\u6d45\u51faWord2Vec\u539f\u7406\u89e3\u6790 NLP\u4e4b\u2014\u2014Word2Vec\u8be6\u89e3","title":"Reference"},{"location":"llm/others/dt/","text":"\u5206\u5e03\u5f0f\u8bad\u7ec3 \u00b6 \u7ea6 1632 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 5 \u5206\u949f Abstract \u4ecb\u7ecd\u4e86\u5206\u5e03\u5f0f\u8bad\u7ec3\u7684\u80cc\u666f\u548c\u5e38\u89c1\u7684 4 \u79cd\u5e76\u884c\u7b56\u7565 learn from OneFlow/docs \u4e3a\u4ec0\u4e48\u5206\u5e03\u5f0f\u8bad\u7ec3\u8d8a\u6765\u8d8a\u6d41\u884c \u00b6 \u8fd1\u5e74\u6765\uff0c\u6df1\u5ea6\u5b66\u4e60\u88ab\u5e7f\u6cdb\u5e94\u7528\u5230\u5404\u4e2a\u9886\u57df\uff0c\u5305\u62ec\u8ba1\u7b97\u673a\u89c6\u89c9\u3001\u8bed\u8a00\u7406\u89e3\u3001\u8bed\u97f3\u8bc6\u522b\u3001\u5e7f\u544a\u63a8\u8350\u7b49\u3002\u5728\u8fd9\u4e9b\u4e0d\u540c\u7684\u9886\u57df\u4e2d\uff0c\u4e00\u4e2a\u5171\u540c\u7684\u7279\u70b9\u5c31\u662f\u6a21\u578b\u89c4\u6a21\u8d8a\u6765\u8d8a\u5927\uff0c\u6bd4\u5982 GPT-3 \u6a21\u578b\u7684\u53c2\u6570\u91cf\u8fbe\u52301750\u4ebf\u3002\u5373\u4f7f\u75281024\u5f20 80 GB \u7684 A100\uff0c\u90a3\u4e48\u5b8c\u6574\u8bad\u7ec3 GPT-3 \u7684\u65f6\u957f\u90fd\u9700\u89811\u4e2a\u6708\u3002 \u6a21\u578b\u89c4\u6a21\u7684\u6269\u5927\uff0c\u5bf9\u786c\u4ef6\uff08\u7b97\u529b\u3001\u5185\u5b58\uff09\u7684\u53d1\u5c55\u63d0\u51fa\u8981\u6c42\u3002\u7136\u800c\uff0c\u56e0\u4e3a \u5185\u5b58\u5899 \u7684\u5b58\u5728\uff0c\u5355\u4e00\u8bbe\u5907\u7684\u7b97\u529b\u53ca\u5bb9\u91cf\uff0c\u53d7\u9650\u4e8e\u7269\u7406\u5b9a\u5f8b\uff0c\u6301\u7eed\u63d0\u9ad8\u82af\u7247\u7684\u96c6\u6210\u8d8a\u6765\u8d8a\u56f0\u96be\uff0c\u96be\u4ee5\u8ddf\u4e0a\u6a21\u578b\u6269\u5927\u7684\u9700\u6c42\u3002 \u4e3a\u4e86\u89e3\u51b3\u7b97\u529b\u589e\u901f\u4e0d\u8db3\u7684\u95ee\u9898\uff0c\u4eba\u4eec\u8003\u8651\u7528\u591a\u8282\u70b9\u96c6\u7fa4\u8fdb\u884c\u5206\u5e03\u5f0f\u8bad\u7ec3\uff0c\u4ee5\u63d0\u5347\u7b97\u529b\uff0c\u5206\u5e03\u5f0f\u8bad\u7ec3\u52bf\u5728\u5fc5\u884c\u3002 \u5e38\u89c1\u7684\u5e76\u884c\u7b56\u7565 \u00b6 \u7b80\u5355\u7684\u673a\u5668\u5806\u53e0\u5e76\u4e0d\u4e00\u5b9a\u4f1a\u5e26\u6765\u7b97\u529b\u7684\u589e\u957f\u3002\u56e0\u4e3a\u795e\u7ecf\u7f51\u7edc\u7684\u8bad\u7ec3\u5e76\u4e0d\u662f\u5355\u7eaf\u7684\u201c\u628a\u539f\u6765\u4e00\u4e2a\u8bbe\u5907\u505a\u7684\u4e8b\u60c5\uff0c\u73b0\u5728\u5206\u7ed9\u591a\u4e2a\u8bbe\u5907\u5404\u81ea\u505a\u201d\uff0c\u5b83\u4e0d\u4ec5\u9700\u8981\u591a\u4e2a\u8bbe\u5907\u8fdb\u884c\u8ba1\u7b97\uff0c\u8fd8\u6d89\u53ca\u5230\u8bbe\u5907\u4e4b\u95f4\u7684\u6570\u636e\u4f20\u8f93\uff0c\u53ea\u6709\u534f\u8c03\u597d\u96c6\u7fa4\u4e2d\u7684\u8ba1\u7b97\u4e0e\u901a\u4fe1\uff0c\u624d\u80fd\u505a\u9ad8\u6548\u7684\u5206\u5e03\u5f0f\u8bad\u7ec3\u3002 \u6211\u4eec\u5c06\u4ee5\u77e9\u9635\u4e58\u6cd5\u7684\u4f8b\u5b50\uff0c\u89e3\u91ca\u6570\u636e\u5e76\u884c\u3001\u6a21\u578b\u5e76\u884c\u7684\u533a\u522b\u3002 \u5148\u4e86\u89e3\u4ee5\u4e0b\u903b\u8f91\u4e0a\u7684\u77e9\u9635\u4e58\u6cd5\u4f8b\u5b50: \u5047\u8bbe\u795e\u7ecf\u7f51\u7edc\u4e2d\u67d0\u4e00\u5c42\u662f\u505a\u77e9\u9635\u4e58\u6cd5\uff0c\u5176\u4e2d\u7684\u8f93\u5165 \\(x\\) \u7684\u5f62\u72b6\u4e3a \\(4\\times5\\) \uff0c\u6a21\u578b\u53c2\u6570 \\(w\\) \u7684\u5f62\u72b6\u4e3a \\(5\\times8\\) \uff0c\u90a3\u4e48\uff0c\u77e9\u9635\u4e58\u6cd5\u8f93\u51fa\u5f62\u72b6\u4e3a \\(4\\times8\\) \u3002\u793a\u610f\u56fe\u5982\u4e0b\uff1a \u5355\u673a\u5355\u5361\u7684\u8bad\u7ec3\u4e2d\uff0c\u4ee5\u4e0a\u77e9\u9635\u4e58\u6cd5\uff0c\u5148\u8ba1\u7b97\u5f97\u5230 \\(out\\) \uff0c\u5e76\u5c06 \\(out\\) \u4f20\u9012\u7ed9\u4e0b\u4e00\u5c42\uff0c\u5e76\u6700\u7ec8\u8ba1\u7b97\u5f97\u5230 \\(loss\\) \uff0c\u7136\u540e\u5728\u53cd\u5411\u4f20\u64ad\u8fc7\u7a0b\u4e2d\uff0c\u5f97\u5230 \\(\\frac{\\partial loss}{\\partial w}\\) \uff0c\u7528\u4e8e\u66f4\u65b0 \\(w\\) \u3002 \u5206\u5e03\u5f0f\u8bad\u7ec3\u4e2d\uff0c\u4f9d\u636e\u662f\u5207\u5206 \\(x\\) \u8fd8\u662f \\(w\\) \u7684\u4e0d\u540c\uff0c\u5206\u4e3a\u201c\u6570\u636e\u5e76\u884c\u201d\u548c\u201c\u6a21\u578b\u5e76\u884c\u201d\u7b56\u7565\u3002\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u4ecb\u7ecd\u5e38\u89c1\u7684\u5e76\u884c\u7b56\u7565\u3002 \u6570\u636e\u5e76\u884c \u00b6 \u6240\u8c13\u7684\u6570\u636e\u5e76\u884c\uff0c\u5c31\u662f\u5c06\u6570\u636e \\(x\\) \u8fdb\u884c\u5207\u5206\uff0c\u800c\u6bcf\u4e2a\u8bbe\u5907\u4e0a\u7684\u6a21\u578b \\(w\\) \u662f\u5b8c\u6574\u7684\u3001\u4e00\u81f4\u7684\u3002\u5982\u4e0b\u56fe\u6240\u793a\uff0c \\(x\\) \u88ab\u6309\u7167\u7b2c0\u7ef4\u5ea6\u5e73\u5747\u5207\u5206\u52302\u4e2a\u8bbe\u5907\u4e0a\uff0c\u4e24\u4e2a\u8bbe\u5907\u4e0a\u90fd\u6709\u5b8c\u6574\u7684 \\(w\\) \u3002 \u8fd9\u6837\uff0c\u5728\u4e24\u53f0\u8bbe\u5907\u4e0a\uff0c\u5206\u522b\u5f97\u5230\u7684\u8f93\u51fa\uff0c\u90fd\u53ea\u662f\u903b\u8f91\u4e0a\u8f93\u51fa\u7684\u4e00\u534a\uff08\u5f62\u72b6\u4e3a \\(2\\times8\\) \uff09\uff0c\u5c06\u4e24\u4e2a\u8bbe\u5907\u4e0a\u7684\u8f93\u51fa\u62fc\u63a5\u5230\u4e00\u8d77\uff0c\u624d\u80fd\u5f97\u5230\u903b\u8f91\u4e0a\u5b8c\u6574\u7684\u8f93\u51fa\u3002 \u6ce8\u610f\uff0c\u56e0\u4e3a\u6570\u636e\u88ab\u5206\u53d1\u5230\u4e862\u4e2a\u8bbe\u5907\u4e0a\uff0c\u56e0\u6b64\u53cd\u5411\u4f20\u64ad\u8fc7\u7a0b\uff0c\u5404\u81ea\u8bbe\u5907\u4e0a\u5f97\u5230\u7684 \\(\\frac{\\partial loss}{\\partial w}\\) \u4f1a\u4e0d\u4e00\u6837\uff0c\u5982\u679c\u76f4\u63a5\u4f7f\u7528\u5404\u4e2a\u8bbe\u5907\u4e0a\u7684\u68af\u5ea6\u66f4\u65b0\u5404\u81ea\u7684\u6a21\u578b\uff0c\u4f1a\u9020\u62102\u4e2a\u8bbe\u5907\u4e0a\u7684 \u6a21\u578b\u4e0d\u4e00\u81f4 \uff0c\u8bad\u7ec3\u5c31\u5931\u53bb\u4e86\u610f\u4e49\uff08\u5230\u5e95\u7528\u54ea\u4e2a\u6a21\u578b\u597d\u5462\uff1f\uff09\u3002 \u56e0\u6b64\uff0c\u6570\u636e\u5e76\u884c\u7b56\u7565\u4e0b\uff0c\u5728\u53cd\u5411\u4f20\u64ad\u8fc7\u7a0b\u4e2d\uff0c\u9700\u8981\u5bf9\u5404\u4e2a\u8bbe\u5907\u4e0a\u7684\u68af\u5ea6\u8fdb\u884c AllReduce \uff0c\u4ee5\u786e\u4fdd\u5404\u4e2a\u8bbe\u5907\u4e0a\u7684\u6a21\u578b\u59cb\u7ec8\u4fdd\u6301\u4e00\u81f4\u3002 \u5f53\u6570\u636e\u96c6\u8f83\u5927\uff0c\u6a21\u578b\u8f83\u5c0f\u65f6\uff0c\u7531\u4e8e\u53cd\u5411\u8fc7\u7a0b\u4e2d\u4e3a\u540c\u6b65\u68af\u5ea6\u4ea7\u751f\u7684\u901a\u4fe1\u4ee3\u4ef7\u8f83\u5c0f\uff0c\u6b64\u65f6\u9009\u62e9\u6570\u636e\u5e76\u884c\u4e00\u822c\u6bd4\u8f83\u6709\u4f18\u52bf\uff0c\u5e38\u89c1\u7684\u89c6\u89c9\u5206\u7c7b\u6a21\u578b\uff0c\u5982 ResNet50\uff0c\u6bd4\u8f83\u9002\u5408\u91c7\u7528\u6570\u636e\u5e76\u884c\u3002 \u6a21\u578b\u5e76\u884c \u00b6 \u5f53\u795e\u7ecf\u7f51\u7edc\u975e\u5e38\u5de8\u5927\uff0c\u6570\u636e\u5e76\u884c\u540c\u6b65\u68af\u5ea6\u7684\u4ee3\u4ef7\u5c31\u4f1a\u5f88\u5927\uff0c\u751a\u81f3\u7f51\u7edc\u53ef\u80fd\u5de8\u5927\u5230\u65e0\u6cd5\u5b58\u653e\u5230\u5355\u4e00\u8ba1\u7b97\u8bbe\u5907\u4e2d\uff0c\u8fd9\u65f6\u5019\uff0c\u53ef\u4ee5\u91c7\u7528\u6a21\u578b\u5e76\u884c\u7b56\u7565\u89e3\u51b3\u95ee\u9898\u3002 \u6240\u8c13\u7684\u6a21\u578b\u5e76\u884c\uff0c\u5c31\u662f\u6bcf\u4e2a\u8bbe\u5907\u4e0a\u7684\u6570\u636e\u662f\u5b8c\u6574\u7684\u3001\u4e00\u81f4\u7684\uff0c\u800c\u6a21\u578b \\(w\\) \u88ab\u5207\u5206\u5230\u4e86\u5404\u4e2a\u8bbe\u5907\u4e0a\uff0c\u6bcf\u4e2a\u8bbe\u5907\u53ea\u62e5\u6709\u6a21\u578b\u7684\u4e00\u90e8\u5206\uff0c\u6240\u6709\u8ba1\u7b97\u8bbe\u5907\u4e0a\u7684\u6a21\u578b\u62fc\u5728\u4e00\u8d77\uff0c\u624d\u662f\u5b8c\u6574\u7684\u6a21\u578b\u3002 \u5982\u4e0b\u56fe\u6240\u793a\uff0c \\(w\\) \u88ab\u6309\u7167\u7b2c1\u7ef4\u5ea6\u5e73\u5747\u5207\u5206\u52302\u4e2a\u8bbe\u5907\u4e0a\uff0c\u4e24\u4e2a\u8bbe\u5907\u4e0a\u90fd\u6709\u5b8c\u6574\u7684 \\(x\\) \u3002\u4e24\u4e2a\u8bbe\u5907\u4e0a\u7684\u8f93\u51fa\u4e5f\u9700\u8981\u901a\u8fc7\u62fc\u63a5\u624d\u80fd\u5f97\u5230\u903b\u8f91\u4e0a\u7684\u8f93\u51fa\u3002 \u6a21\u578b\u5e76\u884c\u7684\u597d\u5904\u662f\uff0c\u7701\u53bb\u4e86\u591a\u4e2a\u8bbe\u5907\u4e4b\u95f4\u7684\u68af\u5ea6 AllReduce\uff1b\u4f46\u662f\uff0c\u7531\u4e8e\u6bcf\u4e2a\u8bbe\u5907\u90fd\u9700\u8981\u5b8c\u6574\u7684\u6570\u636e\u8f93\u5165\uff0c\u56e0\u6b64\uff0c\u6570\u636e\u4f1a\u5728\u591a\u4e2a\u8bbe\u5907\u4e4b\u95f4\u8fdb\u884c\u5e7f\u64ad\uff0c\u4ea7\u751f\u901a\u4fe1\u4ee3\u4ef7\u3002\u6bd4\u5982\uff0c\u4e0a\u56fe\u4e2d\u7684\u6700\u7ec8\u5f97\u5230\u7684 \\(out~(4\\times8)\\) \uff0c\u5982\u679c\u5b83\u4f5c\u4e3a\u4e0b\u4e00\u5c42\u7f51\u7edc\u7684\u8f93\u5165\uff0c\u90a3\u4e48\u5b83\u5c31\u9700\u8981\u88ab\u5e7f\u64ad\u53d1\u9001\u5230\u4e24\u4e2a\u8bbe\u5907\u4e0a\u3002 \u8bed\u8a00\u6a21\u578b\uff0c\u5982 BERT\uff0c\u5e38\u91c7\u7528\u6a21\u578b\u5e76\u884c\u3002 \u6d41\u6c34\u5e76\u884c \u00b6 \u5f53\u795e\u7ecf\u7f51\u7edc\u8fc7\u4e8e\u5de8\u5927\uff0c\u65e0\u6cd5\u5728\u4e00\u4e2a\u8bbe\u5907\u4e0a\u5b58\u653e\u65f6\uff0c\u9664\u4e86\u4e0a\u8ff0\u7684\u6a21\u578b\u5e76\u884c\u7684\u7b56\u7565\u5916\uff0c\u8fd8\u53ef\u4ee5\u9009\u62e9\u6d41\u6c34\u5e76\u884c\u3002 \u6d41\u6c34\u5e76\u884c\u6307\u5c06\u7f51\u7edc\u5207\u4e3a\u591a\u4e2a\u9636\u6bb5\uff0c\u5e76\u5206\u53d1\u5230\u4e0d\u540c\u7684\u8ba1\u7b97\u8bbe\u5907\u4e0a\uff0c\u5404\u4e2a\u8ba1\u7b97\u8bbe\u5907\u4e4b\u95f4\u4ee5\u201c\u63a5\u529b\u201d\u7684\u65b9\u5f0f\u5b8c\u6210\u8bad\u7ec3\u3002 \u5982\u4e0b\u56fe\uff0c\u5c55\u793a\u4e86\u4e00\u4e2a\u903b\u8f91\u4e0a\u76844\u5c42\u7f51\u7edc\uff08 T1 \u81f3 T4 )\u662f\u5982\u4f55\u505a\u6d41\u6c34\u5e76\u884c\u7684\u3002 4\u5c42\u7f51\u7edc\u88ab\u5207\u5206\u52302\u4e2a\u8ba1\u7b97\u8bbe\u5907\u4e0a\uff0c\u5176\u4e2d GPU0 \u4e0a\u8fdb\u884c T1 \u4e0e T2 \u7684\u8fd0\u7b97\uff0c GPU1 \u4e0a\u8fdb\u884c T3 \u4e0e T4 \u7684\u8ba1\u7b97\u3002 GPU0 \u4e0a\u5b8c\u6210\u524d\u4e24\u5c42\u7684\u8ba1\u7b97\u540e\uff0c\u5b83\u7684\u8f93\u51fa\u88ab\u5f53\u4f5c GPU1 \u7684\u8f93\u5165\uff0c\u7ee7\u7eed\u8fdb\u884c\u540e\u4e24\u5c42\u7684\u8ba1\u7b97\u3002 \u6df7\u5408\u5e76\u884c \u00b6 \u7f51\u7edc\u7684\u8bad\u7ec3\u4e2d\uff0c\u4e5f\u53ef\u4ee5\u5c06\u591a\u79cd\u5e76\u884c\u7b56\u7565\u6df7\u7528\uff0c\u4ee5 GPT-3 \u4e3a\u4f8b\uff0c\u4ee5\u4e0b\u662f\u5b83\u8bad\u7ec3\u65f6\u7684\u8bbe\u5907\u5e76\u884c\u65b9\u6848\uff1a \u5b83\u9996\u5148\u88ab\u5206\u4e3a 64 \u4e2a\u9636\u6bb5\uff0c\u8fdb\u884c\u6d41\u6c34\u5e76\u884c\u3002\u6bcf\u4e2a\u9636\u6bb5\u90fd\u8fd0\u884c\u5728 6 \u53f0 DGX-A100 \u4e3b\u673a\u4e0a\u3002\u57286\u53f0\u4e3b\u673a\u4e4b\u95f4\uff0c\u8fdb\u884c\u7684\u662f\u6570\u636e\u5e76\u884c\u8bad\u7ec3\uff1b\u6bcf\u53f0\u4e3b\u673a\u6709 8 \u5f20 GPU \u663e\u5361\uff0c\u540c\u4e00\u53f0\u673a\u5668\u4e0a\u76848\u5f20 GPU \u663e\u5361\u4e4b\u95f4\u662f\u8fdb\u884c\u6a21\u578b\u5e76\u884c\u8bad\u7ec3\u3002 \u5e76\u884c\u7b56\u7565\u7684\u9009\u62e9\u5f71\u54cd\u7740\u8bad\u7ec3\u6548\u7387\uff0c\u6846\u67b6\u5bf9\u5e76\u884c\u8bad\u7ec3\u7684\u63a5\u53e3\u652f\u6301\u7a0b\u5ea6\uff0c\u51b3\u5b9a\u4e86\u7b97\u6cd5\u5de5\u7a0b\u5e08\u7684\u5f00\u53d1\u6548\u7387\u3002OneFlow \u9488\u5bf9\u5206\u5e03\u5f0f\u8bad\u7ec3\u6240\u505a\u7684\u7cfb\u7edf\u7ea7\u8bbe\u8ba1\u548c\u521b\u65b0\uff0c\u4e3a\u7528\u6237\u8f7b\u677e\u4e0a\u624b\u5206\u5e03\u5f0f\u8bad\u7ec3\u505a\u8db3\u4e86\u94fa\u57ab\u3002\u6211\u4eec\u5c06\u5728\u672c\u4e13\u9898\u7684\u5176\u5b83\u6587\u7ae0\u4e2d\u770b\u5230\u76f8\u5173\u793a\u4f8b\u3002","title":"\u5206\u5e03\u5f0f\u8bad\u7ec3"},{"location":"llm/others/dt/#_1","text":"\u7ea6 1632 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 5 \u5206\u949f Abstract \u4ecb\u7ecd\u4e86\u5206\u5e03\u5f0f\u8bad\u7ec3\u7684\u80cc\u666f\u548c\u5e38\u89c1\u7684 4 \u79cd\u5e76\u884c\u7b56\u7565 learn from OneFlow/docs","title":"\u5206\u5e03\u5f0f\u8bad\u7ec3"},{"location":"llm/others/dt/#_2","text":"\u8fd1\u5e74\u6765\uff0c\u6df1\u5ea6\u5b66\u4e60\u88ab\u5e7f\u6cdb\u5e94\u7528\u5230\u5404\u4e2a\u9886\u57df\uff0c\u5305\u62ec\u8ba1\u7b97\u673a\u89c6\u89c9\u3001\u8bed\u8a00\u7406\u89e3\u3001\u8bed\u97f3\u8bc6\u522b\u3001\u5e7f\u544a\u63a8\u8350\u7b49\u3002\u5728\u8fd9\u4e9b\u4e0d\u540c\u7684\u9886\u57df\u4e2d\uff0c\u4e00\u4e2a\u5171\u540c\u7684\u7279\u70b9\u5c31\u662f\u6a21\u578b\u89c4\u6a21\u8d8a\u6765\u8d8a\u5927\uff0c\u6bd4\u5982 GPT-3 \u6a21\u578b\u7684\u53c2\u6570\u91cf\u8fbe\u52301750\u4ebf\u3002\u5373\u4f7f\u75281024\u5f20 80 GB \u7684 A100\uff0c\u90a3\u4e48\u5b8c\u6574\u8bad\u7ec3 GPT-3 \u7684\u65f6\u957f\u90fd\u9700\u89811\u4e2a\u6708\u3002 \u6a21\u578b\u89c4\u6a21\u7684\u6269\u5927\uff0c\u5bf9\u786c\u4ef6\uff08\u7b97\u529b\u3001\u5185\u5b58\uff09\u7684\u53d1\u5c55\u63d0\u51fa\u8981\u6c42\u3002\u7136\u800c\uff0c\u56e0\u4e3a \u5185\u5b58\u5899 \u7684\u5b58\u5728\uff0c\u5355\u4e00\u8bbe\u5907\u7684\u7b97\u529b\u53ca\u5bb9\u91cf\uff0c\u53d7\u9650\u4e8e\u7269\u7406\u5b9a\u5f8b\uff0c\u6301\u7eed\u63d0\u9ad8\u82af\u7247\u7684\u96c6\u6210\u8d8a\u6765\u8d8a\u56f0\u96be\uff0c\u96be\u4ee5\u8ddf\u4e0a\u6a21\u578b\u6269\u5927\u7684\u9700\u6c42\u3002 \u4e3a\u4e86\u89e3\u51b3\u7b97\u529b\u589e\u901f\u4e0d\u8db3\u7684\u95ee\u9898\uff0c\u4eba\u4eec\u8003\u8651\u7528\u591a\u8282\u70b9\u96c6\u7fa4\u8fdb\u884c\u5206\u5e03\u5f0f\u8bad\u7ec3\uff0c\u4ee5\u63d0\u5347\u7b97\u529b\uff0c\u5206\u5e03\u5f0f\u8bad\u7ec3\u52bf\u5728\u5fc5\u884c\u3002","title":"\u4e3a\u4ec0\u4e48\u5206\u5e03\u5f0f\u8bad\u7ec3\u8d8a\u6765\u8d8a\u6d41\u884c"},{"location":"llm/others/dt/#_3","text":"\u7b80\u5355\u7684\u673a\u5668\u5806\u53e0\u5e76\u4e0d\u4e00\u5b9a\u4f1a\u5e26\u6765\u7b97\u529b\u7684\u589e\u957f\u3002\u56e0\u4e3a\u795e\u7ecf\u7f51\u7edc\u7684\u8bad\u7ec3\u5e76\u4e0d\u662f\u5355\u7eaf\u7684\u201c\u628a\u539f\u6765\u4e00\u4e2a\u8bbe\u5907\u505a\u7684\u4e8b\u60c5\uff0c\u73b0\u5728\u5206\u7ed9\u591a\u4e2a\u8bbe\u5907\u5404\u81ea\u505a\u201d\uff0c\u5b83\u4e0d\u4ec5\u9700\u8981\u591a\u4e2a\u8bbe\u5907\u8fdb\u884c\u8ba1\u7b97\uff0c\u8fd8\u6d89\u53ca\u5230\u8bbe\u5907\u4e4b\u95f4\u7684\u6570\u636e\u4f20\u8f93\uff0c\u53ea\u6709\u534f\u8c03\u597d\u96c6\u7fa4\u4e2d\u7684\u8ba1\u7b97\u4e0e\u901a\u4fe1\uff0c\u624d\u80fd\u505a\u9ad8\u6548\u7684\u5206\u5e03\u5f0f\u8bad\u7ec3\u3002 \u6211\u4eec\u5c06\u4ee5\u77e9\u9635\u4e58\u6cd5\u7684\u4f8b\u5b50\uff0c\u89e3\u91ca\u6570\u636e\u5e76\u884c\u3001\u6a21\u578b\u5e76\u884c\u7684\u533a\u522b\u3002 \u5148\u4e86\u89e3\u4ee5\u4e0b\u903b\u8f91\u4e0a\u7684\u77e9\u9635\u4e58\u6cd5\u4f8b\u5b50: \u5047\u8bbe\u795e\u7ecf\u7f51\u7edc\u4e2d\u67d0\u4e00\u5c42\u662f\u505a\u77e9\u9635\u4e58\u6cd5\uff0c\u5176\u4e2d\u7684\u8f93\u5165 \\(x\\) \u7684\u5f62\u72b6\u4e3a \\(4\\times5\\) \uff0c\u6a21\u578b\u53c2\u6570 \\(w\\) \u7684\u5f62\u72b6\u4e3a \\(5\\times8\\) \uff0c\u90a3\u4e48\uff0c\u77e9\u9635\u4e58\u6cd5\u8f93\u51fa\u5f62\u72b6\u4e3a \\(4\\times8\\) \u3002\u793a\u610f\u56fe\u5982\u4e0b\uff1a \u5355\u673a\u5355\u5361\u7684\u8bad\u7ec3\u4e2d\uff0c\u4ee5\u4e0a\u77e9\u9635\u4e58\u6cd5\uff0c\u5148\u8ba1\u7b97\u5f97\u5230 \\(out\\) \uff0c\u5e76\u5c06 \\(out\\) \u4f20\u9012\u7ed9\u4e0b\u4e00\u5c42\uff0c\u5e76\u6700\u7ec8\u8ba1\u7b97\u5f97\u5230 \\(loss\\) \uff0c\u7136\u540e\u5728\u53cd\u5411\u4f20\u64ad\u8fc7\u7a0b\u4e2d\uff0c\u5f97\u5230 \\(\\frac{\\partial loss}{\\partial w}\\) \uff0c\u7528\u4e8e\u66f4\u65b0 \\(w\\) \u3002 \u5206\u5e03\u5f0f\u8bad\u7ec3\u4e2d\uff0c\u4f9d\u636e\u662f\u5207\u5206 \\(x\\) \u8fd8\u662f \\(w\\) \u7684\u4e0d\u540c\uff0c\u5206\u4e3a\u201c\u6570\u636e\u5e76\u884c\u201d\u548c\u201c\u6a21\u578b\u5e76\u884c\u201d\u7b56\u7565\u3002\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u4ecb\u7ecd\u5e38\u89c1\u7684\u5e76\u884c\u7b56\u7565\u3002","title":"\u5e38\u89c1\u7684\u5e76\u884c\u7b56\u7565"},{"location":"llm/others/dt/#_4","text":"\u6240\u8c13\u7684\u6570\u636e\u5e76\u884c\uff0c\u5c31\u662f\u5c06\u6570\u636e \\(x\\) \u8fdb\u884c\u5207\u5206\uff0c\u800c\u6bcf\u4e2a\u8bbe\u5907\u4e0a\u7684\u6a21\u578b \\(w\\) \u662f\u5b8c\u6574\u7684\u3001\u4e00\u81f4\u7684\u3002\u5982\u4e0b\u56fe\u6240\u793a\uff0c \\(x\\) \u88ab\u6309\u7167\u7b2c0\u7ef4\u5ea6\u5e73\u5747\u5207\u5206\u52302\u4e2a\u8bbe\u5907\u4e0a\uff0c\u4e24\u4e2a\u8bbe\u5907\u4e0a\u90fd\u6709\u5b8c\u6574\u7684 \\(w\\) \u3002 \u8fd9\u6837\uff0c\u5728\u4e24\u53f0\u8bbe\u5907\u4e0a\uff0c\u5206\u522b\u5f97\u5230\u7684\u8f93\u51fa\uff0c\u90fd\u53ea\u662f\u903b\u8f91\u4e0a\u8f93\u51fa\u7684\u4e00\u534a\uff08\u5f62\u72b6\u4e3a \\(2\\times8\\) \uff09\uff0c\u5c06\u4e24\u4e2a\u8bbe\u5907\u4e0a\u7684\u8f93\u51fa\u62fc\u63a5\u5230\u4e00\u8d77\uff0c\u624d\u80fd\u5f97\u5230\u903b\u8f91\u4e0a\u5b8c\u6574\u7684\u8f93\u51fa\u3002 \u6ce8\u610f\uff0c\u56e0\u4e3a\u6570\u636e\u88ab\u5206\u53d1\u5230\u4e862\u4e2a\u8bbe\u5907\u4e0a\uff0c\u56e0\u6b64\u53cd\u5411\u4f20\u64ad\u8fc7\u7a0b\uff0c\u5404\u81ea\u8bbe\u5907\u4e0a\u5f97\u5230\u7684 \\(\\frac{\\partial loss}{\\partial w}\\) \u4f1a\u4e0d\u4e00\u6837\uff0c\u5982\u679c\u76f4\u63a5\u4f7f\u7528\u5404\u4e2a\u8bbe\u5907\u4e0a\u7684\u68af\u5ea6\u66f4\u65b0\u5404\u81ea\u7684\u6a21\u578b\uff0c\u4f1a\u9020\u62102\u4e2a\u8bbe\u5907\u4e0a\u7684 \u6a21\u578b\u4e0d\u4e00\u81f4 \uff0c\u8bad\u7ec3\u5c31\u5931\u53bb\u4e86\u610f\u4e49\uff08\u5230\u5e95\u7528\u54ea\u4e2a\u6a21\u578b\u597d\u5462\uff1f\uff09\u3002 \u56e0\u6b64\uff0c\u6570\u636e\u5e76\u884c\u7b56\u7565\u4e0b\uff0c\u5728\u53cd\u5411\u4f20\u64ad\u8fc7\u7a0b\u4e2d\uff0c\u9700\u8981\u5bf9\u5404\u4e2a\u8bbe\u5907\u4e0a\u7684\u68af\u5ea6\u8fdb\u884c AllReduce \uff0c\u4ee5\u786e\u4fdd\u5404\u4e2a\u8bbe\u5907\u4e0a\u7684\u6a21\u578b\u59cb\u7ec8\u4fdd\u6301\u4e00\u81f4\u3002 \u5f53\u6570\u636e\u96c6\u8f83\u5927\uff0c\u6a21\u578b\u8f83\u5c0f\u65f6\uff0c\u7531\u4e8e\u53cd\u5411\u8fc7\u7a0b\u4e2d\u4e3a\u540c\u6b65\u68af\u5ea6\u4ea7\u751f\u7684\u901a\u4fe1\u4ee3\u4ef7\u8f83\u5c0f\uff0c\u6b64\u65f6\u9009\u62e9\u6570\u636e\u5e76\u884c\u4e00\u822c\u6bd4\u8f83\u6709\u4f18\u52bf\uff0c\u5e38\u89c1\u7684\u89c6\u89c9\u5206\u7c7b\u6a21\u578b\uff0c\u5982 ResNet50\uff0c\u6bd4\u8f83\u9002\u5408\u91c7\u7528\u6570\u636e\u5e76\u884c\u3002","title":"\u6570\u636e\u5e76\u884c"},{"location":"llm/others/dt/#_5","text":"\u5f53\u795e\u7ecf\u7f51\u7edc\u975e\u5e38\u5de8\u5927\uff0c\u6570\u636e\u5e76\u884c\u540c\u6b65\u68af\u5ea6\u7684\u4ee3\u4ef7\u5c31\u4f1a\u5f88\u5927\uff0c\u751a\u81f3\u7f51\u7edc\u53ef\u80fd\u5de8\u5927\u5230\u65e0\u6cd5\u5b58\u653e\u5230\u5355\u4e00\u8ba1\u7b97\u8bbe\u5907\u4e2d\uff0c\u8fd9\u65f6\u5019\uff0c\u53ef\u4ee5\u91c7\u7528\u6a21\u578b\u5e76\u884c\u7b56\u7565\u89e3\u51b3\u95ee\u9898\u3002 \u6240\u8c13\u7684\u6a21\u578b\u5e76\u884c\uff0c\u5c31\u662f\u6bcf\u4e2a\u8bbe\u5907\u4e0a\u7684\u6570\u636e\u662f\u5b8c\u6574\u7684\u3001\u4e00\u81f4\u7684\uff0c\u800c\u6a21\u578b \\(w\\) \u88ab\u5207\u5206\u5230\u4e86\u5404\u4e2a\u8bbe\u5907\u4e0a\uff0c\u6bcf\u4e2a\u8bbe\u5907\u53ea\u62e5\u6709\u6a21\u578b\u7684\u4e00\u90e8\u5206\uff0c\u6240\u6709\u8ba1\u7b97\u8bbe\u5907\u4e0a\u7684\u6a21\u578b\u62fc\u5728\u4e00\u8d77\uff0c\u624d\u662f\u5b8c\u6574\u7684\u6a21\u578b\u3002 \u5982\u4e0b\u56fe\u6240\u793a\uff0c \\(w\\) \u88ab\u6309\u7167\u7b2c1\u7ef4\u5ea6\u5e73\u5747\u5207\u5206\u52302\u4e2a\u8bbe\u5907\u4e0a\uff0c\u4e24\u4e2a\u8bbe\u5907\u4e0a\u90fd\u6709\u5b8c\u6574\u7684 \\(x\\) \u3002\u4e24\u4e2a\u8bbe\u5907\u4e0a\u7684\u8f93\u51fa\u4e5f\u9700\u8981\u901a\u8fc7\u62fc\u63a5\u624d\u80fd\u5f97\u5230\u903b\u8f91\u4e0a\u7684\u8f93\u51fa\u3002 \u6a21\u578b\u5e76\u884c\u7684\u597d\u5904\u662f\uff0c\u7701\u53bb\u4e86\u591a\u4e2a\u8bbe\u5907\u4e4b\u95f4\u7684\u68af\u5ea6 AllReduce\uff1b\u4f46\u662f\uff0c\u7531\u4e8e\u6bcf\u4e2a\u8bbe\u5907\u90fd\u9700\u8981\u5b8c\u6574\u7684\u6570\u636e\u8f93\u5165\uff0c\u56e0\u6b64\uff0c\u6570\u636e\u4f1a\u5728\u591a\u4e2a\u8bbe\u5907\u4e4b\u95f4\u8fdb\u884c\u5e7f\u64ad\uff0c\u4ea7\u751f\u901a\u4fe1\u4ee3\u4ef7\u3002\u6bd4\u5982\uff0c\u4e0a\u56fe\u4e2d\u7684\u6700\u7ec8\u5f97\u5230\u7684 \\(out~(4\\times8)\\) \uff0c\u5982\u679c\u5b83\u4f5c\u4e3a\u4e0b\u4e00\u5c42\u7f51\u7edc\u7684\u8f93\u5165\uff0c\u90a3\u4e48\u5b83\u5c31\u9700\u8981\u88ab\u5e7f\u64ad\u53d1\u9001\u5230\u4e24\u4e2a\u8bbe\u5907\u4e0a\u3002 \u8bed\u8a00\u6a21\u578b\uff0c\u5982 BERT\uff0c\u5e38\u91c7\u7528\u6a21\u578b\u5e76\u884c\u3002","title":"\u6a21\u578b\u5e76\u884c"},{"location":"llm/others/dt/#_6","text":"\u5f53\u795e\u7ecf\u7f51\u7edc\u8fc7\u4e8e\u5de8\u5927\uff0c\u65e0\u6cd5\u5728\u4e00\u4e2a\u8bbe\u5907\u4e0a\u5b58\u653e\u65f6\uff0c\u9664\u4e86\u4e0a\u8ff0\u7684\u6a21\u578b\u5e76\u884c\u7684\u7b56\u7565\u5916\uff0c\u8fd8\u53ef\u4ee5\u9009\u62e9\u6d41\u6c34\u5e76\u884c\u3002 \u6d41\u6c34\u5e76\u884c\u6307\u5c06\u7f51\u7edc\u5207\u4e3a\u591a\u4e2a\u9636\u6bb5\uff0c\u5e76\u5206\u53d1\u5230\u4e0d\u540c\u7684\u8ba1\u7b97\u8bbe\u5907\u4e0a\uff0c\u5404\u4e2a\u8ba1\u7b97\u8bbe\u5907\u4e4b\u95f4\u4ee5\u201c\u63a5\u529b\u201d\u7684\u65b9\u5f0f\u5b8c\u6210\u8bad\u7ec3\u3002 \u5982\u4e0b\u56fe\uff0c\u5c55\u793a\u4e86\u4e00\u4e2a\u903b\u8f91\u4e0a\u76844\u5c42\u7f51\u7edc\uff08 T1 \u81f3 T4 )\u662f\u5982\u4f55\u505a\u6d41\u6c34\u5e76\u884c\u7684\u3002 4\u5c42\u7f51\u7edc\u88ab\u5207\u5206\u52302\u4e2a\u8ba1\u7b97\u8bbe\u5907\u4e0a\uff0c\u5176\u4e2d GPU0 \u4e0a\u8fdb\u884c T1 \u4e0e T2 \u7684\u8fd0\u7b97\uff0c GPU1 \u4e0a\u8fdb\u884c T3 \u4e0e T4 \u7684\u8ba1\u7b97\u3002 GPU0 \u4e0a\u5b8c\u6210\u524d\u4e24\u5c42\u7684\u8ba1\u7b97\u540e\uff0c\u5b83\u7684\u8f93\u51fa\u88ab\u5f53\u4f5c GPU1 \u7684\u8f93\u5165\uff0c\u7ee7\u7eed\u8fdb\u884c\u540e\u4e24\u5c42\u7684\u8ba1\u7b97\u3002","title":"\u6d41\u6c34\u5e76\u884c"},{"location":"llm/others/dt/#_7","text":"\u7f51\u7edc\u7684\u8bad\u7ec3\u4e2d\uff0c\u4e5f\u53ef\u4ee5\u5c06\u591a\u79cd\u5e76\u884c\u7b56\u7565\u6df7\u7528\uff0c\u4ee5 GPT-3 \u4e3a\u4f8b\uff0c\u4ee5\u4e0b\u662f\u5b83\u8bad\u7ec3\u65f6\u7684\u8bbe\u5907\u5e76\u884c\u65b9\u6848\uff1a \u5b83\u9996\u5148\u88ab\u5206\u4e3a 64 \u4e2a\u9636\u6bb5\uff0c\u8fdb\u884c\u6d41\u6c34\u5e76\u884c\u3002\u6bcf\u4e2a\u9636\u6bb5\u90fd\u8fd0\u884c\u5728 6 \u53f0 DGX-A100 \u4e3b\u673a\u4e0a\u3002\u57286\u53f0\u4e3b\u673a\u4e4b\u95f4\uff0c\u8fdb\u884c\u7684\u662f\u6570\u636e\u5e76\u884c\u8bad\u7ec3\uff1b\u6bcf\u53f0\u4e3b\u673a\u6709 8 \u5f20 GPU \u663e\u5361\uff0c\u540c\u4e00\u53f0\u673a\u5668\u4e0a\u76848\u5f20 GPU \u663e\u5361\u4e4b\u95f4\u662f\u8fdb\u884c\u6a21\u578b\u5e76\u884c\u8bad\u7ec3\u3002 \u5e76\u884c\u7b56\u7565\u7684\u9009\u62e9\u5f71\u54cd\u7740\u8bad\u7ec3\u6548\u7387\uff0c\u6846\u67b6\u5bf9\u5e76\u884c\u8bad\u7ec3\u7684\u63a5\u53e3\u652f\u6301\u7a0b\u5ea6\uff0c\u51b3\u5b9a\u4e86\u7b97\u6cd5\u5de5\u7a0b\u5e08\u7684\u5f00\u53d1\u6548\u7387\u3002OneFlow \u9488\u5bf9\u5206\u5e03\u5f0f\u8bad\u7ec3\u6240\u505a\u7684\u7cfb\u7edf\u7ea7\u8bbe\u8ba1\u548c\u521b\u65b0\uff0c\u4e3a\u7528\u6237\u8f7b\u677e\u4e0a\u624b\u5206\u5e03\u5f0f\u8bad\u7ec3\u505a\u8db3\u4e86\u94fa\u57ab\u3002\u6211\u4eec\u5c06\u5728\u672c\u4e13\u9898\u7684\u5176\u5b83\u6587\u7ae0\u4e2d\u770b\u5230\u76f8\u5173\u793a\u4f8b\u3002","title":"\u6df7\u5408\u5e76\u884c"},{"location":"llm/others/prompt/","text":"Prompt \u00b6 \u7ea6 145 \u4e2a\u5b57 57 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f Abstract Learn from ChatGPT Prompt Engineering for Developers in DeepLearning.AI Guidelines for Prompting \u00b6 Principle 1: Write clear and specific instructions Tactic 1: Use delimiters to clearly indicate disinct parts of the input Delimiters can be anything like: ```,\"\"\",<>, , , : Tactic 2: Ask for a structureed output JSON, HTML Tactic 3: Ask the modell to check whether conditions are satisfied Tactic 4: \"Few-shot\" prompting Principle 2: Give the model time to \"think\" Tactic 1: Specify the steps required to complete a task, Ask for output in a specified format Tactic 2: Instruct the model to work out its own solution before rushing to a conclusion Setup \u00b6 Load the API key and relevant Python libaries. import openai import os from dotenv import load_dotenv , find_dotenv _ = load_dotenv ( find_dotenv ()) openai . api_key = os . getenv ( 'OPENAI_API_KEY' ) using helper function , model is gpt-3.5-turbo . def get_completion ( prompt , model = \"gpt-3.5-turbo\" ): messages = [{ \"role\" : \"user\" , \"content\" : prompt }] response = openai . ChatCompletion . create ( model = model , messages = messages , temperature = 0 , # this is the degree of randomness of the model's output ) return response . choices [ 0 ] . message [ \"content\" ] Example \u00b6 simple text = f \"\"\" You should express what you want a model to do by \\ providing instructions that are as clear and \\ specific as you can possibly make them. \\ This will guide the model towards the desired output, \\ and reduce the chances of receiving irrelevant \\ or incorrect responses. Don't confuse writing a \\ clear prompt with writing a short prompt. \\ In many cases, longer prompts provide more clarity \\ and context for the model, which can lead to \\ more detailed and relevant outputs. \"\"\" prompt = f \"\"\" Summarize the text delimited by triple backticks \\ into a single sentence. ``` { text } ``` \"\"\" response = get_completion ( prompt ) print ( response ) chatbot def get_completion ( prompt , model = \"gpt-3.5-turbo\" ): # Andrew mentioned that the prompt/ completion paradigm is preferable for this class messages = [{ \"role\" : \"user\" , \"content\" : prompt }] response = openai . ChatCompletion . create ( model = model , messages = messages , temperature = 0 , # this is the degree of randomness of the model's output ) return response . choices [ 0 ] . message [ \"content\" ] prod_review = \"\"\" Got this panda plush toy for my daughter's birthday, \\ who loves it and takes it everywhere. It's soft and \\ super cute, and its face has a friendly look. It's \\ a bit small for what I paid though. I think there \\ might be other options that are bigger for the \\ same price. It arrived a day earlier than expected, \\ so I got to play with it myself before I gave it \\ to her. \"\"\" prompt = f \"\"\" Your task is to generate a short summary of a product \\ review from an ecommerce site. Summarize the review below, delimited by triple backticks, in at most 30 words. Review: ``` { prod_review } ``` \"\"\" response = get_completion ( prompt ) print ( response ) Prompting for Tasks \u00b6 Iterative Summarizing Inferring Transforming Expanding Chatbot","title":"Prompt"},{"location":"llm/others/prompt/#prompt","text":"\u7ea6 145 \u4e2a\u5b57 57 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f Abstract Learn from ChatGPT Prompt Engineering for Developers in DeepLearning.AI","title":"Prompt"},{"location":"llm/others/prompt/#guidelines-for-prompting","text":"Principle 1: Write clear and specific instructions Tactic 1: Use delimiters to clearly indicate disinct parts of the input Delimiters can be anything like: ```,\"\"\",<>, , , : Tactic 2: Ask for a structureed output JSON, HTML Tactic 3: Ask the modell to check whether conditions are satisfied Tactic 4: \"Few-shot\" prompting Principle 2: Give the model time to \"think\" Tactic 1: Specify the steps required to complete a task, Ask for output in a specified format Tactic 2: Instruct the model to work out its own solution before rushing to a conclusion","title":"Guidelines for Prompting"},{"location":"llm/others/prompt/#setup","text":"Load the API key and relevant Python libaries. import openai import os from dotenv import load_dotenv , find_dotenv _ = load_dotenv ( find_dotenv ()) openai . api_key = os . getenv ( 'OPENAI_API_KEY' ) using helper function , model is gpt-3.5-turbo . def get_completion ( prompt , model = \"gpt-3.5-turbo\" ): messages = [{ \"role\" : \"user\" , \"content\" : prompt }] response = openai . ChatCompletion . create ( model = model , messages = messages , temperature = 0 , # this is the degree of randomness of the model's output ) return response . choices [ 0 ] . message [ \"content\" ]","title":"Setup"},{"location":"llm/others/prompt/#example","text":"simple text = f \"\"\" You should express what you want a model to do by \\ providing instructions that are as clear and \\ specific as you can possibly make them. \\ This will guide the model towards the desired output, \\ and reduce the chances of receiving irrelevant \\ or incorrect responses. Don't confuse writing a \\ clear prompt with writing a short prompt. \\ In many cases, longer prompts provide more clarity \\ and context for the model, which can lead to \\ more detailed and relevant outputs. \"\"\" prompt = f \"\"\" Summarize the text delimited by triple backticks \\ into a single sentence. ``` { text } ``` \"\"\" response = get_completion ( prompt ) print ( response ) chatbot def get_completion ( prompt , model = \"gpt-3.5-turbo\" ): # Andrew mentioned that the prompt/ completion paradigm is preferable for this class messages = [{ \"role\" : \"user\" , \"content\" : prompt }] response = openai . ChatCompletion . create ( model = model , messages = messages , temperature = 0 , # this is the degree of randomness of the model's output ) return response . choices [ 0 ] . message [ \"content\" ] prod_review = \"\"\" Got this panda plush toy for my daughter's birthday, \\ who loves it and takes it everywhere. It's soft and \\ super cute, and its face has a friendly look. It's \\ a bit small for what I paid though. I think there \\ might be other options that are bigger for the \\ same price. It arrived a day earlier than expected, \\ so I got to play with it myself before I gave it \\ to her. \"\"\" prompt = f \"\"\" Your task is to generate a short summary of a product \\ review from an ecommerce site. Summarize the review below, delimited by triple backticks, in at most 30 words. Review: ``` { prod_review } ``` \"\"\" response = get_completion ( prompt ) print ( response )","title":"Example"},{"location":"llm/others/prompt/#prompting-for-tasks","text":"Iterative Summarizing Inferring Transforming Expanding Chatbot","title":"Prompting for Tasks"},{"location":"llm/transformer/","text":"Transformer \u00b6 Abstract \u5f52\u6863\u5b66\u4e60 Transformer \u7684\u7b14\u8bb0 Table of Contents \u00b6 Attention Transformer BERT","title":"Transformer"},{"location":"llm/transformer/#transformer","text":"Abstract \u5f52\u6863\u5b66\u4e60 Transformer \u7684\u7b14\u8bb0","title":"Transformer"},{"location":"llm/transformer/#table-of-contents","text":"Attention Transformer BERT","title":"Table of Contents"},{"location":"llm/transformer/attention/","text":"Attention \u673a\u5236 \u00b6 \u7ea6 2743 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f Abstract \u5bf9\u4e8e RNN \u4e2d\u5b58\u5728\u7684\u4fe1\u606f\u74f6\u9888\u95ee\u9898\uff0c\u6ce8\u610f\u529b\u673a\u5236\u53ef\u4ee5\u5f88\u597d\u5730\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002 \u672c\u6587\u5c06\u4ecb\u7ecd Encoder-Decoder\u3001Seq2Seq \u4ee5\u53ca Attention \u673a\u5236\u3002 Encoder-Decoder \u00b6 Encoder-Decoder \u6a21\u578b\u4e3b\u8981\u662f NLP \u9886\u57df\u91cc\u7684\u6982\u5ff5\u3002\u5b83\u5e76\u4e0d\u7279\u503c\u67d0\u79cd\u5177\u4f53\u7684\u7b97\u6cd5\uff0c\u800c\u662f\u4e00\u7c7b\u7b97\u6cd5\u7684\u7edf\u79f0\u3002Encoder-Decoder \u7b97\u662f\u4e00\u4e2a\u901a\u7528\u7684\u6846\u67b6\uff0c\u5728\u8fd9\u4e2a\u6846\u67b6\u4e0b\u53ef\u4ee5\u4f7f\u7528\u4e0d\u540c\u7684\u7b97\u6cd5\u6765\u89e3\u51b3\u4e0d\u540c\u7684\u4efb\u52a1\u3002 Encoder-Decoder \u6846\u67b6\u5f88\u597d\u5730\u8be0\u91ca\u4e86\u673a\u5668\u5b66\u4e60\u7684\u6838\u5fc3\u601d\u8def\uff1a \u5c06\u73b0\u5b9e\u95ee\u9898\u8f6c\u5316\u4e3a\u6570\u5b66\u95ee\u9898\uff0c\u901a\u8fc7\u6c42\u89e3\u6570\u5b66\u95ee\u9898\uff0c\u4ece\u800c\u89e3\u51b3\u73b0\u5b9e\u95ee\u9898 Encoder \u53c8\u79f0\u7f16\u7801\u5668\uff0c\u5b83\u7684\u4f5c\u7528\u5c31\u662f\u300e\u5c06\u73b0\u5b9e\u95ee\u9898\u8f6c\u5316\u4e3a\u6570\u5b66\u95ee\u9898\u300f\u3002 Decoder \u53c8\u79f0\u89e3\u7801\u5668\uff0c\u5b83\u7684\u4f5c\u7528\u5c31\u662f\u300e\u6c42\u89e3\u6570\u5b66\u95ee\u9898\uff0c\u5e76\u8f6c\u5316\u4e3a\u73b0\u5b9e\u4e16\u754c\u7684\u89e3\u51b3\u65b9\u6848\u300f\u3002 \u5173\u4e8e Encoder-Decoder\uff1a \u4e0d\u8bba\u8f93\u5165\u548c\u8f93\u51fa\u7684\u957f\u5ea6\u662f\u4ec0\u4e48\uff0c\u4e2d\u95f4\u7684 \u5411\u91cfc \u7684\u957f\u5ea6\u90fd\u662f\u56fa\u5b9a\u7684\uff08\u8fd9\u4e5f\u662f\u5b83\u7684\u7f3a\u9677\uff09\u3002 \u6839\u636e\u4e0d\u540c\u7684\u4efb\u52a1\u53ef\u4ee5\u9009\u62e9\u4e0d\u540c\u7684\u7f16\u7801\u5668\u548c\u89e3\u7801\u5668\uff08\u53ef\u4ee5\u662f\u4e00\u4e2a RNN\uff0c\u4f46\u901a\u5e38\u662f\u5176\u53d8\u79cd LSTM \u6216\u8005 GRU\uff09\u3002 Encoder-Decoder \u7684\u7f3a\u9677 \u4e3a\u4e86\u4fbf\u4e8e\u7406\u89e3\uff0c\u6211\u4eec\u7c7b\u6bd4\u4e3a\u300c\u538b\u7f29-\u89e3\u538b\u300d\u7684\u8fc7\u7a0b\uff1a \u5c06\u4e00\u5f20 800X800 \u50cf\u7d20\u7684\u56fe\u7247\u538b\u7f29\u6210 100KB\uff0c\u770b\u4e0a\u53bb\u8fd8\u6bd4\u8f83\u6e05\u6670\u3002\u518d\u5c06\u4e00\u5f20 3000X3000 \u50cf\u7d20\u7684\u56fe\u7247\u4e5f\u538b\u7f29\u5230 100KB\uff0c\u770b\u4e0a\u53bb\u5c31\u6a21\u7cca\u4e86\u3002 Encoder-Decoder \u5c31\u662f\u7c7b\u4f3c\u7684\u95ee\u9898\uff1a\u5f53\u8f93\u5165\u4fe1\u606f\u592a\u957f\u65f6\uff0c\u4f1a\u4e22\u5931\u6389\u4e00\u4e9b\u4fe1\u606f\u3002 Seq2Seq \u00b6 \u6982\u8ff0 \u00b6 Seq2Seq\uff08\u662f Sequence to Sequence \u7684\u7f29\u5199\uff09\uff0c\u5b57\u9762\u610f\u601d\u5c31\u662f\u8f93\u5165\u4e00\u4e2a\u5e8f\u5217\uff0c\u8f93\u51fa\u53e6\u4e00\u4e2a\u5e8f\u5217\u3002\u8fd9\u79cd\u7ed3\u6784\u6700\u91cd\u8981\u7684\u5730\u65b9\u5728\u4e8e\u8f93\u5165\u5e8f\u5217\u548c\u8f93\u51fa\u5e8f\u5217\u7684\u957f\u5ea6\u53ef\u4ee5\u53ef\u53d8\u7684\u3002\u4f8b\u5982\u4e0b\u56fe\uff1a \u5982\u4e0a\u56fe\uff1a\u8f93\u5165\u4e86 6 \u4e2a\u6c49\u5b57\uff0c\u8f93\u51fa\u4e86 3 \u4e2a\u82f1\u6587\u5355\u8bcd\u3002\u8f93\u5165\u548c\u8f93\u51fa\u7684\u957f\u5ea6\u4e0d\u540c\u3002 Seq2Seq \u548c Encoder-Decoder \u7684\u5173\u7cfb \u00b6 Seq2Seq\uff08\u5f3a\u8c03\u76ee\u7684\uff09\u4e0d\u7279\u6307\u5177\u4f53\u65b9\u6cd5\uff0c\u6ee1\u8db3\u300c\u8f93\u5165\u5e8f\u5217\u3001\u8f93\u51fa\u5e8f\u5217\u300d\u7684\u76ee\u7684\uff0c\u90fd\u53ef\u4ee5\u7edf\u79f0\u4e3a Seq2Seq \u6a21\u578b\u3002 \u800c Seq2Seq \u4f7f\u7528\u7684\u5177\u4f53\u65b9\u6cd5\u57fa\u672c\u90fd\u5c5e\u4e8eEncoder-Decoder \u6a21\u578b\uff08\u5f3a\u8c03\u65b9\u6cd5\uff09\u7684\u8303\u7574\u3002 \u603b\u7ed3\u4e00\u4e0b\u7684\u8bdd\uff1a Seq2Seq \u5c5e\u4e8e Encoder-Decoder \u7684\u5927\u8303\u7574 Seq2Seq \u66f4\u5f3a\u8c03\u76ee\u7684\uff0cEncoder-Decoder \u66f4\u5f3a\u8c03\u65b9\u6cd5 Attention \u00b6 \u672c\u8d28 \u00b6 Attention\uff08\u6ce8\u610f\u529b\uff09\u673a\u5236\u5982\u679c\u6d45\u5c42\u7684\u7406\u89e3\uff0c\u8ddf\u4ed6\u7684\u540d\u5b57\u975e\u5e38\u5339\u914d\u3002\u4ed6\u7684\u6838\u5fc3\u903b\u8f91\u5c31\u662f\u300c\u4ece\u5173\u6ce8\u5168\u90e8\u5230\u5173\u6ce8\u91cd\u70b9\u300d\u3002\u6211\u4eec\u7684\u89c6\u89c9\u7cfb\u7edf\u5c31\u662f\u4e00\u79cd Attention \u673a\u5236\uff0c\u5c06\u6709\u9650\u7684\u6ce8\u610f\u529b\u96c6\u4e2d\u5728\u91cd\u70b9\u4fe1\u606f\u4e0a\uff0c\u4ece\u800c\u8282\u7701\u8d44\u6e90\uff0c\u5feb\u901f\u83b7\u5f97\u6700\u6709\u6548\u7684\u4fe1\u606f\u3002 Attention \u673a\u5236\u6700\u65e9\u662f\u5728\u8ba1\u7b97\u673a\u89c6\u89c9\u91cc\u5e94\u7528\u7684\uff0c\u968f\u540e\u5728 NLP \u9886\u57df\u4e5f\u5f00\u59cb\u5e94\u7528\u4e86\uff0c\u771f\u6b63\u53d1\u626c\u5149\u5927\u662f\u5728 NLP \u9886\u57df\uff0c\u56e0\u4e3a 2018 \u5e74 BERT \u548c GPT \u7684\u6548\u679c\u51fa\u5947\u7684\u597d\uff0c\u8fdb\u800c\u8d70\u7ea2\u3002\u800c Transformer \u548c Attention \u8fd9\u4e9b\u6838\u5fc3\u5f00\u59cb\u88ab\u5927\u5bb6\u91cd\u70b9\u5173\u6ce8\u3002 \u5982\u679c\u7528\u56fe\u6765\u8868\u8fbe Attention \u7684\u4f4d\u7f6e\u5927\u81f4\u662f\u4e0b\u9762\u7684\u6837\u5b50\uff1a \u4e09\u5927\u4f18\u70b9 \u00b6 \u4e4b\u6240\u4ee5\u8981\u5f15\u5165 Attention \u673a\u5236\uff0c\u4e3b\u8981\u662f 3 \u4e2a\u539f\u56e0\uff1a \u53c2\u6570\u5c11 \uff1a\u6a21\u578b\u590d\u6742\u5ea6\u66f4 CNN\u3001RNN \u76f8\u6bd4\uff0c\u590d\u6742\u5ea6\u66f4\u5c0f\uff0c\u53c2\u6570\u4e5f\u66f4\u5c11\u3002\u5bf9\u7b97\u529b\u7684\u8981\u6c42\u4e5f\u5c31\u66f4\u5c11\u3002 \u901f\u5ea6\u5feb \uff1aAttention \u89e3\u51b3\u4e86 RNN \u4e0d\u80fd\u5e76\u884c\u8ba1\u7b97\u7684\u95ee\u9898\u3002Attention\u673a\u5236\u6bcf\u4e00\u6b65\u8ba1\u7b97\u4e0d\u4f9d\u8d56\u4e8e\u4e0a\u4e00\u6b65\u7684\u8ba1\u7b97\u7ed3\u679c\uff0c\u56e0\u6b64\u53ef\u4ee5\u548cCNN\u4e00\u6837\u5e76\u884c\u5904\u7406\u3002 \u6548\u679c\u597d \uff1a\u5728 Attention \u673a\u5236\u5f15\u5165\u4e4b\u524d\uff0c\u6709\u4e00\u4e2a\u95ee\u9898\u5927\u5bb6\u4e00\u76f4\u5f88\u82e6\u607c\uff1a\u957f\u8ddd\u79bb\u7684\u4fe1\u606f\u4f1a\u88ab\u5f31\u5316\uff0c\u5c31\u597d\u50cf\u8bb0\u5fc6\u80fd\u529b\u5f31\u7684\u4eba\uff0c\u8bb0\u4e0d\u4f4f\u8fc7\u53bb\u7684\u4e8b\u60c5\u662f\u4e00\u6837\u7684\u3002 \u539f\u7406 \u00b6 \u4e0b\u9762\u7684\u52a8\u56fe\u6f14\u793a\u4e86 attention \u5f15\u5165 Encoder-Decoder \u6846\u67b6\u4e0b\uff0c\u5b8c\u6210\u673a\u5668\u7ffb\u8bd1\u4efb\u52a1\u7684\u5927\u81f4\u6d41\u7a0b\u3002 \u4f46\u662f\uff0cAttention \u5e76\u4e0d\u4e00\u5b9a\u8981\u5728 Encoder-Decoder \u6846\u67b6\u4e0b\u4f7f\u7528\u7684\uff0c\u4ed6\u662f\u53ef\u4ee5\u8131\u79bb Encoder-Decoder \u6846\u67b6\u7684\u3002 Attention \u539f\u7406\u5206\u4e3a 3 \u6b65\uff1a query \u548c key \u8fdb\u884c\u76f8\u4f3c\u5ea6\u8ba1\u7b97\uff0c\u5f97\u5230\u6743\u503c \u5c06\u6743\u503c\u8fdb\u884c\u5f52\u4e00\u5316\uff0c\u5f97\u5230\u76f4\u63a5\u53ef\u7528\u7684\u6743\u91cd \u5c06\u6743\u91cd\u548c value \u8fdb\u884c\u52a0\u6743\u6c42\u548c \u4ece\u4e0a\u9762\u7684\u5efa\u6a21\uff0c\u53ef\u4ee5\u5927\u81f4\u611f\u53d7\u5230 Attention \u7684\u601d\u8def\u7b80\u5355\uff0c \u56db\u4e2a\u5b57\u201c\u5e26\u6743\u6c42\u548c\u201d \uff0c\u5927\u9053\u81f3\u7b80\u3002 N \u79cd\u7c7b\u578b \u00b6 \u8ba1\u7b97\u533a\u57df \u00b6 Soft Attention \uff0c\u8fd9\u662f\u6bd4\u8f83\u5e38\u89c1\u7684Attention\u65b9\u5f0f\uff0c\u5bf9\u6240\u6709key\u6c42\u6743\u91cd\u6982\u7387\uff0c\u6bcf\u4e2akey\u90fd\u6709\u4e00\u4e2a\u5bf9\u5e94\u7684\u6743\u91cd\uff0c\u662f\u4e00\u79cd\u5168\u5c40\u7684\u8ba1\u7b97\u65b9\u5f0f\uff08\u4e5f\u53ef\u4ee5\u53ebGlobal Attention\uff09\u3002\u8fd9\u79cd\u65b9\u5f0f\u6bd4\u8f83\u7406\u6027\uff0c\u53c2\u8003\u4e86\u6240\u6709key\u7684\u5185\u5bb9\uff0c\u518d\u8fdb\u884c\u52a0\u6743\u3002\u4f46\u662f\u8ba1\u7b97\u91cf\u53ef\u80fd\u4f1a\u6bd4\u8f83\u5927\u4e00\u4e9b\u3002 Hard Attention \uff0c\u8fd9\u79cd\u65b9\u5f0f\u662f\u76f4\u63a5\u7cbe\u51c6\u5b9a\u4f4d\u5230\u67d0\u4e2akey\uff0c\u5176\u4f59key\u5c31\u90fd\u4e0d\u7ba1\u4e86\uff0c\u76f8\u5f53\u4e8e\u8fd9\u4e2akey\u7684\u6982\u7387\u662f1\uff0c\u5176\u4f59key\u7684\u6982\u7387\u5168\u90e8\u662f0\u3002\u56e0\u6b64\u8fd9\u79cd\u5bf9\u9f50\u65b9\u5f0f\u8981\u6c42\u5f88\u9ad8\uff0c\u8981\u6c42\u4e00\u6b65\u5230\u4f4d\uff0c\u5982\u679c\u6ca1\u6709\u6b63\u786e\u5bf9\u9f50\uff0c\u4f1a\u5e26\u6765\u5f88\u5927\u7684\u5f71\u54cd\u3002\u53e6\u4e00\u65b9\u9762\uff0c\u56e0\u4e3a\u4e0d\u53ef\u5bfc\uff0c\u4e00\u822c\u9700\u8981\u7528\u5f3a\u5316\u5b66\u4e60\u7684\u65b9\u6cd5\u8fdb\u884c\u8bad\u7ec3\u3002\uff08\u6216\u8005\u4f7f\u7528gumbel softmax\u4e4b\u7c7b\u7684\uff09 Local Attention \uff0c\u8fd9\u79cd\u65b9\u5f0f\u5176\u5b9e\u662f\u4ee5\u4e0a\u4e24\u79cd\u65b9\u5f0f\u7684\u4e00\u4e2a\u6298\u4e2d\uff0c\u5bf9\u4e00\u4e2a\u7a97\u53e3\u533a\u57df\u8fdb\u884c\u8ba1\u7b97\u3002\u5148\u7528Hard\u65b9\u5f0f\u5b9a\u4f4d\u5230\u67d0\u4e2a\u5730\u65b9\uff0c\u4ee5\u8fd9\u4e2a\u70b9\u4e3a\u4e2d\u5fc3\u53ef\u4ee5\u5f97\u5230\u4e00\u4e2a\u7a97\u53e3\u533a\u57df\uff0c\u5728\u8fd9\u4e2a\u5c0f\u533a\u57df\u5185\u7528Soft\u65b9\u5f0f\u6765\u7b97Attention\u3002 \u6240\u7528\u4fe1\u606f \u00b6 \u5047\u8bbe\u6211\u4eec\u8981\u5bf9\u4e00\u6bb5\u539f\u6587\u8ba1\u7b97Attention\uff0c\u8fd9\u91cc\u539f\u6587\u6307\u7684\u662f\u6211\u4eec\u8981\u505aattention\u7684\u6587\u672c\uff0c\u90a3\u4e48\u6240\u7528\u4fe1\u606f\u5305\u62ec\u5185\u90e8\u4fe1\u606f\u548c\u5916\u90e8\u4fe1\u606f\uff0c\u5185\u90e8\u4fe1\u606f\u6307\u7684\u662f\u539f\u6587\u672c\u8eab\u7684\u4fe1\u606f\uff0c\u800c\u5916\u90e8\u4fe1\u606f\u6307\u7684\u662f\u9664\u539f\u6587\u4ee5\u5916\u7684\u989d\u5916\u4fe1\u606f\u3002 General Attention \uff0c\u8fd9\u79cd\u65b9\u5f0f\u5229\u7528\u5230\u4e86\u5916\u90e8\u4fe1\u606f\uff0c\u5e38\u7528\u4e8e\u9700\u8981\u6784\u5efa\u4e24\u6bb5\u6587\u672c\u5173\u7cfb\u7684\u4efb\u52a1\uff0cquery\u4e00\u822c\u5305\u542b\u4e86\u989d\u5916\u4fe1\u606f\uff0c\u6839\u636e\u5916\u90e8query\u5bf9\u539f\u6587\u8fdb\u884c\u5bf9\u9f50\u3002 General Attention \u6bd4\u5982\u5728\u9605\u8bfb\u7406\u89e3\u4efb\u52a1\u4e2d\uff0c\u9700\u8981\u6784\u5efa\u95ee\u9898\u548c\u6587\u7ae0\u7684\u5173\u8054\uff0c\u5047\u8bbe\u73b0\u5728baseline\u662f\uff0c\u5bf9\u95ee\u9898\u8ba1\u7b97\u51fa\u4e00\u4e2a\u95ee\u9898\u5411\u91cfq\uff0c\u628a\u8fd9\u4e2aq\u548c\u6240\u6709\u7684\u6587\u7ae0\u8bcd\u5411\u91cf\u62fc\u63a5\u8d77\u6765\uff0c\u8f93\u5165\u5230LSTM\u4e2d\u8fdb\u884c\u5efa\u6a21\u3002\u90a3\u4e48\u5728\u8fd9\u4e2a\u6a21\u578b\u4e2d\uff0c\u6587\u7ae0\u6240\u6709\u8bcd\u5411\u91cf\u5171\u4eab\u540c\u4e00\u4e2a\u95ee\u9898\u5411\u91cf\uff0c\u73b0\u5728\u6211\u4eec\u60f3\u8ba9\u6587\u7ae0\u6bcf\u4e00\u6b65\u7684\u8bcd\u5411\u91cf\u90fd\u6709\u4e00\u4e2a\u4e0d\u540c\u7684\u95ee\u9898\u5411\u91cf\uff0c\u4e5f\u5c31\u662f\uff0c\u5728\u6bcf\u4e00\u6b65\u4f7f\u7528\u6587\u7ae0\u5728\u8be5\u6b65\u4e0b\u7684\u8bcd\u5411\u91cf\u5bf9\u95ee\u9898\u6765\u7b97attention\uff0c\u8fd9\u91cc\u95ee\u9898\u5c5e\u4e8e\u539f\u6587\uff0c\u6587\u7ae0\u8bcd\u5411\u91cf\u5c31\u5c5e\u4e8e\u5916\u90e8\u4fe1\u606f\u3002 Local Attention \uff0c\u8fd9\u79cd\u65b9\u5f0f\u53ea\u4f7f\u7528\u5185\u90e8\u4fe1\u606f\uff0ckey\u548cvalue\u4ee5\u53caquery\u53ea\u548c\u8f93\u5165\u539f\u6587\u6709\u5173\uff0c\u5728self attention\u4e2d\uff0ckey=value=query\u3002\u65e2\u7136\u6ca1\u6709\u5916\u90e8\u4fe1\u606f\uff0c\u90a3\u4e48\u5728\u539f\u6587\u4e2d\u7684\u6bcf\u4e2a\u8bcd\u53ef\u4ee5\u8ddf\u8be5\u53e5\u5b50\u4e2d\u7684\u6240\u6709\u8bcd\u8fdb\u884cAttention\u8ba1\u7b97\uff0c\u76f8\u5f53\u4e8e\u5bfb\u627e\u539f\u6587\u5185\u90e8\u7684\u5173\u7cfb\u3002 Local Attention \u8fd8\u662f\u4e3e\u9605\u8bfb\u7406\u89e3\u4efb\u52a1\u7684\u4f8b\u5b50\uff0c\u4e0a\u9762\u7684baseline\u4e2d\u63d0\u5230\uff0c\u5bf9\u95ee\u9898\u8ba1\u7b97\u51fa\u4e00\u4e2a\u5411\u91cfq\uff0c\u90a3\u4e48\u8fd9\u91cc\u4e5f\u53ef\u4ee5\u7528\u4e0aattention\uff0c\u53ea\u7528\u95ee\u9898\u81ea\u8eab\u7684\u4fe1\u606f\u53bb\u505aattention\uff0c\u800c\u4e0d\u5f15\u5165\u6587\u7ae0\u4fe1\u606f\u3002 \u7ed3\u6784\u5c42\u6b21 \u00b6 \u7ed3\u6784\u65b9\u9762\u6839\u636e\u662f\u5426\u5212\u5206\u5c42\u6b21\u5173\u7cfb\uff0c\u5206\u4e3a\u5355\u5c42 attention\uff0c\u591a\u5c42 attention \u548c \u591a\u5934 attention\uff1a \u5355\u5c42 Attention \uff0c\u8fd9\u662f\u6bd4\u8f83\u666e\u904d\u7684\u505a\u6cd5\uff0c\u7528\u4e00\u4e2aquery\u5bf9\u4e00\u6bb5\u539f\u6587\u8fdb\u884c\u4e00\u6b21attention\u3002 \u591a\u5c42 Attention \uff0c\u4e00\u822c\u7528\u4e8e\u6587\u672c\u5177\u6709\u5c42\u6b21\u5173\u7cfb\u7684\u6a21\u578b\uff0c\u5047\u8bbe\u6211\u4eec\u628a\u4e00\u4e2adocument\u5212\u5206\u6210\u591a\u4e2a\u53e5\u5b50\uff0c\u5728\u7b2c\u4e00\u5c42\uff0c\u6211\u4eec\u5206\u522b\u5bf9\u6bcf\u4e2a\u53e5\u5b50\u4f7f\u7528attention\u8ba1\u7b97\u51fa\u4e00\u4e2a\u53e5\u5411\u91cf\uff08\u4e5f\u5c31\u662f\u5355\u5c42attention\uff09\uff1b\u5728\u7b2c\u4e8c\u5c42\uff0c\u6211\u4eec\u5bf9\u6240\u6709\u53e5\u5411\u91cf\u518d\u505aattention\u8ba1\u7b97\u51fa\u4e00\u4e2a\u6587\u6863\u5411\u91cf\uff08\u4e5f\u662f\u4e00\u4e2a\u5355\u5c42attention\uff09\uff0c\u6700\u540e\u518d\u7528\u8fd9\u4e2a\u6587\u6863\u5411\u91cf\u53bb\u505a\u4efb\u52a1\u3002 \u591a\u5934 Attention \uff0c\u8fd9\u662fAttention is All You Need\u4e2d\u63d0\u5230\u7684multi-head attention\uff0c\u7528\u5230\u4e86\u591a\u4e2aquery\u5bf9\u4e00\u6bb5\u539f\u6587\u8fdb\u884c\u4e86\u591a\u6b21attention\uff0c\u6bcf\u4e2aquery\u90fd\u5173\u6ce8\u5230\u539f\u6587\u7684\u4e0d\u540c\u90e8\u5206\uff0c\u76f8\u5f53\u4e8e\u91cd\u590d\u505a\u591a\u6b21\u5355\u5c42attention\uff1a \\[ head_i = Attention(q_i, K, V) \\] \u6700\u540e\u518d\u628a\u8fd9\u4e9b\u7ed3\u679c\u62fc\u63a5\u8d77\u6765\uff1a \\[ MultiHead(Q, K, V) = Concat(head_1, ..., head_h)W^O \\] \u6a21\u578b\u65b9\u9762 \u00b6 \u4ece\u6a21\u578b\u4e0a\u770b\uff0cAttention \u4e00\u822c\u7528\u5728 CNN \u548c LSTM \u4e0a\uff0c\u4e5f\u53ef\u4ee5\u76f4\u63a5\u8fdb\u884c\u7eaf Attention \u8ba1\u7b97\u3002 CNN + Attention CNN\u7684\u5377\u79ef\u64cd\u4f5c\u53ef\u4ee5\u63d0\u53d6\u91cd\u8981\u7279\u5f81\uff0c\u6211\u89c9\u5f97\u8fd9\u4e5f\u7b97\u662fAttention\u7684\u601d\u60f3\uff0c\u4f46\u662fCNN\u7684\u5377\u79ef\u611f\u53d7\u89c6\u91ce\u662f\u5c40\u90e8\u7684\uff0c\u9700\u8981\u901a\u8fc7\u53e0\u52a0\u591a\u5c42\u5377\u79ef\u533a\u53bb\u6269\u5927\u89c6\u91ce\u3002\u53e6\u5916\uff0cMax Pooling\u76f4\u63a5\u63d0\u53d6\u6570\u503c\u6700\u5927\u7684\u7279\u5f81\uff0c\u4e5f\u50cf\u662fhard attention\u7684\u601d\u60f3\uff0c\u76f4\u63a5\u9009\u4e2d\u67d0\u4e2a\u7279\u5f81\u3002 CNN\u4e0a\u52a0Attention\u53ef\u4ee5\u52a0\u5728\u8fd9\u51e0\u65b9\u9762\uff1a a. \u5728\u5377\u79ef\u64cd\u4f5c\u524d\u505aattention\uff0c\u6bd4\u5982Attention-Based BCNN-1\uff0c\u8fd9\u4e2a\u4efb\u52a1\u662f\u6587\u672c\u8574\u542b\u4efb\u52a1\u9700\u8981\u5904\u7406\u4e24\u6bb5\u6587\u672c\uff0c\u540c\u65f6\u5bf9\u4e24\u6bb5\u8f93\u5165\u7684\u5e8f\u5217\u5411\u91cf\u8fdb\u884cattention\uff0c\u8ba1\u7b97\u51fa\u7279\u5f81\u5411\u91cf\uff0c\u518d\u62fc\u63a5\u5230\u539f\u59cb\u5411\u91cf\u4e2d\uff0c\u4f5c\u4e3a\u5377\u79ef\u5c42\u7684\u8f93\u5165\u3002 b. \u5728\u5377\u79ef\u64cd\u4f5c\u540e\u505aattention\uff0c\u6bd4\u5982Attention-Based BCNN-2\uff0c\u5bf9\u4e24\u6bb5\u6587\u672c\u7684\u5377\u79ef\u5c42\u7684\u8f93\u51fa\u505aattention\uff0c\u4f5c\u4e3apooling\u5c42\u7684\u8f93\u5165\u3002 c. \u5728pooling\u5c42\u505aattention\uff0c\u4ee3\u66ffmax pooling\u3002\u6bd4\u5982Attention pooling\uff0c\u9996\u5148\u6211\u4eec\u7528LSTM\u5b66\u5230\u4e00\u4e2a\u6bd4\u8f83\u597d\u7684\u53e5\u5411\u91cf\uff0c\u4f5c\u4e3aquery\uff0c\u7136\u540e\u7528CNN\u5148\u5b66\u4e60\u5230\u4e00\u4e2a\u7279\u5f81\u77e9\u9635\u4f5c\u4e3akey\uff0c\u518d\u7528query\u5bf9key\u4ea7\u751f\u6743\u91cd\uff0c\u8fdb\u884cattention\uff0c\u5f97\u5230\u6700\u540e\u7684\u53e5\u5411\u91cf\u3002 LSTM+Attention LSTM\u5185\u90e8\u6709Gate\u673a\u5236\uff0c\u5176\u4e2dinput gate\u9009\u62e9\u54ea\u4e9b\u5f53\u524d\u4fe1\u606f\u8fdb\u884c\u8f93\u5165\uff0cforget gate\u9009\u62e9\u9057\u5fd8\u54ea\u4e9b\u8fc7\u53bb\u4fe1\u606f\uff0c\u6211\u89c9\u5f97\u8fd9\u7b97\u662f\u4e00\u5b9a\u7a0b\u5ea6\u7684Attention\u4e86\uff0c\u800c\u4e14\u53f7\u79f0\u53ef\u4ee5\u89e3\u51b3\u957f\u671f\u4f9d\u8d56\u95ee\u9898\uff0c\u5b9e\u9645\u4e0aLSTM\u9700\u8981\u4e00\u6b65\u4e00\u6b65\u53bb\u6355\u6349\u5e8f\u5217\u4fe1\u606f\uff0c\u5728\u957f\u6587\u672c\u4e0a\u7684\u8868\u73b0\u662f\u4f1a\u968f\u7740step\u589e\u52a0\u800c\u6162\u6162\u8870\u51cf\uff0c\u96be\u4ee5\u4fdd\u7559\u5168\u90e8\u7684\u6709\u7528\u4fe1\u606f\u3002 LSTM\u901a\u5e38\u9700\u8981\u5f97\u5230\u4e00\u4e2a\u5411\u91cf\uff0c\u518d\u53bb\u505a\u4efb\u52a1\uff0c\u5e38\u7528\u65b9\u5f0f\u6709\uff1a a. \u76f4\u63a5\u4f7f\u7528\u6700\u540e\u7684hidden state\uff08\u53ef\u80fd\u4f1a\u635f\u5931\u4e00\u5b9a\u7684\u524d\u6587\u4fe1\u606f\uff0c\u96be\u4ee5\u8868\u8fbe\u5168\u6587\uff09 b. \u5bf9\u6240\u6709step\u4e0b\u7684hidden state\u8fdb\u884c\u7b49\u6743\u5e73\u5747\uff08\u5bf9\u6240\u6709step\u4e00\u89c6\u540c\u4ec1\uff09\u3002 c. Attention\u673a\u5236\uff0c\u5bf9\u6240\u6709step\u7684hidden state\u8fdb\u884c\u52a0\u6743\uff0c\u628a\u6ce8\u610f\u529b\u96c6\u4e2d\u5230\u6574\u6bb5\u6587\u672c\u4e2d\u6bd4\u8f83\u91cd\u8981\u7684hidden state\u4fe1\u606f\u3002\u6027\u80fd\u6bd4\u524d\u9762\u4e24\u79cd\u8981\u597d\u4e00\u70b9\uff0c\u800c\u65b9\u4fbf\u53ef\u89c6\u5316\u89c2\u5bdf\u54ea\u4e9bstep\u662f\u91cd\u8981\u7684\uff0c\u4f46\u662f\u8981\u5c0f\u5fc3\u8fc7\u62df\u5408\uff0c\u800c\u4e14\u4e5f\u589e\u52a0\u4e86\u8ba1\u7b97\u91cf\u3002 \u7eafAttention Attention is all you need\uff0c\u6ca1\u6709\u7528\u5230CNN/RNN\uff0c\u4e4d\u4e00\u542c\u4e5f\u662f\u4e00\u80a1\u6e05\u6d41\u4e86\uff0c\u4f46\u662f\u4ed4\u7ec6\u4e00\u770b\uff0c\u672c\u8d28\u4e0a\u8fd8\u662f\u4e00\u5806\u5411\u91cf\u53bb\u8ba1\u7b97attention\u3002 \u76f8\u4f3c\u5ea6\u8ba1\u7b97\u65b9\u5f0f \u00b6 \u5728\u505aattention\u7684\u65f6\u5019\uff0c\u6211\u4eec\u9700\u8981\u8ba1\u7b97query\u548c\u67d0\u4e2akey\u7684\u5206\u6570\uff08\u76f8\u4f3c\u5ea6\uff09\uff0c\u5e38\u7528\u65b9\u6cd5\u6709\uff1a \u70b9\u4e58\uff1a \\(score(q,k)=q^\\top k\\) \u77e9\u9635\u76f8\u4e58\uff1a \\(score(q,k)=q^\\top Wk\\) \u4f59\u5f26\u76f8\u4f3c\u5ea6\uff1a \\(score(q,k)=\\frac{q^\\top k}{\\|q\\| \\cdot \\|k\\|}\\) \u4e32\u8054\u65b9\u5f0f\uff0c\u628aq\u548ck\u62fc\u63a5\u8d77\u6765\uff1a \\(score(q,k)=W[q;k]\\) \u591a\u5c42\u611f\u77e5\u673a\uff1a \\(score(q,k)=v_a^\\top tanh(Wq+Uk)\\) Reference \u00b6 Encoder-Decoder \u548c Seq2Seq \u4e00\u6587\u770b\u61c2 Attention\uff08\u672c\u8d28\u539f\u7406+3\u5927\u4f18\u70b9+5\u5927\u7c7b\u578b\uff09 \u904d\u5730\u5f00\u82b1\u7684 Attention\uff0c\u4f60\u771f\u7684\u61c2\u5417\uff1f","title":"Attention"},{"location":"llm/transformer/attention/#attention","text":"\u7ea6 2743 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f Abstract \u5bf9\u4e8e RNN \u4e2d\u5b58\u5728\u7684\u4fe1\u606f\u74f6\u9888\u95ee\u9898\uff0c\u6ce8\u610f\u529b\u673a\u5236\u53ef\u4ee5\u5f88\u597d\u5730\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002 \u672c\u6587\u5c06\u4ecb\u7ecd Encoder-Decoder\u3001Seq2Seq \u4ee5\u53ca Attention \u673a\u5236\u3002","title":"Attention \u673a\u5236"},{"location":"llm/transformer/attention/#encoder-decoder","text":"Encoder-Decoder \u6a21\u578b\u4e3b\u8981\u662f NLP \u9886\u57df\u91cc\u7684\u6982\u5ff5\u3002\u5b83\u5e76\u4e0d\u7279\u503c\u67d0\u79cd\u5177\u4f53\u7684\u7b97\u6cd5\uff0c\u800c\u662f\u4e00\u7c7b\u7b97\u6cd5\u7684\u7edf\u79f0\u3002Encoder-Decoder \u7b97\u662f\u4e00\u4e2a\u901a\u7528\u7684\u6846\u67b6\uff0c\u5728\u8fd9\u4e2a\u6846\u67b6\u4e0b\u53ef\u4ee5\u4f7f\u7528\u4e0d\u540c\u7684\u7b97\u6cd5\u6765\u89e3\u51b3\u4e0d\u540c\u7684\u4efb\u52a1\u3002 Encoder-Decoder \u6846\u67b6\u5f88\u597d\u5730\u8be0\u91ca\u4e86\u673a\u5668\u5b66\u4e60\u7684\u6838\u5fc3\u601d\u8def\uff1a \u5c06\u73b0\u5b9e\u95ee\u9898\u8f6c\u5316\u4e3a\u6570\u5b66\u95ee\u9898\uff0c\u901a\u8fc7\u6c42\u89e3\u6570\u5b66\u95ee\u9898\uff0c\u4ece\u800c\u89e3\u51b3\u73b0\u5b9e\u95ee\u9898 Encoder \u53c8\u79f0\u7f16\u7801\u5668\uff0c\u5b83\u7684\u4f5c\u7528\u5c31\u662f\u300e\u5c06\u73b0\u5b9e\u95ee\u9898\u8f6c\u5316\u4e3a\u6570\u5b66\u95ee\u9898\u300f\u3002 Decoder \u53c8\u79f0\u89e3\u7801\u5668\uff0c\u5b83\u7684\u4f5c\u7528\u5c31\u662f\u300e\u6c42\u89e3\u6570\u5b66\u95ee\u9898\uff0c\u5e76\u8f6c\u5316\u4e3a\u73b0\u5b9e\u4e16\u754c\u7684\u89e3\u51b3\u65b9\u6848\u300f\u3002 \u5173\u4e8e Encoder-Decoder\uff1a \u4e0d\u8bba\u8f93\u5165\u548c\u8f93\u51fa\u7684\u957f\u5ea6\u662f\u4ec0\u4e48\uff0c\u4e2d\u95f4\u7684 \u5411\u91cfc \u7684\u957f\u5ea6\u90fd\u662f\u56fa\u5b9a\u7684\uff08\u8fd9\u4e5f\u662f\u5b83\u7684\u7f3a\u9677\uff09\u3002 \u6839\u636e\u4e0d\u540c\u7684\u4efb\u52a1\u53ef\u4ee5\u9009\u62e9\u4e0d\u540c\u7684\u7f16\u7801\u5668\u548c\u89e3\u7801\u5668\uff08\u53ef\u4ee5\u662f\u4e00\u4e2a RNN\uff0c\u4f46\u901a\u5e38\u662f\u5176\u53d8\u79cd LSTM \u6216\u8005 GRU\uff09\u3002 Encoder-Decoder \u7684\u7f3a\u9677 \u4e3a\u4e86\u4fbf\u4e8e\u7406\u89e3\uff0c\u6211\u4eec\u7c7b\u6bd4\u4e3a\u300c\u538b\u7f29-\u89e3\u538b\u300d\u7684\u8fc7\u7a0b\uff1a \u5c06\u4e00\u5f20 800X800 \u50cf\u7d20\u7684\u56fe\u7247\u538b\u7f29\u6210 100KB\uff0c\u770b\u4e0a\u53bb\u8fd8\u6bd4\u8f83\u6e05\u6670\u3002\u518d\u5c06\u4e00\u5f20 3000X3000 \u50cf\u7d20\u7684\u56fe\u7247\u4e5f\u538b\u7f29\u5230 100KB\uff0c\u770b\u4e0a\u53bb\u5c31\u6a21\u7cca\u4e86\u3002 Encoder-Decoder \u5c31\u662f\u7c7b\u4f3c\u7684\u95ee\u9898\uff1a\u5f53\u8f93\u5165\u4fe1\u606f\u592a\u957f\u65f6\uff0c\u4f1a\u4e22\u5931\u6389\u4e00\u4e9b\u4fe1\u606f\u3002","title":"Encoder-Decoder"},{"location":"llm/transformer/attention/#seq2seq","text":"","title":"Seq2Seq"},{"location":"llm/transformer/attention/#_1","text":"Seq2Seq\uff08\u662f Sequence to Sequence \u7684\u7f29\u5199\uff09\uff0c\u5b57\u9762\u610f\u601d\u5c31\u662f\u8f93\u5165\u4e00\u4e2a\u5e8f\u5217\uff0c\u8f93\u51fa\u53e6\u4e00\u4e2a\u5e8f\u5217\u3002\u8fd9\u79cd\u7ed3\u6784\u6700\u91cd\u8981\u7684\u5730\u65b9\u5728\u4e8e\u8f93\u5165\u5e8f\u5217\u548c\u8f93\u51fa\u5e8f\u5217\u7684\u957f\u5ea6\u53ef\u4ee5\u53ef\u53d8\u7684\u3002\u4f8b\u5982\u4e0b\u56fe\uff1a \u5982\u4e0a\u56fe\uff1a\u8f93\u5165\u4e86 6 \u4e2a\u6c49\u5b57\uff0c\u8f93\u51fa\u4e86 3 \u4e2a\u82f1\u6587\u5355\u8bcd\u3002\u8f93\u5165\u548c\u8f93\u51fa\u7684\u957f\u5ea6\u4e0d\u540c\u3002","title":"\u6982\u8ff0"},{"location":"llm/transformer/attention/#seq2seq-encoder-decoder","text":"Seq2Seq\uff08\u5f3a\u8c03\u76ee\u7684\uff09\u4e0d\u7279\u6307\u5177\u4f53\u65b9\u6cd5\uff0c\u6ee1\u8db3\u300c\u8f93\u5165\u5e8f\u5217\u3001\u8f93\u51fa\u5e8f\u5217\u300d\u7684\u76ee\u7684\uff0c\u90fd\u53ef\u4ee5\u7edf\u79f0\u4e3a Seq2Seq \u6a21\u578b\u3002 \u800c Seq2Seq \u4f7f\u7528\u7684\u5177\u4f53\u65b9\u6cd5\u57fa\u672c\u90fd\u5c5e\u4e8eEncoder-Decoder \u6a21\u578b\uff08\u5f3a\u8c03\u65b9\u6cd5\uff09\u7684\u8303\u7574\u3002 \u603b\u7ed3\u4e00\u4e0b\u7684\u8bdd\uff1a Seq2Seq \u5c5e\u4e8e Encoder-Decoder \u7684\u5927\u8303\u7574 Seq2Seq \u66f4\u5f3a\u8c03\u76ee\u7684\uff0cEncoder-Decoder \u66f4\u5f3a\u8c03\u65b9\u6cd5","title":"Seq2Seq \u548c Encoder-Decoder \u7684\u5173\u7cfb"},{"location":"llm/transformer/attention/#attention_1","text":"","title":"Attention"},{"location":"llm/transformer/attention/#_2","text":"Attention\uff08\u6ce8\u610f\u529b\uff09\u673a\u5236\u5982\u679c\u6d45\u5c42\u7684\u7406\u89e3\uff0c\u8ddf\u4ed6\u7684\u540d\u5b57\u975e\u5e38\u5339\u914d\u3002\u4ed6\u7684\u6838\u5fc3\u903b\u8f91\u5c31\u662f\u300c\u4ece\u5173\u6ce8\u5168\u90e8\u5230\u5173\u6ce8\u91cd\u70b9\u300d\u3002\u6211\u4eec\u7684\u89c6\u89c9\u7cfb\u7edf\u5c31\u662f\u4e00\u79cd Attention \u673a\u5236\uff0c\u5c06\u6709\u9650\u7684\u6ce8\u610f\u529b\u96c6\u4e2d\u5728\u91cd\u70b9\u4fe1\u606f\u4e0a\uff0c\u4ece\u800c\u8282\u7701\u8d44\u6e90\uff0c\u5feb\u901f\u83b7\u5f97\u6700\u6709\u6548\u7684\u4fe1\u606f\u3002 Attention \u673a\u5236\u6700\u65e9\u662f\u5728\u8ba1\u7b97\u673a\u89c6\u89c9\u91cc\u5e94\u7528\u7684\uff0c\u968f\u540e\u5728 NLP \u9886\u57df\u4e5f\u5f00\u59cb\u5e94\u7528\u4e86\uff0c\u771f\u6b63\u53d1\u626c\u5149\u5927\u662f\u5728 NLP \u9886\u57df\uff0c\u56e0\u4e3a 2018 \u5e74 BERT \u548c GPT \u7684\u6548\u679c\u51fa\u5947\u7684\u597d\uff0c\u8fdb\u800c\u8d70\u7ea2\u3002\u800c Transformer \u548c Attention \u8fd9\u4e9b\u6838\u5fc3\u5f00\u59cb\u88ab\u5927\u5bb6\u91cd\u70b9\u5173\u6ce8\u3002 \u5982\u679c\u7528\u56fe\u6765\u8868\u8fbe Attention \u7684\u4f4d\u7f6e\u5927\u81f4\u662f\u4e0b\u9762\u7684\u6837\u5b50\uff1a","title":"\u672c\u8d28"},{"location":"llm/transformer/attention/#_3","text":"\u4e4b\u6240\u4ee5\u8981\u5f15\u5165 Attention \u673a\u5236\uff0c\u4e3b\u8981\u662f 3 \u4e2a\u539f\u56e0\uff1a \u53c2\u6570\u5c11 \uff1a\u6a21\u578b\u590d\u6742\u5ea6\u66f4 CNN\u3001RNN \u76f8\u6bd4\uff0c\u590d\u6742\u5ea6\u66f4\u5c0f\uff0c\u53c2\u6570\u4e5f\u66f4\u5c11\u3002\u5bf9\u7b97\u529b\u7684\u8981\u6c42\u4e5f\u5c31\u66f4\u5c11\u3002 \u901f\u5ea6\u5feb \uff1aAttention \u89e3\u51b3\u4e86 RNN \u4e0d\u80fd\u5e76\u884c\u8ba1\u7b97\u7684\u95ee\u9898\u3002Attention\u673a\u5236\u6bcf\u4e00\u6b65\u8ba1\u7b97\u4e0d\u4f9d\u8d56\u4e8e\u4e0a\u4e00\u6b65\u7684\u8ba1\u7b97\u7ed3\u679c\uff0c\u56e0\u6b64\u53ef\u4ee5\u548cCNN\u4e00\u6837\u5e76\u884c\u5904\u7406\u3002 \u6548\u679c\u597d \uff1a\u5728 Attention \u673a\u5236\u5f15\u5165\u4e4b\u524d\uff0c\u6709\u4e00\u4e2a\u95ee\u9898\u5927\u5bb6\u4e00\u76f4\u5f88\u82e6\u607c\uff1a\u957f\u8ddd\u79bb\u7684\u4fe1\u606f\u4f1a\u88ab\u5f31\u5316\uff0c\u5c31\u597d\u50cf\u8bb0\u5fc6\u80fd\u529b\u5f31\u7684\u4eba\uff0c\u8bb0\u4e0d\u4f4f\u8fc7\u53bb\u7684\u4e8b\u60c5\u662f\u4e00\u6837\u7684\u3002","title":"\u4e09\u5927\u4f18\u70b9"},{"location":"llm/transformer/attention/#_4","text":"\u4e0b\u9762\u7684\u52a8\u56fe\u6f14\u793a\u4e86 attention \u5f15\u5165 Encoder-Decoder \u6846\u67b6\u4e0b\uff0c\u5b8c\u6210\u673a\u5668\u7ffb\u8bd1\u4efb\u52a1\u7684\u5927\u81f4\u6d41\u7a0b\u3002 \u4f46\u662f\uff0cAttention \u5e76\u4e0d\u4e00\u5b9a\u8981\u5728 Encoder-Decoder \u6846\u67b6\u4e0b\u4f7f\u7528\u7684\uff0c\u4ed6\u662f\u53ef\u4ee5\u8131\u79bb Encoder-Decoder \u6846\u67b6\u7684\u3002 Attention \u539f\u7406\u5206\u4e3a 3 \u6b65\uff1a query \u548c key \u8fdb\u884c\u76f8\u4f3c\u5ea6\u8ba1\u7b97\uff0c\u5f97\u5230\u6743\u503c \u5c06\u6743\u503c\u8fdb\u884c\u5f52\u4e00\u5316\uff0c\u5f97\u5230\u76f4\u63a5\u53ef\u7528\u7684\u6743\u91cd \u5c06\u6743\u91cd\u548c value \u8fdb\u884c\u52a0\u6743\u6c42\u548c \u4ece\u4e0a\u9762\u7684\u5efa\u6a21\uff0c\u53ef\u4ee5\u5927\u81f4\u611f\u53d7\u5230 Attention \u7684\u601d\u8def\u7b80\u5355\uff0c \u56db\u4e2a\u5b57\u201c\u5e26\u6743\u6c42\u548c\u201d \uff0c\u5927\u9053\u81f3\u7b80\u3002","title":"\u539f\u7406"},{"location":"llm/transformer/attention/#n","text":"","title":"N \u79cd\u7c7b\u578b"},{"location":"llm/transformer/attention/#_5","text":"Soft Attention \uff0c\u8fd9\u662f\u6bd4\u8f83\u5e38\u89c1\u7684Attention\u65b9\u5f0f\uff0c\u5bf9\u6240\u6709key\u6c42\u6743\u91cd\u6982\u7387\uff0c\u6bcf\u4e2akey\u90fd\u6709\u4e00\u4e2a\u5bf9\u5e94\u7684\u6743\u91cd\uff0c\u662f\u4e00\u79cd\u5168\u5c40\u7684\u8ba1\u7b97\u65b9\u5f0f\uff08\u4e5f\u53ef\u4ee5\u53ebGlobal Attention\uff09\u3002\u8fd9\u79cd\u65b9\u5f0f\u6bd4\u8f83\u7406\u6027\uff0c\u53c2\u8003\u4e86\u6240\u6709key\u7684\u5185\u5bb9\uff0c\u518d\u8fdb\u884c\u52a0\u6743\u3002\u4f46\u662f\u8ba1\u7b97\u91cf\u53ef\u80fd\u4f1a\u6bd4\u8f83\u5927\u4e00\u4e9b\u3002 Hard Attention \uff0c\u8fd9\u79cd\u65b9\u5f0f\u662f\u76f4\u63a5\u7cbe\u51c6\u5b9a\u4f4d\u5230\u67d0\u4e2akey\uff0c\u5176\u4f59key\u5c31\u90fd\u4e0d\u7ba1\u4e86\uff0c\u76f8\u5f53\u4e8e\u8fd9\u4e2akey\u7684\u6982\u7387\u662f1\uff0c\u5176\u4f59key\u7684\u6982\u7387\u5168\u90e8\u662f0\u3002\u56e0\u6b64\u8fd9\u79cd\u5bf9\u9f50\u65b9\u5f0f\u8981\u6c42\u5f88\u9ad8\uff0c\u8981\u6c42\u4e00\u6b65\u5230\u4f4d\uff0c\u5982\u679c\u6ca1\u6709\u6b63\u786e\u5bf9\u9f50\uff0c\u4f1a\u5e26\u6765\u5f88\u5927\u7684\u5f71\u54cd\u3002\u53e6\u4e00\u65b9\u9762\uff0c\u56e0\u4e3a\u4e0d\u53ef\u5bfc\uff0c\u4e00\u822c\u9700\u8981\u7528\u5f3a\u5316\u5b66\u4e60\u7684\u65b9\u6cd5\u8fdb\u884c\u8bad\u7ec3\u3002\uff08\u6216\u8005\u4f7f\u7528gumbel softmax\u4e4b\u7c7b\u7684\uff09 Local Attention \uff0c\u8fd9\u79cd\u65b9\u5f0f\u5176\u5b9e\u662f\u4ee5\u4e0a\u4e24\u79cd\u65b9\u5f0f\u7684\u4e00\u4e2a\u6298\u4e2d\uff0c\u5bf9\u4e00\u4e2a\u7a97\u53e3\u533a\u57df\u8fdb\u884c\u8ba1\u7b97\u3002\u5148\u7528Hard\u65b9\u5f0f\u5b9a\u4f4d\u5230\u67d0\u4e2a\u5730\u65b9\uff0c\u4ee5\u8fd9\u4e2a\u70b9\u4e3a\u4e2d\u5fc3\u53ef\u4ee5\u5f97\u5230\u4e00\u4e2a\u7a97\u53e3\u533a\u57df\uff0c\u5728\u8fd9\u4e2a\u5c0f\u533a\u57df\u5185\u7528Soft\u65b9\u5f0f\u6765\u7b97Attention\u3002","title":"\u8ba1\u7b97\u533a\u57df"},{"location":"llm/transformer/attention/#_6","text":"\u5047\u8bbe\u6211\u4eec\u8981\u5bf9\u4e00\u6bb5\u539f\u6587\u8ba1\u7b97Attention\uff0c\u8fd9\u91cc\u539f\u6587\u6307\u7684\u662f\u6211\u4eec\u8981\u505aattention\u7684\u6587\u672c\uff0c\u90a3\u4e48\u6240\u7528\u4fe1\u606f\u5305\u62ec\u5185\u90e8\u4fe1\u606f\u548c\u5916\u90e8\u4fe1\u606f\uff0c\u5185\u90e8\u4fe1\u606f\u6307\u7684\u662f\u539f\u6587\u672c\u8eab\u7684\u4fe1\u606f\uff0c\u800c\u5916\u90e8\u4fe1\u606f\u6307\u7684\u662f\u9664\u539f\u6587\u4ee5\u5916\u7684\u989d\u5916\u4fe1\u606f\u3002 General Attention \uff0c\u8fd9\u79cd\u65b9\u5f0f\u5229\u7528\u5230\u4e86\u5916\u90e8\u4fe1\u606f\uff0c\u5e38\u7528\u4e8e\u9700\u8981\u6784\u5efa\u4e24\u6bb5\u6587\u672c\u5173\u7cfb\u7684\u4efb\u52a1\uff0cquery\u4e00\u822c\u5305\u542b\u4e86\u989d\u5916\u4fe1\u606f\uff0c\u6839\u636e\u5916\u90e8query\u5bf9\u539f\u6587\u8fdb\u884c\u5bf9\u9f50\u3002 General Attention \u6bd4\u5982\u5728\u9605\u8bfb\u7406\u89e3\u4efb\u52a1\u4e2d\uff0c\u9700\u8981\u6784\u5efa\u95ee\u9898\u548c\u6587\u7ae0\u7684\u5173\u8054\uff0c\u5047\u8bbe\u73b0\u5728baseline\u662f\uff0c\u5bf9\u95ee\u9898\u8ba1\u7b97\u51fa\u4e00\u4e2a\u95ee\u9898\u5411\u91cfq\uff0c\u628a\u8fd9\u4e2aq\u548c\u6240\u6709\u7684\u6587\u7ae0\u8bcd\u5411\u91cf\u62fc\u63a5\u8d77\u6765\uff0c\u8f93\u5165\u5230LSTM\u4e2d\u8fdb\u884c\u5efa\u6a21\u3002\u90a3\u4e48\u5728\u8fd9\u4e2a\u6a21\u578b\u4e2d\uff0c\u6587\u7ae0\u6240\u6709\u8bcd\u5411\u91cf\u5171\u4eab\u540c\u4e00\u4e2a\u95ee\u9898\u5411\u91cf\uff0c\u73b0\u5728\u6211\u4eec\u60f3\u8ba9\u6587\u7ae0\u6bcf\u4e00\u6b65\u7684\u8bcd\u5411\u91cf\u90fd\u6709\u4e00\u4e2a\u4e0d\u540c\u7684\u95ee\u9898\u5411\u91cf\uff0c\u4e5f\u5c31\u662f\uff0c\u5728\u6bcf\u4e00\u6b65\u4f7f\u7528\u6587\u7ae0\u5728\u8be5\u6b65\u4e0b\u7684\u8bcd\u5411\u91cf\u5bf9\u95ee\u9898\u6765\u7b97attention\uff0c\u8fd9\u91cc\u95ee\u9898\u5c5e\u4e8e\u539f\u6587\uff0c\u6587\u7ae0\u8bcd\u5411\u91cf\u5c31\u5c5e\u4e8e\u5916\u90e8\u4fe1\u606f\u3002 Local Attention \uff0c\u8fd9\u79cd\u65b9\u5f0f\u53ea\u4f7f\u7528\u5185\u90e8\u4fe1\u606f\uff0ckey\u548cvalue\u4ee5\u53caquery\u53ea\u548c\u8f93\u5165\u539f\u6587\u6709\u5173\uff0c\u5728self attention\u4e2d\uff0ckey=value=query\u3002\u65e2\u7136\u6ca1\u6709\u5916\u90e8\u4fe1\u606f\uff0c\u90a3\u4e48\u5728\u539f\u6587\u4e2d\u7684\u6bcf\u4e2a\u8bcd\u53ef\u4ee5\u8ddf\u8be5\u53e5\u5b50\u4e2d\u7684\u6240\u6709\u8bcd\u8fdb\u884cAttention\u8ba1\u7b97\uff0c\u76f8\u5f53\u4e8e\u5bfb\u627e\u539f\u6587\u5185\u90e8\u7684\u5173\u7cfb\u3002 Local Attention \u8fd8\u662f\u4e3e\u9605\u8bfb\u7406\u89e3\u4efb\u52a1\u7684\u4f8b\u5b50\uff0c\u4e0a\u9762\u7684baseline\u4e2d\u63d0\u5230\uff0c\u5bf9\u95ee\u9898\u8ba1\u7b97\u51fa\u4e00\u4e2a\u5411\u91cfq\uff0c\u90a3\u4e48\u8fd9\u91cc\u4e5f\u53ef\u4ee5\u7528\u4e0aattention\uff0c\u53ea\u7528\u95ee\u9898\u81ea\u8eab\u7684\u4fe1\u606f\u53bb\u505aattention\uff0c\u800c\u4e0d\u5f15\u5165\u6587\u7ae0\u4fe1\u606f\u3002","title":"\u6240\u7528\u4fe1\u606f"},{"location":"llm/transformer/attention/#_7","text":"\u7ed3\u6784\u65b9\u9762\u6839\u636e\u662f\u5426\u5212\u5206\u5c42\u6b21\u5173\u7cfb\uff0c\u5206\u4e3a\u5355\u5c42 attention\uff0c\u591a\u5c42 attention \u548c \u591a\u5934 attention\uff1a \u5355\u5c42 Attention \uff0c\u8fd9\u662f\u6bd4\u8f83\u666e\u904d\u7684\u505a\u6cd5\uff0c\u7528\u4e00\u4e2aquery\u5bf9\u4e00\u6bb5\u539f\u6587\u8fdb\u884c\u4e00\u6b21attention\u3002 \u591a\u5c42 Attention \uff0c\u4e00\u822c\u7528\u4e8e\u6587\u672c\u5177\u6709\u5c42\u6b21\u5173\u7cfb\u7684\u6a21\u578b\uff0c\u5047\u8bbe\u6211\u4eec\u628a\u4e00\u4e2adocument\u5212\u5206\u6210\u591a\u4e2a\u53e5\u5b50\uff0c\u5728\u7b2c\u4e00\u5c42\uff0c\u6211\u4eec\u5206\u522b\u5bf9\u6bcf\u4e2a\u53e5\u5b50\u4f7f\u7528attention\u8ba1\u7b97\u51fa\u4e00\u4e2a\u53e5\u5411\u91cf\uff08\u4e5f\u5c31\u662f\u5355\u5c42attention\uff09\uff1b\u5728\u7b2c\u4e8c\u5c42\uff0c\u6211\u4eec\u5bf9\u6240\u6709\u53e5\u5411\u91cf\u518d\u505aattention\u8ba1\u7b97\u51fa\u4e00\u4e2a\u6587\u6863\u5411\u91cf\uff08\u4e5f\u662f\u4e00\u4e2a\u5355\u5c42attention\uff09\uff0c\u6700\u540e\u518d\u7528\u8fd9\u4e2a\u6587\u6863\u5411\u91cf\u53bb\u505a\u4efb\u52a1\u3002 \u591a\u5934 Attention \uff0c\u8fd9\u662fAttention is All You Need\u4e2d\u63d0\u5230\u7684multi-head attention\uff0c\u7528\u5230\u4e86\u591a\u4e2aquery\u5bf9\u4e00\u6bb5\u539f\u6587\u8fdb\u884c\u4e86\u591a\u6b21attention\uff0c\u6bcf\u4e2aquery\u90fd\u5173\u6ce8\u5230\u539f\u6587\u7684\u4e0d\u540c\u90e8\u5206\uff0c\u76f8\u5f53\u4e8e\u91cd\u590d\u505a\u591a\u6b21\u5355\u5c42attention\uff1a \\[ head_i = Attention(q_i, K, V) \\] \u6700\u540e\u518d\u628a\u8fd9\u4e9b\u7ed3\u679c\u62fc\u63a5\u8d77\u6765\uff1a \\[ MultiHead(Q, K, V) = Concat(head_1, ..., head_h)W^O \\]","title":"\u7ed3\u6784\u5c42\u6b21"},{"location":"llm/transformer/attention/#_8","text":"\u4ece\u6a21\u578b\u4e0a\u770b\uff0cAttention \u4e00\u822c\u7528\u5728 CNN \u548c LSTM \u4e0a\uff0c\u4e5f\u53ef\u4ee5\u76f4\u63a5\u8fdb\u884c\u7eaf Attention \u8ba1\u7b97\u3002 CNN + Attention CNN\u7684\u5377\u79ef\u64cd\u4f5c\u53ef\u4ee5\u63d0\u53d6\u91cd\u8981\u7279\u5f81\uff0c\u6211\u89c9\u5f97\u8fd9\u4e5f\u7b97\u662fAttention\u7684\u601d\u60f3\uff0c\u4f46\u662fCNN\u7684\u5377\u79ef\u611f\u53d7\u89c6\u91ce\u662f\u5c40\u90e8\u7684\uff0c\u9700\u8981\u901a\u8fc7\u53e0\u52a0\u591a\u5c42\u5377\u79ef\u533a\u53bb\u6269\u5927\u89c6\u91ce\u3002\u53e6\u5916\uff0cMax Pooling\u76f4\u63a5\u63d0\u53d6\u6570\u503c\u6700\u5927\u7684\u7279\u5f81\uff0c\u4e5f\u50cf\u662fhard attention\u7684\u601d\u60f3\uff0c\u76f4\u63a5\u9009\u4e2d\u67d0\u4e2a\u7279\u5f81\u3002 CNN\u4e0a\u52a0Attention\u53ef\u4ee5\u52a0\u5728\u8fd9\u51e0\u65b9\u9762\uff1a a. \u5728\u5377\u79ef\u64cd\u4f5c\u524d\u505aattention\uff0c\u6bd4\u5982Attention-Based BCNN-1\uff0c\u8fd9\u4e2a\u4efb\u52a1\u662f\u6587\u672c\u8574\u542b\u4efb\u52a1\u9700\u8981\u5904\u7406\u4e24\u6bb5\u6587\u672c\uff0c\u540c\u65f6\u5bf9\u4e24\u6bb5\u8f93\u5165\u7684\u5e8f\u5217\u5411\u91cf\u8fdb\u884cattention\uff0c\u8ba1\u7b97\u51fa\u7279\u5f81\u5411\u91cf\uff0c\u518d\u62fc\u63a5\u5230\u539f\u59cb\u5411\u91cf\u4e2d\uff0c\u4f5c\u4e3a\u5377\u79ef\u5c42\u7684\u8f93\u5165\u3002 b. \u5728\u5377\u79ef\u64cd\u4f5c\u540e\u505aattention\uff0c\u6bd4\u5982Attention-Based BCNN-2\uff0c\u5bf9\u4e24\u6bb5\u6587\u672c\u7684\u5377\u79ef\u5c42\u7684\u8f93\u51fa\u505aattention\uff0c\u4f5c\u4e3apooling\u5c42\u7684\u8f93\u5165\u3002 c. \u5728pooling\u5c42\u505aattention\uff0c\u4ee3\u66ffmax pooling\u3002\u6bd4\u5982Attention pooling\uff0c\u9996\u5148\u6211\u4eec\u7528LSTM\u5b66\u5230\u4e00\u4e2a\u6bd4\u8f83\u597d\u7684\u53e5\u5411\u91cf\uff0c\u4f5c\u4e3aquery\uff0c\u7136\u540e\u7528CNN\u5148\u5b66\u4e60\u5230\u4e00\u4e2a\u7279\u5f81\u77e9\u9635\u4f5c\u4e3akey\uff0c\u518d\u7528query\u5bf9key\u4ea7\u751f\u6743\u91cd\uff0c\u8fdb\u884cattention\uff0c\u5f97\u5230\u6700\u540e\u7684\u53e5\u5411\u91cf\u3002 LSTM+Attention LSTM\u5185\u90e8\u6709Gate\u673a\u5236\uff0c\u5176\u4e2dinput gate\u9009\u62e9\u54ea\u4e9b\u5f53\u524d\u4fe1\u606f\u8fdb\u884c\u8f93\u5165\uff0cforget gate\u9009\u62e9\u9057\u5fd8\u54ea\u4e9b\u8fc7\u53bb\u4fe1\u606f\uff0c\u6211\u89c9\u5f97\u8fd9\u7b97\u662f\u4e00\u5b9a\u7a0b\u5ea6\u7684Attention\u4e86\uff0c\u800c\u4e14\u53f7\u79f0\u53ef\u4ee5\u89e3\u51b3\u957f\u671f\u4f9d\u8d56\u95ee\u9898\uff0c\u5b9e\u9645\u4e0aLSTM\u9700\u8981\u4e00\u6b65\u4e00\u6b65\u53bb\u6355\u6349\u5e8f\u5217\u4fe1\u606f\uff0c\u5728\u957f\u6587\u672c\u4e0a\u7684\u8868\u73b0\u662f\u4f1a\u968f\u7740step\u589e\u52a0\u800c\u6162\u6162\u8870\u51cf\uff0c\u96be\u4ee5\u4fdd\u7559\u5168\u90e8\u7684\u6709\u7528\u4fe1\u606f\u3002 LSTM\u901a\u5e38\u9700\u8981\u5f97\u5230\u4e00\u4e2a\u5411\u91cf\uff0c\u518d\u53bb\u505a\u4efb\u52a1\uff0c\u5e38\u7528\u65b9\u5f0f\u6709\uff1a a. \u76f4\u63a5\u4f7f\u7528\u6700\u540e\u7684hidden state\uff08\u53ef\u80fd\u4f1a\u635f\u5931\u4e00\u5b9a\u7684\u524d\u6587\u4fe1\u606f\uff0c\u96be\u4ee5\u8868\u8fbe\u5168\u6587\uff09 b. \u5bf9\u6240\u6709step\u4e0b\u7684hidden state\u8fdb\u884c\u7b49\u6743\u5e73\u5747\uff08\u5bf9\u6240\u6709step\u4e00\u89c6\u540c\u4ec1\uff09\u3002 c. Attention\u673a\u5236\uff0c\u5bf9\u6240\u6709step\u7684hidden state\u8fdb\u884c\u52a0\u6743\uff0c\u628a\u6ce8\u610f\u529b\u96c6\u4e2d\u5230\u6574\u6bb5\u6587\u672c\u4e2d\u6bd4\u8f83\u91cd\u8981\u7684hidden state\u4fe1\u606f\u3002\u6027\u80fd\u6bd4\u524d\u9762\u4e24\u79cd\u8981\u597d\u4e00\u70b9\uff0c\u800c\u65b9\u4fbf\u53ef\u89c6\u5316\u89c2\u5bdf\u54ea\u4e9bstep\u662f\u91cd\u8981\u7684\uff0c\u4f46\u662f\u8981\u5c0f\u5fc3\u8fc7\u62df\u5408\uff0c\u800c\u4e14\u4e5f\u589e\u52a0\u4e86\u8ba1\u7b97\u91cf\u3002 \u7eafAttention Attention is all you need\uff0c\u6ca1\u6709\u7528\u5230CNN/RNN\uff0c\u4e4d\u4e00\u542c\u4e5f\u662f\u4e00\u80a1\u6e05\u6d41\u4e86\uff0c\u4f46\u662f\u4ed4\u7ec6\u4e00\u770b\uff0c\u672c\u8d28\u4e0a\u8fd8\u662f\u4e00\u5806\u5411\u91cf\u53bb\u8ba1\u7b97attention\u3002","title":"\u6a21\u578b\u65b9\u9762"},{"location":"llm/transformer/attention/#_9","text":"\u5728\u505aattention\u7684\u65f6\u5019\uff0c\u6211\u4eec\u9700\u8981\u8ba1\u7b97query\u548c\u67d0\u4e2akey\u7684\u5206\u6570\uff08\u76f8\u4f3c\u5ea6\uff09\uff0c\u5e38\u7528\u65b9\u6cd5\u6709\uff1a \u70b9\u4e58\uff1a \\(score(q,k)=q^\\top k\\) \u77e9\u9635\u76f8\u4e58\uff1a \\(score(q,k)=q^\\top Wk\\) \u4f59\u5f26\u76f8\u4f3c\u5ea6\uff1a \\(score(q,k)=\\frac{q^\\top k}{\\|q\\| \\cdot \\|k\\|}\\) \u4e32\u8054\u65b9\u5f0f\uff0c\u628aq\u548ck\u62fc\u63a5\u8d77\u6765\uff1a \\(score(q,k)=W[q;k]\\) \u591a\u5c42\u611f\u77e5\u673a\uff1a \\(score(q,k)=v_a^\\top tanh(Wq+Uk)\\)","title":"\u76f8\u4f3c\u5ea6\u8ba1\u7b97\u65b9\u5f0f"},{"location":"llm/transformer/attention/#reference","text":"Encoder-Decoder \u548c Seq2Seq \u4e00\u6587\u770b\u61c2 Attention\uff08\u672c\u8d28\u539f\u7406+3\u5927\u4f18\u70b9+5\u5927\u7c7b\u578b\uff09 \u904d\u5730\u5f00\u82b1\u7684 Attention\uff0c\u4f60\u771f\u7684\u61c2\u5417\uff1f","title":"Reference"},{"location":"llm/transformer/bert/","text":"BERT \u00b6 \u7ea6 1558 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 5 \u5206\u949f Abstruct BERT \u4f5c\u4e3a NLP \u9884\u8bad\u7ec3\u6a21\u578b\u91cc\u7684\u7ecf\u5178\u6a21\u578b\u4e4b\u4e00\uff0c\u6548\u679c\u975e\u5e38\u597d\u3002 BERT \u7684\u6a21\u578b\u4ee3\u7801\u548c\u6a21\u578b\u53c2\u6570\u5f00\u6e90\uff0c\u90fd\u53ef\u4ee5\u57fa\u4e8e\u8fd9\u4e2a\u5f3a\u5927\u7684\u6a21\u578b\u7ec4\u4ef6\u642d\u5efa\u81ea\u5df1\u7684 NLP \u7cfb\u7edf\uff0c\u4e5f\u8282\u7701\u5f00\u59cb\u8bad\u7ec3\u8bed\u8a00\u5904\u7406\u6a21\u578b\u6240\u9700\u8981\u7684\u65f6\u95f4\u3001\u7cbe\u529b\u3001\u77e5\u8bc6\u548c\u8d44\u6e90\u3002 BERT\u7684\u5168\u79f0\u662f Bidirectional Encoder Representation from Transformers\uff0c\u5373\u53cc\u5411 Transformer \u7684 Encoder\uff0c\u56e0\u4e3adecoder\u662f\u4e0d\u80fd\u83b7\u8981\u9884\u6d4b\u7684\u4fe1\u606f\u7684\u3002 \u6a21\u578b\u7684\u4e3b\u8981\u521b\u65b0\u70b9\u90fd\u5728pre-train\u65b9\u6cd5\u4e0a\uff0c\u5373\u7528\u4e86Masked LM\u548cNext Sentence Prediction\u4e24\u79cd\u65b9\u6cd5\u5206\u522b\u6355\u6349\u8bcd\u8bed\u548c\u53e5\u5b50\u7ea7\u522b\u7684representation\u3002 Introduction \u00b6 BERT \u9996\u5148\u5728\u5927\u89c4\u6a21\u65e0\u76d1\u7763\u8bed\u6599\u4e0a\u8fdb\u884c\u9884\u8bad\u7ec3\uff0c\u7136\u540e\u5728\u9884\u8bad\u7ec3\u597d\u7684\u53c2\u6570\u57fa\u7840\u4e0a\u589e\u52a0\u4e00\u4e2a\u4e0e\u4efb\u52a1\u76f8\u5173\u7684\u795e\u7ecf\u7f51\u7edc\u5c42\uff0c\u5e76\u5728\u8be5\u4efb\u52a1\u7684\u6570\u636e\u4e0a\u8fdb\u884c\u5fae\u8c03\uff0c\u6700\u7ec8\u53d6\u5f97\u5f88\u597d\u7684\u6548\u679c\u3002 BERT\u7684\u8bad\u7ec3\u8fc7\u7a0b\u53ef\u4ee5\u7b80\u8ff0\u4e3a\uff1a\u9884\u8bad\u7ec3+\u5fae\u8c03\uff08finetune\uff09\uff0c\u8fd9\u662f\u8fd1\u51e0\u5e74 NLP \u89e3\u51b3\u65b9\u6848\u7684\u4e3b\u6d41\u8303\u5f0f\u3002 \u6a21\u578b\u7ed3\u6784 \u00b6 BERT\u6a21\u578b\u7684\u7ed3\u6784\u5982\u4e0b\u56fe\u6700\u5de6\uff1a \u5bf9\u6bd4 OpenAI GPT\uff0cBERT \u662f\u53cc\u5411\u7684 Transformer block \u8fde\u63a5\uff0c\u5c31\u50cf\u5355\u5411 RNN \u548c\u53cc\u5411 RNN \u7684\u533a\u522b\uff0c\u6548\u679c\u4f1a\u66f4\u597d\u3002 \u5bf9\u6bd4 ELMo\uff0c\u867d\u7136\u90fd\u662f\u201c\u53cc\u5411\u201d\uff0c\u4f46\u76ee\u6807\u51fd\u6570\u4e0d\u540c\u3002 ELMo \u662f\u5206\u522b\u4ee5 \\(P(w_i|w_1,...,w_{i-1})\\) \u548c \\(P(w_i|w_{i+1},...,w_n)\\) \u4f5c\u4e3a\u76ee\u6807\u51fd\u6570\uff0c\u72ec\u7acb\u8bad\u7ec3\u51fa\u4e24\u4e2a representation \u7136\u540e\u8fde\u63a5 BERT \u662f\u4ee5 \\(P(w_i | w_1,...,w_{i-1},w_{i+1},...,w_n)\\) \u4f5c\u4e3a\u76ee\u6807\u51fd\u6570\u8bad\u7ec3 LM \u547d\u540d\u8868\u793a\u5c42\u6570\u4e3aL\uff08Transformer Blocks\uff09\uff0c\u9690\u85cf\u5c42\u6570\u4e3aH\uff0c\u81ea\u6ce8\u610f\u529b\u5934\u6570\u91cf\u4e3aA\u3002\u539f\u59cb\u8bba\u6587\u4e2d\u7684\u4e24\u79cd\u6a21\u578b\uff1a BERT_base(L=12,H=768,A=12; parameters=110M) BERT_large(L=24,H=1024,A=16; parameters=340M) Embedding \u00b6 \u8fd9\u91cc\u7684 Embedding \u7531\u4e09\u79cd Embedding \u6c42\u548c\u7ec4\u6210\uff1a Token Embedding \uff1a\u8bcd\u5411\u91cf\uff0c\u7b2c\u4e00\u4e2a\u5355\u8bcd\u662f CLS \u6807\u5fd7\uff0c\u53ef\u4ee5\u7528\u4e8e\u4e4b\u540e\u7684\u5206\u7c7b\u4efb\u52a1 Segment Embedding \uff1a\u53e5\u5b50\u5411\u91cf\uff0c\u7528\u4e8e\u533a\u5206\u4e24\u4e2a\u53e5\u5b50\uff0c\u56e0\u4e3a\u9884\u8bad\u7ec3\u4e0d\u5149\u505a LM \u8fd8\u8981\u505a\u4ee5\u4e24\u4e2a\u53e5\u5b50\u4e3a\u8f93\u5165\u7684\u5206\u7c7b\u4efb\u52a1 Position Embedding \uff1a\u4f4d\u7f6e\u5411\u91cf\uff0c\u7528\u4e8e\u533a\u5206\u5355\u8bcd\u5728\u53e5\u5b50\u4e2d\u7684\u4f4d\u7f6e\uff0c\u548c\u4e4b\u524d\u7684 Transformer \u4e0d\u4e00\u6837\uff0c\u4e0d\u662f\u4e09\u89d2\u51fd\u6570\u800c\u662f\u5b66\u4e60\u51fa\u6765\u7684 Pre-training \u00b6 Masked LM \uff08MLM\uff09 \u00b6 \u7b2c\u4e00\u6b65\u9884\u8bad\u7ec3\u7684\u76ee\u6807\u5c31\u662f\u505a\u9884\u8a00\u6a21\u578b\uff0c\u4ece\u4e0a\u6587\u6a21\u578b\u7ed3\u6784\u4e2d\u770b\u5230\u4e86\u8fd9\u4e2a\u6a21\u578b\u7684\u4e0d\u540c\uff0c\u5373 bidirectional\u3002 \u4e3a\u4ec0\u4e48\u8981 bidirectional \u5982\u679c\u4f7f\u7528\u9884\u8bad\u7ec3\u6a21\u578b\u5904\u7406\u5176\u4ed6\u4efb\u52a1\uff0c\u90a3\u4eba\u4eec\u60f3\u8981\u7684\u4e0d\u6b62\u67d0\u4e2a\u8bcd\u7684\u5de6\u8fb9\u7684\u4fe1\u606f\uff0c\u800c\u662f\u5de6\u53f3\u4e24\u8fb9\u7684\u4fe1\u606f\uff0c\u800c\u8003\u8651\u5230\u8fd9\u70b9\u7684\u6a21\u578b ELMo \u53ea\u662f\u5c06 left-to-right \u548c right-to-left \u5206\u522b\u8bad\u7ec3\u62fc\u63a5\u8d77\u6765\u3002\u76f4\u89c9\u4e0a\u6765\u8bb2\u6211\u4eec\u5176\u5b9e\u60f3\u8981\u4e00\u4e2a deeply bidirectional \u7684\u6a21\u578b\uff0c\u4f46\u662f\u666e\u901a\u7684LM\u53c8\u65e0\u6cd5\u505a\u5230\uff0c\u56e0\u4e3a\u5728\u8bad\u7ec3\u65f6\u53ef\u80fd\u4f1a\u201c\u7a7f\u8d8a\u201d\uff0c\u6240\u4ee5\u4f5c\u8005\u7528\u4e86\u4e00\u4e2a\u52a0mask\u7684trick\u3002 \u5728\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u4f5c\u8005\u968f\u673a mask 15% \u7684 token\uff0c\u800c\u4e0d\u662f\u628a\u50cf CBOW \u4e00\u6837\u628a\u6bcf\u4e2a\u8bcd\u90fd\u9884\u6d4b\u4e00\u904d\u3002 \u6700\u7ec8\u7684\u635f\u5931\u51fd\u6570\u53ea\u8ba1\u7b97\u88ab mask \u6389\u90a3\u4e48 token \u3002 mask \u5982\u4f55\u505a\u4e5f\u662f\u6709\u6280\u5de7\u7684\uff0c\u5982\u679c\u4e00\u76f4\u7528\u6807\u8bb0 [MASK] \u4ee3\u66ff\uff08\u5728\u5b9e\u9645\u9884\u6d4b\u65f6\u662f\u78b0\u4e0d\u5230\u8fd9\u4e2a\u6807\u8bb0\u7684\uff09\u4f1a\u5f71\u54cd\u6a21\u578b\uff0c\u6240\u4ee5\u968f\u673a mask \u7684\u65f6\u5019 10% \u7684\u5355\u8bcd\u4f1a\u88ab\u66ff\u4ee3\u6210\u5176\u4ed6\u5355\u8bcd\uff0c10% \u7684\u5355\u8bcd\u4e0d\u66ff\u6362\uff0c\u5269\u4e0b 80% \u624d\u88ab\u66ff\u6362\u4e3a [MASK]\u3002\u8981\u6ce8\u610f\u7684\u662f Masked LM \u9884\u8bad\u7ec3\u9636\u6bb5\u6a21\u578b\u662f\u4e0d\u77e5\u9053\u771f\u6b63\u88ab mask \u7684\u54ea\u4e2a\u8bcd\uff0c\u6240\u4ee5\u6a21\u578b\u6bcf\u4e2a\u8bcd\u90fd\u8981\u5173\u6ce8\u3002 \u4e3a\u4ec0\u4e48\u8fd9\u4e48\u5206\u914d\u6bd4\u4f8b \u5982\u679c\u53e5\u5b50\u4e2d\u7684\u67d0\u4e2aToken100%\u90fd\u4f1a\u88abmask\u6389\uff0c\u90a3\u4e48\u5728fine-tuning\u7684\u65f6\u5019\u6a21\u578b\u5c31\u4f1a\u6709\u4e00\u4e9b\u6ca1\u6709\u89c1\u8fc7\u7684\u5355\u8bcd\u3002\u52a0\u5165\u968f\u673aToken\u7684\u539f\u56e0\u662f\u56e0\u4e3aTransformer\u8981\u4fdd\u6301\u5bf9\u6bcf\u4e2a\u8f93\u5165token\u7684\u5206\u5e03\u5f0f\u8868\u5f81\uff0c\u5426\u5219\u6a21\u578b\u5c31\u4f1a\u8bb0\u4f4f\u8fd9\u4e2a[mask]\u662ftoken \u2019hairy\u2018\u3002\u81f3\u4e8e\u5355\u8bcd\u5e26\u6765\u7684\u8d1f\u9762\u5f71\u54cd\uff0c\u56e0\u4e3a\u4e00\u4e2a\u5355\u8bcd\u88ab\u968f\u673a\u66ff\u6362\u6389\u7684\u6982\u7387\u53ea\u670915%*10% =1.5%\uff0c\u8fd9\u4e2a\u8d1f\u9762\u5f71\u54cd\u5176\u5b9e\u662f\u53ef\u4ee5\u5ffd\u7565\u4e0d\u8ba1\u7684\u3002 \u56e0\u4e3a\u5e8f\u5217\u957f\u5ea6\u592a\u5927\uff08512\uff09\u4f1a\u5f71\u54cd\u8bad\u7ec3\u901f\u5ea6\uff0c\u6240\u4ee5 90% \u7684 steps \u90fd\u7528 seq_len=128\uff0c10% \u7684 steps \u7528 seq_len=512\u3002 Next Sentence Prediction \uff08NSP\uff09 \u00b6 \u56e0\u4e3a\u6d89\u53ca\u5230QA\u548cNLI\u4e4b\u7c7b\u7684\u4efb\u52a1\uff0c\u589e\u52a0\u4e86\u7b2c\u4e8c\u4e2a\u9884\u8bad\u7ec3\u4efb\u52a1\uff0c\u76ee\u7684\u662f\u8ba9\u6a21\u578b\u7406\u89e3\u4e24\u4e2a\u53e5\u5b50\u4e4b\u95f4\u7684\u8054\u7cfb\u3002 Next Sentence Prediction\uff08NSP\uff09\u7684\u4efb\u52a1\u662f\u5224\u65ad\u53e5\u5b50B\u662f\u5426\u662f\u53e5\u5b50A\u7684\u4e0b\u6587\u3002\u5982\u679c\u662f\u7684\u8bdd\u8f93\u51fa\u2019IsNext\u2018\uff0c\u5426\u5219\u8f93\u51fa\u2019NotNext\u2018\u3002\u8bad\u7ec3\u6570\u636e\u7684\u751f\u6210\u65b9\u5f0f\u662f\u4ece\u5e73\u884c\u8bed\u6599\u4e2d\u968f\u673a\u62bd\u53d6\u7684\u8fde\u7eed\u4e24\u53e5\u8bdd\uff0c\u5176\u4e2d50%\u4fdd\u7559\u62bd\u53d6\u7684\u4e24\u53e5\u8bdd\uff0c\u5b83\u4eec\u7b26\u5408IsNext\u5173\u7cfb\uff0c\u53e6\u591650%\u7684\u7b2c\u4e8c\u53e5\u8bdd\u662f\u968f\u673a\u4ece\u9884\u6599\u4e2d\u63d0\u53d6\u7684\uff0c\u5b83\u4eec\u7684\u5173\u7cfb\u662fNotNext\u7684\u3002 \u9884\u8bad\u7ec3\u7684\u65f6\u5019\u53ef\u4ee5\u8fbe\u5230 97%-98% \u7684\u51c6\u786e\u5ea6\u3002 \u4f5c\u8005\u7279\u610f\u8bf4\u4e86\u8bed\u6599\u7684\u9009\u53d6\u5f88\u5173\u952e\uff0c\u8981\u9009\u7528document-level\u7684\u800c\u4e0d\u662fsentence-level\u7684\uff0c\u8fd9\u6837\u53ef\u4ee5\u5177\u5907\u62bd\u8c61\u8fde\u7eed\u957f\u5e8f\u5217\u7279\u5f81\u7684\u80fd\u529b\u3002 Fine-tuning \u00b6 \u5fae\u8c03\u662f\u7b80\u5355\u7684\uff0c\u56e0\u4e3aTransformer\u4e2d\u7684\u81ea\u6ce8\u610f\u529b\u673a\u5236\u5141\u8bb8BERT\u901a\u8fc7\u4ea4\u6362\u9002\u5f53\u7684\u8f93\u5165\u548c\u8f93\u51fa\u6765\u5efa\u6a21\u8bb8\u591a\u4e0b\u6e38\u4efb\u52a1--\u4e0d\u7ba1\u5b83\u4eec\u6d89\u53ca\u5355\u4e2a\u6587\u672c\u8fd8\u662f\u6587\u672c\u5bf9\u3002\u5bf9\u4e8eNSP\u4efb\u52a1\u6765\u8bf4\uff0c\u5176\u6761\u4ef6\u6982\u7387\u8868\u793a\u4e3a \\(P=softmax(CW^T)\\) \uff0c\u5176\u4e2d C \u662f BERT \u8f93\u51fa\u4e2d\u7684 [CLS] \u7b26\u53f7\uff0cW \u662f\u53ef\u5b66\u4e60\u7684\u6743\u503c\u77e9\u9635\u3002 \u5fae\u8c03\u7684\u4efb\u52a1\u5305\u62ec\uff1a \u57fa\u4e8e\u53e5\u5b50\u5bf9\u7684\u5206\u7c7b\u4efb\u52a1 \u57fa\u4e8e\u5355\u4e2a\u53e5\u5b50\u7684\u5206\u7c7b\u4efb\u52a1 \u95ee\u7b54\u4efb\u52a1 \u547d\u540d\u5b9e\u4f53\u8bc6\u522bNER \u4e0b\u56fe\u5c55\u793a\u4e86BERT\u572811\u4e2a\u4e0d\u540c\u4efb\u52a1\u4e2d\u7684\u6a21\u578b\uff0c\u5b83\u4eec\u53ea\u9700\u8981\u5728BERT\u7684\u57fa\u7840\u4e0a\u518d\u6dfb\u52a0\u4e00\u4e2a\u8f93\u51fa\u5c42\u4fbf\u53ef\u4ee5\u5b8c\u6210\u5bf9\u7279\u5b9a\u4efb\u52a1\u7684\u5fae\u8c03\u3002\u8fd9\u4e9b\u4efb\u52a1\u7c7b\u4f3c\u4e8e\u6211\u4eec\u505a\u8fc7\u7684\u6587\u79d1\u8bd5\u5377\uff0c\u5176\u4e2d\u6709\u9009\u62e9\u9898\uff0c\u7b80\u7b54\u9898\u7b49\u7b49\u3002\u56fe3\u4e2d\u5176\u4e2dTok\u8868\u793a\u4e0d\u540c\u7684Token\uff0cE \u8868\u793a\u5d4c\u5165\u5411\u91cf\uff0c \\(T_i\\) \u8868\u793a\u7b2c i \u4e2aToken\u5728\u7ecf\u8fc7BERT\u5904\u7406\u4e4b\u540e\u5f97\u5230\u7684\u7279\u5f81\u5411\u91cf\u3002 \u6574\u4f53 Fine-Tuning \u8fc7\u7a0b\uff1a \u6784\u5efa\u56fe\u7ed3\u6784\uff0c\u622a\u53d6\u76ee\u6807\u5f20\u91cf\uff0c\u6dfb\u52a0\u65b0\u5c42 \u5939\u5728\u76ee\u6807\u5f20\u91cf\u6743\u91cd \u8bad\u7ec3\u65b0\u5c42 \u5168\u5c40\u5fae\u8c03 Reference \u00b6 \u56fe\u89e3 BERT \u3010\u6df1\u5ea6\u5b66\u4e60\u3011BERT \u8be6\u89e3 \u3010NLP\u3011Google BERT\u6a21\u578b\u539f\u7406\u8be6\u89e3 NLP\u4e0e\u6df1\u5ea6\u5b66\u4e60\uff08\u4e94\uff09BERT\u9884\u8bad\u7ec3\u6a21\u578b","title":"BERT"},{"location":"llm/transformer/bert/#bert","text":"\u7ea6 1558 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 5 \u5206\u949f Abstruct BERT \u4f5c\u4e3a NLP \u9884\u8bad\u7ec3\u6a21\u578b\u91cc\u7684\u7ecf\u5178\u6a21\u578b\u4e4b\u4e00\uff0c\u6548\u679c\u975e\u5e38\u597d\u3002 BERT \u7684\u6a21\u578b\u4ee3\u7801\u548c\u6a21\u578b\u53c2\u6570\u5f00\u6e90\uff0c\u90fd\u53ef\u4ee5\u57fa\u4e8e\u8fd9\u4e2a\u5f3a\u5927\u7684\u6a21\u578b\u7ec4\u4ef6\u642d\u5efa\u81ea\u5df1\u7684 NLP \u7cfb\u7edf\uff0c\u4e5f\u8282\u7701\u5f00\u59cb\u8bad\u7ec3\u8bed\u8a00\u5904\u7406\u6a21\u578b\u6240\u9700\u8981\u7684\u65f6\u95f4\u3001\u7cbe\u529b\u3001\u77e5\u8bc6\u548c\u8d44\u6e90\u3002 BERT\u7684\u5168\u79f0\u662f Bidirectional Encoder Representation from Transformers\uff0c\u5373\u53cc\u5411 Transformer \u7684 Encoder\uff0c\u56e0\u4e3adecoder\u662f\u4e0d\u80fd\u83b7\u8981\u9884\u6d4b\u7684\u4fe1\u606f\u7684\u3002 \u6a21\u578b\u7684\u4e3b\u8981\u521b\u65b0\u70b9\u90fd\u5728pre-train\u65b9\u6cd5\u4e0a\uff0c\u5373\u7528\u4e86Masked LM\u548cNext Sentence Prediction\u4e24\u79cd\u65b9\u6cd5\u5206\u522b\u6355\u6349\u8bcd\u8bed\u548c\u53e5\u5b50\u7ea7\u522b\u7684representation\u3002","title":"BERT"},{"location":"llm/transformer/bert/#introduction","text":"BERT \u9996\u5148\u5728\u5927\u89c4\u6a21\u65e0\u76d1\u7763\u8bed\u6599\u4e0a\u8fdb\u884c\u9884\u8bad\u7ec3\uff0c\u7136\u540e\u5728\u9884\u8bad\u7ec3\u597d\u7684\u53c2\u6570\u57fa\u7840\u4e0a\u589e\u52a0\u4e00\u4e2a\u4e0e\u4efb\u52a1\u76f8\u5173\u7684\u795e\u7ecf\u7f51\u7edc\u5c42\uff0c\u5e76\u5728\u8be5\u4efb\u52a1\u7684\u6570\u636e\u4e0a\u8fdb\u884c\u5fae\u8c03\uff0c\u6700\u7ec8\u53d6\u5f97\u5f88\u597d\u7684\u6548\u679c\u3002 BERT\u7684\u8bad\u7ec3\u8fc7\u7a0b\u53ef\u4ee5\u7b80\u8ff0\u4e3a\uff1a\u9884\u8bad\u7ec3+\u5fae\u8c03\uff08finetune\uff09\uff0c\u8fd9\u662f\u8fd1\u51e0\u5e74 NLP \u89e3\u51b3\u65b9\u6848\u7684\u4e3b\u6d41\u8303\u5f0f\u3002","title":"Introduction"},{"location":"llm/transformer/bert/#_1","text":"BERT\u6a21\u578b\u7684\u7ed3\u6784\u5982\u4e0b\u56fe\u6700\u5de6\uff1a \u5bf9\u6bd4 OpenAI GPT\uff0cBERT \u662f\u53cc\u5411\u7684 Transformer block \u8fde\u63a5\uff0c\u5c31\u50cf\u5355\u5411 RNN \u548c\u53cc\u5411 RNN \u7684\u533a\u522b\uff0c\u6548\u679c\u4f1a\u66f4\u597d\u3002 \u5bf9\u6bd4 ELMo\uff0c\u867d\u7136\u90fd\u662f\u201c\u53cc\u5411\u201d\uff0c\u4f46\u76ee\u6807\u51fd\u6570\u4e0d\u540c\u3002 ELMo \u662f\u5206\u522b\u4ee5 \\(P(w_i|w_1,...,w_{i-1})\\) \u548c \\(P(w_i|w_{i+1},...,w_n)\\) \u4f5c\u4e3a\u76ee\u6807\u51fd\u6570\uff0c\u72ec\u7acb\u8bad\u7ec3\u51fa\u4e24\u4e2a representation \u7136\u540e\u8fde\u63a5 BERT \u662f\u4ee5 \\(P(w_i | w_1,...,w_{i-1},w_{i+1},...,w_n)\\) \u4f5c\u4e3a\u76ee\u6807\u51fd\u6570\u8bad\u7ec3 LM \u547d\u540d\u8868\u793a\u5c42\u6570\u4e3aL\uff08Transformer Blocks\uff09\uff0c\u9690\u85cf\u5c42\u6570\u4e3aH\uff0c\u81ea\u6ce8\u610f\u529b\u5934\u6570\u91cf\u4e3aA\u3002\u539f\u59cb\u8bba\u6587\u4e2d\u7684\u4e24\u79cd\u6a21\u578b\uff1a BERT_base(L=12,H=768,A=12; parameters=110M) BERT_large(L=24,H=1024,A=16; parameters=340M)","title":"\u6a21\u578b\u7ed3\u6784"},{"location":"llm/transformer/bert/#embedding","text":"\u8fd9\u91cc\u7684 Embedding \u7531\u4e09\u79cd Embedding \u6c42\u548c\u7ec4\u6210\uff1a Token Embedding \uff1a\u8bcd\u5411\u91cf\uff0c\u7b2c\u4e00\u4e2a\u5355\u8bcd\u662f CLS \u6807\u5fd7\uff0c\u53ef\u4ee5\u7528\u4e8e\u4e4b\u540e\u7684\u5206\u7c7b\u4efb\u52a1 Segment Embedding \uff1a\u53e5\u5b50\u5411\u91cf\uff0c\u7528\u4e8e\u533a\u5206\u4e24\u4e2a\u53e5\u5b50\uff0c\u56e0\u4e3a\u9884\u8bad\u7ec3\u4e0d\u5149\u505a LM \u8fd8\u8981\u505a\u4ee5\u4e24\u4e2a\u53e5\u5b50\u4e3a\u8f93\u5165\u7684\u5206\u7c7b\u4efb\u52a1 Position Embedding \uff1a\u4f4d\u7f6e\u5411\u91cf\uff0c\u7528\u4e8e\u533a\u5206\u5355\u8bcd\u5728\u53e5\u5b50\u4e2d\u7684\u4f4d\u7f6e\uff0c\u548c\u4e4b\u524d\u7684 Transformer \u4e0d\u4e00\u6837\uff0c\u4e0d\u662f\u4e09\u89d2\u51fd\u6570\u800c\u662f\u5b66\u4e60\u51fa\u6765\u7684","title":"Embedding"},{"location":"llm/transformer/bert/#pre-training","text":"","title":"Pre-training"},{"location":"llm/transformer/bert/#masked-lm-mlm","text":"\u7b2c\u4e00\u6b65\u9884\u8bad\u7ec3\u7684\u76ee\u6807\u5c31\u662f\u505a\u9884\u8a00\u6a21\u578b\uff0c\u4ece\u4e0a\u6587\u6a21\u578b\u7ed3\u6784\u4e2d\u770b\u5230\u4e86\u8fd9\u4e2a\u6a21\u578b\u7684\u4e0d\u540c\uff0c\u5373 bidirectional\u3002 \u4e3a\u4ec0\u4e48\u8981 bidirectional \u5982\u679c\u4f7f\u7528\u9884\u8bad\u7ec3\u6a21\u578b\u5904\u7406\u5176\u4ed6\u4efb\u52a1\uff0c\u90a3\u4eba\u4eec\u60f3\u8981\u7684\u4e0d\u6b62\u67d0\u4e2a\u8bcd\u7684\u5de6\u8fb9\u7684\u4fe1\u606f\uff0c\u800c\u662f\u5de6\u53f3\u4e24\u8fb9\u7684\u4fe1\u606f\uff0c\u800c\u8003\u8651\u5230\u8fd9\u70b9\u7684\u6a21\u578b ELMo \u53ea\u662f\u5c06 left-to-right \u548c right-to-left \u5206\u522b\u8bad\u7ec3\u62fc\u63a5\u8d77\u6765\u3002\u76f4\u89c9\u4e0a\u6765\u8bb2\u6211\u4eec\u5176\u5b9e\u60f3\u8981\u4e00\u4e2a deeply bidirectional \u7684\u6a21\u578b\uff0c\u4f46\u662f\u666e\u901a\u7684LM\u53c8\u65e0\u6cd5\u505a\u5230\uff0c\u56e0\u4e3a\u5728\u8bad\u7ec3\u65f6\u53ef\u80fd\u4f1a\u201c\u7a7f\u8d8a\u201d\uff0c\u6240\u4ee5\u4f5c\u8005\u7528\u4e86\u4e00\u4e2a\u52a0mask\u7684trick\u3002 \u5728\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u4f5c\u8005\u968f\u673a mask 15% \u7684 token\uff0c\u800c\u4e0d\u662f\u628a\u50cf CBOW \u4e00\u6837\u628a\u6bcf\u4e2a\u8bcd\u90fd\u9884\u6d4b\u4e00\u904d\u3002 \u6700\u7ec8\u7684\u635f\u5931\u51fd\u6570\u53ea\u8ba1\u7b97\u88ab mask \u6389\u90a3\u4e48 token \u3002 mask \u5982\u4f55\u505a\u4e5f\u662f\u6709\u6280\u5de7\u7684\uff0c\u5982\u679c\u4e00\u76f4\u7528\u6807\u8bb0 [MASK] \u4ee3\u66ff\uff08\u5728\u5b9e\u9645\u9884\u6d4b\u65f6\u662f\u78b0\u4e0d\u5230\u8fd9\u4e2a\u6807\u8bb0\u7684\uff09\u4f1a\u5f71\u54cd\u6a21\u578b\uff0c\u6240\u4ee5\u968f\u673a mask \u7684\u65f6\u5019 10% \u7684\u5355\u8bcd\u4f1a\u88ab\u66ff\u4ee3\u6210\u5176\u4ed6\u5355\u8bcd\uff0c10% \u7684\u5355\u8bcd\u4e0d\u66ff\u6362\uff0c\u5269\u4e0b 80% \u624d\u88ab\u66ff\u6362\u4e3a [MASK]\u3002\u8981\u6ce8\u610f\u7684\u662f Masked LM \u9884\u8bad\u7ec3\u9636\u6bb5\u6a21\u578b\u662f\u4e0d\u77e5\u9053\u771f\u6b63\u88ab mask \u7684\u54ea\u4e2a\u8bcd\uff0c\u6240\u4ee5\u6a21\u578b\u6bcf\u4e2a\u8bcd\u90fd\u8981\u5173\u6ce8\u3002 \u4e3a\u4ec0\u4e48\u8fd9\u4e48\u5206\u914d\u6bd4\u4f8b \u5982\u679c\u53e5\u5b50\u4e2d\u7684\u67d0\u4e2aToken100%\u90fd\u4f1a\u88abmask\u6389\uff0c\u90a3\u4e48\u5728fine-tuning\u7684\u65f6\u5019\u6a21\u578b\u5c31\u4f1a\u6709\u4e00\u4e9b\u6ca1\u6709\u89c1\u8fc7\u7684\u5355\u8bcd\u3002\u52a0\u5165\u968f\u673aToken\u7684\u539f\u56e0\u662f\u56e0\u4e3aTransformer\u8981\u4fdd\u6301\u5bf9\u6bcf\u4e2a\u8f93\u5165token\u7684\u5206\u5e03\u5f0f\u8868\u5f81\uff0c\u5426\u5219\u6a21\u578b\u5c31\u4f1a\u8bb0\u4f4f\u8fd9\u4e2a[mask]\u662ftoken \u2019hairy\u2018\u3002\u81f3\u4e8e\u5355\u8bcd\u5e26\u6765\u7684\u8d1f\u9762\u5f71\u54cd\uff0c\u56e0\u4e3a\u4e00\u4e2a\u5355\u8bcd\u88ab\u968f\u673a\u66ff\u6362\u6389\u7684\u6982\u7387\u53ea\u670915%*10% =1.5%\uff0c\u8fd9\u4e2a\u8d1f\u9762\u5f71\u54cd\u5176\u5b9e\u662f\u53ef\u4ee5\u5ffd\u7565\u4e0d\u8ba1\u7684\u3002 \u56e0\u4e3a\u5e8f\u5217\u957f\u5ea6\u592a\u5927\uff08512\uff09\u4f1a\u5f71\u54cd\u8bad\u7ec3\u901f\u5ea6\uff0c\u6240\u4ee5 90% \u7684 steps \u90fd\u7528 seq_len=128\uff0c10% \u7684 steps \u7528 seq_len=512\u3002","title":"Masked LM \uff08MLM\uff09"},{"location":"llm/transformer/bert/#next-sentence-prediction-nsp","text":"\u56e0\u4e3a\u6d89\u53ca\u5230QA\u548cNLI\u4e4b\u7c7b\u7684\u4efb\u52a1\uff0c\u589e\u52a0\u4e86\u7b2c\u4e8c\u4e2a\u9884\u8bad\u7ec3\u4efb\u52a1\uff0c\u76ee\u7684\u662f\u8ba9\u6a21\u578b\u7406\u89e3\u4e24\u4e2a\u53e5\u5b50\u4e4b\u95f4\u7684\u8054\u7cfb\u3002 Next Sentence Prediction\uff08NSP\uff09\u7684\u4efb\u52a1\u662f\u5224\u65ad\u53e5\u5b50B\u662f\u5426\u662f\u53e5\u5b50A\u7684\u4e0b\u6587\u3002\u5982\u679c\u662f\u7684\u8bdd\u8f93\u51fa\u2019IsNext\u2018\uff0c\u5426\u5219\u8f93\u51fa\u2019NotNext\u2018\u3002\u8bad\u7ec3\u6570\u636e\u7684\u751f\u6210\u65b9\u5f0f\u662f\u4ece\u5e73\u884c\u8bed\u6599\u4e2d\u968f\u673a\u62bd\u53d6\u7684\u8fde\u7eed\u4e24\u53e5\u8bdd\uff0c\u5176\u4e2d50%\u4fdd\u7559\u62bd\u53d6\u7684\u4e24\u53e5\u8bdd\uff0c\u5b83\u4eec\u7b26\u5408IsNext\u5173\u7cfb\uff0c\u53e6\u591650%\u7684\u7b2c\u4e8c\u53e5\u8bdd\u662f\u968f\u673a\u4ece\u9884\u6599\u4e2d\u63d0\u53d6\u7684\uff0c\u5b83\u4eec\u7684\u5173\u7cfb\u662fNotNext\u7684\u3002 \u9884\u8bad\u7ec3\u7684\u65f6\u5019\u53ef\u4ee5\u8fbe\u5230 97%-98% \u7684\u51c6\u786e\u5ea6\u3002 \u4f5c\u8005\u7279\u610f\u8bf4\u4e86\u8bed\u6599\u7684\u9009\u53d6\u5f88\u5173\u952e\uff0c\u8981\u9009\u7528document-level\u7684\u800c\u4e0d\u662fsentence-level\u7684\uff0c\u8fd9\u6837\u53ef\u4ee5\u5177\u5907\u62bd\u8c61\u8fde\u7eed\u957f\u5e8f\u5217\u7279\u5f81\u7684\u80fd\u529b\u3002","title":"Next Sentence Prediction \uff08NSP\uff09"},{"location":"llm/transformer/bert/#fine-tuning","text":"\u5fae\u8c03\u662f\u7b80\u5355\u7684\uff0c\u56e0\u4e3aTransformer\u4e2d\u7684\u81ea\u6ce8\u610f\u529b\u673a\u5236\u5141\u8bb8BERT\u901a\u8fc7\u4ea4\u6362\u9002\u5f53\u7684\u8f93\u5165\u548c\u8f93\u51fa\u6765\u5efa\u6a21\u8bb8\u591a\u4e0b\u6e38\u4efb\u52a1--\u4e0d\u7ba1\u5b83\u4eec\u6d89\u53ca\u5355\u4e2a\u6587\u672c\u8fd8\u662f\u6587\u672c\u5bf9\u3002\u5bf9\u4e8eNSP\u4efb\u52a1\u6765\u8bf4\uff0c\u5176\u6761\u4ef6\u6982\u7387\u8868\u793a\u4e3a \\(P=softmax(CW^T)\\) \uff0c\u5176\u4e2d C \u662f BERT \u8f93\u51fa\u4e2d\u7684 [CLS] \u7b26\u53f7\uff0cW \u662f\u53ef\u5b66\u4e60\u7684\u6743\u503c\u77e9\u9635\u3002 \u5fae\u8c03\u7684\u4efb\u52a1\u5305\u62ec\uff1a \u57fa\u4e8e\u53e5\u5b50\u5bf9\u7684\u5206\u7c7b\u4efb\u52a1 \u57fa\u4e8e\u5355\u4e2a\u53e5\u5b50\u7684\u5206\u7c7b\u4efb\u52a1 \u95ee\u7b54\u4efb\u52a1 \u547d\u540d\u5b9e\u4f53\u8bc6\u522bNER \u4e0b\u56fe\u5c55\u793a\u4e86BERT\u572811\u4e2a\u4e0d\u540c\u4efb\u52a1\u4e2d\u7684\u6a21\u578b\uff0c\u5b83\u4eec\u53ea\u9700\u8981\u5728BERT\u7684\u57fa\u7840\u4e0a\u518d\u6dfb\u52a0\u4e00\u4e2a\u8f93\u51fa\u5c42\u4fbf\u53ef\u4ee5\u5b8c\u6210\u5bf9\u7279\u5b9a\u4efb\u52a1\u7684\u5fae\u8c03\u3002\u8fd9\u4e9b\u4efb\u52a1\u7c7b\u4f3c\u4e8e\u6211\u4eec\u505a\u8fc7\u7684\u6587\u79d1\u8bd5\u5377\uff0c\u5176\u4e2d\u6709\u9009\u62e9\u9898\uff0c\u7b80\u7b54\u9898\u7b49\u7b49\u3002\u56fe3\u4e2d\u5176\u4e2dTok\u8868\u793a\u4e0d\u540c\u7684Token\uff0cE \u8868\u793a\u5d4c\u5165\u5411\u91cf\uff0c \\(T_i\\) \u8868\u793a\u7b2c i \u4e2aToken\u5728\u7ecf\u8fc7BERT\u5904\u7406\u4e4b\u540e\u5f97\u5230\u7684\u7279\u5f81\u5411\u91cf\u3002 \u6574\u4f53 Fine-Tuning \u8fc7\u7a0b\uff1a \u6784\u5efa\u56fe\u7ed3\u6784\uff0c\u622a\u53d6\u76ee\u6807\u5f20\u91cf\uff0c\u6dfb\u52a0\u65b0\u5c42 \u5939\u5728\u76ee\u6807\u5f20\u91cf\u6743\u91cd \u8bad\u7ec3\u65b0\u5c42 \u5168\u5c40\u5fae\u8c03","title":"Fine-tuning"},{"location":"llm/transformer/bert/#reference","text":"\u56fe\u89e3 BERT \u3010\u6df1\u5ea6\u5b66\u4e60\u3011BERT \u8be6\u89e3 \u3010NLP\u3011Google BERT\u6a21\u578b\u539f\u7406\u8be6\u89e3 NLP\u4e0e\u6df1\u5ea6\u5b66\u4e60\uff08\u4e94\uff09BERT\u9884\u8bad\u7ec3\u6a21\u578b","title":"Reference"},{"location":"llm/transformer/transformer/","text":"Transformer \u00b6 \u7ea6 2243 \u4e2a\u5b57 84 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f Abstract \u300aAttention is all you need\u300b\u8fd9\u662f\u8c37\u6b4c\u56e2\u961f\u57282017\u5e74\u53d1\u8868\u7684\u8bba\u6587\uff0c\u4e5f\u662f\u9996\u6b21\u63d0\u51faTransformer\u3002 \u76f4\u63a5\u57fa\u4e8eSelf-Attention\u7ed3\u6784\uff0c\u53d6\u4ee3\u4e86\u4e4b\u524dNLP\u4efb\u52a1\u4e2d\u5e38\u7528\u7684RNN\u795e\u7ecf\u7f51\u7edc\u7ed3\u6784\u3002 \u4e0eRNN\u8fd9\u7c7b\u795e\u7ecf\u7f51\u7edc\u7ed3\u6784\u76f8\u6bd4\uff0cTransformer\u4e00\u4e2a\u5de8\u5927\u7684\u4f18\u70b9\u662f\uff1a**\u6a21\u578b\u5728\u5904\u7406\u5e8f\u5217\u8f93\u5165\u65f6\uff0c\u53ef\u4ee5\u5bf9\u6574\u4e2a\u5e8f\u5217\u8f93\u5165\u8fdb\u884c\u5e76\u884c\u8ba1\u7b97\uff0c\u4e0d\u9700\u8981\u6309\u7167\u65f6\u95f4\u6b65\u5faa\u73af\u9012\u5f52\u5904\u7406\u8f93\u5165\u5e8f\u5217\u3002 \u6574\u4f53\u67b6\u6784 \u00b6 transformer \u603b\u4f53\u4e3a\u4e00\u4e2a\u7f16\u7801\u7ec4\u4ef6\u3001\u89e3\u7801\u7ec4\u4ef6\u4ee5\u53ca\u4e8c\u8005\u4e4b\u95f4\u8fde\u63a5\u3002 \u7f16\u7801\u90e8\u5206\u548c\u89e3\u7801\u90e8\u5206\u90fd\u4e3a\u7f16\u7801\u5668\u3001\u89e3\u7801\u5668\u7684\u5806\u53e0\uff0c\u6700\u540e\u4e00\u5c42\u7f16\u7801\u5668\u7684\u8f93\u51fa\u662f\u5404\u4e2a\u89e3\u7801\u5668\u7684\u8f93\u5165\u4e4b\u4e00\u3002\u7b2c\u4e00\u4e2a\u7f16\u7801\u5668\u7684\u8f93\u5165\u4e3a\u5355\u8bcd\u7684\u5d4c\u5165\u5411\u91cf\uff0c\u540e\u9762\u7f16\u7801\u5668\u8f93\u5165\u4e3a\u524d\u4e00\u5c42\u7684\u8f93\u51fa\u3002 \u7f16\u7801\u5668\u5747\u7531\u4e24\u4e2a\u5b50\u5c42\u7ec4\u6210\uff1a self-attention \u4e0e feed forward neural network \u3002 self-attention \u7528\u4e8e\u5e2e\u52a9\u7f16\u7801\u5668\u5728\u7f16\u7801\u7279\u5b9a\u5355\u8bcd\u65f6\u67e5\u770b\u8f93\u5165\u4e2d\u7684\u5176\u4ed6\u5355\u8bcd\u3002\u89e3\u7801\u5668\u4e5f\u6709\u8fd9\u4e24\u4e2a\u5b50\u5c42\uff0c\u4e2d\u95f4\u6709\u4e00\u4e2a\u6ce8\u610f\u529b\u5c42\uff0c\u5e2e\u52a9\u89e3\u7801\u5668\u67e5\u770b\u8f93\u5165\u53e5\u5b50\u7684\u76f8\u5173\u90e8\u5206\u3002 \u8f93\u5165\u5904\u7406 \u00b6 \u8bcd\u5411\u91cf \u00b6 \u548c\u5e38\u89c1\u7684 NLP \u4efb\u52a1\u4e00\u6837\uff0c\u9996\u5148\u4f1a\u4f7f\u7528\u8bcd\u5d4c\u5165\u7b97\u6cd5\uff08embedding algorithm\uff09\uff0c\u5c06\u8f93\u5165\u6587\u672c\u5e8f\u5217\u7684\u6bcf\u4e2a\u8bcd\u8f6c\u6362\u4e3a\u4e00\u4e2a\u8bcd\u5411\u91cf\u3002\u5b9e\u9645\u5e94\u7528\u4e2d\u7684\u5411\u91cf\u4e00\u822c\u4e3a 256 \u6216 512 \u7ef4\u3002 \u8f93\u5165\u5e8f\u5217\u6bcf\u4e2a\u5355\u8bcd\u88ab\u8f6c\u5316\u6210\u8bcd\u5411\u91cf\u8868\u793a\u8fd8\u5c06\u52a0\u4e0a\u4f4d\u7f6e\u5411\u91cf\u6765\u5f97\u5230\u8be5\u8bcd\u7684\u6700\u7ec8\u5411\u91cf\u8868\u793a\u3002 \u4f4d\u7f6e\u5411\u91cf \u00b6 \u9996\u5148\u4e3a\u4ec0\u4e48\u9700\u8981\u4f4d\u7f6e\u7f16\u7801\uff1f\u6211\u4eec\u5bf9\u4e8eRNN\u5728\u5904\u7406\u6587\u672c\u65f6\uff0c\u7531\u4e8e\u5929\u7136\u7684\u987a\u5e8f\u8f93\u5165\uff0c\u987a\u5e8f\u5904\u7406\uff0c\u5f53\u524d\u8f93\u51fa\u8981\u7b49\u4e0a\u4e00\u6b65\u8f93\u51fa\u5904\u7406\u5b8c\u540e\u624d\u80fd\u8fdb\u884c\uff0c\u56e0\u6b64\u4e0d\u4f1a\u9020\u6210\u6587\u672c\u7684\u5b57\u8bcd\u5728\u987a\u5e8f\u4e0a\u6216\u8005\u5148\u540e\u5173\u7cfb\u51fa\u73b0\u95ee\u9898\u3002 \u4f46\u5bf9\u4e8eTransformer\u6765\u8bf4\uff0c\u7531\u4e8e\u5176\u5728\u5904\u7406\u65f6\u662f\u5e76\u884c\u6267\u884c\uff0c\u867d\u7136\u52a0\u5feb\u4e86\u901f\u5ea6\uff0c\u4f46\u662f\u5ffd\u7565\u4e86\u8bcd\u5b57\u4e4b\u95f4\u7684\u524d\u540e\u5173\u7cfb\u6216\u8005\u5148\u540e\u987a\u5e8f\u3002\u540c\u65f6Transformer\u57fa\u4e8eSelf-Attention\u673a\u5236\uff0c\u800cself-attention\u4e0d\u80fd\u83b7\u53d6\u5b57\u8bcd\u7684\u4f4d\u7f6e\u4fe1\u606f\uff0c\u5373\u4f7f\u6253\u4e71\u4e00\u53e5\u8bdd\u4e2d\u5b57\u8bcd\u7684\u4f4d\u7f6e\uff0c\u6bcf\u4e2a\u8bcd\u8fd8\u662f\u80fd\u4e0e\u5176\u4ed6\u8bcd\u4e4b\u95f4\u8ba1\u7b97\u51faattention\u503c\uff0c\u56e0\u6b64\u6211\u4eec\u9700\u8981\u4e3a\u6bcf\u4e00\u4e2a\u8bcd\u5411\u91cf\u6dfb\u52a0\u4f4d\u7f6e\u7f16\u7801\u3002 Transformer \u6a21\u578b\u5bf9\u6bcf\u4e2a\u8f93\u5165\u7684\u8bcd\u5411\u91cf\u90fd\u52a0\u4e0a\u4e86\u4e00\u4e2a\u4f4d\u7f6e\u5411\u91cf\u3002\u8fd9\u4e9b\u5411\u91cf\u6709\u52a9\u4e8e\u786e\u5b9a\u6bcf\u4e2a\u5355\u8bcd\u7684\u4f4d\u7f6e\u7279\u5f81\uff0c\u6216\u8005\u53e5\u5b50\u4e2d\u4e0d\u540c\u5355\u8bcd\u4e4b\u95f4\u7684\u8ddd\u79bb\u7279\u5f81\u3002\u8bcd\u5411\u91cf\u52a0\u4e0a\u4f4d\u7f6e\u5411\u91cf\u80cc\u540e\u7684\u76f4\u89c9\uff1a \u5c06\u8fd9\u4e9b\u8868\u793a\u4f4d\u7f6e\u7684\u5411\u91cf\u6dfb\u52a0\u5230\u8bcd\u5411\u91cf\u4e2d\uff0c\u5f97\u5230\u7684\u65b0\u5411\u91cf\uff0c\u53ef\u4ee5\u4e3a\u6a21\u578b\u63d0\u4f9b\u66f4\u591a\u6709\u610f\u4e49\u7684\u4fe1\u606f\uff0c\u6bd4\u5982\u8bcd\u7684\u4f4d\u7f6e\uff0c\u8bcd\u4e4b\u95f4\u7684\u8ddd\u79bb\u7b49\u3002 \u90a3\u4e48\u5e26\u6709\u4f4d\u7f6e\u7f16\u7801\u4fe1\u606f\u7684\u5411\u91cf\u5230\u5e95\u9075\u5faa\u4ec0\u4e48\u6a21\u5f0f\uff1f\u539f\u59cb\u8bba\u6587\u4e2d\u7ed9\u51fa\u7684\u8bbe\u8ba1\u8868\u8fbe\u5f0f\u4e3a\uff1a \\[ PE_{(pos,2i)} = sin(pos / 10000^{2i/d_{\\text{model}}}) \\\\ PE_{(pos,2i+1)} = cos(pos / 10000^{2i/d_{\\text{model}}}) \\] \u4e0a\u9762\u8868\u8fbe\u5f0f\u4e2d\u7684 \\(pos\\) \u4ee3\u8868\u8bcd\u7684\u4f4d\u7f6e\uff0c \\(d_{model}\\) \u4ee3\u8868\u4f4d\u7f6e\u5411\u91cf\u7684\u7ef4\u5ea6\uff0c \\(i \\in [0, d_{model})\\) \u4ee3\u8868\u4f4d\u7f6e \\(d_{model}\\) \u7ef4\u4f4d\u7f6e\u5411\u91cf\u7b2c \\(i\\) \u7ef4\u3002\u4e8e\u662f\u6839\u636e\u4e0a\u8ff0\u516c\u5f0f\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u7b2c \\(pos\\) \u4f4d\u7f6e\u7684 \\(d_{model}\\) \u7ef4\u4f4d\u7f6e\u5411\u91cf\u3002\u5728\u4e0b\u56fe\u4e2d\uff0c\u6211\u4eec\u753b\u51fa\u4e86\u4e00\u79cd\u4f4d\u7f6e\u5411\u91cf\u5728\u7b2c4\u30015\u30016\u30017\u7ef4\u5ea6\u3001\u4e0d\u540c\u4f4d\u7f6e\u7684\u7684\u6570\u503c\u5927\u5c0f\u3002\u6a2a\u5750\u6807\u8868\u793a\u4f4d\u7f6e\u4e0b\u6807\uff0c\u7eb5\u5750\u6807\u8868\u793a\u6570\u503c\u5927\u5c0f\u3002 \u5f53\u7136\uff0c\u4e0a\u8ff0\u516c\u5f0f\u4e0d\u662f\u552f\u4e00\u751f\u6210\u4f4d\u7f6e\u7f16\u7801\u5411\u91cf\u7684\u65b9\u6cd5\u3002\u4f46\u8fd9\u79cd\u65b9\u6cd5\u7684\u4f18\u70b9\u662f\uff1a\u53ef\u4ee5\u6269\u5c55\u5230\u672a\u77e5\u7684\u5e8f\u5217\u957f\u5ea6\u3002\u4f8b\u5982\uff1a\u5f53\u6211\u4eec\u7684\u6a21\u578b\u9700\u8981\u7ffb\u8bd1\u4e00\u4e2a\u53e5\u5b50\uff0c\u800c\u8fd9\u4e2a\u53e5\u5b50\u7684\u957f\u5ea6\u5927\u4e8e\u8bad\u7ec3\u96c6\u4e2d\u6240\u6709\u53e5\u5b50\u7684\u957f\u5ea6\uff0c\u8fd9\u65f6\uff0c\u8fd9\u79cd\u4f4d\u7f6e\u7f16\u7801\u7684\u65b9\u6cd5\u4e5f\u53ef\u4ee5\u751f\u6210\u4e00\u6837\u957f\u7684\u4f4d\u7f6e\u7f16\u7801\u5411\u91cf\u3002 \u7f16\u7801\u5668 \u00b6 \u7f16\u7801\u90e8\u5206\u7684\u8f93\u5165\u6587\u672c\u5e8f\u5217\u7ecf\u8fc7\u8f93\u5165\u5904\u7406\u4e4b\u540e\u5f97\u5230\u4e86\u4e00\u4e2a\u5411\u91cf\u5e8f\u5217\uff0c\u8fd9\u4e2a\u5411\u91cf\u5e8f\u5217\u5c06\u88ab\u9001\u5165\u7b2c1\u5c42\u7f16\u7801\u5668\uff0c\u7b2c1\u5c42\u7f16\u7801\u5668\u8f93\u51fa\u7684\u540c\u6837\u662f\u4e00\u4e2a\u5411\u91cf\u5e8f\u5217\uff0c\u518d\u63a5\u7740\u9001\u5165\u4e0b\u4e00\u5c42\u7f16\u7801\u5668\uff1a\u7b2c1\u5c42\u7f16\u7801\u5668\u7684\u8f93\u5165\u662f\u878d\u5408\u4f4d\u7f6e\u5411\u91cf\u7684\u8bcd\u5411\u91cf\uff0c\u66f4\u4e0a\u5c42\u7f16\u7801\u5668\u7684\u8f93\u5165\u5219\u662f\u4e0a\u4e00\u5c42\u7f16\u7801\u5668\u7684\u8f93\u51fa\u3002 \u5404\u4e2a\u8bcd\u5411\u91cf\u5747\u8fdb\u5165\u7f16\u7801\u5668\u7684\u4e24\u4e2a\u5b50\u5c42\uff0c self-attention \u5c42\u4e2d\u5404\u4e2a\u8bcd\u5411\u91cf\u7684\u8def\u5f84\u5177\u6709\u4e00\u5b9a\u5173\u8054\uff0c\u800c FFNN \u5c42\u4e2d\u5404\u4e2a\u8bcd\u5411\u91cf\u53c2\u4e0e\u7684\u8ba1\u7b97\u8fc7\u7a0b\u72ec\u7acb\u3002 self-attention \u4f7f\u5f97\u6a21\u578b\u5728\u5904\u7406\u4e00\u4e2a\u8bcd\u5411\u91cf\u65f6\uff0c\u80fd\u591f\u5c06\u5176\u4e0e\u76f8\u5173\u7684\u8bcd\u5173\u8054\u8d77\u6765\uff0c\u4ee5\u66f4\u597d\u5730\u5bf9\u8be5\u8bcd\u5411\u91cf\u7f16\u7801\u3002 RNN \u901a\u8fc7\u7ef4\u62a4\u9690\u85cf\u72b6\u6001\u4ee5\u5c06\u5148\u524d\u5904\u7406\u7684\u8bcd\u5411\u91cf\u540c\u5f53\u524d\u8bcd\u5411\u91cf\u5408\u5e76\uff0ctransformer \u5219\u4f7f\u7528 self-attention \u5c06\u5bf9\u76f8\u5173\u8bcd\u7684\u201c\u7406\u89e3\u201d\u878d\u5165\u5f53\u524d\u5904\u7406\u7684\u8bcd\u3002 Self-Attention \u5c42 \u00b6 \u4e3a\u6bcf\u4e2a\u8bcd\u5411\u91cf\u521b\u5efa\u4e09\u4e2a\u5411\u91cf\uff1a Query \u3001 Key \u3001 Value \u3002\u8fd9\u4e09\u4e2a\u5411\u91cf\u662f\u901a\u8fc7\u5c06\u6bcf\u4e2a\u8bcd\u5411\u91cf\u4e58\u4ee5\u4e09\u4e2a\u5e26\u8bad\u7ec3\u7684\u77e9\u9635\u521b\u5efa\u7684\uff08\u5bf9\u540e\u9762\u7684\u7f16\u7801\u5668\uff0c\u5219\u662f\u4e0a\u4e00\u4e2a\u7f16\u7801\u5668\u7684\u8f93\u51fa\u4e58\u4ee5\u4e09\u4e2a\u65b0\u7684\u5f85\u8bad\u7ec3\u77e9\u9635\uff09\u3002 \u8ba1\u7b97\u5f53\u524d\u8bcd\u5411\u91cf\u4e0e\u8f93\u5165\u53e5\u5b50\u6240\u6709\u8bcd\u5411\u91cf\u7684\u5206\u6570\uff0c\u5206\u6570\u4f1a\u51b3\u5b9a\u5c06\u591a\u5c11\u6ce8\u610f\u529b\u653e\u5728\u8fd9\u4e9b\u8bcd\u4e0a\u3002\u5206\u6570\u901a\u8fc7\u5c06\u5f53\u524d\u8bcd\u5411\u91cf\u5bf9\u5e94\u7684 Query \u5411\u91cf\u4e0e\u5404\u4e2a\u5355\u8bcd\u7684 key \u5411\u91cf\u70b9\u79ef\u5f97\u5230\uff0c\u7b2c\u4e00\u4e2a\u5206\u6570\u662f q1 \u4e0e k1 \u70b9\u79ef\uff0c\u7b2c\u4e8c\u4e2a\u5206\u6570\u662f q1 \u4e0e k2 \u70b9\u79ef\uff0c\u4ee5\u6b64\u7c7b\u63a8\u3002 \u5c06\u5206\u6570\u9664\u4ee5 Query \u5411\u91cf\u957f\u5ea6\u7684\u5e73\u65b9\u6839\u3002\u6b64\u6b65\u9aa4\u63d0\u9ad8\u4e86\u68af\u5ea6\u7684\u7a33\u5b9a\u6027\u3002 \u901a\u8fc7 softmax \u5c06\u5206\u6570\u5f52\u4e00\u5316\u3002 \u5f52\u4e00\u5316\u7684\u5f97\u5206\u4e0e\u5404\u4e2a\u5355\u8bcd\u7684 Value \u5411\u91cf\u76f8\u4e58\uff0c\u6b64\u505a\u6cd5\u7684\u76f4\u89c9\u662f\u4fdd\u6301\u60f3\u8981\u5173\u6ce8\u7684\u5355\u8bcd\u7684\u503c\u4e0d\u53d8\uff0c\u800c\u4e14\u6d88\u9664\u4e0d\u76f8\u5173\u7684\u5355\u8bcd\uff0c\u5373\u5bf9\u5404\u4e2a\u5355\u8bcd\u7684 Value \u5411\u91cf\u52a0\u6743\u3002 \u5bf9\u6240\u6709\u52a0\u6743\u540e\u7684 Value \u5411\u91cf\u6c42\u548c\uff0c\u5373\u4e3a\u5f53\u524d\u8bcd\u5411\u91cf\u5728 self-attention \u5c42\u7684\u8f93\u51fa\u3002 \u4e0a\u8ff0\u8fc7\u7a0b\u7684\u77e9\u9635\u5f62\u5f0f\u4e3a\uff1a \u591a\u5934\u6ce8\u610f\u529b \u00b6 \u8fdb\u4e00\u6b65\u4f18\u5316 Self-attention \uff1a\u4f7f\u7528 multi-headed attention \u3002\u63d0\u9ad8\u4e86\u6a21\u578b\u5173\u6ce8\u4e0d\u540c\u4f4d\u7f6e\u7684\u80fd\u529b\uff0c\u4e3a\u6ce8\u610f\u529b\u5c42\u63d0\u4f9b\u4e86\u591a\u4e2a\u8868\u793a\u5b50\u7a7a\u95f4\uff08 representation subspaces \uff09\u2014\u2014 \u53ef\u4ee5\u6709\u591a\u7ec4 Query \u3001 Key \u3001 Value \u6743\u91cd\u77e9\u9635\uff0c\u6bcf\u4e00\u7ec4\u90fd\u662f\u968f\u673a\u521d\u59cb\u5316\uff0c\u56e0\u6b64\u8bad\u7ec3\u5b8c\u6210\u540e\u6bcf\u4e00\u7ec4\u90fd\u53ef\u4ee5\u5c06\u8f93\u5165\u6295\u5c04\u5230\u4e0d\u540c\u7684\u5b50\u7a7a\u95f4\uff0c\u5177\u4f53\u53ef\u4ee5\u7c7b\u6bd4 CNN \u4e2d\u7684\u591a\u4e2a\u5377\u79ef\u6838\u3002 \u6700\u7ec8\u5c06\u5f97\u5230\u591a\u4e2a\u5f53\u524d\u8bcd\u5411\u91cf\u5728 self-attention \u4e0b\u7684\u8f93\u51fa\u5411\u91cf\uff0c\u5373\u8f93\u5165\u53e5\u5b50\u7ecf\u8fc7 self-attention \u540e\uff0c\u5c06\u6709\u591a\u4e2a\u8f93\u51fa\u77e9\u9635\u3002 \u7531\u4e8e FFNN \u5b50\u5c42\u9700\u8981\u4e00\u4e2a\u77e9\u9635\uff08\u6bcf\u4e2a\u5355\u8bcd\u7531\u4e00\u4e2a\u5411\u91cf\u8868\u793a\uff09\u4f5c\u4e3a\u8f93\u5165\uff0c\u56e0\u6b64\u9700\u8981\u5c06\u4ee5\u4e0a\u8f93\u51fa\u77e9\u9635\u4e0e\u4e00\u4e2a\u989d\u5916\u7684\u5f85\u8bad\u7ec3\u6743\u91cd\u77e9\u9635\u76f8\u4e58\u3002 \u4e00\u4e2a\u591a\u5934\u6ce8\u610f\u529b\u7684\u4f8b\u5b50\uff1a Attention \u4ee3\u7801\u5b9e\u4f8b \u00b6 \u5f20\u91cf\u7684\u7b2c1\u7ef4\u662f batch size\uff0c\u7b2c 2 \u7ef4\u662f\u53e5\u5b50\u957f\u5ea6\u3002 class MultiheadAttention ( nn . Module ): # n_heads\uff1a\u591a\u5934\u6ce8\u610f\u529b\u7684\u6570\u91cf # hid_dim\uff1a\u6bcf\u4e2a\u8bcd\u8f93\u51fa\u7684\u5411\u91cf\u7ef4\u5ea6 def __init__ ( self , hid_dim , n_heads , dropout ): super ( MultiheadAttention , self ) . __init__ () self . hid_dim = hid_dim self . n_heads = n_heads # \u5f3a\u5236 hid_dim \u5fc5\u987b\u6574\u9664 h assert hid_dim % n_heads == 0 # \u5b9a\u4e49 W_q \u77e9\u9635 self . w_q = nn . Linear ( hid_dim , hid_dim ) # \u5b9a\u4e49 W_k \u77e9\u9635 self . w_k = nn . Linear ( hid_dim , hid_dim ) # \u5b9a\u4e49 W_v \u77e9\u9635 self . w_v = nn . Linear ( hid_dim , hid_dim ) self . fc = nn . Linear ( hid_dim , hid_dim ) self . do = nn . Dropout ( dropout ) # \u7f29\u653e self . scale = torch . sqrt ( torch . FloatTensor ([ hid_dim // n_heads ])) def forward ( self , query , key , value , mask = None ): # \u6ce8\u610f Q\uff0cK\uff0cV\u7684\u5728\u53e5\u5b50\u957f\u5ea6\u8fd9\u4e00\u4e2a\u7ef4\u5ea6\u7684\u6570\u503c\u53ef\u4ee5\u4e00\u6837\uff0c\u53ef\u4ee5\u4e0d\u4e00\u6837\u3002 # K: [64,10,300], \u5047\u8bbebatch_size \u4e3a 64\uff0c\u6709 10 \u4e2a\u8bcd\uff0c\u6bcf\u4e2a\u8bcd\u7684 Query \u5411\u91cf\u662f 300 \u7ef4 # V: [64,10,300], \u5047\u8bbebatch_size \u4e3a 64\uff0c\u6709 10 \u4e2a\u8bcd\uff0c\u6bcf\u4e2a\u8bcd\u7684 Query \u5411\u91cf\u662f 300 \u7ef4 # Q: [64,12,300], \u5047\u8bbebatch_size \u4e3a 64\uff0c\u6709 12 \u4e2a\u8bcd\uff0c\u6bcf\u4e2a\u8bcd\u7684 Query \u5411\u91cf\u662f 300 \u7ef4 bsz = query . shape [ 0 ] Q = self . w_q ( query ) K = self . w_k ( key ) V = self . w_v ( value ) # \u8fd9\u91cc\u628a K Q V \u77e9\u9635\u62c6\u5206\u4e3a\u591a\u7ec4\u6ce8\u610f\u529b # \u6700\u540e\u4e00\u7ef4\u5c31\u662f\u662f\u7528 self.hid_dim // self.n_heads \u6765\u5f97\u5230\u7684\uff0c\u8868\u793a\u6bcf\u7ec4\u6ce8\u610f\u529b\u7684\u5411\u91cf\u957f\u5ea6, \u6bcf\u4e2a head \u7684\u5411\u91cf\u957f\u5ea6\u662f\uff1a300/6=50 # 64 \u8868\u793a batch size\uff0c6 \u8868\u793a\u6709 6\u7ec4\u6ce8\u610f\u529b\uff0c10 \u8868\u793a\u6709 10 \u8bcd\uff0c50 \u8868\u793a\u6bcf\u7ec4\u6ce8\u610f\u529b\u7684\u8bcd\u7684\u5411\u91cf\u957f\u5ea6 # K: [64,10,300] \u62c6\u5206\u591a\u7ec4\u6ce8\u610f\u529b -> [64,10,6,50] \u8f6c\u7f6e\u5f97\u5230 -> [64,6,10,50] # V: [64,10,300] \u62c6\u5206\u591a\u7ec4\u6ce8\u610f\u529b -> [64,10,6,50] \u8f6c\u7f6e\u5f97\u5230 -> [64,6,10,50] # Q: [64,12,300] \u62c6\u5206\u591a\u7ec4\u6ce8\u610f\u529b -> [64,12,6,50] \u8f6c\u7f6e\u5f97\u5230 -> [64,6,12,50] # \u8f6c\u7f6e\u662f\u4e3a\u4e86\u628a\u6ce8\u610f\u529b\u7684\u6570\u91cf 6 \u653e\u5230\u524d\u9762\uff0c\u628a 10 \u548c 50 \u653e\u5230\u540e\u9762\uff0c\u65b9\u4fbf\u4e0b\u9762\u8ba1\u7b97 Q = Q . view ( bsz , - 1 , self . n_heads , self . hid_dim // self . n_heads ) . permute ( 0 , 2 , 1 , 3 ) K = K . view ( bsz , - 1 , self . n_heads , self . hid_dim // self . n_heads ) . permute ( 0 , 2 , 1 , 3 ) V = V . view ( bsz , - 1 , self . n_heads , self . hid_dim // self . n_heads ) . permute ( 0 , 2 , 1 , 3 ) # \u7b2c 1 \u6b65\uff1aQ \u4e58\u4ee5 K\u7684\u8f6c\u7f6e\uff0c\u9664\u4ee5scale # [64,6,12,50] * [64,6,50,10] = [64,6,12,10] # attention\uff1a[64,6,12,10] attention = torch . matmul ( Q , K . permute ( 0 , 1 , 3 , 2 )) / self . scale # \u5982\u679c mask \u4e0d\u4e3a\u7a7a\uff0c\u90a3\u4e48\u5c31\u628a mask \u4e3a 0 \u7684\u4f4d\u7f6e\u7684 attention \u5206\u6570\u8bbe\u7f6e\u4e3a -1e10\uff0c\u8fd9\u91cc\u7528\u201c0\u201d\u6765\u6307\u793a\u54ea\u4e9b\u4f4d\u7f6e\u7684\u8bcd\u5411\u91cf\u4e0d\u80fd\u88abattention\u5230\uff0c\u6bd4\u5982padding\u4f4d\u7f6e\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u7528\u201c1\u201d\u6216\u8005\u5176\u4ed6\u6570\u5b57\u6765\u6307\u793a\uff0c\u4e3b\u8981\u8bbe\u8ba1\u4e0b\u97622\u884c\u4ee3\u7801\u7684\u6539\u52a8\u3002 if mask is not None : attention = attention . masked_fill ( mask == 0 , - 1e10 ) # \u7b2c 2 \u6b65\uff1a\u8ba1\u7b97\u4e0a\u4e00\u6b65\u7ed3\u679c\u7684 softmax\uff0c\u518d\u7ecf\u8fc7 dropout\uff0c\u5f97\u5230 attention\u3002 # \u6ce8\u610f\uff0c\u8fd9\u91cc\u662f\u5bf9\u6700\u540e\u4e00\u7ef4\u505a softmax\uff0c\u4e5f\u5c31\u662f\u5728\u8f93\u5165\u5e8f\u5217\u7684\u7ef4\u5ea6\u505a softmax # attention: [64,6,12,10] attention = self . do ( torch . softmax ( attention , dim =- 1 )) # \u7b2c\u4e09\u6b65\uff0cattention\u7ed3\u679c\u4e0eV\u76f8\u4e58\uff0c\u5f97\u5230\u591a\u5934\u6ce8\u610f\u529b\u7684\u7ed3\u679c # [64,6,12,10] * [64,6,10,50] = [64,6,12,50] # x: [64,6,12,50] x = torch . matmul ( attention , V ) # \u56e0\u4e3a query \u6709 12 \u4e2a\u8bcd\uff0c\u6240\u4ee5\u628a 12 \u653e\u5230\u524d\u9762\uff0c\u628a 50 \u548c 6 \u653e\u5230\u540e\u9762\uff0c\u65b9\u4fbf\u4e0b\u9762\u62fc\u63a5\u591a\u7ec4\u7684\u7ed3\u679c # x: [64,6,12,50] \u8f6c\u7f6e-> [64,12,6,50] x = x . permute ( 0 , 2 , 1 , 3 ) . contiguous () # \u8fd9\u91cc\u7684\u77e9\u9635\u8f6c\u6362\u5c31\u662f\uff1a\u628a\u591a\u7ec4\u6ce8\u610f\u529b\u7684\u7ed3\u679c\u62fc\u63a5\u8d77\u6765 # \u6700\u7ec8\u7ed3\u679c\u5c31\u662f [64,12,300] # x: [64,12,6,50] -> [64,12,300] x = x . view ( bsz , - 1 , self . n_heads * ( self . hid_dim // self . n_heads )) x = self . fc ( x ) return x # batch_size \u4e3a 64\uff0c\u6709 12 \u4e2a\u8bcd\uff0c\u6bcf\u4e2a\u8bcd\u7684 Query \u5411\u91cf\u662f 300 \u7ef4 query = torch . rand ( 64 , 12 , 300 ) # batch_size \u4e3a 64\uff0c\u6709 12 \u4e2a\u8bcd\uff0c\u6bcf\u4e2a\u8bcd\u7684 Key \u5411\u91cf\u662f 300 \u7ef4 key = torch . rand ( 64 , 10 , 300 ) # batch_size \u4e3a 64\uff0c\u6709 10 \u4e2a\u8bcd\uff0c\u6bcf\u4e2a\u8bcd\u7684 Value \u5411\u91cf\u662f 300 \u7ef4 value = torch . rand ( 64 , 10 , 300 ) attention = MultiheadAttention ( hid_dim = 300 , n_heads = 6 , dropout = 0.1 ) output = attention ( query , key , value ) ## output: torch.Size([64, 12, 300]) print ( output . shape ) \u6b8b\u5dee\u8fde\u63a5 \u00b6 \u7f16\u7801\u5668\u4e2d\u6bcf\u4e2a\u5b50\u5c42\u90fd\u8fdb\u884c\u6b8b\u5dee\u8fde\u63a5\uff0c\u5e76\u5f52\u4e00\u5316\u3002 \u5c06 Self-Attention \u5c42\u7684\u5c42\u6807\u51c6\u5316\uff08layer-normalization\uff09\u548c\u6d89\u53ca\u7684\u5411\u91cf\u8ba1\u7b97\u7ec6\u8282\u90fd\u8fdb\u884c\u53ef\u89c6\u5316\uff0c\u5982\u4e0b\u6240\u793a\uff1a \u7f16\u7801\u5668\u548c\u548c\u89e3\u7801\u5668\u7684\u5b50\u5c42\u91cc\u9762\u90fd\u6709\u5c42\u6807\u51c6\u5316\uff08layer-normalization\uff09\u3002\u5047\u8bbe\u4e00\u4e2a Transformer \u662f\u7531 2 \u5c42\u7f16\u7801\u5668\u548c\u4e24\u5c42\u89e3\u7801\u5668\u7ec4\u6210\u7684\uff0c\u5c06\u5168\u90e8\u5185\u90e8\u7ec6\u8282\u5c55\u793a\u8d77\u6765\u5982\u4e0b\u56fe\u6240\u793a\u3002 \u89e3\u7801\u5668 \u00b6 \u7f16\u7801\u5668\u4e00\u822c\u6709\u591a\u5c42\uff0c\u7b2c\u4e00\u4e2a\u7f16\u7801\u5668\u7684\u8f93\u5165\u662f\u4e00\u4e2a\u5e8f\u5217\u6587\u672c\uff0c\u6700\u540e\u4e00\u4e2a\u7f16\u7801\u5668\u8f93\u51fa\u662f\u4e00\u7ec4\u5e8f\u5217\u5411\u91cf\uff0c\u8fd9\u7ec4\u5e8f\u5217\u5411\u91cf\u4f1a\u4f5c\u4e3a\u89e3\u7801\u5668\u7684 K\u3001V \u8f93\u5165\uff0c\u5176\u4e2d K=V=\u89e3\u7801\u5668\u8f93\u51fa\u7684\u5e8f\u5217\u5411\u91cf\u8868\u793a\u3002\u8fd9\u4e9b\u6ce8\u610f\u529b\u5411\u91cf\u5c06\u4f1a\u8f93\u5165\u5230\u6bcf\u4e2a\u89e3\u7801\u5668\u7684 Encoder-Decoder Attention \u5c42\uff0c\u8fd9\u6709\u52a9\u4e8e\u89e3\u7801\u5668\u628a\u6ce8\u610f\u529b\u96c6\u4e2d\u5230\u8f93\u5165\u5e8f\u5217\u7684\u5408\u9002\u4f4d\u7f6e\uff0c\u5982\u4e0b\u56fe\u6240\u793a\u3002 \u89e3\u7801\uff08decoding\uff09\u9636\u6bb5\u7684\u6bcf\u4e00\u4e2a\u65f6\u95f4\u6b65\u90fd\u8f93\u51fa\u4e00\u4e2a\u7ffb\u8bd1\u540e\u7684\u5355\u8bcd\uff08\u8fd9\u91cc\u7684\u4f8b\u5b50\u662f\u82f1\u8bed\u7ffb\u8bd1\uff09\uff0c\u89e3\u7801\u5668\u5f53\u524d\u65f6\u95f4\u6b65\u7684\u8f93\u51fa\u53c8\u91cd\u65b0\u4f5c\u4e3a\u8f93\u51fa Q \u548c\u7f16\u7801\u5668\u7684\u8f93\u51fa K\u3001V \u5171\u540c\u4f5c\u4e3a\u4e0b\u4e00\u4e2a\u65f6\u95f4\u6b65\u89e3\u7801\u5668\u7684\u8f93\u5165\u3002\u7136\u540e\u91cd\u590d\u8fd9\u4e2a\u8fc7\u7a0b\uff0c\u76f4\u5230\u8f93\u51fa\u4e00\u4e2a\u7ed3\u675f\u7b26\u3002 \u89e3\u7801\u5668\u4e2d\u7684 Self Attention \u5c42\uff0c\u548c\u7f16\u7801\u5668\u4e2d\u7684 Self Attention \u5c42\u7684\u533a\u522b\uff1a \u5728\u89e3\u7801\u5668\u91cc\uff0cSelf Attention \u5c42\u53ea\u5141\u8bb8\u5173\u6ce8\u5230\u8f93\u51fa\u5e8f\u5217\u4e2d\u65e9\u4e8e\u5f53\u524d\u4f4d\u7f6e\u4e4b\u524d\u7684\u5355\u8bcd\u3002\u5177\u4f53\u505a\u6cd5\u662f\uff1a\u5728 Self Attention \u5206\u6570\u7ecf\u8fc7 Softmax \u5c42\u4e4b\u524d\uff0c\u5c4f\u853d\u5f53\u524d\u4f4d\u7f6e\u4e4b\u540e\u7684\u90a3\u4e9b\u4f4d\u7f6e\uff08\u5c06attention score\u8bbe\u7f6e\u6210-inf\uff09\u3002 \u89e3\u7801\u5668 Attention\u5c42\u662f\u4f7f\u7528\u524d\u4e00\u5c42\u7684\u8f93\u51fa\u6765\u6784\u9020Query \u77e9\u9635\uff0c\u800cKey\u77e9\u9635\u548c Value\u77e9\u9635\u6765\u81ea\u4e8e\u7f16\u7801\u5668\u6700\u7ec8\u7684\u8f93\u51fa\u3002 Reference \u00b6 learn-nlp-with-transformers 10\u5206\u949f\u5e26\u4f60\u6df1\u5165\u7406\u89e3Transformer\u539f\u7406\u53ca\u5b9e\u73b0 Transformer\u539f\u7406\u8be6\u89e3 transformer \u539f\u7406","title":"Transformer"},{"location":"llm/transformer/transformer/#transformer","text":"\u7ea6 2243 \u4e2a\u5b57 84 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f Abstract \u300aAttention is all you need\u300b\u8fd9\u662f\u8c37\u6b4c\u56e2\u961f\u57282017\u5e74\u53d1\u8868\u7684\u8bba\u6587\uff0c\u4e5f\u662f\u9996\u6b21\u63d0\u51faTransformer\u3002 \u76f4\u63a5\u57fa\u4e8eSelf-Attention\u7ed3\u6784\uff0c\u53d6\u4ee3\u4e86\u4e4b\u524dNLP\u4efb\u52a1\u4e2d\u5e38\u7528\u7684RNN\u795e\u7ecf\u7f51\u7edc\u7ed3\u6784\u3002 \u4e0eRNN\u8fd9\u7c7b\u795e\u7ecf\u7f51\u7edc\u7ed3\u6784\u76f8\u6bd4\uff0cTransformer\u4e00\u4e2a\u5de8\u5927\u7684\u4f18\u70b9\u662f\uff1a**\u6a21\u578b\u5728\u5904\u7406\u5e8f\u5217\u8f93\u5165\u65f6\uff0c\u53ef\u4ee5\u5bf9\u6574\u4e2a\u5e8f\u5217\u8f93\u5165\u8fdb\u884c\u5e76\u884c\u8ba1\u7b97\uff0c\u4e0d\u9700\u8981\u6309\u7167\u65f6\u95f4\u6b65\u5faa\u73af\u9012\u5f52\u5904\u7406\u8f93\u5165\u5e8f\u5217\u3002","title":"Transformer"},{"location":"llm/transformer/transformer/#_1","text":"transformer \u603b\u4f53\u4e3a\u4e00\u4e2a\u7f16\u7801\u7ec4\u4ef6\u3001\u89e3\u7801\u7ec4\u4ef6\u4ee5\u53ca\u4e8c\u8005\u4e4b\u95f4\u8fde\u63a5\u3002 \u7f16\u7801\u90e8\u5206\u548c\u89e3\u7801\u90e8\u5206\u90fd\u4e3a\u7f16\u7801\u5668\u3001\u89e3\u7801\u5668\u7684\u5806\u53e0\uff0c\u6700\u540e\u4e00\u5c42\u7f16\u7801\u5668\u7684\u8f93\u51fa\u662f\u5404\u4e2a\u89e3\u7801\u5668\u7684\u8f93\u5165\u4e4b\u4e00\u3002\u7b2c\u4e00\u4e2a\u7f16\u7801\u5668\u7684\u8f93\u5165\u4e3a\u5355\u8bcd\u7684\u5d4c\u5165\u5411\u91cf\uff0c\u540e\u9762\u7f16\u7801\u5668\u8f93\u5165\u4e3a\u524d\u4e00\u5c42\u7684\u8f93\u51fa\u3002 \u7f16\u7801\u5668\u5747\u7531\u4e24\u4e2a\u5b50\u5c42\u7ec4\u6210\uff1a self-attention \u4e0e feed forward neural network \u3002 self-attention \u7528\u4e8e\u5e2e\u52a9\u7f16\u7801\u5668\u5728\u7f16\u7801\u7279\u5b9a\u5355\u8bcd\u65f6\u67e5\u770b\u8f93\u5165\u4e2d\u7684\u5176\u4ed6\u5355\u8bcd\u3002\u89e3\u7801\u5668\u4e5f\u6709\u8fd9\u4e24\u4e2a\u5b50\u5c42\uff0c\u4e2d\u95f4\u6709\u4e00\u4e2a\u6ce8\u610f\u529b\u5c42\uff0c\u5e2e\u52a9\u89e3\u7801\u5668\u67e5\u770b\u8f93\u5165\u53e5\u5b50\u7684\u76f8\u5173\u90e8\u5206\u3002","title":"\u6574\u4f53\u67b6\u6784"},{"location":"llm/transformer/transformer/#_2","text":"","title":"\u8f93\u5165\u5904\u7406"},{"location":"llm/transformer/transformer/#_3","text":"\u548c\u5e38\u89c1\u7684 NLP \u4efb\u52a1\u4e00\u6837\uff0c\u9996\u5148\u4f1a\u4f7f\u7528\u8bcd\u5d4c\u5165\u7b97\u6cd5\uff08embedding algorithm\uff09\uff0c\u5c06\u8f93\u5165\u6587\u672c\u5e8f\u5217\u7684\u6bcf\u4e2a\u8bcd\u8f6c\u6362\u4e3a\u4e00\u4e2a\u8bcd\u5411\u91cf\u3002\u5b9e\u9645\u5e94\u7528\u4e2d\u7684\u5411\u91cf\u4e00\u822c\u4e3a 256 \u6216 512 \u7ef4\u3002 \u8f93\u5165\u5e8f\u5217\u6bcf\u4e2a\u5355\u8bcd\u88ab\u8f6c\u5316\u6210\u8bcd\u5411\u91cf\u8868\u793a\u8fd8\u5c06\u52a0\u4e0a\u4f4d\u7f6e\u5411\u91cf\u6765\u5f97\u5230\u8be5\u8bcd\u7684\u6700\u7ec8\u5411\u91cf\u8868\u793a\u3002","title":"\u8bcd\u5411\u91cf"},{"location":"llm/transformer/transformer/#_4","text":"\u9996\u5148\u4e3a\u4ec0\u4e48\u9700\u8981\u4f4d\u7f6e\u7f16\u7801\uff1f\u6211\u4eec\u5bf9\u4e8eRNN\u5728\u5904\u7406\u6587\u672c\u65f6\uff0c\u7531\u4e8e\u5929\u7136\u7684\u987a\u5e8f\u8f93\u5165\uff0c\u987a\u5e8f\u5904\u7406\uff0c\u5f53\u524d\u8f93\u51fa\u8981\u7b49\u4e0a\u4e00\u6b65\u8f93\u51fa\u5904\u7406\u5b8c\u540e\u624d\u80fd\u8fdb\u884c\uff0c\u56e0\u6b64\u4e0d\u4f1a\u9020\u6210\u6587\u672c\u7684\u5b57\u8bcd\u5728\u987a\u5e8f\u4e0a\u6216\u8005\u5148\u540e\u5173\u7cfb\u51fa\u73b0\u95ee\u9898\u3002 \u4f46\u5bf9\u4e8eTransformer\u6765\u8bf4\uff0c\u7531\u4e8e\u5176\u5728\u5904\u7406\u65f6\u662f\u5e76\u884c\u6267\u884c\uff0c\u867d\u7136\u52a0\u5feb\u4e86\u901f\u5ea6\uff0c\u4f46\u662f\u5ffd\u7565\u4e86\u8bcd\u5b57\u4e4b\u95f4\u7684\u524d\u540e\u5173\u7cfb\u6216\u8005\u5148\u540e\u987a\u5e8f\u3002\u540c\u65f6Transformer\u57fa\u4e8eSelf-Attention\u673a\u5236\uff0c\u800cself-attention\u4e0d\u80fd\u83b7\u53d6\u5b57\u8bcd\u7684\u4f4d\u7f6e\u4fe1\u606f\uff0c\u5373\u4f7f\u6253\u4e71\u4e00\u53e5\u8bdd\u4e2d\u5b57\u8bcd\u7684\u4f4d\u7f6e\uff0c\u6bcf\u4e2a\u8bcd\u8fd8\u662f\u80fd\u4e0e\u5176\u4ed6\u8bcd\u4e4b\u95f4\u8ba1\u7b97\u51faattention\u503c\uff0c\u56e0\u6b64\u6211\u4eec\u9700\u8981\u4e3a\u6bcf\u4e00\u4e2a\u8bcd\u5411\u91cf\u6dfb\u52a0\u4f4d\u7f6e\u7f16\u7801\u3002 Transformer \u6a21\u578b\u5bf9\u6bcf\u4e2a\u8f93\u5165\u7684\u8bcd\u5411\u91cf\u90fd\u52a0\u4e0a\u4e86\u4e00\u4e2a\u4f4d\u7f6e\u5411\u91cf\u3002\u8fd9\u4e9b\u5411\u91cf\u6709\u52a9\u4e8e\u786e\u5b9a\u6bcf\u4e2a\u5355\u8bcd\u7684\u4f4d\u7f6e\u7279\u5f81\uff0c\u6216\u8005\u53e5\u5b50\u4e2d\u4e0d\u540c\u5355\u8bcd\u4e4b\u95f4\u7684\u8ddd\u79bb\u7279\u5f81\u3002\u8bcd\u5411\u91cf\u52a0\u4e0a\u4f4d\u7f6e\u5411\u91cf\u80cc\u540e\u7684\u76f4\u89c9\uff1a \u5c06\u8fd9\u4e9b\u8868\u793a\u4f4d\u7f6e\u7684\u5411\u91cf\u6dfb\u52a0\u5230\u8bcd\u5411\u91cf\u4e2d\uff0c\u5f97\u5230\u7684\u65b0\u5411\u91cf\uff0c\u53ef\u4ee5\u4e3a\u6a21\u578b\u63d0\u4f9b\u66f4\u591a\u6709\u610f\u4e49\u7684\u4fe1\u606f\uff0c\u6bd4\u5982\u8bcd\u7684\u4f4d\u7f6e\uff0c\u8bcd\u4e4b\u95f4\u7684\u8ddd\u79bb\u7b49\u3002 \u90a3\u4e48\u5e26\u6709\u4f4d\u7f6e\u7f16\u7801\u4fe1\u606f\u7684\u5411\u91cf\u5230\u5e95\u9075\u5faa\u4ec0\u4e48\u6a21\u5f0f\uff1f\u539f\u59cb\u8bba\u6587\u4e2d\u7ed9\u51fa\u7684\u8bbe\u8ba1\u8868\u8fbe\u5f0f\u4e3a\uff1a \\[ PE_{(pos,2i)} = sin(pos / 10000^{2i/d_{\\text{model}}}) \\\\ PE_{(pos,2i+1)} = cos(pos / 10000^{2i/d_{\\text{model}}}) \\] \u4e0a\u9762\u8868\u8fbe\u5f0f\u4e2d\u7684 \\(pos\\) \u4ee3\u8868\u8bcd\u7684\u4f4d\u7f6e\uff0c \\(d_{model}\\) \u4ee3\u8868\u4f4d\u7f6e\u5411\u91cf\u7684\u7ef4\u5ea6\uff0c \\(i \\in [0, d_{model})\\) \u4ee3\u8868\u4f4d\u7f6e \\(d_{model}\\) \u7ef4\u4f4d\u7f6e\u5411\u91cf\u7b2c \\(i\\) \u7ef4\u3002\u4e8e\u662f\u6839\u636e\u4e0a\u8ff0\u516c\u5f0f\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u7b2c \\(pos\\) \u4f4d\u7f6e\u7684 \\(d_{model}\\) \u7ef4\u4f4d\u7f6e\u5411\u91cf\u3002\u5728\u4e0b\u56fe\u4e2d\uff0c\u6211\u4eec\u753b\u51fa\u4e86\u4e00\u79cd\u4f4d\u7f6e\u5411\u91cf\u5728\u7b2c4\u30015\u30016\u30017\u7ef4\u5ea6\u3001\u4e0d\u540c\u4f4d\u7f6e\u7684\u7684\u6570\u503c\u5927\u5c0f\u3002\u6a2a\u5750\u6807\u8868\u793a\u4f4d\u7f6e\u4e0b\u6807\uff0c\u7eb5\u5750\u6807\u8868\u793a\u6570\u503c\u5927\u5c0f\u3002 \u5f53\u7136\uff0c\u4e0a\u8ff0\u516c\u5f0f\u4e0d\u662f\u552f\u4e00\u751f\u6210\u4f4d\u7f6e\u7f16\u7801\u5411\u91cf\u7684\u65b9\u6cd5\u3002\u4f46\u8fd9\u79cd\u65b9\u6cd5\u7684\u4f18\u70b9\u662f\uff1a\u53ef\u4ee5\u6269\u5c55\u5230\u672a\u77e5\u7684\u5e8f\u5217\u957f\u5ea6\u3002\u4f8b\u5982\uff1a\u5f53\u6211\u4eec\u7684\u6a21\u578b\u9700\u8981\u7ffb\u8bd1\u4e00\u4e2a\u53e5\u5b50\uff0c\u800c\u8fd9\u4e2a\u53e5\u5b50\u7684\u957f\u5ea6\u5927\u4e8e\u8bad\u7ec3\u96c6\u4e2d\u6240\u6709\u53e5\u5b50\u7684\u957f\u5ea6\uff0c\u8fd9\u65f6\uff0c\u8fd9\u79cd\u4f4d\u7f6e\u7f16\u7801\u7684\u65b9\u6cd5\u4e5f\u53ef\u4ee5\u751f\u6210\u4e00\u6837\u957f\u7684\u4f4d\u7f6e\u7f16\u7801\u5411\u91cf\u3002","title":"\u4f4d\u7f6e\u5411\u91cf"},{"location":"llm/transformer/transformer/#_5","text":"\u7f16\u7801\u90e8\u5206\u7684\u8f93\u5165\u6587\u672c\u5e8f\u5217\u7ecf\u8fc7\u8f93\u5165\u5904\u7406\u4e4b\u540e\u5f97\u5230\u4e86\u4e00\u4e2a\u5411\u91cf\u5e8f\u5217\uff0c\u8fd9\u4e2a\u5411\u91cf\u5e8f\u5217\u5c06\u88ab\u9001\u5165\u7b2c1\u5c42\u7f16\u7801\u5668\uff0c\u7b2c1\u5c42\u7f16\u7801\u5668\u8f93\u51fa\u7684\u540c\u6837\u662f\u4e00\u4e2a\u5411\u91cf\u5e8f\u5217\uff0c\u518d\u63a5\u7740\u9001\u5165\u4e0b\u4e00\u5c42\u7f16\u7801\u5668\uff1a\u7b2c1\u5c42\u7f16\u7801\u5668\u7684\u8f93\u5165\u662f\u878d\u5408\u4f4d\u7f6e\u5411\u91cf\u7684\u8bcd\u5411\u91cf\uff0c\u66f4\u4e0a\u5c42\u7f16\u7801\u5668\u7684\u8f93\u5165\u5219\u662f\u4e0a\u4e00\u5c42\u7f16\u7801\u5668\u7684\u8f93\u51fa\u3002 \u5404\u4e2a\u8bcd\u5411\u91cf\u5747\u8fdb\u5165\u7f16\u7801\u5668\u7684\u4e24\u4e2a\u5b50\u5c42\uff0c self-attention \u5c42\u4e2d\u5404\u4e2a\u8bcd\u5411\u91cf\u7684\u8def\u5f84\u5177\u6709\u4e00\u5b9a\u5173\u8054\uff0c\u800c FFNN \u5c42\u4e2d\u5404\u4e2a\u8bcd\u5411\u91cf\u53c2\u4e0e\u7684\u8ba1\u7b97\u8fc7\u7a0b\u72ec\u7acb\u3002 self-attention \u4f7f\u5f97\u6a21\u578b\u5728\u5904\u7406\u4e00\u4e2a\u8bcd\u5411\u91cf\u65f6\uff0c\u80fd\u591f\u5c06\u5176\u4e0e\u76f8\u5173\u7684\u8bcd\u5173\u8054\u8d77\u6765\uff0c\u4ee5\u66f4\u597d\u5730\u5bf9\u8be5\u8bcd\u5411\u91cf\u7f16\u7801\u3002 RNN \u901a\u8fc7\u7ef4\u62a4\u9690\u85cf\u72b6\u6001\u4ee5\u5c06\u5148\u524d\u5904\u7406\u7684\u8bcd\u5411\u91cf\u540c\u5f53\u524d\u8bcd\u5411\u91cf\u5408\u5e76\uff0ctransformer \u5219\u4f7f\u7528 self-attention \u5c06\u5bf9\u76f8\u5173\u8bcd\u7684\u201c\u7406\u89e3\u201d\u878d\u5165\u5f53\u524d\u5904\u7406\u7684\u8bcd\u3002","title":"\u7f16\u7801\u5668"},{"location":"llm/transformer/transformer/#self-attention","text":"\u4e3a\u6bcf\u4e2a\u8bcd\u5411\u91cf\u521b\u5efa\u4e09\u4e2a\u5411\u91cf\uff1a Query \u3001 Key \u3001 Value \u3002\u8fd9\u4e09\u4e2a\u5411\u91cf\u662f\u901a\u8fc7\u5c06\u6bcf\u4e2a\u8bcd\u5411\u91cf\u4e58\u4ee5\u4e09\u4e2a\u5e26\u8bad\u7ec3\u7684\u77e9\u9635\u521b\u5efa\u7684\uff08\u5bf9\u540e\u9762\u7684\u7f16\u7801\u5668\uff0c\u5219\u662f\u4e0a\u4e00\u4e2a\u7f16\u7801\u5668\u7684\u8f93\u51fa\u4e58\u4ee5\u4e09\u4e2a\u65b0\u7684\u5f85\u8bad\u7ec3\u77e9\u9635\uff09\u3002 \u8ba1\u7b97\u5f53\u524d\u8bcd\u5411\u91cf\u4e0e\u8f93\u5165\u53e5\u5b50\u6240\u6709\u8bcd\u5411\u91cf\u7684\u5206\u6570\uff0c\u5206\u6570\u4f1a\u51b3\u5b9a\u5c06\u591a\u5c11\u6ce8\u610f\u529b\u653e\u5728\u8fd9\u4e9b\u8bcd\u4e0a\u3002\u5206\u6570\u901a\u8fc7\u5c06\u5f53\u524d\u8bcd\u5411\u91cf\u5bf9\u5e94\u7684 Query \u5411\u91cf\u4e0e\u5404\u4e2a\u5355\u8bcd\u7684 key \u5411\u91cf\u70b9\u79ef\u5f97\u5230\uff0c\u7b2c\u4e00\u4e2a\u5206\u6570\u662f q1 \u4e0e k1 \u70b9\u79ef\uff0c\u7b2c\u4e8c\u4e2a\u5206\u6570\u662f q1 \u4e0e k2 \u70b9\u79ef\uff0c\u4ee5\u6b64\u7c7b\u63a8\u3002 \u5c06\u5206\u6570\u9664\u4ee5 Query \u5411\u91cf\u957f\u5ea6\u7684\u5e73\u65b9\u6839\u3002\u6b64\u6b65\u9aa4\u63d0\u9ad8\u4e86\u68af\u5ea6\u7684\u7a33\u5b9a\u6027\u3002 \u901a\u8fc7 softmax \u5c06\u5206\u6570\u5f52\u4e00\u5316\u3002 \u5f52\u4e00\u5316\u7684\u5f97\u5206\u4e0e\u5404\u4e2a\u5355\u8bcd\u7684 Value \u5411\u91cf\u76f8\u4e58\uff0c\u6b64\u505a\u6cd5\u7684\u76f4\u89c9\u662f\u4fdd\u6301\u60f3\u8981\u5173\u6ce8\u7684\u5355\u8bcd\u7684\u503c\u4e0d\u53d8\uff0c\u800c\u4e14\u6d88\u9664\u4e0d\u76f8\u5173\u7684\u5355\u8bcd\uff0c\u5373\u5bf9\u5404\u4e2a\u5355\u8bcd\u7684 Value \u5411\u91cf\u52a0\u6743\u3002 \u5bf9\u6240\u6709\u52a0\u6743\u540e\u7684 Value \u5411\u91cf\u6c42\u548c\uff0c\u5373\u4e3a\u5f53\u524d\u8bcd\u5411\u91cf\u5728 self-attention \u5c42\u7684\u8f93\u51fa\u3002 \u4e0a\u8ff0\u8fc7\u7a0b\u7684\u77e9\u9635\u5f62\u5f0f\u4e3a\uff1a","title":"Self-Attention \u5c42"},{"location":"llm/transformer/transformer/#_6","text":"\u8fdb\u4e00\u6b65\u4f18\u5316 Self-attention \uff1a\u4f7f\u7528 multi-headed attention \u3002\u63d0\u9ad8\u4e86\u6a21\u578b\u5173\u6ce8\u4e0d\u540c\u4f4d\u7f6e\u7684\u80fd\u529b\uff0c\u4e3a\u6ce8\u610f\u529b\u5c42\u63d0\u4f9b\u4e86\u591a\u4e2a\u8868\u793a\u5b50\u7a7a\u95f4\uff08 representation subspaces \uff09\u2014\u2014 \u53ef\u4ee5\u6709\u591a\u7ec4 Query \u3001 Key \u3001 Value \u6743\u91cd\u77e9\u9635\uff0c\u6bcf\u4e00\u7ec4\u90fd\u662f\u968f\u673a\u521d\u59cb\u5316\uff0c\u56e0\u6b64\u8bad\u7ec3\u5b8c\u6210\u540e\u6bcf\u4e00\u7ec4\u90fd\u53ef\u4ee5\u5c06\u8f93\u5165\u6295\u5c04\u5230\u4e0d\u540c\u7684\u5b50\u7a7a\u95f4\uff0c\u5177\u4f53\u53ef\u4ee5\u7c7b\u6bd4 CNN \u4e2d\u7684\u591a\u4e2a\u5377\u79ef\u6838\u3002 \u6700\u7ec8\u5c06\u5f97\u5230\u591a\u4e2a\u5f53\u524d\u8bcd\u5411\u91cf\u5728 self-attention \u4e0b\u7684\u8f93\u51fa\u5411\u91cf\uff0c\u5373\u8f93\u5165\u53e5\u5b50\u7ecf\u8fc7 self-attention \u540e\uff0c\u5c06\u6709\u591a\u4e2a\u8f93\u51fa\u77e9\u9635\u3002 \u7531\u4e8e FFNN \u5b50\u5c42\u9700\u8981\u4e00\u4e2a\u77e9\u9635\uff08\u6bcf\u4e2a\u5355\u8bcd\u7531\u4e00\u4e2a\u5411\u91cf\u8868\u793a\uff09\u4f5c\u4e3a\u8f93\u5165\uff0c\u56e0\u6b64\u9700\u8981\u5c06\u4ee5\u4e0a\u8f93\u51fa\u77e9\u9635\u4e0e\u4e00\u4e2a\u989d\u5916\u7684\u5f85\u8bad\u7ec3\u6743\u91cd\u77e9\u9635\u76f8\u4e58\u3002 \u4e00\u4e2a\u591a\u5934\u6ce8\u610f\u529b\u7684\u4f8b\u5b50\uff1a","title":"\u591a\u5934\u6ce8\u610f\u529b"},{"location":"llm/transformer/transformer/#attention","text":"\u5f20\u91cf\u7684\u7b2c1\u7ef4\u662f batch size\uff0c\u7b2c 2 \u7ef4\u662f\u53e5\u5b50\u957f\u5ea6\u3002 class MultiheadAttention ( nn . Module ): # n_heads\uff1a\u591a\u5934\u6ce8\u610f\u529b\u7684\u6570\u91cf # hid_dim\uff1a\u6bcf\u4e2a\u8bcd\u8f93\u51fa\u7684\u5411\u91cf\u7ef4\u5ea6 def __init__ ( self , hid_dim , n_heads , dropout ): super ( MultiheadAttention , self ) . __init__ () self . hid_dim = hid_dim self . n_heads = n_heads # \u5f3a\u5236 hid_dim \u5fc5\u987b\u6574\u9664 h assert hid_dim % n_heads == 0 # \u5b9a\u4e49 W_q \u77e9\u9635 self . w_q = nn . Linear ( hid_dim , hid_dim ) # \u5b9a\u4e49 W_k \u77e9\u9635 self . w_k = nn . Linear ( hid_dim , hid_dim ) # \u5b9a\u4e49 W_v \u77e9\u9635 self . w_v = nn . Linear ( hid_dim , hid_dim ) self . fc = nn . Linear ( hid_dim , hid_dim ) self . do = nn . Dropout ( dropout ) # \u7f29\u653e self . scale = torch . sqrt ( torch . FloatTensor ([ hid_dim // n_heads ])) def forward ( self , query , key , value , mask = None ): # \u6ce8\u610f Q\uff0cK\uff0cV\u7684\u5728\u53e5\u5b50\u957f\u5ea6\u8fd9\u4e00\u4e2a\u7ef4\u5ea6\u7684\u6570\u503c\u53ef\u4ee5\u4e00\u6837\uff0c\u53ef\u4ee5\u4e0d\u4e00\u6837\u3002 # K: [64,10,300], \u5047\u8bbebatch_size \u4e3a 64\uff0c\u6709 10 \u4e2a\u8bcd\uff0c\u6bcf\u4e2a\u8bcd\u7684 Query \u5411\u91cf\u662f 300 \u7ef4 # V: [64,10,300], \u5047\u8bbebatch_size \u4e3a 64\uff0c\u6709 10 \u4e2a\u8bcd\uff0c\u6bcf\u4e2a\u8bcd\u7684 Query \u5411\u91cf\u662f 300 \u7ef4 # Q: [64,12,300], \u5047\u8bbebatch_size \u4e3a 64\uff0c\u6709 12 \u4e2a\u8bcd\uff0c\u6bcf\u4e2a\u8bcd\u7684 Query \u5411\u91cf\u662f 300 \u7ef4 bsz = query . shape [ 0 ] Q = self . w_q ( query ) K = self . w_k ( key ) V = self . w_v ( value ) # \u8fd9\u91cc\u628a K Q V \u77e9\u9635\u62c6\u5206\u4e3a\u591a\u7ec4\u6ce8\u610f\u529b # \u6700\u540e\u4e00\u7ef4\u5c31\u662f\u662f\u7528 self.hid_dim // self.n_heads \u6765\u5f97\u5230\u7684\uff0c\u8868\u793a\u6bcf\u7ec4\u6ce8\u610f\u529b\u7684\u5411\u91cf\u957f\u5ea6, \u6bcf\u4e2a head \u7684\u5411\u91cf\u957f\u5ea6\u662f\uff1a300/6=50 # 64 \u8868\u793a batch size\uff0c6 \u8868\u793a\u6709 6\u7ec4\u6ce8\u610f\u529b\uff0c10 \u8868\u793a\u6709 10 \u8bcd\uff0c50 \u8868\u793a\u6bcf\u7ec4\u6ce8\u610f\u529b\u7684\u8bcd\u7684\u5411\u91cf\u957f\u5ea6 # K: [64,10,300] \u62c6\u5206\u591a\u7ec4\u6ce8\u610f\u529b -> [64,10,6,50] \u8f6c\u7f6e\u5f97\u5230 -> [64,6,10,50] # V: [64,10,300] \u62c6\u5206\u591a\u7ec4\u6ce8\u610f\u529b -> [64,10,6,50] \u8f6c\u7f6e\u5f97\u5230 -> [64,6,10,50] # Q: [64,12,300] \u62c6\u5206\u591a\u7ec4\u6ce8\u610f\u529b -> [64,12,6,50] \u8f6c\u7f6e\u5f97\u5230 -> [64,6,12,50] # \u8f6c\u7f6e\u662f\u4e3a\u4e86\u628a\u6ce8\u610f\u529b\u7684\u6570\u91cf 6 \u653e\u5230\u524d\u9762\uff0c\u628a 10 \u548c 50 \u653e\u5230\u540e\u9762\uff0c\u65b9\u4fbf\u4e0b\u9762\u8ba1\u7b97 Q = Q . view ( bsz , - 1 , self . n_heads , self . hid_dim // self . n_heads ) . permute ( 0 , 2 , 1 , 3 ) K = K . view ( bsz , - 1 , self . n_heads , self . hid_dim // self . n_heads ) . permute ( 0 , 2 , 1 , 3 ) V = V . view ( bsz , - 1 , self . n_heads , self . hid_dim // self . n_heads ) . permute ( 0 , 2 , 1 , 3 ) # \u7b2c 1 \u6b65\uff1aQ \u4e58\u4ee5 K\u7684\u8f6c\u7f6e\uff0c\u9664\u4ee5scale # [64,6,12,50] * [64,6,50,10] = [64,6,12,10] # attention\uff1a[64,6,12,10] attention = torch . matmul ( Q , K . permute ( 0 , 1 , 3 , 2 )) / self . scale # \u5982\u679c mask \u4e0d\u4e3a\u7a7a\uff0c\u90a3\u4e48\u5c31\u628a mask \u4e3a 0 \u7684\u4f4d\u7f6e\u7684 attention \u5206\u6570\u8bbe\u7f6e\u4e3a -1e10\uff0c\u8fd9\u91cc\u7528\u201c0\u201d\u6765\u6307\u793a\u54ea\u4e9b\u4f4d\u7f6e\u7684\u8bcd\u5411\u91cf\u4e0d\u80fd\u88abattention\u5230\uff0c\u6bd4\u5982padding\u4f4d\u7f6e\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u7528\u201c1\u201d\u6216\u8005\u5176\u4ed6\u6570\u5b57\u6765\u6307\u793a\uff0c\u4e3b\u8981\u8bbe\u8ba1\u4e0b\u97622\u884c\u4ee3\u7801\u7684\u6539\u52a8\u3002 if mask is not None : attention = attention . masked_fill ( mask == 0 , - 1e10 ) # \u7b2c 2 \u6b65\uff1a\u8ba1\u7b97\u4e0a\u4e00\u6b65\u7ed3\u679c\u7684 softmax\uff0c\u518d\u7ecf\u8fc7 dropout\uff0c\u5f97\u5230 attention\u3002 # \u6ce8\u610f\uff0c\u8fd9\u91cc\u662f\u5bf9\u6700\u540e\u4e00\u7ef4\u505a softmax\uff0c\u4e5f\u5c31\u662f\u5728\u8f93\u5165\u5e8f\u5217\u7684\u7ef4\u5ea6\u505a softmax # attention: [64,6,12,10] attention = self . do ( torch . softmax ( attention , dim =- 1 )) # \u7b2c\u4e09\u6b65\uff0cattention\u7ed3\u679c\u4e0eV\u76f8\u4e58\uff0c\u5f97\u5230\u591a\u5934\u6ce8\u610f\u529b\u7684\u7ed3\u679c # [64,6,12,10] * [64,6,10,50] = [64,6,12,50] # x: [64,6,12,50] x = torch . matmul ( attention , V ) # \u56e0\u4e3a query \u6709 12 \u4e2a\u8bcd\uff0c\u6240\u4ee5\u628a 12 \u653e\u5230\u524d\u9762\uff0c\u628a 50 \u548c 6 \u653e\u5230\u540e\u9762\uff0c\u65b9\u4fbf\u4e0b\u9762\u62fc\u63a5\u591a\u7ec4\u7684\u7ed3\u679c # x: [64,6,12,50] \u8f6c\u7f6e-> [64,12,6,50] x = x . permute ( 0 , 2 , 1 , 3 ) . contiguous () # \u8fd9\u91cc\u7684\u77e9\u9635\u8f6c\u6362\u5c31\u662f\uff1a\u628a\u591a\u7ec4\u6ce8\u610f\u529b\u7684\u7ed3\u679c\u62fc\u63a5\u8d77\u6765 # \u6700\u7ec8\u7ed3\u679c\u5c31\u662f [64,12,300] # x: [64,12,6,50] -> [64,12,300] x = x . view ( bsz , - 1 , self . n_heads * ( self . hid_dim // self . n_heads )) x = self . fc ( x ) return x # batch_size \u4e3a 64\uff0c\u6709 12 \u4e2a\u8bcd\uff0c\u6bcf\u4e2a\u8bcd\u7684 Query \u5411\u91cf\u662f 300 \u7ef4 query = torch . rand ( 64 , 12 , 300 ) # batch_size \u4e3a 64\uff0c\u6709 12 \u4e2a\u8bcd\uff0c\u6bcf\u4e2a\u8bcd\u7684 Key \u5411\u91cf\u662f 300 \u7ef4 key = torch . rand ( 64 , 10 , 300 ) # batch_size \u4e3a 64\uff0c\u6709 10 \u4e2a\u8bcd\uff0c\u6bcf\u4e2a\u8bcd\u7684 Value \u5411\u91cf\u662f 300 \u7ef4 value = torch . rand ( 64 , 10 , 300 ) attention = MultiheadAttention ( hid_dim = 300 , n_heads = 6 , dropout = 0.1 ) output = attention ( query , key , value ) ## output: torch.Size([64, 12, 300]) print ( output . shape )","title":"Attention \u4ee3\u7801\u5b9e\u4f8b"},{"location":"llm/transformer/transformer/#_7","text":"\u7f16\u7801\u5668\u4e2d\u6bcf\u4e2a\u5b50\u5c42\u90fd\u8fdb\u884c\u6b8b\u5dee\u8fde\u63a5\uff0c\u5e76\u5f52\u4e00\u5316\u3002 \u5c06 Self-Attention \u5c42\u7684\u5c42\u6807\u51c6\u5316\uff08layer-normalization\uff09\u548c\u6d89\u53ca\u7684\u5411\u91cf\u8ba1\u7b97\u7ec6\u8282\u90fd\u8fdb\u884c\u53ef\u89c6\u5316\uff0c\u5982\u4e0b\u6240\u793a\uff1a \u7f16\u7801\u5668\u548c\u548c\u89e3\u7801\u5668\u7684\u5b50\u5c42\u91cc\u9762\u90fd\u6709\u5c42\u6807\u51c6\u5316\uff08layer-normalization\uff09\u3002\u5047\u8bbe\u4e00\u4e2a Transformer \u662f\u7531 2 \u5c42\u7f16\u7801\u5668\u548c\u4e24\u5c42\u89e3\u7801\u5668\u7ec4\u6210\u7684\uff0c\u5c06\u5168\u90e8\u5185\u90e8\u7ec6\u8282\u5c55\u793a\u8d77\u6765\u5982\u4e0b\u56fe\u6240\u793a\u3002","title":"\u6b8b\u5dee\u8fde\u63a5"},{"location":"llm/transformer/transformer/#_8","text":"\u7f16\u7801\u5668\u4e00\u822c\u6709\u591a\u5c42\uff0c\u7b2c\u4e00\u4e2a\u7f16\u7801\u5668\u7684\u8f93\u5165\u662f\u4e00\u4e2a\u5e8f\u5217\u6587\u672c\uff0c\u6700\u540e\u4e00\u4e2a\u7f16\u7801\u5668\u8f93\u51fa\u662f\u4e00\u7ec4\u5e8f\u5217\u5411\u91cf\uff0c\u8fd9\u7ec4\u5e8f\u5217\u5411\u91cf\u4f1a\u4f5c\u4e3a\u89e3\u7801\u5668\u7684 K\u3001V \u8f93\u5165\uff0c\u5176\u4e2d K=V=\u89e3\u7801\u5668\u8f93\u51fa\u7684\u5e8f\u5217\u5411\u91cf\u8868\u793a\u3002\u8fd9\u4e9b\u6ce8\u610f\u529b\u5411\u91cf\u5c06\u4f1a\u8f93\u5165\u5230\u6bcf\u4e2a\u89e3\u7801\u5668\u7684 Encoder-Decoder Attention \u5c42\uff0c\u8fd9\u6709\u52a9\u4e8e\u89e3\u7801\u5668\u628a\u6ce8\u610f\u529b\u96c6\u4e2d\u5230\u8f93\u5165\u5e8f\u5217\u7684\u5408\u9002\u4f4d\u7f6e\uff0c\u5982\u4e0b\u56fe\u6240\u793a\u3002 \u89e3\u7801\uff08decoding\uff09\u9636\u6bb5\u7684\u6bcf\u4e00\u4e2a\u65f6\u95f4\u6b65\u90fd\u8f93\u51fa\u4e00\u4e2a\u7ffb\u8bd1\u540e\u7684\u5355\u8bcd\uff08\u8fd9\u91cc\u7684\u4f8b\u5b50\u662f\u82f1\u8bed\u7ffb\u8bd1\uff09\uff0c\u89e3\u7801\u5668\u5f53\u524d\u65f6\u95f4\u6b65\u7684\u8f93\u51fa\u53c8\u91cd\u65b0\u4f5c\u4e3a\u8f93\u51fa Q \u548c\u7f16\u7801\u5668\u7684\u8f93\u51fa K\u3001V \u5171\u540c\u4f5c\u4e3a\u4e0b\u4e00\u4e2a\u65f6\u95f4\u6b65\u89e3\u7801\u5668\u7684\u8f93\u5165\u3002\u7136\u540e\u91cd\u590d\u8fd9\u4e2a\u8fc7\u7a0b\uff0c\u76f4\u5230\u8f93\u51fa\u4e00\u4e2a\u7ed3\u675f\u7b26\u3002 \u89e3\u7801\u5668\u4e2d\u7684 Self Attention \u5c42\uff0c\u548c\u7f16\u7801\u5668\u4e2d\u7684 Self Attention \u5c42\u7684\u533a\u522b\uff1a \u5728\u89e3\u7801\u5668\u91cc\uff0cSelf Attention \u5c42\u53ea\u5141\u8bb8\u5173\u6ce8\u5230\u8f93\u51fa\u5e8f\u5217\u4e2d\u65e9\u4e8e\u5f53\u524d\u4f4d\u7f6e\u4e4b\u524d\u7684\u5355\u8bcd\u3002\u5177\u4f53\u505a\u6cd5\u662f\uff1a\u5728 Self Attention \u5206\u6570\u7ecf\u8fc7 Softmax \u5c42\u4e4b\u524d\uff0c\u5c4f\u853d\u5f53\u524d\u4f4d\u7f6e\u4e4b\u540e\u7684\u90a3\u4e9b\u4f4d\u7f6e\uff08\u5c06attention score\u8bbe\u7f6e\u6210-inf\uff09\u3002 \u89e3\u7801\u5668 Attention\u5c42\u662f\u4f7f\u7528\u524d\u4e00\u5c42\u7684\u8f93\u51fa\u6765\u6784\u9020Query \u77e9\u9635\uff0c\u800cKey\u77e9\u9635\u548c Value\u77e9\u9635\u6765\u81ea\u4e8e\u7f16\u7801\u5668\u6700\u7ec8\u7684\u8f93\u51fa\u3002","title":"\u89e3\u7801\u5668"},{"location":"llm/transformer/transformer/#reference","text":"learn-nlp-with-transformers 10\u5206\u949f\u5e26\u4f60\u6df1\u5165\u7406\u89e3Transformer\u539f\u7406\u53ca\u5b9e\u73b0 Transformer\u539f\u7406\u8be6\u89e3 transformer \u539f\u7406","title":"Reference"},{"location":"mb/","text":"\u6570\u7406\u57fa\u7840 \u00b6 Abstract \u8fd9\u91cc\u662f\u6570\u7406\u57fa\u7840\u76f8\u5173\u5185\u5bb9\u7684\u7b14\u8bb0 Table of Contents \u00b6 \u6570\u7406\u57fa\u7840 \u6700\u4f18\u5316\u7406\u8bba\u4e0e\u65b9\u6cd5 4776 16 mins 1696841966 \u77e9\u9635\u5206\u6790\u4e0e\u5e94\u7528 4501 14 mins 1696680112 \u7ec4\u5408\u6570\u5b66 569 2 mins 1695089803 function buttonHandler(i) { let content = document.getElementsByClassName(\"content-item-wrapper\")[i]; let button = document.getElementsByClassName(\"title-wrapper\")[i].getElementsByTagName(\"button\")[0]; if (content.style.display == \"none\") { content.style.display = \"block\"; button.children[0].children[0].style.transform = \"rotate(0deg)\"; } else { content.style.display = \"none\"; button.children[0].children[0].style.transform = \"rotate(-90deg)\"; } } function produce_time() { let time = document.getElementsByClassName(\"item-actions\"); for (let i = 0; i < time.length; i++) { let timestamp; if (time[i].childElementCount > 0) { timestamp = time[i].children[0].innerHTML; } else { timestamp = time[i].innerHTML; } let date = new Date(parseInt(timestamp) * 1000); let now = new Date(); let diff = now.getTime() - date.getTime(); let years = Math.floor(diff / (24 * 3600 * 1000 * 365)); let months = Math.floor(diff / (24 * 3600 * 1000 * 30)); let days = Math.floor(diff / (24 * 3600 * 1000)); let hours = Math.floor((diff % (24 * 3600 * 1000)) / (3600 * 1000)); let minutes = Math.floor((diff % (3600 * 1000)) / (60 * 1000)); let seconds = Math.floor((diff % (60 * 1000)) / 1000); if (years > 0) { time[i].innerHTML = years + \" years ago\"; } else if (months > 0) { time[i].innerHTML = months + \" months ago\"; } else if (days > 0) { time[i].innerHTML = days + \" days ago\"; } else if (hours > 0) { time[i].innerHTML = hours + \" hours ago\"; } else if (minutes > 0) { time[i].innerHTML = minutes + \" minutes ago\"; } else { time[i].innerHTML = seconds + \" seconds ago\"; } } } produce_time();","title":"\u6570\u7406\u57fa\u7840"},{"location":"mb/#_1","text":"Abstract \u8fd9\u91cc\u662f\u6570\u7406\u57fa\u7840\u76f8\u5173\u5185\u5bb9\u7684\u7b14\u8bb0","title":"\u6570\u7406\u57fa\u7840"},{"location":"mb/#table-of-contents","text":"\u6570\u7406\u57fa\u7840 \u6700\u4f18\u5316\u7406\u8bba\u4e0e\u65b9\u6cd5 4776 16 mins 1696841966 \u77e9\u9635\u5206\u6790\u4e0e\u5e94\u7528 4501 14 mins 1696680112 \u7ec4\u5408\u6570\u5b66 569 2 mins 1695089803 function buttonHandler(i) { let content = document.getElementsByClassName(\"content-item-wrapper\")[i]; let button = document.getElementsByClassName(\"title-wrapper\")[i].getElementsByTagName(\"button\")[0]; if (content.style.display == \"none\") { content.style.display = \"block\"; button.children[0].children[0].style.transform = \"rotate(0deg)\"; } else { content.style.display = \"none\"; button.children[0].children[0].style.transform = \"rotate(-90deg)\"; } } function produce_time() { let time = document.getElementsByClassName(\"item-actions\"); for (let i = 0; i < time.length; i++) { let timestamp; if (time[i].childElementCount > 0) { timestamp = time[i].children[0].innerHTML; } else { timestamp = time[i].innerHTML; } let date = new Date(parseInt(timestamp) * 1000); let now = new Date(); let diff = now.getTime() - date.getTime(); let years = Math.floor(diff / (24 * 3600 * 1000 * 365)); let months = Math.floor(diff / (24 * 3600 * 1000 * 30)); let days = Math.floor(diff / (24 * 3600 * 1000)); let hours = Math.floor((diff % (24 * 3600 * 1000)) / (3600 * 1000)); let minutes = Math.floor((diff % (3600 * 1000)) / (60 * 1000)); let seconds = Math.floor((diff % (60 * 1000)) / 1000); if (years > 0) { time[i].innerHTML = years + \" years ago\"; } else if (months > 0) { time[i].innerHTML = months + \" months ago\"; } else if (days > 0) { time[i].innerHTML = days + \" days ago\"; } else if (hours > 0) { time[i].innerHTML = hours + \" hours ago\"; } else if (minutes > 0) { time[i].innerHTML = minutes + \" minutes ago\"; } else { time[i].innerHTML = seconds + \" seconds ago\"; } } } produce_time();","title":"Table of Contents"},{"location":"mb/comb/","text":"\u7ec4\u5408\u6570\u5b66 \u00b6 \u6392\u5217\u7ec4\u5408 \u00b6 \u5706\u6392\u5217:n\u4e2a\u4e2d\u9009k\u4e2a\u7ec4\u6210\u4e00\u4e2a\u5708\u7684\u65b9\u6848\u6570\uff1a \\(\\frac{A_{n}^k}{k}\\) \u9879\u94fe\u6392\u5217: \\({\\frac{A_{n}^k}{2k}}\\) \u9519\u4f4d\u6392\u5217:n\u4e2a\u6570\u7684\u6240\u6709\u9519\u6392\u65b9\u6848\u6570\u7684\u9012\u63a8\u516c\u5f0f\u4e3a \\({f(n)=(n-1)*(f(n-1)+f(n-2))}\\) ,\u524d\u51e0\u9879\u4e3a \\(0\u30011\u30012\u30019\u300144\u3001265\\) \u591a\u91cd\u6392\u5217:\u8bbe \\(S=\\{n1*a1,n2*a2,...,nk*ak\\}\\) \uff0c\u5219\u6240\u6709\u7684\u65b9\u6848\u6570\u4e3a \\(\\frac{n!}{n1!*n2!*...*nk!}\\) \u4e0d\u76f8\u90bb\u7ec4\u5408:[1,n]\u4e2a\u4e2d\u9009k\u4e2a\u7ec4\u6210\u4e0d\u76f8\u90bb\u7684\u6392\u5217\u7684\u65b9\u6848\u6570\u4e3a\uff1a \\(C_{n-k+1}^k\\) \u53ef\u91cd\u7ec4\u5408:\u8bbeS= \\(\\{n1*a1,n2*a2,...,nk*ak\\}\\) \uff0c\u5728S\u4e2d\u9009r\u4e2a\uff0c\u5219\u6240\u6709\u7684\u65b9\u6848\u6570\u4e3a \\({C_{r+k-1}^{k-1}}\\) \u65b9\u6cd5\uff1a\u9694\u677f\u6cd5\uff0c\u6346\u7ed1\u6cd5... \u6269\u5c55: \u4e8c\u9879\u5f0f\u5b9a\u7406: \\((a+b)^n=\\sum_{k=0}^nC_n^ka^{n-k}b^k\\) \u591a\u9879\u5f0f\u5b9a\u7406: \\((x1+x2+...+xk)^n=\\sum_{n1+n2+...+nk=n}\\frac{n!}{n1!n2!...nk!}\\prod_{i=1}^kx_i^{ni}\\) \u683c\u8def\u95ee\u9898: \\((0,0)\\) \u70b9\u8d70\u5230 \\((m,n)\\) \u70b9\u7684\u65b9\u6848\u6570\u4e3a \\(C_{m+n}^n\\) \u6bcd\u51fd\u6570 \u00b6 \u666e\u901a\u578b\u6bcd\u51fd\u6570 \u00b6 \u4e3b\u8981\u6c42\u7ec4\u5408\u7684\u65b9\u6848\u6570\u3002 \u5f62\u5982 \\({a_0+a_1x^1+a_2x^2+...+a_nx^n}\\) \u6307\u6570\u578b\u6bcd\u51fd\u6570 \u00b6 \u4e3b\u8981\u6c42\u591a\u91cd\u6392\u5217\u6570\u3002 \u5f62\u5982 \\({a_0+\\frac{a_1x}{1!}+\\frac{a_2x^2}{2!}+...\\frac{a_nx^n}{n!}}\\) \u7279\u6b8a\u7684\u6570 \u00b6 \u6590\u6ce2\u90a3\u5951\u6570 \u00b6 \u9012\u63a8\u5f0f: \\(f(n)=f(n-1)+f(n-2)\\) \u4e8c\u9636\u5e38\u7cfb\u6570\u9012\u5f52\u516c\u5f0f: \\(f(n)=\\frac{1}{\\sqrt 5}[(\\frac{1+\\sqrt 5}{2})^n-(\\frac{1-\\sqrt 5}{2})^n]\\) \u524d\u51e0\u9879\u4e3a1\u30011\u30012\u30013\u30015\u30018... \u5361\u7279\u5170\u6570 \u00b6 \u5e38\u89c1\u516c\u5f0f\uff1a \\(H_n=\\frac{C_{2n}^n}{n+1}\\) \\(H_n=\\frac{H_{n-1}(4n-2)}{n+1}\\) \\(H_n=1 \\;\\;(n=0||n=1)\\) \\(H_n=\\sum_{i=1}^nH_{n-i}H_{i-1} (n\\geq 2)\\) \\(H_n=C_{2n}^n-C_{2n}^{n-1}\\) \u524d\u51e0\u9879\u4e3a\uff1a1\u30011\u30012\u30015\u300114\u300142\u3001132... \u65af\u7279\u6797\u6570 \u00b6 \u7b2c\u4e00\u7c7bStirling\u6570 \u00b6 \u9012\u63a8\u5f0f: \\({S_u(n,k)=S_u(n-1,k-1)+(n-1)*S_u(n-1,k)}\\;\\;\\;S_u(0,0)=1\\) \u7b2c\u4e8c\u7c7bStirling\u6570 \u00b6 \u9012\u63a8\u5f0f: \\({S(n,k)=S(n-1,k-1)+k*S(n-1.k)}\\;\\;\\;S(0,0)=1\\) \u7ebf\u6027\u516c\u5f0f: \\({S(n,k)=\\frac{1}{k!}\\sum_{i=0}^k(-1)^iC_k^i(k-i)^n}\\) \u8d1d\u5c14\u6570 \u00b6 \u9012\u63a8\u5f0f: \\({B_{n+1}=\\sum_{k=0}^nC_n^kB_k}\\) \u6839\u636e\u7b2c\u4e8c\u7c7b\u65af\u7279\u6797\u6570: \\({B_n=\\sum_{k=0}^nS(n,k)}\\) \u62d3\u5c55\uff1a\u8d1d\u5c14\u4e09\u89d2\u5f62\u6c42\u89e3\u3002 \u524d\u51e0\u9879\u4e3a\uff1a1\u30011\u30012\u30015\u300115\u300152\u3001203... \u4f2f\u52aa\u5229\u6570 \u00b6 \u7b49\u5e42\u6c42\u548c: \\(S_mn=\\frac{1}{m+1}\\sum_{k=0}^mC_{m+1}^kn^{m-k+1}\\) \\(\\sum_{i=1}^ni^k=\\frac{1}{k+1}\\sum_{i=1}^{k+1}C_{k+1}^iB_{k-i+1}(n+1)^i\\) \u9012\u63a8\u5f0f: \\({\\sum_{k=0}^nB_kC_{n+1}^k=0}\\;\\;\\;(B_0=1)\\) \\(B_n=-\\frac{1}{n+1}[C_{n+1}^0B0+C_{n+1}^1B1+...+C_{n+1}^{n-1}B_{n-1}]\\) \u524d\u51e0\u9879\u4e3a\uff1a \\(1\u3001-\\frac{1}{2}\u3001\\frac{1}{6}\u30010\u3001\\frac{1}{30}...\\)","title":"\u7ec4\u5408\u6570\u5b66"},{"location":"mb/comb/#_1","text":"","title":"\u7ec4\u5408\u6570\u5b66"},{"location":"mb/comb/#_2","text":"\u5706\u6392\u5217:n\u4e2a\u4e2d\u9009k\u4e2a\u7ec4\u6210\u4e00\u4e2a\u5708\u7684\u65b9\u6848\u6570\uff1a \\(\\frac{A_{n}^k}{k}\\) \u9879\u94fe\u6392\u5217: \\({\\frac{A_{n}^k}{2k}}\\) \u9519\u4f4d\u6392\u5217:n\u4e2a\u6570\u7684\u6240\u6709\u9519\u6392\u65b9\u6848\u6570\u7684\u9012\u63a8\u516c\u5f0f\u4e3a \\({f(n)=(n-1)*(f(n-1)+f(n-2))}\\) ,\u524d\u51e0\u9879\u4e3a \\(0\u30011\u30012\u30019\u300144\u3001265\\) \u591a\u91cd\u6392\u5217:\u8bbe \\(S=\\{n1*a1,n2*a2,...,nk*ak\\}\\) \uff0c\u5219\u6240\u6709\u7684\u65b9\u6848\u6570\u4e3a \\(\\frac{n!}{n1!*n2!*...*nk!}\\) \u4e0d\u76f8\u90bb\u7ec4\u5408:[1,n]\u4e2a\u4e2d\u9009k\u4e2a\u7ec4\u6210\u4e0d\u76f8\u90bb\u7684\u6392\u5217\u7684\u65b9\u6848\u6570\u4e3a\uff1a \\(C_{n-k+1}^k\\) \u53ef\u91cd\u7ec4\u5408:\u8bbeS= \\(\\{n1*a1,n2*a2,...,nk*ak\\}\\) \uff0c\u5728S\u4e2d\u9009r\u4e2a\uff0c\u5219\u6240\u6709\u7684\u65b9\u6848\u6570\u4e3a \\({C_{r+k-1}^{k-1}}\\) \u65b9\u6cd5\uff1a\u9694\u677f\u6cd5\uff0c\u6346\u7ed1\u6cd5... \u6269\u5c55: \u4e8c\u9879\u5f0f\u5b9a\u7406: \\((a+b)^n=\\sum_{k=0}^nC_n^ka^{n-k}b^k\\) \u591a\u9879\u5f0f\u5b9a\u7406: \\((x1+x2+...+xk)^n=\\sum_{n1+n2+...+nk=n}\\frac{n!}{n1!n2!...nk!}\\prod_{i=1}^kx_i^{ni}\\) \u683c\u8def\u95ee\u9898: \\((0,0)\\) \u70b9\u8d70\u5230 \\((m,n)\\) \u70b9\u7684\u65b9\u6848\u6570\u4e3a \\(C_{m+n}^n\\)","title":"\u6392\u5217\u7ec4\u5408"},{"location":"mb/comb/#_3","text":"","title":"\u6bcd\u51fd\u6570"},{"location":"mb/comb/#_4","text":"\u4e3b\u8981\u6c42\u7ec4\u5408\u7684\u65b9\u6848\u6570\u3002 \u5f62\u5982 \\({a_0+a_1x^1+a_2x^2+...+a_nx^n}\\)","title":"\u666e\u901a\u578b\u6bcd\u51fd\u6570"},{"location":"mb/comb/#_5","text":"\u4e3b\u8981\u6c42\u591a\u91cd\u6392\u5217\u6570\u3002 \u5f62\u5982 \\({a_0+\\frac{a_1x}{1!}+\\frac{a_2x^2}{2!}+...\\frac{a_nx^n}{n!}}\\)","title":"\u6307\u6570\u578b\u6bcd\u51fd\u6570"},{"location":"mb/comb/#_6","text":"","title":"\u7279\u6b8a\u7684\u6570"},{"location":"mb/comb/#_7","text":"\u9012\u63a8\u5f0f: \\(f(n)=f(n-1)+f(n-2)\\) \u4e8c\u9636\u5e38\u7cfb\u6570\u9012\u5f52\u516c\u5f0f: \\(f(n)=\\frac{1}{\\sqrt 5}[(\\frac{1+\\sqrt 5}{2})^n-(\\frac{1-\\sqrt 5}{2})^n]\\) \u524d\u51e0\u9879\u4e3a1\u30011\u30012\u30013\u30015\u30018...","title":"\u6590\u6ce2\u90a3\u5951\u6570"},{"location":"mb/comb/#_8","text":"\u5e38\u89c1\u516c\u5f0f\uff1a \\(H_n=\\frac{C_{2n}^n}{n+1}\\) \\(H_n=\\frac{H_{n-1}(4n-2)}{n+1}\\) \\(H_n=1 \\;\\;(n=0||n=1)\\) \\(H_n=\\sum_{i=1}^nH_{n-i}H_{i-1} (n\\geq 2)\\) \\(H_n=C_{2n}^n-C_{2n}^{n-1}\\) \u524d\u51e0\u9879\u4e3a\uff1a1\u30011\u30012\u30015\u300114\u300142\u3001132...","title":"\u5361\u7279\u5170\u6570"},{"location":"mb/comb/#_9","text":"","title":"\u65af\u7279\u6797\u6570"},{"location":"mb/comb/#stirling","text":"\u9012\u63a8\u5f0f: \\({S_u(n,k)=S_u(n-1,k-1)+(n-1)*S_u(n-1,k)}\\;\\;\\;S_u(0,0)=1\\)","title":"\u7b2c\u4e00\u7c7bStirling\u6570"},{"location":"mb/comb/#stirling_1","text":"\u9012\u63a8\u5f0f: \\({S(n,k)=S(n-1,k-1)+k*S(n-1.k)}\\;\\;\\;S(0,0)=1\\) \u7ebf\u6027\u516c\u5f0f: \\({S(n,k)=\\frac{1}{k!}\\sum_{i=0}^k(-1)^iC_k^i(k-i)^n}\\)","title":"\u7b2c\u4e8c\u7c7bStirling\u6570"},{"location":"mb/comb/#_10","text":"\u9012\u63a8\u5f0f: \\({B_{n+1}=\\sum_{k=0}^nC_n^kB_k}\\) \u6839\u636e\u7b2c\u4e8c\u7c7b\u65af\u7279\u6797\u6570: \\({B_n=\\sum_{k=0}^nS(n,k)}\\) \u62d3\u5c55\uff1a\u8d1d\u5c14\u4e09\u89d2\u5f62\u6c42\u89e3\u3002 \u524d\u51e0\u9879\u4e3a\uff1a1\u30011\u30012\u30015\u300115\u300152\u3001203...","title":"\u8d1d\u5c14\u6570"},{"location":"mb/comb/#_11","text":"\u7b49\u5e42\u6c42\u548c: \\(S_mn=\\frac{1}{m+1}\\sum_{k=0}^mC_{m+1}^kn^{m-k+1}\\) \\(\\sum_{i=1}^ni^k=\\frac{1}{k+1}\\sum_{i=1}^{k+1}C_{k+1}^iB_{k-i+1}(n+1)^i\\) \u9012\u63a8\u5f0f: \\({\\sum_{k=0}^nB_kC_{n+1}^k=0}\\;\\;\\;(B_0=1)\\) \\(B_n=-\\frac{1}{n+1}[C_{n+1}^0B0+C_{n+1}^1B1+...+C_{n+1}^{n-1}B_{n-1}]\\) \u524d\u51e0\u9879\u4e3a\uff1a \\(1\u3001-\\frac{1}{2}\u3001\\frac{1}{6}\u30010\u3001\\frac{1}{30}...\\)","title":"\u4f2f\u52aa\u5229\u6570"},{"location":"mb/maa/","text":"\u77e9\u9635\u5206\u6790\u4e0e\u5e94\u7528 \u00b6 Abstract \u5f52\u6863\u4e00\u4e9b\u7814\u4e00\u65f6\u77e9\u9635\u5206\u6790\u8bfe\u7684\u7b14\u8bb0 Table of Contents \u00b6 \u77e9\u9635\u4ee3\u6570\u57fa\u7840 \u7279\u6b8a\u77e9\u9635 \u77e9\u9635\u5fae\u5206 Reference \u00b6 \u77e9\u9635\u5206\u6790\u4e0e\u5e94\u7528 \u5f20\u8d24\u8fbe\u8457","title":"\u77e9\u9635\u5206\u6790\u4e0e\u5e94\u7528"},{"location":"mb/maa/#_1","text":"Abstract \u5f52\u6863\u4e00\u4e9b\u7814\u4e00\u65f6\u77e9\u9635\u5206\u6790\u8bfe\u7684\u7b14\u8bb0","title":"\u77e9\u9635\u5206\u6790\u4e0e\u5e94\u7528"},{"location":"mb/maa/#table-of-contents","text":"\u77e9\u9635\u4ee3\u6570\u57fa\u7840 \u7279\u6b8a\u77e9\u9635 \u77e9\u9635\u5fae\u5206","title":"Table of Contents"},{"location":"mb/maa/#reference","text":"\u77e9\u9635\u5206\u6790\u4e0e\u5e94\u7528 \u5f20\u8d24\u8fbe\u8457","title":"Reference"},{"location":"mb/maa/lec1/","text":"\u77e9\u9635\u4ee3\u6570\u57fa\u7840 \u00b6 Abstract \u77e9\u9635\u662f\u63cf\u8ff0\u548c\u6c42\u89e3\u7ebf\u6027\u65b9\u7a0b\u7ec4\u6700\u57fa\u672c\u548c\u6700\u6709\u7528\u7684\u6570\u5b66\u5de5\u5177 \u6570\u5b66\u8fd0\u7b97: \u8f6c\u7f6e\u3001\u5185\u79ef\u3001\u5916\u79ef\u3001\u9006\u77e9\u9635\u3001\u5e7f\u4e49\u9006\u77e9\u9635\u7b49 \u6807\u91cf\u51fd\u6570\uff1a\u8303\u6570\u3001\u4e8c\u6b21\u578b\u3001\u884c\u5217\u5f0f\u3001\u7279\u5f81\u503c\u3001\u79e9\u548c\u8ff9 \u7279\u6b8a\u8fd0\u7b97: \u76f4\u548c\u3001\u76f4\u79ef\u3001Hadamard \u79ef\u3001Kronecker \u79ef\u3001\u5411\u91cf\u5316 \u77e9\u9635\u7684\u57fa\u672c\u8fd0\u7b97 \u00b6 \u77e9\u9635\u4e0e\u5411\u91cf \u00b6 \\(m \\times n\\) \u7684\u7ebf\u6027\u65b9\u7a0b\u7ec4\uff0c\u4f7f\u7528 \\(m\\) \u4e2a\u65b9\u7a0b\u63cf\u8ff0 \\(n\\) \u4e2a\u672a\u77e5\u91cf\u4e4b\u95f4\u7684\u7ebf\u6027\u5173\u7cfb\u3002\u7528\u77e9\u9635-\u5411\u91cf\u5f62\u5f0f\u8868\u793a\u4e3a \\(Ax = b\\) \uff0c\u79f0\u4e3a \\(m \\times n\\) \u77e9\u9635\u3002\u7279\u6b8a\u7684\u6709\u884c\u5411\u91cf\u548c\u5217\u5411\u91cf\uff08\u5305\u62ec\u5b9e\u6570\u548c\u590d\u6570\uff09\u3002 \\(n \\times n\\) \u77e9\u9635\u7684\u4e3b\u5bf9\u89d2\u7ebf\u662f\u6307\u4ece\u5de6\u4e0a\u89d2\u5230\u53f3\u4e0b\u89d2\u76f8\u8fde\u63a5\u7684\u7ebf\u6bb5\uff0c\u6b21\u5bf9\u89d2\u7ebf\uff08\u4ea4\u53c9\u5bf9\u89d2\u7ebf\uff09\u662f\u4ece\u53f3\u4e0a\u89d2\u5230\u5de6\u4e0b\u89d2\u3002 \u4e3b\u5bf9\u89d2\u7ebf\u4ee5\u5916\u5143\u7d20\u5168\u90e8\u4e3a0\u7684 \\(n \\times n\\) \u7684\u77e9\u9635\u79f0\u4e3a\u5bf9\u89d2\u77e9\u9635\u3002 \u5bf9\u89d2\u77e9\u9635\u4e3b\u5bf9\u89d2\u7ebf\u5143\u7d20\u5168\u90e8\u4f4d 1\uff0c\u79f0\u4e3a\u5355\u4f4d\u77e9\u9635 \\(I_{n \\times n}\\) \u3002 \u6240\u6709\u5143\u7d20\u4e3a 0 \u7684 \\(m \\times n\\) \u77e9\u9635\u79f0\u4e3a\u96f6\u77e9\u9635 \\(O_{m \\times n}\\) \u3002 \u4e00\u4e2a\u5168\u90e8\u5143\u7d20\u4e3a\u96f6\u7684\u5411\u91cf\u79f0\u4e3a\u96f6\u5411\u91cf\u3002 \u77e9\u9635\u7684\u57fa\u672c\u8fd0\u7b97 \u00b6 \\(A=[a_{ij}]\\) \u7684\u8f6c\u7f6e\u8bb0\u4f5c \\(A^{\\top}\\) \uff0c\u5143\u7d20\u5b9a\u4e49\u4e3a \\([A^{\\top}]_{i,j}=a_{ji}\\) \\(A=[a_{ij}]\\) \u7684\u590d\u6570\u5171\u8f6d\u8bb0\u4f5c \\(A^*\\) \uff0c\u5143\u7d20\u5b9a\u4e49\u4e3a \\([A^*]_{ij}=a_{ij}^*\\) \\(A=[a_{ij}]\\) \u7684(\u590d)\u5171\u8f6d\u8f6c\u7f6e\u8bb0\u4f5c \\(A^H\\) \uff0c\u5143\u7d20\u5b9a\u4e49\u4e3a \\([A^H]_{ij}=a_{ji}^*\\) \uff0c\uff08\u5171\u8f6d\u8f6c\u7f6e\u53c8\u53eb Hlermitian \u4f34\u968f/\u8f6c\u7f6e/\u5171\u8f6d\uff09 \u6ee1\u8db3 \\(A^{\\top}=A\\) \u7684\u6b63\u65b9\u5b9e\u77e9\u9635\u548c \\(A^H=A\\) \u7684\u6b63\u65b9\u590d\u77e9\u9635\u5206\u522b\u79f0\u4e3a\u5bf9\u79f0\u77e9\u9635\u548c Hermitian \u77e9\u9635(\u590d\u5171\u8f6d\u5bf9\u79f0\u77e9\u9635)\uff0c\u5171\u8f6d\u8f6c\u7f6e\u548c\u8f6c\u7f6e\u7684\u5173\u7cfb: \\(A^H=(A^*)^{\\top}=(A^{\\top})^*\\) \u77e9\u9635\u6ee1\u8db3\u4e0e\u6807\u91cf/\u77e9\u9635/\u5411\u91cf\u4e4b\u95f4\u7684\u52a0\u6cd5\u3001\u4e58\u6cd5\uff08 \u77e9\u9635\u4e58\u6cd5\u4e0d\u6ee1\u8db3\u4ea4\u6362\u5f8b \uff09 \u77e9\u9635\u4e0e\u5411\u91cf\u7684\u4e58\u6cd5 \\(Ax=y\\) \u53ef\u89c6\u4e3a\u5411\u91cf \\(x\\) \u7684\u7ebf\u6027\u53d8\u6362\uff0c \\(A\\) \u79f0\u4e3a\u7ebf\u6027\u53d8\u6362\u77e9\u9635 \u5982\u679c \\(A\\) \u53ef\u9006\uff0c\u5219\u5b58\u5728 \\(A^{-1}\\) \u4f7f\u5f97 \\(A^{-1}A=I\\) \uff0c\u79f0 \\(A^{-1}\\) \u662f \\(A\\) \u7684\u9006\u77e9\u9635 \u77e9\u9635\u7684\u5171\u8f6d\u3001\u8f6c\u7f5d\u548c\u5171\u8f6d\u8f6c\u7f6e\u6ee1\u8db3\u5206\u914d\u5f8b\uff1a \\((A+B)^x=A^x+B^x\uff0cx \\in (*,T,H)\\) \u77e9\u9635\u4e58\u79ef\u7684\u8f6c\u7f6e\u3001\u5171\u8f6d\u8f6c\u7f6e\u548c\u9006\u77e9\u9635\u6ee1\u8db3\u5173\u7cfb\u5f0f\uff1a \\((AB)^x=B^xA^x\uff0cx \\in (T,H,-1)\\) \u5171\u8f6d\u3001\u8f6c\u7f6e\u548c\u5171\u8f6d\u8f6c\u7f6e\u7b49\u7b26\u53f7\u5747\u53ef\u4e0e\u6c42\u9006\u7b26\u53f7\u4ea4\u6362\uff1a \\((A^x)^{-1}=(A^{-1})^x\uff0cx \\in (*,T,H)\\) \u82e5 \\(A\\) \u53ef\u9006\uff0c\u5bf9\u4e8e Hermitian \u77e9\u9635 \\(B=A^HA\\) \uff0c\u6709 \\(A^{-H}BA^{-1}=A^{-H}A^HAA^{-1}=I\\) \u82e5$A_{n \\time n}\u4e3a\u5e42\u7b49\u77e9\u9635\uff0c\u5219 \\(A^n = A\\) \\(I-A\\) \u4e3a\u5e42\u7b49\u77e9\u9635\uff08 \\(A-I\\) \u4e0d\u4e00\u5b9a\u662f\u5e42\u7b49\u77e9\u9635\uff09 \\(A^H\\) \u4e3a\u5e42\u7b49\u77e9\u9635 \\(I-A^H\\) \u4e3a\u5e42\u7b49\u77e9\u9635 \u82e5 \\(B\\) \u4e5f\u4e3a\u5e42\u7b49\u77e9\u9635\uff0c\u5e76\u4e14 \\(AB=BA\\) \uff0c\u5219 \\(AB\\) \u4e3a\u5e42\u7b49\u77e9\u9635 \\(A(I-A)=O\\) \uff08\u96f6\u77e9\u9635\uff09 \\((I-A)A=O\\) \uff08\u96f6\u77e9\u9635\uff09 \u51fd\u6570 \\(f(sI+tA)=(I-A)f(s)+Af(s+t)\\) \u82e5 \\(A_{n \\times n}\\) \u4e3a\u5bf9\u5408\u77e9\u9635\u6216\u5e42\u5355\u77e9\u9635\uff0c\u5219 \\(f(sI=tA)=\\frac{1}{2}[(I+A)f(s+t)+(I-A)f(s-t)]\\) \u77e9\u9635 \\(A\\) \u662f\u5bf9\u5408\u77e9\u9635\uff0c\u5f53\u4e14\u4ec5\u5f53 \\(\\frac{1}{2}(A+I)\\) \u4e3a\u5e42\u7b49\u77e9\u9635 \u82e5 \\(A_{n \\times n}\\) \u4e3a\u5e42\u96f6\u77e9\u9635\uff0c\u5219 \\(f(sI+tA)=If(s)+tAf^\\prime(s)\\) \u9664\u4e86\u77e9\u9635\u7684\u57fa\u672c\u8fd0\u7b97\uff0c\u8fd8\u6709\u77e9\u9635/\u4e09\u89d2/\u6307\u6570/\u5bf9\u6570\u51fd\u6570\u3001\u5bfc\u6570\u3001\u79ef\u5206\u7b49\u7b49 \u5411\u91cf\u7684\u7ebf\u6027\u65e0\u5173\u6027\u4e0e\u975e\u5947\u5f02\u77e9\u9635 \u00b6 \u4e00\u7ec4 \\(m\\) \u7ef4\u5411\u91cf \\(\\{u_1, ..., u_n\\}\\) \u79f0\u4e3a\u7ebf\u6027\u65e0\u5173\uff0c\u5219\u65b9\u7a0b \\(c_1u_1+...+c_nu_n=0\\) \u53ea\u6709\u96f6\u89e3 \\(c_1=...=c_n=0\\) \uff0c\u53cd\u4e4b\u7ebf\u6027\u76f8\u5173\u3002\u77e9\u9635 \\(A\\) \u662f\u975e\u5947\u5f02\u7684\uff0c\u5f53\u4e14\u4ec5\u5f53 \\(Ax=0\\) \u53ea\u6709\u96f6\u89e3\uff0c\u53cd\u4e4b\u77e9\u9635\u662f\u5947\u5f02\u7684 \\(A_{n \\times n}=[a_1,...,a_n]\\) \u662f\u975e\u5947\u5f02\u7684\uff0c\u5f53\u4e14\u4ec5\u5f53\u5b83\u7684 \\(n\\) \u4e2a\u5217\u5411\u91cf \\(a_1,...,a_n\\) \u7ebf\u6027\u65e0\u5173\u3002 \u5411\u91cf\u7a7a\u95f4\u3001\u7ebf\u6027\u6620\u5c04\u4e0e Hilbert \u7a7a\u95f4 \u00b6 \u5411\u91cf\u7a7a\u95f4 \u00b6 \u4ee5\u5411\u91cf\u4e3a\u5143\u7d20\u7684\u96c6\u5408 \\(V\\) \u79f0\u4e3a\u5411\u91cf\u7a7a\u95f4\u3002\u5982\u679c \\(V\\) \u662f\u4e00\u4e2a\u5411\u91cf\u7a7a\u95f4\uff0c\u5219\uff1a \u96f6\u5411\u91cf \\(0\\) \u662f\u552f\u4e00\u7684 \u5bf9\u6bcf\u4e00\u4e2a\u5411\u91cf \\(y\\) \uff0c\u52a0\u6cd5\u7684\u9006\u8fd0\u7b97 \\(-y\\) \u662f\u552f\u4e00\u7684 \u5bf9\u6bcf\u4e00\u4e2a\u5411\u91cf \\(y\\) \uff0c\u6052\u6709 \\(0y=0\\) \u5bf9\u6bcf\u4e00\u4e2a\u6807\u91cf a\uff0c\u6052\u6709 \\(a0=0\\) \u82e5 \\(ay=0\\) \uff0c\u5219 \\(a=0\\) \u6216\u8005 \\(y=0\\) \\((-1)y=-y\\) \u4ee4 \\(V\\) \u548c \\(W\\) \u662f\u4e24\u4e2a\u5411\u91cf\u7a7a\u95f4\uff0c\u82e5 \\(W\\) \u662f \\(V\\) \u4e2d\u4e00\u4e2a\u975e\u7a7a\u7684\u5b50\u96c6\u5408\uff0c\u5219\u79f0\u5b50\u96c6\u5408 \\(W\\) \u662f \\(V\\) \u7684\u4e00\u4e2a\u5b50\u7a7a\u95f4 \\(R^n\\) \u7684\u5b50\u96c6\u5408 \\(W\\) \u662f \\(R^n\\) \u7684\u4e00\u4e2a\u5b57\u7a7a\u95f4\uff0c\u5f53\u4e14\u4ec5\u5f53\u6ee1\u8db3\u4ee5\u4e0b\u6761\u4ef6\uff1a \u5f53\u5411\u91cf \\(x,y\\) \u5c5e\u4e8e \\(W\\) \uff0c\u5219 \\(x+y\\) \u4e5f\u5c5e\u4e8e \\(W\\) \uff0c\u5373\u6ee1\u8db3\u52a0\u6cd5\u7684\u95ed\u5408\u6027 \u5f53 \\(x \\in W\\) \uff0c\u4e14 a \u4e3a\u6807\u91cf\uff0c\u5219 \\(ax\\) \u4e5f\u5c5e\u4e8e \\(W\\) \uff0c\u5373\u6ee1\u8db3\u4e0e\u6807\u91cf\u4e58\u79ef\u7684\u95ed\u5408\u6027 \u96f6\u5411\u91cf \\(0\\) \u662f \\(W\\) \u7684\u5143\u7d20 \u82e5 \\(A\\) \u548c \\(B\\) \u662f\u5411\u91cf\u7a7a\u95f4 \\(V\\) \u7684\u4e24\u4e2a\u5b50\u7a7a\u95ee\uff0c\u5e76\u6ee1\u8db3 \\(V=A+B\\) \u548c \\(A \\cap B=\\{0\\}\\) \uff0c\u5219\u79f0 \\(V\\) \u662f\u5b50\u7a7a\u95f4 \\(A\\) \u548c \\(B\\) \u7684\u76f4\u63a5\u6c42\u548c\uff0c\u7b80\u79f0\u76f4\u548c(direetsum)\uff0c\u8bb0\u4f5c \\(V=A \\oplus B\\) \u3002 \u7ebf\u6027\u6620\u5c04 \u00b6 \\(T:\\ V \\to W\\) \u79f0\u4e3a\u5b50\u7a7a\u95f4 \\(V\\) \u5230\u5b50\u7a7a\u95f4 \\(W\\) \u7684\u6620\u5c04\u3002\u5b83\u8868\u793a\u5c06\u5b50\u7a7a\u95f4 \\(V\\) \u7684\u6bcf\u4e00\u4e2a\u5411\u91cf\u53d8\u6210\u5b50\u7a7a\u95f4 \\(W\\) \u7684\u4e00\u4e2a\u76f8\u5bf9\u5e94\u5411\u91cf\u7684\u4e00\u79cd\u89c4\u5219\u3002\u4e8e\u662f\uff0c\u82e5 \\(v \\in V\\) \u548c \\(w \\in W\\) \uff0c\u5219\u5411\u91cf \\(w\\) \u662f \\(v\\) \u7684\u6620\u5c04\u6216\u53d8\u6362\uff0c\u5373\u6709 \\(w = T(v)\\) \uff0c\u5e76\u79f0\u5b50\u7a7a\u95f4 \\(V\\) \u662f\u6620\u5c04 \\(T\\) \u7684\u59cb\u96c6\u6216\u4e01\u4e00\u5b87\uff0c\u79f0 \\(W\\) \u662f\u6620\u5c04\u7684\u7ec8\u96c6\u6216\u4e0a\u57df\u3002 \u4ee4 \\(V\\) \u548c\u4ee5\u662f\u4e24\u4e2a\u5411\u91cf\u7a7a\u95f4\uff0c \\(T:V \\to W\\) \u4e3a\u4e00\u7ebf\u6027\u53d8\u6362: \u82e5 \\(M\\) \u662f \\(V\\) \u7684\u7ebf\u6027\u5b50\u7a7a\u95f4\uff0c\u5219 \\(T(M)\\) \u662f \\(W\\) \u7684\u7ebf\u6027\u5b50\u7a7a\u95f4\uff1b \u82e5 \\(N\\) \u662f \\(W\\) \u7684\u7ebf\u6027\u5b50\u7a7a\u95f4\uff0c\u5247\u7ebf\u6027\u53cd\u53d8\u6362 \\(T^{-1}(N)\\) \u662f \\(V\\) \u7684\u7ebf\u6027\u5b50\u7a7a\u95f4\u3002 \u5185\u79ef\u7a7a\u95f4\u3001\u8d4b\u8303\u7a7a\u95ee\u4e0eHilbert \u7a7a\u95f4 \u00b6 \uff08\u5185\u79ef\u4e0e\u5185\u79ef\u5411\u91cf\u7a7a\u95f4\uff09\u82e5\u5bf9\u6240\u6709 \\(x,y,z \\in V\\) \u548c \\(\\alpha,\\beta \\in K\\) \uff0c\u6620\u5c04\u51fd\u6570 \\(<\\cdot,\\cdot>:V \\times V \\to K\\) \u6ee1\u8db3\u4e00\u4e0b\u4e09\u6761\u516c\u7406\uff1a \u5171\u8f6d\u5bf9\u79f0\u6027 \\(=^*\\) \u7b2c\u4e00\u53d8\u5143\u7684\u7ebf\u6027\u6027 \\(<\\alpha x+\\beta y,z>=\\alpha + \\beta \\) \u975e\u8d1f\u6027 \\( \\ge 0\\) \uff0c\u5e76\u4e14 \\( = 0 \\leftrightarrow x=0\\) \uff08\u4e25\u683c\u6b63\u6027\uff09 \u4e24\u4e2a\u5411\u91cf\u7684\u5185\u79ef\u53ef\u4ee5\u5ea6\u91cf\u5b83\u4eec\u4e4b\u95ee\u7684\u5939\u89d2\uff1a \\(\\cos \\theta = \\frac{}{\\sqrt{}\\sqrt{}}\\) \uff08\u8303\u6570\u548c\u8d4b\u8303\u5411\u91cf\u7a7a\u95f4\uff09\u4ee4 \\(V\\) \u662f\u4e00(\u5b9e\u6216\u590d)\u5411\u91cf\u7a7a\u95f4\u3002\u5411\u91cf \\(x\\) \u7684\u8303\u6570\u662f\u4e00\u5b9e\u51fd\u6570 \\(p(x):V \\to R\\) \uff0c\u82e5\u5bf9\u6240\u6709\u5411\u91cf \\(x,y \\in V\\) \u548c\u4efb\u610f\u4e00\u4e2a\u6807\u91cf \\(c \\in K\\) (\u5176\u4e2d \\(K\\) \u8868\u793a \\(R\\) \u6216 \\(C\\) )\uff0c\u5219\uff1a \u975e\u8d1f\u6027\uff1a \\(p(x) \\ge 0\\) \uff0c\u5e76\u4e14 \\(p(x)=0 \\Leftrightarrow x = 0\\) \u9f50\u6b21\u6027\uff1a \\(p(cx)=|c|\\cdot p(x)\\) \u5bf9\u6240\u6709\u590d\u5e38\u6570 \\(c\\) \u6210\u7acb \u4e09\u89d2\u4e0d\u7b49\u5f0f\uff1a \\(p(x+y) \\le p(x)+p(y)\\) \u6700\u5e38\u7528\u7684\u5411\u91cf\u8303\u6570\u4e3a Euclidean \u8303\u6570\u6216\u8005 \\(L_2\\) \u8303\u6570\uff0c\u8bb0\u4f5c \\(\\parallel \\cdot \\parallel_2\\) \uff0c\u5b9a\u4e49\u4e3a \\[ \\parallel x \\parallel _E = \\parallel x \\parallel _2 = \\sqrt{x_1^2+...+x_m^2} \\] \\(L_2\\) \u8303\u6570\u53ef\u4ee5\u76f4\u63a5\u5ea6\u91cf\u4e00\u4e2a\u5411\u91cf \\(x\\) \u7684\u957f\u5ea6 \\(size(x)=\\parallel x \\parallel_2\\) \uff0c\u4e24\u4e2a\u5411\u91cf\u4e4b\u95f4\u7684\u8ddd\u79bb \\(d(x,y)=\\parallel x-y \\parallel_2\\) \uff08\u5411\u91cf \\(x \\in V\\) \u7684\u534a\u8303\u6570/\u4f2a\u8303\u6570\uff09\u82e5\u5bf9\u6240\u6709\u5411\u91cf \\(x,y \\in V\\) \u548c\u4e00\u4e2a\u6807\u91cf \\(c\\) \uff0c\u6ee1\u8db3 \\(p(x) \\ge 0\\) \\(p(cx)=|c| \\cdot p(x)\\) \\(p(x+y) \\le p(x)+p(y)\\) \uff08\u5411\u91cf \\(x \\in V\\) \u7684\u62df\u8303\u6570\uff09\u82e5\u5bf9\u6240\u6709\u5411\u91cf \\(x,y \\in V\\) \u548c\u4e00\u4e2a\u6807\u91cf \\(c\\) \uff0c\u6ee1\u8db3 \\(p(x) \\ge 0\\) \uff0c\u4e14 \\(p(x) = 0 \\Leftrightarrow x = 0\\) \\(p(cx)=|c| \\cdot p(x)\\) \\(p(x+y) \\le C(p(x)+p(y))\\) \uff0c\u5176\u4e2d \\(C \\ne 1\\) \u4e3a\u67d0\u4e2a\u6b63\u5b9e\u6570 \uff08\u5b8c\u5907\u6027\uff09\u4e00\u4e2a\u5411\u91cf\u7a7a\u95f4 \\(V\\) \u79f0\u4e3a\u5b8c\u5907\u5411\u91cf\u7a7a\u95f4\uff0c\u82e5\u5bf9\u4e8e \\(V\\) \u4e2d\u7684\u6bcf\u4e00\u4e2a Cauchy \u5e8f\u5217 \\(\\{ v_n \\}_{n=1}^{\\infty} \\subset V\\) \uff0c\u5728\u5411\u91cf\u7a7a\u95f4 \\(V\\) \u5185\u5b58\u5728\u4e00\u4e2a\u5143\u7d20 \\(v\\) \uff0c\u4f7f\u5f97 \\(\\lim_{n \\to \\infty} v_n \\to v\\) \uff0c\u5373 \\(V\\) \u5185\u7684\u6bcf\u4e00\u4e2a Cauchy \u5e8f\u5217\u90fd\u6536\u655b\u5728\u5411\u91cf\u7a7a\u95f4 \\(V\\) \u5185\u3002 \uff08\u4f34\u968f\u7b97\u5b50\uff09\u4ee4 \\(T\\) \u662f Hilbert \u7a7a\u95f4 \\(H\\) \u5185\u7684\u6709\u754c\u7ebf\u6027\u7b97\u5b50\u3002\u82e5 \\(=\\) \u5bf9\u6240\u6709\u5411\u91cf \\(x,y \\in H\\) \u6210\u7acb\uff0c\u5219\u79f0 \\(T^*\\) \u662f \\(T\\) \u7684\u4f34\u968f\u7b97\u5b50(adjoint operator)\u3002 \u5185\u79ef\u4e0e\u8303\u6570 \u00b6 \u5411\u91cf\u7684\u5185\u79ef\u4e0e\u8303\u6570 \u00b6 \\(n\\) \u9636\u590d\u5411\u91cf \\(x=[x_1,...,x_n]^{\\top},y=[y_1,...,y_n]^{\\top}\\) \u4e4b\u95f4\u7684\u5185\u79ef \\(=x^Hy=\\sum_{i=1}^n x_i^*y_i\\) \u79f0\u4e3a\u5178\u8303\u5185\u79ef\u3002\u52a0\u6743\u5185\u79ef \\(=x^HGy\\) \uff0c\u5176\u4e2d \\(G\\) \u4e3a\u6b63\u5b9a\u7684 Hermitian \u77e9\u9635\u3002 \u5728\u5b9e\u548c\u590d\u5185\u79ef\u7a7a\u95f4\u91cc\uff0c\u8303\u6570\u5177\u6709\u4ee5\u4e0b\u6027\u8d28\uff1a \\(\\parallel 0 \\parallel = 0\\) \uff0c\u5e76\u4e14 \\(\\parallel x \\parallel > 0\uff0c\\forall x \\ne 0\\) \\(\\parallel cx \\parallel = |c| \\cdot \\parallel x \\parallel\\) \u5bf9\u6240\u6709\u5411\u91cf \\(x\\) \u548c\u6807\u91cf c \u6210\u7acb \u8303\u6570\u670d\u4ece\u6781\u5316\u6052\u7b49\u5f0f\uff1a \\[ =\\frac{1}{4}(\\parallel x + y \\parallel^2-\\parallel x - y \\parallel^2), \\forall x,y\uff08\u5b9e\u5185\u79ef\u7a7a\u95f4\uff09\\\\ =\\frac{1}{4}(\\parallel x + y \\parallel^2-\\parallel x - y \\parallel^2 - j \\parallel x+jy \\parallel^2+j \\parallel x-jy \\parallel^2), \\forall x,y\uff08\u590d\u5185\u79ef\u7a7a\u95f4\uff09 \\] \u8303\u6570\u670d\u4ece\u5e73\u884c\u56db\u8fb9\u5f62\u6cd5\u5219: \\[ \\parallel x+y \\parallel^2 + \\parallel x - y \\parallel^2 = 2(\\parallel x \\parallel^2+\\parallel y \\parallel^2), \\forall x,y \\] \u8303\u6570\u6ee1\u8db3\u4e09\u89d2\u4e0d\u7b49\u5f0f \\(\\parallel x+y \\parallel \\le \\parallel x \\parallel + \\parallel y \\parallel, \\forall x,y\\) \u8303\u6570\u670d\u4ece Cauchy-Schwartz \u4e0d\u7b49\u5f0f \\(|| \\le \\parallel x \\parallel \\cdot \\parallel y \\parallel\\) \u5e38\u6570\u5411\u91cf\u7684\u5178\u8303\u5185\u79ef\u4e0e\u8303\u6570 \u00b6 \\(L_0\\) \u8303\u6570 \\(\\parallel x \\parallel_0 \\overset{def}{=}\\) \u975e\u96f6\u5143\u7d20\u7684\u4e2a\u6570 \\(L_1\\) \u8303\u6570 \\(\\parallel x \\parallel_1 \\overset{def}{=} \\sum_{i=1}^m |x_i|\\) \\(L_2\\) \u8303\u6570 \\(\\parallel x \\parallel_2 = (|x_1|^2+...+|x_m|^2)^{\\frac{1}{2}}\\) \\(L_\\infty\\) \u8303\u6570 \\(\\parallel x \\parallel_\\infty = \\max\\{|x_1|, ..., |x_m|\\}\\) \\(L_p\\) \u8303\u6570 \\(\\parallel x \\parallel_p = (\\sum_{i=1}^m |x_i|^p)^{\\frac{1}{p}}\\) \u51fd\u6570\u5411\u91cf\u7684\u5185\u79ef\u4e0e\u8303\u6570 \u00b6 \u82e5 \\(x(t)\\) \u548c \\(y(t)\\) \u5206\u522b\u662f\u53d8\u91cf \\(t\\) \u7684\u51fd\u6570\u53d8\u91cf\uff0c\u5219\u5185\u79ef\u5b9a\u4e49\u4e3a \\[ \\overset{def}{=} \\int_{a}^{b} x^H(t)y(t)dt \\] \u968f\u673a\u5411\u91cf\u7684\u5185\u79ef\u4e0e\u8303\u6570 \u00b6 \u82e5 \\(x(\\xi)\\) \u548c \\(y(\\xi)\\) \u5206\u522b\u662f\u6837\u672c\u53d8\u91cf \\(\\xi\\) \u968f\u673a\u53d8\u91cf\uff0c\u5219\u5185\u79ef\u5b9a\u4e49\u4e3a \\[ \\overset{def}{=} E\\{x^H(\\xi)y(\\xi)\\} \\] \u77e9\u9635\u7684\u5185\u79ef\u4e0e\u8303\u6570 \u00b6 \u5c06\u5411\u91cf\u7684\u5185\u79ef\u4e0e\u8303\u6570\u52a0\u4ee5\u63a8\u5e7f\u3002 \u77e9\u9635\u7684\u8303\u6570\u6709\u4e09\u79cd\u4e3b\u8981\u7c7b\u578b:\u8bf1\u5bfc\u8303\u6570\u3001\u5143\u7d20\u5f62\u5f0f\u8303\u6570\u548c Schatten \u8303\u6570\u3002 \u968f\u673a\u5411\u91cf \u00b6 \u6982\u7387\u8bba\u77e5\u8bc6\u3002 \u77e9\u9635\u7684\u6027\u80fd\u6307\u6807 \u00b6 \u4e8c\u6b21\u578b \u7279\u5f81\u503c \u8ff9 \u79e9 \u9006\u77e9\u9635\u4e0e\u4f2a\u9006\u77e9\u9635 \u00b6 \u4e3b\u8981\u8ba8\u8bba\u975e\u5947\u5f02\u7684\u6b63\u65b9\u77e9\u9635 \\(A\\) \u7684\u9006\u77e9\u9635 \\(A^{-1}\\) Moore-Penrose \u9006\u77e9\u9635 \u00b6 \u4e3b\u8981\u8ba8\u8bba\u4e00\u4e2a\u79e9\u7a00\u7f3a\u7684\u77e9\u9635\u662f\u5426\u5b58\u5728\u9006\u77e9\u9635\uff0c\u5982\u679c\u5b58\u5728\u9700\u8981\u6ee1\u8db3\u4ec0\u4e48\u6761\u4ef6\u3002 \u77e9\u9635\u7684\u76f4\u548c\u4e0eHadamard \u79ef \u00b6 \u77e9\u9635\u7684\u76f4\u548c \u00b6 \\(m \\times m\\) \u77e9\u9635\u7684 \\(A\\) \u4e0e \\(n \\times n\\) \u77e9\u9635\u7684 \\(B\\) \u7684\u76f4\u548c\u8bb0\u4f5c \\(A \\oplus B\\) \uff0c\u5373 \\[ A \\oplus B = \\begin{bmatrix} A & O_{m \\times n} \\\\ O_{n \\times m} & B \\end{bmatrix} \\] Hadamard \u79ef \u00b6 \\(m \\times n\\) \u77e9\u9635\u7684 \\(A=[a_{ij}]\\) \u4e0e \\(m \\times n\\) \u77e9\u9635\u7684 \\(B=[b_{ij}]\\) \u7684 Hadamard \u79ef\u8bb0\u4f5c \\(A * B\\) \uff0c\u5143\u7d20\u5b9a\u4e49\u4e3a \\((A*B)_{ij}=a_{ij}b_{ij}\\) \u3002\u5373 Hadamard \u79ef\u98df\u4e00\u79cd\u6620\u5c04 \\(R^{m \\times n} \\times R^{m \\times n} \\to R^{m \\times n}\\) Kronecker \u79ef\u4e0eKhatri-Rao \u79ef \u00b6 Kronecker \u79ef \u00b6 Kronecker \u79ef\u5206\u4e3a\u53f3\u548c\u5de6\u4e24\u79cd Kronecker \u79ef\u3002 \u4f8b\u5982\u53f3 Kronecker \u79ef\u8bb0\u4f5c \\(A \\oplus B\\) \uff0c\u5b9a\u4e49\u4e3a\uff1a \\[ A \\oplus B = [a_1B, ..., a_nB]=[a_{ij}B]_{i=1,j=1}^{m,n}= \\begin{bmatrix} a_{11}B &a_{12}B &... &a_{1n}B \\\\ a_{21}B &a_{22}B &... &a_{2n}B \\\\ ... & ... & ... &... \\\\ a_{m1}B &a_{m2}B & ... &a_{mn}B \\end{bmatrix} \\] Kronecker \u79ef\u4e5f\u79f0\u76f4\u79ef(direct product)\u6216\u8005\u5f20\u91cf\u79ef(tensor product)1 Khatri-Rao \u79ef \u00b6 \u4e24\u4e2a\u5177\u6709\u76f8\u540c\u5217\u6570\u7684\u77e9\u9635 \\(G \\in R^{p \\times n}\\) \u548c \\(F \\in R^{q\\times n}\\) \u7684 Khatri-Rao \u79ef\u8bb0\u4f5c \\(F \\odot G\\) \uff0c\u5b9a\u4e49\u4e3a \\[ F \\odot G = [f_1 \\oplus g_1, f_2 \\oplus g_2, ..., f_n \\oplus g_n] \\in R^{pq \\times n} \\] \u5b83\u7531\u4e24\u4e2a\u77e9\u9635\u7684\u5bf9\u5e94\u5217\u5411\u91cf\u7684Kronecker \u79ef\u6392\u5217\u800c\u6210\u3002\u56e0\u6b64\uff0cKhatri-Rao \u79ef\u53c8\u53eb\u5bf9\u5e94\u5217 Kronecker \u79ef\u3002 \u5411\u91cf\u5316\u4e0e\u77e9\u9635\u5316 \u00b6 \u77e9\u9635\u7684\u5411\u91cf\u5316 \\(vec(A)\\) \u662f\u4e00\u7ebf\u6027\u53d8\u6362\uff0c\u5c06 \\(A\\) \u6309\u5217\u5806\u6808\uff08\u5f53\u7136\u4e5f\u53ef\u4ee5\u6309\u884c\u5806\u6808\uff09\u6392\u5217\u6210\u4e00\u4e2a \\(mn \\times 1\\) \u5411\u91cf\u3002\u5373 \\[vec(A)=[a_{11},...,a_{m1},...,a_{1n},...,a_{mn}]^{\\top}\\]","title":"\u77e9\u9635\u4ee3\u6570\u57fa\u7840"},{"location":"mb/maa/lec1/#_1","text":"Abstract \u77e9\u9635\u662f\u63cf\u8ff0\u548c\u6c42\u89e3\u7ebf\u6027\u65b9\u7a0b\u7ec4\u6700\u57fa\u672c\u548c\u6700\u6709\u7528\u7684\u6570\u5b66\u5de5\u5177 \u6570\u5b66\u8fd0\u7b97: \u8f6c\u7f6e\u3001\u5185\u79ef\u3001\u5916\u79ef\u3001\u9006\u77e9\u9635\u3001\u5e7f\u4e49\u9006\u77e9\u9635\u7b49 \u6807\u91cf\u51fd\u6570\uff1a\u8303\u6570\u3001\u4e8c\u6b21\u578b\u3001\u884c\u5217\u5f0f\u3001\u7279\u5f81\u503c\u3001\u79e9\u548c\u8ff9 \u7279\u6b8a\u8fd0\u7b97: \u76f4\u548c\u3001\u76f4\u79ef\u3001Hadamard \u79ef\u3001Kronecker \u79ef\u3001\u5411\u91cf\u5316","title":"\u77e9\u9635\u4ee3\u6570\u57fa\u7840"},{"location":"mb/maa/lec1/#_2","text":"","title":"\u77e9\u9635\u7684\u57fa\u672c\u8fd0\u7b97"},{"location":"mb/maa/lec1/#_3","text":"\\(m \\times n\\) \u7684\u7ebf\u6027\u65b9\u7a0b\u7ec4\uff0c\u4f7f\u7528 \\(m\\) \u4e2a\u65b9\u7a0b\u63cf\u8ff0 \\(n\\) \u4e2a\u672a\u77e5\u91cf\u4e4b\u95f4\u7684\u7ebf\u6027\u5173\u7cfb\u3002\u7528\u77e9\u9635-\u5411\u91cf\u5f62\u5f0f\u8868\u793a\u4e3a \\(Ax = b\\) \uff0c\u79f0\u4e3a \\(m \\times n\\) \u77e9\u9635\u3002\u7279\u6b8a\u7684\u6709\u884c\u5411\u91cf\u548c\u5217\u5411\u91cf\uff08\u5305\u62ec\u5b9e\u6570\u548c\u590d\u6570\uff09\u3002 \\(n \\times n\\) \u77e9\u9635\u7684\u4e3b\u5bf9\u89d2\u7ebf\u662f\u6307\u4ece\u5de6\u4e0a\u89d2\u5230\u53f3\u4e0b\u89d2\u76f8\u8fde\u63a5\u7684\u7ebf\u6bb5\uff0c\u6b21\u5bf9\u89d2\u7ebf\uff08\u4ea4\u53c9\u5bf9\u89d2\u7ebf\uff09\u662f\u4ece\u53f3\u4e0a\u89d2\u5230\u5de6\u4e0b\u89d2\u3002 \u4e3b\u5bf9\u89d2\u7ebf\u4ee5\u5916\u5143\u7d20\u5168\u90e8\u4e3a0\u7684 \\(n \\times n\\) \u7684\u77e9\u9635\u79f0\u4e3a\u5bf9\u89d2\u77e9\u9635\u3002 \u5bf9\u89d2\u77e9\u9635\u4e3b\u5bf9\u89d2\u7ebf\u5143\u7d20\u5168\u90e8\u4f4d 1\uff0c\u79f0\u4e3a\u5355\u4f4d\u77e9\u9635 \\(I_{n \\times n}\\) \u3002 \u6240\u6709\u5143\u7d20\u4e3a 0 \u7684 \\(m \\times n\\) \u77e9\u9635\u79f0\u4e3a\u96f6\u77e9\u9635 \\(O_{m \\times n}\\) \u3002 \u4e00\u4e2a\u5168\u90e8\u5143\u7d20\u4e3a\u96f6\u7684\u5411\u91cf\u79f0\u4e3a\u96f6\u5411\u91cf\u3002","title":"\u77e9\u9635\u4e0e\u5411\u91cf"},{"location":"mb/maa/lec1/#_4","text":"\\(A=[a_{ij}]\\) \u7684\u8f6c\u7f6e\u8bb0\u4f5c \\(A^{\\top}\\) \uff0c\u5143\u7d20\u5b9a\u4e49\u4e3a \\([A^{\\top}]_{i,j}=a_{ji}\\) \\(A=[a_{ij}]\\) \u7684\u590d\u6570\u5171\u8f6d\u8bb0\u4f5c \\(A^*\\) \uff0c\u5143\u7d20\u5b9a\u4e49\u4e3a \\([A^*]_{ij}=a_{ij}^*\\) \\(A=[a_{ij}]\\) \u7684(\u590d)\u5171\u8f6d\u8f6c\u7f6e\u8bb0\u4f5c \\(A^H\\) \uff0c\u5143\u7d20\u5b9a\u4e49\u4e3a \\([A^H]_{ij}=a_{ji}^*\\) \uff0c\uff08\u5171\u8f6d\u8f6c\u7f6e\u53c8\u53eb Hlermitian \u4f34\u968f/\u8f6c\u7f6e/\u5171\u8f6d\uff09 \u6ee1\u8db3 \\(A^{\\top}=A\\) \u7684\u6b63\u65b9\u5b9e\u77e9\u9635\u548c \\(A^H=A\\) \u7684\u6b63\u65b9\u590d\u77e9\u9635\u5206\u522b\u79f0\u4e3a\u5bf9\u79f0\u77e9\u9635\u548c Hermitian \u77e9\u9635(\u590d\u5171\u8f6d\u5bf9\u79f0\u77e9\u9635)\uff0c\u5171\u8f6d\u8f6c\u7f6e\u548c\u8f6c\u7f6e\u7684\u5173\u7cfb: \\(A^H=(A^*)^{\\top}=(A^{\\top})^*\\) \u77e9\u9635\u6ee1\u8db3\u4e0e\u6807\u91cf/\u77e9\u9635/\u5411\u91cf\u4e4b\u95f4\u7684\u52a0\u6cd5\u3001\u4e58\u6cd5\uff08 \u77e9\u9635\u4e58\u6cd5\u4e0d\u6ee1\u8db3\u4ea4\u6362\u5f8b \uff09 \u77e9\u9635\u4e0e\u5411\u91cf\u7684\u4e58\u6cd5 \\(Ax=y\\) \u53ef\u89c6\u4e3a\u5411\u91cf \\(x\\) \u7684\u7ebf\u6027\u53d8\u6362\uff0c \\(A\\) \u79f0\u4e3a\u7ebf\u6027\u53d8\u6362\u77e9\u9635 \u5982\u679c \\(A\\) \u53ef\u9006\uff0c\u5219\u5b58\u5728 \\(A^{-1}\\) \u4f7f\u5f97 \\(A^{-1}A=I\\) \uff0c\u79f0 \\(A^{-1}\\) \u662f \\(A\\) \u7684\u9006\u77e9\u9635 \u77e9\u9635\u7684\u5171\u8f6d\u3001\u8f6c\u7f5d\u548c\u5171\u8f6d\u8f6c\u7f6e\u6ee1\u8db3\u5206\u914d\u5f8b\uff1a \\((A+B)^x=A^x+B^x\uff0cx \\in (*,T,H)\\) \u77e9\u9635\u4e58\u79ef\u7684\u8f6c\u7f6e\u3001\u5171\u8f6d\u8f6c\u7f6e\u548c\u9006\u77e9\u9635\u6ee1\u8db3\u5173\u7cfb\u5f0f\uff1a \\((AB)^x=B^xA^x\uff0cx \\in (T,H,-1)\\) \u5171\u8f6d\u3001\u8f6c\u7f6e\u548c\u5171\u8f6d\u8f6c\u7f6e\u7b49\u7b26\u53f7\u5747\u53ef\u4e0e\u6c42\u9006\u7b26\u53f7\u4ea4\u6362\uff1a \\((A^x)^{-1}=(A^{-1})^x\uff0cx \\in (*,T,H)\\) \u82e5 \\(A\\) \u53ef\u9006\uff0c\u5bf9\u4e8e Hermitian \u77e9\u9635 \\(B=A^HA\\) \uff0c\u6709 \\(A^{-H}BA^{-1}=A^{-H}A^HAA^{-1}=I\\) \u82e5$A_{n \\time n}\u4e3a\u5e42\u7b49\u77e9\u9635\uff0c\u5219 \\(A^n = A\\) \\(I-A\\) \u4e3a\u5e42\u7b49\u77e9\u9635\uff08 \\(A-I\\) \u4e0d\u4e00\u5b9a\u662f\u5e42\u7b49\u77e9\u9635\uff09 \\(A^H\\) \u4e3a\u5e42\u7b49\u77e9\u9635 \\(I-A^H\\) \u4e3a\u5e42\u7b49\u77e9\u9635 \u82e5 \\(B\\) \u4e5f\u4e3a\u5e42\u7b49\u77e9\u9635\uff0c\u5e76\u4e14 \\(AB=BA\\) \uff0c\u5219 \\(AB\\) \u4e3a\u5e42\u7b49\u77e9\u9635 \\(A(I-A)=O\\) \uff08\u96f6\u77e9\u9635\uff09 \\((I-A)A=O\\) \uff08\u96f6\u77e9\u9635\uff09 \u51fd\u6570 \\(f(sI+tA)=(I-A)f(s)+Af(s+t)\\) \u82e5 \\(A_{n \\times n}\\) \u4e3a\u5bf9\u5408\u77e9\u9635\u6216\u5e42\u5355\u77e9\u9635\uff0c\u5219 \\(f(sI=tA)=\\frac{1}{2}[(I+A)f(s+t)+(I-A)f(s-t)]\\) \u77e9\u9635 \\(A\\) \u662f\u5bf9\u5408\u77e9\u9635\uff0c\u5f53\u4e14\u4ec5\u5f53 \\(\\frac{1}{2}(A+I)\\) \u4e3a\u5e42\u7b49\u77e9\u9635 \u82e5 \\(A_{n \\times n}\\) \u4e3a\u5e42\u96f6\u77e9\u9635\uff0c\u5219 \\(f(sI+tA)=If(s)+tAf^\\prime(s)\\) \u9664\u4e86\u77e9\u9635\u7684\u57fa\u672c\u8fd0\u7b97\uff0c\u8fd8\u6709\u77e9\u9635/\u4e09\u89d2/\u6307\u6570/\u5bf9\u6570\u51fd\u6570\u3001\u5bfc\u6570\u3001\u79ef\u5206\u7b49\u7b49","title":"\u77e9\u9635\u7684\u57fa\u672c\u8fd0\u7b97"},{"location":"mb/maa/lec1/#_5","text":"\u4e00\u7ec4 \\(m\\) \u7ef4\u5411\u91cf \\(\\{u_1, ..., u_n\\}\\) \u79f0\u4e3a\u7ebf\u6027\u65e0\u5173\uff0c\u5219\u65b9\u7a0b \\(c_1u_1+...+c_nu_n=0\\) \u53ea\u6709\u96f6\u89e3 \\(c_1=...=c_n=0\\) \uff0c\u53cd\u4e4b\u7ebf\u6027\u76f8\u5173\u3002\u77e9\u9635 \\(A\\) \u662f\u975e\u5947\u5f02\u7684\uff0c\u5f53\u4e14\u4ec5\u5f53 \\(Ax=0\\) \u53ea\u6709\u96f6\u89e3\uff0c\u53cd\u4e4b\u77e9\u9635\u662f\u5947\u5f02\u7684 \\(A_{n \\times n}=[a_1,...,a_n]\\) \u662f\u975e\u5947\u5f02\u7684\uff0c\u5f53\u4e14\u4ec5\u5f53\u5b83\u7684 \\(n\\) \u4e2a\u5217\u5411\u91cf \\(a_1,...,a_n\\) \u7ebf\u6027\u65e0\u5173\u3002","title":"\u5411\u91cf\u7684\u7ebf\u6027\u65e0\u5173\u6027\u4e0e\u975e\u5947\u5f02\u77e9\u9635"},{"location":"mb/maa/lec1/#hilbert","text":"","title":"\u5411\u91cf\u7a7a\u95f4\u3001\u7ebf\u6027\u6620\u5c04\u4e0e Hilbert \u7a7a\u95f4"},{"location":"mb/maa/lec1/#_6","text":"\u4ee5\u5411\u91cf\u4e3a\u5143\u7d20\u7684\u96c6\u5408 \\(V\\) \u79f0\u4e3a\u5411\u91cf\u7a7a\u95f4\u3002\u5982\u679c \\(V\\) \u662f\u4e00\u4e2a\u5411\u91cf\u7a7a\u95f4\uff0c\u5219\uff1a \u96f6\u5411\u91cf \\(0\\) \u662f\u552f\u4e00\u7684 \u5bf9\u6bcf\u4e00\u4e2a\u5411\u91cf \\(y\\) \uff0c\u52a0\u6cd5\u7684\u9006\u8fd0\u7b97 \\(-y\\) \u662f\u552f\u4e00\u7684 \u5bf9\u6bcf\u4e00\u4e2a\u5411\u91cf \\(y\\) \uff0c\u6052\u6709 \\(0y=0\\) \u5bf9\u6bcf\u4e00\u4e2a\u6807\u91cf a\uff0c\u6052\u6709 \\(a0=0\\) \u82e5 \\(ay=0\\) \uff0c\u5219 \\(a=0\\) \u6216\u8005 \\(y=0\\) \\((-1)y=-y\\) \u4ee4 \\(V\\) \u548c \\(W\\) \u662f\u4e24\u4e2a\u5411\u91cf\u7a7a\u95f4\uff0c\u82e5 \\(W\\) \u662f \\(V\\) \u4e2d\u4e00\u4e2a\u975e\u7a7a\u7684\u5b50\u96c6\u5408\uff0c\u5219\u79f0\u5b50\u96c6\u5408 \\(W\\) \u662f \\(V\\) \u7684\u4e00\u4e2a\u5b50\u7a7a\u95f4 \\(R^n\\) \u7684\u5b50\u96c6\u5408 \\(W\\) \u662f \\(R^n\\) \u7684\u4e00\u4e2a\u5b57\u7a7a\u95f4\uff0c\u5f53\u4e14\u4ec5\u5f53\u6ee1\u8db3\u4ee5\u4e0b\u6761\u4ef6\uff1a \u5f53\u5411\u91cf \\(x,y\\) \u5c5e\u4e8e \\(W\\) \uff0c\u5219 \\(x+y\\) \u4e5f\u5c5e\u4e8e \\(W\\) \uff0c\u5373\u6ee1\u8db3\u52a0\u6cd5\u7684\u95ed\u5408\u6027 \u5f53 \\(x \\in W\\) \uff0c\u4e14 a \u4e3a\u6807\u91cf\uff0c\u5219 \\(ax\\) \u4e5f\u5c5e\u4e8e \\(W\\) \uff0c\u5373\u6ee1\u8db3\u4e0e\u6807\u91cf\u4e58\u79ef\u7684\u95ed\u5408\u6027 \u96f6\u5411\u91cf \\(0\\) \u662f \\(W\\) \u7684\u5143\u7d20 \u82e5 \\(A\\) \u548c \\(B\\) \u662f\u5411\u91cf\u7a7a\u95f4 \\(V\\) \u7684\u4e24\u4e2a\u5b50\u7a7a\u95ee\uff0c\u5e76\u6ee1\u8db3 \\(V=A+B\\) \u548c \\(A \\cap B=\\{0\\}\\) \uff0c\u5219\u79f0 \\(V\\) \u662f\u5b50\u7a7a\u95f4 \\(A\\) \u548c \\(B\\) \u7684\u76f4\u63a5\u6c42\u548c\uff0c\u7b80\u79f0\u76f4\u548c(direetsum)\uff0c\u8bb0\u4f5c \\(V=A \\oplus B\\) \u3002","title":"\u5411\u91cf\u7a7a\u95f4"},{"location":"mb/maa/lec1/#_7","text":"\\(T:\\ V \\to W\\) \u79f0\u4e3a\u5b50\u7a7a\u95f4 \\(V\\) \u5230\u5b50\u7a7a\u95f4 \\(W\\) \u7684\u6620\u5c04\u3002\u5b83\u8868\u793a\u5c06\u5b50\u7a7a\u95f4 \\(V\\) \u7684\u6bcf\u4e00\u4e2a\u5411\u91cf\u53d8\u6210\u5b50\u7a7a\u95f4 \\(W\\) \u7684\u4e00\u4e2a\u76f8\u5bf9\u5e94\u5411\u91cf\u7684\u4e00\u79cd\u89c4\u5219\u3002\u4e8e\u662f\uff0c\u82e5 \\(v \\in V\\) \u548c \\(w \\in W\\) \uff0c\u5219\u5411\u91cf \\(w\\) \u662f \\(v\\) \u7684\u6620\u5c04\u6216\u53d8\u6362\uff0c\u5373\u6709 \\(w = T(v)\\) \uff0c\u5e76\u79f0\u5b50\u7a7a\u95f4 \\(V\\) \u662f\u6620\u5c04 \\(T\\) \u7684\u59cb\u96c6\u6216\u4e01\u4e00\u5b87\uff0c\u79f0 \\(W\\) \u662f\u6620\u5c04\u7684\u7ec8\u96c6\u6216\u4e0a\u57df\u3002 \u4ee4 \\(V\\) \u548c\u4ee5\u662f\u4e24\u4e2a\u5411\u91cf\u7a7a\u95f4\uff0c \\(T:V \\to W\\) \u4e3a\u4e00\u7ebf\u6027\u53d8\u6362: \u82e5 \\(M\\) \u662f \\(V\\) \u7684\u7ebf\u6027\u5b50\u7a7a\u95f4\uff0c\u5219 \\(T(M)\\) \u662f \\(W\\) \u7684\u7ebf\u6027\u5b50\u7a7a\u95f4\uff1b \u82e5 \\(N\\) \u662f \\(W\\) \u7684\u7ebf\u6027\u5b50\u7a7a\u95f4\uff0c\u5247\u7ebf\u6027\u53cd\u53d8\u6362 \\(T^{-1}(N)\\) \u662f \\(V\\) \u7684\u7ebf\u6027\u5b50\u7a7a\u95f4\u3002","title":"\u7ebf\u6027\u6620\u5c04"},{"location":"mb/maa/lec1/#hilbert_1","text":"\uff08\u5185\u79ef\u4e0e\u5185\u79ef\u5411\u91cf\u7a7a\u95f4\uff09\u82e5\u5bf9\u6240\u6709 \\(x,y,z \\in V\\) \u548c \\(\\alpha,\\beta \\in K\\) \uff0c\u6620\u5c04\u51fd\u6570 \\(<\\cdot,\\cdot>:V \\times V \\to K\\) \u6ee1\u8db3\u4e00\u4e0b\u4e09\u6761\u516c\u7406\uff1a \u5171\u8f6d\u5bf9\u79f0\u6027 \\(=^*\\) \u7b2c\u4e00\u53d8\u5143\u7684\u7ebf\u6027\u6027 \\(<\\alpha x+\\beta y,z>=\\alpha + \\beta \\) \u975e\u8d1f\u6027 \\( \\ge 0\\) \uff0c\u5e76\u4e14 \\( = 0 \\leftrightarrow x=0\\) \uff08\u4e25\u683c\u6b63\u6027\uff09 \u4e24\u4e2a\u5411\u91cf\u7684\u5185\u79ef\u53ef\u4ee5\u5ea6\u91cf\u5b83\u4eec\u4e4b\u95ee\u7684\u5939\u89d2\uff1a \\(\\cos \\theta = \\frac{}{\\sqrt{}\\sqrt{}}\\) \uff08\u8303\u6570\u548c\u8d4b\u8303\u5411\u91cf\u7a7a\u95f4\uff09\u4ee4 \\(V\\) \u662f\u4e00(\u5b9e\u6216\u590d)\u5411\u91cf\u7a7a\u95f4\u3002\u5411\u91cf \\(x\\) \u7684\u8303\u6570\u662f\u4e00\u5b9e\u51fd\u6570 \\(p(x):V \\to R\\) \uff0c\u82e5\u5bf9\u6240\u6709\u5411\u91cf \\(x,y \\in V\\) \u548c\u4efb\u610f\u4e00\u4e2a\u6807\u91cf \\(c \\in K\\) (\u5176\u4e2d \\(K\\) \u8868\u793a \\(R\\) \u6216 \\(C\\) )\uff0c\u5219\uff1a \u975e\u8d1f\u6027\uff1a \\(p(x) \\ge 0\\) \uff0c\u5e76\u4e14 \\(p(x)=0 \\Leftrightarrow x = 0\\) \u9f50\u6b21\u6027\uff1a \\(p(cx)=|c|\\cdot p(x)\\) \u5bf9\u6240\u6709\u590d\u5e38\u6570 \\(c\\) \u6210\u7acb \u4e09\u89d2\u4e0d\u7b49\u5f0f\uff1a \\(p(x+y) \\le p(x)+p(y)\\) \u6700\u5e38\u7528\u7684\u5411\u91cf\u8303\u6570\u4e3a Euclidean \u8303\u6570\u6216\u8005 \\(L_2\\) \u8303\u6570\uff0c\u8bb0\u4f5c \\(\\parallel \\cdot \\parallel_2\\) \uff0c\u5b9a\u4e49\u4e3a \\[ \\parallel x \\parallel _E = \\parallel x \\parallel _2 = \\sqrt{x_1^2+...+x_m^2} \\] \\(L_2\\) \u8303\u6570\u53ef\u4ee5\u76f4\u63a5\u5ea6\u91cf\u4e00\u4e2a\u5411\u91cf \\(x\\) \u7684\u957f\u5ea6 \\(size(x)=\\parallel x \\parallel_2\\) \uff0c\u4e24\u4e2a\u5411\u91cf\u4e4b\u95f4\u7684\u8ddd\u79bb \\(d(x,y)=\\parallel x-y \\parallel_2\\) \uff08\u5411\u91cf \\(x \\in V\\) \u7684\u534a\u8303\u6570/\u4f2a\u8303\u6570\uff09\u82e5\u5bf9\u6240\u6709\u5411\u91cf \\(x,y \\in V\\) \u548c\u4e00\u4e2a\u6807\u91cf \\(c\\) \uff0c\u6ee1\u8db3 \\(p(x) \\ge 0\\) \\(p(cx)=|c| \\cdot p(x)\\) \\(p(x+y) \\le p(x)+p(y)\\) \uff08\u5411\u91cf \\(x \\in V\\) \u7684\u62df\u8303\u6570\uff09\u82e5\u5bf9\u6240\u6709\u5411\u91cf \\(x,y \\in V\\) \u548c\u4e00\u4e2a\u6807\u91cf \\(c\\) \uff0c\u6ee1\u8db3 \\(p(x) \\ge 0\\) \uff0c\u4e14 \\(p(x) = 0 \\Leftrightarrow x = 0\\) \\(p(cx)=|c| \\cdot p(x)\\) \\(p(x+y) \\le C(p(x)+p(y))\\) \uff0c\u5176\u4e2d \\(C \\ne 1\\) \u4e3a\u67d0\u4e2a\u6b63\u5b9e\u6570 \uff08\u5b8c\u5907\u6027\uff09\u4e00\u4e2a\u5411\u91cf\u7a7a\u95f4 \\(V\\) \u79f0\u4e3a\u5b8c\u5907\u5411\u91cf\u7a7a\u95f4\uff0c\u82e5\u5bf9\u4e8e \\(V\\) \u4e2d\u7684\u6bcf\u4e00\u4e2a Cauchy \u5e8f\u5217 \\(\\{ v_n \\}_{n=1}^{\\infty} \\subset V\\) \uff0c\u5728\u5411\u91cf\u7a7a\u95f4 \\(V\\) \u5185\u5b58\u5728\u4e00\u4e2a\u5143\u7d20 \\(v\\) \uff0c\u4f7f\u5f97 \\(\\lim_{n \\to \\infty} v_n \\to v\\) \uff0c\u5373 \\(V\\) \u5185\u7684\u6bcf\u4e00\u4e2a Cauchy \u5e8f\u5217\u90fd\u6536\u655b\u5728\u5411\u91cf\u7a7a\u95f4 \\(V\\) \u5185\u3002 \uff08\u4f34\u968f\u7b97\u5b50\uff09\u4ee4 \\(T\\) \u662f Hilbert \u7a7a\u95f4 \\(H\\) \u5185\u7684\u6709\u754c\u7ebf\u6027\u7b97\u5b50\u3002\u82e5 \\(=\\) \u5bf9\u6240\u6709\u5411\u91cf \\(x,y \\in H\\) \u6210\u7acb\uff0c\u5219\u79f0 \\(T^*\\) \u662f \\(T\\) \u7684\u4f34\u968f\u7b97\u5b50(adjoint operator)\u3002","title":"\u5185\u79ef\u7a7a\u95f4\u3001\u8d4b\u8303\u7a7a\u95ee\u4e0eHilbert \u7a7a\u95f4"},{"location":"mb/maa/lec1/#_8","text":"","title":"\u5185\u79ef\u4e0e\u8303\u6570"},{"location":"mb/maa/lec1/#_9","text":"\\(n\\) \u9636\u590d\u5411\u91cf \\(x=[x_1,...,x_n]^{\\top},y=[y_1,...,y_n]^{\\top}\\) \u4e4b\u95f4\u7684\u5185\u79ef \\(=x^Hy=\\sum_{i=1}^n x_i^*y_i\\) \u79f0\u4e3a\u5178\u8303\u5185\u79ef\u3002\u52a0\u6743\u5185\u79ef \\(=x^HGy\\) \uff0c\u5176\u4e2d \\(G\\) \u4e3a\u6b63\u5b9a\u7684 Hermitian \u77e9\u9635\u3002 \u5728\u5b9e\u548c\u590d\u5185\u79ef\u7a7a\u95f4\u91cc\uff0c\u8303\u6570\u5177\u6709\u4ee5\u4e0b\u6027\u8d28\uff1a \\(\\parallel 0 \\parallel = 0\\) \uff0c\u5e76\u4e14 \\(\\parallel x \\parallel > 0\uff0c\\forall x \\ne 0\\) \\(\\parallel cx \\parallel = |c| \\cdot \\parallel x \\parallel\\) \u5bf9\u6240\u6709\u5411\u91cf \\(x\\) \u548c\u6807\u91cf c \u6210\u7acb \u8303\u6570\u670d\u4ece\u6781\u5316\u6052\u7b49\u5f0f\uff1a \\[ =\\frac{1}{4}(\\parallel x + y \\parallel^2-\\parallel x - y \\parallel^2), \\forall x,y\uff08\u5b9e\u5185\u79ef\u7a7a\u95f4\uff09\\\\ =\\frac{1}{4}(\\parallel x + y \\parallel^2-\\parallel x - y \\parallel^2 - j \\parallel x+jy \\parallel^2+j \\parallel x-jy \\parallel^2), \\forall x,y\uff08\u590d\u5185\u79ef\u7a7a\u95f4\uff09 \\] \u8303\u6570\u670d\u4ece\u5e73\u884c\u56db\u8fb9\u5f62\u6cd5\u5219: \\[ \\parallel x+y \\parallel^2 + \\parallel x - y \\parallel^2 = 2(\\parallel x \\parallel^2+\\parallel y \\parallel^2), \\forall x,y \\] \u8303\u6570\u6ee1\u8db3\u4e09\u89d2\u4e0d\u7b49\u5f0f \\(\\parallel x+y \\parallel \\le \\parallel x \\parallel + \\parallel y \\parallel, \\forall x,y\\) \u8303\u6570\u670d\u4ece Cauchy-Schwartz \u4e0d\u7b49\u5f0f \\(|| \\le \\parallel x \\parallel \\cdot \\parallel y \\parallel\\)","title":"\u5411\u91cf\u7684\u5185\u79ef\u4e0e\u8303\u6570"},{"location":"mb/maa/lec1/#_10","text":"\\(L_0\\) \u8303\u6570 \\(\\parallel x \\parallel_0 \\overset{def}{=}\\) \u975e\u96f6\u5143\u7d20\u7684\u4e2a\u6570 \\(L_1\\) \u8303\u6570 \\(\\parallel x \\parallel_1 \\overset{def}{=} \\sum_{i=1}^m |x_i|\\) \\(L_2\\) \u8303\u6570 \\(\\parallel x \\parallel_2 = (|x_1|^2+...+|x_m|^2)^{\\frac{1}{2}}\\) \\(L_\\infty\\) \u8303\u6570 \\(\\parallel x \\parallel_\\infty = \\max\\{|x_1|, ..., |x_m|\\}\\) \\(L_p\\) \u8303\u6570 \\(\\parallel x \\parallel_p = (\\sum_{i=1}^m |x_i|^p)^{\\frac{1}{p}}\\)","title":"\u5e38\u6570\u5411\u91cf\u7684\u5178\u8303\u5185\u79ef\u4e0e\u8303\u6570"},{"location":"mb/maa/lec1/#_11","text":"\u82e5 \\(x(t)\\) \u548c \\(y(t)\\) \u5206\u522b\u662f\u53d8\u91cf \\(t\\) \u7684\u51fd\u6570\u53d8\u91cf\uff0c\u5219\u5185\u79ef\u5b9a\u4e49\u4e3a \\[ \\overset{def}{=} \\int_{a}^{b} x^H(t)y(t)dt \\]","title":"\u51fd\u6570\u5411\u91cf\u7684\u5185\u79ef\u4e0e\u8303\u6570"},{"location":"mb/maa/lec1/#_12","text":"\u82e5 \\(x(\\xi)\\) \u548c \\(y(\\xi)\\) \u5206\u522b\u662f\u6837\u672c\u53d8\u91cf \\(\\xi\\) \u968f\u673a\u53d8\u91cf\uff0c\u5219\u5185\u79ef\u5b9a\u4e49\u4e3a \\[ \\overset{def}{=} E\\{x^H(\\xi)y(\\xi)\\} \\]","title":"\u968f\u673a\u5411\u91cf\u7684\u5185\u79ef\u4e0e\u8303\u6570"},{"location":"mb/maa/lec1/#_13","text":"\u5c06\u5411\u91cf\u7684\u5185\u79ef\u4e0e\u8303\u6570\u52a0\u4ee5\u63a8\u5e7f\u3002 \u77e9\u9635\u7684\u8303\u6570\u6709\u4e09\u79cd\u4e3b\u8981\u7c7b\u578b:\u8bf1\u5bfc\u8303\u6570\u3001\u5143\u7d20\u5f62\u5f0f\u8303\u6570\u548c Schatten \u8303\u6570\u3002","title":"\u77e9\u9635\u7684\u5185\u79ef\u4e0e\u8303\u6570"},{"location":"mb/maa/lec1/#_14","text":"\u6982\u7387\u8bba\u77e5\u8bc6\u3002","title":"\u968f\u673a\u5411\u91cf"},{"location":"mb/maa/lec1/#_15","text":"\u4e8c\u6b21\u578b \u7279\u5f81\u503c \u8ff9 \u79e9","title":"\u77e9\u9635\u7684\u6027\u80fd\u6307\u6807"},{"location":"mb/maa/lec1/#_16","text":"\u4e3b\u8981\u8ba8\u8bba\u975e\u5947\u5f02\u7684\u6b63\u65b9\u77e9\u9635 \\(A\\) \u7684\u9006\u77e9\u9635 \\(A^{-1}\\)","title":"\u9006\u77e9\u9635\u4e0e\u4f2a\u9006\u77e9\u9635"},{"location":"mb/maa/lec1/#moore-penrose","text":"\u4e3b\u8981\u8ba8\u8bba\u4e00\u4e2a\u79e9\u7a00\u7f3a\u7684\u77e9\u9635\u662f\u5426\u5b58\u5728\u9006\u77e9\u9635\uff0c\u5982\u679c\u5b58\u5728\u9700\u8981\u6ee1\u8db3\u4ec0\u4e48\u6761\u4ef6\u3002","title":"Moore-Penrose \u9006\u77e9\u9635"},{"location":"mb/maa/lec1/#hadamard","text":"","title":"\u77e9\u9635\u7684\u76f4\u548c\u4e0eHadamard \u79ef"},{"location":"mb/maa/lec1/#_17","text":"\\(m \\times m\\) \u77e9\u9635\u7684 \\(A\\) \u4e0e \\(n \\times n\\) \u77e9\u9635\u7684 \\(B\\) \u7684\u76f4\u548c\u8bb0\u4f5c \\(A \\oplus B\\) \uff0c\u5373 \\[ A \\oplus B = \\begin{bmatrix} A & O_{m \\times n} \\\\ O_{n \\times m} & B \\end{bmatrix} \\]","title":"\u77e9\u9635\u7684\u76f4\u548c"},{"location":"mb/maa/lec1/#hadamard_1","text":"\\(m \\times n\\) \u77e9\u9635\u7684 \\(A=[a_{ij}]\\) \u4e0e \\(m \\times n\\) \u77e9\u9635\u7684 \\(B=[b_{ij}]\\) \u7684 Hadamard \u79ef\u8bb0\u4f5c \\(A * B\\) \uff0c\u5143\u7d20\u5b9a\u4e49\u4e3a \\((A*B)_{ij}=a_{ij}b_{ij}\\) \u3002\u5373 Hadamard \u79ef\u98df\u4e00\u79cd\u6620\u5c04 \\(R^{m \\times n} \\times R^{m \\times n} \\to R^{m \\times n}\\)","title":"Hadamard \u79ef"},{"location":"mb/maa/lec1/#kronecker-khatri-rao","text":"","title":"Kronecker \u79ef\u4e0eKhatri-Rao \u79ef"},{"location":"mb/maa/lec1/#kronecker","text":"Kronecker \u79ef\u5206\u4e3a\u53f3\u548c\u5de6\u4e24\u79cd Kronecker \u79ef\u3002 \u4f8b\u5982\u53f3 Kronecker \u79ef\u8bb0\u4f5c \\(A \\oplus B\\) \uff0c\u5b9a\u4e49\u4e3a\uff1a \\[ A \\oplus B = [a_1B, ..., a_nB]=[a_{ij}B]_{i=1,j=1}^{m,n}= \\begin{bmatrix} a_{11}B &a_{12}B &... &a_{1n}B \\\\ a_{21}B &a_{22}B &... &a_{2n}B \\\\ ... & ... & ... &... \\\\ a_{m1}B &a_{m2}B & ... &a_{mn}B \\end{bmatrix} \\] Kronecker \u79ef\u4e5f\u79f0\u76f4\u79ef(direct product)\u6216\u8005\u5f20\u91cf\u79ef(tensor product)1","title":"Kronecker \u79ef"},{"location":"mb/maa/lec1/#khatri-rao","text":"\u4e24\u4e2a\u5177\u6709\u76f8\u540c\u5217\u6570\u7684\u77e9\u9635 \\(G \\in R^{p \\times n}\\) \u548c \\(F \\in R^{q\\times n}\\) \u7684 Khatri-Rao \u79ef\u8bb0\u4f5c \\(F \\odot G\\) \uff0c\u5b9a\u4e49\u4e3a \\[ F \\odot G = [f_1 \\oplus g_1, f_2 \\oplus g_2, ..., f_n \\oplus g_n] \\in R^{pq \\times n} \\] \u5b83\u7531\u4e24\u4e2a\u77e9\u9635\u7684\u5bf9\u5e94\u5217\u5411\u91cf\u7684Kronecker \u79ef\u6392\u5217\u800c\u6210\u3002\u56e0\u6b64\uff0cKhatri-Rao \u79ef\u53c8\u53eb\u5bf9\u5e94\u5217 Kronecker \u79ef\u3002","title":"Khatri-Rao \u79ef"},{"location":"mb/maa/lec1/#_18","text":"\u77e9\u9635\u7684\u5411\u91cf\u5316 \\(vec(A)\\) \u662f\u4e00\u7ebf\u6027\u53d8\u6362\uff0c\u5c06 \\(A\\) \u6309\u5217\u5806\u6808\uff08\u5f53\u7136\u4e5f\u53ef\u4ee5\u6309\u884c\u5806\u6808\uff09\u6392\u5217\u6210\u4e00\u4e2a \\(mn \\times 1\\) \u5411\u91cf\u3002\u5373 \\[vec(A)=[a_{11},...,a_{m1},...,a_{1n},...,a_{mn}]^{\\top}\\]","title":"\u5411\u91cf\u5316\u4e0e\u77e9\u9635\u5316"},{"location":"mb/maa/lec2/","text":"\u77e9\u9635\u4ee3\u6570\u57fa\u7840 \u00b6 Abstract \u5143\u7d20\u4e4b\u95f4\u5b58\u5728\u67d0\u79cd\u7279\u6b8a\u7ed3\u6784\u5173\u7cfb\u7684\u77e9\u9635\uff0c\u7edf\u79f0\u4e3a\u7279\u6b8a\u77e9\u9635 Hermitian \u77e9\u9635 \u00b6 \u4e00\u4e2a\u6b63\u65b9\u7684\u590d\u503c\u77e9\u9635 \\(\\mathbf{A}=[a_{ij}] \\in C^{n\\times n}\\) \u79f0\u4e3a Hermitian \u77e9\u9635 \u82e5 \\(\\mathbf{A}=-\\mathbf{A}^H\\) \uff0c\u5219\u77e9\u9635 \\(\\mathbf{A}\\) \u79f0\u4e3a\u53cd Hermitian \u77e9\u9635 \u4e2d\u592e Hermitian \u77e9\u9635 \\(\\mathbf{R}\\) \u662f\u4e00\u4e2a\u5143\u7d20\u6ee1\u8db3\u5bf9\u79f0\u6027 \\(r_{ij}=r_{n-j+1,n-i+1}^*\\) \u7684 \\(n \\times n\\) \u6b63\u65b9\u77e9\u9635 \u4e2d\u592e Hermitian \u77e9\u9635\u7684\u4e00\u4e2a\u7279\u6b8a\u5b50\u7c7b\u662f\u53cc\u91cd\u5bf9\u79f0\u7684\u77e9\u9635\uff0c\u5b83\u65e2\u662f\u5173\u4e8e\u4e3b\u5bf9\u89d2\u7ebf\u5bf9\u79f0\u7684 Hermitian \u77e9\u9635\uff0c\u53c8\u662f\u5173\u4e8e\u4ea4\u53c9\u5bf9\u89d2\u7ebf\u5bf9\u79f0\u7684\u4ea4\u53c9\u5bf9\u79f0\u77e9\u9635\uff0c\u5982 \\[ \\mathbf{R}= \\begin{bmatrix} r_{11} & r_{21}^* & r_{31}^* & r_{41}^* \\\\ r_{21} & r_{22} & r_{32}^* & r_{31}^* \\\\ r_{31} & r_{32} & r_{22} & r_{21}^* \\\\ r_{41} & r_{31} & r_{21} & r_{11} \\end{bmatrix} \\] \u7f6e\u6362\u77e9\u9635\u3001\u4e92\u6362\u77e9\u9635\u4e0e\u9009\u62e9\u77e9\u9635 \u00b6 \u7f6e\u6362\u77e9\u9635\u4e0e\u4e92\u6362\u77e9\u9635 \u00b6 \u82e5\u6bcf\u4e00\u884c\u548c\u6bcf\u4e00\u5217\u6709\u4e14\u53ea\u6709\u4e00\u4e2a\u975e\u96f6\u5143\u7d20 1 \u7684\u6b63\u65b9\u77e9\u9635\u79f0\u4e3a\u7f6e\u6362\u77e9\u9635 \\((\\mathbf{P}_{m \\times n})^{\\top} = \\mathbf{n \\times m}\\) \\(\\mathbf{P}^{\\top}\\mathbf{P}=\\mathbf{P}\\mathbf{P}^{\\top}=\\mathbf{I}\\) \uff0c\u8bf4\u660e\u7f6e\u6362\u77e9\u9635\u662f\u6b63\u4ea4\u77e9\u9635 \\(\\mathbf{P}^{\\top}=\\mathbf{P}^{-1}\\) \\(\\mathbf{P}^{\\top}\\mathbf{A}\\mathbf{P}\\) \u4e0e \\(\\mathbf{A}\\) \u5177\u6709\u76f8\u540c\u7684\u5bf9\u89d2\u7ebf\u5143\u7d20\uff0c\u4f46\u6392\u5217\u987a\u5e8f\u53ef\u80fd\u4e0d\u540c \u53e6\u5916\u4e09\u4e2a\u7279\u6b8a\u5f62\u5f0f\uff1a\u4ea4\u6362\u77e9\u9635\u3001\u4e92\u6362\u77e9\u9635\u3001\u79fb\u4f4d\u77e9\u9635 \u5e7f\u4e49\u7f6e\u6362\u77e9\u9635\u4e0e\u9009\u62e9\u77e9\u9635 \u00b6 \u6bcf\u4e00\u884c\u548c\u6bcf\u4e00\u5217\u6709\u4e14\u53ea\u6709\u4e00\u4e2a\u975e\u96f6\u5143\u7d20\u7684\u6b63\u65b9\u77e9\u9635\u79f0\u4e3a\u5e7f\u4e49\u7f6e\u6362\u77e9\u9635 \u4e00\u4e2a\u6b63\u65b9\u77e9\u9635\u662f \\(g\\) \u77e9\u9635\uff0c\u5f53\u4e14\u4ec5\u5f53\u5b83\u53ef\u4ee5\u5206\u89e3\u4e3a\u4e00\u4e2a\u7f6e\u6362\u77e9\u9635\u548c\u4e00\u4e2a\u975e\u5947\u5f02\u7684\u5bf9\u89d2\u77e9\u9635\u4e4b\u79ef\uff0c\u5373 \\(\\mathbf{G}=\\mathbf{P}\\mathbf{D}\\) \u9009\u62e9\u77e9\u9635\u662f\u4e00\u79cd\u53ef\u4ee5\u5bf9\u67d0\u4e2a\u7ed9\u5b9a\u77e9\u9635\u7684\u67d0\u4e9b\u884c\u6216\u8005\u67d0\u4e9b\u5217\u8fdb\u884c\u9009\u62e9\u7684\u77e9\u9635 \u6b63\u5b9a\u77e9\u9635\u4e0e\u9149\u77e9\u9635 \u00b6 \u5411\u91cf \\(x_1, ..., x_k \\in C^n\\) \u7ec4\u6210\u4e00\u6b63\u4ea4\u7ec4\uff0c\u82e5 \\(x_i^Hx_j=0, 1 \\le i < j < \\le k\\) \u3002\u82e5\u662f\u5f52\u4e00\u5316\u7684\uff0c\u5219\u4e3a\u6807\u51c6\u6b63\u4ea4\u7ec4 \u4e00\u7ec4\u6b63\u4ea4\u7684\u975e\u96f6\u5411\u91cf\u662f\u7ebf\u6027\u65e0\u5173\u7684 \u4e00\u5b9e\u7684\u6b63\u65b9\u77e9\u9635 \\(\\mathbf{Q} \\in R^{n \\times n}\\) \u79f0\u4e3a\u6b63\u4ea4\u77e9\u9635\uff0c\u82e5 \\(\\mathbf{Q}\\mathbf{Q}^{\\top}=\\mathbf{Q}^{\\top}\\mathbf{Q}=\\mathbf{I}\\) \u4e00\u590d\u503c\u6b63\u65b9\u77e9\u9635 \\(\\mathbf{U}\\in C^{n \\times n}\\) \u79f0\u4e3a\u9149\u77e9\u9635\uff0c\u82e5 \\(\\mathbf{U}\\mathbf{U}^{\\top}=\\mathbf{U}^{\\top}\\mathbf{U}=\\mathbf{I}\\) \u82e5 \\(n \\times n\\) \u77e9\u9635 \\(\\mathbf{A}=[a_{ij}]\\) \u548c \\(\\mathbf{B}=[b_{ij}]\\) \u662f\u9149\u7b49\u4ef7\u7684\uff0c\u5219 \\(\\sum_{i=1}^n\\sum_{j=1}^n|b_{ij}|^2=\\sum_{i=1}^n\\sum_{j=1}^n|a_{ij}|^2\\) \u77e9\u9635 \\(\\mathbf{A} \\in C^{n \\times n}\\) \u79f0\u4e3a\u6b63\u89c4\u77e9\uff0c\u82e5 \\(\\mathbf{A}^H\\mathbf{A}=\\mathbf{A}\\mathbf{A}^{\\top}\\) \u4ee4 \\(\\mathbf{J}\\) \u4e3a \\(N \\times N\\) \u7b26\u53f7\u77e9\u9635\uff0c\u6ee1\u8db3 \\(\\mathbf{Q}\\mathbf{J}\\mathbf{Q}^{\\top}=\\mathbf{J}\\) \u7684 \\(N \\times N\\) \u77e9\u9635 \\(\\mathbf{Q}\\) \u79f0\u4e3a \\(J\\) \u6b63\u4ea4\u77e9\u9635\uff0c\u6216\u79f0\u8d85\u6b63\u89c4\u77e9\u9635 \u5e26\u578b\u77e9\u9635\u4e0e\u4e09\u89d2\u77e9\u9635 \u00b6 \u5e26\u884c\u77e9\u9635 \u00b6 \u6ee1\u8db3 \\(a_{ij}=0,|i-j|>k\\) \u7684\u77e9\u9635 \\(\\mathbf{A}\\in C^{m\\times n}\\) \u79f0\u4e3a\u5e26\u578b\u77e9\u9635 \u4e09\u5bf9\u89d2\u77e9\u9635\u662f\u5e26\u578b\u77e9\u9635\u7684\u7279\u6b8a\u5f62\u5f0f\uff0c\u5f53 \\(|i-j|>1\\) \u65f6\uff0c \\(a_{ij}=0\\) \u4e09\u89d2\u77e9\u9635 \u00b6 \u4e24\u79cd\u7279\u6b8a\u7684\u5e38\u7528\u5e26\u578b\u77e9\u9635\u4e3a\u4e0a\u4e09\u89d2\u77e9\u9635\u548c\u4e0b\u4e09\u89d2\u77e9\u9635 \u6c42\u548c\u5411\u91cf\u4e0e\u4e2d\u5fc3\u5316\u77e9\u9635 \u00b6 \u6c42\u548c\u5411\u91cf \u00b6 \u6240\u6709\u5143\u7d20\u7b49\u4e8e 1 \u7684\u5411\u91cf\u79f0\u4e3a\u6c42\u548c\u5411\u91cf\uff0c\u8bb0\u4e3a \\(\\mathbf{I}=[1,1,...,1]^{\\top}\\) \u4e2d\u5fc3\u5316\u77e9\u9635 \u00b6 \u77e9\u9635 \\(\\mathbf{C}_n=\\mathbf{I}_n-\\mathbf{J}_n=\\mathbf{I}_n-\\frac{1}{n}\\mathbf{J}_n\\) \u79f0\u4e3a\u4e2d\u5fc3\u5316\u77e9\u9635 \u4e2d\u5fc3\u5316\u77e9\u9635\u65e2\u662f\u5bf9\u79f0\u77e9\u9635\uff0c\u53c8\u662f\u5e42\u7b49\u77e9\u9635\uff0c \\(\\mathbf{C}_n=\\mathbf{C}_n^{\\top}=\\mathbf{C}_n^2\\) \u76f8\u4f3c\u77e9\u9635\u4e0e\u76f8\u5408\u77e9\u9635 \u00b6 \u76f8\u4f3c\u77e9\u9635 \u00b6 \u77e9\u9635 \\(\\mathbf{B} \\in C^{n \\times n}\\) \u79f0\u4e3a\u77e9\u9635 \\(\\mathbf{A} \\in C^{n \\times n}\\) \u7684\u76f8\u4f3c\u77e9\u9635\uff0c\u82e5\u5b58\u5728\u4e00\u975e\u5947\u5f02\u77e9\u9635 \\(\\mathbf{S} \\in C^{n \\times n}\\) \u4f7f\u5f97 \\(\\mathbf{B}=\\mathbf{S}^{-1}\\mathbf{A}\\mathbf{S}\\) \u82e5 \\(\\mathbf{B}\\) \u4e0e \\(\\mathbf{A}\\) \u76f8\u4f3c\uff0c\u5219 \\(\\det(\\mathbf{B})=\\det(\\mathbf{A})\\) \u3001 \\(tr(\\mathbf{B})=tr(\\mathbf{A})\\) \u548c\u76f8\u540c\u7684\u7279\u5f81\u503c \u76f8\u5408\u77e9\u9635 \u00b6 \u4ee4 \\(\\mathbf{A},\\mathbf{B},\\mathbf{C} \\in C^{n\\times n}\\) \uff0c\u5e76\u4e14 \\(\\mathbf{C}\\) \u975e\u5947\u5f02\uff0c\u5219\u77e9\u9635 \\(\\mathbf{B}=\\mathbf{C}^H\\mathbf{A}\\mathbf{C}\\) \u79f0\u4e3a \\(\\mathbf{A}\\) \u7684\u76f8\u5408\u77e9\u9635\u3002 Vandermonde \u77e9\u9635\u548c Fourier \u77e9\u9635 \u00b6 \u5728\u4fe1\u53f7\u5904\u7406\u6709\u5e7f\u6cdb\u5e94\u7528 Hadamard \u77e9\u9635 \u00b6 \u5728\u901a\u4fe1\u3001\u4fe1\u606f\u8bba\u548c\u4fe1\u53f7\u5904\u7406\u4e2d\u4e00\u79cd\u91cd\u8981\u7684\u7279\u6b8a\u77e9\u9635 Toeplitz \u77e9\u9635 \u00b6 Toeplitz \u5728\u7814\u7a76\u4e0e Laurent \u7ea7\u6570\u6709\u5173\u7684\u53cc\u7ebf\u6027\u51fd\u6570\u7684\u4e00\u7bc7\u8bba\u6587\u4e2d\u63d0\u51fa\u7684\u3002 Hankel \u77e9\u9635 \u00b6 \u6b63\u65b9\u77e9\u9635 \\(\\mathbf{A} \\in C^{(n+1)\\times (n+1)}\\) \u79f0\u4e3a Hankel \u77e9\u9635\uff0c\u82e5 \\[ \\mathbf{A}= \\begin{bmatrix} a_{0} & a_{1} & a_{2} & ... & a_{n} \\\\ a_{1} & a_{2} & a_{3} & ... & a_{n+1} \\\\ a_{2} & a_{3} & a_{4} & ... & a_{n+2} \\\\ ... & ... & ... & ... & ...\\\\ a_{n} & a_{n+1} & a_{n+2} & ... & a_{2n} \\end{bmatrix} \\]","title":"\u7279\u6b8a\u77e9\u9635"},{"location":"mb/maa/lec2/#_1","text":"Abstract \u5143\u7d20\u4e4b\u95f4\u5b58\u5728\u67d0\u79cd\u7279\u6b8a\u7ed3\u6784\u5173\u7cfb\u7684\u77e9\u9635\uff0c\u7edf\u79f0\u4e3a\u7279\u6b8a\u77e9\u9635","title":"\u77e9\u9635\u4ee3\u6570\u57fa\u7840"},{"location":"mb/maa/lec2/#hermitian","text":"\u4e00\u4e2a\u6b63\u65b9\u7684\u590d\u503c\u77e9\u9635 \\(\\mathbf{A}=[a_{ij}] \\in C^{n\\times n}\\) \u79f0\u4e3a Hermitian \u77e9\u9635 \u82e5 \\(\\mathbf{A}=-\\mathbf{A}^H\\) \uff0c\u5219\u77e9\u9635 \\(\\mathbf{A}\\) \u79f0\u4e3a\u53cd Hermitian \u77e9\u9635 \u4e2d\u592e Hermitian \u77e9\u9635 \\(\\mathbf{R}\\) \u662f\u4e00\u4e2a\u5143\u7d20\u6ee1\u8db3\u5bf9\u79f0\u6027 \\(r_{ij}=r_{n-j+1,n-i+1}^*\\) \u7684 \\(n \\times n\\) \u6b63\u65b9\u77e9\u9635 \u4e2d\u592e Hermitian \u77e9\u9635\u7684\u4e00\u4e2a\u7279\u6b8a\u5b50\u7c7b\u662f\u53cc\u91cd\u5bf9\u79f0\u7684\u77e9\u9635\uff0c\u5b83\u65e2\u662f\u5173\u4e8e\u4e3b\u5bf9\u89d2\u7ebf\u5bf9\u79f0\u7684 Hermitian \u77e9\u9635\uff0c\u53c8\u662f\u5173\u4e8e\u4ea4\u53c9\u5bf9\u89d2\u7ebf\u5bf9\u79f0\u7684\u4ea4\u53c9\u5bf9\u79f0\u77e9\u9635\uff0c\u5982 \\[ \\mathbf{R}= \\begin{bmatrix} r_{11} & r_{21}^* & r_{31}^* & r_{41}^* \\\\ r_{21} & r_{22} & r_{32}^* & r_{31}^* \\\\ r_{31} & r_{32} & r_{22} & r_{21}^* \\\\ r_{41} & r_{31} & r_{21} & r_{11} \\end{bmatrix} \\]","title":"Hermitian \u77e9\u9635"},{"location":"mb/maa/lec2/#_2","text":"","title":"\u7f6e\u6362\u77e9\u9635\u3001\u4e92\u6362\u77e9\u9635\u4e0e\u9009\u62e9\u77e9\u9635"},{"location":"mb/maa/lec2/#_3","text":"\u82e5\u6bcf\u4e00\u884c\u548c\u6bcf\u4e00\u5217\u6709\u4e14\u53ea\u6709\u4e00\u4e2a\u975e\u96f6\u5143\u7d20 1 \u7684\u6b63\u65b9\u77e9\u9635\u79f0\u4e3a\u7f6e\u6362\u77e9\u9635 \\((\\mathbf{P}_{m \\times n})^{\\top} = \\mathbf{n \\times m}\\) \\(\\mathbf{P}^{\\top}\\mathbf{P}=\\mathbf{P}\\mathbf{P}^{\\top}=\\mathbf{I}\\) \uff0c\u8bf4\u660e\u7f6e\u6362\u77e9\u9635\u662f\u6b63\u4ea4\u77e9\u9635 \\(\\mathbf{P}^{\\top}=\\mathbf{P}^{-1}\\) \\(\\mathbf{P}^{\\top}\\mathbf{A}\\mathbf{P}\\) \u4e0e \\(\\mathbf{A}\\) \u5177\u6709\u76f8\u540c\u7684\u5bf9\u89d2\u7ebf\u5143\u7d20\uff0c\u4f46\u6392\u5217\u987a\u5e8f\u53ef\u80fd\u4e0d\u540c \u53e6\u5916\u4e09\u4e2a\u7279\u6b8a\u5f62\u5f0f\uff1a\u4ea4\u6362\u77e9\u9635\u3001\u4e92\u6362\u77e9\u9635\u3001\u79fb\u4f4d\u77e9\u9635","title":"\u7f6e\u6362\u77e9\u9635\u4e0e\u4e92\u6362\u77e9\u9635"},{"location":"mb/maa/lec2/#_4","text":"\u6bcf\u4e00\u884c\u548c\u6bcf\u4e00\u5217\u6709\u4e14\u53ea\u6709\u4e00\u4e2a\u975e\u96f6\u5143\u7d20\u7684\u6b63\u65b9\u77e9\u9635\u79f0\u4e3a\u5e7f\u4e49\u7f6e\u6362\u77e9\u9635 \u4e00\u4e2a\u6b63\u65b9\u77e9\u9635\u662f \\(g\\) \u77e9\u9635\uff0c\u5f53\u4e14\u4ec5\u5f53\u5b83\u53ef\u4ee5\u5206\u89e3\u4e3a\u4e00\u4e2a\u7f6e\u6362\u77e9\u9635\u548c\u4e00\u4e2a\u975e\u5947\u5f02\u7684\u5bf9\u89d2\u77e9\u9635\u4e4b\u79ef\uff0c\u5373 \\(\\mathbf{G}=\\mathbf{P}\\mathbf{D}\\) \u9009\u62e9\u77e9\u9635\u662f\u4e00\u79cd\u53ef\u4ee5\u5bf9\u67d0\u4e2a\u7ed9\u5b9a\u77e9\u9635\u7684\u67d0\u4e9b\u884c\u6216\u8005\u67d0\u4e9b\u5217\u8fdb\u884c\u9009\u62e9\u7684\u77e9\u9635","title":"\u5e7f\u4e49\u7f6e\u6362\u77e9\u9635\u4e0e\u9009\u62e9\u77e9\u9635"},{"location":"mb/maa/lec2/#_5","text":"\u5411\u91cf \\(x_1, ..., x_k \\in C^n\\) \u7ec4\u6210\u4e00\u6b63\u4ea4\u7ec4\uff0c\u82e5 \\(x_i^Hx_j=0, 1 \\le i < j < \\le k\\) \u3002\u82e5\u662f\u5f52\u4e00\u5316\u7684\uff0c\u5219\u4e3a\u6807\u51c6\u6b63\u4ea4\u7ec4 \u4e00\u7ec4\u6b63\u4ea4\u7684\u975e\u96f6\u5411\u91cf\u662f\u7ebf\u6027\u65e0\u5173\u7684 \u4e00\u5b9e\u7684\u6b63\u65b9\u77e9\u9635 \\(\\mathbf{Q} \\in R^{n \\times n}\\) \u79f0\u4e3a\u6b63\u4ea4\u77e9\u9635\uff0c\u82e5 \\(\\mathbf{Q}\\mathbf{Q}^{\\top}=\\mathbf{Q}^{\\top}\\mathbf{Q}=\\mathbf{I}\\) \u4e00\u590d\u503c\u6b63\u65b9\u77e9\u9635 \\(\\mathbf{U}\\in C^{n \\times n}\\) \u79f0\u4e3a\u9149\u77e9\u9635\uff0c\u82e5 \\(\\mathbf{U}\\mathbf{U}^{\\top}=\\mathbf{U}^{\\top}\\mathbf{U}=\\mathbf{I}\\) \u82e5 \\(n \\times n\\) \u77e9\u9635 \\(\\mathbf{A}=[a_{ij}]\\) \u548c \\(\\mathbf{B}=[b_{ij}]\\) \u662f\u9149\u7b49\u4ef7\u7684\uff0c\u5219 \\(\\sum_{i=1}^n\\sum_{j=1}^n|b_{ij}|^2=\\sum_{i=1}^n\\sum_{j=1}^n|a_{ij}|^2\\) \u77e9\u9635 \\(\\mathbf{A} \\in C^{n \\times n}\\) \u79f0\u4e3a\u6b63\u89c4\u77e9\uff0c\u82e5 \\(\\mathbf{A}^H\\mathbf{A}=\\mathbf{A}\\mathbf{A}^{\\top}\\) \u4ee4 \\(\\mathbf{J}\\) \u4e3a \\(N \\times N\\) \u7b26\u53f7\u77e9\u9635\uff0c\u6ee1\u8db3 \\(\\mathbf{Q}\\mathbf{J}\\mathbf{Q}^{\\top}=\\mathbf{J}\\) \u7684 \\(N \\times N\\) \u77e9\u9635 \\(\\mathbf{Q}\\) \u79f0\u4e3a \\(J\\) \u6b63\u4ea4\u77e9\u9635\uff0c\u6216\u79f0\u8d85\u6b63\u89c4\u77e9\u9635","title":"\u6b63\u5b9a\u77e9\u9635\u4e0e\u9149\u77e9\u9635"},{"location":"mb/maa/lec2/#_6","text":"","title":"\u5e26\u578b\u77e9\u9635\u4e0e\u4e09\u89d2\u77e9\u9635"},{"location":"mb/maa/lec2/#_7","text":"\u6ee1\u8db3 \\(a_{ij}=0,|i-j|>k\\) \u7684\u77e9\u9635 \\(\\mathbf{A}\\in C^{m\\times n}\\) \u79f0\u4e3a\u5e26\u578b\u77e9\u9635 \u4e09\u5bf9\u89d2\u77e9\u9635\u662f\u5e26\u578b\u77e9\u9635\u7684\u7279\u6b8a\u5f62\u5f0f\uff0c\u5f53 \\(|i-j|>1\\) \u65f6\uff0c \\(a_{ij}=0\\)","title":"\u5e26\u884c\u77e9\u9635"},{"location":"mb/maa/lec2/#_8","text":"\u4e24\u79cd\u7279\u6b8a\u7684\u5e38\u7528\u5e26\u578b\u77e9\u9635\u4e3a\u4e0a\u4e09\u89d2\u77e9\u9635\u548c\u4e0b\u4e09\u89d2\u77e9\u9635","title":"\u4e09\u89d2\u77e9\u9635"},{"location":"mb/maa/lec2/#_9","text":"","title":"\u6c42\u548c\u5411\u91cf\u4e0e\u4e2d\u5fc3\u5316\u77e9\u9635"},{"location":"mb/maa/lec2/#_10","text":"\u6240\u6709\u5143\u7d20\u7b49\u4e8e 1 \u7684\u5411\u91cf\u79f0\u4e3a\u6c42\u548c\u5411\u91cf\uff0c\u8bb0\u4e3a \\(\\mathbf{I}=[1,1,...,1]^{\\top}\\)","title":"\u6c42\u548c\u5411\u91cf"},{"location":"mb/maa/lec2/#_11","text":"\u77e9\u9635 \\(\\mathbf{C}_n=\\mathbf{I}_n-\\mathbf{J}_n=\\mathbf{I}_n-\\frac{1}{n}\\mathbf{J}_n\\) \u79f0\u4e3a\u4e2d\u5fc3\u5316\u77e9\u9635 \u4e2d\u5fc3\u5316\u77e9\u9635\u65e2\u662f\u5bf9\u79f0\u77e9\u9635\uff0c\u53c8\u662f\u5e42\u7b49\u77e9\u9635\uff0c \\(\\mathbf{C}_n=\\mathbf{C}_n^{\\top}=\\mathbf{C}_n^2\\)","title":"\u4e2d\u5fc3\u5316\u77e9\u9635"},{"location":"mb/maa/lec2/#_12","text":"","title":"\u76f8\u4f3c\u77e9\u9635\u4e0e\u76f8\u5408\u77e9\u9635"},{"location":"mb/maa/lec2/#_13","text":"\u77e9\u9635 \\(\\mathbf{B} \\in C^{n \\times n}\\) \u79f0\u4e3a\u77e9\u9635 \\(\\mathbf{A} \\in C^{n \\times n}\\) \u7684\u76f8\u4f3c\u77e9\u9635\uff0c\u82e5\u5b58\u5728\u4e00\u975e\u5947\u5f02\u77e9\u9635 \\(\\mathbf{S} \\in C^{n \\times n}\\) \u4f7f\u5f97 \\(\\mathbf{B}=\\mathbf{S}^{-1}\\mathbf{A}\\mathbf{S}\\) \u82e5 \\(\\mathbf{B}\\) \u4e0e \\(\\mathbf{A}\\) \u76f8\u4f3c\uff0c\u5219 \\(\\det(\\mathbf{B})=\\det(\\mathbf{A})\\) \u3001 \\(tr(\\mathbf{B})=tr(\\mathbf{A})\\) \u548c\u76f8\u540c\u7684\u7279\u5f81\u503c","title":"\u76f8\u4f3c\u77e9\u9635"},{"location":"mb/maa/lec2/#_14","text":"\u4ee4 \\(\\mathbf{A},\\mathbf{B},\\mathbf{C} \\in C^{n\\times n}\\) \uff0c\u5e76\u4e14 \\(\\mathbf{C}\\) \u975e\u5947\u5f02\uff0c\u5219\u77e9\u9635 \\(\\mathbf{B}=\\mathbf{C}^H\\mathbf{A}\\mathbf{C}\\) \u79f0\u4e3a \\(\\mathbf{A}\\) \u7684\u76f8\u5408\u77e9\u9635\u3002","title":"\u76f8\u5408\u77e9\u9635"},{"location":"mb/maa/lec2/#vandermonde-fourier","text":"\u5728\u4fe1\u53f7\u5904\u7406\u6709\u5e7f\u6cdb\u5e94\u7528","title":"Vandermonde \u77e9\u9635\u548c Fourier \u77e9\u9635"},{"location":"mb/maa/lec2/#hadamard","text":"\u5728\u901a\u4fe1\u3001\u4fe1\u606f\u8bba\u548c\u4fe1\u53f7\u5904\u7406\u4e2d\u4e00\u79cd\u91cd\u8981\u7684\u7279\u6b8a\u77e9\u9635","title":"Hadamard \u77e9\u9635"},{"location":"mb/maa/lec2/#toeplitz","text":"Toeplitz \u5728\u7814\u7a76\u4e0e Laurent \u7ea7\u6570\u6709\u5173\u7684\u53cc\u7ebf\u6027\u51fd\u6570\u7684\u4e00\u7bc7\u8bba\u6587\u4e2d\u63d0\u51fa\u7684\u3002","title":"Toeplitz \u77e9\u9635"},{"location":"mb/maa/lec2/#hankel","text":"\u6b63\u65b9\u77e9\u9635 \\(\\mathbf{A} \\in C^{(n+1)\\times (n+1)}\\) \u79f0\u4e3a Hankel \u77e9\u9635\uff0c\u82e5 \\[ \\mathbf{A}= \\begin{bmatrix} a_{0} & a_{1} & a_{2} & ... & a_{n} \\\\ a_{1} & a_{2} & a_{3} & ... & a_{n+1} \\\\ a_{2} & a_{3} & a_{4} & ... & a_{n+2} \\\\ ... & ... & ... & ... & ...\\\\ a_{n} & a_{n+1} & a_{n+2} & ... & a_{2n} \\end{bmatrix} \\]","title":"Hankel \u77e9\u9635"},{"location":"mb/maa/lec3/","text":"\u77e9\u9635\u5fae\u5206 \u00b6 Abstract \u77e9\u9635\u5fae\u5206\u662f\u591a\u53d8\u91cf\u51fd\u6570\u5fae\u5206\u7684\u63a8\u5e7f\uff0c\u5305\u62ec\u77e9\u9635\u504f\u5bfc\u548c\u68af\u5ea6\u3002 \u6982\u5ff5\u5de8\u591a\u4e14\u7e41\u7410\uff08\u8fd8\u662f\u5efa\u8bae\u770b\u4e66\u5427 Jacobian \u77e9\u9635\u4e0e\u68af\u5ea6\u77e9\u9635 \u00b6 Jacobian \u77e9\u9635 \u00b6 \\(pq \\times mn\\) \u7ef4 Jacobian \u77e9\u9635 \\[ D_{X}F(\\mathbf{X}) \\overset{def}{=} \\frac{\\partial vec(F(\\mathbf{X}))}{\\partial (vec \\mathbf{X})^\\top} \\in R^{pq \\times mn} \\] \u5177\u4f53\u8868\u8fbe\u5f0f\u4e3a \\[ D_{X}F(\\mathbf{X})= \\begin{bmatrix} \\frac{\\partial f_{11}}{\\partial (vec \\mathbf{X})^\\top} \\\\ ... \\\\ \\frac{\\partial f_{p1}}{\\partial (vec \\mathbf{X})^\\top} \\\\ ...\\\\ \\frac{\\partial f_{1q}}{\\partial (vec \\mathbf{X})^\\top} \\\\ ...\\\\ \\frac{\\partial f_{pq}}{\\partial (vec \\mathbf{X})^\\top} \\\\ \\end{bmatrix} = \\begin{bmatrix} \\frac{\\partial f_{11}}{\\partial x_{11}} & .. & \\frac{\\partial f_{11}}{\\partial x_{m1}} & .. & \\frac{\\partial f_{11}}{\\partial x_{1n}} & .. & \\frac{\\partial f_{11}}{\\partial x_{mn}} \\\\ ... & .. & ... & .. & ... & .. & ... \\\\ \\frac{\\partial f_{p1}}{\\partial x_{11}} & .. & \\frac{\\partial f_{p1}}{\\partial x_{m1}} & .. & \\frac{\\partial f_{p1}}{\\partial x_{1n}} & .. & \\frac{\\partial f_{p1}}{\\partial x_{mn}} \\\\ ... & .. & ... & .. & ... & .. & ... \\\\ \\frac{\\partial f_{1q}}{\\partial x_{11}} & .. & \\frac{\\partial f_{1q}}{\\partial x_{m1}} & .. & \\frac{\\partial f_{1q}}{\\partial x_{1n}} & .. & \\frac{\\partial f_{1q}}{\\partial x_{mn}} \\\\ ... & .. & ... & .. & ... & .. & ... \\\\ \\frac{\\partial f_{pq}}{\\partial x_{11}} & .. & \\frac{\\partial f_{pq}}{\\partial x_{m1}} & .. & \\frac{\\partial f_{pq}}{\\partial x_{1n}} & .. & \\frac{\\partial f_{pq}}{\\partial x_{mn}} \\\\ \\end{bmatrix} \\] \u68af\u5ea6\u77e9\u9635 \u00b6 \u5b9a\u4e49\u68af\u5ea6\u77e9\u9635 \\[ \\nabla_\\mathbf{X} f(\\mathbf{X})= \\begin{bmatrix} \\frac{\\partial f(\\mathbf{X})}{\\partial x_{11}} & ... & \\frac{\\partial f(\\mathbf{X})}{\\partial x_{1n}} \\\\ ... & ... & ... \\\\ \\frac{\\partial f(\\mathbf{X})}{\\partial x_{m1}} & ... & \\frac{\\partial f(\\mathbf{X})}{\\partial x_{mn}} \\\\ \\end{bmatrix} = \\frac{\\partial f(\\mathbf{X})}{\\partial \\mathbf{X}} \\] \u77e9\u9635\u51fd\u6570\u7684\u68af\u5ea6\u77e9\u9635\u662f\u5176 Jacobian \u77e9\u9635\u7684\u8f6c\u7f6e\uff1a \\(\\nabla_\\mathbf{X} F(\\mathbf{X})=(D_\\mathbf{X} F(\\mathbf{X}))^\\top\\) \u504f\u5bfc\u548c\u68af\u5ea6\u8ba1\u7b97 \u00b6 \u77e9\u9635\u53d8\u5143\u7684\u68af\u5ea6\u8ba1\u7b97\u548c\u6807\u91cf\u53d8\u5143\u7684\u68af\u5ea6\u8ba1\u7b97\u7c7b\u4f3c\uff0c\u53ea\u662f\u77e9\u9635\u53d8\u5143\u7684\u68af\u5ea6\u662f\u77e9\u9635\uff0c\u800c\u6807\u91cf\u53d8\u5143\u7684\u68af\u5ea6\u662f\u5411\u91cf\uff0c\u90fd\u6ee1\u8db3\u7ebf\u6027\u3001\u4e58\u79ef\u3001\u5546\u3001\u94fe\u5f0f\u6cd5\u5219 \u4e00\u9636\u5b9e\u77e9\u9635\u5fae\u5206\u4e0e Jacobian \u77e9\u9635\u8fa8\u8bc6 \u00b6 \u4e00\u9636\u5b9e\u77e9\u9635\u5fae\u5206 \u00b6 \u77e9\u9635\u5fae\u5206\u7528\u7b26\u53f7 \\(d\\mathbf{X}\\) \u8868\u793a\uff0c\u5b9a\u4e49\u4e3a \\(d\\mathbf{X}=[dX_{ij}]_{i=1,j=1}^{m,n}\\) \u6807\u91cf\u51fd\u6570\u7684 Jacobian \u77e9\u9635\u8fa8\u8bc6 \u5b9e\u503c\u77e9\u9635\u51fd\u6570\u7684 Jacobian \u77e9\u9635\u8fa8\u8bc6 \u4e8c\u9636\u5b9e\u77e9\u9635\u5fae\u5206\u4e0e Hessian \u77e9\u9635\u8fa8\u8bc6 \u00b6 Hessian \u77e9\u9635 \u00b6 \u5b9e\u503c\u51fd\u6570 \\(f(x)\\) \u76f8\u5bf9\u4e8e \\(m \\times 1\\) \u5b9e\u5411\u91cf \\(x\\) \u7684\u4e8c\u9636\u504f\u5bfc\u79f0\u4e3a Hessian \u77e9\u9635\uff0c\u8bb0\u4f5c \\(H[f(x)]\\) \uff0c\u5b9a\u4e49\u4e3a \\[ H[f(x)]=\\frac{\\partial^2 f(x)}{\\partial x \\partial x^\\top}=\\frac{\\partial}{\\partial x}[\\frac{\\partial f(x)}{\\partial x^\\top}] \\in R^{m \\times m} \\\\ \u6216 \\\\ H[f(x)]=\\frac{\\partial^2 f(x)}{\\partial x \\partial x^\\top}= \\begin{bmatrix} \\frac{\\partial^2 f}{\\partial x_1 \\partial x_1} & ... & \\frac{\\partial^2 f}{\\partial x_1 \\partial x_m} \\\\ ... & ... & ... \\\\ \\frac{\\partial^2 f}{\\partial x_m \\partial x_1} & ... & \\frac{\\partial^2 f}{\\partial x_m \\partial x_m} \\\\ \\end{bmatrix} \\in R^{m \\times m} \\] Hessian \u77e9\u9635\u7684\u8fa8\u8bc6\u539f\u7406 \u00b6 \u6807\u91cf\u51fd\u6570 \\(f(x)\\) \u7684 Hessian \u77e9\u9635\u8fa8\u8bc6 \u6807\u91cf\u51fd\u6570 \\(f(\\mathbf{X})\\) \u7684 Hessian \u77e9\u9635\u8fa8\u8bc6 Hessian \u77e9\u9635\u7684\u8fa8\u8bc6\u65b9\u6cd5 \u00b6 \u5171\u8f6d\u68af\u5ea6\u4e0e\u590d Hessian \u77e9\u9635 \u00b6","title":"\u77e9\u9635\u5fae\u5206"},{"location":"mb/maa/lec3/#_1","text":"Abstract \u77e9\u9635\u5fae\u5206\u662f\u591a\u53d8\u91cf\u51fd\u6570\u5fae\u5206\u7684\u63a8\u5e7f\uff0c\u5305\u62ec\u77e9\u9635\u504f\u5bfc\u548c\u68af\u5ea6\u3002 \u6982\u5ff5\u5de8\u591a\u4e14\u7e41\u7410\uff08\u8fd8\u662f\u5efa\u8bae\u770b\u4e66\u5427","title":"\u77e9\u9635\u5fae\u5206"},{"location":"mb/maa/lec3/#jacobian","text":"","title":"Jacobian \u77e9\u9635\u4e0e\u68af\u5ea6\u77e9\u9635"},{"location":"mb/maa/lec3/#jacobian_1","text":"\\(pq \\times mn\\) \u7ef4 Jacobian \u77e9\u9635 \\[ D_{X}F(\\mathbf{X}) \\overset{def}{=} \\frac{\\partial vec(F(\\mathbf{X}))}{\\partial (vec \\mathbf{X})^\\top} \\in R^{pq \\times mn} \\] \u5177\u4f53\u8868\u8fbe\u5f0f\u4e3a \\[ D_{X}F(\\mathbf{X})= \\begin{bmatrix} \\frac{\\partial f_{11}}{\\partial (vec \\mathbf{X})^\\top} \\\\ ... \\\\ \\frac{\\partial f_{p1}}{\\partial (vec \\mathbf{X})^\\top} \\\\ ...\\\\ \\frac{\\partial f_{1q}}{\\partial (vec \\mathbf{X})^\\top} \\\\ ...\\\\ \\frac{\\partial f_{pq}}{\\partial (vec \\mathbf{X})^\\top} \\\\ \\end{bmatrix} = \\begin{bmatrix} \\frac{\\partial f_{11}}{\\partial x_{11}} & .. & \\frac{\\partial f_{11}}{\\partial x_{m1}} & .. & \\frac{\\partial f_{11}}{\\partial x_{1n}} & .. & \\frac{\\partial f_{11}}{\\partial x_{mn}} \\\\ ... & .. & ... & .. & ... & .. & ... \\\\ \\frac{\\partial f_{p1}}{\\partial x_{11}} & .. & \\frac{\\partial f_{p1}}{\\partial x_{m1}} & .. & \\frac{\\partial f_{p1}}{\\partial x_{1n}} & .. & \\frac{\\partial f_{p1}}{\\partial x_{mn}} \\\\ ... & .. & ... & .. & ... & .. & ... \\\\ \\frac{\\partial f_{1q}}{\\partial x_{11}} & .. & \\frac{\\partial f_{1q}}{\\partial x_{m1}} & .. & \\frac{\\partial f_{1q}}{\\partial x_{1n}} & .. & \\frac{\\partial f_{1q}}{\\partial x_{mn}} \\\\ ... & .. & ... & .. & ... & .. & ... \\\\ \\frac{\\partial f_{pq}}{\\partial x_{11}} & .. & \\frac{\\partial f_{pq}}{\\partial x_{m1}} & .. & \\frac{\\partial f_{pq}}{\\partial x_{1n}} & .. & \\frac{\\partial f_{pq}}{\\partial x_{mn}} \\\\ \\end{bmatrix} \\]","title":"Jacobian \u77e9\u9635"},{"location":"mb/maa/lec3/#_2","text":"\u5b9a\u4e49\u68af\u5ea6\u77e9\u9635 \\[ \\nabla_\\mathbf{X} f(\\mathbf{X})= \\begin{bmatrix} \\frac{\\partial f(\\mathbf{X})}{\\partial x_{11}} & ... & \\frac{\\partial f(\\mathbf{X})}{\\partial x_{1n}} \\\\ ... & ... & ... \\\\ \\frac{\\partial f(\\mathbf{X})}{\\partial x_{m1}} & ... & \\frac{\\partial f(\\mathbf{X})}{\\partial x_{mn}} \\\\ \\end{bmatrix} = \\frac{\\partial f(\\mathbf{X})}{\\partial \\mathbf{X}} \\] \u77e9\u9635\u51fd\u6570\u7684\u68af\u5ea6\u77e9\u9635\u662f\u5176 Jacobian \u77e9\u9635\u7684\u8f6c\u7f6e\uff1a \\(\\nabla_\\mathbf{X} F(\\mathbf{X})=(D_\\mathbf{X} F(\\mathbf{X}))^\\top\\)","title":"\u68af\u5ea6\u77e9\u9635"},{"location":"mb/maa/lec3/#_3","text":"\u77e9\u9635\u53d8\u5143\u7684\u68af\u5ea6\u8ba1\u7b97\u548c\u6807\u91cf\u53d8\u5143\u7684\u68af\u5ea6\u8ba1\u7b97\u7c7b\u4f3c\uff0c\u53ea\u662f\u77e9\u9635\u53d8\u5143\u7684\u68af\u5ea6\u662f\u77e9\u9635\uff0c\u800c\u6807\u91cf\u53d8\u5143\u7684\u68af\u5ea6\u662f\u5411\u91cf\uff0c\u90fd\u6ee1\u8db3\u7ebf\u6027\u3001\u4e58\u79ef\u3001\u5546\u3001\u94fe\u5f0f\u6cd5\u5219","title":"\u504f\u5bfc\u548c\u68af\u5ea6\u8ba1\u7b97"},{"location":"mb/maa/lec3/#jacobian_2","text":"","title":"\u4e00\u9636\u5b9e\u77e9\u9635\u5fae\u5206\u4e0e Jacobian \u77e9\u9635\u8fa8\u8bc6"},{"location":"mb/maa/lec3/#_4","text":"\u77e9\u9635\u5fae\u5206\u7528\u7b26\u53f7 \\(d\\mathbf{X}\\) \u8868\u793a\uff0c\u5b9a\u4e49\u4e3a \\(d\\mathbf{X}=[dX_{ij}]_{i=1,j=1}^{m,n}\\) \u6807\u91cf\u51fd\u6570\u7684 Jacobian \u77e9\u9635\u8fa8\u8bc6 \u5b9e\u503c\u77e9\u9635\u51fd\u6570\u7684 Jacobian \u77e9\u9635\u8fa8\u8bc6","title":"\u4e00\u9636\u5b9e\u77e9\u9635\u5fae\u5206"},{"location":"mb/maa/lec3/#hessian","text":"","title":"\u4e8c\u9636\u5b9e\u77e9\u9635\u5fae\u5206\u4e0e Hessian \u77e9\u9635\u8fa8\u8bc6"},{"location":"mb/maa/lec3/#hessian_1","text":"\u5b9e\u503c\u51fd\u6570 \\(f(x)\\) \u76f8\u5bf9\u4e8e \\(m \\times 1\\) \u5b9e\u5411\u91cf \\(x\\) \u7684\u4e8c\u9636\u504f\u5bfc\u79f0\u4e3a Hessian \u77e9\u9635\uff0c\u8bb0\u4f5c \\(H[f(x)]\\) \uff0c\u5b9a\u4e49\u4e3a \\[ H[f(x)]=\\frac{\\partial^2 f(x)}{\\partial x \\partial x^\\top}=\\frac{\\partial}{\\partial x}[\\frac{\\partial f(x)}{\\partial x^\\top}] \\in R^{m \\times m} \\\\ \u6216 \\\\ H[f(x)]=\\frac{\\partial^2 f(x)}{\\partial x \\partial x^\\top}= \\begin{bmatrix} \\frac{\\partial^2 f}{\\partial x_1 \\partial x_1} & ... & \\frac{\\partial^2 f}{\\partial x_1 \\partial x_m} \\\\ ... & ... & ... \\\\ \\frac{\\partial^2 f}{\\partial x_m \\partial x_1} & ... & \\frac{\\partial^2 f}{\\partial x_m \\partial x_m} \\\\ \\end{bmatrix} \\in R^{m \\times m} \\]","title":"Hessian \u77e9\u9635"},{"location":"mb/maa/lec3/#hessian_2","text":"\u6807\u91cf\u51fd\u6570 \\(f(x)\\) \u7684 Hessian \u77e9\u9635\u8fa8\u8bc6 \u6807\u91cf\u51fd\u6570 \\(f(\\mathbf{X})\\) \u7684 Hessian \u77e9\u9635\u8fa8\u8bc6","title":"Hessian \u77e9\u9635\u7684\u8fa8\u8bc6\u539f\u7406"},{"location":"mb/maa/lec3/#hessian_3","text":"","title":"Hessian \u77e9\u9635\u7684\u8fa8\u8bc6\u65b9\u6cd5"},{"location":"mb/maa/lec3/#hessian_4","text":"","title":"\u5171\u8f6d\u68af\u5ea6\u4e0e\u590d Hessian \u77e9\u9635"},{"location":"mb/optimization-theory/","text":"\u6700\u4f18\u5316\u7406\u8bba\u4e0e\u65b9\u6cd5 \u00b6 Abstract \u5f52\u6863\u4e00\u4e9b\u7814\u4e00\u65f6\u6700\u4f18\u5316\u7406\u8bba\u8bfe\u7684\u7b14\u8bb0 Table of Contents \u00b6 \u6700\u4f18\u5316\u95ee\u9898 \u76f4\u7ebf\u641c\u7d22 \u65e0\u7ea6\u675f\u6700\u4f18\u5316\u7684\u68af\u5ea6\u65b9\u6cd5 Reference \u00b6 \u6700\u4f18\u5316\u539f\u7406\u4e0e\u65b9\u6cd5 \u859b\u5609\u5e86\u8457","title":"\u6700\u4f18\u5316\u7406\u8bba\u4e0e\u65b9\u6cd5"},{"location":"mb/optimization-theory/#_1","text":"Abstract \u5f52\u6863\u4e00\u4e9b\u7814\u4e00\u65f6\u6700\u4f18\u5316\u7406\u8bba\u8bfe\u7684\u7b14\u8bb0","title":"\u6700\u4f18\u5316\u7406\u8bba\u4e0e\u65b9\u6cd5"},{"location":"mb/optimization-theory/#table-of-contents","text":"\u6700\u4f18\u5316\u95ee\u9898 \u76f4\u7ebf\u641c\u7d22 \u65e0\u7ea6\u675f\u6700\u4f18\u5316\u7684\u68af\u5ea6\u65b9\u6cd5","title":"Table of Contents"},{"location":"mb/optimization-theory/#reference","text":"\u6700\u4f18\u5316\u539f\u7406\u4e0e\u65b9\u6cd5 \u859b\u5609\u5e86\u8457","title":"Reference"},{"location":"mb/optimization-theory/lec1/","text":"\u6700\u4f18\u5316\u95ee\u9898 \u00b6 Abstract \u8ffd\u6c42\u6700\u4f18\u76ee\u6807\u7684\u6570\u5b66\u95ee\u9898\u90fd\u5c5e\u4e8e\u6700\u4f18\u5316\u95ee\u9898\u3002 \u4f5c\u4e3a\u6700\u4f18\u5316\u95ee\u9898\uff0c\u81f3\u5c11\u6709\u4e24\u4e2a\u8981\u7d20\uff1a\u7b2c\u4e00\u4e2a\u662f\u53ef\u80fd\u7684\u65b9\u6848\uff1b\u7b2c\u4e8c\u4e2a\u662f\u8ffd\u6c42\u7684\u76ee\u6807\u3002 \u7ecf\u5178\u6781\u503c\u95ee\u9898 \u00b6 \u5728\u9ad8\u6570\u91cc\u7684\u5fae\u79ef\u5206\u4e2d\u65e9\u4ee5\u6d89\u53ca\u5230\u6700\u7b80\u5355\u7684\u6700\u4f18\u5316\u95ee\u9898\uff0c \u5c31\u662f\u51fd\u6570\u6781\u503c\u95ee\u9898 \u3002 \u53ef\u4ee5\u5f15\u7533\u51fa\u4e24\u79cd\u7ecf\u5178\u6700\u4f18\u5316\u7684\u4e24\u79cd\u7c7b\u578b\u95ee\u9898\u3002 \u65e0\u7ea6\u675f\u6781\u503c\u95ee\u9898 \u00b6 \\[ \\min{f(x_1, x_2, ..., x_n)} \\ \u6216 \\ \\max{f(x_1, x_2, ..., x_n)} \\] \u8fd9\u91cc\u7684 \\(f(x_1, x_2, ..., x_n)\\) \u662f\u5b9a\u4e49\u5728 \\(n\\) \u7ef4\u7a7a\u95f4\u4e0a\u7684\u53ef\u5fae\u51fd\u6570\u3002 \u6c42\u6781\u503c\u70b9\u65b9\u6cd5 \uff1a\u4ece\u5982\u4e0b\u7684\u542b\u6709 \\(n\\) \u4e2a\u672a\u77e5\u6570 \\(x_1, x_2, ..., x_n\\) \u7684\u975e\u7ebf\u6027\u65b9\u7a0b\u7ec4\u4e2d\u89e3\u51fa\u9a7b\u70b9\uff0c\u7136\u540e\u5224\u5b9a\u6216\u9a8c\u8bc1\u8fd9\u4e9b\u9a7b\u70b9\u662f\u4e0d\u662f\u6781\u503c\u70b9\uff1a \\[ f_{x_1}^\\prime(x_1, x_2, ..., x_n) = 0 \\\\ f_{x_2}^\\prime(x_1, x_2, ..., x_n) = 0 \\\\ ... \\\\ f_{x_n}^\\prime(x_1, x_2, ..., x_n) = 0 \\] \u5177\u6709\u7b49\u5f0f\u7ea6\u675f\u7684\u6781\u503c\u95ee\u9898 \u00b6 \\[ \\min{f(x_1, x_2, ..., x_n)} \\ \u6216 \\ \\max{f(x_1, x_2, ..., x_n)} \\\\ \u6ee1\u8db3\u4e8e \\ \\ \\ h_i(x_1, x_2, ... , x_n) = 0 \\ \\ j = 1,2,...,l(j < n) \\] \u6c42\u6781\u503c\u70b9\u65b9\u6cd5 \uff1a\u901a\u5e38\u91c7\u7528 \\(Lagrange\\) \u4e58\u5b50\u6cd5\u6765\u6c42\u89e3\u3002\u5373\u628a\u8fd9\u4e2a\u95ee\u9898\u8f6c\u6362\u4e3a\u6c42 \\(Lagrange\\) \u51fd\u6570\u7684\u65e0\u7ea6\u675f\u6781\u503c\u95ee\u9898\uff1a \\[ L(x_1, x_2, ... , x_n, \\lambda_1, \\lambda_2, ..., \\lambda_l) \\\\ = f(x_1, x_2, ..., x_n) - \\sum_{j=1}^l \\lambda_j h_j(x_1, x_2, ..., x_n) \\] \u57fa\u672c\u6982\u5ff5 \u00b6 \u5411\u91cf\u8868\u8fbe\u6cd5 \u00b6 \u5c06 \\((x_1, x_2, ..., x_n)\\) \u770b\u4f5c\u662f \\(n\\) \u7ef4\u5411\u91cf\u7a7a\u95f4 \\(R^n\\) \u4e2d\u4e00\u4e2a\u5411\u91cf \\(\\mathbf{x}\\) \u7684 \\(n\\) \u4e2a\u5206\u91cf\uff0c\u5373 \\(\\mathbf{x} = (x_1, x_2, ..., x_n)^{\\top}\\) \u6240\u4ee5\u91cd\u5b9a\u4e49\u4e00\u4e0b\u6700\u4f18\u5316\u95ee\u9898\uff1a \u65e0\u7ea6\u675f\u6781\u503c\u95ee\u9898\uff1a \\[\\min{f(\\mathbf{x})}\\] \u5177\u6709\u7b49\u5f0f\u7ea6\u675f\u7684\u6781\u503c\u95ee\u9898\uff1a \\[ \\min{f(\\mathbf{x})} \\\\ s.t. \\ \\ \\ \\mathbf{h}(\\mathbf{x}) = \\mathbf{0} \\\\ \u5176\u4e2d \\ \\ \\ \\mathbf{h}(\\mathbf{x}) = (h_1(\\mathbf{x}), h_2(\\mathbf{x}), ..., h_l(\\mathbf{x}))^{\\top} \\] \u4e00\u822c\u5f62\u5f0f \u00b6 \u5927\u90e8\u5206\u6240\u8981\u8ba8\u8bba\u7684\u95ee\u9898\u662f\u5982\u4e0b\u7684\uff08\u9759\u6001\uff09\u6700\u4f18\u5316\u95ee\u9898\uff1a \\[ \\min_{x \\in \\Omega}{f(\\mathbf{x})} \\\\ s.t. \\ \\ \\ s_i(\\mathbf{x}) \\ge 0 \\ \\ \\ i = 1, 2, ..., m \\\\ h_j(\\mathbf{x}) = 0 \\ \\ \\ j = 1, 2, .., l \\ (l < n) \\] \u5411\u91cf\u8868\u793a\u6cd5\u5199\u6210\uff1a \\[ \\min_{x \\in \\Omega}{f(\\mathbf{x})} \\\\ s.t. \\ \\ \\ \\mathbf{s}(\\mathbf{x}) \\ge \\mathbf{0} \\\\ \\mathbf{h}(x) = \\mathbf{0} \\\\ \u5176\u4e2d \\ \\ \\ \\mathbf{s}(\\mathbf(x)) = (s_1(\\mathbf{x}), ..., s_m(\\mathbf{x}))^{\\top} \\] \u8fd9\u79cd\u95ee\u9898\u79f0\u4e3a \u975e\u7ebf\u6027\u89c4\u5212 \uff0c\u6bd4\u5177\u6709\u7b49\u5f0f\u7ea6\u675f\u7684\u6781\u503c\u95ee\u9898\u4ec5\u591a\u51fa \\(m\\) \u4e2a\u4e0d\u7b49\u5f0f\u7ea6\u675f\u3002\u4f46\u662f\uff0c\u6240\u8c13\u7ecf\u5178\u95ee\u9898\u4e0e\u8fd1\u4ee3\u95ee\u9898\u7684\u754c\u9650\u4e5f\u5c31\u5728\u8fd9\u91cc\u3002 \u4e00\u4e9b\u672f\u8bed \u6ee1\u8db3\u6240\u6709\u7ea6\u675f\u7684\u5411\u91cf \\(\\mathbf{x}\\) \u79f0\u4e3a \u5bb9\u8bb8\u89e3 \u6216 \u5bb9\u8bb8\u70b9 \u3002 \u5bb9\u8bb8\u70b9 \u7684\u96c6\u5408\u79f0\u4e3a \u5bb9\u8bb8\u96c6 \u3002 \\(\\mathbf{x}^*\\) \u79f0\u4e3a\u95ee\u9898\u7684\u6700\u4f18\u70b9\uff0c\u800c\u76f8\u5e94\u7684\u76ee\u6807\u51fd\u6570\u503c \\(f(\\mathbf{x}^*)\\) \u79f0\u4e3a\u6700\u4f18\u503c\uff0c \\((\\mathbf{x}^*, f(\\mathbf{x}^*))\\) \u79f0\u4e3a\u6700\u4f18\u89e3\u3002 \u5206\u7c7b \u00b6 \\[ \u6700\u4f18\u5316\u95ee\u9898 \\left\\{\\begin{matrix} \u9759\u6001\u95ee\u9898 \\left\\{\\begin{matrix} \u65e0\u7ea6\u675f\u95ee\u9898 \\left\\{\\begin{matrix} \u4e00\u7ef4\u95ee\u9898 \\\\ n\u7ef4\u95ee\u9898 \\end{matrix}\\right. \\\\ \u7ea6\u675f\u95ee\u9898 \\left\\{\\begin{matrix} \u7ebf\u6027\u89c4\u5212 \\\\ \u975e\u7ebf\u6027\u89c4\u5212 \\end{matrix}\\right. \\end{matrix}\\right. \\\\ \u52a8\u6001\u95ee\u9898 \\end{matrix}\\right. \\] \u4e8c\u7ef4\u95ee\u9898\u7684\u56fe\u89e3\u6cd5 \u00b6 \u7b49\u503c\u7ebf \u00b6 \u7528\u5e73\u9762 \\(L\\) \u53bb\u622a\u66f2\u9762 \\(S\\) \u5f97\u5230\u7684\u662f\u4e00\u4e2a\u5706\uff0c\u8fd9\u4e2a\u5706\u53c8\u4e00\u4e2a\u91cd\u8981\u7684\u6027\u8d28\uff1a \u5706\u4e0a\u4efb\u4f55\u4e00\u70b9\u7684\u76ee\u6807\u51fd\u6570\u90fd\u7b49\u4e8e \\(f_0\\) \u3002\u50cf\u8fd9\u6837\u7684\u66f2\u7ebf\uff0c\u5176\u4e0a\u4efb\u4f55\u4e00\u70b9\u7684\u76ee\u6807\u51fd\u6570\u503c\u90fd\u7b49\u4e8e\u540c\u4e00\u5e38\u6570\uff0c\u79f0\u4e3a\u76ee\u6807\u51fd\u6570\u7684 \u7b49\u503c\u7ebf \u3002 \u56fe\u89e3\u6cd5 \\[ \u6c42\u89e3\\min{(x_1-2)^2+(x_2-1)^2} \\\\ s.t. \\ \\ \\ x_1+x_2-5=0 \\] \u5148\u753b\u51fa\u76ee\u6807\u51fd\u6570\u7684\u7b49\u503c\u7ebf\uff0c\u518d\u753b\u51fa\u7ea6\u675f\u66f2\u7ebf\u3002\u5b9e\u9645\u4e0a\u7ea6\u675f\u66f2\u7ebf\u662f\u4e00\u6761\u76f4\u7ebf\uff0c\u8fd9\u6761\u76f4\u7ebf\u5c31\u662f\u5bb9\u8bb8\u96c6\u3002\u56e0\u4e3a\u6700\u4f18\u70b9\u662f\u5bb9\u8bb8\u96c6\u4e0a\u4f7f\u5f97\u7b49\u503c\u7ebf\u5177\u6709\u6700\u5c0f\u503c\u7684\u70b9\uff0c\u7531\u4e0b\u5de6\u56fe\u53ef\u4ee5\u770b\u51fa\uff0c\u7ea6\u675f\u76f4\u7ebf\u4e0e\u7b49\u503c\u7ebf\uff08\u5706\uff09\u7684\u5207\u70b9\u6b63\u662f\u6700\u4f18\u70b9\u3002\u5229\u7528\u89e3\u6790\u51e0\u4f55\u7684\u6709\u5173\u65b9\u6cd5\u53ef\u6c42\u7684\u8be5\u70b9\u662f \\(\\mathbf{x}^x=(3,2)^{\\top}\\) \uff0c\u5b83\u6240\u5bf9\u5e94\u7684\u6700\u4f18\u503c\u662f \\(f(\\mathbf{x}^*)=2\\) \u3002 \u5c06\u65e0\u7ea6\u675f\u95ee\u9898\u548c\u7ea6\u675f\u95ee\u9898\u7684\u51e0\u4f55\u56fe\u5f62\u5408\u5728\u4e00\u8d77\uff0c\u5982\u4e0b\u53f3\u56fe\u6240\u793a\u3002 \u5bf9\u4e8e\u4e8c\u7ef4\u6700\u4f18\u5316\u95ee\u9898\uff0c\u53ef\u4ee5\u7528\u56fe\u89e3\u6cd5\u6c42\u89e3\u3002 \u7b49\u503c\u9762 \u00b6 \u5bf9\u4e8e\u4e09\u7ef4\u53ca\u4ee5\u4e0a\u7684\u7a7a\u95f4\uff0c\u4f7f\u76ee\u6807\u51fd\u6570\u53d6\u540c\u4e00\u5e38\u6570\u503c\u7684\u70b9\u96c6 \\(\\{ \\mathbf{x} | f(\\mathbf{x})= \\gamma , \\gamma\u662f\u5e38\u6570 \\}\\) \u79f0\u4e3a \u7b49\u503c\u9762 \u3002\u5177\u6709\u4e00\u4e0b\u6027\u8d28\uff1a \u6709\u4e0d\u540c\u503c\u7684\u7b49\u503c\u9762\u4e4b\u95f4\u4e0d\u76f8\u4ea4\u3002 \u9664\u91cc\u6781\u503c\u70b9\u6240\u5728\u7684\u7b49\u503c\u9762\u4ee5\u5916\uff0c\u4e0d\u4f1a\u5728\u533a\u57df\u7684\u5185\u90e8\u4e2d\u65ad\u3002 \u7b49\u503c\u9762\u7a20\u5bc6\u7684\u5730\u65b9\uff0c\u76ee\u6807\u51fd\u6570\u503c\u53d8\u5316\u5f97\u6bd4\u8f83\u5feb\uff1b\u7a00\u758f\u7684\u5730\u65b9\u53d8\u5316\u5f97\u6bd4\u8f83\u6162\u3002 \u5728\u6781\u503c\u70b9\u9644\u8fd1\uff0c\u7b49\u503c\u9762\uff08\u7ebf\uff09\u8fd1\u4f3c\u5730\u5448\u73b0\u4e3a\u540c\u5fc3\u692d\u7403\u9762\u65cf\u3002 \u4e8c\u6b21\u51fd\u6570 \u00b6 \u5728 \\(n\\) \u5143\u76ee\u6807\u51fd\u6570\u4e2d\uff0c\u9664\u91cc\u7ebf\u6027\u51fd\u6570\uff0c\u6700\u7b80\u5355\u6700\u91cd\u8981\u7684\u4e00\u7c7b\u5c31\u662f\u4e8c\u6b21\u51fd\u6570\u3002 \u4e00\u822c\u5f62\u5f0f\u662f \\[ f(x_1, x_2, ..., x_n)=\\frac{1}{2} \\sum_{i=1}^n \\sum_{j=1}^m q_{ij}x_ix_j+\\sum_{i=1}^nb_ix_i+c \\] \u77e9\u9635\u5f62\u5f0f\u662f \\[ f(\\mathbf{x})=\\frac{1}{2}\\mathbf{x}^{\\top}\\mathbf{Q}\\mathbf{x}+\\mathbf{b}^{\\top}\\mathbf{x}+c \\\\ \u5176\u4e2d \\ \\ \\ \\mathbf{Q} = \\begin{bmatrix} q_{11} & q_{12} & ... & q_{1n} \\\\ q_{21} & q_{22} & ... & q_{2n} \\\\ ... & ... & ... & ... \\\\ q_{n1} & q_{n2} & ... & q_{nn} \\end{bmatrix} , \\ \\ \\mathbf{b} = \\begin{bmatrix} b_1 \\\\ b_2 \\\\ ... \\\\ b_n \\end{bmatrix} \\] \u8fd9\u91cc \\(\\mathbf{Q}\\) \u662f\u5bf9\u79f0\u77e9\u9635\uff08\u4e8c\u6b21\u578b\uff09\u3002 \u68af\u5ea6\u4e0e Hesse \u77e9\u9635 \u00b6 \u68af\u5ea6 \u00b6 \u5b9a\u4e49 \u00b6 \u51fd\u6570 \\(f(\\mathbf{x})\\) \u5728 \\(\\mathbf{x}_0\\) \u5904\u53ef\u5fae \\[ f(\\mathbf{x}_0 + \\mathbf{p})-f(\\mathbf{x}_0) = \\mathbf{l}^{\\top}\\mathbf{p} + o(||\\mathbf{p}||) \\] \u82e5 \\(f(\\mathbf{x})\\) \u5728 \\(\\mathbf{x}_0\\) \u5904\u53ef\u5fae\uff0c\u5219 \\(f(\\mathbf{x})\\) \u5728\u8be5\u70b9\u5173\u4e8e\u5404\u53d8\u91cf\u7684\u4e00\u9636\u504f\u5bfc\u6570\u5b58\u5728\uff0c\u5e76\u4e14 \\[ \\mathbf{l} = (\\frac{\\partial f(\\mathbf{x}_0)}{\\partial x_1}, \\frac{\\partial f(\\mathbf{x}_0)}{\\partial x_2}, ..., \\frac{\\partial f(\\mathbf{x}_0)}{\\partial x_n})^{\\top} \\] \u4ee5 \\(f(\\mathbf{x})\\) \u7684 \\(n\\) \u4e2a\u504f\u5bfc\u6570\u4e3a\u5206\u91cf\u7684\u5411\u91cf\u79f0\u4e3a \\(f(\\mathbf{x})\\) \u5728 \\(\\mathbf{x}\\) \u5904\u7684\u68af\u5ea6 \\[ \\bigtriangledown f(\\mathbf{x}) = (\\frac{\\partial f(\\mathbf{x})}{\\partial x_1}, \\frac{\\partial f(\\mathbf{x})}{\\partial x_2}, ..., \\frac{\\partial f(\\mathbf{x})}{\\partial x_n})^{\\top} \\] \u6027\u8d28 \u00b6 \u8fc7\u70b9 \\(\\mathbf{x}_0\\) \u7684\u7b49\u503c\u9762\u65b9\u7a0b\u4e3a \\(f(\\mathbf{x}) = f(\\mathbf{x}_0) \u6216 f(x_1, x_2, ..., x_n) = \\gamma_0 \\ \\ \\ \u5176\u4e2d \\ \\gamma_0 = f(\\mathbf{x}_0)\\) \u3002 \u8bbe \\(f: R^n \\to R^1\\) \u5728\u70b9 \\(\\mathbf{x}_0\\) \u5904\u53ef\u5fae\uff0c \\(\\mathbf{p}\\) \u662f\u56fa\u5b9a\u4e0d\u53d8\u7684\u5411\u91cf\uff0c \\(\\mathbf{e}\\) \u662f\u65b9\u5411 \\(\\mathbf{p}\\) \u4e0a\u7684\u5355\u4f4d\u5411\u91cf\uff0c\u5219\u79f0\u6781\u9650 \\(\\frac{\\partial f(\\mathbf{x}_0)}{\\partial \\mathbf{p}} = \\lim_{t \\to 0^+} \\frac{f(\\mathbf{x}_0+t\\mathbf{e})-f(\\mathbf{x}_0)}{t}\\) \u4e3a\u51fd\u6570 \\(f(\\mathbf{x})\\) \u5728\u70b9 \\(\\mathbf{x}_0\\) \u5904\u6cbf \\(\\mathbf{p}\\) \u65b9\u5411\u7684\u65b9\u5411\u5bfc\u6570\u3002 \u8bbe \\(f:R^n \\to R^1\\) \u5728\u70b9 \\(\\mathbf{x}_0\\) \u5904\u53ef\u5fae\uff0c\u5219 \\(\\frac{\\partial f(\\mathbf{x}_0)}{\\partial \\mathbf{p}} = \\bigtriangledown f(\\mathbf{x}_0)^{\\top}\\mathbf{e}\\) \u3002\u5176\u4e2d \\(\\mathbf{e}\\) \u662f \\(\\mathbf{p}\\) \u65b9\u5411\u4e0a\u7684\u5355\u4f4d\u5411\u91cf\u3002 \u7279\u6b8a\u7c7b\u578b\u51fd\u6570\u7684\u68af\u5ea6 \u00b6 \u82e5 \\(f(\\mathbf{x})=C\\) (\u5e38\u6570)\uff0c\u5219 \\(\\bigtriangledown f(\\mathbf{x})=\\mathbf{0}\\) \uff0c\u5373 \\(\\bigtriangledown C = \\mathbf{0}\\) \\(\\bigtriangledown (\\mathbf{b}^{\\top}\\mathbf{x})=\\mathbf{b}\\) \\(\\bigtriangledown (\\mathbf{x}^{\\top}\\mathbf{x})=2\\mathbf{x}\\) \u82e5 \\(\\mathbf{Q}\\) \u662f\u5bf9\u79f0\u65b9\u9635\uff0c\u5219 \\(\\bigtriangledown (\\mathbf{x}^{\\top}\\mathbf{Q}\\mathbf{x})=2\\mathbf{Q}\\mathbf{x}\\) Hesse \u77e9\u9635 \u00b6 \u591a\u5143\u51fd\u6570 \\(f(\\mathbf{x})\\) \u7684\u4e00\u9636\u5bfc\u6570\u662f\u5b83\u7684\u68af\u5ea6 \\(\\bigtriangledown f(\\mathbf{x})\\) \uff0c\u4e8c\u9636\u5bfc\u6570\u662f\u5b83\u7684 Hesse \u77e9\u9635 \\(\\bigtriangledown^2f(\\mathbf{x})\\) \u3002 \\[ \\bigtriangledown^2 f(\\mathbf{x})=\\bigtriangledown(\\bigtriangledown f(\\mathbf{x}))= \\begin{bmatrix} \\frac{\\partial^2 f(\\mathbf{x})}{\\partial x_1^2} & \\frac{\\partial^2 f(\\mathbf{x})}{\\partial x_2 \\partial x_1} & ... & \\frac{\\partial^2 f(\\mathbf{x})}{\\partial x_n \\partial x_1} \\\\ \\frac{\\partial^2 f(\\mathbf{x})}{\\partial x_1 \\partial x_2} & \\frac{\\partial^2 f(\\mathbf{x})}{\\partial x_2^2} & ... & \\frac{\\partial^2 f(\\mathbf{x})}{\\partial x_n \\partial x_2} \\\\ ... & ... & ... & ... \\\\ \\frac{\\partial^2 f(\\mathbf{x})}{\\partial x_1 \\partial x_n} & \\frac{\\partial^2 f(\\mathbf{x})}{\\partial x_2 \\partial x_n} & ... & \\frac{\\partial^2 f(\\mathbf{x})}{\\partial x_n^2} \\\\ \\end{bmatrix} \\] \u5e38\u7528\u516c\u5f0f\uff1a \\(\\bigtriangledown \\mathbf{c}=\\mathbf{O}\\) \uff0c\u5176\u4e2d \\(\\mathbf{c}\\) \u662f\u5206\u91cf\u5168\u4e3a\u5e38\u6570\u7684 \\(n\\) \u7ef4\u5411\u91cf\uff0c \\(\\mathbf{O}\\) \u662f \\(n \\times n\\) \u9636\u96f6\u77e9\u9635\u3002 \\(\\bigtriangledown \\mathbf{x} = \\mathbf{I}\\) \uff0c\u5176\u4e2d \\(\\mathbf{x}\\) \u662f \\(n\\) \u7ef4\u5411\u91cf\uff0c \\(\\mathbf{I}\\) \u662f \\(n \\times n\\) \u9636\u5355\u4f4d\u77e9\u9635\u3002 \\(\\bigtriangledown (\\mathbf{Q}\\mathbf{x})=\\mathbf{Q}\\) \uff0c\u5176\u4e2d \\(\\mathbf{Q}\\) \u662f \\(n \\times n\\) \u9636\u77e9\u9635\u3002 \u8bbe \\(\\varphi (t)=f(\\mathbf{x}_0 + t\\mathbf{p})\\) \uff0c\u5176\u4e2d \\(f:R^n \\to R^1, \\varphi: R^{\\top} \\to R^1\\) \uff0c\u5219 \\[ \\varphi^\\prime(t)=\\bigtriangledown f(\\mathbf{x}_0 + t\\mathbf{p})^{\\top}\\mathbf{p} \\\\ \\varphi^{\\prime \\prime}(t)=\\mathbf{p}^{\\top}\\bigtriangledown^2f(\\mathbf{x}_0+t\\mathbf{p})\\mathbf{p} \\] \u591a\u5143\u51fd\u6570\u7684 Taylor \u5c55\u5f00\u5f0f \u00b6 \u8bbe \\(f:R^n \\to R^1\\) \u5177\u6709\u4e8c\u9636\u8fde\u7eed\u504f\u5bfc\u6570\uff0c\u5219 \\[ f(\\mathbf{x}+\\mathbf{p})=f(\\mathbf{x})+\\bigtriangledown f(\\mathbf{x})^{\\top}\\mathbf{p}+\\frac{1}{2}\\mathbf{p}^{\\top}\\bigtriangledown^2f(\\bar{\\mathbf{x}})\\mathbf{p} \\\\ \u5176\u4e2d\\bar{\\mathbf{x}}=\\mathbf{x}+\\theta \\mathbf{p}\uff0c\u800c0 < \\theta < 1 \\] \u51f8\u96c6\u4e0e\u51f8\u51fd\u6570 \u00b6 \u51f8\u96c6 \u00b6 \u8bbe \\(x_1, x_2, ..., x_l\\) \u662f \\(R^n\\) \u4e2d\u7684 \\(l\\) \u4e2a\u5df2\u77e5\u70b9\u3002\u82e5\u5bf9\u67d0\u70b9 \\(x \\in R^n\\) \u5b58\u5728\u5e38\u6570 \\(a_1, a_2, ..., a_l \\ge 0\\) \u4e14 \\(\\sum_{i=1}^la_i=1\\) \u4f7f\u5f97 \\(x=\\sum_{i=1}^la_ix_i\\) \uff0c\u5219\u79f0 \\(x\\) \u662f \\(x_1, x_2,...,x_l\\) \u7684\u51f8\u7ec4\u5408\u3002\u82e5 \\(a_1, a_2, ..., a_l > 0\\) \u4e14 \\(\\sum_{i=1}^la_i=1\\) \uff0c\u5219\u79f0 \\(x\\) \u662f \\(x_1, x_2, ..., x_l\\) \u7684\u4e25\u683c\u51f8\u7ec4\u5408\u3002 \u8bbe\u96c6\u5408 \\(C \\subseteq R^n\\) \uff0c\u5982\u679c\u5bf9\u4e8e\u4efb\u610f\u4e24\u70b9 \\(x_1, x_2 \\in C\\) \uff0c\u5b83\u4eec\u7684\u4efb\u610f\u51f8\u7ec4\u5408\u4ecd\u7136\u5c5e\u4e8e C\uff0c\u90a3\u4e48\u79f0\u96c6\u5408 C \u4e3a\u51f8\u96c6\u3002 \u8bbe\u96c6\u5408 \\(\\alpha \\in R^n\\) \u4e14 \\(\\alpha \\ne 0, b \\in R^1\\) \uff0c\u5219\u96c6\u5408 \\(\\{x | \\alpha^{\\top}x=b,x \\in R^n\\}\\) \u79f0\u4e3a \\(R^n\\) \u4e2d\u7684\u8d85\u5e73\u9762\uff0c \\(\\alpha\\) \u79f0\u4e3a\u8fd9\u4e2a\u8d85\u5e73\u9762\u7684\u6cd5\u5411\u91cf\u3002 \u8bbe\u96c6\u5408 \\(\\alpha \\in R^n\\) \u4e14 \\(\\alpha \\ne 0, b \\in R^1\\) \uff0c\u5219\u96c6\u5408 \\(\\{x | \\alpha^{\\top}x=b,x \\in R^n\\}\\) \u79f0\u4e3a \\(R^n\\) \u4e2d\u7684\u534a\u7a7a\u95f4\u3002 \u4efb\u610f\u4e00\u7ec4\u51f8\u96c6\u7684\u4ea4\u4ecd\u7136\u662f\u51f8\u96c6\u3002 \u51f8\u51fd\u6570 \u00b6 \u8bbe \\(f: C \\subseteq R^n \\to R^1\\) \uff0c\u5176\u4e2d C \u4e3a\u51f8\u96c6\u3002\u82e5\u5bf9\u4e8e\u4efb\u610f\u4e24\u70b9 \\(x_1, x_2 \\in C\\) \u548c\u4efb\u610f\u4e00\u5bf9\u6ee1\u8db3 \\(\\alpha_1 + \\alpha_2 = 1\\) \u7684\u6570 \\(\\alpha_1, \\alpha_2 \\in [0,1]\\) \u90fd\u6709 \\(f(\\alpha_1x_1+\\alpha_2x_2) \\le \\alpha_1f(x_1)+\\alpha_2f(x_2)\\) \uff0c\u5219\u79f0 f \u4e3a\u5b9a\u4e49\u5728\u51f8\u96c6 C \u4e0a\u7684\u51f8\u51fd\u6570\uff08\u4e25\u683c\u5c0f\u4e8e\u65f6\u4e3a\u4e25\u683c\u51f8\u51fd\u6570\uff09 \u82e5\u51fd\u6570 f \u5728\u51f8\u96c6 C \u4e0a\u662f\uff08\u4e25\u683c\uff09\u51f8\u51fd\u6570\uff0c\u5219\u79f0 f \u662f\u5b9a\u4e49\u5728\u51f8\u96c6 C \u4e0a\u7684\uff08\u4e25\u683c\uff09\u51f8\u51fd\u6570\u3002 \u8bbe \\(f: C \\subset R^n \\to R^1\\) \uff0c\u5176\u4e2d C \u4e3a\u975e\u7a7a\u51f8\u96c6\u3002\u82e5 f \u662f\u51f8\u51fd\u6570\uff0c\u5219\u5bf9\u4e8e\u4efb\u610f\u5b9e\u6570 \\(\\beta\\) \uff0c\u6c34\u5e73\u96c6 \\(D_\\beta = \\{x | f(x) \\le \\beta, x \\in C\\}\\) \u662f\u51f8\u96c6\u3002 \u8bbe \\(f: C \\subseteq R^n \\to R^1\\) \uff0c\u5176\u4e2d C \u662f\u975e\u7a7a\u51f8\u96c6\uff0cf \u662f\u51f8\u51fd\u6570\uff0c\u5219\u5f62\u5f0f\u4e3a \\(\\min f(x) \\ s.t. \\ x \\in C\\) \u7684\u95ee\u9898\u79f0\u4e3a\u51f8\u89c4\u5212\u3002 \u8bbe \\(x^\\prime\\) \u662f\u51f8\u89c4\u5212\u7684\u5c40\u90e8\u6781\u5c0f\u70b9 \u82e5 f \u662f\u51f8\u51fd\u6570\uff0c\u5219 \\(x^\\prime\\) \u662f\u5168\u5c40\u6781\u5c0f\u70b9 \u82e5 f \u662f\u4e25\u683c\u51f8\u51fd\u6570\uff0c\u5219 \\(x^\\prime\\) \u662f\u552f\u4e00\u5168\u5c40\u6700\u5c0f\u70b9 \u8bbe \\(f:C \\subseteq R^n \\to R^1\\) \u662f\u53ef\u5fae\u51fd\u6570\uff0c\u5176\u4e2d C \u4e3a\u51f8\u96c6\uff0c\u5219 f \u4e3a\u51f8\u51fd\u6570\u7684\u5145\u8981\u6761\u4ef6\u662f\uff0c \\(\\forall x_1, x_2 \\in C\\) \u90fd\u6709 $f(x_2) \\ge f(x_1) + \\(\\bigtriangledown f(x_1)^{\\top}(x_2-x_1)\\) f \u662f\u4e25\u683c\u51f8\u51fd\u6570\u7684\u5145\u8981\u6761\u4ef6\u662f\uff0c \\(\\forall x_1, x_2 \\in C\\) \u4e14 \\(x_1 \\ne x_2\\) \u90fd\u6709 \\(f(x_2) > f(x_1) + \\bigtriangledown f(x_1)^{\\top}(x_2-x_1)\\) \u8bbe \\(f:C \\subseteq R^n \\to R^1\\) \u662f\u4e8c\u6b21\u53ef\u5fae\u51fd\u6570\uff0cC \u4e3a\u975e\u7a7a\u5f00\u51f8\u96c6\uff0c\u5219 f \u4e3a C \u4e0a\u51f8\u51fd\u6570\u7684\u5145\u8981\u6761\u4ef6\u662f\uff0c Hesse \u77e9\u9635 \\(\\bigtriangledown^2 f(x)\\) \u5728 C \u4e0a\u5230\u5904\u534a\u6b63\u5b9a\uff08\u6ee1\u8db3\u534a\u6b63\u5b9a\u65f6\uff0c\u5219 f \u5728 C\u4e0a\u4e3a\u4e25\u683c\u51f8\u51fd\u6570\uff09\u3002 \u6781\u5c0f\u70b9\u7684\u5224\u5b9a\u6761\u4ef6 \u00b6 \u8bbe \\(f:D \\subseteq R^n \\to R^1\\) \u5177\u6709\u8fde\u7eed\u7684\u4e00\u9636\u504f\u5bfc\u6570\u3002\u82e5 \\(x^\\prime\\) \u662f \\(f(x)\\) \u7684\u5c40\u90e8\u6781\u5c0f\u70b9\u5e76\u4e14\u662f D \u7684\u5185\u70b9\uff0c\u5219 \\(\\bigtriangledown f(x^\\prime) = 0\\) \u8bbe \\(f:D \\subseteq R^n \\to R^1\\) \uff0c \\(x^\\prime\\) \u662f D \u7684\u54ea\u70b9\u3002\u82e5 \\(\\bigtriangledown f(x^\\prime) = 0\\) \uff0c\u5219 \\(x^\\prime\\) \u79f0\u4e3a \\(f(x)\\) \u7684\u9a7b\u70b9\u3002 \u8bbe \\(f:D \\subseteq R^n \\to R^1\\) \u5177\u6709\u8fde\u7eed\u7684\u4e8c\u9636\u504f\u5bfc\u6570\uff0c \\(x^\\prime\\) \u662f D \u7684\u4e00\u4e2a\u5185\u70b9\u3002\u82e5 \\(\\bigtriangledown f(x^\\prime)=0\\) \u5e76\u4e14 \\(\\bigtriangledown^2 f(x^\\prime)\\) \u662f\u6b63\u5b9a\u7684\uff0c\u5219 \\(x^\\prime\\) \u662f \\(f(x)\\) \u7684\u4e25\u683c\u5c40\u90e8\u6781\u5c0f\u70b9\u3002 \u4e0b\u964d\u8fed\u4ee3\u7b97\u6cd5 \u00b6 \u7ed9\u5b9a\u521d\u59cb\u70b9\u540e\uff0c\u5982\u679c\u6bcf\u8fed\u4ee3\u4e00\u6b65\u90fd\u4f7f\u76ee\u6807\u51fd\u6570\u6709\u6240\u4e0b\u964d\uff0c\u5373 \\(f(\\mathbf{x}_{k+1}) < f(\\mathbf{x}_k)\\) \uff0c\u90a3\u8fd9\u79cd\u8fed\u4ee3\u6cd5\u79f0\u4e3a\u4e0b\u964d\u6cd5\u3002 \u5728\u8fed\u4ee3\u8fc7\u7a0b\u4e2d\u6709\u4e24\u4e2a\u89c4\u5219\u9700\u8981\u786e\u5b9a\uff0c\u4e00\u4e2a\u662f\u4e0b\u964d\u65b9\u5411 \\(\\mathbf{p}_k\\) \u7684\u9009\u53d6\uff1b\u4e00\u4e2a\u662f\u6b65\u957f\u56e0\u5b50 \\(t_k\\) \u7684\u9009\u53d6\u3002 \u7b97\u6cd5\u7684\u57fa\u672c\u683c\u5f0f\u5982\u4e0b\uff1a \u9009\u53d6\u521d\u59cb\u70b9 \\(\\mathbf{x}_0\\) \uff0c\u7f6e \\(k=0\\) \u6309\u67d0\u79cd\u89c4\u5219\u786e\u5b9a \\(\\mathbf{p}_k\\) \u4f7f\u5f97 \\(\\bigtriangledown f(\\mathbf{x}_k)^{\\top} \\mathbf{p}_k < 0\\) \u6309\u67d0\u79cd\u89c4\u5219\u786e\u5b9a \\(t_k\\) \u4f7f\u5f97 \\(f(\\mathbf{x}_k+t_k\\mathbf{p}_k) 0\\) \u4e14 \\(\\sum_{i=1}^la_i=1\\) \uff0c\u5219\u79f0 \\(x\\) \u662f \\(x_1, x_2, ..., x_l\\) \u7684\u4e25\u683c\u51f8\u7ec4\u5408\u3002 \u8bbe\u96c6\u5408 \\(C \\subseteq R^n\\) \uff0c\u5982\u679c\u5bf9\u4e8e\u4efb\u610f\u4e24\u70b9 \\(x_1, x_2 \\in C\\) \uff0c\u5b83\u4eec\u7684\u4efb\u610f\u51f8\u7ec4\u5408\u4ecd\u7136\u5c5e\u4e8e C\uff0c\u90a3\u4e48\u79f0\u96c6\u5408 C \u4e3a\u51f8\u96c6\u3002 \u8bbe\u96c6\u5408 \\(\\alpha \\in R^n\\) \u4e14 \\(\\alpha \\ne 0, b \\in R^1\\) \uff0c\u5219\u96c6\u5408 \\(\\{x | \\alpha^{\\top}x=b,x \\in R^n\\}\\) \u79f0\u4e3a \\(R^n\\) \u4e2d\u7684\u8d85\u5e73\u9762\uff0c \\(\\alpha\\) \u79f0\u4e3a\u8fd9\u4e2a\u8d85\u5e73\u9762\u7684\u6cd5\u5411\u91cf\u3002 \u8bbe\u96c6\u5408 \\(\\alpha \\in R^n\\) \u4e14 \\(\\alpha \\ne 0, b \\in R^1\\) \uff0c\u5219\u96c6\u5408 \\(\\{x | \\alpha^{\\top}x=b,x \\in R^n\\}\\) \u79f0\u4e3a \\(R^n\\) \u4e2d\u7684\u534a\u7a7a\u95f4\u3002 \u4efb\u610f\u4e00\u7ec4\u51f8\u96c6\u7684\u4ea4\u4ecd\u7136\u662f\u51f8\u96c6\u3002","title":"\u51f8\u96c6"},{"location":"mb/optimization-theory/lec1/#_19","text":"\u8bbe \\(f: C \\subseteq R^n \\to R^1\\) \uff0c\u5176\u4e2d C \u4e3a\u51f8\u96c6\u3002\u82e5\u5bf9\u4e8e\u4efb\u610f\u4e24\u70b9 \\(x_1, x_2 \\in C\\) \u548c\u4efb\u610f\u4e00\u5bf9\u6ee1\u8db3 \\(\\alpha_1 + \\alpha_2 = 1\\) \u7684\u6570 \\(\\alpha_1, \\alpha_2 \\in [0,1]\\) \u90fd\u6709 \\(f(\\alpha_1x_1+\\alpha_2x_2) \\le \\alpha_1f(x_1)+\\alpha_2f(x_2)\\) \uff0c\u5219\u79f0 f \u4e3a\u5b9a\u4e49\u5728\u51f8\u96c6 C \u4e0a\u7684\u51f8\u51fd\u6570\uff08\u4e25\u683c\u5c0f\u4e8e\u65f6\u4e3a\u4e25\u683c\u51f8\u51fd\u6570\uff09 \u82e5\u51fd\u6570 f \u5728\u51f8\u96c6 C \u4e0a\u662f\uff08\u4e25\u683c\uff09\u51f8\u51fd\u6570\uff0c\u5219\u79f0 f \u662f\u5b9a\u4e49\u5728\u51f8\u96c6 C \u4e0a\u7684\uff08\u4e25\u683c\uff09\u51f8\u51fd\u6570\u3002 \u8bbe \\(f: C \\subset R^n \\to R^1\\) \uff0c\u5176\u4e2d C \u4e3a\u975e\u7a7a\u51f8\u96c6\u3002\u82e5 f \u662f\u51f8\u51fd\u6570\uff0c\u5219\u5bf9\u4e8e\u4efb\u610f\u5b9e\u6570 \\(\\beta\\) \uff0c\u6c34\u5e73\u96c6 \\(D_\\beta = \\{x | f(x) \\le \\beta, x \\in C\\}\\) \u662f\u51f8\u96c6\u3002 \u8bbe \\(f: C \\subseteq R^n \\to R^1\\) \uff0c\u5176\u4e2d C \u662f\u975e\u7a7a\u51f8\u96c6\uff0cf \u662f\u51f8\u51fd\u6570\uff0c\u5219\u5f62\u5f0f\u4e3a \\(\\min f(x) \\ s.t. \\ x \\in C\\) \u7684\u95ee\u9898\u79f0\u4e3a\u51f8\u89c4\u5212\u3002 \u8bbe \\(x^\\prime\\) \u662f\u51f8\u89c4\u5212\u7684\u5c40\u90e8\u6781\u5c0f\u70b9 \u82e5 f \u662f\u51f8\u51fd\u6570\uff0c\u5219 \\(x^\\prime\\) \u662f\u5168\u5c40\u6781\u5c0f\u70b9 \u82e5 f \u662f\u4e25\u683c\u51f8\u51fd\u6570\uff0c\u5219 \\(x^\\prime\\) \u662f\u552f\u4e00\u5168\u5c40\u6700\u5c0f\u70b9 \u8bbe \\(f:C \\subseteq R^n \\to R^1\\) \u662f\u53ef\u5fae\u51fd\u6570\uff0c\u5176\u4e2d C \u4e3a\u51f8\u96c6\uff0c\u5219 f \u4e3a\u51f8\u51fd\u6570\u7684\u5145\u8981\u6761\u4ef6\u662f\uff0c \\(\\forall x_1, x_2 \\in C\\) \u90fd\u6709 $f(x_2) \\ge f(x_1) + \\(\\bigtriangledown f(x_1)^{\\top}(x_2-x_1)\\) f \u662f\u4e25\u683c\u51f8\u51fd\u6570\u7684\u5145\u8981\u6761\u4ef6\u662f\uff0c \\(\\forall x_1, x_2 \\in C\\) \u4e14 \\(x_1 \\ne x_2\\) \u90fd\u6709 \\(f(x_2) > f(x_1) + \\bigtriangledown f(x_1)^{\\top}(x_2-x_1)\\) \u8bbe \\(f:C \\subseteq R^n \\to R^1\\) \u662f\u4e8c\u6b21\u53ef\u5fae\u51fd\u6570\uff0cC \u4e3a\u975e\u7a7a\u5f00\u51f8\u96c6\uff0c\u5219 f \u4e3a C \u4e0a\u51f8\u51fd\u6570\u7684\u5145\u8981\u6761\u4ef6\u662f\uff0c Hesse \u77e9\u9635 \\(\\bigtriangledown^2 f(x)\\) \u5728 C \u4e0a\u5230\u5904\u534a\u6b63\u5b9a\uff08\u6ee1\u8db3\u534a\u6b63\u5b9a\u65f6\uff0c\u5219 f \u5728 C\u4e0a\u4e3a\u4e25\u683c\u51f8\u51fd\u6570\uff09\u3002","title":"\u51f8\u51fd\u6570"},{"location":"mb/optimization-theory/lec1/#_20","text":"\u8bbe \\(f:D \\subseteq R^n \\to R^1\\) \u5177\u6709\u8fde\u7eed\u7684\u4e00\u9636\u504f\u5bfc\u6570\u3002\u82e5 \\(x^\\prime\\) \u662f \\(f(x)\\) \u7684\u5c40\u90e8\u6781\u5c0f\u70b9\u5e76\u4e14\u662f D \u7684\u5185\u70b9\uff0c\u5219 \\(\\bigtriangledown f(x^\\prime) = 0\\) \u8bbe \\(f:D \\subseteq R^n \\to R^1\\) \uff0c \\(x^\\prime\\) \u662f D \u7684\u54ea\u70b9\u3002\u82e5 \\(\\bigtriangledown f(x^\\prime) = 0\\) \uff0c\u5219 \\(x^\\prime\\) \u79f0\u4e3a \\(f(x)\\) \u7684\u9a7b\u70b9\u3002 \u8bbe \\(f:D \\subseteq R^n \\to R^1\\) \u5177\u6709\u8fde\u7eed\u7684\u4e8c\u9636\u504f\u5bfc\u6570\uff0c \\(x^\\prime\\) \u662f D \u7684\u4e00\u4e2a\u5185\u70b9\u3002\u82e5 \\(\\bigtriangledown f(x^\\prime)=0\\) \u5e76\u4e14 \\(\\bigtriangledown^2 f(x^\\prime)\\) \u662f\u6b63\u5b9a\u7684\uff0c\u5219 \\(x^\\prime\\) \u662f \\(f(x)\\) \u7684\u4e25\u683c\u5c40\u90e8\u6781\u5c0f\u70b9\u3002","title":"\u6781\u5c0f\u70b9\u7684\u5224\u5b9a\u6761\u4ef6"},{"location":"mb/optimization-theory/lec1/#_21","text":"\u7ed9\u5b9a\u521d\u59cb\u70b9\u540e\uff0c\u5982\u679c\u6bcf\u8fed\u4ee3\u4e00\u6b65\u90fd\u4f7f\u76ee\u6807\u51fd\u6570\u6709\u6240\u4e0b\u964d\uff0c\u5373 \\(f(\\mathbf{x}_{k+1}) < f(\\mathbf{x}_k)\\) \uff0c\u90a3\u8fd9\u79cd\u8fed\u4ee3\u6cd5\u79f0\u4e3a\u4e0b\u964d\u6cd5\u3002 \u5728\u8fed\u4ee3\u8fc7\u7a0b\u4e2d\u6709\u4e24\u4e2a\u89c4\u5219\u9700\u8981\u786e\u5b9a\uff0c\u4e00\u4e2a\u662f\u4e0b\u964d\u65b9\u5411 \\(\\mathbf{p}_k\\) \u7684\u9009\u53d6\uff1b\u4e00\u4e2a\u662f\u6b65\u957f\u56e0\u5b50 \\(t_k\\) \u7684\u9009\u53d6\u3002 \u7b97\u6cd5\u7684\u57fa\u672c\u683c\u5f0f\u5982\u4e0b\uff1a \u9009\u53d6\u521d\u59cb\u70b9 \\(\\mathbf{x}_0\\) \uff0c\u7f6e \\(k=0\\) \u6309\u67d0\u79cd\u89c4\u5219\u786e\u5b9a \\(\\mathbf{p}_k\\) \u4f7f\u5f97 \\(\\bigtriangledown f(\\mathbf{x}_k)^{\\top} \\mathbf{p}_k < 0\\) \u6309\u67d0\u79cd\u89c4\u5219\u786e\u5b9a \\(t_k\\) \u4f7f\u5f97 \\(f(\\mathbf{x}_k+t_k\\mathbf{p}_k) \\varphi(t_2) \\\\ \u5f53t_1 \\ge t^*\u65f6\uff0c\\varphi(t_1) < \\varphi(t_2) \\] \u5219\u79f0 \\(\\varphi(t)\\) \u662f\u533a\u95f4 \\(L\\) \u4e0a\u7684\u5355\u8c37\u51fd\u6570\u3002 \u8bbe \\(\\varphi \\subset R^1 \\to R^1\\) \uff0c \\(t^*\\) \u662f \\(\\varphi (t)\\) \u5728 \\(L\\) \u4e0a\u7684\u5168\u5c40\u6700\u5c0f\u70b9\u3002\u5982\u679c\u627e\u5230 \\(t_1 \\in L\\) \u548c \\(t_2 \\in L\\) \u4f7f\u5f97 \\(t_1 < t^* < t_2\\) \uff0c\u5219 \\([t_1, t_2]\\) \u4e3a \\(\\varphi(t)\\) \u6781\u5c0f\u70b9\u7684\u4e00\u4e2a\u641c\u7d22\u533a\u95f4\uff0c\u8bb0\u4e3a \\(\\{t_1, t_2\\}\\) \u3002 \u8bbe \\(\\{a,b\\}\\) \u662f\u5355\u8c37\u51fd\u6570 \\(\\varphi(t)\\) \u6781\u5c0f\u70b9\u7684\u4e00\u4e2a\u641c\u7d22\u533a\u95f4\u3002\u5728 \\((a,b)\\) \u4e0a\u4efb\u53d6\u4e24\u70b9 \\(t_1\\) \u548c \\(t_2\\) \u4e14 \\(t_1 \\varphi(t_2)\\) \uff0c\u5219 \\(\\{t_1, b\\}\\) \u662f \\(\\varphi(t)\\) \u6781\u5c0f\u70b9\u7684\u4e00\u4e2a\u641c\u7d22\u7a7a\u95f4\u3002 \u641c\u7d22\u533a\u95f4\u7684\u786e\u5b9a \u9009\u5b9a\u521d\u59cb\u70b9 \\(t_0\\) \u548c\u6b65\u957f \\(h\\) \u8ba1\u7b97\u5e76\u6bd4\u8f83 \\(\\varphi(t_0)\\) \u548c \\(\\varphi(t_0+h)\\) \uff0c\u6709 3\uff0c4 \u4e24\u79cd\u60c5\u51b5 \u5f53 \\(\\varphi(t_0)<\\varphi(t_0+h)\\) \u65f6\uff0c\u6bd4\u8f83 \\(\\varphi(t_0)\\) \u548c \\(\\varphi(t_0-h)\\) \uff0c\u6709 5\uff0c6 \u4e24\u79cd\u60c5\u51b5 \u5f53 \\(\\varphi(t_0)\\ge\\varphi(t_0+h)\\) \u65f6\uff0c\u6bd4\u8f83 \\(\\varphi(t_0+(2^k-1)^h), k=1,2,...\\) \uff0c\u76f4\u5230\u5bf9\u4e8e\u67d0\u4e2a \\(m(m \\ge 1)\\) \u4f7f\u5f97 \\[ \\varphi(t_0+(2^{m-1}-1)^h) \\ge \\varphi(t_0+(2^m-1)^h) < \\varphi(t_0+(2^{m+1}-1)^h) \\\\ \u8bbe \\ \\ u=\\varphi(t_0+(2^{m-1}-1)^h), v=\\varphi(t_0+(2^{m}-1)^h), w=\\varphi(t_0+(2^{m+1}-1)^h) \\] \u6b64\u65f6\u5f97\u5230\u641c\u7d22\u533a\u95f4 \\(\\{u,v,w\\}\\) \uff0c\u56e0\u4e3a\u533a\u95f4 \\([v,w]\\) \u662f \\([u,v]\\) \u7684\u4e24\u500d\u957f\uff0c\u6240\u4ee5\u53ea\u8981\u6bd4\u8f83 \\(v\\) \u548c\u533a\u95f4 \\([v,w]\\) \u4e2d\u70b9 \\(r=\\frac{v+w}{2}\\) \u7684\u51fd\u6570\u503c\uff0c\u7acb\u523b\u53ef\u4ee5\u5c06 \\([u,w]\\) \u7f29\u77ed \\(\\frac{1}{3}\\) \u5f53 \\(\\varphi(v) < \\varphi(r)\\) \u65f6\uff0c\u53d6 \\(\\{u,v,r\\}\\) \u4e3a\u641c\u7d22\u533a\u95f4 \u5f53 \\(\\varphi(v) \\ge \\varphi(r)\\) \u65f6\uff0c\u53d6 \\(\\{v,r,w\\}\\) \u4e3a\u641c\u7d22\u533a\u95f4 \u5f53 \\(\\varphi(t_0-h) > \\varphi(t_0)\\) \u65f6\uff0c\u53d6 \\(\\{t_0-h,t_0,t_0+h\\}\\) \u4e3a\u641c\u7d22\u533a\u95f4 \u5f53 \\(\\varphi(t_0-h)\\le\\varphi(t_0)\\) \u65f6\uff0c\u6bd4\u8f83 \\(\\varphi(t_0-(2^k-1)^h), k=1,2,...\\) \uff0c\u76f4\u5230\u5bf9\u4e8e\u67d0\u4e2a \\(m(m \\ge 1)\\) \u4f7f\u5f97 \\[ \\varphi(t_0-(2^{m-1}-1)^h) \\ge \\varphi(t_0-(2^m-1)^h) < \\varphi(t_0-(2^{m+1}-1)^h) \\\\ \u8bbe \\ \\ u=\\varphi(t_0-(2^{m-1}-1)^h), v=\\varphi(t_0-(2^{m}-1)^h), w=\\varphi(t_0-(2^{m+1}-1)^h) \\] \u6b64\u65f6\u5f97\u5230\u641c\u7d22\u533a\u95f4 \\(\\{u,v,w\\}\\) \uff0c\u56e0\u4e3a\u533a\u95f4 \\([v,w]\\) \u662f \\([u,v]\\) \u7684\u4e24\u500d\u957f\uff0c\u6240\u4ee5\u53ea\u8981\u6bd4\u8f83 \\(v\\) \u548c\u533a\u95f4 \\([v,w]\\) \u4e2d\u70b9 \\(r=\\frac{v+w}{2}\\) \u7684\u51fd\u6570\u503c\uff0c\u7acb\u523b\u53ef\u4ee5\u5c06 \\([u,w]\\) \u7f29\u77ed \\(\\frac{1}{3}\\) \u5f53 \\(\\varphi(v) \\ge \\varphi(r)\\) \u65f6\uff0c\u53d6 \\(\\{w,r,v\\}\\) \u4e3a\u641c\u7d22\u533a\u95f4 \u5f53 \\(\\varphi(v) < \\varphi(r)\\) \u65f6\uff0c\u53d6 \\(\\{r,v,u\\}\\) \u4e3a\u641c\u7d22\u533a\u95f4 \u6b65\u957f\u7684\u9009\u62e9 \u5bf9\u5206\u6cd5 \u00b6 \u9002\u7528\u4e8e \\(\\varphi: R^1 \\to R^1\\) \u5728\u5df2\u83b7\u5f97\u7684\u641c\u7d22\u533a\u95f4 \\(\\{a,b\\}\\) \u5185\u5177\u6709\u8fde\u7eed\u7684\u4e00\u9636\u5bfc\u6570\uff0c\u5e76\u4e14\u5df2\u5bfc\u51fa\u5b83\u7684\u8868\u8fbe\u5f0f \u7b97\u6cd5\u6d41\u7a0b\uff08\u5df2\u77e5 \\(\\varphi(t)\\) \u548c \\(\\varphi^\\prime(t)\\) \u7684\u8868\u8fbe\u5f0f\uff0c\u7ec8\u6b62\u9650 \\(\\varepsilon\\) \uff09 \u786e\u5b9a\u521d\u59cb\u641c\u7d22\u533a\u95f4 \\(\\{a,b\\}\\) \uff0c\u8981\u6c42 \\(\\varphi^\\prime(a)<0,\\varphi^\\prime(b)>0\\) \u8ba1\u7b97 \\(\\{a,b\\}\\) \u7684\u4e2d\u70b9 \\(c=0.5(a+b)\\) \u82e5 \\(\\varphi^\\prime(c)<0\\) \uff0c\u5219 \\(a=c\\) \uff0c\u8f6c 4\uff1b\u82e5 \\(\\varphi^\\prime(c)=0\\) \uff0c\u5219 \\(t^*=c\\) \uff0c\u8f6c 5\uff1b\u82e5 \\(\\varphi^\\prime(c)>0\\) \uff0c\u5219 \\(b=c\\) \uff0c\u8f6c4 \u82e5 \\(|a-b|<\\varepsilon\\) \uff0c\u5219 \\(t^*=0.5(a+b)\\) \uff0c\u8f6c 5\uff0c\u5426\u5219\u8f6c 2 \u6253\u5370 \\(t^*\\) \uff0c\u505c\u673a Newton \u5207\u7ebf\u6cd5 \u00b6 \u9002\u7528\u4e8e \\(\\varphi: R^1 \\to R^1\\) \u5728\u5df2\u83b7\u5f97\u7684\u641c\u7d22\u533a\u95f4 \\(\\{a,b\\}\\) \u5185\u5177\u6709\u8fde\u7eed\u7684\u4e8c\u9636\u5bfc\u6570\uff0c\u5e76\u4e14\u5df2\u5bfc\u51fa\u4e00\u9636\u548c\u4e8c\u9636\u5bfc\u6570\u7684\u8868\u8fbe\u5f0f \u7b97\u6cd5\u6d41\u7a0b \u8bbe\u5728\u533a\u95f4 \\([a,b]\\) \u4e2d\u7ecf\u8fc7 \\(k\\) \u6b21\u8fed\u4ee3\u5df2\u6c42\u5230\u65b9\u7a0b \\(\\varphi^\\prime(t)=0\\) \u7684\u4e00\u4e2a\u8fd1\u6839\u4f3c \\(t_k\\) \u3002\u8fc7 \\((t_k,\\varphi^\\prime(t_k))\\) \u4f5c\u66f2\u7ebf \\(y=\\varphi^\\prime(t)\\) \u7684\u5207\u7ebf\uff0c\u5176\u65b9\u7a0b\u662f \\[ y-\\varphi^\\prime(t_k)=\\varphi^{\\prime\\prime}(t_k)(t-t_k) \\] \u7136\u540e\u7528\u8fd9\u6761\u5207\u7ebf\u4e0e\u6a2a\u8f74\u4ea4\u70b9\u7684\u6a2a\u5750\u6807 \\(t_{k+1}\\) \u4f5c\u4e3a\u6839\u7684\u65b0\u7684\u8fd1\u4f3c\uff0c\u4ee4 \\(y=0\\) \u89e3\u51fa \\[ t_{k+1}=t_k-\\varphi^\\prime(t_k)/\\varphi^{\\prime\\prime}(t_k) \\] \u9ec4\u91d1\u5206\u5272\u6cd5 \u00b6 \u9002\u7528\u4e8e \\([a,b]\\) \u533a\u95f4\u4e0a\u7684\u4efb\u4f55\u5355\u8c37\u51fd\u6570 \\(\\varphi(t)\\) \u6c42\u6781\u5c0f\u70b9\u95ee\u9898 \u7b97\u6cd5\u6d41\u7a0b\uff08\u5df2\u77e5 \\(\\varphi(t)\\) \uff0c\u7ec8\u6b62\u9650 \\(\\varepsilon\\) \uff09 \u786e\u5b9a \\(\\varphi(t)\\) \u7684\u521d\u59cb\u641c\u7d22\u533a\u95f4 \\(\\{a,b\\}\\) \u8ba1\u7b97 \\(t_2=a+\\beta(b-a), \\varphi_2=\\varphi(t_2)\\) \u8ba1\u7b97 \\(t_1=a+b-t_2, \\varphi_1=\\varphi(t_1)\\) \u82e5 \\(|t_1-t_2|<\\varepsilon\\) \uff0c\u5219\u6253\u5370 \\(t^\\prime=\\frac{t_1+t_2}{2}\\) \uff0c\u505c\u673a\uff1b\u90fd\u5219\uff0c\u82e5 \\(|t_1-t_2| \\ge \\varepsilon\\) \uff0c\u8f6c 5 \u5224\u522b \\(\\varphi_1 \\le \\varphi_2\\) \u662f\u5426\u6ee1\u8db3\uff1a\u82e5\u6ee1\u8db3\uff0c\u5219\u7f6e \\(b=t_2,t_2=t_1,\\varphi_2=\\varphi_1\\) \uff0c\u7136\u540e\u8f6c 3\uff1b\u5426\u5219\uff0c\u82e5 \\(\\varphi_1>\\varphi_2\\) \uff0c\u5219\u7f6e \\(a=t_1,t_1=t_2,\\varphi_1=\\varphi_2,t_2=a+\\beta(b-a),\\varphi_2=\\varphi(t_2)\\) \uff0c\u7136\u540e\u8f6c4","title":"\u76f4\u7ebf\u641c\u7d22"},{"location":"mb/optimization-theory/lec2/#_1","text":"Abstract \u672c\u7ae0\u4e3b\u8981\u8ba8\u8bba\u7684\u95ee\u9898\u662f \\(\\min{(\\varphi (t))}\uff0c\\varphi: R^1 \\to R^1\\) \uff0c\u8fd9\u79cd\u8fed\u4ee3\u65b9\u6cd5\u79f0\u4e3a\u76f4\u7ebf/\u4e00\u7ef4\u641c\u7d22\u3002\u5e76\u4e14\u5728\u591a\u7ef4\u95ee\u9898\u4e5f\u80fd\u7528\u5230\u3002","title":"\u76f4\u7ebf\u641c\u7d22"},{"location":"mb/optimization-theory/lec2/#_2","text":"\u5047\u8bbe\u4e00\u5143\u51fd\u6570 \\(\\varphi (t)\\) \u662f\u5355\u8c37\u51fd\u6570 \u8bbe \\(\\varphi \\subset R^1 \\to R^1\\) \uff0c \\(t^*\\) \u662f \\(\\varphi (t)\\) \u5728 \\(L\\) \u4e0a\u7684\u5168\u5c40\u6700\u5c0f\u70b9\u3002\u5982\u679c\u5bf9\u4e8e \\(L\\) \u4e0a\u4efb\u53d6\u7684\u4e24\u70b9 \\(t_1, t_2\\) \u4e14 \\(t_1 < t_2\\) \u90fd\u6709 \\[ \u5f53t_2 \\le t^*\u65f6\uff0c\\varphi(t_1) > \\varphi(t_2) \\\\ \u5f53t_1 \\ge t^*\u65f6\uff0c\\varphi(t_1) < \\varphi(t_2) \\] \u5219\u79f0 \\(\\varphi(t)\\) \u662f\u533a\u95f4 \\(L\\) \u4e0a\u7684\u5355\u8c37\u51fd\u6570\u3002 \u8bbe \\(\\varphi \\subset R^1 \\to R^1\\) \uff0c \\(t^*\\) \u662f \\(\\varphi (t)\\) \u5728 \\(L\\) \u4e0a\u7684\u5168\u5c40\u6700\u5c0f\u70b9\u3002\u5982\u679c\u627e\u5230 \\(t_1 \\in L\\) \u548c \\(t_2 \\in L\\) \u4f7f\u5f97 \\(t_1 < t^* < t_2\\) \uff0c\u5219 \\([t_1, t_2]\\) \u4e3a \\(\\varphi(t)\\) \u6781\u5c0f\u70b9\u7684\u4e00\u4e2a\u641c\u7d22\u533a\u95f4\uff0c\u8bb0\u4e3a \\(\\{t_1, t_2\\}\\) \u3002 \u8bbe \\(\\{a,b\\}\\) \u662f\u5355\u8c37\u51fd\u6570 \\(\\varphi(t)\\) \u6781\u5c0f\u70b9\u7684\u4e00\u4e2a\u641c\u7d22\u533a\u95f4\u3002\u5728 \\((a,b)\\) \u4e0a\u4efb\u53d6\u4e24\u70b9 \\(t_1\\) \u548c \\(t_2\\) \u4e14 \\(t_1 \\varphi(t_2)\\) \uff0c\u5219 \\(\\{t_1, b\\}\\) \u662f \\(\\varphi(t)\\) \u6781\u5c0f\u70b9\u7684\u4e00\u4e2a\u641c\u7d22\u7a7a\u95f4\u3002 \u641c\u7d22\u533a\u95f4\u7684\u786e\u5b9a \u9009\u5b9a\u521d\u59cb\u70b9 \\(t_0\\) \u548c\u6b65\u957f \\(h\\) \u8ba1\u7b97\u5e76\u6bd4\u8f83 \\(\\varphi(t_0)\\) \u548c \\(\\varphi(t_0+h)\\) \uff0c\u6709 3\uff0c4 \u4e24\u79cd\u60c5\u51b5 \u5f53 \\(\\varphi(t_0)<\\varphi(t_0+h)\\) \u65f6\uff0c\u6bd4\u8f83 \\(\\varphi(t_0)\\) \u548c \\(\\varphi(t_0-h)\\) \uff0c\u6709 5\uff0c6 \u4e24\u79cd\u60c5\u51b5 \u5f53 \\(\\varphi(t_0)\\ge\\varphi(t_0+h)\\) \u65f6\uff0c\u6bd4\u8f83 \\(\\varphi(t_0+(2^k-1)^h), k=1,2,...\\) \uff0c\u76f4\u5230\u5bf9\u4e8e\u67d0\u4e2a \\(m(m \\ge 1)\\) \u4f7f\u5f97 \\[ \\varphi(t_0+(2^{m-1}-1)^h) \\ge \\varphi(t_0+(2^m-1)^h) < \\varphi(t_0+(2^{m+1}-1)^h) \\\\ \u8bbe \\ \\ u=\\varphi(t_0+(2^{m-1}-1)^h), v=\\varphi(t_0+(2^{m}-1)^h), w=\\varphi(t_0+(2^{m+1}-1)^h) \\] \u6b64\u65f6\u5f97\u5230\u641c\u7d22\u533a\u95f4 \\(\\{u,v,w\\}\\) \uff0c\u56e0\u4e3a\u533a\u95f4 \\([v,w]\\) \u662f \\([u,v]\\) \u7684\u4e24\u500d\u957f\uff0c\u6240\u4ee5\u53ea\u8981\u6bd4\u8f83 \\(v\\) \u548c\u533a\u95f4 \\([v,w]\\) \u4e2d\u70b9 \\(r=\\frac{v+w}{2}\\) \u7684\u51fd\u6570\u503c\uff0c\u7acb\u523b\u53ef\u4ee5\u5c06 \\([u,w]\\) \u7f29\u77ed \\(\\frac{1}{3}\\) \u5f53 \\(\\varphi(v) < \\varphi(r)\\) \u65f6\uff0c\u53d6 \\(\\{u,v,r\\}\\) \u4e3a\u641c\u7d22\u533a\u95f4 \u5f53 \\(\\varphi(v) \\ge \\varphi(r)\\) \u65f6\uff0c\u53d6 \\(\\{v,r,w\\}\\) \u4e3a\u641c\u7d22\u533a\u95f4 \u5f53 \\(\\varphi(t_0-h) > \\varphi(t_0)\\) \u65f6\uff0c\u53d6 \\(\\{t_0-h,t_0,t_0+h\\}\\) \u4e3a\u641c\u7d22\u533a\u95f4 \u5f53 \\(\\varphi(t_0-h)\\le\\varphi(t_0)\\) \u65f6\uff0c\u6bd4\u8f83 \\(\\varphi(t_0-(2^k-1)^h), k=1,2,...\\) \uff0c\u76f4\u5230\u5bf9\u4e8e\u67d0\u4e2a \\(m(m \\ge 1)\\) \u4f7f\u5f97 \\[ \\varphi(t_0-(2^{m-1}-1)^h) \\ge \\varphi(t_0-(2^m-1)^h) < \\varphi(t_0-(2^{m+1}-1)^h) \\\\ \u8bbe \\ \\ u=\\varphi(t_0-(2^{m-1}-1)^h), v=\\varphi(t_0-(2^{m}-1)^h), w=\\varphi(t_0-(2^{m+1}-1)^h) \\] \u6b64\u65f6\u5f97\u5230\u641c\u7d22\u533a\u95f4 \\(\\{u,v,w\\}\\) \uff0c\u56e0\u4e3a\u533a\u95f4 \\([v,w]\\) \u662f \\([u,v]\\) \u7684\u4e24\u500d\u957f\uff0c\u6240\u4ee5\u53ea\u8981\u6bd4\u8f83 \\(v\\) \u548c\u533a\u95f4 \\([v,w]\\) \u4e2d\u70b9 \\(r=\\frac{v+w}{2}\\) \u7684\u51fd\u6570\u503c\uff0c\u7acb\u523b\u53ef\u4ee5\u5c06 \\([u,w]\\) \u7f29\u77ed \\(\\frac{1}{3}\\) \u5f53 \\(\\varphi(v) \\ge \\varphi(r)\\) \u65f6\uff0c\u53d6 \\(\\{w,r,v\\}\\) \u4e3a\u641c\u7d22\u533a\u95f4 \u5f53 \\(\\varphi(v) < \\varphi(r)\\) \u65f6\uff0c\u53d6 \\(\\{r,v,u\\}\\) \u4e3a\u641c\u7d22\u533a\u95f4 \u6b65\u957f\u7684\u9009\u62e9","title":"\u641c\u7d22\u533a\u95f4\u7684\u786e\u5b9a"},{"location":"mb/optimization-theory/lec2/#_3","text":"\u9002\u7528\u4e8e \\(\\varphi: R^1 \\to R^1\\) \u5728\u5df2\u83b7\u5f97\u7684\u641c\u7d22\u533a\u95f4 \\(\\{a,b\\}\\) \u5185\u5177\u6709\u8fde\u7eed\u7684\u4e00\u9636\u5bfc\u6570\uff0c\u5e76\u4e14\u5df2\u5bfc\u51fa\u5b83\u7684\u8868\u8fbe\u5f0f \u7b97\u6cd5\u6d41\u7a0b\uff08\u5df2\u77e5 \\(\\varphi(t)\\) \u548c \\(\\varphi^\\prime(t)\\) \u7684\u8868\u8fbe\u5f0f\uff0c\u7ec8\u6b62\u9650 \\(\\varepsilon\\) \uff09 \u786e\u5b9a\u521d\u59cb\u641c\u7d22\u533a\u95f4 \\(\\{a,b\\}\\) \uff0c\u8981\u6c42 \\(\\varphi^\\prime(a)<0,\\varphi^\\prime(b)>0\\) \u8ba1\u7b97 \\(\\{a,b\\}\\) \u7684\u4e2d\u70b9 \\(c=0.5(a+b)\\) \u82e5 \\(\\varphi^\\prime(c)<0\\) \uff0c\u5219 \\(a=c\\) \uff0c\u8f6c 4\uff1b\u82e5 \\(\\varphi^\\prime(c)=0\\) \uff0c\u5219 \\(t^*=c\\) \uff0c\u8f6c 5\uff1b\u82e5 \\(\\varphi^\\prime(c)>0\\) \uff0c\u5219 \\(b=c\\) \uff0c\u8f6c4 \u82e5 \\(|a-b|<\\varepsilon\\) \uff0c\u5219 \\(t^*=0.5(a+b)\\) \uff0c\u8f6c 5\uff0c\u5426\u5219\u8f6c 2 \u6253\u5370 \\(t^*\\) \uff0c\u505c\u673a","title":"\u5bf9\u5206\u6cd5"},{"location":"mb/optimization-theory/lec2/#newton","text":"\u9002\u7528\u4e8e \\(\\varphi: R^1 \\to R^1\\) \u5728\u5df2\u83b7\u5f97\u7684\u641c\u7d22\u533a\u95f4 \\(\\{a,b\\}\\) \u5185\u5177\u6709\u8fde\u7eed\u7684\u4e8c\u9636\u5bfc\u6570\uff0c\u5e76\u4e14\u5df2\u5bfc\u51fa\u4e00\u9636\u548c\u4e8c\u9636\u5bfc\u6570\u7684\u8868\u8fbe\u5f0f \u7b97\u6cd5\u6d41\u7a0b \u8bbe\u5728\u533a\u95f4 \\([a,b]\\) \u4e2d\u7ecf\u8fc7 \\(k\\) \u6b21\u8fed\u4ee3\u5df2\u6c42\u5230\u65b9\u7a0b \\(\\varphi^\\prime(t)=0\\) \u7684\u4e00\u4e2a\u8fd1\u6839\u4f3c \\(t_k\\) \u3002\u8fc7 \\((t_k,\\varphi^\\prime(t_k))\\) \u4f5c\u66f2\u7ebf \\(y=\\varphi^\\prime(t)\\) \u7684\u5207\u7ebf\uff0c\u5176\u65b9\u7a0b\u662f \\[ y-\\varphi^\\prime(t_k)=\\varphi^{\\prime\\prime}(t_k)(t-t_k) \\] \u7136\u540e\u7528\u8fd9\u6761\u5207\u7ebf\u4e0e\u6a2a\u8f74\u4ea4\u70b9\u7684\u6a2a\u5750\u6807 \\(t_{k+1}\\) \u4f5c\u4e3a\u6839\u7684\u65b0\u7684\u8fd1\u4f3c\uff0c\u4ee4 \\(y=0\\) \u89e3\u51fa \\[ t_{k+1}=t_k-\\varphi^\\prime(t_k)/\\varphi^{\\prime\\prime}(t_k) \\]","title":"Newton \u5207\u7ebf\u6cd5"},{"location":"mb/optimization-theory/lec2/#_4","text":"\u9002\u7528\u4e8e \\([a,b]\\) \u533a\u95f4\u4e0a\u7684\u4efb\u4f55\u5355\u8c37\u51fd\u6570 \\(\\varphi(t)\\) \u6c42\u6781\u5c0f\u70b9\u95ee\u9898 \u7b97\u6cd5\u6d41\u7a0b\uff08\u5df2\u77e5 \\(\\varphi(t)\\) \uff0c\u7ec8\u6b62\u9650 \\(\\varepsilon\\) \uff09 \u786e\u5b9a \\(\\varphi(t)\\) \u7684\u521d\u59cb\u641c\u7d22\u533a\u95f4 \\(\\{a,b\\}\\) \u8ba1\u7b97 \\(t_2=a+\\beta(b-a), \\varphi_2=\\varphi(t_2)\\) \u8ba1\u7b97 \\(t_1=a+b-t_2, \\varphi_1=\\varphi(t_1)\\) \u82e5 \\(|t_1-t_2|<\\varepsilon\\) \uff0c\u5219\u6253\u5370 \\(t^\\prime=\\frac{t_1+t_2}{2}\\) \uff0c\u505c\u673a\uff1b\u90fd\u5219\uff0c\u82e5 \\(|t_1-t_2| \\ge \\varepsilon\\) \uff0c\u8f6c 5 \u5224\u522b \\(\\varphi_1 \\le \\varphi_2\\) \u662f\u5426\u6ee1\u8db3\uff1a\u82e5\u6ee1\u8db3\uff0c\u5219\u7f6e \\(b=t_2,t_2=t_1,\\varphi_2=\\varphi_1\\) \uff0c\u7136\u540e\u8f6c 3\uff1b\u5426\u5219\uff0c\u82e5 \\(\\varphi_1>\\varphi_2\\) \uff0c\u5219\u7f6e \\(a=t_1,t_1=t_2,\\varphi_1=\\varphi_2,t_2=a+\\beta(b-a),\\varphi_2=\\varphi(t_2)\\) \uff0c\u7136\u540e\u8f6c4","title":"\u9ec4\u91d1\u5206\u5272\u6cd5"},{"location":"mb/optimization-theory/lec3/","text":"\u65e0\u7ea6\u675f\u6700\u4f18\u5316\u7684\u68af\u5ea6\u65b9\u6cd5 \u00b6 \u7ea6 2049 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f Abstract \u672c\u7ae0\u5f00\u59cb\u8ba8\u8bba\u591a\u7ef4\u6700\u4f18\u5316\u95ee\u9898\u548c\u65e0\u7ea6\u675f\u6700\u4f18\u5316\u95ee\u9898\uff0c\u5176\u4e00\u822c\u5f62\u5f0f\u4e3a \\[ \\min f(\\mathbf{x}) \\] \u6700\u901f\u4e0b\u964d\u6cd5 \u00b6 \u57fa\u672c\u60f3\u6cd5 \u5047\u5b9a\u5df2\u7ecf\u8fed\u4ee3\u4e86 k \u6b21\uff0c\u83b7\u5f97\u4e86\u7b2c k \u4e2a\u8fed\u4ee3\u70b9 \\(\\mathbf{x}_k\\) \uff0c\u4ece \\(\\mathbf{x}_k\\) \u51fa\u53d1\uff0c\u663e\u7136\u5e94\u8be5\u6cbf\u6700\u4fd7\u4e0b\u964d\u65b9\u5411\uff08\u5373\u8d1f\u68af\u5ea6\u65b9\u5411\uff09\u884c\u8fdb\uff0c\u53d6\u641c\u7d22\u65b9\u5411 \\[ \\mathbf{p}_k = - \\nabla f(\\mathbf{x}_k) \\] \u7531\u6b64\u5f97\u5230\u7b2c \\(k+1\\) \u8fed\u4ee3\u70b9 \\(\\mathbf{x}_{k+1}\\) \uff0c\u5373 \\[ \\mathbf{x}_{k+1}=\\mathbf{x}_k - t_k \\nabla f(\\mathbf{x}_k) \\] \u5176\u6b65\u957f\u56e0\u5b50 \\(t_k\\) \u6ee1\u8db3 \\[ f(\\mathbf{x}_k - t_k \\nabla f(\\mathbf{x}_k)) = \\min f(\\mathbf{x}_k - t \\nabla f(\\mathbf{x}_k)) \\] \u603b\u7ed3\u4e0a\u5f0f\uff0c\u5f97\u5230\u6700\u901f\u4e0b\u964d\u6cd5\u7684\u8fed\u4ee3\u516c\u5f0f \\[ \\mathbf{x}_{k+1} = ls(\\mathbf{x}_k, - \\nabla f(\\mathbf{x}_k)) \\] \u7b97\u6cd5 \u5df2\u77e5\uff1a\u76ee\u6807\u51fd\u6570 \\(f(\\mathbf{x})\\) \u53ca\u5176\u68af\u5ea6 \\(\\mathbf{g}(\\mathbf{x})\\) \uff0cH \u7ec8\u6b62\u51c6\u5219\u6240\u9700\u8981\u7684\u7ec8\u6b62\u9650 \\(\\varepsilon_1, \\varepsilon_2\\) \u548c \\(\\varepsilon_3\\) \u9009\u5b9a\u521d\u59cb\u70b9 \\(\\mathbf{x}_0\\) \uff0c\u8ba1\u7b97 \\(f_0=f(\\mathbf{x}_0), \\mathbf{g}_0 = \\mathbf{g}(\\mathbf{x}_0)\\) \uff0c\u7f6e \\(k=0\\) \u4f5c\u76f4\u7ebf\u641c\u7d22\uff1a \\(\\mathbf{x}_{k+1}=ls \\cdot (\\mathbf{x}_k, -\\mathbf{g}_k)\\) \uff1b\u8ba1\u7b97 \\(f_{k+1}=f(\\mathbf{x}_{k+1}), \\mathbf{g}_{k+1}=\\mathbf{g}(\\mathbf{x}_{k+1})\\) \u5224\u522b H \u7ec8\u6b62\u51c6\u5219\u662f\u5426\u6ee1\u8db3\uff1b\u82e5\u6ee1\u8db3\uff0c\u5219\u6253\u5370\u6700\u4f18\u89e3 \\(\\mathbf{x}_{k+1},f_{k+1}\\) \uff0c\u505c\u673a\uff1b\u5426\u5219\uff0c\u7f6e \\(k=k+1\\) \uff0c\u8f6c 2 \u5e94\u7528\u4e8e\u6b63\u5b9a\u4e8c\u6b21\u51fd\u6570 \\(f(\\mathbf{x})=\\frac{1}{2} \\mathbf{x}^\\top \\mathbf{Q} \\mathbf{x} + \\mathbf{b}^\\top \\mathbf{x} + c\\) \u8bbe\u7b2c \\(k\\) \u6b21\u7684\u8fed\u4ee3\u70b9\u4e3a \\(\\mathbf{x}_k\\) \uff0c\u6c42 \\(\\mathbf{x}_{k+1}\\) \u7684\u8868\u8fbe\u5f0f \\[ \\mathbf{x}_{k+1} = \\mathbf{x}_k - \\frac{\\mathbf{g}_k^\\top \\mathbf{g}_k}{\\mathbf{g}_k^\\top \\mathbf{Q} \\mathbf{g}_k} \\mathbf{g}_k \\] Newton \u6cd5 \u00b6 \u57fa\u672c\u60f3\u6cd5 \u8003\u8651\u4ece \\(\\mathbf{x}_k\\) \u5230 \\(\\mathbf{x}_{k+1}\\) \u7684\u8fed\u4ee3\u8fc7\u7a0b\u3002\u5728 \\(\\mathbf{x}_k\\) \u70b9\u5904\u5bf9 \\(f(\\mathbf{x})\\) \u7528\u4e0e\u5b83\u6700\u5bc6\u5207\u7684\u4e8c\u6b21\u51fd\u6570\u6765\u8fd1\u4f3c\uff0c\u8fd9\u53ea\u987b\u628a \\(f(\\mathbf{x}\\) \u6309 Taylor \u5c55\u5f00\uff0c\u76f4\u5230\u7b2c\u4e09\u9879\uff0c\u5373 \\[ f(\\mathbf{x}) \\approx Q(\\mathbf{x}) = f(\\mathbf{x}_k) + \\mathbf{g}(\\mathbf{x}_k)^\\top (\\mathbf{x} - \\mathbf{x}_k)+\\frac{1}{2}(\\mathbf{x}-\\mathbf{x}_k)^\\top \\mathbf{G}(\\mathbf{x}_k)(\\mathbf{x}-\\mathbf{x}_k) \\] \u4ee4 \\(\\nabla Q(\\mathbf{x})=\\mathbf{G}(\\mathbf{x}_k)(\\mathbf{x}-\\mathbf{x}_k)+\\mathbf{g}(\\mathbf{x}_k)=0\\) \uff0c\u5f97 \\[ \\mathbf{x}_{k+1} = \\mathbf{x}_k - \\mathbf{G}(\\mathbf{x}_k)^{-1}\\mathbf{g}(\\mathbf{x}_k) \\] \u7b97\u6cd5 \u5df2\u77e5\uff1a\u76ee\u6807\u51fd\u6570 \\(f(\\mathbf{x})\\) \u53ca\u5176\u68af\u5ea6 \\(\\mathbf{g}(\\mathbf{x})\\) \uff0cHesse \u77e9\u9635 \\(\\mathbf{G}(\\mathbf{x})\\) \uff0cH \u7ec8\u6b62\u51c6\u5219\u6240\u9700\u8981\u7684\u7ec8\u6b62\u9650 \\(\\varepsilon_1, \\varepsilon_2\\) \u548c \\(\\varepsilon_3\\) \u9009\u5b9a\u521d\u59cb\u70b9 \\(\\mathbf{x}_0\\) \uff1b\u8ba1\u7b97 \\(f_0 = f(\\mathbf{x}_0), \\mathbf{g}_0=\\mathbf{g}(\\mathbf{x}_0)\\) \uff1b\u7f6e \\(k=0\\) \u8ba1\u7b97 \\(\\mathbf{G}_k=\\mathbf{G}(\\mathbf{x}_k)\\) \u7531\u65b9\u7a0b \\(\\mathbf{G}_k \\mathbf{p}=-\\mathbf{g}_k\\) \u89e3\u51fa \\(\\mathbf{p}_k\\) \u8ba1\u7b97 \\(\\mathbf{x}_{k+1}=\\mathbf{x}_k + \\mathbf{p}_k\\) \uff0c \\(f_{k+1}=f(\\mathbf{x}_{k+1})\\) \uff0c \\(\\mathbf{g}_{k+1}=\\mathbf{g}(\\mathbf{x}_{k+1})\\) \u5224\u522b H \u7ec8\u6b62\u51c6\u5219\u662f\u5426\u6ee1\u8db3\uff1b\u82e5\u6ee1\u8db3\uff0c\u5219\u6253\u5370\u6700\u4f18\u89e3 \\(\\mathbf{x}_{k+1},f_{k+1}\\) \uff0c\u505c\u673a\uff1b\u5426\u5219\uff0c\u7f6e \\(k=k+1\\) \uff0c\u8f6c 2 \u5171\u8f6d\u65b9\u5411\u6cd5\u4e0e\u5171\u8f6d\u68af\u5ea6\u6cd5 \u00b6 \u57fa\u672c\u60f3\u6cd5 \u9996\u5148\u8003\u8651\u4e8c\u7ef4\u7684\u60c5\u51b5\uff0c\u628a\u4e0b\u964d\u6cd5\u7528\u4e8e\u4e8c\u5143\u4e8c\u6b21\u51fd\u6570\uff0c\u4efb\u9009\u521d\u59cb\u70b9 \\(\\mathbf{x}_0\\) \uff0c\u6cbf\u67d0\u4e2a\u4e0b\u964d\u65b9\u5411\uff0c\u4f8b\u5982\u5411\u91cf \\(\\mathbf{p}_0\\) \u7684\u65b9\u5411\uff0c\u4f5c\u76f4\u7ebf\u641c\u7d22\u5f97\u5230 \\(\\mathbf{x}_1\\) \uff1a \\(\\nabla f(\\mathbf{x}_1)^\\top \\mathbf{p}_0=0\\) \u5c06\u4e0b\u4e00\u6b21\u8fed\u4ee3\u7684\u641c\u7d22\u65b9\u5411\u6307\u5411\u6781\u5c0f\u70b9 \\(\\mathbf{x}^*\\) \uff0c\u63a8\u5bfc\u5f97\u5230 \\(\\mathbf{p}_0^\\top \\mathbf{Q} \\mathbf{p}_1 = 0\\) \uff0c\uff0c\u8fd9\u91cc\u7684 \\(\\mathbf{p}_0\\) \u548c \\(\\mathbf{p}_1\\) \u79f0\u4e3a \\(\\mathbf{Q}\\) \u5171\u8f6d\u5411\u91cf\uff0c\u6216\u79f0 \\(\\mathbf{p}_0\\) \u548c \\(\\mathbf{p}_1\\) \u7684\u65b9\u5411\u662f\u5171\u8f6d\u65b9\u5411 \\[ \\mathbf{p}_1 = - \\nabla f(\\mathbf{x}_1) + \\frac{\\mathbf{p}_0^\\top \\mathbf{Q} \\nabla f(\\mathbf{x}_1)}{\\mathbf{p}_0^\\top \\mathbf{Q} \\mathbf{p}_0} \\mathbf{p}_0 \\] \u5411\u91cf\u7684\u5171\u8f6d\u53ca\u5176\u6027\u8d28 \u82e5\u975e\u96f6\u5411\u91cf\u7cfb \\(\\mathbf{p}_0, \\mathbf{p}_1, ..., \\mathbf{p}_{m+1}\\) \u662f \\(\\mathbf{Q}\\) \u5171\u8f6d\u7684\uff0c\u5219\u8fd9 m \u4e2a\u5411\u91cf\u7ebf\u6027\u65e0\u5173 \u5728 n \u7ef4\u7a7a\u95f4\u4e2d\uff0c\u4e92\u76f8\u5171\u8f6d\u7684\u975e\u96f6\u5411\u91cf\u7684\u5411\u91cf\u4e2a\u6570\u4e0d\u8d85\u8fc7 n \u5171\u8f6d\u65b9\u5411\u6cd5 \u5df2\u77e5\uff1a\u5177\u6709\u6b63\u5b9a\u77e9\u9635 \\(\\mathbf{Q}\\) \u7684\u4e8c\u6b21\u76ee\u6807\u51fd\u6570 \\(f(\\mathbf{x})=\\frac{1}{2} \\mathbf{x}^\\top \\mathbf{Q} \\mathbf{x} + \\mathbf{b}^\\top \\mathbf{x}+c\\) \u548c\u7ec8\u6b62\u9650 \\(\\varepsilon\\) \u9009\u5b9a\u521d\u59cb\u70b9 \\(\\mathbf{x}_0\\) \u548c\u5177\u6709\u4e0b\u964d\u65b9\u5411\u7684\u5411\u91cf \\(\\mathbf{p}_0\\) \uff1b\u7f6e \\(k=0\\) \u4f5c\u76f4\u7ebf\u641c\u7d22 \\(\\mathbf{x}_{k+1}=ls(\\mathbf{x}_k. \\mathbf{p}_k)\\) \u5224\u522b \\(\\parallel \\nabla f(\\mathbf{x}_{k+1}) \\parallel < \\varepsilon\\) \u662f\u5426\u6ee1\u8db3\uff1a\u82e5\u6ee1\u8db3\uff0c\u5219\u6253\u5370 \\(\\mathbf{x}_{k+1}\\) \uff0c\u505c\u673a\uff0c\u5426\u5219\u8f6c 4 \u63d0\u4f9b\u5171\u8f6d\u65b9\u5411 \\(\\mathbf{p}_{k+1}\\) \u4f7f\u5f97 \\(\\mathbf{p}_j^\\top \\mathbf{Q} \\mathbf{p}_{k+1} = 0, \\ \\ \\ j=0,1,...,k\\) \\(k = k + 1\\) \uff0c\u8f6c 2 \u5171\u8f6d\u68af\u5ea6\u6cd5 \u5df2\u77e5\uff1a\u5177\u6709\u4e8c\u6b21\u76ee\u6807\u51fd\u6570 \\(f(\\mathbf{x})=\\frac{1}{2} \\mathbf{x}^\\top \\mathbf{Q} \\mathbf{x} + \\mathbf{b}^\\top \\mathbf{x}+c\\) \u548c\u7ec8\u6b62\u9650 \\(\\varepsilon\\) \u9009\u5b9a\u521d\u59cb\u70b9 \\(\\mathbf{x}_0\\) \uff0c\u8ba1\u7b97 \\(\\mathbf{p}_0 = -\\nabla f(\\mathbf{x}_0)\\) \uff0c\u7f6e \\(k=0\\) \u4f5c\u76f4\u7ebf\u641c\u7d22 \\(\\mathbf{x}_{k+1}=ls(\\mathbf{x}_k,\\mathbf{p}_k)\\) \uff0c\u6216\u91c7\u53d6\u8ba1\u7b97\u516c\u5f0f \\(t_k=\\frac{\\nabla f(\\mathbf{x}_k)^\\top \\nabla f(\\mathbf{x}_k)}{\\mathbf{p}_k^\\top \\mathbf{Q} \\mathbf{p}_k}\\) \uff0c \\(\\mathbf{x}_{k+1}=\\mathbf{x}_k + t_k\\mathbf{p}_k\\) \u5224\u522b \\(\\parallel \\nabla f(\\mathbf{x}_{k+1}) \\parallel < \\varepsilon\\) \u662f\u5426\u6ee1\u8db3\uff1a\u82e5\u6ee1\u8db3\uff0c\u5219\u6253\u5370 \\(\\mathbf{x}_{k+1}\\) \uff0c\u505c\u673a\uff0c\u5426\u5219\u8f6c 4 \u8ba1\u7b97 \\(\\alpha_k = \\frac{\\nabla f(\\mathbf{x}_{k+1}^\\top \\mathbf{Q} \\mathbf{p}_k)}{\\mathbf{p}_k^\\top \\mathbf{Q} \\mathbf{p}_k}\\) \uff0c \\(\\mathbf{p}_{k+1}=-\\nabla f(\\mathbf{x}_{k+1})+\\alpha_k \\mathbf{p}_k\\) \\(k=k+1\\) \uff0c\u8f6c 2 \u53d8\u5c3a\u5ea6\u6cd5 \u00b6 \u57fa\u672c\u60f3\u6cd5 \uff1a\u7565 DFP \u7b97\u6cd5 \u5df2\u77e5\uff1a\u76ee\u6807\u51fd\u6570 \\(f(\\mathbf{x})\\) \u53ca\u5176\u68af\u5ea6 \\(\\mathbf{g}(\\mathbf{x_0})\\) \uff0c\u95ee\u9898\u7684\u7ef4\u5ea6 n\uff0cH \u7ec8\u6b62\u51c6\u5219\u4e2d\u7684\u7ec8\u6b62\u9650 \\(\\varepsilon_1, \\varepsilon_2\\) \u548c \\(\\varepsilon_3\\) \u9009\u5b9a\u521d\u59cb\u70b9 \\(\\mathbf{x}_0\\) \uff0c\u8ba1\u7b97 \\(f_0=f(\\mathbf{x}_0),\\mathbf{g}_0=\\mathbf{g}(\\mathbf{x}_0)\\) \u7f6e \\(\\mathbf{H}_0=\\mathbf{I},\\mathbf{p}_0=-\\mathbf{g}_0,k=0\\) \u4f5c\u76f4\u7ebf\u641c\u7d22 \\(\\mathbf{x}_{k+1}=ls(\\mathbf{x}_k, \\mathbf{p}_k)\\) \uff0c\u8ba1\u7b97 \\(f_{k+1}=f(\\mathbf{x}_{k+1}),\\mathbf{g}_{k+1}=\\mathbf{g}(\\mathbf{x}_{k+1})\\) \u5224\u522b H \u7ec8\u6b62\u51c6\u5219\u662f\u5426\u6ee1\u8db3\uff1a\u82e5\u6ee1\u8db3\uff0c\u5219\u6253\u5370 \\(\\mathbf{x}_{k+1},f_{k+1}\\) \uff0c\u505c\u673a\uff1b\u5426\u5219\uff0c\u8f6c 5 \u82e5 \\(k=n\\) \uff0c\u5219\u7f6e \\(\\mathbf{x}_0 = \\mathbf{x}_{k+1}, f_0=f_{k+1}, \\mathbf{g}_0 = \\mathbf{g}_{k+1}\\) \uff0c\u8f6c 2\uff1b\u5426\u5219\u8f6c 6 \u8ba1\u7b97 \\(\\mathbf{y}_k=\\mathbf{g}_{k+1}-\\mathbf{g}_k, \\mathbf{s}_k = \\mathbf{x}_{k+1}-\\mathbf{x}_k, \\mathbf{H}_{k+1}=\\mathbf{H}_k+\\frac{\\mathbf{s}_k\\mathbf{s}_k^\\top}{\\mathbf{s}_k^\\top \\mathbf{y}_k} - \\frac{\\mathbf{H}_k \\mathbf{y}_k \\mathbf{y}_k^\\top \\mathbf{H}_k}{\\mathbf{y}_k^\\top \\mathbf{H}_k \\mathbf{y}_k},\\mathbf{p}_{k+1}=-\\mathbf{H}_{k+1}\\mathbf{g}_{k+1}\\) \uff0c\u7f6e \\(k=k+1\\) \uff0c\u8f6c 3 \u6700\u5c0f\u4e8c\u4e58\u95ee\u9898\u7684\u89e3\u6cd5 \u00b6 \u7ebf\u6027\u6700\u5c0f\u4e8c\u4e58\u95ee\u9898 \u00b6 \u5f53 \\(f(\\mathbf{x})\\) \u53d6\u7ebf\u6027\u51fd\u6570\u5f62\u5f0f\u65f6\uff0c\u5373 \\(f(\\mathbf{x})=A \\mathbf{x} - \\mathbf{b}\\) \uff0c\u5176\u4e2d A \u662f \\(m \\times n\\) \u77e9\u9635\uff0cb \u662f m \u7ef4\u5411\u91cf\uff0c\u6b64\u65f6\u7ebf\u6027\u6700\u5c0f\u4e8c\u4e58\u95ee\u9898\u5373 \\[ \\min \\parallel A \\mathbf{x} - \\mathbf{b} \\parallel^2 \\] \\(\\mathbf{x}^*\\) \u7684\u6781\u5c0f\u70b9\u5f53\u4e14\u4ec5\u5f53 \\(\\mathbf{x}^*\\) \u6ee1\u8db3\u65b9\u7a0b \\(A^\\top A \\mathbf{x}=A^\\top \\mathbf{b}\\) \u8bbe A \u662f \\(m \\times n\\) \u77e9\u9635 \\((m \\ge n)\\) \uff0c\u5219 \\(A^\\top A\\) \u6b63\u5b9a\u7684\u5145\u8981\u6761\u4ef6\u662f A \u7684\u79e9\u4e3a n \u5f53 A \u7684\u79e9\u4e3a n \u65f6\uff0c\u5219 \\(\\mathbf{x}=(A^\\top A)^{-1} A^\\top \\mathbf{b}\\) \u662f\u552f\u4e00\u6700\u5c0f\u4e8c\u4e58\u89e3 \u8bbe A \u662f \\(m \\times n\\) \u77e9\u9635 \\((m \\ge n)\\) \uff0c\u5219 \\(A^\\top A\\) \u6b63\u5b9a\u7684\u5145\u8981\u6761\u4ef6\u662f \\(A^\\top A\\) \u4e3a\u975e\u5947\u5f02 Gauss-Newton \u6cd5 \u00b6 \u8ba8\u8bba\u4ee5 \\(s(\\mathbf{x})=f(\\mathbf{x})^\\top f(\\mathbf{x})=\\parallel f(\\mathbf{x}) \\parallel^2\\) \u4e3a\u76ee\u6807\u51fd\u6570\u7684\u975e\u7ebf\u6027\u6700\u5c0f\u4e8c\u4e58\u95ee\u9898\u7684\u89e3\u6cd5 \u628a \\(f(\\mathbf{x})\\) \u7ebf\u6027\u5316\uff0c\u7528\u7ebf\u6027\u6700\u5c0f\u4e8c\u4e58\u95ee\u9898\u7684\u89e3\u53bb\u903c\u8fd1\u975e\u7ebf\u6027\u6700\u5c0f\u4e8c\u4e58\u95ee\u9898\u7684\u89e3 \u7b97\u6cd5\u6d41\u7a0b \u5df2\u77e5\uff1a \\(f(\\mathbf{x})=[f_1(\\mathbf{x}), ..., f_m(\\mathbf{x})]^\\top\\) \u53ca\u5176 Jacobi \u77e9\u9635 \\(A(\\mathbf{x})=[\\frac{\\partial f_i(\\mathbf{x})}{\\partial x_j}]\\) \u9009\u5b9a\u521d\u59cb\u70b9 \\(\\mathbf{x}_0\\) \uff1b\u8ba1\u7b97 \\(s_0=\\sum_{i=1}^m f_i^m (\\mathbf{x}_0)\\) \uff1b\u7f6e \\(k=0\\) \u5bf9 \\(i=1,...,m\\) \u548c \\(j=1,...,n\\) \u8ba1\u7b97 \\(a_{ij}^{(k)}=\\frac{\\partial f_i(\\mathbf{x}_k)}{\\partial x_j}\\) \u3002\u7531\u6b64\u6784\u6210\u77e9\u9635 \\(A_k\\) \uff0c\u5b83\u7684\u7b2c i \u884c\u548c\u7b2c j \u5217\u5206\u91cf\u662f \\(a_{ij}^{(k)}\\) \uff0c\u5bf9 \\(j=1,...,n\\) \u8ba1\u7b97 \\(g_j^{(k)}=\\sum_{i=1}^m f_i(\\mathbf{x}_k) \\frac{\\partial f_i(\\mathbf{x_k})}{\\partial x_j}\\) \u3002\u7531\u6b64\u6784\u6210\u5411\u91cf \\(\\mathbf{g}_k\\) \uff0c\u5b83\u7684\u7b2c j \u4e2a\u5206\u91cf\u662f \\(g_j^{(k)}\\) \u7531\u65b9\u7a0b\u7ec4 \\(A_k^\\top A_k \\mathbf{p}=-\\mathbf{g}_k\\) \u89e3\u51fa \\(\\mathbf{p}\\) \uff0c\u8bbe\u4e3a \\(\\mathbf{p}_k\\) \u3002\u5728\u6c42\u89e3\u8fc7\u7a0b\u4e2d\uff0c\u4ec5\u5f53 \\(r(A_k^\\top A_k)=n\\) \u65f6\u624d\u80fd\u89e3\u5f97\u51fa \\(\\mathbf{p}_k\\) \u82e5\u5728\u6c42\u89e3\u8fc7\u7a0b\u4e2d\u53d1\u73b0 \\(r(A_k^\\top A_k) 0) { timestamp = time[i].children[0].innerHTML; } else { timestamp = time[i].innerHTML; } let date = new Date(parseInt(timestamp) * 1000); let now = new Date(); let diff = now.getTime() - date.getTime(); let years = Math.floor(diff / (24 * 3600 * 1000 * 365)); let months = Math.floor(diff / (24 * 3600 * 1000 * 30)); let days = Math.floor(diff / (24 * 3600 * 1000)); let hours = Math.floor((diff % (24 * 3600 * 1000)) / (3600 * 1000)); let minutes = Math.floor((diff % (3600 * 1000)) / (60 * 1000)); let seconds = Math.floor((diff % (60 * 1000)) / 1000); if (years > 0) { time[i].innerHTML = years + \" years ago\"; } else if (months > 0) { time[i].innerHTML = months + \" months ago\"; } else if (days > 0) { time[i].innerHTML = days + \" days ago\"; } else if (hours > 0) { time[i].innerHTML = hours + \" hours ago\"; } else if (minutes > 0) { time[i].innerHTML = minutes + \" minutes ago\"; } else { time[i].innerHTML = seconds + \" seconds ago\"; } } } produce_time();","title":"\u5de5\u5177\u76f8\u5173"},{"location":"utils/#_1","text":"Abstract \u4e00\u4e9b\u5de5\u5177\u7684\u4f7f\u7528\u65b9\u6cd5\uff0c\u5305\u62ec\u547d\u4ee4\u884c\u76f8\u5173\u7684\u547d\u4ee4\u7b49\u7b49","title":"\u5de5\u5177\u76f8\u5173"},{"location":"utils/#table-of-contents","text":"\u547d\u4ee4\u884c\u5de5\u5177 Shell \u76f8\u5173\u547d\u4ee4 159 2 1 mins 1693553563 Docker \u76f8\u5173\u547d\u4ee4 674 16 2 mins 1693553563 Git \u76f8\u5173\u547d\u4ee4 328 13 1 mins 1693405725 gdb \u76f8\u5173\u547d\u4ee4 754 3 3 mins 1693405725 CI \u5de5\u5177 Github Action\uff08**TODO**\uff09 0 0 mins 1693404987 \u7ad9\u70b9\u751f\u6210\u5de5\u5177 gitbook 49 12 0 mins 1694949283 reveal-md 761 21 3 mins 1694335736 mkdocs\uff08**TODO**\uff09 0 0 mins 1693404987 hexo\uff08**TODO**\uff09 0 0 mins 1693404987 function buttonHandler(i) { let content = document.getElementsByClassName(\"content-item-wrapper\")[i]; let button = document.getElementsByClassName(\"title-wrapper\")[i].getElementsByTagName(\"button\")[0]; if (content.style.display == \"none\") { content.style.display = \"block\"; button.children[0].children[0].style.transform = \"rotate(0deg)\"; } else { content.style.display = \"none\"; button.children[0].children[0].style.transform = \"rotate(-90deg)\"; } } function produce_time() { let time = document.getElementsByClassName(\"item-actions\"); for (let i = 0; i < time.length; i++) { let timestamp; if (time[i].childElementCount > 0) { timestamp = time[i].children[0].innerHTML; } else { timestamp = time[i].innerHTML; } let date = new Date(parseInt(timestamp) * 1000); let now = new Date(); let diff = now.getTime() - date.getTime(); let years = Math.floor(diff / (24 * 3600 * 1000 * 365)); let months = Math.floor(diff / (24 * 3600 * 1000 * 30)); let days = Math.floor(diff / (24 * 3600 * 1000)); let hours = Math.floor((diff % (24 * 3600 * 1000)) / (3600 * 1000)); let minutes = Math.floor((diff % (3600 * 1000)) / (60 * 1000)); let seconds = Math.floor((diff % (60 * 1000)) / 1000); if (years > 0) { time[i].innerHTML = years + \" years ago\"; } else if (months > 0) { time[i].innerHTML = months + \" months ago\"; } else if (days > 0) { time[i].innerHTML = days + \" days ago\"; } else if (hours > 0) { time[i].innerHTML = hours + \" hours ago\"; } else if (minutes > 0) { time[i].innerHTML = minutes + \" minutes ago\"; } else { time[i].innerHTML = seconds + \" seconds ago\"; } } } produce_time();","title":"Table of Contents"},{"location":"utils/action/","text":"","title":"Github Action"},{"location":"utils/docker/","text":"Docker \u547d\u4ee4\u76f8\u5173 \u00b6 \u7ea6 670 \u4e2a\u5b57 16 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f Abstract \u5e38\u7528 / \u5e38\u5fd8\u7684Docker\u547d\u4ee4\u3001Dockerfile\u7b49 \u5b89\u88c5 \u00b6 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun sudo curl -L \"https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)\" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose \u547d\u4ee4 \u00b6 \u5e2e\u52a9 \u00b6 docker version # \u663e\u793aDocker\u7248\u672c\u4fe1\u606f docker info # \u663e\u793aDocker\u7cfb\u7edf\u4fe1\u606f\uff0c\u5305\u62ec\u955c\u50cf\u6570\u3001\u5bb9\u5668\u6570\u3001\u6b63\u5728\u8fd0\u884c\u7684\u955c\u50cf\u6570\u3001\u6682\u505c\u7684\u955c\u50cf\u6570\u3001\u505c\u6b62\u7684\u955c\u50cf\u6570\u7b49 docker --help # \u663e\u793adocker\u6307\u4ee4\u7684\u4fe1\u606f docker \u6307\u4ee4 --help # \u663e\u793a\u5177\u4f53\u67d0\u4e00\u4e2adocker\u6307\u4ee4\u7684\u53ef\u9009\u9879 \u955c\u50cf\u76f8\u5173 \u00b6 docker images \u5217\u51fa\u672c\u5730\u955c\u50cf -a \u5217\u51fa\u672c\u5730\u6240\u6709\u955c\u50cf -q \u53ea\u5217\u51fa\u955c\u50cfID --digests \u663e\u793a\u666f\u8c61\u7684\u6458\u8981\u4fe1\u606f docker search \u641c\u7d22\u955c\u50cf docker pull \u62c9\u53d6\u955c\u50cf docker rmi \u5220\u9664\u955c\u50cf docker build -t . \u4ece Dockerfile \u6784\u5efa\u955c\u50cf\uff0c\u5e76\u6253\u4e0a tag docker export > .tar \u4fdd\u5b58\u955c\u50cf\u4e3a tar \u5305 docker import .tar \u4ece tar \u5305\u5bfc\u5165\u955c\u50cf docker tag : \u7ed9\u955c\u50cf\u6253 tag\uff08\u91cd\u547d\u540d\uff09 \u5bb9\u5668\u76f8\u5173 \u00b6 docker ps -a \u5217\u51fa\u6b63\u5728\u8fd0\u884c\u7684\u5bb9\u5668 docker run \u8fd0\u884c\u955c\u50cf -i \u4ea4\u4e92\u6a21\u5f0f -t \u5206\u914d\u865a\u62df\u7ec8\u7aef -d \u540e\u53f0\u8fd0\u884c -p : \u7aef\u53e3\u6620\u5c04 -v : \u76ee\u5f55\u6620\u5c04 -e = \u73af\u5883\u53d8\u91cf --name \u5bb9\u5668\u540d --rm \u8fd0\u884c\u5b8c\u540e\u81ea\u52a8\u5220\u9664\u5bb9\u5668 --network \u6307\u5b9a\u7f51\u7edc docker start \u542f\u52a8\u5bb9\u5668 docker restart \u91cd\u542f\u5bb9\u5668 docker stop \u505c\u6b62\u5bb9\u5668 docker rm \u5220\u9664\u5bb9\u5668 docker exec -it /bin/bash \u8fdb\u5165\u5bb9\u5668\uff08\u542f\u52a8\u65b0\u7684\u8fdb\u7a0b\uff09 docker attach \u8fdb\u5165\u5bb9\u5668\uff08\u4e0d\u542f\u52a8\u65b0\u7684\u8fdb\u7a0b\uff09 docker cp ... ... \u5728\u672c\u5730\u548c\u5bb9\u5668\u4e4b\u95f4\u590d\u5236\u6587\u4ef6\uff08\u7528\u6cd5\u7c7b\u4f3c scp\uff09 docker logs \u67e5\u770b\u5bb9\u5668\u65e5\u5fd7 -t \u663e\u793a\u65f6\u95f4\u6233 -f \u6253\u5370\u6700\u65b0\u7684\u65e5\u5fd7 -tail number \u663e\u793anumber\u6761 docker top \u67e5\u770b\u5bb9\u5668\u4e2d\u8fd0\u884c\u7684\u8fdb\u7a0b\u4fe1\u606f docker inspect \u67e5\u770b\u5bb9\u5668/\u955c\u50cf\u7684\u5143\u6570\u636e exit \u5bb9\u5668\u505c\u6b62\u5e76\u9000\u51fa Ctrl+P+Q \u5bb9\u5668\u4e0d\u505c\u6b62\u9000\u51fa \u7f51\u7edc\u76f8\u5173 \u00b6 docker network ls \u5217\u51fa\u7f51\u7edc docker network create \u521b\u5efa\u7f51\u7edc docker network connect \u5c06\u5bb9\u5668\u8fde\u63a5\u5230\u7f51\u7edc docker network inspect \u67e5\u770b\u7f51\u7edc\u4fe1\u606f docker network rm \u5220\u9664\u7f51\u7edc \u4ed3\u5e93\u76f8\u5173 \u00b6 docker login \u8fde\u63a5 registry docker login \u8fde\u63a5\u5230 Docker Hub docker login ghcr.io \u8fde\u63a5\u5230 GitHub \u7684\u4ed3\u5e93\uff0c\u7528\u6237\u540d\u662f GitHub \u7528\u6237\u540d\uff0c\u5bc6\u7801\u662f GitHub \u751f\u6210\u7684 token\uff08ghp_ \u5f00\u5934\uff09 docker logout \u65ad\u5f00 registry docker push \u63a8\u9001\u955c\u50cf\u5230 registry\uff08\u4f1a\u6839\u636e\u524d\u7f00\u81ea\u52a8\u9009\u62e9 registry\uff09 docker pull \u4ece registry \u62c9\u53d6\u955c\u50cf registry \u955c\u50cf \u00b6 \u53ef\u4ee5\u5229\u7528 registry \u955c\u50cf\u6765\u81ea\u5efa\u79c1\u6709 registry docker pull registry:2 \u62c9\u53d6 registry \u955c\u50cf \u9700\u8981\u6302\u8f7d\u7684\u76ee\u5f55 ./auth:/auth \uff1a\u7528\u6237\u540d\u548c\u5bc6\u7801\u3002\u5728\u672c\u5730 auth \u76ee\u5f55\u4e0b\u6267\u884c docker run --entrypoint htpasswd registry:2.7.0 -Bbn > htpasswd \u751f\u6210\u6587\u4ef6 ./certs:/certs \uff1aSSL \u8bc1\u4e66\uff0c\u53ef\u4ee5\u7528 acme.sh \u6765\u7b7e ./registry:/var/lib/registry \uff1aregistry \u6570\u636e \u542f\u52a8 registry\uff1a docker run -itd -p 5000 :5000 --restart = always --name registry \\ -v ./certs:/certs \\ -v ./auth:/auth \\ -v ./registry:/var/lib/registry \\ -e \"REGISTRY_HTTP_TLS_CERTIFICATE=/certs/fullchain.cer\" \\ -e \"REGISTRY_HTTP_TLS_KEY=/certs/.key\" \\ -e \"REGISTRY_AUTH=htpasswd\" -e \"REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm\" \\ -e \"REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd\" \\ registry:2 docker login \u767b\u5f55 registry docker tag / \u7ed9\u955c\u50cf\u6253\u4e0a registry \u7684 tag docker push / \u63a8\u9001\u955c\u50cf\u5230 registry Dockerfile \u00b6 \u5e38\u7528\u6362\u6e90 \u00b6 Ubuntu \u8f6f\u4ef6\u6e90 \u00b6 RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list # RUN sed -i s@/archive.ubuntu.com/@/<...>/@g /etc/apt/sources.list RUN apt-get clean RUN apt-get update Debian \u8f6f\u4ef6\u6e90 \u00b6 RUN sed -i s/deb.debian.org/mirrors.aliyun.com/g /etc/apt/sources.list && \\ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone RUN apt-get update Reference \u00b6 Docker\u547d\u4ee4\u5907\u5fd8","title":"Docker \u547d\u4ee4\u76f8\u5173"},{"location":"utils/docker/#docker","text":"\u7ea6 670 \u4e2a\u5b57 16 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f Abstract \u5e38\u7528 / \u5e38\u5fd8\u7684Docker\u547d\u4ee4\u3001Dockerfile\u7b49","title":"Docker \u547d\u4ee4\u76f8\u5173"},{"location":"utils/docker/#_1","text":"curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun sudo curl -L \"https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)\" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose","title":"\u5b89\u88c5"},{"location":"utils/docker/#_2","text":"","title":"\u547d\u4ee4"},{"location":"utils/docker/#_3","text":"docker version # \u663e\u793aDocker\u7248\u672c\u4fe1\u606f docker info # \u663e\u793aDocker\u7cfb\u7edf\u4fe1\u606f\uff0c\u5305\u62ec\u955c\u50cf\u6570\u3001\u5bb9\u5668\u6570\u3001\u6b63\u5728\u8fd0\u884c\u7684\u955c\u50cf\u6570\u3001\u6682\u505c\u7684\u955c\u50cf\u6570\u3001\u505c\u6b62\u7684\u955c\u50cf\u6570\u7b49 docker --help # \u663e\u793adocker\u6307\u4ee4\u7684\u4fe1\u606f docker \u6307\u4ee4 --help # \u663e\u793a\u5177\u4f53\u67d0\u4e00\u4e2adocker\u6307\u4ee4\u7684\u53ef\u9009\u9879","title":"\u5e2e\u52a9"},{"location":"utils/docker/#_4","text":"docker images \u5217\u51fa\u672c\u5730\u955c\u50cf -a \u5217\u51fa\u672c\u5730\u6240\u6709\u955c\u50cf -q \u53ea\u5217\u51fa\u955c\u50cfID --digests \u663e\u793a\u666f\u8c61\u7684\u6458\u8981\u4fe1\u606f docker search \u641c\u7d22\u955c\u50cf docker pull \u62c9\u53d6\u955c\u50cf docker rmi \u5220\u9664\u955c\u50cf docker build -t . \u4ece Dockerfile \u6784\u5efa\u955c\u50cf\uff0c\u5e76\u6253\u4e0a tag docker export > .tar \u4fdd\u5b58\u955c\u50cf\u4e3a tar \u5305 docker import .tar \u4ece tar \u5305\u5bfc\u5165\u955c\u50cf docker tag : \u7ed9\u955c\u50cf\u6253 tag\uff08\u91cd\u547d\u540d\uff09","title":"\u955c\u50cf\u76f8\u5173"},{"location":"utils/docker/#_5","text":"docker ps -a \u5217\u51fa\u6b63\u5728\u8fd0\u884c\u7684\u5bb9\u5668 docker run \u8fd0\u884c\u955c\u50cf -i \u4ea4\u4e92\u6a21\u5f0f -t \u5206\u914d\u865a\u62df\u7ec8\u7aef -d \u540e\u53f0\u8fd0\u884c -p : \u7aef\u53e3\u6620\u5c04 -v : \u76ee\u5f55\u6620\u5c04 -e = \u73af\u5883\u53d8\u91cf --name \u5bb9\u5668\u540d --rm \u8fd0\u884c\u5b8c\u540e\u81ea\u52a8\u5220\u9664\u5bb9\u5668 --network \u6307\u5b9a\u7f51\u7edc docker start \u542f\u52a8\u5bb9\u5668 docker restart \u91cd\u542f\u5bb9\u5668 docker stop \u505c\u6b62\u5bb9\u5668 docker rm \u5220\u9664\u5bb9\u5668 docker exec -it /bin/bash \u8fdb\u5165\u5bb9\u5668\uff08\u542f\u52a8\u65b0\u7684\u8fdb\u7a0b\uff09 docker attach \u8fdb\u5165\u5bb9\u5668\uff08\u4e0d\u542f\u52a8\u65b0\u7684\u8fdb\u7a0b\uff09 docker cp ... ... \u5728\u672c\u5730\u548c\u5bb9\u5668\u4e4b\u95f4\u590d\u5236\u6587\u4ef6\uff08\u7528\u6cd5\u7c7b\u4f3c scp\uff09 docker logs \u67e5\u770b\u5bb9\u5668\u65e5\u5fd7 -t \u663e\u793a\u65f6\u95f4\u6233 -f \u6253\u5370\u6700\u65b0\u7684\u65e5\u5fd7 -tail number \u663e\u793anumber\u6761 docker top \u67e5\u770b\u5bb9\u5668\u4e2d\u8fd0\u884c\u7684\u8fdb\u7a0b\u4fe1\u606f docker inspect \u67e5\u770b\u5bb9\u5668/\u955c\u50cf\u7684\u5143\u6570\u636e exit \u5bb9\u5668\u505c\u6b62\u5e76\u9000\u51fa Ctrl+P+Q \u5bb9\u5668\u4e0d\u505c\u6b62\u9000\u51fa","title":"\u5bb9\u5668\u76f8\u5173"},{"location":"utils/docker/#_6","text":"docker network ls \u5217\u51fa\u7f51\u7edc docker network create \u521b\u5efa\u7f51\u7edc docker network connect \u5c06\u5bb9\u5668\u8fde\u63a5\u5230\u7f51\u7edc docker network inspect \u67e5\u770b\u7f51\u7edc\u4fe1\u606f docker network rm \u5220\u9664\u7f51\u7edc","title":"\u7f51\u7edc\u76f8\u5173"},{"location":"utils/docker/#_7","text":"docker login \u8fde\u63a5 registry docker login \u8fde\u63a5\u5230 Docker Hub docker login ghcr.io \u8fde\u63a5\u5230 GitHub \u7684\u4ed3\u5e93\uff0c\u7528\u6237\u540d\u662f GitHub \u7528\u6237\u540d\uff0c\u5bc6\u7801\u662f GitHub \u751f\u6210\u7684 token\uff08ghp_ \u5f00\u5934\uff09 docker logout \u65ad\u5f00 registry docker push \u63a8\u9001\u955c\u50cf\u5230 registry\uff08\u4f1a\u6839\u636e\u524d\u7f00\u81ea\u52a8\u9009\u62e9 registry\uff09 docker pull \u4ece registry \u62c9\u53d6\u955c\u50cf","title":"\u4ed3\u5e93\u76f8\u5173"},{"location":"utils/docker/#registry","text":"\u53ef\u4ee5\u5229\u7528 registry \u955c\u50cf\u6765\u81ea\u5efa\u79c1\u6709 registry docker pull registry:2 \u62c9\u53d6 registry \u955c\u50cf \u9700\u8981\u6302\u8f7d\u7684\u76ee\u5f55 ./auth:/auth \uff1a\u7528\u6237\u540d\u548c\u5bc6\u7801\u3002\u5728\u672c\u5730 auth \u76ee\u5f55\u4e0b\u6267\u884c docker run --entrypoint htpasswd registry:2.7.0 -Bbn > htpasswd \u751f\u6210\u6587\u4ef6 ./certs:/certs \uff1aSSL \u8bc1\u4e66\uff0c\u53ef\u4ee5\u7528 acme.sh \u6765\u7b7e ./registry:/var/lib/registry \uff1aregistry \u6570\u636e \u542f\u52a8 registry\uff1a docker run -itd -p 5000 :5000 --restart = always --name registry \\ -v ./certs:/certs \\ -v ./auth:/auth \\ -v ./registry:/var/lib/registry \\ -e \"REGISTRY_HTTP_TLS_CERTIFICATE=/certs/fullchain.cer\" \\ -e \"REGISTRY_HTTP_TLS_KEY=/certs/.key\" \\ -e \"REGISTRY_AUTH=htpasswd\" -e \"REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm\" \\ -e \"REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd\" \\ registry:2 docker login \u767b\u5f55 registry docker tag / \u7ed9\u955c\u50cf\u6253\u4e0a registry \u7684 tag docker push / \u63a8\u9001\u955c\u50cf\u5230 registry","title":"registry \u955c\u50cf"},{"location":"utils/docker/#dockerfile","text":"","title":"Dockerfile"},{"location":"utils/docker/#_8","text":"","title":"\u5e38\u7528\u6362\u6e90"},{"location":"utils/docker/#ubuntu","text":"RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list # RUN sed -i s@/archive.ubuntu.com/@/<...>/@g /etc/apt/sources.list RUN apt-get clean RUN apt-get update","title":"Ubuntu \u8f6f\u4ef6\u6e90"},{"location":"utils/docker/#debian","text":"RUN sed -i s/deb.debian.org/mirrors.aliyun.com/g /etc/apt/sources.list && \\ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone RUN apt-get update","title":"Debian \u8f6f\u4ef6\u6e90"},{"location":"utils/docker/#reference","text":"Docker\u547d\u4ee4\u5907\u5fd8","title":"Reference"},{"location":"utils/gdb/","text":"gdb \u547d\u4ee4\u76f8\u5173 \u00b6 \u7ea6 750 \u4e2a\u5b57 3 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 3 \u5206\u949f Abstract gdb\u76f8\u5173\u7684\u4e00\u4e9b\u547d\u4ee4\uff0c\u63d2\u4ef6\u7b49 \u524d\u8a00 \u00b6 \u4ec0\u4e48\u662fgdb \u00b6 GNU\u8c03\u8bd5\u5668\uff08\u82f1\u8bed\uff1aGNU Debugger\uff0c\u7f29\u5199\uff1aGDB\uff09\uff0c\u662fGNU\u8f6f\u4ef6\u7cfb\u7edf\u4e2d\u7684\u6807\u51c6\u8c03\u8bd5\u5668\uff0c\u6b64\u5916GDB\u4e5f\u662f\u4e2a\u5177\u6709\u79fb\u643a\u6027\u7684\u8c03\u8bd5\u5668\uff0c\u7ecf\u8fc7\u79fb\u643a\u9700\u6c42\u7684\u8c03\u4fee\u4e0e\u91cd\u65b0\u7f16\u8bd1\uff0c\u5982\u4eca\u8bb8\u591a\u7684\u7c7bUNIX\u64cd\u4f5c\u7cfb\u7edf\u4e0a\u90fd\u53ef\u4ee5\u4f7f\u7528GDB\uff0c\u800c\u73b0\u6709GDB\u6240\u80fd\u652f\u6301\u8c03\u8bd5\u7684\u7f16\u7a0b\u8bed\u8a00\u6709C\u3001C++\u3001Pascal\u4ee5\u53caFORTRAN\u3002 \u2014\u2014\u2014\u2014 \u7ef4\u57fa\u767e\u79d1 \u51c6\u5907\u5de5\u4f5c \u00b6 \u901a\u5e38\uff0c\u5728\u4e3a\u8c03\u8bd5\u800c\u7f16\u8bd1\u65f6\uff0c\u6211\u4eec\u4f1a\u5173\u6389\u7f16\u8bd1\u5668\u7684\u4f18\u5316\u9009\u9879 \uff08-O\uff09 \uff0c \u5e76\u6253\u5f00\u8c03\u8bd5\u9009\u9879 \uff08-g\uff09 \u3002\u53e6\u5916\uff0c -Wall \u5728\u5c3d\u91cf\u4e0d\u5f71\u54cd\u7a0b\u5e8f\u884c\u4e3a\u7684\u60c5\u51b5\u4e0b\u9009\u9879\u6253\u5f00\u6240\u6709warning\uff0c\u4e5f\u53ef\u4ee5\u53d1\u73b0\u8bb8\u591a\u95ee\u9898\uff0c\u907f\u514d\u4e00\u4e9b\u4e0d\u5fc5\u8981\u7684 BUG\u3002 \u4f8b\u5982\uff1a gcc -g -Wall program.c -o program -g \u9009\u9879\u7684\u4f5c\u7528\u662f\u5728\u53ef\u6267\u884c\u6587\u4ef6\u4e2d\u52a0\u5165\u6e90\u4ee3\u7801\u7684\u4fe1\u606f\uff0c\u6bd4\u5982\u53ef\u6267\u884c\u6587\u4ef6\u4e2d\u7b2c\u51e0\u6761\u673a \u5668\u6307\u4ee4\u5bf9\u5e94\u6e90\u4ee3\u7801\u7684\u7b2c\u51e0\u884c\uff0c\u4f46\u5e76\u4e0d\u662f\u628a\u6574\u4e2a\u6e90\u6587\u4ef6\u5d4c\u5165\u5230\u53ef\u6267\u884c\u6587\u4ef6\u4e2d\uff0c\u6240\u4ee5\u5728\u8c03 \u8bd5\u65f6\u5fc5\u987b\u4fdd\u8bc1 gdb \u80fd\u627e\u5230\u6e90\u6587\u4ef6\u3002 \u8c03\u8bd5\u4e0b\u5217\u7a0b\u5e8f\u524d\u8981\u505a\u51c6\u5907\u5de5\u4f5c\uff0c\u5728shell\u4e2d\u8f93\u5165\uff1a $ gcc -g -Wall test.c -o test gdb\u547d\u4ee4 \u00b6 \u8fc7\u7a0b\u64cd\u4f5c \u00b6 gdb (\u53ef\u6267\u884c\u7a0b\u5e8f) \u542f\u52a8gdb\u8c03\u8bd5 quit / q \u9000\u51fagdb\u8c03\u8bd5 set args 10 20 \u7ed9\u7a0b\u5e8f\u8bbe\u7f6e\u53c2\u6570 show args \u83b7\u53d6\u8bbe\u7f6e\u7684\u53c2\u6570 help \u7528\u6765\u67e5\u770b\u8c03\u8bd5\u5e2e\u52a9\u6216\u5177\u4f53\u6307\u4ee4\u7684\u76f8\u5173\u4fe1\u606f list \u67e5\u770b\u5f53\u524d\u6587\u4ef6\u4ee3\u7801\uff0c\u53ef\u4ee5\u6307\u5b9a\u6587\u4ef6\u548c\u51fd\u6570 (l) set list / listsize \u8bbe\u7f6e\u663e\u793a\u7684\u884c\u6570 print \u53d8\u91cf\u540d \u6253\u5370\u53d8\u91cf\u503c(p) ptype \u53d8\u91cf\u540d \u6253\u5370\u53d8\u91cf\u7c7b\u578b until \u8df3\u51fa\u5faa\u73af \u65ad\u70b9 \u00b6 gdb break (file:)line/function \u65ad\u5728(\u6587\u4ef6:)\u884c\u53f7\u6216\u51fd\u6570(b) gdb break *0x.... \u65ad\u5728\u5730\u5740 gdb info breakpoints \u67e5\u770b\u65ad\u70b9\u53ca\u72b6\u6001 (i b) gdb delete / clear \u6e05\u9664\u6240\u6709\u65ad\u70b9 (d/cl) gdb delete \u5220\u9664\u67d0\u4e00\u65ad\u70b9\uff08\u4ece i b \u5f97\u6765\u65ad\u70b9\u53f7\uff09 gdb clear ... \u6e05\u9664\u67d0\u4e00\u7b26\u53f7\u3001\u5730\u5740\u5904\u7684\u65ad\u70b9 gdb disable \u7981\u7528\u67d0\u4e00\u65ad\u70b9 gdb enable \u542f\u7528\u67d0\u4e00\u65ad\u70b9 gdb watch ... \u5728\u67d0\u5904\u589e\u52a0\u89c2\u5bdf\u70b9\uff0cdelete\u3001enable\u3001disable \u4e0e\u65ad\u70b9\u5171\u7528 gdb break/watch if \u5982\u679c\u6761\u4ef6\u6ee1\u8db3\u5219\u65ad gdb condition \u66f4\u6539\u6761\u4ef6 \u8fd0\u884c \u00b6 gdb start \u7a0b\u5e8f\u505c\u5728\u7b2c\u4e00\u884c gdb run \u76f4\u63a5\u8fd0\u884c\uff0c\u9047\u5230\u7aef\u70b9\u624d\u505c\u6b62 (r) gdb continue \u7ee7\u7eed\u8fd0\u884c (c) gdb step \u8fd0\u884c\u5230\u4e0b\u4e00\u6761\u6e90\u7801 (s) gdb next \u5355\u6b65\u8fd0\u884c\uff0c\u8df3\u8fc7\u51fd\u6570 (n) gdb finish \u8fd0\u884c\u5b8c\u5f53\u524d\u51fd\u6570 (fin) gdb attach \u8fde\u63a5\u7a0b\u5e8f gdb detach \u4ece\u5f53\u524d\u7a0b\u5e8f\u65ad\u8fde gdb target remote localhost:1234 \u8fde\u63a5 qemu \u8c03\u7528\u6808 \u00b6 gdb backtrace \u67e5\u770b\u8c03\u7528\u6808 (bt) gdb frame \u67e5\u770b\u5f53\u524d\u5e27\u6808 gdb up/down \u79fb\u52a8\u5f53\u524d\u5e27\u6808\uff08\u5411 main / \u8fdc\u79bb main\uff09 gdb info locals \u67e5\u770b\u5f53\u524d\u5e27\u6808\u53d8\u91cf gdb info args \u67e5\u770b\u51fd\u6570\u53c2\u6570 gdb\u63d2\u4ef6 \u00b6 gdb-peda \u00b6 \u6bcf\u6761\u6307\u4ee4\u5e26\u5bc4\u5b58\u5668\u3001\u6c47\u7f16\u3001\u5185\u5b58\u6570\u636e\u56de\u663e $ git clone https://github.com/longld/peda.git ~/peda $ echo \"source ~/peda/peda.py\" >> ~/.gdbinit \u5176\u5b9e\u5c31\u662f\u4e0b\u8f7d\u5b8c\u6210\u540e, \u5c06 source ~/peda/peda.py \u5199\u5165 ~/.gdbinit Reference \u00b6 jujimeizuo\u7684Linux GDB\u8c03\u8bd5 gdb\u76f8\u5173\u5907\u5fd8 \u7ef4\u57fa\u767e\u79d1-gdb GDB\u5b9e\u7528\u63d2\u4ef6(peda, gef, gdbinit)\u5168\u89e3","title":"gdb \u547d\u4ee4\u76f8\u5173"},{"location":"utils/gdb/#gdb","text":"\u7ea6 750 \u4e2a\u5b57 3 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 3 \u5206\u949f Abstract gdb\u76f8\u5173\u7684\u4e00\u4e9b\u547d\u4ee4\uff0c\u63d2\u4ef6\u7b49","title":"gdb \u547d\u4ee4\u76f8\u5173"},{"location":"utils/gdb/#_1","text":"","title":"\u524d\u8a00"},{"location":"utils/gdb/#gdb_1","text":"GNU\u8c03\u8bd5\u5668\uff08\u82f1\u8bed\uff1aGNU Debugger\uff0c\u7f29\u5199\uff1aGDB\uff09\uff0c\u662fGNU\u8f6f\u4ef6\u7cfb\u7edf\u4e2d\u7684\u6807\u51c6\u8c03\u8bd5\u5668\uff0c\u6b64\u5916GDB\u4e5f\u662f\u4e2a\u5177\u6709\u79fb\u643a\u6027\u7684\u8c03\u8bd5\u5668\uff0c\u7ecf\u8fc7\u79fb\u643a\u9700\u6c42\u7684\u8c03\u4fee\u4e0e\u91cd\u65b0\u7f16\u8bd1\uff0c\u5982\u4eca\u8bb8\u591a\u7684\u7c7bUNIX\u64cd\u4f5c\u7cfb\u7edf\u4e0a\u90fd\u53ef\u4ee5\u4f7f\u7528GDB\uff0c\u800c\u73b0\u6709GDB\u6240\u80fd\u652f\u6301\u8c03\u8bd5\u7684\u7f16\u7a0b\u8bed\u8a00\u6709C\u3001C++\u3001Pascal\u4ee5\u53caFORTRAN\u3002 \u2014\u2014\u2014\u2014 \u7ef4\u57fa\u767e\u79d1","title":"\u4ec0\u4e48\u662fgdb"},{"location":"utils/gdb/#_2","text":"\u901a\u5e38\uff0c\u5728\u4e3a\u8c03\u8bd5\u800c\u7f16\u8bd1\u65f6\uff0c\u6211\u4eec\u4f1a\u5173\u6389\u7f16\u8bd1\u5668\u7684\u4f18\u5316\u9009\u9879 \uff08-O\uff09 \uff0c \u5e76\u6253\u5f00\u8c03\u8bd5\u9009\u9879 \uff08-g\uff09 \u3002\u53e6\u5916\uff0c -Wall \u5728\u5c3d\u91cf\u4e0d\u5f71\u54cd\u7a0b\u5e8f\u884c\u4e3a\u7684\u60c5\u51b5\u4e0b\u9009\u9879\u6253\u5f00\u6240\u6709warning\uff0c\u4e5f\u53ef\u4ee5\u53d1\u73b0\u8bb8\u591a\u95ee\u9898\uff0c\u907f\u514d\u4e00\u4e9b\u4e0d\u5fc5\u8981\u7684 BUG\u3002 \u4f8b\u5982\uff1a gcc -g -Wall program.c -o program -g \u9009\u9879\u7684\u4f5c\u7528\u662f\u5728\u53ef\u6267\u884c\u6587\u4ef6\u4e2d\u52a0\u5165\u6e90\u4ee3\u7801\u7684\u4fe1\u606f\uff0c\u6bd4\u5982\u53ef\u6267\u884c\u6587\u4ef6\u4e2d\u7b2c\u51e0\u6761\u673a \u5668\u6307\u4ee4\u5bf9\u5e94\u6e90\u4ee3\u7801\u7684\u7b2c\u51e0\u884c\uff0c\u4f46\u5e76\u4e0d\u662f\u628a\u6574\u4e2a\u6e90\u6587\u4ef6\u5d4c\u5165\u5230\u53ef\u6267\u884c\u6587\u4ef6\u4e2d\uff0c\u6240\u4ee5\u5728\u8c03 \u8bd5\u65f6\u5fc5\u987b\u4fdd\u8bc1 gdb \u80fd\u627e\u5230\u6e90\u6587\u4ef6\u3002 \u8c03\u8bd5\u4e0b\u5217\u7a0b\u5e8f\u524d\u8981\u505a\u51c6\u5907\u5de5\u4f5c\uff0c\u5728shell\u4e2d\u8f93\u5165\uff1a $ gcc -g -Wall test.c -o test","title":"\u51c6\u5907\u5de5\u4f5c"},{"location":"utils/gdb/#gdb_2","text":"","title":"gdb\u547d\u4ee4"},{"location":"utils/gdb/#_3","text":"gdb (\u53ef\u6267\u884c\u7a0b\u5e8f) \u542f\u52a8gdb\u8c03\u8bd5 quit / q \u9000\u51fagdb\u8c03\u8bd5 set args 10 20 \u7ed9\u7a0b\u5e8f\u8bbe\u7f6e\u53c2\u6570 show args \u83b7\u53d6\u8bbe\u7f6e\u7684\u53c2\u6570 help \u7528\u6765\u67e5\u770b\u8c03\u8bd5\u5e2e\u52a9\u6216\u5177\u4f53\u6307\u4ee4\u7684\u76f8\u5173\u4fe1\u606f list \u67e5\u770b\u5f53\u524d\u6587\u4ef6\u4ee3\u7801\uff0c\u53ef\u4ee5\u6307\u5b9a\u6587\u4ef6\u548c\u51fd\u6570 (l) set list / listsize \u8bbe\u7f6e\u663e\u793a\u7684\u884c\u6570 print \u53d8\u91cf\u540d \u6253\u5370\u53d8\u91cf\u503c(p) ptype \u53d8\u91cf\u540d \u6253\u5370\u53d8\u91cf\u7c7b\u578b until \u8df3\u51fa\u5faa\u73af","title":"\u8fc7\u7a0b\u64cd\u4f5c"},{"location":"utils/gdb/#_4","text":"gdb break (file:)line/function \u65ad\u5728(\u6587\u4ef6:)\u884c\u53f7\u6216\u51fd\u6570(b) gdb break *0x.... \u65ad\u5728\u5730\u5740 gdb info breakpoints \u67e5\u770b\u65ad\u70b9\u53ca\u72b6\u6001 (i b) gdb delete / clear \u6e05\u9664\u6240\u6709\u65ad\u70b9 (d/cl) gdb delete \u5220\u9664\u67d0\u4e00\u65ad\u70b9\uff08\u4ece i b \u5f97\u6765\u65ad\u70b9\u53f7\uff09 gdb clear ... \u6e05\u9664\u67d0\u4e00\u7b26\u53f7\u3001\u5730\u5740\u5904\u7684\u65ad\u70b9 gdb disable \u7981\u7528\u67d0\u4e00\u65ad\u70b9 gdb enable \u542f\u7528\u67d0\u4e00\u65ad\u70b9 gdb watch ... \u5728\u67d0\u5904\u589e\u52a0\u89c2\u5bdf\u70b9\uff0cdelete\u3001enable\u3001disable \u4e0e\u65ad\u70b9\u5171\u7528 gdb break/watch if \u5982\u679c\u6761\u4ef6\u6ee1\u8db3\u5219\u65ad gdb condition \u66f4\u6539\u6761\u4ef6","title":"\u65ad\u70b9"},{"location":"utils/gdb/#_5","text":"gdb start \u7a0b\u5e8f\u505c\u5728\u7b2c\u4e00\u884c gdb run \u76f4\u63a5\u8fd0\u884c\uff0c\u9047\u5230\u7aef\u70b9\u624d\u505c\u6b62 (r) gdb continue \u7ee7\u7eed\u8fd0\u884c (c) gdb step \u8fd0\u884c\u5230\u4e0b\u4e00\u6761\u6e90\u7801 (s) gdb next \u5355\u6b65\u8fd0\u884c\uff0c\u8df3\u8fc7\u51fd\u6570 (n) gdb finish \u8fd0\u884c\u5b8c\u5f53\u524d\u51fd\u6570 (fin) gdb attach \u8fde\u63a5\u7a0b\u5e8f gdb detach \u4ece\u5f53\u524d\u7a0b\u5e8f\u65ad\u8fde gdb target remote localhost:1234 \u8fde\u63a5 qemu","title":"\u8fd0\u884c"},{"location":"utils/gdb/#_6","text":"gdb backtrace \u67e5\u770b\u8c03\u7528\u6808 (bt) gdb frame \u67e5\u770b\u5f53\u524d\u5e27\u6808 gdb up/down \u79fb\u52a8\u5f53\u524d\u5e27\u6808\uff08\u5411 main / \u8fdc\u79bb main\uff09 gdb info locals \u67e5\u770b\u5f53\u524d\u5e27\u6808\u53d8\u91cf gdb info args \u67e5\u770b\u51fd\u6570\u53c2\u6570","title":"\u8c03\u7528\u6808"},{"location":"utils/gdb/#gdb_3","text":"","title":"gdb\u63d2\u4ef6"},{"location":"utils/gdb/#gdb-peda","text":"\u6bcf\u6761\u6307\u4ee4\u5e26\u5bc4\u5b58\u5668\u3001\u6c47\u7f16\u3001\u5185\u5b58\u6570\u636e\u56de\u663e $ git clone https://github.com/longld/peda.git ~/peda $ echo \"source ~/peda/peda.py\" >> ~/.gdbinit \u5176\u5b9e\u5c31\u662f\u4e0b\u8f7d\u5b8c\u6210\u540e, \u5c06 source ~/peda/peda.py \u5199\u5165 ~/.gdbinit","title":"gdb-peda"},{"location":"utils/gdb/#reference","text":"jujimeizuo\u7684Linux GDB\u8c03\u8bd5 gdb\u76f8\u5173\u5907\u5fd8 \u7ef4\u57fa\u767e\u79d1-gdb GDB\u5b9e\u7528\u63d2\u4ef6(peda, gef, gdbinit)\u5168\u89e3","title":"Reference"},{"location":"utils/git/","text":"Git \u547d\u4ee4\u76f8\u5173 \u00b6 \u7ea6 324 \u4e2a\u5b57 13 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f Abstract \u4e00\u4e9b\u5e38\u7528 / \u5e38\u5fd8\u7684 git \u547d\u4ee4 \u5206\u652f \u00b6 git branch \u521b\u5efa\u5206\u652f git checkout \u5207\u6362\u5206\u652f git checkout -b \u521b\u5efa\u5206\u652f\uff0c\u5e76\u5207\u6362\u8fc7\u53bb git diff master \u663e\u793a\u5206\u652f\u548c\u4e3b\u5206\u652f\u7684\u5dee\u522b git clone -b \u514b\u9686\u5355\u4e2a\u5206\u652f git branch -d \u5220\u9664\u5206\u652f git branch -a \u67e5\u770b\u6240\u6709\u5206\u652f git merge \u5408\u5e76\u5206\u652f \u8fdc\u7a0b\u4ed3\u5e93 \u00b6 git fetch \u83b7\u53d6\u8fdc\u7a0b\u4ed3\u5e93\u7684\u5386\u53f2\u8bb0\u5f55 git pull \u5c06\u672c\u5730\u4ed3\u5e93\u66f4\u65b0, pull = fetch + merge git push origin \u5c06\u5206\u652f\u63a8\u9001\u5230\u8fdc\u7a0b\u4ed3\u5e93 \u6539\u5199\u63d0\u4ea4 \u00b6 git commit --amend \u4fee\u6539\u6700\u8fd1\u7684\u63d0\u4ea4 git revert HEAD \u53d6\u6d88\u8fc7\u53bb\u7684\u63d0\u4ea4 git reset --soft HEAD^ \u64a4\u9500 commit\uff08\u4e0d\u66f4\u6539\u6587\u4ef6\uff09 git reset --hard HEAD^ \u64a4\u9500 commit\uff08\u6587\u4ef6\u56de\u9000\u5230\u4e0a\u4e00\u7248\u672c\uff09 git rm --cached \u5df2 add \u672a commit \u7684\u6587\u4ef6\u9000\u56de\u672a add \u72b6\u6001 git checkout . \u53d6\u6d88\u672c\u6b21\u672a\u88abcommit\u7684\u4fee\u6539 git rebase \u53d8\u57fa git rebase -i \u5408\u5e76/\u4fee\u6539\u63d0\u4ea4\uff0c \u6700\u597d\u7528fetch+rebase\u7684\u65b9\u5f0f\u6765\u5408\u5e76 \u6807\u7b7e \u00b6 git tag \u663e\u793a\u6240\u6709\u6807\u7b7e\u5217\u8868 git tag \u6dfb\u52a0\u8f7b\u6807\u7b7e git tag -a \u6dfb\u52a0\u6ce8\u89e3\u6807\u7b7e git tag -d \u5220\u9664\u6807\u7b7e awesome_git_log \u00b6 \u4e3a\u4e86\u65b9\u4fbf\u67e5\u770b commit \u76f8\u5173\u4fe1\u606f\uff0c\u7528 alias \u6765\u7b80\u5316\u64cd\u4f5c\uff0c\u5c06\u4e0b\u9762\u4ee3\u7801\u7c98\u8d34\u5230 bashrc \u4e2d\uff0c\u7136\u540e\u5728\u7ec8\u7aef\u4e2d\u76f4\u63a5 awe+tab \u5373\u53ef\u3002 # git function git_branch { branch = \"`git branch 2>/dev/null | grep \" ^ \\* \" | sed -e \" s/^ \\*\\ // \"`\" if [ \" ${ branch } \" ! = \"\" ] ; then if [ \" ${ branch } \" = \"(no branch)\" ] ; then branch = \"(`git rev-parse --short HEAD`...)\" fi echo \" ( $branch )\" fi } alias __git_awesome_log = \"git log --oneline --decorate --all --graph\" alias awesome_git_log = \"git log --oneline --decorate --all --graph\" Reference \u00b6 \u7334\u5b50\u90fd\u80fd\u61c2\u7684GIT\u5165\u95e8 Git\u547d\u4ee4\u5907\u5fd8","title":"Git \u547d\u4ee4\u76f8\u5173"},{"location":"utils/git/#git","text":"\u7ea6 324 \u4e2a\u5b57 13 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f Abstract \u4e00\u4e9b\u5e38\u7528 / \u5e38\u5fd8\u7684 git \u547d\u4ee4","title":"Git \u547d\u4ee4\u76f8\u5173"},{"location":"utils/git/#_1","text":"git branch \u521b\u5efa\u5206\u652f git checkout \u5207\u6362\u5206\u652f git checkout -b \u521b\u5efa\u5206\u652f\uff0c\u5e76\u5207\u6362\u8fc7\u53bb git diff master \u663e\u793a\u5206\u652f\u548c\u4e3b\u5206\u652f\u7684\u5dee\u522b git clone -b \u514b\u9686\u5355\u4e2a\u5206\u652f git branch -d \u5220\u9664\u5206\u652f git branch -a \u67e5\u770b\u6240\u6709\u5206\u652f git merge \u5408\u5e76\u5206\u652f","title":"\u5206\u652f"},{"location":"utils/git/#_2","text":"git fetch \u83b7\u53d6\u8fdc\u7a0b\u4ed3\u5e93\u7684\u5386\u53f2\u8bb0\u5f55 git pull \u5c06\u672c\u5730\u4ed3\u5e93\u66f4\u65b0, pull = fetch + merge git push origin \u5c06\u5206\u652f\u63a8\u9001\u5230\u8fdc\u7a0b\u4ed3\u5e93","title":"\u8fdc\u7a0b\u4ed3\u5e93"},{"location":"utils/git/#_3","text":"git commit --amend \u4fee\u6539\u6700\u8fd1\u7684\u63d0\u4ea4 git revert HEAD \u53d6\u6d88\u8fc7\u53bb\u7684\u63d0\u4ea4 git reset --soft HEAD^ \u64a4\u9500 commit\uff08\u4e0d\u66f4\u6539\u6587\u4ef6\uff09 git reset --hard HEAD^ \u64a4\u9500 commit\uff08\u6587\u4ef6\u56de\u9000\u5230\u4e0a\u4e00\u7248\u672c\uff09 git rm --cached \u5df2 add \u672a commit \u7684\u6587\u4ef6\u9000\u56de\u672a add \u72b6\u6001 git checkout . \u53d6\u6d88\u672c\u6b21\u672a\u88abcommit\u7684\u4fee\u6539 git rebase \u53d8\u57fa git rebase -i \u5408\u5e76/\u4fee\u6539\u63d0\u4ea4\uff0c \u6700\u597d\u7528fetch+rebase\u7684\u65b9\u5f0f\u6765\u5408\u5e76","title":"\u6539\u5199\u63d0\u4ea4"},{"location":"utils/git/#_4","text":"git tag \u663e\u793a\u6240\u6709\u6807\u7b7e\u5217\u8868 git tag \u6dfb\u52a0\u8f7b\u6807\u7b7e git tag -a \u6dfb\u52a0\u6ce8\u89e3\u6807\u7b7e git tag -d \u5220\u9664\u6807\u7b7e","title":"\u6807\u7b7e"},{"location":"utils/git/#awesome_git_log","text":"\u4e3a\u4e86\u65b9\u4fbf\u67e5\u770b commit \u76f8\u5173\u4fe1\u606f\uff0c\u7528 alias \u6765\u7b80\u5316\u64cd\u4f5c\uff0c\u5c06\u4e0b\u9762\u4ee3\u7801\u7c98\u8d34\u5230 bashrc \u4e2d\uff0c\u7136\u540e\u5728\u7ec8\u7aef\u4e2d\u76f4\u63a5 awe+tab \u5373\u53ef\u3002 # git function git_branch { branch = \"`git branch 2>/dev/null | grep \" ^ \\* \" | sed -e \" s/^ \\*\\ // \"`\" if [ \" ${ branch } \" ! = \"\" ] ; then if [ \" ${ branch } \" = \"(no branch)\" ] ; then branch = \"(`git rev-parse --short HEAD`...)\" fi echo \" ( $branch )\" fi } alias __git_awesome_log = \"git log --oneline --decorate --all --graph\" alias awesome_git_log = \"git log --oneline --decorate --all --graph\"","title":"awesome_git_log"},{"location":"utils/git/#reference","text":"\u7334\u5b50\u90fd\u80fd\u61c2\u7684GIT\u5165\u95e8 Git\u547d\u4ee4\u5907\u5fd8","title":"Reference"},{"location":"utils/gitbook/","text":"gitbook \u00b6 \u524d\u7f6e\u8981\u6c42 \u00b6 nodejs \u00b6 \u9ad8\u7248\u672c\u53ef\u80fd\u4e0d\u517c\u5bb9\uff0c\u9700\u8981\u7248\u672c\u5728v10\u5de6\u53f3\u3002 https://nodejs.org/download/release/v10.21.0/ \u66f4\u6362\u955c\u50cf \u00b6 npm config get registry npm config set registry https://registry.npm.taobao.org \u5b89\u88c5 \u00b6 npm uninstall -g gitbook-cli \u5b89\u88c5\u5b8c\u4e4b\u540e\u7528 gitbook -V \u67e5\u770b\u7248\u672c\uff0c\u81ea\u52a8install gitbook\u3002 \u4f7f\u7528 \u00b6 gitbook -V \u67e5\u770b\u7248\u672c\u53f7 gitbook init \u521d\u59cb\u5316 gitbook serve \u9884\u89c8 gitbook build \u751f\u6210 gitbook build --gitbook = 2 .6.7 \u751f\u6210\u65f6\u6307\u5b9agitbook\u7684\u7248\u672c, \u672c\u5730\u6ca1\u6709\u4f1a\u5148\u4e0b\u8f7d gitbook uninstall 2 .6.7 \u5378\u8f7d\u6307\u5b9a\u7248\u672c\u53f7\u7684gitbook gitbook fetch [ version ] \u83b7\u53d6 [ \u7248\u672c ] \u4e0b\u8f7d\u5e76\u5b89\u88c5<\u7248\u672c> gitbook --help \u663e\u793a\u5e2e\u52a9\u6587\u6863 gitbook ls-remote \u5217\u51faNPM\u4e0a\u7684\u53ef\u7528\u7248\u672c\uff1a","title":"gitbook"},{"location":"utils/gitbook/#gitbook","text":"","title":"gitbook"},{"location":"utils/gitbook/#_1","text":"","title":"\u524d\u7f6e\u8981\u6c42"},{"location":"utils/gitbook/#nodejs","text":"\u9ad8\u7248\u672c\u53ef\u80fd\u4e0d\u517c\u5bb9\uff0c\u9700\u8981\u7248\u672c\u5728v10\u5de6\u53f3\u3002 https://nodejs.org/download/release/v10.21.0/","title":"nodejs"},{"location":"utils/gitbook/#_2","text":"npm config get registry npm config set registry https://registry.npm.taobao.org","title":"\u66f4\u6362\u955c\u50cf"},{"location":"utils/gitbook/#_3","text":"npm uninstall -g gitbook-cli \u5b89\u88c5\u5b8c\u4e4b\u540e\u7528 gitbook -V \u67e5\u770b\u7248\u672c\uff0c\u81ea\u52a8install gitbook\u3002","title":"\u5b89\u88c5"},{"location":"utils/gitbook/#_4","text":"gitbook -V \u67e5\u770b\u7248\u672c\u53f7 gitbook init \u521d\u59cb\u5316 gitbook serve \u9884\u89c8 gitbook build \u751f\u6210 gitbook build --gitbook = 2 .6.7 \u751f\u6210\u65f6\u6307\u5b9agitbook\u7684\u7248\u672c, \u672c\u5730\u6ca1\u6709\u4f1a\u5148\u4e0b\u8f7d gitbook uninstall 2 .6.7 \u5378\u8f7d\u6307\u5b9a\u7248\u672c\u53f7\u7684gitbook gitbook fetch [ version ] \u83b7\u53d6 [ \u7248\u672c ] \u4e0b\u8f7d\u5e76\u5b89\u88c5<\u7248\u672c> gitbook --help \u663e\u793a\u5e2e\u52a9\u6587\u6863 gitbook ls-remote \u5217\u51faNPM\u4e0a\u7684\u53ef\u7528\u7248\u672c\uff1a","title":"\u4f7f\u7528"},{"location":"utils/hexo/","text":"","title":"hexo"},{"location":"utils/mkdocs/","text":"","title":"mkdocs"},{"location":"utils/reveal-md/","text":"reveal-md \u00b6 \u7ea6 757 \u4e2a\u5b57 21 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 3 \u5206\u949f Abstract RevealJS \u662f\u4e00\u4e2a\u7b80\u5355\u4e14\u652f\u6301 markdown \u7684\u5de5\u5177\uff0c\u7136\u540e\u8f6c\u6362\u6210 PPT\u3002 \u8fd9\u91cc\u63a8\u8350\u4e00\u4e2aslide\u6a21\u7248 TonyCrane/slide-template \u3002 \u672c\u4eba\u4e0d\u559c\u6b22\u5199 PPT\uff08\u4e5f\u4e0d\u4f1a\u5199\uff09 \u4ec0\u4e48\u662f reveal-md \u00b6 \u53ef\u4ee5\u53ea\u7528\u5199 markdown \u7684\u65b9\u5f0f\u5199 PPT\uff0c\u5c06 markdown \u8f6c\u6362\u6210 html\uff0c\u6216\u5bfc\u51fa PDF \u662f revealjs \u7684 makrdown \u529f\u80fd \u5b89\u88c5 reveal-md \u00b6 \u672c\u5730\u6784\u5efa \u00b6 reveal.js \u4f7f\u7528 nodejs \u6784\u5efa\uff0c\u9700\u8981\u63d0\u524d\u5b89\u88c5\u597d nodejs \u901a\u8fc7 npm \u5b89\u88c5 reveal-md $ npm install -g reveal-md $ reveal-md slides.md # \u542f\u52a8\u672c\u5730\u670d\u52a1\u5668\u5e76\u5728\u9ed8\u8ba4\u6d4f\u89c8\u5668\u4e2d\u5c06\u4efb\u4f55 Markdown \u6587\u4ef6\u6f14\u793a\u6587\u7a3f\u6253\u5f00 Docker \u6784\u5efa \u00b6 \u4e0d\u9700\u8981\u5b89\u88c5 node.js \u5728\u5bb9\u5668\u4e2d\u542f\u7528\u5b9e\u65f6\u91cd\u65b0\u52a0\u8f7d\uff0c\u8fd8\u5e94\u8be5\u6620\u5c04\u7aef\u53e3 35729 $ docker run --rm -p 1948 :1948 -p 35729 :35729 -v :/slides webpronl/reveal-md:latest /slides --watch \u76f8\u5173\u547d\u4ee4 \u00b6 reveal-md -w \u5b9e\u65f6\u91cd\u65b0\u52a0\u8f7d reveal-md --scripts [url/*.js] \u81ea\u5b9a\u4e49 js reveal-md --css [url/*.js] \u81ea\u5b9a\u4e49 css reveal-md --static [--static-dirs=assets] \u5bfc\u51fa\u5230\u72ec\u7acb\u7684 HTML \u7f51\u7ad9 (\u5c06\u5305\u542b\u5176\u4ed6\u9759\u6001\u8d44\u6e90\u7684\u76ee\u5f55\u590d\u5236\u5230\u76ee\u6807\u76ee\u5f55) reveal-md --print [--print-size 1024x768 / A4] name.pdf \u6253\u5370\u6210 PDF\uff08\u6216\u8005\u5728\u6d4f\u89c8\u5668\u7684 url \u540e\u6dfb\u52a0 ?print-pdf reveal-md --template \u81ea\u5b9a\u4e49\u6a21\u7248 \u914d\u7f6e \u00b6 yaml \u914d\u7f6e \u00b6 \u53ef\u4ee5\u5728 markdown \u6587\u4ef6\u4e2d\u901a\u8fc7 yaml \u8fdb\u884c\u914d\u7f6e --- title : Slide \u6a21\u677f # \u5e7b\u706f\u7247\u540d\u79f0 separator : # \u5e7b\u706f\u7247\u6a2a\u884c\u5207\u5272\u6807\u5fd7 verticalSeparator : # \u5e7b\u706f\u7247\u5782\u76f4\u5207\u5272\u6807\u5fd7 theme : simple # \u5e7b\u706f\u7247\u4e3b\u9898 highlightTheme : github # \u4ee3\u7801\u9ad8\u4eae\u4e3b\u9898 css : custom.css # \u81ea\u5b9a\u4e49 css revealOptions : transition : 'slide' # \u52a8\u753b\u6548\u679c transitionSpeed : fast # \u52a8\u753b\u901f\u5ea6 center : false # \u662f\u5426\u5c45\u4e2d slideNumber : \"c/t\" # \u5e7b\u706f\u7247\u6570\u91cf width : 1000 # \u5e7b\u706f\u7247\u5bbd\u5ea6 --- \u5e7b\u706f\u7247\u4e3b\u9898 \u00b6 \u9ed8\u8ba4\u4e3b\u9898 \u540d\u79f0 \u6548\u679c black \u9ed1\u8272\u80cc\u666f\uff0c\u767d\u8272\u6587\u672c\uff0c\u84dd\u8272\u94fe\u63a5\uff08\u9ed8\u8ba4\uff09 white \u767d\u8272\u80cc\u666f\uff0c\u9ed1\u8272\u6587\u672c\uff0c\u84dd\u8272\u94fe\u63a5 league \u7070\u8272\u80cc\u666f\uff0c\u767d\u8272\u6587\u5b57\uff0c\u84dd\u8272\u94fe\u63a5 beige \u7c73\u8272\u80cc\u666f\uff0c\u6df1\u8272\u6587\u5b57\uff0c\u68d5\u8272\u94fe\u63a5 sky \u84dd\u8272\u80cc\u666f\uff0c\u7ec6\u6697\u6587\u672c\uff0c\u84dd\u8272\u94fe\u63a5 night \u9ed1\u8272\u80cc\u666f\uff0c\u539a\u767d\u8272\u6587\u5b57\uff0c\u6a59\u8272\u94fe\u63a5 serif \u5361\u5e03\u5947\u8bfa\u80cc\u666f\uff0c\u7070\u8272\u6587\u672c\uff0c\u68d5\u8272\u94fe\u63a5 simple \u767d\u8272\u80cc\u666f\uff0c\u9ed1\u8272\u6587\u672c\uff0c\u84dd\u8272\u94fe\u63a5 solarized \u9ad8\u5206\u8fa8\u7387\u7167\u7247 blood \u6df1\u8272\u80cc\u666f\uff0c\u539a\u767d\u6587\u5b57\uff0c\u7ea2\u8272\u94fe\u63a5 moon \u9ad8\u5206\u8fa8\u7387\u7167\u7247 \u81ea\u5b9a\u4e49\u4e3b\u9898 \u4e0b\u8f7d reveal git clone git@github.com :hakimel/reveal.js.git \uff1b \u5728 /css/theme/coder.scss \u4e2d\u590d\u5236\u4e00\u4e2a\u6587\u4ef6\uff1b \u8fd0\u884c npm run build -- css-themes \u751f\u6210css dist/coder.css\uff1b \u8fd0\u884c\u6307\u5b9a\u4e3b\u9898 reveal-md slides.md -w --theme theme/coder.css\u3002 \u5207\u6362\u65f6\u52a8\u753b \u00b6 \u540d\u79f0 \u6548\u679c none \u77ac\u95f4\u5207\u6362\u80cc\u666f fade \u4ea4\u53c9\u6de1\u5165\u6de1\u51fa - \u80cc\u666f\u8f6c\u6362\u7684\u9ed8\u8ba4\u503c slide \u5728\u80cc\u666f\u4e4b\u95f4\u6ed1\u52a8 \u2014 \u5e7b\u706f\u7247\u8fc7\u6e21\u7684\u9ed8\u8ba4\u8bbe\u7f6e convex \u4ee5\u51f8\u89d2\u6ed1\u52a8 concave \u4ee5\u51f9\u89d2\u6ed1\u52a8 zoom \u5411\u4e0a\u7f29\u653e\u4f20\u5165\u7684\u5e7b\u706f\u7247\uff0c\u4f7f\u5176\u4ece\u5c4f\u5e55\u4e2d\u5fc3\u5411\u5185\u6269\u5c55 \u7528\u6cd5 \u00b6 \u6362\u9875 \u00b6 \u6a2a\u5411\u6362\u9875\uff1a \uff08\u6839\u636e yaml \u7684\u914d\u7f6e \u5782\u76f4\u6362\u9875\uff1a \uff08\u6839\u636e yaml \u7684\u914d\u7f6e \u6dfb\u52a0\u5c5e\u6027 \u00b6 \u5f53\u9700\u8981\u5728 section \u4e2d\u6dfb\u52a0\u5c5e\u6027\u65f6 \u5f53\u9700\u8981\u5728\u5176\u5b83\u5143\u7d20\u63d2\u5165\u5c5e\u6027\u65f6 \u8bbe\u7f6e\u80cc\u666f\u8272\u6216\u80cc\u666f\u56fe \u8bbe\u7f6e\u52a8\u753b\u7247\u6bb5 Item1 \u5177\u4f53\u53ef\u4ee5\u67e5\u9605revealjs\u7684docs \u6307\u5b9a\u4ee3\u7801\u9ad8\u4eae\u987a\u5e8f \u00b6 ```python [1|3-6] n = 0 while n < 10 : if n % 2 == 0 : print ( f \" { n } is even\" ) else : print ( f \" { n } is odd\" ) n += 1 ``` \u5730\u5740\u8df3\u8f6c \u00b6 [ \u8df3\u8f6c0 ]( #/0 ) \u90e8\u7f72 \u00b6 Github Pages \u00b6 \u5728 Github \u4e2d\u65b0\u5efa\u4e00\u4e2a slides \u4ed3\u5e93\u4f5c\u4e3a\u603b\u5e7b\u706f\u7247\u7ad9\u70b9\uff0c\u5e76\u4e14\u90e8\u7f72 Github Pages\uff08\u53ef\u81ea\u5b9a\u4e49\u57df\u540d \u5728\u5206\u4ed3\u5e93\u4e2d\u5199\u597d\u9879\u76ee\u540e\uff0c\u901a\u8fc7 Action \u628a site \u6587\u4ef6\u5939\u4e2d\u7684\u5185\u5bb9\u590d\u5236\u5230 slides \u5177\u4f53\u67e5\u770b TonyCrane's Slide Template Netlify \u00b6 \u6ce8\u518c\u4e00\u4e2a netlify \uff0c\u7136\u540e\u521b\u5efa\u4e00\u4e2a\u7ad9\u70b9\u5173\u8054\u4e0agithub\u4ed3\u5e93 \u5728\u914d\u7f6e/\u90e8\u7f72\u91cc\u9762\u6dfb\u52a0\u6784\u5efa\u547d\u4ee4 \u7136\u540e\u5728\u57df\u540d\u7ba1\u7406\u6dfb\u52a0\u4e00\u4e2a\u81ea\u5df1\u7684\u57df\u540d Reference \u00b6 webpro/reveal-md revealjs \u5b98\u7f51 \u4efb\u4f55\u5229\u7528 revealjs \u5199\u51fa\u6f02\u4eae\u7684 PPT TonyCrane's Slide Template","title":"reveal-md"},{"location":"utils/reveal-md/#reveal-md","text":"\u7ea6 757 \u4e2a\u5b57 21 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 3 \u5206\u949f Abstract RevealJS \u662f\u4e00\u4e2a\u7b80\u5355\u4e14\u652f\u6301 markdown \u7684\u5de5\u5177\uff0c\u7136\u540e\u8f6c\u6362\u6210 PPT\u3002 \u8fd9\u91cc\u63a8\u8350\u4e00\u4e2aslide\u6a21\u7248 TonyCrane/slide-template \u3002 \u672c\u4eba\u4e0d\u559c\u6b22\u5199 PPT\uff08\u4e5f\u4e0d\u4f1a\u5199\uff09","title":"reveal-md"},{"location":"utils/reveal-md/#reveal-md_1","text":"\u53ef\u4ee5\u53ea\u7528\u5199 markdown \u7684\u65b9\u5f0f\u5199 PPT\uff0c\u5c06 markdown \u8f6c\u6362\u6210 html\uff0c\u6216\u5bfc\u51fa PDF \u662f revealjs \u7684 makrdown \u529f\u80fd","title":"\u4ec0\u4e48\u662f reveal-md"},{"location":"utils/reveal-md/#reveal-md_2","text":"","title":"\u5b89\u88c5 reveal-md"},{"location":"utils/reveal-md/#_1","text":"reveal.js \u4f7f\u7528 nodejs \u6784\u5efa\uff0c\u9700\u8981\u63d0\u524d\u5b89\u88c5\u597d nodejs \u901a\u8fc7 npm \u5b89\u88c5 reveal-md $ npm install -g reveal-md $ reveal-md slides.md # \u542f\u52a8\u672c\u5730\u670d\u52a1\u5668\u5e76\u5728\u9ed8\u8ba4\u6d4f\u89c8\u5668\u4e2d\u5c06\u4efb\u4f55 Markdown \u6587\u4ef6\u6f14\u793a\u6587\u7a3f\u6253\u5f00","title":"\u672c\u5730\u6784\u5efa"},{"location":"utils/reveal-md/#docker","text":"\u4e0d\u9700\u8981\u5b89\u88c5 node.js \u5728\u5bb9\u5668\u4e2d\u542f\u7528\u5b9e\u65f6\u91cd\u65b0\u52a0\u8f7d\uff0c\u8fd8\u5e94\u8be5\u6620\u5c04\u7aef\u53e3 35729 $ docker run --rm -p 1948 :1948 -p 35729 :35729 -v :/slides webpronl/reveal-md:latest /slides --watch","title":"Docker \u6784\u5efa"},{"location":"utils/reveal-md/#_2","text":"reveal-md -w \u5b9e\u65f6\u91cd\u65b0\u52a0\u8f7d reveal-md --scripts [url/*.js] \u81ea\u5b9a\u4e49 js reveal-md --css [url/*.js] \u81ea\u5b9a\u4e49 css reveal-md --static [--static-dirs=assets] \u5bfc\u51fa\u5230\u72ec\u7acb\u7684 HTML \u7f51\u7ad9 (\u5c06\u5305\u542b\u5176\u4ed6\u9759\u6001\u8d44\u6e90\u7684\u76ee\u5f55\u590d\u5236\u5230\u76ee\u6807\u76ee\u5f55) reveal-md --print [--print-size 1024x768 / A4] name.pdf \u6253\u5370\u6210 PDF\uff08\u6216\u8005\u5728\u6d4f\u89c8\u5668\u7684 url \u540e\u6dfb\u52a0 ?print-pdf reveal-md --template \u81ea\u5b9a\u4e49\u6a21\u7248","title":"\u76f8\u5173\u547d\u4ee4"},{"location":"utils/reveal-md/#_3","text":"","title":"\u914d\u7f6e"},{"location":"utils/reveal-md/#yaml","text":"\u53ef\u4ee5\u5728 markdown \u6587\u4ef6\u4e2d\u901a\u8fc7 yaml \u8fdb\u884c\u914d\u7f6e --- title : Slide \u6a21\u677f # \u5e7b\u706f\u7247\u540d\u79f0 separator : # \u5e7b\u706f\u7247\u6a2a\u884c\u5207\u5272\u6807\u5fd7 verticalSeparator : # \u5e7b\u706f\u7247\u5782\u76f4\u5207\u5272\u6807\u5fd7 theme : simple # \u5e7b\u706f\u7247\u4e3b\u9898 highlightTheme : github # \u4ee3\u7801\u9ad8\u4eae\u4e3b\u9898 css : custom.css # \u81ea\u5b9a\u4e49 css revealOptions : transition : 'slide' # \u52a8\u753b\u6548\u679c transitionSpeed : fast # \u52a8\u753b\u901f\u5ea6 center : false # \u662f\u5426\u5c45\u4e2d slideNumber : \"c/t\" # \u5e7b\u706f\u7247\u6570\u91cf width : 1000 # \u5e7b\u706f\u7247\u5bbd\u5ea6 ---","title":"yaml \u914d\u7f6e"},{"location":"utils/reveal-md/#_4","text":"\u9ed8\u8ba4\u4e3b\u9898 \u540d\u79f0 \u6548\u679c black \u9ed1\u8272\u80cc\u666f\uff0c\u767d\u8272\u6587\u672c\uff0c\u84dd\u8272\u94fe\u63a5\uff08\u9ed8\u8ba4\uff09 white \u767d\u8272\u80cc\u666f\uff0c\u9ed1\u8272\u6587\u672c\uff0c\u84dd\u8272\u94fe\u63a5 league \u7070\u8272\u80cc\u666f\uff0c\u767d\u8272\u6587\u5b57\uff0c\u84dd\u8272\u94fe\u63a5 beige \u7c73\u8272\u80cc\u666f\uff0c\u6df1\u8272\u6587\u5b57\uff0c\u68d5\u8272\u94fe\u63a5 sky \u84dd\u8272\u80cc\u666f\uff0c\u7ec6\u6697\u6587\u672c\uff0c\u84dd\u8272\u94fe\u63a5 night \u9ed1\u8272\u80cc\u666f\uff0c\u539a\u767d\u8272\u6587\u5b57\uff0c\u6a59\u8272\u94fe\u63a5 serif \u5361\u5e03\u5947\u8bfa\u80cc\u666f\uff0c\u7070\u8272\u6587\u672c\uff0c\u68d5\u8272\u94fe\u63a5 simple \u767d\u8272\u80cc\u666f\uff0c\u9ed1\u8272\u6587\u672c\uff0c\u84dd\u8272\u94fe\u63a5 solarized \u9ad8\u5206\u8fa8\u7387\u7167\u7247 blood \u6df1\u8272\u80cc\u666f\uff0c\u539a\u767d\u6587\u5b57\uff0c\u7ea2\u8272\u94fe\u63a5 moon \u9ad8\u5206\u8fa8\u7387\u7167\u7247 \u81ea\u5b9a\u4e49\u4e3b\u9898 \u4e0b\u8f7d reveal git clone git@github.com :hakimel/reveal.js.git \uff1b \u5728 /css/theme/coder.scss \u4e2d\u590d\u5236\u4e00\u4e2a\u6587\u4ef6\uff1b \u8fd0\u884c npm run build -- css-themes \u751f\u6210css dist/coder.css\uff1b \u8fd0\u884c\u6307\u5b9a\u4e3b\u9898 reveal-md slides.md -w --theme theme/coder.css\u3002","title":"\u5e7b\u706f\u7247\u4e3b\u9898"},{"location":"utils/reveal-md/#_5","text":"\u540d\u79f0 \u6548\u679c none \u77ac\u95f4\u5207\u6362\u80cc\u666f fade \u4ea4\u53c9\u6de1\u5165\u6de1\u51fa - \u80cc\u666f\u8f6c\u6362\u7684\u9ed8\u8ba4\u503c slide \u5728\u80cc\u666f\u4e4b\u95f4\u6ed1\u52a8 \u2014 \u5e7b\u706f\u7247\u8fc7\u6e21\u7684\u9ed8\u8ba4\u8bbe\u7f6e convex \u4ee5\u51f8\u89d2\u6ed1\u52a8 concave \u4ee5\u51f9\u89d2\u6ed1\u52a8 zoom \u5411\u4e0a\u7f29\u653e\u4f20\u5165\u7684\u5e7b\u706f\u7247\uff0c\u4f7f\u5176\u4ece\u5c4f\u5e55\u4e2d\u5fc3\u5411\u5185\u6269\u5c55","title":"\u5207\u6362\u65f6\u52a8\u753b"},{"location":"utils/reveal-md/#_6","text":"","title":"\u7528\u6cd5"},{"location":"utils/reveal-md/#_7","text":"\u6a2a\u5411\u6362\u9875\uff1a \uff08\u6839\u636e yaml \u7684\u914d\u7f6e \u5782\u76f4\u6362\u9875\uff1a \uff08\u6839\u636e yaml \u7684\u914d\u7f6e","title":"\u6362\u9875"},{"location":"utils/reveal-md/#_8","text":"\u5f53\u9700\u8981\u5728 section \u4e2d\u6dfb\u52a0\u5c5e\u6027\u65f6 \u5f53\u9700\u8981\u5728\u5176\u5b83\u5143\u7d20\u63d2\u5165\u5c5e\u6027\u65f6 \u8bbe\u7f6e\u80cc\u666f\u8272\u6216\u80cc\u666f\u56fe \u8bbe\u7f6e\u52a8\u753b\u7247\u6bb5 Item1 \u5177\u4f53\u53ef\u4ee5\u67e5\u9605revealjs\u7684docs","title":"\u6dfb\u52a0\u5c5e\u6027"},{"location":"utils/reveal-md/#_9","text":"```python [1|3-6] n = 0 while n < 10 : if n % 2 == 0 : print ( f \" { n } is even\" ) else : print ( f \" { n } is odd\" ) n += 1 ```","title":"\u6307\u5b9a\u4ee3\u7801\u9ad8\u4eae\u987a\u5e8f"},{"location":"utils/reveal-md/#_10","text":" [ \u8df3\u8f6c0 ]( #/0 )","title":"\u5730\u5740\u8df3\u8f6c"},{"location":"utils/reveal-md/#_11","text":"","title":"\u90e8\u7f72"},{"location":"utils/reveal-md/#github-pages","text":"\u5728 Github \u4e2d\u65b0\u5efa\u4e00\u4e2a slides \u4ed3\u5e93\u4f5c\u4e3a\u603b\u5e7b\u706f\u7247\u7ad9\u70b9\uff0c\u5e76\u4e14\u90e8\u7f72 Github Pages\uff08\u53ef\u81ea\u5b9a\u4e49\u57df\u540d \u5728\u5206\u4ed3\u5e93\u4e2d\u5199\u597d\u9879\u76ee\u540e\uff0c\u901a\u8fc7 Action \u628a site \u6587\u4ef6\u5939\u4e2d\u7684\u5185\u5bb9\u590d\u5236\u5230 slides \u5177\u4f53\u67e5\u770b TonyCrane's Slide Template","title":"Github Pages"},{"location":"utils/reveal-md/#netlify","text":"\u6ce8\u518c\u4e00\u4e2a netlify \uff0c\u7136\u540e\u521b\u5efa\u4e00\u4e2a\u7ad9\u70b9\u5173\u8054\u4e0agithub\u4ed3\u5e93 \u5728\u914d\u7f6e/\u90e8\u7f72\u91cc\u9762\u6dfb\u52a0\u6784\u5efa\u547d\u4ee4 \u7136\u540e\u5728\u57df\u540d\u7ba1\u7406\u6dfb\u52a0\u4e00\u4e2a\u81ea\u5df1\u7684\u57df\u540d","title":"Netlify"},{"location":"utils/reveal-md/#reference","text":"webpro/reveal-md revealjs \u5b98\u7f51 \u4efb\u4f55\u5229\u7528 revealjs \u5199\u51fa\u6f02\u4eae\u7684 PPT TonyCrane's Slide Template","title":"Reference"},{"location":"utils/shell/","text":"Shell \u547d\u4ee4\u76f8\u5173 \u00b6 \u7ea6 155 \u4e2a\u5b57 2 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f Abstract \u5e38\u7528 / \u5e38\u5fd8\u7684shell\u547d\u4ee4\uff0c\u4e0d\u662f\u5f88\u5168 \u547d\u4ee4 \u00b6 \u5220\u9664url\u76ee\u5f55\u4e0b\u6240\u6709name.cpp\u6587\u4ef6 $ find ${ url } -name 'name.cpp' -type f -print -exec rm -rf {} \\; \u4e00\u884c\u4ee3\u7801-\u89e3\u51b3\u4eba\u751f\u70e6\u607c wget http://fishros.com/install -O fishros && . fishros zsh \u00b6 \u5b89\u88c5 \u00b6 mac: \u81ea\u5e26 Linux \u4f7f\u7528\u5bf9\u5e94\u8f6f\u4ef6\u5305\u7ba1\u7406\u5668\u5b89\u88c5 zsh \u5373\u53ef sudo apt install zsh \u67e5\u770b zsh \u8def\u5f84\uff1awhich zsh \u66f4\u6539\u9ed8\u8ba4 shell\uff1asudo chsh -s /usr/bin/zsh \u4e3b\u9898 \u00b6 \u5b89\u88c5 oh-my-zsh\uff08\u56db\u9009\u4e00\uff09 sh -c \"$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh )\" sh -c \"$(curl -fsSL https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh )\" sh -c \"$(wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)\" sh -c \"$(wget -O- https://gitee.com/pocmon/mirrors/raw/master/tools/install.sh )\" \u4fee\u6539 awesomepanda \u5728 ~/.zshrc \u4e2d\u8bbe\u7f6e ZSH_THEME \u4e3a \"awesomepanda\" \u63d2\u4ef6 \u00b6 \u81ea\u5e26 git \u63d2\u4ef6 zsh-autosuggestions\uff1agit clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions zsh-syntax-highlighting\uff1agit clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting \u7136\u540e\u5728 ~/.zshrc \u4e2d\u8bbe\u7f6e plugins=(git zsh-autosuggestions zsh-syntax-highlighting)","title":"Shell \u547d\u4ee4\u76f8\u5173"},{"location":"utils/shell/#shell","text":"\u7ea6 155 \u4e2a\u5b57 2 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f Abstract \u5e38\u7528 / \u5e38\u5fd8\u7684shell\u547d\u4ee4\uff0c\u4e0d\u662f\u5f88\u5168","title":"Shell \u547d\u4ee4\u76f8\u5173"},{"location":"utils/shell/#_1","text":"\u5220\u9664url\u76ee\u5f55\u4e0b\u6240\u6709name.cpp\u6587\u4ef6 $ find ${ url } -name 'name.cpp' -type f -print -exec rm -rf {} \\; \u4e00\u884c\u4ee3\u7801-\u89e3\u51b3\u4eba\u751f\u70e6\u607c wget http://fishros.com/install -O fishros && . fishros","title":"\u547d\u4ee4"},{"location":"utils/shell/#zsh","text":"","title":"zsh"},{"location":"utils/shell/#_2","text":"mac: \u81ea\u5e26 Linux \u4f7f\u7528\u5bf9\u5e94\u8f6f\u4ef6\u5305\u7ba1\u7406\u5668\u5b89\u88c5 zsh \u5373\u53ef sudo apt install zsh \u67e5\u770b zsh \u8def\u5f84\uff1awhich zsh \u66f4\u6539\u9ed8\u8ba4 shell\uff1asudo chsh -s /usr/bin/zsh","title":"\u5b89\u88c5"},{"location":"utils/shell/#_3","text":"\u5b89\u88c5 oh-my-zsh\uff08\u56db\u9009\u4e00\uff09 sh -c \"$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh )\" sh -c \"$(curl -fsSL https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh )\" sh -c \"$(wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)\" sh -c \"$(wget -O- https://gitee.com/pocmon/mirrors/raw/master/tools/install.sh )\" \u4fee\u6539 awesomepanda \u5728 ~/.zshrc \u4e2d\u8bbe\u7f6e ZSH_THEME \u4e3a \"awesomepanda\"","title":"\u4e3b\u9898"},{"location":"utils/shell/#_4","text":"\u81ea\u5e26 git \u63d2\u4ef6 zsh-autosuggestions\uff1agit clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions zsh-syntax-highlighting\uff1agit clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting \u7136\u540e\u5728 ~/.zshrc \u4e2d\u8bbe\u7f6e plugins=(git zsh-autosuggestions zsh-syntax-highlighting)","title":"\u63d2\u4ef6"},{"location":"utils/utilsbox/","text":"\u5de5\u5177\u6536\u96c6 \u00b6 \u7ea6 428 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f Abstract \u5404\u79cd\u7a00\u5947\u53e4\u602a\u7684\u5de5\u5177\uff0c\u5305\u62ec\u8bbe\u8ba1\u3001\u56fe\u50cf\u548c\u5b66\u4e60\u5de5\u5177\u7b49\u7b49 \u6301\u7eed\u66f4\u65b0\u4e2d... .md-typeset a:is(:focus,:hover) { opacity: 1; } .md-typeset a { color: var(--md-accent-fg-color); opacity: 0.8; } \u56fe\u50cf\u7c7b \u00b6 \u4f5c\u56fe \u00b6 \u98ce\u683c\u5934\u50cf\u5236\u4f5c Notion-avatar \u5728\u7ebf\u624b\u5199\u98ce\u683c\u4f5c\u56fe\u767d\u677f Excalidraw \u5728\u7ebf\u77e2\u91cf\u56fe\u4f5c\u56fe\u8f6f\u4ef6\uff08draw.io\uff09 app.diagrams.net \u5728\u7ebf\u56fe\u8bba\u4f5c\u56fe\u7f51\u7ad9 Graph Editor tikz \u6709\u9650\u72b6\u6001\u673a\u53ef\u89c6\u5316\u5236\u4f5c Finite State Machine Designer \u8bc6\u56fe \u00b6 SauceNAO \u4fee\u56fe \u00b6 \u79fb\u9664\u80cc\u666f\uff08\u5b8c\u5168\u514d\u8d39\uff09 RemoveBg \u7eaf\u524d\u7aef\u514d\u8d39\u56fe\u7247\u538b\u7f29 PicDiet \u56fe\u7247\u538b\u7f29\uff08\u9700\u4e0a\u4f20\uff09 DocSmall \u64e6\u9664\u56fe\u7247\u4e0a\u7269\u54c1\uff08\u514d\u8d39\u529f\u80fd\u53d7\u9650\uff09 cleanup.pictures \u8bbe\u8ba1\u7c7b \u00b6 \u914d\u8272 \u00b6 \u914d\u8272\u65b9\u6848\u7f51\u7ad9 Color Hunt \u914d\u8272\u65b9\u6848\u7f51\u7ad9\uff08\u5e26 Figma \u63d2\u4ef6\uff09 Coolors \u989c\u8272\u67e5\u627e\u53ca\u8f6c\u6362\u5de5\u5177 HexColor16 \u65e5\u5f0f\u4f20\u7edf\u989c\u8272\u5217\u8868 Nippon Colors \u65e5\u7cfb\u989c\u8272\u540d\u79f0\u5217\u8868\uff08 \u8272\u56fe\u7f51\u7ad9 \uff09 Color Site Flat UI \u914d\u8272\u65b9\u6848 Flat UI Colors \u56fe\u6807 \u00b6 \u5fbd\u7ae0 shields.io \u5404\u7cfb\u5217\u56fe\u6807\u5408\u96c6 icones \u56fe\u6807\u3001\u63d2\u56fe\u3001\u7167\u7247\u3001\u97f3\u4e50\u548c\u8bbe\u8ba1\u5de5\u5177 icons8 \u4ee3\u7801\u7c7b \u00b6 \u53ef\u89c6\u5316 \u00b6 \u6570\u636e\u7ed3\u6784-\u56fe\u7684\u53ef\u89c6\u5316 graph_editor \u6b63\u5219\u8868\u8fbe\u5f0f\u53ef\u89c6\u5316 Regulex Python \u6267\u884c\u8fc7\u7a0b\u53ef\u89c6\u5316 PythonTutor GLSL \u6d41\u4f53\u573a\u53ef\u89c6\u5316 Field Play \u63d2\u4ef6 \u00b6 sublime\u7b97\u6cd5\u63d2\u4ef6 FastOlympicCoding \u5b66\u4e60\u5de5\u5177 \u00b6 \u7f16\u8bd1\u5668\u8d44\u6e90\u7ba1\u7406\u5668 comple explorer \u7f13\u52a8\u66f2\u7ebf Easing Function Cheat Sheet \u5927 O \u590d\u6742\u5ea6\u6bd4\u8f83\u67e5\u8be2 Big O Cheat Sheet C \u7c7b\u578b\u58f0\u660e\u8f6c\u82f1\u6587\u63cf\u8ff0 cdecl \u6570\u5b66\u7c7b \u00b6 \u6570\u5217\u67e5\u627e OEIS \u6570\u5b66\u516c\u5f0f Latex \u8d28\u6570\u68c0\u6d4b primenumbers \u6570\u5b66\u56fe\u50cf desmos \u4e92\u52a8\u51e0\u4f55\u8c1c\u9898 euclidea \u6570\u5b66\u6559\u5b66\u8f6f\u4ef6 GeoGebra \u5176\u4ed6 \u00b6 git\u63d0\u4ea4\u4fe1\u606f\u4e2d\u7684emoji gitmoji Emoji \u67e5\u8be2 EmojiAll \u8868\u60c5\u56fe\u6807\u767e\u79d1 emojipedia.org \u5de5\u5177\u96c6\u5408 MikuTools Unicode\u7f16\u7801 Unicode Youtube\u4e0b\u8f7d\u5668 yt1s \u6253\u5b57\u8bad\u7ec3 monkeytype PDFToPPT smallpdf Reference \u00b6 TonyCrane \u5de5\u5177\u6536\u96c6","title":"\u5de5\u5177\u6536\u96c6"},{"location":"utils/utilsbox/#_1","text":"\u7ea6 428 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f Abstract \u5404\u79cd\u7a00\u5947\u53e4\u602a\u7684\u5de5\u5177\uff0c\u5305\u62ec\u8bbe\u8ba1\u3001\u56fe\u50cf\u548c\u5b66\u4e60\u5de5\u5177\u7b49\u7b49 \u6301\u7eed\u66f4\u65b0\u4e2d... .md-typeset a:is(:focus,:hover) { opacity: 1; } .md-typeset a { color: var(--md-accent-fg-color); opacity: 0.8; }","title":"\u5de5\u5177\u6536\u96c6"},{"location":"utils/utilsbox/#_2","text":"","title":"\u56fe\u50cf\u7c7b"},{"location":"utils/utilsbox/#_3","text":"\u98ce\u683c\u5934\u50cf\u5236\u4f5c Notion-avatar \u5728\u7ebf\u624b\u5199\u98ce\u683c\u4f5c\u56fe\u767d\u677f Excalidraw \u5728\u7ebf\u77e2\u91cf\u56fe\u4f5c\u56fe\u8f6f\u4ef6\uff08draw.io\uff09 app.diagrams.net \u5728\u7ebf\u56fe\u8bba\u4f5c\u56fe\u7f51\u7ad9 Graph Editor tikz \u6709\u9650\u72b6\u6001\u673a\u53ef\u89c6\u5316\u5236\u4f5c Finite State Machine Designer","title":"\u4f5c\u56fe"},{"location":"utils/utilsbox/#_4","text":"SauceNAO","title":"\u8bc6\u56fe"},{"location":"utils/utilsbox/#_5","text":"\u79fb\u9664\u80cc\u666f\uff08\u5b8c\u5168\u514d\u8d39\uff09 RemoveBg \u7eaf\u524d\u7aef\u514d\u8d39\u56fe\u7247\u538b\u7f29 PicDiet \u56fe\u7247\u538b\u7f29\uff08\u9700\u4e0a\u4f20\uff09 DocSmall \u64e6\u9664\u56fe\u7247\u4e0a\u7269\u54c1\uff08\u514d\u8d39\u529f\u80fd\u53d7\u9650\uff09 cleanup.pictures","title":"\u4fee\u56fe"},{"location":"utils/utilsbox/#_6","text":"","title":"\u8bbe\u8ba1\u7c7b"},{"location":"utils/utilsbox/#_7","text":"\u914d\u8272\u65b9\u6848\u7f51\u7ad9 Color Hunt \u914d\u8272\u65b9\u6848\u7f51\u7ad9\uff08\u5e26 Figma \u63d2\u4ef6\uff09 Coolors \u989c\u8272\u67e5\u627e\u53ca\u8f6c\u6362\u5de5\u5177 HexColor16 \u65e5\u5f0f\u4f20\u7edf\u989c\u8272\u5217\u8868 Nippon Colors \u65e5\u7cfb\u989c\u8272\u540d\u79f0\u5217\u8868\uff08 \u8272\u56fe\u7f51\u7ad9 \uff09 Color Site Flat UI \u914d\u8272\u65b9\u6848 Flat UI Colors","title":"\u914d\u8272"},{"location":"utils/utilsbox/#_8","text":"\u5fbd\u7ae0 shields.io \u5404\u7cfb\u5217\u56fe\u6807\u5408\u96c6 icones \u56fe\u6807\u3001\u63d2\u56fe\u3001\u7167\u7247\u3001\u97f3\u4e50\u548c\u8bbe\u8ba1\u5de5\u5177 icons8","title":"\u56fe\u6807"},{"location":"utils/utilsbox/#_9","text":"","title":"\u4ee3\u7801\u7c7b"},{"location":"utils/utilsbox/#_10","text":"\u6570\u636e\u7ed3\u6784-\u56fe\u7684\u53ef\u89c6\u5316 graph_editor \u6b63\u5219\u8868\u8fbe\u5f0f\u53ef\u89c6\u5316 Regulex Python \u6267\u884c\u8fc7\u7a0b\u53ef\u89c6\u5316 PythonTutor GLSL \u6d41\u4f53\u573a\u53ef\u89c6\u5316 Field Play","title":"\u53ef\u89c6\u5316"},{"location":"utils/utilsbox/#_11","text":"sublime\u7b97\u6cd5\u63d2\u4ef6 FastOlympicCoding","title":"\u63d2\u4ef6"},{"location":"utils/utilsbox/#_12","text":"\u7f16\u8bd1\u5668\u8d44\u6e90\u7ba1\u7406\u5668 comple explorer \u7f13\u52a8\u66f2\u7ebf Easing Function Cheat Sheet \u5927 O \u590d\u6742\u5ea6\u6bd4\u8f83\u67e5\u8be2 Big O Cheat Sheet C \u7c7b\u578b\u58f0\u660e\u8f6c\u82f1\u6587\u63cf\u8ff0 cdecl","title":"\u5b66\u4e60\u5de5\u5177"},{"location":"utils/utilsbox/#_13","text":"\u6570\u5217\u67e5\u627e OEIS \u6570\u5b66\u516c\u5f0f Latex \u8d28\u6570\u68c0\u6d4b primenumbers \u6570\u5b66\u56fe\u50cf desmos \u4e92\u52a8\u51e0\u4f55\u8c1c\u9898 euclidea \u6570\u5b66\u6559\u5b66\u8f6f\u4ef6 GeoGebra","title":"\u6570\u5b66\u7c7b"},{"location":"utils/utilsbox/#_14","text":"git\u63d0\u4ea4\u4fe1\u606f\u4e2d\u7684emoji gitmoji Emoji \u67e5\u8be2 EmojiAll \u8868\u60c5\u56fe\u6807\u767e\u79d1 emojipedia.org \u5de5\u5177\u96c6\u5408 MikuTools Unicode\u7f16\u7801 Unicode Youtube\u4e0b\u8f7d\u5668 yt1s \u6253\u5b57\u8bad\u7ec3 monkeytype PDFToPPT smallpdf","title":"\u5176\u4ed6"},{"location":"utils/utilsbox/#reference","text":"TonyCrane \u5de5\u5177\u6536\u96c6","title":"Reference"}]}
\ No newline at end of file
+{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"o(\u3003'\u25bd'\u3003)o Hi! \u00b6 \u8fd9\u91cc\u662f\u72d9\u51fb\u7f8e\u4f50\uff08jujimeizuo\uff09\u7684\u4e2a\u4eba\u7b14\u8bb0\u672c\u54e6\uff01 \u6700\u8fd1\u66f4\u65b0 / \u670b\u53cb\u4eec! / \u7ad9\u70b9\u7edf\u8ba1 \u9875\u9762\u603b\u6570\uff1a98 \u603b\u5b57\u6570\uff1a131748 \u4ee3\u7801\u5757\u884c\u6570\uff1a2869 \u7f51\u7ad9\u8fd0\u884c\u65f6\u95f4\uff1a function updateTime() { var date = new Date(); var now = date.getTime(); var startDate = new Date(\"2023/08/026 17:26:00\"); var start = startDate.getTime(); var diff = now - start; var y, d, h, m; y = Math.floor(diff / (365 * 24 * 3600 * 1000)); diff -= y * 365 * 24 * 3600 * 1000; d = Math.floor(diff / (24 * 3600 * 1000)); h = Math.floor(diff / (3600 * 1000) % 24); m = Math.floor(diff / (60 * 1000) % 60); if (y == 0) { document.getElementById(\"web-time\").innerHTML = d + \" \u5929 \" + h + \" \u5c0f\u65f6 \" + m + \" \u5206\u949f\"; } else { document.getElementById(\"web-time\").innerHTML = y + \" \u5e74 \" + d + \" \u5929 \" + h + \" \u5c0f\u65f6 \" + m + \" \u5206\u949f\"; } setTimeout(updateTime, 1000 * 60); } updateTime(); function toggle_statistics() { var statistics = document.getElementById(\"statistics\"); if (statistics.style.opacity == 0) { statistics.style.opacity = 1; } else { statistics.style.opacity = 0; } }","title":"o(\u3003'\u25bd'\u3003)o Hi!"},{"location":"#oo-hi","text":"\u8fd9\u91cc\u662f\u72d9\u51fb\u7f8e\u4f50\uff08jujimeizuo\uff09\u7684\u4e2a\u4eba\u7b14\u8bb0\u672c\u54e6\uff01 \u6700\u8fd1\u66f4\u65b0 / \u670b\u53cb\u4eec! / \u7ad9\u70b9\u7edf\u8ba1 \u9875\u9762\u603b\u6570\uff1a98 \u603b\u5b57\u6570\uff1a131748 \u4ee3\u7801\u5757\u884c\u6570\uff1a2869 \u7f51\u7ad9\u8fd0\u884c\u65f6\u95f4\uff1a function updateTime() { var date = new Date(); var now = date.getTime(); var startDate = new Date(\"2023/08/026 17:26:00\"); var start = startDate.getTime(); var diff = now - start; var y, d, h, m; y = Math.floor(diff / (365 * 24 * 3600 * 1000)); diff -= y * 365 * 24 * 3600 * 1000; d = Math.floor(diff / (24 * 3600 * 1000)); h = Math.floor(diff / (3600 * 1000) % 24); m = Math.floor(diff / (60 * 1000) % 60); if (y == 0) { document.getElementById(\"web-time\").innerHTML = d + \" \u5929 \" + h + \" \u5c0f\u65f6 \" + m + \" \u5206\u949f\"; } else { document.getElementById(\"web-time\").innerHTML = y + \" \u5e74 \" + d + \" \u5929 \" + h + \" \u5c0f\u65f6 \" + m + \" \u5206\u949f\"; } setTimeout(updateTime, 1000 * 60); } updateTime(); function toggle_statistics() { var statistics = document.getElementById(\"statistics\"); if (statistics.style.opacity == 0) { statistics.style.opacity = 1; } else { statistics.style.opacity = 0; } }","title":"o(\u3003'\u25bd'\u3003)o Hi!"},{"location":"changelog/","text":"\u66f4\u65b0\u8bb0\u5f55 \u00b6 Abstract PS\uff1a\u8fd9\u4e2a\u529f\u80fd\u5728\u7531 TonyCrane/mkdocs-changelog-plugin \u5f00\u53d1\u3002 .md-typeset h2 { margin-top: 0em; } 2024 \u00b6 2024-1-22 \u00b6 CS > HPC > MPI \u57fa\u7840 2024-1-20 \u00b6 CS > HPC > OpenMP \u57fa\u7840 2024-1-20 \u00b6 LLM > InternLM > OpenCompass \u5927\u6a21\u578b\u8bc4\u6d4b 2024-1-18 \u00b6 LLM > InternLM > LMDeploy \u5927\u6a21\u578b\u91cf\u5316\u90e8\u7f72\u5b9e\u8df5 2024-1-11 \u00b6 LLM > InternLM > XTuner \u5927\u6a21\u578b\u5355\u5361\u4f4e\u6210\u672c\u5fae\u8c03\u5b9e\u6218 2024-1-8 \u00b6 LLM > InternLM > \u57fa\u4e8e InternLM \u548c LangChain \u642d\u5efa\u4f60\u7684\u77e5\u8bc6\u5e93 2024-1-4 \u00b6 LLM > InternLM > \u8f7b\u677e\u5206\u949f\u73a9\u8f6c\u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u8da3\u5473 Demo 2024-1-3 \u00b6 LLM > InternLM > \u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u5168\u94fe\u8def\u5f00\u6e90\u5f00\u653e\u4f53\u7cfb 2023 \u00b6 2023-12-18 \u00b6 LLM > \u6742\u9879 > \u5206\u5e03\u5f0f\u8bad\u7ec3 2023-12-14 \u00b6 LLM > \u6742\u9879 > Prompt 2023-12-13 \u00b6 LLM > Transformer > BERT 2023-12-10 \u00b6 LLM > Transformer > Transformer 2023-12-09 \u00b6 LLM > Transformer > attention 2023-12-08 \u00b6 LLM > NLP > RNNs 2023-12-07 \u00b6 LLM > NLP > Word2Vec 2023-12-05 \u00b6 CV & Robot > \u70b9\u4e91\u914d\u51c6 > ICP 2023-12-04 \u00b6 CV & Robot > \u70b9\u4e91\u914d\u51c6 > \u524d\u7f6e\u77e5\u8bc6 2023-12-03 \u00b6 CV & Robot > \u4e09\u7ef4\u6570\u636e\u573a\u53ef\u89c6\u5316 2023-10-09 \u00b6 \u6570\u7406\u57fa\u7840 > \u6700\u4f18\u5316\u7406\u8bba\u4e0e\u65b9\u6cd5 > \u65e0\u7ea6\u675f\u6700\u4f18\u5316\u7684\u68af\u5ea6\u65b9\u6cd5 2023-10-06 \u00b6 CV & Robot > \u591a\u89c6\u56fe\u51e0\u4f55 > \u6444\u50cf\u673a\u548c\u7ed3\u6784\u7684 3D \u91cd\u6784 CV & Robot > \u591a\u89c6\u56fe\u51e0\u4f55 > \u5bf9\u6781\u51e0\u4f55\u548c\u57fa\u672c\u77e9\u9635 2023-10-05 \u00b6 CV & Robot > \u591a\u89c6\u56fe\u51e0\u4f55 > \u5355\u89c6\u56fe\u51e0\u4f55 CV & Robot > \u591a\u89c6\u56fe\u51e0\u4f55 > \u8ba1\u7b97\u6444\u50cf\u673a\u77e9\u9635 P 2023-10-04 \u00b6 CV & Robot > \u591a\u89c6\u56fe\u51e0\u4f55 > \u6444\u50cf\u673a\u6a21\u578b CV & Robot > \u591a\u89c6\u56fe\u51e0\u4f55 > \u7b97\u6cd5\u8bc4\u4ef7\u548c\u8bef\u5dee\u5206\u6790 2023-10-03 \u00b6 CV & Robot > \u591a\u89c6\u56fe\u51e0\u4f55 > \u4f30\u8ba1\u2014\u20142D \u5c04\u5f71\u53d8\u6362 CV & Robot > SLAM > \u89c6\u89c9 SLAM \u5341\u56db\u8bb2 > \u4e09\u7ef4\u7a7a\u95f4\u521a\u4f53\u8fd0\u52a8 2023-09-30 \u00b6 CV & Robot > \u591a\u89c6\u56fe\u51e0\u4f55 > 3D \u5c04\u5f71\u51e0\u4f55\u53d8\u6362 2023-09-17 \u00b6 \u6570\u7406\u57fa\u7840 > \u6700\u4f18\u5316\u7406\u8bba\u4e0e\u65b9\u6cd5 > \u76f4\u7ebf\u641c\u7d22 2023-09-24 \u00b6 CS > \u7f16\u7a0b\u8bed\u8a00 > Python > Numpy 2023-09-22 \u00b6 CS > \u4eba\u5de5\u667a\u80fd > \u673a\u5668\u5b66\u4e60 2023-09-17 \u00b6 CS > \u4eba\u5de5\u667a\u80fd > \u6a21\u5f0f\u8bc6\u522b 2023-09-16 \u00b6 \u6570\u7406\u57fa\u7840 > \u77e9\u9635\u5206\u6790\u4e0e\u5e94\u7528 > \u77e9\u9635\u4ee3\u6570\u57fa\u7840 2023-09-13 \u00b6 CS > \u8f6f\u4ef6\u76f8\u5173 > \u8f6f\u4ef6\u6784\u4ef6\u4e0e\u4f53\u7cfb\u7ed3\u6784 CS > \u8f6f\u4ef6\u76f8\u5173 > COM \u539f\u7406\u4e0e\u5e94\u7528 2023-09-12 \u00b6 CS > \u4eba\u5de5\u667a\u80fd > \u795e\u7ecf\u7f51\u7edc\u4e0e\u6df1\u5ea6\u5b66\u4e60 CS > \u7b97\u6cd5\u76f8\u5173 > \u7b97\u6cd5\u8bbe\u8ba1\u4e0e\u5206\u6790 2023-09-11 \u00b6 \u6570\u7406\u57fa\u7840 > \u6700\u4f18\u5316\u7406\u8bba\u4e0e\u65b9\u6cd5 > \u6700\u4f18\u5316\u95ee\u9898 2023-09-10 \u00b6 Utils > \u7ad9\u70b9\u751f\u6210\u5de5\u5177 > reveal-md 2023-09-09 \u00b6 CS > \u7f16\u7a0b\u8bed\u8a00 > Go > Go \u8bed\u6cd5\u57fa\u7840 2023-09-03 \u00b6 CV & Robot > \u591a\u89c6\u56fe\u51e0\u4f55 > 2D \u5c04\u5f71\u51e0\u4f55\u53d8\u6362 2023-09-01 \u00b6 Utils > \u5de5\u5177\u6536\u96c6 Utils > \u547d\u4ee4\u884c\u5de5\u5177 > Docker \u547d\u4ee4\u76f8\u5173 \u65b0\u589e awesome_git_log \u547d\u4ee4 Utils > \u547d\u4ee4\u884c\u5de5\u5177 > Shell \u547d\u4ee4\u76f8\u5173 2023-08-30 \u00b6 Utils > \u547d\u4ee4\u884c\u5de5\u5177 > gdb \u547d\u4ee4\u76f8\u5173 Utils > \u547d\u4ee4\u884c\u5de5\u5177 > Git \u547d\u4ee4\u76f8\u5173 2023-08-26 \u00b6 init notebook","title":"\u66f4\u65b0\u8bb0\u5f55"},{"location":"changelog/#_1","text":"Abstract PS\uff1a\u8fd9\u4e2a\u529f\u80fd\u5728\u7531 TonyCrane/mkdocs-changelog-plugin \u5f00\u53d1\u3002 .md-typeset h2 { margin-top: 0em; }","title":"\u66f4\u65b0\u8bb0\u5f55"},{"location":"changelog/#2024","text":"2024-1-22 \u00b6 CS > HPC > MPI \u57fa\u7840 2024-1-20 \u00b6 CS > HPC > OpenMP \u57fa\u7840 2024-1-20 \u00b6 LLM > InternLM > OpenCompass \u5927\u6a21\u578b\u8bc4\u6d4b 2024-1-18 \u00b6 LLM > InternLM > LMDeploy \u5927\u6a21\u578b\u91cf\u5316\u90e8\u7f72\u5b9e\u8df5 2024-1-11 \u00b6 LLM > InternLM > XTuner \u5927\u6a21\u578b\u5355\u5361\u4f4e\u6210\u672c\u5fae\u8c03\u5b9e\u6218 2024-1-8 \u00b6 LLM > InternLM > \u57fa\u4e8e InternLM \u548c LangChain \u642d\u5efa\u4f60\u7684\u77e5\u8bc6\u5e93 2024-1-4 \u00b6 LLM > InternLM > \u8f7b\u677e\u5206\u949f\u73a9\u8f6c\u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u8da3\u5473 Demo 2024-1-3 \u00b6 LLM > InternLM > \u4e66\u751f\u00b7\u6d66\u8bed\u5927\u6a21\u578b\u5168\u94fe\u8def\u5f00\u6e90\u5f00\u653e\u4f53\u7cfb","title":"2024"},{"location":"changelog/#2023","text":"2023-12-18 \u00b6 LLM > \u6742\u9879 > \u5206\u5e03\u5f0f\u8bad\u7ec3 2023-12-14 \u00b6 LLM > \u6742\u9879 > Prompt 2023-12-13 \u00b6 LLM > Transformer > BERT 2023-12-10 \u00b6 LLM > Transformer > Transformer 2023-12-09 \u00b6 LLM > Transformer > attention 2023-12-08 \u00b6 LLM > NLP > RNNs 2023-12-07 \u00b6 LLM > NLP > Word2Vec 2023-12-05 \u00b6 CV & Robot > \u70b9\u4e91\u914d\u51c6 > ICP 2023-12-04 \u00b6 CV & Robot > \u70b9\u4e91\u914d\u51c6 > \u524d\u7f6e\u77e5\u8bc6 2023-12-03 \u00b6 CV & Robot > \u4e09\u7ef4\u6570\u636e\u573a\u53ef\u89c6\u5316 2023-10-09 \u00b6 \u6570\u7406\u57fa\u7840 > \u6700\u4f18\u5316\u7406\u8bba\u4e0e\u65b9\u6cd5 > \u65e0\u7ea6\u675f\u6700\u4f18\u5316\u7684\u68af\u5ea6\u65b9\u6cd5 2023-10-06 \u00b6 CV & Robot > \u591a\u89c6\u56fe\u51e0\u4f55 > \u6444\u50cf\u673a\u548c\u7ed3\u6784\u7684 3D \u91cd\u6784 CV & Robot > \u591a\u89c6\u56fe\u51e0\u4f55 > \u5bf9\u6781\u51e0\u4f55\u548c\u57fa\u672c\u77e9\u9635 2023-10-05 \u00b6 CV & Robot > \u591a\u89c6\u56fe\u51e0\u4f55 > \u5355\u89c6\u56fe\u51e0\u4f55 CV & Robot > \u591a\u89c6\u56fe\u51e0\u4f55 > \u8ba1\u7b97\u6444\u50cf\u673a\u77e9\u9635 P 2023-10-04 \u00b6 CV & Robot > \u591a\u89c6\u56fe\u51e0\u4f55 > \u6444\u50cf\u673a\u6a21\u578b CV & Robot > \u591a\u89c6\u56fe\u51e0\u4f55 > \u7b97\u6cd5\u8bc4\u4ef7\u548c\u8bef\u5dee\u5206\u6790 2023-10-03 \u00b6 CV & Robot > \u591a\u89c6\u56fe\u51e0\u4f55 > \u4f30\u8ba1\u2014\u20142D \u5c04\u5f71\u53d8\u6362 CV & Robot > SLAM > \u89c6\u89c9 SLAM \u5341\u56db\u8bb2 > \u4e09\u7ef4\u7a7a\u95f4\u521a\u4f53\u8fd0\u52a8 2023-09-30 \u00b6 CV & Robot > \u591a\u89c6\u56fe\u51e0\u4f55 > 3D \u5c04\u5f71\u51e0\u4f55\u53d8\u6362 2023-09-17 \u00b6 \u6570\u7406\u57fa\u7840 > \u6700\u4f18\u5316\u7406\u8bba\u4e0e\u65b9\u6cd5 > \u76f4\u7ebf\u641c\u7d22 2023-09-24 \u00b6 CS > \u7f16\u7a0b\u8bed\u8a00 > Python > Numpy 2023-09-22 \u00b6 CS > \u4eba\u5de5\u667a\u80fd > \u673a\u5668\u5b66\u4e60 2023-09-17 \u00b6 CS > \u4eba\u5de5\u667a\u80fd > \u6a21\u5f0f\u8bc6\u522b 2023-09-16 \u00b6 \u6570\u7406\u57fa\u7840 > \u77e9\u9635\u5206\u6790\u4e0e\u5e94\u7528 > \u77e9\u9635\u4ee3\u6570\u57fa\u7840 2023-09-13 \u00b6 CS > \u8f6f\u4ef6\u76f8\u5173 > \u8f6f\u4ef6\u6784\u4ef6\u4e0e\u4f53\u7cfb\u7ed3\u6784 CS > \u8f6f\u4ef6\u76f8\u5173 > COM \u539f\u7406\u4e0e\u5e94\u7528 2023-09-12 \u00b6 CS > \u4eba\u5de5\u667a\u80fd > \u795e\u7ecf\u7f51\u7edc\u4e0e\u6df1\u5ea6\u5b66\u4e60 CS > \u7b97\u6cd5\u76f8\u5173 > \u7b97\u6cd5\u8bbe\u8ba1\u4e0e\u5206\u6790 2023-09-11 \u00b6 \u6570\u7406\u57fa\u7840 > \u6700\u4f18\u5316\u7406\u8bba\u4e0e\u65b9\u6cd5 > \u6700\u4f18\u5316\u95ee\u9898 2023-09-10 \u00b6 Utils > \u7ad9\u70b9\u751f\u6210\u5de5\u5177 > reveal-md 2023-09-09 \u00b6 CS > \u7f16\u7a0b\u8bed\u8a00 > Go > Go \u8bed\u6cd5\u57fa\u7840 2023-09-03 \u00b6 CV & Robot > \u591a\u89c6\u56fe\u51e0\u4f55 > 2D \u5c04\u5f71\u51e0\u4f55\u53d8\u6362 2023-09-01 \u00b6 Utils > \u5de5\u5177\u6536\u96c6 Utils > \u547d\u4ee4\u884c\u5de5\u5177 > Docker \u547d\u4ee4\u76f8\u5173 \u65b0\u589e awesome_git_log \u547d\u4ee4 Utils > \u547d\u4ee4\u884c\u5de5\u5177 > Shell \u547d\u4ee4\u76f8\u5173 2023-08-30 \u00b6 Utils > \u547d\u4ee4\u884c\u5de5\u5177 > gdb \u547d\u4ee4\u76f8\u5173 Utils > \u547d\u4ee4\u884c\u5de5\u5177 > Git \u547d\u4ee4\u76f8\u5173 2023-08-26 \u00b6 init notebook","title":"2023"},{"location":"links/","text":"\u53cb\u94fe \u00b6 Abstract \u4e00\u4e9b\u670b\u53cb\u4eec\u7684\u7b14\u8bb0\u672c\uff01 \u9e64\u7fd4\u4e07\u91cc\u7684\u7b14\u8bb0\u672c \u975e\u5e38\u5389\u5bb3\u7684\uff08\u6d59\u5927\uff09\u5927\u4f6c","title":"\u53cb\u94fe"},{"location":"links/#_1","text":"Abstract \u4e00\u4e9b\u670b\u53cb\u4eec\u7684\u7b14\u8bb0\u672c\uff01 \u9e64\u7fd4\u4e07\u91cc\u7684\u7b14\u8bb0\u672c \u975e\u5e38\u5389\u5bb3\u7684\uff08\u6d59\u5927\uff09\u5927\u4f6c","title":"\u53cb\u94fe"},{"location":"todo/","text":"\u4ee3\u529e\u4e8b\u9879 \u00b6 \u7b14\u8bb0\u7c7b \u00b6 cs pl x86 \u6c47\u7f16\u8bed\u8a00 C++ CMake \u57fa\u7840 Python Numpy \u79d1\u5b66\u8ba1\u7b97\u5e93 HPC \u5411\u91cf\u5316\u8ba1\u7b97 GPU \u7f16\u7a0b MPI \u57fa\u7840 OpenMP \u57fa\u7840 Taichi \u57fa\u7840 CV OpenCV mvg slam sfm ros paper","title":"\u4ee3\u529e\u4e8b\u9879"},{"location":"todo/#_1","text":"","title":"\u4ee3\u529e\u4e8b\u9879"},{"location":"todo/#_2","text":"cs pl x86 \u6c47\u7f16\u8bed\u8a00 C++ CMake \u57fa\u7840 Python Numpy \u79d1\u5b66\u8ba1\u7b97\u5e93 HPC \u5411\u91cf\u5316\u8ba1\u7b97 GPU \u7f16\u7a0b MPI \u57fa\u7840 OpenMP \u57fa\u7840 Taichi \u57fa\u7840 CV OpenCV mvg slam sfm ros paper","title":"\u7b14\u8bb0\u7c7b"},{"location":"cs/","text":"Computer Science \u00b6 Abstract \u8fd9\u91cc\u662f\u8ba1\u7b97\u673a\u79d1\u5b66\u76f8\u5173\u5185\u5bb9\u7684\u7b14\u8bb0 Table of Contents \u00b6 \u7f16\u7a0b\u8bed\u8a00 C/C++ 13673 123 46 mins 1696750316 Java 3624 196 15 mins 1696750316 Python 8344 379 33 mins 1695693389 Go 3109 158 12 mins 1693968663 \u7b97\u6cd5\u76f8\u5173 \u7b97\u6cd5\u8bbe\u8ba1\u4e0e\u5206\u6790 880 4 3 mins 1694529146 \u57fa\u7840\u6570\u636e\u7ed3\u6784 0 0 mins 1694405747 \u4eba\u5de5\u667a\u80fd\u57fa\u7840 \u795e\u7ecf\u7f51\u7edc\u4e0e\u6df1\u5ea6\u5b66\u4e60 1192 4 mins 1698116017 \u673a\u5668\u5b66\u4e60 3054 4 10 mins 1697810855 \u6a21\u5f0f\u8bc6\u522b 3657 12 mins 1697363454 \u9ad8\u6027\u80fd\u8ba1\u7b97 MPI \u57fa\u7840 2268 196 10 mins 1705904815 OpenMP \u57fa\u7840 1767 38 6 mins 1705758864 \u6982\u8bba 568 24 2 mins 1695215167 \u5411\u91cf\u5316\u8ba1\u7b97 5 0 mins 1695215167 GPU \u7f16\u7a0b 3 0 mins 1695215167 \u8f6f\u4ef6\u76f8\u5173 COM \u539f\u7406\u4e0e\u5e94\u7528 1112 4 mins 1697007017 \u8f6f\u4ef6\u6784\u4ef6\u4e0e\u4f53\u7cfb\u7ed3\u6784 5148 17 mins 1696920634 \u8bbe\u8ba1\u6a21\u5f0f 2116 496 13 mins 1695204141 \u5e94\u7528\u670d\u52a1\u5668\u539f\u7406\u4e0e\u5b9e\u73b0 0 0 mins 1695089803 \u6570\u636e\u5e93 MySQL 5224 14 18 mins 1694949283 Redis 1787 102 7 mins 1694949283 \u6742\u9879 RegEx \u6b63\u5219\u8868\u8fbe\u5f0f 2402 4 8 mins 1694699468 function buttonHandler(i) { let content = document.getElementsByClassName(\"content-item-wrapper\")[i]; let button = document.getElementsByClassName(\"title-wrapper\")[i].getElementsByTagName(\"button\")[0]; if (content.style.display == \"none\") { content.style.display = \"block\"; button.children[0].children[0].style.transform = \"rotate(0deg)\"; } else { content.style.display = \"none\"; button.children[0].children[0].style.transform = \"rotate(-90deg)\"; } } function produce_time() { let time = document.getElementsByClassName(\"item-actions\"); for (let i = 0; i < time.length; i++) { let timestamp; if (time[i].childElementCount > 0) { timestamp = time[i].children[0].innerHTML; } else { timestamp = time[i].innerHTML; } let date = new Date(parseInt(timestamp) * 1000); let now = new Date(); let diff = now.getTime() - date.getTime(); let years = Math.floor(diff / (24 * 3600 * 1000 * 365)); let months = Math.floor(diff / (24 * 3600 * 1000 * 30)); let days = Math.floor(diff / (24 * 3600 * 1000)); let hours = Math.floor((diff % (24 * 3600 * 1000)) / (3600 * 1000)); let minutes = Math.floor((diff % (3600 * 1000)) / (60 * 1000)); let seconds = Math.floor((diff % (60 * 1000)) / 1000); if (years > 0) { time[i].innerHTML = years + \" years ago\"; } else if (months > 0) { time[i].innerHTML = months + \" months ago\"; } else if (days > 0) { time[i].innerHTML = days + \" days ago\"; } else if (hours > 0) { time[i].innerHTML = hours + \" hours ago\"; } else if (minutes > 0) { time[i].innerHTML = minutes + \" minutes ago\"; } else { time[i].innerHTML = seconds + \" seconds ago\"; } } } produce_time();","title":"Computer Science"},{"location":"cs/#computer-science","text":"Abstract \u8fd9\u91cc\u662f\u8ba1\u7b97\u673a\u79d1\u5b66\u76f8\u5173\u5185\u5bb9\u7684\u7b14\u8bb0","title":"Computer Science"},{"location":"cs/#table-of-contents","text":"\u7f16\u7a0b\u8bed\u8a00 C/C++ 13673 123 46 mins 1696750316 Java 3624 196 15 mins 1696750316 Python 8344 379 33 mins 1695693389 Go 3109 158 12 mins 1693968663 \u7b97\u6cd5\u76f8\u5173 \u7b97\u6cd5\u8bbe\u8ba1\u4e0e\u5206\u6790 880 4 3 mins 1694529146 \u57fa\u7840\u6570\u636e\u7ed3\u6784 0 0 mins 1694405747 \u4eba\u5de5\u667a\u80fd\u57fa\u7840 \u795e\u7ecf\u7f51\u7edc\u4e0e\u6df1\u5ea6\u5b66\u4e60 1192 4 mins 1698116017 \u673a\u5668\u5b66\u4e60 3054 4 10 mins 1697810855 \u6a21\u5f0f\u8bc6\u522b 3657 12 mins 1697363454 \u9ad8\u6027\u80fd\u8ba1\u7b97 MPI \u57fa\u7840 2268 196 10 mins 1705904815 OpenMP \u57fa\u7840 1767 38 6 mins 1705758864 \u6982\u8bba 568 24 2 mins 1695215167 \u5411\u91cf\u5316\u8ba1\u7b97 5 0 mins 1695215167 GPU \u7f16\u7a0b 3 0 mins 1695215167 \u8f6f\u4ef6\u76f8\u5173 COM \u539f\u7406\u4e0e\u5e94\u7528 1112 4 mins 1697007017 \u8f6f\u4ef6\u6784\u4ef6\u4e0e\u4f53\u7cfb\u7ed3\u6784 5148 17 mins 1696920634 \u8bbe\u8ba1\u6a21\u5f0f 2116 496 13 mins 1695204141 \u5e94\u7528\u670d\u52a1\u5668\u539f\u7406\u4e0e\u5b9e\u73b0 0 0 mins 1695089803 \u6570\u636e\u5e93 MySQL 5224 14 18 mins 1694949283 Redis 1787 102 7 mins 1694949283 \u6742\u9879 RegEx \u6b63\u5219\u8868\u8fbe\u5f0f 2402 4 8 mins 1694699468 function buttonHandler(i) { let content = document.getElementsByClassName(\"content-item-wrapper\")[i]; let button = document.getElementsByClassName(\"title-wrapper\")[i].getElementsByTagName(\"button\")[0]; if (content.style.display == \"none\") { content.style.display = \"block\"; button.children[0].children[0].style.transform = \"rotate(0deg)\"; } else { content.style.display = \"none\"; button.children[0].children[0].style.transform = \"rotate(-90deg)\"; } } function produce_time() { let time = document.getElementsByClassName(\"item-actions\"); for (let i = 0; i < time.length; i++) { let timestamp; if (time[i].childElementCount > 0) { timestamp = time[i].children[0].innerHTML; } else { timestamp = time[i].innerHTML; } let date = new Date(parseInt(timestamp) * 1000); let now = new Date(); let diff = now.getTime() - date.getTime(); let years = Math.floor(diff / (24 * 3600 * 1000 * 365)); let months = Math.floor(diff / (24 * 3600 * 1000 * 30)); let days = Math.floor(diff / (24 * 3600 * 1000)); let hours = Math.floor((diff % (24 * 3600 * 1000)) / (3600 * 1000)); let minutes = Math.floor((diff % (3600 * 1000)) / (60 * 1000)); let seconds = Math.floor((diff % (60 * 1000)) / 1000); if (years > 0) { time[i].innerHTML = years + \" years ago\"; } else if (months > 0) { time[i].innerHTML = months + \" months ago\"; } else if (days > 0) { time[i].innerHTML = days + \" days ago\"; } else if (hours > 0) { time[i].innerHTML = hours + \" hours ago\"; } else if (minutes > 0) { time[i].innerHTML = minutes + \" minutes ago\"; } else { time[i].innerHTML = seconds + \" seconds ago\"; } } } produce_time();","title":"Table of Contents"},{"location":"cs/ai/dl/","text":"\u795e\u7ecf\u7f51\u7edc\u4e0e\u6df1\u5ea6\u5b66\u4e60 \u00b6 \u7ea6 1188 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \u5206\u949f Abstract \u5b66\u4e60\u81ea \u90b1\u9521\u9e4f\u8001\u5e08 \u7684\u795e\u7ecf\u7f51\u7edc\u4e0e\u6df1\u5ea6\u5b66\u4e60\uff0c\u5f52\u6863\u4e00\u4e9b\u5b66\u4e60\u7b14\u8bb0\u3002 \u6982\u8ff0 \u00b6 \u795e\u7ecf\u7f51\u7edc\u4e0e\u6df1\u5ea6\u5b66\u4e60\u662f\u4eba\u5de5\u667a\u80fd\u7684\u4e00\u4e2a\u5b50\u9886\u57df \u795e\u7ecf\u7f51\u7edc\uff1a\u4e00\u79cd\u4ee5\uff08\u4eba\u5de5\uff09\u795e\u7ecf\u5143\u4e3a\u57fa\u672c\u5355\u5143\u7684\u6a21\u578b \u6df1\u5ea6\u5b66\u4e60\uff1a\u4e00\u7c7b\u673a\u5668\u5b66\u4e60\u95ee\u9898\uff0c\u4e3b\u8981\u89e3\u51b3\u8d21\u732e\u5ea6\u5206\u914d\u95ee\u9898\u3002 \u4eba\u5de5\u795e\u7ecf\u7f51\u7edc \u00b6 \u4eba\u5de5\u795e\u7ecf\u7f51\u7edc\u4e3b\u8981\u7531\u5927\u91cf\u7684\u795e\u7ecf\u5143\u4ee5\u53ca\u5b83\u4eec\u4e4b\u95f4\u7684\u6709\u5411\u8fde\u63a5\u6784\u6210\u3002\u56e0\u6b64\u8003\u8651\u4e09\u65b9\u9762 \u795e\u7ecf\u5143\u7684\u6fc0\u6d3b\u89c4\u5219 \uff1a\u4e3b\u8981\u662f\u6307\u795e\u7ecf\u5143\u8f93\u5165\u5230\u8f93\u51fa\u4e4b\u95f4\u7684\u6620\u5c04\u5173\u7cfb\uff0c\u4e00\u822c\u4e3a\u975e\u7ebf\u6027\u51fd\u6570 \u7f51\u7edc\u7684\u62d3\u6251\u7ed3\u6784 \uff1a\u4e0d\u540c\u795e\u7ecf\u5143\u4e4b\u95f4\u7684\u94fe\u63a5\u5173\u7cfb \u5b66\u4e60\u7b97\u6cd5 \uff1a\u901a\u8fc7\u8bad\u7ec3\u6570\u636e\u6765\u5b66\u4e60\u795e\u7ecf\u7f51\u7edc\u7684\u53c2\u6570 \u4eba\u5de5\u795e\u7ecf\u7f51\u7edc\u7531\u795e\u7ecf\u5143\u6a21\u578b\u6784\u6210\uff0c\u8fd9\u79cd\u7531\u8bb8\u591a\u795e\u7ecf\u5143\u7ec4\u6210\u7684\u4fe1\u606f\u5904\u7406\u7f51\u7edc\u5177\u6709\u5e76\u884c\u5206\u5e03\u7ed3\u6784 \u524d\u9988\u795e\u7ecf\u7f51\u7edc \u00b6 \u7f51\u7edc\u7ed3\u6784 \u00b6 \u5728\u524d\u9988\u795e\u7ecf\u7f51\u7edc\u4e2d\uff0c\u5404\u795e\u7ecf\u5143\u5206\u522b\u5c5e\u4e8e\u4e0d\u540c\u7684\u5c42\u3002\u6574\u4e2a\u7f51\u7edc\u4e2d\u65e0\u53cd\u9988\uff0c\u4fe1\u53f7\u4ece\u8f93\u5165\u5c42\u5411\u8f93\u51fa\u5c42\u5355\u5411\u4f20\u64ad\uff0c\u53ef\u7528\u4e00\u4e2a\u6709\u5411\u65e0\u73af\u56fe\u8868\u793a \u901a\u7528\u8fd1\u4f3c\u5b9a\u7406 \u00b6 \u5bf9\u4e8e\u5177\u6709 \u7ebf\u6027\u8f93\u51fa\u5c42 \u548c\u81f3\u5c11\u4e00\u4e2a\u4f7f\u7528\u201d\u6324\u538b\u201c\u6027\u8d28\u7684\u6fc0\u6d3b\u51fd\u6570\u7684\u9690\u85cf\u5c42\u7ec4\u6210\u7684\u524d\u9988\u795e\u7ecf\u7f51\u7edc\u3002\u53ea\u8981\u5176\u9690\u85cf\u5c42\u795e\u7ecf\u5143\u7684\u6570\u91cf\u8db3\u591f\uff0c\u5b83\u53ef\u4ee5\u4ee5 \u4efb\u610f\u7cbe\u5ea6 \u6765\u8fd1\u4f3c\u4efb\u4f55\u4ece\u4e00\u4e2a\u5b9a\u4e49\u5728 \u5b9e\u6570\u7a7a\u95f4 \u4e2d\u7684 \u6709\u754c\u95ed\u96c6\u51fd\u6570 \u5e94\u7528\u5230\u673a\u5668\u5b66\u4e60 \u00b6 \u6a21\u578b\uff1a \\(y=f^5(f^4(f^3(f^2(f^1(x)))))\\) \u5b66\u4e60\u51c6\u5219\uff1a \\(L(y,y^*)\\) \u4f18\u5316\uff08\u68af\u5ea6\u4e0b\u964d\uff09\uff1a \\(\\frac{\\partial L(y,y^*)}{\\partial f^1} = \\frac{\\partial f^2}{\\partial f^1} \\times \\frac{\\partial f^3}{\\partial f^2} \\times \\frac{\\partial f^4}{\\partial f^3} \\times \\frac{\\partial f^5}{\\partial f^4} \\times \\frac{\\partial L(y,y^*)}{\\partial f^5}\\) \u8ba1\u7b97\u56fe\u4e0e\u81ea\u52a8\u5fae\u5206 \u00b6 \u590d\u5408\u51fd\u6570 \\(f(x;w,b)=\\sigma(wx+b)\\) \u7684\u8ba1\u7b97\u56fe \u94fe\u5f0f\u6cd5\u5219\uff1a \\(\\frac{\\partial f(x;w,b)}{\\partial w}=\\frac{\\partial f(x;w,b)}{\\partial h_6} \\frac{\\partial h_6}{\\partial h_5} \\frac{\\partial h_5}{\\partial h_4} \\frac{\\partial h_4}{\\partial h_3} \\frac{\\partial h_3}{\\partial h_2} \\frac{\\partial h_2}{\\partial h_1} \\frac{\\partial h_1}{\\partial w}\\) \u53cd\u5411\u4f20\u64ad\u7b97\u6cd5\u53ea\u662f\u81ea\u52a8\u5fae\u5206\u7684\u4e00\u79cd\u7279\u6b8a\u5f62\u5f0f \u4f18\u5316\u95ee\u9898 \u00b6 \u975e\u51f8\u4f18\u5316\u95ee\u9898 \uff1a \\(y=\\sigma(w \\ 2 \\ \\sigma(w \\ 1 \\ x))\\) \u7684\u635f\u5931\u51fd\u6570 \u68af\u5ea6\u6d88\u5931\u95ee\u9898 \uff1a\u5728\u6bcf\u4e00\u5c42\u90fd\u8981\u4e58\u4ee5\u8be5\u5c42\u7684\u6fc0\u6d3b\u51fd\u6570\u7684\u5bfc\u6570 \u6fc0\u6d3b\u51fd\u6570 \u00b6 \u6709\u6548\u51cf\u8f7b\u68af\u5ea6\u6d88\u5931\u95ee\u9898 \u5377\u79ef\u795e\u7ecf\u7f51\u7edc \u00b6 \u5377\u79ef \u00b6 \u5377\u79ef\u7ecf\u5e38\u7528\u5728\u4fe1\u53f7\u5904\u7406\u4e2d\uff0c\u7528\u4e8e\u8ba1\u7b97\u4fe1\u53f7\u7684\u5ef6\u8fdf\u7d2f\u79ef \u5047\u8bbe\u4e00\u4e2a\u4fe1\u53f7\u53d1\u751f\u5668\u6bcf\u4e2a\u65f6\u523b t \u4ea7\u751f\u4e00\u4e2a\u4fe1\u53f7 \\(x_t\\) \uff0c\u5176\u4fe1\u53f7\u7684\u8870\u51cf\u7387\u4e3a \\(w_k\\) \uff0c\u5373\u5728 k-1 \u4e2a\u65f6\u95f4\u6b65\u957f\u540e\uff0c\u4fe1\u606f\u4e3a\u539f\u6765\u7684 \\(w_k\\) \u500d\uff0c\u5047\u8bbe \\(w_1=1,w_2=1/2,w_3=1/4\\) \u65f6\u523b t \u6536\u5230\u7684\u4fe1\u53f7 \\(y_t\\) \u4e3a\u5f53\u524d\u65f6\u523b\u4ea7\u751f\u7684\u4fe1\u606f\u548c\u4ee5\u524d\u65f6\u523b\u5ef6\u8fdf\u4fe1\u606f\u7684\u53e0\u52a0 \u5373 \\(y_t=w_1 \\times x_t+w_2 \\times x_{t-1}+w_3 \\times x_{t-2}=\\sum_{k=1}^3w_k \\cdot x_{t-k+1}\\) \uff0c \\(y_t\\) \u79f0\u4e3a\u6ee4\u6ce2\u5668\u6216\u5377\u79ef\u6838 \u4e00\u7ef4\u5377\u79ef \u00b6 \u4e8c\u4f4d\u5377\u79ef \u00b6 \u4f5c\u7528 \u00b6 \u5377\u79ef\u4f5c\u4e3a\u7279\u5f81\u63d0\u53d6\u5668 \u5377\u79ef\u4ee3\u66ff\u5168\u8fde\u63a5 \u53ef\u4ee5\u5f15\u5165\u591a\u7ec4\u6ee4\u6ce2\u5668 \u5377\u79ef\u5c42 \u5178\u578b\u7684\u5377\u79ef\u5c42\u4e3a 3 \u7ef4\u7ed3\u6784 \u6c47\u805a\u5c42 \u5377\u79ef\u5c42\u867d\u7136\u53ef\u4ee5\u663e\u8457\u51cf\u5c11\u8fde\u63a5\u7684\u4e2a\u6570\uff0c\u4f46\u662f\u6bcf\u4e00\u4e2a\u7279\u5f81\u6620\u5c04\u7684\u795e\u7ecf\u5143\u4e2a\u6570\u5e76\u6ca1\u6709\u663e\u8457\u51cf\u5c11 \u5377\u79ef\u7f51\u7edc\u7ed3\u6784 \u00b6 \u5377\u79ef\u7f51\u7edc\u662f\u7531\u5377\u79ef\u5c42\u3001\u5b50\u91c7\u6837\u5c42\u3001\u5168\u8fde\u63a5\u5c42\u4ea4\u53c9\u5806\u53e0\u800c\u6210 \u8d8b\u5411\u4e8e\u5c0f\u5377\u79ef\u3001\u5927\u6df1\u5ea6 \u8d8b\u5411\u4e8e\u5168\u5377\u79ef \u4e00\u4e2a\u5377\u79ef\u5757\u4e3a\u8fde\u7eed\u4e2a M \u4e2a\u5377\u79ef\u5c42\u548c b \u4e2a\u6c47\u805a\u5c42\uff08M \u901a\u5e38\u8bbe\u7f6e\u4e3a 2-5\uff0cb \u4e3a 0 \u6216 1\uff09\u3002\u4e00\u4e2a\u5377\u79ef\u7f51\u7edc\u4e2d\u53ef\u4ee5\u5806\u53e0 N \u4e2a\u8fde\u7eed\u7684\u5377\u79ef\u5757\uff0c\u7136\u540e\u5728\u63a5\u7740 K \u4e2a\u5168\u8fde\u63a5\u5c42\uff08N \u7684\u53d6\u503c\u533a\u95f4\u6bd4\u8f83\u5927\uff0c\u6bd4\u5982 1-100 \u6216\u8005\u66f4\u5927\uff1bK \u4e00\u822c\u4e3a 0-2\uff09 \u8f6c\u7f6e\u5377\u79ef/\u5fae\u6b65\u5377\u79ef \u00b6 \u4f4e\u7ef4\u7279\u5f81\u6620\u5c04\u5230\u9ad8\u7ef4\u7279\u5f81 \u7a7a\u6d1e\u5377\u79ef \u00b6 \u5982\u4f55\u589e\u52a0\u8f93\u51fa\u5355\u4f4d\u7684\u611f\u53d7\u91ce \u589e\u52a0\u5377\u79ef\u6838\u7684\u5927\u5c0f \u589e\u52a0\u5c42\u6570\u6765\u5b9e\u73b0 \u5728\u5377\u79ef\u4e4b\u524d\u8fdb\u884c\u6c47\u805a\u64cd\u4f5c \u7a7a\u6d1e\u5377\u79ef\u901a\u8fc7\u7ed9\u5377\u79ef\u6838\u63d2\u5165\u201c\u7a7a\u6d1e\u201d\u6765\u53d8\u76f8\u5730\u589e\u52a0\u5176\u5927\u5c0f \u7b80\u5355\u7684\u6b8b\u5dee\u5355\u5143\u7ed3\u6784 \u00b6 \\[ h(\\mathbf{x})=\\mathbf{x}+(h(\\mathbf{x})-\\mathbf{x}) \\\\ \\mathbf{x} \u4e3a\u6052\u7b49\u51fd\u6570\uff0ch(\\mathbf{x})-\\mathbf{x} \u4e3a\u6b8b\u5dee\u51fd\u6570 f(\\mathbf{x}, \\theta) \\] \u5e94\u7528 \u00b6 AlphaGo Mask RCNN \u56fe\u50cf\u751f\u6210 Deep Dream \u753b\u98ce\u8fc1\u79fb \u5bf9\u6297\u6837\u672c Reference \u00b6 \u90b1\u9521\u9e4f,\u795e\u7ecf\u7f51\u7edc\u4e0e\u6df1\u5ea6\u5b66\u4e60,\u673a\u68b0\u5de5\u4e1a\u51fa\u7248\u793e, 2020\uff0cISBN 9787111649687 \u963f\u65af\u987f\u00b7\u5f20\u7b49,\u52a8\u624b\u5b66\u6df1\u5ea6\u5b66\u4e60, ISBN: 9787115505835","title":"\u795e\u7ecf\u7f51\u7edc\u4e0e\u6df1\u5ea6\u5b66\u4e60"},{"location":"cs/ai/dl/#_1","text":"\u7ea6 1188 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \u5206\u949f Abstract \u5b66\u4e60\u81ea \u90b1\u9521\u9e4f\u8001\u5e08 \u7684\u795e\u7ecf\u7f51\u7edc\u4e0e\u6df1\u5ea6\u5b66\u4e60\uff0c\u5f52\u6863\u4e00\u4e9b\u5b66\u4e60\u7b14\u8bb0\u3002","title":"\u795e\u7ecf\u7f51\u7edc\u4e0e\u6df1\u5ea6\u5b66\u4e60"},{"location":"cs/ai/dl/#_2","text":"\u795e\u7ecf\u7f51\u7edc\u4e0e\u6df1\u5ea6\u5b66\u4e60\u662f\u4eba\u5de5\u667a\u80fd\u7684\u4e00\u4e2a\u5b50\u9886\u57df \u795e\u7ecf\u7f51\u7edc\uff1a\u4e00\u79cd\u4ee5\uff08\u4eba\u5de5\uff09\u795e\u7ecf\u5143\u4e3a\u57fa\u672c\u5355\u5143\u7684\u6a21\u578b \u6df1\u5ea6\u5b66\u4e60\uff1a\u4e00\u7c7b\u673a\u5668\u5b66\u4e60\u95ee\u9898\uff0c\u4e3b\u8981\u89e3\u51b3\u8d21\u732e\u5ea6\u5206\u914d\u95ee\u9898\u3002","title":"\u6982\u8ff0"},{"location":"cs/ai/dl/#_3","text":"\u4eba\u5de5\u795e\u7ecf\u7f51\u7edc\u4e3b\u8981\u7531\u5927\u91cf\u7684\u795e\u7ecf\u5143\u4ee5\u53ca\u5b83\u4eec\u4e4b\u95f4\u7684\u6709\u5411\u8fde\u63a5\u6784\u6210\u3002\u56e0\u6b64\u8003\u8651\u4e09\u65b9\u9762 \u795e\u7ecf\u5143\u7684\u6fc0\u6d3b\u89c4\u5219 \uff1a\u4e3b\u8981\u662f\u6307\u795e\u7ecf\u5143\u8f93\u5165\u5230\u8f93\u51fa\u4e4b\u95f4\u7684\u6620\u5c04\u5173\u7cfb\uff0c\u4e00\u822c\u4e3a\u975e\u7ebf\u6027\u51fd\u6570 \u7f51\u7edc\u7684\u62d3\u6251\u7ed3\u6784 \uff1a\u4e0d\u540c\u795e\u7ecf\u5143\u4e4b\u95f4\u7684\u94fe\u63a5\u5173\u7cfb \u5b66\u4e60\u7b97\u6cd5 \uff1a\u901a\u8fc7\u8bad\u7ec3\u6570\u636e\u6765\u5b66\u4e60\u795e\u7ecf\u7f51\u7edc\u7684\u53c2\u6570 \u4eba\u5de5\u795e\u7ecf\u7f51\u7edc\u7531\u795e\u7ecf\u5143\u6a21\u578b\u6784\u6210\uff0c\u8fd9\u79cd\u7531\u8bb8\u591a\u795e\u7ecf\u5143\u7ec4\u6210\u7684\u4fe1\u606f\u5904\u7406\u7f51\u7edc\u5177\u6709\u5e76\u884c\u5206\u5e03\u7ed3\u6784","title":"\u4eba\u5de5\u795e\u7ecf\u7f51\u7edc"},{"location":"cs/ai/dl/#_4","text":"","title":"\u524d\u9988\u795e\u7ecf\u7f51\u7edc"},{"location":"cs/ai/dl/#_5","text":"\u5728\u524d\u9988\u795e\u7ecf\u7f51\u7edc\u4e2d\uff0c\u5404\u795e\u7ecf\u5143\u5206\u522b\u5c5e\u4e8e\u4e0d\u540c\u7684\u5c42\u3002\u6574\u4e2a\u7f51\u7edc\u4e2d\u65e0\u53cd\u9988\uff0c\u4fe1\u53f7\u4ece\u8f93\u5165\u5c42\u5411\u8f93\u51fa\u5c42\u5355\u5411\u4f20\u64ad\uff0c\u53ef\u7528\u4e00\u4e2a\u6709\u5411\u65e0\u73af\u56fe\u8868\u793a","title":"\u7f51\u7edc\u7ed3\u6784"},{"location":"cs/ai/dl/#_6","text":"\u5bf9\u4e8e\u5177\u6709 \u7ebf\u6027\u8f93\u51fa\u5c42 \u548c\u81f3\u5c11\u4e00\u4e2a\u4f7f\u7528\u201d\u6324\u538b\u201c\u6027\u8d28\u7684\u6fc0\u6d3b\u51fd\u6570\u7684\u9690\u85cf\u5c42\u7ec4\u6210\u7684\u524d\u9988\u795e\u7ecf\u7f51\u7edc\u3002\u53ea\u8981\u5176\u9690\u85cf\u5c42\u795e\u7ecf\u5143\u7684\u6570\u91cf\u8db3\u591f\uff0c\u5b83\u53ef\u4ee5\u4ee5 \u4efb\u610f\u7cbe\u5ea6 \u6765\u8fd1\u4f3c\u4efb\u4f55\u4ece\u4e00\u4e2a\u5b9a\u4e49\u5728 \u5b9e\u6570\u7a7a\u95f4 \u4e2d\u7684 \u6709\u754c\u95ed\u96c6\u51fd\u6570","title":"\u901a\u7528\u8fd1\u4f3c\u5b9a\u7406"},{"location":"cs/ai/dl/#_7","text":"\u6a21\u578b\uff1a \\(y=f^5(f^4(f^3(f^2(f^1(x)))))\\) \u5b66\u4e60\u51c6\u5219\uff1a \\(L(y,y^*)\\) \u4f18\u5316\uff08\u68af\u5ea6\u4e0b\u964d\uff09\uff1a \\(\\frac{\\partial L(y,y^*)}{\\partial f^1} = \\frac{\\partial f^2}{\\partial f^1} \\times \\frac{\\partial f^3}{\\partial f^2} \\times \\frac{\\partial f^4}{\\partial f^3} \\times \\frac{\\partial f^5}{\\partial f^4} \\times \\frac{\\partial L(y,y^*)}{\\partial f^5}\\)","title":"\u5e94\u7528\u5230\u673a\u5668\u5b66\u4e60"},{"location":"cs/ai/dl/#_8","text":"\u590d\u5408\u51fd\u6570 \\(f(x;w,b)=\\sigma(wx+b)\\) \u7684\u8ba1\u7b97\u56fe \u94fe\u5f0f\u6cd5\u5219\uff1a \\(\\frac{\\partial f(x;w,b)}{\\partial w}=\\frac{\\partial f(x;w,b)}{\\partial h_6} \\frac{\\partial h_6}{\\partial h_5} \\frac{\\partial h_5}{\\partial h_4} \\frac{\\partial h_4}{\\partial h_3} \\frac{\\partial h_3}{\\partial h_2} \\frac{\\partial h_2}{\\partial h_1} \\frac{\\partial h_1}{\\partial w}\\) \u53cd\u5411\u4f20\u64ad\u7b97\u6cd5\u53ea\u662f\u81ea\u52a8\u5fae\u5206\u7684\u4e00\u79cd\u7279\u6b8a\u5f62\u5f0f","title":"\u8ba1\u7b97\u56fe\u4e0e\u81ea\u52a8\u5fae\u5206"},{"location":"cs/ai/dl/#_9","text":"\u975e\u51f8\u4f18\u5316\u95ee\u9898 \uff1a \\(y=\\sigma(w \\ 2 \\ \\sigma(w \\ 1 \\ x))\\) \u7684\u635f\u5931\u51fd\u6570 \u68af\u5ea6\u6d88\u5931\u95ee\u9898 \uff1a\u5728\u6bcf\u4e00\u5c42\u90fd\u8981\u4e58\u4ee5\u8be5\u5c42\u7684\u6fc0\u6d3b\u51fd\u6570\u7684\u5bfc\u6570","title":"\u4f18\u5316\u95ee\u9898"},{"location":"cs/ai/dl/#_10","text":"\u6709\u6548\u51cf\u8f7b\u68af\u5ea6\u6d88\u5931\u95ee\u9898","title":"\u6fc0\u6d3b\u51fd\u6570"},{"location":"cs/ai/dl/#_11","text":"","title":"\u5377\u79ef\u795e\u7ecf\u7f51\u7edc"},{"location":"cs/ai/dl/#_12","text":"\u5377\u79ef\u7ecf\u5e38\u7528\u5728\u4fe1\u53f7\u5904\u7406\u4e2d\uff0c\u7528\u4e8e\u8ba1\u7b97\u4fe1\u53f7\u7684\u5ef6\u8fdf\u7d2f\u79ef \u5047\u8bbe\u4e00\u4e2a\u4fe1\u53f7\u53d1\u751f\u5668\u6bcf\u4e2a\u65f6\u523b t \u4ea7\u751f\u4e00\u4e2a\u4fe1\u53f7 \\(x_t\\) \uff0c\u5176\u4fe1\u53f7\u7684\u8870\u51cf\u7387\u4e3a \\(w_k\\) \uff0c\u5373\u5728 k-1 \u4e2a\u65f6\u95f4\u6b65\u957f\u540e\uff0c\u4fe1\u606f\u4e3a\u539f\u6765\u7684 \\(w_k\\) \u500d\uff0c\u5047\u8bbe \\(w_1=1,w_2=1/2,w_3=1/4\\) \u65f6\u523b t \u6536\u5230\u7684\u4fe1\u53f7 \\(y_t\\) \u4e3a\u5f53\u524d\u65f6\u523b\u4ea7\u751f\u7684\u4fe1\u606f\u548c\u4ee5\u524d\u65f6\u523b\u5ef6\u8fdf\u4fe1\u606f\u7684\u53e0\u52a0 \u5373 \\(y_t=w_1 \\times x_t+w_2 \\times x_{t-1}+w_3 \\times x_{t-2}=\\sum_{k=1}^3w_k \\cdot x_{t-k+1}\\) \uff0c \\(y_t\\) \u79f0\u4e3a\u6ee4\u6ce2\u5668\u6216\u5377\u79ef\u6838","title":"\u5377\u79ef"},{"location":"cs/ai/dl/#_13","text":"","title":"\u4e00\u7ef4\u5377\u79ef"},{"location":"cs/ai/dl/#_14","text":"","title":"\u4e8c\u4f4d\u5377\u79ef"},{"location":"cs/ai/dl/#_15","text":"\u5377\u79ef\u4f5c\u4e3a\u7279\u5f81\u63d0\u53d6\u5668 \u5377\u79ef\u4ee3\u66ff\u5168\u8fde\u63a5 \u53ef\u4ee5\u5f15\u5165\u591a\u7ec4\u6ee4\u6ce2\u5668 \u5377\u79ef\u5c42 \u5178\u578b\u7684\u5377\u79ef\u5c42\u4e3a 3 \u7ef4\u7ed3\u6784 \u6c47\u805a\u5c42 \u5377\u79ef\u5c42\u867d\u7136\u53ef\u4ee5\u663e\u8457\u51cf\u5c11\u8fde\u63a5\u7684\u4e2a\u6570\uff0c\u4f46\u662f\u6bcf\u4e00\u4e2a\u7279\u5f81\u6620\u5c04\u7684\u795e\u7ecf\u5143\u4e2a\u6570\u5e76\u6ca1\u6709\u663e\u8457\u51cf\u5c11","title":"\u4f5c\u7528"},{"location":"cs/ai/dl/#_16","text":"\u5377\u79ef\u7f51\u7edc\u662f\u7531\u5377\u79ef\u5c42\u3001\u5b50\u91c7\u6837\u5c42\u3001\u5168\u8fde\u63a5\u5c42\u4ea4\u53c9\u5806\u53e0\u800c\u6210 \u8d8b\u5411\u4e8e\u5c0f\u5377\u79ef\u3001\u5927\u6df1\u5ea6 \u8d8b\u5411\u4e8e\u5168\u5377\u79ef \u4e00\u4e2a\u5377\u79ef\u5757\u4e3a\u8fde\u7eed\u4e2a M \u4e2a\u5377\u79ef\u5c42\u548c b \u4e2a\u6c47\u805a\u5c42\uff08M \u901a\u5e38\u8bbe\u7f6e\u4e3a 2-5\uff0cb \u4e3a 0 \u6216 1\uff09\u3002\u4e00\u4e2a\u5377\u79ef\u7f51\u7edc\u4e2d\u53ef\u4ee5\u5806\u53e0 N \u4e2a\u8fde\u7eed\u7684\u5377\u79ef\u5757\uff0c\u7136\u540e\u5728\u63a5\u7740 K \u4e2a\u5168\u8fde\u63a5\u5c42\uff08N \u7684\u53d6\u503c\u533a\u95f4\u6bd4\u8f83\u5927\uff0c\u6bd4\u5982 1-100 \u6216\u8005\u66f4\u5927\uff1bK \u4e00\u822c\u4e3a 0-2\uff09","title":"\u5377\u79ef\u7f51\u7edc\u7ed3\u6784"},{"location":"cs/ai/dl/#_17","text":"\u4f4e\u7ef4\u7279\u5f81\u6620\u5c04\u5230\u9ad8\u7ef4\u7279\u5f81","title":"\u8f6c\u7f6e\u5377\u79ef/\u5fae\u6b65\u5377\u79ef"},{"location":"cs/ai/dl/#_18","text":"\u5982\u4f55\u589e\u52a0\u8f93\u51fa\u5355\u4f4d\u7684\u611f\u53d7\u91ce \u589e\u52a0\u5377\u79ef\u6838\u7684\u5927\u5c0f \u589e\u52a0\u5c42\u6570\u6765\u5b9e\u73b0 \u5728\u5377\u79ef\u4e4b\u524d\u8fdb\u884c\u6c47\u805a\u64cd\u4f5c \u7a7a\u6d1e\u5377\u79ef\u901a\u8fc7\u7ed9\u5377\u79ef\u6838\u63d2\u5165\u201c\u7a7a\u6d1e\u201d\u6765\u53d8\u76f8\u5730\u589e\u52a0\u5176\u5927\u5c0f","title":"\u7a7a\u6d1e\u5377\u79ef"},{"location":"cs/ai/dl/#_19","text":"\\[ h(\\mathbf{x})=\\mathbf{x}+(h(\\mathbf{x})-\\mathbf{x}) \\\\ \\mathbf{x} \u4e3a\u6052\u7b49\u51fd\u6570\uff0ch(\\mathbf{x})-\\mathbf{x} \u4e3a\u6b8b\u5dee\u51fd\u6570 f(\\mathbf{x}, \\theta) \\]","title":"\u7b80\u5355\u7684\u6b8b\u5dee\u5355\u5143\u7ed3\u6784"},{"location":"cs/ai/dl/#_20","text":"AlphaGo Mask RCNN \u56fe\u50cf\u751f\u6210 Deep Dream \u753b\u98ce\u8fc1\u79fb \u5bf9\u6297\u6837\u672c","title":"\u5e94\u7528"},{"location":"cs/ai/dl/#reference","text":"\u90b1\u9521\u9e4f,\u795e\u7ecf\u7f51\u7edc\u4e0e\u6df1\u5ea6\u5b66\u4e60,\u673a\u68b0\u5de5\u4e1a\u51fa\u7248\u793e, 2020\uff0cISBN 9787111649687 \u963f\u65af\u987f\u00b7\u5f20\u7b49,\u52a8\u624b\u5b66\u6df1\u5ea6\u5b66\u4e60, ISBN: 9787115505835","title":"Reference"},{"location":"cs/ai/ml/","text":"\u673a\u5668\u5b66\u4e60 \u00b6 \u7ea6 3050 \u4e2a\u5b57 4 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 10 \u5206\u949f Abstract \u6c5f\u5357\u5927\u5b66 \u201c\u673a\u5668\u5b66\u4e60\u201d \u8bfe\u7a0b\u7b14\u8bb0 \u53c2\u8003\u848b\u654f\u8001\u5e08\u7684 PPT\uff08\u6bcf\u6b21 4 \u8282\u8bfe\u53ea\u4e0a 3 \u8282\u8bfe\uff0c\u7b80\u76f4\u4e0d\u8981\u592a\u723d \u7b80\u5355\u5b66\u4e2a\u57fa\u7840\uff0c\u4e3b\u8981\u8fd8\u662f\u8981\u7528\u6df1\u5ea6\u5b66\u4e60\uff08\u5176\u5b9e\u5f88\u8ba8\u538c\u673a\u5668\u5b66\u4e60 \u6982\u8ff0 \u00b6 \u6982\u5ff5 \u00b6 \u673a\u5668\u5b66\u4e60\u7684\u76ee\u6807\u662f\u4ece\u539f\u59cb\u6570\u636e\u4e2d\u63d0\u53d6\u7279\u5f81\uff0c\u5b66\u4e60\u4e00\u4e2a\u6620\u5c04\u51fd\u6570 \\(f\\) \u5c06\u4e0a\u8ff0\u7279\u5f81\uff08\u6216\u539f\u59cb\u6570\u636e\uff09\u6620\u5c04\u5230\u8bed\u4e49\u7a7a\u95f4\uff0c\u5bfb\u627e\u6570\u636e\u548c\u4efb\u52a1\u76ee\u6807\u4e4b\u95f4\u7684\u5173\u7cfb\u3002 \u5373 \u673a\u5668\u5b66\u4e60 \\(\\approx\\) \u6784\u5efa\u4e00\u4e2a\u6620\u5c04\u51fd\u6570 \u79cd\u7c7b \u00b6 \u76d1\u7763\u5b66\u4e60 \u00b6 \u7ed9\u5b9a\u5e26\u6709\u6807\u7b7e\u4fe1\u606f\u7684\u8bad\u7ec3\u96c6\u5408\uff0c\u5b66\u4e60\u4ece\u8f93\u5165\u5230\u8f93\u51fa\u7684\u6620\u5c04 \u4e00\u822c\u88ab\u5e94\u7528\u5728\u56de\u5f52\u6216\u5206\u7c7b\u7684\u4efb\u52a1\u4e2d \u5728\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u5e0c\u671b\u6620\u5c04\u51fd\u6570\u5728\u8bad\u7ec3\u6570\u636e\u96c6\u4e0a\u5f97\u5230\u6240\u6709\u6837\u672c\u7684\u201c\u635f\u5931\u548c\u201d\u6700\u5c0f \u635f\u5931\u51fd\u6570\u5305\u62ec 0-1 \u635f\u5931\u51fd\u6570\uff08\u76f8\u7b49\u4e3a 0\uff0c\u53cd\u4e4b\u4e3a 1\uff09\uff0c\u5e73\u65b9\u635f\u5931\u51fd\u6570\uff0c\u7edd\u5bf9- \u635f\u5931\u51fd\u6570\uff0c\u5bf9\u6570\u635f\u5931\u51fd\u6570\uff08\u5bf9\u6570\u4f3c\u7136\u51fd\u6570\uff09 \u76d1\u7763\u5b66\u4e60\u4e00\u822c\u5305\u542b\u4e09\u4e2a\u90e8\u5206\u5185\u5bb9\uff1a \u4ece\u8bad\u7ec3\u6570\u636e\u96c6\u4e2d\u5b66\u4e60\u5f97\u5230\u6620\u5c04\u51fd\u6570 f \u5728\u6d4b\u8bd5\u6570\u636e\u96c6\u4e0a\u6d4b\u8bd5\u6620\u5c04\u51fd\u6570 f \u5728\u672a\u77e5\u6570\u636e\u96c6\u4e0a\u6d4b\u8bd5\u6620\u5c04\u51fd\u6570 f\uff08\u6295\u5165\u4f7f\u7528\uff09 \u8bad\u7ec3\u53ca\u4e2d\u4ea7\u751f\u7684\u635f\u5931\u4e00\u822c\u79f0\u4e3a\u7ecf\u9a8c\u98ce\u9669\uff08empirical risk\uff09\uff0c\u8d8a\u5c0f\u5bf9\u8bad\u7ec3\u96c6\u62df\u5408\u6548\u679c\u8d8a\u597d \u6d4b\u8bd5\u96c6\u4e2d\u52a0\u5165\u4ece\u771f\u5b9e\u6570\u636e\u5206\u5e03\u91c7\u6837\u7684\u6837\u672c\u65f6\uff0c\u6d4b\u8bd5\u96c6\u4e0a\u7684\u635f\u5931\u4f1a\u4e0d\u65ad\u903c\u8fd1\u671f\u671b\u98ce\u9669\uff08expected risk\uff09\uff0c\u8d8a\u5c0f\u6a21\u578b\u8d8a\u597d \u673a\u5668\u5b66\u4e60\u7684\u76ee\u6807\u662f\u8ffd\u6c42\u671f\u671b\u98ce\u9669\u6700\u5c0f\u5316 \u7ed3\u6784\u98ce\u9669\u6700\u5c0f\u5316\uff08structural risk minimization\uff09\uff1a\u9632\u6b62\u8fc7\u5b66\u4e60\uff0c\u57fa\u4e8e\u8fc7\u5b66\u4e60\u65f6\u53c2\u6570\u503c\u901a\u5e38\u90fd\u8f83\u5927\u8fd9\u4e00\u53d1\u73b0\uff0c\u5728\u7ecf\u9a8c\u98ce\u9669\u4e0a\u52a0\u4e0a\u8868\u793a\u6a21\u578b\u590d\u6742\u5ea6\u7684\u6b63\u5219\u5316\u9879\uff08regularizer\uff09\u6216\u60e9\u7f5a\u9879\uff08penalty term\uff09\uff0c\u5728\u6700\u5c0f\u5316\u7ecf\u9a8c\u98ce\u9669\u4e0e\u964d\u4f4e\u6a21\u578b\u590d\u6742\u5ea6\u4e4b\u95f4\u5bfb\u627e\u5e73\u8861 \u4e3b\u8981\u7684\u76d1\u7763\u5b66\u4e60\u65b9\u6cd5\uff1a \u5224\u522b\u65b9\u6cd5\uff08discriminative approach\uff09 \u76f4\u63a5\u5b66\u4e60\u5224\u522b\u51fd\u6570 f(X) \u6216\u8005\u6761\u4ef6\u6982\u7387\u5206\u5e03 P(Y|X) \u4f5c\u4e3a\u9884\u6d4b\u7684\u6a21\u578b \u5178\u578b\u5224\u522b\u6a21\u578b\u5305\u62ec\u56de\u5f52\u6a21\u578b\u3001\u795e\u7ecf\u7f51\u7edc\u3001\u652f\u6301\u5411\u91cf\u673a\u548c Ada boosting \u751f\u6210\u65b9\u6cd5\uff08generative approach\uff09 \u4ece\u6570\u636e\u4e2d\u5b66\u4e60\u8054\u5408\u6982\u7387\u5206\u5e03 P(X, Y)\uff08\u901a\u8fc7\u4f3c\u7136\u6982\u7387 P(X|Y) \u548c\u7c7b\u6982\u7387 P(Y) \u4e58\u79ef\u6765\u6c42\uff09 \u751f\u6210\u6a21\u578b\u5178\u578b\u65b9\u6cd5\u4e3a\u8d1d\u53f6\u65af\u65b9\u6cd5\u3001\u9690\u9a6c\u5c14\u53ef\u592b\u94fe \u96be\u70b9\u5728\u4e8e\u8054\u5408\u5206\u5e03\u6982\u7387\u6216\u4f3c\u7136\u6982\u7387\u5f88\u96be\u6c42 \u65e0\u76d1\u7763\u5b66\u4e60 \u00b6 \u6700\u5927\u7279\u70b9\u662f \u6570\u636e\u65e0\u6807\u7b7e \u4e00\u822c\u88ab\u5e94\u7528\u5728\u805a\u7c7b\u6216\u82e5\u5e72\u964d\u7ef4\u4efb\u52a1\u4e2d \u534a\u76d1\u7763\u5b66\u4e60\u4f9d\u8d56\u4e8e\u90e8\u5206\u88ab\u6807\u6ce8\u7684\u6570\u636e \u5f3a\u5316\u5b66\u4e60 \u00b6 \u4e00\u79cd\u5e8f\u5217\u6570\u636e\u51b3\u7b56\u5b66\u4e60\u65b9\u6cd5 \u4ece\u4e0e\u73af\u5883\u4ea4\u4e92\u4e2d\u5b66\u4e60\uff0c\u901a\u8fc7\u56de\u62a5\u503c\uff08reward\uff09\u8ba9\u667a\u80fd\u4f53\uff08agent\uff09\u5b66\u4e60\u5230\u5728\u4e0d\u540c\u72b6\u6001\uff08state\uff09\u4e0b\u5982\u4f55\u9009\u62e9\u884c\u4e3a\u65b9\u5f0f\uff08action\uff09 \u591a\u5143\u7ebf\u6027\u56de\u5f52 \u00b6 \u6709 \\(n\\) \u4e2a\u7279\u5f81 \\([x_1, ..., x_n]^{\\top}\\) \uff0c \\(m\\) \u4e2a\u8bad\u7ec3\u6570 \\(\\{(\\mathbf{x_i}, \\mathbf{y_i})\\}_{i=1}^m\\) \uff0c\u9700\u8981\u627e\u5230\u53c2\u6570 \\(\\mathbf{\\theta}\\) \u4f7f\u5f97\u7ebf\u6027\u51fd\u6570 \\(h_\\theta(\\mathbf{x})=\\theta_0+\\mathbf{\\theta}^{\\top} \\mathbf{x}\\) \u6700\u5c0f\u5316\u5747\u65b9\u8bef\u5dee\u51fd\u6570 \\[ J(\\theta_1, \\theta_2, ..., \\theta_n) = \\frac{1}{2m} \\sum_{i=1}^m (h_{\\theta}(x^{(i)})-y^{(i)})^2 \\] \u77e9\u9635\u6c42\u9006 \u00b6 \\[ J(\\theta_1, \\theta_2, ..., \\theta_n) = \\frac{1}{2m}(\\mathbf{y} - \\mathbf{X}^{\\top} \\mathbf{\\theta})^{\\top}(\\mathbf{y} - \\mathbf{X}^{\\top} \\mathbf{\\theta}) \\] \u5bf9\u5747\u65b9\u8bef\u5dee\u51fd\u6570\u6c42\u5bfc\u5f97 \\(\\nabla J(\\mathbf{\\theta})=-\\frac{1}{m}\\mathbf{X}(\\mathbf{y} - \\mathbf{X}^{\\top} \\mathbf{\\theta})\\) \uff0c\u4ee4\u68af\u5ea6\u7b49\u4e8e 0 \u5f97 \\[\\mathbf{\\theta}=(\\mathbf{X}\\mathbf{X^{\\top}})^{-1}\\mathbf{X}\\mathbf{y}\\] \u68af\u5ea6\u4e0b\u964d \u00b6 \\[ \\theta_j := \\theta_j - \\alpha \\frac{\\partial}{\\partial \\theta_j} J(\\theta) \\\\ \\theta_j := \\theta_j = \\alpha \\frac{1}{m} \\sum_{i=1}^m (h_{\\theta}(x^{(i)})-y^{(i)}) x_j^{(i)} \\\\ \\] \\(x_j^{(i)}\\) \u8868\u793a\u7b2c \\(i\\) \u4e2a\u6837\u672c\u4e2d\u7b2c \\(j\\) \u4e2a\u7279\u5f81\u3002 \u7279\u5f81\u5f52\u4e00\u5316 \u00b6 \u4f7f\u5f97\u6240\u6709\u4e0d\u540c\u7684\u7279\u5f81\u5c3a\u5ea6\u8fd1\u4f3c\u3002 \u5e38\u7528\u65b9\u6cd5\uff1a \u5747\u503c\u5f52\u4e00\u5316: \\(x_i=\\frac{x_i - \\mu_i}{x_{i\\_max}-x_{i\\_min}}\\) \u5b66\u4e60\u7387 \u00b6 \u5efa\u8bae\u9009\u62e9\u7b56\u7565\uff1a...,0.001,0.003,0.01,0.03,0.1,0.3,... \u901a\u8fc7\u4ee3\u4ef7\u6536\u655b\u56fe\uff0c\u5206\u6790\u9009\u62e9\u5408\u9002\u7684 \\(\\alpha\\) \u5bf9\u6bd4 \u00b6 \u68af\u5ea6\u4e0b\u964d \u9700\u8981\u786e\u5b9a \\(\\alpha\\) \u9700\u8981\u591a\u6b21\u5faa\u73af \u7279\u5f81\u6570 \\(n\\) \u5f88\u5927\u65f6\u4e5f\u53ef\u4ee5\u5f88\u597d\u5de5\u4f5c \u7279\u5f81\u9700\u8981\u5f52\u4e00\u5316 \u77e9\u9635\u6c42\u9006 \u4e0d\u9700\u8981\u9009\u62e9 \\(\\alpha\\) \u4e0d\u9700\u8981\u5faa\u73af \u8981\u8ba1\u7b97 \\((X^{\\top} X)^{-1}\\) \u5982\u679c\u7279\u5f81\u6570 \\(n\\) \u5f88\u5927\uff0c\u7b97\u6cd5\u4f1a\u975e\u5e38\u6162\uff0c\u5bf9\u5185\u5b58\u8981\u6c42\u9ad8 \u7279\u5f81\u4e0d\u9700\u8981\u5f52\u4e00\u5316 \u5b9e\u9a8c\u62a5\u544a \u00b6 \u673a\u5668\u5b66\u4e60--\u7ebf\u6027\u56de\u5f52 724 KB / 12 P / 2023-09-23 \u4e0b\u8f7d \u903b\u8f91\u56de\u5f52 \u00b6 \u7ebf\u6027\u56de\u5f52\u5bf9\u79bb\u7fa4\u70b9\u975e\u5e38\u654f\u611f\uff0c\u5bfc\u81f4\u6a21\u578b\u4e0d\u7a33\u5b9a\uff0c\u4e3a\u4e86\u7f13\u89e3\u8fd9\u4e2a\u95ee\u9898\u53ef\u4ee5\u8003\u8651\u903b\u8f91\u65af\u8482\u56de\u5f52\uff08logistic regression\uff09 \u5206\u7c7b \u00b6 \u903b\u8f91\u56de\u5f52\u662f\u5206\u7c7b\u6a21\u578b\uff0c\u4e0d\u662f\u56de\u5f52\u6a21\u578b \u4e8c\u5206\u7c7b\u95ee\u9898\uff1a \\(y \\in \\{0, 1\\}\\) \uff0c0 \u8868\u793a\u8d1f\u6837\u672c\uff0c1 \u8868\u793a\u6b63\u6837\u672c \\(h_\\theta(x)\\) \u53ef\u80fd \\(>1\\) \u6216 \\(<0\\) \uff0c\u903b\u8f91\u56de\u5f52\u7684\u76ee\u7684\uff1a \\(0 \\le h_\\theta(x) \\le 1\\) \u5b66\u4e60\u6a21\u578b \u00b6 \u903b\u8f91\u56de\u5f52\u7684\u6a21\u578b\uff1a \\(h_\\theta(x)=g(\\theta^{\\top}x)\\) \uff0c\u5176\u4e2d \\(g(z)=\\frac{1}{1+e^{-z}}\\) \uff0c\u79f0\u4e3a\u903b\u8f91\u51fd\u6570\uff08logistic function\uff09\u6216 Sigmoid \u51fd\u6570 \\[ y=\\frac{1}{1+e^{-z}}=\\frac{1}{1+e^{\\mathbf{x}\\top \\mathbf{x} + b}} \\] \u903b\u8f91\u56de\u5f52\u4ee3\u4ef7\u51fd\u6570 \u6ee1\u8db3\u5206\u7c7b\u7684\u76ee\u7684 \u4fdd\u8bc1\u6536\u655b\uff08\u51f8\u51fd\u6570\uff09 \\[ Cost(h_\\theta(x),y)= \\left\\{\\begin{matrix} -\\log (h_\\theta(x)) & if \\ y=1 \\\\ -\\log (1-h_\\theta(x)) & if \\ y=0 \\end{matrix}\\right. \\] \u7b80\u5316\u7684\u4ee3\u4ef7\u51fd\u6570\u53ca\u68af\u5ea6\u4e0b\u964d \u00b6 \u903b\u8f91\u56de\u5f52\u4ee3\u4ef7\u51fd\u6570\uff1a \\[ J(\\theta)=\\frac{1}{m} \\sum_{i=1}^m Cost(h_\\theta(x^{(i)}),y^{(i)}) \\\\ =-\\frac{1}{m} \\sum_{i=1}^m [y^{(i)}\\log (h_\\theta(x^{(i)}))+(1-y^{(i)})\\log (1-h_\\theta(x^{(i)}))] \\] \u4f18\u5316\u6a21\u578b\uff1a \\(\\underset{\\theta}{\\min} J(\\theta)\\) \u8981\u7ed9\u5b9a\u7684\u6837\u672c \\(\\mathbf{x}\\) \uff0c\u9884\u6d4b \\(y\\) \uff0c\u8f93\u51fa \\(h_\\theta(x)=\\frac{1}{1+e^{-\\theta \\top x}}\\) \u68af\u5ea6\u4e0b\u964d \\[ \\frac{\\partial J(\\theta)}{\\partial x}= \\frac{1}{m} \\sum_{i=1}^m (h_\\theta(x^{(i)})-y^{(i)})x_j^{(i)} \\] \u76ee\u6807\uff1a \\(\\underset{\\theta}{\\min} J(\\theta)\\) \u533a\u522b\uff1a\u7ebf\u6027\u56de\u5f52\uff1a \\(h_\\theta (x)=\\theta^\\top X\\) \uff0c\u903b\u8f91\u56de\u5f52\uff1a \\(h_\\theta(x)=\\frac{1}{1-e^{- \\theta \\top X}}\\) \u9ad8\u7ea7\u4f18\u5316\u95ee\u9898 \u00b6 \u4f18\u5316\u7b97\u6cd5 \u00b6 cvxpy \u7cfb\u5217\uff0ccvxpy\uff0ccvxOPT\uff0c\u8fd9\u51e0\u4e2a\u5305\u4e3b\u8981\u89e3\u51b3\u51f8\u4f18\u5316\u95ee\u9898 scipy.optimizes.scipy \u4e5f\u6709\u4f18\u5316\u65b9\u6cd5 scipy.optimize \u00b6 \u4f7f\u7528\u5404\u79cd\u7b97\u6cd5\uff08\u4f8b\u5982 BFGS\uff0cNelder-Mead simplex\uff0cNewton Conjugate Gradient\uff0cCOBYLA \u6216 SLSQP\uff09\u5bf9\u591a\u53d8\u91cf\u6807\u91cf\u51fd\u6570\uff08\u6700\u5c0f\u5316\uff08\uff09\uff09\u8fdb\u884c\u65e0\u7ea6\u675f\u548c\u7ea6\u675f\u6700\u5c0f\u5316 \u5168\u5c40\uff08\u5f3a\u529b\uff09\u4f18\u5316\u7a0b\u5e8f\uff08\u4f8b\u5982\uff0c\u9000\u706b\uff08\uff09\uff0c\u6d41\u57df\u8d2d\u7269\uff08\uff09\uff09 \u6700\u5c0f\u4e8c\u4e58\u6700\u5c0f\u5316\uff08leastsq\uff08\uff09\uff09\u548c\u66f2\u7ebf\u62df\u5408\uff08curve_fit\uff08\uff09\uff09\u7b97\u6cd5 \u6807\u91cf\u4f46\u53d8\u91cf\u51fd\u6570\u6700\u5c0f\u5316\u5668\uff08minimize_scalar\uff08\uff09\uff09\u548c\u6839\u67e5\u627e\u5668\uff08newton\uff08\uff09\uff09 \u4f7f\u7528\u5404\u79cd\u7b97\u6cd5\u7684\u591a\u53d8\u91cf\u65b9\u7a0b\u7cfb\u7edf\u6c42\u89e3\u5668\uff08root\uff08\uff09\uff09\uff08\u4f8b\u5982\u6df7\u5408 Powell\uff0cLevenberg-Marquardt \u6216\u5927\u89c4\u6a21\u65b9\u6cd5\uff0c\u5982 Newton-Krylov\uff09 \u591a\u5206\u7c7b\u95ee\u9898 \u00b6 \u4e00 VS \u591a \\(\\to\\) 1 VS \u5176\u4ed6 \u8f6c\u6362\u4e3a \u4e00 VS \u591a \\(\\to\\) 1 VS \u53e6\u4e00\u7c7b \u6784\u5efa\u5206\u7c7b\u5668 \u6811\u72b6\u5206\u7c7b\u5668\u6784\u5efa\uff0c\u805a\u7c7b+\u51b3\u7b56\u6811\u6765\u641c\u7d22\u7c7b\u522b\u5dee\u8ddd \u89e3\u51b3\u65b9\u6cd5\uff1a \u8bad\u7ec3 \uff1a\u4e3a\u6bcf\u4e2a\u7c7b\u522b i\uff0c\u8bad\u7ec3\u4e00\u4e2a\u5206\u7c7b\u5668 \\(h_\\theta^{(i)}(x)\\) \uff0c\u4ee5\u9884\u6d4b \\(y=i\\) \u7684\u6982\u7387 \u6d4b\u8bd5 \uff1a\u7ed9\u5b9a\u4e00\u4e2a\u6d4b\u8bd5\u6837\u672c x\uff0c\u6d4b\u8bd5\u6bcf\u4e2a\u7c7b\u522b\u6a21\u578b \\(h_\\theta^{(i)}(x)\\) \uff0c\u9009\u62e9\u6ee1\u8db3 \\(\\underset{i}{\\max} h_\\theta^{(i)}(x)\\) \u7684 i\uff0c\u5373\u4e3a\u6700\u4f18\u7c7b\u522b \u5b9e\u9a8c\u62a5\u544a \u00b6 \u673a\u5668\u5b66\u4e60--\u903b\u8f91\u56de\u5f52 938 KB / 9 P / 2023-10-10 \u4e0b\u8f7d \u6570\u636e\u53ef\u89c6\u5316 \u00b6 matplotlib seaborn pyecharts Pandas \u652f\u6301\u5411\u91cf\u673a \u00b6 \u652f\u6301\u5411\u91cf\u673a SVM \u662f\u4e00\u7c7b\u6309 \u76d1\u7763\u5b66\u4e60 \u65b9\u5f0f\u5bf9\u6570\u636e\u8fdb\u884c\u4e8c\u5143\u5206\u7c7b\u7684\u5e7f\u4e49\u7ebf\u6027\u5206\u7c7b\u5668 \u51b3\u7b56\u8fb9\u754c\u662f\u5bf9\u5b66\u4e60\u6837\u672c\u6c42\u89e3\u7684 \u6700\u5927\u8fb9\u8ddd\u8d85\u5e73\u9762 \u89e3\u51b3\u7ebf\u6027\u53ef\u5206\u95ee\u9898 \u5c06\u7ebf\u6027\u53ef\u5206\u95ee\u9898\u4e2d\u5f97\u5230\u7684\u7ed3\u8bba\u63a8\u5e7f\u5230\u7ebf\u6027\u4e0d\u53ef\u5206\u2014\u2014\u6838\u51fd\u6570 \u7ebf\u6027\u53ef\u5206 VS \u7ebf\u6027\u4e0d\u53ef\u5206 \u00b6 \u7ebf\u6027\u53ef\u5206 \u00b6 \u4e8c\u7ef4\uff1a\u4e00\u6761\u76f4\u7ebf \u4e09\u7ef4\uff1a\u4e00\u4e2a\u5e73\u9762 \u56db\u7ef4\u53ca\u66f4\u9ad8\u7ef4\uff1a\u4e00\u4e2a\u8d85\u5e73\u9762 Hyperplane \u6570\u5b66\u5b9a\u4e49\uff1a\u4e00\u4e2a\u8bad\u7ec3\u6837\u672c\u96c6 \\(\\{(X_1,y_1),(X_2,y_2),...,(X_n,y_n)\\}\\) \uff0c\u5728 \\(i=1 \\sim N\\) \u7ebf\u6027\u53ef\u5206\uff0c\u662f\u6307\u5b58\u5728 \\((\\omega_1,\\omega_2,b)\\) \uff0c\u4f7f\u5f97\u5bf9 \\(i=1 \\sim N\\) \uff0c\u6709 \u82e5 \\(y_i =+1\\) \uff0c\u5219 \\(\\omega_1 x_{i1} + \\omega_2 x_{i2} + b > 0\\) \u82e5 \\(y_i =-1\\) \uff0c\u5219 \\(\\omega_1 x_{i1} + \\omega_2 x_{i2} + b < 0\\) \u652f\u6301\u5411\u91cf\u673a\u8d85\u5e73\u9762\u4e0e\u6700\u4f18\u5316 \u5047\u5b9a\u6837\u672c\u96c6\u7ebf\u6027\u53ef\u5206 SVM \u8981\u5bfb\u627e\u7684\u5c31\u662f\u5177\u6709\u6700\u5927 margin \u7684\u8d85\u5e73\u9762\uff0c\u4e14\u79bb\u4e24\u8fb9\u7684\u652f\u6301\u5411\u91cf\u8ddd\u79bb\u76f8\u7b49\uff0c\u53ef\u8868\u793a\u4e3a \\[ \\min \\frac{1}{2} \\parallel \\omega \\parallel^2 \\\\ \u7ea6\u675f\u6761\u4ef6\uff1ay_i(\\omega^\\top X_i + b) \\ge 1 \\ \\ \\ (i=1 \\sim N) \\] \u7ebf\u6027\u4e0d\u53ef\u5206 \u00b6 \u5982\u679c \\(y_i=\\{+1,-1\\}\\) \uff0c\u4e00\u4e2a\u8bad\u7ec3\u6837\u672c\u96c6 \\(\\{(X_i,y_i)\\}\\) \uff0c\u5728 \\(i=1 \\sim N\\) \u7ebf\u6027\u53ef\u5206\uff0c\u662f\u6307\u5b58\u5728 \\((\\omega, b)\\) \uff0c\u4f7f\u5f97\u5bf9 \\(i=1 \\sim N\\) \uff0c\u6709 \\(y_i(\\omega^\\top X_i + b) > 0\\) \u5178\u578b\u7684\u7ebf\u6027\u4e0d\u53ef\u5206\u95ee\u9898\u2014\u2014 \u5f02\u6216 \u975e\u7ebf\u6027\u51b3\u7b56\u8fb9\u754c \u9700\u8981\u4e00\u4e2a\u9ad8\u9636\u6a21\u578b\u4ee5\u5b9e\u73b0\u8fd9\u6837\u7684\u975e\u7ebf\u6027\u5206\u7c7b\u95ee\u9898\uff0c\u672c\u8d28\u662f\u5c06\u4e8c\u7ef4\u7a7a\u95f4\u95ee\u9898\u6620\u5c04\u4e3a\u9ad8\u7ef4\u7a7a\u95f4\u95ee\u9898 \u4f4e\u7ef4\u5230\u9ad8\u7ef4\u7684\u6620\u5c04\u2014\u2014\u6838\u51fd\u6570\uff08\u7406\u8bba\u4e0a\u51e0\u4e4e\u901a\u7528\u4e8e\u6240\u6709\u5206\u7c7b Cover \u5b9a\u7406 \u5728\u4e00\u4e2a M \u7ef4\u7a7a\u95f4\u4e0a\u968f\u673a\u53d6 N \u4e2a\u8bad\u7ec3\u6837\u672c\u968f\u673a\u7684\u5bf9\u6bcf\u4e2a\u8bad\u7ec3 d \u8d4b\u4e88\u6807\u7b7e +1 \u6216 -1 \u8fd9\u4e9b\u8bad\u7ec3\u6837\u672c\u7ebf\u6027\u53ef\u5206\u7684\u6982\u7387\u4e3a \\(P(M)\\) \uff0c\u5219\u5f53 M \u8d8b\u5411\u65e0\u7a77\u5927\u65f6 \\(P(M)=1\\) M \u4e0a\u5347 \\(\\to\\) \\((\\omega, b)\\) \u7ef4\u5ea6\u4e0a\u5347 \\(\\to\\) \u6a21\u578b\u81ea\u7531\u5ea6\u4e0a\u5347 \\(\\to\\) \u7ebf\u6027\u53ef\u5206\u6982\u7387\u4e0a\u5347 \u5982\u4f55\u5bfb\u627e\u6838\u51fd\u6570 \u6838\u51fd\u6570 \u00b6 \u7ebf\u6027\u6838\u51fd\u6570 \\(K(x,xi)=x \\cdot xi\\) \u591a\u9879\u5f0f\u6838 Polynomial kernel \\((x^\\top l+\u5e38\u91cf)^{\u5e38\u91cf}\\) \u5f84\u5411\u57fa\u6838(RBF) \\(K(x,xi)=\\exp(- \\parallel x - xi \\parallel / 2 \\sigma^2)\\) \u5b9e\u9a8c\u62a5\u544a \u00b6 \u673a\u5668\u5b66\u4e60--\u652f\u6301\u5411\u91cf\u673a 892 KB / 9 P / 2023-10-20 \u4e0b\u8f7d \u795e\u7ecf\u7f51\u7edc \u00b6 \u795e\u7ecf\u5143\u6a21\u578b MP \u00b6 \u5305\u542b\u8f93\u5165\u8f93\u51fa\u4e0e\u8ba1\u7b97\u529f\u80fd\u7684\u6a21\u578b \u5355\u5c42\u795e\u7ecf\u7f51\u7edc\uff08\u611f\u77e5\u5668\uff09 \u00b6 \u4e0e\u795e\u7ecf\u5143\u6a21\u578b\u4e0d\u540c\uff0c\u611f\u77e5\u5668\u4e2d\u7684\u6743\u503c\u662f\u901a\u8fc7\u8bad\u7ec3\u5f97\u5230\u7684 \u611f\u77e5\u5668\u53ef\u4ee5\u505a\uff08\u7b80\u5355\uff09\u7ebf\u6027\u5206\u7c7b\u4efb\u52a1 \u7528\u51b3\u7b56\u8fb9\u754c\u6765\u8868\u8fbe\u5206\u7c7b\u6548\u679c XOR \u65e0\u6cd5\u89e3\u51b3 \u4e24\u5c42\u795e\u7ecf\u7f51\u7edc\uff08\u591a\u5c42\u611f\u77e5\u5668\uff09 \u00b6 \u7ed3\u6784 \u00b6 \u4e24\u5c42\u795e\u7ecf\u7f51\u7edc\u9664\u4e86\u8f93\u5165\u5c42\u548c\u8f93\u51fa\u5c42\uff0c\u8fd8\u589e\u52a0\u4e00\u4e2a\u4e2d\u95f4\u5c42 \u4e2d\u95f4\u5c42\u548c\u8f93\u51fa\u5c42\u90fd\u662f\u8ba1\u7b97\u5c42 \u901a\u8fc7\u6269\u5c55\u4e0a\u4e2a\u5355\u5143\u7684\u5355\u5c42\u795e\u7ecf\u7f51\u7edc\uff0c\u5728\u53f3\u8fb9\u65b0\u52a0\u4e00\u4e2a\u5c42\u6b21 \u9690\u85cf\u5c42\u7684\u8282\u70b9\u6570\u8bbe\u8ba1 \u00b6 \u8f93\u5165\u5c42\u7684\u8282\u70b9\u6570\u9700\u8981\u4e0e\u7279\u5f81\u7684\u7ef4\u5ea6\u5339\u914d \u8f93\u51fa\u5c42\u7684\u8282\u70b9\u6570\u9700\u8981\u4e0e\u76ee\u6807\u7684\u7ef4\u5ea6\u5339\u914d \u4e2d\u95f4\u5c42\u7684\u8282\u70b9\u6570\u7531\u8bbe\u8ba1\u8005\u51b3\u5b9a \u8f83\u597d\u7684\u65b9\u6cd5\u5c31\u662f\u9884\u5148\u8bbe\u5b9a\u51e0\u4e2a\u53ef\u9009\u503c\uff0c\u901a\u8fc7\u5207\u6362\u4e0d\u540c\u503c\u6765\u770b\u6574\u4e2a\u6a21\u578b\u7684\u9884\u6d4b\u6548\u679c\uff0c\u7b80\u79f0 Grid Search \u4e24\u5c42\u795e\u7ecf\u7f51\u7edc\u8bad\u7ec3 \u00b6 \u8bad\u7ec3\u4e0e\u635f\u5931\u51fd\u6570 \u00b6 \u9996\u5148\u7ed9\u6240\u6709\u53c2\u6570\u8d4b\u4e0a\u968f\u673a\u503c\uff0c\u4f7f\u7528\u8fd9\u4e9b\u53c2\u6570\u503c\u6765\u9884\u6d4b\u8bad\u7ec3\u6570\u636e\u4e2d\u7684\u6837\u672c\uff0c\u6837\u672c\u7684\u9884\u6d4b\u76ee\u6807\u4e3a \\(y_p\\) \uff0c\u771f\u5b9e\u76ee\u6807\u4e3a \\(y\\) \u3002\u90a3\u4e48\u5b9a\u4e49\u4e00\u4e2a\u503c \\(loss = (y_p-y)/2\\) loss \u79f0\u4e4b\u4e3a\u635f\u5931\uff0c\u76ee\u6807\u5c31\u662f\u4f7f\u5bf9\u6240\u6709\u8bad\u7ec3\u6570\u636e\u7684\u635f\u5931\u548c\u5c3d\u53ef\u80fd\u7684\u5c0f \u5982\u679c\u5c06\u5148\u524d\u7684\u795e\u7ecf\u7f51\u7edc\u9884\u6d4b\u7684\u77e9\u9635\u516c\u5f0f\u5e26\u5165\u5230 \\(y_p\\) \u4e2d\uff08\u56e0\u4e3a\u6709 \\(z=y_p\\) \uff09\uff0c\u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u628a\u635f\u5931\u5199\u4e3a\u5173\u4e8e\u53c2\u6570\u7684\u51fd\u6570\uff0c\u8fd9\u4e2a\u51fd\u6570\u79f0\u4e4b\u4e3a \u635f\u5931\u51fd\u6570(loss function) \u795e\u7ecf\u7f51\u7edc\u4f18\u5316\u95ee\u9898 \u00b6 \u4e00\u822c\u4f7f\u7528\u68af\u5ea6\u4e0b\u964d\u6cd5\u6765\u4f18\u5316\uff0c\u56e0\u4e3a\u4ee3\u4ef7\u5f88\u5927\uff0c\u6240\u4ee5\u9700\u8981\u4f7f\u7528\u53cd\u5411\u4f20\u64ad\u7b97\u6cd5 \u53cd\u5411\u4f20\u64ad\u7b97\u6cd5\u5229\u7528\u795e\u7ecf\u7f51\u7edc\u7684\u7ed3\u6784\u8fdb\u884c\u7684\u8ba1\u7b97\uff0c\u4e0d\u4e00\u6b21\u8ba1\u7b97\u6240\u6709\u7684\u68af\u5ea6\uff0c\u800c\u662f\u4ece\u540e\u5f80\u524d \u53cd\u5411\u4f20\u64ad\u7684\u4f9d\u636e\uff1a\u94fe\u5f0f\u6cd5\u5219 \u6846\u67b6 \u00b6 Pytorch optimizer = torch . optim . SGD ( model . parameters (), lr = 0.01 ) ... loss . backward () TensorFlow train = tf . train . GradientDescentOptimizer ( learning_rate = 0.01 ) . minimize ( loss ) \u5b9e\u9a8c\u62a5\u544a \u00b6 \u673a\u5668\u5b66\u4e60--\u795e\u7ecf\u7f51\u7edc 855 KB / 7 P / 2023-10-20 \u4e0b\u8f7d \u8bc6\u522b\u7cfb\u7edf\u7684\u6a21\u578b\u9009\u62e9\u4e0e\u8bc4\u4f30 \u00b6 \u8bef\u5dee\u5f88\u5927\u65f6 \u83b7\u53d6\u66f4\u591a\u7684\u8bad\u7ec3\u6570\u636e \u5c1d\u8bd5\u51cf\u5c11\u7279\u5f81 \u5927\u91cf\u65f6\u95f4\uff08>6\u4e2a\u6708\uff09\u53ef\u80fd\u90fd\u5728\u505a\u8fd9\u4e9b\u8c03\u6574 \u5c1d\u8bd5\u589e\u52a0\u591a\u9879\u5f0f\u7279\u5f81 \u5c1d\u8bd5\u964d\u4f4e/\u63d0\u9ad8 \\(\\lambda\\) \u8bad\u7ec3\u96c6\u3001\u6d4b\u8bd5\u96c6\u3001\u6821\u9a8c\u96c6 \u00b6 \u9ad8\u9636\u6a21\u578b\u80fd\u591f\u5f88\u597d\u5730\u62df\u5408\uff0c\u4f46\u5bf9\u4e0d\u5728\u8bad\u7ec3\u96c6\u4e2d\u7684\u65b0\u6837\u672c\u7f3a\u4e4f\u6cdb\u5316\u80fd\u529b \u53ef\u4ee5\u8003\u8651\u6253\u4e71\u6570\u636e\uff0c\u4ee5\u589e\u5f3a\u6cdb\u5316\u80fd\u529b \u9519\u8bef\u7387&\u8bef\u5dee \u00b6 \u9519\u8bef\u7387\uff1a\u9519\u5206\u6837\u672c\u7684\u5360\u6bd4 \u8bef\u5dee\uff1a\u6837\u672c\u771f\u5b9e\u8f93\u51fa\u4e0e\u9884\u6d4b\u8f93\u51fa\u4e4b\u95f4\u7684\u5dee\u5f02 \u8bad\u7ec3\uff08\u7ecf\u9a8c\uff09\u8bef\u5dee\uff1a\u8bad\u7ec3\u96c6 \u6d4b\u8bd5\u8bef\u5dee\uff1a\u6d4b\u8bd5\u96c6 \u6cdb\u5316\u8bef\u5dee\uff1a\u9664\u8bad\u7ec3\u96c6\u5916\u6240\u6709\u6837\u672c \u7ecf\u9a8c\u8bef\u5dee\u4e0e\u8fc7\u62df\u5408 \u00b6 \u8fc7\u62df\u5408 \u5b66\u4e60\u5668\u628a\u6240\u6709\u8bad\u7ec3\u6837\u672c\u5b66\u4e60\u7684\u201c\u592a\u597d\u201d\uff0c\u5c06\u8bad\u7ec3\u6837\u672c\u672c\u8eab\u7684\u7279\u70b9\u5f53\u4f5c\u6240\u6709\u6837\u672c\u7684\u4e00\u822c\u6027\u8d28\uff0c\u5bfc\u81f4\u6cdb\u5316\u6027\u80fd\u4e0b\u964d \u4f18\u5316\u76ee\u6807\u52a0\u6b63\u5219\u9879 early stop \u6b20\u62df\u5408 \u5bf9\u8bad\u7ec3\u6837\u672c\u7684\u4e00\u822c\u6027\u8d28\u5c1a\u672a\u5b66\u597d \u51b3\u7b56\u6811\uff1a\u62d3\u5c55\u5206\u652f \u795e\u7ecf\u7f51\u7edc\uff1a\u589e\u52a0\u8bad\u7ec3\u8f6e\u6570 \u5e38\u7528\u8bc4\u4f30\u65b9\u6cd5 \u00b6 \u7559\u51fa\u6cd5 \u00b6 \u76f4\u63a5\u5c06\u6570\u636e\u96c6\u5212\u5206\u4e3a\u4e24\u4e2a\u4e92\u65a5\u96c6\u5408 \u8bad\u7ec3/\u6d4b\u8bd5\u96c6\u5212\u5206\u8981\u5c3d\u53ef\u80fd\u4fdd\u6301\u6570\u636e\u5206\u5e03\u7684\u4e00\u81f4\u6027 \u4e00\u822c\u82e5\u5e72\u6b21\u968f\u673a\u5212\u5206\uff0c\u91cd\u590d\u5b9e\u9a8c\u53d6\u5e73\u5747\u503c \u8bad\u7ec3/\u6d4b\u8bd5\u6837\u672c\u6bd4\u4f8b\u901a\u5e38\u4e3a 2:1-4:1 \u4ea4\u53c9\u9a8c\u8bc1\u6cd5 \u00b6 \u5c06\u6570\u636e\u96c6\u5212\u5206\u4e3a k \u4e2a\u5927\u5c0f\u76f8\u4f3c\u7684\u4e92\u65a5\u5b50\u96c6 \u6bcf\u6b21\u7528 k-1 \u4e2a\u5b50\u96c6\u7684\u5e76\u96c6\u4f5c\u4e3a\u8bad\u7ec3\u96c6\uff0c\u4f59\u4e0b\u7684\u5b50\u96c6\u4f5c\u4e3a\u6d4b\u8bd5\u96c6 \u8fdb\u884c k \u6b21\u8bad\u7ec3\u548c\u6d4b\u8bd5\uff0c\u6700\u7ec8\u8fd4\u56de k \u6b21\u6d4b\u8bd5\u7ed3\u679c\u7684\u5747\u503c \u4e00\u822c k \u4e3a 10 \u81ea\u52a9\u6cd5 \u00b6 \u5b9e\u9645\u6a21\u578b\u4e0e\u9884\u671f\u6a21\u578b\u90fd\u4f7f\u7528 m \u4e2a\u8bad\u7ec3\u6837\u672c \u7ea6\u6709 1/3 \u7684\u6837\u672c\u6ca1\u5728\u8bad\u7ec3\u96c6\u4e2d\u51fa\u73b0 \u4ece\u521d\u59cb\u6570\u636e\u96c6\u4e2d\u4ea7\u751f\u591a\u4e2a\u4e0d\u540c\u7684\u8bad\u7ec3\u96c6\uff0c\u5bf9\u96c6\u6210\u5b66\u4e60\u6709\u5f88\u5927\u7684\u597d\u5904 \u81ea\u52a9\u6cd5\u5728\u6570\u636e\u96c6\u8f83\u5c0f\uff0c\u96be\u4ee5\u6709\u6548\u5212\u5206\u8bad\u7ec3/\u6d4b\u8bd5\u96c6\u65f6\u5f88\u6709\u7528 \u81ea\u52a9\u6cd5\u4ea7\u751f\u7684\u6570\u636e\u96c6\u6539\u53d8\u4e86\u521d\u59cb\u6570\u636e\u96c6\u7684\u5206\u5e03\uff0c\u4f1a\u5f15\u5165\u4f30\u8ba1\u504f\u5dee\uff0c\u5728\u6570\u636e\u91cf\u8db3\u591f\u65f6\uff0c\u7559\u51fa\u6cd5\u548c\u4ea4\u53c9\u9a8c\u8bc1\u6cd5\u66f4\u5e38\u7528 \u6027\u80fd\u5ea6\u91cf \u00b6 \u5206\u7c7b\u4efb\u52a1\u6700\u5e38\u7528\u7684\u662f\u9519\u8bef\u7387\u548c\u7cbe\u5ea6 \u9519\u8bef\u7387\uff1a \\(E(f;D)=\\frac{1}{m} \\sum_{i=1}^m (f(\\mathbf{x}_i) \\ne y_i)\\) \u7cbe\u5ea6\uff1a \\(acc(f;D)=\\frac{1}{m} \\sum_{i=1}^m (f(\\mathbf{x}_i) = y_i)=1-E(f;D)\\) \u56de\u5f52\u4efb\u52a1\u6700\u5e38\u7528\u7684\u662f\u5747\u65b9\u8bef\u5dee \\(E(f;D)=\\frac{1}{m} \\sum_{i=1}^m (f(\\mathbf{x}_i) - y_i)^2\\) \u6df7\u6dc6\u77e9\u9635 Confusion matrix \u67e5\u51c6\u7387 Precision\uff1a \\(P=\\frac{TP}{TP+FP}\\) \u67e5\u5168\u7387 Recall\uff1a \\(P=\\frac{TP}{TP+FN}\\) P-R \u66f2\u7ebf\uff1a\u6839\u636e\u5b66\u4e60\u5668\u7684\u9884\u6d4b\u7ed3\u679c\u6309\u6b63\u4f8b\u53ef\u80fd\u6027\u5927\u5c0f\u5bf9\u6837\u4f8b\u8fdb\u884c\u6392\u5e8f\uff0c\u5e76\u9010\u4e2a\u628a\u6837\u672c\u4f5c\u4e3a\u6b63\u4f8b\u8fdb\u884c\u9884\u6d4b\uff0c\u5219\u53ef\u4ee5\u5f97\u5230\u67e5\u51c6\u7387-\u67e5\u5168\u7387 F1 Score\uff1a \\(F1 Score=2\\frac{PR}{P+R}\\) \u66f4\u4e00\u822c\u7684\u5f62\u5f0f \\(F_\\beta = \\frac{(1+\\beta^2) \\times P \\times R}{(\\beta^2 \\times P) + R}\\) \\(\\beta=1\\) \uff1a\u6807\u51c6 F1 \\(\\beta<1\\) \uff1a\u66f4\u91cd\u89c6\u67e5\u51c6\u7387\uff08\u5546\u54c1\u63a8\u8350\u7cfb\u7edf\uff09 \\(\\beta>1\\) \uff1a\u66f4\u91cd\u89c6\u67e5\u5168\u7387\uff08\u9003\u72af\u4fe1\u606f\u68c0\u7d22\uff09 ROC \u66f2\u7ebf\uff1a\u53d7\u8bd5\u8005\u5de5\u4f5c\u7279\u5f81\u66f2\u7ebf \u6a2a\u8f74\uff1a \\(FPR=\\frac{FP}{FP+TN}\\) \u7eb5\u8f74\uff1a \\(TPR=\\frac{TP}{TP+FN}\\) AUC\uff1aROC \u66f2\u7ebf\u4e0b\u7684\u9762\u79ef\uff0c\u8d8a\u5927\u8d8a\u597d \u4ee3\u4ef7\u654f\u611f\u9519\u8bef\u7387 \u6bd4\u8f83\u6821\u9a8c \u00b6 \u5047\u8bbe\u6821\u9a8c \u4e8c\u9879\u6821\u9a8c t \u68c0\u9a8c \u4ea4\u53c9\u9a8c\u8bc1 t \u68c0\u9a8c McNemar \u68c0\u9a8c Friedman \u68c0\u9a8c Nemenyi \u68c0\u9a8c \u805a\u7c7b \u00b6","title":"\u673a\u5668\u5b66\u4e60"},{"location":"cs/ai/ml/#_1","text":"\u7ea6 3050 \u4e2a\u5b57 4 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 10 \u5206\u949f Abstract \u6c5f\u5357\u5927\u5b66 \u201c\u673a\u5668\u5b66\u4e60\u201d \u8bfe\u7a0b\u7b14\u8bb0 \u53c2\u8003\u848b\u654f\u8001\u5e08\u7684 PPT\uff08\u6bcf\u6b21 4 \u8282\u8bfe\u53ea\u4e0a 3 \u8282\u8bfe\uff0c\u7b80\u76f4\u4e0d\u8981\u592a\u723d \u7b80\u5355\u5b66\u4e2a\u57fa\u7840\uff0c\u4e3b\u8981\u8fd8\u662f\u8981\u7528\u6df1\u5ea6\u5b66\u4e60\uff08\u5176\u5b9e\u5f88\u8ba8\u538c\u673a\u5668\u5b66\u4e60","title":"\u673a\u5668\u5b66\u4e60"},{"location":"cs/ai/ml/#_2","text":"","title":"\u6982\u8ff0"},{"location":"cs/ai/ml/#_3","text":"\u673a\u5668\u5b66\u4e60\u7684\u76ee\u6807\u662f\u4ece\u539f\u59cb\u6570\u636e\u4e2d\u63d0\u53d6\u7279\u5f81\uff0c\u5b66\u4e60\u4e00\u4e2a\u6620\u5c04\u51fd\u6570 \\(f\\) \u5c06\u4e0a\u8ff0\u7279\u5f81\uff08\u6216\u539f\u59cb\u6570\u636e\uff09\u6620\u5c04\u5230\u8bed\u4e49\u7a7a\u95f4\uff0c\u5bfb\u627e\u6570\u636e\u548c\u4efb\u52a1\u76ee\u6807\u4e4b\u95f4\u7684\u5173\u7cfb\u3002 \u5373 \u673a\u5668\u5b66\u4e60 \\(\\approx\\) \u6784\u5efa\u4e00\u4e2a\u6620\u5c04\u51fd\u6570","title":"\u6982\u5ff5"},{"location":"cs/ai/ml/#_4","text":"","title":"\u79cd\u7c7b"},{"location":"cs/ai/ml/#_5","text":"\u7ed9\u5b9a\u5e26\u6709\u6807\u7b7e\u4fe1\u606f\u7684\u8bad\u7ec3\u96c6\u5408\uff0c\u5b66\u4e60\u4ece\u8f93\u5165\u5230\u8f93\u51fa\u7684\u6620\u5c04 \u4e00\u822c\u88ab\u5e94\u7528\u5728\u56de\u5f52\u6216\u5206\u7c7b\u7684\u4efb\u52a1\u4e2d \u5728\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u5e0c\u671b\u6620\u5c04\u51fd\u6570\u5728\u8bad\u7ec3\u6570\u636e\u96c6\u4e0a\u5f97\u5230\u6240\u6709\u6837\u672c\u7684\u201c\u635f\u5931\u548c\u201d\u6700\u5c0f \u635f\u5931\u51fd\u6570\u5305\u62ec 0-1 \u635f\u5931\u51fd\u6570\uff08\u76f8\u7b49\u4e3a 0\uff0c\u53cd\u4e4b\u4e3a 1\uff09\uff0c\u5e73\u65b9\u635f\u5931\u51fd\u6570\uff0c\u7edd\u5bf9- \u635f\u5931\u51fd\u6570\uff0c\u5bf9\u6570\u635f\u5931\u51fd\u6570\uff08\u5bf9\u6570\u4f3c\u7136\u51fd\u6570\uff09 \u76d1\u7763\u5b66\u4e60\u4e00\u822c\u5305\u542b\u4e09\u4e2a\u90e8\u5206\u5185\u5bb9\uff1a \u4ece\u8bad\u7ec3\u6570\u636e\u96c6\u4e2d\u5b66\u4e60\u5f97\u5230\u6620\u5c04\u51fd\u6570 f \u5728\u6d4b\u8bd5\u6570\u636e\u96c6\u4e0a\u6d4b\u8bd5\u6620\u5c04\u51fd\u6570 f \u5728\u672a\u77e5\u6570\u636e\u96c6\u4e0a\u6d4b\u8bd5\u6620\u5c04\u51fd\u6570 f\uff08\u6295\u5165\u4f7f\u7528\uff09 \u8bad\u7ec3\u53ca\u4e2d\u4ea7\u751f\u7684\u635f\u5931\u4e00\u822c\u79f0\u4e3a\u7ecf\u9a8c\u98ce\u9669\uff08empirical risk\uff09\uff0c\u8d8a\u5c0f\u5bf9\u8bad\u7ec3\u96c6\u62df\u5408\u6548\u679c\u8d8a\u597d \u6d4b\u8bd5\u96c6\u4e2d\u52a0\u5165\u4ece\u771f\u5b9e\u6570\u636e\u5206\u5e03\u91c7\u6837\u7684\u6837\u672c\u65f6\uff0c\u6d4b\u8bd5\u96c6\u4e0a\u7684\u635f\u5931\u4f1a\u4e0d\u65ad\u903c\u8fd1\u671f\u671b\u98ce\u9669\uff08expected risk\uff09\uff0c\u8d8a\u5c0f\u6a21\u578b\u8d8a\u597d \u673a\u5668\u5b66\u4e60\u7684\u76ee\u6807\u662f\u8ffd\u6c42\u671f\u671b\u98ce\u9669\u6700\u5c0f\u5316 \u7ed3\u6784\u98ce\u9669\u6700\u5c0f\u5316\uff08structural risk minimization\uff09\uff1a\u9632\u6b62\u8fc7\u5b66\u4e60\uff0c\u57fa\u4e8e\u8fc7\u5b66\u4e60\u65f6\u53c2\u6570\u503c\u901a\u5e38\u90fd\u8f83\u5927\u8fd9\u4e00\u53d1\u73b0\uff0c\u5728\u7ecf\u9a8c\u98ce\u9669\u4e0a\u52a0\u4e0a\u8868\u793a\u6a21\u578b\u590d\u6742\u5ea6\u7684\u6b63\u5219\u5316\u9879\uff08regularizer\uff09\u6216\u60e9\u7f5a\u9879\uff08penalty term\uff09\uff0c\u5728\u6700\u5c0f\u5316\u7ecf\u9a8c\u98ce\u9669\u4e0e\u964d\u4f4e\u6a21\u578b\u590d\u6742\u5ea6\u4e4b\u95f4\u5bfb\u627e\u5e73\u8861 \u4e3b\u8981\u7684\u76d1\u7763\u5b66\u4e60\u65b9\u6cd5\uff1a \u5224\u522b\u65b9\u6cd5\uff08discriminative approach\uff09 \u76f4\u63a5\u5b66\u4e60\u5224\u522b\u51fd\u6570 f(X) \u6216\u8005\u6761\u4ef6\u6982\u7387\u5206\u5e03 P(Y|X) \u4f5c\u4e3a\u9884\u6d4b\u7684\u6a21\u578b \u5178\u578b\u5224\u522b\u6a21\u578b\u5305\u62ec\u56de\u5f52\u6a21\u578b\u3001\u795e\u7ecf\u7f51\u7edc\u3001\u652f\u6301\u5411\u91cf\u673a\u548c Ada boosting \u751f\u6210\u65b9\u6cd5\uff08generative approach\uff09 \u4ece\u6570\u636e\u4e2d\u5b66\u4e60\u8054\u5408\u6982\u7387\u5206\u5e03 P(X, Y)\uff08\u901a\u8fc7\u4f3c\u7136\u6982\u7387 P(X|Y) \u548c\u7c7b\u6982\u7387 P(Y) \u4e58\u79ef\u6765\u6c42\uff09 \u751f\u6210\u6a21\u578b\u5178\u578b\u65b9\u6cd5\u4e3a\u8d1d\u53f6\u65af\u65b9\u6cd5\u3001\u9690\u9a6c\u5c14\u53ef\u592b\u94fe \u96be\u70b9\u5728\u4e8e\u8054\u5408\u5206\u5e03\u6982\u7387\u6216\u4f3c\u7136\u6982\u7387\u5f88\u96be\u6c42","title":"\u76d1\u7763\u5b66\u4e60"},{"location":"cs/ai/ml/#_6","text":"\u6700\u5927\u7279\u70b9\u662f \u6570\u636e\u65e0\u6807\u7b7e \u4e00\u822c\u88ab\u5e94\u7528\u5728\u805a\u7c7b\u6216\u82e5\u5e72\u964d\u7ef4\u4efb\u52a1\u4e2d \u534a\u76d1\u7763\u5b66\u4e60\u4f9d\u8d56\u4e8e\u90e8\u5206\u88ab\u6807\u6ce8\u7684\u6570\u636e","title":"\u65e0\u76d1\u7763\u5b66\u4e60"},{"location":"cs/ai/ml/#_7","text":"\u4e00\u79cd\u5e8f\u5217\u6570\u636e\u51b3\u7b56\u5b66\u4e60\u65b9\u6cd5 \u4ece\u4e0e\u73af\u5883\u4ea4\u4e92\u4e2d\u5b66\u4e60\uff0c\u901a\u8fc7\u56de\u62a5\u503c\uff08reward\uff09\u8ba9\u667a\u80fd\u4f53\uff08agent\uff09\u5b66\u4e60\u5230\u5728\u4e0d\u540c\u72b6\u6001\uff08state\uff09\u4e0b\u5982\u4f55\u9009\u62e9\u884c\u4e3a\u65b9\u5f0f\uff08action\uff09","title":"\u5f3a\u5316\u5b66\u4e60"},{"location":"cs/ai/ml/#_8","text":"\u6709 \\(n\\) \u4e2a\u7279\u5f81 \\([x_1, ..., x_n]^{\\top}\\) \uff0c \\(m\\) \u4e2a\u8bad\u7ec3\u6570 \\(\\{(\\mathbf{x_i}, \\mathbf{y_i})\\}_{i=1}^m\\) \uff0c\u9700\u8981\u627e\u5230\u53c2\u6570 \\(\\mathbf{\\theta}\\) \u4f7f\u5f97\u7ebf\u6027\u51fd\u6570 \\(h_\\theta(\\mathbf{x})=\\theta_0+\\mathbf{\\theta}^{\\top} \\mathbf{x}\\) \u6700\u5c0f\u5316\u5747\u65b9\u8bef\u5dee\u51fd\u6570 \\[ J(\\theta_1, \\theta_2, ..., \\theta_n) = \\frac{1}{2m} \\sum_{i=1}^m (h_{\\theta}(x^{(i)})-y^{(i)})^2 \\]","title":"\u591a\u5143\u7ebf\u6027\u56de\u5f52"},{"location":"cs/ai/ml/#_9","text":"\\[ J(\\theta_1, \\theta_2, ..., \\theta_n) = \\frac{1}{2m}(\\mathbf{y} - \\mathbf{X}^{\\top} \\mathbf{\\theta})^{\\top}(\\mathbf{y} - \\mathbf{X}^{\\top} \\mathbf{\\theta}) \\] \u5bf9\u5747\u65b9\u8bef\u5dee\u51fd\u6570\u6c42\u5bfc\u5f97 \\(\\nabla J(\\mathbf{\\theta})=-\\frac{1}{m}\\mathbf{X}(\\mathbf{y} - \\mathbf{X}^{\\top} \\mathbf{\\theta})\\) \uff0c\u4ee4\u68af\u5ea6\u7b49\u4e8e 0 \u5f97 \\[\\mathbf{\\theta}=(\\mathbf{X}\\mathbf{X^{\\top}})^{-1}\\mathbf{X}\\mathbf{y}\\]","title":"\u77e9\u9635\u6c42\u9006"},{"location":"cs/ai/ml/#_10","text":"\\[ \\theta_j := \\theta_j - \\alpha \\frac{\\partial}{\\partial \\theta_j} J(\\theta) \\\\ \\theta_j := \\theta_j = \\alpha \\frac{1}{m} \\sum_{i=1}^m (h_{\\theta}(x^{(i)})-y^{(i)}) x_j^{(i)} \\\\ \\] \\(x_j^{(i)}\\) \u8868\u793a\u7b2c \\(i\\) \u4e2a\u6837\u672c\u4e2d\u7b2c \\(j\\) \u4e2a\u7279\u5f81\u3002","title":"\u68af\u5ea6\u4e0b\u964d"},{"location":"cs/ai/ml/#_11","text":"\u4f7f\u5f97\u6240\u6709\u4e0d\u540c\u7684\u7279\u5f81\u5c3a\u5ea6\u8fd1\u4f3c\u3002 \u5e38\u7528\u65b9\u6cd5\uff1a \u5747\u503c\u5f52\u4e00\u5316: \\(x_i=\\frac{x_i - \\mu_i}{x_{i\\_max}-x_{i\\_min}}\\)","title":"\u7279\u5f81\u5f52\u4e00\u5316"},{"location":"cs/ai/ml/#_12","text":"\u5efa\u8bae\u9009\u62e9\u7b56\u7565\uff1a...,0.001,0.003,0.01,0.03,0.1,0.3,... \u901a\u8fc7\u4ee3\u4ef7\u6536\u655b\u56fe\uff0c\u5206\u6790\u9009\u62e9\u5408\u9002\u7684 \\(\\alpha\\)","title":"\u5b66\u4e60\u7387"},{"location":"cs/ai/ml/#_13","text":"\u68af\u5ea6\u4e0b\u964d \u9700\u8981\u786e\u5b9a \\(\\alpha\\) \u9700\u8981\u591a\u6b21\u5faa\u73af \u7279\u5f81\u6570 \\(n\\) \u5f88\u5927\u65f6\u4e5f\u53ef\u4ee5\u5f88\u597d\u5de5\u4f5c \u7279\u5f81\u9700\u8981\u5f52\u4e00\u5316 \u77e9\u9635\u6c42\u9006 \u4e0d\u9700\u8981\u9009\u62e9 \\(\\alpha\\) \u4e0d\u9700\u8981\u5faa\u73af \u8981\u8ba1\u7b97 \\((X^{\\top} X)^{-1}\\) \u5982\u679c\u7279\u5f81\u6570 \\(n\\) \u5f88\u5927\uff0c\u7b97\u6cd5\u4f1a\u975e\u5e38\u6162\uff0c\u5bf9\u5185\u5b58\u8981\u6c42\u9ad8 \u7279\u5f81\u4e0d\u9700\u8981\u5f52\u4e00\u5316","title":"\u5bf9\u6bd4"},{"location":"cs/ai/ml/#_14","text":"\u673a\u5668\u5b66\u4e60--\u7ebf\u6027\u56de\u5f52 724 KB / 12 P / 2023-09-23 \u4e0b\u8f7d","title":"\u5b9e\u9a8c\u62a5\u544a"},{"location":"cs/ai/ml/#_15","text":"\u7ebf\u6027\u56de\u5f52\u5bf9\u79bb\u7fa4\u70b9\u975e\u5e38\u654f\u611f\uff0c\u5bfc\u81f4\u6a21\u578b\u4e0d\u7a33\u5b9a\uff0c\u4e3a\u4e86\u7f13\u89e3\u8fd9\u4e2a\u95ee\u9898\u53ef\u4ee5\u8003\u8651\u903b\u8f91\u65af\u8482\u56de\u5f52\uff08logistic regression\uff09","title":"\u903b\u8f91\u56de\u5f52"},{"location":"cs/ai/ml/#_16","text":"\u903b\u8f91\u56de\u5f52\u662f\u5206\u7c7b\u6a21\u578b\uff0c\u4e0d\u662f\u56de\u5f52\u6a21\u578b \u4e8c\u5206\u7c7b\u95ee\u9898\uff1a \\(y \\in \\{0, 1\\}\\) \uff0c0 \u8868\u793a\u8d1f\u6837\u672c\uff0c1 \u8868\u793a\u6b63\u6837\u672c \\(h_\\theta(x)\\) \u53ef\u80fd \\(>1\\) \u6216 \\(<0\\) \uff0c\u903b\u8f91\u56de\u5f52\u7684\u76ee\u7684\uff1a \\(0 \\le h_\\theta(x) \\le 1\\)","title":"\u5206\u7c7b"},{"location":"cs/ai/ml/#_17","text":"\u903b\u8f91\u56de\u5f52\u7684\u6a21\u578b\uff1a \\(h_\\theta(x)=g(\\theta^{\\top}x)\\) \uff0c\u5176\u4e2d \\(g(z)=\\frac{1}{1+e^{-z}}\\) \uff0c\u79f0\u4e3a\u903b\u8f91\u51fd\u6570\uff08logistic function\uff09\u6216 Sigmoid \u51fd\u6570 \\[ y=\\frac{1}{1+e^{-z}}=\\frac{1}{1+e^{\\mathbf{x}\\top \\mathbf{x} + b}} \\] \u903b\u8f91\u56de\u5f52\u4ee3\u4ef7\u51fd\u6570 \u6ee1\u8db3\u5206\u7c7b\u7684\u76ee\u7684 \u4fdd\u8bc1\u6536\u655b\uff08\u51f8\u51fd\u6570\uff09 \\[ Cost(h_\\theta(x),y)= \\left\\{\\begin{matrix} -\\log (h_\\theta(x)) & if \\ y=1 \\\\ -\\log (1-h_\\theta(x)) & if \\ y=0 \\end{matrix}\\right. \\]","title":"\u5b66\u4e60\u6a21\u578b"},{"location":"cs/ai/ml/#_18","text":"\u903b\u8f91\u56de\u5f52\u4ee3\u4ef7\u51fd\u6570\uff1a \\[ J(\\theta)=\\frac{1}{m} \\sum_{i=1}^m Cost(h_\\theta(x^{(i)}),y^{(i)}) \\\\ =-\\frac{1}{m} \\sum_{i=1}^m [y^{(i)}\\log (h_\\theta(x^{(i)}))+(1-y^{(i)})\\log (1-h_\\theta(x^{(i)}))] \\] \u4f18\u5316\u6a21\u578b\uff1a \\(\\underset{\\theta}{\\min} J(\\theta)\\) \u8981\u7ed9\u5b9a\u7684\u6837\u672c \\(\\mathbf{x}\\) \uff0c\u9884\u6d4b \\(y\\) \uff0c\u8f93\u51fa \\(h_\\theta(x)=\\frac{1}{1+e^{-\\theta \\top x}}\\) \u68af\u5ea6\u4e0b\u964d \\[ \\frac{\\partial J(\\theta)}{\\partial x}= \\frac{1}{m} \\sum_{i=1}^m (h_\\theta(x^{(i)})-y^{(i)})x_j^{(i)} \\] \u76ee\u6807\uff1a \\(\\underset{\\theta}{\\min} J(\\theta)\\) \u533a\u522b\uff1a\u7ebf\u6027\u56de\u5f52\uff1a \\(h_\\theta (x)=\\theta^\\top X\\) \uff0c\u903b\u8f91\u56de\u5f52\uff1a \\(h_\\theta(x)=\\frac{1}{1-e^{- \\theta \\top X}}\\)","title":"\u7b80\u5316\u7684\u4ee3\u4ef7\u51fd\u6570\u53ca\u68af\u5ea6\u4e0b\u964d"},{"location":"cs/ai/ml/#_19","text":"","title":"\u9ad8\u7ea7\u4f18\u5316\u95ee\u9898"},{"location":"cs/ai/ml/#_20","text":"cvxpy \u7cfb\u5217\uff0ccvxpy\uff0ccvxOPT\uff0c\u8fd9\u51e0\u4e2a\u5305\u4e3b\u8981\u89e3\u51b3\u51f8\u4f18\u5316\u95ee\u9898 scipy.optimizes.scipy \u4e5f\u6709\u4f18\u5316\u65b9\u6cd5","title":"\u4f18\u5316\u7b97\u6cd5"},{"location":"cs/ai/ml/#scipyoptimize","text":"\u4f7f\u7528\u5404\u79cd\u7b97\u6cd5\uff08\u4f8b\u5982 BFGS\uff0cNelder-Mead simplex\uff0cNewton Conjugate Gradient\uff0cCOBYLA \u6216 SLSQP\uff09\u5bf9\u591a\u53d8\u91cf\u6807\u91cf\u51fd\u6570\uff08\u6700\u5c0f\u5316\uff08\uff09\uff09\u8fdb\u884c\u65e0\u7ea6\u675f\u548c\u7ea6\u675f\u6700\u5c0f\u5316 \u5168\u5c40\uff08\u5f3a\u529b\uff09\u4f18\u5316\u7a0b\u5e8f\uff08\u4f8b\u5982\uff0c\u9000\u706b\uff08\uff09\uff0c\u6d41\u57df\u8d2d\u7269\uff08\uff09\uff09 \u6700\u5c0f\u4e8c\u4e58\u6700\u5c0f\u5316\uff08leastsq\uff08\uff09\uff09\u548c\u66f2\u7ebf\u62df\u5408\uff08curve_fit\uff08\uff09\uff09\u7b97\u6cd5 \u6807\u91cf\u4f46\u53d8\u91cf\u51fd\u6570\u6700\u5c0f\u5316\u5668\uff08minimize_scalar\uff08\uff09\uff09\u548c\u6839\u67e5\u627e\u5668\uff08newton\uff08\uff09\uff09 \u4f7f\u7528\u5404\u79cd\u7b97\u6cd5\u7684\u591a\u53d8\u91cf\u65b9\u7a0b\u7cfb\u7edf\u6c42\u89e3\u5668\uff08root\uff08\uff09\uff09\uff08\u4f8b\u5982\u6df7\u5408 Powell\uff0cLevenberg-Marquardt \u6216\u5927\u89c4\u6a21\u65b9\u6cd5\uff0c\u5982 Newton-Krylov\uff09","title":"scipy.optimize"},{"location":"cs/ai/ml/#_21","text":"\u4e00 VS \u591a \\(\\to\\) 1 VS \u5176\u4ed6 \u8f6c\u6362\u4e3a \u4e00 VS \u591a \\(\\to\\) 1 VS \u53e6\u4e00\u7c7b \u6784\u5efa\u5206\u7c7b\u5668 \u6811\u72b6\u5206\u7c7b\u5668\u6784\u5efa\uff0c\u805a\u7c7b+\u51b3\u7b56\u6811\u6765\u641c\u7d22\u7c7b\u522b\u5dee\u8ddd \u89e3\u51b3\u65b9\u6cd5\uff1a \u8bad\u7ec3 \uff1a\u4e3a\u6bcf\u4e2a\u7c7b\u522b i\uff0c\u8bad\u7ec3\u4e00\u4e2a\u5206\u7c7b\u5668 \\(h_\\theta^{(i)}(x)\\) \uff0c\u4ee5\u9884\u6d4b \\(y=i\\) \u7684\u6982\u7387 \u6d4b\u8bd5 \uff1a\u7ed9\u5b9a\u4e00\u4e2a\u6d4b\u8bd5\u6837\u672c x\uff0c\u6d4b\u8bd5\u6bcf\u4e2a\u7c7b\u522b\u6a21\u578b \\(h_\\theta^{(i)}(x)\\) \uff0c\u9009\u62e9\u6ee1\u8db3 \\(\\underset{i}{\\max} h_\\theta^{(i)}(x)\\) \u7684 i\uff0c\u5373\u4e3a\u6700\u4f18\u7c7b\u522b","title":"\u591a\u5206\u7c7b\u95ee\u9898"},{"location":"cs/ai/ml/#_22","text":"\u673a\u5668\u5b66\u4e60--\u903b\u8f91\u56de\u5f52 938 KB / 9 P / 2023-10-10 \u4e0b\u8f7d","title":"\u5b9e\u9a8c\u62a5\u544a"},{"location":"cs/ai/ml/#_23","text":"matplotlib seaborn pyecharts Pandas","title":"\u6570\u636e\u53ef\u89c6\u5316"},{"location":"cs/ai/ml/#_24","text":"\u652f\u6301\u5411\u91cf\u673a SVM \u662f\u4e00\u7c7b\u6309 \u76d1\u7763\u5b66\u4e60 \u65b9\u5f0f\u5bf9\u6570\u636e\u8fdb\u884c\u4e8c\u5143\u5206\u7c7b\u7684\u5e7f\u4e49\u7ebf\u6027\u5206\u7c7b\u5668 \u51b3\u7b56\u8fb9\u754c\u662f\u5bf9\u5b66\u4e60\u6837\u672c\u6c42\u89e3\u7684 \u6700\u5927\u8fb9\u8ddd\u8d85\u5e73\u9762 \u89e3\u51b3\u7ebf\u6027\u53ef\u5206\u95ee\u9898 \u5c06\u7ebf\u6027\u53ef\u5206\u95ee\u9898\u4e2d\u5f97\u5230\u7684\u7ed3\u8bba\u63a8\u5e7f\u5230\u7ebf\u6027\u4e0d\u53ef\u5206\u2014\u2014\u6838\u51fd\u6570","title":"\u652f\u6301\u5411\u91cf\u673a"},{"location":"cs/ai/ml/#vs","text":"","title":"\u7ebf\u6027\u53ef\u5206 VS \u7ebf\u6027\u4e0d\u53ef\u5206"},{"location":"cs/ai/ml/#_25","text":"\u4e8c\u7ef4\uff1a\u4e00\u6761\u76f4\u7ebf \u4e09\u7ef4\uff1a\u4e00\u4e2a\u5e73\u9762 \u56db\u7ef4\u53ca\u66f4\u9ad8\u7ef4\uff1a\u4e00\u4e2a\u8d85\u5e73\u9762 Hyperplane \u6570\u5b66\u5b9a\u4e49\uff1a\u4e00\u4e2a\u8bad\u7ec3\u6837\u672c\u96c6 \\(\\{(X_1,y_1),(X_2,y_2),...,(X_n,y_n)\\}\\) \uff0c\u5728 \\(i=1 \\sim N\\) \u7ebf\u6027\u53ef\u5206\uff0c\u662f\u6307\u5b58\u5728 \\((\\omega_1,\\omega_2,b)\\) \uff0c\u4f7f\u5f97\u5bf9 \\(i=1 \\sim N\\) \uff0c\u6709 \u82e5 \\(y_i =+1\\) \uff0c\u5219 \\(\\omega_1 x_{i1} + \\omega_2 x_{i2} + b > 0\\) \u82e5 \\(y_i =-1\\) \uff0c\u5219 \\(\\omega_1 x_{i1} + \\omega_2 x_{i2} + b < 0\\) \u652f\u6301\u5411\u91cf\u673a\u8d85\u5e73\u9762\u4e0e\u6700\u4f18\u5316 \u5047\u5b9a\u6837\u672c\u96c6\u7ebf\u6027\u53ef\u5206 SVM \u8981\u5bfb\u627e\u7684\u5c31\u662f\u5177\u6709\u6700\u5927 margin \u7684\u8d85\u5e73\u9762\uff0c\u4e14\u79bb\u4e24\u8fb9\u7684\u652f\u6301\u5411\u91cf\u8ddd\u79bb\u76f8\u7b49\uff0c\u53ef\u8868\u793a\u4e3a \\[ \\min \\frac{1}{2} \\parallel \\omega \\parallel^2 \\\\ \u7ea6\u675f\u6761\u4ef6\uff1ay_i(\\omega^\\top X_i + b) \\ge 1 \\ \\ \\ (i=1 \\sim N) \\]","title":"\u7ebf\u6027\u53ef\u5206"},{"location":"cs/ai/ml/#_26","text":"\u5982\u679c \\(y_i=\\{+1,-1\\}\\) \uff0c\u4e00\u4e2a\u8bad\u7ec3\u6837\u672c\u96c6 \\(\\{(X_i,y_i)\\}\\) \uff0c\u5728 \\(i=1 \\sim N\\) \u7ebf\u6027\u53ef\u5206\uff0c\u662f\u6307\u5b58\u5728 \\((\\omega, b)\\) \uff0c\u4f7f\u5f97\u5bf9 \\(i=1 \\sim N\\) \uff0c\u6709 \\(y_i(\\omega^\\top X_i + b) > 0\\) \u5178\u578b\u7684\u7ebf\u6027\u4e0d\u53ef\u5206\u95ee\u9898\u2014\u2014 \u5f02\u6216 \u975e\u7ebf\u6027\u51b3\u7b56\u8fb9\u754c \u9700\u8981\u4e00\u4e2a\u9ad8\u9636\u6a21\u578b\u4ee5\u5b9e\u73b0\u8fd9\u6837\u7684\u975e\u7ebf\u6027\u5206\u7c7b\u95ee\u9898\uff0c\u672c\u8d28\u662f\u5c06\u4e8c\u7ef4\u7a7a\u95f4\u95ee\u9898\u6620\u5c04\u4e3a\u9ad8\u7ef4\u7a7a\u95f4\u95ee\u9898 \u4f4e\u7ef4\u5230\u9ad8\u7ef4\u7684\u6620\u5c04\u2014\u2014\u6838\u51fd\u6570\uff08\u7406\u8bba\u4e0a\u51e0\u4e4e\u901a\u7528\u4e8e\u6240\u6709\u5206\u7c7b Cover \u5b9a\u7406 \u5728\u4e00\u4e2a M \u7ef4\u7a7a\u95f4\u4e0a\u968f\u673a\u53d6 N \u4e2a\u8bad\u7ec3\u6837\u672c\u968f\u673a\u7684\u5bf9\u6bcf\u4e2a\u8bad\u7ec3 d \u8d4b\u4e88\u6807\u7b7e +1 \u6216 -1 \u8fd9\u4e9b\u8bad\u7ec3\u6837\u672c\u7ebf\u6027\u53ef\u5206\u7684\u6982\u7387\u4e3a \\(P(M)\\) \uff0c\u5219\u5f53 M \u8d8b\u5411\u65e0\u7a77\u5927\u65f6 \\(P(M)=1\\) M \u4e0a\u5347 \\(\\to\\) \\((\\omega, b)\\) \u7ef4\u5ea6\u4e0a\u5347 \\(\\to\\) \u6a21\u578b\u81ea\u7531\u5ea6\u4e0a\u5347 \\(\\to\\) \u7ebf\u6027\u53ef\u5206\u6982\u7387\u4e0a\u5347 \u5982\u4f55\u5bfb\u627e\u6838\u51fd\u6570","title":"\u7ebf\u6027\u4e0d\u53ef\u5206"},{"location":"cs/ai/ml/#_27","text":"\u7ebf\u6027\u6838\u51fd\u6570 \\(K(x,xi)=x \\cdot xi\\) \u591a\u9879\u5f0f\u6838 Polynomial kernel \\((x^\\top l+\u5e38\u91cf)^{\u5e38\u91cf}\\) \u5f84\u5411\u57fa\u6838(RBF) \\(K(x,xi)=\\exp(- \\parallel x - xi \\parallel / 2 \\sigma^2)\\)","title":"\u6838\u51fd\u6570"},{"location":"cs/ai/ml/#_28","text":"\u673a\u5668\u5b66\u4e60--\u652f\u6301\u5411\u91cf\u673a 892 KB / 9 P / 2023-10-20 \u4e0b\u8f7d","title":"\u5b9e\u9a8c\u62a5\u544a"},{"location":"cs/ai/ml/#_29","text":"","title":"\u795e\u7ecf\u7f51\u7edc"},{"location":"cs/ai/ml/#mp","text":"\u5305\u542b\u8f93\u5165\u8f93\u51fa\u4e0e\u8ba1\u7b97\u529f\u80fd\u7684\u6a21\u578b","title":"\u795e\u7ecf\u5143\u6a21\u578b MP"},{"location":"cs/ai/ml/#_30","text":"\u4e0e\u795e\u7ecf\u5143\u6a21\u578b\u4e0d\u540c\uff0c\u611f\u77e5\u5668\u4e2d\u7684\u6743\u503c\u662f\u901a\u8fc7\u8bad\u7ec3\u5f97\u5230\u7684 \u611f\u77e5\u5668\u53ef\u4ee5\u505a\uff08\u7b80\u5355\uff09\u7ebf\u6027\u5206\u7c7b\u4efb\u52a1 \u7528\u51b3\u7b56\u8fb9\u754c\u6765\u8868\u8fbe\u5206\u7c7b\u6548\u679c XOR \u65e0\u6cd5\u89e3\u51b3","title":"\u5355\u5c42\u795e\u7ecf\u7f51\u7edc\uff08\u611f\u77e5\u5668\uff09"},{"location":"cs/ai/ml/#_31","text":"","title":"\u4e24\u5c42\u795e\u7ecf\u7f51\u7edc\uff08\u591a\u5c42\u611f\u77e5\u5668\uff09"},{"location":"cs/ai/ml/#_32","text":"\u4e24\u5c42\u795e\u7ecf\u7f51\u7edc\u9664\u4e86\u8f93\u5165\u5c42\u548c\u8f93\u51fa\u5c42\uff0c\u8fd8\u589e\u52a0\u4e00\u4e2a\u4e2d\u95f4\u5c42 \u4e2d\u95f4\u5c42\u548c\u8f93\u51fa\u5c42\u90fd\u662f\u8ba1\u7b97\u5c42 \u901a\u8fc7\u6269\u5c55\u4e0a\u4e2a\u5355\u5143\u7684\u5355\u5c42\u795e\u7ecf\u7f51\u7edc\uff0c\u5728\u53f3\u8fb9\u65b0\u52a0\u4e00\u4e2a\u5c42\u6b21","title":"\u7ed3\u6784"},{"location":"cs/ai/ml/#_33","text":"\u8f93\u5165\u5c42\u7684\u8282\u70b9\u6570\u9700\u8981\u4e0e\u7279\u5f81\u7684\u7ef4\u5ea6\u5339\u914d \u8f93\u51fa\u5c42\u7684\u8282\u70b9\u6570\u9700\u8981\u4e0e\u76ee\u6807\u7684\u7ef4\u5ea6\u5339\u914d \u4e2d\u95f4\u5c42\u7684\u8282\u70b9\u6570\u7531\u8bbe\u8ba1\u8005\u51b3\u5b9a \u8f83\u597d\u7684\u65b9\u6cd5\u5c31\u662f\u9884\u5148\u8bbe\u5b9a\u51e0\u4e2a\u53ef\u9009\u503c\uff0c\u901a\u8fc7\u5207\u6362\u4e0d\u540c\u503c\u6765\u770b\u6574\u4e2a\u6a21\u578b\u7684\u9884\u6d4b\u6548\u679c\uff0c\u7b80\u79f0 Grid Search","title":"\u9690\u85cf\u5c42\u7684\u8282\u70b9\u6570\u8bbe\u8ba1"},{"location":"cs/ai/ml/#_34","text":"","title":"\u4e24\u5c42\u795e\u7ecf\u7f51\u7edc\u8bad\u7ec3"},{"location":"cs/ai/ml/#_35","text":"\u9996\u5148\u7ed9\u6240\u6709\u53c2\u6570\u8d4b\u4e0a\u968f\u673a\u503c\uff0c\u4f7f\u7528\u8fd9\u4e9b\u53c2\u6570\u503c\u6765\u9884\u6d4b\u8bad\u7ec3\u6570\u636e\u4e2d\u7684\u6837\u672c\uff0c\u6837\u672c\u7684\u9884\u6d4b\u76ee\u6807\u4e3a \\(y_p\\) \uff0c\u771f\u5b9e\u76ee\u6807\u4e3a \\(y\\) \u3002\u90a3\u4e48\u5b9a\u4e49\u4e00\u4e2a\u503c \\(loss = (y_p-y)/2\\) loss \u79f0\u4e4b\u4e3a\u635f\u5931\uff0c\u76ee\u6807\u5c31\u662f\u4f7f\u5bf9\u6240\u6709\u8bad\u7ec3\u6570\u636e\u7684\u635f\u5931\u548c\u5c3d\u53ef\u80fd\u7684\u5c0f \u5982\u679c\u5c06\u5148\u524d\u7684\u795e\u7ecf\u7f51\u7edc\u9884\u6d4b\u7684\u77e9\u9635\u516c\u5f0f\u5e26\u5165\u5230 \\(y_p\\) \u4e2d\uff08\u56e0\u4e3a\u6709 \\(z=y_p\\) \uff09\uff0c\u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u628a\u635f\u5931\u5199\u4e3a\u5173\u4e8e\u53c2\u6570\u7684\u51fd\u6570\uff0c\u8fd9\u4e2a\u51fd\u6570\u79f0\u4e4b\u4e3a \u635f\u5931\u51fd\u6570(loss function)","title":"\u8bad\u7ec3\u4e0e\u635f\u5931\u51fd\u6570"},{"location":"cs/ai/ml/#_36","text":"\u4e00\u822c\u4f7f\u7528\u68af\u5ea6\u4e0b\u964d\u6cd5\u6765\u4f18\u5316\uff0c\u56e0\u4e3a\u4ee3\u4ef7\u5f88\u5927\uff0c\u6240\u4ee5\u9700\u8981\u4f7f\u7528\u53cd\u5411\u4f20\u64ad\u7b97\u6cd5 \u53cd\u5411\u4f20\u64ad\u7b97\u6cd5\u5229\u7528\u795e\u7ecf\u7f51\u7edc\u7684\u7ed3\u6784\u8fdb\u884c\u7684\u8ba1\u7b97\uff0c\u4e0d\u4e00\u6b21\u8ba1\u7b97\u6240\u6709\u7684\u68af\u5ea6\uff0c\u800c\u662f\u4ece\u540e\u5f80\u524d \u53cd\u5411\u4f20\u64ad\u7684\u4f9d\u636e\uff1a\u94fe\u5f0f\u6cd5\u5219","title":"\u795e\u7ecf\u7f51\u7edc\u4f18\u5316\u95ee\u9898"},{"location":"cs/ai/ml/#_37","text":"Pytorch optimizer = torch . optim . SGD ( model . parameters (), lr = 0.01 ) ... loss . backward () TensorFlow train = tf . train . GradientDescentOptimizer ( learning_rate = 0.01 ) . minimize ( loss )","title":"\u6846\u67b6"},{"location":"cs/ai/ml/#_38","text":"\u673a\u5668\u5b66\u4e60--\u795e\u7ecf\u7f51\u7edc 855 KB / 7 P / 2023-10-20 \u4e0b\u8f7d","title":"\u5b9e\u9a8c\u62a5\u544a"},{"location":"cs/ai/ml/#_39","text":"\u8bef\u5dee\u5f88\u5927\u65f6 \u83b7\u53d6\u66f4\u591a\u7684\u8bad\u7ec3\u6570\u636e \u5c1d\u8bd5\u51cf\u5c11\u7279\u5f81 \u5927\u91cf\u65f6\u95f4\uff08>6\u4e2a\u6708\uff09\u53ef\u80fd\u90fd\u5728\u505a\u8fd9\u4e9b\u8c03\u6574 \u5c1d\u8bd5\u589e\u52a0\u591a\u9879\u5f0f\u7279\u5f81 \u5c1d\u8bd5\u964d\u4f4e/\u63d0\u9ad8 \\(\\lambda\\)","title":"\u8bc6\u522b\u7cfb\u7edf\u7684\u6a21\u578b\u9009\u62e9\u4e0e\u8bc4\u4f30"},{"location":"cs/ai/ml/#_40","text":"\u9ad8\u9636\u6a21\u578b\u80fd\u591f\u5f88\u597d\u5730\u62df\u5408\uff0c\u4f46\u5bf9\u4e0d\u5728\u8bad\u7ec3\u96c6\u4e2d\u7684\u65b0\u6837\u672c\u7f3a\u4e4f\u6cdb\u5316\u80fd\u529b \u53ef\u4ee5\u8003\u8651\u6253\u4e71\u6570\u636e\uff0c\u4ee5\u589e\u5f3a\u6cdb\u5316\u80fd\u529b","title":"\u8bad\u7ec3\u96c6\u3001\u6d4b\u8bd5\u96c6\u3001\u6821\u9a8c\u96c6"},{"location":"cs/ai/ml/#_41","text":"\u9519\u8bef\u7387\uff1a\u9519\u5206\u6837\u672c\u7684\u5360\u6bd4 \u8bef\u5dee\uff1a\u6837\u672c\u771f\u5b9e\u8f93\u51fa\u4e0e\u9884\u6d4b\u8f93\u51fa\u4e4b\u95f4\u7684\u5dee\u5f02 \u8bad\u7ec3\uff08\u7ecf\u9a8c\uff09\u8bef\u5dee\uff1a\u8bad\u7ec3\u96c6 \u6d4b\u8bd5\u8bef\u5dee\uff1a\u6d4b\u8bd5\u96c6 \u6cdb\u5316\u8bef\u5dee\uff1a\u9664\u8bad\u7ec3\u96c6\u5916\u6240\u6709\u6837\u672c","title":"\u9519\u8bef\u7387&\u8bef\u5dee"},{"location":"cs/ai/ml/#_42","text":"\u8fc7\u62df\u5408 \u5b66\u4e60\u5668\u628a\u6240\u6709\u8bad\u7ec3\u6837\u672c\u5b66\u4e60\u7684\u201c\u592a\u597d\u201d\uff0c\u5c06\u8bad\u7ec3\u6837\u672c\u672c\u8eab\u7684\u7279\u70b9\u5f53\u4f5c\u6240\u6709\u6837\u672c\u7684\u4e00\u822c\u6027\u8d28\uff0c\u5bfc\u81f4\u6cdb\u5316\u6027\u80fd\u4e0b\u964d \u4f18\u5316\u76ee\u6807\u52a0\u6b63\u5219\u9879 early stop \u6b20\u62df\u5408 \u5bf9\u8bad\u7ec3\u6837\u672c\u7684\u4e00\u822c\u6027\u8d28\u5c1a\u672a\u5b66\u597d \u51b3\u7b56\u6811\uff1a\u62d3\u5c55\u5206\u652f \u795e\u7ecf\u7f51\u7edc\uff1a\u589e\u52a0\u8bad\u7ec3\u8f6e\u6570","title":"\u7ecf\u9a8c\u8bef\u5dee\u4e0e\u8fc7\u62df\u5408"},{"location":"cs/ai/ml/#_43","text":"","title":"\u5e38\u7528\u8bc4\u4f30\u65b9\u6cd5"},{"location":"cs/ai/ml/#_44","text":"\u76f4\u63a5\u5c06\u6570\u636e\u96c6\u5212\u5206\u4e3a\u4e24\u4e2a\u4e92\u65a5\u96c6\u5408 \u8bad\u7ec3/\u6d4b\u8bd5\u96c6\u5212\u5206\u8981\u5c3d\u53ef\u80fd\u4fdd\u6301\u6570\u636e\u5206\u5e03\u7684\u4e00\u81f4\u6027 \u4e00\u822c\u82e5\u5e72\u6b21\u968f\u673a\u5212\u5206\uff0c\u91cd\u590d\u5b9e\u9a8c\u53d6\u5e73\u5747\u503c \u8bad\u7ec3/\u6d4b\u8bd5\u6837\u672c\u6bd4\u4f8b\u901a\u5e38\u4e3a 2:1-4:1","title":"\u7559\u51fa\u6cd5"},{"location":"cs/ai/ml/#_45","text":"\u5c06\u6570\u636e\u96c6\u5212\u5206\u4e3a k \u4e2a\u5927\u5c0f\u76f8\u4f3c\u7684\u4e92\u65a5\u5b50\u96c6 \u6bcf\u6b21\u7528 k-1 \u4e2a\u5b50\u96c6\u7684\u5e76\u96c6\u4f5c\u4e3a\u8bad\u7ec3\u96c6\uff0c\u4f59\u4e0b\u7684\u5b50\u96c6\u4f5c\u4e3a\u6d4b\u8bd5\u96c6 \u8fdb\u884c k \u6b21\u8bad\u7ec3\u548c\u6d4b\u8bd5\uff0c\u6700\u7ec8\u8fd4\u56de k \u6b21\u6d4b\u8bd5\u7ed3\u679c\u7684\u5747\u503c \u4e00\u822c k \u4e3a 10","title":"\u4ea4\u53c9\u9a8c\u8bc1\u6cd5"},{"location":"cs/ai/ml/#_46","text":"\u5b9e\u9645\u6a21\u578b\u4e0e\u9884\u671f\u6a21\u578b\u90fd\u4f7f\u7528 m \u4e2a\u8bad\u7ec3\u6837\u672c \u7ea6\u6709 1/3 \u7684\u6837\u672c\u6ca1\u5728\u8bad\u7ec3\u96c6\u4e2d\u51fa\u73b0 \u4ece\u521d\u59cb\u6570\u636e\u96c6\u4e2d\u4ea7\u751f\u591a\u4e2a\u4e0d\u540c\u7684\u8bad\u7ec3\u96c6\uff0c\u5bf9\u96c6\u6210\u5b66\u4e60\u6709\u5f88\u5927\u7684\u597d\u5904 \u81ea\u52a9\u6cd5\u5728\u6570\u636e\u96c6\u8f83\u5c0f\uff0c\u96be\u4ee5\u6709\u6548\u5212\u5206\u8bad\u7ec3/\u6d4b\u8bd5\u96c6\u65f6\u5f88\u6709\u7528 \u81ea\u52a9\u6cd5\u4ea7\u751f\u7684\u6570\u636e\u96c6\u6539\u53d8\u4e86\u521d\u59cb\u6570\u636e\u96c6\u7684\u5206\u5e03\uff0c\u4f1a\u5f15\u5165\u4f30\u8ba1\u504f\u5dee\uff0c\u5728\u6570\u636e\u91cf\u8db3\u591f\u65f6\uff0c\u7559\u51fa\u6cd5\u548c\u4ea4\u53c9\u9a8c\u8bc1\u6cd5\u66f4\u5e38\u7528","title":"\u81ea\u52a9\u6cd5"},{"location":"cs/ai/ml/#_47","text":"\u5206\u7c7b\u4efb\u52a1\u6700\u5e38\u7528\u7684\u662f\u9519\u8bef\u7387\u548c\u7cbe\u5ea6 \u9519\u8bef\u7387\uff1a \\(E(f;D)=\\frac{1}{m} \\sum_{i=1}^m (f(\\mathbf{x}_i) \\ne y_i)\\) \u7cbe\u5ea6\uff1a \\(acc(f;D)=\\frac{1}{m} \\sum_{i=1}^m (f(\\mathbf{x}_i) = y_i)=1-E(f;D)\\) \u56de\u5f52\u4efb\u52a1\u6700\u5e38\u7528\u7684\u662f\u5747\u65b9\u8bef\u5dee \\(E(f;D)=\\frac{1}{m} \\sum_{i=1}^m (f(\\mathbf{x}_i) - y_i)^2\\) \u6df7\u6dc6\u77e9\u9635 Confusion matrix \u67e5\u51c6\u7387 Precision\uff1a \\(P=\\frac{TP}{TP+FP}\\) \u67e5\u5168\u7387 Recall\uff1a \\(P=\\frac{TP}{TP+FN}\\) P-R \u66f2\u7ebf\uff1a\u6839\u636e\u5b66\u4e60\u5668\u7684\u9884\u6d4b\u7ed3\u679c\u6309\u6b63\u4f8b\u53ef\u80fd\u6027\u5927\u5c0f\u5bf9\u6837\u4f8b\u8fdb\u884c\u6392\u5e8f\uff0c\u5e76\u9010\u4e2a\u628a\u6837\u672c\u4f5c\u4e3a\u6b63\u4f8b\u8fdb\u884c\u9884\u6d4b\uff0c\u5219\u53ef\u4ee5\u5f97\u5230\u67e5\u51c6\u7387-\u67e5\u5168\u7387 F1 Score\uff1a \\(F1 Score=2\\frac{PR}{P+R}\\) \u66f4\u4e00\u822c\u7684\u5f62\u5f0f \\(F_\\beta = \\frac{(1+\\beta^2) \\times P \\times R}{(\\beta^2 \\times P) + R}\\) \\(\\beta=1\\) \uff1a\u6807\u51c6 F1 \\(\\beta<1\\) \uff1a\u66f4\u91cd\u89c6\u67e5\u51c6\u7387\uff08\u5546\u54c1\u63a8\u8350\u7cfb\u7edf\uff09 \\(\\beta>1\\) \uff1a\u66f4\u91cd\u89c6\u67e5\u5168\u7387\uff08\u9003\u72af\u4fe1\u606f\u68c0\u7d22\uff09 ROC \u66f2\u7ebf\uff1a\u53d7\u8bd5\u8005\u5de5\u4f5c\u7279\u5f81\u66f2\u7ebf \u6a2a\u8f74\uff1a \\(FPR=\\frac{FP}{FP+TN}\\) \u7eb5\u8f74\uff1a \\(TPR=\\frac{TP}{TP+FN}\\) AUC\uff1aROC \u66f2\u7ebf\u4e0b\u7684\u9762\u79ef\uff0c\u8d8a\u5927\u8d8a\u597d \u4ee3\u4ef7\u654f\u611f\u9519\u8bef\u7387","title":"\u6027\u80fd\u5ea6\u91cf"},{"location":"cs/ai/ml/#_48","text":"\u5047\u8bbe\u6821\u9a8c \u4e8c\u9879\u6821\u9a8c t \u68c0\u9a8c \u4ea4\u53c9\u9a8c\u8bc1 t \u68c0\u9a8c McNemar \u68c0\u9a8c Friedman \u68c0\u9a8c Nemenyi \u68c0\u9a8c","title":"\u6bd4\u8f83\u6821\u9a8c"},{"location":"cs/ai/ml/#_49","text":"","title":"\u805a\u7c7b"},{"location":"cs/ai/mode-recognition/","text":"\u6a21\u5f0f\u8bc6\u522b \u00b6 \u7ea6 3653 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 12 \u5206\u949f Abstract \u5f52\u6863\u5b66\u4e60\u6a21\u5f0f\u8bc6\u522b\u8bfe\u7684\u4e00\u4e9b\u7b14\u8bb0 \u6a21\u5f0f\u8bc6\u522b\u7684\u6982\u8ff0 \u00b6 \u6a21\u5f0f\u548c\u6a21\u5f0f\u8bc6\u522b\u7684\u6982\u5ff5 \u00b6 \u6a21\u5f0f\uff1a\u5bf9\u67d0\u4e9b\u611f\u5174\u8da3\u7684\u5ba2\u4f53\u7684\u5b9a\u91cf\u7684\u6216\u7ed3\u6784\u7684\u63cf\u8ff0\u3002\u6a21\u5f0f\u7c7b\u662f\u5177\u6709\u67d0\u4e9b\u5171\u540c\u7279\u6027\u7684\u6a21\u5f0f\u7684\u96c6\u5408\u3002 \u6a21\u5f0f\u8bc6\u522b\uff1a\u7814\u7a76\u4e00\u79cd\u81ea\u52a8\u6280\u672f\uff0c\u4f9d\u9760\u8fd9\u79cd\u6280\u672f\uff0c\u8ba1\u7b97\u673a\u5c06\u81ea\u52a8\u5730\uff08\u6216\u4eba\u5c3d\u91cf\u5c11\u5730\u5e72\u6d89\uff09\u628a\u5f85\u522b\u8bc6\u6a21\u5f0f\u5206\u914d\u5230\u5404\u81ea\u7684\u6a21\u5f0f\u7c7b\u4e2d\u53bb\u3002 \u6a21\u5f0f\u8bc6\u522b\u7cfb\u7edf\u7ec4\u6210 \u00b6 \u6ce8\u610f\u201c\u5904\u7406\u201d\u4e0e\u201c\u8bc6\u522b\u201d\u4e24\u4e2a\u6982\u5ff5\u7684\u533a\u522b \u6a21\u5f0f\u8bc6\u522b\u7684\u5206\u7c7b \u00b6 \u4ece\u7406\u8bba\u4e0a\u5206\u7c7b \u7edf\u8ba1\u6a21\u5f0f\u8bc6\u522b \u53e5\u6cd5\u6a21\u5f0f\u8bc6\u522b\uff08\u7ed3\u6784\u6a21\u5f0f\u8bc6\u522b\uff09 \u6a21\u7cca\u6a21\u5f0f\u8bc6\u522b \u795e\u7ecf\u7f51\u7edc\u6a21\u5f0f\u8bc6\u522b \u4ece\u5b9e\u73b0\u65b9\u6cd5\u5206\u7c7b \u76d1\u7763\u5206\u7c7b \u975e\u76d1\u7763\u5206\u7c7b \u6a21\u5f0f\u8bc6\u522b\u7684\u5e94\u7528 \u00b6 \u4e0d\u505c\u8f66\u6536\u8d39\u7cfb\u7edf \u5173\u952e\uff1a\u8f66\u578b\u7684\u81ea\u52a8\u5206\u7c7b\u3002\u51e0\u79cd\u4e3b\u8981\u6280\u672f\uff1a \u63d0\u53d6\u8f66\u8f86\u5916\u5f62\u51e0\u4f55\u53c2\u6570\u8fdb\u884c\u5904\u7406\u5206\u6790\uff0c\u5b9e\u73b0\u5206\u7c7b\u3002\u5982\u89c6\u9891\u68c0\u6d4b\u65b9\u6cd5\u3001\u7ea2\u5916\u68c0\u6d4b\u65b9\u6cd5\u3002 \u6d4b\u91cf\u8f66\u8f86\u7684\u5176\u4ed6\u7269\u7406\u53c2\u6570\uff08\u566a\u58f0\u3001\u632f\u52a8\u3001\u538b\u91cd\u7b49\uff09\u5b9e\u73b0\u5206\u7c7b\u3002\u5982\u52a8\u6001\u79f0\u91cd\u3001\u7535\u78c1\u611f\u5e94\u7b49\u3002 \u76f4\u63a5\u8bc6\u522b\u8f66\u8f86\u8eab\u4efd\u7684\u65b9\u6cd5\u5b9e\u73b0\u5206\u7c7b\u3002\u5982\u7535\u5b50\u6807\u7b7e\u3001\u89c6\u9891\u724c\u7167\u65b9\u6cd5\u7b49 \u805a\u7c7b\u5206\u6790 \u00b6 \u8ddd\u79bb\u805a\u7c7b\u7684\u6982\u5ff5 \u00b6 \u6982\u5ff5\uff1a \u7269\u4ee5\u7c7b\u805a \u805a\u7c7b\u5206\u6790\uff1a\u6839\u636e\u6a21\u5f0f\u4e4b\u95f4\u7684 \u76f8\u4f3c\u6027 \u5bf9\u6a21\u5f0f\u8fdb\u884c\u5206\u7c7b\uff0c\u662f\u4e00\u79cd\u975e\u76d1\u7763\u5206\u7c7b\u65b9\u6cd5\u3002 \u76f8\u4f3c\u5ea6\u542b\u4e49 \u6709 n \u4e2a\u7279\u5f81\u5219\u7ec4\u6210 n \u7ef4\u5411\u91cf \\(X=[x_1, x_2, ..., x_n]^{\\top}\\) \u79f0\u4e3a\u8be5\u6837\u672c\u7684\u7279\u5f81\u5411\u91cf\u3002\u5b83\u76f8\u5f53\u4e8e\u7279\u5f81\u7a7a\u95f4\u4e2d\u7684\u4e00\u4e2a\u70b9\uff0c\u4ee5\u7279\u5f81\u7a7a\u95f4\u4e2d\uff0c \u70b9\u95f4\u7684\u8ddd\u79bb\u51fd\u6570\u4f5c\u4e3a\u6a21\u5f0f\u76f8\u4f3c\u5ea6\u7684\u6d4b\u91cf \uff0c\u4ee5\u201c\u8ddd\u79bb\u201d\u4f5c\u4e3a\u6a21\u5f0f\u5206\u7c7b\u7684\u4f9d\u636e\uff0c \u8ddd\u79bb\u8d8a\u5c0f\uff0c\u8d8a\u76f8\u4f3c \u805a\u7c7b\u5206\u6790\u662f\u5426\u6709\u6548\uff0c\u4e0e\u6a21\u5f0f\u7279\u5f81\u5411\u91cf\u7684\u5206\u5e03\u5f62\u5f0f\u6709\u5f88\u5927\u5173\u7cfb\u3002\u9009\u53d6\u7684\u7279\u5f81\u5411\u91cf\u662f\u5426\u5408\u9002\u975e\u5e38\u5173\u952e\u3002 \u76f8\u4f3c\u6027\u6d4b\u5ea6\u548c\u805a\u7c7b\u51c6\u5219 \u00b6 \u76f8\u4f3c\u6027\u6d4b\u5ea6 \u00b6 \u8861\u91cf\u6a21\u5f0f\u4e4b\u95f4\u76f8\u4f3c\u6027\u7684\u4e00\u79cd\u5c3a\u5ea6\u3002\u5982\uff1a\u8ddd\u79bb\u3002 \u6b27\u6c0f\u8ddd\u79bb \u8bbe \\(X_1, X_2\\) \u4e3a\u4e24\u4e2a n \u7ef4\u6a21\u5f0f\u6837\u672c\uff0c \\(X_1 = [x_{11}, x_{12}, ..., x_{1n}]^{\\top}, X_2 = [x_{21}, x_{22}, ..., x_{2n}]^{\\top}\\) \uff0c\u6b27\u6c0f\u8ddd\u79bb\u5b9a\u4e49\u4e3a: \\[ D(X_1, X_2) = \\parallel X_1 - X_2 \\parallel = \\sqrt{(X_1 - X_2)^{\\top}(X_1-X_2)} \\] \u8ddd\u79bb\u8d8a\u5c0f\u8d8a\u76f8\u4f3c\u3002 \u9a6c\u5f0f\u8ddd\u79bb \u5e73\u65b9\u8868\u8fbe\u5f0f\uff1a \\(D^2=(X_1-X_2)^{\\top}C^{-1}(X_1-X_2)\\) \u4ee4 \\(M:\\) \u5747\u503c\u5411\u91cf M_Mean\uff0c \\(C:\\) \u8be5\u7c7b\u6a21\u5f0f\u603b\u4f53\u7684\u534f\u65b9\u5dee\u77e9\u9635 C_covariance\u3002 \u5bf9 n \u7ef4\u5411\u91cf: \\(X=[x_1, ..., x_n]^{\\top},M=[m_1,...,m_n]^{\\top}\\) \\[ C = E\\{(X-M)(X-M)^{\\top}\\} \\\\ = E \\{ \\begin{bmatrix} (x_1-m_1) \\\\ (x_2-m_2) \\\\ ... \\\\ (x_n-m_n) \\end{bmatrix} [(x_1-m_1)(x_2-m_2)\\cdot \\cdot \\cdot (x_n-m_n)]\\} \\\\ = \\begin{bmatrix} \\sigma_{11}^2 & \\sigma_{12}^2 & ... & \\sigma_{1n}^2 \\\\ \\sigma_{21}^2 & \\sigma_{22}^2 & ... & \\sigma_{2n}^2 \\\\ ... & ... & ... & ... \\\\ \\sigma_{n1}^2 & \\sigma_{n2}^2 & ... & \\sigma_{nn}^2 \\end{bmatrix} \\] \u8868\u793a\u7684\u6982\u5ff5\u662f\u5404\u5206\u91cf\u4e0a\u6a21\u5f0f\u6837\u672c\u5230\u5747\u503c\u7684\u8ddd\u79bb\uff0c\u4e5f\u5c31\u662f\u5728\u5404\u7ef4\u4e0a\u6a21\u5f0f\u7684\u5206\u6563\u60c5\u51b5\u3002 \\(\\sigma_{jk}^2\\) \u8d8a\u5927\uff0c\u79bb\u5747\u503c\u8d8a\u8fdc\u3002 \u5f53 \\(C=I\\) \u65f6\uff0c\u9a6c\u5f0f\u8ddd\u79bb\u5c31\u662f\u6b27\u6c0f\u8ddd\u79bb\u3002 \u7279\u70b9\uff1a \u9a6c\u5f0f\u8ddd\u79bb\u7684\u8ba1\u7b97\u662f\u5efa\u7acb\u5728\u603b\u4f53\u6837\u672c\u7684\u57fa\u7840\u4e0a\u3002\u540c\u6837\u7684\u4e24\u4e2a\u6837\u672c\uff0c\u653e\u5165\u4e24\u4e2a\u4e0d\u540c\u7684\u603b\u4f53\u4e2d\uff0c\u6700\u540e\u8ba1\u7b97\u5f97\u51fa\u4e24\u4e2a\u6837\u672c\u95f4\u7684\u9a6c\u5f0f\u8ddd\u79bb\u901a\u5e38\u662f\u4e0d\u76f8\u540c\u7684\uff1b \u4e0d\u53d7\u91cf\u7eb2\u7684\u5f71\u54cd\uff0c\u4e24\u70b9\u4e4b\u95f4\u7684\u9a6c\u5f0f\u8ddd\u79bb\u4e0e\u539f\u59cb\u6570\u636e\u7684\u6d4b\u91cf\u5355\u4f4d\u65e0\u5173\uff1b \u9a6c\u5f0f\u8ddd\u79bb\u53ef\u4ee5\u6392\u51fa\u53d8\u91cf\u4e4b\u95f4\u7684\u76f8\u5173\u6027\u7684\u5e72\u6270\uff1b \u5938\u5927\u4e86\u53d8\u5316\u5fae\u5c0f\u7684\u53d8\u91cf\u7684\u4f5c\u7528\u3002 \u660e\u6c0f\u8ddd\u79bb n \u7ef4\u6a21\u5f0f\u6837\u672c\u5411\u91cf \\(X_i\u3001X_j\\) \u95f4\u7684\u660e\u6c0f\u8ddd\u79bb\u8868\u793a\u4e3a\uff1a \\[ D_m(X_i, X_j)=[\\sum_{k=1}^n|x_{ik}-x_{jk}|^m]^{\\frac{1}{m}} \\] \u5f0f\u4e2d\uff0c \\(x_{ik}, x_{jk}\\) \u5206\u522b\u8868\u793a \\(X_i\\) \u548c \\(X_j\\) \u7684\u7b2c k \u4e2a\u5206\u91cf\u3002 \u5f53 \\(m=2\\) \u65f6\uff0c\u660e\u6c0f\u8ddd\u79bb\u4e3a\u6b27\u6c0f\u8ddd\u79bb\u3002 \u5f53 \\(m=1\\) \u65f6\uff0c \\(D_1(X_i, X_j)=\\sum_{k=1}^n|x_{ik}-x_{jk}|\\) \uff0c\u4e3a\u8857\u574a\u8ddd\u79bb\u3002 \u6c49\u660e\u8ddd\u79bb \u8bbe \\(X_i\u3001X_j\\) \u4e3a n \u7ef4\u4e8c\u503c(1 \u6216 -1)\u6a21\u5f0f\u6837\u672c\u5411\u91cf\uff0c\u5219 \u6c49\u660e\u8ddd\u79bb\u4e3a \\(D_h(X_i, X_j)=\\frac{1}{2}(n-\\sum_{k=1}^n x_{ik}*x_{jk})\\) \u5f0f\u4e2d\uff0c \\(x_{ik}, x_{jk}\\) \u5206\u522b\u8868\u793a \\(X_i\\) \u548c \\(X_j\\) \u7684\u7b2c k \u4e2a\u5206\u91cf\u3002 \u4e24\u4e2a\u6a21\u5f0f\u5411\u91cf\u7684\u5404\u5206\u91cf\u53d6\u503c\u5747\u4e0d\u540c\uff1a \\(D_h(X_i, X_j)=n\\) \uff0c\u5168\u76f8\u540c\uff1a \\(D_h(X_i, X_j)=0\\) \u89d2\u5ea6\u76f8\u4f3c\u6027\u51fd\u6570 \\[ S(X_i, X_j) = \\frac{X_i^{\\top}X_j}{\\parallel X_i \\parallel \\cdot \\parallel X_j \\parallel} \\] \u662f\u6a21\u5f0f\u5411\u91cf \\(X_i, X_j\\) \u4e4b\u95f4\u7684\u5939\u89d2\u7684\u4f59\u5f26\u3002 Tanimoto \u6d4b\u5ea6 \u7528\u4e8e 0,1 \u4e8c\u503c\u7279\u5f81\u7684\u60c5\u51b5, \\[ S(X_i,X_j)=\\frac{X_i^{\\top}X_j}{X_i^{\\top}X_i+X_j^{\\top}X_j-X_i^{\\top}X_j} \\\\ \\ \\\\ = \\frac{X_i,X_j\u4e2d\u5171\u6709\u7684\u7279\u5f81\u6570\u76ee}{X_i\u548cX_j\u4e2d\u5360\u6709\u7684\u7279\u5f81\u6570\u76ee\u7684\u603b\u6570} \\] \u76f8\u4f3c\u6027\u6d4b\u5ea6\u51fd\u6570\u7684\u5171\u540c\u70b9\u90fd\u6d89\u53ca\u5230\u628a\u4e24\u4e2a\u76f8\u6bd4\u8f83\u7684\u5411\u91cf \\(X_i,X_j\\) \u7684\u5206\u91cf\u503c\u7ec4\u5408\u8d77\u6765\uff0c\u4f46\u600e\u6837\u7ec4\u5408\u5e76\u65e0\u666e\u904d\u6709\u6548\u7684\u65b9\u6cd5\uff0c\u5bf9\u5177\u4f53\u7684\u6a21\u5f0f\u5206\u7c7b\uff0c\u9700\u89c6\u60c5\u51b5\u4f5c\u9002\u5f53\u9009\u62e9\u3002 \u805a\u7c7b\u51c6\u5219 \u00b6 \u6839\u636e\u76f8\u4f3c\u6027\u6d4b\u5ea6\u786e\u5b9a\u7684\uff0c\u8861\u91cf\u6a21\u5f0f\u4e4b\u95f4\u662f\u5426\u76f8\u4f3c\u7684\u6807\u51c6\u3002\u5373\u628a\u4e0d\u540c\u6a21\u5f0f\u805a\u4e3a\u4e00\u7c7b\u8fd8\u662f\u5f52\u4e3a\u4e0d\u540c\u7c7b\u7684\u51c6\u5219\u3002 \u786e\u5b9a\u805a\u7c7b\u51c6\u5219\u7684\u4e24\u79cd\u65b9\u5f0f\uff1a \u9608\u503c\u51c6\u5219\uff1a\u6839\u636e\u89c4\u5b9a\u7684\u8ddd\u79bb\u9608\u503c\u8fdb\u884c\u5206\u7c7b\u7684\u51c6\u5219 \u51fd\u6570\u51c6\u5219\uff1a\u5229\u7528\u805a\u7c7b\u51c6\u5219\u51fd\u6570\u8fdb\u884c\u5206\u7c7b\u7684\u51c6\u5219 \u805a\u7c7b\u51c6\u5219\u51fd\u6570\uff1a\u5728\u805a\u7c7b\u5206\u6790\u4e2d\uff0c\u8868\u793a\u6a21\u5f0f\u7c7b\u95f4\u76f8\u4f3c\u6216\u5dee\u5f02\u6027\u7684\u51fd\u6570 \u5b83\u5e94\u662f\u6a21\u5f0f\u6837\u672c\u96c6 \\(\\{X\\}\\) \u548c\u6a21\u5f0f\u7c7b\u522b \\(\\{S_j,j=1,2,..,c\\}\\) \u7684\u51fd\u6570\u3002\u53ef\u4f7f\u805a\u7c7b\u5206\u6790\u8f6c\u5316\u4e3a\u5bfb\u627e\u51c6\u5219\u51fd\u6570\u6781\u503c\u7684\u6700\u4f18\u5316\u95ee\u9898\u3002\u4e00\u79cd\u5e38\u7528\u7684\u6307\u6807\u662f\u8bef\u5dee\u5e73\u65b9\u4e4b\u548c\u3002 \u805a\u7c7b\u51c6\u5219\u51fd\u6570 \\[J=\\sum_{j=1}^c\\sum_{X \\in S_j} \\parallel X-M_j \\parallel^2\\] \u5f0f\u4e2d\uff1ac \u4e3a\u805a\u7c7b\u7c7b\u522b\u7684\u6570\u76ee\uff0c \\(M_j=\\frac{1}{N_j}\\sum_{X \\in S_j}X\\) \u4e3a\u5c5e\u4e8e \\(S_j\\) \u96c6\u7684\u6837\u672c\u7684\u5747\u503c\u5411\u91cf\uff0c \\(N_j\\) \u4e3a \\(S_j\\) \u4e2d\u6837\u672c\u6570\u76ee\u3002 \\(J\\) \u4ee3\u8868\u4e86\u5206\u5c5e\u4e8e c \u4e2a\u805a\u7c7b\u7c7b\u522b\u7684\u5168\u90e8\u6a21\u5f0f\u6837\u672c\u4e0e\u5176\u76f8\u5e94\u7c7b\u522b\u6a21\u5f0f\u5747\u503c\u4e4b\u95f4\u7684\u8bef\u5dee\u5e73\u65b9\u548c\u3002 \u9002\u7528\u8303\u56f4\uff1a\u9002\u7528\u4e8e\u5404\u7c7b\u6837\u672c\u5bc6\u96c6\u4e14\u6570\u76ee\u76f8\u5dee\u4e0d\u591a\uff0c\u800c\u4e0d\u540c\u7c7b\u95f4\u7684\u6837\u672c\u53c8\u660e\u663e\u5206\u5f00\u7684\u60c5\u51b5\u3002 \u57fa\u4e8e\u8ddd\u79bb\u9608\u503c\u7684\u805a\u7c7b\u7b97\u6cd5 \u00b6 \u8fd1\u90bb\u805a\u7c7b\u6cd5 \u00b6 \u95ee\u9898\uff1a\u6709 \\(N\\) \u4e2a\u5f85\u5206\u7c7b\u7684\u6a21\u5f0f \\(\\{X_1, X_2, ..., X_N\\}\\) \uff0c\u8981\u6c42\u6309\u8ddd\u79bb\u9608\u503c \\(T\\) \u5206\u7c7b\u5230\u4ee5 \\(Z_1, Z_2,...\\) \u4e3a\u805a\u7c7b\u4e2d\u5fc3\u7684\u6a21\u5f0f\u7c7b\u4e2d\u3002 \u7b97\u6cd5\u63cf\u8ff0 \u4efb\u53d6\u6837\u672c \\(X_i\\) \u4f5c\u4e3a\u7b2c\u4e00\u4e2a\u805a\u7c7b\u4e2d\u5fc3\u7684\u521d\u59cb\u503c\uff0c\u5982\u4ee4 \\(Z_1=X_1\\) \u8ba1\u7b97\u6837\u672c \\(X_2\\) \u5230 \\(Z_1\\) \u7684\u6b27\u6c0f\u8ddd\u79bb \\(D_{21}=\\parallel X_2 - Z_1 \\parallel\\) \uff0c\u82e5 \\(D_{21}>T\\) \uff0c\u5b9a\u4e49\u4e00\u65b0\u7684\u805a\u7c7b\u4e2d\u5fc3 \\(Z_2=X_2\\) \uff1b\u5426\u5219 \\(X_2 \\in\\) \u4ee5 \\(Z_1\\) \u4e3a\u4e2d\u5fc3\u7684\u805a\u7c7b\u3002 \u5047\u8bbe\u5df2\u6709\u805a\u7c7b\u4e2d\u5fc3 \\(Z_1\u3001Z_2\\) \uff0c\u8ba1\u7b97 \\(D_{31}=\\parallel X_3 - Z_1 \\parallel\\) \u548c \\(D_{32}=\\parallel X_3 - Z_2 \\parallel\\) \uff0c\u82e5 \\(D_{31}>T\\) \u4e14 \\(D_{32} > T\\) \uff0c\u5219\u5efa\u7acb\u7b2c\u4e09\u4e2a\u805a\u7c7b\u4e2d\u5fc3 \\(Z_3=X_3\\) \uff1b\u5426\u5219 \\(X_3 \\in\\) \u79bb \\(Z_1\\) \u548c \\(Z_2\\) \u4e2d\u6700\u8fd1\u8005\uff08\u6700\u8fd1\u90bb\u7684\u805a\u7c7b\u4e2d\u5fc3\uff09\u3002 \u4f9d\u6b64\u7c7b\u63a8\uff0c\u76f4\u5230\u5c06\u6240\u6709\u7684 \\(N\\) \u4e2a\u6837\u672c\u90fd\u8fdb\u884c\u5206\u7c7b \u7b97\u6cd5\u7279\u70b9 \u5c40\u9650\u6027\uff1a\u5f88\u5927\u7a0b\u5ea6\u4e0a\u4f9d\u8d56\u4e8e\u7b2c\u4e00\u4e2a\u805a\u7c7b\u4e2d\u5fc3\u7684\u4f4d\u7f6e\u9009\u62e9\u3001\u5f85\u5206\u7c7b\u6a21\u5f0f\u6837\u672c\u7684\u6392\u5217\u6b21\u5e8f\u3001\u8ddd\u79bb\u9608\u503c \\(T\\) \u7684\u5927\u5c0f\u4ee5\u53ca\u6837\u672c\u5206\u5e03\u7684\u51e0\u4f55\u6027\u8d28\u7b49\u3002 \u4f18\u70b9\uff1a\u8ba1\u7b97\u7b80\u5355\u3002\uff08\u4e00\u79cd\u867d\u7c97\u7cd9\u4f46\u5feb\u901f\u7684\u65b9\u6cd5\uff09 \u6700\u5927\u6700\u5c0f\u7b97\u6cd5\uff08\u5c0f\u4e2d\u53d6\u5927\u8ddd\u79bb\u7b97\u6cd5\uff09 \u00b6 \u95ee\u9898\uff1a\u5df2\u77e5 \\(N\\) \u4e2a\u5f85\u5206\u7c7b\u7684\u6a21\u5f0f \\(\\{X_1, X_2, ..., X_N\\}\\) \uff0c\u5206\u7c7b\u5230\u805a\u7c7b\u4e2d\u5fc3 \\(Z_1, Z_2, ...\\) \u5bf9\u5e94\u7684\u7c7b\u522b\u4e2d \u7b97\u6cd5\u63cf\u8ff0 \u9009\u4efb\u610f\u4e00\u6a21\u5f0f\u6837\u672c\u4f5c\u4e3a\u7b2c\u4e00\u805a\u7c7b\u4e2d\u5fc3 \\(Z_1\\) \u9009\u62e9\u79bb \\(Z_1\\) \u8ddd\u79bb\u6700\u8fdc\u7684\u6837\u672c\u4f5c\u4e3a\u7b2c\u4e8c\u805a\u7c7b\u4e2d\u5fc3 \\(Z_2\\) \u9010\u4e2a\u8ba1\u7b97\u5404\u6a21\u5f0f\u6837\u672c\u4e0e\u5df2\u786e\u5b9a\u7684\u6240\u6709\u805a\u7c7b\u4e2d\u5fc3\u4e4b\u95f4\u7684\u8ddd\u79bb\uff0c\u5e76\u9009\u51fa\u5176\u4e2d\u7684\u6700\u5c0f\u8ddd\u79bb\u3002\u4f8b\u5982\u805a\u7c7b\u4e2d\u5fc3\u6570 \\(k=2\\) \u65f6\uff0c\u8ba1\u7b97 \\(D_{i1}=\\parallel X_i - Z_1 \\parallel\\) , \\(D_{i2}=\\parallel X_i - Z_2 \\parallel\\) \uff0c \\(\\min\\{D_{i1}, D_{i2}\\}, i=1,...,N\\) (N \u4e2a\u6700\u5c0f\u8ddd\u79bb) \u5728\u6240\u6709\u6700\u5c0f\u8ddd\u79bb\u4e2d\u9009\u51fa\u6700\u5927\u8ddd\u79bb\uff0c\u5982\u8be5\u6700\u5927\u503c\u8fbe\u5230 \\(\\parallel Z_1 - Z_2 \\parallel\\) \u7684\u4e00\u5b9a\u5206\u6570\u6bd4\u503c\uff08\u9608\u503c \\(T\\) \uff09\u4ee5\u4e0a\uff0c\u5219\u76f8\u5e94\u7684\u6837\u672c\u70b9\u53d6\u4e3a\u65b0\u7684\u805a\u7c7b\u4e2d\u5fc3\uff0c\u8fd4\u56de 3\uff1b\u5426\u5219\u7ed3\u675f \u91cd\u590d\u6b65\u9aa4 3\u30014\uff0c\u76f4\u5230\u6ca1\u6709\u65b0\u7684\u805a\u7c7b\u4e2d\u5fc3\u51fa\u73b0\u4e3a\u6b62 \u5c06\u6837\u672c \\(\\{X_1, i=1,2,..,N\\}\\) \u6309\u6700\u8fd1\u8ddd\u79bb\u5212\u5206\u5230\u76f8\u5e94\u805a\u7c7b\u4e2d\u5fc3\u5bf9\u5e94\u7684\u7c7b\u522b\u4e2d \u603b\u7ed3\uff1a\u5148\u627e\u4e2d\u5fc3\u540e\u5206\u7c7b\uff1b\u5173\u952e\uff1a\u600e\u4e48\u5f00\u65b0\u7c7b\uff0c\u805a\u7c7b\u4e2d\u5fc3\u5982\u4f55\u5b9a \u5c42\u6b21\u805a\u7c7b\u6cd5 \u00b6 \u6bcf\u4e2a\u6837\u672c\u5148\u81ea\u6210\u4e00\u7c7b\uff0c\u7136\u540e\u6309\u8ddd\u79bb\u51c6\u5219\u9010\u6b65\u5408\u5e76\uff0c\u51cf\u5c11\u7c7b\u6570 \u7b97\u6cd5\u63cf\u8ff0 \\(N\\) \u4e2a\u521d\u59cb\u6a21\u5f0f\u6837\u672c\u81ea\u6210\u4e00\u7c7b\uff0c\u5373\u5efa \\(N\\) \u7c7b\uff1a \\(G_1(0), G_2(0), ..., G_N(0)\\) \uff0c\u8ba1\u7b97\u5404\u7c7b\u4e4b\u95f4\uff08\u5373\u5404\u6837\u672c\u95f4\uff09\u7684\u8ddd\u79bb\uff0c\u5f97\u4e00 \\(N \\times N\\) \u7ef4\u8ddd\u79bb\u77e9\u9635 \\(\\mathbf{D}(0)\\) \u3002 \\(\u201c0\u201d\\) \u8868\u793a\u521d\u59cb\u72b6\u6001 \u5047\u8bbe\u5df2\u6c42\u5f97\u8ddd\u79bb\u77e9\u9635 \\(\\mathbf{D}(n)\\) \uff08n\u4e3a\u9010\u6b21\u805a\u7c7b\u5408\u5e76\u7684\u6b21\u6570\uff09\uff0c\u627e\u51fa \\(\\mathbf{D}(n)\\) \u4e2d\u7684\u6700\u5c0f\u5143\u7d20\uff0c\u5c06\u5176\u5bf9\u5e94\u7684\u4e24\u7c7b\u5408\u5e76\u6210\u4e00\u7c7b\u3002\u7531\u6b64\u5efa\u7acb\u65b0\u7684\u5206\u7c7b\uff1a \\(G_1(n+1), G_2(n+1),...\\) \u8ba1\u7b97\u5408\u5e76\u540e\u65b0\u7c7b\u522b\u4e4b\u95f4\u7684\u8ddd\u79bb\uff0c\u5f97 \\(\\mathbf{D}(n+1)\\) \u8df3\u5230\u7b2c 2 \u6b65\uff0c\u91cd\u590d\u8ba1\u7b97\u53ca\u5408\u5e76 \u7ed3\u675f\u6761\u4ef6 \u53d6\u8ddd\u79bb\u9608\u503c \\(T\\) \uff0c\u5f53 \\(\\mathbf{D}(n)\\) \u7684\u6700\u5c0f\u5206\u91cf\u8d85\u8fc7\u7ed9\u5b9a\u503c \\(T\\) \u65f6\uff0c\u7b97\u6cd5\u505c\u6b62\uff0c\u6240\u5f97\u5373\u4e3a\u805a\u7c7b\u7ed3\u679c \u6216\u4e0d\u8bbe\u9608\u503c \\(T\\) \uff0c\u4e00\u76f4\u5c06\u5168\u90e8\u6837\u672c\u805a\u6210\u4e00\u7c7b\u4e3a\u6b62\uff0c\u8f93\u51fa\u805a\u7c7b\u7684\u5206\u7ea7\u6811 \u95ee\u9898\u8ba8\u8bba\uff1a\u7c7b\u95f4\u8ddd\u79bb\u8ba1\u7b97\u51c6\u5219 \u6700\u77ed\u8ddd\u79bb\u6cd5 \u5982 \\(H\u3001K\\) \u662f\u4e24\u4e2a\u805a\u7c7b\uff0c\u5219\u4e24\u7c7b\u95f4\u7684\u6700\u77ed\u8ddd\u79bb\u5b9a\u4e49\u4e3a: \\[ D_{HK} = \\min\\{D(\\mathbf{X}_H-\\mathbf{X}_K)\\} \\ \\ \\ \\mathbf{X}_H \\in H, \\mathbf{X}_K \\in K \\] \u6700\u957f\u8ddd\u79bb\u6cd5 \\[ D_{HK} = \\max\\{D(\\mathbf{X}_H-\\mathbf{X}_K)\\} \\ \\ \\ \\mathbf{X}_H \\in H, \\mathbf{X}_K \\in K \\\\ \u82e5 K \u7c7b\u7531 I\u3001J \u4e24\u7c7b\u5408\u5e76\u800c\u6210\u5219 \\\\ D_{HK} = \\max\\{D_{HI}, D_{HJ}\\} \\] \u4e2d\u95f4\u8ddd\u79bb\u6cd5 \u4ecb\u4e8e\u6700\u957f\u4e0e\u6700\u77ed\u7684\u8ddd\u79bb\u4e4b\u95f4 \\[ D_{HK}=\\sqrt{\\frac{1}{2} D_{HI}^2+\\frac{1}{2}D_{HJ}^2-\\frac{1}{4}D_{IJ}^2} \\] \u91cd\u5fc3\u6cd5 \u5c06\u6bcf\u7c7b\u4e2d\u5305\u542b\u7684\u6837\u672c\u6570\u8003\u8651\u8fdb\u53bb\u3002\u82e5 \\(I\\) \u7c7b\u4e2d\u6709 \\(n_I\\) \u4e2a\u6837\u672c\uff0c\u82e5 \\(J\\) \u7c7b\u4e2d\u6709 \\(n_J\\) \u4e2a\u6837\u672c \\[ D_{HK}=\\sqrt{\\frac{n_I}{n_I+n_J} D_{HI}^2+\\frac{n_J}{n_I+n_J}D_{HJ}^2-\\frac{n_In_J}{n_I+n_J}D_{IJ}^2} \\] \u7c7b\u5e73\u5747\u8ddd\u79bb\u6cd5 \\[ D_{HK}=\\sqrt{\\frac{1}{n_Hn_K} \\sum_{i \\in H,j \\in K}d_{ij}^2} \\] \\(d_{ij}\\) \uff1a \\(H\\) \u7c7b\u4efb\u4e00\u6837\u672c \\(X_i\\) \u548c \\(K\\) \u7c7b\u4efb\u4e00\u6837\u672c \\(X_i\\) \u4e4b\u95f4\u7684\u6b27\u6c0f\u8ddd\u79bb\u5e73\u65b9 \u82e5 \\(K\\) \u7c7b\u7531 \\(I\\) \u7c7b\u548c \\(J\\) \u7c7b\u5408\u5e76\u4ea7\u751f\uff0c\u5219\u9012\u63a8\u5f0f\u4e3a \\[ D_{HK}=\\sqrt{\\frac{n_I}{n_I+n_J} D_{HI}^2+\\frac{n_J}{n_I+n_J}D_{HJ}^2} \\] \u52a8\u6001\u805a\u7c7b\u6cd5 \u00b6 \u4e24\u79cd\u5e38\u7528\u7684\u7b97\u6cd5\uff1a \\(K\\) -\u5747\u503c\u7b97\u6cd5(\u6216 \\(C\\) -\u5747\u503c\u7b97\u6cd5) \u8fed\u4ee3\u81ea\u7ec4\u7ec7\u7684\u6570\u636e\u5206\u6790\u7b97\u6cd5 K-\u5747\u503c\u7b97\u6cd5 \u00b6 \u57fa\u4e8e\u4f7f\u805a\u7c7b\u51c6\u5219\u51fd\u6570\u6700\u5c0f\u5316 \u51c6\u5219\u51fd\u6570\uff1a\u805a\u7c7b\u96c6\u4e2d\u6bcf\u4e00\u6837\u672c\u70b9\u5230\u8be5\u7c7b\u4e2d\u5fc3\u5230\u8ddd\u79bb\u5e73\u65b9\u548c \u5bf9\u4e8e\u7b2c j \u805a\u7c7b\u96c6\uff0c\u51c6\u5219\u51fd\u6570\u5b9a\u4e49\u4e3a \\(J_j = \\sum_{i=1}^{N_j} \\parallel X_i - Z_j \\parallel ^2\uff0c\\ \\ \\ X_i \\in S_j\\) \\(S_j\\) : \u7b2c j \u4e2a\u805a\u7c7b\u96c6\uff0c\u805a\u7c7b\u4e2d\u5fc3\u4e3a \\(Z_j\\) \\(N_j\\) : \u7b2c j \u4e2a\u805a\u7c7b\u96c6 \\(S_j\\) \u4e2d\u6240\u5305\u542b\u7684\u6837\u672c\u4e2a\u6570 \u5bf9\u6240\u6709 \\(K\\) \u4e2a\u6a21\u5f0f\u7c7b\u6709 \\(J = \\sum_{j=1}^{K} \\sum_{i=1}^{N_j} \\parallel X_i - Z_j \\parallel ^2, \\ \\ \\ X_i \\in S_j\\) \u805a\u7c7b\u51c6\u5219\uff1a \u805a\u7c7b\u4e2d\u5fc3\u7684\u9009\u62e9\u5e94\u4f7f\u51c6\u5219\u51fd\u6570 \\(J\\) \u6781\u5c0f\uff0c\u5373\u4f7f \\(J_j\\) \u7684\u503c\u5f88\u5c0f \u8ba9 \\(\\frac{\\partial J_j}{\\partial \\mathbf{Z}_j}=0\\) \uff0c\u89e3\u5f97 \\(\\mathbf{Z}_j = \\frac{1}{N_j} \\sum_{i=1}^{N_j} \\mathbf{X_i}, \\ \\ \\ \\mathbf{X}_i \\in S_j\\) \u7b97\u6cd5\u63cf\u8ff0: \u4efb\u9009 K \u4e2a\u521d\u59cb\u805a\u7c7b\u4e2d\u5fc3\uff1a \\(\\mathbf{Z}_1(1), \\mathbf{Z}_2(1), ..., \\mathbf{Z}_K(1)\\) \u62ec\u53f7\u5185\u5e8f\u53f7\uff1a\u8fed\u4ee3\u8fd0\u7b97\u7684\u6b21\u5e8f\u53f7 \u6309\u6700\u5c0f\u8ddd\u79bb\u539f\u5219\u5c06\u5176\u4f59\u6837\u54c1\u5206\u914d\u5230 K \u4e2a\u805a\u7c7b\u4e2d\u5fc3\u4e2d\u7684\u67d0\u4e00\u4e2a\uff0c\u5373 \\(\\min\\{\\parallel X - Z_i(k) \\parallel, i=1,2,...,K\\}=\\parallel X-Z_j(k) \\parallel=D_j(k)\uff0c\u5219 X \\in S_j(k)\\) \uff0c\u6ce8\u610f\uff0ck \u662f\u8fed\u4ee3\u8fd0\u7b97\u6b21\u5e8f\u53f7\uff0cK \u662f\u805a\u7c7b\u4e2d\u5fc3\u4e2a\u6570 \u8ba1\u7b97\u5404\u4e2a\u805a\u7c7b\u4e2d\u5fc3\u7684\u65b0\u5411\u91cf\u503c: \\(Z_j(k+1) \\ \\ j=1,2,...,K\\) \\[ Z_j(k+1) = \\frac{1}{N_j} \\sum_{X \\in S_j(k)} \\mathbf{X} \\ \\ \\ j=1,2,...,K \\] \\(N_j\\) : \u7b2c j \u7c7b\u7684\u6837\u672c\u6570 \u5224\u65ad \u5982\u679c \\(Z_j(k+1) \\ne Z_j(k) \\ \\ j=1,2,...,K\\) \uff0c\u5219\u56de\u5230 2\uff0c\u5c06\u6a21\u5f0f\u6837\u672c\u9010\u4e2a\u91cd\u65b0\u5206\u7c7b\uff0c\u91cd\u590d\u8fed\u4ee3\u8ba1\u7b97 \u5982\u679c \\(Z_j(k+1) = Z_j(k) \\ \\ j=1,2,...,K\\) \uff0c\u7b97\u6cd5\u6536\u655b\uff0c\u8ba1\u7b97\u5b8c\u6bd5 \u8fed\u4ee3\u81ea\u7ec4\u7ec7\u7684\u6570\u636e\u5206\u6790\u7b97\u6cd5 \u00b6 \u7b97\u6cd5\u7279\u70b9 \u52a0\u5165\u4e86\u8bd5\u63a2\u6027\u6b65\u9aa4\uff0c\u7ec4\u6210\u4eba\u673a\u4ea4\u4e92\u7684\u7ed3\u6784 \u53ef\u4ee5\u901a\u8fc7\u7c7b\u7684\u81ea\u52a8\u5408\u5e76\u4e0e\u5206\u88c2\u5f97\u5230\u8f83\u5408\u7406\u7684\u7c7b\u522b\u6570 \u4e0e K-\u5747\u503c\u7b97\u6cd5 \u76f8\u4f3c\uff1a\u805a\u7c7b\u4e2d\u5fc3\u7684\u4f4d\u7f6e\u5747\u901a\u8fc7\u6837\u672c\u5747\u503c\u7684\u8fed\u4ee3\u8fd0\u7b97\u51b3\u5b9a \u76f8\u5f02\uff1aK-\u5747\u503c\u7b97\u6cd5\u7684\u805a\u7c7b\u4e2d\u5fc3\u4e2a\u6570\u4e0d\u53d8\uff0c\u4f46ISODATA\u7b97\u6cd5\u4e0d\u53d8 \u7b97\u6cd5\u63cf\u8ff0 \u9884\u9009 \\(N_C\\) \u4e2a\u805a\u7c7b\u4e2d\u5fc3 \\(\\{Z_1, Z_2, ..., Z_{N_C}\\}\\) \uff0c \\(N_C\\) \u4e5f\u662f\u805a\u7c7b\u8fc7\u7a0b\u4e2d\u5b9e\u9645\u7684\u805a\u7c7b\u4e2d\u5fc3\u4e2a\u6570 \u628a N \u4e2a\u6837\u672c\u6309\u6700\u8fd1\u90bb\u89c4\u5219\u5206\u914d\u5230 \\(N_C\\) \u4e2a\u805a\u7c7b\u4e2d \\[ \u82e5 \\ \\ \\ \\parallel X - Z_j \\parallel = \\min\\{\\parallel X - Z_i, i = 1, ,2, .., N_C\\} \\\\ \u5219 \\ \\ \\ X \\in S_j \\] \u82e5 \\(S_j\\) \u4e2d\u7684\u6837\u672c\u6570 \\(N_j < \\theta_N\\) \uff0c\u5219\u53d6\u6d88\u8be5\u7c7b\uff0c\u5e76\u4e14 \\(N_C\\) \u51cf\u53bb 1 \u4fee\u6b63\u5404\u805a\u7c7b\u4e2d\u5fc3\u503c \\(Z_j = \\frac{1}{N_j} \\sum_{X \\in S_j} X \\ \\ \\ j=1,2,...,N_C\\) \u8ba1\u7b97 \\(S_j\\) \u7684\u7c7b\u5185\u7684\u5e73\u5747\u8ddd\u79bb \\(\\bar{D_j} = \\frac{1}{N_j} \\sum_{X \\in S_j} \\parallel X - Z_j \\parallel \\ \\ \\ j=1,2,...,N_C\\) \u8ba1\u7b97\u603b\u4f53\u5e73\u5747\u8ddd\u79bb \u5224\u65ad\u5f53\u524d\u662f\u5206\u88c2\u8fd8\u662f\u5408\u5e76\uff0c\u51b3\u5b9a\u8fed\u4ee3\u6b65\u9aa4\u7b49 \u82e5 \\(N_C \\le K/2\\) \uff0c\u8fdb\u5165\u5206\u88c2 \u5982\u679c\u8fed\u4ee3\u6b21\u6570\u662f\u5076\u6570\u6216 \\(N_C \\ge 2K\\) \uff0c\u5219\u5408\u5e76\u5426\u5219\u5206\u88c2 \u8ba1\u7b97\u6bcf\u4e2a\u805a\u7c7b\u4e2d\u6837\u672c\u8ddd\u79bb\u7684\u6807\u51c6\u5dee\u5411\u91cf \u6c42\u6bcf\u4e2a\u6807\u51c6\u5dee\u5411\u91cf\u7684\u6700\u5927\u5206\u91cf \u592a\u957f\u4e86\u3002\u3002\u3002 \u5168\u662f\u516c\u5f0f\u3002\u3002\u3002 \u5224\u522b\u51fd\u6570 \u00b6 \u5224\u522b\u51fd\u6570 \u00b6 \u5b9a\u4e49\uff1a\u76f4\u63a5\u7528\u6765\u5bf9\u6a21\u5f0f\u8fdb\u884c\u5206\u7c7b\u7684\u51c6\u5219\u51fd\u6570\u3002\u82e5\u5206\u5c5e\u4e8e \\(\\omega_1, \\omega_2\\) \u7684\u4e24\u7c7b\u6a21\u5f0f\u53ef\u7528\u4e00\u65b9\u7a0b \\(d(X)=0\\) \u6765\u5212\u5206\uff0c\u90a3\u4e48\u79f0 \\(d(X)\\) \u4e3a\u5224\u522b\u51fd\u6570\u3002 \u786e\u5b9a\u5224\u522b\u51fd\u6570\u7684\u4e24\u4e2a\u56e0\u7d20 \u5224\u51b3\u51fd\u6570 \\(d(X)\\) \u7684\u51e0\u4f55\u6027\u8d28\u3002\u5b83\u53ef\u4ee5\u662f\u7ebf\u6027\u7684\u6216\u975e\u7ebf\u6027\u7684\u51fd\u6570\uff0c\u7ef4\u6570\u5728\u7279\u5f81\u63d0\u53d6\u65f6\u5df2\u7ecf\u786e\u5b9a \u5224\u51b3\u51fd\u6570 \\(d(X)\\) \u7684\u7cfb\u6570\uff0c\u7528\u6240\u7ed9\u7684\u6a21\u5f0f\u6837\u672c\u786e\u5b9a \u7ebf\u6027\u5224\u522b\u51fd\u6570 \u00b6 \u4e00\u822c\u5f62\u5f0f \u00b6 \u5c06\u4e8c\u7ef4\u5f62\u5f0f\u63a8\u5e7f\u5230 n \u7ef4\uff0c\u7ebf\u6027\u5224\u522b\u51fd\u6570\u7684\u4e00\u822c\u5f62\u5f0f\u4e3a \\[ d(X) = w_1x_1+w_2x_2+...+w_nx_n+w_{n+1}=W_0^{\\top}X+w_{n+1} \\] \u589e\u5e7f\u5411\u91cf\u7684\u5f62\u5f0f \\(d(X)=W^{\\top}X\\) \u6027\u8d28 \u00b6 \u4e24\u7c7b\u60c5\u51b5 \\[ d(X)=W^{\\top}X \\left\\{\\begin{matrix} >0 & \u82e5 X \\in \\omega_1 \\\\ <0 & \u82e5 X \\in \\omega_2 \\end{matrix}\\right. \\] \u591a\u7c7b\u60c5\u51b5 \\(\\omega_i \\sqrt{\\omega_i}\\) \u4e24\u5206\u6cd5 \u7528\u7ebf\u6027\u5224\u522b\u51fd\u6570\u5c06\u5c5e\u4e8e \\(\\omega_i\\) \u7c7b\u7684\u6a21\u5f0f\u4e0e\u5176\u4f59\u4e0d\u5c5e\u4e8e \\(\\omega_i\\) \u7c7b\u7684\u6a21\u5f0f\u5206\u5f00 \\(\\omega_i \\omega_i\\) \u4e24\u5206\u6cd5 \u4e00\u4e2a\u5224\u522b\u754c\u9762\u53ea\u80fd\u5206\u5f00\u4e24\u4e2a\u7c7b\u522b\uff0c\u4e0d\u80fd\u628a\u5176\u4f59\u6240\u6709\u7684\u7c7b\u522b\u90fd\u5206\u5f00\u3002\u5224\u51b3\u51fd\u6570\u4e3a \\(d_{ij}(X)=W_{ij}^{\\top}X\\) \u6027\u8d28\uff1a \\(d_{ij}(X) > 0, \\forall j \\ne i; i, j = 1,2,...,M\uff0c\u82e5X \\in \\omega_i\\) \u5e7f\u4e49\u7ebf\u6027\u5224\u522b\u51fd\u6570 \u00b6 \u76ee\u7684\uff1a\u5bf9\u975e\u7ebf\u6027\u8fb9\u754c\uff0c\u901a\u8fc7\u67d0\u6620\u5c04\uff0c\u628a\u6a21\u5f0f\u7a7a\u95f4 \\(X\\) \u53d8\u6210 \\(X^*\\) \uff0c\u4ee5\u4fbf\u5c06 \\(X\\) \u7a7a\u95f4\u4e2d\u975e\u7ebf\u6027\u53ef\u5206\u7684\u6a21\u5f0f\u96c6\uff0c\u53d8\u6210\u5728 \\(X^*\\) \u7a7a\u95f4\u4e2d\u7ebf\u6027\u53ef\u5206\u7684\u6a21\u5f0f\u96c6 \u975e\u7ebf\u6027\u591a\u9879\u5f0f\u51fd\u6570 \u00b6 \u975e\u7ebf\u6027\u5224\u522b\u51fd\u6570\u7684\u5f62\u5f0f\u4e4b\u4e00\u662f\u975e\u7ebf\u6027\u591a\u9879\u5f0f\u51fd\u6570 \u8bbe\u4e00\u8bad\u7ec3\u7528\u6a21\u5f0f\u96c6\uff0c \\(\\{X\\}\\) \u5728\u6a21\u5f0f\u7a7a\u95f4 \\(X\\) \u4e2d\u7ebf\u6027\u4e0d\u53ef\u5206\uff0c\u975e\u7ebf\u6027\u5224\u522b\u51fd\u6570\u5f62\u5f0f\u5982\u4e0b\uff1a \\[ d(\\mathbf{X})=w_1f_1(\\mathbf{X})+w_2f_2(\\mathbf{X})+...+w_kf_k(\\mathbf{X})+w_{k+1}=\\sum_{i=1}^{k+1}w_if_i(\\mathbf{X}) \\\\ \u5f0f\u4e2d,\\{f_i(\\mathbf{X}),i=1,2,...,k\\}\u662f\u6a21\u5f0f\\mathbf{X}\u7684\u5355\u503c\u5b9e\u51fd\u6570\uff0cf_{k+1}(\\mathbf{X})=1 \\] \u5e7f\u4e49\u5f62\u5f0f\u7684\u6a21\u5f0f\u5411\u91cf\u5b9a\u4e49\u4e3a\uff1a \\[ \\mathbf{X}^*=[x_1^*+x_2^*+...+x_k^*+1]^\\top=[f_1(\\mathbf{X})+f_2(\\mathbf{X})+...+f_k(\\mathbf{X})+1]^\\top \\] \u7ebf\u6027\u5224\u522b\u51fd\u6570\u7684\u51e0\u4f55\u6027\u8d28 \u00b6 \u6a21\u5f0f\u7a7a\u95f4\u4e0e\u8d85\u5e73\u9762 \u6743\u7a7a\u95f4\u548c\u6743\u5411\u91cf\u89e3 \u611f\u77e5\u5668\u7b97\u6cd5 \u00b6","title":"\u6a21\u5f0f\u8bc6\u522b"},{"location":"cs/ai/mode-recognition/#_1","text":"\u7ea6 3653 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 12 \u5206\u949f Abstract \u5f52\u6863\u5b66\u4e60\u6a21\u5f0f\u8bc6\u522b\u8bfe\u7684\u4e00\u4e9b\u7b14\u8bb0","title":"\u6a21\u5f0f\u8bc6\u522b"},{"location":"cs/ai/mode-recognition/#_2","text":"","title":"\u6a21\u5f0f\u8bc6\u522b\u7684\u6982\u8ff0"},{"location":"cs/ai/mode-recognition/#_3","text":"\u6a21\u5f0f\uff1a\u5bf9\u67d0\u4e9b\u611f\u5174\u8da3\u7684\u5ba2\u4f53\u7684\u5b9a\u91cf\u7684\u6216\u7ed3\u6784\u7684\u63cf\u8ff0\u3002\u6a21\u5f0f\u7c7b\u662f\u5177\u6709\u67d0\u4e9b\u5171\u540c\u7279\u6027\u7684\u6a21\u5f0f\u7684\u96c6\u5408\u3002 \u6a21\u5f0f\u8bc6\u522b\uff1a\u7814\u7a76\u4e00\u79cd\u81ea\u52a8\u6280\u672f\uff0c\u4f9d\u9760\u8fd9\u79cd\u6280\u672f\uff0c\u8ba1\u7b97\u673a\u5c06\u81ea\u52a8\u5730\uff08\u6216\u4eba\u5c3d\u91cf\u5c11\u5730\u5e72\u6d89\uff09\u628a\u5f85\u522b\u8bc6\u6a21\u5f0f\u5206\u914d\u5230\u5404\u81ea\u7684\u6a21\u5f0f\u7c7b\u4e2d\u53bb\u3002","title":"\u6a21\u5f0f\u548c\u6a21\u5f0f\u8bc6\u522b\u7684\u6982\u5ff5"},{"location":"cs/ai/mode-recognition/#_4","text":"\u6ce8\u610f\u201c\u5904\u7406\u201d\u4e0e\u201c\u8bc6\u522b\u201d\u4e24\u4e2a\u6982\u5ff5\u7684\u533a\u522b","title":"\u6a21\u5f0f\u8bc6\u522b\u7cfb\u7edf\u7ec4\u6210"},{"location":"cs/ai/mode-recognition/#_5","text":"\u4ece\u7406\u8bba\u4e0a\u5206\u7c7b \u7edf\u8ba1\u6a21\u5f0f\u8bc6\u522b \u53e5\u6cd5\u6a21\u5f0f\u8bc6\u522b\uff08\u7ed3\u6784\u6a21\u5f0f\u8bc6\u522b\uff09 \u6a21\u7cca\u6a21\u5f0f\u8bc6\u522b \u795e\u7ecf\u7f51\u7edc\u6a21\u5f0f\u8bc6\u522b \u4ece\u5b9e\u73b0\u65b9\u6cd5\u5206\u7c7b \u76d1\u7763\u5206\u7c7b \u975e\u76d1\u7763\u5206\u7c7b","title":"\u6a21\u5f0f\u8bc6\u522b\u7684\u5206\u7c7b"},{"location":"cs/ai/mode-recognition/#_6","text":"\u4e0d\u505c\u8f66\u6536\u8d39\u7cfb\u7edf \u5173\u952e\uff1a\u8f66\u578b\u7684\u81ea\u52a8\u5206\u7c7b\u3002\u51e0\u79cd\u4e3b\u8981\u6280\u672f\uff1a \u63d0\u53d6\u8f66\u8f86\u5916\u5f62\u51e0\u4f55\u53c2\u6570\u8fdb\u884c\u5904\u7406\u5206\u6790\uff0c\u5b9e\u73b0\u5206\u7c7b\u3002\u5982\u89c6\u9891\u68c0\u6d4b\u65b9\u6cd5\u3001\u7ea2\u5916\u68c0\u6d4b\u65b9\u6cd5\u3002 \u6d4b\u91cf\u8f66\u8f86\u7684\u5176\u4ed6\u7269\u7406\u53c2\u6570\uff08\u566a\u58f0\u3001\u632f\u52a8\u3001\u538b\u91cd\u7b49\uff09\u5b9e\u73b0\u5206\u7c7b\u3002\u5982\u52a8\u6001\u79f0\u91cd\u3001\u7535\u78c1\u611f\u5e94\u7b49\u3002 \u76f4\u63a5\u8bc6\u522b\u8f66\u8f86\u8eab\u4efd\u7684\u65b9\u6cd5\u5b9e\u73b0\u5206\u7c7b\u3002\u5982\u7535\u5b50\u6807\u7b7e\u3001\u89c6\u9891\u724c\u7167\u65b9\u6cd5\u7b49","title":"\u6a21\u5f0f\u8bc6\u522b\u7684\u5e94\u7528"},{"location":"cs/ai/mode-recognition/#_7","text":"","title":"\u805a\u7c7b\u5206\u6790"},{"location":"cs/ai/mode-recognition/#_8","text":"\u6982\u5ff5\uff1a \u7269\u4ee5\u7c7b\u805a \u805a\u7c7b\u5206\u6790\uff1a\u6839\u636e\u6a21\u5f0f\u4e4b\u95f4\u7684 \u76f8\u4f3c\u6027 \u5bf9\u6a21\u5f0f\u8fdb\u884c\u5206\u7c7b\uff0c\u662f\u4e00\u79cd\u975e\u76d1\u7763\u5206\u7c7b\u65b9\u6cd5\u3002 \u76f8\u4f3c\u5ea6\u542b\u4e49 \u6709 n \u4e2a\u7279\u5f81\u5219\u7ec4\u6210 n \u7ef4\u5411\u91cf \\(X=[x_1, x_2, ..., x_n]^{\\top}\\) \u79f0\u4e3a\u8be5\u6837\u672c\u7684\u7279\u5f81\u5411\u91cf\u3002\u5b83\u76f8\u5f53\u4e8e\u7279\u5f81\u7a7a\u95f4\u4e2d\u7684\u4e00\u4e2a\u70b9\uff0c\u4ee5\u7279\u5f81\u7a7a\u95f4\u4e2d\uff0c \u70b9\u95f4\u7684\u8ddd\u79bb\u51fd\u6570\u4f5c\u4e3a\u6a21\u5f0f\u76f8\u4f3c\u5ea6\u7684\u6d4b\u91cf \uff0c\u4ee5\u201c\u8ddd\u79bb\u201d\u4f5c\u4e3a\u6a21\u5f0f\u5206\u7c7b\u7684\u4f9d\u636e\uff0c \u8ddd\u79bb\u8d8a\u5c0f\uff0c\u8d8a\u76f8\u4f3c \u805a\u7c7b\u5206\u6790\u662f\u5426\u6709\u6548\uff0c\u4e0e\u6a21\u5f0f\u7279\u5f81\u5411\u91cf\u7684\u5206\u5e03\u5f62\u5f0f\u6709\u5f88\u5927\u5173\u7cfb\u3002\u9009\u53d6\u7684\u7279\u5f81\u5411\u91cf\u662f\u5426\u5408\u9002\u975e\u5e38\u5173\u952e\u3002","title":"\u8ddd\u79bb\u805a\u7c7b\u7684\u6982\u5ff5"},{"location":"cs/ai/mode-recognition/#_9","text":"","title":"\u76f8\u4f3c\u6027\u6d4b\u5ea6\u548c\u805a\u7c7b\u51c6\u5219"},{"location":"cs/ai/mode-recognition/#_10","text":"\u8861\u91cf\u6a21\u5f0f\u4e4b\u95f4\u76f8\u4f3c\u6027\u7684\u4e00\u79cd\u5c3a\u5ea6\u3002\u5982\uff1a\u8ddd\u79bb\u3002 \u6b27\u6c0f\u8ddd\u79bb \u8bbe \\(X_1, X_2\\) \u4e3a\u4e24\u4e2a n \u7ef4\u6a21\u5f0f\u6837\u672c\uff0c \\(X_1 = [x_{11}, x_{12}, ..., x_{1n}]^{\\top}, X_2 = [x_{21}, x_{22}, ..., x_{2n}]^{\\top}\\) \uff0c\u6b27\u6c0f\u8ddd\u79bb\u5b9a\u4e49\u4e3a: \\[ D(X_1, X_2) = \\parallel X_1 - X_2 \\parallel = \\sqrt{(X_1 - X_2)^{\\top}(X_1-X_2)} \\] \u8ddd\u79bb\u8d8a\u5c0f\u8d8a\u76f8\u4f3c\u3002 \u9a6c\u5f0f\u8ddd\u79bb \u5e73\u65b9\u8868\u8fbe\u5f0f\uff1a \\(D^2=(X_1-X_2)^{\\top}C^{-1}(X_1-X_2)\\) \u4ee4 \\(M:\\) \u5747\u503c\u5411\u91cf M_Mean\uff0c \\(C:\\) \u8be5\u7c7b\u6a21\u5f0f\u603b\u4f53\u7684\u534f\u65b9\u5dee\u77e9\u9635 C_covariance\u3002 \u5bf9 n \u7ef4\u5411\u91cf: \\(X=[x_1, ..., x_n]^{\\top},M=[m_1,...,m_n]^{\\top}\\) \\[ C = E\\{(X-M)(X-M)^{\\top}\\} \\\\ = E \\{ \\begin{bmatrix} (x_1-m_1) \\\\ (x_2-m_2) \\\\ ... \\\\ (x_n-m_n) \\end{bmatrix} [(x_1-m_1)(x_2-m_2)\\cdot \\cdot \\cdot (x_n-m_n)]\\} \\\\ = \\begin{bmatrix} \\sigma_{11}^2 & \\sigma_{12}^2 & ... & \\sigma_{1n}^2 \\\\ \\sigma_{21}^2 & \\sigma_{22}^2 & ... & \\sigma_{2n}^2 \\\\ ... & ... & ... & ... \\\\ \\sigma_{n1}^2 & \\sigma_{n2}^2 & ... & \\sigma_{nn}^2 \\end{bmatrix} \\] \u8868\u793a\u7684\u6982\u5ff5\u662f\u5404\u5206\u91cf\u4e0a\u6a21\u5f0f\u6837\u672c\u5230\u5747\u503c\u7684\u8ddd\u79bb\uff0c\u4e5f\u5c31\u662f\u5728\u5404\u7ef4\u4e0a\u6a21\u5f0f\u7684\u5206\u6563\u60c5\u51b5\u3002 \\(\\sigma_{jk}^2\\) \u8d8a\u5927\uff0c\u79bb\u5747\u503c\u8d8a\u8fdc\u3002 \u5f53 \\(C=I\\) \u65f6\uff0c\u9a6c\u5f0f\u8ddd\u79bb\u5c31\u662f\u6b27\u6c0f\u8ddd\u79bb\u3002 \u7279\u70b9\uff1a \u9a6c\u5f0f\u8ddd\u79bb\u7684\u8ba1\u7b97\u662f\u5efa\u7acb\u5728\u603b\u4f53\u6837\u672c\u7684\u57fa\u7840\u4e0a\u3002\u540c\u6837\u7684\u4e24\u4e2a\u6837\u672c\uff0c\u653e\u5165\u4e24\u4e2a\u4e0d\u540c\u7684\u603b\u4f53\u4e2d\uff0c\u6700\u540e\u8ba1\u7b97\u5f97\u51fa\u4e24\u4e2a\u6837\u672c\u95f4\u7684\u9a6c\u5f0f\u8ddd\u79bb\u901a\u5e38\u662f\u4e0d\u76f8\u540c\u7684\uff1b \u4e0d\u53d7\u91cf\u7eb2\u7684\u5f71\u54cd\uff0c\u4e24\u70b9\u4e4b\u95f4\u7684\u9a6c\u5f0f\u8ddd\u79bb\u4e0e\u539f\u59cb\u6570\u636e\u7684\u6d4b\u91cf\u5355\u4f4d\u65e0\u5173\uff1b \u9a6c\u5f0f\u8ddd\u79bb\u53ef\u4ee5\u6392\u51fa\u53d8\u91cf\u4e4b\u95f4\u7684\u76f8\u5173\u6027\u7684\u5e72\u6270\uff1b \u5938\u5927\u4e86\u53d8\u5316\u5fae\u5c0f\u7684\u53d8\u91cf\u7684\u4f5c\u7528\u3002 \u660e\u6c0f\u8ddd\u79bb n \u7ef4\u6a21\u5f0f\u6837\u672c\u5411\u91cf \\(X_i\u3001X_j\\) \u95f4\u7684\u660e\u6c0f\u8ddd\u79bb\u8868\u793a\u4e3a\uff1a \\[ D_m(X_i, X_j)=[\\sum_{k=1}^n|x_{ik}-x_{jk}|^m]^{\\frac{1}{m}} \\] \u5f0f\u4e2d\uff0c \\(x_{ik}, x_{jk}\\) \u5206\u522b\u8868\u793a \\(X_i\\) \u548c \\(X_j\\) \u7684\u7b2c k \u4e2a\u5206\u91cf\u3002 \u5f53 \\(m=2\\) \u65f6\uff0c\u660e\u6c0f\u8ddd\u79bb\u4e3a\u6b27\u6c0f\u8ddd\u79bb\u3002 \u5f53 \\(m=1\\) \u65f6\uff0c \\(D_1(X_i, X_j)=\\sum_{k=1}^n|x_{ik}-x_{jk}|\\) \uff0c\u4e3a\u8857\u574a\u8ddd\u79bb\u3002 \u6c49\u660e\u8ddd\u79bb \u8bbe \\(X_i\u3001X_j\\) \u4e3a n \u7ef4\u4e8c\u503c(1 \u6216 -1)\u6a21\u5f0f\u6837\u672c\u5411\u91cf\uff0c\u5219 \u6c49\u660e\u8ddd\u79bb\u4e3a \\(D_h(X_i, X_j)=\\frac{1}{2}(n-\\sum_{k=1}^n x_{ik}*x_{jk})\\) \u5f0f\u4e2d\uff0c \\(x_{ik}, x_{jk}\\) \u5206\u522b\u8868\u793a \\(X_i\\) \u548c \\(X_j\\) \u7684\u7b2c k \u4e2a\u5206\u91cf\u3002 \u4e24\u4e2a\u6a21\u5f0f\u5411\u91cf\u7684\u5404\u5206\u91cf\u53d6\u503c\u5747\u4e0d\u540c\uff1a \\(D_h(X_i, X_j)=n\\) \uff0c\u5168\u76f8\u540c\uff1a \\(D_h(X_i, X_j)=0\\) \u89d2\u5ea6\u76f8\u4f3c\u6027\u51fd\u6570 \\[ S(X_i, X_j) = \\frac{X_i^{\\top}X_j}{\\parallel X_i \\parallel \\cdot \\parallel X_j \\parallel} \\] \u662f\u6a21\u5f0f\u5411\u91cf \\(X_i, X_j\\) \u4e4b\u95f4\u7684\u5939\u89d2\u7684\u4f59\u5f26\u3002 Tanimoto \u6d4b\u5ea6 \u7528\u4e8e 0,1 \u4e8c\u503c\u7279\u5f81\u7684\u60c5\u51b5, \\[ S(X_i,X_j)=\\frac{X_i^{\\top}X_j}{X_i^{\\top}X_i+X_j^{\\top}X_j-X_i^{\\top}X_j} \\\\ \\ \\\\ = \\frac{X_i,X_j\u4e2d\u5171\u6709\u7684\u7279\u5f81\u6570\u76ee}{X_i\u548cX_j\u4e2d\u5360\u6709\u7684\u7279\u5f81\u6570\u76ee\u7684\u603b\u6570} \\] \u76f8\u4f3c\u6027\u6d4b\u5ea6\u51fd\u6570\u7684\u5171\u540c\u70b9\u90fd\u6d89\u53ca\u5230\u628a\u4e24\u4e2a\u76f8\u6bd4\u8f83\u7684\u5411\u91cf \\(X_i,X_j\\) \u7684\u5206\u91cf\u503c\u7ec4\u5408\u8d77\u6765\uff0c\u4f46\u600e\u6837\u7ec4\u5408\u5e76\u65e0\u666e\u904d\u6709\u6548\u7684\u65b9\u6cd5\uff0c\u5bf9\u5177\u4f53\u7684\u6a21\u5f0f\u5206\u7c7b\uff0c\u9700\u89c6\u60c5\u51b5\u4f5c\u9002\u5f53\u9009\u62e9\u3002","title":"\u76f8\u4f3c\u6027\u6d4b\u5ea6"},{"location":"cs/ai/mode-recognition/#_11","text":"\u6839\u636e\u76f8\u4f3c\u6027\u6d4b\u5ea6\u786e\u5b9a\u7684\uff0c\u8861\u91cf\u6a21\u5f0f\u4e4b\u95f4\u662f\u5426\u76f8\u4f3c\u7684\u6807\u51c6\u3002\u5373\u628a\u4e0d\u540c\u6a21\u5f0f\u805a\u4e3a\u4e00\u7c7b\u8fd8\u662f\u5f52\u4e3a\u4e0d\u540c\u7c7b\u7684\u51c6\u5219\u3002 \u786e\u5b9a\u805a\u7c7b\u51c6\u5219\u7684\u4e24\u79cd\u65b9\u5f0f\uff1a \u9608\u503c\u51c6\u5219\uff1a\u6839\u636e\u89c4\u5b9a\u7684\u8ddd\u79bb\u9608\u503c\u8fdb\u884c\u5206\u7c7b\u7684\u51c6\u5219 \u51fd\u6570\u51c6\u5219\uff1a\u5229\u7528\u805a\u7c7b\u51c6\u5219\u51fd\u6570\u8fdb\u884c\u5206\u7c7b\u7684\u51c6\u5219 \u805a\u7c7b\u51c6\u5219\u51fd\u6570\uff1a\u5728\u805a\u7c7b\u5206\u6790\u4e2d\uff0c\u8868\u793a\u6a21\u5f0f\u7c7b\u95f4\u76f8\u4f3c\u6216\u5dee\u5f02\u6027\u7684\u51fd\u6570 \u5b83\u5e94\u662f\u6a21\u5f0f\u6837\u672c\u96c6 \\(\\{X\\}\\) \u548c\u6a21\u5f0f\u7c7b\u522b \\(\\{S_j,j=1,2,..,c\\}\\) \u7684\u51fd\u6570\u3002\u53ef\u4f7f\u805a\u7c7b\u5206\u6790\u8f6c\u5316\u4e3a\u5bfb\u627e\u51c6\u5219\u51fd\u6570\u6781\u503c\u7684\u6700\u4f18\u5316\u95ee\u9898\u3002\u4e00\u79cd\u5e38\u7528\u7684\u6307\u6807\u662f\u8bef\u5dee\u5e73\u65b9\u4e4b\u548c\u3002 \u805a\u7c7b\u51c6\u5219\u51fd\u6570 \\[J=\\sum_{j=1}^c\\sum_{X \\in S_j} \\parallel X-M_j \\parallel^2\\] \u5f0f\u4e2d\uff1ac \u4e3a\u805a\u7c7b\u7c7b\u522b\u7684\u6570\u76ee\uff0c \\(M_j=\\frac{1}{N_j}\\sum_{X \\in S_j}X\\) \u4e3a\u5c5e\u4e8e \\(S_j\\) \u96c6\u7684\u6837\u672c\u7684\u5747\u503c\u5411\u91cf\uff0c \\(N_j\\) \u4e3a \\(S_j\\) \u4e2d\u6837\u672c\u6570\u76ee\u3002 \\(J\\) \u4ee3\u8868\u4e86\u5206\u5c5e\u4e8e c \u4e2a\u805a\u7c7b\u7c7b\u522b\u7684\u5168\u90e8\u6a21\u5f0f\u6837\u672c\u4e0e\u5176\u76f8\u5e94\u7c7b\u522b\u6a21\u5f0f\u5747\u503c\u4e4b\u95f4\u7684\u8bef\u5dee\u5e73\u65b9\u548c\u3002 \u9002\u7528\u8303\u56f4\uff1a\u9002\u7528\u4e8e\u5404\u7c7b\u6837\u672c\u5bc6\u96c6\u4e14\u6570\u76ee\u76f8\u5dee\u4e0d\u591a\uff0c\u800c\u4e0d\u540c\u7c7b\u95f4\u7684\u6837\u672c\u53c8\u660e\u663e\u5206\u5f00\u7684\u60c5\u51b5\u3002","title":"\u805a\u7c7b\u51c6\u5219"},{"location":"cs/ai/mode-recognition/#_12","text":"","title":"\u57fa\u4e8e\u8ddd\u79bb\u9608\u503c\u7684\u805a\u7c7b\u7b97\u6cd5"},{"location":"cs/ai/mode-recognition/#_13","text":"\u95ee\u9898\uff1a\u6709 \\(N\\) \u4e2a\u5f85\u5206\u7c7b\u7684\u6a21\u5f0f \\(\\{X_1, X_2, ..., X_N\\}\\) \uff0c\u8981\u6c42\u6309\u8ddd\u79bb\u9608\u503c \\(T\\) \u5206\u7c7b\u5230\u4ee5 \\(Z_1, Z_2,...\\) \u4e3a\u805a\u7c7b\u4e2d\u5fc3\u7684\u6a21\u5f0f\u7c7b\u4e2d\u3002 \u7b97\u6cd5\u63cf\u8ff0 \u4efb\u53d6\u6837\u672c \\(X_i\\) \u4f5c\u4e3a\u7b2c\u4e00\u4e2a\u805a\u7c7b\u4e2d\u5fc3\u7684\u521d\u59cb\u503c\uff0c\u5982\u4ee4 \\(Z_1=X_1\\) \u8ba1\u7b97\u6837\u672c \\(X_2\\) \u5230 \\(Z_1\\) \u7684\u6b27\u6c0f\u8ddd\u79bb \\(D_{21}=\\parallel X_2 - Z_1 \\parallel\\) \uff0c\u82e5 \\(D_{21}>T\\) \uff0c\u5b9a\u4e49\u4e00\u65b0\u7684\u805a\u7c7b\u4e2d\u5fc3 \\(Z_2=X_2\\) \uff1b\u5426\u5219 \\(X_2 \\in\\) \u4ee5 \\(Z_1\\) \u4e3a\u4e2d\u5fc3\u7684\u805a\u7c7b\u3002 \u5047\u8bbe\u5df2\u6709\u805a\u7c7b\u4e2d\u5fc3 \\(Z_1\u3001Z_2\\) \uff0c\u8ba1\u7b97 \\(D_{31}=\\parallel X_3 - Z_1 \\parallel\\) \u548c \\(D_{32}=\\parallel X_3 - Z_2 \\parallel\\) \uff0c\u82e5 \\(D_{31}>T\\) \u4e14 \\(D_{32} > T\\) \uff0c\u5219\u5efa\u7acb\u7b2c\u4e09\u4e2a\u805a\u7c7b\u4e2d\u5fc3 \\(Z_3=X_3\\) \uff1b\u5426\u5219 \\(X_3 \\in\\) \u79bb \\(Z_1\\) \u548c \\(Z_2\\) \u4e2d\u6700\u8fd1\u8005\uff08\u6700\u8fd1\u90bb\u7684\u805a\u7c7b\u4e2d\u5fc3\uff09\u3002 \u4f9d\u6b64\u7c7b\u63a8\uff0c\u76f4\u5230\u5c06\u6240\u6709\u7684 \\(N\\) \u4e2a\u6837\u672c\u90fd\u8fdb\u884c\u5206\u7c7b \u7b97\u6cd5\u7279\u70b9 \u5c40\u9650\u6027\uff1a\u5f88\u5927\u7a0b\u5ea6\u4e0a\u4f9d\u8d56\u4e8e\u7b2c\u4e00\u4e2a\u805a\u7c7b\u4e2d\u5fc3\u7684\u4f4d\u7f6e\u9009\u62e9\u3001\u5f85\u5206\u7c7b\u6a21\u5f0f\u6837\u672c\u7684\u6392\u5217\u6b21\u5e8f\u3001\u8ddd\u79bb\u9608\u503c \\(T\\) \u7684\u5927\u5c0f\u4ee5\u53ca\u6837\u672c\u5206\u5e03\u7684\u51e0\u4f55\u6027\u8d28\u7b49\u3002 \u4f18\u70b9\uff1a\u8ba1\u7b97\u7b80\u5355\u3002\uff08\u4e00\u79cd\u867d\u7c97\u7cd9\u4f46\u5feb\u901f\u7684\u65b9\u6cd5\uff09","title":"\u8fd1\u90bb\u805a\u7c7b\u6cd5"},{"location":"cs/ai/mode-recognition/#_14","text":"\u95ee\u9898\uff1a\u5df2\u77e5 \\(N\\) \u4e2a\u5f85\u5206\u7c7b\u7684\u6a21\u5f0f \\(\\{X_1, X_2, ..., X_N\\}\\) \uff0c\u5206\u7c7b\u5230\u805a\u7c7b\u4e2d\u5fc3 \\(Z_1, Z_2, ...\\) \u5bf9\u5e94\u7684\u7c7b\u522b\u4e2d \u7b97\u6cd5\u63cf\u8ff0 \u9009\u4efb\u610f\u4e00\u6a21\u5f0f\u6837\u672c\u4f5c\u4e3a\u7b2c\u4e00\u805a\u7c7b\u4e2d\u5fc3 \\(Z_1\\) \u9009\u62e9\u79bb \\(Z_1\\) \u8ddd\u79bb\u6700\u8fdc\u7684\u6837\u672c\u4f5c\u4e3a\u7b2c\u4e8c\u805a\u7c7b\u4e2d\u5fc3 \\(Z_2\\) \u9010\u4e2a\u8ba1\u7b97\u5404\u6a21\u5f0f\u6837\u672c\u4e0e\u5df2\u786e\u5b9a\u7684\u6240\u6709\u805a\u7c7b\u4e2d\u5fc3\u4e4b\u95f4\u7684\u8ddd\u79bb\uff0c\u5e76\u9009\u51fa\u5176\u4e2d\u7684\u6700\u5c0f\u8ddd\u79bb\u3002\u4f8b\u5982\u805a\u7c7b\u4e2d\u5fc3\u6570 \\(k=2\\) \u65f6\uff0c\u8ba1\u7b97 \\(D_{i1}=\\parallel X_i - Z_1 \\parallel\\) , \\(D_{i2}=\\parallel X_i - Z_2 \\parallel\\) \uff0c \\(\\min\\{D_{i1}, D_{i2}\\}, i=1,...,N\\) (N \u4e2a\u6700\u5c0f\u8ddd\u79bb) \u5728\u6240\u6709\u6700\u5c0f\u8ddd\u79bb\u4e2d\u9009\u51fa\u6700\u5927\u8ddd\u79bb\uff0c\u5982\u8be5\u6700\u5927\u503c\u8fbe\u5230 \\(\\parallel Z_1 - Z_2 \\parallel\\) \u7684\u4e00\u5b9a\u5206\u6570\u6bd4\u503c\uff08\u9608\u503c \\(T\\) \uff09\u4ee5\u4e0a\uff0c\u5219\u76f8\u5e94\u7684\u6837\u672c\u70b9\u53d6\u4e3a\u65b0\u7684\u805a\u7c7b\u4e2d\u5fc3\uff0c\u8fd4\u56de 3\uff1b\u5426\u5219\u7ed3\u675f \u91cd\u590d\u6b65\u9aa4 3\u30014\uff0c\u76f4\u5230\u6ca1\u6709\u65b0\u7684\u805a\u7c7b\u4e2d\u5fc3\u51fa\u73b0\u4e3a\u6b62 \u5c06\u6837\u672c \\(\\{X_1, i=1,2,..,N\\}\\) \u6309\u6700\u8fd1\u8ddd\u79bb\u5212\u5206\u5230\u76f8\u5e94\u805a\u7c7b\u4e2d\u5fc3\u5bf9\u5e94\u7684\u7c7b\u522b\u4e2d \u603b\u7ed3\uff1a\u5148\u627e\u4e2d\u5fc3\u540e\u5206\u7c7b\uff1b\u5173\u952e\uff1a\u600e\u4e48\u5f00\u65b0\u7c7b\uff0c\u805a\u7c7b\u4e2d\u5fc3\u5982\u4f55\u5b9a","title":"\u6700\u5927\u6700\u5c0f\u7b97\u6cd5\uff08\u5c0f\u4e2d\u53d6\u5927\u8ddd\u79bb\u7b97\u6cd5\uff09"},{"location":"cs/ai/mode-recognition/#_15","text":"\u6bcf\u4e2a\u6837\u672c\u5148\u81ea\u6210\u4e00\u7c7b\uff0c\u7136\u540e\u6309\u8ddd\u79bb\u51c6\u5219\u9010\u6b65\u5408\u5e76\uff0c\u51cf\u5c11\u7c7b\u6570 \u7b97\u6cd5\u63cf\u8ff0 \\(N\\) \u4e2a\u521d\u59cb\u6a21\u5f0f\u6837\u672c\u81ea\u6210\u4e00\u7c7b\uff0c\u5373\u5efa \\(N\\) \u7c7b\uff1a \\(G_1(0), G_2(0), ..., G_N(0)\\) \uff0c\u8ba1\u7b97\u5404\u7c7b\u4e4b\u95f4\uff08\u5373\u5404\u6837\u672c\u95f4\uff09\u7684\u8ddd\u79bb\uff0c\u5f97\u4e00 \\(N \\times N\\) \u7ef4\u8ddd\u79bb\u77e9\u9635 \\(\\mathbf{D}(0)\\) \u3002 \\(\u201c0\u201d\\) \u8868\u793a\u521d\u59cb\u72b6\u6001 \u5047\u8bbe\u5df2\u6c42\u5f97\u8ddd\u79bb\u77e9\u9635 \\(\\mathbf{D}(n)\\) \uff08n\u4e3a\u9010\u6b21\u805a\u7c7b\u5408\u5e76\u7684\u6b21\u6570\uff09\uff0c\u627e\u51fa \\(\\mathbf{D}(n)\\) \u4e2d\u7684\u6700\u5c0f\u5143\u7d20\uff0c\u5c06\u5176\u5bf9\u5e94\u7684\u4e24\u7c7b\u5408\u5e76\u6210\u4e00\u7c7b\u3002\u7531\u6b64\u5efa\u7acb\u65b0\u7684\u5206\u7c7b\uff1a \\(G_1(n+1), G_2(n+1),...\\) \u8ba1\u7b97\u5408\u5e76\u540e\u65b0\u7c7b\u522b\u4e4b\u95f4\u7684\u8ddd\u79bb\uff0c\u5f97 \\(\\mathbf{D}(n+1)\\) \u8df3\u5230\u7b2c 2 \u6b65\uff0c\u91cd\u590d\u8ba1\u7b97\u53ca\u5408\u5e76 \u7ed3\u675f\u6761\u4ef6 \u53d6\u8ddd\u79bb\u9608\u503c \\(T\\) \uff0c\u5f53 \\(\\mathbf{D}(n)\\) \u7684\u6700\u5c0f\u5206\u91cf\u8d85\u8fc7\u7ed9\u5b9a\u503c \\(T\\) \u65f6\uff0c\u7b97\u6cd5\u505c\u6b62\uff0c\u6240\u5f97\u5373\u4e3a\u805a\u7c7b\u7ed3\u679c \u6216\u4e0d\u8bbe\u9608\u503c \\(T\\) \uff0c\u4e00\u76f4\u5c06\u5168\u90e8\u6837\u672c\u805a\u6210\u4e00\u7c7b\u4e3a\u6b62\uff0c\u8f93\u51fa\u805a\u7c7b\u7684\u5206\u7ea7\u6811 \u95ee\u9898\u8ba8\u8bba\uff1a\u7c7b\u95f4\u8ddd\u79bb\u8ba1\u7b97\u51c6\u5219 \u6700\u77ed\u8ddd\u79bb\u6cd5 \u5982 \\(H\u3001K\\) \u662f\u4e24\u4e2a\u805a\u7c7b\uff0c\u5219\u4e24\u7c7b\u95f4\u7684\u6700\u77ed\u8ddd\u79bb\u5b9a\u4e49\u4e3a: \\[ D_{HK} = \\min\\{D(\\mathbf{X}_H-\\mathbf{X}_K)\\} \\ \\ \\ \\mathbf{X}_H \\in H, \\mathbf{X}_K \\in K \\] \u6700\u957f\u8ddd\u79bb\u6cd5 \\[ D_{HK} = \\max\\{D(\\mathbf{X}_H-\\mathbf{X}_K)\\} \\ \\ \\ \\mathbf{X}_H \\in H, \\mathbf{X}_K \\in K \\\\ \u82e5 K \u7c7b\u7531 I\u3001J \u4e24\u7c7b\u5408\u5e76\u800c\u6210\u5219 \\\\ D_{HK} = \\max\\{D_{HI}, D_{HJ}\\} \\] \u4e2d\u95f4\u8ddd\u79bb\u6cd5 \u4ecb\u4e8e\u6700\u957f\u4e0e\u6700\u77ed\u7684\u8ddd\u79bb\u4e4b\u95f4 \\[ D_{HK}=\\sqrt{\\frac{1}{2} D_{HI}^2+\\frac{1}{2}D_{HJ}^2-\\frac{1}{4}D_{IJ}^2} \\] \u91cd\u5fc3\u6cd5 \u5c06\u6bcf\u7c7b\u4e2d\u5305\u542b\u7684\u6837\u672c\u6570\u8003\u8651\u8fdb\u53bb\u3002\u82e5 \\(I\\) \u7c7b\u4e2d\u6709 \\(n_I\\) \u4e2a\u6837\u672c\uff0c\u82e5 \\(J\\) \u7c7b\u4e2d\u6709 \\(n_J\\) \u4e2a\u6837\u672c \\[ D_{HK}=\\sqrt{\\frac{n_I}{n_I+n_J} D_{HI}^2+\\frac{n_J}{n_I+n_J}D_{HJ}^2-\\frac{n_In_J}{n_I+n_J}D_{IJ}^2} \\] \u7c7b\u5e73\u5747\u8ddd\u79bb\u6cd5 \\[ D_{HK}=\\sqrt{\\frac{1}{n_Hn_K} \\sum_{i \\in H,j \\in K}d_{ij}^2} \\] \\(d_{ij}\\) \uff1a \\(H\\) \u7c7b\u4efb\u4e00\u6837\u672c \\(X_i\\) \u548c \\(K\\) \u7c7b\u4efb\u4e00\u6837\u672c \\(X_i\\) \u4e4b\u95f4\u7684\u6b27\u6c0f\u8ddd\u79bb\u5e73\u65b9 \u82e5 \\(K\\) \u7c7b\u7531 \\(I\\) \u7c7b\u548c \\(J\\) \u7c7b\u5408\u5e76\u4ea7\u751f\uff0c\u5219\u9012\u63a8\u5f0f\u4e3a \\[ D_{HK}=\\sqrt{\\frac{n_I}{n_I+n_J} D_{HI}^2+\\frac{n_J}{n_I+n_J}D_{HJ}^2} \\]","title":"\u5c42\u6b21\u805a\u7c7b\u6cd5"},{"location":"cs/ai/mode-recognition/#_16","text":"\u4e24\u79cd\u5e38\u7528\u7684\u7b97\u6cd5\uff1a \\(K\\) -\u5747\u503c\u7b97\u6cd5(\u6216 \\(C\\) -\u5747\u503c\u7b97\u6cd5) \u8fed\u4ee3\u81ea\u7ec4\u7ec7\u7684\u6570\u636e\u5206\u6790\u7b97\u6cd5","title":"\u52a8\u6001\u805a\u7c7b\u6cd5"},{"location":"cs/ai/mode-recognition/#k-","text":"\u57fa\u4e8e\u4f7f\u805a\u7c7b\u51c6\u5219\u51fd\u6570\u6700\u5c0f\u5316 \u51c6\u5219\u51fd\u6570\uff1a\u805a\u7c7b\u96c6\u4e2d\u6bcf\u4e00\u6837\u672c\u70b9\u5230\u8be5\u7c7b\u4e2d\u5fc3\u5230\u8ddd\u79bb\u5e73\u65b9\u548c \u5bf9\u4e8e\u7b2c j \u805a\u7c7b\u96c6\uff0c\u51c6\u5219\u51fd\u6570\u5b9a\u4e49\u4e3a \\(J_j = \\sum_{i=1}^{N_j} \\parallel X_i - Z_j \\parallel ^2\uff0c\\ \\ \\ X_i \\in S_j\\) \\(S_j\\) : \u7b2c j \u4e2a\u805a\u7c7b\u96c6\uff0c\u805a\u7c7b\u4e2d\u5fc3\u4e3a \\(Z_j\\) \\(N_j\\) : \u7b2c j \u4e2a\u805a\u7c7b\u96c6 \\(S_j\\) \u4e2d\u6240\u5305\u542b\u7684\u6837\u672c\u4e2a\u6570 \u5bf9\u6240\u6709 \\(K\\) \u4e2a\u6a21\u5f0f\u7c7b\u6709 \\(J = \\sum_{j=1}^{K} \\sum_{i=1}^{N_j} \\parallel X_i - Z_j \\parallel ^2, \\ \\ \\ X_i \\in S_j\\) \u805a\u7c7b\u51c6\u5219\uff1a \u805a\u7c7b\u4e2d\u5fc3\u7684\u9009\u62e9\u5e94\u4f7f\u51c6\u5219\u51fd\u6570 \\(J\\) \u6781\u5c0f\uff0c\u5373\u4f7f \\(J_j\\) \u7684\u503c\u5f88\u5c0f \u8ba9 \\(\\frac{\\partial J_j}{\\partial \\mathbf{Z}_j}=0\\) \uff0c\u89e3\u5f97 \\(\\mathbf{Z}_j = \\frac{1}{N_j} \\sum_{i=1}^{N_j} \\mathbf{X_i}, \\ \\ \\ \\mathbf{X}_i \\in S_j\\) \u7b97\u6cd5\u63cf\u8ff0: \u4efb\u9009 K \u4e2a\u521d\u59cb\u805a\u7c7b\u4e2d\u5fc3\uff1a \\(\\mathbf{Z}_1(1), \\mathbf{Z}_2(1), ..., \\mathbf{Z}_K(1)\\) \u62ec\u53f7\u5185\u5e8f\u53f7\uff1a\u8fed\u4ee3\u8fd0\u7b97\u7684\u6b21\u5e8f\u53f7 \u6309\u6700\u5c0f\u8ddd\u79bb\u539f\u5219\u5c06\u5176\u4f59\u6837\u54c1\u5206\u914d\u5230 K \u4e2a\u805a\u7c7b\u4e2d\u5fc3\u4e2d\u7684\u67d0\u4e00\u4e2a\uff0c\u5373 \\(\\min\\{\\parallel X - Z_i(k) \\parallel, i=1,2,...,K\\}=\\parallel X-Z_j(k) \\parallel=D_j(k)\uff0c\u5219 X \\in S_j(k)\\) \uff0c\u6ce8\u610f\uff0ck \u662f\u8fed\u4ee3\u8fd0\u7b97\u6b21\u5e8f\u53f7\uff0cK \u662f\u805a\u7c7b\u4e2d\u5fc3\u4e2a\u6570 \u8ba1\u7b97\u5404\u4e2a\u805a\u7c7b\u4e2d\u5fc3\u7684\u65b0\u5411\u91cf\u503c: \\(Z_j(k+1) \\ \\ j=1,2,...,K\\) \\[ Z_j(k+1) = \\frac{1}{N_j} \\sum_{X \\in S_j(k)} \\mathbf{X} \\ \\ \\ j=1,2,...,K \\] \\(N_j\\) : \u7b2c j \u7c7b\u7684\u6837\u672c\u6570 \u5224\u65ad \u5982\u679c \\(Z_j(k+1) \\ne Z_j(k) \\ \\ j=1,2,...,K\\) \uff0c\u5219\u56de\u5230 2\uff0c\u5c06\u6a21\u5f0f\u6837\u672c\u9010\u4e2a\u91cd\u65b0\u5206\u7c7b\uff0c\u91cd\u590d\u8fed\u4ee3\u8ba1\u7b97 \u5982\u679c \\(Z_j(k+1) = Z_j(k) \\ \\ j=1,2,...,K\\) \uff0c\u7b97\u6cd5\u6536\u655b\uff0c\u8ba1\u7b97\u5b8c\u6bd5","title":"K-\u5747\u503c\u7b97\u6cd5"},{"location":"cs/ai/mode-recognition/#_17","text":"\u7b97\u6cd5\u7279\u70b9 \u52a0\u5165\u4e86\u8bd5\u63a2\u6027\u6b65\u9aa4\uff0c\u7ec4\u6210\u4eba\u673a\u4ea4\u4e92\u7684\u7ed3\u6784 \u53ef\u4ee5\u901a\u8fc7\u7c7b\u7684\u81ea\u52a8\u5408\u5e76\u4e0e\u5206\u88c2\u5f97\u5230\u8f83\u5408\u7406\u7684\u7c7b\u522b\u6570 \u4e0e K-\u5747\u503c\u7b97\u6cd5 \u76f8\u4f3c\uff1a\u805a\u7c7b\u4e2d\u5fc3\u7684\u4f4d\u7f6e\u5747\u901a\u8fc7\u6837\u672c\u5747\u503c\u7684\u8fed\u4ee3\u8fd0\u7b97\u51b3\u5b9a \u76f8\u5f02\uff1aK-\u5747\u503c\u7b97\u6cd5\u7684\u805a\u7c7b\u4e2d\u5fc3\u4e2a\u6570\u4e0d\u53d8\uff0c\u4f46ISODATA\u7b97\u6cd5\u4e0d\u53d8 \u7b97\u6cd5\u63cf\u8ff0 \u9884\u9009 \\(N_C\\) \u4e2a\u805a\u7c7b\u4e2d\u5fc3 \\(\\{Z_1, Z_2, ..., Z_{N_C}\\}\\) \uff0c \\(N_C\\) \u4e5f\u662f\u805a\u7c7b\u8fc7\u7a0b\u4e2d\u5b9e\u9645\u7684\u805a\u7c7b\u4e2d\u5fc3\u4e2a\u6570 \u628a N \u4e2a\u6837\u672c\u6309\u6700\u8fd1\u90bb\u89c4\u5219\u5206\u914d\u5230 \\(N_C\\) \u4e2a\u805a\u7c7b\u4e2d \\[ \u82e5 \\ \\ \\ \\parallel X - Z_j \\parallel = \\min\\{\\parallel X - Z_i, i = 1, ,2, .., N_C\\} \\\\ \u5219 \\ \\ \\ X \\in S_j \\] \u82e5 \\(S_j\\) \u4e2d\u7684\u6837\u672c\u6570 \\(N_j < \\theta_N\\) \uff0c\u5219\u53d6\u6d88\u8be5\u7c7b\uff0c\u5e76\u4e14 \\(N_C\\) \u51cf\u53bb 1 \u4fee\u6b63\u5404\u805a\u7c7b\u4e2d\u5fc3\u503c \\(Z_j = \\frac{1}{N_j} \\sum_{X \\in S_j} X \\ \\ \\ j=1,2,...,N_C\\) \u8ba1\u7b97 \\(S_j\\) \u7684\u7c7b\u5185\u7684\u5e73\u5747\u8ddd\u79bb \\(\\bar{D_j} = \\frac{1}{N_j} \\sum_{X \\in S_j} \\parallel X - Z_j \\parallel \\ \\ \\ j=1,2,...,N_C\\) \u8ba1\u7b97\u603b\u4f53\u5e73\u5747\u8ddd\u79bb \u5224\u65ad\u5f53\u524d\u662f\u5206\u88c2\u8fd8\u662f\u5408\u5e76\uff0c\u51b3\u5b9a\u8fed\u4ee3\u6b65\u9aa4\u7b49 \u82e5 \\(N_C \\le K/2\\) \uff0c\u8fdb\u5165\u5206\u88c2 \u5982\u679c\u8fed\u4ee3\u6b21\u6570\u662f\u5076\u6570\u6216 \\(N_C \\ge 2K\\) \uff0c\u5219\u5408\u5e76\u5426\u5219\u5206\u88c2 \u8ba1\u7b97\u6bcf\u4e2a\u805a\u7c7b\u4e2d\u6837\u672c\u8ddd\u79bb\u7684\u6807\u51c6\u5dee\u5411\u91cf \u6c42\u6bcf\u4e2a\u6807\u51c6\u5dee\u5411\u91cf\u7684\u6700\u5927\u5206\u91cf \u592a\u957f\u4e86\u3002\u3002\u3002 \u5168\u662f\u516c\u5f0f\u3002\u3002\u3002","title":"\u8fed\u4ee3\u81ea\u7ec4\u7ec7\u7684\u6570\u636e\u5206\u6790\u7b97\u6cd5"},{"location":"cs/ai/mode-recognition/#_18","text":"","title":"\u5224\u522b\u51fd\u6570"},{"location":"cs/ai/mode-recognition/#_19","text":"\u5b9a\u4e49\uff1a\u76f4\u63a5\u7528\u6765\u5bf9\u6a21\u5f0f\u8fdb\u884c\u5206\u7c7b\u7684\u51c6\u5219\u51fd\u6570\u3002\u82e5\u5206\u5c5e\u4e8e \\(\\omega_1, \\omega_2\\) \u7684\u4e24\u7c7b\u6a21\u5f0f\u53ef\u7528\u4e00\u65b9\u7a0b \\(d(X)=0\\) \u6765\u5212\u5206\uff0c\u90a3\u4e48\u79f0 \\(d(X)\\) \u4e3a\u5224\u522b\u51fd\u6570\u3002 \u786e\u5b9a\u5224\u522b\u51fd\u6570\u7684\u4e24\u4e2a\u56e0\u7d20 \u5224\u51b3\u51fd\u6570 \\(d(X)\\) \u7684\u51e0\u4f55\u6027\u8d28\u3002\u5b83\u53ef\u4ee5\u662f\u7ebf\u6027\u7684\u6216\u975e\u7ebf\u6027\u7684\u51fd\u6570\uff0c\u7ef4\u6570\u5728\u7279\u5f81\u63d0\u53d6\u65f6\u5df2\u7ecf\u786e\u5b9a \u5224\u51b3\u51fd\u6570 \\(d(X)\\) \u7684\u7cfb\u6570\uff0c\u7528\u6240\u7ed9\u7684\u6a21\u5f0f\u6837\u672c\u786e\u5b9a","title":"\u5224\u522b\u51fd\u6570"},{"location":"cs/ai/mode-recognition/#_20","text":"","title":"\u7ebf\u6027\u5224\u522b\u51fd\u6570"},{"location":"cs/ai/mode-recognition/#_21","text":"\u5c06\u4e8c\u7ef4\u5f62\u5f0f\u63a8\u5e7f\u5230 n \u7ef4\uff0c\u7ebf\u6027\u5224\u522b\u51fd\u6570\u7684\u4e00\u822c\u5f62\u5f0f\u4e3a \\[ d(X) = w_1x_1+w_2x_2+...+w_nx_n+w_{n+1}=W_0^{\\top}X+w_{n+1} \\] \u589e\u5e7f\u5411\u91cf\u7684\u5f62\u5f0f \\(d(X)=W^{\\top}X\\)","title":"\u4e00\u822c\u5f62\u5f0f"},{"location":"cs/ai/mode-recognition/#_22","text":"\u4e24\u7c7b\u60c5\u51b5 \\[ d(X)=W^{\\top}X \\left\\{\\begin{matrix} >0 & \u82e5 X \\in \\omega_1 \\\\ <0 & \u82e5 X \\in \\omega_2 \\end{matrix}\\right. \\] \u591a\u7c7b\u60c5\u51b5 \\(\\omega_i \\sqrt{\\omega_i}\\) \u4e24\u5206\u6cd5 \u7528\u7ebf\u6027\u5224\u522b\u51fd\u6570\u5c06\u5c5e\u4e8e \\(\\omega_i\\) \u7c7b\u7684\u6a21\u5f0f\u4e0e\u5176\u4f59\u4e0d\u5c5e\u4e8e \\(\\omega_i\\) \u7c7b\u7684\u6a21\u5f0f\u5206\u5f00 \\(\\omega_i \\omega_i\\) \u4e24\u5206\u6cd5 \u4e00\u4e2a\u5224\u522b\u754c\u9762\u53ea\u80fd\u5206\u5f00\u4e24\u4e2a\u7c7b\u522b\uff0c\u4e0d\u80fd\u628a\u5176\u4f59\u6240\u6709\u7684\u7c7b\u522b\u90fd\u5206\u5f00\u3002\u5224\u51b3\u51fd\u6570\u4e3a \\(d_{ij}(X)=W_{ij}^{\\top}X\\) \u6027\u8d28\uff1a \\(d_{ij}(X) > 0, \\forall j \\ne i; i, j = 1,2,...,M\uff0c\u82e5X \\in \\omega_i\\)","title":"\u6027\u8d28"},{"location":"cs/ai/mode-recognition/#_23","text":"\u76ee\u7684\uff1a\u5bf9\u975e\u7ebf\u6027\u8fb9\u754c\uff0c\u901a\u8fc7\u67d0\u6620\u5c04\uff0c\u628a\u6a21\u5f0f\u7a7a\u95f4 \\(X\\) \u53d8\u6210 \\(X^*\\) \uff0c\u4ee5\u4fbf\u5c06 \\(X\\) \u7a7a\u95f4\u4e2d\u975e\u7ebf\u6027\u53ef\u5206\u7684\u6a21\u5f0f\u96c6\uff0c\u53d8\u6210\u5728 \\(X^*\\) \u7a7a\u95f4\u4e2d\u7ebf\u6027\u53ef\u5206\u7684\u6a21\u5f0f\u96c6","title":"\u5e7f\u4e49\u7ebf\u6027\u5224\u522b\u51fd\u6570"},{"location":"cs/ai/mode-recognition/#_24","text":"\u975e\u7ebf\u6027\u5224\u522b\u51fd\u6570\u7684\u5f62\u5f0f\u4e4b\u4e00\u662f\u975e\u7ebf\u6027\u591a\u9879\u5f0f\u51fd\u6570 \u8bbe\u4e00\u8bad\u7ec3\u7528\u6a21\u5f0f\u96c6\uff0c \\(\\{X\\}\\) \u5728\u6a21\u5f0f\u7a7a\u95f4 \\(X\\) \u4e2d\u7ebf\u6027\u4e0d\u53ef\u5206\uff0c\u975e\u7ebf\u6027\u5224\u522b\u51fd\u6570\u5f62\u5f0f\u5982\u4e0b\uff1a \\[ d(\\mathbf{X})=w_1f_1(\\mathbf{X})+w_2f_2(\\mathbf{X})+...+w_kf_k(\\mathbf{X})+w_{k+1}=\\sum_{i=1}^{k+1}w_if_i(\\mathbf{X}) \\\\ \u5f0f\u4e2d,\\{f_i(\\mathbf{X}),i=1,2,...,k\\}\u662f\u6a21\u5f0f\\mathbf{X}\u7684\u5355\u503c\u5b9e\u51fd\u6570\uff0cf_{k+1}(\\mathbf{X})=1 \\] \u5e7f\u4e49\u5f62\u5f0f\u7684\u6a21\u5f0f\u5411\u91cf\u5b9a\u4e49\u4e3a\uff1a \\[ \\mathbf{X}^*=[x_1^*+x_2^*+...+x_k^*+1]^\\top=[f_1(\\mathbf{X})+f_2(\\mathbf{X})+...+f_k(\\mathbf{X})+1]^\\top \\]","title":"\u975e\u7ebf\u6027\u591a\u9879\u5f0f\u51fd\u6570"},{"location":"cs/ai/mode-recognition/#_25","text":"\u6a21\u5f0f\u7a7a\u95f4\u4e0e\u8d85\u5e73\u9762 \u6743\u7a7a\u95f4\u548c\u6743\u5411\u91cf\u89e3","title":"\u7ebf\u6027\u5224\u522b\u51fd\u6570\u7684\u51e0\u4f55\u6027\u8d28"},{"location":"cs/ai/mode-recognition/#_26","text":"","title":"\u611f\u77e5\u5668\u7b97\u6cd5"},{"location":"cs/algorithm/basic-ds/","text":"","title":"\u57fa\u7840\u6570\u636e\u7ed3\u6784"},{"location":"cs/algorithm/design-analysis/","text":"\u7b97\u6cd5\u8bbe\u8ba1\u4e0e\u5206\u6790 \u00b6 \u7ea6 876 \u4e2a\u5b57 4 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 3 \u5206\u949f Abstract \u672c\u79d1\u548c\u7814\u90fd\u9009\u8fc7\u8fd9\u95e8\u8bfe\uff0c\u7279\u6b64\u6765\u5f52\u6863\u4e00\u4e0b\u7b14\u8bb0 \uff08\u867d\u7136\u90fd\u662f\u6253acm\u7684\u65f6\u5019\u5b66\u7684 \ud83d\ude02 \u7b97\u6cd5\u5f15\u8bba \u00b6 \u7b97\u6cd5\u662f\u6ee1\u8db3\u4e0b\u8ff0\u6027\u8d28\u7684\u6307\u4ee4\u5e8f\u5217\uff1a \u8f93\u5165\uff1a\u6709\u96f6\u4e2a\u6216\u591a\u4e2a\u5916\u90e8\u91cf\u4f5c\u4e3a\u7b97\u6cd5\u7684\u8f93\u5165\u3002 \u8f93\u51fa\uff1a\u7b97\u6cd5\u4ea7\u751f\u81f3\u5c11\u4e00\u4e2a\u91cf\u4f5c\u4e3a\u8f93\u51fa\u3002 \u786e\u5b9a\u6027\uff1a\u7ec4\u6210\u7b97\u6cd5\u7684\u6211\u6761\u6307\u4ee4\u8db3\u6e05\u6670\u7684\uff0c\u65e0\u6b67\u4e49\u7684\u3002 \u6709\u9650\u6027\uff1a\u7b97\u6cd5\u4e2d\u6bcf\u6761\u6307\u4ee4\u7684\u6267\u884c\u6b21\u6570\u6709\u9650\uff0c\u62ab\u884c\u6bcf\u6761\u6307\u4ee4\u7684\u65f6\u95f4\u4e16\u5b58\u9650\u3002 \u7b97\u6cd5\u5206\u6790\u5185\u5bb9\uff1a \u8fd0\u884c\u65f6\u95f4\uff1a\u4e0e\u673a\u5668\u548c\u7f16\u8bd1\u5668\u6709\u5173 \u65f6\u95f4\u590d\u6742\u5ea6\u3001\u7a7a\u95f4\u590d\u6742\u5ea6\uff1a\u4e0e\u673a\u5668\u548c\u7f16\u8bd1\u5668\u65e0\u5173 \u590d\u6742\u5ea6\u5206\u6790\u5047\u8bbe\uff1a \u6307\u4ee4\u6309\u987a\u5e8f\u6267\u884c \u6240\u6709\u6307\u4ee4\uff08\u8fd0\u7b97\uff09\u90fd\u6d88\u8017\u540c\u4e00\u65f6\u95f4\u5355\u5143 \u6570\u636e\u89c4\u6a21\u662f\u7ed9\u5b9a\u7684\uff0c\u4e14\u6709\u65e0\u9650\u7a7a\u95f4 \u4e00\u822c\u9700\u8981\u5206\u6790 \\(T_{\\mathrm{avg}}(N)\\) \uff08\u5e73\u5747\u60c5\u51b5\uff09\u548c \\(T_{\\mathrm{worst}}(N)\\) \uff08\u6700\u5dee\u60c5\u51b5\uff09\uff0c \\(N\\) \u662f\u8f93\u5165\u7684\u6570\u636e\u89c4\u6a21\uff08\u4e5f\u53ef\u4ee5\u6709\u591a\u4e2a\u8f93\u5165\u89c4\u6a21\uff09 \u590d\u6742\u5ea6\u6e10\u8fdb\u8bb0\u53f7 \u00b6 \u5b9a\u4e49 \u00b6 \u5927 \\(O\\) \u8868\u793a\u6cd5 \\(T(N) = O(f(N))\\) \uff0c\u5982\u679c\u5b58\u5728\u5e38\u6570 \\(c\\) \u548c \\(n_0\\) \u4f7f\u5f97\u5f53 \\(N\\geq n_0\\) \u65f6 \\(T(N)\\leq c\\cdot f(N)\\) \u6e10\u8fdb\u4e0a\u754c\uff0c\u5373 \\(T(N)\\) \u7684\u9636\u4e0d\u4f1a\u9ad8\u4e8e \\(f(N)\\) \uff08\u589e\u957f\u6bd4 \\(f(N)\\) \u6162\u6216\u76f8\u540c\uff0c<=\uff09 \u5927 \\(\\Omega\\) \u8868\u793a\u6cd5 \\(T(N) = \\Omega(g(N))\\) \uff0c\u5982\u679c\u5b58\u5728\u5e38\u6570 \\(c\\) \u548c \\(n_0\\) \u4f7f\u5f97\u5f53 \\(N\\geq n_0\\) \u65f6 \\(T(N)\\geq c\\cdot g(N)\\) \u6e10\u8fdb\u4e0b\u754c\uff0c\u5373 \\(T(N)\\) \u7684\u9636\u4e0d\u4f1a\u4f4e\u4e8e \\(f(N)\\) \uff08\u589e\u957f\u6bd4 \\(f(N)\\) \u5feb\u6216\u76f8\u540c\uff0c>=\uff09 \u5927 \\(\\Theta\\) \u8868\u793a\u6cd5 \\(T(N) = \\Theta(h(N))\\) \uff0c\u5f53\u4e14\u4ec5\u5f53 \\(T(N) = O(h(N))\\) \u4e14 \\(T(N) = \\Omega(h(N))\\) \u6e10\u8fdb\u7d27\u786e\u754c\uff0c\u5373 \\(T(N)\\) \u9700\u8981\u4e0e \\(h(N)\\) \u540c\u9636\uff08\u589e\u957f\u901f\u5ea6\u76f8\u540c =\uff09 \u5c0f \\(o\\) \u8868\u793a\u6cd5 \\(T(N) = o(p(N))\\) \uff0c\u5f53 \\(T(N) = O(p(N))\\) \u4e14 \\(T(N)\\ne \\Theta(p(N))\\) \u65f6 \u975e\u6e10\u8fdb\u7d27\u786e\u4e0a\u754c\uff08 \\(T(N)\\) \u589e\u957f\u6bd4 \\(p(N)\\) \u6162\uff0c<\uff09 \u5c0f \\(\\omega\\) \u8868\u793a\u6cd5 \\(T(N) = \\omega(p(N))\\) \uff0c\u5f53 \\(T(N) = \\Omega(q(N))\\) \u4e14 \\(T(N)\\ne \\Theta(q(N))\\) \u65f6 \u975e\u6e10\u8fdb\u7d27\u786e\u4e0b\u754c\uff08 \\(T(N)\\) \u589e\u957f\u6bd4 \\(q(N)\\) \u5feb\uff0c>\uff09 \u89c4\u5219 \u00b6 \u5982\u679c \\(T_1(N) = O(f(N))\\) \u4e14 \\(T_2(N) = O(g(N))\\) \uff0c\u5219\uff1a \\(T_1(N) + T_2(N) = \\mathrm{max}(O(f(N)), O(g(N)))\\) \\(T_1(N)\\cdot T_2(N) = O(f(N)\\cdot g(N))\\) \u5982\u679c \\(T(N)\\) \u662f \\(N\\) \u7684 \\(k\\) \u6b21\u591a\u9879\u5f0f\uff0c\u5219 \\(T(N) = \\Theta(N^k)\\) \u5bf9\u4e8e\u4efb\u610f\u5e38\u6570 \\(k\\) \u5747\u6709 \\(\\log^kN = O(N)\\) \u5927 O \u8bb0\u53f7\u6bd4\u8f83\uff1a Big O Cheat Sheet \u5206\u6790\u89c4\u5219\uff1a for \u5faa\u73af\u7684\u8fd0\u884c\u65f6\u95f4\u662f\u5faa\u73af\u5185\u90e8\u8bed\u53e5\u7684\u6700\u957f\u65f6\u95f4\uff08\u542b for \u5224\u65ad\uff09\u4e58\u5faa\u73af\u6b21\u6570 \u5d4c\u5957 for \u5faa\u73af\u8981\u9010\u6b21\u76f8\u4e58 if else \u8bed\u53e5\u7684\u8fd0\u884c\u65f6\u95f4\u4e0d\u8d85\u8fc7\u5224\u65ad\u65f6\u95f4+\u8017\u65f6\u6700\u957f\u7684\u8bed\u53e5\u5757\u7684\u8fd0\u884c\u65f6\u95f4 \u8865\u5145\uff1a\u4e3b\u5b9a\u7406\u3002\u5047\u8bbe\u6709 \\(T(n) = aT(n/b)+f(n)\\) \uff08 \\(a\\geq 1, b>1\\) \uff09\uff0c\u5219\uff1a \u5982\u679c\u5b58\u5728\u5e38\u6570 \\(\\epsilon > 0\\) \u6709 \\(f(n) = O(n^{\\log_ba-\\epsilon})\\) \uff0c\u5219 \\(T(n) = \\Theta(n^{\\log_ba})\\) \u5982\u679c \\(f(n) = \\Theta(n^{\\log_ba})\\) \u5219 \\(T(n) = \\Theta(n^{\\log_ba}\\log n)\\) \u5982\u679c\u5b58\u5728\u5e38\u6570 \\(\\epsilon > 0\\) \u6709 \\(f(n) = \\Omega(n^{\\log_ba+\\epsilon})\\) \uff0c\u540c\u65f6\u5b58\u5728\u5e38\u6570 \\(c<1\\) \u4f7f\u5f97\u5bf9\u4e8e\u5145\u5206\u5927 \\(n\\) \u6709 \\(af(n/b)\\leq cf(n)\\) \u5219 \\(T(N) = \\Theta(f(n))\\) \u9012\u5f52\u4e0e\u5206\u6cbb \u00b6 \u9012\u5f52\u7684\u6982\u5ff5 \u00b6 \u76f4\u63a5\u6210\u95f4\u63a5\u5730\u8c03\u7528\u81ea\u8eab\u7684\u7b97\u6cd5\u79f0\u4e3a\u9012\u5f52\u7b97\u6cd5\u3002\u7528\u51fd\u6570\u81ea\u8eab\u7ed9\u51fa\u5b9a\u4e49\u7684\u51fd\u6570\u79f0\u4e3a\u9012\u5f52\u51fd\u6570\u3002 \u4f8b\u5982\u9636\u4e58\u51fd\u6570\u3001\u6590\u6ce2\u90a3\u5951\u51fd\u6570\u7b49\u7b49 \\[ eg \\ \\ \\ F(n) = \\left\\{\\begin{matrix} 1 & n = 0, 1 \\\\ F(n-1)+F(n-2) & n >= 1 \\end{matrix}\\right. \\] int fibonacci ( int n ) { if ( n <= 1 ) return 1 ; return fibonacci ( n - 1 ) + fibonacci ( n - 2 ); } \u5bf9\u4e8e\u5c0f\u8303\u56f4\u53ef\u4ee5\u7528\u8bb0\u5fc6\u5316 \\(O(n)\\) \u7684\u590d\u6742\u5ea6\u6c42\u89e3 \u5bf9\u4e8e\u5927\u8303\u56f4\u53ef\u4ee5\u7528\u77e9\u9635\u5feb\u901f\u5e42 \\(O(\\log n)\\) \u7684\u590d\u6742\u5ea6\u6c42\u89e3\u3002 \u5206\u6cbb\u6cd5\u601d\u60f3 \u00b6 \u5206\u6cbb\u6cd5\u7684\u57fa\u672c\u601d\u60f3\u662f\u5c06\u4e00\u4e2a\u898f\u6a21\u4e3a \\(n\\) \u7684\u95ee\u9898\u5206\u89e3\u4e3a \\(k\\) \u4e2a\u89c4\u6a21\u8f83\u5c0f\u7684\u5b50\u95ee\u9898\uff0c\u8fd9\u4e9b\u5b50\u95ee\u9898\u4e92\u76f8\u72ec\u7acb\u4e14\u4e0e\u539f\u95ee\u9898\u76f8\u540c\u3002\u9012\u95e8\u5730\u89e3\u8fd9\u4e9b\u5b50\u95ee\u9898\uff0c\u7136\u540e\u5c07\u5404\u5b50\u95ee\u9898\u7684\u89e3\u5408\u4e95\u5f97\u5230\u539f\u5411\u9898\u7684\u89e3\u3002 eg\uff1a\u5feb\u901f\u5e42\u3001\u4e8c\u5206\u3001\u5f52\u5e76\u6392\u5e8f\u3001\u7ebf\u6bb5\u6811\u3001cdq\u5206\u6cbb\u3001FFT\u7b49 \u5927\u6574\u6570\u7684\u4e58\u6cd5 \u00b6 \u6709\u4e24\u4e2a\u8d85\u8fc7 long long \u7c7b\u578b\u7684\u5927\u6574\u6570 \\(X\\) \u548c \\(Y\\) \uff0c\u7528\u8f83\u4f4e\u7684\u590d\u6742\u5ea6\u6c42\u89e3 \\(X*Y\\) \u3002 \u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u81f3\u5c11\u6709 6 \u79cd\u65b9\u6cd5\uff0c\u53ef\u4ee5\u770b\u4e4b\u524d\u5199\u8fc7\u7684\u6587\u7ae0\uff1a \u5927\u6574\u6570\u76f8\u4e58 \u2013 \u6a21\u62df/\u5206\u6cbb/FFT/CRT/\u7f51\u7edc\u6d41/Furer Reference \u00b6 \u7b97\u6cd5\u8bbe\u8ba1\u4e0e\u5206\u6790(\u738b\u6653\u4e1c).pdf","title":"\u7b97\u6cd5\u8bbe\u8ba1\u4e0e\u5206\u6790"},{"location":"cs/algorithm/design-analysis/#_1","text":"\u7ea6 876 \u4e2a\u5b57 4 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 3 \u5206\u949f Abstract \u672c\u79d1\u548c\u7814\u90fd\u9009\u8fc7\u8fd9\u95e8\u8bfe\uff0c\u7279\u6b64\u6765\u5f52\u6863\u4e00\u4e0b\u7b14\u8bb0 \uff08\u867d\u7136\u90fd\u662f\u6253acm\u7684\u65f6\u5019\u5b66\u7684 \ud83d\ude02","title":"\u7b97\u6cd5\u8bbe\u8ba1\u4e0e\u5206\u6790"},{"location":"cs/algorithm/design-analysis/#_2","text":"\u7b97\u6cd5\u662f\u6ee1\u8db3\u4e0b\u8ff0\u6027\u8d28\u7684\u6307\u4ee4\u5e8f\u5217\uff1a \u8f93\u5165\uff1a\u6709\u96f6\u4e2a\u6216\u591a\u4e2a\u5916\u90e8\u91cf\u4f5c\u4e3a\u7b97\u6cd5\u7684\u8f93\u5165\u3002 \u8f93\u51fa\uff1a\u7b97\u6cd5\u4ea7\u751f\u81f3\u5c11\u4e00\u4e2a\u91cf\u4f5c\u4e3a\u8f93\u51fa\u3002 \u786e\u5b9a\u6027\uff1a\u7ec4\u6210\u7b97\u6cd5\u7684\u6211\u6761\u6307\u4ee4\u8db3\u6e05\u6670\u7684\uff0c\u65e0\u6b67\u4e49\u7684\u3002 \u6709\u9650\u6027\uff1a\u7b97\u6cd5\u4e2d\u6bcf\u6761\u6307\u4ee4\u7684\u6267\u884c\u6b21\u6570\u6709\u9650\uff0c\u62ab\u884c\u6bcf\u6761\u6307\u4ee4\u7684\u65f6\u95f4\u4e16\u5b58\u9650\u3002 \u7b97\u6cd5\u5206\u6790\u5185\u5bb9\uff1a \u8fd0\u884c\u65f6\u95f4\uff1a\u4e0e\u673a\u5668\u548c\u7f16\u8bd1\u5668\u6709\u5173 \u65f6\u95f4\u590d\u6742\u5ea6\u3001\u7a7a\u95f4\u590d\u6742\u5ea6\uff1a\u4e0e\u673a\u5668\u548c\u7f16\u8bd1\u5668\u65e0\u5173 \u590d\u6742\u5ea6\u5206\u6790\u5047\u8bbe\uff1a \u6307\u4ee4\u6309\u987a\u5e8f\u6267\u884c \u6240\u6709\u6307\u4ee4\uff08\u8fd0\u7b97\uff09\u90fd\u6d88\u8017\u540c\u4e00\u65f6\u95f4\u5355\u5143 \u6570\u636e\u89c4\u6a21\u662f\u7ed9\u5b9a\u7684\uff0c\u4e14\u6709\u65e0\u9650\u7a7a\u95f4 \u4e00\u822c\u9700\u8981\u5206\u6790 \\(T_{\\mathrm{avg}}(N)\\) \uff08\u5e73\u5747\u60c5\u51b5\uff09\u548c \\(T_{\\mathrm{worst}}(N)\\) \uff08\u6700\u5dee\u60c5\u51b5\uff09\uff0c \\(N\\) \u662f\u8f93\u5165\u7684\u6570\u636e\u89c4\u6a21\uff08\u4e5f\u53ef\u4ee5\u6709\u591a\u4e2a\u8f93\u5165\u89c4\u6a21\uff09","title":"\u7b97\u6cd5\u5f15\u8bba"},{"location":"cs/algorithm/design-analysis/#_3","text":"","title":"\u590d\u6742\u5ea6\u6e10\u8fdb\u8bb0\u53f7"},{"location":"cs/algorithm/design-analysis/#_4","text":"\u5927 \\(O\\) \u8868\u793a\u6cd5 \\(T(N) = O(f(N))\\) \uff0c\u5982\u679c\u5b58\u5728\u5e38\u6570 \\(c\\) \u548c \\(n_0\\) \u4f7f\u5f97\u5f53 \\(N\\geq n_0\\) \u65f6 \\(T(N)\\leq c\\cdot f(N)\\) \u6e10\u8fdb\u4e0a\u754c\uff0c\u5373 \\(T(N)\\) \u7684\u9636\u4e0d\u4f1a\u9ad8\u4e8e \\(f(N)\\) \uff08\u589e\u957f\u6bd4 \\(f(N)\\) \u6162\u6216\u76f8\u540c\uff0c<=\uff09 \u5927 \\(\\Omega\\) \u8868\u793a\u6cd5 \\(T(N) = \\Omega(g(N))\\) \uff0c\u5982\u679c\u5b58\u5728\u5e38\u6570 \\(c\\) \u548c \\(n_0\\) \u4f7f\u5f97\u5f53 \\(N\\geq n_0\\) \u65f6 \\(T(N)\\geq c\\cdot g(N)\\) \u6e10\u8fdb\u4e0b\u754c\uff0c\u5373 \\(T(N)\\) \u7684\u9636\u4e0d\u4f1a\u4f4e\u4e8e \\(f(N)\\) \uff08\u589e\u957f\u6bd4 \\(f(N)\\) \u5feb\u6216\u76f8\u540c\uff0c>=\uff09 \u5927 \\(\\Theta\\) \u8868\u793a\u6cd5 \\(T(N) = \\Theta(h(N))\\) \uff0c\u5f53\u4e14\u4ec5\u5f53 \\(T(N) = O(h(N))\\) \u4e14 \\(T(N) = \\Omega(h(N))\\) \u6e10\u8fdb\u7d27\u786e\u754c\uff0c\u5373 \\(T(N)\\) \u9700\u8981\u4e0e \\(h(N)\\) \u540c\u9636\uff08\u589e\u957f\u901f\u5ea6\u76f8\u540c =\uff09 \u5c0f \\(o\\) \u8868\u793a\u6cd5 \\(T(N) = o(p(N))\\) \uff0c\u5f53 \\(T(N) = O(p(N))\\) \u4e14 \\(T(N)\\ne \\Theta(p(N))\\) \u65f6 \u975e\u6e10\u8fdb\u7d27\u786e\u4e0a\u754c\uff08 \\(T(N)\\) \u589e\u957f\u6bd4 \\(p(N)\\) \u6162\uff0c<\uff09 \u5c0f \\(\\omega\\) \u8868\u793a\u6cd5 \\(T(N) = \\omega(p(N))\\) \uff0c\u5f53 \\(T(N) = \\Omega(q(N))\\) \u4e14 \\(T(N)\\ne \\Theta(q(N))\\) \u65f6 \u975e\u6e10\u8fdb\u7d27\u786e\u4e0b\u754c\uff08 \\(T(N)\\) \u589e\u957f\u6bd4 \\(q(N)\\) \u5feb\uff0c>\uff09","title":"\u5b9a\u4e49"},{"location":"cs/algorithm/design-analysis/#_5","text":"\u5982\u679c \\(T_1(N) = O(f(N))\\) \u4e14 \\(T_2(N) = O(g(N))\\) \uff0c\u5219\uff1a \\(T_1(N) + T_2(N) = \\mathrm{max}(O(f(N)), O(g(N)))\\) \\(T_1(N)\\cdot T_2(N) = O(f(N)\\cdot g(N))\\) \u5982\u679c \\(T(N)\\) \u662f \\(N\\) \u7684 \\(k\\) \u6b21\u591a\u9879\u5f0f\uff0c\u5219 \\(T(N) = \\Theta(N^k)\\) \u5bf9\u4e8e\u4efb\u610f\u5e38\u6570 \\(k\\) \u5747\u6709 \\(\\log^kN = O(N)\\) \u5927 O \u8bb0\u53f7\u6bd4\u8f83\uff1a Big O Cheat Sheet \u5206\u6790\u89c4\u5219\uff1a for \u5faa\u73af\u7684\u8fd0\u884c\u65f6\u95f4\u662f\u5faa\u73af\u5185\u90e8\u8bed\u53e5\u7684\u6700\u957f\u65f6\u95f4\uff08\u542b for \u5224\u65ad\uff09\u4e58\u5faa\u73af\u6b21\u6570 \u5d4c\u5957 for \u5faa\u73af\u8981\u9010\u6b21\u76f8\u4e58 if else \u8bed\u53e5\u7684\u8fd0\u884c\u65f6\u95f4\u4e0d\u8d85\u8fc7\u5224\u65ad\u65f6\u95f4+\u8017\u65f6\u6700\u957f\u7684\u8bed\u53e5\u5757\u7684\u8fd0\u884c\u65f6\u95f4 \u8865\u5145\uff1a\u4e3b\u5b9a\u7406\u3002\u5047\u8bbe\u6709 \\(T(n) = aT(n/b)+f(n)\\) \uff08 \\(a\\geq 1, b>1\\) \uff09\uff0c\u5219\uff1a \u5982\u679c\u5b58\u5728\u5e38\u6570 \\(\\epsilon > 0\\) \u6709 \\(f(n) = O(n^{\\log_ba-\\epsilon})\\) \uff0c\u5219 \\(T(n) = \\Theta(n^{\\log_ba})\\) \u5982\u679c \\(f(n) = \\Theta(n^{\\log_ba})\\) \u5219 \\(T(n) = \\Theta(n^{\\log_ba}\\log n)\\) \u5982\u679c\u5b58\u5728\u5e38\u6570 \\(\\epsilon > 0\\) \u6709 \\(f(n) = \\Omega(n^{\\log_ba+\\epsilon})\\) \uff0c\u540c\u65f6\u5b58\u5728\u5e38\u6570 \\(c<1\\) \u4f7f\u5f97\u5bf9\u4e8e\u5145\u5206\u5927 \\(n\\) \u6709 \\(af(n/b)\\leq cf(n)\\) \u5219 \\(T(N) = \\Theta(f(n))\\)","title":"\u89c4\u5219"},{"location":"cs/algorithm/design-analysis/#_6","text":"","title":"\u9012\u5f52\u4e0e\u5206\u6cbb"},{"location":"cs/algorithm/design-analysis/#_7","text":"\u76f4\u63a5\u6210\u95f4\u63a5\u5730\u8c03\u7528\u81ea\u8eab\u7684\u7b97\u6cd5\u79f0\u4e3a\u9012\u5f52\u7b97\u6cd5\u3002\u7528\u51fd\u6570\u81ea\u8eab\u7ed9\u51fa\u5b9a\u4e49\u7684\u51fd\u6570\u79f0\u4e3a\u9012\u5f52\u51fd\u6570\u3002 \u4f8b\u5982\u9636\u4e58\u51fd\u6570\u3001\u6590\u6ce2\u90a3\u5951\u51fd\u6570\u7b49\u7b49 \\[ eg \\ \\ \\ F(n) = \\left\\{\\begin{matrix} 1 & n = 0, 1 \\\\ F(n-1)+F(n-2) & n >= 1 \\end{matrix}\\right. \\] int fibonacci ( int n ) { if ( n <= 1 ) return 1 ; return fibonacci ( n - 1 ) + fibonacci ( n - 2 ); } \u5bf9\u4e8e\u5c0f\u8303\u56f4\u53ef\u4ee5\u7528\u8bb0\u5fc6\u5316 \\(O(n)\\) \u7684\u590d\u6742\u5ea6\u6c42\u89e3 \u5bf9\u4e8e\u5927\u8303\u56f4\u53ef\u4ee5\u7528\u77e9\u9635\u5feb\u901f\u5e42 \\(O(\\log n)\\) \u7684\u590d\u6742\u5ea6\u6c42\u89e3\u3002","title":"\u9012\u5f52\u7684\u6982\u5ff5"},{"location":"cs/algorithm/design-analysis/#_8","text":"\u5206\u6cbb\u6cd5\u7684\u57fa\u672c\u601d\u60f3\u662f\u5c06\u4e00\u4e2a\u898f\u6a21\u4e3a \\(n\\) \u7684\u95ee\u9898\u5206\u89e3\u4e3a \\(k\\) \u4e2a\u89c4\u6a21\u8f83\u5c0f\u7684\u5b50\u95ee\u9898\uff0c\u8fd9\u4e9b\u5b50\u95ee\u9898\u4e92\u76f8\u72ec\u7acb\u4e14\u4e0e\u539f\u95ee\u9898\u76f8\u540c\u3002\u9012\u95e8\u5730\u89e3\u8fd9\u4e9b\u5b50\u95ee\u9898\uff0c\u7136\u540e\u5c07\u5404\u5b50\u95ee\u9898\u7684\u89e3\u5408\u4e95\u5f97\u5230\u539f\u5411\u9898\u7684\u89e3\u3002 eg\uff1a\u5feb\u901f\u5e42\u3001\u4e8c\u5206\u3001\u5f52\u5e76\u6392\u5e8f\u3001\u7ebf\u6bb5\u6811\u3001cdq\u5206\u6cbb\u3001FFT\u7b49","title":"\u5206\u6cbb\u6cd5\u601d\u60f3"},{"location":"cs/algorithm/design-analysis/#_9","text":"\u6709\u4e24\u4e2a\u8d85\u8fc7 long long \u7c7b\u578b\u7684\u5927\u6574\u6570 \\(X\\) \u548c \\(Y\\) \uff0c\u7528\u8f83\u4f4e\u7684\u590d\u6742\u5ea6\u6c42\u89e3 \\(X*Y\\) \u3002 \u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u81f3\u5c11\u6709 6 \u79cd\u65b9\u6cd5\uff0c\u53ef\u4ee5\u770b\u4e4b\u524d\u5199\u8fc7\u7684\u6587\u7ae0\uff1a \u5927\u6574\u6570\u76f8\u4e58 \u2013 \u6a21\u62df/\u5206\u6cbb/FFT/CRT/\u7f51\u7edc\u6d41/Furer","title":"\u5927\u6574\u6570\u7684\u4e58\u6cd5"},{"location":"cs/algorithm/design-analysis/#reference","text":"\u7b97\u6cd5\u8bbe\u8ba1\u4e0e\u5206\u6790(\u738b\u6653\u4e1c).pdf","title":"Reference"},{"location":"cs/db/mysql/","text":"MySQL \u00b6 \u4e8b\u52a1 \u00b6 \u4e8b\u52a1\u662f\u6ee1\u8db3ACID\u7279\u6027\u7684\u4e00\u7ec4\u64cd\u4f5c\u3002 \u539f\u5b50\u6027 \uff08Atomicity\uff09\uff1a\u4e8b\u52a1\u65f6\u4e0d\u53ef\u5206\u5272\u7684\u6700\u5c0f\u5355\u5143\uff0c\u4e8b\u52a1\u5185\u7684\u8bed\u53e5\uff0c\u8981\u4e48\u5168\u90e8\u6267\u884c\u6210\u529f\uff0c\u8981\u4e48\u5168\u90e8\u6267\u884c\u5931\u8d25\u3002 \u4e00\u81f4\u6027 \uff08Consistency\uff09\uff1a\u6570\u636e\u5e93\u5728\u4e8b\u52a1\u6267\u884c\u524d\u540e\u90fd\u4fdd\u6301\u4e00\u81f4\u6027\u72b6\u6001\u3002\u5728\u4e00\u81f4\u6027\u72b6\u6001\u4e0b\uff0c\u6240\u6709\u4e8b\u52a1\u5bf9\u4e00\u4e2a\u6570\u636e\u7684\u8bfb\u5199\u7ed3\u679c\u90fd\u662f\u76f8\u540c\u7684\u3002 \u9694\u79bb\u6027 \uff08Isolation\uff09\uff1a\u4e00\u65e6\u4e8b\u52a1\u6240\u505a\u7684\u4fee\u6539\u5728\u6700\u7ec8\u63d0\u4ea4\u4ee5\u524d\uff0c\u5bf9\u5176\u4ed6\u4e8b\u52a1\u662f\u4e0d\u53ef\u89c1\u7684\u3002 \u6301\u4e45\u6027 \uff08Durability\uff09\uff1a\u4e00\u65e6\u4e8b\u52a1\u63d0\u4ea4\uff0c\u5219\u5176\u6240\u505a\u7684\u4fee\u6539\u5c06\u4f1a\u6c38\u8fdc\u4fdd\u5b58\u5728\u6570\u636e\u5e93\u4e2d\u3002 MYSQL\u9ed8\u8ba4\u91c7\u7528\u81ea\u52a8\u63d0\u4ea4\u6a21\u5f0f\u3002 \u5e76\u53d1\u4e00\u81f4\u6027 \u00b6 \u4e22\u5931\u4fee\u6539 \uff1aT1\u548cT2\u4e24\u4e2a\u4e8b\u52a1\u90fd\u5bf9\u4e00\u4e2a\u6570\u636e\u8fdb\u884c\u4fee\u6539\uff0cT1\u5148\u4fee\u6539\uff0cT2\u540e\u4fee\u6539\uff0c\u5219T2\u70b9\u4fee\u6539\u4f1a\u8986\u76d6T1. \u8bfb\u810f\u6570\u636e \uff1aT1\u4fee\u6539\u4e00\u4e2a\u6570\u636e\uff0cT2\u968f\u540e\u8bfb\u53d6\u8fd9\u4e2a\u6570\u636e\u3002\u5982\u679cT1\u64a4\u9500\u4e86\u8fd9\u6b21\u4fee\u6539\uff0c\u5219T2\u8bfb\u5230\u7684\u662f\u810f\u6570\u636e\u3002 \u4e0d\u53ef\u91cd\u590d\u8bfb \uff1aT2\u8bfb\u53d6\u4e00\u4e2a\u6570\u636e\uff0cT1\u5bf9\u8be5\u6570\u636e\u505a\u4e86\u4fee\u6539\uff0c\u6b64\u65f6T2\u518d\u6b21\u8bfb\u53d6\u8fd9\u4e2a\u6570\u636e\u4f1a\u548c\u7b2c\u4e00\u6b21\u8bfb\u53d6\u7684\u7ed3\u679c\u4e0d\u540c\u3002 \u5e7b\u5f71\u8bfb \uff1aT1\u8bfb\u53d6\u67d0\u4e2a\u8303\u56f4\u7684\u6570\u636e\uff0cT2\u5728\u8fd9\u4e2a\u8303\u56f4\u5185\u63d2\u5165\u4e86\u65b0\u7684\u6570\u636e\uff0cT1\u518d\u6b21\u8bfb\u53d6\u548c\u7b2c\u4e00\u6b21\u7684\u7ed3\u679c\u4e0d\u540c\u3002 B\u6811\u548cB+\u6811 \u00b6 B\u6811\u7684\u7279\u70b9 \u4e00\u4e2a\u8282\u70b9\u4e0a\u5305\u62ec\u81f3\u591a \\(m-1\\) \u4e2a\u503c \u6839\u8282\u70b9\u81f3\u5c11\u6709\u4e24\u4e2a\u5b69\u5b50 \u975e\u53f6\u5b50\u7ed3\u70b9\u5982\u679c\u5305\u542b\u4e86 \\(k\\) \u4e2a\u503c\uff0c\u5219\u5176\u5305\u542b\u4e86 \\(k+1\\) \u4e2a\u5b69\u5b50\u8282\u70b9 \u6240\u6709\u53f6\u5b50\u7ed3\u70b9\u90fd\u4f4d\u4e8e\u540c\u4e00\u5c42 B+\u6811\u7684\u7279\u70b9 \u6240\u6709\u7684\u975e\u53f6\u5b50\u7ed3\u70b9\u4e0d\u518d\u4fdd\u5b58\u503c\uff0c\u800c\u662f\u53ea\u4fdd\u5b58\u4e86\u4e2d\u95f4\u503c \u6240\u6709\u503c\u4fdd\u5b58\u5728\u53f6\u5b50\u7ed3\u70b9\u4e0a \u6240\u6709\u7684\u53f6\u5b50\u7ed3\u70b9\u901a\u5e38\u94fe\u8868\u6309\u7167\u987a\u5e8f\u8fdb\u884c\u8fde\u63a5 \u4e3a\u4ec0\u4e48\u6570\u636e\u5e93\u4f1a\u91c7\u7528B+\u6811\u800c\u4e0d\u662fB\u6811\u6d3b\u7740AVL\u6811 AVL\u7684\u7ed3\u70b9\u8bbf\u95ee\u6b21\u6570\u66f4\u591a\uff0c\u800c\u5bf9\u4e8e\u6570\u636e\u5e93\u800c\u8a00\uff0c\u6bcf\u4e2a\u8282\u70b9\u901a\u5e38\u88ab\u5b58\u50a8\u5728\u4e00\u4e2a\u6587\u4ef6\u4e2d\uff0c\u6240\u4ee5\u9700\u8981\u8bfb\u53d6\u7684\u6587\u4ef6\u6570\u91cf\u66f4\u591a\uff0c\u5bfc\u81f4\u6548\u7387\u4f4e \u5728\u6570\u636e\u5e93\u4e2d\u6709\u65f6\u9700\u8981\u8fdb\u884c\u8303\u56f4\u7684\u6240\u6709\uff0c\u6b64\u65f6B+\u6811\u7684\u94fe\u8868\u7ed3\u6784\u53ef\u4ee5\u5feb\u901f\u7684\u627e\u5230\u67d0\u4e2a\u7ed3\u70b9\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\u4f4d\u7f6e MySQL\u9501 \u00b6 \u7c7b\u578b \u5168\u5c40\u9501 \u8868\u7ea7\u9501 \u884c\u7ea7\u9501 \u8bfb\u5199\u9501 \u8bfb\u9501\uff1a\u53ef\u4ee5\u4e0e\u5176\u4ed6\u7684\u8bfb\u9501\u5171\u5b58\uff0c\u4f46\u662f\u4e0d\u53ef\u4ee5\u4e0e\u5199\u9501\u5171\u5b58 \u5199\u9501\uff1a\u4e0d\u53ef\u4ee5\u4e0e\u5176\u4ed6\u4efb\u4f55\u9501\u5171\u5b58 \u60b2\u89c2\u9501 \u666e\u901a\u7684\u9501\uff0c\u9501\u5b9a\u6b64\u884c/\u8868/\u6570\u636e\u5e93\u4ee5\u9632\u6b62\u5176\u4ed6\u64cd\u4f5c\u8fdb\u884c\u4fee\u6539\uff0c\u4f1a\u5bfc\u81f4\u5176\u4ed6\u4e8b\u52a1\u88ab\u963b\u585e \u4e50\u89c2\u9501 \u901a\u8fc7\u6bd4\u8f83\u7248\u672c\u53f7\u7684\u533a\u522b\u7684\u65b9\u6cd5\uff0c\u6765\u786e\u5b9a\u6b64\u6570\u636e\u662f\u5426\u7ecf\u8fc7\u4fee\u6539\uff0c\u5982\u679c\u4fee\u6539\u5219\u9700\u8981\u8bfb\u53d6\u6700\u65b0\u7684\u503c \u6570\u636e\u5e93\u9694\u79bb\u7ea7\u522b \u00b6 \u9694\u79bb\u7ea7\u522b \u810f\u8bfb \u4e0d\u53ef\u91cd\u590d\u8bfb \u5e7b\u8bfb \u672a\u63d0\u4ea4\u8bfb \u53ef\u80fd \u53ef\u80fd \u53ef\u80fd \u5df2\u63d0\u4ea4\u8bfb \u4e0d\u53ef\u80fd \u53ef\u80fd \u53ef\u80fd \u53ef\u91cd\u590d\u8bfb \u4e0d\u53ef\u80fd \u4e0d\u53ef\u80fd \u53ef\u80fd \u53ef\u4e32\u884c\u5316 \u4e0d\u53ef\u80fd \u4e0d\u53ef\u80fd \u4e0d\u53ef\u80fd \u9694\u79bb\u7ea7\u522b\uff1a \u672a\u63d0\u4ea4\u8bfb\uff1a\u6700\u6734\u7d20\u7684\u6570\u636e\u5f62\u5f0f \u5df2\u63d0\u4ea4\u8bfb\uff1a\u5728\u4e8b\u52a1\u5b8c\u6210\u4e4b\u540e\u518d\u66f4\u65b0\u6570\u636e\u5e93\u7684\u503c \u53ef\u91cd\u590d\u8bfb\uff1a\u6bcf\u4e2a\u4e8b\u52a1\u5f00\u59cb\u524d\u9501\u5b9a\u6240\u66f4\u65b0\u7684\u884c \u53ef\u4e32\u884c\u5316\uff1a\u5355\u4e00\u7ebf\u7a0b\uff0c\u6240\u6709\u4e8b\u52a1\u5fc5\u987b\u6309\u7167\u987a\u5e8f\u8fdb\u884c3 \u5b58\u50a8\u5f15\u64ce InnoDB\u548cMyISAM \u00b6 InnoDB \u00b6 \u662fMySQL\u9ed8\u8ba4\u7684\u5b58\u50a8\u5f15\u64ce\u3002\u5b9e\u73b0\u4e86\u56db\u4e2a\u6807\u51c6\u7684\u9694\u79bb\u7ea7\u522b\u3002\u9ed8\u8ba4\u662f\u53ef\u91cd\u590d\u8bfb\uff0c\u901a\u8fc7MVCC\u548cNext-Key Locking\u9632\u6b62\u5e7b\u5f71\u8bfb\u3002\u652f\u6301\u771f\u6b63\u7684\u5728\u7ebf\u70ed\u5907\u4efd\uff0c\u5176\u4ed6\u5b58\u50a8\u5f15\u64ce\u4e0d\u652f\u6301\u5728\u7ebf\u70ed\u5907\u4efd\u3002 Record Locks \uff1a\u9501\u5b9a\u4e00\u4e2a\u8bb0\u5f55\u4e0a\u7684\u7d22\u5f15\uff0c\u800c\u4e0d\u662f\u8bb0\u5f55\u672c\u8eab\u3002 Gap Locks \uff1a\u9501\u5b9a\u7d22\u5f15\u4e4b\u95f4\u7684\u95f4\u9699\uff0c\u800c\u4e0d\u662f\u7d22\u5f15\u672c\u8eab\u3002 Next-Key Locks \uff1aInnoDB\u5b58\u50a8\u5f15\u64ce\u7684\u4e00\u79cd\u9501\u5b9e\u73b0\uff0c\u662fRecord Locks\u548cGap Locks\u7684\u7ed3\u5408\u3002\u4e0d\u4ec5\u4ec5\u9501\u5b9a\u7d22\u5f15\uff0c\u4e5f\u9501\u5b9a\u7d22\u5f15\u4e4b\u95f4\u7684\u95f4\u9699\u3002 MyISAM \u00b6 \u8bbe\u8ba1\u7b80\u5355\uff0c\u6570\u636e\u4ee5\u7d27\u5bc6\u683c\u5f0f\u5b58\u50a8\u3002\u63d0\u4f9b\u4e86\u5927\u91cf\u7684\u7279\u6027\uff0c\u5305\u62ec\u538b\u7f29\u8868\u3001\u7a7a\u95f4\u6570\u636e\u7d22\u5f15\u7b49\u3002\u4e0d\u652f\u6301\u4e8b\u52a1\uff0c\u4e0d\u652f\u6301\u884c\u7ea7\u9501\uff0c\u53ea\u652f\u6301\u8868\u7ea7\u9501\uff0c\u53ef\u4ee5\u624b\u5de5\u6216\u8005\u81ea\u52a8\u6267\u884c\u68c0\u67e5\u548c\u4fee\u590d\u64cd\u4f5c\uff0c\u4f46\u53ef\u80fd\u5bfc\u81f4\u4e00\u4e9b\u6570\u636e\u4e22\u5931\uff0c\u800c\u4e14\u4fee\u590d\u64cd\u4f5c\u975e\u5e38\u6162\u3002 \u591a\u7248\u672c\u5e76\u53d1\u63a7\u5236\uff08MVCC\uff09 \u00b6 \u591a\u7248\u672c\u5e76\u53d1\u63a7\u5236\uff08Multi-Version Concurrency Control, MVCC\uff09\u662f MySQL \u7684 InnoDB \u5b58\u50a8\u5f15\u64ce\u5b9e\u73b0\u9694\u79bb\u7ea7\u522b\u7684\u4e00\u79cd\u5177\u4f53\u65b9\u5f0f\uff0c\u7528\u4e8e\u5b9e\u73b0\u63d0\u4ea4\u8bfb\u548c\u53ef\u91cd\u590d\u8bfb\u8fd9\u4e24\u79cd\u9694\u79bb\u7ea7\u522b\u3002\u800c\u672a\u63d0\u4ea4\u8bfb\u9694\u79bb\u7ea7\u522b\u603b\u662f\u8bfb\u53d6\u6700\u65b0\u7684\u6570\u636e\u884c\uff0c\u8981\u6c42\u5f88\u4f4e\uff0c\u65e0\u9700\u4f7f\u7528 MVCC\u3002\u53ef\u4e32\u884c\u5316\u9694\u79bb\u7ea7\u522b\u9700\u8981\u5bf9\u6240\u6709\u8bfb\u53d6\u7684\u884c\u90fd\u52a0\u9501\uff0c\u5355\u7eaf\u4f7f\u7528 MVCC \u65e0\u6cd5\u5b9e\u73b0\u3002 InnoDB\u7684MVCC\uff0c\u662f\u901a\u8fc7\u5728\u6bcf\u884c\u8bb0\u5f55\u540e\u9762\u4fdd\u5b58\u4e24\u4e2a\u9690\u85cf\u7684\u5217\u6765\u5b9e\u73b0\u7684\u3002\u8fd9\u4e24\u4e2a\u5217\uff0c\u4e00\u4e2a\u4fdd\u5b58\u4e86\u884c\u7684\u521b\u5efa\u65f6\u95f4\uff0c\u4e00\u4e2a\u4fdd\u5b58\u4e86\u884c\u7684\u8fc7\u671f\u65f6\u95f4\u3002\u5b58\u50a8\u7684\u4e0d\u662f\u5b9e\u9645\u7684\u65f6\u95f4\u503c\uff0c\u800c\u662f\u7cfb\u7edf\u7684\u7248\u672c\u53f7\u3002MVCC\u53ea\u8981\u53ef\u91cd\u590d\u8bfb\u548c\u63d0\u4ea4\u8bfb\u4e24\u4e2a\u9694\u79bb\u7ea7\u522b\u4e0b\u5de5\u4f5c\u3002 \u5728\u53ef\u91cd\u590d\u8bfb\u7684\u9694\u79bb\u7ea7\u522b\u4e0b\uff0cMVCC\u7684\u64cd\u4f5c\uff1a - SELECT 1. InnoDB\u53ea\u67e5\u627e\u7248\u672c\u65e9\u4e8e\u5f53\u524d\u4e8b\u52a1\u7248\u672c\u7684\u6570\u636e\u884c\uff0c\u8fd9\u6837\u53ef\u4ee5\u786e\u4fdd\u4e8b\u52a1\u8bfb\u53d6\u7684\u884c\uff0c\u8981\u4e48\u662f\u4e8b\u52a1\u5f00\u542f\u524d\u5df2\u7ecf\u5b58\u5728\u7684\uff0c\u8981\u4e48\u662f\u4e8b\u52a1\u81ea\u8eab\u63d2\u5165\u6216\u8005\u4fee\u6539\u8fc7\u7684\u3002 2. \u884c\u7684\u5220\u9664\u7248\u672c\u53f7\u8981\u4e48\u672a\u5b9a\u4e49\uff0c\u8981\u4e48\u5927\u4e8e\u5f53\u524d\u4e8b\u52a1\u7684\u7248\u672c\u53f7\uff0c\u8fd9\u53ef\u4ee5\u4fdd\u8bc1\u4e8b\u52a1\u8bfb\u53d6\u5230\u7684\u884c\uff0c\u5728\u4e8b\u52a1\u5f00\u59cb\u524d\u672a\u88ab\u5220\u9664\u3002 - INSERT 1. \u4e3a\u63d2\u5165\u7684\u6bcf\u4e00\u884c\u4fdd\u5b58\u5f53\u524d\u7cfb\u7edf\u7248\u672c\u53f7\u4f5c\u4e3a\u884c\u7248\u672c\u53f7\u3002 - DELETE 1. \u4e3a\u5220\u9664\u7684\u6bcf\u4e00\u884c\u4fdd\u5b58\u5f53\u524d\u7cfb\u7edf\u7248\u672c\u53f7\u4e3a\u5220\u9664\u7248\u672c\u53f7\u3002 - UPDATE 1. \u4fee\u6539\u540e\u7684\u6570\u636e\u884c\u4fdd\u5b58\u5f53\u524d\u7cfb\u7edf\u7248\u672c\u53f7\u4e3a\u521b\u5efa\u7248\u672c\u53f7\uff0c\u540c\u65f6\u4fdd\u5b58\u5f53\u524d\u7cfb\u7edf\u7248\u672c\u53f7\u4f5c\u4e3a\u539f\u6765\u7684\u884c\u7684\u5220\u9664\u7248\u672c\u53f7\u3002 \u8303\u5f0f \u00b6 \u7b2c\u4e00\u8303\u5f0f\uff1a\u5c5e\u6027\u4e0d\u53ef\u5206 \u7b2c\u4e8c\u8303\u5f0f\uff1a\u6bcf\u4e2a\u975e\u4e3b\u5c5e\u6027\u5b8c\u5168\u51fd\u6570\u4f9d\u8d56\u4e8e\u952e\u7801 \u7b2c\u4e09\u8303\u5f0f\uff1a\u975e\u4e3b\u5c5e\u6027\u4e0d\u4f20\u9012\u51fd\u6570\u4f9d\u8d56\u4e8e\u952e\u7801 \u8303\u5f0f\u5316\u7684\u597d\u5904\uff1a \u8303\u5f0f\u5316\u7684\u66f4\u65b0\u64cd\u4f5c\u901a\u5e38\u6bd4\u53cd\u8303\u5f0f\u5316\u8981\u5feb \u5f53\u6570\u636e\u8f83\u597d\u5730\u8303\u5f0f\u5316\u65f6\uff0c\u5c31\u53ea\u6709\u5f88\u5c11\u6216\u8005\u6ca1\u6709\u91cd\u590d\u6570\u636e\uff0c\u6240\u4ee5\u53ea\u9700\u8981\u4fee\u6539\u66f4\u5c11\u7684\u6570\u636e\u3002 \u8303\u5f0f\u5316\u7684\u8868\u901a\u5e38\u66f4\u5c0f\uff0c\u53ef\u4ee5\u66f4\u597d\u5730\u653e\u5728\u5185\u5b58\u91cc\uff0c\u6240\u4ee5\u6267\u884c\u64cd\u4f5c\u4f1a\u66f4\u5feb\u3002 \u8303\u5f0f\u5316\u7684\u7f3a\u70b9\uff1a\u901a\u5e38\u9700\u8981\u5173\u8054\uff0c\u4ee3\u4ef7\u6602\u8d35\uff0c\u4e5f\u53ef\u80fd\u4f7f\u4e00\u4e9b\u7d22\u5f15\u7b56\u7565\u65e0\u6548\u3002 \u67e5\u8be2\u4f18\u5316 \u00b6 \u67e5\u8be2\u6027\u80fd\u4f4e\u4e0b\u7684\u6700\u57fa\u672c\u7684\u539f\u56e0\u662f\u8bbf\u95ee\u7684\u6570\u636e\u592a\u591a\u3002 \u662f\u5426\u5411\u6570\u636e\u5e93\u8bf7\u6c42\u4e86\u4e0d\u9700\u8981\u7684\u6570\u636e \u53ea\u8fd4\u56de\u5fc5\u8981\u7684\u5217\uff0c\u6700\u597d\u4e0d\u8981\u7528 select * \u8fdb\u884c\u67e5\u8be2 \u53ea\u8fd4\u56de\u5fc5\u8981\u7684\u884c\uff0c\u4f7f\u7528limit\u6765\u9650\u5236\u8fd4\u56de\u7684\u6570\u636e \u7f13\u5b58\u91cd\u590d\u67e5\u8be2\u7684\u6570\u636e \u662f\u5426\u5728\u626b\u63cf\u989d\u5916\u7684\u8bb0\u5f55 \u4f7f\u7528\u7d22\u5f15\u8986\u76d6\u626b\u63cf\uff0c\u628a\u6240\u6709\u9700\u8981\u7528\u5230\u7684\u5217\u90fd\u653e\u5728\u7d22\u5f15\u4e2d\uff0c \u8fd9\u6837\u5b58\u50a8\u5f15\u64ce\u65e0\u9700\u56de\u8868\u83b7\u53d6\u5bf9\u5e94\u884c\u5c31\u53ef\u4ee5\u8fd4\u56de\u7ed3\u679c \u6539\u53d8\u5e93\u8868\u7ed3\u6784 \u91cd\u6784\u67e5\u8be2\u65b9\u5f0f \u91cd\u6784\u67e5\u8be2\u65b9\u5f0f \u5207\u5206\u5927\u67e5\u8be2 \u5206\u89e3\u5927\u8fde\u63a5\u67e5\u8be2 \u4e3b\u4ece\u590d\u5236 \u00b6 \u6982\u5ff5 \u00b6 MySQL\u4e3b\u4ece\u590d\u5236\u662f\u6307\u6570\u636e\u53ef\u4ee5\u4ece\u4e00\u4e2aMySQL\u6570\u636e\u5e93\u670d\u52a1\u5668\u4e3b\u8282\u70b9\u590d\u5236\u5230\u4e00\u4e2a\u6216\u591a\u4e2a\u4ece\u8282\u70b9\u3002MySQL\u9ed8\u8ba4\u91c7\u7528\u5f02\u6b65\u590d\u5236\u65b9\u5f0f\uff0c\u8fd9\u6837\u4ece\u8282\u70b9\u4e0d\u7528\u4e00\u76f4\u8bbf\u95ee\u4e3b\u670d\u52a1\u5668\u6765\u66f4\u65b0\u81ea\u5df1\u7684\u6570\u636e\uff0c\u6570\u636e\u7684\u66f4\u65b0\u53ef\u4ee5\u5728\u8fdc\u7a0b\u8fde\u63a5\u4e0a\u8fdb\u884c\uff0c\u4ece\u8282\u70b9\u53ef\u4ee5\u590d\u5236\u4e3b\u6570\u636e\u5e93\u4e2d\u7684\u6240\u6709\u6570\u636e\u5e93\u6216\u8005\u7279\u5b9a\u7684\u6570\u636e\u5e93\uff0c\u6216\u8005\u7279\u5b9a\u7684\u8868\u3002 \u4f5c\u7528 \u00b6 \u6570\u636e\u5206\u5e03 \u8d1f\u8f7d\u5747\u8861 \u6570\u636e\u5907\u4efd\uff0c\u4fdd\u8bc1\u6570\u636e\u5b89\u5168 \u9ad8\u53ef\u7528\u6027\u548c\u5bb9\u9519\u884c \u5b9e\u73b0\u8bfb\u5199\u5206\u79bb\uff0c\u7f13\u89e3\u6570\u636e\u5e93\u538b\u529b \u7531\u4e8emysql\u5b9e\u73b0\u7684\u5f02\u6b65\u590d\u5236\uff0c\u6240\u4ee5\u4e3b\u5e93\u548c\u4ece\u5e93\u4e4b\u95f4\u5b58\u5728\u4e00\u5b9a\u7684\u5dee\u5f02\uff0c\u5728\u4ece\u5e93\u6267\u884c\u67e5\u8be2\u64cd\u4f5c\u9700\u8981\u8003\u8651\u8fd9\u4e9b\u6570\u636e\u7684\u5dee\u5f02\uff0c\u4e00\u822c\u53ea\u6709\u66f4\u65b0\u4e0d\u9891\u7e41\u548c\u5bf9\u5b9e\u65f6\u6027\u8981\u6c42\u4e0d\u9ad8\u7684\u6570\u636e\u53ef\u4ee5\u901a\u8fc7\u4ece\u5e93\u67e5\u8be2\uff0c\u5b9e\u884c\u8981\u6c42\u9ad8\u7684\u4ecd\u7136\u8981\u4ece\u4e3b\u5e93\u67e5\u8be2\u3002 \u539f\u7406 \u00b6 MySQL\u4e3b\u4ece\u590d\u5236\u6d89\u53ca\u5230\u4e09\u4e2a\u7ebf\u7a0b\uff0c\u4e00\u4e2a\u8fd0\u884c\u5728 \u4e3b\u8282\u70b9\uff08log dump thread\uff09 \uff0c\u5176\u4f59\u4e24\u4e2a\uff08 I/O thread\uff0c SQL thread \uff09\u8fd0\u884c\u5728\u4ece\u8282\u70b9\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a binlog \u7ebf\u7a0b \uff1a\u8d1f\u8d23\u5c06\u4e3b\u670d\u52a1\u5668\u4e0a\u7684\u6570\u636e\u66f4\u6539\u5199\u5165\u4e8c\u8fdb\u5236\u65e5\u5fd7\uff08Binary log\uff09\u4e2d\u3002 I/O \u7ebf\u7a0b \uff1a\u8d1f\u8d23\u4ece\u4e3b\u670d\u52a1\u5668\u4e0a\u8bfb\u53d6\u4e8c\u8fdb\u5236\u65e5\u5fd7\uff0c\u5e76\u5199\u5165\u4ece\u670d\u52a1\u5668\u7684\u4e2d\u7ee7\u65e5\u5fd7\uff08Relay log\uff09\u3002 SQL \u7ebf\u7a0b \uff1a\u8d1f\u8d23\u8bfb\u53d6\u4e2d\u7ee7\u65e5\u5fd7\uff0c\u89e3\u6790\u51fa\u4e3b\u670d\u52a1\u5668\u5df2\u7ecf\u6267\u884c\u7684\u6570\u636e\u66f4\u6539\u5e76\u5728\u4ece\u670d\u52a1\u5668\u4e2d\u91cd\u653e\uff08Replay\uff09\u3002 \u8fde\u63a5\u6c60 \u00b6 \u4e3a\u4ec0\u4e48\u4f7f\u7528\u8fde\u63a5\u6c60 \u4e0eJava\u7684\u7ebf\u7a0b\u6c60\u76f8\u540c\uff0c\u4e3a\u4e86\u8282\u7ea6\u7cfb\u7edf\u8d44\u6e90 \u5e38\u7528\u7684\u8fde\u63a5\u6c60 DBCP\uff1a\u4f7f\u7528\u91cf\u6700\u5927\u7684\u8fde\u63a5\u6c60 C3P0 \u5206\u8868 \u00b6 \u6c34\u5e73\u5206\u8868 \u5c06\u4e00\u4e2a\u8868\u7684\u8bb0\u5f55\u5206\u5272\u5230\u6570\u4e2a\u8868\u4e2d\uff0c\u53ef\u4ee5\u51cf\u5c11\u7d22\u5f15\u7684\u5927\u5c0f\uff0c\u52a0\u5feb\u7d22\u5f15 \u5782\u76f4\u5206\u8868 \u5c06\u90e8\u5206\u5b57\u6bb5\u5212\u5206\u81f3\u5176\u4ed6\u7684\u8868\uff0c\u90e8\u5206\u5b57\u6bb5\u6570\u636e\u91cf\u5927\uff0c\u8fdb\u884c\u7d22\u5f15\u65f6\u4f1a\u5e26\u6765\u5927\u91cf\u7684IO\u8d1f\u62c5\uff0c\u8fdb\u884c\u5206\u8868\u6709\u5229\u4e8e\u67e5\u8be2\u6548\u7387 SQL \u00b6 \u4e00\u6761SQL\u8bed\u53e5\u7684\u6267\u884c\u8fc7\u7a0b\uff1a 1. \u8fde\u63a5\u5668\u67e5\u770b\u5f53\u524d\u7528\u6237\u6743\u9650\uff0c\u82e5\u62e5\u6709\u6743\u9650\uff0c\u5efa\u7acb\u8fde\u63a5\u3002\u5982\u679c\u5ba2\u6237\u7aef\u592a\u957f\u65f6\u95f4\u6ca1\u6709\u52a8\u9759\uff0c\u8fde\u63a5\u5668\u4f1a\u81ea\u52a8\u65ad\u5f00\u8fde\u63a5 2. \u5206\u6790\u5668\u5206\u6790SQL\u8bed\u53e5\uff0c\u5305\u62ec\u8bed\u6cd5\u5206\u6790\uff08\u8bed\u6cd5\u662f\u5426\u6b63\u786e\uff09\uff0c\u8bcd\u6cd5\u5206\u6790\uff08\u8bc6\u522bSQL\u8bed\u53e5\uff09\u3002 3. \u4f18\u5316\u5668\u4f18\u5316\u67e5\u8be2\uff0c\u51b3\u5b9a\u4f7f\u7528\u7684\u7d22\u5f15\u7b49\u3002 4. \u6267\u884c\u5668\u6765\u65f6\u6267\u884c\u8bed\u53e5\u3002 \u8bf4\u4e00\u4e0b\u7d22\u5f15\uff1f \u00b6 \u4ec0\u4e48\u662f\u7d22\u5f15 \u00b6 \u7d22\u5f15\u662f\u4e00\u79cd\u7279\u6b8a\u7684\u6587\u4ef6\uff08InnoDB\u6570\u636e\u8868\u4e0a\u7684\u7d22\u5f15\u662f\u8868\u7a7a\u95f4\u7684\u4e00\u4e2a\u7ec4\u6210\u90e8\u5206\uff09\uff0c\u4ed6\u4eec\u5305\u542b\u7740\u5bf9\u6570\u636e\u8868\u91cc\u6240\u6709\u8bb0\u5f55\u7684\u5f15\u7528\u6307\u9488\u3002 \u7d22\u5f15\u662f\u4e00\u79cd\u6570\u636e\u7ed3\u6784\u3002\u6570\u636e\u5e93\u7d22\u5f15\uff0c\u662f\u6570\u636e\u5e93\u7ba1\u7406\u7cfb\u7edf\u4e2d\u7684\u4e00\u4e2a\u6392\u5e8f\u7684\u6570\u636e\u7ed3\u6784\uff0c\u4e3a\u4e86\u534f\u52a9\u5feb\u901f\u67e5\u8be2\u3001\u66f4\u65b0\u6570\u636e\u8868\u4e2d\u6570\u636e\u3002\u7d22\u5f15\u7684\u5b9e\u73b0\u901a\u5e38\u4f7f\u7528B\u6811\u4ee5\u53ca\u53d8\u79cdB+\u6811\u3002 \u7d22\u5f15\u7684\u7f3a\u70b9 \u00b6 \u65f6\u95f4\u65b9\u9762\uff1a\u521b\u5efa\u7d22\u5f15\u548c\u7ef4\u62a4\u7d22\u5f15\u8981\u8017\u8d39\u65f6\u95f4\uff0c\u5177\u4f53\u7684\uff0c\u5f53\u5bf9\u8868\u4e2d\u7684\u6570\u636e\u8fdb\u884c\u589e\u52a0\u3001\u5220\u9664\u548c\u4fee\u6539\u7684\u65f6\u5019\uff0c\u7d22\u5f15\u4e5f\u8981\u52a8\u6001\u7684\u7ef4\u62a4\uff0c\u4f1a\u8f83\u4f4e\u589e\u6539\u5220\u7684\u6267\u884c\u6548\u7387\u3002 \u7a7a\u95f4\u65b9\u9762\uff1a\u7d22\u5f15\u9700\u8981\u5360\u7528\u7269\u7406\u7a7a\u95f4\u3002 \u7d22\u5f15\u7684\u4e3b\u8981\u7c7b\u578b \u00b6 \u7269\u7406\u5b58\u50a8\u89d2\u5ea6\uff1a \u805a\u7c07\u7d22\u5f15\uff1a\u4ee5\u4e3b\u952e\u4f5c\u4e3aB+\u6811\u7d22\u5f15\u7684\u952e\u503c\u800c\u6784\u5efa\u7684B+\u6811\u7d22\u5f15 \u975e\u805a\u7c07\u7d22\u5f15\uff1a\u4ee5\u4e3b\u952e\u4e4b\u5916\u7684\u5217\u503c\u4f5c\u4e3a\u952e\u503c\u6784\u5efa\u7684B+\u6811\u7d22\u5f15 \u6570\u636e\u7ed3\u6784\u89d2\u5ea6\uff1a B+\u6811\u7d22\u5f15 hash\u7d22\u5f15 FULLTEXT\u7d22\u5f15 R-Tree\u7d22\u5f15 \u903b\u8f91\u89d2\u5ea6\uff1a \u4e3b\u952e\u7d22\u5f15\uff1a\u6570\u636e\u5217\u4e0d\u5141\u8bb8\u91cd\u590d\uff0c\u4e0d\u5141\u8bb8\u4e3a NULL \uff0c\u4e00\u4e2a\u8868\u4e2d\u53ea\u80fd\u6709\u4e00\u4e2a\u4e3b\u952e \u666e\u901a/\u5355\u5217\u7d22\u5f15\uff1a\u57fa\u672c\u7684\u7d22\u5f15\u7c7b\u578b\uff0c\u6ca1\u6709\u552f\u4e00\u6027\u7684\u6027\u8d28\uff0c\u5141\u8bb8\u4e3a NULL \u591a\u5217/\u8054\u5408/\u590d\u5408\u7d22\u5f15\uff1a\u4ee5\u4e00\u5b9a\u987a\u5e8f\u5f15\u7528\u591a\u5217 \u552f\u4e00\u7d22\u5f15\uff1a\u6570\u636e\u5217\u4e0d\u5141\u8bb8\u91cd\u590d\uff0c\u5141\u8bb8\u4e3a NULL \uff0c\u4e00\u4e2a\u8868\u4e2d\u5141\u8bb8\u591a\u4e2a\u5217\u521b\u5efa\u552f\u4e00\u7d22\u5f15 \u5168\u6587\u7d22\u5f15\uff1a\u76ee\u524d\u641c\u7d22\u5f15\u64ce\u4f7f\u7528\u7684\u4e00\u79cd\u5173\u952e\u6280\u672f \u7a7a\u95f4\u7d22\u5f15\uff1a\u5bf9\u7a7a\u95f4\u6570\u636e\u7c7b\u578b\u7684\u5b57\u6bb5\u5efa\u7acb\u7684\u7d22\u5f15 \u6700\u5de6\u524d\u7f00\u5339\u914d\u539f\u5219 \u00b6 \u4e3b\u8981\u9488\u5bf9\u8054\u5408\u7d22\u5f15\uff0c\u5982\u679c\u67e5\u8be2\u7684\u65f6\u5019\u67e5\u8be2\u6761\u4ef6\u7cbe\u786e\u5339\u914d\u7d22\u5f15\u7684\u5de6\u8fb9\u8fde\u7eed\u4e00\u5217\u6216\u591a\u5217\uff0c\u5219\u6b64\u5217\u5c31\u53ef\u4ee5\u88ab\u7528\u5230\u3002 redis\u5e94\u7528\u573a\u666f\uff1f \u00b6 \u7f13\u5b58\u3001\u8ba1\u6570\u5668\u3001\u961f\u5217\u3001\u4f4d\u64cd\u4f5c\u3001\u6700\u65b0\u5217\u8868\u3002 \u8bf4\u4e00\u4e0b\u56de\u8868\u64cd\u4f5c\uff1f \u00b6 \u975e\u805a\u7c07\u7d22\u5f15\u548c\u805a\u7c07\u7d22\u5f15\u7684\u533a\u522b\u5728\u4e8e\u975e\u805a\u7c07\u7d22\u5f15\u7684\u53f6\u5b50\u8282\u70b9\u4e0d\u5b58\u50a8\u8868\u4e2d\u7684\u6570\u636e\uff0c\u800c\u662f\u5b58\u50a8\u8be5\u5217\u5bf9\u5e94\u7684\u4e3b\u952e\uff0c\u60f3\u8981\u67e5\u627e\u6570\u636e\u6211\u4eec\u8fd8\u9700\u8981\u6839\u636e\u4e3b\u952e\u518d\u53bb\u805a\u7c07\u7d22\u5f15\u4e2d\u8fdb\u884c\u67e5\u627e\uff0c\u8fd9\u4e2a\u518d\u6839\u636e\u805a\u7c07\u7d22\u5f15\u67e5\u627e\u6570\u636e\u7684\u8fc7\u7a0b\uff0c\u88ab\u79f0\u4e3a\u56de\u8868\u3002 \u5982\u4f55\u907f\u514d\u56de\u8868\u67e5\u8be2?\u4ec0\u4e48\u662f\u7d22\u5f15\u8986\u76d6? \u00b6 \u5982\u4f55\u907f\u514d\uff1a\u5c06\u88ab\u67e5\u8be2\u7684\u5b57\u6bb5\uff0c\u5efa\u7acb\u5230\u8054\u5408\u7d22\u5f15\u4e2d\u3002\u5c3d\u91cf\u4f7f\u7528\u5230\u7d22\u5f15\u8986\u76d6\uff0c\u4e0d\u5e94\u8be5\u4f7f\u7528 * \u6765\u5168\u8868\u67e5\u8be2\u3002 \u7d22\u5f15\u8986\u76d6\u662f\u6307\u4ece\u7d22\u5f15\u4e2d\u5c31\u53ef\u4ee5\u5f97\u5230\u67e5\u8be2\u7ed3\u679c\uff0c\u4ece\u800c\u4e0d\u9700\u8981\u67e5\u8be2\u805a\u7c07\u7d22\u5f15\u4e2d\u7684\u884c\u6570\u636e\u4fe1\u606f\u3002 \u9700\u8981\u8bf4\u660e\u7684\u662f\uff0c\u8986\u76d6\u7d22\u5f15\u5fc5\u987b\u8981\u5b58\u50a8\u7d22\u5f15\u5217\u7684\u503c\uff0c\u800c\u54c8\u5e0c\u7d22\u5f15\u3001\u7a7a\u95f4\u7d22\u5f15\u548c\u5168\u6587\u7d22\u5f15\u4e0d\u5b58\u50a8\u7d22\u5f15\u5217\u7684\u503c\uff0c\u6240\u4ee5mysql\u53ea\u80fd\u7528B+tree\u7d22\u5f15\u505a\u8986\u76d6\u7d22\u5f15\u3002 \u8bf4\u4e00\u4e0b\u8868\u8fde\u63a5\u7684\u64cd\u4f5c\uff1f \u00b6 \u5728MySQL\u4e2d\uff0c\u5e38\u89c1\u7684\u8868\u8fde\u63a5\u65b9\u5f0f\u67094\u7c7b\uff0c\u51717\u79cd\u65b9\u5f0f\uff1a - INNER JOIN \uff1ainner join\u662f\u6839\u636e\u8868\u8fde\u63a5\u6761\u4ef6\uff0c\u6c42\u53d6\u4e24\u4e2a\u8868\u7684\u6570\u636e\u4ea4\u96c6\uff1b - LEFT JOIN \uff1aleft join\u662f\u6839\u636e\u8868\u8fde\u63a5\u6761\u4ef6\uff0c\u6c42\u53d6\u4e24\u4e2a\u8868\u7684\u6570\u636e\u4ea4\u96c6\u518d\u52a0\u4e0a\u5de6\u8868\u5269\u4e0b\u7684\u6570\u636e\uff0c\u6b64\u5916\uff0c\u8fd8\u53ef\u4ee5\u7528where\u8fc7\u6ee4\u6761\u4ef6 - RIGHT JOIN \uff1aright join\u662f\u6839\u636e\u8868\u8fde\u63a5\u6761\u4ef6\uff0c\u6c42\u53d6\u4e24\u4e2a\u8868\u7684\u6570\u636e\u4ea4\u96c6\u518d\u52a0\u4e0a\u53f3\u8868\u5269\u4e0b\u7684\u6570\u636e\uff0c\u6b64\u5916\uff0c\u8fd8\u53ef\u4ee5\u4f7f\u7528where\u8fc7\u6ee4\u6761\u4ef6 - FULL JOIN \uff1afull join\u662f\u5de6\u8fde\u63a5\u548c\u53f3\u8fde\u63a5\u7684\u5e76\u96c6\uff0cMySQL\u5e76\u672a\u63d0\u4f9bfull join\u7684\u8bed\u6cd5\uff0c\u5982\u679c\u8981\u5b9e\u73b0\uff0c\u9700\u8981left join\u4e8eright join\u8fdb\u884c\u6c42\u5e76\u96c6\uff0c\u8fd8\u6709\u7528where\u8fc7\u6ee4 \u7d22\u5f15\u4ec0\u4e48\u65f6\u5019\u4f1a\u5931\u6548\uff1f \u00b6 \u6761\u4ef6\u4e2d\u6709 or like \u67e5\u8be2\uff08\u4ee5 % \u5f00\u5934\uff09 \u5982\u679c\u5217\u7c7b\u578b\u662f\u5b57\u7b26\u4e32\uff0c\u90a3\u4e00\u5b9a\u8981\u5728\u6761\u4ef6\u4e2d\u5c06\u6570\u636e\u4f7f\u7528\u5f15\u53f7\u5f15\u7528\u8d77\u6765\uff0c\u5426\u5219\u4e0d\u4f7f\u7528\u7d22\u5f15 \u5bf9\u5217\u8fdb\u884c\u51fd\u6570\u8fd0\u7b97 \u8d1f\u5411\u67e5\u8be2\u6761\u4ef6\u4f1a\u5bfc\u81f4\u65e0\u6cd5\u4f7f\u7528\u7d22\u5f15\uff0c\u6bd4\u5982 NOT IN \uff0c NOT LIKE \uff0c != \u7b49 \u5bf9\u4e8e\u8054\u5408\u7d22\u5f15\uff0c\u4e0d\u662f\u4f7f\u7528\u7b2c\u4e00\u90e8\u5206\uff08\u7b2c\u4e00\u4e2a\uff09\uff0c\u5219\u4e0d\u4f1a\u4f7f\u7528\u7d22\u5f15\uff08\u6700\u5de6\u5339\u914d\uff09 \u5982\u679cmysql\u8bc4\u4f30\u4f7f\u7528\u5168\u8868\u626b\u63cf\u8981\u6bd4\u4f7f\u7528\u7d22\u5f15\u5757\uff0c\u5219\u4e0d\u4f7f\u7528\u7d22\u5f15 \u5224\u65adsql\u662f\u5426\u4f7f\u7528\u7d22\u5f15 \u00b6 \u4f7f\u7528\u89e3\u91ca\u51fd\u6570 explain \uff0c\u53ea\u9700\u6dfb\u52a0\u5728sql\u8bed\u53e5\u4e4b\u524d\u5373\u53ef\uff1a \u6211\u4eec\u53ea\u9700\u8981\u6ce8\u610f\u4e00\u4e2a\u6700\u91cd\u8981\u7684type \u7684\u4fe1\u606f\u5f88\u660e\u663e\u7684\u63d0\u73b0\u662f\u5426\u7528\u5230\u7d22\u5f15\uff1a type\u7ed3\u679c\u503c\u4ece\u597d\u5230\u574f\u4f9d\u6b21\u662f\uff1a system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL \u4e00\u822c\u6765\u8bf4\uff0c\u5f97\u4fdd\u8bc1\u67e5\u8be2\u81f3\u5c11\u8fbe\u5230range\u7ea7\u522b\uff0c\u6700\u597d\u80fd\u8fbe\u5230ref\uff0c\u5426\u5219\u5c31\u53ef\u80fd\u4f1a\u51fa\u73b0\u6027\u80fd\u95ee\u9898\u3002 possible_keys \uff1asql\u6240\u7528\u5230\u7684\u7d22\u5f15 key \uff1a\u663e\u793aMySQL\u5b9e\u9645\u51b3\u5b9a\u4f7f\u7528\u7684\u952e\uff08\u7d22\u5f15\uff09\u3002\u5982\u679c\u6ca1\u6709\u9009\u62e9\u7d22\u5f15\uff0c\u952e\u662fNULL rows : \u663e\u793aMySQL\u8ba4\u4e3a\u5b83\u6267\u884c\u67e5\u8be2\u65f6\u5fc5\u987b\u68c0\u67e5\u7684\u884c\u6570\u3002 \u8bf4\u4e00\u4e0b\u9501\uff1f\u8bf4\u4e00\u4e0b\u533a\u522b\uff1f \u00b6 Redis\u7f13\u5b58\u66f4\u65b0\u7b56\u7565 \u00b6 \u9ad8\u5e76\u53d1 \u00b6 \u9ad8\u5e76\u53d1\uff08High Concurrency\uff09\u662f\u6307\u7cfb\u7edf\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u7684\u4e00\u79cd\u201c\u77ed\u65f6\u95f4\u5185\u9047\u5230\u5927\u91cf\u64cd\u4f5c\u8bf7\u6c42\u201d\u7684\u60c5\u51b5\uff0c\u4e3b\u8981\u53d1\u751f\u5728web\u7cfb\u7edf\u96c6\u4e2d\u5927\u91cf\u8bbf\u95ee\u6536\u5230\u5927\u91cf\u8bf7\u6c42\uff0c\u4f8b\u5982\u6dd8\u5b9d\u53cc\u5341\u4e00\u3001\u4eac\u4e1c618\u7c7b\u7684\u6d3b\u52a8\u3002\u8be5\u60c5\u51b5\u7684\u53d1\u751f\u4f1a\u5bfc\u81f4\u7cfb\u7edf\u5728\u8fd9\u6bb5\u65f6\u95f4\u5185\u6267\u884c\u5927\u91cf\u64cd\u4f5c\uff08\u5bf9\u8d44\u6e90\u7684\u8bf7\u6c42\u3001\u6570\u636e\u5e93\u7684\u64cd\u4f5c\u7b49\uff09\u3002 \u9ad8\u5e76\u53d1\u76f8\u5173\u5e38\u7528\u7684\u4e00\u4e9b\u6307\u6807\u6709\uff1a\u54cd\u5e94\u65f6\u95f4\u3001\u541e\u5410\u91cf\u3001\u6bcf\u79d2\u67e5\u8be2\u7387QPS\u3001\u5e76\u53d1\u7528\u6237\u6570\u3002 \u54cd\u5e94\u65f6\u95f4 \uff1a\u7cfb\u7edf\u5bf9\u8bf7\u6c42\u505a\u51fa\u54cd\u5e94\u7684\u65f6\u95f4\u3002\u4f8b\u5982\u7cfb\u7edf\u5904\u7406\u4e00\u4e2ahttp\u8bf7\u6c42\u9700\u8981600ms\uff0c\u8fd9\u4e2a600ms\u5c31\u662f\u7cfb\u7edf\u7684\u54cd\u5e94\u65f6\u95f4\u3002 \u541e\u5410\u91cf \uff1a\u5355\u4f4d\u65f6\u95f4\u5185\u5904\u7406\u7684\u8bf7\u6c42\u6570\u91cf\u3002 QPS \uff1a\u6bcf\u79d2\u54cd\u5e94\u8bf7\u6c42\u6570\u3002 \u5e76\u53d1\u7528\u6237\u6570 \uff1a\u540c\u65f6\u627f\u8f7d\u6b63\u5e38\u4f7f\u7528\u7cfb\u7edf\u529f\u80fd\u7684\u7528\u6237\u6570\u91cf\u3002\u4f8b\u5982\u4e00\u4e2a\u5373\u65f6\u901a\u8baf\u7cfb\u7edf\uff0c\u540c\u65f6\u5728\u7ebf\u7684\u7528\u6237\u91cf\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u4ee3\u8868\u4e86\u7cfb\u7edf\u7684\u5e76\u53d1\u7528\u6237\u6570\u3002 \u7b80\u5355\u6765\u8bf4\uff0c\u9ad8\u5e76\u53d1\u7684\u57fa\u672c\u8868\u73b0\u5c31\u662f\u7cfb\u7edf\u5728\u5355\u4f4d\u65f6\u95f4\u5185\u80fd\u591f\u540c\u65f6\u5904\u7406\u7684\u8bf7\u6c42\u6570\u3002\u9ad8\u5e76\u53d1\u6ca1\u6709\u5177\u4f53\u7684\u8303\u56f4\u89c4\u5b9a\u591a\u5c11\u5e76\u53d1\u7b97\u662f\u9ad8\u5e76\u53d1\uff0c\u6bd4\u5982\u4f60\u5f00\u53d1\u7684\u7cfb\u7edf\u6700\u5927\u5e76\u53d1\u662f1000\uff0c\u90a3\u4e48\u6765\u4e861001\u7684\u5e76\u53d1\u91cf\u5bf9\u4f60\u6765\u8bf4\u5c31\u662f\u9ad8\u5e76\u53d1\uff0c\u4f46\u662f\u8fd9\u4e2a\u5e76\u53d1\u91cf\u653e\u5728\u6dd8\u5b9d\u4e0a\uff0c\u7b80\u76f4\u4ec0\u4e48\u90fd\u7b97\u4e0d\u4e0a\u3002 \u5982\u679c\u9ad8\u5e76\u53d1\u5904\u7406\u4e0d\u597d\uff0c\u4e0d\u4ec5\u4f1a\u964d\u4f4e\u7528\u6237\u7684\u4f53\u9a8c\u5ea6(\u8bf7\u6c42\u54cd\u5e94\u65f6\u95f4\u8fc7\u957f\u7b49)\uff0c\u540c\u65f6\u53ef\u80fd\u5bfc\u81f4\u7cfb\u7edf\u5b95\u673a\u3001\u505c\u6b62\u5de5\u4f5c\u7b49\u3002 \u4f7f\u7528\u7f13\u5b58 \u00b6 \u5927\u5bb6\u90fd\u77e5\u9053MySQL\u52a0\u4e0aRedis\u662f\u4e00\u5bf9\u513f\u7ecf\u5178\u7684\u7ec4\u5408\u3002\u4f7f\u7528Redis\u4f5c\u4e3aMySQL\u7684\u524d\u7f6e\u7f13\u5b58\uff0c\u53ef\u4ee5\u4e3aMySQL\u6321\u4f4f\u5927\u90e8\u5206\u67e5\u8be2\u8bf7\u6c42\uff0c\u53ef\u4ee5\u5f88\u5927\u7a0b\u5ea6\u4e0a\u7f13\u89e3MySQL\u5e76\u53d1\u8bf7\u6c42\u7684\u538b\u529b\u3002Redis\u662f\u4e00\u4e2a\u4f7f\u7528\u5185\u5b58\u4fdd\u5b58\u6570\u636e\u7684\u9ad8\u6027\u80fdK-V\u6570\u636e\u5e93\uff0c\u5b83\u7684\u9ad8\u6027\u80fd\u4e3b\u8981\u6765\u81ea\u4e8e\uff1a \u7b80\u5355\u7684\u6570\u636e\u7ed3\u6784 \u548c \u4f7f\u7528\u5185\u5b58\u5b58\u50a8\u6570\u636e \u3002\u4f46\u662f\u6211\u4eec\u9700\u8981\u77e5\u9053\u7684\u662f\u5185\u5b58\u672c\u8eab\u5c31\u662f\u4e00\u79cd\u6613\u5931\u6027\u5b58\u50a8\uff0c\u6240\u4ee5\u4f7f\u7528Redis\u4e0d\u80fd\u4fdd\u8bc1\u6570\u636e\u53ef\u9760\u5b58\u50a8\u3002\u4ece\u8bbe\u8ba1\u4e0a\u6765\u8bf4\uff0cRedis\u727a\u7272\u4e86\u6570\u636e\u53ef\u9760\u6027\uff0c\u6362\u53d6\u4e86\u9ad8\u6027\u80fd\u3002\u4f46\u4e5f\u6b63\u662f\u8fd9\u4e9b\u7279\u6027\uff0c\u4f7f\u5f97Redis\u7279\u522b\u9002\u5408\u7528\u6765\u505aMySQL\u7684\u524d\u7f6e\u7f13\u5b58\u3002 \u5373\u4f7f\u53ea\u662f\u628aRedis\u4f5c\u4e3a\u7f13\u5b58\u6765\u4f7f\u7528\uff0c\u6211\u4eec\u5728\u8bbe\u8ba1Redis\u7f13\u5b58\u7684\u65f6\u5019\uff0c\u4e5f\u5fc5\u987b\u8981\u8003\u8651Redis\u7684\u8fd9\u79cd \u6570\u636e\u4e0d\u53ef\u9760\u6027 \uff0c\u6216\u8005\u6362\u53e5\u8bdd\u8bf4\uff0c\u6211\u4eec\u7684\u7cfb\u7edf\u5728\u4f7f\u7528Redis\u7684\u65f6\u5019\uff0c\u8981\u80fd\u517c\u5bb9Redis\u4e22\u6570\u636e\u7684\u60c5\u51b5\uff0c\u505a\u5230\u5373\u4f7fRedis\u53d1\u751f\u4e86\u4e22\u6570\u636e\u7684\u60c5\u51b5\uff0c\u4e5f\u4e0d\u5f71\u54cd\u7cfb\u7edf\u7684\u6570\u636e\u51c6\u786e\u6027\u3002 \u5173\u4e8e\u7f13\u5b58\u66f4\u65b0\u7b56\u7565\uff0c\u4f7f\u7528\u7684\u591a\u7684\u4e5f\u5c31\u662f Read/Write Through\u6a21\u5f0f \u548c Cache Aside\u6a21\u5f0f \uff0c Read/Write Through\u6a21\u5f0f \u5728\u67e5\u8be2\u6570\u636e\u7684\u65f6\u5019\uff0c\u5148\u53bb\u7f13\u5b58\u4e2d\u67e5\u8be2\uff0c\u5982\u679c\u547d\u4e2d\u7f13\u5b58\u90a3\u5c31\u76f4\u63a5\u8fd4\u56de\u6570\u636e\uff1b\u5982\u679c\u6ca1\u6709\u547d\u4e2d\uff0c\u90a3\u5c31\u53bb\u6570\u636e\u5e93\u4e2d\u67e5\u8be2\uff0c\u5f97\u5230\u67e5\u8be2\u7ed3\u679c\u4e4b\u540e\u628a\u6570\u636e\u5199\u5165\u7f13\u5b58\uff0c\u7136\u540e\u8fd4\u56de\u3002\u5728\u66f4\u65b0\u6570\u636e\u7684\u65f6\u5019\uff0c\u5148\u53bb\u66f4\u65b0\u6570\u636e\u5e93\uff0c\u5982\u679c\u66f4\u65b0\u6210\u529f\uff0c\u518d\u53bb\u66f4\u65b0\u7f13\u5b58\u4e2d\u7684\u6570\u636e\u3002 \u603b\u7ed3 \u00b6 \u4f7f\u7528Redis\u4f5c\u4e3aMySQL\u7684\u524d\u7f6e\u7f13\u5b58\uff0c\u53ef\u4ee5\u975e\u5e38\u6709\u6548\u5730\u63d0\u5347\u7cfb\u7edf\u5904\u7406\u9ad8\u5e76\u53d1\u7684\u80fd\u529b\uff0c\u964d\u4f4e\u8bf7\u6c42\u54cd\u5e94\u65f6\u95f4\u3002\u7edd\u5927\u591a\u6570\u60c5\u51b5\u4e0b\uff0c\u4f7f\u7528Cache Aside\u6a21\u5f0f\u6765\u66f4\u65b0\u7f13\u5b58\u90fd\u662f\u6700\u4f73\u7684\u9009\u62e9\uff0c\u76f8\u6bd4Read/Write Through\u6a21\u5f0f\u66f4\u7b80\u5355\uff0c\u8fd8\u80fd\u5927\u5e45\u964d\u4f4e\u810f\u6570\u636e\u7684\u53ef\u80fd\u6027\u3002\u7279\u522b\u6ce8\u610f\u7684\u662f\uff0c\u5927\u91cf\u7f13\u5b58\u7a7f\u900f\u5f15\u8d77\u96ea\u5d29\u7684\u95ee\u9898\uff0c\u4f60\u9700\u8981\u9488\u5bf9\u5177\u4f53\u4e1a\u52a1\u573a\u666f\u6765\u9009\u62e9\u5408\u9002\u89e3\u51b3\u65b9\u6848\u3002 reids\u9047\u5230\u5927KV \u00b6 \u8df3\u8868 \u00b6 \u8df3\u8868\u53ef\u4ee5\u7b80\u5355\u7406\u89e3\u5c31\u662f\u7ed9\u94fe\u8868\u52a0\u7d22\u5f15\uff0c\u5f53\u7ed3\u70b9\u6570\u91cf\u591a\u7684\u65f6\u5019\uff0c\u8fd9\u79cd\u6dfb\u52a0\u7d22\u5f15\u7684\u65b9\u5f0f\uff0c\u4f1a\u4f7f\u67e5\u8be2\u6548\u7387\u63d0\u9ad8\u7684\u975e\u5e38\u660e\u663e\u3002 \u8df3\u8868\u8fd9\u4e2a\u52a8\u6001\u6570\u636e\u7ed3\u6784\uff0c\u4e0d\u4ec5\u652f\u6301\u67e5\u627e\u64cd\u4f5c\uff0c\u8fd8\u652f\u6301\u52a8\u6001\u7684\u63d2\u5165\u3001\u5220\u9664\u64cd\u4f5c\uff0c\u800c\u4e14\u63d2\u5165\u3001\u5220\u9664\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e5f\u662f \\(O(logn)\\) \u3002 \u5bf9\u4e8e\u5355\u7eaf\u7684\u5355\u94fe\u8868\uff0c\u9700\u8981\u904d\u5386\u6bcf\u4e2a\u7ed3\u70b9\u6765\u627e\u5230\u63d2\u5165\u7684\u4f4d\u7f6e\u3002\u4f46\u662f\u5bf9\u4e8e\u8df3\u8868\u6765\u8bf4\uff0c\u56e0\u4e3a\u5176\u67e5\u627e\u67d0\u4e2a\u7ed3\u70b9\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u662f \\(O(logn)\\) \uff0c\u6240\u4ee5\u8fd9\u91cc\u67e5\u627e\u67d0\u4e2a\u6570\u636e\u5e94\u8be5\u63d2\u5165\u7684\u4f4d\u7f6e\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u4e5f\u662f \u25cb(\u33d2n)\u3002 Redis\u9009\u4e2d\u8df3\u8868\u800c\u4e0d\u4f7f\u7528B+\u6811 \u00b6 redis \u4f7f\u7528\u8df3\u8868\u4e0d\u7528 B + \u6570\u7684\u539f\u56e0\u662f\uff1aredis \u662f\u5185\u5b58\u6570\u636e\u5e93\uff0c\u800c B + \u6811\u7eaf\u7cb9\u662f\u4e3a\u4e86 mysql \u8fd9\u79cd IO \u6570\u636e\u5e93\u51c6\u5907\u7684\u3002B + \u6811\u7684\u6bcf\u4e2a\u8282\u70b9\u7684\u6570\u91cf\u90fd\u662f\u4e00\u4e2a mysql \u5206\u533a\u9875\u7684\u5927\u5c0f Redis \u4e2d\u7684\u6709\u5e8f\u96c6\u5408\u662f\u901a\u8fc7\u8df3\u8868\u6765\u5b9e\u73b0\u7684\uff0c\u4e25\u683c\u70b9\u8bb2\uff0c\u8fd8\u7528\u5230\u4e86\u6563\u5217\u8868\uff08\u5173\u4e8e\u6563\u5217\u8868\uff09\uff0c\u5982\u679c\u67e5\u770b Redis \u5f00\u53d1\u624b\u518c\uff0c\u4f1a\u53d1\u73b0 Redis \u4e2d\u7684\u6709\u5e8f\u96c6\u5408\u652f\u6301\u7684\u6838\u5fc3\u64cd\u4f5c\u4e3b\u8981\u6709\u4e0b\u9762\u8fd9\u51e0\u4e2a\uff1a \u63d2\u5165\u4e00\u4e2a\u6570\u636e \u5220\u9664\u4e00\u4e2a\u6570\u636e \u67e5\u627e\u4e00\u4e2a\u6570\u636e \u6309\u7167\u533a\u95f4\u67e5\u627e\u6570\u636e\uff08\u6bd4\u5982\u67e5\u627e\u5728 [100,356] \u4e4b\u95f4\u7684\u6570\u636e\uff09 \u8fed\u4ee3\u8f93\u51fa\u6709\u5e8f\u5e8f\u5217 \u5176\u4e2d\uff0c\u63d2\u5165\u3001\u67e5\u627e\u3001\u5220\u9664\u4ee5\u53ca\u8fed\u4ee3\u8f93\u51fa\u6709\u5e8f\u5e8f\u5217\u8fd9\u51e0\u4e2a\u64cd\u4f5c\uff0c\u7ea2\u9ed1\u6811\u4e5f\u80fd\u5b8c\u6210\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u548c\u8df3\u8868\u662f\u4e00\u6837\u7684\uff0c\u4f46\u662f\uff0c\u6309\u7167\u533a\u95f4\u6765\u67e5\u627e\u6570\u636e\u8fd9\u4e2a\u64cd\u4f5c\uff0c\u7ea2\u9ed1\u6811\u7684\u6548\u7387\u6ca1\u6709\u8df3\u8868\u9ad8\u3002 \u5bf9\u4e8e\u6309\u7167\u533a\u95f4\u67e5\u627e\u6570\u636e\u8fd9\u4e2a\u64cd\u4f5c\uff0c\u8df3\u8868\u53ef\u4ee5\u505a\u5230 \\(O(logn)\\) \u7684\u65f6\u95f4\u590d\u6742\u5ea6\u5b9a\u4f4d\u533a\u95f4\u7684\u8d77\u70b9\uff0c\u7136\u540e\u5728\u539f\u59cb\u94fe\u8868\u4e2d\u987a\u5e8f\u5f80\u540e\u904d\u5386\u5c31\u53ef\u4ee5\u4e86\u3002\u8fd9\u6837\u505a\u975e\u5e38\u9ad8\u6548\u3002 \u5f53\u7136\uff0c\u8fd8\u6709\u5176\u4ed6\u539f\u56e0\uff0c\u6bd4\u5982\uff0c\u8df3\u8868\u4ee3\u7801\u66f4\u5bb9\u6613\u5b9e\u73b0\uff0c\u53ef\u8bfb\u6027\u597d\u4e0d\u6613\u51fa\u9519\u3002\u8df3\u8868\u66f4\u52a0\u7075\u6d3b\uff0c\u53ef\u4ee5\u901a\u8fc7\u6539\u53d8\u7d22\u5f15\u6784\u5efa\u7b56\u7565\uff0c\u6709\u6548\u5e73\u8861\u6267\u884c\u6548\u7387\u548c\u5185\u5b58\u6d88\u8017\u3002 \u603b\u51718\u4e2a\u73ed\u7ea7\u3001\u8f93\u51fa\u6bcf\u4e2a\u73ed\u7ea7\u7537\u751f\u7684\u6570\u5b66\u524d\u4e09\u540d\u548c\u5973\u751f\u7684\u8bed\u6587\u524d\u4e09\u540d \u00b6 SELECT g1 . stu_id , g1 . class_id , g1 . gender , g1 . math_score FROM grade g1 WHERE g1 . gender = 'm' AND EXISTS ( SELECT count ( * ) FROM grade g2 WHERE g2 . gender = 'm' AND g2 . math_score >= g1 . math_score AND g2 . class_id = g1 . class_id GROUP BY g2 . class_id HAVING count ( * ) <= 3 ) ORDER BY class_id , math_score DESC","title":"MySQL"},{"location":"cs/db/mysql/#mysql","text":"","title":"MySQL"},{"location":"cs/db/mysql/#_1","text":"\u4e8b\u52a1\u662f\u6ee1\u8db3ACID\u7279\u6027\u7684\u4e00\u7ec4\u64cd\u4f5c\u3002 \u539f\u5b50\u6027 \uff08Atomicity\uff09\uff1a\u4e8b\u52a1\u65f6\u4e0d\u53ef\u5206\u5272\u7684\u6700\u5c0f\u5355\u5143\uff0c\u4e8b\u52a1\u5185\u7684\u8bed\u53e5\uff0c\u8981\u4e48\u5168\u90e8\u6267\u884c\u6210\u529f\uff0c\u8981\u4e48\u5168\u90e8\u6267\u884c\u5931\u8d25\u3002 \u4e00\u81f4\u6027 \uff08Consistency\uff09\uff1a\u6570\u636e\u5e93\u5728\u4e8b\u52a1\u6267\u884c\u524d\u540e\u90fd\u4fdd\u6301\u4e00\u81f4\u6027\u72b6\u6001\u3002\u5728\u4e00\u81f4\u6027\u72b6\u6001\u4e0b\uff0c\u6240\u6709\u4e8b\u52a1\u5bf9\u4e00\u4e2a\u6570\u636e\u7684\u8bfb\u5199\u7ed3\u679c\u90fd\u662f\u76f8\u540c\u7684\u3002 \u9694\u79bb\u6027 \uff08Isolation\uff09\uff1a\u4e00\u65e6\u4e8b\u52a1\u6240\u505a\u7684\u4fee\u6539\u5728\u6700\u7ec8\u63d0\u4ea4\u4ee5\u524d\uff0c\u5bf9\u5176\u4ed6\u4e8b\u52a1\u662f\u4e0d\u53ef\u89c1\u7684\u3002 \u6301\u4e45\u6027 \uff08Durability\uff09\uff1a\u4e00\u65e6\u4e8b\u52a1\u63d0\u4ea4\uff0c\u5219\u5176\u6240\u505a\u7684\u4fee\u6539\u5c06\u4f1a\u6c38\u8fdc\u4fdd\u5b58\u5728\u6570\u636e\u5e93\u4e2d\u3002 MYSQL\u9ed8\u8ba4\u91c7\u7528\u81ea\u52a8\u63d0\u4ea4\u6a21\u5f0f\u3002","title":"\u4e8b\u52a1"},{"location":"cs/db/mysql/#_2","text":"\u4e22\u5931\u4fee\u6539 \uff1aT1\u548cT2\u4e24\u4e2a\u4e8b\u52a1\u90fd\u5bf9\u4e00\u4e2a\u6570\u636e\u8fdb\u884c\u4fee\u6539\uff0cT1\u5148\u4fee\u6539\uff0cT2\u540e\u4fee\u6539\uff0c\u5219T2\u70b9\u4fee\u6539\u4f1a\u8986\u76d6T1. \u8bfb\u810f\u6570\u636e \uff1aT1\u4fee\u6539\u4e00\u4e2a\u6570\u636e\uff0cT2\u968f\u540e\u8bfb\u53d6\u8fd9\u4e2a\u6570\u636e\u3002\u5982\u679cT1\u64a4\u9500\u4e86\u8fd9\u6b21\u4fee\u6539\uff0c\u5219T2\u8bfb\u5230\u7684\u662f\u810f\u6570\u636e\u3002 \u4e0d\u53ef\u91cd\u590d\u8bfb \uff1aT2\u8bfb\u53d6\u4e00\u4e2a\u6570\u636e\uff0cT1\u5bf9\u8be5\u6570\u636e\u505a\u4e86\u4fee\u6539\uff0c\u6b64\u65f6T2\u518d\u6b21\u8bfb\u53d6\u8fd9\u4e2a\u6570\u636e\u4f1a\u548c\u7b2c\u4e00\u6b21\u8bfb\u53d6\u7684\u7ed3\u679c\u4e0d\u540c\u3002 \u5e7b\u5f71\u8bfb \uff1aT1\u8bfb\u53d6\u67d0\u4e2a\u8303\u56f4\u7684\u6570\u636e\uff0cT2\u5728\u8fd9\u4e2a\u8303\u56f4\u5185\u63d2\u5165\u4e86\u65b0\u7684\u6570\u636e\uff0cT1\u518d\u6b21\u8bfb\u53d6\u548c\u7b2c\u4e00\u6b21\u7684\u7ed3\u679c\u4e0d\u540c\u3002","title":"\u5e76\u53d1\u4e00\u81f4\u6027"},{"location":"cs/db/mysql/#bb","text":"B\u6811\u7684\u7279\u70b9 \u4e00\u4e2a\u8282\u70b9\u4e0a\u5305\u62ec\u81f3\u591a \\(m-1\\) \u4e2a\u503c \u6839\u8282\u70b9\u81f3\u5c11\u6709\u4e24\u4e2a\u5b69\u5b50 \u975e\u53f6\u5b50\u7ed3\u70b9\u5982\u679c\u5305\u542b\u4e86 \\(k\\) \u4e2a\u503c\uff0c\u5219\u5176\u5305\u542b\u4e86 \\(k+1\\) \u4e2a\u5b69\u5b50\u8282\u70b9 \u6240\u6709\u53f6\u5b50\u7ed3\u70b9\u90fd\u4f4d\u4e8e\u540c\u4e00\u5c42 B+\u6811\u7684\u7279\u70b9 \u6240\u6709\u7684\u975e\u53f6\u5b50\u7ed3\u70b9\u4e0d\u518d\u4fdd\u5b58\u503c\uff0c\u800c\u662f\u53ea\u4fdd\u5b58\u4e86\u4e2d\u95f4\u503c \u6240\u6709\u503c\u4fdd\u5b58\u5728\u53f6\u5b50\u7ed3\u70b9\u4e0a \u6240\u6709\u7684\u53f6\u5b50\u7ed3\u70b9\u901a\u5e38\u94fe\u8868\u6309\u7167\u987a\u5e8f\u8fdb\u884c\u8fde\u63a5 \u4e3a\u4ec0\u4e48\u6570\u636e\u5e93\u4f1a\u91c7\u7528B+\u6811\u800c\u4e0d\u662fB\u6811\u6d3b\u7740AVL\u6811 AVL\u7684\u7ed3\u70b9\u8bbf\u95ee\u6b21\u6570\u66f4\u591a\uff0c\u800c\u5bf9\u4e8e\u6570\u636e\u5e93\u800c\u8a00\uff0c\u6bcf\u4e2a\u8282\u70b9\u901a\u5e38\u88ab\u5b58\u50a8\u5728\u4e00\u4e2a\u6587\u4ef6\u4e2d\uff0c\u6240\u4ee5\u9700\u8981\u8bfb\u53d6\u7684\u6587\u4ef6\u6570\u91cf\u66f4\u591a\uff0c\u5bfc\u81f4\u6548\u7387\u4f4e \u5728\u6570\u636e\u5e93\u4e2d\u6709\u65f6\u9700\u8981\u8fdb\u884c\u8303\u56f4\u7684\u6240\u6709\uff0c\u6b64\u65f6B+\u6811\u7684\u94fe\u8868\u7ed3\u6784\u53ef\u4ee5\u5feb\u901f\u7684\u627e\u5230\u67d0\u4e2a\u7ed3\u70b9\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\u4f4d\u7f6e","title":"B\u6811\u548cB+\u6811"},{"location":"cs/db/mysql/#mysql_1","text":"\u7c7b\u578b \u5168\u5c40\u9501 \u8868\u7ea7\u9501 \u884c\u7ea7\u9501 \u8bfb\u5199\u9501 \u8bfb\u9501\uff1a\u53ef\u4ee5\u4e0e\u5176\u4ed6\u7684\u8bfb\u9501\u5171\u5b58\uff0c\u4f46\u662f\u4e0d\u53ef\u4ee5\u4e0e\u5199\u9501\u5171\u5b58 \u5199\u9501\uff1a\u4e0d\u53ef\u4ee5\u4e0e\u5176\u4ed6\u4efb\u4f55\u9501\u5171\u5b58 \u60b2\u89c2\u9501 \u666e\u901a\u7684\u9501\uff0c\u9501\u5b9a\u6b64\u884c/\u8868/\u6570\u636e\u5e93\u4ee5\u9632\u6b62\u5176\u4ed6\u64cd\u4f5c\u8fdb\u884c\u4fee\u6539\uff0c\u4f1a\u5bfc\u81f4\u5176\u4ed6\u4e8b\u52a1\u88ab\u963b\u585e \u4e50\u89c2\u9501 \u901a\u8fc7\u6bd4\u8f83\u7248\u672c\u53f7\u7684\u533a\u522b\u7684\u65b9\u6cd5\uff0c\u6765\u786e\u5b9a\u6b64\u6570\u636e\u662f\u5426\u7ecf\u8fc7\u4fee\u6539\uff0c\u5982\u679c\u4fee\u6539\u5219\u9700\u8981\u8bfb\u53d6\u6700\u65b0\u7684\u503c","title":"MySQL\u9501"},{"location":"cs/db/mysql/#_3","text":"\u9694\u79bb\u7ea7\u522b \u810f\u8bfb \u4e0d\u53ef\u91cd\u590d\u8bfb \u5e7b\u8bfb \u672a\u63d0\u4ea4\u8bfb \u53ef\u80fd \u53ef\u80fd \u53ef\u80fd \u5df2\u63d0\u4ea4\u8bfb \u4e0d\u53ef\u80fd \u53ef\u80fd \u53ef\u80fd \u53ef\u91cd\u590d\u8bfb \u4e0d\u53ef\u80fd \u4e0d\u53ef\u80fd \u53ef\u80fd \u53ef\u4e32\u884c\u5316 \u4e0d\u53ef\u80fd \u4e0d\u53ef\u80fd \u4e0d\u53ef\u80fd \u9694\u79bb\u7ea7\u522b\uff1a \u672a\u63d0\u4ea4\u8bfb\uff1a\u6700\u6734\u7d20\u7684\u6570\u636e\u5f62\u5f0f \u5df2\u63d0\u4ea4\u8bfb\uff1a\u5728\u4e8b\u52a1\u5b8c\u6210\u4e4b\u540e\u518d\u66f4\u65b0\u6570\u636e\u5e93\u7684\u503c \u53ef\u91cd\u590d\u8bfb\uff1a\u6bcf\u4e2a\u4e8b\u52a1\u5f00\u59cb\u524d\u9501\u5b9a\u6240\u66f4\u65b0\u7684\u884c \u53ef\u4e32\u884c\u5316\uff1a\u5355\u4e00\u7ebf\u7a0b\uff0c\u6240\u6709\u4e8b\u52a1\u5fc5\u987b\u6309\u7167\u987a\u5e8f\u8fdb\u884c3","title":"\u6570\u636e\u5e93\u9694\u79bb\u7ea7\u522b"},{"location":"cs/db/mysql/#innodbmyisam","text":"","title":"\u5b58\u50a8\u5f15\u64ce InnoDB\u548cMyISAM"},{"location":"cs/db/mysql/#innodb","text":"\u662fMySQL\u9ed8\u8ba4\u7684\u5b58\u50a8\u5f15\u64ce\u3002\u5b9e\u73b0\u4e86\u56db\u4e2a\u6807\u51c6\u7684\u9694\u79bb\u7ea7\u522b\u3002\u9ed8\u8ba4\u662f\u53ef\u91cd\u590d\u8bfb\uff0c\u901a\u8fc7MVCC\u548cNext-Key Locking\u9632\u6b62\u5e7b\u5f71\u8bfb\u3002\u652f\u6301\u771f\u6b63\u7684\u5728\u7ebf\u70ed\u5907\u4efd\uff0c\u5176\u4ed6\u5b58\u50a8\u5f15\u64ce\u4e0d\u652f\u6301\u5728\u7ebf\u70ed\u5907\u4efd\u3002 Record Locks \uff1a\u9501\u5b9a\u4e00\u4e2a\u8bb0\u5f55\u4e0a\u7684\u7d22\u5f15\uff0c\u800c\u4e0d\u662f\u8bb0\u5f55\u672c\u8eab\u3002 Gap Locks \uff1a\u9501\u5b9a\u7d22\u5f15\u4e4b\u95f4\u7684\u95f4\u9699\uff0c\u800c\u4e0d\u662f\u7d22\u5f15\u672c\u8eab\u3002 Next-Key Locks \uff1aInnoDB\u5b58\u50a8\u5f15\u64ce\u7684\u4e00\u79cd\u9501\u5b9e\u73b0\uff0c\u662fRecord Locks\u548cGap Locks\u7684\u7ed3\u5408\u3002\u4e0d\u4ec5\u4ec5\u9501\u5b9a\u7d22\u5f15\uff0c\u4e5f\u9501\u5b9a\u7d22\u5f15\u4e4b\u95f4\u7684\u95f4\u9699\u3002","title":"InnoDB"},{"location":"cs/db/mysql/#myisam","text":"\u8bbe\u8ba1\u7b80\u5355\uff0c\u6570\u636e\u4ee5\u7d27\u5bc6\u683c\u5f0f\u5b58\u50a8\u3002\u63d0\u4f9b\u4e86\u5927\u91cf\u7684\u7279\u6027\uff0c\u5305\u62ec\u538b\u7f29\u8868\u3001\u7a7a\u95f4\u6570\u636e\u7d22\u5f15\u7b49\u3002\u4e0d\u652f\u6301\u4e8b\u52a1\uff0c\u4e0d\u652f\u6301\u884c\u7ea7\u9501\uff0c\u53ea\u652f\u6301\u8868\u7ea7\u9501\uff0c\u53ef\u4ee5\u624b\u5de5\u6216\u8005\u81ea\u52a8\u6267\u884c\u68c0\u67e5\u548c\u4fee\u590d\u64cd\u4f5c\uff0c\u4f46\u53ef\u80fd\u5bfc\u81f4\u4e00\u4e9b\u6570\u636e\u4e22\u5931\uff0c\u800c\u4e14\u4fee\u590d\u64cd\u4f5c\u975e\u5e38\u6162\u3002","title":"MyISAM"},{"location":"cs/db/mysql/#mvcc","text":"\u591a\u7248\u672c\u5e76\u53d1\u63a7\u5236\uff08Multi-Version Concurrency Control, MVCC\uff09\u662f MySQL \u7684 InnoDB \u5b58\u50a8\u5f15\u64ce\u5b9e\u73b0\u9694\u79bb\u7ea7\u522b\u7684\u4e00\u79cd\u5177\u4f53\u65b9\u5f0f\uff0c\u7528\u4e8e\u5b9e\u73b0\u63d0\u4ea4\u8bfb\u548c\u53ef\u91cd\u590d\u8bfb\u8fd9\u4e24\u79cd\u9694\u79bb\u7ea7\u522b\u3002\u800c\u672a\u63d0\u4ea4\u8bfb\u9694\u79bb\u7ea7\u522b\u603b\u662f\u8bfb\u53d6\u6700\u65b0\u7684\u6570\u636e\u884c\uff0c\u8981\u6c42\u5f88\u4f4e\uff0c\u65e0\u9700\u4f7f\u7528 MVCC\u3002\u53ef\u4e32\u884c\u5316\u9694\u79bb\u7ea7\u522b\u9700\u8981\u5bf9\u6240\u6709\u8bfb\u53d6\u7684\u884c\u90fd\u52a0\u9501\uff0c\u5355\u7eaf\u4f7f\u7528 MVCC \u65e0\u6cd5\u5b9e\u73b0\u3002 InnoDB\u7684MVCC\uff0c\u662f\u901a\u8fc7\u5728\u6bcf\u884c\u8bb0\u5f55\u540e\u9762\u4fdd\u5b58\u4e24\u4e2a\u9690\u85cf\u7684\u5217\u6765\u5b9e\u73b0\u7684\u3002\u8fd9\u4e24\u4e2a\u5217\uff0c\u4e00\u4e2a\u4fdd\u5b58\u4e86\u884c\u7684\u521b\u5efa\u65f6\u95f4\uff0c\u4e00\u4e2a\u4fdd\u5b58\u4e86\u884c\u7684\u8fc7\u671f\u65f6\u95f4\u3002\u5b58\u50a8\u7684\u4e0d\u662f\u5b9e\u9645\u7684\u65f6\u95f4\u503c\uff0c\u800c\u662f\u7cfb\u7edf\u7684\u7248\u672c\u53f7\u3002MVCC\u53ea\u8981\u53ef\u91cd\u590d\u8bfb\u548c\u63d0\u4ea4\u8bfb\u4e24\u4e2a\u9694\u79bb\u7ea7\u522b\u4e0b\u5de5\u4f5c\u3002 \u5728\u53ef\u91cd\u590d\u8bfb\u7684\u9694\u79bb\u7ea7\u522b\u4e0b\uff0cMVCC\u7684\u64cd\u4f5c\uff1a - SELECT 1. InnoDB\u53ea\u67e5\u627e\u7248\u672c\u65e9\u4e8e\u5f53\u524d\u4e8b\u52a1\u7248\u672c\u7684\u6570\u636e\u884c\uff0c\u8fd9\u6837\u53ef\u4ee5\u786e\u4fdd\u4e8b\u52a1\u8bfb\u53d6\u7684\u884c\uff0c\u8981\u4e48\u662f\u4e8b\u52a1\u5f00\u542f\u524d\u5df2\u7ecf\u5b58\u5728\u7684\uff0c\u8981\u4e48\u662f\u4e8b\u52a1\u81ea\u8eab\u63d2\u5165\u6216\u8005\u4fee\u6539\u8fc7\u7684\u3002 2. \u884c\u7684\u5220\u9664\u7248\u672c\u53f7\u8981\u4e48\u672a\u5b9a\u4e49\uff0c\u8981\u4e48\u5927\u4e8e\u5f53\u524d\u4e8b\u52a1\u7684\u7248\u672c\u53f7\uff0c\u8fd9\u53ef\u4ee5\u4fdd\u8bc1\u4e8b\u52a1\u8bfb\u53d6\u5230\u7684\u884c\uff0c\u5728\u4e8b\u52a1\u5f00\u59cb\u524d\u672a\u88ab\u5220\u9664\u3002 - INSERT 1. \u4e3a\u63d2\u5165\u7684\u6bcf\u4e00\u884c\u4fdd\u5b58\u5f53\u524d\u7cfb\u7edf\u7248\u672c\u53f7\u4f5c\u4e3a\u884c\u7248\u672c\u53f7\u3002 - DELETE 1. \u4e3a\u5220\u9664\u7684\u6bcf\u4e00\u884c\u4fdd\u5b58\u5f53\u524d\u7cfb\u7edf\u7248\u672c\u53f7\u4e3a\u5220\u9664\u7248\u672c\u53f7\u3002 - UPDATE 1. \u4fee\u6539\u540e\u7684\u6570\u636e\u884c\u4fdd\u5b58\u5f53\u524d\u7cfb\u7edf\u7248\u672c\u53f7\u4e3a\u521b\u5efa\u7248\u672c\u53f7\uff0c\u540c\u65f6\u4fdd\u5b58\u5f53\u524d\u7cfb\u7edf\u7248\u672c\u53f7\u4f5c\u4e3a\u539f\u6765\u7684\u884c\u7684\u5220\u9664\u7248\u672c\u53f7\u3002","title":"\u591a\u7248\u672c\u5e76\u53d1\u63a7\u5236\uff08MVCC\uff09"},{"location":"cs/db/mysql/#_4","text":"\u7b2c\u4e00\u8303\u5f0f\uff1a\u5c5e\u6027\u4e0d\u53ef\u5206 \u7b2c\u4e8c\u8303\u5f0f\uff1a\u6bcf\u4e2a\u975e\u4e3b\u5c5e\u6027\u5b8c\u5168\u51fd\u6570\u4f9d\u8d56\u4e8e\u952e\u7801 \u7b2c\u4e09\u8303\u5f0f\uff1a\u975e\u4e3b\u5c5e\u6027\u4e0d\u4f20\u9012\u51fd\u6570\u4f9d\u8d56\u4e8e\u952e\u7801 \u8303\u5f0f\u5316\u7684\u597d\u5904\uff1a \u8303\u5f0f\u5316\u7684\u66f4\u65b0\u64cd\u4f5c\u901a\u5e38\u6bd4\u53cd\u8303\u5f0f\u5316\u8981\u5feb \u5f53\u6570\u636e\u8f83\u597d\u5730\u8303\u5f0f\u5316\u65f6\uff0c\u5c31\u53ea\u6709\u5f88\u5c11\u6216\u8005\u6ca1\u6709\u91cd\u590d\u6570\u636e\uff0c\u6240\u4ee5\u53ea\u9700\u8981\u4fee\u6539\u66f4\u5c11\u7684\u6570\u636e\u3002 \u8303\u5f0f\u5316\u7684\u8868\u901a\u5e38\u66f4\u5c0f\uff0c\u53ef\u4ee5\u66f4\u597d\u5730\u653e\u5728\u5185\u5b58\u91cc\uff0c\u6240\u4ee5\u6267\u884c\u64cd\u4f5c\u4f1a\u66f4\u5feb\u3002 \u8303\u5f0f\u5316\u7684\u7f3a\u70b9\uff1a\u901a\u5e38\u9700\u8981\u5173\u8054\uff0c\u4ee3\u4ef7\u6602\u8d35\uff0c\u4e5f\u53ef\u80fd\u4f7f\u4e00\u4e9b\u7d22\u5f15\u7b56\u7565\u65e0\u6548\u3002","title":"\u8303\u5f0f"},{"location":"cs/db/mysql/#_5","text":"\u67e5\u8be2\u6027\u80fd\u4f4e\u4e0b\u7684\u6700\u57fa\u672c\u7684\u539f\u56e0\u662f\u8bbf\u95ee\u7684\u6570\u636e\u592a\u591a\u3002 \u662f\u5426\u5411\u6570\u636e\u5e93\u8bf7\u6c42\u4e86\u4e0d\u9700\u8981\u7684\u6570\u636e \u53ea\u8fd4\u56de\u5fc5\u8981\u7684\u5217\uff0c\u6700\u597d\u4e0d\u8981\u7528 select * \u8fdb\u884c\u67e5\u8be2 \u53ea\u8fd4\u56de\u5fc5\u8981\u7684\u884c\uff0c\u4f7f\u7528limit\u6765\u9650\u5236\u8fd4\u56de\u7684\u6570\u636e \u7f13\u5b58\u91cd\u590d\u67e5\u8be2\u7684\u6570\u636e \u662f\u5426\u5728\u626b\u63cf\u989d\u5916\u7684\u8bb0\u5f55 \u4f7f\u7528\u7d22\u5f15\u8986\u76d6\u626b\u63cf\uff0c\u628a\u6240\u6709\u9700\u8981\u7528\u5230\u7684\u5217\u90fd\u653e\u5728\u7d22\u5f15\u4e2d\uff0c \u8fd9\u6837\u5b58\u50a8\u5f15\u64ce\u65e0\u9700\u56de\u8868\u83b7\u53d6\u5bf9\u5e94\u884c\u5c31\u53ef\u4ee5\u8fd4\u56de\u7ed3\u679c \u6539\u53d8\u5e93\u8868\u7ed3\u6784 \u91cd\u6784\u67e5\u8be2\u65b9\u5f0f \u91cd\u6784\u67e5\u8be2\u65b9\u5f0f \u5207\u5206\u5927\u67e5\u8be2 \u5206\u89e3\u5927\u8fde\u63a5\u67e5\u8be2","title":"\u67e5\u8be2\u4f18\u5316"},{"location":"cs/db/mysql/#_6","text":"","title":"\u4e3b\u4ece\u590d\u5236"},{"location":"cs/db/mysql/#_7","text":"MySQL\u4e3b\u4ece\u590d\u5236\u662f\u6307\u6570\u636e\u53ef\u4ee5\u4ece\u4e00\u4e2aMySQL\u6570\u636e\u5e93\u670d\u52a1\u5668\u4e3b\u8282\u70b9\u590d\u5236\u5230\u4e00\u4e2a\u6216\u591a\u4e2a\u4ece\u8282\u70b9\u3002MySQL\u9ed8\u8ba4\u91c7\u7528\u5f02\u6b65\u590d\u5236\u65b9\u5f0f\uff0c\u8fd9\u6837\u4ece\u8282\u70b9\u4e0d\u7528\u4e00\u76f4\u8bbf\u95ee\u4e3b\u670d\u52a1\u5668\u6765\u66f4\u65b0\u81ea\u5df1\u7684\u6570\u636e\uff0c\u6570\u636e\u7684\u66f4\u65b0\u53ef\u4ee5\u5728\u8fdc\u7a0b\u8fde\u63a5\u4e0a\u8fdb\u884c\uff0c\u4ece\u8282\u70b9\u53ef\u4ee5\u590d\u5236\u4e3b\u6570\u636e\u5e93\u4e2d\u7684\u6240\u6709\u6570\u636e\u5e93\u6216\u8005\u7279\u5b9a\u7684\u6570\u636e\u5e93\uff0c\u6216\u8005\u7279\u5b9a\u7684\u8868\u3002","title":"\u6982\u5ff5"},{"location":"cs/db/mysql/#_8","text":"\u6570\u636e\u5206\u5e03 \u8d1f\u8f7d\u5747\u8861 \u6570\u636e\u5907\u4efd\uff0c\u4fdd\u8bc1\u6570\u636e\u5b89\u5168 \u9ad8\u53ef\u7528\u6027\u548c\u5bb9\u9519\u884c \u5b9e\u73b0\u8bfb\u5199\u5206\u79bb\uff0c\u7f13\u89e3\u6570\u636e\u5e93\u538b\u529b \u7531\u4e8emysql\u5b9e\u73b0\u7684\u5f02\u6b65\u590d\u5236\uff0c\u6240\u4ee5\u4e3b\u5e93\u548c\u4ece\u5e93\u4e4b\u95f4\u5b58\u5728\u4e00\u5b9a\u7684\u5dee\u5f02\uff0c\u5728\u4ece\u5e93\u6267\u884c\u67e5\u8be2\u64cd\u4f5c\u9700\u8981\u8003\u8651\u8fd9\u4e9b\u6570\u636e\u7684\u5dee\u5f02\uff0c\u4e00\u822c\u53ea\u6709\u66f4\u65b0\u4e0d\u9891\u7e41\u548c\u5bf9\u5b9e\u65f6\u6027\u8981\u6c42\u4e0d\u9ad8\u7684\u6570\u636e\u53ef\u4ee5\u901a\u8fc7\u4ece\u5e93\u67e5\u8be2\uff0c\u5b9e\u884c\u8981\u6c42\u9ad8\u7684\u4ecd\u7136\u8981\u4ece\u4e3b\u5e93\u67e5\u8be2\u3002","title":"\u4f5c\u7528"},{"location":"cs/db/mysql/#_9","text":"MySQL\u4e3b\u4ece\u590d\u5236\u6d89\u53ca\u5230\u4e09\u4e2a\u7ebf\u7a0b\uff0c\u4e00\u4e2a\u8fd0\u884c\u5728 \u4e3b\u8282\u70b9\uff08log dump thread\uff09 \uff0c\u5176\u4f59\u4e24\u4e2a\uff08 I/O thread\uff0c SQL thread \uff09\u8fd0\u884c\u5728\u4ece\u8282\u70b9\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a binlog \u7ebf\u7a0b \uff1a\u8d1f\u8d23\u5c06\u4e3b\u670d\u52a1\u5668\u4e0a\u7684\u6570\u636e\u66f4\u6539\u5199\u5165\u4e8c\u8fdb\u5236\u65e5\u5fd7\uff08Binary log\uff09\u4e2d\u3002 I/O \u7ebf\u7a0b \uff1a\u8d1f\u8d23\u4ece\u4e3b\u670d\u52a1\u5668\u4e0a\u8bfb\u53d6\u4e8c\u8fdb\u5236\u65e5\u5fd7\uff0c\u5e76\u5199\u5165\u4ece\u670d\u52a1\u5668\u7684\u4e2d\u7ee7\u65e5\u5fd7\uff08Relay log\uff09\u3002 SQL \u7ebf\u7a0b \uff1a\u8d1f\u8d23\u8bfb\u53d6\u4e2d\u7ee7\u65e5\u5fd7\uff0c\u89e3\u6790\u51fa\u4e3b\u670d\u52a1\u5668\u5df2\u7ecf\u6267\u884c\u7684\u6570\u636e\u66f4\u6539\u5e76\u5728\u4ece\u670d\u52a1\u5668\u4e2d\u91cd\u653e\uff08Replay\uff09\u3002","title":"\u539f\u7406"},{"location":"cs/db/mysql/#_10","text":"\u4e3a\u4ec0\u4e48\u4f7f\u7528\u8fde\u63a5\u6c60 \u4e0eJava\u7684\u7ebf\u7a0b\u6c60\u76f8\u540c\uff0c\u4e3a\u4e86\u8282\u7ea6\u7cfb\u7edf\u8d44\u6e90 \u5e38\u7528\u7684\u8fde\u63a5\u6c60 DBCP\uff1a\u4f7f\u7528\u91cf\u6700\u5927\u7684\u8fde\u63a5\u6c60 C3P0","title":"\u8fde\u63a5\u6c60"},{"location":"cs/db/mysql/#_11","text":"\u6c34\u5e73\u5206\u8868 \u5c06\u4e00\u4e2a\u8868\u7684\u8bb0\u5f55\u5206\u5272\u5230\u6570\u4e2a\u8868\u4e2d\uff0c\u53ef\u4ee5\u51cf\u5c11\u7d22\u5f15\u7684\u5927\u5c0f\uff0c\u52a0\u5feb\u7d22\u5f15 \u5782\u76f4\u5206\u8868 \u5c06\u90e8\u5206\u5b57\u6bb5\u5212\u5206\u81f3\u5176\u4ed6\u7684\u8868\uff0c\u90e8\u5206\u5b57\u6bb5\u6570\u636e\u91cf\u5927\uff0c\u8fdb\u884c\u7d22\u5f15\u65f6\u4f1a\u5e26\u6765\u5927\u91cf\u7684IO\u8d1f\u62c5\uff0c\u8fdb\u884c\u5206\u8868\u6709\u5229\u4e8e\u67e5\u8be2\u6548\u7387","title":"\u5206\u8868"},{"location":"cs/db/mysql/#sql","text":"\u4e00\u6761SQL\u8bed\u53e5\u7684\u6267\u884c\u8fc7\u7a0b\uff1a 1. \u8fde\u63a5\u5668\u67e5\u770b\u5f53\u524d\u7528\u6237\u6743\u9650\uff0c\u82e5\u62e5\u6709\u6743\u9650\uff0c\u5efa\u7acb\u8fde\u63a5\u3002\u5982\u679c\u5ba2\u6237\u7aef\u592a\u957f\u65f6\u95f4\u6ca1\u6709\u52a8\u9759\uff0c\u8fde\u63a5\u5668\u4f1a\u81ea\u52a8\u65ad\u5f00\u8fde\u63a5 2. \u5206\u6790\u5668\u5206\u6790SQL\u8bed\u53e5\uff0c\u5305\u62ec\u8bed\u6cd5\u5206\u6790\uff08\u8bed\u6cd5\u662f\u5426\u6b63\u786e\uff09\uff0c\u8bcd\u6cd5\u5206\u6790\uff08\u8bc6\u522bSQL\u8bed\u53e5\uff09\u3002 3. \u4f18\u5316\u5668\u4f18\u5316\u67e5\u8be2\uff0c\u51b3\u5b9a\u4f7f\u7528\u7684\u7d22\u5f15\u7b49\u3002 4. \u6267\u884c\u5668\u6765\u65f6\u6267\u884c\u8bed\u53e5\u3002","title":"SQL"},{"location":"cs/db/mysql/#_12","text":"","title":"\u8bf4\u4e00\u4e0b\u7d22\u5f15\uff1f"},{"location":"cs/db/mysql/#_13","text":"\u7d22\u5f15\u662f\u4e00\u79cd\u7279\u6b8a\u7684\u6587\u4ef6\uff08InnoDB\u6570\u636e\u8868\u4e0a\u7684\u7d22\u5f15\u662f\u8868\u7a7a\u95f4\u7684\u4e00\u4e2a\u7ec4\u6210\u90e8\u5206\uff09\uff0c\u4ed6\u4eec\u5305\u542b\u7740\u5bf9\u6570\u636e\u8868\u91cc\u6240\u6709\u8bb0\u5f55\u7684\u5f15\u7528\u6307\u9488\u3002 \u7d22\u5f15\u662f\u4e00\u79cd\u6570\u636e\u7ed3\u6784\u3002\u6570\u636e\u5e93\u7d22\u5f15\uff0c\u662f\u6570\u636e\u5e93\u7ba1\u7406\u7cfb\u7edf\u4e2d\u7684\u4e00\u4e2a\u6392\u5e8f\u7684\u6570\u636e\u7ed3\u6784\uff0c\u4e3a\u4e86\u534f\u52a9\u5feb\u901f\u67e5\u8be2\u3001\u66f4\u65b0\u6570\u636e\u8868\u4e2d\u6570\u636e\u3002\u7d22\u5f15\u7684\u5b9e\u73b0\u901a\u5e38\u4f7f\u7528B\u6811\u4ee5\u53ca\u53d8\u79cdB+\u6811\u3002","title":"\u4ec0\u4e48\u662f\u7d22\u5f15"},{"location":"cs/db/mysql/#_14","text":"\u65f6\u95f4\u65b9\u9762\uff1a\u521b\u5efa\u7d22\u5f15\u548c\u7ef4\u62a4\u7d22\u5f15\u8981\u8017\u8d39\u65f6\u95f4\uff0c\u5177\u4f53\u7684\uff0c\u5f53\u5bf9\u8868\u4e2d\u7684\u6570\u636e\u8fdb\u884c\u589e\u52a0\u3001\u5220\u9664\u548c\u4fee\u6539\u7684\u65f6\u5019\uff0c\u7d22\u5f15\u4e5f\u8981\u52a8\u6001\u7684\u7ef4\u62a4\uff0c\u4f1a\u8f83\u4f4e\u589e\u6539\u5220\u7684\u6267\u884c\u6548\u7387\u3002 \u7a7a\u95f4\u65b9\u9762\uff1a\u7d22\u5f15\u9700\u8981\u5360\u7528\u7269\u7406\u7a7a\u95f4\u3002","title":"\u7d22\u5f15\u7684\u7f3a\u70b9"},{"location":"cs/db/mysql/#_15","text":"\u7269\u7406\u5b58\u50a8\u89d2\u5ea6\uff1a \u805a\u7c07\u7d22\u5f15\uff1a\u4ee5\u4e3b\u952e\u4f5c\u4e3aB+\u6811\u7d22\u5f15\u7684\u952e\u503c\u800c\u6784\u5efa\u7684B+\u6811\u7d22\u5f15 \u975e\u805a\u7c07\u7d22\u5f15\uff1a\u4ee5\u4e3b\u952e\u4e4b\u5916\u7684\u5217\u503c\u4f5c\u4e3a\u952e\u503c\u6784\u5efa\u7684B+\u6811\u7d22\u5f15 \u6570\u636e\u7ed3\u6784\u89d2\u5ea6\uff1a B+\u6811\u7d22\u5f15 hash\u7d22\u5f15 FULLTEXT\u7d22\u5f15 R-Tree\u7d22\u5f15 \u903b\u8f91\u89d2\u5ea6\uff1a \u4e3b\u952e\u7d22\u5f15\uff1a\u6570\u636e\u5217\u4e0d\u5141\u8bb8\u91cd\u590d\uff0c\u4e0d\u5141\u8bb8\u4e3a NULL \uff0c\u4e00\u4e2a\u8868\u4e2d\u53ea\u80fd\u6709\u4e00\u4e2a\u4e3b\u952e \u666e\u901a/\u5355\u5217\u7d22\u5f15\uff1a\u57fa\u672c\u7684\u7d22\u5f15\u7c7b\u578b\uff0c\u6ca1\u6709\u552f\u4e00\u6027\u7684\u6027\u8d28\uff0c\u5141\u8bb8\u4e3a NULL \u591a\u5217/\u8054\u5408/\u590d\u5408\u7d22\u5f15\uff1a\u4ee5\u4e00\u5b9a\u987a\u5e8f\u5f15\u7528\u591a\u5217 \u552f\u4e00\u7d22\u5f15\uff1a\u6570\u636e\u5217\u4e0d\u5141\u8bb8\u91cd\u590d\uff0c\u5141\u8bb8\u4e3a NULL \uff0c\u4e00\u4e2a\u8868\u4e2d\u5141\u8bb8\u591a\u4e2a\u5217\u521b\u5efa\u552f\u4e00\u7d22\u5f15 \u5168\u6587\u7d22\u5f15\uff1a\u76ee\u524d\u641c\u7d22\u5f15\u64ce\u4f7f\u7528\u7684\u4e00\u79cd\u5173\u952e\u6280\u672f \u7a7a\u95f4\u7d22\u5f15\uff1a\u5bf9\u7a7a\u95f4\u6570\u636e\u7c7b\u578b\u7684\u5b57\u6bb5\u5efa\u7acb\u7684\u7d22\u5f15","title":"\u7d22\u5f15\u7684\u4e3b\u8981\u7c7b\u578b"},{"location":"cs/db/mysql/#_16","text":"\u4e3b\u8981\u9488\u5bf9\u8054\u5408\u7d22\u5f15\uff0c\u5982\u679c\u67e5\u8be2\u7684\u65f6\u5019\u67e5\u8be2\u6761\u4ef6\u7cbe\u786e\u5339\u914d\u7d22\u5f15\u7684\u5de6\u8fb9\u8fde\u7eed\u4e00\u5217\u6216\u591a\u5217\uff0c\u5219\u6b64\u5217\u5c31\u53ef\u4ee5\u88ab\u7528\u5230\u3002","title":"\u6700\u5de6\u524d\u7f00\u5339\u914d\u539f\u5219"},{"location":"cs/db/mysql/#redis","text":"\u7f13\u5b58\u3001\u8ba1\u6570\u5668\u3001\u961f\u5217\u3001\u4f4d\u64cd\u4f5c\u3001\u6700\u65b0\u5217\u8868\u3002","title":"redis\u5e94\u7528\u573a\u666f\uff1f"},{"location":"cs/db/mysql/#_17","text":"\u975e\u805a\u7c07\u7d22\u5f15\u548c\u805a\u7c07\u7d22\u5f15\u7684\u533a\u522b\u5728\u4e8e\u975e\u805a\u7c07\u7d22\u5f15\u7684\u53f6\u5b50\u8282\u70b9\u4e0d\u5b58\u50a8\u8868\u4e2d\u7684\u6570\u636e\uff0c\u800c\u662f\u5b58\u50a8\u8be5\u5217\u5bf9\u5e94\u7684\u4e3b\u952e\uff0c\u60f3\u8981\u67e5\u627e\u6570\u636e\u6211\u4eec\u8fd8\u9700\u8981\u6839\u636e\u4e3b\u952e\u518d\u53bb\u805a\u7c07\u7d22\u5f15\u4e2d\u8fdb\u884c\u67e5\u627e\uff0c\u8fd9\u4e2a\u518d\u6839\u636e\u805a\u7c07\u7d22\u5f15\u67e5\u627e\u6570\u636e\u7684\u8fc7\u7a0b\uff0c\u88ab\u79f0\u4e3a\u56de\u8868\u3002","title":"\u8bf4\u4e00\u4e0b\u56de\u8868\u64cd\u4f5c\uff1f"},{"location":"cs/db/mysql/#_18","text":"\u5982\u4f55\u907f\u514d\uff1a\u5c06\u88ab\u67e5\u8be2\u7684\u5b57\u6bb5\uff0c\u5efa\u7acb\u5230\u8054\u5408\u7d22\u5f15\u4e2d\u3002\u5c3d\u91cf\u4f7f\u7528\u5230\u7d22\u5f15\u8986\u76d6\uff0c\u4e0d\u5e94\u8be5\u4f7f\u7528 * \u6765\u5168\u8868\u67e5\u8be2\u3002 \u7d22\u5f15\u8986\u76d6\u662f\u6307\u4ece\u7d22\u5f15\u4e2d\u5c31\u53ef\u4ee5\u5f97\u5230\u67e5\u8be2\u7ed3\u679c\uff0c\u4ece\u800c\u4e0d\u9700\u8981\u67e5\u8be2\u805a\u7c07\u7d22\u5f15\u4e2d\u7684\u884c\u6570\u636e\u4fe1\u606f\u3002 \u9700\u8981\u8bf4\u660e\u7684\u662f\uff0c\u8986\u76d6\u7d22\u5f15\u5fc5\u987b\u8981\u5b58\u50a8\u7d22\u5f15\u5217\u7684\u503c\uff0c\u800c\u54c8\u5e0c\u7d22\u5f15\u3001\u7a7a\u95f4\u7d22\u5f15\u548c\u5168\u6587\u7d22\u5f15\u4e0d\u5b58\u50a8\u7d22\u5f15\u5217\u7684\u503c\uff0c\u6240\u4ee5mysql\u53ea\u80fd\u7528B+tree\u7d22\u5f15\u505a\u8986\u76d6\u7d22\u5f15\u3002","title":"\u5982\u4f55\u907f\u514d\u56de\u8868\u67e5\u8be2?\u4ec0\u4e48\u662f\u7d22\u5f15\u8986\u76d6?"},{"location":"cs/db/mysql/#_19","text":"\u5728MySQL\u4e2d\uff0c\u5e38\u89c1\u7684\u8868\u8fde\u63a5\u65b9\u5f0f\u67094\u7c7b\uff0c\u51717\u79cd\u65b9\u5f0f\uff1a - INNER JOIN \uff1ainner join\u662f\u6839\u636e\u8868\u8fde\u63a5\u6761\u4ef6\uff0c\u6c42\u53d6\u4e24\u4e2a\u8868\u7684\u6570\u636e\u4ea4\u96c6\uff1b - LEFT JOIN \uff1aleft join\u662f\u6839\u636e\u8868\u8fde\u63a5\u6761\u4ef6\uff0c\u6c42\u53d6\u4e24\u4e2a\u8868\u7684\u6570\u636e\u4ea4\u96c6\u518d\u52a0\u4e0a\u5de6\u8868\u5269\u4e0b\u7684\u6570\u636e\uff0c\u6b64\u5916\uff0c\u8fd8\u53ef\u4ee5\u7528where\u8fc7\u6ee4\u6761\u4ef6 - RIGHT JOIN \uff1aright join\u662f\u6839\u636e\u8868\u8fde\u63a5\u6761\u4ef6\uff0c\u6c42\u53d6\u4e24\u4e2a\u8868\u7684\u6570\u636e\u4ea4\u96c6\u518d\u52a0\u4e0a\u53f3\u8868\u5269\u4e0b\u7684\u6570\u636e\uff0c\u6b64\u5916\uff0c\u8fd8\u53ef\u4ee5\u4f7f\u7528where\u8fc7\u6ee4\u6761\u4ef6 - FULL JOIN \uff1afull join\u662f\u5de6\u8fde\u63a5\u548c\u53f3\u8fde\u63a5\u7684\u5e76\u96c6\uff0cMySQL\u5e76\u672a\u63d0\u4f9bfull join\u7684\u8bed\u6cd5\uff0c\u5982\u679c\u8981\u5b9e\u73b0\uff0c\u9700\u8981left join\u4e8eright join\u8fdb\u884c\u6c42\u5e76\u96c6\uff0c\u8fd8\u6709\u7528where\u8fc7\u6ee4","title":"\u8bf4\u4e00\u4e0b\u8868\u8fde\u63a5\u7684\u64cd\u4f5c\uff1f"},{"location":"cs/db/mysql/#_20","text":"\u6761\u4ef6\u4e2d\u6709 or like \u67e5\u8be2\uff08\u4ee5 % \u5f00\u5934\uff09 \u5982\u679c\u5217\u7c7b\u578b\u662f\u5b57\u7b26\u4e32\uff0c\u90a3\u4e00\u5b9a\u8981\u5728\u6761\u4ef6\u4e2d\u5c06\u6570\u636e\u4f7f\u7528\u5f15\u53f7\u5f15\u7528\u8d77\u6765\uff0c\u5426\u5219\u4e0d\u4f7f\u7528\u7d22\u5f15 \u5bf9\u5217\u8fdb\u884c\u51fd\u6570\u8fd0\u7b97 \u8d1f\u5411\u67e5\u8be2\u6761\u4ef6\u4f1a\u5bfc\u81f4\u65e0\u6cd5\u4f7f\u7528\u7d22\u5f15\uff0c\u6bd4\u5982 NOT IN \uff0c NOT LIKE \uff0c != \u7b49 \u5bf9\u4e8e\u8054\u5408\u7d22\u5f15\uff0c\u4e0d\u662f\u4f7f\u7528\u7b2c\u4e00\u90e8\u5206\uff08\u7b2c\u4e00\u4e2a\uff09\uff0c\u5219\u4e0d\u4f1a\u4f7f\u7528\u7d22\u5f15\uff08\u6700\u5de6\u5339\u914d\uff09 \u5982\u679cmysql\u8bc4\u4f30\u4f7f\u7528\u5168\u8868\u626b\u63cf\u8981\u6bd4\u4f7f\u7528\u7d22\u5f15\u5757\uff0c\u5219\u4e0d\u4f7f\u7528\u7d22\u5f15","title":"\u7d22\u5f15\u4ec0\u4e48\u65f6\u5019\u4f1a\u5931\u6548\uff1f"},{"location":"cs/db/mysql/#sql_1","text":"\u4f7f\u7528\u89e3\u91ca\u51fd\u6570 explain \uff0c\u53ea\u9700\u6dfb\u52a0\u5728sql\u8bed\u53e5\u4e4b\u524d\u5373\u53ef\uff1a \u6211\u4eec\u53ea\u9700\u8981\u6ce8\u610f\u4e00\u4e2a\u6700\u91cd\u8981\u7684type \u7684\u4fe1\u606f\u5f88\u660e\u663e\u7684\u63d0\u73b0\u662f\u5426\u7528\u5230\u7d22\u5f15\uff1a type\u7ed3\u679c\u503c\u4ece\u597d\u5230\u574f\u4f9d\u6b21\u662f\uff1a system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL \u4e00\u822c\u6765\u8bf4\uff0c\u5f97\u4fdd\u8bc1\u67e5\u8be2\u81f3\u5c11\u8fbe\u5230range\u7ea7\u522b\uff0c\u6700\u597d\u80fd\u8fbe\u5230ref\uff0c\u5426\u5219\u5c31\u53ef\u80fd\u4f1a\u51fa\u73b0\u6027\u80fd\u95ee\u9898\u3002 possible_keys \uff1asql\u6240\u7528\u5230\u7684\u7d22\u5f15 key \uff1a\u663e\u793aMySQL\u5b9e\u9645\u51b3\u5b9a\u4f7f\u7528\u7684\u952e\uff08\u7d22\u5f15\uff09\u3002\u5982\u679c\u6ca1\u6709\u9009\u62e9\u7d22\u5f15\uff0c\u952e\u662fNULL rows : \u663e\u793aMySQL\u8ba4\u4e3a\u5b83\u6267\u884c\u67e5\u8be2\u65f6\u5fc5\u987b\u68c0\u67e5\u7684\u884c\u6570\u3002","title":"\u5224\u65adsql\u662f\u5426\u4f7f\u7528\u7d22\u5f15"},{"location":"cs/db/mysql/#_21","text":"","title":"\u8bf4\u4e00\u4e0b\u9501\uff1f\u8bf4\u4e00\u4e0b\u533a\u522b\uff1f"},{"location":"cs/db/mysql/#redis_1","text":"","title":"Redis\u7f13\u5b58\u66f4\u65b0\u7b56\u7565"},{"location":"cs/db/mysql/#_22","text":"\u9ad8\u5e76\u53d1\uff08High Concurrency\uff09\u662f\u6307\u7cfb\u7edf\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u7684\u4e00\u79cd\u201c\u77ed\u65f6\u95f4\u5185\u9047\u5230\u5927\u91cf\u64cd\u4f5c\u8bf7\u6c42\u201d\u7684\u60c5\u51b5\uff0c\u4e3b\u8981\u53d1\u751f\u5728web\u7cfb\u7edf\u96c6\u4e2d\u5927\u91cf\u8bbf\u95ee\u6536\u5230\u5927\u91cf\u8bf7\u6c42\uff0c\u4f8b\u5982\u6dd8\u5b9d\u53cc\u5341\u4e00\u3001\u4eac\u4e1c618\u7c7b\u7684\u6d3b\u52a8\u3002\u8be5\u60c5\u51b5\u7684\u53d1\u751f\u4f1a\u5bfc\u81f4\u7cfb\u7edf\u5728\u8fd9\u6bb5\u65f6\u95f4\u5185\u6267\u884c\u5927\u91cf\u64cd\u4f5c\uff08\u5bf9\u8d44\u6e90\u7684\u8bf7\u6c42\u3001\u6570\u636e\u5e93\u7684\u64cd\u4f5c\u7b49\uff09\u3002 \u9ad8\u5e76\u53d1\u76f8\u5173\u5e38\u7528\u7684\u4e00\u4e9b\u6307\u6807\u6709\uff1a\u54cd\u5e94\u65f6\u95f4\u3001\u541e\u5410\u91cf\u3001\u6bcf\u79d2\u67e5\u8be2\u7387QPS\u3001\u5e76\u53d1\u7528\u6237\u6570\u3002 \u54cd\u5e94\u65f6\u95f4 \uff1a\u7cfb\u7edf\u5bf9\u8bf7\u6c42\u505a\u51fa\u54cd\u5e94\u7684\u65f6\u95f4\u3002\u4f8b\u5982\u7cfb\u7edf\u5904\u7406\u4e00\u4e2ahttp\u8bf7\u6c42\u9700\u8981600ms\uff0c\u8fd9\u4e2a600ms\u5c31\u662f\u7cfb\u7edf\u7684\u54cd\u5e94\u65f6\u95f4\u3002 \u541e\u5410\u91cf \uff1a\u5355\u4f4d\u65f6\u95f4\u5185\u5904\u7406\u7684\u8bf7\u6c42\u6570\u91cf\u3002 QPS \uff1a\u6bcf\u79d2\u54cd\u5e94\u8bf7\u6c42\u6570\u3002 \u5e76\u53d1\u7528\u6237\u6570 \uff1a\u540c\u65f6\u627f\u8f7d\u6b63\u5e38\u4f7f\u7528\u7cfb\u7edf\u529f\u80fd\u7684\u7528\u6237\u6570\u91cf\u3002\u4f8b\u5982\u4e00\u4e2a\u5373\u65f6\u901a\u8baf\u7cfb\u7edf\uff0c\u540c\u65f6\u5728\u7ebf\u7684\u7528\u6237\u91cf\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u4ee3\u8868\u4e86\u7cfb\u7edf\u7684\u5e76\u53d1\u7528\u6237\u6570\u3002 \u7b80\u5355\u6765\u8bf4\uff0c\u9ad8\u5e76\u53d1\u7684\u57fa\u672c\u8868\u73b0\u5c31\u662f\u7cfb\u7edf\u5728\u5355\u4f4d\u65f6\u95f4\u5185\u80fd\u591f\u540c\u65f6\u5904\u7406\u7684\u8bf7\u6c42\u6570\u3002\u9ad8\u5e76\u53d1\u6ca1\u6709\u5177\u4f53\u7684\u8303\u56f4\u89c4\u5b9a\u591a\u5c11\u5e76\u53d1\u7b97\u662f\u9ad8\u5e76\u53d1\uff0c\u6bd4\u5982\u4f60\u5f00\u53d1\u7684\u7cfb\u7edf\u6700\u5927\u5e76\u53d1\u662f1000\uff0c\u90a3\u4e48\u6765\u4e861001\u7684\u5e76\u53d1\u91cf\u5bf9\u4f60\u6765\u8bf4\u5c31\u662f\u9ad8\u5e76\u53d1\uff0c\u4f46\u662f\u8fd9\u4e2a\u5e76\u53d1\u91cf\u653e\u5728\u6dd8\u5b9d\u4e0a\uff0c\u7b80\u76f4\u4ec0\u4e48\u90fd\u7b97\u4e0d\u4e0a\u3002 \u5982\u679c\u9ad8\u5e76\u53d1\u5904\u7406\u4e0d\u597d\uff0c\u4e0d\u4ec5\u4f1a\u964d\u4f4e\u7528\u6237\u7684\u4f53\u9a8c\u5ea6(\u8bf7\u6c42\u54cd\u5e94\u65f6\u95f4\u8fc7\u957f\u7b49)\uff0c\u540c\u65f6\u53ef\u80fd\u5bfc\u81f4\u7cfb\u7edf\u5b95\u673a\u3001\u505c\u6b62\u5de5\u4f5c\u7b49\u3002","title":"\u9ad8\u5e76\u53d1"},{"location":"cs/db/mysql/#_23","text":"\u5927\u5bb6\u90fd\u77e5\u9053MySQL\u52a0\u4e0aRedis\u662f\u4e00\u5bf9\u513f\u7ecf\u5178\u7684\u7ec4\u5408\u3002\u4f7f\u7528Redis\u4f5c\u4e3aMySQL\u7684\u524d\u7f6e\u7f13\u5b58\uff0c\u53ef\u4ee5\u4e3aMySQL\u6321\u4f4f\u5927\u90e8\u5206\u67e5\u8be2\u8bf7\u6c42\uff0c\u53ef\u4ee5\u5f88\u5927\u7a0b\u5ea6\u4e0a\u7f13\u89e3MySQL\u5e76\u53d1\u8bf7\u6c42\u7684\u538b\u529b\u3002Redis\u662f\u4e00\u4e2a\u4f7f\u7528\u5185\u5b58\u4fdd\u5b58\u6570\u636e\u7684\u9ad8\u6027\u80fdK-V\u6570\u636e\u5e93\uff0c\u5b83\u7684\u9ad8\u6027\u80fd\u4e3b\u8981\u6765\u81ea\u4e8e\uff1a \u7b80\u5355\u7684\u6570\u636e\u7ed3\u6784 \u548c \u4f7f\u7528\u5185\u5b58\u5b58\u50a8\u6570\u636e \u3002\u4f46\u662f\u6211\u4eec\u9700\u8981\u77e5\u9053\u7684\u662f\u5185\u5b58\u672c\u8eab\u5c31\u662f\u4e00\u79cd\u6613\u5931\u6027\u5b58\u50a8\uff0c\u6240\u4ee5\u4f7f\u7528Redis\u4e0d\u80fd\u4fdd\u8bc1\u6570\u636e\u53ef\u9760\u5b58\u50a8\u3002\u4ece\u8bbe\u8ba1\u4e0a\u6765\u8bf4\uff0cRedis\u727a\u7272\u4e86\u6570\u636e\u53ef\u9760\u6027\uff0c\u6362\u53d6\u4e86\u9ad8\u6027\u80fd\u3002\u4f46\u4e5f\u6b63\u662f\u8fd9\u4e9b\u7279\u6027\uff0c\u4f7f\u5f97Redis\u7279\u522b\u9002\u5408\u7528\u6765\u505aMySQL\u7684\u524d\u7f6e\u7f13\u5b58\u3002 \u5373\u4f7f\u53ea\u662f\u628aRedis\u4f5c\u4e3a\u7f13\u5b58\u6765\u4f7f\u7528\uff0c\u6211\u4eec\u5728\u8bbe\u8ba1Redis\u7f13\u5b58\u7684\u65f6\u5019\uff0c\u4e5f\u5fc5\u987b\u8981\u8003\u8651Redis\u7684\u8fd9\u79cd \u6570\u636e\u4e0d\u53ef\u9760\u6027 \uff0c\u6216\u8005\u6362\u53e5\u8bdd\u8bf4\uff0c\u6211\u4eec\u7684\u7cfb\u7edf\u5728\u4f7f\u7528Redis\u7684\u65f6\u5019\uff0c\u8981\u80fd\u517c\u5bb9Redis\u4e22\u6570\u636e\u7684\u60c5\u51b5\uff0c\u505a\u5230\u5373\u4f7fRedis\u53d1\u751f\u4e86\u4e22\u6570\u636e\u7684\u60c5\u51b5\uff0c\u4e5f\u4e0d\u5f71\u54cd\u7cfb\u7edf\u7684\u6570\u636e\u51c6\u786e\u6027\u3002 \u5173\u4e8e\u7f13\u5b58\u66f4\u65b0\u7b56\u7565\uff0c\u4f7f\u7528\u7684\u591a\u7684\u4e5f\u5c31\u662f Read/Write Through\u6a21\u5f0f \u548c Cache Aside\u6a21\u5f0f \uff0c Read/Write Through\u6a21\u5f0f \u5728\u67e5\u8be2\u6570\u636e\u7684\u65f6\u5019\uff0c\u5148\u53bb\u7f13\u5b58\u4e2d\u67e5\u8be2\uff0c\u5982\u679c\u547d\u4e2d\u7f13\u5b58\u90a3\u5c31\u76f4\u63a5\u8fd4\u56de\u6570\u636e\uff1b\u5982\u679c\u6ca1\u6709\u547d\u4e2d\uff0c\u90a3\u5c31\u53bb\u6570\u636e\u5e93\u4e2d\u67e5\u8be2\uff0c\u5f97\u5230\u67e5\u8be2\u7ed3\u679c\u4e4b\u540e\u628a\u6570\u636e\u5199\u5165\u7f13\u5b58\uff0c\u7136\u540e\u8fd4\u56de\u3002\u5728\u66f4\u65b0\u6570\u636e\u7684\u65f6\u5019\uff0c\u5148\u53bb\u66f4\u65b0\u6570\u636e\u5e93\uff0c\u5982\u679c\u66f4\u65b0\u6210\u529f\uff0c\u518d\u53bb\u66f4\u65b0\u7f13\u5b58\u4e2d\u7684\u6570\u636e\u3002","title":"\u4f7f\u7528\u7f13\u5b58"},{"location":"cs/db/mysql/#_24","text":"\u4f7f\u7528Redis\u4f5c\u4e3aMySQL\u7684\u524d\u7f6e\u7f13\u5b58\uff0c\u53ef\u4ee5\u975e\u5e38\u6709\u6548\u5730\u63d0\u5347\u7cfb\u7edf\u5904\u7406\u9ad8\u5e76\u53d1\u7684\u80fd\u529b\uff0c\u964d\u4f4e\u8bf7\u6c42\u54cd\u5e94\u65f6\u95f4\u3002\u7edd\u5927\u591a\u6570\u60c5\u51b5\u4e0b\uff0c\u4f7f\u7528Cache Aside\u6a21\u5f0f\u6765\u66f4\u65b0\u7f13\u5b58\u90fd\u662f\u6700\u4f73\u7684\u9009\u62e9\uff0c\u76f8\u6bd4Read/Write Through\u6a21\u5f0f\u66f4\u7b80\u5355\uff0c\u8fd8\u80fd\u5927\u5e45\u964d\u4f4e\u810f\u6570\u636e\u7684\u53ef\u80fd\u6027\u3002\u7279\u522b\u6ce8\u610f\u7684\u662f\uff0c\u5927\u91cf\u7f13\u5b58\u7a7f\u900f\u5f15\u8d77\u96ea\u5d29\u7684\u95ee\u9898\uff0c\u4f60\u9700\u8981\u9488\u5bf9\u5177\u4f53\u4e1a\u52a1\u573a\u666f\u6765\u9009\u62e9\u5408\u9002\u89e3\u51b3\u65b9\u6848\u3002","title":"\u603b\u7ed3"},{"location":"cs/db/mysql/#reidskv","text":"","title":"reids\u9047\u5230\u5927KV"},{"location":"cs/db/mysql/#_25","text":"\u8df3\u8868\u53ef\u4ee5\u7b80\u5355\u7406\u89e3\u5c31\u662f\u7ed9\u94fe\u8868\u52a0\u7d22\u5f15\uff0c\u5f53\u7ed3\u70b9\u6570\u91cf\u591a\u7684\u65f6\u5019\uff0c\u8fd9\u79cd\u6dfb\u52a0\u7d22\u5f15\u7684\u65b9\u5f0f\uff0c\u4f1a\u4f7f\u67e5\u8be2\u6548\u7387\u63d0\u9ad8\u7684\u975e\u5e38\u660e\u663e\u3002 \u8df3\u8868\u8fd9\u4e2a\u52a8\u6001\u6570\u636e\u7ed3\u6784\uff0c\u4e0d\u4ec5\u652f\u6301\u67e5\u627e\u64cd\u4f5c\uff0c\u8fd8\u652f\u6301\u52a8\u6001\u7684\u63d2\u5165\u3001\u5220\u9664\u64cd\u4f5c\uff0c\u800c\u4e14\u63d2\u5165\u3001\u5220\u9664\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e5f\u662f \\(O(logn)\\) \u3002 \u5bf9\u4e8e\u5355\u7eaf\u7684\u5355\u94fe\u8868\uff0c\u9700\u8981\u904d\u5386\u6bcf\u4e2a\u7ed3\u70b9\u6765\u627e\u5230\u63d2\u5165\u7684\u4f4d\u7f6e\u3002\u4f46\u662f\u5bf9\u4e8e\u8df3\u8868\u6765\u8bf4\uff0c\u56e0\u4e3a\u5176\u67e5\u627e\u67d0\u4e2a\u7ed3\u70b9\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u662f \\(O(logn)\\) \uff0c\u6240\u4ee5\u8fd9\u91cc\u67e5\u627e\u67d0\u4e2a\u6570\u636e\u5e94\u8be5\u63d2\u5165\u7684\u4f4d\u7f6e\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u4e5f\u662f \u25cb(\u33d2n)\u3002","title":"\u8df3\u8868"},{"location":"cs/db/mysql/#redisb","text":"redis \u4f7f\u7528\u8df3\u8868\u4e0d\u7528 B + \u6570\u7684\u539f\u56e0\u662f\uff1aredis \u662f\u5185\u5b58\u6570\u636e\u5e93\uff0c\u800c B + \u6811\u7eaf\u7cb9\u662f\u4e3a\u4e86 mysql \u8fd9\u79cd IO \u6570\u636e\u5e93\u51c6\u5907\u7684\u3002B + \u6811\u7684\u6bcf\u4e2a\u8282\u70b9\u7684\u6570\u91cf\u90fd\u662f\u4e00\u4e2a mysql \u5206\u533a\u9875\u7684\u5927\u5c0f Redis \u4e2d\u7684\u6709\u5e8f\u96c6\u5408\u662f\u901a\u8fc7\u8df3\u8868\u6765\u5b9e\u73b0\u7684\uff0c\u4e25\u683c\u70b9\u8bb2\uff0c\u8fd8\u7528\u5230\u4e86\u6563\u5217\u8868\uff08\u5173\u4e8e\u6563\u5217\u8868\uff09\uff0c\u5982\u679c\u67e5\u770b Redis \u5f00\u53d1\u624b\u518c\uff0c\u4f1a\u53d1\u73b0 Redis \u4e2d\u7684\u6709\u5e8f\u96c6\u5408\u652f\u6301\u7684\u6838\u5fc3\u64cd\u4f5c\u4e3b\u8981\u6709\u4e0b\u9762\u8fd9\u51e0\u4e2a\uff1a \u63d2\u5165\u4e00\u4e2a\u6570\u636e \u5220\u9664\u4e00\u4e2a\u6570\u636e \u67e5\u627e\u4e00\u4e2a\u6570\u636e \u6309\u7167\u533a\u95f4\u67e5\u627e\u6570\u636e\uff08\u6bd4\u5982\u67e5\u627e\u5728 [100,356] \u4e4b\u95f4\u7684\u6570\u636e\uff09 \u8fed\u4ee3\u8f93\u51fa\u6709\u5e8f\u5e8f\u5217 \u5176\u4e2d\uff0c\u63d2\u5165\u3001\u67e5\u627e\u3001\u5220\u9664\u4ee5\u53ca\u8fed\u4ee3\u8f93\u51fa\u6709\u5e8f\u5e8f\u5217\u8fd9\u51e0\u4e2a\u64cd\u4f5c\uff0c\u7ea2\u9ed1\u6811\u4e5f\u80fd\u5b8c\u6210\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u548c\u8df3\u8868\u662f\u4e00\u6837\u7684\uff0c\u4f46\u662f\uff0c\u6309\u7167\u533a\u95f4\u6765\u67e5\u627e\u6570\u636e\u8fd9\u4e2a\u64cd\u4f5c\uff0c\u7ea2\u9ed1\u6811\u7684\u6548\u7387\u6ca1\u6709\u8df3\u8868\u9ad8\u3002 \u5bf9\u4e8e\u6309\u7167\u533a\u95f4\u67e5\u627e\u6570\u636e\u8fd9\u4e2a\u64cd\u4f5c\uff0c\u8df3\u8868\u53ef\u4ee5\u505a\u5230 \\(O(logn)\\) \u7684\u65f6\u95f4\u590d\u6742\u5ea6\u5b9a\u4f4d\u533a\u95f4\u7684\u8d77\u70b9\uff0c\u7136\u540e\u5728\u539f\u59cb\u94fe\u8868\u4e2d\u987a\u5e8f\u5f80\u540e\u904d\u5386\u5c31\u53ef\u4ee5\u4e86\u3002\u8fd9\u6837\u505a\u975e\u5e38\u9ad8\u6548\u3002 \u5f53\u7136\uff0c\u8fd8\u6709\u5176\u4ed6\u539f\u56e0\uff0c\u6bd4\u5982\uff0c\u8df3\u8868\u4ee3\u7801\u66f4\u5bb9\u6613\u5b9e\u73b0\uff0c\u53ef\u8bfb\u6027\u597d\u4e0d\u6613\u51fa\u9519\u3002\u8df3\u8868\u66f4\u52a0\u7075\u6d3b\uff0c\u53ef\u4ee5\u901a\u8fc7\u6539\u53d8\u7d22\u5f15\u6784\u5efa\u7b56\u7565\uff0c\u6709\u6548\u5e73\u8861\u6267\u884c\u6548\u7387\u548c\u5185\u5b58\u6d88\u8017\u3002","title":"Redis\u9009\u4e2d\u8df3\u8868\u800c\u4e0d\u4f7f\u7528B+\u6811"},{"location":"cs/db/mysql/#8","text":"SELECT g1 . stu_id , g1 . class_id , g1 . gender , g1 . math_score FROM grade g1 WHERE g1 . gender = 'm' AND EXISTS ( SELECT count ( * ) FROM grade g2 WHERE g2 . gender = 'm' AND g2 . math_score >= g1 . math_score AND g2 . class_id = g1 . class_id GROUP BY g2 . class_id HAVING count ( * ) <= 3 ) ORDER BY class_id , math_score DESC","title":"\u603b\u51718\u4e2a\u73ed\u7ea7\u3001\u8f93\u51fa\u6bcf\u4e2a\u73ed\u7ea7\u7537\u751f\u7684\u6570\u5b66\u524d\u4e09\u540d\u548c\u5973\u751f\u7684\u8bed\u6587\u524d\u4e09\u540d"},{"location":"cs/db/redis/cjh/","text":"Redis \u6301\u4e45\u5316 \u00b6 \u7b80\u4ecb \u00b6 \u7531\u4e8eredis\u662f\u5185\u5b58\u6570\u636e\u5e93\uff0c\u6240\u4ee5\u5176\u6570\u636e\u65ad\u7535\u6613\u5931\uff0c\u56e0\u6b64\u9700\u8981\u5c06\u6570\u636e\u4fdd\u5b58\u5230\u78c1\u76d8\u4e2d\u3002redis\u6709\u4e24\u79cd\u6301\u4e45\u5316\u89e3\u51b3\u65b9\u6848\uff0c\u5206\u522b\u662f\uff1aRDB\uff0cAOF\u3002 \u5feb\u7167(Snapshot) / RDB \u00b6 \u8fd9\u79cd\u65b9\u5f0f\u53ef\u4ee5\u5c06\u67d0\u4e00\u65f6\u523b\u7684\u6240\u6709\u6570\u636e\u90fd\u5199\u5165\u786c\u76d8\u4e2d,\u5f53\u7136\u8fd9\u4e5f\u662fredis\u7684\u9ed8\u8ba4\u5f00\u542f\u6301\u4e45\u5316\u65b9\u5f0f,\u4fdd\u5b58\u7684\u6587\u4ef6\u662f\u4ee5.rdb\u5f62\u5f0f\u7ed3\u5c3e\u7684\u6587\u4ef6\u56e0\u6b64\u8fd9\u79cd\u65b9\u5f0f\u4e5f\u79f0\u4e4b\u4e3aRDB\u65b9\u5f0f\u3002 \u5728\u6307\u5b9a\u65f6\u95f4\u95f4\u9694\u540e\uff0c\u5c06\u5185\u5b58\u4e2d\u7684\u6570\u636e\u96c6\u5feb\u7167\u5199\u5165\u6570\u636e\u5e93 \uff1b\u5728\u6062\u590d\u65f6\u5019\uff0c\u76f4\u63a5\u8bfb\u53d6\u5feb\u7167\u6587\u4ef6\uff0c\u8fdb\u884c\u6570\u636e\u7684\u6062\u590d \uff1b \u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c Redis \u5c06\u6570\u636e\u5e93\u5feb\u7167\u4fdd\u5b58\u5728\u540d\u5b57\u4e3a dump.rdb \u7684\u4e8c\u8fdb\u5236\u6587\u4ef6\u4e2d\u3002\u6587\u4ef6\u540d\u53ef\u4ee5\u5728\u914d\u7f6e\u6587\u4ef6\u4e2d\u8fdb\u884c\u81ea\u5b9a\u4e49\u3002 RDB\u6301\u4e45\u5316\u7684\u5927\u81f4\u8fc7\u7a0b \u00b6 \u5728\u8fdb\u884c RDB \u7684\u65f6\u5019\uff0credis \u7684\u4e3b\u7ebf\u7a0b\u662f\u4e0d\u4f1a\u505a io \u64cd\u4f5c\u7684\uff0c\u4e3b\u7ebf\u7a0b\u4f1a fork \u4e00\u4e2a\u5b50\u7ebf\u7a0b\u6765\u5b8c\u6210\u8be5\u64cd\u4f5c\uff1b Redis \u8c03\u7528forks\u3002\u540c\u65f6\u62e5\u6709\u7236\u8fdb\u7a0b\u548c\u5b50\u8fdb\u7a0b\u3002 \u5b50\u8fdb\u7a0b\u5c06\u6570\u636e\u96c6\u5199\u5165\u5230\u4e00\u4e2a\u4e34\u65f6 RDB \u6587\u4ef6\u4e2d\u3002 \u5f53\u5b50\u8fdb\u7a0b\u5b8c\u6210\u5bf9\u65b0 RDB \u6587\u4ef6\u7684\u5199\u5165\u65f6\uff0cRedis \u7528\u65b0 RDB \u6587\u4ef6\u66ff\u6362\u539f\u6765\u7684 RDB \u6587\u4ef6\uff0c\u5e76\u5220\u9664\u65e7\u7684 RDB \u6587\u4ef6\u3002 \u8fd9\u79cd\u5de5\u4f5c\u65b9\u5f0f\u4f7f\u5f97 Redis \u53ef\u4ee5\u4ece\u5199\u65f6\u590d\u5236\uff08copy-on-write\uff09\u673a\u5236\u4e2d\u83b7\u76ca(\u56e0\u4e3a\u662f\u4f7f\u7528\u5b50\u8fdb\u7a0b\u8fdb\u884c\u5199\u64cd\u4f5c\uff0c\u800c\u7236\u8fdb\u7a0b\u4f9d\u7136\u53ef\u4ee5\u63a5\u6536\u6765\u81ea\u5ba2\u6237\u7aef\u7684\u8bf7\u6c42\u3002) bgsave\uff1a \u00b6 \u5ba2\u6237\u7aef\u53ef\u4ee5\u4f7f\u7528BGSAVE\u547d\u4ee4\u6765\u521b\u5efa\u4e00\u4e2a\u5feb\u7167,\u5f53\u63a5\u6536\u5230\u5ba2\u6237\u7aef\u7684BGSAVE\u547d\u4ee4\u65f6,redis\u4f1a\u8c03\u7528fork\u6765\u521b\u5efa\u4e00\u4e2a\u5b50\u8fdb\u7a0b,\u7136\u540e\u5b50\u8fdb\u7a0b\u8d1f\u8d23\u5c06\u5feb\u7167\u5199\u5165\u78c1\u76d8\u4e2d,\u800c\u7236\u8fdb\u7a0b\u5219\u7ee7\u7eed\u5904\u7406\u547d\u4ee4\u8bf7\u6c42\u3002 bgsave \u662f\u5f02\u6b65\u8fdb\u884c\uff0c\u8fdb\u884c\u6301\u4e45\u5316\u7684\u65f6\u5019\uff0credis \u8fd8\u53ef\u4ee5\u5c06\u7ee7\u7eed\u54cd\u5e94\u5ba2\u6237\u7aef\u8bf7\u6c42 \uff1b save\uff1a \u00b6 \u4f7f\u7528 save \u547d\u4ee4\uff0c\u4f1a\u7acb\u523b\u5bf9\u5f53\u524d\u5185\u5b58\u4e2d\u7684\u6570\u636e\u8fdb\u884c\u6301\u4e45\u5316 ,\u4f46\u662f\u4f1a\u963b\u585e\uff0c\u4e5f\u5c31\u662f\u4e0d\u63a5\u53d7\u5176\u4ed6\u64cd\u4f5c\u4e86\uff1b \u7531\u4e8e save \u547d\u4ee4\u662f\u540c\u6b65\u547d\u4ee4\uff0c\u4f1a\u5360\u7528Redis\u7684\u4e3b\u8fdb\u7a0b\u3002\u82e5Redis\u6570\u636e\u975e\u5e38\u591a\u65f6\uff0csave\u547d\u4ee4\u6267\u884c\u901f\u5ea6\u4f1a\u975e\u5e38\u6162\uff0c\u963b\u585e\u6240\u6709\u5ba2\u6237\u7aef\u7684\u8bf7\u6c42\u3002 shutdown\uff1a \u00b6 \u5f53redis\u901a\u8fc7shutdown\u6307\u4ee4\u63a5\u6536\u5230\u5173\u95ed\u670d\u52a1\u5668\u7684\u8bf7\u6c42\u65f6,\u4f1a\u6267\u884c\u4e00\u4e2asave\u547d\u4ee4,\u963b\u585e\u6240\u6709\u7684\u5ba2\u6237\u7aef,\u4e0d\u518d\u6267\u884c\u5ba2\u6237\u7aef\u6267\u884c\u53d1\u9001\u7684\u4efb\u4f55\u547d\u4ee4,\u5e76\u4e14\u5728save\u547d\u4ee4\u6267\u884c\u5b8c\u6bd5\u4e4b\u540e\u5173\u95ed\u670d\u52a1\u5668 \u6ce8\u610f: \u00b6 SAVE\u547d\u4ee4\u5e76\u4e0d\u5e38\u7528,\u4f7f\u7528SAVE\u547d\u4ee4\u5728\u5feb\u7167\u521b\u5efa\u5b8c\u6bd5\u4e4b\u524d,redis\u5904\u4e8e\u963b\u585e\u72b6\u6001,\u65e0\u6cd5\u5bf9\u5916\u670d\u52a1 \u5982\u679c\u7528\u6237\u5728redis.conf\u4e2d\u8bbe\u7f6e\u4e86save\u914d\u7f6e\u9009\u9879,redis\u4f1a\u5728save\u9009\u9879\u6761\u4ef6\u6ee1\u8db3\u4e4b\u540e\u81ea\u52a8\u89e6\u53d1\u4e00\u6b21BGSAVE\u547d\u4ee4,\u5982\u679c\u8bbe\u7f6e\u591a\u4e2asave\u914d\u7f6e\u9009\u9879,\u5f53\u4efb\u610f\u4e00\u4e2asave\u914d\u7f6e\u9009\u9879\u6761\u4ef6\u6ee1\u8db3,redis\u4e5f\u4f1a\u89e6\u53d1\u4e00\u6b21BGSAVE\u547d\u4ee4 \u4f18\u70b9 \u00b6 RDB\u6587\u4ef6\u7d27\u51d1\uff0c\u5168\u91cf\u5907\u4efd\uff0c\u975e\u5e38\u9002\u5408\u7528\u4e8e\u8fdb\u884c\u5907\u4efd\u548c\u707e\u96be\u6062\u590d\u3002 \u751f\u6210RDB\u6587\u4ef6\u7684\u65f6\u5019\uff0credis\u4e3b\u8fdb\u7a0b\u4f1afork()\u4e00\u4e2a\u5b50\u8fdb\u7a0b\u6765\u5904\u7406\u6240\u6709\u4fdd\u5b58\u5de5\u4f5c\uff0c\u4e3b\u8fdb\u7a0b\u4e0d\u9700\u8981\u8fdb\u884c\u4efb\u4f55\u78c1\u76d8IO\u64cd\u4f5c\u3002 RDB \u5728\u6062\u590d\u5927\u6570\u636e\u96c6\u65f6\u7684\u901f\u5ea6\u6bd4 AOF \u7684\u6062\u590d\u901f\u5ea6\u8981\u5feb\u3002 \u7f3a\u70b9 \u00b6 \u9700\u8981\u4e00\u5b9a\u7684\u65f6\u95f4\u95f4\u9694\u8fdb\u7a0b\u64cd\u4f5c\uff01\u5982\u679credis\u610f\u5916\u5b95\u673a\u4e86\uff0c\u8fd9\u4e2a\u6700\u540e\u4e00\u6b21\u4fee\u6539\u6570\u636e\u5c31\u6ca1\u6709\u7684\u4e86\uff01 fork\u8fdb\u7a0b\u7684\u65f6\u5019\uff0c\u4f1a\u5360\u7528\u4e00\u5b9a\u7684\u5185\u5bb9\u7a7a\u95f4\uff01\uff01 RDB\u89e6\u53d1\u673a\u5236 \u00b6 save\u7684\u89c4\u5219\u6ee1\u8db3\u7684\u60c5\u51b5\u4e0b\uff0c\u4f1a\u81ea\u52a8\u89e6\u53d1rdb\u89c4\u5219 \u6267\u884c flushall \u547d\u4ee4\uff0c\u4e5f\u4f1a\u89e6\u53d1\u6211\u4eec\u7684rdb\u89c4\u5219\uff01 \u9000\u51faredis\uff0c\u4e5f\u4f1a\u4ea7\u751f rdb \u6587\u4ef6\uff01 \u914d\u7f6e\u751f\u6210\u5feb\u7167\u540d\u79f0\u548c\u4f4d\u7f6e \u00b6 \u4fee\u6539\u751f\u6210\u5feb\u7167\u540d\u79f0 dbfilename dump.rdb \u4fee\u6539\u751f\u6210\u4f4d\u7f6e dir ./ \u6062\u590drdb\u6587\u4ef6 \u00b6 \u53ea\u9700\u8981\u5c06rdb\u6587\u4ef6\u653e\u5728redis\u542f\u52a8\u76ee\u5f55\u4e2d\uff0credis\u542f\u52a8\u65f6\u81ea\u52a8\u68c0\u67e5dump.rdb\u6062\u590d\u5176\u4e2d\u7684\u6570\u636e\u3002 \u67e5\u770b\u5176\u5b58\u5728\u7684\u4f4d\u7f6e \u5982\u679c/var/lib/redis\u8fd9\u4e2a\u76ee\u5f55\u5b58\u5728dump.rdb\u6587\u4ef6\uff0c\u5219\u542f\u52a8\u65f6\u81ea\u52a8\u6062\u590d\u6570\u636e\u3002 AOF \u00b6 Append Only File \u5c06\u6211\u4eec\u6240\u6709\u7684\u547d\u4ee4\u90fd\u8bb0\u5f55\u4e0b\u6765\uff0chistory\uff0c\u6062\u590d\u7684\u65f6\u5019\u5c31\u628a\u8fd9\u4e2a\u6587\u4ef6\u5168\u90e8\u518d\u6267\u884c\u4e00\u904d \u4ec0\u4e48\u662fAOF \u00b6 \u5feb\u7167\u529f\u80fd\uff08RDB\uff09\u5e76\u4e0d\u662f\u975e\u5e38\u8010\u4e45\uff08durable\uff09\uff1a \u5982\u679c Redis \u56e0\u4e3a\u67d0\u4e9b\u539f\u56e0\u800c\u9020\u6210\u6545\u969c\u505c\u673a\uff0c \u90a3\u4e48\u670d\u52a1\u5668\u5c06\u4e22\u5931\u6700\u8fd1\u5199\u5165\u3001\u4ee5\u53ca\u672a\u4fdd\u5b58\u5230\u5feb\u7167\u4e2d\u7684\u90a3\u4e9b\u6570\u636e\u3002 \u4ece 1.1 \u7248\u672c\u5f00\u59cb\uff0c Redis \u589e\u52a0\u4e86\u4e00\u79cd\u5b8c\u5168\u8010\u4e45\u7684\u6301\u4e45\u5316\u65b9\u5f0f\uff1a AOF \u6301\u4e45\u5316\u3002 \u7279\u70b9 \u00b6 \u8fd9\u79cd\u65b9\u5f0f\u53ef\u4ee5\u5c06\u6240\u6709\u5ba2\u6237\u7aef\u6267\u884c\u7684\u5199\u547d\u4ee4\u8bb0\u5f55\u5230\u65e5\u5fd7\u6587\u4ef6\u4e2d,AOF\u6301\u4e45\u5316\u4f1a\u5c06\u88ab\u6267\u884c\u7684\u5199\u547d\u4ee4\u5199\u5230AOF\u7684\u6587\u4ef6\u672b\u5c3e,\u4ee5\u6b64\u6765\u8bb0\u5f55\u6570\u636e\u53d1\u751f\u7684\u53d8\u5316,\u56e0\u6b64\u53ea\u8981redis\u4ece\u5934\u5230\u5c3e\u6267\u884c\u4e00\u6b21AOF\u6587\u4ef6\u6240\u5305\u542b\u7684\u6240\u6709\u5199\u547d\u4ee4,\u5c31\u53ef\u4ee5\u6062\u590dAOF\u6587\u4ef6\u7684\u8bb0\u5f55\u7684\u6570\u636e\u96c6. \u5f00\u542fAOF\u6301\u4e45\u5316 \u00b6 \u5728redis\u7684\u9ed8\u8ba4\u914d\u7f6e\u4e2dAOF\u6301\u4e45\u5316\u673a\u5236\u662f\u6ca1\u6709\u5f00\u542f\u7684\uff0c\u9700\u8981\u5728\u914d\u7f6e\u4e2d\u5f00\u542f appendonly no yes\u5219\u8868\u793a\u542f\u7528AOF \u9ed8\u8ba4\u662f\u4e0d\u5f00\u542f\u7684\uff0c\u6211\u4eec\u9700\u8981\u624b\u52a8\u914d\u7f6e\uff0c\u7136\u540e\u91cd\u542fredis\uff0c\u5c31\u53ef\u4ee5\u751f\u6548\u4e86\uff01 \u5982\u679c\u8fd9\u4e2aaof\u6587\u4ef6\u6709\u9519\u4f4d\uff0c\u8fd9\u65f6\u5019redis\u662f\u542f\u52a8\u4e0d\u8d77\u6765\u7684\uff0c\u6211\u9700\u8981\u4fee\u6539\u8fd9\u4e2aaof\u6587\u4ef6 redis\u7ed9\u6211\u4eec\u63d0\u4f9b\u4e86\u4e00\u4e2a\u5de5\u5177redis-check-aof --fix \u65e5\u5fd7\u8ffd\u52a0\u9891\u7387 \u00b6 \u4fee\u6539\u65e5\u5fd7\u540c\u6b65\u9891\u7387 - \u4fee\u6539appendfsync everysec | always | no \u6307\u5b9a AOF\u6587\u4ef6\u7684\u91cd\u5199 \u00b6 AOF\u5e26\u6765\u7684\u95ee\u9898 \u00b6 AOF\u7684\u65b9\u5f0f\u4e5f\u540c\u65f6\u5e26\u6765\u4e86\u53e6\u4e00\u4e2a\u95ee\u9898\u3002\u6301\u4e45\u5316\u6587\u4ef6\u4f1a\u53d8\u7684\u8d8a\u6765\u8d8a\u5927\u3002\u4f8b\u5982\u6211\u4eec\u8c03\u7528incr test\u547d\u4ee4100\u6b21\uff0c\u6587\u4ef6\u4e2d\u5fc5\u987b\u4fdd\u5b58\u5168\u90e8\u7684100\u6761\u547d\u4ee4\uff0c\u5176\u5b9e\u670999\u6761\u90fd\u662f\u591a\u4f59\u7684\u3002\u56e0\u4e3a\u8981\u6062\u590d\u6570\u636e\u5e93\u7684\u72b6\u6001\u5176\u5b9e\u6587\u4ef6\u4e2d\u4fdd\u5b58\u4e00\u6761set test 100\u5c31\u591f\u4e86\u3002\u4e3a\u4e86\u538b\u7f29aof\u7684\u6301\u4e45\u5316\u6587\u4ef6Redis\u63d0\u4f9b\u4e86AOF\u91cd\u5199(ReWriter)\u673a\u5236\u3002 AOF\u91cd\u5199 \u00b6 \u7528\u6765\u5728\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u51cf\u5c0fAOF\u6587\u4ef6\u7684\u4f53\u79ef \u89e6\u53d1\u673a\u5236 \u00b6 # 1.\u5ba2\u6237\u7aef\u65b9\u5f0f\u89e6\u53d1\u91cd\u5199 - \u6267\u884cBGREWRITEAOF\u547d\u4ee4 \u4e0d\u4f1a\u963b\u585eredis\u7684\u670d\u52a1 # 2.\u670d\u52a1\u5668\u914d\u7f6e\u65b9\u5f0f\u81ea\u52a8\u89e6\u53d1 - \u914d\u7f6eredis.conf\u4e2d\u7684auto-aof-rewrite-percentage\u9009\u9879 \u53c2\u52a0\u4e0b\u56fe\u2193\u2193\u2193 - \u5982\u679c\u8bbe\u7f6eauto-aof-rewrite-percentage\u503c\u4e3a100\u548cauto-aof-rewrite-min-size 64mb,\u5e76\u4e14\u542f\u7528\u7684AOF\u6301\u4e45\u5316\u65f6,\u90a3\u4e48\u5f53AOF\u6587\u4ef6\u4f53\u79ef\u5927\u4e8e64M,\u5e76\u4e14AOF\u6587\u4ef6\u7684\u4f53\u79ef\u6bd4\u4e0a\u4e00\u6b21\u91cd\u5199\u4e4b\u540e\u4f53\u79ef\u5927\u4e86\u81f3\u5c11\u4e00\u500d ( 100 % ) \u65f6,\u4f1a\u81ea\u52a8\u89e6\u53d1,\u5982\u679c\u91cd\u5199\u8fc7\u4e8e\u9891\u7e41,\u7528\u6237\u53ef\u4ee5\u8003\u8651\u5c06auto-aof-rewrite-percentage\u8bbe\u7f6e\u4e3a\u66f4\u5927 \u91cd\u5199\u539f\u7406 \u00b6 \u6ce8\u610f\uff1a\u91cd\u5199aof\u6587\u4ef6\u7684\u64cd\u4f5c\uff0c\u5e76\u6ca1\u6709\u8bfb\u53d6\u65e7\u7684aof\u6587\u4ef6\uff0c\u800c\u662f\u5c06\u6574\u4e2a\u5185\u5b58\u4e2d\u7684\u6570\u636e\u5e93\u5185\u5bb9\u7528\u547d\u4ee4\u7684\u65b9\u5f0f\u91cd\u5199\u4e86\u4e00\u4e2a\u65b0\u7684aof\u6587\u4ef6,\u66ff\u6362\u539f\u6709\u7684\u6587\u4ef6\u8fd9\u70b9\u548c\u5feb\u7167\u6709\u70b9\u7c7b\u4f3c\u3002 # \u91cd\u5199\u6d41\u7a0b - 1 . redis\u8c03\u7528fork \uff0c\u73b0\u5728\u6709\u7236\u5b50\u4e24\u4e2a\u8fdb\u7a0b \u5b50\u8fdb\u7a0b\u6839\u636e\u5185\u5b58\u4e2d\u7684\u6570\u636e\u5e93\u5feb\u7167\uff0c\u5f80\u4e34\u65f6\u6587\u4ef6\u4e2d\u5199\u5165\u91cd\u5efa\u6570\u636e\u5e93\u72b6\u6001\u7684\u547d\u4ee4 - 2 . \u7236\u8fdb\u7a0b\u7ee7\u7eed\u5904\u7406client\u8bf7\u6c42\uff0c\u9664\u4e86\u628a\u5199\u547d\u4ee4\u5199\u5165\u5230\u539f\u6765\u7684aof\u6587\u4ef6\u4e2d\u3002\u540c\u65f6\u628a\u6536\u5230\u7684\u5199\u547d\u4ee4\u7f13\u5b58\u8d77\u6765\u3002\u8fd9\u6837\u5c31\u80fd\u4fdd\u8bc1\u5982\u679c\u5b50\u8fdb\u7a0b\u91cd\u5199\u5931\u8d25\u7684\u8bdd\u5e76\u4e0d\u4f1a\u51fa\u95ee\u9898\u3002 - 3 . \u5f53\u5b50\u8fdb\u7a0b\u628a\u5feb\u7167\u5185\u5bb9\u5199\u5165\u5df2\u547d\u4ee4\u65b9\u5f0f\u5199\u5230\u4e34\u65f6\u6587\u4ef6\u4e2d\u540e\uff0c\u5b50\u8fdb\u7a0b\u53d1\u4fe1\u53f7\u901a\u77e5\u7236\u8fdb\u7a0b\u3002\u7136\u540e\u7236\u8fdb\u7a0b\u628a\u7f13\u5b58\u7684\u5199\u547d\u4ee4\u4e5f\u5199\u5165\u5230\u4e34\u65f6\u6587\u4ef6\u3002 - 4 . \u73b0\u5728\u7236\u8fdb\u7a0b\u53ef\u4ee5\u4f7f\u7528\u4e34\u65f6\u6587\u4ef6\u66ff\u6362\u8001\u7684aof\u6587\u4ef6\uff0c\u5e76\u91cd\u547d\u540d\uff0c\u540e\u9762\u6536\u5230\u7684\u5199\u547d\u4ee4\u4e5f\u5f00\u59cb\u5f80\u65b0\u7684aof\u6587\u4ef6\u4e2d\u8ffd\u52a0\u3002 \u4f18\u70b9 \u00b6 \u6bcf\u4e00\u6b21\u4fee\u6539\u90fd\u4f1a\u540c\u6b65\uff0c\u6587\u4ef6\u7684\u5b8c\u6574\u6027\u4f1a\u66f4\u52a0\u597d \u6ca1\u79d2\u540c\u6b65\u4e00\u6b21\uff0c\u53ef\u80fd\u4f1a\u4e22\u5931\u4e00\u79d2\u7684\u6570\u636e \u4ece\u4e0d\u540c\u6b65\uff0c\u6548\u7387\u6700\u9ad8 \u7f3a\u70b9 \u00b6 \u76f8\u5bf9\u4e8e\u6570\u636e\u6587\u4ef6\u6765\u8bf4\uff0caof\u8fdc\u8fdc\u5927\u4e8erdb\uff0c\u4fee\u590d\u901f\u5ea6\u6bd4rdb\u6162\uff01 Aof\u8fd0\u884c\u6548\u7387\u4e5f\u8981\u6bd4rdb\u6162\uff0c\u6240\u4ee5\u6211\u4eecredis\u9ed8\u8ba4\u7684\u914d\u7f6e\u5c31\u662frdb\u6301\u4e45\u5316 \u5982\u4f55\u9009\u62e9\u54ea\u79cd\u6301\u4e45\u5316\u65b9\u5f0f \u00b6 \u4e00\u822c\u6765\u8bf4\uff0c \u5982\u679c\u60f3\u8fbe\u5230\u8db3\u4ee5\u5ab2\u7f8e PostgreSQL \u7684\u6570\u636e\u5b89\u5168\u6027\uff0c \u4f60\u5e94\u8be5\u540c\u65f6\u4f7f\u7528\u4e24\u79cd\u6301\u4e45\u5316\u529f\u80fd\u3002 \u5982\u679c\u4f60\u975e\u5e38\u5173\u5fc3\u4f60\u7684\u6570\u636e\uff0c \u4f46\u4ecd\u7136\u53ef\u4ee5\u627f\u53d7\u6570\u5206\u949f\u4ee5\u5185\u7684\u6570\u636e\u4e22\u5931\uff0c \u90a3\u4e48\u4f60\u53ef\u4ee5\u53ea\u4f7f\u7528 RDB \u6301\u4e45\u5316\u3002 \u6709\u5f88\u591a\u7528\u6237\u90fd\u53ea\u4f7f\u7528 AOF \u6301\u4e45\u5316\uff0c \u4f46\u5e76\u4e0d\u63a8\u8350\u8fd9\u79cd\u65b9\u5f0f\uff1a \u56e0\u4e3a\u5b9a\u65f6\u751f\u6210 RDB \u5feb\u7167\uff08snapshot\uff09\u975e\u5e38\u4fbf\u4e8e\u8fdb\u884c\u6570\u636e\u5e93\u5907\u4efd\uff0c \u5e76\u4e14 RDB \u6062\u590d\u6570\u636e\u96c6\u7684\u901f\u5ea6\u4e5f\u8981\u6bd4 AOF \u6062\u590d\u7684\u901f\u5ea6\u8981\u5feb\u3002","title":"\u6301\u4e45\u5316"},{"location":"cs/db/redis/cjh/#redis","text":"","title":"Redis \u6301\u4e45\u5316"},{"location":"cs/db/redis/cjh/#_1","text":"\u7531\u4e8eredis\u662f\u5185\u5b58\u6570\u636e\u5e93\uff0c\u6240\u4ee5\u5176\u6570\u636e\u65ad\u7535\u6613\u5931\uff0c\u56e0\u6b64\u9700\u8981\u5c06\u6570\u636e\u4fdd\u5b58\u5230\u78c1\u76d8\u4e2d\u3002redis\u6709\u4e24\u79cd\u6301\u4e45\u5316\u89e3\u51b3\u65b9\u6848\uff0c\u5206\u522b\u662f\uff1aRDB\uff0cAOF\u3002","title":"\u7b80\u4ecb"},{"location":"cs/db/redis/cjh/#snapshot-rdb","text":"\u8fd9\u79cd\u65b9\u5f0f\u53ef\u4ee5\u5c06\u67d0\u4e00\u65f6\u523b\u7684\u6240\u6709\u6570\u636e\u90fd\u5199\u5165\u786c\u76d8\u4e2d,\u5f53\u7136\u8fd9\u4e5f\u662fredis\u7684\u9ed8\u8ba4\u5f00\u542f\u6301\u4e45\u5316\u65b9\u5f0f,\u4fdd\u5b58\u7684\u6587\u4ef6\u662f\u4ee5.rdb\u5f62\u5f0f\u7ed3\u5c3e\u7684\u6587\u4ef6\u56e0\u6b64\u8fd9\u79cd\u65b9\u5f0f\u4e5f\u79f0\u4e4b\u4e3aRDB\u65b9\u5f0f\u3002 \u5728\u6307\u5b9a\u65f6\u95f4\u95f4\u9694\u540e\uff0c\u5c06\u5185\u5b58\u4e2d\u7684\u6570\u636e\u96c6\u5feb\u7167\u5199\u5165\u6570\u636e\u5e93 \uff1b\u5728\u6062\u590d\u65f6\u5019\uff0c\u76f4\u63a5\u8bfb\u53d6\u5feb\u7167\u6587\u4ef6\uff0c\u8fdb\u884c\u6570\u636e\u7684\u6062\u590d \uff1b \u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c Redis \u5c06\u6570\u636e\u5e93\u5feb\u7167\u4fdd\u5b58\u5728\u540d\u5b57\u4e3a dump.rdb \u7684\u4e8c\u8fdb\u5236\u6587\u4ef6\u4e2d\u3002\u6587\u4ef6\u540d\u53ef\u4ee5\u5728\u914d\u7f6e\u6587\u4ef6\u4e2d\u8fdb\u884c\u81ea\u5b9a\u4e49\u3002","title":"\u5feb\u7167(Snapshot) / RDB"},{"location":"cs/db/redis/cjh/#rdb","text":"\u5728\u8fdb\u884c RDB \u7684\u65f6\u5019\uff0credis \u7684\u4e3b\u7ebf\u7a0b\u662f\u4e0d\u4f1a\u505a io \u64cd\u4f5c\u7684\uff0c\u4e3b\u7ebf\u7a0b\u4f1a fork \u4e00\u4e2a\u5b50\u7ebf\u7a0b\u6765\u5b8c\u6210\u8be5\u64cd\u4f5c\uff1b Redis \u8c03\u7528forks\u3002\u540c\u65f6\u62e5\u6709\u7236\u8fdb\u7a0b\u548c\u5b50\u8fdb\u7a0b\u3002 \u5b50\u8fdb\u7a0b\u5c06\u6570\u636e\u96c6\u5199\u5165\u5230\u4e00\u4e2a\u4e34\u65f6 RDB \u6587\u4ef6\u4e2d\u3002 \u5f53\u5b50\u8fdb\u7a0b\u5b8c\u6210\u5bf9\u65b0 RDB \u6587\u4ef6\u7684\u5199\u5165\u65f6\uff0cRedis \u7528\u65b0 RDB \u6587\u4ef6\u66ff\u6362\u539f\u6765\u7684 RDB \u6587\u4ef6\uff0c\u5e76\u5220\u9664\u65e7\u7684 RDB \u6587\u4ef6\u3002 \u8fd9\u79cd\u5de5\u4f5c\u65b9\u5f0f\u4f7f\u5f97 Redis \u53ef\u4ee5\u4ece\u5199\u65f6\u590d\u5236\uff08copy-on-write\uff09\u673a\u5236\u4e2d\u83b7\u76ca(\u56e0\u4e3a\u662f\u4f7f\u7528\u5b50\u8fdb\u7a0b\u8fdb\u884c\u5199\u64cd\u4f5c\uff0c\u800c\u7236\u8fdb\u7a0b\u4f9d\u7136\u53ef\u4ee5\u63a5\u6536\u6765\u81ea\u5ba2\u6237\u7aef\u7684\u8bf7\u6c42\u3002)","title":"RDB\u6301\u4e45\u5316\u7684\u5927\u81f4\u8fc7\u7a0b"},{"location":"cs/db/redis/cjh/#bgsave","text":"\u5ba2\u6237\u7aef\u53ef\u4ee5\u4f7f\u7528BGSAVE\u547d\u4ee4\u6765\u521b\u5efa\u4e00\u4e2a\u5feb\u7167,\u5f53\u63a5\u6536\u5230\u5ba2\u6237\u7aef\u7684BGSAVE\u547d\u4ee4\u65f6,redis\u4f1a\u8c03\u7528fork\u6765\u521b\u5efa\u4e00\u4e2a\u5b50\u8fdb\u7a0b,\u7136\u540e\u5b50\u8fdb\u7a0b\u8d1f\u8d23\u5c06\u5feb\u7167\u5199\u5165\u78c1\u76d8\u4e2d,\u800c\u7236\u8fdb\u7a0b\u5219\u7ee7\u7eed\u5904\u7406\u547d\u4ee4\u8bf7\u6c42\u3002 bgsave \u662f\u5f02\u6b65\u8fdb\u884c\uff0c\u8fdb\u884c\u6301\u4e45\u5316\u7684\u65f6\u5019\uff0credis \u8fd8\u53ef\u4ee5\u5c06\u7ee7\u7eed\u54cd\u5e94\u5ba2\u6237\u7aef\u8bf7\u6c42 \uff1b","title":"bgsave\uff1a"},{"location":"cs/db/redis/cjh/#save","text":"\u4f7f\u7528 save \u547d\u4ee4\uff0c\u4f1a\u7acb\u523b\u5bf9\u5f53\u524d\u5185\u5b58\u4e2d\u7684\u6570\u636e\u8fdb\u884c\u6301\u4e45\u5316 ,\u4f46\u662f\u4f1a\u963b\u585e\uff0c\u4e5f\u5c31\u662f\u4e0d\u63a5\u53d7\u5176\u4ed6\u64cd\u4f5c\u4e86\uff1b \u7531\u4e8e save \u547d\u4ee4\u662f\u540c\u6b65\u547d\u4ee4\uff0c\u4f1a\u5360\u7528Redis\u7684\u4e3b\u8fdb\u7a0b\u3002\u82e5Redis\u6570\u636e\u975e\u5e38\u591a\u65f6\uff0csave\u547d\u4ee4\u6267\u884c\u901f\u5ea6\u4f1a\u975e\u5e38\u6162\uff0c\u963b\u585e\u6240\u6709\u5ba2\u6237\u7aef\u7684\u8bf7\u6c42\u3002","title":"save\uff1a"},{"location":"cs/db/redis/cjh/#shutdown","text":"\u5f53redis\u901a\u8fc7shutdown\u6307\u4ee4\u63a5\u6536\u5230\u5173\u95ed\u670d\u52a1\u5668\u7684\u8bf7\u6c42\u65f6,\u4f1a\u6267\u884c\u4e00\u4e2asave\u547d\u4ee4,\u963b\u585e\u6240\u6709\u7684\u5ba2\u6237\u7aef,\u4e0d\u518d\u6267\u884c\u5ba2\u6237\u7aef\u6267\u884c\u53d1\u9001\u7684\u4efb\u4f55\u547d\u4ee4,\u5e76\u4e14\u5728save\u547d\u4ee4\u6267\u884c\u5b8c\u6bd5\u4e4b\u540e\u5173\u95ed\u670d\u52a1\u5668","title":"shutdown\uff1a"},{"location":"cs/db/redis/cjh/#_2","text":"SAVE\u547d\u4ee4\u5e76\u4e0d\u5e38\u7528,\u4f7f\u7528SAVE\u547d\u4ee4\u5728\u5feb\u7167\u521b\u5efa\u5b8c\u6bd5\u4e4b\u524d,redis\u5904\u4e8e\u963b\u585e\u72b6\u6001,\u65e0\u6cd5\u5bf9\u5916\u670d\u52a1 \u5982\u679c\u7528\u6237\u5728redis.conf\u4e2d\u8bbe\u7f6e\u4e86save\u914d\u7f6e\u9009\u9879,redis\u4f1a\u5728save\u9009\u9879\u6761\u4ef6\u6ee1\u8db3\u4e4b\u540e\u81ea\u52a8\u89e6\u53d1\u4e00\u6b21BGSAVE\u547d\u4ee4,\u5982\u679c\u8bbe\u7f6e\u591a\u4e2asave\u914d\u7f6e\u9009\u9879,\u5f53\u4efb\u610f\u4e00\u4e2asave\u914d\u7f6e\u9009\u9879\u6761\u4ef6\u6ee1\u8db3,redis\u4e5f\u4f1a\u89e6\u53d1\u4e00\u6b21BGSAVE\u547d\u4ee4","title":"\u6ce8\u610f:"},{"location":"cs/db/redis/cjh/#_3","text":"RDB\u6587\u4ef6\u7d27\u51d1\uff0c\u5168\u91cf\u5907\u4efd\uff0c\u975e\u5e38\u9002\u5408\u7528\u4e8e\u8fdb\u884c\u5907\u4efd\u548c\u707e\u96be\u6062\u590d\u3002 \u751f\u6210RDB\u6587\u4ef6\u7684\u65f6\u5019\uff0credis\u4e3b\u8fdb\u7a0b\u4f1afork()\u4e00\u4e2a\u5b50\u8fdb\u7a0b\u6765\u5904\u7406\u6240\u6709\u4fdd\u5b58\u5de5\u4f5c\uff0c\u4e3b\u8fdb\u7a0b\u4e0d\u9700\u8981\u8fdb\u884c\u4efb\u4f55\u78c1\u76d8IO\u64cd\u4f5c\u3002 RDB \u5728\u6062\u590d\u5927\u6570\u636e\u96c6\u65f6\u7684\u901f\u5ea6\u6bd4 AOF \u7684\u6062\u590d\u901f\u5ea6\u8981\u5feb\u3002","title":"\u4f18\u70b9"},{"location":"cs/db/redis/cjh/#_4","text":"\u9700\u8981\u4e00\u5b9a\u7684\u65f6\u95f4\u95f4\u9694\u8fdb\u7a0b\u64cd\u4f5c\uff01\u5982\u679credis\u610f\u5916\u5b95\u673a\u4e86\uff0c\u8fd9\u4e2a\u6700\u540e\u4e00\u6b21\u4fee\u6539\u6570\u636e\u5c31\u6ca1\u6709\u7684\u4e86\uff01 fork\u8fdb\u7a0b\u7684\u65f6\u5019\uff0c\u4f1a\u5360\u7528\u4e00\u5b9a\u7684\u5185\u5bb9\u7a7a\u95f4\uff01\uff01","title":"\u7f3a\u70b9"},{"location":"cs/db/redis/cjh/#rdb_1","text":"save\u7684\u89c4\u5219\u6ee1\u8db3\u7684\u60c5\u51b5\u4e0b\uff0c\u4f1a\u81ea\u52a8\u89e6\u53d1rdb\u89c4\u5219 \u6267\u884c flushall \u547d\u4ee4\uff0c\u4e5f\u4f1a\u89e6\u53d1\u6211\u4eec\u7684rdb\u89c4\u5219\uff01 \u9000\u51faredis\uff0c\u4e5f\u4f1a\u4ea7\u751f rdb \u6587\u4ef6\uff01","title":"RDB\u89e6\u53d1\u673a\u5236"},{"location":"cs/db/redis/cjh/#_5","text":"\u4fee\u6539\u751f\u6210\u5feb\u7167\u540d\u79f0 dbfilename dump.rdb \u4fee\u6539\u751f\u6210\u4f4d\u7f6e dir ./","title":"\u914d\u7f6e\u751f\u6210\u5feb\u7167\u540d\u79f0\u548c\u4f4d\u7f6e"},{"location":"cs/db/redis/cjh/#rdb_2","text":"\u53ea\u9700\u8981\u5c06rdb\u6587\u4ef6\u653e\u5728redis\u542f\u52a8\u76ee\u5f55\u4e2d\uff0credis\u542f\u52a8\u65f6\u81ea\u52a8\u68c0\u67e5dump.rdb\u6062\u590d\u5176\u4e2d\u7684\u6570\u636e\u3002 \u67e5\u770b\u5176\u5b58\u5728\u7684\u4f4d\u7f6e \u5982\u679c/var/lib/redis\u8fd9\u4e2a\u76ee\u5f55\u5b58\u5728dump.rdb\u6587\u4ef6\uff0c\u5219\u542f\u52a8\u65f6\u81ea\u52a8\u6062\u590d\u6570\u636e\u3002","title":"\u6062\u590drdb\u6587\u4ef6"},{"location":"cs/db/redis/cjh/#aof","text":"Append Only File \u5c06\u6211\u4eec\u6240\u6709\u7684\u547d\u4ee4\u90fd\u8bb0\u5f55\u4e0b\u6765\uff0chistory\uff0c\u6062\u590d\u7684\u65f6\u5019\u5c31\u628a\u8fd9\u4e2a\u6587\u4ef6\u5168\u90e8\u518d\u6267\u884c\u4e00\u904d","title":"AOF"},{"location":"cs/db/redis/cjh/#aof_1","text":"\u5feb\u7167\u529f\u80fd\uff08RDB\uff09\u5e76\u4e0d\u662f\u975e\u5e38\u8010\u4e45\uff08durable\uff09\uff1a \u5982\u679c Redis \u56e0\u4e3a\u67d0\u4e9b\u539f\u56e0\u800c\u9020\u6210\u6545\u969c\u505c\u673a\uff0c \u90a3\u4e48\u670d\u52a1\u5668\u5c06\u4e22\u5931\u6700\u8fd1\u5199\u5165\u3001\u4ee5\u53ca\u672a\u4fdd\u5b58\u5230\u5feb\u7167\u4e2d\u7684\u90a3\u4e9b\u6570\u636e\u3002 \u4ece 1.1 \u7248\u672c\u5f00\u59cb\uff0c Redis \u589e\u52a0\u4e86\u4e00\u79cd\u5b8c\u5168\u8010\u4e45\u7684\u6301\u4e45\u5316\u65b9\u5f0f\uff1a AOF \u6301\u4e45\u5316\u3002","title":"\u4ec0\u4e48\u662fAOF"},{"location":"cs/db/redis/cjh/#_6","text":"\u8fd9\u79cd\u65b9\u5f0f\u53ef\u4ee5\u5c06\u6240\u6709\u5ba2\u6237\u7aef\u6267\u884c\u7684\u5199\u547d\u4ee4\u8bb0\u5f55\u5230\u65e5\u5fd7\u6587\u4ef6\u4e2d,AOF\u6301\u4e45\u5316\u4f1a\u5c06\u88ab\u6267\u884c\u7684\u5199\u547d\u4ee4\u5199\u5230AOF\u7684\u6587\u4ef6\u672b\u5c3e,\u4ee5\u6b64\u6765\u8bb0\u5f55\u6570\u636e\u53d1\u751f\u7684\u53d8\u5316,\u56e0\u6b64\u53ea\u8981redis\u4ece\u5934\u5230\u5c3e\u6267\u884c\u4e00\u6b21AOF\u6587\u4ef6\u6240\u5305\u542b\u7684\u6240\u6709\u5199\u547d\u4ee4,\u5c31\u53ef\u4ee5\u6062\u590dAOF\u6587\u4ef6\u7684\u8bb0\u5f55\u7684\u6570\u636e\u96c6.","title":"\u7279\u70b9"},{"location":"cs/db/redis/cjh/#aof_2","text":"\u5728redis\u7684\u9ed8\u8ba4\u914d\u7f6e\u4e2dAOF\u6301\u4e45\u5316\u673a\u5236\u662f\u6ca1\u6709\u5f00\u542f\u7684\uff0c\u9700\u8981\u5728\u914d\u7f6e\u4e2d\u5f00\u542f appendonly no yes\u5219\u8868\u793a\u542f\u7528AOF \u9ed8\u8ba4\u662f\u4e0d\u5f00\u542f\u7684\uff0c\u6211\u4eec\u9700\u8981\u624b\u52a8\u914d\u7f6e\uff0c\u7136\u540e\u91cd\u542fredis\uff0c\u5c31\u53ef\u4ee5\u751f\u6548\u4e86\uff01 \u5982\u679c\u8fd9\u4e2aaof\u6587\u4ef6\u6709\u9519\u4f4d\uff0c\u8fd9\u65f6\u5019redis\u662f\u542f\u52a8\u4e0d\u8d77\u6765\u7684\uff0c\u6211\u9700\u8981\u4fee\u6539\u8fd9\u4e2aaof\u6587\u4ef6 redis\u7ed9\u6211\u4eec\u63d0\u4f9b\u4e86\u4e00\u4e2a\u5de5\u5177redis-check-aof --fix","title":"\u5f00\u542fAOF\u6301\u4e45\u5316"},{"location":"cs/db/redis/cjh/#_7","text":"\u4fee\u6539\u65e5\u5fd7\u540c\u6b65\u9891\u7387 - \u4fee\u6539appendfsync everysec | always | no \u6307\u5b9a","title":"\u65e5\u5fd7\u8ffd\u52a0\u9891\u7387"},{"location":"cs/db/redis/cjh/#aof_3","text":"","title":"AOF\u6587\u4ef6\u7684\u91cd\u5199"},{"location":"cs/db/redis/cjh/#aof_4","text":"AOF\u7684\u65b9\u5f0f\u4e5f\u540c\u65f6\u5e26\u6765\u4e86\u53e6\u4e00\u4e2a\u95ee\u9898\u3002\u6301\u4e45\u5316\u6587\u4ef6\u4f1a\u53d8\u7684\u8d8a\u6765\u8d8a\u5927\u3002\u4f8b\u5982\u6211\u4eec\u8c03\u7528incr test\u547d\u4ee4100\u6b21\uff0c\u6587\u4ef6\u4e2d\u5fc5\u987b\u4fdd\u5b58\u5168\u90e8\u7684100\u6761\u547d\u4ee4\uff0c\u5176\u5b9e\u670999\u6761\u90fd\u662f\u591a\u4f59\u7684\u3002\u56e0\u4e3a\u8981\u6062\u590d\u6570\u636e\u5e93\u7684\u72b6\u6001\u5176\u5b9e\u6587\u4ef6\u4e2d\u4fdd\u5b58\u4e00\u6761set test 100\u5c31\u591f\u4e86\u3002\u4e3a\u4e86\u538b\u7f29aof\u7684\u6301\u4e45\u5316\u6587\u4ef6Redis\u63d0\u4f9b\u4e86AOF\u91cd\u5199(ReWriter)\u673a\u5236\u3002","title":"AOF\u5e26\u6765\u7684\u95ee\u9898"},{"location":"cs/db/redis/cjh/#aof_5","text":"\u7528\u6765\u5728\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u51cf\u5c0fAOF\u6587\u4ef6\u7684\u4f53\u79ef","title":"AOF\u91cd\u5199"},{"location":"cs/db/redis/cjh/#_8","text":"# 1.\u5ba2\u6237\u7aef\u65b9\u5f0f\u89e6\u53d1\u91cd\u5199 - \u6267\u884cBGREWRITEAOF\u547d\u4ee4 \u4e0d\u4f1a\u963b\u585eredis\u7684\u670d\u52a1 # 2.\u670d\u52a1\u5668\u914d\u7f6e\u65b9\u5f0f\u81ea\u52a8\u89e6\u53d1 - \u914d\u7f6eredis.conf\u4e2d\u7684auto-aof-rewrite-percentage\u9009\u9879 \u53c2\u52a0\u4e0b\u56fe\u2193\u2193\u2193 - \u5982\u679c\u8bbe\u7f6eauto-aof-rewrite-percentage\u503c\u4e3a100\u548cauto-aof-rewrite-min-size 64mb,\u5e76\u4e14\u542f\u7528\u7684AOF\u6301\u4e45\u5316\u65f6,\u90a3\u4e48\u5f53AOF\u6587\u4ef6\u4f53\u79ef\u5927\u4e8e64M,\u5e76\u4e14AOF\u6587\u4ef6\u7684\u4f53\u79ef\u6bd4\u4e0a\u4e00\u6b21\u91cd\u5199\u4e4b\u540e\u4f53\u79ef\u5927\u4e86\u81f3\u5c11\u4e00\u500d ( 100 % ) \u65f6,\u4f1a\u81ea\u52a8\u89e6\u53d1,\u5982\u679c\u91cd\u5199\u8fc7\u4e8e\u9891\u7e41,\u7528\u6237\u53ef\u4ee5\u8003\u8651\u5c06auto-aof-rewrite-percentage\u8bbe\u7f6e\u4e3a\u66f4\u5927","title":"\u89e6\u53d1\u673a\u5236"},{"location":"cs/db/redis/cjh/#_9","text":"\u6ce8\u610f\uff1a\u91cd\u5199aof\u6587\u4ef6\u7684\u64cd\u4f5c\uff0c\u5e76\u6ca1\u6709\u8bfb\u53d6\u65e7\u7684aof\u6587\u4ef6\uff0c\u800c\u662f\u5c06\u6574\u4e2a\u5185\u5b58\u4e2d\u7684\u6570\u636e\u5e93\u5185\u5bb9\u7528\u547d\u4ee4\u7684\u65b9\u5f0f\u91cd\u5199\u4e86\u4e00\u4e2a\u65b0\u7684aof\u6587\u4ef6,\u66ff\u6362\u539f\u6709\u7684\u6587\u4ef6\u8fd9\u70b9\u548c\u5feb\u7167\u6709\u70b9\u7c7b\u4f3c\u3002 # \u91cd\u5199\u6d41\u7a0b - 1 . redis\u8c03\u7528fork \uff0c\u73b0\u5728\u6709\u7236\u5b50\u4e24\u4e2a\u8fdb\u7a0b \u5b50\u8fdb\u7a0b\u6839\u636e\u5185\u5b58\u4e2d\u7684\u6570\u636e\u5e93\u5feb\u7167\uff0c\u5f80\u4e34\u65f6\u6587\u4ef6\u4e2d\u5199\u5165\u91cd\u5efa\u6570\u636e\u5e93\u72b6\u6001\u7684\u547d\u4ee4 - 2 . \u7236\u8fdb\u7a0b\u7ee7\u7eed\u5904\u7406client\u8bf7\u6c42\uff0c\u9664\u4e86\u628a\u5199\u547d\u4ee4\u5199\u5165\u5230\u539f\u6765\u7684aof\u6587\u4ef6\u4e2d\u3002\u540c\u65f6\u628a\u6536\u5230\u7684\u5199\u547d\u4ee4\u7f13\u5b58\u8d77\u6765\u3002\u8fd9\u6837\u5c31\u80fd\u4fdd\u8bc1\u5982\u679c\u5b50\u8fdb\u7a0b\u91cd\u5199\u5931\u8d25\u7684\u8bdd\u5e76\u4e0d\u4f1a\u51fa\u95ee\u9898\u3002 - 3 . \u5f53\u5b50\u8fdb\u7a0b\u628a\u5feb\u7167\u5185\u5bb9\u5199\u5165\u5df2\u547d\u4ee4\u65b9\u5f0f\u5199\u5230\u4e34\u65f6\u6587\u4ef6\u4e2d\u540e\uff0c\u5b50\u8fdb\u7a0b\u53d1\u4fe1\u53f7\u901a\u77e5\u7236\u8fdb\u7a0b\u3002\u7136\u540e\u7236\u8fdb\u7a0b\u628a\u7f13\u5b58\u7684\u5199\u547d\u4ee4\u4e5f\u5199\u5165\u5230\u4e34\u65f6\u6587\u4ef6\u3002 - 4 . \u73b0\u5728\u7236\u8fdb\u7a0b\u53ef\u4ee5\u4f7f\u7528\u4e34\u65f6\u6587\u4ef6\u66ff\u6362\u8001\u7684aof\u6587\u4ef6\uff0c\u5e76\u91cd\u547d\u540d\uff0c\u540e\u9762\u6536\u5230\u7684\u5199\u547d\u4ee4\u4e5f\u5f00\u59cb\u5f80\u65b0\u7684aof\u6587\u4ef6\u4e2d\u8ffd\u52a0\u3002","title":"\u91cd\u5199\u539f\u7406"},{"location":"cs/db/redis/cjh/#_10","text":"\u6bcf\u4e00\u6b21\u4fee\u6539\u90fd\u4f1a\u540c\u6b65\uff0c\u6587\u4ef6\u7684\u5b8c\u6574\u6027\u4f1a\u66f4\u52a0\u597d \u6ca1\u79d2\u540c\u6b65\u4e00\u6b21\uff0c\u53ef\u80fd\u4f1a\u4e22\u5931\u4e00\u79d2\u7684\u6570\u636e \u4ece\u4e0d\u540c\u6b65\uff0c\u6548\u7387\u6700\u9ad8","title":"\u4f18\u70b9"},{"location":"cs/db/redis/cjh/#_11","text":"\u76f8\u5bf9\u4e8e\u6570\u636e\u6587\u4ef6\u6765\u8bf4\uff0caof\u8fdc\u8fdc\u5927\u4e8erdb\uff0c\u4fee\u590d\u901f\u5ea6\u6bd4rdb\u6162\uff01 Aof\u8fd0\u884c\u6548\u7387\u4e5f\u8981\u6bd4rdb\u6162\uff0c\u6240\u4ee5\u6211\u4eecredis\u9ed8\u8ba4\u7684\u914d\u7f6e\u5c31\u662frdb\u6301\u4e45\u5316","title":"\u7f3a\u70b9"},{"location":"cs/db/redis/cjh/#_12","text":"\u4e00\u822c\u6765\u8bf4\uff0c \u5982\u679c\u60f3\u8fbe\u5230\u8db3\u4ee5\u5ab2\u7f8e PostgreSQL \u7684\u6570\u636e\u5b89\u5168\u6027\uff0c \u4f60\u5e94\u8be5\u540c\u65f6\u4f7f\u7528\u4e24\u79cd\u6301\u4e45\u5316\u529f\u80fd\u3002 \u5982\u679c\u4f60\u975e\u5e38\u5173\u5fc3\u4f60\u7684\u6570\u636e\uff0c \u4f46\u4ecd\u7136\u53ef\u4ee5\u627f\u53d7\u6570\u5206\u949f\u4ee5\u5185\u7684\u6570\u636e\u4e22\u5931\uff0c \u90a3\u4e48\u4f60\u53ef\u4ee5\u53ea\u4f7f\u7528 RDB \u6301\u4e45\u5316\u3002 \u6709\u5f88\u591a\u7528\u6237\u90fd\u53ea\u4f7f\u7528 AOF \u6301\u4e45\u5316\uff0c \u4f46\u5e76\u4e0d\u63a8\u8350\u8fd9\u79cd\u65b9\u5f0f\uff1a \u56e0\u4e3a\u5b9a\u65f6\u751f\u6210 RDB \u5feb\u7167\uff08snapshot\uff09\u975e\u5e38\u4fbf\u4e8e\u8fdb\u884c\u6570\u636e\u5e93\u5907\u4efd\uff0c \u5e76\u4e14 RDB \u6062\u590d\u6570\u636e\u96c6\u7684\u901f\u5ea6\u4e5f\u8981\u6bd4 AOF \u6062\u590d\u7684\u901f\u5ea6\u8981\u5feb\u3002","title":"\u5982\u4f55\u9009\u62e9\u54ea\u79cd\u6301\u4e45\u5316\u65b9\u5f0f"},{"location":"cs/db/redis/datatype/","text":"Redis \u6570\u636e\u7c7b\u578b \u00b6 1. NoSQL \u00b6 NoSQL(Not Only SQL )\uff0c\u610f\u5373\u4e0d\u4ec5\u4ec5\u662fSQL, \u6cdb\u6307\u975e\u5173\u7cfb\u578b\u7684\u6570\u636e\u5e93\u3002Nosql\u8fd9\u4e2a\u6280\u672f\u95e8\u7c7b,\u65e9\u671f\u5c31\u6709\u4eba\u63d0\u51fa,\u53d1\u5c55\u81f32009\u5e74\u8d8b\u52bf\u8d8a\u53d1\u9ad8\u6da8\u3002 1.1 \u5355\u673aMysql\u65f6\u4ee3 \u00b6 1.2 Memcached(\u7f13\u5b58) + Mysql + \u5782\u76f4\u62c6\u5206\uff08\u8bfb\u5199\u5206\u79bb\uff09 \u00b6 \u7f51\u7ad980%\u7684\u60c5\u51b5\u90fd\u662f\u5728\u8bfb\uff0c\u6bcf\u6b21\u90fd\u8981\u53bb\u67e5\u8be2\u6570\u636e\u5e93\u7684\u8bdd\u5c31\u5341\u5206\u7684\u9ebb\u70e6\uff01\u6240\u4ee5\u8bf4\u6211\u4eec\u5e0c\u671b\u51cf\u8f7b\u6570\u636e\u5e93\u7684\u538b\u529b\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u7f13\u5b58\u6765\u4fdd\u8bc1\u6548\u7387\uff01 1.3 \u5206\u5e93\u5206\u8868 + \u6c34\u5e73\u62c6\u5206 + Mysql\u96c6\u7fa4 \u00b6 1.4 \u5982\u4eca\u6700\u8fd1\u7684\u5e74\u4ee3 \u00b6 2. \u4e3a\u4ec0\u4e48\u662fNoSQL \u00b6 NoSQL = Not Only SQL\uff08\u4e0d\u4ec5\u4ec5\u662fSQL\uff09 Not Only Structured Query Language \u5173\u7cfb\u578b\u6570\u636e\u5e93\uff1a\u5217+\u884c\uff0c\u540c\u4e00\u4e2a\u8868\u4e0b\u6570\u636e\u7684\u7ed3\u6784\u662f\u4e00\u6837\u7684\u3002 \u975e\u5173\u7cfb\u578b\u6570\u636e\u5e93\uff1a\u6570\u636e\u5b58\u50a8\u6ca1\u6709\u56fa\u5b9a\u7684\u683c\u5f0f\uff0c\u5e76\u4e14\u53ef\u4ee5\u8fdb\u884c\u6a2a\u5411\u6269\u5c55\u3002 NoSQL\u6cdb\u6307\u975e\u5173\u7cfb\u578b\u6570\u636e\u5e93\uff0c\u968f\u7740web2.0\u4e92\u8054\u7f51\u7684\u8bde\u751f\uff0c\u4f20\u7edf\u7684\u5173\u7cfb\u578b\u6570\u636e\u5e93\u5f88\u96be\u5bf9\u4ed8web2.0\u65f6\u4ee3\uff01\u5c24\u5176\u662f\u8d85\u5927\u89c4\u6a21\u7684\u9ad8\u5e76\u53d1\u7684\u793e\u533a\uff0c\u66b4\u9732\u51fa\u6765\u5f88\u591a\u96be\u4ee5\u514b\u670d\u7684\u95ee\u9898\uff0cNoSQL\u5728\u5f53\u4eca\u5927\u6570\u636e\u73af\u5883\u4e0b\u53d1\u5c55\u7684\u5341\u5206\u8fc5\u901f\uff0cRedis\u662f\u53d1\u5c55\u6700\u5feb\u7684\u3002 \u968f\u7740\u4e92\u8054\u7f51\u7f51\u7ad9\u7684\u5174\u8d77\uff0c\u4f20\u7edf\u7684\u5173\u7cfb\u6570\u636e\u5e93\u5728\u5e94\u4ed8\u52a8\u6001\u7f51\u7ad9\uff0c\u7279\u522b\u662f\u8d85\u5927\u89c4\u6a21\u548c\u9ad8\u5e76\u53d1\u7684\u7eaf\u52a8\u6001\u7f51\u7ad9\u5df2\u7ecf\u663e\u5f97\u529b\u4e0d\u4ece\u5fc3\uff0c\u66b4\u9732\u4e86\u5f88\u591a\u96be\u4ee5\u514b\u670d\u7684\u95ee\u9898\u3002\u5982\u5546\u57ce\u7f51\u7ad9\u4e2d\u5bf9 \u5546\u54c1\u6570\u636e\u9891\u7e41\u67e5\u8be2 \u3001 \u5bf9\u70ed\u641c\u5546\u54c1\u7684\u6392\u884c\u7edf\u8ba1 \u3001 \u8ba2\u5355\u8d85\u65f6\u95ee\u9898 \u3001\u4ee5\u53ca \u5fae\u4fe1\u670b\u53cb\u5708\uff08\u97f3\u9891\uff0c\u89c6\u9891\uff09\u5b58\u50a8 \u7b49\u76f8\u5173\u4f7f\u7528\u4f20\u7edf\u7684\u5173\u7cfb\u578b\u6570\u636e\u5e93\u5b9e\u73b0\u5c31\u663e\u5f97\u975e\u5e38\u590d\u6742\uff0c\u867d\u7136\u80fd\u5b9e\u73b0\u76f8\u5e94\u529f\u80fd\u4f46\u662f\u5728\u6027\u80fd\u4e0a\u5374\u4e0d\u662f\u90a3\u4e48\u4e50\u89c2\u3002nosql\u8fd9\u4e2a\u6280\u672f\u95e8\u7c7b\u7684\u51fa\u73b0\uff0c\u66f4\u597d\u7684\u89e3\u51b3\u4e86\u8fd9\u4e9b\u95ee\u9898\uff0c\u5b83\u544a\u8bc9\u4e86\u4e16\u754c\u4e0d\u4ec5\u4ec5\u662fsql\u3002 \u4e86\u89e3\uff1a3V + 3\u9ad8 \u5927\u6570\u636e\u65f6\u4ee3\u76843V \uff1a\u4e3b\u8981\u662f\u63cf\u8ff0\u95ee\u9898\u7684 \u6d77\u91cfVelume \u591a\u6837Variety \u5b9e\u65f6Velocity \u5927\u6570\u636e\u65f6\u4ee3\u76843\u9ad8 \uff1a \u4e3b\u8981\u662f\u5bf9\u7a0b\u5e8f\u7684\u8981\u6c42 \u9ad8\u5e76\u53d1 \u9ad8\u53ef\u6269 \u9ad8\u6027\u80fd 3. NoSQL\u7684\u56db\u5927\u5206\u7c7b \u00b6 3.1 \u952e\u503c(Key-Value)\u5b58\u50a8\u6570\u636e\u5e93 \u00b6 # 1.\u8bf4\u660e: - \u8fd9\u4e00\u7c7b\u6570\u636e\u5e93\u4e3b\u8981\u4f1a\u4f7f\u7528\u5230\u4e00\u4e2a\u54c8\u5e0c\u8868\uff0c\u8fd9\u4e2a\u8868\u4e2d\u6709\u4e00\u4e2a\u7279\u5b9a\u7684\u952e\u548c\u4e00\u4e2a\u6307\u9488\u6307\u5411\u7279\u5b9a\u7684\u6570\u636e\u3002 # 2.\u7279\u70b9 - Key/value\u6a21\u578b\u5bf9\u4e8eIT\u7cfb\u7edf\u6765\u8bf4\u7684\u4f18\u52bf\u5728\u4e8e\u7b80\u5355\u3001\u6613\u90e8\u7f72\u3002 - \u4f46\u662f\u5982\u679cDBA\u53ea\u5bf9\u90e8\u5206\u503c\u8fdb\u884c\u67e5\u8be2\u6216\u66f4\u65b0\u7684\u65f6\u5019\uff0cKey/value\u5c31\u663e\u5f97\u6548\u7387\u4f4e\u4e0b\u4e86\u3002 # 3.\u76f8\u5173\u4ea7\u54c1 - Tokyo Cabinet/Tyrant, - Redis - SSDB - Voldemort - Oracle BDB 3.2 \u5217\u5b58\u50a8\u6570\u636e\u5e93 \u00b6 # 1.\u8bf4\u660e - \u8fd9\u90e8\u5206\u6570\u636e\u5e93\u901a\u5e38\u662f\u7528\u6765\u5e94\u5bf9\u5206\u5e03\u5f0f\u5b58\u50a8\u7684\u6d77\u91cf\u6570\u636e\u3002 # 2.\u7279\u70b9 - \u952e\u4ecd\u7136\u5b58\u5728\uff0c\u4f46\u662f\u5b83\u4eec\u7684\u7279\u70b9\u662f\u6307\u5411\u4e86\u591a\u4e2a\u5217\u3002\u8fd9\u4e9b\u5217\u662f\u7531\u5217\u5bb6\u65cf\u6765\u5b89\u6392\u7684\u3002 # 3.\u76f8\u5173\u4ea7\u54c1 - Cassandra\u3001HBase\u3001Riak. 3.3 \u6587\u6863\u578b\u6570\u636e\u5e93 \u00b6 # 1.\u8bf4\u660e - \u6587\u6863\u578b\u6570\u636e\u5e93\u7684\u7075\u611f\u662f\u6765\u81ea\u4e8eLotus Notes\u529e\u516c\u8f6f\u4ef6\u7684\uff0c\u800c\u4e14\u5b83\u540c\u7b2c\u4e00\u79cd\u952e\u503c\u5b58\u50a8\u76f8\u7c7b\u4f3c\u8be5\u7c7b\u578b\u7684\u6570\u636e\u6a21\u578b\u662f\u7248\u672c\u5316\u7684\u6587\u6863\uff0c\u534a\u7ed3\u6784\u5316\u7684\u6587\u6863\u4ee5\u7279\u5b9a\u7684\u683c\u5f0f\u5b58\u50a8\uff0c\u6bd4\u5982JSON\u3002\u6587\u6863\u578b\u6570\u636e\u5e93\u53ef \u4ee5\u770b\u4f5c\u662f\u952e\u503c\u6570\u636e\u5e93\u7684\u5347\u7ea7\u7248\uff0c\u5141\u8bb8\u4e4b\u95f4\u5d4c\u5957\u952e\u503c\u3002\u800c\u4e14\u6587\u6863\u578b\u6570\u636e\u5e93\u6bd4\u952e\u503c\u6570\u636e\u5e93\u7684\u67e5\u8be2\u6548\u7387\u66f4\u9ad8 # 2.\u7279\u70b9 - \u4ee5\u6587\u6863\u5f62\u5f0f\u5b58\u50a8 # 3.\u76f8\u5173\u4ea7\u54c1 - MongoDB\u3001CouchDB\u3001 MongoDb ( 4 .x ) . \u56fd\u5185\u4e5f\u6709\u6587\u6863\u578b\u6570\u636e\u5e93SequoiaDB\uff0c\u5df2\u7ecf\u5f00\u6e90\u3002 3.4 \u56fe\u5f62(Graph)\u6570\u636e\u5e93 \u00b6 # 1.\u8bf4\u660e - \u56fe\u5f62\u7ed3\u6784\u7684\u6570\u636e\u5e93\u540c\u5176\u4ed6\u884c\u5217\u4ee5\u53ca\u521a\u6027\u7ed3\u6784\u7684SQL\u6570\u636e\u5e93\u4e0d\u540c\uff0c\u5b83\u662f\u4f7f\u7528\u7075\u6d3b\u7684\u56fe\u5f62\u6a21\u578b\uff0c\u5e76\u4e14\u80fd\u591f\u6269\u5c55\u5230\u591a\u4e2a\u670d\u52a1\u5668\u4e0a\u3002 - NoSQL\u6570\u636e\u5e93\u6ca1\u6709\u6807\u51c6\u7684\u67e5\u8be2\u8bed\u8a00 ( SQL ) \uff0c\u56e0\u6b64\u8fdb\u884c\u6570\u636e\u5e93\u67e5\u8be2\u9700\u8981\u5236\u5b9a\u6570\u636e\u6a21\u578b\u3002\u8bb8\u591aNoSQL\u6570\u636e\u5e93\u90fd\u6709REST\u5f0f\u7684\u6570\u636e\u63a5\u53e3\u6216\u8005\u67e5\u8be2API\u3002 # 2.\u7279\u70b9 # 3.\u76f8\u5173\u4ea7\u54c1 - Neo4J\u3001InfoGrid\u3001 Infinite Graph\u3001 4. NoSQL\u5e94\u7528\u573a\u666f \u00b6 \u6570\u636e\u6a21\u578b\u6bd4\u8f83\u7b80\u5355 \u9700\u8981\u7075\u6d3b\u6027\u66f4\u5f3a\u7684IT\u7cfb\u7edf \u5bf9\u6570\u636e\u5e93\u6027\u80fd\u8981\u6c42\u8f83\u9ad8 \u4e0d\u9700\u8981\u9ad8\u5ea6\u7684\u6570\u636e\u4e00\u81f4\u6027 5. \u4ec0\u4e48\u662fRedis \u00b6 Redis \u5f00\u6e90 \u9075\u5faaBSD \u57fa\u4e8e\u5185\u5b58\u6570\u636e\u5b58\u50a8 \u88ab\u7528\u4e8e\u4f5c\u4e3a \u6570\u636e\u5e93 \u7f13\u5b58 \u6d88\u606f\u4e2d\u95f4\u4ef6 redis\u662f\u4e00\u4e2a\u5185\u5b58\u578b\u7684\u6570\u636e\u5e93 6. Redis\u7279\u70b9 \u00b6 Redis\u662f\u4e00\u4e2a\u9ad8\u6027\u80fdkey/value\u5185\u5b58\u578b\u6570\u636e\u5e93 Redis\u652f\u6301\u4e30\u5bcc\u7684\u6570\u636e\u7c7b\u578b Redis\u652f\u6301\u6301\u4e45\u5316 Redis\u5355\u7ebf\u7a0b,\u5355\u8fdb\u7a0b \u5355\u7ebf\u7a0b\u4e0d\u4e00\u5b9a\u6bd4\u591a\u7ebf\u7a0b\u6162\uff0c\u5728CPU\u4e2d\uff0c\u591a\u7ebf\u7a0b\u9700\u8981\u8df3\u8f6c\uff0c\u800c\u5355\u7ebf\u7a0b\u4e0d\u9700\u8981\uff0c\u51cf\u5c11\u4e86\u8df3\u8f6c\u7684\u6d88\u8017\uff0c\u6240\u4ee5\u5728\u67d0\u4e9b\u573a\u666f\u91cc\u5355\u7ebf\u7a0b\u53ef\u80fd\u6bd4\u591a\u7ebf\u7a0b\u5feb\u3002 7. Ridis\u5b89\u88c5 \u00b6 \u7565 8. redis\u5e38\u7528\u547d\u4ee4 \u00b6 8.1 set get\u547d\u4ee4\uff0c\u5b58\u503c\uff0c\u53d6\u503c \u00b6 8.2 \u5207\u6362\u6570\u636e\u5e93\uff0credis\u9ed8\u8ba4\u670916\u4e2a\u6570\u636e\u5e93\uff0c\u9ed8\u8ba4\u4f7f\u75280\u53f7\u6570\u636e\u5e93\uff0c\u53ef\u4ee5\u901a\u8fc7select\u5207\u6362 \u00b6 8.3 \u6e05\u7a7a\u5f53\u524d\u6570\u636e\u5e93\uff1aflushdb,\u6e05\u7a7a\u6240\u6709\u6570\u636e\u5e93\uff1aflushall \u00b6 8.4 \u67e5\u8be2\u6240\u6709key: keys* \u00b6 8.5 \u67e5\u8be2\u6570\u636e\u5e93\u7684\u5927\u5c0f\uff1adbsize \u00b6 8.6 \u67e5\u770bkey\u662f\u5426\u5b58\u5728\uff1aexists keyName,\u5b58\u5728\u8fd4\u56de1\uff0c\u5426\u5219\u8fd4\u56de0 \u00b6 8.7 \u79fb\u9664Key: move keyName 1 \u00b6 8.8 \u4e3akey\u8bbe\u7f6e\u8fc7\u671f\u65f6\u95f4: expire keyName timeout \u00b6 8.9 \u67e5\u770bkey\u7684\u5269\u4f59\u5b58\u6d3b\u65f6\u95f4\uff1attl keyName \u00b6 8.10 \u67e5\u770bkey\u7684\u7c7b\u578b\uff1atype keyName \u00b6 9. String\u8be6\u89e3 \u00b6 | \u547d\u4ee4 | \u8bf4\u660e | | ------------------------- | ----------------------- | | set | \u8bbe\u7f6e\u4e00\u4e2akey/value | | get | \u6839\u636ekey\u83b7\u5f97\u5bf9\u5e94\u7684value | | mset | \u4e00\u6b21\u8bbe\u7f6e\u591a\u4e2akey value | | mget | \u4e00\u6b21\u83b7\u5f97\u591a\u4e2akey\u7684value | | getset | \u83b7\u5f97\u539f\u59cbkey\u7684\u503c\uff0c\u540c\u65f6\u8bbe\u7f6e\u65b0\u503c | | strlen | \u83b7\u5f97\u5bf9\u5e94key\u5b58\u50a8value\u7684\u957f\u5ea6 | | append | \u4e3a\u5bf9\u5e94key\u7684value\u8ffd\u52a0\u5185\u5bb9 | | getrange \u7d22\u5f150\u5f00\u59cb | \u622a\u53d6value\u7684\u5185\u5bb9 | | setex | \u8bbe\u7f6e\u4e00\u4e2akey\u5b58\u6d3b\u7684\u6709\u6548\u671f\uff08\u79d2\uff09 | | psetex | \u8bbe\u7f6e\u4e00\u4e2akey\u5b58\u6d3b\u7684\u6709\u6548\u671f\uff08\u6beb\u79d2\uff09 | | setnx | \u5b58\u5728\u4e0d\u505a\u4efb\u4f55\u64cd\u4f5c,\u4e0d\u5b58\u5728\u6dfb\u52a0 | | msetnx\u539f\u5b50\u64cd\u4f5c ( \u53ea\u8981\u6709\u4e00\u4e2a\u5b58\u5728\u4e0d\u505a\u4efb\u4f55\u64cd\u4f5c ) | \u53ef\u4ee5\u540c\u65f6\u8bbe\u7f6e\u591a\u4e2akey,\u53ea\u6709\u6709\u4e00\u4e2a\u5b58\u5728\u90fd\u4e0d\u4fdd\u5b58 | | decr | \u8fdb\u884c\u6570\u503c\u7c7b\u578b\u7684-1\u64cd\u4f5c | | decrby | \u6839\u636e\u63d0\u4f9b\u7684\u6570\u636e\u8fdb\u884c\u51cf\u6cd5\u64cd\u4f5c | | Incr | \u8fdb\u884c\u6570\u503c\u7c7b\u578b\u7684+1\u64cd\u4f5c | | incrby | \u6839\u636e\u63d0\u4f9b\u7684\u6570\u636e\u8fdb\u884c\u52a0\u6cd5\u64cd\u4f5c | | Incrbyfloat | \u6839\u636e\u63d0\u4f9b\u7684\u6570\u636e\u52a0\u5165\u6d6e\u70b9\u6570 | 9.1 strlen:\u6c42value\u7684\u957f\u5ea6\uff0cappend\uff1a\u8ffd\u52a0 \u00b6 9.2 \u81ea\u589e,\u81ea\u51cf\u64cd\u4f5c\uff1aincr incrby decr decrby \u00b6 9.3 \u5b57\u7b26\u4e32\u7684\u8303\u56f4\u64cd\u4f5c\uff1agetrange,setrange \u00b6 9.4 \u8bbe\u7f6e\u8fc7\u671f\u65f6\u95f4\uff1asetex\uff08\u5982\u679c\u5b58\u5728Key\u5219\u8986\u76d6\uff0c\u4e0d\u5b58\u5728\u5219\u521b\u5efa\uff09\uff0csetnx(\u5982\u679c\u4e0d\u5b58\u5728\u5c31\u8bbe\u7f6e) \u00b6 9.5 \u6279\u91cf\u8bbe\u7f6e\u548c\u83b7\u53d6\u503c\uff1amset,mget, msetnx(\u64cd\u4f5c\u4e3a\u539f\u5b50\u6027\uff0c\u8981\u4e48\u90fd\u6210\u529f\uff0c\u8981\u4e48\u90fd\u5931\u8d25) \u00b6 9.6 \u5b58\u53d6\u5bf9\u8c61 \u00b6 9.7 \u7ec4\u5408\u64cd\u4f5c\uff1agetset\u5148\u83b7\u53d6\u518d\u8bbe\u7f6e,\u5982\u679c\u4e0d\u5b58\u5728\u5c31\u8fd4\u56denil \u00b6 String\u7c7b\u4f3c\u7684\u4f7f\u7528\u573a\u666f\uff1avalue\u9664\u4e86\u662f\u6211\u4eec\u7684\u5b57\u7b26\u4e32\u8fd8\u53ef\u4ee5\u662f\u6211\u4eec\u7684\u6570\u5b57\uff01 \u8ba1\u6570\u5668 \u7edf\u8ba1\u591a\u5355\u4f4d\u7684\u6570\u91cf \u7c89\u4e1d\u6570 \u5bf9\u8c61\u7f13\u5b58\u5b58\u50a8 10. list\u8be6\u89e3 \u00b6 list\u7684\u547d\u4ee4\u90fd\u662fl\u5f00\u5934,list \u5217\u8868 \u76f8\u5f53\u4e8ejava\u4e2dlist \u96c6\u5408 \u7279\u70b9 \u5143\u7d20\u6709\u5e8f \u4e14 \u53ef\u4ee5\u91cd\u590d | \u547d\u4ee4 | \u8bf4\u660e | | ------- | --------------------- | | lpush | \u5c06\u67d0\u4e2a\u503c\u52a0\u5165\u5230\u4e00\u4e2akey\u5217\u8868\u5934\u90e8 | | lpushx | \u540clpush,\u4f46\u662f\u5fc5\u987b\u8981\u4fdd\u8bc1\u8fd9\u4e2akey\u5b58\u5728 | | rpush | \u5c06\u67d0\u4e2a\u503c\u52a0\u5165\u5230\u4e00\u4e2akey\u5217\u8868\u672b\u5c3e | | rpushx | \u540crpush,\u4f46\u662f\u5fc5\u987b\u8981\u4fdd\u8bc1\u8fd9\u4e2akey\u5b58\u5728 | | lpop | \u8fd4\u56de\u548c\u79fb\u9664\u5217\u8868\u5de6\u8fb9\u7684\u7b2c\u4e00\u4e2a\u5143\u7d20 | | rpop | \u8fd4\u56de\u548c\u79fb\u9664\u5217\u8868\u53f3\u8fb9\u7684\u7b2c\u4e00\u4e2a\u5143\u7d20 | | lrange | \u83b7\u53d6\u67d0\u4e00\u4e2a\u4e0b\u6807\u533a\u95f4\u5185\u7684\u5143\u7d20 | | llen | \u83b7\u53d6\u5217\u8868\u5143\u7d20\u4e2a\u6570 | | lset | \u8bbe\u7f6e\u67d0\u4e00\u4e2a\u6307\u5b9a\u7d22\u5f15\u7684\u503c ( \u7d22\u5f15\u5fc5\u987b\u5b58\u5728 ) | | lindex | \u83b7\u53d6\u67d0\u4e00\u4e2a\u6307\u5b9a\u7d22\u5f15\u4f4d\u7f6e\u7684\u5143\u7d20 | | lrem | \u5220\u9664\u91cd\u590d\u5143\u7d20 | | ltrim | \u4fdd\u7559\u5217\u8868\u4e2d\u7279\u5b9a\u533a\u95f4\u5185\u7684\u5143\u7d20 | | linsert | \u5728\u67d0\u4e00\u4e2a\u5143\u7d20\u4e4b\u524d\uff0c\u4e4b\u540e\u63d2\u5165\u65b0\u5143\u7d20 | 10.1 \u5de6\u63d2\uff1alpush,\u5de6\u5220\uff1alpop \u00b6 10.2 \u53f3\u63d2\uff1arpush,\u53f3\u5220\uff1arpop \u00b6 10.3 \u83b7\u53d6\u5217\u8868\u5143\u7d20\uff1alrange \u00b6 10.4 \u901a\u8fc7\u4e0b\u6807\u83b7\u53d6\u5143\u7d20\uff1alindex \u00b6 10.5 \u83b7\u53d6\u5217\u8868\u957f\u5ea6\uff1allen \u00b6 10.6 \u79fb\u9664\u5177\u4f53\u7684\u503c\u6240\u5728\u7684\u952e\u503c\u5bf9:lrem \u5217\u8868 \u79fb\u9664\u51e0\u4e2a \u79fb\u9664\u7684\u5177\u4f53value \u00b6 10.7 \u622a\u53d6\u64cd\u4f5c\uff1altrim \u5217\u8868 \u622a\u53d6\u7684\u5f00\u59cb\u4e0b\u6807 \u622a\u53d6\u7684\u7ed3\u675f\u4e0b\u6807 \u00b6 10.8 rpoplpush:\u79fb\u9664\u5217\u8868\u4e2d\u7684\u6700\u540e\u4e00\u4e2a\u5143\u7d20\u5e76\u5c06\u8fd9\u4e2a\u5143\u7d20\u653e\u5230\u4e00\u4e2a\u65b0\u7684\u5217\u8868\u4e2d \u00b6 10.9 \u5224\u65ad\u5217\u8868\u662f\u5426\u5b58\u5728\uff1aEXISTS list \u00b6 10.10 lset:\u66f4\u65b0\u5217\u8868\u4e2d\u6307\u5b9a\u4e0b\u6807\u7684\u5143\u7d20\u7684value,\u524d\u63d0\u662f\u8be5\u4e0b\u6807\u5fc5\u987b\u6709\u503c\uff0c\u5426\u5219\u62a5\u9519 \u00b6 10.11 \u5728\u5217\u8868\u4e2d\u63d2\u5165\u503c\uff1a\u524d\u63d2\u548c\u540e\u63d2\uff1alinsert \u00b6 11. set\u8be6\u89e3 \u00b6 set\u662f\u65e0\u5e8f\u4e0d\u91cd\u590d\u96c6\u5408\uff0cset\u547d\u4ee4\u90fd\u662fs\u5f00\u5934 | \u547d\u4ee4 | \u8bf4\u660e | | ----------- | ------------------------- | | sadd | \u4e3a\u96c6\u5408\u6dfb\u52a0\u5143\u7d20 | | smembers | \u663e\u793a\u96c6\u5408\u4e2d\u6240\u6709\u5143\u7d20 \u65e0\u5e8f | | scard | \u8fd4\u56de\u96c6\u5408\u4e2d\u5143\u7d20\u7684\u4e2a\u6570 | | spop | \u968f\u673a\u8fd4\u56de\u4e00\u4e2a\u5143\u7d20 \u5e76\u5c06\u5143\u7d20\u5728\u96c6\u5408\u4e2d\u5220\u9664 | | smove | \u4ece\u4e00\u4e2a\u96c6\u5408\u4e2d\u5411\u53e6\u4e00\u4e2a\u96c6\u5408\u79fb\u52a8\u5143\u7d20 \u5fc5\u987b\u662f\u540c\u4e00\u79cd\u7c7b\u578b | | srem | \u4ece\u96c6\u5408\u4e2d\u5220\u9664\u4e00\u4e2a\u5143\u7d20 | | sismember | \u5224\u65ad\u4e00\u4e2a\u96c6\u5408\u4e2d\u662f\u5426\u542b\u6709\u8fd9\u4e2a\u5143\u7d20 | | srandmember | \u968f\u673a\u8fd4\u56de\u5143\u7d20 | | sdiff | \u53bb\u6389\u7b2c\u4e00\u4e2a\u96c6\u5408\u4e2d\u5176\u5b83\u96c6\u5408\u542b\u6709\u7684\u76f8\u540c\u5143\u7d20 | | sinter | \u6c42\u4ea4\u96c6 | | sunion | \u6c42\u548c\u96c6 | 11.1 \u6dfb\u52a0\uff1asadd \u00b6 11.2 \u67e5\u770b\u6240\u6709: smembers \u00b6 11.3 \u67e5\u8be2set\u7684\u5143\u7d20\u4e2a\u6570\uff1ascard \u00b6 11.4 \u5224\u65adset\u4e2d\u662f\u5426\u5b58\u5728\u67d0\u5143\u7d20\uff1asismember \u00b6 11.5 \u79fb\u9664\u67d0\u4e2a\u5143\u7d20\uff1asrem \u00b6 11.6 \u968f\u673a\u62bd\u53d6\u4e00\u4e2a\u5143\u7d20\uff1aSRANDMEMBER \u00b6 11.7 \u968f\u673a\u79fb\u9664\u4e00\u4e2a\u5143\u7d20\uff1aspop \u00b6 11.8 \u5c06\u4e00\u4e2a\u96c6\u5408\u4e2d\u7684\u5143\u7d20\u79fb\u52a8\u5230\u53e6\u4e00\u4e2a\u96c6\u5408\u4e2d\uff1asmove \u00b6 11.9 \u96c6\u5408\u4e4b\u95f4\u6c42\u4ea4\u5e76\u8865\u96c6\uff1asinter sunite sdiff \u00b6 \u5dee\u96c6sdiff \u00b6 \u4ea4\u96c6sinter \u00b6 \u5e76\u96c6sunion \u00b6 12. hash\u8be6\u89e3 \u00b6 hash\u7684\u5f62\u5f0f\uff1akey filed vlaue,\u76f8\u5f53\u4e8ejava\u4e2d\u7684map\u96c6\u5408 hash\u547d\u4ee4\u90fd\u662fh\u5f00\u5934 | \u547d\u4ee4 | \u8bf4\u660e | | ------------ | --------------- | | hset | \u8bbe\u7f6e\u4e00\u4e2akey/value\u5bf9 | | hget | \u83b7\u5f97\u4e00\u4e2akey\u5bf9\u5e94\u7684value | | hgetall | \u83b7\u5f97\u6240\u6709\u7684key/value\u5bf9 | | hdel | \u5220\u9664\u67d0\u4e00\u4e2akey/value\u5bf9 | | hexists | \u5224\u65ad\u4e00\u4e2akey\u662f\u5426\u5b58\u5728 | | hkeys | \u83b7\u5f97\u6240\u6709\u7684key | | hvals | \u83b7\u5f97\u6240\u6709\u7684value | | hmset | \u8bbe\u7f6e\u591a\u4e2akey/value | | hmget | \u83b7\u5f97\u591a\u4e2akey\u7684value | | hsetnx | \u8bbe\u7f6e\u4e00\u4e2a\u4e0d\u5b58\u5728\u7684key\u7684\u503c | | hincrby | \u4e3avalue\u8fdb\u884c\u52a0\u6cd5\u8fd0\u7b97 | | hincrbyfloat | \u4e3avalue\u52a0\u5165\u6d6e\u70b9\u503c | 12.1 \u5411hash\u4e2d\u6dfb\u52a0\u503c\uff1ahset \u00b6 12.2 \u5f97\u5230hash\u4e2d\u7684\u6307\u5b9afiled\u7684\u503c\uff1ahget \u00b6 12.3 \u5f97\u5230hash\u4e2d\u7684\u6240\u6709\u503c:hgetall \u00b6 12.4 \u6279\u91cf\u6dfb\u52a0\u548c\u83b7\u53d6\uff1ahmset hmget \u00b6 12.5 \u5220\u9664\u6307\u5b9a\u7684\u5b57\u6bb5\uff1ahdel \u00b6 12.6 \u83b7\u53d6hash\u7684\u5b57\u6bb5\u957f\u5ea6\uff1ahlen \u00b6 12.7 \u5224\u65adhash\u4e2d\u7684\u5b57\u6bb5\u662f\u5426\u5b58\u5728\uff1ahexist \u00b6 12.8 \u83b7\u53d6\u6240\u6709\u7684key(\u5b57\u6bb5)hkeys,\u83b7\u53d6\u6240\u6709\u7684value\uff1ahvals \u00b6 12.9 \u6307\u5b9a\u589e\u91cf\uff1ahincrby \u00b6 hash\u53d8\u66f4\u7684\u6570\u636e user name age,\u5c24\u5176\u662f\u662f\u7528\u6237\u4fe1\u606f\u4e4b\u7c7b\u7684\uff0c\u7ecf\u5e38\u53d8\u52a8\u7684\u4fe1\u606f\uff01 hash \u66f4\u9002\u5408\u4e8e\u5bf9\u8c61\u7684\u5b58\u50a8\uff0cString\u66f4\u52a0\u9002\u5408\u5b57\u7b26\u4e32\u5b58\u50a8\uff01 13. Zset\u8be6\u89e3 \u00b6 zset\u662f\u6709\u5e8f\u4e0d\u53ef\u91cd\u590d\u7684\u96c6\u5408,zset\u547d\u4ee4\u90fd\u662fz\u5f00\u5934 | \u547d\u4ee4 | \u8bf4\u660e | | ---------------------- | -------------- | | zadd | \u6dfb\u52a0\u4e00\u4e2a\u6709\u5e8f\u96c6\u5408\u5143\u7d20 | | zcard | \u8fd4\u56de\u96c6\u5408\u7684\u5143\u7d20\u4e2a\u6570 | | zrange \u5347\u5e8f zrevrange \u964d\u5e8f | \u8fd4\u56de\u4e00\u4e2a\u8303\u56f4\u5185\u7684\u5143\u7d20 | | zrangebyscore | \u6309\u7167\u5206\u6570\u67e5\u627e\u4e00\u4e2a\u8303\u56f4\u5185\u7684\u5143\u7d20 | | zrank | \u8fd4\u56de\u6392\u540d | | zrevrank | \u5012\u5e8f\u6392\u540d | | zscore | \u663e\u793a\u67d0\u4e00\u4e2a\u5143\u7d20\u7684\u5206\u6570 | | zrem | \u79fb\u9664\u67d0\u4e00\u4e2a\u5143\u7d20 | | zincrby | \u7ed9\u67d0\u4e2a\u7279\u5b9a\u5143\u7d20\u52a0\u5206 | 13.1 \u6dfb\u52a0\u6570\u636e\uff1azadd \u00b6 13.2 \u83b7\u53d6\u6240\u6709\u503c,\u6309\u7167\u7d22\u5f15\u83b7\u53d6\uff1azrange \u00b6 13.3 \u83b7\u53d6\u6240\u6709\u503c\uff0c\u6309\u7167score\u83b7\u53d6\uff1azrangebyscore \u00b6 13.4 \u79fb\u9664\u5143\u7d20\uff1azrem \u00b6 13.5 \u5f97\u5230\u5143\u7d20\u7684\u4e2a\u6570:zcard \u00b6 13.6 \u83b7\u53d6\u6307\u5b9a\u533a\u95f4\u7684\u6210\u5458\u6570\u91cf\uff1azcount \u00b6 ZSET \u5b98\u65b9 \u53ef\u6392\u5e8fSET sortSet 14. geospatial \u00b6 15. bitmaps \u00b6 bitmap\u5373\u4f4d\u5b58\u50a8\uff0c\u9002\u7528\u4e8e\u53ea\u6709\u4e24\u9762\u6027\u7684\u5185\u5bb9\u3002\u5982\uff1a\u53ef\u4ee5\u7528bitmap\u5b58\u50a8\u7528\u6237\u662f\u5426\u767b\u5f55\uff0c\u662f\u5426\u6ce8\u518c\uff0c\u662f\u5426\u6253\u5361\u7b49\u7b49\u3002bitmap\u7684\u503c\u53ea\u67090\u548c1\u4e24\u4e2a\u503c\u3002 15.1 \u5b58\u50a8\u6570\u636e\uff1asetbit \u00b6 15.2 \u83b7\u53d6\u6307\u5b9a\u4e0b\u6807\u7684\u503c\uff1agetbit \u00b6 15.3 \u7edf\u8ba1bitmap\u4e2d1\u7684\u4f4d\u6570\uff1abitcount \u00b6 16. hyperloglogs \u00b6 \u7528\u4e8e\u7edf\u8ba1\u57fa\u6570\uff08\u5373\u4e0d\u91cd\u590d\u7684\u6570\u636e\uff09,\u53ef\u4ee5\u7528\u4e8e\u7edf\u8ba1\u7f51\u9875\u8bbf\u95ee\u91cf 16.1 \u6dfb\u52a0\uff1apfadd \u00b6 16.2 \u8ba1\u6570\uff1apfcount \u00b6 16.3 \u5408\u5e76\uff1apfmerge \u00b6","title":"\u6570\u636e\u7c7b\u578b"},{"location":"cs/db/redis/datatype/#redis","text":"","title":"Redis \u6570\u636e\u7c7b\u578b"},{"location":"cs/db/redis/datatype/#1-nosql","text":"NoSQL(Not Only SQL )\uff0c\u610f\u5373\u4e0d\u4ec5\u4ec5\u662fSQL, \u6cdb\u6307\u975e\u5173\u7cfb\u578b\u7684\u6570\u636e\u5e93\u3002Nosql\u8fd9\u4e2a\u6280\u672f\u95e8\u7c7b,\u65e9\u671f\u5c31\u6709\u4eba\u63d0\u51fa,\u53d1\u5c55\u81f32009\u5e74\u8d8b\u52bf\u8d8a\u53d1\u9ad8\u6da8\u3002","title":"1. NoSQL"},{"location":"cs/db/redis/datatype/#11-mysql","text":"","title":"1.1 \u5355\u673aMysql\u65f6\u4ee3"},{"location":"cs/db/redis/datatype/#12-memcached-mysql","text":"\u7f51\u7ad980%\u7684\u60c5\u51b5\u90fd\u662f\u5728\u8bfb\uff0c\u6bcf\u6b21\u90fd\u8981\u53bb\u67e5\u8be2\u6570\u636e\u5e93\u7684\u8bdd\u5c31\u5341\u5206\u7684\u9ebb\u70e6\uff01\u6240\u4ee5\u8bf4\u6211\u4eec\u5e0c\u671b\u51cf\u8f7b\u6570\u636e\u5e93\u7684\u538b\u529b\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u7f13\u5b58\u6765\u4fdd\u8bc1\u6548\u7387\uff01","title":"1.2 Memcached(\u7f13\u5b58) + Mysql + \u5782\u76f4\u62c6\u5206\uff08\u8bfb\u5199\u5206\u79bb\uff09"},{"location":"cs/db/redis/datatype/#13-mysql","text":"","title":"1.3 \u5206\u5e93\u5206\u8868 + \u6c34\u5e73\u62c6\u5206 + Mysql\u96c6\u7fa4"},{"location":"cs/db/redis/datatype/#14","text":"","title":"1.4 \u5982\u4eca\u6700\u8fd1\u7684\u5e74\u4ee3"},{"location":"cs/db/redis/datatype/#2-nosql","text":"NoSQL = Not Only SQL\uff08\u4e0d\u4ec5\u4ec5\u662fSQL\uff09 Not Only Structured Query Language \u5173\u7cfb\u578b\u6570\u636e\u5e93\uff1a\u5217+\u884c\uff0c\u540c\u4e00\u4e2a\u8868\u4e0b\u6570\u636e\u7684\u7ed3\u6784\u662f\u4e00\u6837\u7684\u3002 \u975e\u5173\u7cfb\u578b\u6570\u636e\u5e93\uff1a\u6570\u636e\u5b58\u50a8\u6ca1\u6709\u56fa\u5b9a\u7684\u683c\u5f0f\uff0c\u5e76\u4e14\u53ef\u4ee5\u8fdb\u884c\u6a2a\u5411\u6269\u5c55\u3002 NoSQL\u6cdb\u6307\u975e\u5173\u7cfb\u578b\u6570\u636e\u5e93\uff0c\u968f\u7740web2.0\u4e92\u8054\u7f51\u7684\u8bde\u751f\uff0c\u4f20\u7edf\u7684\u5173\u7cfb\u578b\u6570\u636e\u5e93\u5f88\u96be\u5bf9\u4ed8web2.0\u65f6\u4ee3\uff01\u5c24\u5176\u662f\u8d85\u5927\u89c4\u6a21\u7684\u9ad8\u5e76\u53d1\u7684\u793e\u533a\uff0c\u66b4\u9732\u51fa\u6765\u5f88\u591a\u96be\u4ee5\u514b\u670d\u7684\u95ee\u9898\uff0cNoSQL\u5728\u5f53\u4eca\u5927\u6570\u636e\u73af\u5883\u4e0b\u53d1\u5c55\u7684\u5341\u5206\u8fc5\u901f\uff0cRedis\u662f\u53d1\u5c55\u6700\u5feb\u7684\u3002 \u968f\u7740\u4e92\u8054\u7f51\u7f51\u7ad9\u7684\u5174\u8d77\uff0c\u4f20\u7edf\u7684\u5173\u7cfb\u6570\u636e\u5e93\u5728\u5e94\u4ed8\u52a8\u6001\u7f51\u7ad9\uff0c\u7279\u522b\u662f\u8d85\u5927\u89c4\u6a21\u548c\u9ad8\u5e76\u53d1\u7684\u7eaf\u52a8\u6001\u7f51\u7ad9\u5df2\u7ecf\u663e\u5f97\u529b\u4e0d\u4ece\u5fc3\uff0c\u66b4\u9732\u4e86\u5f88\u591a\u96be\u4ee5\u514b\u670d\u7684\u95ee\u9898\u3002\u5982\u5546\u57ce\u7f51\u7ad9\u4e2d\u5bf9 \u5546\u54c1\u6570\u636e\u9891\u7e41\u67e5\u8be2 \u3001 \u5bf9\u70ed\u641c\u5546\u54c1\u7684\u6392\u884c\u7edf\u8ba1 \u3001 \u8ba2\u5355\u8d85\u65f6\u95ee\u9898 \u3001\u4ee5\u53ca \u5fae\u4fe1\u670b\u53cb\u5708\uff08\u97f3\u9891\uff0c\u89c6\u9891\uff09\u5b58\u50a8 \u7b49\u76f8\u5173\u4f7f\u7528\u4f20\u7edf\u7684\u5173\u7cfb\u578b\u6570\u636e\u5e93\u5b9e\u73b0\u5c31\u663e\u5f97\u975e\u5e38\u590d\u6742\uff0c\u867d\u7136\u80fd\u5b9e\u73b0\u76f8\u5e94\u529f\u80fd\u4f46\u662f\u5728\u6027\u80fd\u4e0a\u5374\u4e0d\u662f\u90a3\u4e48\u4e50\u89c2\u3002nosql\u8fd9\u4e2a\u6280\u672f\u95e8\u7c7b\u7684\u51fa\u73b0\uff0c\u66f4\u597d\u7684\u89e3\u51b3\u4e86\u8fd9\u4e9b\u95ee\u9898\uff0c\u5b83\u544a\u8bc9\u4e86\u4e16\u754c\u4e0d\u4ec5\u4ec5\u662fsql\u3002 \u4e86\u89e3\uff1a3V + 3\u9ad8 \u5927\u6570\u636e\u65f6\u4ee3\u76843V \uff1a\u4e3b\u8981\u662f\u63cf\u8ff0\u95ee\u9898\u7684 \u6d77\u91cfVelume \u591a\u6837Variety \u5b9e\u65f6Velocity \u5927\u6570\u636e\u65f6\u4ee3\u76843\u9ad8 \uff1a \u4e3b\u8981\u662f\u5bf9\u7a0b\u5e8f\u7684\u8981\u6c42 \u9ad8\u5e76\u53d1 \u9ad8\u53ef\u6269 \u9ad8\u6027\u80fd","title":"2. \u4e3a\u4ec0\u4e48\u662fNoSQL"},{"location":"cs/db/redis/datatype/#3-nosql","text":"","title":"3. NoSQL\u7684\u56db\u5927\u5206\u7c7b"},{"location":"cs/db/redis/datatype/#31-key-value","text":"# 1.\u8bf4\u660e: - \u8fd9\u4e00\u7c7b\u6570\u636e\u5e93\u4e3b\u8981\u4f1a\u4f7f\u7528\u5230\u4e00\u4e2a\u54c8\u5e0c\u8868\uff0c\u8fd9\u4e2a\u8868\u4e2d\u6709\u4e00\u4e2a\u7279\u5b9a\u7684\u952e\u548c\u4e00\u4e2a\u6307\u9488\u6307\u5411\u7279\u5b9a\u7684\u6570\u636e\u3002 # 2.\u7279\u70b9 - Key/value\u6a21\u578b\u5bf9\u4e8eIT\u7cfb\u7edf\u6765\u8bf4\u7684\u4f18\u52bf\u5728\u4e8e\u7b80\u5355\u3001\u6613\u90e8\u7f72\u3002 - \u4f46\u662f\u5982\u679cDBA\u53ea\u5bf9\u90e8\u5206\u503c\u8fdb\u884c\u67e5\u8be2\u6216\u66f4\u65b0\u7684\u65f6\u5019\uff0cKey/value\u5c31\u663e\u5f97\u6548\u7387\u4f4e\u4e0b\u4e86\u3002 # 3.\u76f8\u5173\u4ea7\u54c1 - Tokyo Cabinet/Tyrant, - Redis - SSDB - Voldemort - Oracle BDB","title":"3.1 \u952e\u503c(Key-Value)\u5b58\u50a8\u6570\u636e\u5e93"},{"location":"cs/db/redis/datatype/#32","text":"# 1.\u8bf4\u660e - \u8fd9\u90e8\u5206\u6570\u636e\u5e93\u901a\u5e38\u662f\u7528\u6765\u5e94\u5bf9\u5206\u5e03\u5f0f\u5b58\u50a8\u7684\u6d77\u91cf\u6570\u636e\u3002 # 2.\u7279\u70b9 - \u952e\u4ecd\u7136\u5b58\u5728\uff0c\u4f46\u662f\u5b83\u4eec\u7684\u7279\u70b9\u662f\u6307\u5411\u4e86\u591a\u4e2a\u5217\u3002\u8fd9\u4e9b\u5217\u662f\u7531\u5217\u5bb6\u65cf\u6765\u5b89\u6392\u7684\u3002 # 3.\u76f8\u5173\u4ea7\u54c1 - Cassandra\u3001HBase\u3001Riak.","title":"3.2 \u5217\u5b58\u50a8\u6570\u636e\u5e93"},{"location":"cs/db/redis/datatype/#33","text":"# 1.\u8bf4\u660e - \u6587\u6863\u578b\u6570\u636e\u5e93\u7684\u7075\u611f\u662f\u6765\u81ea\u4e8eLotus Notes\u529e\u516c\u8f6f\u4ef6\u7684\uff0c\u800c\u4e14\u5b83\u540c\u7b2c\u4e00\u79cd\u952e\u503c\u5b58\u50a8\u76f8\u7c7b\u4f3c\u8be5\u7c7b\u578b\u7684\u6570\u636e\u6a21\u578b\u662f\u7248\u672c\u5316\u7684\u6587\u6863\uff0c\u534a\u7ed3\u6784\u5316\u7684\u6587\u6863\u4ee5\u7279\u5b9a\u7684\u683c\u5f0f\u5b58\u50a8\uff0c\u6bd4\u5982JSON\u3002\u6587\u6863\u578b\u6570\u636e\u5e93\u53ef \u4ee5\u770b\u4f5c\u662f\u952e\u503c\u6570\u636e\u5e93\u7684\u5347\u7ea7\u7248\uff0c\u5141\u8bb8\u4e4b\u95f4\u5d4c\u5957\u952e\u503c\u3002\u800c\u4e14\u6587\u6863\u578b\u6570\u636e\u5e93\u6bd4\u952e\u503c\u6570\u636e\u5e93\u7684\u67e5\u8be2\u6548\u7387\u66f4\u9ad8 # 2.\u7279\u70b9 - \u4ee5\u6587\u6863\u5f62\u5f0f\u5b58\u50a8 # 3.\u76f8\u5173\u4ea7\u54c1 - MongoDB\u3001CouchDB\u3001 MongoDb ( 4 .x ) . \u56fd\u5185\u4e5f\u6709\u6587\u6863\u578b\u6570\u636e\u5e93SequoiaDB\uff0c\u5df2\u7ecf\u5f00\u6e90\u3002","title":"3.3 \u6587\u6863\u578b\u6570\u636e\u5e93"},{"location":"cs/db/redis/datatype/#34-graph","text":"# 1.\u8bf4\u660e - \u56fe\u5f62\u7ed3\u6784\u7684\u6570\u636e\u5e93\u540c\u5176\u4ed6\u884c\u5217\u4ee5\u53ca\u521a\u6027\u7ed3\u6784\u7684SQL\u6570\u636e\u5e93\u4e0d\u540c\uff0c\u5b83\u662f\u4f7f\u7528\u7075\u6d3b\u7684\u56fe\u5f62\u6a21\u578b\uff0c\u5e76\u4e14\u80fd\u591f\u6269\u5c55\u5230\u591a\u4e2a\u670d\u52a1\u5668\u4e0a\u3002 - NoSQL\u6570\u636e\u5e93\u6ca1\u6709\u6807\u51c6\u7684\u67e5\u8be2\u8bed\u8a00 ( SQL ) \uff0c\u56e0\u6b64\u8fdb\u884c\u6570\u636e\u5e93\u67e5\u8be2\u9700\u8981\u5236\u5b9a\u6570\u636e\u6a21\u578b\u3002\u8bb8\u591aNoSQL\u6570\u636e\u5e93\u90fd\u6709REST\u5f0f\u7684\u6570\u636e\u63a5\u53e3\u6216\u8005\u67e5\u8be2API\u3002 # 2.\u7279\u70b9 # 3.\u76f8\u5173\u4ea7\u54c1 - Neo4J\u3001InfoGrid\u3001 Infinite Graph\u3001","title":"3.4 \u56fe\u5f62(Graph)\u6570\u636e\u5e93"},{"location":"cs/db/redis/datatype/#4-nosql","text":"\u6570\u636e\u6a21\u578b\u6bd4\u8f83\u7b80\u5355 \u9700\u8981\u7075\u6d3b\u6027\u66f4\u5f3a\u7684IT\u7cfb\u7edf \u5bf9\u6570\u636e\u5e93\u6027\u80fd\u8981\u6c42\u8f83\u9ad8 \u4e0d\u9700\u8981\u9ad8\u5ea6\u7684\u6570\u636e\u4e00\u81f4\u6027","title":"4. NoSQL\u5e94\u7528\u573a\u666f"},{"location":"cs/db/redis/datatype/#5-redis","text":"Redis \u5f00\u6e90 \u9075\u5faaBSD \u57fa\u4e8e\u5185\u5b58\u6570\u636e\u5b58\u50a8 \u88ab\u7528\u4e8e\u4f5c\u4e3a \u6570\u636e\u5e93 \u7f13\u5b58 \u6d88\u606f\u4e2d\u95f4\u4ef6 redis\u662f\u4e00\u4e2a\u5185\u5b58\u578b\u7684\u6570\u636e\u5e93","title":"5. \u4ec0\u4e48\u662fRedis"},{"location":"cs/db/redis/datatype/#6-redis","text":"Redis\u662f\u4e00\u4e2a\u9ad8\u6027\u80fdkey/value\u5185\u5b58\u578b\u6570\u636e\u5e93 Redis\u652f\u6301\u4e30\u5bcc\u7684\u6570\u636e\u7c7b\u578b Redis\u652f\u6301\u6301\u4e45\u5316 Redis\u5355\u7ebf\u7a0b,\u5355\u8fdb\u7a0b \u5355\u7ebf\u7a0b\u4e0d\u4e00\u5b9a\u6bd4\u591a\u7ebf\u7a0b\u6162\uff0c\u5728CPU\u4e2d\uff0c\u591a\u7ebf\u7a0b\u9700\u8981\u8df3\u8f6c\uff0c\u800c\u5355\u7ebf\u7a0b\u4e0d\u9700\u8981\uff0c\u51cf\u5c11\u4e86\u8df3\u8f6c\u7684\u6d88\u8017\uff0c\u6240\u4ee5\u5728\u67d0\u4e9b\u573a\u666f\u91cc\u5355\u7ebf\u7a0b\u53ef\u80fd\u6bd4\u591a\u7ebf\u7a0b\u5feb\u3002","title":"6. Redis\u7279\u70b9"},{"location":"cs/db/redis/datatype/#7-ridis","text":"\u7565","title":"7. Ridis\u5b89\u88c5"},{"location":"cs/db/redis/datatype/#8-redis","text":"","title":"8. redis\u5e38\u7528\u547d\u4ee4"},{"location":"cs/db/redis/datatype/#81-set-get","text":"","title":"8.1 set get\u547d\u4ee4\uff0c\u5b58\u503c\uff0c\u53d6\u503c"},{"location":"cs/db/redis/datatype/#82-redis160select","text":"","title":"8.2 \u5207\u6362\u6570\u636e\u5e93\uff0credis\u9ed8\u8ba4\u670916\u4e2a\u6570\u636e\u5e93\uff0c\u9ed8\u8ba4\u4f7f\u75280\u53f7\u6570\u636e\u5e93\uff0c\u53ef\u4ee5\u901a\u8fc7select\u5207\u6362"},{"location":"cs/db/redis/datatype/#83-flushdbflushall","text":"","title":"8.3 \u6e05\u7a7a\u5f53\u524d\u6570\u636e\u5e93\uff1aflushdb,\u6e05\u7a7a\u6240\u6709\u6570\u636e\u5e93\uff1aflushall"},{"location":"cs/db/redis/datatype/#84-key-keys","text":"","title":"8.4 \u67e5\u8be2\u6240\u6709key: keys*"},{"location":"cs/db/redis/datatype/#85-dbsize","text":"","title":"8.5 \u67e5\u8be2\u6570\u636e\u5e93\u7684\u5927\u5c0f\uff1adbsize"},{"location":"cs/db/redis/datatype/#86-keyexists-keyname10","text":"","title":"8.6 \u67e5\u770bkey\u662f\u5426\u5b58\u5728\uff1aexists keyName,\u5b58\u5728\u8fd4\u56de1\uff0c\u5426\u5219\u8fd4\u56de0"},{"location":"cs/db/redis/datatype/#87-key-move-keyname-1","text":"","title":"8.7 \u79fb\u9664Key: move keyName 1"},{"location":"cs/db/redis/datatype/#88-key-expire-keyname-timeout","text":"","title":"8.8 \u4e3akey\u8bbe\u7f6e\u8fc7\u671f\u65f6\u95f4: expire keyName timeout"},{"location":"cs/db/redis/datatype/#89-keyttl-keyname","text":"","title":"8.9 \u67e5\u770bkey\u7684\u5269\u4f59\u5b58\u6d3b\u65f6\u95f4\uff1attl keyName"},{"location":"cs/db/redis/datatype/#810-keytype-keyname","text":"","title":"8.10 \u67e5\u770bkey\u7684\u7c7b\u578b\uff1atype keyName"},{"location":"cs/db/redis/datatype/#9-string","text":"| \u547d\u4ee4 | \u8bf4\u660e | | ------------------------- | ----------------------- | | set | \u8bbe\u7f6e\u4e00\u4e2akey/value | | get | \u6839\u636ekey\u83b7\u5f97\u5bf9\u5e94\u7684value | | mset | \u4e00\u6b21\u8bbe\u7f6e\u591a\u4e2akey value | | mget | \u4e00\u6b21\u83b7\u5f97\u591a\u4e2akey\u7684value | | getset | \u83b7\u5f97\u539f\u59cbkey\u7684\u503c\uff0c\u540c\u65f6\u8bbe\u7f6e\u65b0\u503c | | strlen | \u83b7\u5f97\u5bf9\u5e94key\u5b58\u50a8value\u7684\u957f\u5ea6 | | append | \u4e3a\u5bf9\u5e94key\u7684value\u8ffd\u52a0\u5185\u5bb9 | | getrange \u7d22\u5f150\u5f00\u59cb | \u622a\u53d6value\u7684\u5185\u5bb9 | | setex | \u8bbe\u7f6e\u4e00\u4e2akey\u5b58\u6d3b\u7684\u6709\u6548\u671f\uff08\u79d2\uff09 | | psetex | \u8bbe\u7f6e\u4e00\u4e2akey\u5b58\u6d3b\u7684\u6709\u6548\u671f\uff08\u6beb\u79d2\uff09 | | setnx | \u5b58\u5728\u4e0d\u505a\u4efb\u4f55\u64cd\u4f5c,\u4e0d\u5b58\u5728\u6dfb\u52a0 | | msetnx\u539f\u5b50\u64cd\u4f5c ( \u53ea\u8981\u6709\u4e00\u4e2a\u5b58\u5728\u4e0d\u505a\u4efb\u4f55\u64cd\u4f5c ) | \u53ef\u4ee5\u540c\u65f6\u8bbe\u7f6e\u591a\u4e2akey,\u53ea\u6709\u6709\u4e00\u4e2a\u5b58\u5728\u90fd\u4e0d\u4fdd\u5b58 | | decr | \u8fdb\u884c\u6570\u503c\u7c7b\u578b\u7684-1\u64cd\u4f5c | | decrby | \u6839\u636e\u63d0\u4f9b\u7684\u6570\u636e\u8fdb\u884c\u51cf\u6cd5\u64cd\u4f5c | | Incr | \u8fdb\u884c\u6570\u503c\u7c7b\u578b\u7684+1\u64cd\u4f5c | | incrby | \u6839\u636e\u63d0\u4f9b\u7684\u6570\u636e\u8fdb\u884c\u52a0\u6cd5\u64cd\u4f5c | | Incrbyfloat | \u6839\u636e\u63d0\u4f9b\u7684\u6570\u636e\u52a0\u5165\u6d6e\u70b9\u6570 |","title":"9. String\u8be6\u89e3"},{"location":"cs/db/redis/datatype/#91-strlenvalueappend","text":"","title":"9.1 strlen:\u6c42value\u7684\u957f\u5ea6\uff0cappend\uff1a\u8ffd\u52a0"},{"location":"cs/db/redis/datatype/#92-incr-incrby-decr-decrby","text":"","title":"9.2 \u81ea\u589e,\u81ea\u51cf\u64cd\u4f5c\uff1aincr incrby decr decrby"},{"location":"cs/db/redis/datatype/#93-getrangesetrange","text":"","title":"9.3 \u5b57\u7b26\u4e32\u7684\u8303\u56f4\u64cd\u4f5c\uff1agetrange,setrange"},{"location":"cs/db/redis/datatype/#94-setexkeysetnx","text":"","title":"9.4 \u8bbe\u7f6e\u8fc7\u671f\u65f6\u95f4\uff1asetex\uff08\u5982\u679c\u5b58\u5728Key\u5219\u8986\u76d6\uff0c\u4e0d\u5b58\u5728\u5219\u521b\u5efa\uff09\uff0csetnx(\u5982\u679c\u4e0d\u5b58\u5728\u5c31\u8bbe\u7f6e)"},{"location":"cs/db/redis/datatype/#95-msetmget-msetnx","text":"","title":"9.5 \u6279\u91cf\u8bbe\u7f6e\u548c\u83b7\u53d6\u503c\uff1amset,mget, msetnx(\u64cd\u4f5c\u4e3a\u539f\u5b50\u6027\uff0c\u8981\u4e48\u90fd\u6210\u529f\uff0c\u8981\u4e48\u90fd\u5931\u8d25)"},{"location":"cs/db/redis/datatype/#96","text":"","title":"9.6 \u5b58\u53d6\u5bf9\u8c61"},{"location":"cs/db/redis/datatype/#97-getsetnil","text":"String\u7c7b\u4f3c\u7684\u4f7f\u7528\u573a\u666f\uff1avalue\u9664\u4e86\u662f\u6211\u4eec\u7684\u5b57\u7b26\u4e32\u8fd8\u53ef\u4ee5\u662f\u6211\u4eec\u7684\u6570\u5b57\uff01 \u8ba1\u6570\u5668 \u7edf\u8ba1\u591a\u5355\u4f4d\u7684\u6570\u91cf \u7c89\u4e1d\u6570 \u5bf9\u8c61\u7f13\u5b58\u5b58\u50a8","title":"9.7 \u7ec4\u5408\u64cd\u4f5c\uff1agetset\u5148\u83b7\u53d6\u518d\u8bbe\u7f6e,\u5982\u679c\u4e0d\u5b58\u5728\u5c31\u8fd4\u56denil"},{"location":"cs/db/redis/datatype/#10-list","text":"list\u7684\u547d\u4ee4\u90fd\u662fl\u5f00\u5934,list \u5217\u8868 \u76f8\u5f53\u4e8ejava\u4e2dlist \u96c6\u5408 \u7279\u70b9 \u5143\u7d20\u6709\u5e8f \u4e14 \u53ef\u4ee5\u91cd\u590d | \u547d\u4ee4 | \u8bf4\u660e | | ------- | --------------------- | | lpush | \u5c06\u67d0\u4e2a\u503c\u52a0\u5165\u5230\u4e00\u4e2akey\u5217\u8868\u5934\u90e8 | | lpushx | \u540clpush,\u4f46\u662f\u5fc5\u987b\u8981\u4fdd\u8bc1\u8fd9\u4e2akey\u5b58\u5728 | | rpush | \u5c06\u67d0\u4e2a\u503c\u52a0\u5165\u5230\u4e00\u4e2akey\u5217\u8868\u672b\u5c3e | | rpushx | \u540crpush,\u4f46\u662f\u5fc5\u987b\u8981\u4fdd\u8bc1\u8fd9\u4e2akey\u5b58\u5728 | | lpop | \u8fd4\u56de\u548c\u79fb\u9664\u5217\u8868\u5de6\u8fb9\u7684\u7b2c\u4e00\u4e2a\u5143\u7d20 | | rpop | \u8fd4\u56de\u548c\u79fb\u9664\u5217\u8868\u53f3\u8fb9\u7684\u7b2c\u4e00\u4e2a\u5143\u7d20 | | lrange | \u83b7\u53d6\u67d0\u4e00\u4e2a\u4e0b\u6807\u533a\u95f4\u5185\u7684\u5143\u7d20 | | llen | \u83b7\u53d6\u5217\u8868\u5143\u7d20\u4e2a\u6570 | | lset | \u8bbe\u7f6e\u67d0\u4e00\u4e2a\u6307\u5b9a\u7d22\u5f15\u7684\u503c ( \u7d22\u5f15\u5fc5\u987b\u5b58\u5728 ) | | lindex | \u83b7\u53d6\u67d0\u4e00\u4e2a\u6307\u5b9a\u7d22\u5f15\u4f4d\u7f6e\u7684\u5143\u7d20 | | lrem | \u5220\u9664\u91cd\u590d\u5143\u7d20 | | ltrim | \u4fdd\u7559\u5217\u8868\u4e2d\u7279\u5b9a\u533a\u95f4\u5185\u7684\u5143\u7d20 | | linsert | \u5728\u67d0\u4e00\u4e2a\u5143\u7d20\u4e4b\u524d\uff0c\u4e4b\u540e\u63d2\u5165\u65b0\u5143\u7d20 |","title":"10. list\u8be6\u89e3"},{"location":"cs/db/redis/datatype/#101-lpushlpop","text":"","title":"10.1 \u5de6\u63d2\uff1alpush,\u5de6\u5220\uff1alpop"},{"location":"cs/db/redis/datatype/#102-rpushrpop","text":"","title":"10.2 \u53f3\u63d2\uff1arpush,\u53f3\u5220\uff1arpop"},{"location":"cs/db/redis/datatype/#103-lrange","text":"","title":"10.3 \u83b7\u53d6\u5217\u8868\u5143\u7d20\uff1alrange"},{"location":"cs/db/redis/datatype/#104-lindex","text":"","title":"10.4 \u901a\u8fc7\u4e0b\u6807\u83b7\u53d6\u5143\u7d20\uff1alindex"},{"location":"cs/db/redis/datatype/#105-llen","text":"","title":"10.5 \u83b7\u53d6\u5217\u8868\u957f\u5ea6\uff1allen"},{"location":"cs/db/redis/datatype/#106-lrem-value","text":"","title":"10.6 \u79fb\u9664\u5177\u4f53\u7684\u503c\u6240\u5728\u7684\u952e\u503c\u5bf9:lrem \u5217\u8868 \u79fb\u9664\u51e0\u4e2a \u79fb\u9664\u7684\u5177\u4f53value"},{"location":"cs/db/redis/datatype/#107-ltrim","text":"","title":"10.7 \u622a\u53d6\u64cd\u4f5c\uff1altrim \u5217\u8868 \u622a\u53d6\u7684\u5f00\u59cb\u4e0b\u6807 \u622a\u53d6\u7684\u7ed3\u675f\u4e0b\u6807"},{"location":"cs/db/redis/datatype/#108-rpoplpush","text":"","title":"10.8 rpoplpush:\u79fb\u9664\u5217\u8868\u4e2d\u7684\u6700\u540e\u4e00\u4e2a\u5143\u7d20\u5e76\u5c06\u8fd9\u4e2a\u5143\u7d20\u653e\u5230\u4e00\u4e2a\u65b0\u7684\u5217\u8868\u4e2d"},{"location":"cs/db/redis/datatype/#109-exists-list","text":"","title":"10.9 \u5224\u65ad\u5217\u8868\u662f\u5426\u5b58\u5728\uff1aEXISTS list"},{"location":"cs/db/redis/datatype/#1010-lsetvalue","text":"","title":"10.10 lset:\u66f4\u65b0\u5217\u8868\u4e2d\u6307\u5b9a\u4e0b\u6807\u7684\u5143\u7d20\u7684value,\u524d\u63d0\u662f\u8be5\u4e0b\u6807\u5fc5\u987b\u6709\u503c\uff0c\u5426\u5219\u62a5\u9519"},{"location":"cs/db/redis/datatype/#1011-linsert","text":"","title":"10.11 \u5728\u5217\u8868\u4e2d\u63d2\u5165\u503c\uff1a\u524d\u63d2\u548c\u540e\u63d2\uff1alinsert"},{"location":"cs/db/redis/datatype/#11-set","text":"set\u662f\u65e0\u5e8f\u4e0d\u91cd\u590d\u96c6\u5408\uff0cset\u547d\u4ee4\u90fd\u662fs\u5f00\u5934 | \u547d\u4ee4 | \u8bf4\u660e | | ----------- | ------------------------- | | sadd | \u4e3a\u96c6\u5408\u6dfb\u52a0\u5143\u7d20 | | smembers | \u663e\u793a\u96c6\u5408\u4e2d\u6240\u6709\u5143\u7d20 \u65e0\u5e8f | | scard | \u8fd4\u56de\u96c6\u5408\u4e2d\u5143\u7d20\u7684\u4e2a\u6570 | | spop | \u968f\u673a\u8fd4\u56de\u4e00\u4e2a\u5143\u7d20 \u5e76\u5c06\u5143\u7d20\u5728\u96c6\u5408\u4e2d\u5220\u9664 | | smove | \u4ece\u4e00\u4e2a\u96c6\u5408\u4e2d\u5411\u53e6\u4e00\u4e2a\u96c6\u5408\u79fb\u52a8\u5143\u7d20 \u5fc5\u987b\u662f\u540c\u4e00\u79cd\u7c7b\u578b | | srem | \u4ece\u96c6\u5408\u4e2d\u5220\u9664\u4e00\u4e2a\u5143\u7d20 | | sismember | \u5224\u65ad\u4e00\u4e2a\u96c6\u5408\u4e2d\u662f\u5426\u542b\u6709\u8fd9\u4e2a\u5143\u7d20 | | srandmember | \u968f\u673a\u8fd4\u56de\u5143\u7d20 | | sdiff | \u53bb\u6389\u7b2c\u4e00\u4e2a\u96c6\u5408\u4e2d\u5176\u5b83\u96c6\u5408\u542b\u6709\u7684\u76f8\u540c\u5143\u7d20 | | sinter | \u6c42\u4ea4\u96c6 | | sunion | \u6c42\u548c\u96c6 |","title":"11. set\u8be6\u89e3"},{"location":"cs/db/redis/datatype/#111-sadd","text":"","title":"11.1 \u6dfb\u52a0\uff1asadd"},{"location":"cs/db/redis/datatype/#112-smembers","text":"","title":"11.2 \u67e5\u770b\u6240\u6709: smembers"},{"location":"cs/db/redis/datatype/#113-setscard","text":"","title":"11.3 \u67e5\u8be2set\u7684\u5143\u7d20\u4e2a\u6570\uff1ascard"},{"location":"cs/db/redis/datatype/#114-setsismember","text":"","title":"11.4 \u5224\u65adset\u4e2d\u662f\u5426\u5b58\u5728\u67d0\u5143\u7d20\uff1asismember"},{"location":"cs/db/redis/datatype/#115-srem","text":"","title":"11.5 \u79fb\u9664\u67d0\u4e2a\u5143\u7d20\uff1asrem"},{"location":"cs/db/redis/datatype/#116-srandmember","text":"","title":"11.6 \u968f\u673a\u62bd\u53d6\u4e00\u4e2a\u5143\u7d20\uff1aSRANDMEMBER"},{"location":"cs/db/redis/datatype/#117-spop","text":"","title":"11.7 \u968f\u673a\u79fb\u9664\u4e00\u4e2a\u5143\u7d20\uff1aspop"},{"location":"cs/db/redis/datatype/#118-smove","text":"","title":"11.8 \u5c06\u4e00\u4e2a\u96c6\u5408\u4e2d\u7684\u5143\u7d20\u79fb\u52a8\u5230\u53e6\u4e00\u4e2a\u96c6\u5408\u4e2d\uff1asmove"},{"location":"cs/db/redis/datatype/#119-sinter-sunite-sdiff","text":"","title":"11.9 \u96c6\u5408\u4e4b\u95f4\u6c42\u4ea4\u5e76\u8865\u96c6\uff1asinter sunite sdiff"},{"location":"cs/db/redis/datatype/#sdiff","text":"","title":"\u5dee\u96c6sdiff"},{"location":"cs/db/redis/datatype/#sinter","text":"","title":"\u4ea4\u96c6sinter"},{"location":"cs/db/redis/datatype/#sunion","text":"","title":"\u5e76\u96c6sunion"},{"location":"cs/db/redis/datatype/#12-hash","text":"hash\u7684\u5f62\u5f0f\uff1akey filed vlaue,\u76f8\u5f53\u4e8ejava\u4e2d\u7684map\u96c6\u5408 hash\u547d\u4ee4\u90fd\u662fh\u5f00\u5934 | \u547d\u4ee4 | \u8bf4\u660e | | ------------ | --------------- | | hset | \u8bbe\u7f6e\u4e00\u4e2akey/value\u5bf9 | | hget | \u83b7\u5f97\u4e00\u4e2akey\u5bf9\u5e94\u7684value | | hgetall | \u83b7\u5f97\u6240\u6709\u7684key/value\u5bf9 | | hdel | \u5220\u9664\u67d0\u4e00\u4e2akey/value\u5bf9 | | hexists | \u5224\u65ad\u4e00\u4e2akey\u662f\u5426\u5b58\u5728 | | hkeys | \u83b7\u5f97\u6240\u6709\u7684key | | hvals | \u83b7\u5f97\u6240\u6709\u7684value | | hmset | \u8bbe\u7f6e\u591a\u4e2akey/value | | hmget | \u83b7\u5f97\u591a\u4e2akey\u7684value | | hsetnx | \u8bbe\u7f6e\u4e00\u4e2a\u4e0d\u5b58\u5728\u7684key\u7684\u503c | | hincrby | \u4e3avalue\u8fdb\u884c\u52a0\u6cd5\u8fd0\u7b97 | | hincrbyfloat | \u4e3avalue\u52a0\u5165\u6d6e\u70b9\u503c |","title":"12. hash\u8be6\u89e3"},{"location":"cs/db/redis/datatype/#121-hashhset","text":"","title":"12.1 \u5411hash\u4e2d\u6dfb\u52a0\u503c\uff1ahset"},{"location":"cs/db/redis/datatype/#122-hashfiledhget","text":"","title":"12.2 \u5f97\u5230hash\u4e2d\u7684\u6307\u5b9afiled\u7684\u503c\uff1ahget"},{"location":"cs/db/redis/datatype/#123-hashhgetall","text":"","title":"12.3 \u5f97\u5230hash\u4e2d\u7684\u6240\u6709\u503c:hgetall"},{"location":"cs/db/redis/datatype/#124-hmset-hmget","text":"","title":"12.4 \u6279\u91cf\u6dfb\u52a0\u548c\u83b7\u53d6\uff1ahmset hmget"},{"location":"cs/db/redis/datatype/#125-hdel","text":"","title":"12.5 \u5220\u9664\u6307\u5b9a\u7684\u5b57\u6bb5\uff1ahdel"},{"location":"cs/db/redis/datatype/#126-hashhlen","text":"","title":"12.6 \u83b7\u53d6hash\u7684\u5b57\u6bb5\u957f\u5ea6\uff1ahlen"},{"location":"cs/db/redis/datatype/#127-hashhexist","text":"","title":"12.7 \u5224\u65adhash\u4e2d\u7684\u5b57\u6bb5\u662f\u5426\u5b58\u5728\uff1ahexist"},{"location":"cs/db/redis/datatype/#128-keyhkeysvaluehvals","text":"","title":"12.8 \u83b7\u53d6\u6240\u6709\u7684key(\u5b57\u6bb5)hkeys,\u83b7\u53d6\u6240\u6709\u7684value\uff1ahvals"},{"location":"cs/db/redis/datatype/#129-hincrby","text":"hash\u53d8\u66f4\u7684\u6570\u636e user name age,\u5c24\u5176\u662f\u662f\u7528\u6237\u4fe1\u606f\u4e4b\u7c7b\u7684\uff0c\u7ecf\u5e38\u53d8\u52a8\u7684\u4fe1\u606f\uff01 hash \u66f4\u9002\u5408\u4e8e\u5bf9\u8c61\u7684\u5b58\u50a8\uff0cString\u66f4\u52a0\u9002\u5408\u5b57\u7b26\u4e32\u5b58\u50a8\uff01","title":"12.9 \u6307\u5b9a\u589e\u91cf\uff1ahincrby"},{"location":"cs/db/redis/datatype/#13-zset","text":"zset\u662f\u6709\u5e8f\u4e0d\u53ef\u91cd\u590d\u7684\u96c6\u5408,zset\u547d\u4ee4\u90fd\u662fz\u5f00\u5934 | \u547d\u4ee4 | \u8bf4\u660e | | ---------------------- | -------------- | | zadd | \u6dfb\u52a0\u4e00\u4e2a\u6709\u5e8f\u96c6\u5408\u5143\u7d20 | | zcard | \u8fd4\u56de\u96c6\u5408\u7684\u5143\u7d20\u4e2a\u6570 | | zrange \u5347\u5e8f zrevrange \u964d\u5e8f | \u8fd4\u56de\u4e00\u4e2a\u8303\u56f4\u5185\u7684\u5143\u7d20 | | zrangebyscore | \u6309\u7167\u5206\u6570\u67e5\u627e\u4e00\u4e2a\u8303\u56f4\u5185\u7684\u5143\u7d20 | | zrank | \u8fd4\u56de\u6392\u540d | | zrevrank | \u5012\u5e8f\u6392\u540d | | zscore | \u663e\u793a\u67d0\u4e00\u4e2a\u5143\u7d20\u7684\u5206\u6570 | | zrem | \u79fb\u9664\u67d0\u4e00\u4e2a\u5143\u7d20 | | zincrby | \u7ed9\u67d0\u4e2a\u7279\u5b9a\u5143\u7d20\u52a0\u5206 |","title":"13. Zset\u8be6\u89e3"},{"location":"cs/db/redis/datatype/#131-zadd","text":"","title":"13.1 \u6dfb\u52a0\u6570\u636e\uff1azadd"},{"location":"cs/db/redis/datatype/#132-zrange","text":"","title":"13.2 \u83b7\u53d6\u6240\u6709\u503c,\u6309\u7167\u7d22\u5f15\u83b7\u53d6\uff1azrange"},{"location":"cs/db/redis/datatype/#133-scorezrangebyscore","text":"","title":"13.3 \u83b7\u53d6\u6240\u6709\u503c\uff0c\u6309\u7167score\u83b7\u53d6\uff1azrangebyscore"},{"location":"cs/db/redis/datatype/#134-zrem","text":"","title":"13.4 \u79fb\u9664\u5143\u7d20\uff1azrem"},{"location":"cs/db/redis/datatype/#135-zcard","text":"","title":"13.5 \u5f97\u5230\u5143\u7d20\u7684\u4e2a\u6570:zcard"},{"location":"cs/db/redis/datatype/#136-zcount","text":"ZSET \u5b98\u65b9 \u53ef\u6392\u5e8fSET sortSet","title":"13.6 \u83b7\u53d6\u6307\u5b9a\u533a\u95f4\u7684\u6210\u5458\u6570\u91cf\uff1azcount"},{"location":"cs/db/redis/datatype/#14-geospatial","text":"","title":"14. geospatial"},{"location":"cs/db/redis/datatype/#15-bitmaps","text":"bitmap\u5373\u4f4d\u5b58\u50a8\uff0c\u9002\u7528\u4e8e\u53ea\u6709\u4e24\u9762\u6027\u7684\u5185\u5bb9\u3002\u5982\uff1a\u53ef\u4ee5\u7528bitmap\u5b58\u50a8\u7528\u6237\u662f\u5426\u767b\u5f55\uff0c\u662f\u5426\u6ce8\u518c\uff0c\u662f\u5426\u6253\u5361\u7b49\u7b49\u3002bitmap\u7684\u503c\u53ea\u67090\u548c1\u4e24\u4e2a\u503c\u3002","title":"15. bitmaps"},{"location":"cs/db/redis/datatype/#151-setbit","text":"","title":"15.1 \u5b58\u50a8\u6570\u636e\uff1asetbit"},{"location":"cs/db/redis/datatype/#152-getbit","text":"","title":"15.2 \u83b7\u53d6\u6307\u5b9a\u4e0b\u6807\u7684\u503c\uff1agetbit"},{"location":"cs/db/redis/datatype/#153-bitmap1bitcount","text":"","title":"15.3 \u7edf\u8ba1bitmap\u4e2d1\u7684\u4f4d\u6570\uff1abitcount"},{"location":"cs/db/redis/datatype/#16-hyperloglogs","text":"\u7528\u4e8e\u7edf\u8ba1\u57fa\u6570\uff08\u5373\u4e0d\u91cd\u590d\u7684\u6570\u636e\uff09,\u53ef\u4ee5\u7528\u4e8e\u7edf\u8ba1\u7f51\u9875\u8bbf\u95ee\u91cf","title":"16. hyperloglogs"},{"location":"cs/db/redis/datatype/#161-pfadd","text":"","title":"16.1 \u6dfb\u52a0\uff1apfadd"},{"location":"cs/db/redis/datatype/#162-pfcount","text":"","title":"16.2 \u8ba1\u6570\uff1apfcount"},{"location":"cs/db/redis/datatype/#163-pfmerge","text":"","title":"16.3 \u5408\u5e76\uff1apfmerge"},{"location":"cs/db/redis/work/","text":"Redis \u4e8b\u52a1 \u00b6 redis\u7684\u4e8b\u52a1\u64cd\u4f5c \u00b6 redis\u7684\u5355\u6761\u547d\u4ee4\u4fdd\u8bc1\u539f\u5b50\u6027\uff0c\u4f46\u662fredis\u7684\u4e8b\u52a1\u4e0d\u4fdd\u8bc1\u539f\u5b50\u6027 redis\u7684\u4e8b\u52a1\u6ca1\u6709\u9694\u79bb\u7ea7\u522b\u3002redis\u4e8b\u52a1\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u7ec4\u547d\u4ee4\u7684\u96c6\u5408\uff0c\u8fd9\u4e9b\u547d\u4ee4\u5728\u4e8b\u52a1\u4e2d\u4f1a\u88ab\u5e8f\u5217\u5316\uff0c\u7136\u540e\u6309\u7167\u547d\u4ee4\u7684\u5148\u540e\u987a\u5e8f\u4e00\u6b21\u6027\u5168\u90e8\u6267\u884c\uff0c\u5728\u6267\u884c\u7684\u8fc7\u7a0b\u4e2d\u4e0d\u80fd\u88ab\u6253\u65ad\u3002 \u5373\uff1aredis\u7684\u4e8b\u52a1\u5728\u6267\u884c\u65f6\u662f\u4e00\u6b21\u6027\uff0c\u987a\u5e8f\u6027\u548c\u6392\u4ed6\u6027\u7684 \u5f00\u542f\u4e8b\u52a1\uff1amulti \u00b6 \u547d\u4ee4\u5165\u961f: \u00b6 \u6267\u884c\u4e8b\u52a1:exec \u00b6 \u653e\u5f03\u4e8b\u52a1\uff1adiscard \u00b6 \u4e8b\u52a1\u5f02\u5e38 \u00b6 \u5728\u5f00\u542f\u4e8b\u52a1\u540e\uff0c\u5982\u679c\u7f16\u5199\u7684\u547d\u4ee4\u6709\u8bed\u6cd5\u9519\u8bef\uff0c\u5219\u4f1a\u7acb\u5373\u62a5\u9519\uff0c\u4e14\u6574\u4e2a\u4e8b\u52a1\u961f\u5217\u4e2d\u7684\u6240\u6709\u547d\u4ee4\u90fd\u4e0d\u4f1a\u6267\u884c. \u5982\u679c\u5728\u5f00\u542f\u4e8b\u52a1\u540e\uff0c\u547d\u4ee4\u4e2d\u6ca1\u6709\u8bed\u6cd5\u9519\u8bef\uff0c\u4f46\u662f\u5374\u6709\u8fd0\u884c\u9519\u8bef\uff0c\u5373\u547d\u4ee4\u80fd\u591f\u6210\u529f\u5165\u961f\uff0c\u4f46\u662f\u4e0d\u80fd\u591f\u6267\u884c\uff0c\u5219\u5728\u4e8b\u52a1\u63d0\u4ea4\u540e\u53ea\u6709\u8be5\u547d\u4ee4\u629b\u9519\uff0c\u5176\u4ed6\u547d\u4ee4\u53ef\u4ee5\u6b63\u5e38\u6267\u884c\u3002 redis\u7684\u4e50\u89c2\u9501 \u00b6 \u4e50\u89c2\u9501\uff1a\u5c31\u662f\u5b83\u4f1a\u8ba4\u4e3a\u6240\u6709\u7684\u4e8b\u52a1\u90fd\u4e0d\u4f1a\u5931\u8d25\uff0c\u56e0\u6b64\u5b83\u4e0d\u4f1a\u7ed9\u4e8b\u52a1\u4e0a\u9501\u3002\u5b83\u53ea\u4f1a\u5728\u66f4\u65b0\u7684\u65f6\u5019\u5224\u65ad\u5728\u6b64\u671f\u95f4\u662f\u5426\u6709\u4eba\u4fee\u6539\u8fc7\u6570\u636e \u60b2\u89c2\u9501\uff1a\u5b83\u8ba4\u4e3a\u6240\u6709\u7684\u4e8b\u52a1\u90fd\u4f1a\u6267\u884c\u5931\u8d25\uff0c\u56e0\u6b64\u505a\u4efb\u4f55\u4e8b\u60c5\u5b83\u90fd\u4f1a\u52a0\u9501\uff0c\u8fd9\u6837\u662f\u53ca\u5176\u5f71\u54cd\u6548\u7387\u7684\u3002 redis\u7684\u4e50\u89c2\u9501\u5b9e\u73b0\u547d\u4ee4\uff1awatch \u00b6 \u5355\u7ebf\u7a0b\u4e0b\u8fd0\u884c \u00b6 \u591a\u7ebf\u7a0b\u4fee\u6539\u503c \u00b6 \u5982\u679c\u4e8b\u52a1\u6267\u884c\u5931\u8d25\uff0c\u9700\u8981\u5148\u89e3\u9501\uff0c\u518d\u52a0\u9501\uff0c\u89e3\u9501\u547d\u4ee4\u4e3a\uff1aunwatch \u00b6","title":"\u4e8b\u52a1"},{"location":"cs/db/redis/work/#redis","text":"","title":"Redis \u4e8b\u52a1"},{"location":"cs/db/redis/work/#redis_1","text":"redis\u7684\u5355\u6761\u547d\u4ee4\u4fdd\u8bc1\u539f\u5b50\u6027\uff0c\u4f46\u662fredis\u7684\u4e8b\u52a1\u4e0d\u4fdd\u8bc1\u539f\u5b50\u6027 redis\u7684\u4e8b\u52a1\u6ca1\u6709\u9694\u79bb\u7ea7\u522b\u3002redis\u4e8b\u52a1\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u7ec4\u547d\u4ee4\u7684\u96c6\u5408\uff0c\u8fd9\u4e9b\u547d\u4ee4\u5728\u4e8b\u52a1\u4e2d\u4f1a\u88ab\u5e8f\u5217\u5316\uff0c\u7136\u540e\u6309\u7167\u547d\u4ee4\u7684\u5148\u540e\u987a\u5e8f\u4e00\u6b21\u6027\u5168\u90e8\u6267\u884c\uff0c\u5728\u6267\u884c\u7684\u8fc7\u7a0b\u4e2d\u4e0d\u80fd\u88ab\u6253\u65ad\u3002 \u5373\uff1aredis\u7684\u4e8b\u52a1\u5728\u6267\u884c\u65f6\u662f\u4e00\u6b21\u6027\uff0c\u987a\u5e8f\u6027\u548c\u6392\u4ed6\u6027\u7684","title":"redis\u7684\u4e8b\u52a1\u64cd\u4f5c"},{"location":"cs/db/redis/work/#multi","text":"","title":"\u5f00\u542f\u4e8b\u52a1\uff1amulti"},{"location":"cs/db/redis/work/#_1","text":"","title":"\u547d\u4ee4\u5165\u961f:"},{"location":"cs/db/redis/work/#exec","text":"","title":"\u6267\u884c\u4e8b\u52a1:exec"},{"location":"cs/db/redis/work/#discard","text":"","title":"\u653e\u5f03\u4e8b\u52a1\uff1adiscard"},{"location":"cs/db/redis/work/#_2","text":"\u5728\u5f00\u542f\u4e8b\u52a1\u540e\uff0c\u5982\u679c\u7f16\u5199\u7684\u547d\u4ee4\u6709\u8bed\u6cd5\u9519\u8bef\uff0c\u5219\u4f1a\u7acb\u5373\u62a5\u9519\uff0c\u4e14\u6574\u4e2a\u4e8b\u52a1\u961f\u5217\u4e2d\u7684\u6240\u6709\u547d\u4ee4\u90fd\u4e0d\u4f1a\u6267\u884c. \u5982\u679c\u5728\u5f00\u542f\u4e8b\u52a1\u540e\uff0c\u547d\u4ee4\u4e2d\u6ca1\u6709\u8bed\u6cd5\u9519\u8bef\uff0c\u4f46\u662f\u5374\u6709\u8fd0\u884c\u9519\u8bef\uff0c\u5373\u547d\u4ee4\u80fd\u591f\u6210\u529f\u5165\u961f\uff0c\u4f46\u662f\u4e0d\u80fd\u591f\u6267\u884c\uff0c\u5219\u5728\u4e8b\u52a1\u63d0\u4ea4\u540e\u53ea\u6709\u8be5\u547d\u4ee4\u629b\u9519\uff0c\u5176\u4ed6\u547d\u4ee4\u53ef\u4ee5\u6b63\u5e38\u6267\u884c\u3002","title":"\u4e8b\u52a1\u5f02\u5e38"},{"location":"cs/db/redis/work/#redis_2","text":"\u4e50\u89c2\u9501\uff1a\u5c31\u662f\u5b83\u4f1a\u8ba4\u4e3a\u6240\u6709\u7684\u4e8b\u52a1\u90fd\u4e0d\u4f1a\u5931\u8d25\uff0c\u56e0\u6b64\u5b83\u4e0d\u4f1a\u7ed9\u4e8b\u52a1\u4e0a\u9501\u3002\u5b83\u53ea\u4f1a\u5728\u66f4\u65b0\u7684\u65f6\u5019\u5224\u65ad\u5728\u6b64\u671f\u95f4\u662f\u5426\u6709\u4eba\u4fee\u6539\u8fc7\u6570\u636e \u60b2\u89c2\u9501\uff1a\u5b83\u8ba4\u4e3a\u6240\u6709\u7684\u4e8b\u52a1\u90fd\u4f1a\u6267\u884c\u5931\u8d25\uff0c\u56e0\u6b64\u505a\u4efb\u4f55\u4e8b\u60c5\u5b83\u90fd\u4f1a\u52a0\u9501\uff0c\u8fd9\u6837\u662f\u53ca\u5176\u5f71\u54cd\u6548\u7387\u7684\u3002","title":"redis\u7684\u4e50\u89c2\u9501"},{"location":"cs/db/redis/work/#rediswatch","text":"","title":"redis\u7684\u4e50\u89c2\u9501\u5b9e\u73b0\u547d\u4ee4\uff1awatch"},{"location":"cs/db/redis/work/#_3","text":"","title":"\u5355\u7ebf\u7a0b\u4e0b\u8fd0\u884c"},{"location":"cs/db/redis/work/#_4","text":"","title":"\u591a\u7ebf\u7a0b\u4fee\u6539\u503c"},{"location":"cs/db/redis/work/#unwatch","text":"","title":"\u5982\u679c\u4e8b\u52a1\u6267\u884c\u5931\u8d25\uff0c\u9700\u8981\u5148\u89e3\u9501\uff0c\u518d\u52a0\u9501\uff0c\u89e3\u9501\u547d\u4ee4\u4e3a\uff1aunwatch"},{"location":"cs/hpc/","text":"\u9ad8\u6027\u80fd\u8ba1\u7b97 \u00b6 Abstract \u6211\u7684 mentor\uff08\u5927\ud83d\udc2e\uff09 \u5c31\u662f\u505a hpc \u7684\uff0c\u5f53\u521d\u5b9e\u4e60\u65f6\u4e5f\u6d89\u53ca\u5230\u4e00\u70b9\u70b9\u77e5\u8bc6\uff0c\u6240\u4ee5\u5bf9 hpc \u4e5f\u4ea7\u751f\u4e86\u4e00\u70b9\u70b9\u5174\u8da3\u3002\u867d\u7136\u8bf4\u4ee5\u540e\u5e94\u8be5\u4e0d\u4f1a\u505a hpc\uff0c\u4f46\u662f\u5b66\u4e60\u76f8\u5173\u90e8\u5206\u7684\u77e5\u8bc6\u662f\u6709\u5fc5\u8981\u7684\u3002 Table of Contents \u00b6 \u6982\u8bba \u5411\u91cf\u5316\u8ba1\u7b97 GPU \u7f16\u7a0b MPI \u57fa\u7840 OpenMP \u57fa\u7840 Reference \u00b6 HPC 101 \u8d85\u7b97\u5c0f\u5b66\u671f \u5317\u5927\u672a\u540d\u8d85\u7b97\u961f \u9ad8\u6027\u80fd\u8ba1\u7b97\u5165\u95e8 CUDA docs MPI Tutorials","title":"\u9ad8\u6027\u80fd\u8ba1\u7b97"},{"location":"cs/hpc/#_1","text":"Abstract \u6211\u7684 mentor\uff08\u5927\ud83d\udc2e\uff09 \u5c31\u662f\u505a hpc \u7684\uff0c\u5f53\u521d\u5b9e\u4e60\u65f6\u4e5f\u6d89\u53ca\u5230\u4e00\u70b9\u70b9\u77e5\u8bc6\uff0c\u6240\u4ee5\u5bf9 hpc \u4e5f\u4ea7\u751f\u4e86\u4e00\u70b9\u70b9\u5174\u8da3\u3002\u867d\u7136\u8bf4\u4ee5\u540e\u5e94\u8be5\u4e0d\u4f1a\u505a hpc\uff0c\u4f46\u662f\u5b66\u4e60\u76f8\u5173\u90e8\u5206\u7684\u77e5\u8bc6\u662f\u6709\u5fc5\u8981\u7684\u3002","title":"\u9ad8\u6027\u80fd\u8ba1\u7b97"},{"location":"cs/hpc/#table-of-contents","text":"\u6982\u8bba \u5411\u91cf\u5316\u8ba1\u7b97 GPU \u7f16\u7a0b MPI \u57fa\u7840 OpenMP \u57fa\u7840","title":"Table of Contents"},{"location":"cs/hpc/#reference","text":"HPC 101 \u8d85\u7b97\u5c0f\u5b66\u671f \u5317\u5927\u672a\u540d\u8d85\u7b97\u961f \u9ad8\u6027\u80fd\u8ba1\u7b97\u5165\u95e8 CUDA docs MPI Tutorials","title":"Reference"},{"location":"cs/hpc/gpu/","text":"GPU \u7f16\u7a0b \u00b6","title":"GPU \u7f16\u7a0b"},{"location":"cs/hpc/gpu/#gpu","text":"","title":"GPU \u7f16\u7a0b"},{"location":"cs/hpc/mpi/","text":"MPI \u57fa\u7840 \u00b6 \u7ea6 2264 \u4e2a\u5b57 196 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 10 \u5206\u949f Abstract \u53c2\u8003\uff1a MPI \u5e76\u884c\u7f16\u7a0b\u5165\u95e8 MPI \u7b80\u4ecb \u00b6 \u4ec0\u4e48\u662f MPI \u662f\u51fd\u6570\u5e93\u89c4\u8303\uff0c\u800c\u4e0d\u662f\u5e76\u884c\u8bed\u8a00\uff1b\u64cd\u4f5c\u5982\u540c\u5e93\u51fd\u6570\u8c03\u7528 \u2013 \u662f\u4e00\u79cd\u6807\u51c6\u548c\u89c4\u8303\uff0c\u800c\u975e\u67d0\u4e2a\u5bf9\u5b83\u7684\u5177\u4f53\u5b9e\u73b0\uff08MPICH\u7b49\uff09\uff0c\u4e0e\u7f16\u7a0b\u8bed\u8a00\u65e0\u5173 \u2013 \u662f\u4e00\u79cd\u6d88\u606f\u4f20\u9012\u7f16\u7a0b\u6a21\u578b\uff0c\u5e76\u6210\u4e3a\u8fd9\u7c7b\u7f16\u7a0b\u6a21\u578b\u7684\u4ee3\u8868 MPI \u7684\u4ea7\u751f \u6269\u5145\u5e76\u884c I/O \u8fdc\u7a0b\u5b58\u50a8\u8bbf\u95ee \u52a8\u6001\u8fdb\u7a0b\u7ba1\u7406 MPI \u7684\u8bed\u8a00\u7ed1\u5b9a: Fortran\u3001C \u4e3b\u8981\u7684 MPI \u5b9e\u73b0: MPICH\u3001LAMMPI MPI \u7a0b\u5e8f\u7f16\u8bd1\u4e0e\u8fd0\u884c \u7a0b\u5e8f\u7f16\u8bd1\uff1a C: % mpicc - o prog prog . c Fortran: % mpif77 - o prog prog . f \u7a0b\u5e8f\u8fd0\u884c % mpirun - np 4 prog \u7a0b\u5e8f\u6267\u884c\u8fc7\u7a0b\u4e2d\u4e0d\u80fd\u52a8\u6001\u6539\u53d8\u8fdb\u7a0b\u7684\u4e2a\u6570 \u7533\u8bf7\u7684\u8fdb\u7a0b\u6570 np \u4e0e\u5b9e\u9645\u5904\u7406\u5668\u4e2a\u6570\u65e0\u5173 MPI \u57fa\u7840\u77e5\u8bc6 \u00b6 \u8fdb\u7a0b\u4e0e\u6d88\u606f\u4f20\u9012 \u00b6 \u5355\u4e2a\u8fdb\u7a0b \u5355\u673a\u5185\u591a\u4e2a\u8fdb\u7a0b \u5305\u542b\u4e8e\u901a\u8fc7\u7f51\u7edc\u8054\u63a5\u7684\u4e0d\u540c\u5904\u7406\u5668\u7684\u591a\u4e2a\u8fdb\u7a0b \u8fdb\u7a0b\u72ec\u7acb\u5b58\u5728\uff0c\u5e76\u4f4d\u4e8e\u4e0d\u540c\u7684\u5904\u7406\u5668 \u8fdb\u7a0b\u95f4\u76f8\u4e92\u4fe1\u606f\u4ea4\u6362\uff0c\u53ef\u4f9d\u9760\u6d88\u606f\u4f20\u9012 \u6700\u57fa\u672c\u7684\u6d88\u606f\u4f20\u9012\u64cd\u4f5c\u5305\u62ec\u53d1\u9001\u6d88\u606f send\u3001\u63a5\u53d7\u6d88\u606f receive\u3001\u8fdb\u7a0b\u540c\u6b65 barrier\uff0c\u89c4\u7ea6 reduction \u7b49 MPI \u91cd\u8981\u6982\u5ff5 \u00b6 \u8fdb\u7a0b\u7ec4\uff08process group\uff09\uff1aMPI \u7a0b\u5e8f\u7684\u5168\u90e8\u8fdb\u7a0b\u96c6\u5408\u7684 \u4e00\u4e2a\u6709\u5e8f\u5b50\u96c6 \u4e14\u8fdb\u7a0b\u7ec4\u4e2d\u6bcf\u4e2a\u8fdb\u7a0b\u88ab\u8d4b\u4e88\u4e00\u4e2a\u5728\u8be5\u7ec4\u4e2d\u552f\u4e00\u7684\u5e8f\u53f7\uff08rank\uff09\uff0c\u7528\u4e8e\u5728\u8be5\u7ec4\u4e2d\u6807\u8bc6\u8be5\u8fdb\u7a0b\u3002 \u901a\u4fe1\u5668\uff08communicator\uff09 \u7406\u89e3\u4e3a\u4e00\u7c7b\u8fdb\u7a0b\u7684\u96c6\u5408\u5373\u4e00\u4e2a\u8fdb\u7a0b\u7ec4\uff0c\u4e14\u5728\u8be5 \u8fdb\u7a0b\u7ec4\uff0c\u8fdb\u7a0b\u95f4\u53ef\u4ee5\u76f8\u4e92\u901a\u4fe1 \u4efb\u4f55MPI\u901a\u4fe1\u51fd\u6570\u5747\u5fc5\u987b\u5728\u67d0\u4e2a\u901a\u4fe1\u5668\u5185\u53d1\u751f MPI \u7cfb\u7edf\u63d0\u4f9b\u7701\u7f3a\u7684\u901a\u4fe1\u5668 MPI_COMM_WORLD \uff0c\u6240\u6709\u542f\u52a8\u7684 MPI \u8fdb\u7a0b\u901a\u8fc7\u8c03\u7528\u51fd\u6570 MPI_Init() \u5305\u542b\u5728\u8be5\u901a\u4fe1\u5668\u5185\uff1b\u5404\u8fdb\u7a0b\u901a\u8fc7\u51fd\u6570 PI_Comm_size() \u83b7\u53d6\u901a\u4fe1\u5668\u5305\u542b\u7684(\u521d\u59cb\u542f\u52a8)\u7684 MPI \u8fdb\u7a0b\u4e2a\u6570 \u7ec4\u5185\u901a\u4fe1\u5668 \u548c\u7ec4\u95f4\u901a\u4fe1\u5668 \u8fdb\u7a0b\u5e8f\u53f7\uff08rank\uff09\uff1a\u7528\u6765\u5728\u4e00\u4e2a\u8fdb\u7a0b\u7ec4\u6216\u901a\u4fe1\u5668\u4e2d\u6807\u8bc6\u4e00\u4e2a\u8fdb\u7a0b MPI \u7a0b\u5e8f\u4e2d\u7684\u8fdb\u7a0b\u7531\u8fdb\u7a0b\u7ec4\u6216\u901a\u4fe1\u5668\u5e8f\u53f7\u552f\u4e00\u786e\u5b9a \uff0c \u5e8f\u53f7\u76f8\u5bf9\u4e8e\u8fdb \u7a0b\u7ec4\u6216\u901a\u4fe1\u5668\u800c\u8a00\uff08\u5047\u8bbe np \u4e2a\u5904\u7406\u5668\uff0c\u6807\u53f7 0...np-1\uff09 \u540c\u4e00\u4e2a\u8fdb\u7a0b\u5728\u4e0d\u540c\u7684\u8fdb\u7a0b\u7ec4\u6216\u901a\u4fe1\u5668\u4e2d\u53ef\u4ee5\u6709\u4e0d\u540c\u7684\u5e8f\u53f7 \uff0c\u8fdb\u7a0b\u7684\u5e8f \u53f7\u662f\u5728\u8fdb\u7a0b\u7ec4\u6216\u901a\u4fe1\u5668\u88ab\u521b\u5efa\u65f6\u8d4b\u4e88\u7684 MPI \u7cfb\u7edf\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7279\u6b8a\u7684\u8fdb\u7a0b\u5e8f\u53f7 MPI_PROC_NULL \uff0c\u5b83\u4ee3\u8868\u7a7a \u8fdb\u7a0b(\u4e0d\u5b58\u5728\u7684\u8fdb\u7a0b)\uff0c \u4e0e MPI_PROC_NULL \u95f4\u7684\u901a\u4fe1\u5b9e\u9645\u4e0a\u6ca1\u6709\u4efb \u4f55\u4f5c\u7528 \u6d88\u606f\uff08message\uff09 \u5206\u4e3a \u6570\u636e\uff08data\uff09\u548c\u5305\u88c5\uff08envelope\uff09 \u4e24\u4e2a\u90e8\u5206 \u5305\u88c5\u7531\u63a5\u53d7\u8fdb\u7a0b\u5e8f\u53f7/\u53d1\u9001\u8fdb\u7a0b\u5e8f\u53f7\u3001\u6d88\u606f\u6807\u53f7\u548c\u901a\u4fe1\u5668\u4e09\u90e8\u5206\u7ec4\u6210\uff1b\u6570\u636e\u5305\u542b\u7528\u6237\u5c06\u8981\u4f20\u9012\u7684\u5185\u5bb9 MPI \u5bf9\u8c61\uff1aMPI \u7cfb\u7edf\u5185\u90e8\u5b9a\u4e49\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5305\u62ec\u6570\u636e\u7c7b\u578b\uff08\u5982 MPI_INT \uff09\u3001\u901a\u4fe1\u5668\uff08 MPI_Comm \uff09\u3001\u901a\u4fe1\u8bf7\u6c42\uff08 MPI_Request \uff09\u7b49\uff0c\u5b83\u4eec\u5bf9\u7528\u6237\u4e0d\u900f\u660e\u3002 MPI \u8054\u63a5\u5668\uff08handles\uff09\u8054\u63a5 MPI \u5bf9\u8c61\u7684\u5177\u4f53\u53d8\u91cf\uff0c\u7528\u6237\u53ef\u4ee5\u901a\u8fc7\u5b83\u8bbf\u95ee\u548c\u53c2\u4e0e\u76f8\u5e94MPI\u5bf9\u8c61\u7684\u5177\u4f53\u64cd\u4f5c\u3002\u4f8b\u5982\uff0cMPI \u7cfb\u7edf\u5185\u90e8\u63d0\u4f9b\u7684\u901a\u4fe1\u5668 MPI_COMM_WORLD \u3002 MPI \u51fd\u6570\u7684\u4e00\u822c\u5f62\u5f0f \u00b6 error = MPI_Xxxxx ( parameters , ...); MPI_Xxxxx ( parameters , ...); \u6574\u5f62\u9519\u8bef\u7801\u7531\u51fd\u6570\u503c\u8fd4\u56de \u9664 MPI_Wtime() \u548c MPI_Wtick() \u5916\uff0c\u6240\u6709 MPI \u7684 C \u51fd\u6570\u5747\u8fd4\u56de\u4e00\u4e2a\u6574\u578b\u9519\u8bef\u7801\u3002\u6210\u529f\u65f6\u8fd4\u56de MPI_SUCCESS \uff0c\u5176\u4ed6\u9519\u8bef\u4ee3\u7801\u4f9d\u8d56\u4e8e\u6267\u884c MPI \u7a0b\u5e8f\u57fa\u672c\u7ed3\u6784 \u00b6 MPI include file -> \u53d8\u91cf\u5b9a\u4e49 -> MPI \u73af\u5883\u521d\u59cb\u5316 -> \u6267\u884c\u7a0b\u5e8f\u3001\u8fdb\u7a0b\u95f4\u901a\u4fe1 -> \u9000\u51fa MPI \u73af\u5883 #include void main ( int argc , char * argv []) { int np , rank , ierr ; ierr = MPI_Init ( & argc , & argv ); MPI_Comm_rank ( MPI_COMM_WORLD , & rank ); MPI_Comm_size ( MPI_COMM_WORLD , & np ); /* Do Some Works */ ierr = MPI_Finalize (); } MPI \u57fa\u7840\u51fd\u6570 \u00b6 MPI_Init \uff1a\u521d\u59cb\u5316 MPI \u73af\u5883 MPI_Initialized : \u68c0\u67e5 MPI \u73af\u5883\u662f\u5426\u5df2\u7ecf\u521d\u59cb\u5316 MPI_Comm_size \uff1a\u83b7\u53d6\u901a\u4fe1\u5668\u4e2d\u7684\u8fdb\u7a0b\u6570 MPI_Comm_rank \uff1a\u83b7\u53d6\u901a\u4fe1\u5668\u4e2d\u5f53\u524d\u8fdb\u7a0b\u7684\u5e8f\u53f7 MPI_Finalize \uff1a\u7ed3\u675f MPI \u73af\u5883 MPI_Abort \uff1a\u5f02\u5e38\u7ec8\u6b62 MPI \u7a0b\u5e8f MPI_Get_processor_name \uff1a\u83b7\u53d6\u5f53\u524d\u8fdb\u7a0b\u6240\u5728\u5904\u7406\u5668\u7684\u540d\u79f0 MPI_Wtime \uff1a\u83b7\u53d6\u5f53\u524d\u65f6\u95f4 Hello World \u00b6 #include #include #include void main ( int argc , char * argv [ ]) { int myid , numprocs , namelen ; char processor_name [ MPI_MAX_PROCESSOR_NAME ]; MPI_Init ( & argc , & argv ); MPI_Comm_rank ( MPI_COMM_WORLD , & myid ); MPI_Comm_size ( MPI_COMM_WORLD , & numprocs ); MPI_Get_processor_name ( processor_name , & namelen ); printf ( \"Hello World! Process %d of %d on %s \\n \" , myid , numprocs , processor_name ); MPI_Finalize (); } \u70b9\u5bf9\u70b9\u901a\u4fe1 \u00b6 MPI \u7cfb\u7edf\u7684\u901a\u4fe1\u65b9\u5f0f\u90fd\u5efa\u7acb\u5728\u70b9\u5bf9\u70b9\u901a\u4fe1\u4e4b\u4e0a \u4e24\u4e2a\u8fdb\u7a0b\u4e4b\u95f4\u7684\u901a\u4fe1 \u6e90\u8fdb\u7a0b\u53d1\u9001\u6d88\u606f\u5230\u76ee\u6807\u8fdb\u7a0b \u76ee\u6807\u8fdb\u7a0b\u63a5\u53d7\u6d88\u606f \u901a\u4fe1\u53d1\u751f\u5728\u540c\u4e00\u4e2a\u901a\u4fe1\u5668\u5185 \u8fdb\u7a0b\u901a\u8fc7\u5176\u5728\u901a\u4fe1\u5668\u5185\u7684\u6807\u53f7\u8868\u793a \u901a\u4fe1\u7c7b\u578b \u51fd\u6570\u8fd4\u56de \u5bf9\u6570\u636e\u533a\u64cd\u4f5c \u7279\u6027 \u963b\u585e\u5f0f\u901a\u4fe1 1. \u963b\u585e\u578b\u51fd\u6570\u9700\u8981\u7b49\u5f85\u5236\u5b9a\u64cd\u4f5c\u5b8c\u6210\u8fd4\u56de 2. \u6216\u6240\u6d89\u53ca\u64cd\u4f5c\u7684\u6570\u636e\u8981\u88ab MPI \u7cfb\u7edf\u7f13\u5b58\u5b89\u5168\u5907\u4efd\u540e\u8fd4\u56de \u51fd\u6570\u8fd4\u56de\u540e\uff0c\u5bf9\u6570\u636e\u64cd\u4f5c\u662f\u5b89\u5168\u7684 1. \u7a0b\u5e8f\u8bbe\u8ba1\u76f8\u5bf9\u7b80\u5355 2. \u4f7f\u7528\u4e0d\u5f53\u5bb9\u6613\u9020\u6210\u6b7b\u9501 \u975e\u963b\u585e\u5f0f\u901a\u4fe1 1. \u8c03\u7528\u540e\u7acb\u523b\u8fd4\u56de\uff0c\u5b9e\u9645\u64cd\u4f5c\u5728 MPI \u540e\u53f0\u6267\u884c 2. \u9700\u8c03\u7528\u51fd\u6570\u7b49\u5f85\u6216\u67e5\u8be2\u64cd\u4f5c\u7684\u5b8c\u6210\u60c5\u51b5 \u51fd\u6570\u8fd4\u56de\u540e\uff0c\u5373\u64cd\u4f5c\u6570\u636e\u533a\u4e0d\u5b89\u5168\u3002\u53ef\u80fd\u4e0e\u540e\u53f0\u6b63\u8fdb\u884c\u7684\u64cd\u4f5c\u51b2\u7a81 1. \u53ef\u4ee5\u5b9e\u73b0\u8ba1\u7b97\u4e0e\u901a\u4fe1\u7684\u91cd\u53e0 2. \u7a0b\u5e8f\u8bbe\u8ba1\u76f8\u5bf9\u590d\u6742 \u963b\u585e\u5f0f\u70b9\u5bf9\u70b9\u901a\u4fe1 \u00b6 MPI_Send \u00b6 \u963b\u585e\u5f0f\u6d88\u606f\u53d1\u9001 int MPI_Send ( void * buf , int count , MPI_Datatype datatype , int dest , int tag , MPI_Comm comm ) buf\uff1a\u53d1\u9001\u7f13\u51b2\u533a\u7684\u8d77\u59cb\u5730\u5740 count \u4e0d\u662f\u5b57\u8282\u6570\uff0c\u800c\u662f\u6307\u5b9a\u6570\u636e\u7c7b\u578b\u7684\u4e2a\u6570 datatype \u53ef\u662f\u539f\u59cb\u6570\u636e\u7c7b\u578b\uff0c\u6216\u4e3a\u7528\u6237\u81ea\u5b9a\u4e49\u7c7b\u578b dest \u662f \u53d1\u9001\u76ee\u6807\u7684 rank tag \u7528\u6765\u533a\u5206\u6d88\u606f MPI_Recv \u00b6 \u963b\u585e\u5f0f\u6d88\u606f\u63a5\u6536 int MPI_Recv ( void * buf , int count , MPI_Datatype datatype , int source , int tag , MPI_Comm comm , MPI_Status * status ) buf \u662f\u8981\u5c06\u63a5\u6536\u5230\u7684\u5185\u5bb9\u5b58\u5165\u7684 buffer \u9996\u5730\u5740\uff08\u4f5c\u4e3a\u201c\u8f93\u51fa\u201d\uff09 count \u662f\u8981\u63a5\u6536\u7684 buffer \u5143\u7d20\u4e2a\u6570 datatype \u662f\u8981\u63a5\u6536\u7684 buffer \u4e2d\u5143\u7d20\u7c7b\u578b source \u662f\u63a5\u6536\u6765\u6e90\u7684 rank\uff08\u6216\u8005 MPI_ANY_SOURCE\uff09 tag \u662f message tag\uff08\u6216\u8005 MPI_ANY_TAG\uff09 comm \u662f communicator status \u662f\u63a5\u6536\u7684\u72b6\u6001\u7ed3\u6784\u4f53\uff08\u4f5c\u4e3a\u201c\u8f93\u51fa\u201d\uff09 \u4e0d\u9700\u8981\u65f6\u586b\u5199 MPI_STATUS_IGNORE MPI_Status \u4e2d\u5305\u542b\u4e09\u4e2a\u6210\u5458\u53d8\u91cf\uff1aMPI_SOURCE\u3001MPI_TAG\u3001MPI_ERROR \u53ef\u4ee5\u901a\u8fc7 MPI_Get_count(MPI_Status status, MPI_Datatype datatype, int count) \u51fd\u6570\u6765\u83b7\u53d6 count MPI_Get_count \u00b6 \u67e5\u8be2\u63a5\u6536\u5230\u7684\u6d88\u606f\u957f\u5ea6 int MPI_Get_count ( MPI_Status * status , MPI_Datatype datatype , int * count ) \u8be5\u51fd\u6570\u5728 count \u4e2d\u8fd4\u56de\u6570\u636e\u7c7b\u578b\u7684\u4e2a\u6570\uff0c\u5373\u6d88\u606f\u7684\u957f\u5ea6 count \u5c5e\u4e8e MPI_Status \u7ed3\u6784\u7684\u4e00\u4e2a\u57df\uff0c\u4f46\u4e0d\u80fd\u88ab\u7528\u6237\u76f4\u63a5\u8bbf\u95ee MPI_Sendrecv \u00b6 \u6346\u7ed1\u53d1\u9001\u548c\u63a5\u6536 int MPI_Sendrecv ( void * sendbuf , int sendcount , MPI_Datatype sendtype , int dest , int sendtag , void * recvbuf , int recvcount , MPI_Datatype recvtype , int source , int recvtag , MPI_Comm comm , MPI_Status * status ) MPI_Sendrecv_replace \u00b6 \u6346\u7ed1\u53d1\u9001\u548c\u63a5\u6536\u3001\u6536\u53d1\u4f7f\u7528\u540c\u4e00\u7f13\u5b58\u533a int MPI_Sendrecv_replace ( void * buf , int count , MPI_Datatype datatype , int dest , int sendtag , int source , int recvtag , MPI_Comm comm , MPI_Status * status ) \u975e\u963b\u585e\u5f0f\u70b9\u5bf9\u70b9\u901a\u4fe1 \u00b6 MPI_Isend \u00b6 \u975e\u963b\u585e\u5f0f\u6d88\u606f\u53d1\u9001 int MPI_Isend ( void * buf , int count , MPI_Datatype datatype , int dest , int tag , MPI_Comm comm , MPI_Request * request ) MPI \u7cfb\u7edf\u4f1a\u5728\u540e\u53f0\u5b8c\u6210\u6d88\u606f\u53d1\u9001 \u51fd\u6570\u4e3a\u8be5\u53d1\u9001\u64cd\u4f5c\u521b\u5efa\u4e86\u4e00\u4e2a\u8bf7\u6c42\uff0c\u901a\u8fc7 request \u53d8\u91cf\u8fd4\u56de request \u53ef\u4f9b\u4e4b\u540e\uff08\u67e5\u8be2\u548c\u7b49\u5f85\uff09\u51fd\u6570\u4f7f\u7528 MPI_Irecv \u00b6 \u975e\u963b\u585e\u5f0f\u6d88\u606f\u63a5\u6536 int MPI_Irecv ( void * buf , int count , MPI_Datatype datatype , int source , int tag , MPI_Comm comm , MPI_Request * request ) MPI_Wait \u00b6 \u7b49\u5f85\u3001\u68c0\u6d4b\u4e00\u4e2a\u901a\u4fe1\u8bf7\u6c42\u7684\u5b8c\u6210 int MPI_Wait ( MPI_Request * request , MPI_Status * status ) int MPI_Test ( MPI_Request * request , int * flag , MPI_Status * status ) MPI_Wait \u963b\u585e\u7b49\u5f85\u901a\u4fe1\u51fd\u6570\u5b8c\u6210\u540e\u8fd4\u56de\uff1bMPI_Test \u68c0\u6d4b\u67d0\u901a\u4fe1\uff0c\u4e0d\u8bba\u5176\u662f\u5426\u5b8c\u6210\uff0c\u90fd\u7acb\u523b\u8fd4\u56de\uff0c\u5982\u679c\u901a\u4fe1\u5b8c\u6210\uff0c\u5219 flag=true \u5f53\u7b49\u5f85\u6216\u68c0\u6d4b\u7684\u901a\u4fe1\u5b8c\u6210\u65f6\uff0c\u901a\u4fe1\u8bf7\u6c42 request \u88ab\u8bbe\u7f6e\u6210 MPI_REQUEST_NULL \u8003\u5bdf\u63a5\u6536\u8bf7\u6c42\uff0cstatus \u8fd4\u56de\u4e0e MPI_Recv \u4e00\u6837\uff1b\u53d1\u9001\u8bf7\u6c42\uff0c\u5219\u4e0d\u786e\u5b9a MPI_Test \u8fd4\u56de\u65f6\uff0c\u5f53 flag=false\uff0cstatus \u4e0d\u88ab\u8d4b\u503c MPI_Waitany \u00b6 \u7b49\u5f85\u3001\u68c0\u6d4b\u4e00\u7ec4\u901a\u4fe1\u8bf7\u6c42\u4e2d\u67d0\u4e00\u4e2a\u7684\u5b8c\u6210 int MPI_Waitany ( int count , MPI_Request array_of_requests [], int * index , MPI_Status * status ) MPI_Waitall \u00b6 \u7b49\u5f85\u3001\u68c0\u6d4b\u4e00\u7ec4\u901a\u4fe1\u8bf7\u6c42\u5168\u90e8\u5b8c\u6210 int MPI_Waitall ( int count , MPI_Request array_of_requests [], MPI_Status array_of_statuses [] ) MPI_Waitsome \u00b6 \u7b49\u5f85\u3001\u68c0\u6d4b\u4e00\u7ec4\u901a\u4fe1\u8bf7\u6c42\u7684\u90e8\u5206\u5b8c\u6210 int MPI_Waitsome ( int incount , MPI_Request array_of_requests [], int * outcount , int array_of_indices [], MPI_Status array_of_statuses [] ) MPI_Request_free \u00b6 \u901a\u4fe1\u8bf7\u6c42\u7684\u91ca\u653e\uff08\u963b\u585e\u578b\uff09 int MPI_Request_free ( MPI_Request * request ) MPI_Cancel \u00b6 \u53d6\u6d88\u4e00\u4e2a\u901a\u4fe1\u8bf7\u6c42\uff08\u975e\u963b\u585e\u578b\uff09 int MPI_Cancel ( MPI_Request * request ) MPI_Test_cancelled \u00b6 \u68c0\u6d4b\u4e00\u4e2a\u901a\u4fe1\u8bf7\u6c42\u662f\u5426\u88ab\u53d6\u6d88\uff08\u975e\u963b\u585e\u578b\uff09 int MPI_Test_cancelled ( MPI_Status * status , int * flag ) MPI_Probe \u00b6 \u6d88\u606f\u63a2\u6d4b\uff08\u963b\u585e\u578b\uff09 int MPI_Probe ( int source , int tag , MPI_Comm comm , MPI_Status * status ) MPI_Iprobe \u00b6 \u6d88\u606f\u63a2\u6d4b\uff08\u975e\u963b\u585e\u578b\uff09 int MPI_Iprobe ( int source , int tag , MPI_Comm comm , int * flag , MPI_Status * status ) \u96c6\u5408\u901a\u4fe1 \u00b6 \u5f53\u9700\u8981\u8fdb\u884c\u8fdb\u7a0b\u4e4b\u95f4\u4e00\u5bf9\u591a\u3001\u591a\u5bf9\u4e00\u6216\u591a\u5bf9\u591a\u901a\u4fe1\u65f6\uff08\u5982\u5212\u5206\u4efb\u52a1\u3001\u6536\u96c6\u7ed3\u679c\uff09\uff0c\u4f7f\u7528\u591a\u4e2a Send/Recv \u4e0d\u65b9\u4fbf\uff0c\u53ef\u4ee5\u4f7f\u7528\u96c6\u5408\u901a\uff08Collective Communication\uff09 Barrier \u00b6 int MPI_Barrier ( MPI_Comm comm ) \u8fd0\u884c\u5230\u6b64\u51fd\u6570\u65f6\u8fdb\u884c\u7b49\u5f85\uff0c\u76f4\u5230 communicator \u4e2d\u6240\u6709\u8fdb\u7a0b\u90fd\u8fd0\u884c\u5230 Barrier \u4e4b\u540e\u518d\u4e00\u8d77\u7ee7\u7eed\u8fd0\u884c \u4e00\u5bf9\u591a \u00b6 MPI_Bcast \u00b6 int MPI_Bcast ( void * buffer , int count , MPI_Datatype datatype , int root , MPI_Comm comm ) \u6bd4 MPI_Send \u5c11\u4e86 dest\uff0c\u5373\u5c06 buffer \u4ece root \u53d1\u9001\u5230\u6240\u6709\u8fdb\u7a0b \u5305\u542b\u53d1\u9001\u548c\u63a5\u6536\uff08root \u53d1\u9001\uff0c\u5176\u5b83\u63a5\u6536\uff0croot \u53d1\u9001\u51fa buffer\uff0c\u5176\u5b83\u63a5\u6536\u653e\u5230 buffer \u4e2d\uff09 MPI_Bcast \u6548\u7387\u4e5f\u6bd4\u591a\u4e2a Send/Recv \u6548\u7387\u9ad8\uff08\u590d\u7528\u5df2\u7ecf\u5e7f\u64ad\u8fc7\u7684\u8282\u70b9\u8fdb\u884c\u65b0\u7684\u5e7f\u64ad\uff09 MPI_Scatter \u00b6 int MPI_Scatter ( const void * sendbuf , int sendcount , MPI_Datatype sendtype , void * recvbuf , int recvcount , MPI_Datatype recvtype , int root , MPI_Comm comm ) \u4e0e Broadcast \u4e0d\u540c\u7684\u662f\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u63a5\u6536\u5230\u7684\u662f sendbuf \u7684\u4e00\u90e8\u5206 \u591a\u5bf9\u4e00 \u00b6 MPI_Gather \u00b6 int MPI_Gather ( const void * sendbuf , int sendcount , MPI_Datatype sendtype , void * recvbuf , int recvcount , MPI_Datatype recvtype , int root , MPI_Comm comm ) \u53c2\u6570\u610f\u4e49\u4e5f\u90fd\u7c7b\u4f3c\uff0c\u5c06\u6240\u6709\u8fdb\u7a0b\u4e2d\u7684 sendbuf \u53d1\u9001\u7ed9 root \u8fdb\u7a0b\uff0c\u62fc\u63a5\u5230 recvbuf \u4e2d MPI_Reduce \u00b6 int MPI_Reduce ( const void * sendbuf , void * recvbuf , int count , MPI_Datatype datatype , MPI_Op op , int root , MPI_Comm comm ) \u7c7b\u4f3c MPI_Gather\uff0c\u4f46\u5c06\u6536\u96c6\u5230\u7684\u6570\u636e\u8fdb\u884c\u5904\u7406\u5408\u5e76\u5230 recvbuf \u4e2d MPI_Op \u53ef\u4ee5\u662f MPI_MAX MPI_MIN MPI_SUM MPI_PROD MPI_LAND\uff08\u903b\u8f91\u4e0e\uff09MPI_BAND\uff08\u4f4d\u4e0e\uff09MPI_LOR MPI_BOR MPI_LXOR MPI_BXOR MPI_MAXLOC\uff08\u6700\u5927\u503c\u4e0e\u4f4d\u7f6e\uff09MPI_MINLOC \u591a\u5bf9\u591a \u00b6 MPI_Allgather \u00b6 int MPI_Allgather ( const void * sendbuf , int sendcount , MPI_Datatype sendtype , void * recvbuf , int recvcount , MPI_Datatype recvtype , MPI_Comm comm ) \u7c7b\u4f3c MPI_Gather\uff0c\u4f46\u6240\u6709\u8fdb\u7a0b\u90fd\u4f1a\u5f97\u5230 MPI_Gather \u4e2d root \u5f97\u5230\u7684\u5185\u5bb9 MPI_Alltoall \u00b6 int MPI_Alltoall ( const void * sendbuf , int sendcount , MPI_Datatype sendtype , void * recvbuf , int recvcount , MPI_Datatype recvtype , MPI_Comm comm ) \u6301\u4e45\u901a\u4fe1 \u00b6 \u6301\u4e45\u901a\u4fe1\u8bf7\u6c42\u53ef\u7528\u4e8e\u4ee5\u5b8c\u5168\u76f8\u540c\u7684\u65b9\u5f0f\uff08\u76f8\u540c\u7684\u901a\u4fe1\u5668\u3001\u6536\u53d1\u7f13\u51b2\u533a\u3001\u6570\u636e\u7c7b\u578b\u4e0e\u957f\u5ea6\u3001\u6e90/\u76ee\u7684\u5730\u5740\u548c\u6d88\u606f\u6807\u7b7e\uff09\u91cd\u590d\u6536\u53d1\u7684\u6d88\u606f\u3002\u76ee\u7684\u662f\u4e3a\u4e86\u51cf\u5c11\u5904\u7406\u6d88\u606f\u7684\u5f00\u9500\u53ca\u7b80\u5316 MPI \u7a0b\u5e8f","title":"MPI \u57fa\u7840"},{"location":"cs/hpc/mpi/#mpi","text":"\u7ea6 2264 \u4e2a\u5b57 196 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 10 \u5206\u949f Abstract \u53c2\u8003\uff1a MPI \u5e76\u884c\u7f16\u7a0b\u5165\u95e8","title":"MPI \u57fa\u7840"},{"location":"cs/hpc/mpi/#mpi_1","text":"\u4ec0\u4e48\u662f MPI \u662f\u51fd\u6570\u5e93\u89c4\u8303\uff0c\u800c\u4e0d\u662f\u5e76\u884c\u8bed\u8a00\uff1b\u64cd\u4f5c\u5982\u540c\u5e93\u51fd\u6570\u8c03\u7528 \u2013 \u662f\u4e00\u79cd\u6807\u51c6\u548c\u89c4\u8303\uff0c\u800c\u975e\u67d0\u4e2a\u5bf9\u5b83\u7684\u5177\u4f53\u5b9e\u73b0\uff08MPICH\u7b49\uff09\uff0c\u4e0e\u7f16\u7a0b\u8bed\u8a00\u65e0\u5173 \u2013 \u662f\u4e00\u79cd\u6d88\u606f\u4f20\u9012\u7f16\u7a0b\u6a21\u578b\uff0c\u5e76\u6210\u4e3a\u8fd9\u7c7b\u7f16\u7a0b\u6a21\u578b\u7684\u4ee3\u8868 MPI \u7684\u4ea7\u751f \u6269\u5145\u5e76\u884c I/O \u8fdc\u7a0b\u5b58\u50a8\u8bbf\u95ee \u52a8\u6001\u8fdb\u7a0b\u7ba1\u7406 MPI \u7684\u8bed\u8a00\u7ed1\u5b9a: Fortran\u3001C \u4e3b\u8981\u7684 MPI \u5b9e\u73b0: MPICH\u3001LAMMPI MPI \u7a0b\u5e8f\u7f16\u8bd1\u4e0e\u8fd0\u884c \u7a0b\u5e8f\u7f16\u8bd1\uff1a C: % mpicc - o prog prog . c Fortran: % mpif77 - o prog prog . f \u7a0b\u5e8f\u8fd0\u884c % mpirun - np 4 prog \u7a0b\u5e8f\u6267\u884c\u8fc7\u7a0b\u4e2d\u4e0d\u80fd\u52a8\u6001\u6539\u53d8\u8fdb\u7a0b\u7684\u4e2a\u6570 \u7533\u8bf7\u7684\u8fdb\u7a0b\u6570 np \u4e0e\u5b9e\u9645\u5904\u7406\u5668\u4e2a\u6570\u65e0\u5173","title":"MPI \u7b80\u4ecb"},{"location":"cs/hpc/mpi/#mpi_2","text":"","title":"MPI \u57fa\u7840\u77e5\u8bc6"},{"location":"cs/hpc/mpi/#_1","text":"\u5355\u4e2a\u8fdb\u7a0b \u5355\u673a\u5185\u591a\u4e2a\u8fdb\u7a0b \u5305\u542b\u4e8e\u901a\u8fc7\u7f51\u7edc\u8054\u63a5\u7684\u4e0d\u540c\u5904\u7406\u5668\u7684\u591a\u4e2a\u8fdb\u7a0b \u8fdb\u7a0b\u72ec\u7acb\u5b58\u5728\uff0c\u5e76\u4f4d\u4e8e\u4e0d\u540c\u7684\u5904\u7406\u5668 \u8fdb\u7a0b\u95f4\u76f8\u4e92\u4fe1\u606f\u4ea4\u6362\uff0c\u53ef\u4f9d\u9760\u6d88\u606f\u4f20\u9012 \u6700\u57fa\u672c\u7684\u6d88\u606f\u4f20\u9012\u64cd\u4f5c\u5305\u62ec\u53d1\u9001\u6d88\u606f send\u3001\u63a5\u53d7\u6d88\u606f receive\u3001\u8fdb\u7a0b\u540c\u6b65 barrier\uff0c\u89c4\u7ea6 reduction \u7b49","title":"\u8fdb\u7a0b\u4e0e\u6d88\u606f\u4f20\u9012"},{"location":"cs/hpc/mpi/#mpi_3","text":"\u8fdb\u7a0b\u7ec4\uff08process group\uff09\uff1aMPI \u7a0b\u5e8f\u7684\u5168\u90e8\u8fdb\u7a0b\u96c6\u5408\u7684 \u4e00\u4e2a\u6709\u5e8f\u5b50\u96c6 \u4e14\u8fdb\u7a0b\u7ec4\u4e2d\u6bcf\u4e2a\u8fdb\u7a0b\u88ab\u8d4b\u4e88\u4e00\u4e2a\u5728\u8be5\u7ec4\u4e2d\u552f\u4e00\u7684\u5e8f\u53f7\uff08rank\uff09\uff0c\u7528\u4e8e\u5728\u8be5\u7ec4\u4e2d\u6807\u8bc6\u8be5\u8fdb\u7a0b\u3002 \u901a\u4fe1\u5668\uff08communicator\uff09 \u7406\u89e3\u4e3a\u4e00\u7c7b\u8fdb\u7a0b\u7684\u96c6\u5408\u5373\u4e00\u4e2a\u8fdb\u7a0b\u7ec4\uff0c\u4e14\u5728\u8be5 \u8fdb\u7a0b\u7ec4\uff0c\u8fdb\u7a0b\u95f4\u53ef\u4ee5\u76f8\u4e92\u901a\u4fe1 \u4efb\u4f55MPI\u901a\u4fe1\u51fd\u6570\u5747\u5fc5\u987b\u5728\u67d0\u4e2a\u901a\u4fe1\u5668\u5185\u53d1\u751f MPI \u7cfb\u7edf\u63d0\u4f9b\u7701\u7f3a\u7684\u901a\u4fe1\u5668 MPI_COMM_WORLD \uff0c\u6240\u6709\u542f\u52a8\u7684 MPI \u8fdb\u7a0b\u901a\u8fc7\u8c03\u7528\u51fd\u6570 MPI_Init() \u5305\u542b\u5728\u8be5\u901a\u4fe1\u5668\u5185\uff1b\u5404\u8fdb\u7a0b\u901a\u8fc7\u51fd\u6570 PI_Comm_size() \u83b7\u53d6\u901a\u4fe1\u5668\u5305\u542b\u7684(\u521d\u59cb\u542f\u52a8)\u7684 MPI \u8fdb\u7a0b\u4e2a\u6570 \u7ec4\u5185\u901a\u4fe1\u5668 \u548c\u7ec4\u95f4\u901a\u4fe1\u5668 \u8fdb\u7a0b\u5e8f\u53f7\uff08rank\uff09\uff1a\u7528\u6765\u5728\u4e00\u4e2a\u8fdb\u7a0b\u7ec4\u6216\u901a\u4fe1\u5668\u4e2d\u6807\u8bc6\u4e00\u4e2a\u8fdb\u7a0b MPI \u7a0b\u5e8f\u4e2d\u7684\u8fdb\u7a0b\u7531\u8fdb\u7a0b\u7ec4\u6216\u901a\u4fe1\u5668\u5e8f\u53f7\u552f\u4e00\u786e\u5b9a \uff0c \u5e8f\u53f7\u76f8\u5bf9\u4e8e\u8fdb \u7a0b\u7ec4\u6216\u901a\u4fe1\u5668\u800c\u8a00\uff08\u5047\u8bbe np \u4e2a\u5904\u7406\u5668\uff0c\u6807\u53f7 0...np-1\uff09 \u540c\u4e00\u4e2a\u8fdb\u7a0b\u5728\u4e0d\u540c\u7684\u8fdb\u7a0b\u7ec4\u6216\u901a\u4fe1\u5668\u4e2d\u53ef\u4ee5\u6709\u4e0d\u540c\u7684\u5e8f\u53f7 \uff0c\u8fdb\u7a0b\u7684\u5e8f \u53f7\u662f\u5728\u8fdb\u7a0b\u7ec4\u6216\u901a\u4fe1\u5668\u88ab\u521b\u5efa\u65f6\u8d4b\u4e88\u7684 MPI \u7cfb\u7edf\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7279\u6b8a\u7684\u8fdb\u7a0b\u5e8f\u53f7 MPI_PROC_NULL \uff0c\u5b83\u4ee3\u8868\u7a7a \u8fdb\u7a0b(\u4e0d\u5b58\u5728\u7684\u8fdb\u7a0b)\uff0c \u4e0e MPI_PROC_NULL \u95f4\u7684\u901a\u4fe1\u5b9e\u9645\u4e0a\u6ca1\u6709\u4efb \u4f55\u4f5c\u7528 \u6d88\u606f\uff08message\uff09 \u5206\u4e3a \u6570\u636e\uff08data\uff09\u548c\u5305\u88c5\uff08envelope\uff09 \u4e24\u4e2a\u90e8\u5206 \u5305\u88c5\u7531\u63a5\u53d7\u8fdb\u7a0b\u5e8f\u53f7/\u53d1\u9001\u8fdb\u7a0b\u5e8f\u53f7\u3001\u6d88\u606f\u6807\u53f7\u548c\u901a\u4fe1\u5668\u4e09\u90e8\u5206\u7ec4\u6210\uff1b\u6570\u636e\u5305\u542b\u7528\u6237\u5c06\u8981\u4f20\u9012\u7684\u5185\u5bb9 MPI \u5bf9\u8c61\uff1aMPI \u7cfb\u7edf\u5185\u90e8\u5b9a\u4e49\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5305\u62ec\u6570\u636e\u7c7b\u578b\uff08\u5982 MPI_INT \uff09\u3001\u901a\u4fe1\u5668\uff08 MPI_Comm \uff09\u3001\u901a\u4fe1\u8bf7\u6c42\uff08 MPI_Request \uff09\u7b49\uff0c\u5b83\u4eec\u5bf9\u7528\u6237\u4e0d\u900f\u660e\u3002 MPI \u8054\u63a5\u5668\uff08handles\uff09\u8054\u63a5 MPI \u5bf9\u8c61\u7684\u5177\u4f53\u53d8\u91cf\uff0c\u7528\u6237\u53ef\u4ee5\u901a\u8fc7\u5b83\u8bbf\u95ee\u548c\u53c2\u4e0e\u76f8\u5e94MPI\u5bf9\u8c61\u7684\u5177\u4f53\u64cd\u4f5c\u3002\u4f8b\u5982\uff0cMPI \u7cfb\u7edf\u5185\u90e8\u63d0\u4f9b\u7684\u901a\u4fe1\u5668 MPI_COMM_WORLD \u3002","title":"MPI \u91cd\u8981\u6982\u5ff5"},{"location":"cs/hpc/mpi/#mpi_4","text":"error = MPI_Xxxxx ( parameters , ...); MPI_Xxxxx ( parameters , ...); \u6574\u5f62\u9519\u8bef\u7801\u7531\u51fd\u6570\u503c\u8fd4\u56de \u9664 MPI_Wtime() \u548c MPI_Wtick() \u5916\uff0c\u6240\u6709 MPI \u7684 C \u51fd\u6570\u5747\u8fd4\u56de\u4e00\u4e2a\u6574\u578b\u9519\u8bef\u7801\u3002\u6210\u529f\u65f6\u8fd4\u56de MPI_SUCCESS \uff0c\u5176\u4ed6\u9519\u8bef\u4ee3\u7801\u4f9d\u8d56\u4e8e\u6267\u884c","title":"MPI \u51fd\u6570\u7684\u4e00\u822c\u5f62\u5f0f"},{"location":"cs/hpc/mpi/#mpi_5","text":"MPI include file -> \u53d8\u91cf\u5b9a\u4e49 -> MPI \u73af\u5883\u521d\u59cb\u5316 -> \u6267\u884c\u7a0b\u5e8f\u3001\u8fdb\u7a0b\u95f4\u901a\u4fe1 -> \u9000\u51fa MPI \u73af\u5883 #include void main ( int argc , char * argv []) { int np , rank , ierr ; ierr = MPI_Init ( & argc , & argv ); MPI_Comm_rank ( MPI_COMM_WORLD , & rank ); MPI_Comm_size ( MPI_COMM_WORLD , & np ); /* Do Some Works */ ierr = MPI_Finalize (); }","title":"MPI \u7a0b\u5e8f\u57fa\u672c\u7ed3\u6784"},{"location":"cs/hpc/mpi/#mpi_6","text":"MPI_Init \uff1a\u521d\u59cb\u5316 MPI \u73af\u5883 MPI_Initialized : \u68c0\u67e5 MPI \u73af\u5883\u662f\u5426\u5df2\u7ecf\u521d\u59cb\u5316 MPI_Comm_size \uff1a\u83b7\u53d6\u901a\u4fe1\u5668\u4e2d\u7684\u8fdb\u7a0b\u6570 MPI_Comm_rank \uff1a\u83b7\u53d6\u901a\u4fe1\u5668\u4e2d\u5f53\u524d\u8fdb\u7a0b\u7684\u5e8f\u53f7 MPI_Finalize \uff1a\u7ed3\u675f MPI \u73af\u5883 MPI_Abort \uff1a\u5f02\u5e38\u7ec8\u6b62 MPI \u7a0b\u5e8f MPI_Get_processor_name \uff1a\u83b7\u53d6\u5f53\u524d\u8fdb\u7a0b\u6240\u5728\u5904\u7406\u5668\u7684\u540d\u79f0 MPI_Wtime \uff1a\u83b7\u53d6\u5f53\u524d\u65f6\u95f4","title":"MPI \u57fa\u7840\u51fd\u6570"},{"location":"cs/hpc/mpi/#hello-world","text":"#include #include #include void main ( int argc , char * argv [ ]) { int myid , numprocs , namelen ; char processor_name [ MPI_MAX_PROCESSOR_NAME ]; MPI_Init ( & argc , & argv ); MPI_Comm_rank ( MPI_COMM_WORLD , & myid ); MPI_Comm_size ( MPI_COMM_WORLD , & numprocs ); MPI_Get_processor_name ( processor_name , & namelen ); printf ( \"Hello World! Process %d of %d on %s \\n \" , myid , numprocs , processor_name ); MPI_Finalize (); }","title":"Hello World"},{"location":"cs/hpc/mpi/#_2","text":"MPI \u7cfb\u7edf\u7684\u901a\u4fe1\u65b9\u5f0f\u90fd\u5efa\u7acb\u5728\u70b9\u5bf9\u70b9\u901a\u4fe1\u4e4b\u4e0a \u4e24\u4e2a\u8fdb\u7a0b\u4e4b\u95f4\u7684\u901a\u4fe1 \u6e90\u8fdb\u7a0b\u53d1\u9001\u6d88\u606f\u5230\u76ee\u6807\u8fdb\u7a0b \u76ee\u6807\u8fdb\u7a0b\u63a5\u53d7\u6d88\u606f \u901a\u4fe1\u53d1\u751f\u5728\u540c\u4e00\u4e2a\u901a\u4fe1\u5668\u5185 \u8fdb\u7a0b\u901a\u8fc7\u5176\u5728\u901a\u4fe1\u5668\u5185\u7684\u6807\u53f7\u8868\u793a \u901a\u4fe1\u7c7b\u578b \u51fd\u6570\u8fd4\u56de \u5bf9\u6570\u636e\u533a\u64cd\u4f5c \u7279\u6027 \u963b\u585e\u5f0f\u901a\u4fe1 1. \u963b\u585e\u578b\u51fd\u6570\u9700\u8981\u7b49\u5f85\u5236\u5b9a\u64cd\u4f5c\u5b8c\u6210\u8fd4\u56de 2. \u6216\u6240\u6d89\u53ca\u64cd\u4f5c\u7684\u6570\u636e\u8981\u88ab MPI \u7cfb\u7edf\u7f13\u5b58\u5b89\u5168\u5907\u4efd\u540e\u8fd4\u56de \u51fd\u6570\u8fd4\u56de\u540e\uff0c\u5bf9\u6570\u636e\u64cd\u4f5c\u662f\u5b89\u5168\u7684 1. \u7a0b\u5e8f\u8bbe\u8ba1\u76f8\u5bf9\u7b80\u5355 2. \u4f7f\u7528\u4e0d\u5f53\u5bb9\u6613\u9020\u6210\u6b7b\u9501 \u975e\u963b\u585e\u5f0f\u901a\u4fe1 1. \u8c03\u7528\u540e\u7acb\u523b\u8fd4\u56de\uff0c\u5b9e\u9645\u64cd\u4f5c\u5728 MPI \u540e\u53f0\u6267\u884c 2. \u9700\u8c03\u7528\u51fd\u6570\u7b49\u5f85\u6216\u67e5\u8be2\u64cd\u4f5c\u7684\u5b8c\u6210\u60c5\u51b5 \u51fd\u6570\u8fd4\u56de\u540e\uff0c\u5373\u64cd\u4f5c\u6570\u636e\u533a\u4e0d\u5b89\u5168\u3002\u53ef\u80fd\u4e0e\u540e\u53f0\u6b63\u8fdb\u884c\u7684\u64cd\u4f5c\u51b2\u7a81 1. \u53ef\u4ee5\u5b9e\u73b0\u8ba1\u7b97\u4e0e\u901a\u4fe1\u7684\u91cd\u53e0 2. \u7a0b\u5e8f\u8bbe\u8ba1\u76f8\u5bf9\u590d\u6742","title":"\u70b9\u5bf9\u70b9\u901a\u4fe1"},{"location":"cs/hpc/mpi/#_3","text":"","title":"\u963b\u585e\u5f0f\u70b9\u5bf9\u70b9\u901a\u4fe1"},{"location":"cs/hpc/mpi/#mpi_send","text":"\u963b\u585e\u5f0f\u6d88\u606f\u53d1\u9001 int MPI_Send ( void * buf , int count , MPI_Datatype datatype , int dest , int tag , MPI_Comm comm ) buf\uff1a\u53d1\u9001\u7f13\u51b2\u533a\u7684\u8d77\u59cb\u5730\u5740 count \u4e0d\u662f\u5b57\u8282\u6570\uff0c\u800c\u662f\u6307\u5b9a\u6570\u636e\u7c7b\u578b\u7684\u4e2a\u6570 datatype \u53ef\u662f\u539f\u59cb\u6570\u636e\u7c7b\u578b\uff0c\u6216\u4e3a\u7528\u6237\u81ea\u5b9a\u4e49\u7c7b\u578b dest \u662f \u53d1\u9001\u76ee\u6807\u7684 rank tag \u7528\u6765\u533a\u5206\u6d88\u606f","title":"MPI_Send"},{"location":"cs/hpc/mpi/#mpi_recv","text":"\u963b\u585e\u5f0f\u6d88\u606f\u63a5\u6536 int MPI_Recv ( void * buf , int count , MPI_Datatype datatype , int source , int tag , MPI_Comm comm , MPI_Status * status ) buf \u662f\u8981\u5c06\u63a5\u6536\u5230\u7684\u5185\u5bb9\u5b58\u5165\u7684 buffer \u9996\u5730\u5740\uff08\u4f5c\u4e3a\u201c\u8f93\u51fa\u201d\uff09 count \u662f\u8981\u63a5\u6536\u7684 buffer \u5143\u7d20\u4e2a\u6570 datatype \u662f\u8981\u63a5\u6536\u7684 buffer \u4e2d\u5143\u7d20\u7c7b\u578b source \u662f\u63a5\u6536\u6765\u6e90\u7684 rank\uff08\u6216\u8005 MPI_ANY_SOURCE\uff09 tag \u662f message tag\uff08\u6216\u8005 MPI_ANY_TAG\uff09 comm \u662f communicator status \u662f\u63a5\u6536\u7684\u72b6\u6001\u7ed3\u6784\u4f53\uff08\u4f5c\u4e3a\u201c\u8f93\u51fa\u201d\uff09 \u4e0d\u9700\u8981\u65f6\u586b\u5199 MPI_STATUS_IGNORE MPI_Status \u4e2d\u5305\u542b\u4e09\u4e2a\u6210\u5458\u53d8\u91cf\uff1aMPI_SOURCE\u3001MPI_TAG\u3001MPI_ERROR \u53ef\u4ee5\u901a\u8fc7 MPI_Get_count(MPI_Status status, MPI_Datatype datatype, int count) \u51fd\u6570\u6765\u83b7\u53d6 count","title":"MPI_Recv"},{"location":"cs/hpc/mpi/#mpi_get_count","text":"\u67e5\u8be2\u63a5\u6536\u5230\u7684\u6d88\u606f\u957f\u5ea6 int MPI_Get_count ( MPI_Status * status , MPI_Datatype datatype , int * count ) \u8be5\u51fd\u6570\u5728 count \u4e2d\u8fd4\u56de\u6570\u636e\u7c7b\u578b\u7684\u4e2a\u6570\uff0c\u5373\u6d88\u606f\u7684\u957f\u5ea6 count \u5c5e\u4e8e MPI_Status \u7ed3\u6784\u7684\u4e00\u4e2a\u57df\uff0c\u4f46\u4e0d\u80fd\u88ab\u7528\u6237\u76f4\u63a5\u8bbf\u95ee","title":"MPI_Get_count"},{"location":"cs/hpc/mpi/#mpi_sendrecv","text":"\u6346\u7ed1\u53d1\u9001\u548c\u63a5\u6536 int MPI_Sendrecv ( void * sendbuf , int sendcount , MPI_Datatype sendtype , int dest , int sendtag , void * recvbuf , int recvcount , MPI_Datatype recvtype , int source , int recvtag , MPI_Comm comm , MPI_Status * status )","title":"MPI_Sendrecv"},{"location":"cs/hpc/mpi/#mpi_sendrecv_replace","text":"\u6346\u7ed1\u53d1\u9001\u548c\u63a5\u6536\u3001\u6536\u53d1\u4f7f\u7528\u540c\u4e00\u7f13\u5b58\u533a int MPI_Sendrecv_replace ( void * buf , int count , MPI_Datatype datatype , int dest , int sendtag , int source , int recvtag , MPI_Comm comm , MPI_Status * status )","title":"MPI_Sendrecv_replace"},{"location":"cs/hpc/mpi/#_4","text":"","title":"\u975e\u963b\u585e\u5f0f\u70b9\u5bf9\u70b9\u901a\u4fe1"},{"location":"cs/hpc/mpi/#mpi_isend","text":"\u975e\u963b\u585e\u5f0f\u6d88\u606f\u53d1\u9001 int MPI_Isend ( void * buf , int count , MPI_Datatype datatype , int dest , int tag , MPI_Comm comm , MPI_Request * request ) MPI \u7cfb\u7edf\u4f1a\u5728\u540e\u53f0\u5b8c\u6210\u6d88\u606f\u53d1\u9001 \u51fd\u6570\u4e3a\u8be5\u53d1\u9001\u64cd\u4f5c\u521b\u5efa\u4e86\u4e00\u4e2a\u8bf7\u6c42\uff0c\u901a\u8fc7 request \u53d8\u91cf\u8fd4\u56de request \u53ef\u4f9b\u4e4b\u540e\uff08\u67e5\u8be2\u548c\u7b49\u5f85\uff09\u51fd\u6570\u4f7f\u7528","title":"MPI_Isend"},{"location":"cs/hpc/mpi/#mpi_irecv","text":"\u975e\u963b\u585e\u5f0f\u6d88\u606f\u63a5\u6536 int MPI_Irecv ( void * buf , int count , MPI_Datatype datatype , int source , int tag , MPI_Comm comm , MPI_Request * request )","title":"MPI_Irecv"},{"location":"cs/hpc/mpi/#mpi_wait","text":"\u7b49\u5f85\u3001\u68c0\u6d4b\u4e00\u4e2a\u901a\u4fe1\u8bf7\u6c42\u7684\u5b8c\u6210 int MPI_Wait ( MPI_Request * request , MPI_Status * status ) int MPI_Test ( MPI_Request * request , int * flag , MPI_Status * status ) MPI_Wait \u963b\u585e\u7b49\u5f85\u901a\u4fe1\u51fd\u6570\u5b8c\u6210\u540e\u8fd4\u56de\uff1bMPI_Test \u68c0\u6d4b\u67d0\u901a\u4fe1\uff0c\u4e0d\u8bba\u5176\u662f\u5426\u5b8c\u6210\uff0c\u90fd\u7acb\u523b\u8fd4\u56de\uff0c\u5982\u679c\u901a\u4fe1\u5b8c\u6210\uff0c\u5219 flag=true \u5f53\u7b49\u5f85\u6216\u68c0\u6d4b\u7684\u901a\u4fe1\u5b8c\u6210\u65f6\uff0c\u901a\u4fe1\u8bf7\u6c42 request \u88ab\u8bbe\u7f6e\u6210 MPI_REQUEST_NULL \u8003\u5bdf\u63a5\u6536\u8bf7\u6c42\uff0cstatus \u8fd4\u56de\u4e0e MPI_Recv \u4e00\u6837\uff1b\u53d1\u9001\u8bf7\u6c42\uff0c\u5219\u4e0d\u786e\u5b9a MPI_Test \u8fd4\u56de\u65f6\uff0c\u5f53 flag=false\uff0cstatus \u4e0d\u88ab\u8d4b\u503c","title":"MPI_Wait"},{"location":"cs/hpc/mpi/#mpi_waitany","text":"\u7b49\u5f85\u3001\u68c0\u6d4b\u4e00\u7ec4\u901a\u4fe1\u8bf7\u6c42\u4e2d\u67d0\u4e00\u4e2a\u7684\u5b8c\u6210 int MPI_Waitany ( int count , MPI_Request array_of_requests [], int * index , MPI_Status * status )","title":"MPI_Waitany"},{"location":"cs/hpc/mpi/#mpi_waitall","text":"\u7b49\u5f85\u3001\u68c0\u6d4b\u4e00\u7ec4\u901a\u4fe1\u8bf7\u6c42\u5168\u90e8\u5b8c\u6210 int MPI_Waitall ( int count , MPI_Request array_of_requests [], MPI_Status array_of_statuses [] )","title":"MPI_Waitall"},{"location":"cs/hpc/mpi/#mpi_waitsome","text":"\u7b49\u5f85\u3001\u68c0\u6d4b\u4e00\u7ec4\u901a\u4fe1\u8bf7\u6c42\u7684\u90e8\u5206\u5b8c\u6210 int MPI_Waitsome ( int incount , MPI_Request array_of_requests [], int * outcount , int array_of_indices [], MPI_Status array_of_statuses [] )","title":"MPI_Waitsome"},{"location":"cs/hpc/mpi/#mpi_request_free","text":"\u901a\u4fe1\u8bf7\u6c42\u7684\u91ca\u653e\uff08\u963b\u585e\u578b\uff09 int MPI_Request_free ( MPI_Request * request )","title":"MPI_Request_free"},{"location":"cs/hpc/mpi/#mpi_cancel","text":"\u53d6\u6d88\u4e00\u4e2a\u901a\u4fe1\u8bf7\u6c42\uff08\u975e\u963b\u585e\u578b\uff09 int MPI_Cancel ( MPI_Request * request )","title":"MPI_Cancel"},{"location":"cs/hpc/mpi/#mpi_test_cancelled","text":"\u68c0\u6d4b\u4e00\u4e2a\u901a\u4fe1\u8bf7\u6c42\u662f\u5426\u88ab\u53d6\u6d88\uff08\u975e\u963b\u585e\u578b\uff09 int MPI_Test_cancelled ( MPI_Status * status , int * flag )","title":"MPI_Test_cancelled"},{"location":"cs/hpc/mpi/#mpi_probe","text":"\u6d88\u606f\u63a2\u6d4b\uff08\u963b\u585e\u578b\uff09 int MPI_Probe ( int source , int tag , MPI_Comm comm , MPI_Status * status )","title":"MPI_Probe"},{"location":"cs/hpc/mpi/#mpi_iprobe","text":"\u6d88\u606f\u63a2\u6d4b\uff08\u975e\u963b\u585e\u578b\uff09 int MPI_Iprobe ( int source , int tag , MPI_Comm comm , int * flag , MPI_Status * status )","title":"MPI_Iprobe"},{"location":"cs/hpc/mpi/#_5","text":"\u5f53\u9700\u8981\u8fdb\u884c\u8fdb\u7a0b\u4e4b\u95f4\u4e00\u5bf9\u591a\u3001\u591a\u5bf9\u4e00\u6216\u591a\u5bf9\u591a\u901a\u4fe1\u65f6\uff08\u5982\u5212\u5206\u4efb\u52a1\u3001\u6536\u96c6\u7ed3\u679c\uff09\uff0c\u4f7f\u7528\u591a\u4e2a Send/Recv \u4e0d\u65b9\u4fbf\uff0c\u53ef\u4ee5\u4f7f\u7528\u96c6\u5408\u901a\uff08Collective Communication\uff09","title":"\u96c6\u5408\u901a\u4fe1"},{"location":"cs/hpc/mpi/#barrier","text":"int MPI_Barrier ( MPI_Comm comm ) \u8fd0\u884c\u5230\u6b64\u51fd\u6570\u65f6\u8fdb\u884c\u7b49\u5f85\uff0c\u76f4\u5230 communicator \u4e2d\u6240\u6709\u8fdb\u7a0b\u90fd\u8fd0\u884c\u5230 Barrier \u4e4b\u540e\u518d\u4e00\u8d77\u7ee7\u7eed\u8fd0\u884c","title":"Barrier"},{"location":"cs/hpc/mpi/#_6","text":"","title":"\u4e00\u5bf9\u591a"},{"location":"cs/hpc/mpi/#mpi_bcast","text":"int MPI_Bcast ( void * buffer , int count , MPI_Datatype datatype , int root , MPI_Comm comm ) \u6bd4 MPI_Send \u5c11\u4e86 dest\uff0c\u5373\u5c06 buffer \u4ece root \u53d1\u9001\u5230\u6240\u6709\u8fdb\u7a0b \u5305\u542b\u53d1\u9001\u548c\u63a5\u6536\uff08root \u53d1\u9001\uff0c\u5176\u5b83\u63a5\u6536\uff0croot \u53d1\u9001\u51fa buffer\uff0c\u5176\u5b83\u63a5\u6536\u653e\u5230 buffer \u4e2d\uff09 MPI_Bcast \u6548\u7387\u4e5f\u6bd4\u591a\u4e2a Send/Recv \u6548\u7387\u9ad8\uff08\u590d\u7528\u5df2\u7ecf\u5e7f\u64ad\u8fc7\u7684\u8282\u70b9\u8fdb\u884c\u65b0\u7684\u5e7f\u64ad\uff09","title":"MPI_Bcast"},{"location":"cs/hpc/mpi/#mpi_scatter","text":"int MPI_Scatter ( const void * sendbuf , int sendcount , MPI_Datatype sendtype , void * recvbuf , int recvcount , MPI_Datatype recvtype , int root , MPI_Comm comm ) \u4e0e Broadcast \u4e0d\u540c\u7684\u662f\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u63a5\u6536\u5230\u7684\u662f sendbuf \u7684\u4e00\u90e8\u5206","title":"MPI_Scatter"},{"location":"cs/hpc/mpi/#_7","text":"","title":"\u591a\u5bf9\u4e00"},{"location":"cs/hpc/mpi/#mpi_gather","text":"int MPI_Gather ( const void * sendbuf , int sendcount , MPI_Datatype sendtype , void * recvbuf , int recvcount , MPI_Datatype recvtype , int root , MPI_Comm comm ) \u53c2\u6570\u610f\u4e49\u4e5f\u90fd\u7c7b\u4f3c\uff0c\u5c06\u6240\u6709\u8fdb\u7a0b\u4e2d\u7684 sendbuf \u53d1\u9001\u7ed9 root \u8fdb\u7a0b\uff0c\u62fc\u63a5\u5230 recvbuf \u4e2d","title":"MPI_Gather"},{"location":"cs/hpc/mpi/#mpi_reduce","text":"int MPI_Reduce ( const void * sendbuf , void * recvbuf , int count , MPI_Datatype datatype , MPI_Op op , int root , MPI_Comm comm ) \u7c7b\u4f3c MPI_Gather\uff0c\u4f46\u5c06\u6536\u96c6\u5230\u7684\u6570\u636e\u8fdb\u884c\u5904\u7406\u5408\u5e76\u5230 recvbuf \u4e2d MPI_Op \u53ef\u4ee5\u662f MPI_MAX MPI_MIN MPI_SUM MPI_PROD MPI_LAND\uff08\u903b\u8f91\u4e0e\uff09MPI_BAND\uff08\u4f4d\u4e0e\uff09MPI_LOR MPI_BOR MPI_LXOR MPI_BXOR MPI_MAXLOC\uff08\u6700\u5927\u503c\u4e0e\u4f4d\u7f6e\uff09MPI_MINLOC","title":"MPI_Reduce"},{"location":"cs/hpc/mpi/#_8","text":"","title":"\u591a\u5bf9\u591a"},{"location":"cs/hpc/mpi/#mpi_allgather","text":"int MPI_Allgather ( const void * sendbuf , int sendcount , MPI_Datatype sendtype , void * recvbuf , int recvcount , MPI_Datatype recvtype , MPI_Comm comm ) \u7c7b\u4f3c MPI_Gather\uff0c\u4f46\u6240\u6709\u8fdb\u7a0b\u90fd\u4f1a\u5f97\u5230 MPI_Gather \u4e2d root \u5f97\u5230\u7684\u5185\u5bb9","title":"MPI_Allgather"},{"location":"cs/hpc/mpi/#mpi_alltoall","text":"int MPI_Alltoall ( const void * sendbuf , int sendcount , MPI_Datatype sendtype , void * recvbuf , int recvcount , MPI_Datatype recvtype , MPI_Comm comm )","title":"MPI_Alltoall"},{"location":"cs/hpc/mpi/#_9","text":"\u6301\u4e45\u901a\u4fe1\u8bf7\u6c42\u53ef\u7528\u4e8e\u4ee5\u5b8c\u5168\u76f8\u540c\u7684\u65b9\u5f0f\uff08\u76f8\u540c\u7684\u901a\u4fe1\u5668\u3001\u6536\u53d1\u7f13\u51b2\u533a\u3001\u6570\u636e\u7c7b\u578b\u4e0e\u957f\u5ea6\u3001\u6e90/\u76ee\u7684\u5730\u5740\u548c\u6d88\u606f\u6807\u7b7e\uff09\u91cd\u590d\u6536\u53d1\u7684\u6d88\u606f\u3002\u76ee\u7684\u662f\u4e3a\u4e86\u51cf\u5c11\u5904\u7406\u6d88\u606f\u7684\u5f00\u9500\u53ca\u7b80\u5316 MPI \u7a0b\u5e8f","title":"\u6301\u4e45\u901a\u4fe1"},{"location":"cs/hpc/openmp/","text":"OpenMP \u57fa\u7840 \u00b6 \u7ea6 1763 \u4e2a\u5b57 38 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 6 \u5206\u949f \u4ec0\u4e48\u662f OpenMP \u00b6 Open Multi-Processing OpenMP \u662f\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u63a5\u53e3\uff08API\uff09\uff0c\u53ef\u4ee5\u7b80\u5355\u7406\u89e3\u4e3a\u4e00\u4e2a\u5e93 \u652f\u6301 C\u3001C++ \u548c Fortran \u652f\u6301\u591a\u79cd\u6307\u4ee4\u96c6\u548c\u64cd\u4f5c\u7cfb\u7edf OpenMP \u7684\u9002\u7528\u8303\u56f4\uff1a\u591a\u7ebf\u7a0b\u3001\u5171\u4eab\u5185\u5b58 \u5171\u4eab\u5b58\u50a8\u4f53\u7cfb\u7ed3\u6784\u4e0a\u7684\u4e00\u4e2a\u5e76\u884c\u7f16\u7a0b\u6a21\u578b \u9002\u7528\u4e8e SMP\uff08Symmetric Multi-Processor\uff09\u5171\u4eab\u5185\u5b58\u591a\u5904\u7406\u7cfb\u7edf\u548c\u591a\u6838\u5904\u7406\u5668\u4f53\u7cfb\u7ed3\u6784 \u4e09\u7c7b\u4e3b\u8981 API\uff08\u8868\u73b0\u4e3a\u7f16\u8bd1\u5236\u5bfc\u6307\u4ee4\uff0c\u4f46\u5b9e\u9645\u4e0a\u4ecd\u4e3a API\uff09\uff1a\u7f16\u8bd1\u5668\u6307\u4ee4\u3001\u8fd0\u884c\u65f6\u5e93\u51fd\u6570\u3001\u73af\u5883\u53d8\u91cf \u4f20\u7edf\u4e0a\uff0c\u6211\u4eec\u5229\u7528 OpenMP \u8fdb\u884c\u5355\u673a\u5668 CPU \u4f18\u5316\uff08\u53ef\u8de8\u5904\u7406\u5668\uff09\uff0c\u4e0d\u8fc7\u5728\u8f83\u65b0\u7684 OpenMP \u7248\u672c\u7684\u4e2d\uff0c\u4f60\u751a\u81f3\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528 OpenMP \u5c06\u4ee3\u7801\u4f18\u5316\u5230 GPU \u7b49\u5f02\u6784\u8ba1\u7b97\u8bbe\u5907\u4e0a \u5e76\u884c\u6027 \u00b6 \u8fdb\u7a0b\u548c\u7ebf\u7a0b \u00b6 \u8fdb\u7a0b \u6bcf\u4e2a\u8fdb\u7a0b\u6709\u81ea\u5df1\u72ec\u7acb\u7684\u5730\u5740\u7a7a\u95f4 CPU \u5728\u8fdb\u7a0b\u4e4b\u95f4\u5207\u6362\u9700\u8981\u8fdb\u884c\u4e0a\u4e0b\u6587\u5207\u6362 \u7ebf\u7a0b \u4e00\u4e2a\u8fdb\u7a0b\u4e0b\u7684\u7ebf\u7a0b\u5171\u4eab\u5730\u5740\u7a7a\u95f4 CPU \u5728\u7ebf\u7a0b\u4e4b\u95f4\u5207\u6362\u5f00\u9500\u5c0f \u7ebf\u7a0b\u7684\u786c\u4ef6\u8c03\u5ea6 \u00b6 \u786c\u4ef6\u548c\u64cd\u4f5c\u7cfb\u7edf\u4f1a\u81ea\u52a8\u5c06\u7ebf\u7a0b\u8c03\u5ea6\u5230 CPU \u6838\u5fc3\u8fd0\u884c \u5f53\u7ebf\u7a0b\u6570\u76ee\u8d85\u8fc7\u6838\u5fc3\u6570\uff0c\u4f1a\u51fa\u73b0\u591a\u4e2a\u7ebf\u7a0b\u62a2\u5360\u4e00\u4e2a CPU \u6838\u5fc3\uff0c\u5bfc\u81f4\u6027\u80fd\u4e0b\u964d \u8d85\u7ebf\u7a0b\uff08hyper-threading\uff09\u5c06\u5355\u4e2a CPU \u7269\u7406\u6838\u5fc3\u62bd\u8c61\u4e3a\u591a\u4e2a\uff08\u76ee\u524d\u901a\u5e38\u4e3a 2 \u4e2a\uff09\u903b\u8f91\u6838\u5fc3\uff0c\u5171\u4eab\u7269\u7406\u6838\u5fc3\u7684\u8ba1\u7b97\u8d44\u6e90 \u786c\u4ef6\u7684\u5185\u5b58\u6a21\u578b \u00b6 CPU \u6838\u5fc3\u5728\u4e3b\u5b58\u4e4b\u4e0a\u6709 L1,L2,L3 \u591a\u7ea7\u7f13\u5b58 L1,L2 \u7f13\u5b58\u662f\u6838\u5fc3\u79c1\u6709\u7684 \u786c\u4ef6\u548c\u64cd\u4f5c\u7cfb\u7edf\u4fdd\u8bc1\u4e0d\u540c\u6838\u5fc3\u7684\u7f13\u5b58\u4e00\u81f4\u6027\uff08coherence\uff09 \u88ab\u79f0\u4e3a cache coherence non-uniform memory access\uff08ccNUMA\uff09 \u7f13\u5b58\u4e00\u81f4\u6027\u4f1a\u5e26\u6765 False Sharing \u7684\u95ee\u9898 Fork-Join \u6a21\u578b \u00b6 \u5355\u7ebf\u7a0b\uff08initial thread\uff09\u5f00\u59cb\u6267\u884c \u8fdb\u5165\u5e76\u884c\u533a\uff08parallel region\uff09\u5f00\u59cb\u5e76\u884c\u6267\u884c \u5728\u5e76\u884c\u533a\u7ed3\u5c3e \u8fdb\u884c\u540c\u6b65 \u548c\u7ed3\u675f\u7ebf\u7a0b\uff0c\u7ee7\u7eed\u5355\u7ebf\u7a0b\u6267\u884c\u7a0b\u5e8f OpenMP \u7f16\u7a0b \u00b6 \u5b89\u88c5 \u00b6 \u542b\u5728 Ubuntu \u63d0\u4f9b\u7684 build-essential \u5305\u4e2d echo | cpp -fopenmp -dM | grep -i open # #define _OPENMP 201511 \u7f16\u8bd1\u4f7f\u7528 \u00b6 \u53ef\u4ee5\u76f4\u63a5\u5728\u7f16\u8bd1\u8bed\u53e5\u6dfb\u52a0 -fopenmp \uff0c\u5982 g++ -O2 -std = c++14 -fopenmp hello.cp -o hello \u5982\u679c\u7528 cmake \u6784\u5efa\u9879\u76ee\uff0cgcc \u52a0\u5165 -Wunknown-pragmas \u4f1a\u5728\u7f16\u8bd1\u65f6\u62a5\u544a\u6ca1\u6709\u5904\u7406\u7684 #pragma \uff0c\u53ef\u4ee5\u7528\u6765\u68c0\u67e5\u662f\u5426\u6709\u9057\u6f0f\u7684 OpenMP \u6307\u4ee4 find_package ( OpenMP ) add_compile_options ( -Wunknown-pragmas ) add_executable ( hello src/hello.cpp ) target_link_libraries ( hello OpenMP::OpenMP_CXX ) \u5e93\u51fd\u6570 \u00b6 \u4f7f\u7528\u65f6\u8981 #include \uff0c\u4e00\u4e9b\u5e38\u7528\u51fd\u6570\uff1a void omp_set_num_threads ( int ) \uff1a\u8bbe\u7f6e\u5e76\u884c\u533a\u8fd0\u884c\u7684\u7ebf\u7a0b\u6570 int omp_get_thread_num ( void ) \uff1a\u83b7\u53d6\u5f53\u524d\u7ebf\u7a0b\u53f7 int omp_get_num_threads ( void ) \uff1a\u83b7\u53d6\u603b\u7ebf\u7a0b\u6570 double omp_get_wtime ( void ) \uff1a\u83b7\u53d6\u65f6\u95f4\uff0c\u5e38\u7528\u4e8e\u8ba1\u7b97\u7ebf\u7a0b\u5185\u8bed\u53e5\u6267\u884c\u65f6\u95f4 double opm_get_wtick ( void ) \uff1a\u83b7\u5f97 omp_get_wtime \u65f6\u95f4\u7cbe\u5ea6 OpenMP \u4f1a\u8bfb\u53d6\u73af\u5883\u53d8\u91cf OMP_NUM_THREADS \u6765\u51b3\u5b9a\u521b\u5efa\u7684\u7ebf\u7a0b\u6570 \u5236\u5bfc\u8bed\u53e5 \u00b6 \u540c\u4e00\u7c7b openmp \u5236\u5bfc\u8bed\u53e5\u79f0\u4e3a\u4e00\u79cd\u6784\u9020\uff08construct\uff09 \u5f62\u5f0f\u4e3a #pragma omp \u4f7f\u7528 {} \u6807\u8bb0\u4f5c\u7528\u7684\u4ee3\u7801\u5757 \u652f\u6301\u7684\u4ece\u53e5 default(shared|none) \uff1a\u6307\u5b9a\u9ed8\u8ba4 shared \uff1a\u9ed8\u8ba4\u4e3a\u5171\u4eab\u53d8\u91cf none \uff1a\u65e0\u9ed8\u8ba4\u53d8\u91cf\u7c7b\u578b\uff0c\u6bcf\u4e2a\u53d8\u91cf\u90fd\u9700\u8981\u53e6\u5916\u6307\u5b9a shared(list) \uff1a\u6307\u5b9a\u5171\u4eab\u53d8\u91cf\u5217\u8868\u53d8\u91cf\u7c7b\u578b \u5171\u4eab\u53d8\u91cf\u5728\u5185\u5b58\u4e2d\u53ea\u6709\u4e00\u4efd\uff0c\u6240\u6709\u7ebf\u7a0b\u90fd\u53ef\u4ee5\u8bbf\u95ee \u8bf7\u4fdd\u8bc1\u5171\u4eab\u8bbf\u95ee\u4e0d\u4f1a\u51b2\u7a81 \u4e0d\u7279\u522b\u6307\u5b9a\u5e76\u884c\u533a\u53d8\u91cf \u9ed8\u8ba4\u4e3ashared private(list) \uff1a\u6307\u5b9a\u79c1\u6709\u53d8\u91cf\u5217\u8868 \u6bcf\u4e2a\u7ebf\u7a0b\u751f\u6210\u4e00\u4efd\u4e0e\u8be5\u79c1\u6709\u53d8\u91cf\u540c\u7c7b\u578b\u7684\u6570\u636e\u5bf9\u8c61 \u53d8\u91cf\u9700\u8981 \u91cd\u65b0\u521d\u59cb\u5316 firstprivate(list) \u540c private \u5bf9\u53d8\u91cf\u6839\u636e\u795d\u7ebf\u7a0b\u4e2d\u7684\u6570\u636e\u8fdb\u884c\u521d\u59cb\u5316 lastprivate(list) \u540cprivate \u6267\u884c\u6700\u540e\u4e00\u4e2a\u5faa\u73af\u7684\u7ebf\u7a0b\u7684\u79c1\u6709\u6570\u636e\u53d6\u51fa\u8d4b\u503c\u7ed9\u4e3b\u7ebf\u7a0b\u7684\u53d8\u91cf nowait \uff1a\u53d6\u6d88\u4ee3\u7801\u5757\u7ed3\u675f\u7684\u6805\u680f\u540c\u6b65\uff08barrier\uff09 collapse(n) \uff1a\u5e94\u7528\u4e8e n \u91cd\u5faa\u73af\uff0c\u5408\u5e76\uff08\u5c55\u5f00\uff09\u5faa\u73af\u5e76\u884c \u6ce8\u610f\u5faa\u73af\u4e4b\u95f4\u662f\u5426\u6709\u6570\u636e\u4f9d\u8d56 ordered \uff1a\u58f0\u660e\u6709\u6f5c\u5728\u7684\u987a\u5e8f\u6267\u884c\u90e8\u5206 \u4f7f\u7528 #pragma omp ordered \u6807\u8bb0\u987a\u5e8f\u6267\u884c\u4ee3\u7801\uff08\u642d\u914d\u4f7f\u7528\uff09 ordered \u533a\u5185\u7684\u8bed\u53e5\u4efb\u610f\u65f6\u523b\u4ec5\u7531\u6700\u591a\u4e00\u4e2a\u7ebf\u7a0b\u6267\u884c schedule(type [, chuck]) \uff1a\u63a7\u5236\u8c03\u5ea6\u65b9\u5f0f static \uff1achunk \u5927\u5c0f\u56fa\u5b9a\uff08\u9ed8\u8ba4 n/p\uff09 dynamic \uff1a\u52a8\u6001\u8c03\u5ea6\uff0cchunk \u5927\u5c0f\u56fa\u5b9a\uff08\u9ed8\u8ba4 1\uff09 guided \uff1achunk \u5927\u5c0f\u52a8\u6001\u9012\u51cf runtime \uff1a\u7531\u7cfb\u7edf\u73af\u5883 OMP_SCHEDULE \u51b3\u5b9a parallel \u7ebf\u7a0b\u5e76\u884c \u00b6 \u4f7f\u7528 #pragma omp parallel \u521b\u5efa\u5e76\u884c\u5757\u6765\u5e76\u884c\u8fd0\u884c\u540c\u4e00\u6bb5\u7a0b\u5e8f\uff1a #include