对应更广泛的机器学习则有一套通用的组件,包括数据集损失函数,优化算法,训练器,推导器,效果评估器等。在tinyDL中,讲机器学习的通用组件于深度学习没有强绑定在一起,作为单独的一层来实现,也便于后续扩展出更多非神经网络的模型,例如随机森林,支持向量机等。
如下图所示,是mlearning的整体实现:
1. 数据集
DataSet组件定位为数据的加载和预处理转化成模型可以学习的数据格式。目前一些简单数据源实现,都是基于数据可以一次装载到内存的实现(ArrayDataset),例如SpiralDateSet以及MnistDataSet等。
2. 损失函数
Loss函数(损失函数)用于度量模型预测值与实际值之间的差异,或者说模型的预测误差。它是模型优化的目标函数,通过最小化损失函数来使模型的预测结果更接近实际值。
损失函数的选择取决于所解决的问题类型,例如分类问题、回归问题或者其他任务。常见的损失函数有:1)均方误差(Mean Squared Error, MSE):用于回归问题,在预测值和真实值之间计算平方差的均值。2)交叉熵(Cross Entropy):用于分类问题,比较预测类别的概率分布与真实类别的分布之间的差异。3)对数损失(Log Loss):也用于分类问题,基于对数似然原理,度量二分类模型的预测概率与真实标签之间的差异等等。损失函数的选择应该与模型任务和数据特点相匹配,合适的损失函数能够提供更好的模型性能和训练效果。
目前tinyDL实现了最常用的MSE和softmaxCrossEntropy,其中SoftmaxCrossEntropy将回归问题转化为分类问题的方法是将回归输出结果映射为类别的概率分布。通过SoftmaxCrossEntropy,回归问题可以被转化为多分类问题,模型可以通过最小化SoftmaxCrossEntropy损失函数来进行训练和优化。预测阶段,可以根据概率分布选择概率最大的类别作为预测结果。
3. 优化器
机器学习中常用的优化器常用的有:1)随机梯度下降法(SGD),每次只使用一个样本来计算梯度和更新参数,相比于梯度下降法,计算速度更快。2)批量梯度下降法,每次使用整个训练集来计算梯度和更新参数,收敛速度相对较慢,但稳定性较好。3)动量优化器,通过引入动量项来加速梯度下降的更新过程,可以在参数更新时考虑之前的梯度变化情况,从而减少震荡。4)AdaGrad,根据参数的历史梯度进行学习率的自适应调整,对于频繁出现的特征会降低学习率,对于稀疏出现的特征会增加学习率。5)Adam,结合了动量优化器和RMSProp的优点的优化器,Adam优化器通常具有较快的收敛速度和较好的性能等等。目前tinyDL实现了最常用的SGD和Adam: