ニューラルネットワークのハッカーガイド。 第2章:機械学習。 より伝統的なアプローチ:損失関数

「本」の既存の部分の最後の翻訳を発行します。 必ず著者のブログをフォローし、この資料が掲載されたらすぐに公開し続けます。



内容:

第1章:実際の価値の図
パート1:

  :        №1:   
      
      





パート2:

   №2:  
      
      





パート3:

   №3:  
      
      





パート4:

         
      
      





パート5:

    «»   " "
      
      





パート6:

      
      
      







第2章:機械学習
パート7:

   
      
      





パート8:

         (SVM)
      
      





パート9:

   SVM   
      
      





パート10:

    :  
      
      









これらのスキームがデータを処理する方法の基本を理解したので、インターネットや他のレッスンや本のどこかですでに見た、より伝統的なアプローチを取りましょう。 あなたは、人々が権力の特性についてあまりにも多く話していることに気付かないでしょう。 代わりに、機械学習アルゴリズムは通常、損失関数(またはコスト関数、または目標)の観点から説明されます。



これらの数式を作成する際に、変数やパラメーターをどのように呼び出すかにもっと注意を払い始めたいと思います。 これらの方程式は、本や他のレッスンで見ることができるようにしたいので、もっと標準的な名前を使い始めます。



例:2次元サポートベクトル法



2次元SVMの例から始めましょう。 N個の例(xi0、xi1)とそれに対応するラベルyiで構成されるデータセットが与えられ、それぞれ正と負の例に対して値+ 1 / -1を持つことができます。 最も重要なことは、覚えているように、3つのパラメーター(w0、w1、w2)があります。 この場合のSVM損失関数は、次のように決定されます。



最初の式のゼロからしきい値を決定し、正則化中に二乗するため、この式は常に正であることに注意してください。 重要なのは、この表現ができるだけ意味を持たないようにする必要があるということです。 その微妙な点に取り組む前に、まずコードとして想像してみましょう。



 var X = [ [1.2, 0.7], [-0.3, 0.5], [3, 2.5] ] //    var y = [1, -1, 1] //   var w = [0.1, 0.2, 0.3] // :   var alpha = 0.1; //   function cost(X, y, w) { var total_cost = 0.0; // L,    SVM,   N = X.length; for(var i=0;i<N;i++) { //           var xi = X[i]; var score = w[0] * xi[0] + w[1] * xi[1] + w[2]; //      ,      var yi = y[i]; //  var costi = Math.max(0, - yi * score + 1); console.log('example ' + i + ': xi = (' + xi + ') and label = ' + yi); console.log(' score computed to be ' + score.toFixed(3)); console.log(' => cost computed to be ' + costi.toFixed(3)); total_cost += costi; } //  :      reg_cost = alpha * (w[0]*w[0] + w[1]*w[1]) console.log('regularization cost for current model is ' + reg_cost.toFixed(3)); total_cost += reg_cost; console.log('total cost is ' + total_cost.toFixed(3)); return total_cost; }   : cost for example 0 is 0.440 cost for example 1 is 1.370 cost for example 2 is 0.000 regularization cost for current model is 0.005 total cost is 1.815
      
      







この式がどのように機能するかに注目してください。SVM分類器がどれほど悪いかを測定します。 これを詳しく見てみましょう。



-ラベルyi = 1の最初のデータエントリポイントxi = [1.2、0.7]は、結果として0.1 * 1.2 + 0.2 * 0.7 + 0.3を与えます。これは0.56です。 これは肯定的な例であるため、結果が+1を超える必要があることに注意してください。 0.56では十分な値ではありません。 実際、このデータエントリポイントのコスト式は次を計算します:costi = Math.max(0、-1 * 0.56 + 1)、これは0.44です。 コストはSVM障害の定量的表現と考えることができます。



-ラベルyi = -1の2番目のデータエントリポイントxi = [-0.3、0.5]は、結果として0.1 *(-0.3)+ 0.2 * 0.5 + 0.3(0.37)を返します。 これはあまり良く見えません:否定的な例では、この結果は非常に高くなります。 -1未満でなければなりません。 実際、コストを計算すると、costi = Math.max(0、1 * 0.37 + 1)、1.37になります。 正しく分類されていないため、これはこの例では非常に高いコストです。



-ラベルyi = 1の最後の例xi = [3、2.5]は、結果として0.1 * 3 + 0.2 * 2.5 + 0.3、つまり1.1を返します。 この場合、SVMはcosti = Math.max(0、-1 * 1.1 + 1)を計算しますが、実際にはゼロです。 このデータエントリポイントは正しく分類され、それに関連する費用はありません。



コスト関数は、分類子の動作の程度を測定する式です。 トレーニングデータセットが完全に分類されている場合、コスト(正則化を除く)はゼロになります。

損失の最後の要素は正則化コストであることに注意してください。これは、モデルのパラメーターの値を小さくする必要があることを示唆しています。 この要素により、コストは実際にゼロになることはありません(これは、系統誤差を除くモデルのすべてのパラメーターが実質的にゼロであることを意味するため)が、取得する距離が近いほど、分類器の機能が向上します。



機械学習のコスト関数のほとんどは2つの部分に分かれています。



1 モデルがデータにどの程度適合するかを測定する部分、および2 :正則化。モデルがどれほど複雑で便利かという原理を測定します。



非常に優れたSVMを取得するためには、コストを可能な限り低くする必要があることを確信していただければ幸いです。 それはおなじみの音ですか? 私たちは何をすべきかを正確に知っています。上記で記録されたコスト関数が私たちのスキームです。 回路を介してすべての例を描画し、戻りパスを計算し、すべてのパラメーターを更新して、回路の将来のコストを削減します。 特に、勾配を計算してから、勾配とは逆方向にパラメーターを更新します(コストを高くではなく低くしたいため)。



All Articles