深度学习之参数初始化

深度学习第一课程笔记(1) 第一周概论 ![基础神经网络](https://img-blog.csdnimg.cn/20201108204413484.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RhX2hhaWh1YW5n,size_16,color_FFFFFF,t_70#pic_center) 阅读详情

 

在开始学习之前推荐大家可以多在FlyAI竞赛服务平台多参加训练和竞赛,以此来提升自己的能力。FlyAI是为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台。每周免费提供项目开源算法样例,支持算法能力变现以及快速的迭代算法模型。

目录

 

 1.0 初始化概念

2.0 初始化原则

2.1 一些基础的储备知识

2.2 参数初始化的几个基本条件

2.3 全0初始化的可行性

2.4 Glorlt 条件

2.5 关于方差的三个事实

2.6 参数初始化的几点要求

3.0 常见的参数初始化方法

3.1Xavier初始化方法(又称Glorot初始化)

标准化的Glorot初始化——glorot_uniform

3.2Kaiming初始化(又称He / MSRA初始化)

3.3 Lecun初始化

3.4 Batch Normalization

Scale and Shift作用

4.0 参数初始化方法总结

4.1 三种随机初始化器公式汇总

4.2 初始化方案建议


 1.0 初始化概念

初始化参数指的是在网络模型训练之前,对各个节点的权重和偏置进行初始化赋值的过程。

在深度学习中,神经网络的权重初始化方法(weight initialization)对模型的收敛速度和性能有着至关重要的影响。模型的训练,简而言之,就是对权重参数W的不停迭代更新,以期达到更好的性能。而随着网络深度(层数)的增加,训练中极易出现梯度消失或者梯度爆炸等问题。因此,对权重W的初始化显得至关重要,一个好的权重初始化虽然不能完全解决梯度消失或梯度爆炸的问题,但是对于处理这两个问题是有很大帮助的,并且十分有利于提升模型的收敛速度和性能表现。

2.0 初始化原则

2.1 一些基础的储备知识

在总结参数初始化的原则之前,先简单看一下网络模型运行的过程,参数初始化的目的是使网络模型能够更好地进行训练。现在大部分的网络训练依然采用误差的反向传播算法,误差反向传播分为正反两个过程,这里就不再赘述了,先引入几个概念。下面这幅图是一个神经网络的某一个层:

由图可知,每一个层内部的组成主要有:

输入X/hi:来自原始样本X的输入(i=0)或上一层(第i−1层)的输出hi。

权重W:网络模型训练的主体对象,第ii层的权重参数wi。

状态值z:作为每一层激活函数f的输入,处于网络层的内部,所以称之为状态值。

激活值h:状态值zi经过了激活函数ff后的输出,也就是第ii层的最终输出hi;

数据在网络模型中流动的时候,则会有(这里默认没有偏置项B):

然后在反向传播的过程中,由于是复合函数的求导,根据链式法则,会有两组导数,一个是损失函数Cost对z的导数,一个是损失函数Cost对W的导数,(详细过程这里不推导),这里再引入两个概念:

1)损失函数Cost关于状态z的梯度:即∂Cost/∂z

2)损失函数Cost关于权重参数W的梯度:即∂Cost/∂W

2.2 参数初始化的几个基本条件

什么样的初始化参数才是最好的呢?

需要牢记参数初始化的目的是为了让神经网络在训练过程中学习到有用的信息,这意味着参数梯度不应该为0。而我们知道在全连接的神经网络中,参数梯度和反向传播得到的状态梯度以及入激活值有关——激活值饱和会导致该层状态梯度信息为0,然后导致下面所有层的参数梯度为0;入激活值为0会导致对应参数梯度为0。所以如果要保证参数梯度不等于0,那么参数初始化应该使得各层激活值不会出现饱和现象且激活值不为0。我们把这两个条件总结为参数初始化条件:

  • 初始化必要条件一:各层激活值不会出现饱和现象。
  • 初始化必要条件二:各层激活值不为00。

下面从最常见的全0初始化和标准随机初始化展开来讨论。

2.3 全0初始化的可行性

在线性回归,logistics回归的时候,基本上都是把参数初始化为0,我们的模型也能够很好的工作(可初始化为0的模型见这篇文章)。然后在神经网络中,把W初始化为0是不可以的。这是因为如果把W初始化0,那么在前向传播过程中,每一层的神经元学到的东西都是一样的(激活值均为0),而在bp的时候,不同维度的参数会得到相同的更新,因为他们的gradient相同,称之为“对称失效”(具体可看这篇文章)。下面用一段代码来演示,当把W初始化为0:

def initialize_parameters_zeros(layers_dims):
    """
    Arguments:
    layer_dims -- python array (list) containing the size of each layer.
    Returns:
    parameters -- python dictionary containing your parameters "W1", "b1", ..., "WL", "bL":
                    W1 -- weight matrix of shape (layers_dims[1], layers_dims[0])
                    b1 -- bias vector of shape (layers_dims[1], 1)
                    ...
                    WL -- weight matrix of shape (layers_dims[L], layers_dims[L-1])
                    bL -- bias vector of shape (layers_dims[L], 1)
    """
    parameters = {}
    np.random.seed(3)
    L = len(layers_dims)  # number of layers in the network
    for l in range(1, L):
        parameters['W' + str(l)] = np.zeros((layers_dims[l], layers_dims[l - 1]))
        parameters['b' + str(l)] = np.zeros((layers_dims[l], 1))
    return parameters

绘图代码:

import numpy as np
import matplotlib.pyplot as plt

def initialize_parameters(layer_dims):
    """
    :param layer_dims: list,每一层单元的个数(维度)
    :return:dictionary,存储参数w1,w2,...,wL,b1,...,bL
    """
    np.random.seed(3)
    L = len(layer_dims)#the number of layers in the network
    parameters = {}
    for l in range(1,L):
        parameters["W" + str(l)] = np.random.randn(layer_dims[l],layer_dims[l-1])*0.01
        parameters["b" + str(l)] = np.zeros((layer_dims[l],1))
    return parameters

def forward_propagation():
    data = np.random.randn(1000, 100000)
    # layer_sizes = [100 - 10 * i for i in range(0,5)]
    layer_sizes = [1000,800,500,300,200,100,10]
    num_layers = len(layer_sizes)
    parameters = initialize_parameters(layer_sizes)
    A = data
    for l in range(1,num_layers):
        A_pre = A
        W = parameters["W" + str(l)]
        b = parameters["b" + str(l)]
        z = np.dot(W,A_pre) + b #计算z = wx + b
        A = np.tanh(z)
        #画图
        plt.subplot(2,3,l)
        plt.hist(A.flatten(),facecolor='g')
        plt.xlim([-1,1])
        plt.yticks([])
    plt.show()

我们可以看看cost function是如何变化的:

能够看到代价函数降到0.64(迭代1000次)后,再迭代已经不起什么作用了。

标准随机初始化

我们希望所有参数的期望接近00。遵循这个原则,可以将参数设置为接近00的很小的随机数(有正有负),在实际中,随机参数服从高斯分布/正态分布(Gaussian distribution / normal distribution)和均匀分布(uniform distribution)都是有效的初始化方法。还是用一段代码来演示:

def initialize_parameters_random(layers_dims):
    """
    Arguments:
    layer_dims -- python array (list) containing the size of each layer.
    Returns:
    parameters -- python dictionary containing your parameters "W1", "b1", ..., "WL", "bL":
                    W1 -- weight matrix of shape (layers_dims[1], layers_dims[0])
                    b1 -- bias vector of shape (layers_dims[1], 1)
                    ...
                    WL -- weight matrix of shape (layers_dims[L], layers_dims[L-1])
                    bL -- bias vector of shape (layers_dims[L], 1)
    """
    np.random.seed(3)  # This seed makes sure your "random" numbers will be the as ours
    parameters = {}
    L = len(layers_dims)  # integer representing the number of layers
    for l in range(1, L):
        parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l - 1])*0.01
        parameters['b' + str(l)] = np.zeros((layers_dims[l], 1))
    return parameters

【代码注解:

1. 是一个均值为04,方差为04,方差为1$的高斯分布采样。

2. 乘0.01是因为要把W随机初始化到一个相对较小的值,因为如果X很大的话,W又相对较大,会导致Z非常大,这样如果激活函数是sigmoid,就会导致sigmoid的输出值1或者0,然后会导致一系列问题(比如cost function计算的时候,log里是0,这样会有点麻烦)。

随机初始化后,cost function随着迭代次数的变化示意图为:

能够看出,cost function的变化是比较正常的。但是随机初始化也有缺点:当神经网络的层数增多时,会发现越往后面的层的激活函数(使用tanH)的输出值几乎都接近于0,如下图所示:

而激活函数输出值接近于0会导致梯度非常接近于0,因此会导致梯度消失。

总结来说,一般的随机初始化存在后层网络激活函数的输出值趋近于0的问题,且网络输出数据分布的方差会受每层神经元个数的影响(随之改变)。针对这些问题,Glorot 等人提出在初始化的同时加上对方差大小的规范化。这样不仅获得了更快的收敛速度,而且维持了输入输出数据分布方差的一致性,也避免了后面层的激活函数的输出值趋向于0的问题。

2.4 Glorlt 条件

这里直接引入Glorot条件——优秀的初始化应该保证以下两个条件:

(1)各个层的激活值h(输出值)的方差要保持一致,即∀(i,j):Var(hi)=Var(hj)∀(i,j);

(2)各个层对状态zz的梯度的方差要保持一致,即∀(i,j):Var(∂Cost∂zi)=Var(∂Cost∂zi)∀(i,j);

这就是Glorot条件条件,后面会介绍到Glorot初始化。

2.5 关于方差的三个事实

既然要保持上面的两个方差在各个网络层中不改变,那也就是它实际上是会改变的,关于为什么会改变的公式推导,这里不详细说明了,直接引入三个基本的客观事实(两有关一无关):

(1)各个层激活值h(输出值)的方差与网络的层数有关;

(2)关于状态z的梯度的方差与网络的层数有关;

(3)各个层权重参数W的梯度的方差与层数无关;

关于上面几个基本结论的详情以及公式推导,我们可以参考Xavier的原论文:Understanding the difficulty of training deep feedforward neural networks以及Vic时代的专栏深度学习之参数初始化(一)——Xavier初始化(里面有较为详实的公式推导)

借用论文中的几幅图,也可以看出这几个结论。

(1)各层激活值h直方图如下:

可以看出,激活值的方差逐层递减。

(2)各层状态Z的梯度的直方图如下:

状态的梯度在反向传播过程中越往下梯度越小(因为方差越来越小)。

(3)各层参数W的梯度的直方图如下:

参数梯度的方差和层数基本无关。

参数梯度的方差和层数基本无关。

2.6 参数初始化的几点要求

(1)参数不能全部初始化为0,也不能全部初始化同一个值;

(2)最好保证参数初始化的均值为0,正负交错,正负参数大致上数量相等;

(3)初始化参数不能太大或者是太小,参数太小会导致特征在每层间逐渐缩小而难以产生作用,参数太大会导致数据在逐层间传递时逐渐放大而导致梯度消失发散,不能训练;

(4)如果有可能满足Glorot条件也是不错的;

上面的几点要求中,(1)(2)(3)基本上是硬性要求,这也就衍生出了一系列的参数初始化方法,什么正态标准化等诸如此类的标准化方法,关于各种参数初始化方法,会在后面继续说明。

3.0 常见的参数初始化方法

我们常见的几种初始化方法是按照“正态分布随机初始化——对应为normal”和按照“均匀分布随机初始化——对应为uniform”,这里就不再多说了,这里介绍几种遇见较少的初始化方法。

3.1Xavier初始化方法(又称Glorot初始化)

正态化的Glorot初始化——glorot_normal

Glorot 正态分布初始化器,也称为 Xavier 正态分布初始化器。它从以00为中心(均值),标准差为stddev=sqrt(2fanin+fanout)的截断正态分布中抽取样本, 其中faninfanin 和 fanoutfanout是权重张量的扇入扇出(即输入和输出的单元数目):

fanin=chanelsin∗kernelswidth∗kernelsheightfanout=chanelsout∗kernelswidth∗kernelsheight

举个栗子:假设输入网络的一个28∗28∗1的数据,卷积核kernelskernels形状为3∗3,卷积核通道数chanelschanels有32个(即输出的通道数有32个),那么此时有limit=sqrt(61∗3∗3+32∗3∗3)

在keras和tensorflow均有实现,以keras为例:  keras.initializers.glorot_normal(seed=None)  

标准化的Glorot初始化——glorot_uniform

Glorot 均匀分布初始化器,也称为 Xavier 均匀分布初始化器。它从[−limit,limit]中的均匀分布中抽取样本, 其中limit=sqrt(6fanin]+fanout), fanin是权值张量中的输入神经元的数量,fanout是权重张量的输出神经元的数量。

【有关均匀分布的上下限limit取值的详细推导过程请点击:均匀分布】

以keras为例:  keras.initializers.glorot_uniform(seed=None)  

输出值分布:tanh vs. ReLU(Xavier initialization)

左边是tanh,右边是ReLU。

可以看出Xavier搭配tanh,深层的激活函数输出值还是非常漂亮得服从标准高斯分布,但是对于目前神经网络中最常用的ReLU激活函数,还是无能能力,当达到5,6层后几乎又开始趋向于0,更深层的话很明显又会趋向于0。。

Xavier初始化器的缺点

Xavier的推导过程是基于几个假设的,所以这限制了Xavier 初始化器的适用范围。

比如,其中一个假设是激活函数趋近于线性,这并不适用于ReLU等非线性激活函数;

另一个是激活值关于0对称,这个则不适用于sigmoid、ReLU等不是关于0对称的激活函数。

可以实验验证sigmoid激活函数用Xavier初始化后的初始化激活值、反向梯度、参数梯度特性:以MNIST做训练数据,发现标准初始化和Xavier初始化得到的初始激活、参数梯度特性是一样的。激活值的方差逐层递减,参数梯度的方差也逐层递减。

3.2Kaiming初始化(又称He / MSRA初始化)

Kaiming初始化,也称之为He初始化,又称之为MSRA初始化,出自大神何凯明之手。

因为前面讲了Glorot初始化不适合ReLU激活函数,所以残差网络(ResNet)的作者何凯明在Delving Deep into Rectifiers:Surpassing Human-Level Performance on ImageNet Classification文中提出了ReLU网络的初始化方法:Kaming初始化。作者的推导过程针对的其实是卷积网络的前向和反向过程。而为了和Xavier初始化方法保持一致,这里我们还是讨论全连接的网络结构。

关于期望、方差的性质,我们已经在Xavier初始化一节介绍过了,这里不再重复。

在Xavier论文中,作者给出的Glorot条件是:正向传播时,激活值的方差保持不变;反向传播时,关于状态值的梯度的方差保持不变。

这在Kaiming论文中稍作变换:正向传播时,状态值的方差保持不变;反向传播时,关于激活值的梯度的方差保持不变。

正态化的kaiming初始化——he_normal

he正态分布初始化器。它从以00为中心,标准差为stddev=sqrt(2fanin)stddev=sqrt(2fanin)的截断正态分布中抽取样本, 其中faninfanin是权值张量中的输入神经元的数量。在keras中的实现为  keras.initializers.he_normal(seed=None)  

标准化化的kaiming初始化——he_uniform

he均匀方差缩放初始化器。它从[−limit,limit][−limit,limit]中的均匀分布中抽取样本, 其中limit=sqrt(6fanin)limit=sqrt(6fanin),其中faninfanin是权值张量中的输入神经元的数量。在keras中的实现为  keras.initializers.he_uniform(seed=None)  

 

代码演示

def initialize_parameters_he(layers_dims):
    """
    Arguments:
    layer_dims -- python array (list) containing the size of each layer.

    Returns:
    parameters -- python dictionary containing your parameters "W1", "b1", ..., "WL", "bL":
                    W1 -- weight matrix of shape (layers_dims[1], layers_dims[0])
                    b1 -- bias vector of shape (layers_dims[1], 1)
                    ...
                    WL -- weight matrix of shape (layers_dims[L], layers_dims[L-1])
                    bL -- bias vector of shape (layers_dims[L], 1)
    """
    np.random.seed(3)
    parameters = {}
    L = len(layers_dims)  # integer representing the number of layers
    for l in range(1, L):
        parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l - 1]) * np.sqrt(2 / layers_dims[l - 1])
        parameters['b' + str(l)] = np.zeros((layers_dims[l], 1))
    return parameters

 

经过he initialization后,当隐藏层使用ReLU时,激活函数的输出值的分布情况:

效果是比Xavier initialization好很多。 现在神经网络中,隐藏层常使用ReLU,权重初始化常用He initialization这种方法。

3.3 Lecun初始化

出自大神Lecun之手。

正态化的Lecun初始化——lecun_normal

LeCun 正态分布初始化器。它从以0为中心,标准差为stddev=sqrt(1fanin)的截断正态分布中抽取样本, 其中 fan_in是权值张量中的输入单位的数量。在keras中的实现为 keras.initializers.lecun_normal(seed=None)  

标准化的Lecun初始化——lecun_uniform

LeCun 均匀初始化器。它从[−limit,limit]中的均匀分布中抽取样本, 其中limit=sqrt(3fanin),fanin是权值张量中的输入神经元的数量。在keras中的实现为 keras.initializers.lecun_uniform(seed=None) 

3.4 Batch Normalization

BN是将输入的数据分布变成高斯分布,这样可以保证每一层神经网络的输入保持相同分布。

优点

随着网络层数的增加,分布逐渐发生偏移,之所以收敛慢,是因为整体分布往非线性函数取值区间的上下限靠近。这会导致反向传播时梯度消失。BN就是通过规范化的手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值0方差1的标准正态分布,使得激活输入值落入非线性函数中比较敏感的区域。可以让梯度变大,学习收敛速度快,能大大加快收敛速度。

Scale and Shift作用

γ和β是学习到的参数,他们可以让标准正态分布变得更高/更胖和向左右偏移。

有关BN的详细解读见深度学习之解密Batch Normalization。

4.0 参数初始化方法总结

4.1 三种随机初始化器公式汇总

4.2 初始化方案建议

文中代码来自于compare_initialization,感谢作者分享!

参考资料:

https://keras.io/zh/initializers/

https://blog.youkuaiyun.com/siyue0211/article/details/80384951

https://blog.youkuaiyun.com/u012328159/article/details/80025785

 

更多精彩内容请访问FlyAI-AI竞赛服务平台;为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台;每周免费提供项目开源算法样例,支持算法能力变现以及快速的迭代算法模型。

挑战者,都在FlyAI!!!

 

 

深度学习模型九大经典初始化方案 自适应初始化方法通过根据具体模型和数据动态调整初始化参数,可以显著提高模型训练的起始性能,尤其是在复杂的模型或不常见的架构中。这种方法的核心思想是在模型的训练初期,通过优化一个小的数据集上的训练损失来确定初始化参数。这个近似正交的矩阵被用作网络层的权重。在实现稀疏初始化时,通常会指定一个稀疏度参数(如每个神经元连接到的前一层神经元的数量),然后随机选择这些连接并赋予它们非零的权重。Delta-正交初始化有助于在训练过程中保持卷积层输出的特征图的多样性,从而防止梯度消失或爆炸,特别是在深层卷积网络中。 阅读详情

相关推荐

Deep Learning 之 参数初始化

本文仅对常见的参数初始化方法进行总结(大部分内容来自deep learning一书),原理性的问题不进行过多的探讨。**Deep Learning中参数初始化十分重要,一般来说有以下这些原因:** 1.初始点的选取,有时候能够决定算法是否收敛 2.当收敛时,初始点可以决定学习收敛的多快,是否收敛到一个代价高或低的点 3.初始化也可以影响泛化 4.初始参数需要破坏不同神经元间的“对称性”,因为

BVL的博客 1万+

深度学习之参数初始化策略

本文介绍了深度学习中参数的初始化对训练的影响以及常用参数初始化策略,标准初始化,Xavier初始化,He初始化。

浅梦的学习笔记 1万+

深度学习-参数初始化的方法:随机初始化

当我们选择均值为0,标准差为 1 的正态分布 N(0,1) 时,随机生成的值集中在距离原点位置为 1 的 ±1 处, 神经元处于饱和状态(saturated).,tanh/sigmoid 在-1和1附近的gradient都接近0,这同样导致了gradient太小,参数难以被更新。这是因为如果把Parameters初始化,那么在前向传播过程中,每一层的神经元学到的东西都是一样的(激活值均为0),而在BP的时候,不同维度的参数会得到相同的更新,因为他们的gradient相同,这种行为称之为。

m0_73426548的博客 1407

常见的参数初始化方法

常见的参数初始化方法 我们常见的几种初始化方法是按照“正态分布随机初始化——对应为normal”和按照“均匀分布随机初始化——对应为uniform”,这里就不再多说了,这里介绍几种遇见较少的初始化方法。 1、Glorot初始化方法 (1)正态化的Glorot初始化——glorot_normal Glorot 正态分布初始化器,也称为 Xavier 正态分布初始化器。它从以 ...

bestxyj的专栏 1万+

【深度学习】参数初始化与Batch Normalization

一、参数初始化原则 参数初始化作为模型训练的起点,决定了模型训练的初始位置。选择的好坏很大程度影响收敛的速度与最终的训练结果。一般来说,参数初始化遵循以下几点要求: 不建议同时初始化为一个值,容易出现“对称失效” 最好保证均值为0,正负交错,参数大致数量相等 初始化参数不要太大或太小,前者会导致梯度发散难以训练,后者会导致特征对后面的影响逐渐变小 二、常见的初始化方法 1、全零初始化与随机初始...

无极阁 4359

深度学习之参数初始化(一)——Xavier初始化

我们需要牢记参数初始化的目的是为了让神经网络在训练过程中学习到有用的信息,这意味着参数梯度不应该为0。而我们知道在全连接的神经网络中,参数梯度和反向传播得到的状态梯度以及入激活值有关——激活值饱和会导致该层状态梯度信息为0,然后导致下面所有层的参数梯度为0;入激活值为0会导致对应参数梯度为0。所以如果要保证参数梯度不等于0,那么参数初始化应该使得各层激活值不会出现饱和现象且激活值不为0。我...

qq_37764129的博客 5304

深度学习之参数初始化——Xavier初始化

文章目录标准初始化方法形式激活值和梯度特性实验Xavier初始化形式满足Glorot条件的初始化激活值和梯度特性实验Xavier初始化的缺点 Understanding the difficulty of training deep feedforward neural networks by Xavier Glorot, Yoshua Bengio in AISTATS 2010. 本文介绍一下...

李滚滚的博客 1万+

[深度学习] 网络参数初始化

网络参数初始化 神经网络模型一般依靠随机梯度下降进行模型训练和参数更新,网络的最终性能与收敛得到的最优解直接相关,而收敛结果实际上又很大程度取决于网络参数的最开始的初始化。理想的网络参数初始化使模型训练事半功倍,相反,糟糕的初始化方案不仅会影响网络收敛,甚至会导致梯度弥散或爆炸。 网络初始化的方案 全零初始化 当网络达到稳定状态时, 参数(权值)在理想情况下应该保持正负各半(此时期望为0)...

四月晴 5463

深度学习参数初始化(weights initializer)策略大全

前言:深度学习的初始化参数指的是在网络训练之前,对各个节点的权重和偏置进行初始化的过程,很多时候我们以为这个初始化是无关紧要的,不需要什么讲究,但是实际上,一个参数的初始化关系到网络能否训练出好的结果或者是以多快的速度收敛,这都是至关重要的,有时候因为参数初始化的缘故,甚至得不到好的训练结果。本文就来讨论一下参数初始化到底有什么讲究以及常见的参数初始化的一些策略方法。阅读本文需要神经网络...

MIss-Y的博客 3万+

Deep learning系列(八)参数初始化

介绍了在实际应用中,神经网络参数如何进行初始化。

du_mengnan的专栏 6729

深度学习基础-网络参数初始化详解

神经网络模型一般是依靠随机梯度下降优化算法进行神经网络参数更新的,而神经网络参数学习是非凸问题,利用梯度下降算法优化参数时,网络权重参数的初始值选取十分关键。 首先得明确的是现代的网络参数初始化策略是简单的、启发式的。设定改进的初始化策略是一项困难的 任务,因为神经网络优化至今还未被很好地理解(即模型训练过程是一个黑盒)。

专注计算机视觉算法训练,算法优化部署以及SDK开发的知识分享。 605

深度学习中的参数初始化

深度学习中的参数初始化

网络资源是无限的 1420

深入分析RAG知识库多模态数据预处理

多模态企业数据预处理是构建高质量RAG知识库的关键环节。本文详解了处理流程:1)文档格式识别与路由;2)多模态内容提取(文本、图像、音视频);3)结构解析与语义重建;4)数据清洗与增强;5)智能分块(强调语义完整性);6)元数据注入。推荐使用开源工具如PaddleOCR、Whisper、BLIP-2等,或商业API处理复杂场景,最终生成带丰富元数据的结构化内容,为后续向量化检索奠定基础。

qq_35354529的博客 1379

深度学习基础-参数初始化详解

我们知道神经网络模型一般是依靠随机梯度下降优化算法进行神经网络参数更新的,而神经网络参数学习是非凸问题,利用梯度下降算法优化参数时,网络权重参数的初始值选取十分关键。首先得明确的是现代的网络参数初始化策略是简单的、启发式的。设定改进的初始化策略是一项困难的 任务,因为神经网络优化至今还未被很好地理解(即模型训练过程是一个黑盒)。大多数初始化策略基于在神经网络初始化时实现一些很好的性质。然而,我们并没有很好地理解这些性质中的哪些会在学习开始进行后的哪些情况下得以保持。

1225

CentOS7下快速修复libssl.so.1.1缺失问题(附腾讯云镜像加速下载)

本文详细介绍了在CentOS7系统中快速修复libssl.so.1.1缺失问题的工程化实践方案。通过编译安装OpenSSL 1.1.x版本、配置动态链接器及创建符号链接等步骤,有效解决共享对象文件缺失问题,并提供了腾讯云镜像加速下载的优化方案,帮助开发者高效部署现代应用。

weixin_33711647的博客 368

毕设分享|基于16单片机的指纹识别电子密码锁设计

我们今天的工作生活中,很多的场合都需要身份的认证,而传统的基于标志的身份认证技术由于受到证件伪造以及密码破解等手段的威胁,逐渐表现得有些力不从心。怎样保护自己的重要文件资料,如何保证自己的隐私不被泄露?在传统的身份认证中,我们往往使用密码加密法,但是这种方法只是"防君子不防小人"。在高明的黑客眼里,由几个字符组成的密码脆弱得不堪一击。现在,科技的发展让我们有了新的选择——生物识别技术。将生物识别技术应用于笔记本、门锁等方面,可以对文件、财产起保护作用,并且可以进行身份识别。

Sen_091的博客 1021

深度学习日常学习记录——参数初始化

参数初始化的目的是为模型训练提供合适的起点,直观提升模型收敛速度、增强训练稳定性,一定程度上影响模型性能。好的初始化权重能够更加匹配优化器动态范围。初始权重完全相同会导致同一层网络的神经元保持相同梯度更新,无法体现个体神经元的作用,降低特征提取能力。初始化权重过小容易引导梯度消失,初始化权重过大容易引导梯度爆炸。参数初始化对模型训练来说十分重要,现阶段基本都是用预训练参数+参数初始化相结合的方式。

Vans1521的博客 1716

【ROS2】机械臂MoveIt2

navigation2 专注于移动机器人的导航与定位,处理大范围空间的底盘运动;MoveIt2 专注于机械臂的操作规划,处理多关节协同的末端执行器运动。在复合机器人(如,移动机械臂)navigation2 负责移动到目标区域,MoveIt2 负责机械臂抓取。官网:https://moveit.picknik.ai/main/index.html。

郭老二 597

【学习笔记】深度学习-参数初始化

其实不止是0初始化,所有w都相同,b都相同的初始化也一样,都没有**“打破对称性”**(symmetry breaking),神经元的输出相同,激活值相同,它们的误差、梯度也都相同,于是:在之后的每一步梯度下降中,这两个神经元都会做一模一样的更新 → 永远无法分化。Xavier初始化(也叫Glorot初始化)是一种常见的权重初始化方法,它最初是由 Xavier Glorot 和 Yoshua Bengio 提出的,通常用于 sigmoid 或 tanh 激活函数的神经网络。

weixin_44343355的博客 1125

YOLO26 多模态融合技术:RGB+红外/深度/雷达融合

YOLO(You Only Look Once)是一种流行的目标检测算法,其最大特点是快速且端到端地完成图像中所有目标的检测与分类任务。YOLO首次在2016年由Joseph Redmon等人提出,彻底改变了传统目标检测(如R-CNN系列)的思路,被广泛应用于自动驾驶、视频监控、工业质检等场景。

一键难忘的博客 3523

2024年电气工程师最新面试题及答案

1. **基本电气工程原理**:包括电流、电压、电阻、功率等基本概念。2. **欧姆定律**:V = IR,描述电压、电流和电阻之间的关系。42. **风力发电系统组成**:包括风力涡轮机、发电机、控制系统等。44. **智能电网技术**:包括自动化控制、通信技术、数据分析等。10. **减少EMI**:使用屏蔽、滤波、合理布线等方法。40. **光伏系统组成**:包括光伏板、逆变器、控制器等。48. **能量存储技术**:包括电池、超级电容器、飞轮等。

guo162308的博客 6563

深度学习总结(一)——参数初始化

1. 参数初始化的目的是什么?为了让神经网络在训练过程中学习到有用的信息,这意味着参数梯度不应该为0。而我们知道在全连接的神经网络中,参数梯度和反向传播得到的状态梯度以及入激活值有关。那么参数初始化应该满足以下两个条件: 初始化必要条件一:各层激活值不会出现饱和现象; 初始化必要条件二:各层激活值不为0。 2. 把参数都初始化为0会是比较好的初始化?这样做其实会带来一个问题,经过正向传播和反向传播后

码农王小呆的博客 1万+

【实际操作】DenseFusion复现过程详解-YCB-Video数据集

这一篇是在YCB-Video数据集上的训练和测试过程。本次实验建立在实现LineMod数据集训练基础之上,因为前期的环境搭建都是一样的。首先,需要下载YCB-Video数据集,可以自己找找百度网盘资源,大概有两百多G。把下载下来的数据放在/work/DenseFusion/datasets/ycb/下并命名为YCB_Video_Dataset。同样的,激活自己的环境并进入 /work/DenseFusion/下,用命令:./experiments/scripts/train_ycb.sh出现以下内容开始训练

weixin_44564705的博客 3561
上一篇: 深度学习之损失函数
下一篇:  Google综述:细数Transformer模型的17大高效变种
iFlyAI
博客等级 码龄9年 238粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值