Open batakechan opened 3 years ago
section1:再帰型ニューラルネットワークの概念 2)実習
○バイナリー加算
【ポイント】 ・今回は、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] がある
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
○確認テスト2
○コード演習問題
(回答)(1) →不正解! 正解は(2)delta_t.dot(u) 時系列処理が行われるのが、(2)だから
day3 section2:LSTM 1)要点
○RNNの課題 ・時系列を遡れば遡るほど、勾配が消失していく。 →長い時系列の学習が困難。 ・解決策 前回の授業で触れた、勾配消失の解決方法とは別で、 構造自体を変えて解決したものが、LSTM
○勾配爆発
・勾配が、層を逆伝播するごとに指数関数的に大きくなる現象 →恒等写像(恒等関数)要注意。
○LSTM ・RNNの一種 ・後で、ここを見返した時に、すぐわかるように画面を貼ります。
→◎自分でも記述(書いて覚える)
○CEC ・勾配消失、及び、勾配爆発の解決方法として、勾配が1であれば解決できる。
○入力ゲートと出力ゲート ○忘却ゲート ○覗き穴結合 →上記「◎自分でも記述(書いて覚える)」のノートに記述しました。
day3 section2:LSTM 2)実習
○特にこの単元の実習のご指示が無いようでしたので自作問題 (書いて覚えるAI) 演習問題をコーディング
day3 section2:LSTM 3)確認テスト
○確認テスト1
シグモイド関数を微分する。入力値が0の時に最大値をとるが、 その値はいくつか?
→シグモイド関数、シグモイド関数の微分、共に完璧です!
○演習チャレンジ1
勾配クリッピング (さ)に当てはまるものはどれか? (回答)(2) gradient / norm (正解)(1)gradient * rate (gradientをthesholdまで引き下げる)
★return 文が出たら、pythonは終了。
★寺井先生の「プログラムの勉強の仕方」のアドバイスは珠玉でした。 紫→python予約語。全部覚える。 赤→ np.linalg.norm のような。無数にあって覚えられないので、出てきたらググる。 それを繰り返すうちに、よく使うものは自然と覚える。
○確認テスト2
「とても」は無くなっても影響しない時、どのゲートが作用するか
(回答)忘却ゲート → 正解!
○演習チャレンジ2
CECに覚えさせる。
(回答)(3) input_gatea + forget_gatc →正解!
day3 section3:GRU 1)要点
○ノートに記載しました。
day3 section3:GRU 2)実習
ポイントだけ抜き出します
# 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が最初からライブラリに用意されていて、それを抜き出せば実行できる。
→dead kernelと出たので、おそらく完了していないと思います。 (2時間以上原因を追及しましたが、環境の限界のような気がするので、諦めました)
実行はしたという証拠に貼りました。
day3 section3:GRU 3)確認テスト
○確認テスト1 LSTMとCECが抱える課題について簡潔に述べよ ・LSTM 計算が複雑 →正解。より正確には部品が入力ゲート、出力ゲート、 忘却ゲート、CECの4つがあり、計算が複雑で、負荷がかかる。 ・CEC 記憶を伝達するのコントロールができない →不正解(自分の記憶がいかに曖昧かがよくわかりました) 正解 勾配が学習能力がない。
○演習チャレンジ
(こ)に当てはまるのはどれか? →(回答) (4)→ 正解! しっくり来ず。1世代前のhとzを掛けている。 →隠れ層hはどのくらい前世代の情報を使うかの比率か。
○LSTMとGRUの違いを簡潔に述べよ。
・LSTM:入力ゲート、出力ゲート、忘却ゲート、CECからなる。部品が多く、計算の負荷大 ・GRU. :リセットゲート、更新ゲートからなる。部品少なく、計算の負荷小
day3 section4 双方向RNN 1)要点
day3 section4 双方向RNN 2)実習
・今回は実習のご指示がなかったので、演習問題をコーディングしました。 (手で覚えるAI)
day3 section4 双方向RNN 3)確認テスト
○演習問題
(か)に当てはまるもの。 →(回答)(3) hp.concatenate([h_f, h_b[::-1], axis=1]) →正解! ただし、イメージと違いました。
day3 section5 Seq2Seq 1)要点
○全体図
○Encoder RNN
○Decoder RNN
○HRED
○VHRED
day3 section5 Seq2Seq 2)実習
・実習のご指示がないようでしたので、演習チャレンジのコーディング実施 (手で覚えるAI)
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) →(正解?) 解答がなかったような。。。
day3 section6 Word2veq 1)要点
day3 section6 Word2veq 2)実習
○実習指示は直接なかったので自分でコーディング。 (手で覚えるAI)
→投入するテキストさえ作成できれば、1行でモデル作成できるとのことでした。
day3 section6 Word2veq 3)確認テスト
○確認テスト自体がないので、自作 「word2Vecのメリットとデメリットを挙げよ」 メリット:そのままone-hotを使うと、単語の数だけベクトルができるが、それを削減できる。 デメリット:「対義語・多義語が苦手」らしい。 単語を1点にマッピングするので、同様の字で、異なる意味を持つ単語が調節しにくい。 とのことでした。
day3 section7 Attention Mechanism 1)要点
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に比べて優れた点は ・性能が良い ・学習が速い ・構造がシンプルということである。
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:時系列データに重みをつける
day4 section1 強化学習
○要点(より効率的に覚えるように、ノートにまとめながら整理しました)
day4 section2 AlphaGo
○要点(ノートにまとめて整理しました。AlphaGo自体、自分でも興味あったのでかなり記載分量が増えました。)
day4 section3 軽量化・高速化技術
○要点(ここもノートに整理しました。alphagoで大量に描きすぎて、要点を掴めなくなり掛けたので、ポイントを絞って記載しました。)
day4 section4 応用技術
○要点(ここもノートを取って覚えることにしました)
day4 section5 Transformer
○要点(ノートに書いて覚えるを実践)
day4 section6 物体検知・セグメンテーション
○要点(ノートに書いて覚えました。朝、夜ここだけで3時間集中)
(開始 2021年6月28日(月))
day3
section1:再帰型ニューラルネットワークの概念
1)要点 (1)RNN ○RNNとは? RNN:Recurrent neural networkの略 「再帰型ネットワーク」 ・時系列データに対応可能な、ニューラルネットワークである。 (wikiによれば、ノード間の結合が、配列に沿った有向グラフを形成する人工ニューラルネットワーク)
○時系列データ 時間的順序を追って、一定間隔ごとに観測され、しかも相互に統計的依存関係が認められるようなデータ。 ・音声データ、テキストデータ、株価データなど
○RNNの仕組み ・基本的な構造は、ディープラーニング一般と同じ。 入力層→中間層→出力層
z0→z1→z2→z3→z4と進むにつれて、zの情報が過去のzの情報を含んだ形(つながりのある形)で更新される。
・数式と実コード
○(改めて)RNNの特徴 時系列モデルを扱うには、初期の状態と過去の時間t-1の状態を保持し、そこから次の時間でのtを 再帰的に求める再帰構造が必要になる。
(2)BPTT
○BPTTとは:Backpropagation through time RNNにおいてのパラメータ調整方法の一種 →誤差逆伝播の一種
○誤差逆伝播(復習)
○重みwの微分、バイアスの微分
○数式とコード
○Eをuで微分
○パラメータの更新式
○BPTTの全体像