ディープラーニング編

RNNやCNN、Transformerの理解を問います

RNN: 単純なRNNセルの隠れ状態更新 レベル1

ある時刻 \(t\) での入力ベクトルが \(\mathbf{x}_t = [1.0, 0.5]^T\)、前の時刻 \(t-1\) の隠れ状態が \(\mathbf{h}_{t-1} = [0.2, -0.1]^T\) です。重み行列が \(\mathbf{W}_x = \begin{pmatrix} 0.5 & 0.1 \\ -0.2 & 0.3 \end{pmatrix}\)、\(\mathbf{W}_h = \begin{pmatrix} 0.2 & -0.1 \\ 0.1 & 0.4 \end{pmatrix}\)、バイアスが \(\mathbf{b} = [0.1, 0.1]^T\) とします。活性化関数が tanh の場合、現在の隠れ状態 \(\mathbf{h}_t = \tanh(\mathbf{W}_x \mathbf{x}_t + \mathbf{W}_h \mathbf{h}_{t-1} + \mathbf{b})\) の最初の要素を計算してください。結果は小数点以下3桁まで求めてください。(\( \tanh(0.7) \approx 0.604 \))

解説
解答と解説を表示
<h4>リカレントニューラルネットワーク (RNN) の隠れ状態更新</h4> <p>リカレントニューラルネットワーク(RNN)は、シーケンスデータ(例: 時系列、文章、音声)を処理するために設計されたニューラルネットワークの一種です。RNNの最大の特徴は、内部に<strong>隠れ状態 (Hidden State)</strong> と呼ばれるメモリを持ち、過去の情報を要約して保持し、それを現在の計算に利用する点にあります。これにより、シーケンス内の要素間の時間的な依存関係を捉えることができます。</p> <div class="section"> <h5>単純なRNNセルの更新式</h5> <p>最も基本的なRNNセル(単純RNN、Elman RNNとも呼ばれる)では、時刻 \(t\) における隠れ状態 \(\mathbf{h}_t\) は、以下の式に基づいて計算されます。</p> <div class="formula"> $ \mathbf{h}_t = f(\mathbf{W}_x \mathbf{x}_t + \mathbf{W}_h \mathbf{h}_{t-1} + \mathbf{b})$ </div> <ul> <li>\(\mathbf{x}_t\): 時刻 \(t\) における入力ベクトル。シーケンスの現在の要素を表します。</li> <li>\(\mathbf{h}_{t-1}\): 時刻 \(t-1\) における隠れ状態ベクトル。1つ前の時点までの情報の要約です。</li> <li>\(\mathbf{h}_t\): 時刻 \(t\) における新しい隠れ状態ベクトル。\(\mathbf{x}_t\) と \(\mathbf{h}_{t-1}\) の情報から計算されます。</li> <li>\(\mathbf{W}_x\): 入力 \(\mathbf{x}_t\) に適用される重み行列。入力情報を変換します。</li> <li>\(\mathbf{W}_h\): 前の隠れ状態 \(\mathbf{h}_{t-1}\) に適用される重み行列(リカレント重み行列)。過去の情報を変換します。</li> <li>\(\mathbf{b}\): バイアスベクトル。</li> <li>\(f\): 活性化関数。非線形性を導入します。この問題では双曲線正接関数(tanh)が使用されます。</li> </ul> <p>この更新式は、各時刻で同じ重み行列 \(\mathbf{W}_x, \mathbf{W}_h\) とバイアス \(\mathbf{b}\) が繰り返し適用される点が特徴です(パラメータ共有)。</p> </div> <div class="section"> <h5>隠れ状態 \(\mathbf{h}_t\) の計算ステップ</h5> <p>問題で与えられた値を用いて、数式に従って \(\mathbf{h}_t\) を計算します。特に、\(\mathbf{h}_t\) の最初の要素を求めます。</p> <p><strong>1. 入力関連項の計算 (\(\mathbf{W}_x \mathbf{x}_t\)):</strong></p> <p>入力ベクトル \(\mathbf{x}_t\) に重み行列 \(\mathbf{W}_x\) を乗算します。</p> <div class="formula"> $G\mathbf{W}_x \mathbf{x}_t = \begin{pmatrix} 0.5 & 0.1 \\\\ -0.2 & 0.3 \end{pmatrix} \begin{pmatrix} 1.0 \\\\ 0.5 \end{pmatrix} = \begin{pmatrix} (0.5)(1.0) + (0.1)(0.5) \\\\ (-0.2)(1.0) + (0.3)(0.5) \end{pmatrix} = \begin{pmatrix} 0.5 + 0.05 \\\\ -0.2 + 0.15 \end{pmatrix} = \begin{pmatrix} 0.55 \\\\ -0.05 \end{pmatrix} $ </div> <p><strong>2. 過去の隠れ状態関連項の計算 (\(\mathbf{W}_h \mathbf{h}_{t-1}\)):</strong></p> <p>前の隠れ状態 \(\mathbf{h}_{t-1}\) にリカレント重み行列 \(\mathbf{W}_h\) を乗算します。</p> <div class="formula"> $\mathbf{W}_h \mathbf{h}_{t-1} = \begin{pmatrix} 0.2 & -0.1 \\\\ 0.1 & 0.4 \end{pmatrix} \begin{pmatrix} 0.2 \\\\ -0.1 \end{pmatrix} = \begin{pmatrix} (0.2)(0.2) + (-0.1)(-0.1) \\\\ (0.1)(0.2) + (0.4)(-0.1) \end{pmatrix} = \begin{pmatrix} 0.04 + 0.01 \\\\ 0.02 - 0.04 \end{pmatrix} = \begin{pmatrix} 0.05 \\\\ -0.02 \end{pmatrix}$ </div> <p><strong>3. 活性化関数への入力の計算 (\(\mathbf{z} = \mathbf{W}_x \mathbf{x}_t + \mathbf{W}_h \mathbf{h}_{t-1} + \mathbf{b}\)):</strong></p> <p>上記1, 2の結果とバイアスベクトル \(\mathbf{b}\) を合計します。</p> <div class="formula"> $\mathbf{z} = \begin{pmatrix} 0.55 \\\\ -0.05 \end{pmatrix} + \begin{pmatrix} 0.05 \\\\ -0.02 \end{pmatrix} + \begin{pmatrix} 0.1 \\\\ 0.1 \end{pmatrix} = \begin{pmatrix} 0.55+0.05+0.1 \\\\ -0.05-0.02+0.1 \end{pmatrix} = \begin{pmatrix} 0.70 \\\\ 0.03 \end{pmatrix}$ </div> <p><strong>4. tanh活性化関数の適用 (\(\mathbf{h}_t = \tanh(\mathbf{z})\)):</strong></p> <p>ベクトル \(\mathbf{z}\) の各要素に \(\tanh\) 関数を適用します。今回は最初の要素 \(z_1 = 0.70\) のみ計算します。</p> <div class="formula"> $h_{t,1} = \tanh(z_1) = \tanh(0.70)$ </div> <p>問題文の指示より \(\tanh(0.7) \approx 0.604\) を用いると、</p> <div class="formula"> $h_{t,1} \approx 0.604
lt;/div> </div> <div class="section"> <h5>計算結果</h5> <p>現在の隠れ状態 \(\mathbf{h}_t\) の最初の要素は、小数点以下3桁まで求めると約 <strong>0.604</strong> となります。</p> </div> <div class="key-point"> <div class="key-point-title">tanh活性化関数と単純RNNの課題</div> <ul> <li><strong>tanhの特性:</strong> tanh関数は出力を (-1, 1) の範囲に収め、ゼロ中心であるため、RNNの活性化関数として歴史的に用いられてきました。</li> <li><strong>長期依存性の問題:</strong> 単純なRNNでは、シーケンスが長くなると、過去の情報が隠れ状態の更新を繰り返す過程で、勾配が指数関数的に小さくなる(<strong>勾配消失</strong>)か、または大きくなる(<strong>勾配爆発</strong>)という問題が発生しやすくなります。これにより、遠い過去の情報が現在の出力に影響を与えにくくなり、長期的な依存関係の学習が困難になります。</li> <li><strong>解決策:</strong> この問題を緩和するために、LSTM (Long Short-Term Memory) や GRU (Gated Recurrent Unit) といった、より複雑なゲート機構を持つRNNセルが考案され、広く利用されています。</li> </ul> </div>
問題 1/1
カテゴリ一覧に戻る