使用这些基本 REST API 最佳实践构建出色的 API
一文彻底搞懂深度学习(3)
超参数(Hyperparameter)
超参数(Hyperparameter),是深度学习算法中的调优参数,用于控制模型的学习过程和结构。与模型参数(Model Parameter)不同,模型参数是在训练过程中通过数据学习得到的,而超参数是在训练之前由开发者或实践者直接设定的,并且在训练过程中保持不变。
Hyperparameter
模型参数
模型参数(Model Parameter)是什么?模型实际上是一个复杂的函数,由参数和变量组成。数据是变量,而参数则是通过训练数据学到的常量。
在神经网络中,模型参数包括每一层的权重(Weight)和偏置项(Bias)。这些参数在训练过程中通过反向传播算法进行调整,以最小化损失函数。神经网络模型参数的数量和复杂性随着网络层数和每层的神经元数量的增加而增加。
在特定的神经网络模型中,还有其他类型的参数:
- 卷积核(Filter/Kernels):在卷积神经网络(CNN)中,每个卷积层都有多个卷积核,用于提取图像或序列数据中的特征。
- 注意力机制的参数:在Transformer和其他含有注意力机制的模型中,参数包括查询矩阵、键矩阵和值矩阵等,用于计算注意力得分和最终的上下文向量。
- 隐藏状态初始化参数:在循环神经网络(RNN)中,初始隐藏状态可能被视为模型参数的一部分。
- 残差块参数(Residual Block Parameters):在ResNet等残差网络中,每一个残差块都有一组自己的权重参数。
超参数
超参数(Hyperparameter)是什么?超参数是深度学习在训练前设置的,用于控制模型训练过程和架构的参数。需要自己设定,不是机器自己找出来的。
模型参数是在训练过程中通过数据学习得到的,而超参数是在训练之前直接设定的,并且在训练过程中保持不变。
神经网络结构的超参数是什么?直接影响神经网络结构的超参数主要包括网络层数(Layers)和每层的神经元数量(Neurons per Layer),它们共同决定了神经网络的深度和宽度。此外,虽然激活函数(Activation Function)不直接改变网络结构,但它通过引入非线性变换,显著影响网络的表达能力和性能,是神经网络设计中不可忽视的关键因素。
神经网络训练过程的超参数是什么?直接影响神经网络训练过程的超参数包括学习率(Learning Rate)、批量大小(Batch Size)、迭代次数(Epochs)和优化算法(Optimizer)。这些超参数共同决定了训练过程中模型权重的更新方式、训练速度、稳定性和最终性能。
- 学习率(Learning Rate)
- 定义:学习率决定了在优化过程中更新模型权重的步长。
- 影响:高学习率易使模型训练过头或失控,低学习率则让训练变得缓慢,需多次迭代。
- 调整策略:通常需要通过实验找到合适的学习率,或者采用学习率调度策略,如动态调整学习率或使用学习率衰减。
- 批量大小(Batch Size)
- 定义:批量大小指的是每次梯度下降迭代中使用的训练样本数量。
- 影响:大批量加速训练但易内存不足,泛化变差;小批量助跳出局部最优,但训练不稳且收敛慢。
- 选择原则:需要根据硬件资源、数据集大小和训练时间来选择合适的批量大小。
- 迭代次数(Epochs)
- 定义:迭代次数指的是整个训练数据集被遍历和学习的次数。
- 影响:迭代少易欠拟合,迭代多易过拟合。
- 调整策略:通常需要通过观察验证集上的性能指标来确定合适的迭代次数。
梯度下降(Gradient Descent)
梯度下降(Gradient Descent)是深度学习中一种至关重要的优化算法,其核心目的是寻找最佳模型参数或权重,从而最小化损失函数。该算法通过迭代的方式,不断调整参数值,沿着损失函数负梯度方向(即函数值下降最快的方向)进行搜索,直至收敛至一个局部最小值。这一过程中,每次迭代都会根据当前参数位置的梯度信息,以及预设的学习率,来更新参数值,从而逐步逼近最优解。
Gradient Descent
梯度下降
梯度下降(Gradient Descent)是什么?梯度下降是一种用于寻找函数局部最小值的优化算法。
它通过迭代的方式,不断调整模型参数,以最小化一个预先定义的损失函数(或称为代价函数)。
梯度下降的工作原理是什么?基于函数梯度(或导数)的迭代优化算法,旨在找到函数的局部最小值。
梯度下降利用函数关于其参数的梯度(即一阶导数)来指导参数的更新方向。梯度是一个向量,指向函数值增长最快的方向。为了找到函数的最小值,我们应该沿着梯度的反方向(即函数值下降最快的方向)更新参数。
- 梯度:梯度是一个向量,其方向指向函数值增长最快的方向。
- 偏导数:对于多元函数,梯度是一个包含所有参数偏导数的向量。
- 梯度的反方向:在梯度下降中,我们关注的是梯度的反方向,因为这是函数值下降最快的方向。
BGD & SGD & MBGD
梯度下降的算法有哪些?批量梯度下降(BGD)稳定但计算量大,随机梯度下降(SGD)计算快但收敛不稳定,小批量梯度下降(Mini-batch GD)则结合了二者的优点,通过选择适当的批量大小来平衡计算量和收敛稳定性。
批量梯度下降(Batch Gradient Descent, BGD)是什么?在每次迭代中,批量梯度下降使用整个数据集来计算损失函数的梯度,并根据这个梯度来更新模型的所有参数。(1)BGD优点:易于实现,全局收敛性较好,适用于凸优化问题。
- 由于使用了整个数据集,BGD的梯度估计更加准确,因此通常能够更稳定地收敛到(局部)最小值。
- 在凸优化问题中,BGD能够保证收敛到全局最小值(如果学习率设置得当)。
(2)BGD缺点:计算量大,需要处理整个数据集,对于大数据集来说可能非常耗时。
- 计算量大,特别是在处理大规模数据集时,每次迭代都需要遍历整个数据集,导致训练过程非常缓慢。
- 需要将整个数据集加载到内存中,这在数据集非常大时可能不可行。
随机梯度下降(Stochastic Gradient Descent, SGD)是什么?在每次迭代中,SGD随机选择一个样本来计算梯度,并据此更新模型参数。(1)SGD优点:计算量小,每次迭代只需要处理一个样本,训练速度快。
- 计算量小,每次迭代只需要处理一个样本,因此训练速度非常快。
- 适用于在线学习或数据流场景,可以实时更新模型。
(2)SGD缺点:梯度估计的噪声较大,可能导致收敛过程不稳定,可能陷入局部最小值或鞍点。
- 由于梯度估计基于单个样本,因此梯度估计的噪声较大,导致更新方向波动大,可能使收敛过程不稳定。
- 可能需要更多的迭代次数才能达到收敛。
- 在某些情况下,SGD可能无法收敛到全局最小值,而是停留在局部最小值或鞍点。
小批量梯度下降(Mini-batch Gradient Descent, MBGD)是什么?在每次迭代中,MBGD使用一小批(batch)样本来计算梯度,并据此更新模型参数。(1)MBGD优点:计算量小,每次迭代只需要处理一个样本,训练速度快。
- 相对于BGD,MBGD减少了每次迭代的计算量,提高了训练速度。
- 相对于SGD,MBGD的梯度估计更加稳定,减少了更新方向的波动,有助于更稳定地收敛。
- 可以通过调整batch size来平衡计算量和梯度估计的稳定性。
(2)MBGD缺点:梯度估计的噪声较大,可能导致收敛过程不稳定,可能陷入局部最小值或鞍点。
- 需要选择一个合适的batch size,这可能需要一些实验和调参。
- 仍然需要一定的内存来存储batch中的样本。
反向传播(Back Propagation)
反向传播(Back Propagation,简称BP)算法是深度学习中最为核心和常用的优化算法之一,广泛应用于神经网络的训练过程中。它通过计算损失函数关于网络参数的梯度来更新参数,从而最小化损失函数并提高模型的预测准确性。
Back Propagation
前向传播
前向传播(Forward Propagation)是什么?前向传播是神经网络中的一种基本计算过程,用于通过网络的每一层传递输入数据并生成输出。
从神经网络的输入层开始,逐层计算每一层神经元的输出,直到到达输出层并生成最终预测结果。
为什么需要前向传播?前向传播是神经网络进行预测和分类的基础过程。
在训练阶段,前向传播用于生成预测结果,并与真实标签进行比较以计算损失函数的值。然后,通过反向传播算法将损失函数的梯度信息反向传递回网络,用于更新权重和偏置等参数。在推理阶段,神经网络仅使用前向传播过程来生成预测结果。此时,输入数据通过网络进行前向传播,直到输出层生成最终的预测结果。
反向传播
反向传播(Back Propagation)是什么?BP算法是由Rumelhart、Hinton和Williams等人在1986年共同提出的,是神经网络的通用训练算法。
在BP算法出现之前,多层神经网络的训练一直是一个难题,因为无法有效地计算每个参数对于损失函数的梯度。BP算法通过反向传播梯度,利用链式法则逐层计算每个参数的梯度,从而实现了多层神经网络的训练。
反向传播的工作原理是什么?通过链式法则从输出层到输入层逐层计算误差梯度,并利用这些梯度更新网络参数以最小化损失函数。
- 从输出层向输入层传播:算法从输出层开始,根据损失函数计算输出层的误差,然后将误差信息反向传播到隐藏层,逐层计算每个神经元的误差梯度。
- 计算权重和偏置的梯度:利用计算得到的误差梯度,可以进一步计算每个权重和偏置参数对于损失函数的梯度。
- 参数更新:根据计算得到的梯度信息,使用梯度下降或其他优化算法来更新网络中的权重和偏置参数,以最小化损失函数。
为什么需要计算误差梯度?误差梯度提供了损失函数相对于参数的变化率信息。当梯度为正时,表示损失函数值随着参数的增加而增加;当梯度为负时,表示损失函数值随着参数的减少而减少。
通过计算梯度,我们可以确定参数更新的方向,即应该增加还是减少参数值,以最小化损失函数。
如何计算梯度?自动微分利用计算图(Computational Graph)和链式法则自动计算梯度。
- 将计算过程表示为一系列操作(如加法、乘法、激活函数等)的组合,这些操作构成计算图。
- 在前向传播过程中,计算每个节点的输出,并保存中间结果。
- 在反向传播过程中,从输出层开始,逐层计算每个节点的梯度,并使用链式法则将梯度传播到前面的节点。
在深度学习中,自动微分通常通过深度学习框架(如TensorFlow、PyTorch)实现,这些框架提供了高效的自动微分机制,使得梯度计算变得简单快捷。
损失函数(Loss Function)
深度学习中的损失函数(Loss Function)是一个衡量预测结果与真实结果之间差异的函数,也称为误差函数。它通过计算模型的预测值与真实值之间的不一致程度,来评估模型的性能。损失函数按任务类型分为回归损失和分类损失,回归损失主要处理连续型变量,常用MSE、MAE等,对异常值敏感度不同;分类损失主要处理离散型变量,常用Cross Entropy Loss、Dice Loss等,适用于不同分类任务需求。
Loss Function
损失函数
损失函数(Loss Function)是什么?损失函数是深度学习中用于衡量模型预测结果与真实结果之间差异的函数。
损失函数通过计算一个数值,来表示模型预测的准确性或误差大小。
为什么需要损失函数?在训练过程中,模型的目标是通过调整其参数来最小化损失函数的值,从而提高预测的准确性。
损失函数能量化模型预测与真实结果之间的差异。
回归损失
回归损失(Regression Loss)是什么?回归损失是损失函数在回归问题中的具体应用。回归问题是指预测一个或多个连续值的问题,与分类问题(预测离散值)相对。
回归损失函数有哪些?回归损失函数包括均方误差(MSE)和绝对误差(MAE),MSE对异常值敏感,适用于精确预测场景;MAE对异常值鲁棒,适用于异常值可能重要的场景。
均方误差(Mean Squared Error, MSE)是什么?均方误差(MSE)计算的是预测值与真实值之间差的平方的平均值。
MSE对异常值非常敏感,因为较大的误差会受到更大的惩罚(误差的平方会放大差异)。它通常用于需要精确预测的场景,但可能不适用于异常值较多的数据集。
绝对误差(Mean Absolute Error, MAE)是什么?绝对误差(MAE)计算的是预测值与真实值之间差的绝对值的平均值。
MAE对异常值的鲁棒性较好,因为无论误差大小,都以相同的权重进行计算(绝对误差不会放大差异)。它通常用于异常值可能代表重要信息或损坏数据的场景。
分类损失
分类损失(Classification Loss)是什么?分类损失是在训练分类模型时,用于衡量模型预测结果与真实标签之间差异的一种度量。它是一个非负值,反映了模型预测结果的准确性。分类损失越小,意味着模型的预测结果与真实标签越接近,模型的性能也就越好。
分类损失函数有哪些?分类损失函数包括交叉熵损失(Cross Entropy Loss)和骰子损失(Dice Loss)。
Cross Entropy Loss是基于信息论中交叉熵概念的分类损失函数,用于衡量预测概率分布与真实标签概率分布之间的差异,值越小表示模型性能越好;而Dice Loss则是基于Dice系数的损失函数,用于评估图像分割任务中预测结果与真实标签的相似度,值越小表示分割精度越高。
交叉熵损失(Cross Entropy Loss)是什么?在分类问题中,一个分布是模型的预测概率分布,而另一个分布是真实标签的概率分布(通常以one-hot编码表示)。交叉熵损失通过计算这两个分布之间的差异来评估模型的性能。
骰子损失(Dice Loss)是什么?骰子损失基于Dice系数,后者用于评估两个二值图像或二值掩码的重叠情况。Dice系数的值在0到1之间,值越大表示两个集合越相似。
在图像分割任务中,Dice Loss常用于评估模型对目标区域的分割精度,特别是在医学图像分割等需要高精度的小目标区域分割的场景中。
文章转自微信公众号@架构师带你玩转AI