見出し画像

Convolution + AveragePoolingのAIモデルに対してAffineのパラメータ設定の影響を調べてみた


今回はAffineのパラメータを設定した結果を確認します

今回の記事では、Convolution + AveragePoolingのAIモデルに対して、Affineのパラメータ設定をアレコレ設定した場合にどうなるかを確認します。

対象のAIモデルの構造図は、以下の通りです。

AIモデル 構造図
AIモデルの構造図

上図のAIモデルの構造図において、ConvolutionレイヤーとAveragePoolingレイヤーの設定は、以下の通りです。

  • Convolutionレイヤーのパラメータ設定値

    • OutMaps → 2

    • KernelShape → 80

    • BorderMode → valid

    • Strides → 1

    • Dilation → 1

    • Group → 1(デフォルト値)

    • ChannelLast → False(デフォルト値)

    • BaseAxis → 0(デフォルト値)

    • WithBias → True(デフォルト値)

    • ParameterScope → Convolustion(デフォルト値)

    • W.File → 未設定(デフォルト値)

    • W.Initializer → NormalConvolutionGlorot(デフォルト値)

    • W.InitializerMultiplier → 1(デフォルト値)

    • W.LRateMultiplier → 1(デフォルト値)

    • b.File → 未設定(デフォルト値)

    • b.Initializer → Constant(デフォルト値)

    • b.InitializerMultiplier → 0(デフォルト値)

    • b.LRateMultiplier → 1(デフォルト値)

  • AveragePoolingレイヤーのパラメータ設定値

    • KernelShape → 1,80

    • Strides → 1,80

    • IgnoreBorder → True

    • Padding → 0,0(デフォルト値)

    • ChannelLast → False

    • IncludingPad → False

パラメータを設定する対象のAffineレイヤーは、Affine_1とAffine_2です。

Affine_3が対象外なのは、AIモデルの出力が0か1の1ビットであるため、パラメータを1に固定する必要があるからです。

また、AIモデルの学習および評価に使用する説明変数と目的変数は、これまでと同じく、以下の通りです。

  • 説明変数: 30日分の日経平均株価(始値、高値、安値、終値)およびVIX指数(始値、高値、安値、終値)

  • 目的変数: 翌営業日の日経平均株価のローソク足が陽線か陰線かを表す0(陰線) or 1(陽線)のデータ

Affineのパラメータ設定と予測精度の関係について

下記に、Affineのパラメータ設定と予測精度(ACC)の関係を示します。

Affine パラメータ 設定 予測精度
Affineのパラメータ設定と予測精度の関係

これまでの経験から、AIモデルの構造は、キュッ、ボン、キュッが良いと思われます。

最初のキュッは、AveragePoolingの出力である高さ2, 幅2のデータサイズです。

次のボンは、Affine_1のデータサイズで、最後のキュッはAffine_2のデータサイズです。

今回の検証結果は、私のこれまでの経験を裏付けるものとなりました。

No. 1を除くと、キュッ、ボン、キュッの構造に近いのは、No. 2, 3, 4, 9ですが、予測精度の観点から、どれもイマイチでした。

理由は分かりませんが、100 → 10のつながりが良いようです。

Affineのパラメータ設定と学習曲線の関係について

続いて、No. 1~9の条件における学習曲線を以下に示します。

学習曲線 No. 1 Affine_1(100) Affine_2(10)
学習曲線 No. 1: Affine_1(100), Affine_2(10)
学習曲線 No. 2 Affine_1(200) Affine_2(10)
学習曲線 No. 2: Affine_1(200), Affine_2(10)
学習曲線 No. 3 Affine_1(150) Affine_2(10)
学習曲線 No. 3: Affine_1(150), Affine_2(10)
学習曲線 No. 4 Affine_1(50) Affine_2(10)
学習曲線 No. 4: Affine_1(50), Affine_2(10)
学習曲線 No. 5 Affine_1(10) Affine_2(10)
学習曲線 No. 5: Affine_1(10), Affine_2(10)
学習曲線 No. 6 Affine_1(100) Affine_2(100)
学習曲線 No. 6: Affine_1(100), Affine_2(100)
学習曲線 No. 7 Affine_1(100) Affine_2(200)
学習曲線 No. 7: Affine_1(100), Affine_2(200)
学習曲線 No. 8 Affine_1(100) Affine_2(150)
学習曲線 No. 8: Affine_1(100), Affine_2(150)
学習曲線 No. 9 Affine_1(100) Affine_2(50)
学習曲線 No. 9: Affine_1(100), Affine_2(50)
  • VALIDATION ERRORの最小値

    • No. 1 → 0.666236

    • No. 2 → 0.690939

    • No. 3 → 0.682109

    • No. 4 → 0.687369

    • No. 5 → 0.690720

    • No. 6 → 0.691445

    • No. 7 → 0.691693

    • No. 8 → 0.691450

    • No. 9 → 0.682402

No. 1の学習曲線を基準とした場合に、Affine_1およびAffine_2のパラメータを変更することで、過学習が進んだり、そもそもAIモデルの学習が全く進まなかったりすることが確認できました。

No. 6, 7, 8は、Affine_1のパラメータ設定が100であるのに対して、Affine_2のパラメータ設定が100以上のケースですが、AIモデルの学習が全く進みませんでした。

Affineのパラメータ設定と混同行列の関係について

最後に、No. 1~20の条件における混同行列を以下に示します。

混同行列 No. 1 Affine_1(100) Affine_2(10)
混同行列 No. 1: Affine_1(100), Affine_2(10)
混同行列 No. 2 Affine_1(200) Affine_2(10)
混同行列 No. 2: Affine_1(200), Affine_2(10)
混同行列 No. 3 Affine_1(150) Affine_2(10)
混同行列 No. 3: Affine_1(150), Affine_2(10)
混同行列 No. 4 Affine_1(50) Affine_2(10)
混同行列 No. 4: Affine_1(50), Affine_2(10)
混同行列 No. 5 Affine_1(10) Affine_2(10)
混同行列 No. 5: Affine_1(10), Affine_2(10)
混同行列 No. 6 Affine_1(100) Affine_2(100)
混同行列 No. 6: Affine_1(100), Affine_2(100)
混同行列 No. 7 Affine_1(100) Affine_2(200)
混同行列 No. 7: Affine_1(100), Affine_2(200)
混同行列 No. 8 Affine_1(100) Affine_2(150)
混同行列 No. 8: Affine_1(100), Affine_2(150)
混同行列 No. 9 Affine_1(100) Affine_2(50)
混同行列 No. 9: Affine_1(100), Affine_2(50)

混同行列では、AIモデルの予測がy'=0あるいはy'=1の何れかに偏っているのがNo. 2, 5, 6, 7, 8でした。

各ケースでのAffineの設定値を確認すると、以下の通りです。

No. 2(Affine_1, Affine_2) → 200, 10
No. 5(Affine_1, Affine_2) → 10, 10
No. 6(Affine_1, Affine_2) → 100, 100
No. 7(Affine_1, Affine_2) → 100, 200
No. 8(Affine_1, Affine_2) → 100, 150

ハッキリしたことは読み取れませんが、私の理解は次の通りです。

  • Affine_1とAffine_2は、Affine_1 > Affine_2の関係が成り立つ必要がある

  • ただし、Affine_1とAffine_2の差が大きすぎても良くない

結果に対する感想

それにしても、AIモデルの学習は進むものの、VALIDATION ERRORは全く低下しない状況が続いています。

学習が進むということは、学習データに対してAIモデルの最適化が行われているということです。

一方で、VALIDATION ERRORが低下しないというのは、学習データに最適化されたAIモデルに評価データをインプットすると、エラーが多発するということです。

それはつまり、評価データに含まれる特徴が学習データに含まれていないということではないかと私は考えます。

ちなみに、現状の学習データと評価データは、以下のようになっています。

  • 学習データ

    • 期間: 1990-01-04 ~ 2022-11-14

  • 評価データ

    • 期間: 2022-11-15 ~ 2023-11-17

  • 学習データおよび評価データ共通

    • 説明変数: 日経平均株価(始値、高値、安値、終値)とVIX指数(始値、高値、安値、終値)の30日分

    • 目的変数: 0(翌営業日の日経平均株価が陰線) or 1(翌営業日の日経平均株価が陽線)

どうすべきか悩ましい状況ですので、久しぶりにChatGPTの知恵を借りようと思います。

いいなと思ったら応援しよう!