ベクトルの和を求める

ディープラーニングの計算で必要なベクトルの和をPerlで求めましょう。

Perlでは、ベクトルは配列で表現します。ベクトルと聞くと、ソフトウェアエンジニアは頭が痛くなるんじゃないかと思いますが、配列と言ってもらえると「なんだぁ~」ってなりますよね。

ベクトルの和を求めるPerlのプログラムです。

use strict;
use warnings;

# ベクトルの和
sub vec_add {
  my ($vec1, $vec2) = @_;

  my $vec_add = [];

  for (my $i = 0; $i < @$vec1; $i++) {
    $vec_add->[$i] = $vec1->[$i] + $vec2->[$i];
  }
  
  return $vec_add;
}

my $vec1 = [1, 2, 3];
my $vec2 = [4, 5, 6];

# ベクトルの和
my $vec_add = vec_add($vec1, $vec2);

# 5 7 9
print "@$vec_add\n";

ベクトルの和はディープラーニングの計算のどこで使うの?

ディープラーニングの計算では、重み行列と入力ベクトルの行列積を求めます。求められた値はベクトル(部分計算1)です。

バイアスはベクトルとして表現されます。

部分計算1のベクトルとバイアスベクトルの和を求めると、出力ベクトルが得られます。

# ディープラーニングの各層における計算式
出力ベクトル = 重み行列×入力ベクトル + バイアスベクトル

以下のような計算を行います。

use strict;
use warnings;

# 重み行列と入力ベクトルの行列積の結果のベクトル
my $mul_weight_inputs = [4, 5, 6, 7];

# バイアスのベクトル
my $biases = [3, 6, 9, 2];

# 出力ベクトル
my $outputs = [];

for (my $i = 0; $i < @$mul_weight_inputs; $i++) {
  $outputs->[$i] = $mul_weight_inputs->[$i] + $biases->[$i];
}

print "@$outputs\n";

関連情報