1. 数据准备
字符序列 “hello” 转换为 one-hot 编码表示:
- 输入: [‘h’, ‘e’, ‘l’, ‘l’]
- 输出: [‘e’, ‘l’, ‘l’, ‘o’]
2. 初始化参数
我们使用一个单层的 RNN(N VS N),隐藏层大小为2,每次传1个字符。初始参数如下:
W x h = ( 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 ) , W h h = ( 0.1 0.2 0.3 0.4 ) , W h y = ( 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 ) W_{xh} = \begin{pmatrix} 0.1 & 0.2 \\ 0.3 & 0.4 \\ 0.5 & 0.6 \\ 0.7 & 0.8 \end{pmatrix}, \quad W_{hh} = \begin{pmatrix} 0.1 & 0.2 \\ 0.3 & 0.4 \end{pmatrix}, \quad W_{hy} = \begin{pmatrix} 0.1 & 0.2 & 0.3 & 0.4 \\ 0.5 & 0.6 & 0.7 & 0.8 \end{pmatrix} Wxh= 0.10.30.50.70.20.40.60.8 ,Whh=(0.10.30.20.4),Why=(0.10.50.20.60.30.70.40.8)
偏置项初始化为0。
3. 前向传播和反向传播
时间步 1(输入 ‘h’):
输入向量 x 1 = [ 1 , 0 , 0 , 0 ] x_1 = [1, 0, 0, 0] x1=[1,0,0,0]
h 1 = tanh ( W x h x 1 + W h h h 0 ) = tanh ( ( 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 ) ( 1 0 0 0 ) + ( 0.1 0.2 0.3 0.4 ) ( 0 0 ) ) = tanh ( ( 0.1 0.3 ) ) = ( 0.0997 0.2913 ) h_1 = \tanh(W_{xh} x_1 + W_{hh} h_0) = \tanh \left( \begin{pmatrix} 0.1 & 0.2 \\ 0.3 & 0.4 \\ 0.5 & 0.6 \\ 0.7 & 0.8 \end{pmatrix} \begin{pmatrix} 1 \\ 0 \\ 0 \\ 0 \end{pmatrix} + \begin{pmatrix} 0.1 & 0.2 \\ 0.3 & 0.4 \end{pmatrix} \begin{pmatrix} 0 \\ 0 \end{pmatrix} \right) = \tanh \left( \begin{pmatrix} 0.1 \\ 0.3 \end{pmatrix} \right) = \begin{pmatrix} 0.0997 \\ 0.2913 \end{pmatrix} h1=tanh(Wxhx1+Whhh0)=tanh 0.10.30.50.70.20.40.60.8 1000 +(0.10.30.20.4)(00) =tanh((0.10.3))=(0.09970.2913)
y 1 = W h y h 1 = ( 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 ) ( 0.0997 0.2913 ) = ( 0.1695 0.3889 0.6083 0.8277 ) y_1 = W_{hy} h_1 = \begin{pmatrix} 0.1 & 0.2 & 0.3 & 0.4 \\ 0.5 & 0.6 & 0.7 & 0.8 \end{pmatrix} \begin{pmatrix} 0.0997 \\ 0.2913 \end{pmatrix} = \begin{pmatrix} 0.1695 \\ 0.3889 \\ 0.6083 \\ 0.8277 \end{pmatrix} y1=Whyh1=(0.10.50.20.60.30.70.40.8)(0.09970.2913)= 0.16950.38890.60830.8277
预测值 y ^ 1 = softmax ( y 1 ) \hat{y}_1 = \text{softmax}(y_1) y^1=softmax(y1)
假设真实输出为 ‘e’,对应 one-hot 编码为 y 1 = [ 0 , 1 , 0 , 0 ] y_1 = [0, 1, 0, 0] y1=[0,1,0,0]。
交叉熵损失函数:
loss 1 = − ∑ i y 1 i log ( y ^ 1 i ) \text{loss}_1 = - \sum_{i} y_{1i} \log(\hat{y}_{1i}) loss1=−i∑y1ilog(y^1i)
梯度计算:
∂ loss 1 ∂ W h y = ( y ^ 1 − y 1 ) h 1 T \frac{\partial \text{loss}_1}{\partial W_{hy}} = (\hat{y}_1 - y_1) h_1^T ∂Why∂loss1=(y^1<