「計量時系列分析」読解メモ①(Ch_1 時系列分析の基礎概念)|時系列分析の基礎を学ぶ #3

f:id:lib-arts:20190710004835p:plain

強化学習などについて取り扱っていくにあたり、通常の時系列データについての取り扱いも一度まとめておく方が良さそうなので時系列分析の基本についてまとめていきます。
#1では時系列データとはどのようなデータであるかやモデリングにおいて重要になる定常過程について、#2ではモデリングにおいてよく用いられるAR、MA、ARMAについてご紹介しました。

#3以降では時系列分析の入門本として評判の良い、「経済・ファイナンスデータの計量時系列分析」について取り扱います。

朝倉書店|経済・ファイナンスデータの 計量時系列分析

#3では1章の時系列分析の基礎概念について取り扱います。
以下目次になります。(一旦概要を掴むにあたり、1.4は飛ばしました)

1. 時系列分析の基礎概念(Ch_1)
1-1. 時系列分析の基礎(1.1)
1-2. 定常性(1.2)
1-3. ホワイトノイズ(1.3)
2. まとめ


1. 時系列分析の基礎概念(Ch_1)
本の1章では時系列分析の考え方と基礎的な概念について紹介されています。特に定常性と自己相関に関して、時系列分析の中心的な役割を果たす概念とされています。
したがって下記の読解メモも定常性と自己相関の概要の把握についてを優先度高めでまとめていけたらと思います。


1-1. 時系列分析の基礎(1.1の簡単な要約)
・時系列分析の目的
時系列データ(time series data)は時間の推移とともに観測されるデータのことで、観測される順序に意味があることが大きな特徴である。順序が意味を持つというのがここで重要であり、ある一時点において複数の変数が観測されるクロスセクションデータ(cross section data)とは対照的である。
時点1からTまでのデータが観測されたとすると時系列データは\bigl\{ y_{t}\bigr\}_{t=1}^Tのように表記される。
時系列分析の目的は、時系列データが持っている多様な特徴を記述できるモデルを構築することであり、そしてそれらのモデルを基に目的に目的に応じた分析を行う。具体的な目的については下記のように挙げられる。

1) 時系列データに関して何らかの予測を行うこと
2) 変数間の動学的関係を明らかにすること
3) 経済理論やファイナンス理論を検証すること

 

・時系列データの種類
時系列データそのものは原系列と呼ばれることが多い。時系列分析の目的は、ほとんどの場合この原系列の性質を明らかにすることであるが、実際の解析は原系列に何らかの変換を施した系列に対して行われることも少なくはない。以下そのようなの変換を施した系列に関して整理しておく。

1) 対数系列(系列データに対数変換を施したものlog y_{t}
2) 差分系列(1時点離れたデータとの差を求めたもの、階差系列とも呼ばれる。\Delta y_{t}
3) 対数差分系列(\Delta log y_{t}
4) 季節調整済み系列(seasonally adjusted series; 原系列から季節変動を除いたもの)

 

・基本統計量と時系列モデル
期待値(expectation)、平均(mean)、分散(variance)、標準偏差(standard deviation)などが基本統計量にあるが、基本的に一般的な意味と同じである。ファイナンスの分野では、標準偏差のことをボラタリティ(volatality)と呼ぶことが多く、リスクを計測する重要な指標として用いられる。
以下時系列モデルに特有の統計量である、自己共分散(autocovariance)、自己相関係数(autocorrelation coefficient)と自己相関係数をグラフに描いたコレログラム(correlogram)についてまとめる。
まず、自己共分散だが、同一の時系列データにおける異時点間の共分散である。具体的にはk次の自己共分散は下記のように定義される。
\gamma_{k,t}=Cov(y_{t},y_{t-k})=E[(y_{t}-\mu_{t})(y_{t-k}-\mu_{t-k})]
この自己共分散を解釈するにあたって、値が単位に依存してしまうので、変数間の関係の強弱を測るにあたっては、自己共分散を基準化した自己相関係数を用いる。k次の自己相関係数は下記のように定義できる。
\rho=Corr(y_{t},y_{t-k})=\frac{Cov(y_{t},y_{t-k})}{\sqrt{Var(y_{t})Var(y_{t-k})}}=\frac{\rho_{k,t}}{\sqrt{\rho_{0,t}\rho_{0,t-k}}}
この自己相関係数をラグであるkに着目して、可視化を行なったのがコレログラムである。

f:id:lib-arts:20190710013714p:plain

Correlogram - Wikipedia

上記がコレログラムの例である。横軸はラグを表すkが用いられている。


1-2. 定常性(1.2の簡単な要約)
様々な時系列モデルを紹介するにあたって、その根幹にあるのが定常性(stationarity)という概念である。定常的な仮定の下で基礎的な時系列モデルが構築され、それに基づいて非定常ばモデルが構築される。
定常性は、同時分布や基本統計量の時間不変性に関するものであり、何を不変とするかによって、弱定常性(weak stationarity)と強定常性(strict stationarity)の二つに分類される。以下に弱定常性と強定常性の定義をまとめる。

・弱定常性の定義
任意のtとkに関して、
E(y_{t})=\mu
Cov(y_{t},y_{t-k})=E\bigl[(y_{t}-\mu)(y_{t-k}-\mu)\bigr]=\gamma_{k}
が成立する場合、過程は弱定常(weak stationary)といわれる。

上記のように、弱定常性においては、自己共分散が時間差kにのみ依存する。これを共分散定常性(covariance stationarity)と呼ぶこともある。

・強定常性の定義
任意のtとkに対して、\mathbf{y}'=(y_{t},y_{t+1},...,y_{t+k})'の同時分布が同一となる場合、過程は強定常(strict stationary)といわれる。ここで\mathbf{y}'はベクトル\mathbf{y}の転置を表す。

このように定義される強定常性は弱定常性に比べ非常に強い仮定であるため、経済・ファイナンスの時系列分析では定常性に言及する際は暗に弱定常性を仮定することが多い。


1-3. ホワイトノイズ(1.3の簡単な要約)
最も基礎的な強定常過程としては、iid系列がある。iidとはindependently and identically distributedの略である。これは各時点のデータが互いに独立で、かつ同一の分布に従うことを意味している。
\bigl\{y_{t}\bigr\}が期待値\mu、分散\sigma^2のiid系列であることを以下y_{t}〜iid(\mu,\sigma^2)で表記していくとする。iid系列自体が経済・ファイナンスデータの時系列モデルとして用いられることは少ないが、期待値0のiid系列は時系列モデルの撹乱項(innovation, disturbance term)、すなわち時系列モデルにおいて確率的変動を表現する部分として用いることができる。
しかしながら、独立性や同一分布性は非常に強い仮定であり、必ずしも分析に必要となるものではない。したがってもう少し弱い仮定しか必要とせず、モデルの撹乱項として用いることができるものがあれば便利である。これがホワイトノイズである。以下ホワイトノイズの定義を記述する。

・ホワイトノイズの定義
全ての時点tにおいて、
E(\epsilon_{t})=0
\gamma_{k}=E(\epsilon_{t},\epsilon_{t-k})=\sigma^2(k=0)|0(k \neq 0)
が成立するとき、\epsilon_{t}はホワイトノイズ(white noise)と呼ばれる。

上記がホワイトノイズの定義である。


2. まとめ
#3では「経済・ファイナンスデータの計量時系列分析」の1章についてまとめました。
#4では引き続き2章について取り扱っていきます。

Ch_3 競争優位 ー バリューチェーンと損益計算書_後編|『[エッセンシャル版]マイケル・ポーターの競争戦略』読解メモ #6

f:id:lib-arts:20190625182650p:plain

本の選定などの経緯は#1にまとめました。
https://lib-arts.hatenablog.com/entry/porter_essential1
#1では「はじめに」で記述されていた、本の概要について、#2では第1章の内容として「競争 ー 正しい考え方」についてまとめました。
https://lib-arts.hatenablog.com/entry/porter_essential1
https://lib-arts.hatenablog.com/entry/porter_essential2
#3、#4では第2章の内容として「五つの競争要因 ー 利益をめぐる競争」についてまとめました。
https://lib-arts.hatenablog.com/entry/porter_essential3
https://lib-arts.hatenablog.com/entry/porter_essential4
#5、#6では第3章の内容として「競争優位 ー バリューチェーン損益計算書_前編」を取り扱います。
#5では冒頭部〜経済の基本原理について取り扱いました。

#6では「バリューチェーン」〜「競争優位を実現するにはどうすれば良いか?」をまとめていければと思います。
以下、目次になります。
1. バリューチェーン
2. 戦略への洞察: ポーターの輝かしき新世界
3. 競争優位を実現するにはどうすればよいか?
4. 感想・まとめ

 

1. バリューチェーン
競争優位の簡潔な定義としては#5でまとめた様に、「持続的な高価格か低コスト、またはその両方によってもたらされた卓越した業績」だと考えることができる。だが経営者にとって定義だけでは不十分で、さらに経営者の手でコントロール可能な競争の源泉を突き止めねばならない。これらについて知るにあたっては、競合企業間のコストや価格の違いに影響する企業の無数の活動について分析する必要がある。ここで活動とは様々な経済的機能やプロセスのことである。
経営者はマーケティングや物流といった職能の観点から物事を考える傾向にある。だが、競争優位を理解するには、活動に焦点を絞る必要がある。活動は従来型の職能より範囲が狭い。
価格やコストに影響を及ぼすために経営者として何ができるかを明確に考えるには、活動のレベルまで掘り下げ、「自社の得意なことを、自社の行う特定の活動に具現化する必要がある。


・企業が製品を設計、生産、販売、配送、サポートするために遂行する活動の集合は、バリューチェーンと呼ばれる。
バリューチェーンはより大きなバリューシステムの一部である。バリューシステムはエンドユーザーのための価値創造に関わる、より大きな活動の集合をいい、活動の主体は当該企業だけではない。バリューシステムの垂直統合の度合いに関する選択は、突き詰めればあらゆる企業が下している、「バリューシステムのどこに位置を定めるか」に関する選択である。
バリューチェーンが重要な理由は、バリューチェーンは企業を戦略的に意味のある活動に分解する強力なツールだからである。バリューチェーンを用いて考えることで、企業は自らの競争優位の源泉、つまり価格の引き上げまたはコストの低下をもたらす特定の活動に焦点をあてることができる。


バリューチェーン分析の主要なステップ
バリューチェーンについて知るには実際に使ってみるのが一番なので、以下使い方をまとめる。

1. 業界において標準のバリューチェーンを洗い出す
確立した業界には、業界内の大半の企業が行う活動の範囲と順序を表す支配的な手法が必ず一つ以上ある。業界のバリューチェーンとは、要は業界の一般的なビジネスモデル、価値を生み出す方法である。
この際に重要なのは、業界固有のす様な価値創造活動を洗い出すことである。複数のビジネスモデルが存在するときは、それぞれの一般的なバリューチェーンを明らかにしてから競合企業ごとの違いを調べる。

2. 自社と業界のバリューチェーンを比較する
自社のバリューチェーンを作成し、業界のバリューチェーンや同業他社と比べてみる。この際に自社のバリューチェーンが同業他社と区別がつかない場合、最高を目指す競争に終始していることになってしまう。

3. 価格ドライバー、つまり差別化の鍵を現在または将来握る活動に注目する。
自社は競合他社と同じ活動を異なるやり方で行うか、異なる活動を行うことによって、顧客のために優れた価値を創造しているかどうかを確認する必要がある。買い手価値はバリューチェーンのあらゆる部分から生まれる。
顧客が法人であれ、一般消費者であれ、自社の活動がバリューシステム全体の中で果たす役割を分析することが、買い手価値を理解する鍵になる。

4. コストドライバー、つまりコストに占める割合が高いか、高まっている活動に注目する。
自社の相対的なコストポジション(RCP; Relatve Cost Position)はバリューチェーンないの一つ一つの活動を実行するコストによって構成される。自社と競合他社のコスト構造には実質的または潜在的な違いがあるのかについて確認すると良い。
このコストには、直接の事業コストや資産コストだけでなく、活動を行うことで生じる間接コストも含まれる。
それぞれの活動がコスト優位にあるか劣位にあるかは、コストドライバー、つまり相対的コストに影響を及ぼす一連の要因によって決まる。 


2. 戦略への洞察: ポーターの輝かしき新世界
バリューチェーンはポーターが『競争優位の戦略』の中で初めて詳しく説明した概念であるが、この概念は経営者の世界観を変えたといっても過言ではない。以下にバリューチェーンに与えたインパクトについて二点まとめる。

 1. 一つ一つの活動を単なるコストとしてではなく、最終製品・サービスに何らかの価値を加えるべき段階として捉える様になること。
2.自社の組織のと活動の向こうに目を向け、自社が他の企業を含むより大きなバリューシステムの一部だという認識を持つ様になること。

 
3. 競争優位を実現するにはどうすればよいか?
競争優位とは、企業が実行する活動の違いから生じる、相対的価格または相対的コストの違いをいい、競争優位は企業の活動から生じる。
活動の違いには二種類の形態があり、「1.他社と同じ組み合わせの活動を他社より優れて実行しているか」と、「2.他社と異なる活動の組み合わせを選択しているか」である。1は最高を目指す戦略であり、ベストプラクティスなどと呼ばれるものである。
ここで重要なのは、ベストプラクティスと戦略を混同しないことである。業務効果を高めるだけでは堅牢な競争優位は得られない。「ベストプラクティス」の優位が持続することは少ないからである。競合他社に模倣されやすい。この種の模倣合戦は過当競争と呼ばれることもある。
したがって2の他社と異なる活動の組み合わせに着目しなくてはならない。


4. 感想・まとめ
#6では第3章の後半についてみてきました。バリューチェーンについては使いこなせると良さそうなので、実際に何度か使ってみれればと思いました。
#7では第4章について取り扱っていきます。

M2Detの著者実装を読み解く|物体検出(Object Detection)の研究トレンドを俯瞰する #4

f:id:lib-arts:20190709005211p:plain

物体検出の研究については以前に論文読解で、FasterRCNNやYOLO、SSD、RetinaNetについて取り扱ったのですが、改めて研究トレンドや考え方の推移についてまとめられればということで新規でシリーズを作成させていただきました。
#1ではHOG(Histograms of Oriented Gradient)[2005]からR-CNN[2013]までについて、#2ではFast R-CNN、FasterRCNN、YOLO、SSDについて、#3ではFPN、RetinaNet、M2Detについて取り扱いました。

#3までで大体の概要がつかめたので、#4以降では実装の確認について行っていければと思います。#4ではM2DetのPyTorchを用いた著者実装が公開されているので、こちらを確認していきます。

GitHub - qijiezhao/M2Det: M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network

以下目次になります。
1. リポジトリ概要
2. 読解の目標設定&PyTorchの簡単な復習
3. Neural Netのアーキテクチャの定義とlossや最適化の実装部分の確認
4. まとめ


1. リポジトリ概要
1節ではリポジトリの概要について確認していきます。

f:id:lib-arts:20190709005901p:plain

GitHub - qijiezhao/M2Det: M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network
上記が論文にもリンクがある、著者実装のリポジトリです。

f:id:lib-arts:20190709010126p:plain
以下README.mdを確認していきます。ContentsにREADME.mdの目次が載っています。概要を掴むにあたっては、Introduction、Demo、Trainingについて確認すると良さそうなので下記ではそれらを中心に確認していきます。

 

・Introduction
まずIntroductionですが、実装に関連する論文の内容を抜粋し要約した形になっています。

f:id:lib-arts:20190709010827p:plain

まず実装のモチベーション(Motivation)として、上記を見ていきます。(Feature Pyramid Networkで取り扱っている)物体の大きさの変化(scale variation)だけでなく、複雑さの変化(ACV; Appearance-Complexity Variation)についても取り扱えるようにとあります。理由として、同じ大きさの物体でも複雑さがきわめて異なることがあるということがあります。
これを解決するにあたって、Feature Pyramid Networkで取り扱っているmulti-scaleだけではなく、(ネットワークの深さを表す)multi-levelという視点(dimension)を導入したとあります。ネットワークの深い層(deeper level)がACVの大きな歩行者(pedestrian)の認識を学習するのに対し、浅い層(shallower level)がACVの小さな信号(traffic light)を学習するとされています。

f:id:lib-arts:20190709005211p:plain

また、multi-levelについては上記で表現されています。2でMLFPN(Multi-Level Multi-Scale Detector)のアーキテクチャの全容が載っています。FFMやTUMなどのそれぞれの処理の詳細についてもMethodologyでモジュール単位の処理が記載されていますが、こちらは2節で扱うとしてここでは流します。

 

・Demo
次にDemoについて確認していきます。

f:id:lib-arts:20190709012426p:plain

Demoでは物体検出のデモの実行手順について記載されています。ここで注意したいのが、実行時のオプションで与えているconfigとweightsです。vggはbackboneのネットワーク構造として有名で大元の論文でも用いられているVGGNetを意味しています。また、weightsの拡張子として与えられている.pthはPyTorchのモデルを意味しているので、学習されたモデルを指定しているということがわかります。
また、実行結果としてbounding boxで物体が囲まれているというのも確認できます。

 

・Training
Trainingでは学習にあたっての手順が記載されています。

f:id:lib-arts:20190709013038p:plain

train.pyを実行していますが、configなどは同じものを使っているので、Demo実行時と大体同じモジュールを使っていることが推測できます。

 

ここまででリポジトリの概要は一通りつかめたので1節はここまでとします。


2. 読解の目標設定&PyTorchの簡単な復習
2節では読解の目標設定とPyTorchに関しての簡単な復習を行います。まず読解にあたっては、論文記載の大まかな処理の部分について把握したいので、下記の目標を掲げます。

・Multi-Level Feature Pyramid Networkの実装の全体像の把握
・Construct the base featureの実装の把握(Methodology)
・The Multi-level Multi-scale featureの実装の把握(Methodology)
・Scale-wise Feature Aggregation Moduleの実装の把握(Methodology)
・lossの計算部分の把握
・最適化の実装部分の把握

IntroductionのMethodologyの実装部分を中心に読んでいくので、先にMethodologyを確認していきます。

f:id:lib-arts:20190709014123p:plain

まずはConstruct the base featureです。ここではFFMv1(Feature Fusion Module v1)について言及がなされています。言葉の通り特徴量(Feature)を混ぜ合わせる(Fusion)ということを意味していますが、VGGNetのconv4-3にあたる(W/4,H/4)とconv6-2にあたる(W/8,H/8)を混ぜ合わせるとあります。これによって(768,40,40)のbase featureを構築するとされています。

f:id:lib-arts:20190709014138p:plain
次にThe Multi-level Multi-scale featureを見ていきます。こちらでは主にTUM(Thinned U-shaped Module)やFFMv2について言及されています。

f:id:lib-arts:20190709014151p:plain

次にScale-wise Feature Aggregation Moduleを確認します。こちらではSFAMという特徴量の集約部分について言及されています。
ここまでのMethodologyを中心に、lossや最適化についても実装の確認を行っていければと思います。

 

大体の目標がわかったところで、簡単にPyTorchの復習をしておきます。上記目標を元に考えるのであれば基本的にモデルのアーキテクチャやlossの定義と最適化の設定についてがわかれば良さそうなので、下記を元に簡単に復習をしておきます。

基本的にはネットワークをクラスで定義し、インスタンスとして構築したネットワークを用いてlossを定義し、loss.backward()で誤差逆伝播を行い、optimizer.step()で重みの更新を行うと考えておくと良さそうです。したがって、3節ではこちらを意識した上で実装を読み解いていきます。


3. Neural Netのアーキテクチャの定義とlossや最適化の実装部分の確認
3節では実装を確認していきます。まずは学習の実装ファイルのtrain.pyを確認します。

M2Det/train.py at master · qijiezhao/M2Det · GitHub

f:id:lib-arts:20190709020238p:plain

(中略)

f:id:lib-arts:20190709020254p:plain

上記がtrain.pyのmain部分の処理になります。loss.backward()やoptimizer.step()があることからこの周辺を探すとlossの実装が確認できます。また、lossの引数に用いられているoutを見ると、net(images)が代入されているので、netを確認すると良いというのがわかります。

f:id:lib-arts:20190709020733p:plain

netは上記の34行目でインスタンス生成されています。またこの実行の関数のモジュールは10行目でインポートされています。m2det.pyのbuild_net関数を読み込んでいることが読み取れるので、m2det.pyについて確認していきます。

M2Det/m2det.py at master · qijiezhao/M2Det · GitHub

上記がm2det.pyのファイルになります。

f:id:lib-arts:20190709021117p:plain

build_net関数については、187行目以降に実装されています。194行目で返り値としてM2Detでインスタンスを返しています。ちなみにこの際のsizeの320はデフォルトの画像サイズで、FFMv1について論文で言及されている40や20はこの数字を表していると思われます。また、ここに512があるのは実行にあたって設定するconfigファイルのconfigs/m2det512_vgg.pyの512であることも同時に推測できます。

f:id:lib-arts:20190709021325p:plain

M2Detについては同一ファイルの26行目以降で実装されています。

f:id:lib-arts:20190709153505p:plain

順伝播(推論)部分はforwardで実装されているため、101行目以降を確認します。

f:id:lib-arts:20190709153522p:plain
まずは上記部分でself.baseによってbase_featsやbase_featureが生成されています。vggやresなどが条件分岐に出てきていることから、VGGNetやResNetを示しており、これがbackboneのネットワーク部分であることがわかります。

f:id:lib-arts:20190709153849p:plain

実際にself.baseの中身を確認すると上記のようにget_backboneとあるので、こちらがbackboneとなるネットワークであることがわかります。この中身まで見ると大変そうなので、一旦forwardの実装がある101行目に戻ります。

f:id:lib-arts:20190709154957p:plain

111行目のbase_featureにFFMv1(Feature Fusion Module)の実装があることがわかります。base_featsの二つのレイヤーから値を取り出し、第二引数はF.interpolate(self.up_reduce...)を用いてupsampling(特徴マップの拡大)を行っているようです。

f:id:lib-arts:20190709155244p:plain

次は115行目以降の処理です。こちらではself.num_levelsの数だけTUM(Thinned U-shaped Module)を追加しています。結果がtum_outsに随時追加されています。

f:id:lib-arts:20190709155643p:plain

tum_outsをtum_outs->sources->loc,conf->outputという流れで処理の記述を行っています。ここでlocとconfはそれぞれlocationとconfidenceでそれぞれbounding boxの座標とbounding boxの確信度を表しています。
ここまでで処理の全体概要と、Methodologyのa〜cで表されたモジュールについて確認できたので、あとはlossと最適化について確認していきます。もう一度train.pyに戻ります。

M2Det/train.py at master · qijiezhao/M2Det · GitHub

f:id:lib-arts:20190709020254p:plain

93行目でloss.backward()94行目でoptimizer.step()を実行しているので、あとはlossの実装を遡ります。88行目で計算したloss_lとloss_cを足し合わせてlossを作っていますが、これまでの流れからloss_lがlocationのloss、loss_cがconfidenceのlossであることが推測できます。ここでoutが87行目のnet(images)で定義されていることから、M2Detクラスのインスタンスであることがわかります。また、同じくcriterionに引数として与えているpriorsは処理を遡るとAnchorより作成されるデフォルトボックスの座標(SSD系のアルゴリズムはデフォルトボックスをネットワークのアウトプットを補正項とみなし補正を行います)であることが推測できます。また、targetsは遡るとnext(batch_iterator)でimageと一緒に生成されていたり、途中の処理でannotationを示唆するannoが使用されていることから、これが学習にあたっての正解データであると考えられます。

 

上記までで、2節で設定した今回の読解目標は一通りクリアできたので、3節はここまでとします。今回は詳しいところまで確認していないので「推測できます」や「思われます」など断定的な言い回しを避けましたが、ほかの可能性が考えづらいところでもあるので大まかな流れは外していないかと思われます。(だいたいconfidenceが97%くらいのイメージです。)


4. まとめ
#4ではM2Detの大まかな実装の流れについて確認しました。
だいたい把握できたので、#5以降ではFaster R-CNN、RetinaNet、Mask R-CNNなどについて実装されているDetectronリポジトリを確認していければと思います。

GitHub - facebookresearch/Detectron: FAIR's research platform for object detection research, implementing popular algorithms like Mask R-CNN and RetinaNet.

公式Tutorialに学ぶPyTorch④(Reinforcement Learning)|DeepLearningの実装 #12

f:id:lib-arts:20190707133205j:plain

連載経緯は#1をご確認ください。

#1はKeras、#2~#7まではTensorFLow、#8からはPyTorchを取り扱っています。

#8ではPyTorchの概要やインストール、簡易実行について、#9はAutograd、#10ではNeural Network、#11ではTraining a Classifierについて取り扱いました。

公式ドキュメントやチュートリアルを元にPyTorchの概要を把握する|DeepLearningの実装 #8 - lib-arts’s diary

公式Tutorialに学ぶPyTorch①(Tutorialの全体像&Autograd)|DeepLearningの実装 #9 - lib-arts’s diary

公式Tutorialに学ぶPyTorch②(Neural Network)|DeepLearningの実装 #10 - lib-arts’s diary

#12では強化学習について取り扱っている、Reinforcement Learning Tutorialについて取り扱います。

Reinforcement Learning (DQN) Tutorial — PyTorch Tutorials 1.1.0 documentation

以下目次になります。
1. Introduction
2. Replay Memory
3. DQN algorithm
3-1. Q-network
3-2. Input extraction
4. Training
4-1. Hyperparameters and utilities
4-2. Training loop
5. まとめ


1. Introduction
まずは冒頭部について見ていきます。

f:id:lib-arts:20190707133618p:plain

Reinforcement Learning (DQN) Tutorial — PyTorch Tutorials 1.1.0 documentation
冒頭部では、今回取り扱う対象であるOpenAI Gymで実装されたCartPole問題について主にまとめられています。CartPole-v0の環境(environment)については下記の記事でルールベースの解法とともに詳しくまとめているので、こちらをご確認ください。

実装にあたっては下記のパッケージを読み込む(import)とされています。

f:id:lib-arts:20190707134515p:plain

実際の実行のコードは下記のように記載されているので、こちらを実行します。

f:id:lib-arts:20190707134533p:plain

冒頭部については主にCartPole-v0についてでしたが、以前の記事で詳しく取り扱っていたため、詳細は省略しました。


2. Replay Memory
2節ではReplay Memoryについて取り扱っていきます。これはDeep Q-Networkにおいて行われた工夫の一つであるexperience replayについてを意味しています。

f:id:lib-arts:20190707134906p:plain

上記において、色をつけた部分が重要なので、簡単に和訳しておきます。

experience replay memoryはエージェントが観測した遷移(transition)を蓄え、このデータを後で再利用できるようにする。experience replay memoryからランダムにサンプリングすることによって、学習用のバッチにおける相関をなくす(decorrelated)ことができる。このことによってDeep Q-Networkの学習手順(training procedure)の安定と改善を可能にすることが示されている。

和訳を解釈すると、Replay Memoryを用い、複数のepisode(一回のゲームの一連の実行をepisodeと呼んでいます)からランダムサンプリングすると、学習データ間の相関をなくすことができます。遷移(transition)の情報は1episode内だとどうしても前後のサンプルで相関が生まれてしまうので、これを回避するためにexperience replayが用いられています。
また、実装にあたっては、TransitionとReplayMemoryについて言及されています。実際の実装は下記のようになっています。

f:id:lib-arts:20190707140337p:plain

チュートリアルに従い上記を実行し、次の内容に移ります。


3. DQN algorithm
Deep Q-Networkのアルゴリズムについて言及されています。
https://lib-arts.hatenablog.com/entry/rl_trend6
大枠は上記で言及しているため省略します。

f:id:lib-arts:20190707142426p:plain
TD誤差である\deltaとそれを用いて計算するHuber lossについては取り扱っていなかったので、簡単に補足しておきます。Huber lossは誤差が小さい時は二乗誤差を計算し、大きい時は絶対値を用いるというものです。これによって推定したQがnoisy(ノイズが大きい)だったとしても、安定して学習を行うことが可能になるとされています。
数式だけだとイメージがつきづらいので、下記を実行することでHuber lossについて可視化することができます。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-3,3,0.01)
y_square = (x**2)/2
y_huber = np.zeros(600)

abs_x = np.abs(x)
for i in range(x.shape[0]):
if abs_x[i]>1:
y_huber[i]=abs_x[i] - 1/2
else:
y_huber[i]=(abs_x[i]**2)/2

plt.plot(x,y_square,label="y_square")
plt.plot(x,y_huber, color="orange",label="y_huber")
plt.legend()
plt.show()

実行結果は下記のようになります。

f:id:lib-arts:20190707143337p:plain

上記を確認することによって、Huber lossを導入することで外れ値(outliers)の影響を受けにくくすることができます。


3-1. Q-network
3-1ではQ-Networkの実装部分について確認していきます。

f:id:lib-arts:20190707143540p:plain

上記が冒頭部の説明ですが、こちらでQ-Networkの実装の概要が言及されています。畳み込みニューラルネットワーク(CNN; Convolutional Neural Network)を用いて実装しており、状態を表すs(state)をネットワークの入力とすることで、出力としてQ(s,left)Q(s,right)を得るとあります。

f:id:lib-arts:20190707144104p:plain

実装は、チュートリアルからコピーして上記のように実行できます。#9〜#11の内容をおさえていればネットワーク自体はオーソドックスな畳み込みニューラルネットワークの実装になっていることがわかります。


3-2. Input extraction
3-2ではInput extractionについて確認します。

f:id:lib-arts:20190707144628p:plain

上記によると、ゲームを実行し、環境から画像を生成するとあります。この際に画像の変換を容易に行うためのtorchvisionパッケージを利用するとあります。

f:id:lib-arts:20190707144718p:plain

(中略)

f:id:lib-arts:20190707144736p:plain
実装は、チュートリアルからコピーして上記のように実行できます。ここで注意なのが、OpenAI Gymで実装されたCartPole-v0より得られるobservationは位置、速度、Poleの角度、Poleの速度の4値なのですが、それとは別にget_screen()を用いて画像を生成しているということです。

f:id:lib-arts:20190707145729p:plain

get_screen()によって得られる画像に関しては上記のように、.shapeを出力することで、配列の大きさを確認することができます。


4. Training
4-1. Hyperparameters and utilities
4-1ではハイパーパラメータやユーティリティについて実装されています。

f:id:lib-arts:20190707150006p:plain

概要については上記で記載されています。select_actionとplot_durationsについて実装の概要が書かれています。select_actionはε-greedyに基づく行動選択、plot_durationsについては可視化について実装されています。

f:id:lib-arts:20190707152718p:plain
またハイパーパラメータについても上記のように設定されています。バッチサイズが128、割引率の\gammaが0.999で設定されていると把握しておくと良さそうです。実装についてはチュートリアルのコードをコピーして実行すれば良いです。


4-2. Training loop
4-2ではTraining loopについて取り扱います。

f:id:lib-arts:20190707160414p:plain

まず、Training loopではoptimize_modelという関数を実装しています。このoptimize_modelでは学習の1ステップの実装を行なっています。

f:id:lib-arts:20190707173710p:plain

上記ではHuber lossの実装や、最適化についてのloss.backward()やoptimizer.step()が記述されています。Huber lossを実装するにあたって引数として与えている、state_action_valueはpolicy_net(Online Deep Q-Network)からの出力、expected_state_action_valuesはtarget_net(Target Deep Q-Network)からの出力となっています。これはDeep Q-Networkの学習を安定させるために二つのDeep Q-Networkを作成するということを反映しており、それぞれを同じネットワーク構造にした上で定期的にOnline Deep Q-NetworkのパラメータをTarget Deep Q-Networkにコピーします。

f:id:lib-arts:20190707174323p:plain

(中略)

f:id:lib-arts:20190707174436p:plain

optimize_model()は上記の繰り返し(Iteration)処理の中で呼び出されています。この繰り返し処理の中で、Q-Networkのパラメータが更新されていきます。


5. まとめ
#12ではPyTorchチュートリアルのDeep Q-Networkについて取り扱いました。
続く#13,#14では同じくPyTorchチュートリアルより、Object Detection Finetuningについて取り扱えればと思います。

TorchVision 0.3 Object Detection Finetuning Tutorial — PyTorch Tutorials 1.1.0 documentation

Ch_3 競争優位 ー バリューチェーンと損益計算書_前編|『[エッセンシャル版]マイケル・ポーターの競争戦略』読解メモ #5

f:id:lib-arts:20190625182650p:plain

本の選定などの経緯は#1にまとめました。

#1では「はじめに」で記述されていた、本の概要について、#2では第1章の内容として「競争 ー 正しい考え方」についてまとめました。

#3、#4では第2章の内容として「五つの競争要因 ー 利益をめぐる競争」についてまとめました。

#5、#6では第3章の内容として「競争優位 ー バリューチェーン損益計算書_前編」を取り扱います。
#5では冒頭部〜経済の基本原理について取り扱います。
以下、目次になります。
1. 冒頭部
2. 経済の基本原理
3. 感想・まとめ


1. 冒頭部(簡単な要約)
競争優位はポーターと非常に関わりの深い言葉だが、ポーターが意図した意味で使われていることは少ない。一般的には組織が得意だと自負することを意味し、経営者がライバル企業に打ち勝つために使う武器という意味が暗にこめられて使われることが多い。
上記は肝心な点でずれており、ポーターのいう競争優位とはライバル企業を下すことではなく、卓越した価値を生み出すことと関わるものである。競争優位には具体的で明確な意味があり、真の競争優位を持つ企業は、競合他社に比べて低いコストで事業を運営しているか高い価格を課しているかもしくはその両方である。他社を凌ぐ業績をあげるにはこうするしかなく、戦略を意義のあるものにしたいなら、財務業績と直接関係づけなくてはならない。そうでない戦略はただの空論でしかない。

 

2. 経済の基本原理(簡単な要約)
競争優位は相対的な概念であり、他を卓越した業績に関わるものである。競合優位とそれに必要な卓越性を見極めるにあたっては、同業他社、つまり似た様な競争環境に置かれているか、五つの競争要因の構成が似ている競合他社との比較で、収益を評価しなくてはならない。
この時、業績は事業ごとに測定して初めて意味を持つ。なぜなら競争要因が作用するのはそれぞれの事業においてだからである。ポーターのいう戦略は事業における「競争戦略」を指し、企業全体をスコープとする企業戦略(複数の事業を有する多角経営企業ビジネスの進め方)とは区別せねばならない。
競争優位がある企業は、業界平均を上回る収益率を持続しているはずであり、つまり競合他社と比べて相対的に高い価格を要求できるか、事業を相対的に低いコストで運営できるか、もしくはその両方である。収益性は価格とコストという二つの要素に分解するとよく、理由はそれぞれのドライバー(影響要因)がそれぞれ全く異なり、行動に与える影響も全く異なるからである。

 

・相対的価格
企業がプレミアム価格を持続できるのは、独自性と価値あるものを顧客に提供できる場合に限られる。買い手により多くの価値を提供できれば、経済学者のいう支払意思額(WTP; Willingness To Pay)を引き上げることができる。この仕組みのおかげで、企業は競合他社の製品・サービスに比べて相対的に高い価格を設定できる。
一般に企業向け市場では、顧客にとっての価値は定量化可能で、経済的観点から説明できる。一方消費者向けの場合は、消費者のWTPには感情的側面や目に見えない側面があることに注意しなければならない。
これらを踏まえた上で、割高な価格を要求できることが差別化の本質である。この差別化(differentiation)という言葉に対するポーターの意図は、割高な価格を要求できる能力のことである。
ここまでを踏まえた上で解釈すると、戦略の目標は卓越した収益性をあげることで、それを構成する二つの要素の一つが相対的価格であると把握しておくと良い。(二つ目の相対的コストは下記でまとめます)

 

・相対的コスト
卓越した収益性を構成する二つ目の要素は相対的コストだ。つまり何らかの方法で競合他社より低いコストで生産できるということだ。これを実現するには製品・サービスをより効率的に開発、生産、配送、販売、サポートする方法を見つけなくてはならない。
また、コスト優位をジズくさせるには、一つの部門や一つの技術だけでなく、社内の様々な部分の連携が必要であることが多い。コストリーダーシップに成功している企業は、コスト優位が多面的である。
ここで理解しておきたいのが、戦略に関わる選択が相対的価格または相対的コストを自社に有利に変えるために行うということだ。当然ながら、最後にものをいうのは価格とコストの差であるため、どんな戦略も相対的価格と相対的コストの関係を自社に有利に動かすものでなくてはならない。
コストが20%上昇するが35%価格を引き上げられる、コストを10%削減して5%値下げするなど色々と考え方があるが、選択による最終結果がプラスであれば、戦略は定義上競争優位を生み出したことになる。
この様に緻密かつ定量的な観点で考えることが大事であり、戦略に経済的根拠と事実の裏付けを与えられるからである。

 

・戦略に関わる選択は、相対的価格または相対的コストを自社に有利に変化させるために行う。
競争優位とは卓越した価値を創造することにあり、資源を有効に利用する方法である。


3. 感想・まとめ
2節でまとめた経済の基本原理のところが非常に興味深い内容で、少々長くなってしまいました。事業単位の戦略で見た際に、戦略の目的が「相対的価格または相対的コストを自社に有利に変えるために行い」、これによって競争優位を実現していくというのが非常に面白かったです。
#5では第3章の内容から「経済の基本原理」までまとめたので、#6では「バリューチェーン」からまとめていければと思います。

Simple Audio Recognition②(MFCC; Mel-Frequency Cepstrum Coefficients)|音声認識(Audio Recognition)のトレンドを追う #2

f:id:lib-arts:20190630163911p:plain

下記の記事でSimple Audio Recognitionについて取り扱ったのですが、背景知識やさらなるトレンドも含めると2回じゃまとまりきらなそうだったので、音声認識(Audio Recognition)のシリーズとして別途開始することにしました。

#1では、上記で動かしたSimple Audio Recognitionの動作結果を振り返りながら、実装にあたっての背景知識の整理を行いました。

#2ではSimple Audio Recognitionの実装で特徴量の抽出として用いられているMFCC(Mel-Frequency Cepstrum Coefficients)について取り扱います。
以下目次になります。
1. 音声データのデジタル化とデータ形式
2. フーリエ変換(Fourier Transform)とスペクトラム(Spectrum)
3. MFCC(Mel-Frequency Cepstrum Coefficients)
4. まとめ


1. 音声データのデジタル化とデータ形式
1節では音声データについての概要を掴むにあたって、音声データのデジタル化とデータ形式についてまとめます。

・標本化、量子化
まずは標本化と量子化について取り扱います。

f:id:lib-arts:20190630163937p:plain

標本化 - Wikipedia

標本化は上記のように波の形で表された音の情報をデジタル化することです。

標本化(ひょうほんか)または英語でサンプリング(sampling)とは、連続信号を一定の間隔をおいて測定することにより、離散信号として収集することである。アナログ信号をデジタルデータとして扱う(デジタイズ)場合には、標本化と量子化が必要になる。

Wikipediaの「標本化」より冒頭部を引用すると上記のような記述を確認することができます。標本化(sampling)は「連続信号を一定の感覚をおいて測定する」とあります。こうすることによって離散的なデータを得ることができます。またこの際に量子化を行うことによって、各測定における値をビットで表すことによってデータのデジタル化が可能です。例えば8bitは2^8=256、16bitは2^{16}=65536となります。量子化にあたっては大体このように値を表現するため、256や65536はプログラミングをする際などにあちこちで見かける数字になります。

・サンプリング周波数とナイキスト周波数
標本化、量子化については一通り理解できたので、波で表した音声をデジタル化する流れについては大体つかめた形になります。次に気になるのは、どのくらいの区間で標本化するかです。この時に重要になる考え方がサンプリング周波数という考え方です。

f:id:lib-arts:20190630165235p:plain

サンプリング周波数 - Wikipedia
上記がサンプリング周波数の概要です。単位時間あたりに標本を採る頻度であり、単位はHzが一般的に使われるとされています。

f:id:lib-arts:20190630165309p:plain
ここで重要なのが、サンプリング周波数の1/2よりも周波数が大きい成分は復元時に折り返し雑音になるので、標本化の前に帯域制限フィルタを用いて遮断しておかなければならないということです。
音楽CDで利用されるサンプリング周波数が44.1kHz(44,100Hz)なのは、人間の可聴域の上限は20kHz(20,000Hz)とされているため、その2倍強にサンプリング周波数を設定しておけば実用上問題ないということに起因しています。ここで1/2と2倍の話については波は振動であり、高い値と低い値を持つためです。
またこの際にサンプリング周波数の1/2の周波数のことをナイキスト周波数(Nyquist frequency)と呼んでおり、一旦は可聴域の20kHzよりもCDなどのナイキスト周波数は大きくしているということだけ掴んでおければ十分そうです。

ここまでで音声データのデジタル化に関して大体の内容についてまとめられたので、1節はここまでとします。


2. フーリエ変換(Fourier Transform)とスペクトラム(Spectrum)
波のデータの分析にあたって周波数成分に関する考察は昔から行われてきており、今回のテーマであるMFCC(Mel-Frequency Cepstrum Coefficients)でもフーリエ変換をベースとして用いています。そのため2節ではフーリエ変換(Fourier Transform)について取り扱っていきます。

f:id:lib-arts:20190630171520p:plain

フーリエ変換 - Wikipedia
上記はWikipediaの記事の冒頭です。信号を周波数の違うsinやcosなどの線型結合で表すのがフーリエ変換の考え方です。

f:id:lib-arts:20190630171539g:plain

イメージとしてはWikipediaフーリエ変換記事の上図がアニメーションのためわかりやすいです。任意の波を周波数の異なる複数の波の足し合わせで表しています。

フーリエ変換を行なうにあたって、各周波数での波の強さ(振幅)を表すことで情報を表すことができます。これを周波数スペクトル(Frequency spectrum)と呼んでいます。説明だとわかりづらいのでまずは図を見てみましょう。

f:id:lib-arts:20190630172943p:plain

周波数スペクトル - Wikipedia
このように変換前の音声の波形のデータ(左)を周波数スペクトル(右)に変換することができます。周波数スペクトルの見方としては、その周波数における波の振幅の大きさを表していると考えると良いです。横軸で周波数が表されています。
ここまでの内容でフーリエ変換についての把握と、音の特徴量の抽出への繋がりがなんとなくイメージできたところで3節では実際にMFCCの話を行なっていきます。


3. MFCC(Mel-Frequency Cepstrum Coefficients)
3節では音声データから特徴量を抽出する手法であり、DeepLearning登場以前から音声認識の分野では支配的な手法であった、MFCCについて取り扱います。

f:id:lib-arts:20190630174340p:plain
上記のようにMel-Frequency Cepstrum Coefficientsで検索したところいくつか見つかったのですが、中でも一番上に出てきたLogan[2000]の研究が被引用数が多かったのでこちらを参考にします(被引用数は一概に言えないところもありますが、基本的にはあてにして良い指標だと思われます)。

f:id:lib-arts:20190630174400p:plain

http://ismir2000.ismir.net/papers/logan_paper.pdf
以後、上記を読み解いていきます。タイトルやAbstractの記載にもあるように、この研究は音声認識の分野で支配的に用いられる特徴量(dominant feature used speech recognition)のMFCCを音楽のモデリングに適用しています。今回知りたいのはMFCCについてなので、MFCCについて言及のある論文のSection2の"MFCCs for Speech Recognition"について取り扱います。

f:id:lib-arts:20190630175238p:plain
MFCCの処理の大まかな流れは論文のFigure1で記述されています。まず音声信号をフレーム単位に分割し、2節のフーリエ変換を離散的に行う、離散フーリエ変換(DFT; Discrete Fourier Transform)を行います。

f:id:lib-arts:20190630180626p:plain
次に上記のFigure2のように高周波成分を取り除き、かつMelスケールで値を表しています。

f:id:lib-arts:20190630180738p:plain

Melスケールについては上記のFigure3で説明されています。
最後に相関性の高いMel-spectrulベクトルを分離するにあたって、離散コサイン変換(DCT; Discrete Cosine Transform)を行うとされています。離散コサイン変換(DCT)は離散フーリエ変換(DFT)と同様に信号圧縮によく用いられている手法で、DFTよりもDCTの方がパワーのほとんどが低周波領域に集中するとされています。


4. まとめ
#2では音声認識においてDeepLearning以前からよく用いられていたMFCC[1993]について見てきました。ざっくり掴むにあたっては細かい処理というよりはフーリエ変換と同様のイメージで、信号のデータを周波数に着目して分解していくイメージを持つと良いです。
#3では、DeepLearningを用いた最近の研究について何かしら取り扱えればと思います。

Deep Q-Network〜Rainbowの研究の流れと実装①(Rainbowの論文の確認)|実装で理解する深層強化学習の研究トレンド #6

f:id:lib-arts:20190706154854p:plain

連載の経緯については#1に記しました。

#1〜#5では問題設定の確認ということでOpenAI Gymについて取り扱いました。

#6からはアルゴリズムのトレンドということで、Rainbow[2017]に関しての情報を中心にDeep Q-Networkの拡張(extension)について取り扱います。
#6ではRainbowの論文(Rainbow: Combining Improvements in Deep Reinforcement Learning)を確認しながら、前提知識の整理を行います。

[1710.02298] Rainbow: Combining Improvements in Deep Reinforcement Learning
以下、目次になります。

1. Rainbow[2017]の概要(Abstract)
2. Deep Q-Networkの再確認(loss関数の構成)
3. Deep Q-Networkの6つの拡張
3-1. Double Q-learning
3-2. Prioritized replay
3-3. Dueling networks
3-4. Multi-step learning
3-5. Distributional RL
3-6. Noisy Nets
4. まとめ

 

1. Rainbow[2017]の概要(Abstract)
1節ではRainbow[2017]の概要について確認していきます。

f:id:lib-arts:20190706160050p:plain

[1710.02298] Rainbow: Combining Improvements in Deep Reinforcement Learning
まずはAbstractについて確認していきます。下記でAbstractを簡単に要約します。

深層強化学習のコミュニティではDeep Q-Networkのアルゴリズムについていくつかのそれぞれ独立した改善を行ってきた。しかしながら、アルゴリズムの拡張のどれが補完的(complementary)かつ効果的に(fruitfully)組み合わせられるかについては定かではない。この論文ではDeep Q-Networkに関して六つの拡張を試し、包括的に組み合わせについて研究する。実験結果によって、(選択した六つの拡張の)組み合わせがデータ効率や最終的な精度のパフォーマンスの点の双方でAtari 2600ベンチマークでSOTAをもたらすことがわかった。条件を一つ除いた実験(ablation study)を行うことで、それぞれの手法(component)が全体のパフォーマンスに対しどのような影響をもたらすかについても議論する。

上記がAbstract部分の要約(基本的には和訳ですが、少々補足を入れたり意訳したりしています)ですが、基本的にはDeep Q-Networkのアルゴリズムに六つの拡張の組み合わせを採用したと捉えておくと良いと思われます。
論文のタイトルがRainbowとなっているのは、Deep Q-Networkに6つの拡張を用いることで、7つの要素の組み合わせとなっていることが関係しています。拡張は6つですが、ベースのDeep Q-Networkもカウントして7つということにされています。


2. Deep Q-Networkの再確認(loss関数の構成)
2節ではDeep Q-Networkについて再確認していきます。基本的な話はフォローアップシリーズで解説したので、こちらをご確認ください。

ここではexperience replayやloss関数の構成について再度確認する目的で、Rainbowの論文の"Deep reinforcement learning and DQN"について確認していきます。

f:id:lib-arts:20190706165009p:plain
まず上記にあるように、\pi(s,a)q(s,a)MLP(Multi Layer Perceptron)のようなDeep Neural Networkで表します。このようにする理由としては、状態(state)と行動(action)の組み合わせの空間(space)は広いため、近似することで未知の状態についても値を出せるようにするというのがあります。Deep Q-Networkではこの際のネットワークに畳み込みニューラルネットワーク(Convolutional Neural Network)を用いて近似を行えるようにしています。

f:id:lib-arts:20190706165024p:plain

次にDeep Q-Networkの特徴である、experience replayとターゲットネットワーク(target network)について上記では解説されています。まずexperience replayについては、強化学習は逐次的意思決定問題(sequential decision-making problem)を解いており、系列データはそれぞれが強い相関を持ってしまうので、Deep Q-Networkにおいては経験をtransitionという形で(S_{t},A_{t},R_{t+1},\gamma_{t+1},S_{t+1})のように保存し、学習の際にランダムサンプリングを行うことでミニバッチ学習を行います。このことによって学習を行うミニバッチにおいて、各サンプルの独立性を保つことができるとされています。これがexperience replayの考え方です。
またTarget Networkについては、(1)の数式で取り扱っています。q_{\theta}がonline network、q_{\overline{\theta}}がtarget networkであることは注意して確認しておくと良いです。online networkはエージェントの意思決定に用いるネットワーク、target networkはS_{t+1}のQ値の計算の最大値を得るためのネットワークです。
ここまででDeep Q-Networkについての基本事項については振り返れたので、2節はここまでとし、3節では6つの拡張について取り扱っていければと思います。

 

3. Deep Q-Networkの6つの拡張
3節ではRainbowにおけるDeep Q-Networkの6つの拡張についてまとめていきます。以下それぞれ3-1〜3-6でまとめます。

 

3-1. Double Q-learning
まず、3-1ではDouble Q-learningについて取り扱います。

f:id:lib-arts:20190706223505p:plain

RainbowにおけるDouble Q-learningの言及については上記のようになっています。Double Q-learningがDeep Q-learningと違うポイントとしては、overestimationの問題を解決するために学習にあたって設定するlossを上記のように変えているということです。Deep Q-Networkでは単にターゲットネットワークだけを用いていたのに対し、Double Q-learningではオンラインネットワークを用いて一旦取りうるアクションを選択した上で、ターゲットネットワークの実行を行っています。


3-2. Prioritized replay
3-2ではPrioritized replayについて取り扱います。Prioritized replayについては基本的にはexperience replayの改良だと考えておけば良いです。

f:id:lib-arts:20190706224114p:plain

RainbowにおけるPrioritized replayの言及は上記のようになっています。Deep Q-Networkにおけるexperience replayでは経験(transition)情報を保存したメモリからランダムにサンプリングを行っている(samples uniformly from the replay buffer)のに対し、Prioritized replayではよりTD errorが大きいサンプルを選ぶようにサンプリングの確率をそれぞれのサンプルのTD errorに比例するようにしています。
これによってなるべく優先度の高いサンプルを用いて学習が進むようにすることができます。

3-3. Dueling networks
Dueling networksについてはRainbowの記述がわかりづらいので、Dueling networksの大元の論文を参照すると良いです。

f:id:lib-arts:20190706224858p:plain

[1511.06581] Dueling Network Architectures for Deep Reinforcement Learning

大元の論文では、Dueling networksの構造をFigure 1で図示してくれています。

f:id:lib-arts:20190706224930p:plain
上記がDueling networksの概要になります。図の上側(top)の図はsingle stream Q-networkということで、オーソドックスな形で状態行動価値(action value)のQ値を導出しています。一方で、図の下側(bottom)がDueling networkの構造を示しており、two streamであるとされています。このtwo streamはそれぞれ状態価値(state-value)とadvantage(行動の価値のようなもの)を表しており、その二つの和によって最終的にQ値を出力する形になっています。

f:id:lib-arts:20190706225455p:plain

action valueをこの二つに分解する意図としては、Figure 2で図示されています。ざっくり解釈すると状態行動価値(action value)は状態にある程度依存するため、要因を分解した上で学習させるほうが良いということです。上図の例では、Valueが道に関心を払っているのに対し、Advantageは衝突を避けるにあたって目の前の車にのみ注意を払っていることを示しています。
このようにQ値をValueとAdvantageに分解して考えるのがDueling networksです。


3-4. Multi-step learning
Rainbowの論文ではMulti-step learningについて下記のように言及されています。

f:id:lib-arts:20190706230158p:plain
基本的にlossの式の形自体は変わっていないのですが、(2)のようにR_{t}^{(n)}が導入されていることが注意です。通常のQ-learningを行う上でのlossが次ステップとの比較を行いそれをlossにしているのに対し、Multi-step learningでは数ステップ先の状態との比較を行いlossを作成しています。


3-5. Distributional RL
Distributional RLに関しては元々期待値(expectation)で推定していたV値やQ値を分布を用いて表現しようという考え方です。

f:id:lib-arts:20190706233817p:plain

上記にあるように、D_{KL}を用いて定義したd_{t}とターゲット分布のd_{t}^{'}のKL divergenceを最小化するようにパラメータの\thetaを学習させるとあります。


3-6. Noisy Nets
Noisy Netsはε-greedyを用いて探索する限界(limitation)に取り組むにあたっての考え方とされています。

f:id:lib-arts:20190706234336p:plain

上記では、Montezuma's Revengeのような最初の報酬を得るまでたくさんの行動が必要なゲームではε-greedy法を用いる難しさについて言及されています。Noisy Netsではlinear layerにノイズを加えることにより、探索と同じような効果を得られるようにする考え方です。


4. まとめ
#6ではRainbow[2017]の論文である、"Rainbow: Combining Improvements in Deep Reinforcement Learning"について読み解きました。

[1710.02298] Rainbow: Combining Improvements in Deep Reinforcement Learning
#7以降ではこれらの前提知識を元に、Deep Q-Network〜Rainbowにかけての実装について確認していければと思います。