第9章: RNN, CNN
80. ID番号への変換Permalink
問題51で構築した学習データ中の単語にユニークなID番号を付与したい.学習データ中で最も頻出する単語に1
,2番目に頻出する単語に2
,……といった方法で,学習データ中で2回以上出現する単語にID番号を付与せよ.そして,与えられた単語列に対して,ID番号の列を返す関数を実装せよ.ただし,出現頻度が2回未満の単語のID番号はすべて0
とせよ.
81. RNNによる予測Permalink
ID番号で表現された単語列x=(x1,x2,…,xT)がある.ただし,Tは単語列の長さ,xt∈RVは単語のID番号のone-hot表記である(Vは単語の総数である).再帰型ニューラルネットワーク(RNN: Recurrent Neural Network)を用い,単語列xからカテゴリyを予測するモデルとして,次式を実装せよ.
→h0=0,→ht=→RNN(emb(xt),→ht−1),y=softmax(W(yh)→hT+b(y))ただし,emb(x)∈Rdwは単語埋め込み(単語のone-hot表記から単語ベクトルに変換する関数),→ht∈Rdhは時刻tの隠れ状態ベクトル,→RNN(x,h)は入力xと前時刻の隠れ状態hから次状態を計算するRNNユニット,W(yh)∈RL×dhは隠れ状態ベクトルからカテゴリを予測するための行列,b(y)∈RLはバイアス項である(dw,dh,Lはそれぞれ,単語埋め込みの次元数,隠れ状態ベクトルの次元数,ラベル数である).RNNユニット→RNN(x,h)には様々な構成が考えられるが,典型例として次式が挙げられる.
→RNN(x,h)=g(W(hx)x+W(hh)h+b(h))ただし,W(hx)∈Rdh×dw,W(hh)∈Rdh×dh,b(h)∈RdhはRNNユニットのパラメータ,gは活性化関数(例えばtanhやReLUなど)である.
なお,この問題ではパラメータの学習を行わず,ランダムに初期化されたパラメータでyを計算するだけでよい.次元数などのハイパーパラメータは,dw=300,dh=50など,適当な値に設定せよ(以降の問題でも同様である).
82. 確率的勾配降下法による学習Permalink
確率的勾配降下法(SGD: Stochastic Gradient Descent)を用いて,問題81で構築したモデルを学習せよ.訓練データ上の損失と正解率,評価データ上の損失と正解率を表示しながらモデルを学習し,適当な基準(例えば10エポックなど)で終了させよ.
83. ミニバッチ化・GPU上での学習Permalink
問題82のコードを改変し,B事例ごとに損失・勾配を計算して学習を行えるようにせよ(Bの値は適当に選べ).また,GPU上で学習を実行せよ.
84. 単語ベクトルの導入Permalink
事前学習済みの単語ベクトル(例えば,Google Newsデータセット(約1,000億単語)での学習済み単語ベクトル)で単語埋め込みemb(x)を初期化し,学習せよ.
85. 双方向RNN・多層化Permalink
順方向と逆方向のRNNの両方を用いて入力テキストをエンコードし,モデルを学習せよ.
←hT+1=0,←ht=←RNN(emb(xt),←ht+1),y=softmax(W(yh)[→hT;←h1]+b(y))ただし,→ht∈Rdh,←ht∈Rdhはそれぞれ,順方向および逆方向のRNNで求めた時刻tの隠れ状態ベクトル,←RNN(x,h)は入力xと次時刻の隠れ状態hから前状態を計算するRNNユニット,W(yh)∈RL×2dhは隠れ状態ベクトルからカテゴリを予測するための行列,b(y)∈RLはバイアス項である.また,[a;b]はベクトルaとbの連結を表す。
さらに,双方向RNNを多層化して実験せよ.
86. 畳み込みニューラルネットワーク (CNN)Permalink
ID番号で表現された単語列x=(x1,x2,…,xT)がある.ただし,Tは単語列の長さ,xt∈RVは単語のID番号のone-hot表記である(Vは単語の総数である).畳み込みニューラルネットワーク(CNN: Convolutional Neural Network)を用い,単語列xからカテゴリyを予測するモデルを実装せよ.
ただし,畳み込みニューラルネットワークの構成は以下の通りとする.
- 単語埋め込みの次元数: dw
- 畳み込みのフィルターのサイズ: 3 トークン
- 畳み込みのストライド: 1 トークン
- 畳み込みのパディング: あり
- 畳み込み演算後の各時刻のベクトルの次元数: dh
- 畳み込み演算後に最大値プーリング(max pooling)を適用し,入力文をdh次元の隠れベクトルで表現
すなわち,時刻tの特徴ベクトルpt∈Rdhは次式で表される.
pt=g(W(px)[emb(xt−1);emb(xt);emb(xt+1)]+b(p))ただし,W(px)∈Rdh×3dw,b(p)∈RdhはCNNのパラメータ,gは活性化関数(例えばtanhやReLUなど),[a;b;c]はベクトルa,b,cの連結である.なお,行列W(px)の列数が3dwになるのは,3個のトークンの単語埋め込みを連結したものに対して,線形変換を行うためである.
最大値プーリングでは,特徴ベクトルの次元毎に全時刻における最大値を取り,入力文書の特徴ベクトルc∈Rdhを求める.c[i]でベクトルcのi番目の次元の値を表すことにすると,最大値プーリングは次式で表される.
c[i]=max最後に,入力文書の特徴ベクトルcに行列W^{(yc)} \in \mathbb{R}^{L \times d_h}とバイアス項b^{(y)} \in \mathbb{R}^{L}による線形変換とソフトマックス関数を適用し,カテゴリyを予測する.
y = {\rm softmax}(W^{(yc)} c + b^{(y)})なお,この問題ではモデルの学習を行わず,ランダムに初期化された重み行列でyを計算するだけでよい.
87. 確率的勾配降下法によるCNNの学習Permalink
確率的勾配降下法(SGD: Stochastic Gradient Descent)を用いて,問題86で構築したモデルを学習せよ.訓練データ上の損失と正解率,評価データ上の損失と正解率を表示しながらモデルを学習し,適当な基準(例えば10エポックなど)で終了させよ.
88. パラメータチューニングPermalink
問題85や問題87のコードを改変し,ニューラルネットワークの形状やハイパーパラメータを調整しながら,高性能なカテゴリ分類器を構築せよ.
89. 事前学習済み言語モデルからの転移学習Permalink
事前学習済み言語モデル(例えばBERTなど)を出発点として,ニュース記事見出しをカテゴリに分類するモデルを構築せよ.