zoukankan      html  css  js  c++  java
  • 调参

    一、训练集、验证集和测试集

    传统的机器学习的切分:【小数量,百、千、万】

    70%的训练集、30%的测试集

    60%的训练集、20%验证集和20%的测试集

    大数据时代:【百万、千万、亿】

    验证集的目的是验证不同的算法,检验哪种算法有效。

    百万:98%训练,1%验证,1%测试

    超过百万:99.5%训练,0.25%验证,0.25测试或者0.4、0.1做测试都可以

    比如:100万条数据,1万做验证集,1万做测试集,98万做训练集。

    经验法则:验证集和测试集同一分布。

    二、偏差和方差:

    三、防止过拟合的技术:正则化、early stopping、参数共享

    四、正则化:L2、Dropout(随机失活)

    正则化可以解决过拟合问题,因为比如加上一个  λ * L2【 ||W||2 】,如果λ过大,则 W趋向于0,则由一个深层神经网络变成一个浅层神经网络,会变成欠拟合状态。如果λ过小,则还是处于过拟合状态。如果适中,则问题解决。

    Dropout正则化:在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,使模型泛化性更强,因为它不会太依赖某些局部的特征。【消除某些节点】

    Dropout常用的方法:inverted dropout(反向随机失活)

    过程:

    (1)首先随机(临时)删掉网络中一半的隐藏神经元,输入输出神经元保持不变(图3中虚线为部分临时被删除的神经元)

    (2) 然后把输入x通过修改后的网络前向传播,然后把得到的损失结果通过修改的网络反向传。一小批训练样本执行完这个过程后,在没有被删除的神经元上按照随机梯度下降法更新对应的参数(w,b)。

    (3)然后继续重复这一过程:.

      恢复被删掉的神经元(此时被删除的神经元保持原样,而没有被删除的神经元已经有所更新).

      从隐藏层神经元中随机选择一个一半大小的子集临时删除掉(备份被删除神经元的参数)。.

       对一小批训练样本,先前向传播然后反向传播损失并根据随机梯度下降法更新参数(w,b) (没有被删除的那一部分参数得到更新,删除的神经元参数保持被删除前的结果)。

    (1)训练阶段采用dropout:

    上面公式中Bernoulli函数是为了生成概率r向量,也就是随机生成一个0、1的向量。

    代码层面实现让某个神经元以概率p停止工作,其实就是让它的激活函数值以概率p变为0。

    比如我们某一层网络神经元的个数为1000个,其激活函数输出值为y1、y2、y3、......、y1000,我们dropout比率选择0.4,那么这一层神经元经过dropout后,1000个神经元中会有大约400个的值被置为0。

    注意: 经过上面屏蔽掉某些神经元,使其激活值为0以后,我们还需要对向量y1……y1000进行缩放,也就是乘以1/(1-p)。如果你在训练的时候,经过置0后,没有对y1……y1000进行缩放(rescale),那么在测试的时候,就需要对权重进行缩放,操作如下。

     (2)在测试模型阶段

    预测模型的时候,每一个神经单元的权重参数要乘以概率p。

     测试阶段Dropout公式:

    因为我们训练的时候会随机的丢弃一些神经元,但是预测的时候就没办法随机丢弃了。如果丢弃一些神经元,这会带来结果不稳定的问题,也就是给定一个测试数据,有时候输出a有时候输出b,结果不稳定,这是实际系统不能接受的,用户可能认为模型预测不准。
    那么一种”补偿“的方案就是每个神经元的权重都乘以一个p,这样在“总体上”使得测试数据和训练数据是大致一样的。
    比如一个神经元的输出是x,那么在训练的时候它有p的概率参与训练,(1-p)的概率丢弃,那么它输出的期望是px+(1-p)0=px。因此测试的时候把这个神经元的权重乘以p可以得到同样的期望。

     

    五、梯度消失和梯度爆炸

    W>1,W1*W2*……*Wn爆炸

    W<1,W1*W2*……*Wn消失,趋向于0

  • 相关阅读:
    97. Interleaving String
    96. Unique Binary Search Trees
    95. Unique Binary Search Trees II
    94. Binary Tree Inorder Traversal
    odoo many2many字段 指定打开的form视图
    docker sentry 配置文件位置
    postgres 计算时差
    postgres 字符操作补位,字符切割
    postgres判断字符串是否为时间,数字
    odoo fields_view_get
  • 原文地址:https://www.cnblogs.com/Lee-yl/p/10012103.html
Copyright © 2011-2022 走看看