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

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

一、介绍

       Kaiming初始化论文地址:https://arxiv.org/abs/1502.01852

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

二、基础知识

1.假设随机变量X和随机变量Y相互独立,则有

       (1)

2.通过期望求方差的公式, 方差等于平方的期望减去期望的平方.

               (2)


3.独立变量乘积公式

    (3)

4.连续性随机变量X的概率密度函数为f(x),若积分绝对收敛,则期望公式如下:

                       (4)

三、Kaiming初始化的假设条件

       与Xavier初始化相似,Kaiming初始化同样适用Glorot条件,即我们的初始化策略应该使得各层的激活值和状态梯度的方差在传播过程中的方差保持一致;Kaiming初始化的参数仍然满足均值是0,且更新的过程中权重的均值一直是0。

        与Xavier初始化不同的,Kaiming初始化不在要求每层输出均值都是0(因为Relu这样的激活函数做不到啊);当然也不再要求f′(0)=1。


       Kaiming初始化中,前向传播和反向传播时各自使用自己的初始化策略,但是保证前向传播时每层的方差和反向传播时梯度的方差都是1。

四、Kaiming初始化的简单的公式推导

       我们使用卷积来进行推导,并且激活函数使用ReLU。

1.前向传播

       对于一层卷积,有:

                       (5)   其中 是激活函数前的输出, 是权重的个数, 是权重, 是输入。

       根据(3)式,可将(4)式推导为:

        (6)

        根据假设 ,但是 是上一层通过ReLU得到的,所以 ,则:

               (7)

通过(2)式可得 ,则(7)式推导为:

                       (8)

根据期望公式(4), 通过第 层的输出来求此期望, 我们有 , 其中 表示ReLU函数.

     


其中 表示概率密度函数,因为 的时候 ,所以可以去掉小于0的区间, 并且大于0的时候 ,可推出:

因为 是假设在0周围对称分布且均值为0, 所以 也是在0附近分布是对称的, 并且均值为0(此处假设偏置为0),则

      (11)

所以 的期望是:

根据公式(2),因为 的期望等于0,于是有:

则式(12)推导为:

                       (13)

将(13)式带入(8)式:

                       (14)

从第一层一直往前进行前向传播, 可以得到某层的方差为 :

这里的 就是输入的样本, 我们会将其归一化处理, 所以 , 现在让每层输出方差等于1, 即:

于是正向传播时,Kaiming初始化的实现就是下面的均匀分布:

高斯分布:

2.反向传播

因为反向传播的时候

               (15)

其中 表示损失函数并对其求导. 为参数

根据(3)式:

其中 表示反向传播时输出通道数,最后得出

于是反向传播时,Kaiming初始化的实现就是下面的均匀分布:

高斯分布:

五、Pytorch实现

import torch
 
class DemoNet(torch.nn.Module):
    def __init__(self):
        super(DemoNet, self).__init__()
        self.conv1 = torch.nn.Conv2d(1, 1, 3)
        print('random init:', self.conv1.weight)
        '''
            kaiming 初始化方法中服从均匀分布 U~(-bound, bound), bound = sqrt(6/(1+a^2)*fan_in)
            a 为激活函数的负半轴的斜率,relu 是 0
            mode- 可选为 fan_in 或 fan_out, fan_in 使正向传播时,方差一致; fan_out 使反向传播时,方差一致
            nonlinearity- 可选 relu 和 leaky_relu ,默认值为 。 leaky_relu
        '''
        torch.nn.init.kaiming_uniform_(self.conv1.weight, a=0, mode='fan_out')
        print('xavier_uniform_:', self.conv1.weight)
 
        '''
            kaiming 初始化方法中服从正态分布,此为 0 均值的正态分布,N~ (0,std),其中 std = sqrt(2/(1+a^2)*fan_in)
            a 为激活函数的负半轴的斜率,relu 是 0
            mode- 可选为 fan_in 或 fan_out, fan_in 使正向传播时,方差一致;fan_out 使反向传播时,方差一致
            nonlinearity- 可选 relu 和 leaky_relu ,默认值为 。 leaky_relu
        '''
        torch.nn.init.kaiming_normal_(self.conv1.weight, a=0, mode='fan_out')
        print('kaiming_normal_:', self.conv1.weight)
 
 
if __name__ == '__main__':
    demoNet = DemoNet()

相关文章
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
【深度学习】深度学习的概述及应用,附带代码示例
深度学习(Deep Learning,简称DL)是机器学习领域中的一个重要分支,其目标是通过模拟人脑神经网络的工作机制,构建多层次的抽象特征表示,使机器能够自动从原始数据中提取关键信息,从而实现高精度的任务执行。深度学习通过多层神经网络结构及其训练方式,实现了从低级像素级别到高级概念级别的递进式知识层次。 深度学习的主要组件包括输入层、隐藏层和输出层。隐藏层的数量和层数决定了模型的复杂度和表达能力。在训练过程中,权重更新和梯度下降法是关键步骤,目的是最小化损失函数,提高预测精度。深度学习主要基于反向传播算法(BP Algorithm)来优化模型参数,通过正向传播、损失计算、反向传播和梯度下降等
19 8
|
16天前
|
机器学习/深度学习 算法 算法框架/工具
深度学习在图像识别中的应用及代码实现
【8月更文挑战第3天】深度学习技术在图像识别领域取得了显著的成果,通过构建深度神经网络模型,实现了对复杂图像数据的高效处理和准确识别。本文将介绍深度学习在图像识别中的原理、关键技术及应用实例,并通过代码示例展示如何利用深度学习框架进行图像识别任务的实现。
|
17天前
|
机器学习/深度学习 算法 算法框架/工具
探索深度学习:从理论到代码实现
【8月更文挑战第2天】本文将深入探讨深度学习的核心理论,并通过实际的代码示例来展示这些理论的应用。我们将从基础的神经网络开始,逐步引入更复杂的模型和算法,如卷积神经网络(CNN)和循环神经网络(RNN)。最后,我们将通过一个具体的项目来展示如何将这些理论应用于实际问题。
26 0
|
2月前
|
机器学习/深度学习 存储 算法
基于YOLOv8与ByteTrack的车辆行人多目标检测与追踪系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标追踪、运动物体追踪
基于YOLOv8与ByteTrack的车辆行人多目标检测与追踪系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标追踪、运动物体追踪
|
2月前
|
机器学习/深度学习 存储 计算机视觉
基于YOLOv8深度学习的PCB板缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测
基于YOLOv8深度学习的PCB板缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测
|
2月前
|
机器学习/深度学习 算法 网络架构
**深度学习中的梯度消失与爆炸影响模型训练。梯度消失导致输入层参数更新缓慢,梯度爆炸使训练不稳。
【6月更文挑战第28天】**深度学习中的梯度消失与爆炸影响模型训练。梯度消失导致输入层参数更新缓慢,梯度爆炸使训练不稳。解决办法包括:换激活函数(如ReLU)、权重初始化、残差连接、批量归一化(BN)来对抗消失;梯度裁剪、权重约束、RMSProp或Adam优化器来防止爆炸。这些策略提升网络学习能力和收敛性。**
32 0
|
2月前
|
机器学习/深度学习 自然语言处理 前端开发
深度学习-[数据集+完整代码]基于卷积神经网络的缺陷检测
深度学习-[数据集+完整代码]基于卷积神经网络的缺陷检测
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
【深度学习】Python之人工智能应用篇——音频生成技术
音频生成是指根据所输入的数据合成对应的声音波形的过程,主要包括根据文本合成语音(text-to-speech)、进行不同语言之间的语音转换、根据视觉内容(图像或视频)进行语音描述,以及生成旋律、音乐等。它涵盖了声音结构中的音素、音节、音位、语素等基本单位的预测和组合,通过频谱逼近或波形逼近的合成策略来实现音频的生成。 音频生成技术的发展主要依赖于深度学习模型,如循环神经网络(RNN)、长短时记忆网络(LSTM)、Transformer等。这些模型通过学习大量的音频数据,能够自动生成与人类发音相似甚至超越人类水平的音频内容。近年来,随着大规模预训练模型的流行,如GPT系列模型、BERT、T5等,
12 7
【深度学习】Python之人工智能应用篇——音频生成技术
|
1天前
|
机器学习/深度学习 人工智能 算法
【深度学习】python之人工智能应用篇——图像生成技术(二)
图像生成是计算机视觉和计算机图形学领域的一个重要研究方向,它指的是通过计算机算法和技术生成或合成图像的过程。随着深度学习、生成模型等技术的发展,图像生成领域取得了显著的进步,并在多个应用场景中发挥着重要作用。
15 9
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
【深度学习】探讨最新的深度学习算法、模型创新以及在图像识别、自然语言处理等领域的应用进展
深度学习作为人工智能领域的重要分支,近年来在算法、模型以及应用领域都取得了显著的进展。以下将探讨最新的深度学习算法与模型创新,以及它们在图像识别、自然语言处理(NLP)等领域的应用进展。
12 6

热门文章

最新文章