ラビットチャレンジ 深層学習day4レポート 要点まとめ

Section1  強化学習

長期的に報酬を最大化できるように環境のなかで行動を選択できるエージェントを作ることを目標とする機械学習の一分野。
行動の結果として与えられる利益(報酬)をもとに、行動を決定する原理を改善していく仕組み。

教師あり学習、教師なし学習に並ぶ機械学習の手法。

強化学習のイメージ

エージェントが行動すると環境から報酬を受け取る。
エージェントの行動によって環境や状態Sが変化することもある。
状態Sは環境の下で常に変化していく。
価値Vを最大になるように方策Πを学習する。

・探索と利用のトレードオフ
不完全な知識を元に行動しながら、データを収集。最適な行動を見つけていく

・探索が足りない状態
過去のデータで、ベストとされる行動のみを常に取り続ければ他にもっとベストな行動を見つけることはできない
・利用が足りない状態
未知の行動のみを常に取り続ければ、過去の経験が活かせない

強化学習が学習したいところは方策Πと価値V
方策関数:Π(s,a)
行動価値関数:Q(s,a)
sは状態、aは行動

強化学習と通常の教師あり、教師なし学習との違い
目標が違う
教師無し、教師あり学習はデータに含まれるパターンを見つけ出すことやデータの予測
強化学習では優れた方策を見つけることが目標

行動価値関数を使う学習方法をQ学習という。
関数近似法は価値関数や方策関数を関数近似する手法。
この関数をニューラルネットワークで近似するのが最近のブレークスルー。

状態価値関数と行動価値関数
状態価値関数:環境の状態のみで評価する。
行動価値関数:環境の状態とエージェントの行動の両方で価値を評価する。

方策関数
方策ベースの強化学習においてある状態でどのような行動をとるのかを確率を与える関数。
価値関数を最大化するような行動を決める。

Section2  AlphaGo

強化学習が注目を集めることになった囲碁ソフト。

方策関数:PolicyNet
価値関数:ValueNet
両方とも畳み込みNN。
二次元のデータが入ってきたら畳み込みをやるのは現在の定石。
二次元のデータから一次元にするには畳み込みから全結合をするのも定石になっている。

RollOutPolicy
NNではなく線形の方策関数。やることはPolicyNetと同じ。
精度は落ちるが、探索中に高速に着手確率を出すために使用される。
教師あり学習で学習させる。

Alpha Goの学習ステップ

  1. 教師あり学習によるRollOutPolicyとPolicyNetの学習
  2. 強化学習によるPolicyNetの学習
  3. 強化学習によるValueNetの学習

モンテカルロ木探索
コンピュータ囲碁ソフトで現在最も有効とされている探索法。
価値関数を学習させるときに用いる。価値関数をどのように更新させるか。

AlphaGo LeeとAlphaGo Zeroの違い

ここまでAlphaGo Leeの説明だった。
AlphaGo Zeroは教師あり学習を一切使わず、強化学習のみで学習。
特徴入力からヒューリスティックな要素を排除して石の配置のみにした。
PolicyNetとValueNetを一つに統合
ResidualNetを導入
モンテカルロ木探索からRollOutシミュレーションをなくした

ResidualNetwork
ネットワークにショートカットを作る。ショートカットによって深さを省略する構造ができるので、勾配の爆発、消失を抑える効果を狙ったもの。
ResidualBlockは非常に深いが、ショートカットのおかげで安定した学習が可能になった。
ショートカットによるスキップがある分、副次的にドロップアウトが起こったような状態になり、アンサンブル効果があると言われる。

Section3 軽量化・高速化

スマホなど性能の低いコンピュータ上でもモデルを動かせるようにしたい。
⇒ 量子化、蒸留、プルーニング

分散深層学習

深層学習は1年で10倍のペースで計算量が増えている。そのため、現在非常に重要な技術。

  • 深層学習は多くのデータを使用したり、パラメータ調整のために多くの時間を使用したりするため、高速な計算が求められる。
  • 複数の計算資源(ワーカー)を使用し、並列的にニューラルネットを構成することで、効率の良い学習を行いたい。
  • データ並列化、モデル並列化、GPUによる高速技術は不可欠である。

データ並列化

  • 親モデルを各ワーカーに子モデルとしてコピー
  • データを分割して、各ワーカーに計算させる。

画像認識の場合、各コンピュータにモデルを配って、画像を並列処理させる。

データ並列化:同期型
パラメータ更新では各ワーカーが勾配の計算が終わるまで待ち、全ワーカーの勾配が出たところで勾配が出たところで勾配の平均を計算して親モデルのパラメータを更新
現在は同期型のほうが精度が良いことが多いので、主流となっている。

データ並列化:非同期型
各ワーカーはお互いの計算を待たず、子モデルごとに更新を行う。
お互いのワーカーの計算を待たないので処理のスピードは速い
最新のモデルのパラメータを利用できないので学習が不安定になりやすい。

モデル並列化

  • 親モデルを各ワーカーに分割し、それぞれのモデルを学習させる。全てのデータで学習が終わった後で、一つのモデルに復元。
  • モデルが大きい時はモデル並列化を、データが大きい時はデータ並列化をすると良い

複雑な深層学習モデルでは直列だけでなく分岐もあるので、分岐部分を並列化することが多い。直列の場合もある。
一台のPCで4台のGPUで並列化するなど、一台のPC内でやることが多い。

モデル並列化の効果
モデルのパラメータ数が多いほど、スピードアップの効率も向上する。

参照論文
Large Scale Distributed Deep Networks
Google社が2016年に出した論文
Tensorflowの前身といわれている
並列コンピューティングを用いることで大規模なネットワークを高速に学習させる仕組みを提案。主にモデル並列とデータ並列(非同期型)の提案をしている

GPUによる高速化

・GPU
比較的低性能なコアが多数
簡単な並列処理が得意
ニューラルネットの学習は単純な行列演算が多いので、高速化が可能

・GPGPU
グラフィックス用途以外でもGPUを使用できるようにした手法

GPGPU開発環境
Deep Learningフレームワーク内で実装されているので使用する際は指定すればよい

量子化

ネットワークが大きくなると大量のパラメータ(重み)が必要なり学習や推論に多くのメモリと演算処理が必要。
通常のパラメータの64 bit 浮動小数点を32 bit など下位の精度に落とすことでメモリと演算処理の削減を行う
利点
計算の高速化
省メモリ化
欠点
精度の低下
実際の問題では倍精度(64bit)から単精度(32bit)にしてもニューラルネットワークの精度がほぼ変わらなかった。

16ビットの半精度は単精度の2倍以上の計算速度が出るようにGPUは作られている。

蒸留

精度の高いモデルはニューロンの規模が大きくなっている。
そのため、推論に多くのメモリや演算が必要になる。

規模の大きいモデルの知識を使い、軽量なモデルの作成を行う

教師モデルと生徒モデル

  • 教師モデル
    予測精度の高い、複雑なモデルやアンサンブルされたモデル
  • 生徒モデル
    教師モデルを元に作られたモデル

教師モデルの重みを固定し生徒モデルの重みを更新していく。
誤差は教師モデルと生徒モデルのそれぞれの誤差を使い重みを更新していく。
教師モデルの学習済みの誤差を重みの更新に利用できる。

プルーニング

ネットワークが大きくなると大量のパラメータが必要になるがすべてのニューロンの計算が精度に寄与しているわけではない。
プルーニングはモデルの精度に寄与が少ないニューロンを削減することでモデルの軽量化、高速化する技術。

ニューロンの削減
重みが閾値以下のニューロンを削減し再学習を行う。

プルーニングは想像以上にニューロンを削除できて、精度もあまり低下しない。

Section4 応用技術

MobileNet

  • 画像認識のネットワーク
  • ディープラーニングモデルは精度は良いが、その分ネットワークが深くなり計算量が増える。
  • 計算量が増えると、多くの計算リソースが必要で、お金がかかってしまう。
  • ディープラーニングモデルの軽量化・高速化・高精度化を実現

畳み込み演算で工夫を行っている。
一般的な畳み込みレイヤーは計算量が多い。
MobileNetsはDepthwise ConvolutionとPointwise Convolutionの組み合わせで軽量化を実現

Depthwise Convolution
フィルタ数を1にして入力マップのチャネルごとに畳み込みを実施
出力マップをそれらと結合(入力マップのチャネル数と同じになる)
通常の畳み込みカーネルは全ての層にかかっていることを考えると計算量が大幅に削減可能
各層ごとの畳み込みなので層間の関係性は全く考慮されない。通常はPW畳み込みとセットで使うことで解決

Pointwise Convolution
1 x 1 convとも呼ばれる(正確には1 x 1 x c)
入力マップのポイントごとに畳み込みを実施
出力マップ(チャネル数)はフィルタ数分だけ作成可能(任意のサイズが指定可能)

DenseNet

  • 画像認識のネットワーク
  • Dense Convolutional Network(以下、DenseNet)は、畳込みニューラルネットワーク(以下、CNN)アーキテクチャの一種
    ニューラルネットワークでは層が深くなるにつれて、学習が難しくなるという問題があったが、Residual Network(以下、ResNet)などのCNNアーキテクチャでは前方の層から後方の層へアイデンティティ接続を介してパスを作ることで問題を対処した。DenseBlockと呼ばれるモジュールを用いた、DenseNetもそのようなアーキテクチャの一つである。
DenseNetの特徴
出力層に前の層の入力を足しあわせる
層間の情報の伝達を最大にするために全ての同特徴量サイズの層を結合する

Transition Layer
DenseNetで増えた分を減らすレイヤー

BatchNorm・LayerNorm

BatchNormはレイヤー間を流れるデータの分布を、ミニバッチ単位で平均が0・分散が1になるように正規化。ニューラルネットワークにおいて学習時間の短縮や初期値への依存低減、過学習の抑制など効果がある。

BatchNormの問題点
Batch Sizeが小さい条件下では、学習が収束しないことがあり、
実際にはあまり使いたくない手法。
ミニバッチが厄介。ハードウェアによってミニバッチのサイズを変えざるを得ない。そうなるとBatchNormの効果がよくわからなくなる。
代わりにLayer Normalizationなどの正規化手法が使われることが多い

LayerNorm

一つの画像に対して正規化をかける。こうすることでミニバッチの影響を受けずに済む。BatchNormの問題点を解消できていると考えられる。
Layer Normは入力データや重み行列に対して以下の操作を施しても出力が変わらないことが知られている。
入力データのスケールに関してロバスト
重み行列のスケールやシフトに関してロバスト
Instance Norm
各サンプルの各チャネルごとに正規化

WaveNet

生の音声波形を生成する深層学習モデル。

メインアイディア
時系列データに対して畳み込みを適用する

Dilated convolution

  • 層が深くなるにつれて畳み込みリンクを離す
  • 受容野を簡単に増やすことができるという利点がある。

 

Section5 Transformer

Seq2Seq

系列(Sequence)を入力として、系列を出力するもの。
入力系列がEncode(内部状態に変換)され、内部状態からDecode(系列に変換)する。
実応用上も、入力・出力共に系列情報なものは多い
翻訳 (英語→日本語)
音声認識 (波形→テキスト)
チャットボット (テキスト→テキスト)

言語モデル

単語の並びに対する尤度(それがどれだけ起こりえるか)、文章として自然かを確率で評価する。
時刻t-1までの情報で、時刻tの事後確率を求めることが目標。これで同時確率が計算できる

RNN×言語モデル

文章の各単語が現れる際の同時確率は、事後確率で分解できる。したがって、事後確率を求めることがRNNの目標になる。
言語モデルを再現するようにRNNの重みが学習されていれば、ある時点の次の単語を予測することができる。

Seq2Seq

EncoderからDecoderに渡される内部状態ベクトルが鍵。
文章をエンコードして内部状態ベクトルhに変換。それをデコーダー側の隠れ層の入力とする。
Decoderの役割は生成モデル。

Decoderのoutput側に正解をあてがえば教師あり学習がEnd2Endで可能になる。

Transformer

Seq2seqは長さに弱い。
翻訳元の文の内容を一つのベクトルで表現
入力データ(系列データ)⇒ 内部状態ベクトル(実数値データ)⇒(出力データ)
文章が長くなると表現力が足りなくなる。

これを解決するために考え出されたのがAttention(注意機構)。
各単語の対応関係によって注意を分配する。

Attentionは辞書オブジェクト。
query(検索クエリ)に一致するkeyを索引し、対応するvalueを取り出す操作であると見做すことができる。これは辞書オブジェクトの機能と同じ。

Attentionを応用した結果、文長を長くしても精度が落ちないようになった。

Transformer

Self-AttentionのみでRNNを使わない機構。
並列計算が可能なためRNNに比べて計算が高速。
Self-Attentionと呼ばれる機構を用いることにより、局所的な位置しか参照できないCNNと異なり、系列内の任意の位置の情報を参照することを可能にしている。
Self-Attention:自分の入力だけで注意個所を決めてしまう手法。
イメージとしてCNNの畳み込みが近い。self-Attentionは文章のまわりの単語からコンボリューションして抽象的な特徴を得る。
RNNを使わないので語順情報を入力データに含める必要がある。

Section6 物体検知とセグメンテーション

物体認識タスク

  • 分類
    画像に対してクラスラベル(物体の位置に興味なし)
  • 物体検知
    Bounding Box(どこになにがあるか)
  • 意味領域分割
    各ピクセルに対して単一のクラスラベル
  • 個体領域分割
    各ピクセルに対して単一のクラスラベル+個体の識別までおこなえる

下に行くほど難易度が上がる。

物体検知

どこに何がどのくらいの確率で存在しているか?を出力する。

データセット

データセットは目的に応じて選択する必要がある。
VOC12,ILSVRC17,MS COCO18,OICOD18など

データセットを選ぶ指標:Box/画像
一つの画像当たりに映っている物体の数。
大きいと部分的な重なりがあったり、日常生活のコンテキストに近いため、Box/画像が大きいと難しい。

評価指標

評価指標は混同行列を使用する。
物体位置の予測精度の評価も大事で、用いられるのはIoUと呼ばれる。
定義は下図がわかりやすい
FPS(Flames per Second):応用上の要請から検出速度も問題になる

物体検知のフレームワークには1段階検出器と2段階検出器がある。

  • 1段階検出器
    候補領域の検出とクラス推定を同時に行う
    相対的に精度が低い傾向
    相対的に計算量が小さく推論も早い傾向
  • 2段階検出器
    候補領域の検出とクラス推定を別々に行う
    相対的に精度が高い傾向
    相対的に計算量が大きく推論も遅い傾向

Semantic Segmentation

Semantic Segmentationは各ピクセルにラベル付けを行うため、出力も入力画像と同じサイズになる。CNNなどで使われる畳み込みとプーリングを使うと解像度が落ちて出力画像のサイズを維持できない。

この畳み込みとプーリングで解像度が落ちる問題をアップサンプリングの壁と呼ばれる。

Deconvolution/Transposed convolution

任意の特徴マップにアップサンプリングさせる手法

処理手順
1. 特徴マップのpixel間隔をstrideだけ空ける
2. 特徴マップのまわりに(kernel size – 1) – paddingだけ余白を作る
3. 畳み込み演算を行う

逆畳み込みと呼ばれることも多いが、畳み込みの逆演算ではなく、プーリングによって失われた情報は戻ってこない。

 

コメント

タイトルとURLをコピーしました