模型参数较多,学习能力强,但是在数据不足的情况下也容易造成过拟合。

常用的解决过拟合的办法有:

LayerNorm是Batch Normalization的一个变体,BN针对一个minibatch的输入样本,计算均值和方差,基于计算的均值和方差来对某一层神经网络的输入X中每一个case进行归一化操作。但BN有两个明显不足:1、高度依赖于mini-batch的大小,实际使用中会对mini-Batch大小进行约束,不适合类似在线学习(mini-batch为1)情况;2、不适用于RNN网络中normalize操作:BN实际使用时需要计算并且保存某一层神经网络mini-batch的均值和方差等统计信息,对于对一个固定深度的前向神经网络(DNN,CNN)使用BN,很方便;但对于RNN来说,sequence的长度是不一致的,换句话说RNN的深度不是固定的,不同的time-step需要保存不同的statics特征,可能存在一个特殊sequence比其的sequence长很多,这样training时,计算很麻烦。但LN可以有效解决上面这两个问题。LN中同层神经元输入拥有相同的均值和方差,不同的输入样本有不同的均值和方差;而BN中则针对不同神经元输入计算均值和方差,同一个minibatch中的输入拥有相同的均值和方差。因此,LN不依赖于mini-batch的大小和输入sequence的深度,因此可以用于bath-size为1和RNN中对边长的输入sequence的normalize操作。

参考深度学习加速器Layer Normalization-LN

神经网络里的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约束。
方式二:

正交约束

各种各样的卷积,卷积的设计

卷积

padding:

空洞卷积(atrous convolutions)又名扩张卷积(dilated convolutions)

transposed Convolutions)又名反卷积(deconvolution)

疑问:填充方式是怎样的?

Separable Convolution

Separable Convolution in Image Processing

$$ H = \begin{bmatrix}1 & 0 & -1 \ 2 & 0 & -2 \ 1 & 0 & -1 \end{bmatrix} = \begin{bmatrix}1 \ 2 \ -1 \end{bmatrix} * \begin{bmatrix}1 & 0 & -1 \end{bmatrix} $$

参考