Weitere ähnliche Inhalte
Ähnlich wie レポート深層学習Day4 (10)
レポート深層学習Day4
- 1. レポート 深層学習 Day4
1.強化学習
① 強化学習とは
長期的に報酬を最大化できるように環境の中で行動を選択できるエージェントを作る
ことを目標とする機械学習の一つ
→行動の結果として与えられる利益(報酬)をもとに行動を決定する原理を改善してい
く仕組み
② 強化学習の応用例
災害用ロボットを例にとると、
環境:障害物がたくさんある凸凹した地面
エージェント:周りの環境に応じて前進の仕方を考えるコンピューター
行動:場面に応じて歩く・ジャンプ等から最適な行動を選ぶ
報酬:前に進めた距離
③ 探索と利用のトレードオフ
事前に環境に対する知識が十分にあった場合、
最適な行動を選択することは可能である
が、強化学習ではそういう前提を置かず、自ら行動をとりながらデータを集め最適な行
動をとれるように学習していく。
過去のデータから最適な行動のみを選択した場合、
よりよい選択ができない→探索不足
未知の行動のみをとるようにすると過去の経験を活かせない→利用不足
これが探索と利用のトレードオフ
- 4. alpha = 0.1#学習率。大きいと 1 回の学習による値の更新が急激となる。小さいほど更新がゆ
るやかとなる。後で詳述。
#報酬の設定
#各場所から移動できる箇所に報酬 1 を与え、それ以外を 0 とすることで移動できる方向を指示
#以下の行列の各行が場所に対応。0 行目は迷路の位置 0、1 行目が迷路の位置 1
#ゴールの報酬を大きく設定する
reward = np.array([[0,1,1,0,10000],
[1,0,0,0,10000],
[1,0,0,1,10000],
[1,0,1,0,10000],
[1,0,0,1,0]])
#Q 値(行動価値)の初期値を設定。今回は 0 を初期値とする。
Q = np.array(np.zeros([5,5]))
#Q 学習を実装し、各位置における行動価値を算出
#以下の学習を実行すると、行動価値 Q を求められる。Q の各行が位置に対応し、たとえば 0 行 1
列目の値は 0 から 1 に移動する行動の価値となる。
#p_state の p は present(現在)、n_state,n_actions の n は next(次)の n
for i in range(10000):#1 万回繰り返し学習を行う
p_state = np.random.randint(0,5)#現在の状態をランダムに選択
n_actions = []#次の行動の候補を入れる箱
for j in range(5):
if reward[p_state,j] >= 1:#reward の各行が 1 以上のインデックスを取得
n_actions.append(j)#これで p_state の状態で移動できる場所を取得
n_state = np.random.choice(n_actions)#行動可能選択肢からランダムに選択
#Q 値の更新。学習率が小さいほど現在の行動価値が重視され、更新がゆるやかとなる
#ここで Q 学習に用いる「たった一つの数式」を利用して行動価値を学習していく
Q[p_state,n_state] = (1-
alpha)*Q[p_state,n_state]+alpha*(reward[p_state,n_state]+gamma*Q[n_state,
np.argmax(Q[n_state,])])
#最短ルート表示関数の定義。Q 値が最も高い行動を append で追加しているだけ
def shortest_path(start):#0~4 の数字を入力。好きなところからスタート可能
- 5. path = [start]#path に経路を追加していく
p_pos = start#p_pos は現在位置(position の略)
n_pos = p_pos#n_pos(次の位置)にいったん p_pos を代入
while(n_pos != 4):#n_pos がゴール(4)になるまで繰り返し行動を選択
n_pos = np.argmax(Q[p_pos,])#各位置の行動価値が最も高い行動を選択
path.append(n_pos)#経路を path に追加
p_pos = n_pos#行動後が次の p_pos となる
return path
print(Q)
print(shortest_path(0))#スタートを 0 として最短経路を表示
出力
[[ 0. 47365.42115137 47365.25695414 0. 52627.9403871 ]
[47365.07951408 0. 0. 0. 52628.04683935]
[47365.10598893 0. 0. 47364.32659956 52628.07782184]
[47364.9629401 0. 47365.07147812 0. 52628.0624987 ]
[47365.6191127 0. 0. 47365.40229523 0. ]]
[0, 4]
- 8. ②Alpha Go の学習ステップ
1、教師あり学習による RollOutPolicy と PolicyNet の学習
対局サイトの棋譜データから 3000 万局面分の教師を用意し、教師と同じ着手ができる
よう学習。具体的には、教師が着手した手を 1 とし残りを 0 とした 19×19 次元の配列
を教師とし、それを分類問題として学習。
2、強化学習による PolicyNet の学習
現状の PolicyNet と PolicyPool からランダムに選択された PolicyNet と対局シミュレー
ション結果を用いて方策勾配法で学習。PolicyPool とは、PolicyNet の強化学習の過程
を 500Iteraion ごとに記録し保存しておいたもの。この学習を minibatch size 128 で 1
万回実施
3、強化学習による ValueNet の学習
PolicyNet を使用して対局シミュレーションを行い、
その結果の勝敗を教師として学習。
教師データ作成の手順
1、まず SL PolicyNet(教師あり学習で作成した PolicyNet)で N 手まで打つ。
2、N+1 手目の手をランダムに選択し、その手で進めた局面を S(N+1)とする。
3、S(N+1)から RLPolicyNet(強化学習で作成した PolicyNet)で終局まで打ち、そ
の勝敗報酬を R とする。
S(N+1)と R を教師データ対とし、損失関数を平均二乗誤差とし、回帰問題として学習
した。この学習を minibatch size 32 で 5000 万回実施。
- 10. ⑥ResidualNetwork
ネットワークにショートカット構造を追加して、勾配の爆発、消失を抑える効果を狙っ
たもの
⑧ Alpha Go Zero の学習法
Alpha Go の学習は自己対局による教師データの作成、学習、ネットワークの更新の3
ステップで構成される
自己対局による教師データの作成
現状のネットワークでモンテカルロ木探索を用いて自己対局を行う。まず 30 手までラ
ンダムで打ち、そこから探索を行い勝敗を決定する。自己対局中の各局面での着手選択
確率分布と勝敗を記録する。教師データの形は(局面、着手選択確率分布、勝敗)が1
セットとなる。
学習
自己対局で作成した教師データを使い学習を行う。Network の Policy 部分の教師に着
手選択確率分布を用い、Value 部分の教師に勝敗を用いる。損失関数は Policy 部分は
CrossEntropy、Value 部分は平均二乗誤差。
ネットワークの更新
学習後、現状のネットワークと学習後のネットワークとで対局テストを行い、学習後の
ネットワークの勝率が高かった場合、
学習後のネットワークを現状のネットワークとす
る。
- 12. 参考サイトによる学習
モデルの軽量化についてディープラーニングを軽量化する「モデル圧縮」3手法|エンジ
ニアコラム | 株式会社 Laboro.AI より学習した(画像等も参照させていただいた)
。
ここでは現場のデバイス(エッジデバイス)に AI を実装する必要があるため、エッジ
デバイスの処理能力には限界があり、できる限り計算量を落とす必要があるため、
モデ
ルの軽量化は必須となる。
① プルーニング
ノードや重みを削減することでパラメーター数を現象させる方法である。
手法としては
重みの絶対値が小さい手法が一般的である。
一般的にはプルーニングだけでは精度が落
ちるため、プルーニング後に再学習を行うことで精度を維持できるようである。
② 量子化
量子化とは重みなどのパラメーターをより小さいビットで表現することでモデルの軽
量化を図る方法である。ビットを制限することで使用メモリを削減できる。
通常は 32bit を使用するのが一般的であるが、8bit の量子化であれば 1%程度の性能低
下で済むようである。
③ 蒸留
蒸留とは大きなモデルやアンサンブルモデルを教師モデルとして、
その知識を小さいモ
- 16. ② DenseNet
DenseNet とは前方の出力をすべて後方の入力にするように接続した DenseBlock を複
数組み合わせたものであり、勾配消失を避け、情報の伝達も十分に行えるようにしたも
のである。
③ BachNorm
レイヤー間を流れるデータの分布をミニバッチ単位で平均0分散1となるように正規
化したもの。学習時間の短縮や初期値への依存低減、過学習の抑制効果がある。
問題点として、BatchSize が小さい場合は学習が収束しないことがあるため、
LayerNormalization などの正規化手法が使われることが多い。
- 17. 上記の立方体は、H,W は一画像の1チャンネルの画像を1列のデータにしたもの。
それがチャンネル数の C と N 枚の画像が並んでいるデータだとする。
BatchNorm は 同 じ チ ャン ネルの デー タ、 LayerNorm は同 じ画像のデータ、
InstanceNorm はあるチャンネルの1枚の画像のデータごとに正規化を行う方法である。
BatchNorm は Batch サイズが小さいときに効果が薄くなってしまうが、LayerNorm に
することでミニバッチの数に依存しない学習ができる。
④ WaveNet
生の音声波形を生成するモデル。
時系列データに対して畳み込みを適用するが、左図の様に畳み込むのではなく、
左図の
ように層が進むにつれてリンクを話すようにつなげていることで、
多くの入力を一つに
アウトプットにリンクさせることが出来る。
- 20. 5. Transformer
Transformer の前に Seq2seq の復習を行う。
Encoder-Decoder モデルとも呼ばれる
入力系列が Encode(内部状態に変換)され、内部状態から Decode(系列に変換)する
実応用上も、入力・出力共に系列情報なものは多い
翻訳 (英語→日本語)
音声認識 (波形→テキスト)
チャットボット (テキスト→テキスト)
ベースは RNN
時間方向への再帰構造となっている。
文章も時系列ととらえて入力データとする。例えば文章生成
- 22. 翻訳の場合は日本語から英語へ翻訳する必要があるため、
Seq2seq という Encoder-
Decoder モデルを利用する。
Encoder で入力された文章を一定の意味を表すベクトルに変換し、
Decoder で異な
る言語へ復元する。
Decoder 側で正解と比較して損失関数を求めて逆伝播させて言
えば、学習することが可能となる。
実装
サンプルのコードを実行し、流れを体験した。
まず TanakaCorpus という英語-日本語の対訳コーパスから、
入力の英語文、
教師データ
の日本語分を読み込み、単語単位で list 化する。
- 25. transformer について
RNN を利用した Seq2seq の課題として、文章が長くなると表現力が足りなくなる
ことがある。これは Attention というどの程度ある単語に注目すべきか評価する指
標を入れることで解決することができる。
transformer は RNN を使わず Attention だけを使ったもの。
構造は以下の通り。
- 30. ③ Position-Wise Feed Forward Network
単語列の位置ごとに独立して処理する 2 層のネットワークである Position-Wise
Feed Forward Network を定義
④ Masking
Transformer では Attention に対して2つのマスクを定義する。
一つは key 側の系列の PAD トークンに対して Attention を行わないようにするマ
スク、もう一つは Decoder 側で SelfAttention を行う際に、各時刻で未来の情報に
対する Attention を行わないようにするマスク。
- 33. 6. 物体検知・セグメンテーション
物体認識タスクの種類
分類、物体検知、意味領域分割、個体領域分割
① 分類
画像に対して単一または複数のクラスラベルを振る
② 物体検知
Bounding Box
③ 意味領域分割
各ピクセルに対してクラスラベルを振る
④ 個体領域分割
各ピクセルに対してクラスラベルを振る
代表的データセット
いずれも物体検出コンペティションで用いられたデータセット
目的に応じて学習に使用するデータセットを変える必要がある。
例えばクラス数が大きいことが本当に必要なのか?よく見たらラベル付けが適切
でない可能性もある。
種類 クラス Train+Val BOX/画像 特徴
VOC12 20 11,540 2.4
ILSVRC17 200 476,668 1.1 アイコン的な画像
MS COCO18 80 123,287 7.3 たくさんのものが写って
いる
OICOD18 500 1,743,042 7.0 たくさんのものが写って
いる
評価指標
予測
真値
Positive Negative
Positive True Positive False Negative
Negative False Positive True Negative
- 34. Precision=TP/(TP+FP) 適合率:どれだけ P と予測したものが正しかったか
Recall=TP/(TP+FN) 再現性:どれだけ P を取りこぼしがなく予測できたか
PR 曲線
confidence を小さい値から大きい値まで変化させて、precision と recall を計算しそれ
をプロットしていく。
閾値を上げていくと、当然、P と予測したものの数は増えるので正解率は下がってくる
ため、Precision は小さくなる。一方、取りこぼしはなくなるので Recall は上がる。
よって、グラフとしては、左上から右下へ向かう曲線となる。
そしてそのグラフの下の面積で性能を評価する。
IoU:Intersection ocer Union
物体検出における予測精度の評価
- 35. 物体検知の大枠
AlexNet の登場を皮切りに、SIFT→DCNN へ変化
物体検知には大きく2種類ある
2段階検出器
候補領域の検出とクラス推定を別々に行う。
相対的に精度が高い
相対的に計算量が大きく推論も遅い傾向
1段階検出器
候補領域の検出とクラス推定を同時に行う
相対的に精度が低い傾向
相対的に計算量が小さく推論も早い傾向
SSD:Single Shot Detector
VGG16
SSD の構造
- 37. Semanintic Segmentation
Semantic Segmentation とは入力された画像に何が写っているかをピクセ
ルごとにクラス分けするアルゴリズムのことである。
クラス分類までは他の物体検知を同じように畳み込みをしていくが、最後
に Up-sampling の壁と呼ばれるように、
解像度を落とした情報から元の画
像の解像度に戻す必要がある点である。
そこで工夫する点としては、VGG16 であれば最後のクラス分類を確率で
出力する際の結合層部分を、画像の 2 次元の特徴を表したヒートマップを
出力することにした点である。
- 39. このような工夫で有名なモデルが U-Net である。
特徴としては Skip-connection 時にはチャネル方向への結合である点であ
る。
Unpooling というpooling時にどの位置かといった情報を残す工夫もある。