美文网首页
2019-04-30 Day9

2019-04-30 Day9

作者: BA蓬莱传说 | 来源:发表于2019-04-30 21:34 被阅读0次

Day 9

6.1 参数的更新

import numpy as np


class SGD(object):
    def __init__(self, lr=0.01):
        self.lr = lr

    def update(self, params, grads):
        for key in params.keys():
            params[key] -= self.lr * grads[key]


class Momentum(object):
    def __init__(self, lr=0.01, momentum=0.9):
        self.lr = lr
        self.momentum = momentum
        self.v = None

    def update(self, params, grads):
        if self.v is None:
            self.v = {}
            for key, val in params.items():
                self.v[key] = np.zeros_like(val)

        for key in params.keys():
            self.v[key] = self.momentum * self.v[key] - self.lr * grads[key]
            params[key] += self.v[key]


class AdaGrad(object):
    def __init__(self, lr=0.01):
        self.lr = lr
        self.h = None

    def update(self, params, grads):
        if self.h is None:
            self.h = {}
            for key, val in params.items():
                self.h[key] = np.zeros_like(val)

        for key in params.keys():
            self.h[key] += grads[key] ** 2
            params[key] -= self.lr * grads[key] / (np.sqrt(self.h[key]) + 1e-7)

6.2 权重初始值

6.2.1 权重初始化为0?

权值衰减是一种通过减小权重参数的值来抑制过拟合的方法。

不能将权重初始化为0,或者其他一样的值,因为这样会使权重具有对称结构,降低神经网络的表达能力。

6.2.2 隐藏层的激活值的分布

梯度消失:偏向0和1的数据分布会造成反向传播过程中梯度的值不断变小。

激活值的分布有所偏向,会降低神经网络的表达能力。

Xavier初始值:前一层的节点数为n,则初始值使用标准差为\frac{1}{\sqrt{n}}的分布。

6.2.3 ReLU的权重初始值

He初始值:两倍,即\frac{2}{\sqrt{n}}(何恺明牛逼!!!!!)

6.3 Batch Normalization

Batch Norm 将数据正规化,均值为0,方差为1

\mu_{b} := \frac{1}{m}\sum_{i=1}^{m}{x_{i}}
\sigma_{B}^{2} := \frac{1}{m}\sum_{i=1}^{m}{(x_i-\mu_b)}^2
x_i^{\hat{}} := \frac{x_i-\mu_B}{\sqrt{\sigma_B^2+\epsilon}}

将Batch Norm层插入到激活函数的前面或后面,减小数据分布的偏向。

然后Batch Norm层再对数据进行仿射变换(缩放和平移):
y_i := \gamma x_i^{\hat{}} + \beta

相关文章

网友评论

      本文标题:2019-04-30 Day9

      本文链接:https://www.haomeiwen.com/subject/lrebnqtx.html