{"id":117,"date":"2017-10-31T21:30:17","date_gmt":"2017-10-31T13:30:17","guid":{"rendered":"https:\/\/blog.indeex.club\/?p=117"},"modified":"2020-06-20T23:00:02","modified_gmt":"2020-06-20T15:00:02","slug":"%e7%a5%9e%e7%bb%8f%e7%bd%91%e7%bb%9c%e6%bc%94%e7%ae%97-%e5%a4%9a%e5%b1%82%e6%84%9f%e7%9f%a5%e5%99%a8%e4%b8%8e%e5%8f%8d%e4%bc%a0%e9%80%92%e6%bc%94%e7%ae%97%e6%b3%95","status":"publish","type":"post","link":"https:\/\/blog.indeex.club\/index.php\/2017\/10\/31\/%e7%a5%9e%e7%bb%8f%e7%bd%91%e7%bb%9c%e6%bc%94%e7%ae%97-%e5%a4%9a%e5%b1%82%e6%84%9f%e7%9f%a5%e5%99%a8%e4%b8%8e%e5%8f%8d%e4%bc%a0%e9%80%92%e6%bc%94%e7%ae%97%e6%b3%95\/","title":{"rendered":"\u795e\u7ecf\u7f51\u7edc\u6f14\u7b97\u2014\u2014\u591a\u5c42\u611f\u77e5\u5668\u4e0e\u53cd\u4f20\u9012\u6f14\u7b97\u6cd5"},"content":{"rendered":"<hr \/>\n<h4>\u524d\u8a00<\/h4>\n<p>\u7531\u4e8e\u5355\u5c42\u611f\u77e5\u5668\u5e76\u6ca1\u6709\u529e\u6cd5\u5904\u7406\u50cfXOR \u8fd9\u6837\u7684\u51fd\u6570\u3002<\/p>\n<p>\u4e3a\u4e86\u63d0\u5347\u300c\u611f\u77e5\u5668\u300d\u7684\u80fd\u529b\uff0c\u53ef\u4ee5\u5728\u8f93\u5165\u4e0e\u8f93\u51fa\u8282\u70b9\u4e4b\u95f4\uff0c\u518d\u52a0\u5165\u4e00\u4e9b\u9690\u85cf\u5c42\uff0c\u5e76\u900f\u8fc7\u8fd9\u4e9b\u9690\u85cf\u5c42\u5bf9\u6574\u4e2a\u5b66\u4e60\u7a7a\u95f4\u8fdb\u884c\u66f4\u591a\u6b21\u7684\u5206\u5272\uff0c\u4ee5\u4fbf\u80fd\u5904\u7406XOR \u8fd9\u7c7b\u96be\u4ee5\u7528\u5355\u4e00\u7ebf\u6027\u51fd\u6570\u5206\u5272\u7684\u95ee\u9898\u3002<\/p>\n<p>\u4f46\u662f\u52a0\u5165\u4e86\u9690\u85cf\u5c42\u4e4b\u540e\uff0c\u611f\u77e5\u5668\u7684\u5b66\u4e60\u4e0e\u8bad\u7ec3\u5c31\u66f4\u590d\u6742\u4e86\uff0c\u8fd9\u65f6\u5fc5\u987b\u6709\u8db3\u591f\u7684\u300c\u6570\u5b66\u7406\u8bba\u300d\u624d\u80fd\u4e3a\u300c\u591a\u5c42\u611f\u77e5\u5668\u300d\u63d0\u4f9b\u4e00\u4e2a\u65b9\u5411\uff0c\u800c\u300c\u53cd\u4f20\u9012\u6f14\u7b97\u6cd5\u300d (Back-Propagation ) \u6b63\u662f\u8fd9\u6837\u4e00\u4e2a\u53ef\u4ee5\u63d0\u4f9b\u300c\u591a\u5c42\u611f\u77e5\u5668\u300d\u5b66\u4e60\u65b9\u5411\u7684\u597d\u4e1c\u897f\uff0c\u5176\u6570\u5b66\u57fa\u7840\u5219\u662f\u5efa\u6784\u5728\u591a\u53d8\u6570\u5fae\u5206\u300c\u68af\u5ea6\u300d\u6982\u5ff5\u4e4b\u4e0a\u7684\u4e00\u79cd\u300c\u68af\u5ea6\u4e0b\u964d\u6cd5\u300d\u3002<\/p>\n<p>\u4e8b\u5b9e\u4e0a\u3001\u53cd\u4f20\u9012\u6f14\u7b97\u6cd5(Back-Propagation) \u7684\u6982\u5ff5\u57281974 \u5e74\u5c31\u7531Paul J. Werbos \u6240\u63d0\u51fa\u6765\u4e86\uff0c\u4f46\u6ca1\u6709\u53d7\u5230\u91cd\u89c6\uff0c\u540e\u6765\u57281986 \u5e74\u53c8\u88abRumelhart \u91cd\u65b0\u53d1\u660e\u4e86\u51fa\u6765\uff0c\u800c\u4e14\u53d7\u5230\u4e86\u5e7f\u6cdb\u7684\u91cd\u89c6\u3002<\/p>\n<p>\u5728\u672c\u6587\u4e2d\uff0c\u6211\u4eec\u5c06\u8bf4\u660e\u300c\u591a\u5c42\u611f\u77e5\u5668\u300d\u4e0e\u300c\u53cd\u4f20\u9012\u6f14\u7b97\u6cd5\u300d\u7684\u6982\u5ff5\uff0c\u5e76\u7528JavaScript \u8fdb\u884c\u5b9e\u73b0\u3002<\/p>\n<h4>\u6a21\u578b\u4e0e\u6570\u5b66\u539f\u7406<\/h4>\n<p>\u300c\u591a\u5c42\u611f\u77e5\u5668\u300d\u6a21\u578b\u5305\u542b\u300c\u8f93\u5165\u5c42\u3001\u9690\u85cf\u5c42\u4e0e\u8f93\u51fa\u5c42\u300d\uff0c\u8fd9\u79cd\u591a\u5c42\u611f\u77e5\u5668\u4e0e\u300c\u5355\u5c42\u611f\u77e5\u5668\u300d\u7684\u4e00\u4e2a\u660e\u663e\u4e0d\u540c\u70b9\uff0c\u5728\u4e8e\u62e5\u6709\u4e00\u4e2a\u9690\u85cf\u5c42\uff0c\u56e0\u6b64\u5176\u80fd\u529b\u589e\u5f3a\u4e86\u5f88\u591a\u3002<\/p>\n<p><img src=\"http:\/\/hungking.cc\/assets\/imgs\/indeex.cc\/MLP.jpg\" alt=\"\u795e\u7ecf\u7f51\u7edc\u6f14\u7b97\u2014\u2014\u591a\u5c42\u611f\u77e5\u5668\u4e0e\u53cd\u4f20\u9012\u6f14\u7b97\u6cd5\" \/><\/p>\n<p>\u65e2\u7136\u53cd\u4f20\u9012\u6f14\u7b97\u6cd5\u662f\u4e00\u79cd\u68af\u5ea6\u4e0b\u964d\u6cd5\uff0c\u90a3\u4e48\u6211\u4eec\u53ea\u8981\u80fd\u8ba1\u7b97\u51fa\u68af\u5ea6\u7684\u65b9\u5411\uff0c\u5c31\u80fd\u8ba9\u300c\u591a\u5c42\u611f\u77e5\u5668\u300d\u7684\u6743\u91cd\u671d\u7740\u80fd\u91cf\u4e0b\u964d\u6700\u5feb\u7684\u65b9\u5411\u524d\u8fdb\u3002<\/p>\n<p>\u90a3\u4e48\uff0c\u600e\u4e48\u8ba1\u7b97\u68af\u5ea6\u5462\uff1f\u5148\u8ba9\u6211\u4eec\u6765\u770b\u4e00\u5f20\u591a\u53d8\u6570\u7684\u80fd\u91cf\u66f2\u7ebf\u56fe\uff1a<\/p>\n<p><center><br \/>\n<img src=\"http:\/\/hungking.cc\/assets\/imgs\/indeex.cc\/Gradient.jpg\" alt=\"\u795e\u7ecf\u7f51\u7edc\u6f14\u7b97\u2014\u2014\u591a\u5c42\u611f\u77e5\u5668\u4e0e\u53cd\u4f20\u9012\u6f14\u7b97\u6cd5\" \/><br \/>\n<\/center><\/p>\n<p>\u4e0a\u56fe\u4e2d\uff0c\u5e95\u4e0b\u7684\u5e73\u9762\u4e0a\u6240\u753b\u7684\u5411\u91cf\uff0c\u5c31\u662f\u4e0a\u9762\u90a3\u4e2a\u66f2\u9762\u5728\u8be5\u70b9\u68af\u5ea6\u7684\u6295\u5f71\uff0c\u6307\u793a\u4e86\u8be5\u5e73\u9762\u6700\u9661\u7684\u4e0b\u964d\u65b9\u5411\u3002<\/p>\n<p>\u5728\u76f4\u89c9\u6982\u5ff5\u4e0a\uff0c\u66f2\u9762\u4e0a\u67d0\u4e00\u70b9\u7684\u68af\u5ea6\uff0c\u5176\u5b9e\u662f\u66f2\u9762\u5728\u8be5\u70b9\u5207\u5e73\u9762\u7684\u6cd5\u5411\u91cf\uff0c\u68af\u5ea6\u7684\u8ba1\u7b97\u516c\u5f0f\u5982\u4e0b\uff1a<\/p>\n<p><center><br \/>\n$\\Delta f = \\frac{\\delta f}{\\delta x_1}\\vec{e_1} + &#8230; + \\frac{\\delta f}{\\delta x_n}\\vec{e_n}$<br \/>\n<\/center><\/p>\n<p>\u5982\u679c\u6211\u4eec\u53ef\u4ee5\u8ba1\u7b97\u67d0\u51fd\u6570\u4e4b\u68af\u5ea6\u7684\u8bdd\uff0c\u53ea\u8981\u671d\u7740\u68af\u5ea6\u7684\u65b9\u5411\u8d70\u53bb\uff0c\u5c31\u662f\u6700\u5feb\u4e0b\u964d\u7684\u9053\u8def\u4e86\u3002<\/p>\n<p>\u91c7\u7528\u8fd9\u79cd\u6cbf\u7740\u68af\u5ea6\u65b9\u5411\u5f80\u4e0b\u8d70\u7684\u65b9\u6cd5\uff0c\u5c31\u79f0\u4e3a\u300c\u68af\u5ea6\u4e0b\u964d\u6cd5\u300d(Gradient Descent)\uff0c\u8fd9\u79cd\u65b9\u6cd5\u53ef\u4ee5\u8bf4\u662f\u4e00\u79cd\u300c\u8d2a\u5a6a\u6f14\u7b97\u6cd5\u300d(Greedy Algorithm)\uff0c\u56e0\u4e3a\u5b83\u6bcf\u6b21\u90fd\u671d\u7740\u6700\u659c\u7684\u65b9\u5411\u8d70\u53bb\uff0c\u4f01\u56fe\u5f97\u5230\u6700\u5927\u7684\u4e0b\u964d\u5e45\u5ea6\u3002<\/p>\n<p>\u4e3a\u4e86\u8981\u8ba1\u7b97\u68af\u5ea6\uff0c\u6211\u4eec\u4e0d\u80fd\u91c7\u7528\u300c\u5355\u5c42\u611f\u77e5\u5668\u91cc\u7684\u90a3\u79cd\u4e0d\u53ef\u5fae\u5206\u7684sign() \u68af\u5ea6\u51fd\u6570\u300d (\u5982\u4e0b\u56fea\u6240\u793a)\uff0c\u56e0\u4e3a\u8fd9\u6837\u5c31\u4e0d\u80fd\u7528\u5fae\u79ef\u5206\u7684\u65b9\u5f0f\u8ba1\u7b97\u51fa\u68af\u5ea6\u4e86\uff0c\u800c\u5fc5\u987b\u6539\u7528\u53ef\u4ee5\u5fae\u5206\u7684\u8fde\u7eed\u51fd\u6570sigmoid() (\u5982\u4e0b\u56feb \u6240\u793a)\uff0c\u8fd9\u6837\u624d\u80fd\u591f\u900f\u8fc7\u5fae\u5206\u8ba1\u7b97\u51fa\u68af\u5ea6\u3002<\/p>\n<p><img src=\"http:\/\/hungking.cc\/assets\/imgs\/indeex.cc\/MLP_neuron.jpg\" alt=\"\u795e\u7ecf\u7f51\u7edc\u6f14\u7b97\u2014\u2014\u591a\u5c42\u611f\u77e5\u5668\u4e0e\u53cd\u4f20\u9012\u6f14\u7b97\u6cd5\" \/><\/p>\n<p>\u5f53\u6211\u4eec\u6539\u6210\u53ef\u5fae\u5206\u7684sigmoid() \u51fd\u6570\u4e4b\u540e\uff0c\u5c31\u53ef\u4ee5\u8fd0\u7528\u5fae\u79ef\u5206\u516c\u5f0f\uff0c\u4e8b\u5148\u6c42\u51fa\u5176\u5fae\u5206\u51fd\u6570dsigmoid() \u3002\u6211\u8fd9\u91cc\u4e86\u53cc\u66f2\u6b63\u5207\u51fd\u6570tanh(x) \u4f5c\u4e3asigmoid() \u51fd\u6570\uff0c\u5176\u5b9a\u4e49\u5982\u4e0b\u6240\u793a\uff1a<\/p>\n<p><center><br \/>\n$sinhx = \\frac{e^x &#8211; e^{-x}}{2}$<br \/>\n<\/center><\/p>\n<p><center><br \/>\n$coshx = \\frac{e^x + e^{-x}}{2}$<br \/>\n<\/center><\/p>\n<p><center><br \/>\n$tanhx = \\frac{sinhx}{coshx}$<br \/>\n<\/center><\/p>\n<p>\u7531\u4e8etanh(x)\u7684\u5fae\u5206\u662f$1 &#8211; x^2$\uff0c\u56e0\u6b64\u5728\u4e0b\u5217\u8fd9\u6bb5\u7a0b\u5e8f\u4e2d\uff0c\u6211\u4eec\u5b9a\u4e49\u8fd9\u4e9b\u51fd\u6570\u7684\u8ba1\u7b97\u65b9\u5f0f:<\/p>\n<pre><code class=\"language-javascript line-numbers\">var tanh=function(x) {\n  return (Math.exp(x) - Math.exp(-x)) \/ (Math.exp(x) + Math.exp(-x));\n}\n\nfunction sigmoid(x) {\n  return tanh(x); \/\/ \u8868\u73b0\u8f83\u597d\n}\n\nfunction dsigmoid(x) {\n  return 1.0 - x*x;\n}\n<\/code><\/pre>\n<p>\u4e0a\u8ff0\u7a0b\u5e8f\u4e2ddsigmoid(y)\u4e2d\u76841.0 &#8211; x*x\u5219\u662fy=tanh(x)\u7684\u5fae\u5206\u5f0f\uff0c\u5bf9\u6bcf\u4e2ay=tanh(x)\u90fd\u53d6\u5fae\u5206\u5f0f\u7684\u65f6\u5019\uff0c\u5176\u5b9e\u5c31\u662f\u68af\u5ea6\u7684\u65b9\u5411\u3002<\/p>\n<p>(<strong>node<\/strong>\uff1a<code>\u6211\u770b\u5230\u56fd\u5185\u6709\u4e9b\u4f8b\u5b50\u4f1a\u91c7\u7528\u4f5c\u4e3asigmoid()\u51fd\u6570\uff0c\u8fd9\u4e0etanh(x)\u51fd\u6570\u7684\u5f62\u72b6\u975e\u5e38\u7c7b\u4f3c\uff0c\u4e5f\u662f\u4e00\u79cd\u53ef\u884c\u7684\u65b9\u6cd5<\/code>)\u3002<\/p>\n<pre><code class=\"language-javascript line-numbers\">var log = console.log;\n\n\/\/ \u5efa\u7acb\u5927\u5c0f\u4e3a n \u7684\u9635\u5217\u5e76\u586b\u5165\u521d\u59cb\u503c fill\nvar makeArray=function(n, fill) {\n  var a = [];\n  for (var i=0; i&lt;n; i++)\n    a.push(fill);\n  return a;\n}\n\n\/\/ \u5efa\u7acb\u5927\u5c0f\u4e3a I*J \u7684\u77e9\u9635\u5e76\u586b\u5165\u521d\u59cb\u503c fill\nvar makeMatrix=function(I, J, fill) {\n  var m = [];\n  for (var i=0; i&lt;I; i++)\n    m.push(makeArray(J, fill));\n  return m;\n}\n\n\/\/ numbersToStr():\u4ee5\u7cbe\u5ea6\u4e3a precision \u4e2a\u5c0f\u6570\u4f86\u8f93\u51fa\u9635\u5217 array\nvar numbersToStr=function(array, precision) {\n  var rzStr = \"\";\n  for (var i=0; i&lt;array.length; i++) {\n    if (array[i]&gt;=0)\n      rzStr+=\" \"+array[i].toFixed(precision)+\" \";\n    else\n      rzStr+=array[i].toFixed(precision)+\" \";\n  }\n  return rzStr;\n}\n\n\/\/ rand():\u83b7\u53d6 a \u5230 b \u4e4b\u95f4\u7684\u4e00\u4e2a\u968f\u673a\u6570\nvar rand=function(a, b) {\n  return (b-a)*Math.random() + a;\n}\n\n\/\/ sigmoid(x)=tanh(x)\nfunction sigmoid(x) {\n  var tanh = (Math.exp(x) - Math.exp(-x)) \/ (Math.exp(x) + Math.exp(-x));\n  return tanh; \/\/ \u53cc\u66f2\u6b63\u5207\u51fd\u6570\n}\n\n\/\/ dsigmoid(x)=1-x^2;\n\nfunction dsigmoid(x) {\n  return 1.0 - x*x;\n}\n\nfunction NeuralNet() {\n\n  \/\/ init()\uff1a\u8bbe\u5b9a\u7f51\u7edc\u7ed3\u6784\u4e0e\u6743\u91cd\u7684\u968f\u673a\u521d\u59cb\u503c\u7684\u51fd\u6570\u3002\n  this.init=function(ni, nh, no) {\n    \/\/ number of input, hidden, and output nodes\n    this.ni = ni + 1; \/\/ +1 for bias node\n    this.nh = nh;\n    this.no = no;\n\n    \/\/  \u5efa\u7acb\u5404\u5c42\u7684\u8282\u70b9\u9635\u5217\n    this.ai = makeArray(this.ni, 1.0);\n    this.ah = makeArray(this.nh, 1.0);\n    this.ao = makeArray(this.no, 1.0);\n\n    \/\/  \u5efa\u7acb\u6743\u91cd\u77e9\u9635\n    this.wi = makeMatrix(this.ni, this.nh, 0.0);\n    this.wo = makeMatrix(this.nh, this.no, 0.0);\n\n    \/\/ \u968f\u673a\u8bbe\u5b9a\u6743\u91cd\u521d\u59cb\u503c\u3002\n    for (var i=0; i&lt;this.ni; i++)\n      for (var j=0; j&lt;this.nh; j++)\n        this.wi[i][j] = rand(-0.2, 0.2);\n    for (var j=0; j&lt;this.nh; j++)\n      for (var k=0; k&lt;this.no; k++)\n        this.wo[j][k] = rand(-2.0, 2.0);\n\n    \/\/ \u4e0a\u4e00\u6b21\u7684\u6539\u53d8\u91cf\u77e9\u9635\uff0c\u7528\u6765\u5f53\u52a8\u91cf\u4ee5\u4fbf\u722c\u8fc7\u80a9\u578b\u533a\u57df\u3002\n    this.ci = makeMatrix(this.ni, this.nh, 0.0);\n    this.co = makeMatrix(this.nh, this.no, 0.0);\n    return this;\n  }\n\n  \/\/ \u8ba1\u7b97\u7f51\u7edc\u7684\u8f93\u51fa\u7684\u51fd\u6570\n  this.update=function(inputs) {\n    \/\/ \u8bbe\u5b9a\u8f93\u5165\u503c\n    for (var i=0; i&lt;this.ni-1; i++)\n      this.ai[i] = inputs[i];\n\n    \/\/ \u8ba1\u7b97\u9690\u85cf\u5c42\u8f93\u51fa\u503c ah[j]\n    for (var j=0; j&lt;this.nh; j++) {\n      var sum = 0.0;\n      for (var i=0; i&lt;this.ni; i++)\n        sum = sum + this.ai[i] * this.wi[i][j];\n      this.ah[j] = sigmoid(sum);\n    }\n\n    \/\/ \u8ba1\u7b97\u8f93\u51fa\u5c42\u8f93\u51fa\u503c ao[k]\n    for (var k=0; k&lt;this.no; k++) {\n      var sum = 0.0;\n      for (var j=0; j&lt;this.nh; j++)\n        sum = sum + this.ah[j] * this.wo[j][k];\n      this.ao[k] = sigmoid(sum);\n    }\n\n    return this.ao; \/\/ \u4f20\u56de\u8f93\u51fa\u5c42\u8f93\u51fa\u503c ao\n  }\n\n  \/\/ \u53cd\u4f20\u9012\u5b66\u4e60\u7684\u51fd\u6570 (\u91cd\u8981)\n  this.backPropagate = function(targets, rate, moment) {\n    \/\/ calculate error terms for output : \u8ba1\u7b97\u8f93\u51fa\u5c42\u8bef\u5dee\n    var output_deltas = makeArray(this.no, 0.0);\n    for (var k=0; k&lt;this.no; k++) {\n      var error = targets[k]-this.ao[k];\n      output_deltas[k] = dsigmoid(this.ao[k]) * error;\n    }\n\n    \/\/ \u8ba1\u7b97\u9690\u85cf\u5c42\u8bef\u5dee\n    var hidden_deltas = makeArray(this.nh, 0.0);\n    for (var j=0; j&lt;this.nh; j++) {\n      var error = 0.0;\n      for (var k=0; k&lt;this.no; k++) {\n              \/\/ \u6ce8\u610f\u3001\u5728\u6b64\u8f93\u51fa\u5c42\u8bef\u5dee output_deltas \u4f1a\u53cd\u4f20\u9012\u5230\u9690\u85cf\u5c42\uff0c\u56e0\u6b64\u624d\u79f0\u4e3a\u53cd\u4f20\u9012\u7b97\u6cd5\u3002\n        error = error + output_deltas[k]*this.wo[j][k]; \n          }\n      hidden_deltas[j] = dsigmoid(this.ah[j]) * error;\n    }\n\n    \/\/ \u66f4\u65b0\u8f93\u51fa\u5c42\u6743\u91cd\n    for (var j=0; j&lt;this.nh; j++) {\n      for (var k=0; k&lt;this.no; k++) {\n        var change = output_deltas[k]*this.ah[j];\n        this.wo[j][k] = this.wo[j][k] + rate*change + moment*this.co[j][k];\n        this.co[j][k] = change;\n        \/\/ print N*change, M*this.co[j][k]\n      }\n    }\n\n    \/\/ \u66f4\u65b0\u8f93\u5165\u5c42\u6743\u91cd\n    for (var i=0; i&lt;this.ni; i++) {\n      for (var j=0; j&lt;this.nh; j++) {\n        var change = hidden_deltas[j]*this.ai[i];\n        this.wi[i][j] = this.wi[i][j] + rate*change + moment*this.ci[i][j];\n        this.ci[i][j] = change;\n      }\n    }\n\n    \/\/ \u8ba1\u7b97\u8f93\u51fa\u5c42\u8bef\u5dee\u603b\u5408\n    var error = 0.0;\n    for (var k=0; k&lt;targets.length; k++)\n      error = error + 0.5*Math.pow(targets[k]-this.ao[k],2);\n    return error;\n  }\n\n    \/\/ \u5bf9\u771f\u503c\u4e2d (\u8bad\u7ec3\u6837\u672c) \u4e2d\u7684\u6bcf\u4e2a\u8f93\u5165\u90fd\u6253\u5370\u51fa\u201c\u7f51\u7edc\u8f93\u51fa\u201d\u4e0e\u201c\u671f\u671b\u8f93\u51fa\u201d\uff0c\u4ee5\u4fbf\u89c2\u5bdf\u5b66\u4e60\u7ed3\u679c\u662f\u5426\u90fd\u6b63\u786e\u3002\n  this.test = function(patterns) {\n    for (var p in patterns) {\n      var inputs = patterns[p][0];\n      var outputs= patterns[p][1];\n      log(\"%j -&gt; [%s] [%s]\", inputs, numbersToStr(this.update(inputs), 0), numbersToStr(outputs, 0));\n      \/\/ this.dump();\n    }\n  }\n\n    \/\/ \u4e3b\u8981\u5b66\u4e60\u51fd\u6570\uff0c\u53cd\u590d\u547c\u53eb\u53cd\u4f20\u9012\u7b97\u6cd5\n    \/\/ \u53c2\u6570\uff1arate: learning rate (\u5b66\u4e60\u901f\u7387), moment: momentum factor (\u52a8\u91cf\u5e38\u6570)\n  this.train=function(patterns, iterations, rate, moment) {\n    for (var i=0; i&lt;iterations; i++) {\n      var error = 0.0;\n      for (var p in patterns) {\n        var pat=patterns[p];\n        var inputs = pat[0];\n        var targets = pat[1];\n        var outputs = this.update(inputs);\n        error = error + this.backPropagate(targets, rate, moment);\n      }\n      if (i % 100 == 0)\n        log('%d:error %j', i, error);\n    }\n  }\n}\n\nmodule.exports = NeuralNet; \/\/ \u5230\u5904 NeuralNet\u3002\n<\/code><\/pre>\n<h5>1. \u5b66\u4e60XOR \u51fd\u6570<\/h5>\n<pre><code class=\"language-javascript line-numbers\">var NN = require(\".\/prop\");\n\npat = [\n  [[0,0], [0]],\n  [[0,1], [1]],\n  [[1,0], [1]],\n  [[1,1], [0]]\n];\n\nnn = new NN().init(2, 2, 1);\n\nnn.train(pat, 1000, 0.5, 0.1);\n\nnn.test(pat);\n<\/code><\/pre>\n<p>\u6267\u884c\u7ed3\u679c\uff1a<\/p>\n<pre><code class=\"language-javascript line-numbers\">0:error 1.1411586806597014\n100:error 0.15669092345306487\n200:error 0.0044566959936791035\n300:error 0.0018489705409186357\n400:error 0.0011477205633429219\n500:error 0.0008277968129286529\n600:error 0.0006456614467953627\n700:error 0.005231441443909679\n800:error 0.0004595906757934737\n900:error 0.0003945408066808508\n[0,0] -&gt; [ 0 ] [ 0 ]\n[0,1] -&gt; [ 1 ] [ 1 ]\n[1,0] -&gt; [ 1 ] [ 1 ]\n[1,1] -&gt; [-0 ] [ 0 ]\n<\/code><\/pre>\n<h5>2. \u5b66\u4e60\u4e03\u6bb5\u663e\u793a\u51fd\u6570<\/h5>\n<pre><code class=\"language-javascript line-numbers\">\/* \u4e03\u6bb5\u663e\u793a\u6392\u5217\n  A\nF   B\n  G\nE   C\n  D\n*\/\n\nvar NN = require(\".\/prop\");\n\npat = [\n \/\/ A B C D E F G \n  [[1,1,1,1,1,1,0], [0,0,0,0]], \/\/ 0\n  [[0,1,1,0,0,0,0], [0,0,0,1]], \/\/ 1\n  [[1,1,0,1,1,0,1], [0,0,1,0]], \/\/ 2\n  [[1,1,1,1,0,0,1], [0,0,1,1]], \/\/ 3\n  [[0,1,1,0,0,1,1], [0,1,0,0]], \/\/ 4\n  [[1,0,1,1,0,1,1], [0,1,0,1]], \/\/ 5\n  [[1,0,1,1,1,1,1], [0,1,1,0]], \/\/ 6\n  [[1,1,1,0,0,0,0], [0,1,1,1]], \/\/ 7\n  [[1,1,1,1,1,1,1], [1,0,0,0]], \/\/ 8\n  [[1,1,1,1,0,1,1], [1,0,0,1]]  \/\/ 9\n];\n\nnn = new NN().init(7, 5, 4);\n\nnn.train(pat, 10000, 0.2, 0.01);\n\nnn.test(pat);\n<\/code><\/pre>\n<p>\u6267\u884c\u7ed3\u679c\uff1a<\/p>\n<pre><code class=\"language-javascript line-numbers\">0:error 21.80370718175807\n100:error 3.0996784544877736\n200:error 2.9554663137424373\n300:error 2.9322332121195545\n400:error 0.9175505320368402\n500:error 0.5911840202045504\n600:error 0.6702566860375645\n700:error 0.6175745429758741\n800:error 0.6073471516556047\n900:error 0.601200049561361\n1000:error 0.5810463514787689\n1100:error 0.5364677212922591\n1200:error 0.532025286869445\n1300:error 0.46666848524996085\n1400:error 0.48129628693742754\n1500:error 0.8155362088747744\n1600:error 0.5829386518767099\n1700:error 0.6944742612114545\n1800:error 0.49717362214697597\n1900:error 0.40957109669176334\n2000:error 0.5388564563993076\n2100:error 0.3703582901903478\n2200:error 0.5178647638260341\n2300:error 0.1764373289120007\n2400:error 0.25347246319196093\n2500:error 0.33310966813566406\n2600:error 0.17106878914718923\n2700:error 0.1365002209754472\n2800:error 0.1594051132697459\n2900:error 0.3070991793860354\n3000:error 0.3766039636947747\n3100:error 0.3555367190225767\n3200:error 0.11555541960454409\n3300:error 0.11367500949340971\n3400:error 0.12234128181753154\n3500:error 0.1675446667610037\n3600:error 0.09044262748000728\n3700:error 0.08628776394501735\n3800:error 0.27906234926518514\n3900:error 0.04818459875532369\n4000:error 0.062418918530088664\n4100:error 0.2804289611800696\n4200:error 0.13725495522690973\n4300:error 0.12719742994691247\n4400:error 0.07177660395615833\n4500:error 0.08548411758763816\n4600:error 0.03974217740792855\n4700:error 0.09595126476746213\n4800:error 0.03853494372617759\n4900:error 0.06360901767700806\n5000:error 0.07246959735102428\n5100:error 0.05362418748287888\n5200:error 0.04669033343340621\n5300:error 0.03270696475959521\n5400:error 0.03940008954106113\n5500:error 0.047208537352753516\n5600:error 0.049368429554604215\n5700:error 0.042625347453785954\n5800:error 0.056241589618292134\n5900:error 0.016798400589135128\n6000:error 0.03404851177897533\n6100:error 0.028972975396903942\n6200:error 0.01572555942490573\n6300:error 0.048110746037786964\n6400:error 0.039118552165591194\n6500:error 0.03954060666366999\n6600:error 0.047240563507126423\n6700:error 0.013729342899560402\n6800:error 0.03734015049471263\n6900:error 0.04385222818693631\n7000:error 0.038098235270263764\n7100:error 0.014325393180305138\n7200:error 0.039093361005808284\n7300:error 0.011914229228792664\n7400:error 0.012490068609142688\n7500:error 0.010110888778014877\n7600:error 0.017266400583083073\n7700:error 0.037972260655506615\n7800:error 0.010317947862704183\n7900:error 0.02181165885044425\n8000:error 0.033354842242808616\n8100:error 0.033244707069915634\n8200:error 0.02269772865101642\n8300:error 0.008219315372175379\n8400:error 0.03342460798252796\n8500:error 0.008080093519395289\n8600:error 0.02466937317542233\n8700:error 0.03307092886686206\n8800:error 0.033433889409569414\n8900:error 0.031423007039930506\n9000:error 0.018154152094468162\n9100:error 0.008635680953338276\n9200:error 0.030890671102892397\n9300:error 0.009020762345545542\n9400:error 0.015823853695083934\n9500:error 0.029353956299920176\n9600:error 0.03028116871034789\n9700:error 0.03009059907189612\n9800:error 0.025996249652393937\n9900:error 0.009595759182954272\n[1,1,1,1,1,1,0] -&gt; [ 0  0 -0 -0 ] [ 0  0  0  0 ]\n[0,1,1,0,0,0,0] -&gt; [ 0 -0 -0  1 ] [ 0  0  0  1 ]\n[1,1,0,1,1,0,1] -&gt; [-0 -0  1  0 ] [ 0  0  1  0 ]\n[1,1,1,1,0,0,1] -&gt; [-0  0  1  1 ] [ 0  0  1  1 ]\n[0,1,1,0,0,1,1] -&gt; [ 0  1 -0  0 ] [ 0  1  0  0 ]\n[1,0,1,1,0,1,1] -&gt; [-0  1 -0  1 ] [ 0  1  0  1 ]\n[1,0,1,1,1,1,1] -&gt; [-0  1  1  0 ] [ 0  1  1  0 ]\n[1,1,1,0,0,0,0] -&gt; [-0  1  1  1 ] [ 0  1  1  1 ]\n[1,1,1,1,1,1,1] -&gt; [ 1 -0 -0  0 ] [ 1  0  0  0 ]\n[1,1,1,1,0,1,1] -&gt; [ 1  0 -0  1 ] [ 1  0  0  1 ]\n<\/code><\/pre>\n<h4>\u7ed3\u8bed<\/h4>\n<p>\u53ef\u4ee5\u770b\u5230\u8fd9\u4e24\u4e2a\u8bad\u7ec3\u7ed3\u679c\u90fd\u662f\u5b8c\u5168\u6b63\u786e\u7684\uff0c\u8fd9\u4ee3\u8868\u53cd\u4f20\u9012\u6f14\u7b97\u6cd5\u53ef\u4ee5\u8ba9\u591a\u5c42\u611f\u77e5\u5668\u5b66\u4f1aXOR \u4e0e\u4e03\u6bb5\u663e\u793a\u5668\u7684\u51fd\u6570\u3002<\/p>\n<p>\u5f53\u7136\u3001\u591a\u5c42\u611f\u77e5\u5668\u4e5f\u53ef\u4ee5\u5b66\u4f1a\u66f4\u96be\u7684\u95ee\u9898\uff0c\u50cf\u662f\u624b\u5199\u7684\u6570\u5b57\u4e0e\u82f1\u6587\u5b57\u6bcd\u8fa8\u8ba4\u7b49\u7b49\uff0c\u624b\u5199\u4e2d\u6587\u5b57\u4f53\u8fa8\u8ba4\u548c\u8bed\u97f3\u8fa8\u8ba4\u5f53\u7136\u4e5f\u662f\u53ef\u884c\u7684\uff0c\u53ea\u4e0d\u8fc7\u9700\u8981\u66f4\u591a\u7684\u8bad\u7ec3\u5b9e\u4f8b\u4e0e\u8282\u70b9\uff0c\u5b66\u4e60\u7684\u6548\u679c\u624d\u80fd\u66f4\u597d\u3002<\/p>\n<p>code enjoy\uff01 \ud83d\ude42<\/p>\n<p>\u4f5c\u8005\uff1aindeex<\/p>\n<p>\u94fe\u63a5\uff1a<a class=\"wp-editor-md-post-content-link\" href=\"http:\/\/indeex.cc\/\">http:\/\/indeex.cc<\/a><\/p>\n<p>\u8457\u4f5c\u6743\u5f52\u4f5c\u8005\u6240\u6709\u3002\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u8054\u7cfb\u4f5c\u8005\u83b7\u5f97\u6388\u6743\uff0c\u975e\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u51fa\u5904\u3002<\/p>\n<hr \/>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u8a00 \u7531\u4e8e\u5355\u5c42\u611f\u77e5\u5668\u5e76\u6ca1\u6709\u529e\u6cd5\u5904\u7406\u50cfXOR \u8fd9\u6837\u7684\u51fd\u6570\u3002 \u4e3a\u4e86\u63d0\u5347\u300c\u611f\u77e5\u5668\u300d\u7684\u80fd\u529b\uff0c\u53ef\u4ee5\u5728\u8f93\u5165\u4e0e\u8f93\u51fa<a href=\"https:\/\/blog.indeex.club\/index.php\/2017\/10\/31\/%e7%a5%9e%e7%bb%8f%e7%bd%91%e7%bb%9c%e6%bc%94%e7%ae%97-%e5%a4%9a%e5%b1%82%e6%84%9f%e7%9f%a5%e5%99%a8%e4%b8%8e%e5%8f%8d%e4%bc%a0%e9%80%92%e6%bc%94%e7%ae%97%e6%b3%95\/\" class=\"read-more\">Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[4],"_links":{"self":[{"href":"https:\/\/blog.indeex.club\/index.php\/wp-json\/wp\/v2\/posts\/117"}],"collection":[{"href":"https:\/\/blog.indeex.club\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.indeex.club\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.indeex.club\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.indeex.club\/index.php\/wp-json\/wp\/v2\/comments?post=117"}],"version-history":[{"count":1,"href":"https:\/\/blog.indeex.club\/index.php\/wp-json\/wp\/v2\/posts\/117\/revisions"}],"predecessor-version":[{"id":118,"href":"https:\/\/blog.indeex.club\/index.php\/wp-json\/wp\/v2\/posts\/117\/revisions\/118"}],"wp:attachment":[{"href":"https:\/\/blog.indeex.club\/index.php\/wp-json\/wp\/v2\/media?parent=117"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.indeex.club\/index.php\/wp-json\/wp\/v2\/categories?post=117"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.indeex.club\/index.php\/wp-json\/wp\/v2\/tags?post=117"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}