训练小技巧

1、参数初始化

几种方式,结果差不多。但是一定要做。否则可能会减慢收敛速度,影响收敛结果,甚至造成Nan等一系列问题。

优秀的初始化应该使得各层的激活值和状态梯度的方差在传播过程中的方差保持一致。不然更新后的激活值方差发生改变,造成数据的不稳定。

Xavier初始化 :

W ∼ U [ − 6 n i + n i + 1 , 6 n i + n i + 1 ] W \sim U[-\frac{\sqrt{6}}{\sqrt{n_i + n_{i+1}}},\frac{\sqrt{6}}{\sqrt{n_i + n_{i+1}}}] WU[ni+ni+1 6 ,ni+ni+1 6 ]

  • 假设激活函数关于0对称,且主要针对于全连接神经网络。适用于tanh和sigmoid

He初始化

  • 条件:正向传播时,状态值的方差保持不变;反向传播时,关于激活值的梯度的方差保持不变。

  • 论文:https://arxiv.org/abs/1502.01852

  • 理论方法

    • 适用于ReLU的初始化方法:

    W ∼ U [ 0 , 2 n ^ i ] W \sim U[0,\sqrt{\frac{2}{\hat{n}_i}}] WU[0,n^i2 ]

    • 适用于Leaky ReLU的初始化方法:

    W ∼ U [ 0 , 2 ( 1 + α 2 ) n ^ i ] W \sim U[0,\sqrt{\frac{2}{(1+\alpha^2)\hat{n}_i}}] WU[0,(1+α2)n^i2 ]

    其中
    n ^ i = h i ∗ w i ∗ d i h i , w i 分 别 表 示 卷 积 层 中 卷 积 核 的 高 和 宽 d i 表 示 当 前 层 卷 积 核 的 个 数 \hat{n}_i = h_i * w_i * d_i \\ h_i,w_i分别表示卷积层中卷积核的高和宽 \\ d_i表示当前层卷积核的个数 n^i=hiwidihi,widi

具体方法

下面的n_in为网络的输入大小,n_out为网络的输出大小,n为n_in或(n_in+n_out)/2

  • uniform均匀分布初始化:

    w = np.random.uniform(low=-scale, high=scale, size=[n_in,n_out])
    
    • Xavier初始法,适用于普通激活函数(tanh,sigmoid):scale = np.sqrt(3/n)
    • He初始化,适用于ReLU:scale = np.sqrt(6/n)
  • normal高斯分布初始化:

    w = np.random.randn(n_in,n_out) * stdev # stdev为高斯分布的标准差,均值设为0
    
    • Xavier初始法,适用于普通激活函数 (tanh,sigmoid):stdev = np.sqrt(n)
    • He初始化,适用于ReLU:stdev = np.sqrt(2/n)
  • svd初始化:对RNN有比较好的效果。参考论文:https://arxiv.org/abs/1312.6120

技巧

正确初始化最后一层的权重。如果回归一些平均值为50的值,则将最终偏差初始化为50。如果有一个比例为1:10的不平衡数据集,请设置对数的偏差,使网络预测概率在初始化时为0.1。正确设置这些可以加速模型的收敛。

2、数据预处理方式

  • zero-center

    这个挺常用的.

    X -= np.mean(X, axis = 0)   # zero-center
    X /= np.std(X, axis = 0)    # normalize
    
  • PCA whitening

    这个用的比较少.

3、梯度裁剪

实现方法见**pytorch小操作**

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值