
ZAF 2021年10月27日
<今回のテーマ>
秋の夜長は
コーディング
パート2
目次
- 前座 [6:30 - 7:00]
- メイン『2021年版 NLP を完全に理解する』第2回
Seq2Seq に戻って Attention を完全に理解する- 第1部 [7:00 - 8:00] 理論編(論文を読む)
- 第2部 [8:00 - 9:00] 実践編(プログラミング)
- 今日のおわりに
- 総合目次
前座
毎日更新、ポッドキャスト
進行状況
- 9/26 から:シーズン13 (ZAF-2101)
- 10/3 から:シーズン14 (ZAF-2102)
- 10/13 から:シーズン15 (ZAF-2103)
- 10/28 から:シーズン16 (ZAF-2104) 配信予定
遂に明かされる!
なぜ「コンピュータ会話教室」第1回が
「for ループ」だったのか!!
乞うご期待!
ZENKEI AI SELECTIONS
振り返り
(ポッドキャスト シーズン9からは、対応する YouTube ビデオもあります)
Podcast Ranking
それで、毎日更新の成果はあったのか?

- Podcast Ranking
これまでの最高順位は- 「自然科学」で11位
- 「科学」で80位
- 9月22日でのランキングが最高
- 最近の動向はこんな感じ
前座 目次
『2021年版 NLP を完全に理解する』第2回
Seq2Seq に戻って
完全に理解する
第1部:理論編
Seq2Seq に戻って
完全に理解する
第1部:理論編
(論文を読む)
イントロダクション
- 前回の復習
- Transformer 勉強するぞ、から
- 論文 "Attention Is All You Need" は、読んだ
- 腹落ちしない
- (まだ手は動かしてない)
- Attention を理解しよう、と
- Bahdanau, Cho, Bengio
"Neural Machine Translation By Jointly Learning To Align and Translate"
を精読
- Bahdanau, Cho, Bengio
- 実装した
- 計算した
- attention の効果、出ない...
- Transformer 勉強するぞ、から
- 今回
- Seq2Seq まで戻って、きちんとやろう
- すると GRU をきちんと理解することが必要になって
- すると、そもそも RNN できちんと bidirectional が 分かってないことが分かって
- と、海の底にまで潜ってきて、無事に海面に戻ってきた(はず)
- Seq2Seq まで戻って、きちんとやろう
- Seq2Seq with Attention 完全に理解した
今回読む論文
- (1)Bahdanau, Cho, Bengio (2014) - 前回読んだ論文(Seq2Seq with Attention)
- (2) Schuster & Paliwal (1997) - Bidirectional RNN の論文
- (3) Cho et al. (2014) - 今回読むメインの論文(Seq2Seq)
前回読んだ Bahdanau, Cho, Bengio の補足
- ZAF-2109 で精読した論文
- "Neural Machine Translation By Jointly Learning To Align and Translate"
by Bahdanau, Cho, Bengio arxiv: 1409.0473 (local copy)
- "Neural Machine Translation By Jointly Learning To Align and Translate"
- (1)RNN (GRU) に Attention を入れる方法について
- (2)proposed updated state s~i の式について
- この違いは、意味が多少変わってくる
- r という「リセット」が、何に対する「リセット」なのか、という意味
- 実際の処理上、影響がどれくらいあるのかは、あまりきにしなくてもいいかな
- 実際に比較した結果は、大きな違いは見られなかった
- 以上2点は、先月のコメント
- 以下、追加のコメント
- (3)decoder の出力の処理の部分を、前回はすっかりスキップしてた
Bidirectional RNN の論文
- (Schuster & Paliwal, 1997)
"Bidirectional recurrent neural networks"
IEEE Transactions on Signal Processing, 45(11), 2673–2681. - Bahdanau, Cho, Bengio の論文に BiRNN の出典として引用されていた論文
- multi-layer にするとき、さて、どう実装するのか……
- という話は、実装編で
Cho et al. 2014 - Seq2Seq 論文を精読
- (Cho et al., 2014b)
arxiv: 1406.1078 (local copy)
"Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation"
(Cho, ..., Bahdanau, ..., Bengio)- 著者名を見ると分かる通り、この論文は Bahdanau, Cho, Bengio の Attention の論文の前身
- この論文自体には、歴史的にいうと2つのポイントがあって
- 前回、 Bahdanau, Cho, Bengio を精読した時に遭遇した GRU の詳細
- 前回、 Bahdanau, Cho, Bengio を精読した時にスキップした
最終ステップの処理は、同等のものが(ちょっと詳しく)書かれてある
- ただし、まだ分からない点が残ってる
- 行列 G を分割している部分のポイントが全く分からない
- (詳しくは、実装編で)
第1部:理論編(論文を読む) 目次
『2021年版 NLP を完全に理解する』第2回
Seq2Seq に戻って
完全に理解する
第2部:実践編
Seq2Seq に戻って
完全に理解する
第2部:実践編
(プログラミング)
- (1)Bidirectional RNN を完全に理解する
- (2)RNN (GRU) への context vector の導入方法
- (3)Maxout ユニットについて
Bidirectional RNN を完全に理解する
- (Schuster & Paliwal, 1997)
"Bidirectional recurrent neural networks"
IEEE Transactions on Signal Processing, 45(11), 2673–2681. - スクラッチから RNN を実装する
(ことで、Bidirectional RNN を完全に理解章)- pytorch の torch.nn.RNN には、すでに bidirectional オプションが付いている
- このレイヤーは、その他に num_layers も指定できる
(多層 RNN を構成できる) - pytorch の実装には、RNN の最小ユニット torch.nn.RNNCell もある
- pytorch の torch.nn.RNN には、すでに bidirectional オプションが付いている
pytorch との一対一の比較
RNN (RNNCell)
Bidirectional 1-Layer レベル
Bidirectional multi-Layer レベル
GRU に対して、同様に
- pytorch の torch.nn.GRUCell
- pytorch の torch.nn.GRU
myGRUCell
![]() |
myGRU1
![]() |
(コメント)RNN レイヤーのバイアスについて
- RNN レイヤーは feedforward NN (fully connected layer, nn.Linear) の単純な拡張になっている
- feedforward NN (fully connected layer, nn.Linear)
y = f( W・x + b )
- 入力: x
- 出力: y
- アクティベーション(非線形関数): f()
- パラメータ: W, b
- RNN (例えば torch.nn.RNNCell )
h’ = tanh( Wx・x + bx + Wh・h + bh )
- 入力: x, h
- 出力: h’
- アクティベーション(非線形関数): tanh()
- パラメータ: Wx, bx, Wh, bh
- 疑問:バイアス項 bx と bh
は冗長ではないか?
- つまり bx か bh の1つを残せば十分じゃないか?
- bias オプションがあるが、 False の場合、両方とも(?)落とすようになるみたい
- この構造は、基本的に GRU も同様
- まぁ、大した違いではないですが
RNN (GRU) への context vector の導入方法
実装上の問い
- 既存の RNN ユニット(2入力、1出力)を使って Decoder を実装したい
- 方法1:3つの入力を何らかの処理を行って「入力2つ」の形にする
- 前回ぼくが形式的に喋った方法も、その1つ
(RNN (GRU) に Attention を入れる方法について) - 2つのベクトルを concat して(大きな)1つのベクトルにして
2入力、1出力の形にする方法について - (簡単のため RNN で考える)
- (選択1)c を h に concat するか?
- (選択2)c を x に concat するか?
- DIVE INTO DEEP LEARNING - Sequence to Sequence Learning
- うん、確かにこの方法だと、数学的には同じ形になりそうだ
(ただし RNN の場合、あと 1-layer の場合)
- DIVE INTO DEEP LEARNING - Sequence to Sequence Learning
- 前回ぼくが形式的に喋った方法も、その1つ
- 方法2:3つの入力を処理する RNN ユニットを実装する
実装
Maxout ユニットについて
- 前回 (ZAF-2109) すっかりスキップしてた decoder の出力の処理の部分
- その論文の元論文である Cho et al. (2014) に、
この最終ステップの処理は、同等のものが(ちょっと詳しく)書かれてある
- ただし、まだ分からない点が残ってる
- 行列 G を分割している部分のポイントが全く分からない
- 論文を読んで、理解した範囲で、以下のように実装してみた
- ただし Maxout を使わない場合と比較して、大きく改善するようには見えない
結果
Spelling Bee
翻訳
第2部:実践編(プログラミング) 目次
今日のおわりに
……
今後の予定
- 次回 ZAF 11月24日開催の予定です。
- ZAF 講演者、 ZAM 執筆者、絶賛、第募集中です!
お気軽にお問い合わせください!
総合目次
- 前座
- メイン『2021年版 NLP を完全に理解する』第2回
Seq2Seq に戻って Attention を完全に理解する- 第1部 理論編(論文を読む)
- 第2部 実践編(プログラミング)
- 今日のおわりに
おまけ
ポッドキャスト
ポッドキャスト
ZENKEI AI SELECTIONS
コンテンツ一覧
- ポッドキャスト シーズン9 (ZAF2009)
- ポッドキャスト シーズン10 (ZAF2010)
- ポッドキャスト シーズン11 (ZAF2011)
- ポッドキャスト シーズン12 (ZAF2012)
- シーズン13 (ZAF-2101)
- シーズン14 (ZAF-2102)
- シーズン15 (ZAF-2103)
- ZAM創刊号の印刷版きました!
- ZAM 印刷版の自慢と2月号のチラ見せ
- (新企画)コンピュータ会話教室(1)イントロ
- (新企画)コンピュータ会話教室(2)for ループ
- (新企画)コンピュータ会話教室(3)ベクトルと行列
- (新企画)コンピュータ会話教室(4)突然の数理クイズ
- (新企画)コンピュータ会話教室(5)伝わったかな?
- 東海道5X(1)構想など(ホンダナオさん)
- 東海道5X(2)よさげな浮世絵風建築画像と偽文字(ホンダナオさん)
- 東海道5X(3)写真と線画(ホンダナオさん)
- 東海道五十X プロジェクト(1)CycleGAN の紹介(大島圭祐さん)
- 東海道五十X プロジェクト(2)情景画像と浮世絵で検証(大島圭祐さん)
- 東海道五十X プロジェクト(3)TransGaGa の紹介(大島圭祐さん)
- 東海道五十X プロジェクト(4)ベクシンスキーの絵(大島圭祐さん)
- 東海道5Xの総括:ディスカッション