loss function


loss関数を言語で定義することは,モデルの予測と正解の相違を数値化したもの,すなわち重み付けWの数を定量化したものといえる.我々の目標は損失関数の値を最小化するWとbiasを見つけることである.まず、損失計算プロセスをより容易に理解するために、cs 231 n 3鋼の例を導入した.下図は、3つのクラスがある場合に、各画像xに対して重み付けWを用いて得られる予測値yを示す.

ここで、lossはmax(0、推定値-正しい値+margin)として定義されます.marginは,正解と予測の間に間隔を設けて明確に区別する設定である.各図の点数から見ると、
猫の予想値(3.2)は自動車の予想値(5.1)より大きい.
この場合、lossは最大予測値から正確な値5.1−3.2+1=2.9を減算する.
逆に、車の場合、車の数値が最大の4.9と予想されるため、猫もカエルも安全な境界を付けることができ、正解を除いても負数が出るため、lossはmaxが0です.
次のようにコードで表現します.
def L_i_vectorized(x, y, W):
   scores = W.dot(x)
   margins = np.maximum(0, scores - scores[y]+1)
   margins[y] = 0
   loss_i = np.sum(margins)
    
   return loss_i
実際に使用されている損失関数,損失関数を見てみましょう.回帰モデルで用いられるMSE,RMSE,分類モデルで用いられるCrossEntropyに大別できる.
① MSE, mean square error
は、連続変数で最も多く使用される損失関数の1つです.予測値と実際の値の差に平均内挿を乗じ、式ではL=1/N*Σ(y-y)^2で表すことができます.値は二乗であるため,差が大きいほど損失関数の差も顕著になり,収束しやすい.これは、値の誤差が1より小さいか大きいと、元の値よりも多く反映されることを意味する.
② RMSE, Root Mean Square Error
MSEにルートの値を加えることで、MSEの欠点は解決されるが、ルートによって尖った点が生じ、微分できない点がある.MAEと似ていますが、異常値に敏感です.
③ CrossEntropy
ⅰ) Binary CrossEntropy
バイナリ分類モデルに用いられ,L=−1/N*Σ{t・log(y)+(1−t)・log(1−y)}で表される.
使用する前に、Softmaxを使用して0~1の値に変換してから使用します.
criterion = torch.nn.BCELoss()
loss = criterion(nn.Softmax(input), target)
ⅱ) categorical CrossEntropy
3つ以上のclassの多分類モデルで用いられ,式はL=−1/N*Σ・Σt・log(y)で表される.通常、ソフトmaxとクロスエントロピーを組み合わせたCrossEntropyLossが用いられる.
criterion = torch.nn.CrossEntropyLoss()
loss = criterion(input, target)