E資格挑戦!!

このブログはE資格取得に向けた学習内容をまとめたものです(^o^)

深層学習day3,4【ラビット・チャレンジ(E資格)】

深層学習day3

Section1:再帰ニューラルネットワークの概念

要点等

 再帰ニューラルネットワーク(RNN)とは時系列データに対応可能なニューラルネットワークである。時系列データとは、時間的順序を追って一定間隔ごとに観察され、しかも相互に統計的依存関係が認められるようなデータであり、音声データ、テキストデータなどがある。

 RNNの特徴として、時系列モデルを扱うには、初期の状態と過去の時間t-1の状態を保持し、そこから次の時間でのtを再帰的に求める再帰構造が必要になる。

 また、RNNにおいてのパラメータ調整方法としてBPTT(Backpropagation Through Time)がある。これは、逆誤差伝搬の一種で誤差が時間をさかのぼって逆伝播するようなイメージである。

f:id:satoshi19841011:20210507025606p:plain

RNNのイメージ
実装演習結果/サマリーと考察

  本講義の中で2進数の計算を行うRNNの実装演習があったので、実習結果について下記に示す。ここでは2進数の加算により桁が上がる現象を学習させ、正確に2進数の加算ができるよう学習させている。学習の初期段階では正確に推論(計算)できていない(10進数で93+97と表現される計算結果が255となってしまっている)が、学習を繰り返すことで正しく推論(計算)がなされている。

f:id:satoshi19841011:20210624231204p:plain

RNNの例(2進数の計算)(1/6)

f:id:satoshi19841011:20210624231251p:plain

RNNの例(2進数の計算)(2/6)

f:id:satoshi19841011:20210624231317p:plain

RNNの例(2進数の計算)(3/6)

f:id:satoshi19841011:20210624231344p:plain

RNNの例(2進数の計算)(4/6)

f:id:satoshi19841011:20210624231414p:plain

RNNの例(2進数の計算)(5/6)

f:id:satoshi19841011:20210624231450p:plain

RNNの例(2進数の計算)(6/6)

 

関連記事レポート

 RNNの事例について調べいていたところ、前回のレポートで記載したCNN(畳み込みニューラルネットワーク)とRNNを組み合わせた事例を見つけたので、その概要を示す。

 CNNとRNNを組み合わせた事例として、画像のキャプション生成が挙げられる。画像のキャプション生成とは、画像を入力データとして与えると、画像の内容を説明する、簡単なテキストを生成することをいう。モデル構築の流れとしては、学習済みのCNNで画像の特徴量を抽出するとともに、RNNの一種であるLSTM(次の章で概要を述べる。)でテキストの特徴量を抽出、さらにデコーダーでCNNとLSTMの特徴量を結合、最後に活性化関数(ソフトマックス関数)で次に来る単語を予測することで、画像の内容の説明文を生成するものである。

 深層学習の各手法は単独での活用のみならず、組み合わせることで様々な活用の可能性のある興味深い例であると考えられる。

lionbridge.ai

Section2:LSTN

要点等

 RNNには時系列を遡れば遡るほど、勾配が消失していくという問題(勾配消失問題)や勾配が層を逆伝播するごとに指数関数的に大きくなっていく問題(勾配爆発)がある。これを解決する方法として、RNNの構造自体を変えて解決したものがLSTMである。

 基本的なRNNは推論と重みの記憶を同じ中間層が保持していたが、LSTNではゲートが推論を行い、CECが記憶の機能を持つという分離した構造をとっている。  

f:id:satoshi19841011:20210507032233p:plain

LSTNモデルの定式化

【RNN課題】

 勾配消失および勾配爆発の解決方法として、勾配が1であれば解決できることになる。その際の課題は、入力データについて時間依存度に関係なく重みが一律になってしまう点であり、これではニューラルネットワークの学習特性が無いということになってしまう。

【入力ゲートと出力ゲート】

 入力、出力ゲートを追加することで、それぞれのゲートへの入力値の重みを、重み行列W,Uで可変可能とすることでRNNの問題を解決している。 

 LSTNのモデルを下記に示す。入力ゲートは入力に対して学習を行い、CECに記憶させる内容を示す。

f:id:satoshi19841011:20210507033403p:plain

LSTNモデルの入力ゲート

 出力ゲートでは、CECが自身の記憶を元に出力する結果について、どのように利用するかを決める機能を有する(出力ゲートは良い出力をするためにどうすればよいかを学習している)。 

f:id:satoshi19841011:20210507033441p:plain

LSTNモデルの出力ゲート

 入力ゲートと出力ゲートのみでは、CECは過去からの情報を全て保管(覚えておく)する必要があり、過去の情報が不要になっても削除することが出来ず、無駄に蓄積されてしまうという問題が生じる。その解決には、情報が不要になったタイミングで情報を忘却させる機能が必要になる。

 CECの情報を削除する役割を忘却ゲートに持たせることで、その解決を図っている。

f:id:satoshi19841011:20210507034753p:plain

LSTNモデルの忘却ゲート

 

Section3:GRU

要点等

 LSTMでは、パラメータ数が多く、計算負荷が高くなる問題があった。

そのため、パラメータを大幅に削減し、計算負荷低減しつつ、LSTMと同等またはそれ以上の制度を実現可能な構造:GRU(Gated Recurrent Unit)が考えられた。

f:id:satoshi19841011:20210507231546p:plain

GRUのイメージ
実装演習結果/サマリーと考察

 LSTMとCECが抱える課題について、各種ゲートを有することからパラメータ数も多くなり計算量も大きくなるという課題があった。特にCECの場合は勾配が1で学習能力がないという課題があり、そのため入力、出力、忘却ゲートにより学習機能を付与しているため複雑で計算等の多い構造になっている。

 LSTMとGRUの違いについて、LSTMにはCECがあるがGRUには無い一方、更新ゲートとリセットゲートがある。また、LSTMはパラメータが多い一方、GRUは少ないため、GRUの方が計算量が少ないという違いがある。

 

Section4:双方向RNN

要点等

 過去の情報だけでなく、未来の情報を加味することで、精度を向上させるためのモデルである。実用例としては文章の推敲や、機械翻訳などがある。双方向RNNのイメージは下記のとおりである。

f:id:satoshi19841011:20210508000002p:plain

双方向RNNのイメージ

 

Section5:Seq2Seq

要点等

 Seq2seqはEncoder-Decoderモデルの一種であり、機械対話や、機械翻訳などに使用されている。Seq2seqの全体像は下記のとおりである。

f:id:satoshi19841011:20210508000159p:plain

Seq2Seqのイメージ

Seq2seqでは以下の流れで処理が行われる。

① Encoder RNN

 ユーザーがインプットしたテキストデータを、単語等のトークンに区切って渡す構造である。文章を単語等のトークン毎に分割し、トークンごとのIDに分割(Taking)を行い、IDからトークンを表す分散表現ベクトルに変換(Embedding)という段階に分けられる。 

② Encoder RNN

 ベクトルを順番にRNNに入力していく段階である。Encoder RNNでの処理手順は、vec1をRNNに入力し、hidden stateを出力。次にhiddenstateと次の入力vec2をRNNに入力、hidden stateを出力する処理を繰り返していく。そして、最後のvecを入れたときのhiddenstateをfinalstateとして保存する。このfinalstateはthoughtvectorと呼ばれ、入力した文の意味を表すベクトルとなる。

 ③ Decoder RNN

Decoder RNNシステムがアウトプットデータを、単語等のトークンごとに生成する段階である。Decoder RNNでは、finalstate (thought vector) から、各トークンの生成確率を出力していく。final state をDecoder RNN のinitial state ととして設定し、Embedding を入力する。次に生成確率にもとづいてトークンをランダムに選ぶ(sampling)さらに、選ばれたトークンをEmbedding してDecoder RNN への次の入力とする。これらを繰り返し、得られたトークンを文字列になおす。

 

【Seq2seqの課題】

 Seq2Seqの課題は一問一答しかできない点である。問に対して文脈は考慮されず応答され続ける。この課題の解決方法として、以下に述べる「HRED」がある。
 【HRED】

HREDでは過去n-1 個の発話から次の発話を生成する。Seq2seqでは会話の文脈は考慮されない応答であったが、HREDでは、前の単語の流れに即して応答されるため、より人間らしい文章の生成が可能となる。

【HREDの構造】
HREDはSeq2SeqにContext RNNを加えたものである。Context RNNとは Encoder のまとめた各文章の系列をまとめて、これまでの会話コンテキスト全体を表すベクトルに変換する構造を持つものであり、これにより過去の発話の履歴を加味した返答が可能になる。一方、HREDには下記の課題が存在している。

 【HREDの課題】
HRED は確率的な多様性が字面にしかなく、会話の「流れ」のような多様性が無い。
同じコンテキスト(発話リスト)を与えられても、答えの内容が毎回会話の流れとしては同じものしか出せない。そのため、HRED は短く情報量に乏しい答えをしがちである。例えば、短いよくある答えである「うん」「そうだね」「・・・」などを選択する傾向になる。こうした課題を解決するために考案されたのが「VHRED」である。

【VHRED】

 VHREDとは、HREDにVAE(オートエンコーダーの一種)の潜在変数の概念を追加することでHREDの課題の解決を図ったものである。

【オートエンコーダー

  オートエンコーダとは教師なし学習の一つであり、学習時の入力データは訓練データのみで教師データは利用しない。オートエンコーダの具体例としてMNISTにおける数字画像の認識が挙げられる。

 オートエンコーダの構造について、入力データから潜在変数zに変換するニューラルネットワークをEncoderとし、逆に潜在変数zをインプットとして元画像を復元するニューラルネットワークをDecoderという。オートエンコーダーを利用するメリットは次元削減が行えることである(zの次元が入力データより小さい場合、次元削減とみなすことができる。)

 【VAE】
 通常のオートエンコーダーの場合、何かしら潜在変数zにデータを押し込めているものの、その構造がどのような状態かわからない。VAEはこの潜在変数zに確率分布z:N(0,1)を仮定したものであり、これにより、VAEはデータを潜在変数zの確率分布という構造に押し込めることを可能にしている。 

 端的に言えば、VAEはオートエンコーダーの洗剤変数に確率分布を導入したものといえる。

実装演習結果/サマリーと考察

  本講座内でseq2seqとHRED、VHREDの違いを回答する確認テストがあったので、その回答をもって考察としたい。

【回答】

 seq2seqは一問一答に対して処理ができる手法であり、ある時系列データからある時系列データを出力するものである。HREDはseq2seqの機構にそれまでの文脈の意味ベクトルを加えられるようにすることで文脈の意味を汲み取った文章の変換を可能にしたものである。VHREDはHREDが文脈に対し当たり障りのない回答しかしなくなったことに対して解決策としてVAEの考え方を取り入れることで、当たり障りのない回答ができるように改良したものである。

 

Section6:Word2Vec

要点等

 RNNでは、単語のような可変長の文字列をニューラルネットワークに与えることはできないため、固定長形式で単語を表す必要がある。

 例えば次のような文章が与えられた場合を考える。

(例)I want to eat apples. I like apples.

 この場合、辞書の単語数分だけベクトルが生成される(例の場合は7個の単語)

 {apples,eat,I,like,to,want}

ここで「Apples」を入力する場合は、入力層には以下のベクトルが入力される。

(apples のみ1:one-hotベクトルになる。)
-------------------
1...apples
0...eat
0...I
0...like
0...to

-------------------

 

文章を扱うときにone-hotベクトルで情報を使うと膨大なメモリ量が必要になり現実的ではない。そこで、現実的な計算速度をメモリ量で大規模データを処理、学習させるためword2vecでは、以下のような単語(ボキャブラリ数)✕単語ベクトルの次元数からなる重み行列で表現している。

f:id:satoshi19841011:20210626232943p:plain

word2vec1におけるone-hotベクトルの重み行列化

Section7:Attention Mechanism

要点等

 seq2seq の問題は長い文章への対応が難しいという課題があった。要はseq2seqでは対象となる文章が、2単語でも、100単語でも、固定次元ベクトルの中に入力しなければならないという課題である。そして、文章が長くなるほどそのシーケンスの内部表現の次元も大きくなっていく。

 そこで「入力と出力のどの単語が関連しているのか」の関連度を学習する仕組みを組み込み事で解決を図ろうとする試みがAttention Mechanismである。

 例えば、"I have a pen" という文章を日本語訳する場合、「a」は関連性が低く、逆に「I」という単語は「私」という単語(出力)との関連が強いと判断する」。

 

実装演習結果/サマリーと考察

  本講座内でRNNとword2vecとAttention Mechanismの違いについて回答する確認テストがあったので、その回答を考察事項としたい。

【回答】

 RNNは時系列データを処理するにに適したニューラルネットワーク、word2vecは単語の分散表現ベクトルを得る手法、seq2seqは一つの時系列データから別の時系列データを得る手法、Attention Mechanismは時系列データの中身に対して関連性に重みをつける手法をである。

 

深層学習day4

Section1:強化学習

要点等

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

f:id:satoshi19841011:20210627140732p:plain

強化学習のイメージ

 続いて強化学習の応用例(会社のマーケティングの例)を示す。

【会社のマーケティングの例】

 ◯ 環境:会社の販売促進部

 ◯ エージェント:プロフィールと購入履歴に基づいて、キャンペーンメールを送る顧客を決めるソフトウェア

 ◯ 行動:顧客ごとに送信、非送信のふたつの行動を選択

 ◯ 報酬:キャンペーンのコストという負の報酬とキャンペーンで生み出されると推測される売上という正の報酬を受ける。

 【強化学習と通常の教師あり、教師なし学習との違い】

 教師なし、あり学習では、データに含まれるパターンを見つけ出すおよびそのデータから予測することが目標である一方、強化学習は優れた方策を見つけることが目標である。最近は計算速度の進展により大規模な状態をもつ場合の強化学習を可能としつつある。また、「関数近似法」と「Q学習」を組み合わせた手法が登場している。

【Q学習】

 行動価値関数を、行動する毎に更新することにより学習を進める方法

関数近似法】

 価値関数(※1)や方策関数(※2)を関数近似する手法のこと

 ※1 価値を表す価値関数は状態価値関数と行動価値関数の2種類があり、状態の価値に注目する場合は「状態価値関数」、状態と価値を組み合わせた価値に注目する場合は、「行動価値関数」という。

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

f:id:satoshi19841011:20210627140857p:plain

方策関数考え方

 【方策勾配法】

 方策をモデル化して最適化する手法(エージェントの行動確率をニューラルネットワークで表現する手法)であり、下記の式で表される。

f:id:satoshi19841011:20210627143229p:plain

勾配方策法の式

ここでεは学習率、J(θ)は最適化したい目的関数を指す。J(θ)の定義方法には「平均報酬」、「割引報酬和」がある。これらの定義に対応して、行動価値関数:Q(s,a)の定義を行う。さらに、J(θ)の微分値については下記の方策勾配定理を用いる。

f:id:satoshi19841011:20210627144042p:plain

方策勾配定理

Section2:AlphaGo

要点等 

AlphaGoとはディープラーニングを用いて作成された囲碁を行うプログラム(人工知能)である。AlphaGoのディープラーニングの学習は以下のステップで行われる(各ステップにおけるRollOutPolicyとPolicyNetの内容は後述)。

1 教師あり学習によるRollOutPolicyとPolicyNetの学習

2 強化学習によるPolicyNetの学習

3 強化学習によるValueNetの学習Alpha Go の学習

f:id:satoshi19841011:20210627020531p:plain

AlphaGoの学習イメージ

【PolicyNetの教師あり学習

 KGS Go Server(ネット囲碁対局サイト)の棋譜データから3000万局面分の教師を用意し、教師と同じ着手を予測できるよう学習を行う。具体的には、教師が着手した手を1とし残りを0とした19×19次元の配列を教師とし、それを分類問題として学習した。この学習で作成したPolicyNetは57%ほどの精度である。

【PolicyNetの強化学習

 現状のPolicyNetとPolicyPoolからランダムに選択されたPolicyNetと対局シミュレーションを行い、その結果を用いて方策勾配法で学習を行った。PolicyPoolとは、PolicyNetの強化学習の過程を500Iteraionごとに記録し保存しておいたものである。現状のPolicyNet同士の対局ではなく、PolicyPoolに保存されているものとの対局を使用する理由は、対局に幅を持たせて過学習を防ごうというのが主である。この学習をminibatch size 128で1万回行った。

f:id:satoshi19841011:20210627021451p:plain

PolicyNetの処理の流れ

【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万回行ったN手までとN+1手からのPolicyNetを別々にしてある理由は、過学習を防ぐためであると論文では説明されている

 この他、AlphaGoではコンピュータ囲碁ソフトでは現在もっとも有効とされている探索法であるモンテカルロ木探索による最善手の選択を行っている。

f:id:satoshi19841011:20210627021523p:plain

ValueNetの処理の流れ

 【AlphaGo(Lee) とAlphaGoZeroの違い】

 AlphaGo(Lee) とその後に登場したAlphaGoZeroとは学習において下記の違いがある。AlphaGoZeroは、

 ◯ 教師あり学習を一切行わず、強化学習のみで作成

 ◯ 特徴入力からヒューリスティックな要素を排除し、石の配置のみ

 ◯ PolicyNetとValueNetを1つのネットワークに統合

 ◯ Residual Net(※)を導入

 ◯ モンテカルロ木探索からRollOutシミュレーションをなくした。

 ※ ネットワークにショートカット構造を追加して、勾配の爆発、消失を抑える効果を狙ったもの。これにより、100層を超えるネットワークでの安定した学習が可能となった。

f:id:satoshi19841011:20210401111315p:plain

Alpha Go ZeroのPolicyValueNet

Section3:軽量化・高速化技術

要点等 

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

【データ並列化】

 ◯ 親モデルを各ワーカーに子モデルとしてコピー

 ◯ データを分割し、各ワーカーごとに計算

 

f:id:satoshi19841011:20210401112951p:plain

データ並列化

 データ並列化は各モデルのパラメータの合わせ方により「同期型」と「非同期型」に分類される。

【同期型】

 各ワーカーが計算が終わるのを待ち、全ワーカーの勾配が出たところで勾配の平均を計算し、親モデルのパラメータを更新

f:id:satoshi19841011:20210401113033p:plain

データ並列化(同期型)

【非同期型】

 各ワーカーはお互いの計算を待たず、各子モデルごとに更新を行う。学習が終わった子モデルはパラメータサーバにPushされる。新たに学習を始める時は、パラメータサーバからPopしたモデルに対して学習していく。

f:id:satoshi19841011:20210401113058p:plain

データ並列化(非同期)

 処理のスピードは、お互いのワーカーの計算を待たない非同期型の方が早い。一方、非同期型は最新のモデルのパラメータを利用できないので、学習が不安定になりやすい特徴を持つ。そのため(現在は)、同期型の方が精度が良いことが多くデータ並列化の主流となっている。

【モデル並列化】

 親モデルを各ワーカーに分割しそれぞれのモデルを学習させ、全てのデータで学習が終わった後で、一つのモデルに復元する並列化の方式である。

f:id:satoshi19841011:20210401114657p:plain

モデル並列化

 モデルが大きい時はモデル並列化を、データが大きい時はデータ並列化をすると良い。特にモデル並列化はモデルのパラメータ数が多いほど、スピードアップの効率の向上が図れる。

GPUによる高速化】

 GPU及び関連するアーキテクチャの特徴は下記の通り。 

 ◯ GPGPU (General-purpose on GPU)

   元々の使用目的であるグラフィック以外の用途で使用されるGPUの総称

 ◯ CPU

   高性能なコアが少数•複雑で連続的な処理が得意

 ◯ GPU

  ・較的低性能なコアが多数

  ・簡単な並列処理が得意

  ・ニューラルネットの学習は単純な行列演算が多いため、高速化が可能

 【GPGPU開発環境】

 開発環境には大きくCUDAとOpenCLがある。それぞれの特徴は下記の通り。

 ◯ CUDA

  ・GPU上で並列コンピューティングを行うためのプラットフォーム

  ・NVIDIA社が開発しているGPUのみ使用可能

  ・Deep Learning用に提供されているため使いやすい

 ◯ OpenCL

  ・オープンな並列コンピューティングのプラットフォーム

  ・NVIDIA社以外の会社(Intel, AMD, ARMなど)のGPUからでも使用可能

  ・Deep Learning用の計算に特化しているわけではない。

以上の開発環境はDeep Learningフレームワーク(Tensorflow, Pytorch)内で実装されているため、指定することで使用できる。

【モデルの軽量化(概要)】

 モデルの軽量化とはモデルの精度を維持しつつパラメータや演算回数を低減する手法の総称である。メモリ負荷が高い(演算性能が求められる)、IoT環境など低メモリ、低演算性能での利用(実装)が必要な場合に特に必要となる。そのため、モデルの軽量化は計算の高速化と省メモリ化が必要なモバイル、IoT 機器と特に相性が良い手法になる。

 【軽量化の手法】

 軽量化の手法には下記の3つがある。

 ・量子化

 ネットワークが大きくなると大量のパラメータが必要なり学習や推論に多くのメモリと演算処理が必要となる。そのメモリと演算処理の削減を行うため、通常のパラメータの64 bit 浮動小数点を32 bit など下位の精度に落とす手法である。計算の高速化と省メモリ化を図れる一方、精度が低下する恐れがある(実際には、大きな精度の低下は見られない。ただし、量子化する際は極端に精度が落ちない程度に量子化するよう留意が必要である)。

 ・蒸留

 規模の大きなモデルの知識を使い、軽量なモデルを作成する(知識を継承させる)手法である。これにより推論に必要なメモリ、演算能力の削減出来る。知識の継承により、軽量でありながら複雑なモデルに匹敵する精度のモデルを得ることが期待できる

 蒸留は教師モデル(※1)と生徒モデル(※2)の2つで構成される。

 教師モデルの重みを固定し生徒モデルの重みを更新していく誤差は教師モデルと生徒モデルのそれぞれの誤差を使い重みを更新していくことで学習させていく。 

f:id:satoshi19841011:20210401131408p:plain

蒸留のイメージ

 ・プルーニング

 モデルの精度に寄与が少ないニューロンを削除することで、モデルの軽量化、高速化を図る手法である。

f:id:satoshi19841011:20210401131532p:plain

ニューロンの削減(圧縮)のイメージ

Section4:応用モデル

要点等 

【MobileNets】 

 MobileNets( Efficient Convolutional Neural Networks for Mobile Vision Applications)の概要は以下の通り。

【課題認識】
 ディープラーニングモデルは精度は良いが、その分ネットワークが深くなり計算量が増える。計算量が増えると、多くの計算リソースが必要で、お金がかかってしまうろいう課題があった。。

【MobileNetsによる解決】

 上記の課題を解決するため、ディープラーニングモデルの軽量化・高速化・高精度化を実現したのが、MobileNets(その名の通りモバイルなネットワーク)である。近年の画像認識タスクに用いられる最新のニューラルネットワークアーキテクチャは、多くのモバイルおよび組み込みアプリケーションの実行環境を上回る高い計算資源を必要とされるが一般的な畳み込みレイヤーは計算量が多いというデメリットがある。そこで、MobileNetsはDepthwise ConvolutionとPointwise Convolutionの組み合わせることで軽量化を実現した。

【Depthwise Convolutionの仕組み】
◯ 入力マップのチャネルごとに畳み込みを実施
◯ 出力マップをそれらと結合(入力マップのチャネル数と同じになる)

 → 通常の畳み込みカーネルは全ての層にかかっていることを考えると計算量が大幅に削減可能となる。各層ごとの畳み込みなので層間の関係性は全く考慮されない。通常はPW畳み込みとセットで使うことで解決される。

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

f:id:satoshi19841011:20210507212220p:plain

MobileNetsのイメージ

【DenseNet】

 論文タイトル○Densely Connected Convolutional Networks. G. Huang et., al.2016○https://arxiv.org/pdf/1608.06993.pdfhttps://www.slideshare.net/harmonylab/densely-connected-convolutional-networks

【DenseNetsの概要】

 Dense Convolutional Network(DenseNet)は、畳込みニューラルネットワーク(以下、CNN)アーキテクチャの一種である。ニューラルネットワークでは層が深くなるにつれて、学習が難しくなるという問題があったが、Residual Network(以下、ResNet)などのCNNアーキテクチャでは前方の層から後方の層へアイデンティティ接続を介してパスを作ることで、この問題に対処した。DenseBlockと呼ばれるモジュールを用いた、DenseNetもそのようなアーキテクチャの一つである。

 DenseNetは次のような流れである。

● 初期の畳み込み

● Denseブロック

● 変換レイヤー

● 判別レイヤー

● 出力層に前の層の入力を足しあわせる

 ⇨ 層間の情報の伝達を最大にするために全ての同特徴量サイズの層を結合する

● 特徴マップの入力に対し、下記の方法で出力を計算

 ⇨ Batch正規化

 ⇨ Relu関数による変換

 ⇨ 3 x 3畳み込み層による処理

● 前スライドで計算した出力に入力特徴マップを足し合わせ

 ⇨ 入力特徴マップのチャンネル数がl x kだった場合、出力は(l+1) x k

第l層の出力をとした場合、kをネットワークのgrowth rateと呼ぶ

 ⇨ kが大きくなるほど、ネットワークが大きくなるため、小さな整数に設定

● Transition Layer○CNNでは中間層でチャネルサイズを変更し

 ⇨ 特徴マップのサイズを変更し、ダウンサンプリングを行うため、Transition Layerと呼ばれる層でDence blockをつなぐ

f:id:satoshi19841011:20210507212646p:plain

DenseNetのイメージ(1)

f:id:satoshi19841011:20210507212712p:plain

DenseNetのイメージ(2)

f:id:satoshi19841011:20210507212741p:plain

DenseNetのイメージ(3)

f:id:satoshi19841011:20210507212822p:plain

DenseNetのイメージ(4)

◯ DenseNetとResNetの違い

 ⇨ DenseBlockでは前方の各層からの出力全てが後方の層への入力として用いられる   

 ⇨ RessidualBlockでは前1層の入力のみ後方の層へ入力●DenseNet内で使用されるDenseBlockと呼ばれるモジュールでは成⻑率(Growth Rate)と呼ばれるハイパーパラメータが存在

◯ DenseBlock内の各ブロック毎にk個ずつ特徴マップのチャネル数が増加していく時、kを成⻑率と呼ぶ

 

【Batch Norm Layerとそれ以外の正規化】

 ● Batch Norm

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

 ● Layer Norm

  ⇨ それぞれのsampleの全てのpixelsが同一分布に従うよう正規化

 ● Instance Nrom

  ⇨ さらにchannelも同一分布に従うよう正規化

f:id:satoshi19841011:20210507215026p:plain

各Normのイメージ

◯ H x W x CのsampleがN個あった場合に、N個の同一チャネルが正規化の単位

◯ RGBの3チャネルのsampleがN個の場合は、それぞれのチャンネルの平均と分散を求め正規化を実施(図の⻘い部分に対応)。チャンネルごとに正規化された特徴マップを出力。

 ⇨ ミニバッチのサイズを大きく取れない場合には、効果が薄くなってしまう。

f:id:satoshi19841011:20210507215351p:plain

BatchNormのイメージ

◯ Layer Norm○N個のsampleのうち一つに注目

 ⇨ H x W x Cの全てのpixelが正規化の単位

 ⇨ RGBの3チャネルのsampleがN個の場合は、あるsampleを取り出し、全てのチャネルの平均と分散を求め正規化を実施(図の⻘い部分に対応)。特徴マップごとに正規化された特徴マップを出力

 ⇨ ミニバッチの数に依存しないので、上記の問題を解消できると考えられる。

◯ Layer Normは、入力データや重み行列に対して、以下の操作を施しても、出力が変わらないことが知られている。

◯ 入力データのスケールに関してロバスト

◯ 重み行列のスケールやシフトに関してロバスト

f:id:satoshi19841011:20210507215543p:plain

LayerNormのイメージ

【Instance Norm】

 各sampleの各チャンネルごとに正規化

  Batch Normalizationのパッチサイズが1の場合と等価であり、コントラストの正規化に寄与する。画像のスタイル転送やテクスチャ合成タスクなどで利用される。

f:id:satoshi19841011:20210507215807p:plain

InstanceNormのイメージ

【Wavenet】

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

 ◯ Pixel CNN(高解像度の画像を精密に生成できる手法)を音声に応用したもの

 Wavenetのメインアイディア

 ◯ 時系列データに対して畳み込み(Dilated convolution)を適用

 ◯ Dilated convolution

  ・ 層が深くなるにつれて畳み込むリンクを離す

  ・ 受容野を簡単に増やすことができるという利点がある。

  ・ 右図では、Dilated = 1,2,4,8となっている。

f:id:satoshi19841011:20210507221342p:plain

Wavenetのイメージ

 

 深層学習を用いて結合確率を学習する際に、効率的に学習が行えるアーキテクチャを提案したことがWaveNet の大きな貢献の1 つ。

 提案された新しいConvolution 型アーキテクチャはDilated causal convolutionと呼ばれ、結合確率を効率的に学習できるようになっている。

 Dilated causal convolutionを用いた際の大きな利点は、単純なConvolution layer と比べてパラメータ数に対する受容野が広いことである。

Section5:Transformer

要点等

 Transformerは2017年6月に登場した機械翻訳を行うモデルである。その特徴は RNNを使わず、Attention Mechanismのみを使用することで、少ない計算量で機械翻訳を実現したものである。(英仏 (3600万文) の学習を8GPUで3.5日で完了したとされる)

f:id:satoshi19841011:20210508002147p:plain

transformerのイメージ

 TransformerのEncoder(エンコーダ)では、文脈を考慮して各単語のエンコードを行っている。

f:id:satoshi19841011:20210627022945p:plain

TransformerのEncoder(エンコーダ)


 Decoder(デコーダ)ではエンコーダと同じく6層の構造であり、 各層で二種類の注意機構(注意機構の仕組みはEncoderとほぼ同じ)がある。自己注意機構は生成単語列の情報を収集し、直下の層の出力へのアテンションを行う。この際、未来の情報を見ないようにマスクする。Encoder-Decoder attention - 入力文の情報を収集 しEncoderの出力へのアテンションを行う。

f:id:satoshi19841011:20210627023420p:plain

TransformerのDecoder(デコーダ
実装演習/関連レポート

 実装演習として本講座で配布されたTransformerのプログラムソースを実装、実行した結果を下記に示す。この際。機械翻訳を学習させるための訓練データは英語及び日本語であり、下記のとおりである。

【訓練データ①(英語)】

[['where', 'shall', 'we', 'eat', 'tonight', '?'], ['i', 'made', 'a', 'big', 'mistake', 'in', 'choosing', 'my', 'wife', '.'], ['i', "'ll", 'have', 'to', 'think', 'about', 'it', '.'], ['it', 'is', 'called', 'a', 'lily', '.'], ['could', 'you', 'lend', 'me', 'some', 'money', 'until', 'this', 'weekend', '?']]

【訓練データ②(日本語)】 

train_Y: [['今夜', 'は', 'どこ', 'で', '食事', 'を', 'し', 'よ', 'う', 'か', '。'], ['僕', 'は', '妻', 'を', '選', 'ぶ', 'の', 'に', '大変', 'な', '間違い', 'を', 'し', 'た', '。'], ['考え', 'と', 'く', 'よ', '。'], ['lily', 'と', '呼', 'ば', 'れ', 'て', 'い', 'ま', 'す', '。'], ['今週末', 'まで', 'いくら', 'か', '金', 'を', '貸', 'し', 'て', 'くれ', 'ま', 'せ', 'ん', 'か', '。']]

 最終的にTransformerによる機械翻訳のBLEUの翻訳精度スコアは約25.8であり、趣旨は明確であるものの文法上、重大なエラーがある水準であった(BLEUの翻訳精度スコアの解釈については下記のサイトを参照した。)。

cloud.google.com

f:id:satoshi19841011:20210627145957p:plain

Transformerの実装例(1/22)

f:id:satoshi19841011:20210627150033p:plain

Transformerの実装例(2/22)

f:id:satoshi19841011:20210627150054p:plain

Transformerの実装例(3/22)

f:id:satoshi19841011:20210627150119p:plain

Transformerの実装例(4/22)

f:id:satoshi19841011:20210627150142p:plain

Transformerの実装例(5/22)

f:id:satoshi19841011:20210627150207p:plain

Transformerの実装例(6/22)

f:id:satoshi19841011:20210627150229p:plain

Transformerの実装例(7/22)

f:id:satoshi19841011:20210627150253p:plain

Transformerの実装例(8/22)

f:id:satoshi19841011:20210627150416p:plain

Transformerの実装例(9/22)

f:id:satoshi19841011:20210627150447p:plain

Transformerの実装例(10/22)

f:id:satoshi19841011:20210627150515p:plain

Transformerの実装例(11/22)

f:id:satoshi19841011:20210627150541p:plain

Transformerの実装例(12/22)

f:id:satoshi19841011:20210627150604p:plain

Transformerの実装例(13/22)

f:id:satoshi19841011:20210627150638p:plain

Transformerの実装例(14/22)

f:id:satoshi19841011:20210627150708p:plain

Transformerの実装例(15/22)

f:id:satoshi19841011:20210627150730p:plain

Transformerの実装例(16/22)

f:id:satoshi19841011:20210627150753p:plain

Transformerの実装例(17/22)

f:id:satoshi19841011:20210627150847p:plain

Transformerの実装例(18/22)

f:id:satoshi19841011:20210627150819p:plain

Transformerの実装例(19/22)

f:id:satoshi19841011:20210627150930p:plain

Transformerの実装例(20/22)

f:id:satoshi19841011:20210627150945p:plain

Transformerの実装例(21/22)

f:id:satoshi19841011:20210627151012p:plain

Transformerの実装例(22/22)

6:物体検知・セグメンテーション

要点等

 物体認識タスクには大きく「分類(classification)」(画像に対し単一または複数の クラスラベルを出力)、「物体検知」(Bounding Boxを出力)、「意味領域分割」(各ピクセルに対し単一のクラスラベルを出力)、「個体領域分割」(各ピクセルに対し単一のクラスラベルを出力)に区分される。 

f:id:satoshi19841011:20210627024225p:plain

物体認識タスクの分類

 物体認識タスクをニューラルネットワークに学習させるためには、タスクごとに適したデータセットを用いることが重要である。本講座では代表的なものとして下記の4つのデータセットが紹介された。

f:id:satoshi19841011:20210627024628p:plain

代表的なデータセット

 目的に応じたBox/画像の選択することが重要であり、それらに即したデータセットを選択することが必要である(データ数が多ければよいわけではない)。
 また、物体検出においてはクラスラベルだけでなく, 物体位置の予測精度も評価することが重要であり、そのための指標としてIoU(Intersection over Union)がある。

f:id:satoshi19841011:20210627025850p:plain

IoUの定義

【物体検知のマイルストーン

 物体検知のAlexNetの登場を皮切りに, 時代はSIFT(※1)からDCNN(※2)へと大きく変化(大幅な精度の向上)した。

 ※1 SIFT:Scale Invariant Feature Transform

 ※2 DCNN:Deep Convolutional Neural Network

 その後も様々な物体検知のフレームワークが登場し、物体検知の精度は向上し続けている。 

f:id:satoshi19841011:20210627030420p:plain

物体検知の代表的なネットワークとフレームワーク

SSD: Single Shot Detector】

 SSDとはDefault BOXという長方形の枠を用意し、検出したい物体の位置やクラスを予測するものである。SSDの例としてVGG16のネットワーク図を示す。

 

f:id:satoshi19841011:20210627031041p:plain

VGG16のネットワーク図

 【Semantic Segmentationの概略】

 Semantic Segmentationの概要図を下記に示す。下の例では入力した画像(犬と猫)に対して畳み込み層とプーリング層を介して最終的に21個のクラスの中から最も確率の高いクラス(ここでは犬と猫)に判別され、Up-samplingにより画像を拡大し、出力される(Up-samplingは受容野を広げるために行う)。 

f:id:satoshi19841011:20210508002531p:plain

Semantec Segmentationのイメージ

【U-Net】

 畳み込み後に逆畳み込みを行なった際、物体の位置情報は満足に復元できない場合に、これを解決するためにskip-conectionというステップを導入したものがU-Netである。U-Netの概要イメージを下記に示す。

f:id:satoshi19841011:20210627054625p:plain

U-Netの概要

【DeconvNet & SegNet】

 DeconvNetはVGGNetを元に画像サイズを大きくし受容野を大きくするためのDeconvolution networkを導入したのものである。

f:id:satoshi19841011:20210627055050p:plain

DeconvNet & SegNetの概要

【Dilated Convolution】

 Up-samplingの他にConvolutionの段階で受容野を広げる工夫としてDilated Convolutionがある。これにより畳み込み層の段階で画像を拡大している。

f:id:satoshi19841011:20210627053522p:plain

Dilated Convolutionのイメージ

実装演習

 day4の講義の中では配布されたプログラムソースを用いた実装演習はなかったが、day4用に配布されたプログラムソースを元に実習を実施したのでその結果を下記に記載する。

【線形回帰】

 keras(TensorFlow)を用いて線形回帰を実装した実習例を下記に示す。

 なお、当初プログラムソースを実装した際はエラーが起き、正常に実行されなかった。原因を確認したところ、自身の実行環境がTensorFlow2(TF2系)であることが原因であったようだ。そのため、TensorFlowの関数部分 "tf" を  "tf.compat.v1" に修正(追記)することで解決した。

f:id:satoshi19841011:20210627055819p:plain

線形回帰(1/3)

f:id:satoshi19841011:20210627060407p:plain

線形回帰(2/3)

f:id:satoshi19841011:20210627060439p:plain

線形回帰(3/3)

 次にTensorFlowを使用して単純パーセプトロンを実装した例を示す。

f:id:satoshi19841011:20210627060513p:plain

単純パーセプトロン(1/3)

f:id:satoshi19841011:20210627060715p:plain

単純パーセプトロン(2/3)

f:id:satoshi19841011:20210627060839p:plain

単純パーセプトロン(3/3)

 続いてmnist(数字画像)の識別を実装した例を示す。plotの一部にエラーが生じてしまったが、学習後の精度(accuracy)は0.98と高い精度が達成できていることが確認できた。

f:id:satoshi19841011:20210627060913p:plain

mnistの識別(1/4)

f:id:satoshi19841011:20210627060939p:plain

mnistの識別(2/4)

f:id:satoshi19841011:20210627060954p:plain

mnistの識別(3/4)

f:id:satoshi19841011:20210627061017p:plain

mnistの識別(4/4)

 最後に2進数の加算を学習し推論する実装(本講義のCNNの項目で実装したものをkeras等を用いて実装し直したもの)結果を示す。

f:id:satoshi19841011:20210627061430p:plain

2進数の加算(1/5)

f:id:satoshi19841011:20210627061655p:plain

2進数の加算(2/5)

f:id:satoshi19841011:20210627061719p:plain

2進数の加算(3/5)

f:id:satoshi19841011:20210627061755p:plain

2進数の加算(4/5)

f:id:satoshi19841011:20210627061825p:plain

2進数の加算(5/5)