G検定試験忘備録④(ディープラーニングとニューラルネットワークの概要)
初めまして、みずぺーといいます。
このnoteを機に初めて私を知った方のために、箇条書きで自己紹介を記述します。
年齢:28歳
出身:長崎
大学:中堅国立大学
専門:河川、河川計画、河道計画、河川環境
転職回数:1回(建設(2年9か月)→IT系年収100万up(現職3か月))
IT系の資格:R5.4基本情報技術者試験合格💮
今日はG検定に向けた語彙を忘れぬうちにアウトプットしておく。
ディープラーニングとニューラルネットワークを今日はインプットします。
ディープラーニングとニューラルネットワーク
単純パーセプトロン
隠れ層がないモデル。線形分類しか扱うことができない
多層パーセプトロン
隠れ層を導入することによって非線形分類も扱うことが可能になった。
ディープラーニング
ディープラーニング=隠れ層が多数のニューラルネットワーク
ニューラルネットワークは誤差を逆伝搬させることによって分類を行っていたが、誤差が消失する問題が挙げられた。
事前学習によるアプローチ
ディープニューラルネットワークは一気に学習
事前学習は逐次入力層から隠れ層へ向けて学習
事前学習の分類の例(積層オートエンコーダ)
事前学習の一つの例である積層オートエンコーダにおける分類では出力層(ロジスティック回帰層)に
2値分類:sigmoid関数(ある値に対して全体の割合を計算)
多値分類:softmax関数(それぞれの値に対して全体の割合を計算)
を適用しラベル分類を可能にする。
ファインチューニング
隠れ層から出力層の仕上げ段階
積層オートエンコーダ=事前学習+ファインチューニング
活性化関数
出力を確率で表現するために必要な関数。
sigmoid関数
2値分類に用いられる。[0,1]の範囲の1つの値に変換する。
sofrmax関数
それぞれの値に対して全体の割合を計算。多値分類に適用できる。
tanh関数
tanh関数では微分の最大値が1になるように調整を行っている。
sigmoid関数の強化版。だが勾配消失問題の根本的な解決には至ってない。
ReLU関数
tanh関数よりも勾配消失問題に対処できるのがReLU関数
tanh関数はピーク時だけ最大値が1を取っていた。
ReLU関数はxが0以上であれば常に1
出力層:回帰問題では恒等関数が、分類問題ではソフトマックス関数が使用
隠れ層:シグモイド関数やReLU関数が使用
学習率の最適化
勾配降下法
機械学習が目指しているところは「モデルの予測値と、実際の値との誤差をなくすこと」でそれを数学的にどう表現するのか。
数学的には誤差関数を定義し、これを最小化する問題として定義=関数の最小化問題
具体的にはそれぞれの層の重みで誤差関数を微分した値がゼロになるような重みを求めればよい
この時にアルゴリズムを用いて最適解を探索するというアプローチのことを勾配降下法という
勾配降下法の問題
x(更新後) = x(更新前)ー(学習率)✖︎(x(更新前)における勾配)
見せかけの最適解=局所最適解
本当の最適解=大域最適解
それを避けるために、学習率を大きくする
勾配降下法の例①:確率的勾配降下法(SGD)
オンライン学習(ひとつづつ逐次的に用いて学習する手法)もしくはミニバッチ学習(いくつかのデータのまとまりを逐次的に用いて学習する手法)を適用したもの
SGDでパラメータは学習率をかけてパラメータから引くことで更新する。
SGDの工夫点
モーメンタム:パラメータの更新に慣性的な性質を持たせ、勾配の方向に減速・加速したり、摩擦抵抗によって減速したりしていくようにパラメータを更新していく
RMSProp:
勾配降下法の最適化手法
SGD
手動で学習率を決めて全てのパラメータに対して同じ値を用いる
SGDではダメだったからモーメンタムを導入する手法の開発
SGDに慣性的な性質を持たせたもの
モーメンタムの改良の歴史
AdaGrad(手動から自動へ)→RMSProp(学習ステップの改善)→Adam(RMS改良したもので2014年発表)→AMSGrad(2乗勾配を利用した学習率のバランス)→AdaBound(学習の小ささを考慮(Adamに対応))→AMSBound(学習の小ささを考慮(AMSGradに対応))
AdaGrad
勾配降下法においてパラメータ毎の学習率を勾配を用いて自動で更新する
RMSProp
AdaGradの学習ステップが進んでいくとすぐに学習が更新されなくなってしまう問題を解決したもの
Adam
RMSPropのいくつかの問題点をさらに改良したもので2014年発表
AdamやRMSPropの自動更新では学習率は重要でない勾配を大きく、重要な勾配を小さく評価
AMSGrad
Adamの学習率が大きくなりすぎることがある問題を解決した手法
AdaBound
Adamの学習率が大きくなりすぎることや小さくなりすぎるを解決した手法
AMSBound
AMSGradに対してAdaBoundと同じ手法を適応させた手法
ハイパーパラメータチューニング
3つのサーチ方法が考えられる。
グリッドサーチ
最適な学習率などのハイパーパラメータの最適な組み合わせを全通り選択肢して探索するものを使用したりする。
ランダムサーチ
ハイパーパラメータの組み合わせをランダムに選択する探索方法。
ベイズ最適化
結果が良かったハイパーパラメータの組み合わせに似た組み合わせをランダムに探索
しかし3次元以上では鞍点が発生する。
鞍点とはある次元から見れば極小ではあるが、別次元から見ると極大になっているところの点。
そのためディープラーニングでは
どの方向に沿って勾配が進んでいるときに学習率を大きく(あるいは小さく)すべきかを考える必要がある
鞍点問題への対処
Adagrad、Adadelta、RMSprop、Adam、AdaBound、AMSBound等の手法がによってどの方向に学習を加速させればいいのかがわかる
さらなるテクニック
二重降下現象
モデルのパラメータ数や学習のエポック数が増えるごとに学習結果のエラーが二度降下する現象
原因はまだわかっていないという。
ドロップアウト
活性化関数や学習率を利用することで勾配消失問題や鞍点問題を回避しやすくなったが、最大の問題は過学習
ニューロンを毎回ランダムに除外することにより毎回異なるネットワークで学習を行わせる
つまりドロップアウトはアンサンブル学習を行っている
早期終了(early stopping)
テストデータの誤差関数が上がり始めたところで学習を打ち切る。
これは簡単に言っているが、タイミングを見出すには少しコツが必要になる。
この手法をニューラルネットワークに適応するいい点としてはどんな形状のネットワーク学習においても容易に適応できる
バッチ正規化
各層において活性化関数を変える前に伝搬してきたデータを正規化する処理
※正規化とはデータに含まれる各特徴量の値を全て[0,1]範囲に収まるようにする処理のこと
最小値最大値が決まっている場合には正規化を利用する
正規化して伝わってきたものをさらに正規化して入力とする。
毎回の層で正規化を繰り返す。
標準化
標準化は任意の分布を平均0、分散1に変形する操作
標準化したデータ=(元のデーター平均)/ 分散
一般的に標準化を用いる場合は、最大値及び最小値が決まっていない場合や外れ値が存在する場合に利用
データの白色化
データを無相関化してから標準化を行う。
例えば天候に関するデータ(雲の量、気温、紫外線量)などが集まったとすれば、明らかにデータの各成分は何らかの関係性を持っている。
新しい指標1=A×雲の量+B×気温
新しい指標2=C×雲の量+D×紫外線量
これらの指標は何らかの来場者数に関係があるかもしれない指標になる可能性もある。
このようなデータの相関があった場合
無相関化を行い
データの標準化を行う
このようなことを用いた事例として画像の前処理がある。
何がいいかって、局所的な特徴を際立てせることができること。
画像で局所的な特徴をもとに学習を行う場合には適用可能であると思われる。
重みの初期化
活性化関数を通した後の値に適度なばらつきを持たせたいということが目的。ばらつきを持たせないと、ある勾配消失問題が発生してしまう可能性がある。
各層で使用している活性化関数がシグモイド関数やtanh関数の場合はノードの初期値としてXavierの初期値
ReLU関数を活性化函数として用いた場合Heの初期値を用いるのが良い
制限付きボルツマンマシン
二層のニューラルネットワークであり、深層信念ネットワークと呼ばれる
ハードウェア
CUDA(Compute Unified Device Architecture)
NVIDIA社が開発したGPUプログラム開発環境。
CUDAを使用することでC言語のようなプログラムを記述してGPUの複数の演算器を利用した高速な並列演算処理を行うことが可能となる。
GPGPU(General Purpose computing on GPU)
GPUの高い並列計算処理力を本来の用途である画像処理以外のタスクに応用すること。またはその技術
TPU(Tensor Processing Unit)
Google社が開発したディープラーニングの学習・推論に最適化されており、タスクによってGPUの数十倍のパフォーマンスを引き出すことが可能なサービス
この記事が気に入ったらサポートをしてみませんか?