KATOエンジニヤリング開発日誌

「アウトプット無きエンジニアにインプットもチャンスも無い」の精神で書いています

ディープラーニング検定E資格の勉強記録

現在開発を行なっている機械学習を用いた株式の分析システムでデータの収集や統計指標の計算を行なってきましたが、肝心の機械学習で株式の分析を行うための知見が足りていないことを実感してきたので勉強ついでに資格をとってしまおうと思いました。

日本ディープラーニング協会が主催している「ディープラーニング検定E資格」を今年の8月に受ける予定です。

www.jdla.org

このページはE資格の学習を記録するために定期的に更新していきます。

※最新更新日は【2019/05/13】

活性化関数

活性化関数がないと線形回帰と同じような計算モデルになってしまうので、ニューラルネットワークでモデリングする必要性がなくなる。

下記に代表的な活性化関数を羅列する。ここでは記載しないが、各活性化関数の数式を暗記していないと試験問題を解くのが難しい気がする。

  • 恒等写像関数
    • 回帰問題で使用される
  • ステップ関数
  • シグモイド関数
    • 2クラスの分類問題で使用される
    • 0から1の間の値をとる
  • tanh関数
    • RNNでよく使われる
  • ReLU関数
    • DLで一般的な活性化関数
    • とりあえず最初に試すのによい
  • LeakyReLU関数
  • softplus関数
  • Hardtanh関数
  • ソフトマックス関数

    • 多クラスの分類問題で使用される
    • 出力層のノードの値を全て足すと1になる(正規化しているから)
    • exp(指数関数)をなぜ使うのか?
  • 損失関数

    • 回帰問題では「2乗和誤差」が用いられる
    • 分類問題ではクロスエントロピー誤差が用いられる

ミニバッチ学習の特徴

バッチサイズを大きくする

  • 勾配推定が安定する
  • (GPUの)メモリ使用量が増えてしまう
  • 重みの更新量が安定するので学習係数を大きくできる
    • つまり学習が早く進む

バッチサイズを小さくする

  • 正則化の効果をもたらす(過学習を防げる)
  • 更新回数が増えるため、計算時間が長くなる
  • 局所的最小解にトラップされてしまうリスクを低減できる

微分

  • 数値微分
    • 近似的に微分を求めているので誤差が生じる
    • 解析的微分に比べると計算時間も掛かる
    • 自分が実装したNNが正しく微分されているかを確かめるために使用することはある(勾配確認)
  • 解析的微分
    • 公式を使って微分する
    • 誤差が含まれない
    • NNの学習ではこちらを使う

数値微分の公式

{f(h) = \frac{f(x+h)-f(x-h)}{2h}}

解析的微分の公式

{{f'(x^ r) = rx^ {r-1}}}

勾配ベクトル

勾配ベクトルは偏微分をひとまとまりで表現したもの。

f(x, y) = 2x2+3y

上記の数式が、

 {\nabla f =(\frac{df}{dx},\frac{df}{dy}) = (4x, 3)}

のように∇(ナブラ)記号を用いて勾配ベクトルを表記する。

偏微分された各項がDLではパラメータである。

勾配法

ディープラーニングでは学習の際に最適なパラメータを探す。最適なパラメータとは「損失関数」が最小値をとるときのパラメータの値のこと。

しかしディープラーニングの損失関数は複雑でパラメータ空間は広大(パラメータが数万個とかになる)なので、損失関数が最小値をとる値がどこにあるか検討がつかない。勾配をうまく利用して損失関数の最小値(もしくはできるだけ小さな値)を探すのが勾配法。

  • 勾配法
    • 勾配上昇法
      • NNやDLでは使わない(最大値を求めることをしないため)
    • 勾配降下法
      • 最小値を求める勾配法の総称
      • 最も急な方向に下る方法が「最急降下法」
      • 無作為に選び出したデータに対して勾配降下法を行うのが「確率的勾配降下法」
        • NNの学習ではこの確率的勾配降下法を使うのが普通

誤差逆伝播法

  • 勾配降下法で最小値を求めるには各変数(パラメータ)の微分値(偏微分値)が必要になるが、パラメータは膨大な数なのでGPUを使っても現実的な時間で処理が終わらない。
  • 誤差逆伝播法は出力層から入力層に導関数を伝播する手法でDLでは必須の技術。
  • 連鎖律の原理を用いている
    • 一言で言うと「合成関数の微分」