E検定取得に向けた学習内容④ ~深層学習後編

E検定取得に向けた学習内容④ ~深層学習後編

先日の、応用数学編機械学習編深層学習前編の続きです。
学んだことを、メモの箇条書きで書いていきます。

深層学習Day3

<再起型ニューラルネットワークの概念>

・RNNとは?→時系列データに対応可能な、ニューラルネットワーク
・時系列モデルを扱うには、初期の状態と過去の時間t-1の状態を保持し、そこから次の時間でのtを再帰的に求める再帰構造が必要になる
・BPTT(Back Propagation Through Time)…RNNにおいてのパラメータ調整方法の一種(誤差逆伝搬法を用いる)
ニューラルネットワークで時系列データの予測を行う
「BPTTは最後のTまでのデータ、つまりすべての時系列データがなければ学習を行うことができません。そのため、長いデータは最新の分のみ切り取るなどといった対応が必要です。」

RNN実装の一部

【確認テスト】
・隣接単語から表現ベクトルを作る処理→W.dot(np.concatenate([left, right]))
(単純にベクトルを各次元分つなぎ合わせて、重みと掛け合わせる処理…単語長が長くなると対応できない?)

<LSTM>

・RNNの課題:時系列を遡れば遡るほど、勾配が消失していく。
→この課題を解決する発想がLSTM
・LSTMについては、ゼロから作るDeep Learning2の第6章が分かりやすい
→「RNNとLSTMのインターフェースの違いは、cという経路(記憶セル)があること。記憶セルcは、外部からは見えず、LSTMの出力は隠れ状態ベクトルのhだけ」

RNNセル定義でLSTMを用いる(tf.nn.rnn_cell.BasicLSTMCell)

【確認テスト】
・忘却ゲートの存在
・新しいセルの状態は、計算されたセルへの入力と1ステップ前のセルの状態に入力ゲート、忘却ゲートを掛けて足し合わせたものと表現される。(input_gate* a + forget_gate* c)

<GRU>

・GRUとは
 ・従来のLSTMでは、パラメータが多数存在していたため、計算負荷が大きかった。しかし、GRUでは、そのパラメータを大幅に削減し、精度は同等またはそれ以上が望める様になった。
 ・LSTMに比べ変数の数やゲートの数が少なく、より単純なモデルであるが、タスクによってはLSTMより良い性能を発揮する

Keras公式 RNNレイヤーについての説明 GRUは2014年登場

【確認テスト】
・LSTM/GRUの違いは?
→GRUはメモリセルをなくして忘却ゲートと入力ゲートを合体させたモデル。ゲートが更新ゲートとリセットゲートの二種類になる。
RNN vs LSTM vs GRU (E資格対策)
・Keras公式:Kerasを使用したリカレントニューラルネットワーク(RNN)
 >・Kerasには3つの組み込みRNNレイヤーがあります。
  >・keras.layers.SimpleRNN 、前のタイムステップからの出力が次のタイムステップに供給される完全に接続されたRNN。
  >・keras.layers.GRU 、 Cho et al。、2014で最初に提案されました。
  >・keras.layers.LSTM 、 Hochreiter&Schmidhuber、1997年に最初に提案されました。

<双方向RNN>

・過去の情報だけでなく、未来の情報を加味することで、精度を向上させるためのモデル

Keras公式 BRNNレイヤーについての説明 Bidirectionalのwrapperを加えるだけで利用可能

【確認テスト】
双方向RNNでは、順方向と逆方向に伝播したときの中間層表現をあわせたものが特徴量となるので、np.concatenate([h_f, h_b[::-1]], axis=1)

<seq2seq>

•Encoder-Decoderモデルの一種
•Encoderで単語のベクトル表現を作り、DecoderでEncoderの出力を使って回答文などを出力する。
•通常のseq2seqは、一問一答しかできず、脈絡なく文章を作り続ける課題があった。その課題を克服するため、登場したのがHRED。

【テスト対策】
・HRED = Seq2Seq+ Context RNN。Context RNN: Encoder のまとめた各文章の系列をまとめて、これまでの会話コンテキスト全体を表すベクトルに変換する構造。
→これにより、過去n-1 個の発話から次の発話を生成する。課題:短く情報量に乏しい答えをしがち、同様の文章が与えられると回答に多様性がない。
・VHRED = HREDに、VAEの潜在変数の概念を追加したもの
・VAE(Variational Autoencoder) = オートエンコーダ + 潜在表現への確率分布。
 ・オートエンコーダ:構造説明入力データから潜在変数zに変換するニューラルネットワークをEncoder、逆に潜在変数zをインプットとして元画像を復元するニューラルネットワークをDecoderとして、中間層の潜在表現に次元削減を行える。
 ・VAEはこの潜在変数zに確率分布z∼N(0,1)を仮定したもの
 →データを潜在変数zの確率分布という構造に押し込めることを可能に。
 ・Variational Autoencoder徹底解説

<word2vec>

・RNNの課題:単語のような可変長の文字列をNNに与えることはできない。
→word2vecのモチベーション:固定長形式で単語を表す必要がある
・大規模データの分散表現の学習が、現実的な計算速度とメモリ量で実現可能にした
→ボキャブラリ×任意の単語ベクトル次元で重み行列を作成することが可能に。

【テスト対策】
・この辺りもゼロから作るDeep Learningに詳しい(第4章のp.135「図4-3で行っていることは、単に行列の特定の行を抜き出すことだけです」あたりが肝)
 →【学習メモ】ゼロから作るDeep Learning【4章】

<Attention mechanism>

・seq2seqは長い文章への対応が難しい(seq2seq では、2単語でも、100単語でも、固定次元ベクトルの中に入力しなければならないため)
→Attention。「入力と出力のどの単語が関連しているのか」の関連度を学習する。
入力・出力それぞれの単語数分の行×列のmatrix上で、関係性が強い部分ほど強く反応する(値が大きくなる)
→そのMatrixを掛け算することで、後段処理で強い関係性のものほど強く表れるように学習される
・Attention構造は、Transformerで使われている。Self-attention、SourceTarget-Attentionの2種類がある。

【テスト対策】
・以下のサイトは以前かなり参考にさせていただきました。
 →作って理解する Transformer / Attention

深層学習Day2

<強化学習>

・方策関数: π(s,a)、状態S、行動価値関数:Q(s,a)
・冬の時代があったが、計算速度の進展により大規模な状態をもつ場合の、強化学習を可能としつつある。
・関数近似法と、Q学習を組み合わせる手法の登場
 ・Q学習:行動価値関数を、行動する毎に更新することにより学習を進める方法
 ・関数近似法:価値関数(状態価値関数 or 行動価値関数)や方策関数を関数近似する手法のこと
・方策勾配法
 →方策の良さJは、自分で定義しなければならない(単純な問題ならよいが、複雑なルールになると難しい)

【テスト対策】
・強化学習のチュートリアルにスーパーマリオを解く問題がある。プレイ動画をフレームごとに画像としてCNNに入力し、Double Deep Q-Networksで強化学習している。
 →深層強化学習でAIマリオのクリアにチャレンジしてみた

過去の経験を思い出すcache()とrecall()が定義されている

<Alpha Go>

・譜面の1マスを1*1のセルとした画像(19×19)のように扱い、各セルには48チャネルを入力とする。
・多数のConvolutionレイヤーをつないだPolicy Netを通し、最終層はSoftmax層を通し、出力は19×19マスの着手予想確率となる。
・以下のステップで学習
 ・教師あり学習(3000万局面分の教師を用意し、教師と同じ着手を予測できるよう分類問題の学習)
 ・現状のPolicyNetと、PolicyNetの強化学習の過程を500Iteraionごとに記録し保存した”PolicyPool”からランダムに選択されたPolicyNetと対局シミュレーションを行い、その結果を用いて方策勾配法で学習(minibatch size 128で1万回)
 ・PolicyNetを使用して対局シミュレーションを行い、その結果の勝敗を教師として学習(Value Netの学習)。勝敗報酬をRして、N+1手目の手をランダムに選択し、その手で進めた局面S(N+1)とRを教師データ対とし、損失関数を平均二乗誤差とし、回帰問題としてminibatch size 32で5000万回学習
・Alpha Go ZeroのPolicyValueNet→ResNetを使っている。

<軽量化・高速化技術>

・データ並列化、モデル並列化、GPUによる高速技術
・データ並列化
 ・親モデルを各ワーカーに子モデルとしてコピー
 ・データを分割し、各ワーカーごとに計算させる
 ・同期型:各ワーカーが計算が終わるのを待ち、全ワーカーの勾配が出たところで勾配の平均を計算し、親モデルのパラメータを更新する
 ・非同期型:各ワーカーはお互いの計算を待たず、各子モデルごとに更新を行う
モデル並列化
 ・親モデルを各ワーカーに分割し、それぞれのモデルを学習させる。全てのデータで学習が終わった後で、一つのモデルに復元。
 ・モデルが大きい時はモデル並列化を、データが大きい時はデータ並列化をすると良い。
・GPGPU (General-purpose on GPU):元々の使用目的であるグラフィック以外の用途で使用されるGPUの総称
・モデルの軽量化→モバイル端末やIoTにおいて必要
 ・量子化:通常のパラメータの64 bit 浮動小数点を32 bit など下位の精度に落とすことでメモリと演算処理の削減を行う(スピードアップ、ただし精度劣化が課題)
 ・蒸留(Distillation):学習済みの精度の高いモデルの知識を軽量なモデルへ継承させること。
  ・教師モデルの重みを固定し、生徒モデルの重みを更新していく。
  ・誤差は教師モデルと生徒モデルのそれぞれの誤差を使い重みを更新していく。
 ・プルーニング:寄与の少ないニューロン(重みが閾値以下など)をモデルから削減し高速化と省メモリ化を行う

<応用モデル>

・MobileNet:ディープラーニングモデルの軽量化・高速化・高精度化を実現。Depthwise ConvolutionとPointwise Convolutionの組み合わせでパラメータ数を減らす。
・DenseNet:ResNetに似ている。前方の各層からの出力全てが後方の層への入力として用いられる(ResNetでは前1層の入力のみ後方の層へ入力される)
・BatchNormalization層:レイヤー間を流れるデータの分布を、ミニバッチ単位で平均が0・分散が1になるように正規化(他似たものにLayerNorm、InstanceNorm)
・WaveNet:Pixel CNNを音声データに適用、生の音声波形を生成するモデル。

<Transformer>

・Attention is all you need(2017.06)
・長い文長の文章でも精度が出る
・query(検索クエリ)に一致するkeyを索引し、対応するvalueを取り出す操作であると見做すことができる。これは辞書オブジェクトの機能と同じである。
・Self-attention(入力を全て同じにして学習的に注意箇所を決めていく)、SourceTarget-Attention(入力文章と出力文章の間での関係性の強い部分を注意個所として学習していく)の2種類がある。

<物体検知・セグメンテーション>

・物体検知には、以下の種類がある
 ・分類(難易度低)
 ・物体検出
 ・セマンティックセグメンテーション(意味領域分割)
 ・インスタンスセグメンテーション(個体領域分割、難易度高)
・PSPNetによるセマンティックセグメンテーション→PyTorchによる発展ディープラーニング 第3章

【テスト対策】
・様々なデータセット
 ・VOC12
  ・VOC = Visual Object Classes
  ・主要貢献者が2012年に亡くなったことに伴いコンペも終了
 ・ILSVRC17MS
  ・コンペは2017年に終了(後継:Open Images Challenge)
  ・ILSVRC = ImageNet Scale Visual Recognition Challenge
  ・インスタンスセグメンテーションのアノテーションがない
 ・COCO18
  ・COCO = Common Object in Context
  ・物体位置推定に対する新たな評価指標を提案
 ・OICOD18
  ・ILSVRCやMS COCOとは異なるannotation process
  ・Open Images V4(6000クラス以上/900万枚以上)のサブセット
・最近のデータセット(18)のほうが、部分的な重なり等も見られ、日常生活のコンテキストに近い
・IoU、AP、mAPの考え方
 ・IoU:TP/(TP + FP + FN):積集合(Area of Overlap)/和集合(Area of Union)
 ・AP:PR曲線の下側面積、APはクラスごとに計算される
 ・mAP:mAPはクラスをまたいだAPの平均
・FPS:Flames per Second