深層学習day4

1.強化学習

 強化学習とは、長期的に報酬を最大化できるように環境のなかで行動を選択できるエージェントを作ることを目標とするもの。行動の結果として与えられる利益(報酬)をもとに、行動を決定する原理を改善していく仕組みである。
 教師あり学習教師なし学習はデータに含まれるパターンを見つけ出し、正解に対する誤差を小さくすることが目標であった。強化学習では優れた方策を見つけ出し、報酬を最大化することが目標である。

f:id:black_07:20210703102958p:plain
強化学習のイメージ
  • 方策関数 方策ベースの強化学習手法において、ある状態でどのような行動を採るのかの確率を与える関数
  • 価値関数 ある状態の価値に注目する場合を状態価値関数と呼び、ある状態にある行動を実施した時の価値に注目する場合を行動価値関数と呼ぶ。

 方策勾配法  \theta^{(t+1)} = \theta^{(t)} + \epsilon \nabla J(\theta)

2.Alpha Go

 強化学習で有名な囲碁ソフトAlpha Goは2016年にグーグル傘下のDeepMind社によって開発された。初版のAlpha Go(Lee)は以下の特徴を持つ。

  • 方策関数、価値関数とも盤面の状況を表す19×19マス 48チャンネル(価値関数は1つ増えて49)を入力とする。
  • 方策関数は、畳み込み層、活性化関数を繰り返し、最後はSoftMax層を介して19×19のマスの着手予想確率が出力される。
  • 価値関数は、畳み込み層、活性化関数を繰り返し、最後は全結合層、および活性化関数(tanh)を介して、現局面の勝率が-1~1の範囲で出力される。

 2017年に開発されたAlphaGoでは、AlphaGo(Lee)に比べ、以下の点を改善している。

  • 教師あり学習を一切行わず、強化学習のみで作成
  • 特徴入力(チャンネル)からヒューリスティックな要素を排除し、石の配置のみにした
  • 方策関数、価値関数を1つのネットワークに併合した
  • Residual Net(ネットワークにショートカット構造を追加し、勾配の爆発、消失を抑える)を導入した
  • モンテカルロ木探索からRollOutシミュレーションをなくした

3.軽量化・高速化技術

 深層学習は多くのデータを使用したり、パラメータ調整のために多くの時間を使用したりするため、高速な計算が求められる。その中で、計算機資源を有効に活用し、高速に演算する手法として、以下が挙げられる。

a.データ並列化

 親モデルを各計算機へ子モデルとしてコピーする。データを分割し、各計算機へ並列して計算させる。各モデルが同期しながらパラメータを合わせるか、それぞれ独立にパラメータを合わせるかで同期型か非同期型か決まる。同期型の計算が安定で精度が高いため、よく使用されている。

b.モデル並列化

 親モデルを各ワーカーに分割し、それぞれのモデルを学習させる。全てのデータで学習が終わった後で、一つのモデルに復元する。モデルが大きい時に適した手法である。

c.GPUの使用

 高速演算ユニット。従来はグラフィック用に使用されてたが、最近は汎用的に使われる(GPGPU)。CPUに比べて、比較的低性能なコアが多く、簡単な並列処理が得意である。そのため、単純な行列演算が多いニューラルネットの学習に向いている。

 高速化に加え、モデルの精度を維持しつつパラメータや演算回数を低減するモデルの軽量化も求められるケースがある。軽量化のメリットとして、パソコンより性能やスペックが劣る、モバイル端末やIoT機器に対しても適用の可能性が拡がることである。主な軽量化手法を以下に挙げる。

a.量子化

 計算精度ビット数を落とすことで多少精度が低下する反面、高速化、省メモリ化のメリットが得られる。倍精度演算(64 bit)から単精度演算(32 bit)に落とすと、GPUの処理性能は約2倍になる。

b.蒸留

 精度が高い故、ニューロンの規模が大きいモデルに対して、モデルの知識を使って、軽量なモデルを生成すること。知識の継承により、軽量でありながら複雑なモデルに匹敵する精度のモデルを得ることが期待できる。(例 教師モデルと生徒モデル)

c.プルーニング

 ニューロンの規模が大きいモデルに対して、モデル精度の寄与が小さいニューロンを削減することで高速化、軽量化を図ること。具体的には重みが閾値以下のニューロンを削減して再学習を実施する。

4.応用技術

a.MobileNet

  • ディープラーニングモデルは精度は良いが、その分ネットワークが深くなり計算量が増える。
  • ディープラーニングモデルの軽量化・高速化・高精度化を実現する。
  • Depthwise ConvolutionとPointwise Convolutionの組み合わせで軽量化を実現する

b.DenseNet

  • ニューラルネットワークでは層が深くなるにつれて、学習が難しくなるという問題があった。
  • 前方の層から後方の層へアイデンティティ接続を介してパスを作ることで層が深くても学習できるようにした。
  • 前方の各層からの出力を全て後方の層への入力に用いる。

c.BatchNorm

  • レイヤー間を流れるデータの分布を、ミニバッチ単位で平均が0、分散が1になるように正規化する。
  • ニューラルネットワークにおいて学習時間の短縮や初期値への依存低減、過学習の抑制など効果がある。
  • Batch Sizeが小さい条件下では、学習が収束しないことがあり、代わりにLayer Normalizationなどの正規化手法が使われることが多い。

d.LayerNorm

  • 全てのチャネルの平均と分散を求め正規化する。
  • 入力データや重み行列に対して、入力データをスケールしても、出力が変わらない。
  • 入力データや重み行列に対して、重み行列をスケールやシフトしても、出力が変わらない。

e.WaveNet

  • 生の音声波形を生成する深層学習モデル
  • Pixel CNN(高解像度の画像を精密に生成できる手法)を音声に応用したもの
  • 時系列データに対して畳み込み(Dilated convolution)を適用する層が深くなるにつれて畳み込むリンクを離すDilated convolutionを提案した。

5.実装演習

 kerasによる演習。一部を取り上げる。

a.分類問題(iris)

 入力が4(がくの長さなど)、中間層が12、出力が3(iris(アヤメ)の種類、活性化関数はソフトマックス)のニューラルネットワークを構築。中間層の活性化関数をReLU、シグモイド、tanhにした時の収束推移を比較した。シグモイド関数では勾配消失が起きているようで、5回程度で精度が上がらなくなってしまった。tanhシグモイド関数よりも傾きが大きいからか勾配消失が起きず、むしろReLUよりも少ない回数でAccuracyが1に近づく。

f:id:black_07:20210703154523p:plain
keras分類問題(iris)

b.分類問題(MNIST)

 入力が28×28=784、中間層が512の2層、ドロップアウト付き、出力が10(0~9の数字、活性化関数はソフトマックス)のニューラルネットワークを構築(上2つと左下の3つ)。右下のグラフは、入力が28×28、中間層は畳み込み層、Maxプーリング、ドロップアウトで構成、出力層には全結合層を介して10(0~9の数字)のCNNによるものである。最適化手法にAdamを適用し、学習率を変化させてニューラルネットワークの収束推移を比較した。学習率lrが0.001、0.0001よりも0.01と大きいときにはAccuracyが低い結果となった。また、CNNはニューラルネットワークよりも高いAccuracyを得ることができた。特にテストデータによる結果が素晴らしい。縦横二次元の関係を保ちながら計算しているメリットが発揮されたものと推測する。

f:id:black_07:20210703154628p:plain
keras分類問題(MNIST)