NN模型设置--参数初始化

本文深入探讨了深度学习中权重初始化的重要性,分析了不同初始化方法如何避免梯度消失或爆炸,包括Xavier、He初始化及批量规范化等,强调了合理初始化对加速训练和提升模型性能的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参数初始化的原理

  权值初始化对网络优化至关重要。早年深度神经网络无法有效训练的一个重要原因就是早期人们对初始化不太重视。
  模型对初始的参数是很敏感的,如果参数都很大,那么经过wx+b这个线性函数时,输出的值也会很大,若是经过tanh这个激活函数,输出的结果绝对值都几乎接近于1,也就是说每个神经元的输出都几乎相同,这完全违背了神经网络的初衷,事实上我们希望每个神经网络都能去学习一个不同的特征,他们的输出值应该是有差异的。
  另一方面,如果w值设置地太小了,经过线性函数wx+b的时候,wx可以忽略不计,于是线性函数的输出都约等于b,经过激活函数后的输出也几乎相同,又造成了神经元彼此雷同的尴尬局面呢。


权重初始化的要求

  神经元不容易饱和,学习速度不会太慢。
  这样的⼀个神经元更不可能饱和,因此也不⼤可能遇到学习速度下降的问题。
在这里插入图片描述

权重初始化的常用方法

  初始化的基本思想:方差不变,即设法对权值进行初始化,使得各层神经元的方差保持不变。
  参数初始化可能导致梯度消失或爆炸,所以基本原则是确保每一层的权重矩阵的方差都近似为 1。

  1)为网络中的所有连接权值赋上一个服从均值为0,标准差为0.01的正态分布的一个随机数。为第二、四、五层的卷积层和所有的全连接层神经元的偏置都赋予1的初始值,而其他层神经元的偏置均为0。这种初始化方法在模型的训练初期,能够有效的提速。因为为ReLU输入的都是正值。

  2)Xavier初始化
  从高斯分布或均匀分布中对权值进行采样,使得权值的方差是1/n,其中n是输入神经元的个数。该推导假设激活函数是线性的。

  3)He初始化/MSRA初始化
  从高斯分布或均匀分布中对权值进行采样,使得权值的方差是2/n。该推导假设激活函数是ReLU。因为ReLU会将小于0的神经元置零,大致上会使一半的神经元置零,所以为了弥补丢失的这部分信息,方差要乘以2。

  4)批量规范化(batch-normalization,BN)
  每层显式地对神经元的激活值做规范化,使其具有零均值和单位方差。批量规范化使激活值的分布固定下来,这样可以使各层更加独立地进行学习。批量规范化可以使得网络对初始化和学习率不太敏感。此外,批量规范化有些许正则化的作用,但不要用其作为正则化手段。

  5)
  ①经验规则适用于[-1,1]的输入,如果直接用,那么会爆网络。
  ②ReLu的非饱和线性端是做回归用的激活函数,输出近似高斯分布。
  基于以上两点,Alex选择了高斯分布生成零均值、小标准差的随机值作为初始化W,并且逐层加大标准差,使得W有弹性。(0.0001-0.01-0.01-0.1-0.1)
  由于高斯分布的的不均匀性(超大值有,超小值也有),使得经过ReLu激活,不会有很无解的爆数值问题.当然输入不要太大,[ 0,256] ( 原始) 或 [ -128,128] ( 减均值)

  6)目前在神经网络中建议使用的权重初始化策略是将值归一化到范围[-b,b],b为:
在这里插入图片描述
  其中,Hk是前后隐含层的神经元数目。


bias的初始化

  用caffenet训练数据,后面几层的bias_filter的value原始设置为1,我就没有修改,后来发现训练不收敛。把value值变小后,就可以了。
  是filler,填充器。如果type设为“constant”,value置为1,表示用常量1填充。不设value值,则默认用0填充。你的试验说明用1填太大了。一般用0填即可。


小技巧

  1)统计一下L1的参数分布;
  2)在大初始化的情况下,DNN 的泛化能力也会变差。

<think>好的,我需要帮助用户了解如何在CMSIS-NN初始化卷积层的参数。首先,我应该回顾一下CMSIS-NN的相关文档和引用内容。根据提供的引用,特别是引用[4],里面提到卷积层通过滤波器和输入特征图的点积来提取特征,还提到了im2col和矩阵乘法的优化。不过关于参数初始化的具体方法并没有直接说明。 接下来,我需要考虑CMSIS-NN作为针对微控制器的优化库,可能不会内置参数初始化方法,而是依赖于用户提供预先训练好的参数。通常,深度学习框架如TensorFlow或PyTorch在训练过程中处理参数初始化,而推理库如CMSIS-NN则负责加载这些训练好的参数进行优化推理。 引用[5]提到推理调度优化和分块策略,但同样没有涉及参数初始化。这可能意味着CMSIS-NN本身不负责初始化,而是需要用户从训练好的模型中导出参数,再通过CMSIS-NN的API进行配置。例如,引用[4]中提到的卷积操作函数需要用户传递权重和偏置参数,这些参数应该是在训练阶段确定好的。 因此,步骤可能包括:在训练框架中初始化参数并训练模型,导出权重和偏置,然后在CMSIS-NN中调用相应的函数(如arm_convolve_HWC_q7())时传入这些参数。需要检查CMSIS-NN的文档或示例代码,确认参数传递的方式,比如是否需要对数据进行量化或特定格式的排列。 可能还需要注意数据类型的匹配,比如CMSIS-NN支持q7_t或q15_t格式的定点数,用户需要将浮点参数转换为相应的定点格式。此外,卷积层的结构参数(如输入尺寸、滤波器数量、步长、填充等)也需要正确设置,这些通常在初始化卷积层时通过结构体配置。 总结来说,CMSIS-NN的卷积层参数初始化依赖于用户提供预训练参数,并结合库的API进行正确配置,确保数据格式和结构参数符合要求。同时,需要参考官方示例和文档来确保正确使用。</think>在CMSIS-NN中,卷积层参数初始化需要结合训练框架和硬件约束进行联合设计。以下是具体实现方法的分步说明: --- ### 1. **参数来源与格式** CMSIS-NN的卷积层参数(权重和偏置)**不直接提供初始化方法**,而是依赖从预训练模型中导出的参数[^1][^4]。参数初始化需遵循以下步骤: - **训练阶段**:在PyTorch/TensorFlow中初始化卷积核权重(如使用He或Xavier初始化),通过反向传播优化参数 - **量化导出**:将浮点参数转换为CMSIS-NN支持的定点格式(如Q7/Q15),使用如TensorFlow Lite的量化工具 - **内存布局调整**:将参数按CMSIS-NN要求的通道优先(CHW)格式排列 --- ### 2. **参数传递接口** 通过CMSIS-NN提供的卷积函数显式传递参数: ```c arm_status arm_convolve_HWC_q7( const q7_t *input_data, // 输入数据指针 const uint16_t input_w, // 输入宽度 const uint16_t input_h, // 输入高度 const uint16_t input_ch, // 输入通道数 const q7_t *kernel_data, // 卷积核参数指针 const uint16_t output_ch, // 输出通道数 const uint16_t kernel_w, // 核宽度 const uint16_t kernel_h, // 核高度 const uint16_t pad_w, // 宽度填充 const uint16_t pad_h, // 高度填充 const uint16_t stride_w, // 宽度步长 const uint16_t stride_h, // 高度步长 const q7_t *bias_data, // 偏置参数指针 const float bias_scale, // 偏置量化比例因子 q7_t *output_data // 输出数据指针 ); ``` --- ### 3. **内存优化策略** CMSIS-NN通过**部分im2col技术**降低内存占用: ```python # 类似CMSIS-NN内部实现逻辑(伪代码) def partial_im2col(input, kernel_size): col_buffer = allocate_memory(kernel_size * 2) # 仅扩展两列 for each output_pixel: extract_receptive_field(input, col_buffer) yield col_buffer ``` 该优化要求参数在内存中按**行优先顺序连续存储**,确保SIMD指令高效访问[^2]。 --- ### 4. 联合优化示例 结合TinyEngine的调度策略[^5]: ```c // 分块推理参数配置 typedef struct { int tile_num; // 分块数量p int chunk_size; // 分块大小n q7_t* weight_buf; // 权重缓存指针 } ConvScheduler; ``` 需通过实验确定最佳`(p,n)`组合,平衡SRAM占用与计算效率。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值