小识 神经网络的初始化

搞懂深度网络初始化(Xavier and Kaiming initialization) 参数初始化就是这么一个容易被忽视的重要因素,因为不仅使用者对其重要性缺乏概念,而且这些操作都被TF、pytorch这些框架封装了,你可能不知道的是,糟糕的参数初始化是会阻碍复杂非线性系统的训练的。 本文以MNIST手写体数字识别模型为例来演示参数初始化对模型训练的影响。点击这里查看源码。 Xavier Initialization 早期的参数初始化方法普遍是将... 阅读详情

如有转载,请标明出处

初始化的原因

对于一个神经网络而言,我们自然希望它是鲁棒的。也就是说,对于任何一个初始化的点,我们都能得到比较好的收敛结果。不幸的是,几乎所有的网络都是非凸的,不同的初始化得到的结果可能大相径庭。

而且,如果权重初始化的方差过大或过小,可能会导致梯度爆炸或梯度弥散的问题,从而无法收敛。

因此,合适的权重初始化就尤为重要。

目前存在以下几种初始化策略:

  • Constant Initialization
  • Xavier Initialization
  • Kaiming Initialization

Constant Initialization

一般来说,就是将权重设置为全0的矩阵。通常来讲,这样效果不好。因为这意味着所有的单元初始化为完全相同的状态,会导致同层的每个神经元的前向与反向传播存在某种对称关系甚至完全相同,这样的话,同层的神经元就学不到更多的信息,致使其效果不佳。

Xavier Initialization

除却常数初始化外,还有将参数初始化为 W ∼ N ( 0 , 1 ) W \sim N(0,1) W∼N(0,1) ,但随着神经网络深度的增加,此方法不能解决梯度消失的问题。如下图所示:
请添加图片描述

为了解决上述问题,Xavier的作者提出一种使方差在传播时保持不变的方案。

如前文所述,其理论是在全连接层的情况下,那么,有:
Y = W X + B Y = WX+B Y=WX+B

前向计算

需要满足: v a r ( Y ) = v a r ( X ) var(Y)=var(X) var(Y)=var(X)

假设权重数值之间是独立同分布的, X X X 数值之间也是独立同分布的, 且 X X X和权重相互独立。且bias为0,W满足均值为0 的某种高斯分布。

那么有:
在这里插入图片描述

其中, d d d 是 输入向量的维度。若要实现 V a r ( Y i ) = V a r ( X j ) Var(Y_i)=Var(X_j) Var(Yi​)=Var(Xj​),则必须满足 d × V a r ( W i j ) = 1 d\times Var(W_{ij})=1 d×Var(Wij​)=1 ,即: V a r ( W i j ) = 1 d Var(W_{ij})=\frac{1}{d} Var(Wij​)=d1​ ,进一步得出初始化方式:

  • 若 W i j W_{ij} Wij​服从正态分布,则 W i j ∼ N o r m a l ( 0 , 1 d ) W_{ij}\sim Normal(0,\frac{1}{d}) Wij​∼Normal(0,d1​);
  • 若 W i j W_{ij} Wij​服从均匀分布,则 W i j ∼ U n i f o r m ( − 3 d , 3 d ) W_{ij}\sim Uniform(-\sqrt{\frac{3}{d}},\sqrt{\frac{3}{d}}) Wij​∼Uniform(−d3​ ​,d3​ ​);

后向计算

△ X = W T △ Y \bigtriangleup X=W^T\bigtriangleup Y △X=WT△Y

其中, w ∈ R u × d w\in \mathbb{R}^{u\times d} w∈Ru×d, △ y ∈ R u \bigtriangleup y\in \mathbb{R}^u △y∈Ru, △ x ∈ R d \bigtriangleup x\in \mathbb{R}^d △x∈Rd。

若要做到后向计算信号强度不变,就需要满足: V a r ( △ X j ) = V a r ( △ Y i ) Var(\bigtriangleup X_j)=Var(\bigtriangleup Y_i) Var(△Xj​)=Var(△Yi​)。

同样的道理,我们有 u × V a r ( W i j ) = 1 u\times Var(W_{ij})=1 u×Var(Wij​)=1,即 V a r ( W i j ) = 1 u Var(W_{ij})=\frac{1}{u} Var(Wij​)=u1​,那么其初始化方式为:

  • 若 W i j W_{ij} Wij​服从正态分布,则 W i j ∼ N o r m a l ( 0 , 1 u ) W_{ij}\sim Normal(0,\frac{1}{u}) Wij​∼Normal(0,u1​);
  • 若 W i j W_{ij} Wij​服从均匀分布,则 W i j ∼ U n i f o r m ( − 3 u , 3 u ) W_{ij}\sim Uniform(-\sqrt{\frac{3}{u}},\sqrt{\frac{3}{u}}) Wij​∼Uniform(−u3​ ​,u3​ ​);

调和平均

根据上面的推导可以看出,除非 d = u d=u d=u,否则我们无法同时保证前后向信号的Variance不发生变化,所以原论文中对 V a r ( W i j Var(W_{ij} Var(Wij​取了一个调和平均数: V a r ( W j i ) = 2 d + u Var(W_{ji})=\frac{2}{d+u} Var(Wji​)=d+u2​,进一步得到模型初始化方式:

  • 若 W i j W_{ij} Wij​服从正态分布,则 W i j ∼ N o r m a l ( 0 , 2 d + u ) W_{ij}\sim Normal(0,\frac{2}{d+u}) Wij​∼Normal(0,d+u2​);
  • 若 W i j W_{ij} Wij​服从均匀分布,则 W i j ∼ U n i f o r m ( − 6 d + u , 6 d + u ) W_{ij}\sim Uniform(-\sqrt{\frac{6}{d+u}},\sqrt{\frac{6}{d+u}}) Wij​∼Uniform(−d+u6​ ​,d+u6​ ​);

缺陷

Xavier初始化的问题在于,其初始化的假设中没有激活函数。但实际上,激活函数是深度神经网络中不可或缺的一部分,而Xavier初始化的结果经过ReLU后结果发生了偏移,因此,何凯明大神提出了Kaiming初始化。

Kaiming Initialization

torch.nn.init中封装了Kaiming初始化。

torch.nn.init.kaiming_uniform_(tensor, a=0, mode=‘fan_in’, nonlinearity=‘leaky_relu’)

Fills the input Tensor with values according to the method described in Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification - He, K. et al. (2015), using a uniform distribution. The resulting tensor will have values sampled from $\mathcal{U}(-\text{bound}, \text{bound}) $ where
b o u n d = g a i n × 3 f a n _ m o d e bound = gain \times \sqrt{\frac{3}{fan\_mode}} bound=gain×fan_mode3​ ​
torch.nn.init.``kaiming_normal_(tensor, a=0, mode=‘fan_in’, nonlinearity=‘leaky_relu’)

Fills the input Tensor with values according to the method described in Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification - He, K. et al. (2015), using a normal distribution. The resulting tensor will have values sampled from N ( 0 , s t d 2 ) N(0,std^2) N(0,std2) where
s t d = g a i n f a n _ m o d e std = \frac {gain}{fan\_mode} std=fan_modegain​

方差的计算需要两个值:gain 和 fan。 gain 值由激活函数决定. fan 值由权重参数的数量和传播的方向决定. fan_in 表示前向传播, fan_out 表示反向传播。

来点源码调节一下心情。

# 根据网络设计时卷积权重的形状和前向传播还是反向传播, 进行 fan 值的计算。
def _calculate_fan_in_and_fan_out(tensor):
    dimensions = tensor.dim() # 返回的是维度
    if dimensions < 2:
        raise ValueError("Fan in and fan out can not be computed for tensor with fewer than 2 dimensions")
    if dimensions == 2:  # Linear
        fan_in = tensor.size(1) 
        fan_out = tensor.size(0)
    else:
        num_input_fmaps = tensor.size(1) # 卷积的输入通道大小
        num_output_fmaps = tensor.size(0) # 卷积的输出通道大小
        receptive_field_size = 1
        if tensor.dim() > 2:
            receptive_field_size = tensor[0][0].numel() # 卷积核的大小:k*k
        fan_in = num_input_fmaps * receptive_field_size # 输入通道数量*卷积核的大小. 用于前向传播
        fan_out = num_output_fmaps * receptive_field_size # 输出通道数量*卷积核的大小. 用于反向传播

    return fan_in, fan_out

def _calculate_correct_fan(tensor, mode):
    mode = mode.lower()
    valid_modes = ['fan_in', 'fan_out']
    if mode not in valid_modes:
        raise ValueError("Mode {} not supported, please use one of {}".format(mode, valid_modes))

    fan_in, fan_out = _calculate_fan_in_and_fan_out(tensor)
    return fan_in if mode == 'fan_in' else fan_out
def calculate_gain(nonlinearity, param=None):
    r"""Return the recommended gain value for the given nonlinearity function.
    The values are as follows:

    ================= ====================================================
    nonlinearity      gain
    ================= ====================================================
    Linear / Identity :math:`1`
    Conv{1,2,3}D      :math:`1`
    Sigmoid           :math:`1`
    Tanh              :math:`\frac{5}{3}`
    ReLU              :math:`\sqrt{2}`
    Leaky Relu        :math:`\sqrt{\frac{2}{1 + \text{negative\_slope}^2}}`
    ================= ====================================================

    Args:
        nonlinearity: the non-linear function (`nn.functional` name)
        param: optional parameter for the non-linear function

    Examples:
        >>> gain = nn.init.calculate_gain('leaky_relu', 0.2)  # leaky_relu with negative_slope=0.2
    """
    linear_fns = ['linear', 'conv1d', 'conv2d', 'conv3d', 'conv_transpose1d', 'conv_transpose2d', 'conv_transpose3d']
    if nonlinearity in linear_fns or nonlinearity == 'sigmoid':
        return 1
    elif nonlinearity == 'tanh':
        return 5.0 / 3
    elif nonlinearity == 'relu':
        return math.sqrt(2.0)
    elif nonlinearity == 'leaky_relu':
        if param is None:
            negative_slope = 0.01
        elif not isinstance(param, bool) and isinstance(param, int) or isinstance(param, float):
            # True/False are instances of int, hence check above
            negative_slope = param
        else:
            raise ValueError("negative_slope {} not a valid number".format(param))
        return math.sqrt(2.0 / (1 + negative_slope ** 2))
    else:
        raise ValueError("Unsupported nonlinearity {}".format(nonlinearity))

回到正题,现在我们一起来研究一下Kaiming初始化的推导过程。

推导

kaiming 初始化的推导过程只包含卷积和 ReLU 激活函数, 默认是 vgg 类似的网络, 没有残差, concat 之类的结构, 也没有 BN 层.
Y l = W l X l + B l Y_l = W_lX_l+B_l Yl​=Wl​Xl​+Bl​

前向传播

v a r ( y l ) = n l v a r ( w l x l ) var(y_l) = n_l var(w_l x_l) var(yl​)=nl​var(wl​xl​)

由于, w l , x l w_l, x_l wl​,xl​相互独立,有:

v a r ( y l ) = n l [ v a r ( w l ) v a r ( x l ) + v a r ( w l ) ( E x l ) 2 + ( E w l ) 2 v a r ( x l ) ] var(y_l)=n_l[var(w_l)var(x_l)+var(w_l)(Ex_l)^2+(Ew_l)^2var(x_l)] var(yl​)=nl​[var(wl​)var(xl​)+var(wl​)(Exl​)2+(Ewl​)2var(xl​)]

初始化的时候令权重的均值是 0, 且假设更新的过程中权重的均值一直是 0, 那么有 E ( w l ) = 0 E(w_l)=0 E(wl​)=0,但是 x l x_l xl​经过了ReLU,所以有:

v a r ( y l ) = n l [ v a r ( w l ) v a r ( x l ) + v a r ( w l ) ( E x l ) 2 ] = n l v a r ( w l ) ( v a r ( x l ) + ( E x l ) 2 ) var(y_l)=n_l[var(w_l)var(x_l)+var(w_l)(Ex_l)^2]=n_lvar(w_l)(var(x_l)+(Ex_l)^2) var(yl​)=nl​[var(wl​)var(xl​)+var(wl​)(Exl​)2]=nl​var(wl​)(var(xl​)+(Exl​)2)

由于: v a r ( X ) = E ( X 2 ) − ( E X ) 2 var(X)=E(X^2)-(EX)^2 var(X)=E(X2)−(EX)2

那么有: v a r ( y l ) = n l v a r ( w l ) E ( x l 2 ) var(y_l)=n_lvar(w_l)E(x^2_l) var(yl​)=nl​var(wl​)E(xl2​)

通过第l-1层的输出来计算该期望,我们有 x l = f ( y l − 1 ) x_l=f(y_{l-1}) xl​=f(yl−1​),其中f是relu
E ( x l 2 ) = E ( f 2 ( y l − 1 ) ) = ∫ − ∞ + ∞ p ( y l − 1 ) f 2 ( y l − 1 ) d y l − 1 E(x^2_l)=E(f^2(y_{l-1}))=\int_{- \infty}^{+ \infty} p(y_{l-1})f^2(y_{l-1})dy_{l-1} E(xl2​)=E(f2(yl−1​))=∫−∞+∞​p(yl−1​)f2(yl−1​)dyl−1​

由于relu的特性,我们可得:

E ( x l 2 ) = E ( f 2 ( y l − 1 ) ) = ∫ 0 + ∞ p ( y l − 1 ) ( y l − 1 ) 2 d y l − 1 E(x^2_l)=E(f^2(y_{l-1}))=\int_{0}^{+ \infty} p(y_{l-1})(y_{l-1})^2dy_{l-1} E(xl2​)=E(f2(yl−1​))=∫0+∞​p(yl−1​)(yl−1​)2dyl−1​

现因 w l − 1 w_{l−1} wl−1​ 是假设在 0 周围对称分布且均值为 0, 所以 y l − 1 y_{l-1} yl−1​ 也是在 0 附近分布是对称的, 并且均值为 0(此处假设偏置为 0

E ( x l 2 ) = E ( f 2 ( y l − 1 ) ) = 1 2 ( ∫ 0 + ∞ p ( y l − 1 ) ( y l − 1 ) 2 d y l − 1 + ∫ − ∞ 0 p ( y l − 1 ) ( y l − 1 ) 2 d y l − 1 ) = 1 2 ∫ − ∞ + ∞ p ( y l − 1 ) ( y l − 1 ) 2 d y l − 1 = 1 2 E ( y l − 1 2 ) E(x^2_l)=E(f^2(y_{l-1}))=\frac{1}{2}(\int_{0}^{+ \infty} p(y_{l-1})(y_{l-1})^2dy_{l-1}+\int_{- \infty}^{0} p(y_{l-1})(y_{l-1})^2dy_{l-1})=\frac{1}{2} \int_{- \infty}^{+ \infty}p(y_{l-1})(y_{l-1})^2dy_{l-1}=\frac{1}{2}E(y^2_{l-1}) E(xl2​)=E(f2(yl−1​))=21​(∫0+∞​p(yl−1​)(yl−1​)2dyl−1​+∫−∞0​p(yl−1​)(yl−1​)2dyl−1​)=21​∫−∞+∞​p(yl−1​)(yl−1​)2dyl−1​=21​E(yl−12​)
又 E ( y l − 1 ) = 0 E(y_{l-1})=0 E(yl−1​)=0,有:

E ( x l 2 ) = 1 2 E ( y l − 1 2 ) = 1 2 v a r ( y l − 1 ) E(x^2_l)=\frac{1}{2}E(y^2_{l-1})=\frac{1}{2}var(y_{l-1}) E(xl2​)=21​E(yl−12​)=21​var(yl−1​)

带入原式,我们有:

v a r ( y l ) = 1 2 n l v a r ( w l ) v a r ( y l − 1 ) var(y_{l})=\frac{1}{2}n_lvar(w_{l})var(y_{l-1}) var(yl​)=21​nl​var(wl​)var(yl−1​)

易知:

v a r ( y l ) = v a r ( y 1 ) ( ∏ i = 0 L 1 2 n l v a r ( w l ) ) var(y_{l})=var(y_{1})(\displaystyle\prod_{i=0}^L\frac{1}{2}n_lvar(w_l)) var(yl​)=var(y1​)(i=0∏L​21​nl​var(wl​))

为了让每层的方差相同,则有:

1 2 n l v a r ( w l ) = 1 \frac{1}{2}n_lvar(w_l)=1 21​nl​var(wl​)=1
v a r ( w l ) = 2 n l var(w_l)=\frac{2}{n_l} var(wl​)=nl​2​

得到如下结论:

  • W i , j ∼ N ( 0 , 2 n l ) W_{i,j} \sim N(0,\frac{2}{n_l}) Wi,j​∼N(0,nl​2​) Or

  • W i , j ∼ U ( − 6 n l , 6 n l ) W_{i,j} \sim U(-\sqrt{\frac{6}{n_l}},\sqrt{\frac{6}{n_l}}) Wi,j​∼U(−nl​6​ ​,nl​6​ ​)

反向传播

后向传播与前向传播的推导过程类似,这里就不赘述。

得到如下结论:

  • W i , j ∼ N ( 0 , 2 n l + 1 ) W_{i,j} \sim N(0,\frac{2}{n_{l+1}}) Wi,j​∼N(0,nl+1​2​) Or
  • W i , j ∼ U ( − 6 n l + 1 , 6 n l + 1 ) W_{i,j} \sim U(-\sqrt{\frac{6}{n_{l+1}}},\sqrt{\frac{6}{n_{l+1}}}) Wi,j​∼U(−nl+1​6​ ​,nl+1​6​ ​)

参考文献

Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification

Understanding the difficulty of training deep feedforward neural networks

深度学习- 2.10 Xavier方法与kaiming方法(HE初始化) 尽管Xavier初始化能够在Sigmoid和tanh激活函数叠加的神经网络中起到一定的效果,但由于ReLU激活函数属于非饱和类激活函数,并不会出现类似Sigmoid和tanh激活函数使用过程中可能存在的梯度消失或梯度爆炸问题,反而因为ReLU激活函数的不饱和特性,ReLU激活函数的叠加极有可能出现神经元活性消失的问题,很明显,该类问题无法通过Xavier初始化解决。对于参数初始化计算过程,最重要的是确定参数的方差,如果是正态分布,由于均值是0,因此可以快速确定其分布,而如果是均匀分布,则可通过。 阅读详情

相关推荐

神经网络权重的初始化

当你训练神经网络时,权重随机初始化是很重要的。对于逻辑回归,把权重初始化为 0,当然也是可以的。 但是对于一个神经网络,如果你把权重或者参数都初始化为 0,那么梯度下降将不会起作用。 1.权重初始化的重要性 神经网络的训练过程中的参数学习时基于梯度下降算法进行优化的。梯度下降法需要在开始训练时给每个参数赋予一个初始值。这个初始值的选取十分重要。在神经网络的训练中如果将权重全部初始化为0,则第一遍前向传播过程中,所有隐藏层神经元的激活函数值都相同,导致深层神经元可有可无,这一现象称为对称权重现象。 .

3358

深度学习参数初始化(二)Kaiming初始化 含代码

Xavier初始化在ReLU层表现不好,主要原因是relu层会将负数映射到0,影响整体方差。而且Xavier初始化方法适用的激活函数有限:要求关于0对称;线性。而ReLU激活函数并不满足这些条件,实验也可以验证Xavier初始化确实不适用于ReLU激活函数。所以何恺明在对此做了改进,提出Kaiming初始化,一开始主要应用于计算机视觉、卷积网络。...

xian0710830114的专栏 3万+

神经网络参数的各种初始化算法

本文所采用的数据集为UCI 鲍鱼年龄预测数据集,网络模型为8层的全连接神经网络。 1. 实验步骤: a. 基于不同的权重初始化方式初始化各层权重; b. 以直方图的形式查看每层输入给激活函数(线性运算后)的数据分布; 2. 正态分布初始化权重 a. 权重更新 weight = np.random.randn(in_node, out_node) 使用默认的均值和方差 b. 实...

attitude_yu 4848

深度学习初始化Xavier、Kaiming

深度学习初始化Xavier和Kaiming初始化,He初始化

Leafing_的博客 2511

神经网络的权重初始化,神经网络的权值和阈值

神经网络的权值是通过对网络的训练得到的。这种方式有一个问题,就是有时一个神经元的初始权值输入向量太远,以至于它从未在竞争中获胜,因而也从未得到学习,这将形成毫无用处的“死”神经元。汉语中,“网络”一词最早用于电学《现代汉语词典》(1993年版)做出这样的解释:“在电的系统中,由若干元件组成的用来使电信号按一定要求传输的电路或这种电路的部分,叫网络。4、在命令行窗口按回车键之后,可以看到出现结果弹窗,最上面的Neural Network下面依次代表的是“输入、隐含层、输出层、输出”,隐含层中有5个神经元。

wenangou的博客 3296

Chrome红页误报?手把手教你通过Search Console快速解除安全警告

本文详细解析了Chrome红页误报的常见原因及解决方案,重点介绍如何通过Google Search Console快速解除安全警告。内容涵盖误报诊断、技术修复、申诉技巧及长效预防措施,帮助网站管理员有效应对Google Safe Browsing的误判问题,确保网站安全状态快速恢复。

a1b2c的博客 995

『参数初始化』开局一个神经网络,初始值全靠随机

一文介绍参数初始化的各种讲究以及常用参数初始化方法,以及其在PyTorch中的应用。

Hoshino Ren的博客 2248

避开PSRR仿真三大坑:用Cadence psspxf分析分频器时,这些设置错了白忙活

本文深入探讨了使用Cadence psspxf工具进行分频器PSRR仿真时常见的三大技术陷阱,包括扰动信号参数设置、收敛性优化和后处理信号提取。通过详细的参数推荐和实战技巧,帮助工程师避免仿真误差,提升PSRR分析效率与准确性,特别适用于16分频器等数字-模拟混合电路设计。

weixin_29258297的博客 301

神经网络参数初始化总结分析

神经网络的参数主要是权重(weights):W, 和偏置项(bias):b。 训练神经网络的时候需先给定一个初试值,才能够训练,然后一点点地更新,但是不同的初始化方法,训练的效果可能会截然不同。 目录 1、全0初始化 2、全相同参数初始化 3、正态分布随机初始化 1)使用较小的随机值初始化 2)使用较大的随机值初始化 3)选择合适的随机值进行初始化 4)讨论 5、X...

weixin_42521239的博客 6133

LIN 协议测试

如下图,使用PicoScope示波器抓取报文Id为0x18的波形,数据场Byte1的长度为519.994μs,Byte1共10bit,计算位时间:tBit= 519.994/10 = 51.9994μs,符合预期。■ 唤醒信号是一个250μs到5ms的显性电平,发送唤醒信号的节点发送唤醒信号后150ms~250ms没有收到其他节点的唤醒信号,发送唤醒信号的节点发送新的唤醒信号。对于LIN主节点,检查发送的帧头长度是否符合设计要求,对于LIN从节点,检查从节点能否正确响应设计范围之内的帧头长度。

m0_63902994的博客 5934

手把手讲解RTX5操作系统在GD32F407上的移植

然后将GD32F4xx_Demo_Suites_V2.6.4\GD32407V_START_Demo_Suites\Projects\01_GPIO_Running_LED下面的main函数复制到我们的项目文件夹中;打开对应GD32407V_START_Demo_Suites的文件夹下面的Utilities,复制gd32f407v_start.c和gd32f407v_start.h文件到一开始项目保存的文件夹下面;为了验证我们的操作系统是否被正确添加,是否能够正确运行,我们需要添加示例文件;

Praguejing的博客 1862

神经网络权重初始化

在我们真正开始训练网络之前,我们必须要知道如何去初始化神经网络的参数。 陷阱: 都初始化为0。 首先介绍一下我们不应该做的事情(即初始化为0)。需要注意的是我们并不知道在训练神经网络中每一个权重最后的值,但是如果进行了恰当的数据归一化后,我们可以有理由认为有一半的权重是正的,另一半是负的。令所有权重都初始化为0这个一个听起来还蛮合理的想法也许是一个我们假设中最好的一个假设了。但...

知识搬运工的博客 7839

mysql 计算不同胜率的活跃玩家的次日,3日,7日留存率

它根据每天的日期(logymd)和最高段位(max_rank)、胜率段落(win_rate_segment)进行分组,并计算总玩家人数(total_players)、第二天的留存人数(next_day_players)、第三天的留存人数(day3_players)和第七天的留存人数(day7_players)。注意:不是新手留存,是段位活跃玩家留存;最终的结果则是将留存数据进行展示,按照日期(date)、最高段位(rank_level)、胜率段落(win_rate_segment)进行排序。

weixin_42698221的博客 1836

神经网络参数初始化

神经网络的参数有权重(weights)W和偏置(bias)b。训练神经网络,需要先给网络参数W和b赋初始值,然后经过前向传播和后向传播,迭代更新W和b。这些参数的初始值对于神经网络收敛的速度及神经网络的准确率有很大影响。那么,应该怎么初始化这些参数呢? 不能采用的方法 全0初始化 这部分会从神经网络前向传播及后向传播的角度进行分析,不熟悉前向传播和后向传播的朋友,可以参考我的另一篇博客:神经网络的前向传播和反向传播 假设神经网络有一个输入层、隐层、输出层,如下: ...

u010505915的博客 6188

Multisim 14.0元件库下载完整指南:从安装到配置

详细介绍Multisim 14.0版本的元件库下载方法,涵盖安装步骤与后续配置流程,帮助用户快速搭建仿真环境。内容覆盖常见问题及解决方案,让multisim元件库下载更高效、稳定。

weixin_34511754的博客 1935

YOLOv11 改进 - 特征融合 | RepGFPN重参数化特征金字塔网络 ,实现高效多尺度特征交互与融合

本文介绍了DAMO - YOLO目标检测方法及其相关技术在YOLOv11中的结合。DAMO - YOLO扩展了多项新技术,如MAE - NAS搜索检测主干网络、Efficient - RepGFPN构建检测neck等。在neck设计上,针对原始GFPN存在的问题,提出Efficient - RepGFPN,包括对不同尺度特征使用不同通道数、删除Queen - Fusion中额外上采样操作、改进特征融合方式等。我们将相关模块集成进YOLOv11,替换部分模块。

魔改工程师的博客 936

神经网络的初始化方式都有哪些?

本文详细介绍了几种常见且有效的神经网络权重初始化方法。

学习与分享人工智能技术 1926

【漏洞复现】Apache Tomcat远程代码执行漏洞(CVE-2024-56337)

CVE-2024-56337是一个存在于Apache Tomcat中的TOCTOU(Time-of-Check Time-of-Use)竞争条件漏洞。此漏洞源于对先前漏洞(CVE-2024-50379)的不完整修复。若默认servlet是可写的(参数readonly设置值为false,该设置为非默认设置)表示不区分大小写文件系统,在负载下并发读取和上传同一文件可以绕过Tomcat的大小写检查。攻击者可以通过构造恶意请求上传含恶意JSP代码的文件,使其触发解析并执行这些文件,从而导致远程代码执行。

李同學AI安全 3196

神经网络参数初始化方法

文章目录过大或者过小的初始化1. 所有的参数初始化为0或者相同的常数2. 随机初始化3. Batch Normalization4. Xavier限制均匀分布正态分布5. MSRA正态分布均匀分布总结及使用的概率公式 神经网络模型一般依靠随机梯度下降进行模型训练和参数更新,网络的最终性能与收敛得到的最优解直接相关,而收敛结果实际上又很大程度取决于网络参数的最开始的初始化。理想的网络参数初始化使模型...

知行合一,止于至善 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

深度学习神经网络中权重的初始化

目录 目录 前言 模型函数 零初始化 随机初始化 He初始化 总结 参考资料 前言 良好的初始化权重有以下的好处: 加快梯度下降的收敛速度 增加梯度下降收敛到较低训练(和泛化)错误的几率 所以一个良好的初始化也是非常重要的,这里尝试三种初始化化方式: 零初始化,将权重参数初始化为零。 随机初始化,使用随机的方式,初始化权重参数。 He初始化,这个公式的初始化方式。...

夜雨飘零 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

神经网络:参数初始化

零初始化是将神经网络中所有权重参数设置为0的初始化方法。这意味着在训练的开始阶段,每个神经元的输出是相同的,且没有任何有效的学习信号。随机初始化是为神经网络的权重赋予较小的随机值,而不是使用零或常数。这种方法帮助打破神经元之间的对称性,从而使得神经网络能够更有效地学习。Xavier 初始化,又称为 Glorot 初始化,是一种用于神经网络的权重初始化方法,由 Xavier Glorot 和 Yoshua Bengio 在 2010 年提出。

Wei_sx的博客 1139

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

神经网络中权值初始化的方法

权值初始化的方法主要有:常量初始化(constant)、高斯分布初始化(gaussian)、positive_unitball初始化、均匀分布初始化(uniform)、xavier初始化、msra初始化、双线性初始化(bilinear) 常量初始化(constant)        把权值或着偏置初始化为一个常数,具体是什么常数,可以自己定义 高斯分布

竹馨shine的专栏 1万+

神经网络的参数初始化【数学】

神经网络参数初始化方式的数学公式

逐梦苍穹的博客 1316

PyTorch —— 神经网络权重初始化

权重初始化 神经网络从错误中学习,但是错误要能够被定位到。如果不能定位到错误那么就无法改正。 对于神经网络中的参数来说,如果所有参数全部一样(比如初始化为全0),那么就面临一个问题:梯度往哪里下降是最快呢?? 看一个例子 神经网络很难判断哪些权重需要更改,因为每个层级的神经元输出是一样的。为了避免神经元具有相同的输出,我们使用独特权重。我们还可以随机选择权重,避免每个周期后的损失都陷于局部最低点...

你的思想出了问题的博客 6252

神经网络的参数初始化【PyTorch】

神经网络的参数初始化方式-pytorch实现

逐梦苍穹的博客 1647
下一篇: 常见的激活函数
一只小菜狗:D
博客等级 码龄7年 4658粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值