足し算の学習ではPositionalEncodingした上での足し算の学習が予想外に小さいニューラルネットワークで学習できることを示した。今回は生の値の掛け算をやる。
2つの0〜1の値をとる変数がある。この変数の値を入力として、積を出力とする。 学習データは10000件、事前に生成して以下の実験で共通に使う。 活性化関数はReLU。学習は最大100万エポック、early stoppingする。 評価はR2決定係数で行う。
中間層のサイズを2, 4, 8, 16と変えて、各々10回学習する。
- ニューラルネットの重みの初期値によって学習結果が変わるのを観察するため。 下記は「{サイズ}: {平均}+-{2標準偏差}: {10回それぞれの結果}」を表示したもの:
:
2: 0.777+-0.521: 0.854 0.853 0.854 0.853 0.854 -0.000 0.943 0.853 0.853 0.853
4: 0.908+-0.109: 0.957 0.854 0.959 0.959 0.854 0.854 0.853 0.979 0.958 0.853
8: 0.982+-0.030: 0.959 0.984 0.959 0.990 0.992 0.994 0.994 0.994 0.993 0.959
16: 0.992+-0.022: 0.998 0.995 0.960 0.996 0.995 0.997 0.996 0.996 0.994 0.997
中間層の個数が8個であっても、いくつも0.99を超えるスコアの学習結果がある。 つまりニューラルネットの表現能力的には8個で十分なのだが、 ランダム初期値の引きによってはたどり着けていない。 中間層の数を増やすことによってたどり着ける確率が上がっている。
ReLUの場合、実数値の足し算は自明。