期待される出力を確率で表現する
ディープラーニングの期待される出力を確率で表現しましょう。確率で表現するとディープラーニングの精度が上がるようです。
手書き文字認識の場合は「0」~「9」の10個の数字が正解として期待されます。
これを確率で表現します。配列の中の「1」は「100%」、0は「0%」のことだと考えてください。
# 確率による表現 0 -> [1, 0, 0, 0, 0, 0, 0, 0, 0, 0] 1 -> [0, 1, 0, 0, 0, 0, 0, 0, 0, 0] 2 -> [0, 0, 1, 0, 0, 0, 0, 0, 0, 0] 3 -> [0, 0, 0, 1, 0, 0, 0, 0, 0, 0] 4 -> [0, 0, 0, 0, 1, 0, 0, 0, 0, 0] 5 -> [0, 0, 0, 0, 0, 1, 0, 0, 0, 0] 6 -> [0, 0, 0, 0, 0, 0, 1, 0, 0, 0] 7 -> [0, 0, 0, 0, 0, 0, 0, 1, 0, 0] 8 -> [0, 0, 0, 0, 0, 0, 0, 0, 1, 0] 9 -> [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
配列の要素の値は、期待される値になる確率を表現しています。たとえば、4の場合ですと、配列の添え字の4番目の値が100%で、それ以外が0%というのが、確率で表現された期待される出力です。
一般的には、この操作は、ベクトル化と呼ばれますが、意味を簡潔に書くと、期待される出力を確率として表現するということです。
一般のパターン認識の場合は「犬」「猫」「ネズミ」を「0」「1」「2」に割り当てると、同じようにできます。
期待される出力を確率で表現する
期待される出力を確率に変換するプログラムを書いてみましょう。
use strict;
use warnings;
sub probabilize_output {
my ($outputs_length, $desired_value) = @_;
my $probabilized_outputs = [];
for (my $i = 0; $i < $outputs_length; $i++) {
$probabilized_outputs->[$i] = $desired_value == $i ? 1 : 0;
}
return $probabilized_outputs;
}
my $outputs_length = 10;
my $desired_value = 4;
my $probabilized_outputs = probabilize_output($outputs_length, $desired_value);
# 0 0 0 0 1 0 0 0 0 0
print "@$probabilized_outputs\n";
Perl AI深層学習入門