在深度学习领域,很多成功的案例可以归因于增量学习技术。增量学习有两个优点。首先,通过增量学习,我们不需要将大量数据加载到内存中。对于每次训练迭代,我们只需要加载相应的数据,就可以大大提高系统效率。此外,增量学习可以帮助我们减少训练时间。对于传统的机器学习算法,如果有任何新数据传入,我们需要重新训练我们的模型。但是,就神经网络而言,我们仅需要基于预训练的参数执行几次增量学习迭代,即可显着减少学习时间并节省计算资源。
在MATLAB中,执行增量学习的方式不是那么直观。在本文中,我将介绍一种执行增量学习的简单方法。
首先,我们需要加载实验数据。在本文中,我们将使用身体脂肪数据集作为实验数据。
[X,T] = bodyfat_dataset;
X=X.';
T=T.';
随后,我们应该定义我们的模型。在本文中,我仅使用具有一个隐藏层的神经网络。
%% Create a network
layers = [
featureInputLayer(size(X,2))
fullyConnectedLayer(64)
reluLayer
fullyConnectedLayer(size(T,2))
regressionLayer];
然后,我们可以训练我们的网络。我们只需要将数据和一些超参数传递给训练函数。
%% Training
options = trainingOptions('adam','MaxEpochs',10,'Verbose',true);
net = trainNetwork(X,T,layers,options);
layers=net.Layers;
之后,如果我们发现模型无法获得令人满意的性能,则可以再次调用训练函数。这样,我们可以进一步增强训练好的网络。为了验证增量学习的效果,我们可以检查训练日志。根据日志,可以看到训练损失得到了进一步的改善。
%% Incremental learning
net = trainNetwork(X,T,layers,options);
layers=net.Layers;
最后,有必要指出一个非常重要的事情,训练函数只有在我们将预训练的网络传递给它的情况下才会执行增量学习。在以下代码片段中,我创建一个新网络并将其传递给训练函数。根据训练日志,很明显,如果不利用预训练的结果,我们将无法获得相似的结果。
%% Create a new network
layers = [
featureInputLayer(size(X,2))
fullyConnectedLayer(64)
reluLayer
fullyConnectedLayer(size(T,2))
regressionLayer];
net = trainNetwork(X,T,layers,options);
layers=net.Layers;