learning rate

1.learning rate 是调参的重要一项。过大,会造成跳过了极值点、找不到极值点、在极值点附近徘徊。以y=x^2,x=5为例,learning rate 设为1,则无论多少轮迭代,值都不会下降。一直在x=5,-5徘徊。而learning rate 过小效率极低。收敛时间过长。

2.tf提供tf.train.expontntial_decay(lr,global_step,epoch_size,decay_rate,staircase)可以指数级减小学习率。 lr=lr*decay_rate^(global/epoch_size)

3.另一个技巧是,在每次迭代的最后,使用估计的模型参数检查误差函数(error function)的值。如果相对于上一次迭代,错误率减少了,就可以增大学习率,以5%的幅度;如果相对于上一次迭代,错误率增大了(意味着跳过了最优值),那么应该重新设置上一轮迭代ωj 的值,并且减少学习率到之前的50%。http://www.willamette.edu/~gorr/classes/cs449/momrate.html有相关介绍

从文件读学习率模块:

def get_learning_rate_from_file(filename, epoch):#设置学习率方法
    with open(filename, 'r') as f:
        for line in f.readlines():
            line = line.split('#', 1)[0]
            if line:
                par = line.strip().split(':')
                e = int(par[0])
                lr = float(par[1])
                if e <= epoch:
                    learning_rate = lr
                else:
                    return learning_rate

由此可以设定epoch区间的学习率

4.batch_size与learning rate 的问题

根据我们选择的成本函数F()不同,问题会有区别。当平方误差和(Sum of Squared Errors)作为成本函数时, ∂F(ωj) / ∂ωj 会随着训练集数据的增多变得越来越大,因此学习率需要被设定在相应更小的值上。

解决此类问题的一个方法是将学习率λ 乘上1/N,N是训练集中数据量。这样每部更新的公式变成下面的形式:

ωj = ωj - (λ/N) * ∂F(ωj) / ∂ωj

相关内容可参考: Wilson et al. paper “The general inefficiency of batch training for gradient descent learning

另外一种解决方法是:选择一个不被训练集样本个数影响的成本函数,如均值平方差(Mean Squared Errors)

5.

归一化输入向量在机器学习问题中是一个通用的方法。在一些应用中,由于使用距离或者特征方差,要求必须归一化输入向量,因为如果不归一化将导致结果会严重被具有大方差的特征和不同的尺度影响。归一化输入能够帮助数值最优方法(例如,梯度下降法)更快,更准确地收敛。

尽管有一些不同的归一化变量的方法,[0,1]归一化(也叫做min-max)和z-score归一化是两种最为广泛应用的。

 

XminmaxNorm = (X - min(X)) / (max(X) - min(X));

XzscoreNorm = (X - mean(X)) / std(X);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值