Perlで学ぶディープラーニング入門

二乗和誤差を求める - 損失関数

二乗和誤差を求める関数をPerlで書いてみましょう。二乗和誤差は、出力結果と期待される出力結果(正しい答え)の誤差を計算するために使用する損失関数の一つです。

use strict;
use warnings;

# 二乗和誤差
sub sum_of_square_error {
  my ($outputs, $desired_outputs) = @_;
  
  if (@$outputs != @$desired_outputs) {
    die "Outputs length is different from Desired length";
  }
  
  my $total_pow2 = 0;
  for (my $i = 0; $i < @$outputs; $i++) {
    $total_pow2 += ($outputs->[$i] - $desired_outputs->[$i]) ** 2;
  }
  my $sum_of_square_error = 0.5 * $total_pow2;
  
  return $sum_of_square_error;
}

my $outputs = [0.7, 0.2, 0.1];
my $desired_outputs = [1, 0, 0];
my $sum_of_square_error = sum_of_square_error($outputs, $desired_outputs);

ディープラーニングでは、損失関数で求められた誤差が小さくなるように、重みとバイアスのパラメーターが調整されていきます。

パターン認識の問題における損失関数としては、偏微分の形が難しく計算が複雑になるので二乗和誤差より、交差エントロピー誤差を使うほうが、望ましいようです。

Side Bar