在训练较为复杂的RNN类型网络时,有时会采取正交方法初始化(orthogonal initialization)网络参数。本文用简单的例子介绍其中的原因。
本文较大程度参考了这篇博客。
简单例子
RNN具有如下形式:
h t = f h ( W ⋅ h t − 1 + V ⋅ x t ) h_t=f_h(W\cdot h_{t-1}+V\cdot x_t) ht=fh(W⋅ht−1+V⋅xt)
y t = f y ( U ⋅ h t ) y_t = f_y(U\cdot h_t) yt=fy(U⋅ht)
我们考虑一个极端简化的版本:没有输入,激活函数为直通,直接输出隐变量。
y t = W ⋅ y t − 1 y_t=W\cdot y_{t-1} yt=W⋅yt−1
计算第t步的输出时,需要计算参数矩阵的t次幂:
y t = W t ⋅ y 0 y_t=W^t\cdot y_0 yt=Wt⋅y0
为了计算简便,可以把方阵 W W W进行正交分解:
W = Q ⋅ Λ ⋅ Q − 1 W=Q\cdot\Lambda\cdot Q^{-1} W=Q⋅Λ⋅Q−1
y t = Q ⋅ Λ t ⋅ Q − 1 ⋅ y 0 y_t=Q\cdot \Lambda^t \cdot Q^{-1}\cdot y_0 yt=Q⋅Λt⋅Q−1⋅y0
其中 Q Q Q是单位正交矩阵; Λ \Lambda Λ是对角阵,计算其t次幂只需要把对角线上的特征值进行幂运算即可。
优化网络参数时,使用简单的二范数代价:
E = ∣ ∣ y t − y t ‾ ∣ ∣ 2 E=||y_t-\overline{y_t}||^2 E=∣∣yt−yt∣∣2
为了更新参数,需要计算代价对于参数的导数(是个标量):
∂ E ∂ W i = 2 ( y t − y t ‾ ) T ⋅ ∂ y t ∂ W i \frac{\partial E}{\partial W_{i}}=2(y_t-\overline{y_t})^T\cdot \frac{\partial y_t}{\partial W_i} ∂Wi∂E=2(yt