期待される出力を確率で表現する
ディープラーニングの期待される出力を確率で表現しましょう。確率で表現するとディープラーニングの精度が上がるようです。
手書き文字認識の場合は「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";