Python Colaboratory

Keras モデルの構築

ここまでで、各デ-タセットの作成が完了しました。
引き続き、基本的な機械学習モデルを適用して RNN を実行していきます。
Keras にはモデルを構築する方法として、
Sequential モデル:
⇒最もあプロ-チし易い、層を積み重ねることに限定される。
モデルのサブクラス化:
⇒すべてを一から記述する。
 細かく制御できる。難しい。
があります。
でも、今回は、 使いやすさと柔軟性を程よく兼ね備え、最も良く使われる
FunctionalAPI
を使用していきます。
2つの Dense(隠れ層)を積み重ねたモデルを構築します。

活性化関数

Keras モデルの構築で Dense 層を定義するにあたって必ず必要になる 活性化関数について説明します。
活性化関数がなぜ必要なのか私は理解できないでいました。
ニュ-ラルネットワ-ク(NN)は発火させることが必要などと書物や WEB には書いてあるのですが、 なぜなのか理解できないでいました。
発火させたら NN の重みの答えも壊れてしまうはず、おかしいと思っていました。
その必要性がやっとわかってきましたので、まとめてみました。

  1. 押しつぶし squashing

    隠れ層では、毎回の線形層の出力値を活性関数で活性化します。
    この時、tanh のような S字型で、入力値を押しつぶす(squashing) ことができる形の非線形関数を用います。
    これにより、< -1 及び +1 < の入力範囲にある突起(ごみ)や特出部分の出力範囲に 押し潰しを行ないます。
    そして、-1 < かつ < +1 の部分の入力範囲内の特徴はそのまま伝搬し、 最初の層(x0~x19)から、次の層(x1~x20)に反映できるようにします。
    これにより、各層は活性化関数を経ると、必要な特徴のみ厳選(=検出)して、 学習も安定・高速化します。

  2. 勾配降下法

    RNN において最も難しいのが重みパラメ-タ W の大域最適解(真の値)を見つけることです。
    解析的に、この大域最適解を求めることは困難です。
    そこで、代わりに反復学習によりパラメ-タを逐次的に更新するアプロ-チにより求めます。
    代表的な手法として勾配降下法があります。
    これは次式で表されます。

    勾配降下法

    上記方法でパラメ-タが更新されなくなった場合、それは勾配が0になったことを表すので、 少なくとも反復学習で探索した範囲では最適な解が求められたことになります。
    活性化関数にリニアな関数を使うと
    f(x) = x
    tanh のような活性化機能を得ることはできませんが、
    f'(x) = 1
    なので勾配消失問題は起こりづらく、勾配が0になった時は、 大域最適解(真の値)である可能性が高くなります。
    そこで、活性化関数に
    f(x) = tanh(x)
    を使用すると勾配はどうなるのか見ていきます。
    もし、勾配消失問題が発生するなら活性化関数としては不適当ということになります。

  3. 活性化関数 tanh

    tanh になぜ活性化能力があるのか見ていきます。
    f(x) = tanh(x) と f'(x)
    のグラフを下記に示します。

  4. tanh グラフ
  5. 上図 f(x) のグラフより
    -1 < かつ < +1 の部分では
    ほぼ f(x) = x
    f(-1) = -0.762
    f(1) = 0.762
    < -1 の部分では
    f(-3) = -1
    +1 < の部分では
    f(3) = +1
    となり、押しつぶしが行なわれます。
    次に、tanh の微分値は上図微分グラフより
    -1 < かつ < +1 の部分では
    f'(x) = 0.420 ~1.0
    となり勾配消失になることはありません。
    でも、リニアの場合の
    f'(x) = 1
    とくらべると劣りますので 真の解ではない局所最適解に陥る可能性はあります。
    また、
    < -3 及び +3 < の範囲では
    f'(x) = 0 となるので、勾配消失がおきる可能性も残っています。
    とはいうものの、tanh は活性化関数として充分使用可能と考えられています。


ここまで、活性化関数について考えてきました。
引き続き、大域最適解について考察していきます。  


  • 大域最適解みつからず に進む
  • keras-test-51 動作確認 に戻る
  • 各デ-タセットの内容表示 に戻る
  • 3種の timeseries_dataset デ-タを作成 に戻る
  • CSV timeseries_dataset まとめ に戻る
  • CSV デ-タ timeseries_dataset 作成 に戻る
  • 標準化した dummy_dataset を作成 に戻る
  • dummy_dataset の内容表示 に戻る
  • RNN の理解-Ⅱ に戻る
  • 時系列のためのディ-プラ-ニング に戻る
  • ロ-ソク足表示ファイルまとめ に戻る
  • ロ-ソク足本体の表示 に戻る
  • Colab で mplfinance を使用 に戻る
  • CSV ファイルの読込 に戻る
  • Colab を始める に戻る
  • 70VPS に戻る