训练神经网络
定义
Epoch - 1个epoch等于使用训练集中的全部样本训练一次,以更新其权重。
Mini-batch gradient descent - 在训练阶段,由于计算复杂性或由于噪声问题导致的一个数据点,更新权重通常不是基于整个训练集。相反,更新步骤是在小批量上完成的,批量中的数据点数是我们可以调整的超参数。
损失函数 - 为了量化给定模型的执行方式,损失函数L大号通常用于评估实际产出y的程度ÿ通过模型输出z正确预测ž。
交叉熵损失 - 在神经网络中的二元分类的背景下,交叉熵损失L(z,y)常用,定义如下:
寻找最佳权重
反向传播 - 反向传播是一种通过考虑实际输出和所需输出来更新神经网络中权重的方法。 使用链式规则计算。
使用此方法,每个权重都使用以下规则更新:
更新权重 - 在神经网络中,权重更新如下:
•步骤1:获取一批训练数据并执行前向传播以计算损失。
•步骤2:反向传播损失以获得相对于每个重量的损失梯度。
•步骤3:使用渐变更新网络权重。
参数调整
权重初始化
Xavier初始化 - Xavier初始化不是以纯粹随机的方式初始化权重,而是使初始权重考虑到体系结构特有的特征。
Transfer learning - 训练深度学习模型需要大量数据,更重要的是需要大量时间。通常需要在大量数据集上利用预先训练的权重,这些数据集需要数天/周才能进行训练,并将其用于我们的用例。根据我们掌握的数据量,以下是利用此方法的不同方法:
训练规模 | 插图 | 说明 |
小 | ![]() | 冻结所有层,在softmax上训练重量 |
介质 | ![]() | 冻结大多数图层,训练最后一层的重量和softmax |
大 | ![]() | 通过初始化预训练的权重来训练图层和softmax上的权重 |
优化融合
学习率 - 学习率,通常记为α或有时η,表示权重更新的速度。它可以固定或自适应地改变。当前最流行的方法叫做Adam,这是一种适应学习速度的方法。
自适应学习率 - 在训练模型时让学习率变化可以减少训练时间并改善数值最优解。虽然Adam优化器是最常用的技术,但其他技术也很有用。它们总结在下表中:
方法 | 说明 | 更新w | 更新b |
Momentum | •阻尼振荡 •SGD改进 •2个参数调整 | ![]() | ![]() |
RMSprop | •均方根传播 •通过控制振荡加速学习算法 | ![]() | ![]() |
Adam | •自适应力矩估计 •最常用的方法 •4个要调整的参数 | ![]() | ![]() |
备注:其他方法包括Adadelta,Adagrad和SGD。
正则
Dropout - Dropout是神经网络中使用的一种技术,通过丢弃概率p > 0的神经元来防止过度拟合训练数据p>0。它迫使模型避免过多依赖特定的特征集。
备注:大多数深度学习框架通过'keep'参数1 - p参数化丢失1- p。
权重正则化 - 为了确保权重不会太大并且模型不会过度拟合训练集,通常会对模型权重执行正则化技术。主要内容总结在下表中:
LASSO | Ridge | Elastic Net |
•将系数缩小为0 •适合变量选择 | 使系数更小 | 变量选择和小系数之间的权衡 |
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
Early stopping - 一旦验证损失达到平台或开始增加,这种正规化技术就会停止训练过程。
好的做法
过度拟合小批量 - 在调试模型时,进行快速测试以查看模型本身的架构是否存在任何重大问题通常很有用。特别地,为了确保模型可以被适当地训练,在网络内部传递小批量以查看它是否可以在其上过度拟合。如果它不能,则意味着模型太复杂或不够复杂,甚至不适合小批量,更不用说正常大小的训练集。
梯度检查 - 梯度检查是在实现神经网络的反向传递期间使用的方法。它将分析梯度的值与给定点处的数值梯度进行比较,并起到正确性的健全性检查的作用。
类型 | 数值梯度 | 分析梯度 |
公式 | ![]() | ![]() |
评论 | •贵; 每个维度必须计算两次损失 •用于验证分析实施的正确性 •选择h时的权衡H 不太小(数值不稳定)也不太大(梯度近似差) | •“精确”结果 •直接计算 •用于最终实施 |