欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

机器学习百相|第 9 章:前向神经网络知识点 (1)

最编程 2024-06-11 09:34:08
...
  • 解决过拟合的方法有:数据集增强、参数范数惩罚/正则化、模型集成等;其中Dropout是模型集成方法中最高效与常用的技巧。
    同时,深度神经网络的训练中涉及诸多手调参数,如学习率、权重衰减系数、Dropout比例等,这些参数的选择会显著影响模型最终的训练效果。批量归一化(Batch Normalization,BN)方法有效规避了这些复杂参数对网络训练产生的影响,在加速训练收敛的同时也提升了网络的泛化能力
  • 神经网络训练时是否可以将全部参数初始化为0?
    不能。
    考虑全连接的深度神经网络,同一层的神经元都是同构的,拥有相同的输入和输出,如果再将参数全部初始化为相同的值,那么无论前向传播还是反向传播的取值都是相同的。学习过程将永远无法打破这种对称性,最终同一个网络层中的各个参数仍然是相同的。
    因此需要随机地初始化神经网络参数的值,以打破对称性,简单来说,我们可以初始化参数为(-\frac{1}{\sqrt{d}},\frac{1}{\sqrt{d}})的均匀分布,其中d为神经元接受的输入维度,偏置可以被简单地设为0,并不会导致参数对称的问题。
  • Dropout抑制过拟合的工作原理:Dropout随机丢弃部分神经元的机制,相当于每次迭代都在训练不同结构的神经网络。类比于Bagging方法,Dropout可以被认为是一种实用的大规模深度神经网络的模型集成算法。这是由于传统意义上的Bagging涉及多个模型的同时训练与测试评估,当网络与参数规模庞大时,这种集成方式需要消耗大量的运算时间与空间。Dropout在小批量级别上的操作,提供了一种轻量级的Bagging集成近似,能够实现指数级数量神经网络的训练与评测。
    对于包含N个神经元节点的网络,在Dropout的作用下可以看作2^N个模型的集成。这2^N个模型可认为是原始网络的子网络,它们共享部分权重,并且具有相同的网络层数,而模型整体的参数数目不变,大大简化了运算。对于任意神经元,每次训练中都与一组随机挑选的不同的神经元集合共同进行优化,这个过程为减弱全体神经元之间的联合适应性,减少过拟合的风险,增强泛化能力。
  • 批量归一化的基本动机与原理:神经网络训练过程的本质是学习数据分布,如果训练数据与测试数据的分布不同将会大大降低网络的泛化能力,因此我们需要在训练开始前对所有输入数据进行归一化处理。然而随着网络训练的进行,每个隐层的参数变化使得后一层的输入发生变化,从而每一批训练数据的分布也随之变化,致使网络在每次迭代中都需要拟合不同的数据分布,增大训练的复杂度以及过拟合的风险。
    批量归一化方法是针对每一批数据,在网络每一层输入之间增加归一化处理(均值为0,标准差为1),将所有批数据强制性在同一的数据分布下。可以看作在每一层输入和上一层输出之间加入了一个新的计算层,对数据的分布进行了额外的约束,从而增强模型的泛化能力。
    但是批量归一化同时也降低了模型的拟合能力,归一化之后的输入分被强制为0均值和1标准差,以Sigmoid激活函数为例,批量归一化之后数据整体处于函数的非饱和区域,只包含线性变换,破坏了之前学习到的特征分布,为了恢复原始数据分布,具体实现中加入了变换重构以及可学习参数\gamma\betay^{(k)}=\gamma^{(k)}\hat{x}^{(k)}+\beta^{(k)},其中\gamma^{(k)}\beta^{(k)}分别为输入数据分布的方差和偏差。
    对于一般的网络,不采用批量归一化操作时,这两个参数高度依赖前面网络学习到的连接权重(对应复杂的非线性)。而在批量归一化操作中,\gamma\beta变成了该层的学习参数,仅用两个参数就可以恢复最优的输入数据分布,与之前网络层的参数解耦,从而更加有利于优化的过程,提高模型的泛化能力。