ゼロからのディープラーニング(フォワードプロパゲーション編)の続きです。
前回はフォワードプロパゲーションを実装して入力値が$1$である確率$AL$を導くところまでを行いました。今回はモデルの精度向上のため、予測値と正解ラベルの誤差を導きだすところまでを実装します。
コスト
本DNNは入力された画像が猫であるか否かを予測するものですので、コスト関数にはCross-entropy誤差を使います。
Cross-entropy誤差
以下の式によって表されます。$AL$はYが1である確率を予測したもの、$Y$は正解ラベルです。
$$L(AL, Y) = \sum^m_{i=1}{(-Ylog(AL) - (1-Y)log(1-A))}$$
$Y=1$のとき$-log(AL)$を返し、$Y=0$のとき$log(1-AL)$を返します。以下のグラフから、予測値と正解が離れれば離れるほどコストが大きくなることがわかります。
関数にすると以下です。
def compute_cost(AL, Y):
m = Y.shape[1]
logprobs = np.multiply(Y, np.log(AL)) + np.multiply(1-Y, np.log(1-AL))
cost = -1/m * np.sum(logprobs)
return cost
ベクトル化された予測値$AL$と正解ラベル$Y$を渡すことでコストを返します。