神经网络里的low-rank

背景

假设M是一个m×n阶矩阵,其中的元素全部属于域K,也就是实数域或复数域。如此则存在一个分解使得

{\displaystyle M=U\Sigma V^{},\,} M = U \Sigma V^, \,
其中U是m×m阶酉矩阵;Σ是m×n阶非负实数对角矩阵;而V*,即V的共轭转置,是n×n阶酉矩阵。这样的分解就称作M的奇异值分解。Σ对角线上的元素Σi,i即为M的奇异值。

low rank约束

SVD 压 RNN 参数

A: 如果有一个 mn 的参数矩阵 W,改成 mr, r*n 的两个矩阵的乘积吗?这种方式我做过效果很差。

B: 数学上是这样没错,但是具体你是用在什么问题什么模型结构上?大致的构造和训练流程是怎么样的?这种方法在几个常见情况下挺好用的,调起来也没什么技巧,国内外很多企业都在实际产品里用很久了。

A: 用在机器翻译, attentional sequence to sequence model 上。就是把 GRU 内部所有权重矩阵分解开,比如 1k1k 的矩阵变成 1k200 和 200*1k 的矩阵,然后从头开始训练。

B:

SVD 压 embedding layer

网络结构约束

bootle-neck网络

ResNet中采用了这个策略。有点类似low-rank吧,SVD分解的思想?

U = S V D

RNN中是否也可采用这个策略?如何加?
方式一:同上,对RNN的参数加SVD约束。
方式二:

正交约束