2022/09/24 Ubuntu環境立ち上げ

2022/09/24 Ubuntu環境立ち上げ

今日から自分のWin環境のVirtualboxUbuntuを立ち上げて遊んでいく。

  1. 最初にVirturalboxを2022/09/24時点で最新の6.1.38に更新
  2. 一方でUbuntu LTSの最新版 22.04 日本語版Remixもダウンロード
  3. 光学ディスクにisoファイルを挿入し、普通に立ち上げでインストール。
  4. 言われるがままにUbuntuの更新
  5. 画面の解像度を更新

今日はここまで。

次回以降

  1. UbuntuVirtualBoxのインストール
  2. リモートデスクトップを試してみる
  3. Dockerをインストールして遊んでみる

深層学習day4 Section6:物体検知・セグメンテーション

要点まとめ

分類と物体検知との違い

下記の順に難易度が上がっていく。

  • Classification (分類)

    画像に対し単一または複数のクラスラベル

  • Object Detection (物体検知)

    画像の矩形領域をBouding Box (bbox/BB) を検出する。

  • Semantic Segmentation (意味領域分割)

    ピクセルに対して単一のクラスラベル。 複数の風船があった場合でも同じラベル付けを行う。

  • Instance Segmentation (個体領域分割)

    ピクセルに対して単一のクラスラベル。 複数の風船があった場合、それぞれの風船に異なるラベル付けを行う。

Object Detection

一般的な出力例

f:id:yui-gen-ron:20220107124833p:plain

代表的データセット

  • VOC12

    VOC=Visual Object Classes 主要貢献者が2012年に亡くなったことに伴いコンペも終了。

    • 20クラス
    • 11540枚の画像
    • Box/画像 = 2.4
    • Instance Annotation 有り
  • ILSVRC17

    ILSVRC=ImageNet Scale Visual Recognation Challange。 ImageNetのサブセット。 コンペは2017年に終了。後継はOpenImagesChallange。

    • 200クラス
    • 476668枚の画像
    • Box/画像 = 1.1
  • MS COO18

    MS = Microsoft COCO = Common Object in Context 物体位置推定に対する新たな評価指標を提案。

    • 80クラス
    • 123287枚の画像
    • Box/画像 = 7.3
  • OICOD18

    OICOD = Open Images Challange Object Detection ILSVRC や COCOとは異なる Annotation process

    • 500クラス
    • 1743042枚の画像
    • Box/画像 = 7.0

Box/画像 が小さいと、アイコン的となり日常感とかけ離れやすい。 Box/画像 が大きいと、1枚の画像に多くの物体が写っており日常感がある。

IoU

Intersection over Union. f:id:yui-gen-ron:20220108233954p:plain

評価指標

Precision, Recall 等の評価指標はクラス分類などと同じ。 物体検知はクラス分類などと異なり、Thresholdが変わると候補となるBox数が変わってくることが違う。

確率が閾値より大きいものに対して、IoUを判定しIoUが閾値を超えているものがTP、超えていないもの もしくは 同一のBoxに対して複数検出したもがFP。全く検出できなかったBBはFNとなる。

Recall, Presitionの復習。


\displaystyle
{
Precision = \frac{TP}{TP + FP} \\
Recall = \frac{TP}{TP + FN} \
}

Confidenceの閾値を少しずつ変化させると、Recall, Precisionも少しずつ変化するため、PはRの関数としてP=f(R)と表せる。 閾値を0~1に変化させた時にRとPが描くカーブを、 Precision-Recall curve と言う


\displaystyle
AP = \int_{0}^{1} P(R) dR

多クラスの場合、上記のAPをクラスごとに求めて平均を取るようにしたものを、 mAP : mean Average Precision と言い、クラス数をCとして下記のように定義される。


\displaystyle
mAP = \frac{1}{C} \sum_{i=1}^{C} AP_{i}

近年、 FPS : Frames per Second という検出速度も問題となっている。検出精度と検出速度の両方が重要視される。

物体検知のアルゴリズム

  • 2段階検出器 (Two-stage detector)

    • 候補領域の検出とクラス推定とを別々に行う
    • 相対的に精度が高い
    • 相対的に計算量が大きく推論も遅い
  • 1段階検出器 (One-stage detector)

    • 候補領域の検出とクラス推定とを同時に行う
    • 相対的に制度が低い
    • 相対的に計算量が小さく推論も速い

f:id:yui-gen-ron:20220109001746p:plain

SSD : Single Shot Detector

VGG16をベースネットワークとして構成されている。1段階検出器。 VGG16を少し変更したネットワークのある中間層から、複数のアスペクト比のDefault box を用いて部分を切り出したものからクラス検出を行わせる。 クラス数は検出対象の20クラスに背景クラスを加えて21クラスとなる。

Semantic Segmentation

CNNで解像度を落として特徴量抽出していくと、入力時よりも解像度が落ちているが、それをUp samplingして元画像の解像度に戻す必要があるという問題がある。

VGG16等では最後に全結合層があるため、1 \times 1 \times 4096という層になっていたが、全結合層ではなくConvolution層を用いることで二次元的な繋がりを崩さずにHeatmap的な画像を得られる。

そこで、Deconvolution / Transpose convolution という手法でupsamplingしている。

CNN深い層では特徴量は抽出されているが、解像度が落ちて輪郭が失われているため、低レイヤと同じ解像度にUp samplingした上で低レイヤの情報と加算することを繰り返すことで輪郭情報を復元している。

また、Unpooling という、pooling時にどの画素が選択されたかを覚えておいて、Unpooling時にもともと存在した画素に戻すという方法もある。

実装演習

実装演習なし

確認テスト等考察

過去のデータセットはクラス数、画像数、画像あたりのbox数等で、それぞれの時代で役割があった。

物体検知の評価指標は、考え方は混同行列がベースだが、TP/FP/FN のラベル付けの考え方を覚える必要がある。

また、ConfidenceによってTP/FP/FN が変化するが、Confidenceを0~1で振った時のPrecision-Recall curveが成す面積 AP が重要な評価指標。他クラス分類の場合は全クラスのAPの平均値であるmAPが重要な指標となる。

SSDは既存のVGG16のネットワークの途中から複数のdefaultboxで切り出したものを分類することで、1段階検出を実現している。

Semantic Segmentationは、CNNの深い層で解像度が落ちた状態から、DeconvolutionやUnpoolingで解像度をもとに戻してup-samplingしている。

追加演習

なし

深層学習day4 Section5:Transformer

要点まとめ

言語モデルとは

単語の並びに対して尤度で評価する。 時刻t-1までの情報で時刻tの事後確率を求めることが目標。

例えば、"I have a" に続く単語で尤もらしい単語 w を下記のように表す。

 \displaystyle{
\newcommand{\argmax}{\mathop{\rm argmax}\limits}
\argmax_{w\in V} P(I, have, a, w)
}

事後確率を求められれば、先頭単語を与えれば文章を生成することも可能になる。

Attention

Seq2Seq ではどのような長さの文章でも固定長のベクトルで表現するので、文章が長くなるほど精度が悪くなるという問題があった。

Attention(注意機構)では、翻訳先の単語を選択する際に、翻訳元の文中の各単語の隠れ状態を利用して、翻訳先のどの単語に注意が向いているかを表現できる。

Attention機構は * Query * Key * Value という3つで構成されている。

Transformer

2017年6月に登場した、RNNを用いずにAttentionを利用したモデル。 文長が長くなっても翻訳精度が落ちないという結果。 従来のAttention機構は Source Target Attentionと呼ばれ、Query がTargetで、Key, Value がSouurceだったのの対し、Self Attentionは全てSourceを用いている。

文章全体からの畳み込みを行うので、文全体を入力としたCNNのようなイメージ。

f:id:yui-gen-ron:20220107003048p:plain

scaled dot product attention

全単語についてのAttentionの計算は下記のように計算

f:id:yui-gen-ron:20220107003625p:plain

Multi-Head attention

Scaled dot-product attention出力をconcatして、それぞれのヘッドが異なる情報を出力。

Add & Norm

Add は 入出力の差分を学習させる。 学習やテストエラーの低減

Normは平均0、分散1に正則化することで学習を高速化させる。

Position Encoding

RNNを用いずに単語列の語順情報を追加する手法。

実装演習

lecture_chap1_exercise_publicを実施.

f:id:yui-gen-ron:20220106232648p:plain

lecture_chap2_exercise_publicを実施.

f:id:yui-gen-ron:20220107011256p:plain

確認テスト等考察

確認テストがないので全体の考察。 単語同士の注意機構 Attention を用いて翻訳を可能にした、RNNを用いない翻訳モデル。

RNNを用いないため、位置情報をPosition Encodingという形でsin,cosを用いて表現される。

追加演習

下記の資料を用いて、BLEUの具体的な計算方法を学習。

https://www2.nict.go.jp/astrec-att/member/mutiyama/corpmt/4.pdf

深層学習day4 Section4:応用モデル

要点まとめ

Mobile Net

画像認識のネットワーク。 ディープラーニングモデルは精度は良いが、ネットワークが深く演算量が多くなる。 軽量な演算量でそれなりに良い精度を満たせるように工夫したのがMobileNet。

高さH、横WカーネルサイズK \times K、入力チャネル数C、出力チャネル数Mを考える。

一般的な畳込み演算は、チャネル方向・画素方向の2つを1回の演算で計算しようとしているが、その時の演算量はH \times W \times K \times K \times C \times Mで表せる。

MobileNetではチャネルごとに畳み込み演算を行うDepthwise Convolution(演算数H \times W \times C \times K \times K)と、1 \times 1カーネルCチャネルの畳み込みを行うPointwise Convolution (演算量1 \times 1 \times C)とを行うことで演算量を削減している。

DenseNet

DenseNetはDense Blockという部分が特徴的。 Dense Block内では、あるノードよりも前のノードからの出力が全て入力となるため、 1層通過するたびにチャネル数が増加していく。 Dense Blockを通過後にはTransition Layerと呼ばれるブロックがあり、チャネル数を減らして元に戻す。 Dense Block と Transition Layerを何回か繰り返して接続することで、結果としてチャネル数を増やしすぎることなく層を増やして特徴量を抽出している。

Dense Block内で、前の層から何チャネル増えるか を growth rate と読んでいる。

Batch Norm

レイヤー間を流れるデータの分布を、ミニバッチ単位で平均0 分散1に正規化する手法。

  • Batch Norm

    • ミニバッチに含まれるSampleの同一チャネルが同一分布に従うように正規化する。

    • ミニバッチサイズを小さい場合、効果が薄い。

  • Layer Norm

    • それぞれのSampleすべてのPixcelsが同一分布に従うように正規化。

    • ミニバッチサイズに影響は受けない。

  • Instance Norm

    • 更にChannelも同一分布に従うように正規化

    • コントラストの正規化。

  • Wavenet

    音声生成モデル。 音声データを畳み込みする時に、サンプルを飛ばすことでより時間的に幅広い入力を扱える。Dilated causal convolution。

実装演習

なし

確認テスト等考察

Mobile Net は名称からも軽量化技術というイメージがつきやすく、考え方も理解しやすい。 Dense NetはDense Block 内で畳み込みによりチャネル数を増やして、TransitionLayerでチャネル数をもとに戻していると覚える。

追加演習

シラバス範囲内のいくつかのネットワークについてまとめる。

GoogLeNet

2014年のILSVRCの優勝モデル。初めてモジュール化という概念を取り込んだ。 1x1の畳み込み、3x3の畳み込み、5x5の畳み込みを全て用いて、最後に結合するというブロックをInspection Moduleと呼び、Inspection Moduleを連結する構成となっている。 また、途中のInspection Moduleからも全結合層と活性化関数を用いた推論と誤差逆伝播を行うことで、アンサンブル効果も得ている。

ResNet

Shortcut Connectionを適用して、幾つかの層をスキップさせるパスを作ることで、層を多数重ねても勾配消失が発生しにくくし、それ以前に比べてとても深いネットワークを構成できるようになった。

深層学習day4 Section3:軽量化・高速化技術

要点まとめ

分散深層学習とは

深層学習は多くのパラメータを使用したり学習をしたりするため、高速な演算が求められる。 データ量・計算量は1年毎に10倍に増加している。一方、コンピュータは18ヶ月で2倍の性能にしかならない。 そのため、複数の計算資源を用いて並列的にニューラルネットを構成することで効率よく学習を行いたい。

その実現方法には様々な方法がある。

  • 複数のCPUを実装する。
  • 複数のコンピュータをネットワークで結合して学習に使用する。
  • CPUだけではなく、GPUやTPUを使用する。

複数の計算資源を活用するためにいくつかの工夫が必要になる。

データ並列化

親モデルを各ワーカーに子モデルとしてコピーし、それぞれの計算資源で勾配を計算させる。 複数の計算資源での勾配を親モデルに反映させる方法には同期型と非同期型がある。 同期型は、複数の結果を全て集めて平均を計算して親モデルのパラメータを更新する方法。 非同期型は、勾配の計算が終わったワーカーから各子モデル毎にパラメータサーバーにPUSHする。 次の学習はパラメータサーバーからPOPしたモデルに対して学習を行う。

非同期型は最新のモデルのパラメータを利用できないので、学習が不安定になりやすく、現在は同期型が主流。

モデル並列化

親モデルを各ワーカーに分割し、それぞれのモデルを学習させる。全てのデータで学習が終わった後で一つのモデルに復元。 モデル並列化をすると、ネットワークなどでデータ通信のオーバーヘッドがある。

モデルが大きいときはモデル並列化を行い、データが大きいときはデータ並列化をすると良い。

GPUによる高速化

CPUは非常に高性能で高速なコアが少数搭載されている。 GPUは比較的低性能なコアが多数搭載されている。 ニューラルネットの演算は単純な演算を並列で行えるGPUが向いている。 GPU上で並列演算を行うためのCUDAというプラットフォームがあり、NVIDIAGPUを使用できる。

量子化

通常のパラメータの64bit浮動小数点を32bit等の下位の精度に落とすことで、メモリと演算処理の削減を行う。 16bit浮動小数点にすると更にメモリの使用量を削減することができる。 更にbit数が少ないと演算速度も高速にできる。 32bit演算は64bit演算に比べて約倍の性能が出る。 しかし、計算精度に関してはbit数が減ると悪化する方向になる。

実際の機械学習では半精度の16bitでも実用上十分な精度が得られる。

蒸留

教師モデル(規模が大きく、予測精度が高いモデル)と、生徒モデル(規模が小さく、そこそこの精度のモデル)を用いて学習を行う。

教師モデルの出力からの差を誤差として生徒モデルの学習を行うことで、規模が小さくてもそれなりに良い性能を得られる。

プルーニング

ネットワークの規模が大きくなると、使われていない(重みが0に近い)箇所が存在する。 重みがある閾値以下のネットワークを削除することで、演算の速度を高速化する手法。

実装演習

動画上なし

確認テスト等考察

ニューラルネットワークは規模が大きくなるとメモリ量・演算時間的な問題が発生する。 そのため、量子化・蒸留・プルーニング等の技術を使って軽量化・高速化を図られていることを学べた。

追加演習

深層学習day4 Section2:AlphaGo

要点まとめ

Alpha Go Lee

方策関数 PolicyNet と 価値関数 ValueNetからなる。

方策関数の入力は囲碁の盤面と同じ19x19の48チャンネル。 48チャンネルは、石(自石、敵石、空白)の3チャンネル、オール1、着手履歴、呼吸点・・・等。 その後、畳込み+ReLu関数を繰り返し、最後にsoftmax関数を通すと、19x19の次の手の確率を出力。

価値関数の入力は盤面特徴入力49チャンネル。 畳み込み+ReLu関数を繰り返し、全結合層を挟み、活性化関数tanhを通して、現局面の勝率を-1~1で表したものが出力される。

PolicyNetの教師あり学習では、KGS Go Serverというネット囲碁対局サイトの棋譜データから、3000万対局分の教師を用意して、教師と同じ手を予測できるように学習を行った。

PolicyNetの学習あり学習、最初は教師あり学習による様々な種類のPolicyPoolからランダムに選択されたPolicyNetとの対局シミュレーションを行い、その結果から方策勾配法で学習を行った。

その後、ValueNetの学習も行う。

RollOutPolicyとはNNではなく線形の方策関数で、高速で方策を計算する目的の関数。 PolicyNetが3ms要するのに対し、RollOutPolicyは3usで済む。

ValueNetの学習は、PolicyNetを使用して対局シミュレーションを行い、その結果の勝敗を教師として学習した。

Alpha Go Zero

AlphaGo Lee AlphaGo Zero
教師あり学習 あり なし
入力にヒューリスティックな要素 あり なし
PolicyNetとValueNet 独立 一つのNetworkに統合
Residual Net なし 導入

また、AlphaGo Zeroではモンテカルロ木探索からRollOutシミュレーションをなくした。 PolicyValueNetは、入力に19x19の17チャンネルを取り、畳み込み、BatchcNormalize、ReLuを通し、その次にResudualBlockを通す。その後方策関数側と価値関数側とに分けて出力を作る。 ResidualBlockの基本構造は、 畳み込み→BatchNorm→ReLu→畳み込み→BatchNorm→Add(ショートカットを加算)→ReLu であり、 AlphaGoZeroでは基本構造を39個重ねている。

ショートカット構造があるため、勾配消失を回避できると共に、アンサンブル効果が得られる。

実装演習

なし

確認テスト等考察

Alpha Go LeeからZeroへは、ヒューリスティックな入力の排除や、ValueNet ・PolicyNetの統一、ResidualNetの利用などが大きな変更点。ResidualNetは畳み込み等の基本的な構造の他に、入力をそのまま出力に加算するショートカット構造を持つことで、深い層構造を実現している。

深層学習day4 Section1:強化学習


要点まとめ

強化学習は、教師あり学習教師なし学習に並ぶ学習。 行動の結果得られる報酬を元に、行動を決定する原理を改善していく仕組み。

教師なし・あり学習では、データに含まれるパターンを見つけ出し、そのデータを予測することが目標だったが、強化学習では優れた方策を見つけることが目標になる。

エージェントが方策\Piを行ったときに、状態Sになり、エージェントが報酬Vを得る。 様々な方策\Piを行いながら得られたVを学習しながら、Vを最大化するような\Piを学習する。

数式での表現

  • 方策関数 \Pi (S) = a 状態Sを受けて行動aを行う関数。

方策ベースの強化学習手法において、ある状態でどのような行動を採るのかの確率を与える関数。

  • 価値関数 ゴールまで今の方策を続けた時の報酬の予測値が得られる。

    • 状態価値関数 V^{\pi}(S) 状態Sの価値を表す関数。
    • 行動価値関数 Q^{\pi}(s,a)
      状態Sで行動aを採ったときの価値を表す関数。最近はこちらが重要視されている。
  • Q学習 行動価値関数を、行動するごとに更新することにより学習を進める方法。

  • 関数近似法 価値観数や方策関数を関数近似する手法のこと

方策勾配法

方策をモデル化して最適化する手法。 重み\thetaの場合、下記のように方策の良さJ(\theta)によって方策を更新する方法。

 \displaystyle{
\theta^{(t+1)}=\theta^{(t)} + \epsilon \nabla J(\theta)
}

方策勾配定理。式変形は複雑らしいので、とりあえずそのようなものだという理解。

 \displaystyle{
\nabla_{\theta}J(\theta) = \mathbb{E}_{\pi_{\theta}} [(\nabla_{\theta} \log \pi_{\theta} (a|s) Q^{\pi} (s,a))]
}

実装演習

動画中にも無し。

確認テスト等考察

報酬を最大化するという考え方が強化学習。 方策勾配法によるパラメータ更新式は、勾配降下法と同じ考え方だが、方策勾配定理への式変形は難解。