batakechan / Torachiyo

0 stars 0 forks source link

深層学習(後編) day3 + day4 #4

Open batakechan opened 3 years ago

batakechan commented 3 years ago

(開始 2021年6月28日(月))

day3

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

1)要点  (1)RNN  ○RNNとは? RNN:Recurrent neural networkの略  「再帰型ネットワーク」   ・時系列データに対応可能な、ニューラルネットワークである。    (wikiによれば、ノード間の結合が、配列に沿った有向グラフを形成する人工ニューラルネットワーク)

 ○時系列データ   時間的順序を追って、一定間隔ごとに観測され、しかも相互に統計的依存関係が認められるようなデータ。   ・音声データ、テキストデータ、株価データなど

 ○RNNの仕組み   ・基本的な構造は、ディープラーニング一般と同じ。    入力層→中間層→出力層

スクリーンショット 2021-06-29 6 33 26

   z0→z1→z2→z3→z4と進むにつれて、zの情報が過去のzの情報を含んだ形(つながりのある形)で更新される。

  ・数式と実コード

スクリーンショット 2021-06-29 8 35 11

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

(2)BPTT

 ○BPTTとは:Backpropagation through time   RNNにおいてのパラメータ調整方法の一種   →誤差逆伝播の一種

 ○誤差逆伝播(復習)

スクリーンショット 2021-06-29 23 49 31

 ○重みwの微分、バイアスの微分

スクリーンショット 2021-06-30 9 08 28

 ○数式とコード

スクリーンショット 2021-06-30 23 06 43

 ○Eをuで微分

スクリーンショット 2021-07-01 8 43 03

 ○パラメータの更新式

スクリーンショット 2021-07-01 8 43 33

 ○BPTTの全体像

スクリーンショット 2021-07-02 4 40 53
batakechan commented 3 years ago

day3

section1:再帰型ニューラルネットワークの概念 2)実習

○バイナリー加算

スクリーンショット 2021-06-29 8 59 49 スクリーンショット 2021-06-29 8 59 57 スクリーンショット 2021-06-29 9 00 08 スクリーンショット 2021-06-29 9 00 26 スクリーンショット 2021-06-29 9 00 39

【ポイント】 ・今回は、1万回学習する。  繋がりをループで学習する。  つまり、 一回の単位を8回として、それが1万回繰り返す事になる。

・4000回繰り返すと、ほぼ一致する。

・プログラム上、

   delta[:,t] = (np.dot(delta[:,t+1].T, W.T) + np.dot(delta_out[:,t].T, W_out.T)) * functions.d_sigmoid(u[:,t+1])

   →過去の時間との繋がりを持って計算する。

    # 勾配更新
    W_out_grad += np.dot(z[:,t+1].reshape(-1,1), delta_out[:,t].reshape(-1,1)) →outは過去の繋がりはない。delta[:,t] がない
    W_grad += np.dot(z[:,t].reshape(-1,1), delta[:,t].reshape(1,-1)) →wは過去の繋がりがある。delta[:,t] がある
    W_in_grad += np.dot(X.T, delta[:,t].reshape(1,-1))              →inは過去の繋がりがある。 delta[:,t] がある
batakechan commented 3 years ago

day3 section1:再帰型ニューラルネットワークの概念 3)確認テスト

(1)RNN ○確認テスト1

(設問)サイズ5x5の入力画像を、サイズ3x3のフィルタで畳み込んだ時の出力サイズのを答えよ。     なお、ストライドは2、パディングは1とする。

(回答) (5+2x1ー 3)/ 2 +1 = 3 → 3x3 →正解!

○確認テスト2

(設問:要約)RNNのネットワークには3つの重みがある。     1つは入力→中間層、1つは中間層→出力。では3つ目の重みとな何か?

(回答) 時系列に中間層を渡す際の重み。 →(正解! 寺井先生の模範解答は「中間層から中間層への重み」)

○チャレンジ問題

(設問:要約)構文木を入力として、再帰的に文全体の表現ベクトルを得るプログラムがある。  空欄に当てはまるものは何か?    但し、以下の仮定を置く。   ・ニューラルネットワークの重みパラメータはグローバル変数として定義済み。   ・_activation関数は何らかの活性化関数である。   ・木構造は再帰的な辞書で定義してある。   ・rootが最も外側の辞書である。

(回答) W.dot(left * right) → x 正解は2番。両方の特徴を生かすにはコンカチするのが良い。   (2)BPPT

○確認テスト1

スクリーンショット 2021-06-30 0 02 06

○確認テスト2

スクリーンショット 2021-06-30 23 09 22

○コード演習問題

スクリーンショット 2021-07-02 5 02 40

(回答)(1) →不正解! 正解は(2)delta_t.dot(u) 時系列処理が行われるのが、(2)だから

batakechan commented 3 years ago

day3 section2:LSTM 1)要点

 ○RNNの課題   ・時系列を遡れば遡るほど、勾配が消失していく。    →長い時系列の学習が困難。      ・解決策    前回の授業で触れた、勾配消失の解決方法とは別で、    構造自体を変えて解決したものが、LSTM

 ○勾配爆発

  ・勾配が、層を逆伝播するごとに指数関数的に大きくなる現象    →恒等写像(恒等関数)要注意。

 ○LSTM   ・RNNの一種    ・後で、ここを見返した時に、すぐわかるように画面を貼ります。    

スクリーンショット 2021-07-02 7 51 12

→◎自分でも記述(書いて覚える)

スクリーンショット 2021-07-03 6 48 32

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

スクリーンショット 2021-07-02 8 34 54

  ○入力ゲートと出力ゲート   ○忘却ゲート   ○覗き穴結合   →上記「◎自分でも記述(書いて覚える)」のノートに記述しました。

batakechan commented 3 years ago

day3 section2:LSTM 2)実習

○特にこの単元の実習のご指示が無いようでしたので自作問題  (書いて覚えるAI) 演習問題をコーディング

スクリーンショット 2021-07-04 0 03 55
batakechan commented 3 years ago

day3 section2:LSTM 3)確認テスト

○確認テスト1

シグモイド関数を微分する。入力値が0の時に最大値をとるが、 その値はいくつか?

スクリーンショット 2021-07-02 6 41 24

→シグモイド関数、シグモイド関数の微分、共に完璧です!

○演習チャレンジ1

勾配クリッピング (さ)に当てはまるものはどれか?    (回答)(2) gradient / norm (正解)(1)gradient * rate (gradientをthesholdまで引き下げる)

★return 文が出たら、pythonは終了。

★寺井先生の「プログラムの勉強の仕方」のアドバイスは珠玉でした。  紫→python予約語。全部覚える。  赤→ np.linalg.norm のような。無数にあって覚えられないので、出てきたらググる。    それを繰り返すうちに、よく使うものは自然と覚える。

○確認テスト2

「とても」は無くなっても影響しない時、どのゲートが作用するか

(回答)忘却ゲート → 正解!

○演習チャレンジ2

CECに覚えさせる。

(回答)(3) input_gatea + forget_gatc →正解!

batakechan commented 3 years ago

day3 section3:GRU 1)要点

○ノートに記載しました。

スクリーンショット 2021-07-03 11 22 54
batakechan commented 3 years ago

day3 section3:GRU 2)実習

コード実行しましたが、dead kernel で怪しい終わり方。

ポイントだけ抜き出します

    # RNN のセルを定義する。RNN Cell の他に LSTM のセルや GRU のセルなどが利用できる。
    cell = tf.nn.rnn_cell.BasicRNNCell(self.hidden_layer_size)
    outputs, states = tf.nn.static_rnn(cell, input_data, initial_state=initial_state)

 →BasicRNNCellが最初からライブラリに用意されていて、それを抜き出せば実行できる。

スクリーンショット 2021-07-03 15 37 07

→dead kernelと出たので、おそらく完了していないと思います。  (2時間以上原因を追及しましたが、環境の限界のような気がするので、諦めました)

 実行はしたという証拠に貼りました。

batakechan commented 3 years ago

day3 section3:GRU 3)確認テスト

 ○確認テスト1   LSTMとCECが抱える課題について簡潔に述べよ   ・LSTM 計算が複雑 →正解。より正確には部品が入力ゲート、出力ゲート、               忘却ゲート、CECの4つがあり、計算が複雑で、負荷がかかる。   ・CEC  記憶を伝達するのコントロールができない          →不正解(自分の記憶がいかに曖昧かがよくわかりました)          正解  勾配が学習能力がない。

 ○演習チャレンジ

  (こ)に当てはまるのはどれか?    →(回答) (4)→ 正解!              しっくり来ず。1世代前のhとzを掛けている。              →隠れ層hはどのくらい前世代の情報を使うかの比率か。

 ○LSTMとGRUの違いを簡潔に述べよ。

  ・LSTM:入力ゲート、出力ゲート、忘却ゲート、CECからなる。部品が多く、計算の負荷大 ・GRU. :リセットゲート、更新ゲートからなる。部品少なく、計算の負荷小

 

   

batakechan commented 3 years ago

day3 section4 双方向RNN 1)要点

スクリーンショット 2021-07-03 16 27 56
batakechan commented 3 years ago

day3 section4 双方向RNN 2)実習

 ・今回は実習のご指示がなかったので、演習問題をコーディングしました。   (手で覚えるAI)

スクリーンショット 2021-07-03 16 52 43

  

batakechan commented 3 years ago

day3 section4 双方向RNN 3)確認テスト

○演習問題

(か)に当てはまるもの。  →(回答)(3) hp.concatenate([h_f, h_b[::-1], axis=1]) →正解! ただし、イメージと違いました。

batakechan commented 3 years ago

day3 section5 Seq2Seq 1)要点

○全体図

スクリーンショット 2021-07-03 17 08 49

○Encoder RNN

スクリーンショット 2021-07-03 17 31 39 スクリーンショット 2021-07-03 17 32 08 スクリーンショット 2021-07-03 17 32 31

○Decoder RNN

スクリーンショット 2021-07-03 18 03 27

○HRED

スクリーンショット 2021-07-03 18 46 10

○VHRED

batakechan commented 3 years ago

day3 section5 Seq2Seq 2)実習

 ・実習のご指示がないようでしたので、演習チャレンジのコーディング実施   (手で覚えるAI)

 

スクリーンショット 2021-07-03 19 52 40
batakechan commented 3 years ago

day3 section5 Seq2Seq 3)確認テスト

 ○確認テスト1

 seq2seq2について説明しているもの。  (回答) (2)正解!   →ちなみに (1)は双方向RNN         (3)構文木         (4)はLSTM

 ○演習チャレンジ

 (き)に入る言葉。   (回答)(1)らしい。→よく分からず。E.dot(w)ドット積で単語表現が取り出せる。

 ○確認テスト2

  ・Seq2seqとHRED、VHREDの違いを簡潔に述べよ。

   ・Seq2Seq :文脈なく返す。しかも一問一答。    ・HRED:より人間らしい文章になる。    ・VHRED:次元削減ができる。       →(正解?)解答がなかったような。。。

 ○確認テスト3

  ・VAEに関する下記の説明文中の空欄に当てはまる言葉を答えよ。

   自己符号化器の潜在変数に__を導入したもの。

    →(回答)確率分布 N(0, 1)  →(正解?) 解答がなかったような。。。

batakechan commented 3 years ago

day3 section6 Word2veq 1)要点

スクリーンショット 2021-07-03 22 07 01
batakechan commented 3 years ago

day3 section6 Word2veq 2)実習

○実習指示は直接なかったので自分でコーディング。  (手で覚えるAI)

スクリーンショット 2021-07-03 22 25 20

→投入するテキストさえ作成できれば、1行でモデル作成できるとのことでした。

batakechan commented 3 years ago

day3 section6 Word2veq 3)確認テスト

○確認テスト自体がないので、自作 「word2Vecのメリットとデメリットを挙げよ」  メリット:そのままone-hotを使うと、単語の数だけベクトルができるが、それを削減できる。  デメリット:「対義語・多義語が苦手」らしい。        単語を1点にマッピングするので、同様の字で、異なる意味を持つ単語が調節しにくい。        とのことでした。

batakechan commented 3 years ago

day3 section7 Attention Mechanism 1)要点

スクリーンショット 2021-07-03 22 36 03
batakechan commented 3 years ago

day3 section7 Attention Mechanism 2)実習

 ○ここはサマリーと考察にします。

 attention mechanismの具体例は多数あるとのこと  ・機械翻訳 Transfoemer  ・自然言語理解 BERT XLNET(BERTの改良版。自己回帰モデルにしているとのこと)

 かつては自然言語処理xDeep Learning といえば、RNN(LSTM 、GRU)だった。  2017年6月にgoogleから、「Attention is All You Need 」が発表され、  機械翻訳のスコアを大きく引き上げた。

 AttentionがRNNに比べて優れた点は  ・性能が良い  ・学習が速い  ・構造がシンプルということである。

batakechan commented 3 years ago

day3 section7 Attention Mechanism 3)確認テスト

 RNNとword2vec,seq2seqとAttentionの違いを簡潔に述べよ。

(回答)  RNNとword2vec:RNNでword2vecを使わないとするとone-hotを用いるケースが多いが、           単語数が膨大で、計算が重い。          word2vecは1つなので、計算が軽快になる。  →解答    RNNは時系列データ、word2vecは単語の分散ベクトルを得る手法。

 seq2seqとAttention:seq2seqは固定ベクトル。            文章が長くなれば、その分だけ内部表現が大きくなるのがAttention

 →解答    seq2seq:ある時系列データから別の時系列データを得る    Attention:時系列データに重みをつける

batakechan commented 3 years ago

day4 section1 強化学習

○要点(より効率的に覚えるように、ノートにまとめながら整理しました)

スクリーンショット 2021-07-04 11 17 26 スクリーンショット 2021-07-04 11 17 55
batakechan commented 3 years ago

day4 section2 AlphaGo

○要点(ノートにまとめて整理しました。AlphaGo自体、自分でも興味あったのでかなり記載分量が増えました。)

スクリーンショット 2021-07-04 14 01 06 スクリーンショット 2021-07-04 14 04 35 スクリーンショット 2021-07-04 14 02 17
batakechan commented 3 years ago

day4 section3 軽量化・高速化技術

○要点(ここもノートに整理しました。alphagoで大量に描きすぎて、要点を掴めなくなり掛けたので、ポイントを絞って記載しました。)

スクリーンショット 2021-07-04 16 58 47 スクリーンショット 2021-07-04 16 59 15
batakechan commented 3 years ago

day4 section4 応用技術

○要点(ここもノートを取って覚えることにしました)

スクリーンショット 2021-07-04 19 35 29 スクリーンショット 2021-07-04 19 36 56 スクリーンショット 2021-07-04 19 37 25
batakechan commented 3 years ago

day4 section5 Transformer

○要点(ノートに書いて覚えるを実践)

スクリーンショット 2021-07-04 23 31 50 スクリーンショット 2021-07-04 23 32 21 スクリーンショット 2021-07-04 23 32 44
batakechan commented 3 years ago

day4 section6 物体検知・セグメンテーション

○要点(ノートに書いて覚えました。朝、夜ここだけで3時間集中)

スクリーンショット 2021-07-05 20 32 22 スクリーンショット 2021-07-05 20 32 54 スクリーンショット 2021-07-05 20 33 22 スクリーンショット 2021-07-05 20 33 50 スクリーンショット 2021-07-05 20 34 16 スクリーンショット 2021-07-05 20 34 56 スクリーンショット 2021-07-05 20 35 22