「ラビット・チャレンジ」深層学習day3day4まとめ

<全体の考察等>

 再帰ニューラルネットワークのロジックを一つずつ学び、アルゴリズムの進化を追うことで特徴を理解できた。また、強化学習で有名なAlpha go等の動きを学ぶことで、その違いを理解。改めてニューラルネットワークの全体像が把握できてきたと感じている

 

<修了課題(E資格受験認定テスト)の感想>

 プログラミング経験の薄さから、コードの問題にはかなり苦労をしたが、おかげで、勘所が少しわかってきたように感じる。ボリュームも多く、非常に苦労したが、全体を網羅的に出題していただいたことで総復習にもつながったと感じている

 

 深層学習Day3

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

●RNN全体像

RNNとは時系列データに対応可能なニューラルネットワーク

・時系列データとは

時間的順序を追って、一定間隔ごとに観察され、しかも相互に統計的依存関係が認められるようなデータの系列

具体例:音声データ、テキストデータ

・3つの重み

 入力から現在の中間層を定義する際にかけられる重み

 中間層から出力を定義する際にかけられる重み

 中間増から中間層への出力を定義する際にかけられる重み

・特徴

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

・コード

 

f:id:patapata007:20210710073409p:plain

バイナリ加算

・BPTT

RNNにおいてのパラメータ調整方法の一種

誤差逆伝播の一種)

 

●確認テストの考察

 RNNの図を数式で表す問題で、具体的な動きと数式のイメージを一致させることができた

 

◆Section2:LSTM

●RNNの課題

 時系列を遡れば遡るほど、勾配が消失されていく

 →長い時系列の学習が困難

 →解決策

 前回の授業で触れた勾配消失の解決方法とは別で構造自体を変えて解決したものが●LSTM
CEC

 勾配消失及び勾配爆発の解決方法として、勾配が、1であれば解決できる

CECの課題

 入力データについて、時間依存度に関係なく重みが一律である

 →ニューラルネットワークの学習特性がないということ

・入力出力ゲートの役割

 入力・出力ゲートを追加することで、それぞれのゲートへの入力値の重みを、重み行列W,Uで可変可能とする→CECの課題を解決

・LSTMブロックの課題

 過去の情報がいらなくなった場合、削除することはできず、保管され続ける

・忘却ゲート

 過去の情報がいらなくなった場合、そのタイミングで情報ぼ忘却する

 

 

●確認テストの考察

 問題を通じて具体的な日本語の中での忘却ゲートの動きを理解でき

 

◆Section3:GRU

●LSTMの課題

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

●GRUとは

 従来のLSTMでは、パラメータが多数存在していたため、計算負荷が大きかった。しかし、GRUでは、そのパラメータを大幅に削減し、精度は同等またはそれ以上が望めるようになった構造

メリットは計算負荷が低いこと

●確認テスト等の考察

 問題を通じてLSTMとCECの課題について改めて理解することができた

 

◆Section4:双方向RNN

●双方向RNNとは

 過去の情報だけでなく未来の情報を加味することで、精度を向上させるためのモデル

 実用例:文章の推敲や機械翻訳

●確認テスト等の考察

 演習チャレンジでは、双方向RNNでは順方向と逆方向に伝播したときの中間層表現をあわせたものが特徴量となることが数式と併せてよく理解できt

 

◆Section5:Seq2seq

●Seq2seqとは

 Encoder-Decorderモデルの一種をさす

 実用例:機械対話や機械翻訳

●Encorder RNN

ユーザーがインプットしたテキストデータを、単語等のトークンに区切って渡す構造

●Decorder RNN

システムがアウトプットデータを単語等のトークンごとに生成する構造

●HRED

・Seq2seqの課題は一問一答しかできないこと

 問に対して文脈も何もなく、ただ応答が行われ続ける

・HREDとは

 過去nー1の発話から次の発話を生成する。

 Seq2seqでは、会話の文脈無視で、応答がなされたが、HRED

では、前の単語の流れに即して応答されるため、より人間らしい文章が生成される。

・HREDの構造

 Seq2seq+Context RNN

Context RNN:Encoderのまとめた各文章の系列をまとめて、これまでの会話コンテキスト全体を表すベクトルに変換する構造

→過去の発話の履歴を加味した返答が可能

・HREDの課題

HREDは確率的な多義性が字面にしかなく、会話の流れのような多様性がない。

 

●VHRED
HREDにVAEの潜在変数の概念を追加したもの 

 

●オートエンコーダ

教師なし学習の一つ。

そのための学習時の入力データは訓練データのみで教師データは利用しない

 

●VAE

データを潜在変数zに確率分布z~N(0,1)を仮定したもの

●コード

f:id:patapata007:20210710074453p:plain

seq2seqコード


 

 

●確認テスト等の考察

テストを通じてSeq2seqがRNNを用いたEncorder ーDecorderモデルであることを改めて認識。HRED、VHRED、VAEとの違いも明確に理解できた。

 

◆Section6:Word2vec

 学習データからボキャブラリを作成

本来は辞書の単語数だけでできあがる

・メリット

大規模データの分散表現の学習が、現実的な計算速度とメモリ量で実現可能にした

×:ボキャブラリ×ボキャブラリだけの重み行列が誕生

〇:ボキャブラリ×任意の単語ベクトル次元で重み行列が発生

 

◆Section7:Attenntion Mechanism

●Attenntion Mechanismとは

入力と出力の度の単語が関連しているのかの関連度を学習する仕組み

・課題

Seq2seqの問題は長い文章への対応が難しい

Seq2seqでは、2単語でも100単語でも固定次元ベクトルの中に入力しなければならない。

・解決策(Attenntion Mechanism)

文章が長くなるほどそのシーケンスの内部表現の次元も大きくなっていく仕組みが必要

 

 

●確認テスト等の考察

RNN、word2vec、Attenntionの違いを簡潔に述べる問題をとおし、それぞれ特徴を明確にすることができた

 

 

 深層学習Day4

◆Section1:強化学習

強化学習とは

長期的に報酬を最大化できるように環境の中で行動を選択できるエージェントを作ることを目標とする機械学習の一分野

●応用例

 環境:会社の販売促進部

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

 行動:顧客ごとに送信、非送信のふたつの行動を選ぶことになる

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

●価値関数

 価値を表す関数としては状態価値関数と行動価値関数の2種類

ある状態の価値に注目する場合は状態価値観す

状態と価値を組み合わせた価値に注目する場合は、行動価値観す

●方策関数

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

●方策勾配法

強化学習は価値関数と方策関数の2つが優秀ならうまくいく

→将来のことを考えながら今の行動を選べる人

・方策反復法

方策をモデル化して最適化する手法

 

◆Section2:Alpha Go

●Policy Net、Value Netの入力

●Roll Out Policy

 NNではなく線形の方策関数

探索中に高速に着手確率を出すために使用される

●Alpha Goの学習

 ・教師あり学習によるRollOutPolicyとPolicynetの学習

 ・強化学習によるPolicynetの学習 

 ・強化学習によるValueNetの学習

●Alpha GoとAlpha Go Zeroの違い

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

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

 ・Policy Net ValueNetを1つのネットワークに統合

 ・Residual Netを導入

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

 

◆Section3:軽量化・高速化技術

●分散深層学習とは

 ・深層学習は多くのデータを使用したr、パラメータ調整のために多くの時間を使用したりするため、高速な計算が求められる

・複数の計算資源を使用し、並列滝にニューラルネットを構成することで効率の良い学習を行いたい

・データ並列化、モデル並列化、GPUによる高速技術は不可欠である

 

●データ並列化

 ・親モデルを各ワーカーに子も出るとしてコピー

 ・データを分割し、各ワーカーごとに計算させる

 ・各モデルのパラメータの合わせ方で同期型か非同期型か決まる

 ・非同期型のほうが早いか不安定なため、同期型が主流

 

●モデル並列化

・親モデルを書くワーカーに分割し、それぞれのモデルを学習させる。すべてのデータで学習が終わった後で、一つのモデルに復元

・モデルがを大きいときはモデル並列化を、データが大きいときはデータ並列化をするとよい

<参考図書等>

Large Scale Distributed Deep Networks

 Googleが2016年に出した論文

Tensorflowの前身

 

GPUによる高速化

GPGPU

CPU

GPU

 

GPGPU開発環境

CUDA

OpenCL

 

●モデルの軽量化

モデルの精度を維持しつつ、パラメータや演算回数を低減する手法の総称

<参考図書等>

ディープラーニングのモデル軽量化

山本康平、橘素子 前野蔵人

→様々な手法の中で「枝刈り」がバランスがよい

●軽量化の手法

量子化

重みの精度を下げることにより計算の高速化と省メモリ化を行う

・蒸留

複雑で精度の良い教師モデルから軽量な生徒も出るを効率よく学習を行う技術

・プルーニング

寄与の少ないニューロンをモデルから削減し高速化と省メモリ化を行う技術

 

◆Section4:応用モデル

●MobileNet

<参考図書等>

MobileNet:Efficient Convolutional Neural Networks for Mobile Vision Applications

 →ディープラーニングモデルの軽量化、高速化、高精度化を実現

・一般的な畳み込みレイヤーは計算量が多い

・MobileNetはDepthwise ConvolutionとPointwise Convolutionの組み合わせで軽量化を実現

●DenseNet

層が深くなるにつれて、学習が難しくなるという課題を前方の層から後方の層へアイデンティティ接続を介してパスを作ることで対処

Dense Blockと呼ばれるもモジュールを用いた

<参考図書等>

Densely Connected Convolutional Networks.G.Huang et.al.2016

●Wavenet

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

・深層学習を用いて統合確率を学習する際に、効率的に学習が行えるアーキテクチャを提案したことがWavenetの大きな貢献の一つである。提案された新しいConcolution型アーキテクチャーはDilated casual convolution と呼ばれ、結合確率を効率的に学習できるようになっている

 

◆Section5:Transformer

●ニューラル機械翻訳の問題点

 翻訳元の分の内容を一つのベクトルで表現

→文章が長くなると表現力が足りなくなる

●Attention

翻訳先の各単語を選択する際に、翻訳元の文中の各単語の隠れ状態を利用

●Transformer

Attention is all you need

RNNを使わない

必要なのはAttenntionだけ

RNNを使っていないので位置情報は保存できないので、最初に位置情報を追加

自分の入力だけで学習的に重みづけを決める

イメージはCNNが近い

●Positon-Wise Feed-Forward Networks

位置情報を保持したまま順伝搬させる

●Scaled dot product attention

全単語に関するAttentionをまとめて計算する

●Multi-Head attention

重みパラメタの異なる8個のヘッドを使用j

●コード

f:id:patapata007:20210710074654p:plain

Transformerコード

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

●鳥瞰図 広義の物体認識タスク

分類

物体検知

意味領域分割

大老域分割

●代表的データセット

VOC12

ILSVRC17

MS COCO18

OICOD18

・ポジショニング

クラス数とBOX/画像の大きさのマッピング

●評価指標

・Confusion Matrix

Precision

Recall

●IoU

Intersection over Union

物体検出においてはクラスレベルだけでなく、物体位置の予測精度も評価したい

●深層学習以降のぶって意見値

2段階検出器

1段階検出器

SSD

ベースはVDD16

●Semantic Segmentation

正しく認識するためには受容野にある程度の大きさが必要

・FCNの基本アイディア

・Deconvolution/Transposed convolution

通常のConv.層と同様、kernel size padding strideを指定

逆畳み込みと呼ばれることも多いが畳み込みの逆演算ではない

当然poolingで失われた情報が復元されるわけではない

●実装演習サマリーと考察

 コードによる実装演習はなかったが、講師が分類問題における閾値変化に対するふるまい等を事例にのっとって丁寧に解説してくれ、IoUの解釈等、非常にイメージがわき、理解することができた