深度学习笔记(8) 实践层面(三)

深度学习笔记(8) 实践层面(三)


1. 归一化 / 标准化输入

训练神经网络,特征必须要在0到1之间
此时就只能加速训练的方法就是归一化输入:

在这里插入图片描述
在使用正则化的情况下,必须使用标准化
在这里插入图片描述
因为不用正则时,损失函数只是仅仅在度量预测与真实的差距
加上正则后,损失函数除了要度量上面的差距外,还要度量参数值是否足够小
而参数值的大小程度或者说大小的级别是与特征的数值范围相关的

标准化需要两个步骤:零均值归一化方差
希望无论是训练集和测试集都是通过相同的

μ μ

μ

σ σ

σ2 定义的数据转换,这两个是由训练集得出来的

  • 零均值化:
    在这里插入图片描述
    它是一个向量,

x x

x 等于每个训练数据

x x
x 减去

μ μ

μ ,即移动训练集,直到完成零均值化

  • 归一化方差:
    在这里插入图片描述
    它也是一个向量,每个特征都有相似的方差,此时已零均值化,
  • x x

    x 2就是方差

    在这里插入图片描述
    归一化特征后直观理解是代价函数会更圆一些,而且更容易优化,前提是特征都在相似范围内,而不是从1到1000,0到1的范围,而是在-1到1范围内或相似偏差,这使得代价函数J优化起来更简单快速
    在这里插入图片描述
    如果假设特征x1范围在0-1之间,x2的范围在-1到1之间,x3范围在1-2之间,相似范围,所以也会表现得很好


    2. 权重初始化

    训练神经网络,尤其是深度神经所面临的一个问题就是梯度消失或梯度爆炸
    也就是导数或坡度有时会变得非常大,或者非常小,甚至于以指数方式变小,这加大了训练的难度

    假设所有权重矩阵都是1.5倍的单位矩阵,计算结果就是

    y ^ \hat{y}

    y^ ,也就是等于 1.5(L-1)

    x x

    x
    如果对于一个深度神经网络来说L值较大,那么

    y ^ \hat{y}

    y^ 的值也会非常大
    实际上呈指数级增长的,增长的比率是1.5L
    因此对于一个深度神经网络,y的值将爆炸式增长

    假设所有矩阵都是0.5倍的单位矩阵,计算结果就是

    y ^ \hat{y}

    y^
    也就是等于0.5L

    x x

    x ,激活函数的值将以指数级下降

    为了预防z值过大或过小,可以看到神经元的输入特征数量n越大,希望wi越小,因为z是wi xi的和
    如果把很多此类项相加,希望每项值更小,最合理的方法就是设置wi = 1 / n
    实际上,要做的就是设置某层权重矩阵w[l] = np.random.randn(shape) * np.sqrt(1 / n[l-1])
    n[l-1]就是喂给第

    l l

    l 层神经单元的数量(即第

    l l

    l -1层神经元数量)

    如果是用的是Relu激活函数,而不是1/n,方差设置为2/n,效果会更好
    其余的tanh函数等依然是 √(1/n[l-1])


    3. 梯度检验

    梯度检验(grad check)可以帮助调试节省了很多时间
    也可以帮助发现backprop实施过程中的bug

    但只用于调试
    假设

    h h

    hθ

    ( x ) (x)

    (x) =

    θ θ

    θ0 +

    θ θ

    θ1

    x x

    x1 +

    θ θ

    θ2

    x x

    x2 +

    θ θ

    θ3

    x x

    x3 + ⋯ +

    θ θ

    θn

    x x

    xn
    因为计算所有 i 值的权重导数

    d θ dθ

    dθapprox

    [ i ] [i]

    [i] 是一个非常漫长的计算过程,不能与dropout同时使用

    首先,要清楚

    J J

    J权重θ的一个函数,也可以将J函数展开为

    J J

    J123,……)
    不论权重θ的维度是多少,为了实施梯度检验,要做的就是循环执行
    从而对每个i也就是对每个θ组成元素计算

    d θ dθ

    dθapprox

    [ i ] [i]

    [i] 的值,使用双边误差,也就是
    在这里插入图片描述
    只对 θi 增加ε,ε的值很小,如0.01,其它项保持不变
    另一边一样,只不过是减去ε,θ其它项全都保持不变

    这个值(

    d θ dθ

    dθapprox

    [ i ] [i]

    [i] )应该逼近代价函数的偏导数

    d θ [ i ] dθ[i]

    dθ[i] = ∂J / ∂θi(注意代价添加正则项)需要验证
    计算这两个向量的距离,

    d θdθ

    dθapprox

    [ i ] [i]

    [i] -

    d θ [ i ]dθ[i]

    dθ[i] 的欧几里得范数,误差平方之和,然后求平方根,得到欧式距离在这里插入图片描述
    然后向量长度归一化,使用向量长度的欧几里得范数,分母用于预防这些向量太小或太大,使得方程式变成比率
    实际执行方程式时ε可能为10-7 ,如果发现计算的值为10-7 或更小,导数逼近很有可能是正确的
    在10-5 范围内,再次检查这个向量的所有项,查找不同的 i 值,确保没有一项误差过大
    在10-3 范围内,需要检查所有θ项


    想要降低预测误差,即提高预测精度,往往会采用这些手段:

    手段效果
    采集更多的样本错误的认为样本越多越好,其实数据多并不是越好
    降低特征维度可能去掉了有用的特征
    采集更多的特征增加了计算负担,也可能导致过拟合
    进行高次多项式回归过高的多项式可能造成过拟合
    调试正规化参数 λ,增大或者减少 λ增大或者减少都是凭感觉

    参考:

    《神经网络和深度学习》视频课程


    相关推荐:

    深度学习笔记(7) 实践层面(二)
    深度学习笔记(6) 实践层面(一)
    深度学习笔记(5) 深层神经网络
    深度学习笔记(4) 浅层神经网络
    深度学习笔记(3) 向量化逻辑回归


    谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值