LSTM用于元学习-"Learning to learn by gradient descent by gradient descent"-笔记详解

本文详细解析了Andrychowicz等人的研究,即使用LSTM学习优化算法,代替手动设定超参数。通过LSTM作为optimizer,学习对optimizee(模型)的参数更新方法。实验包括二次函数、Minist数据集等,展示了解决优化问题的新思路。
摘要由CSDN通过智能技术生成

Andrychowicz, Marcin, et al. “Learning to learn by gradient descent by gradient descent.” Advances in neural information processing systems. 2016.

1 简介

这篇文章主要讲用一个额外的LSTM学习出优化算法中以前需要手工设置的超参数。相比于MAML元学习的是模型的初始参数表示,这篇文章则着眼于元学习出一个优化算法。 现在很多方法是针对特定任务来设计优化算法,比如:RMSprop, Adagrad, ADAM等等。但是根据世上没有免费的午餐定律,没有一个特定的优化算法适用于所有的情形。而这篇文章则设计了一个optimizer g g g (本文中使用LSTM)来学习出不同的优化方法。因此参数的更新方法如下:
θ t + 1 = θ t + g t ( ∇ f ( θ t ) , ϕ ) \theta_{t+1}=\theta_t + g_t(\nabla f(\theta_t),\phi) θt+1=θt+gt(f(θt),ϕ)
其中, ϕ \phi ϕ是模型 g g g自身的参数, ∇ f ( θ t ) \nabla f(\theta_t) f(θt)是optimizee

好的,以下是一个简单的MATLAB代码,用于比较LSTM和PSO-LSTM的超参数: ```matlab % Load data load('data.mat'); % Split data into training and testing sets train_data = data(1:800,:); test_data = data(801:end,:); % Define LSTM network architecture num_features = size(train_data,2); num_hidden_units = 10; lstm_net = lstmLayer(num_hidden_units, 'OutputMode', 'last'); output_layer = fullyConnectedLayer(1); regression_layer = regressionLayer; layers = [sequenceInputLayer(num_features), lstm_net, output_layer, regression_layer]; % Train LSTM network using stochastic gradient descent opts = trainingOptions('sgdm', 'MaxEpochs', 100, 'MiniBatchSize', 32, 'LearnRateSchedule', 'piecewise', 'LearnRateDropFactor', 0.1, 'LearnRateDropPeriod', 50); net = trainNetwork(train_data(:,1:end-1), train_data(:,end), layers, opts); % Use LSTM network to make predictions on testing data lstm_predictions = predict(net, test_data(:,1:end-1)); % Define PSO-LSTM network architecture num_particles = 10; num_iterations = 50; c1 = 2; c2 = 2; v_max = 0.1; num_hidden_units = 10; pso_lstm_net = psoLstmLayer(num_hidden_units, 'OutputMode', 'last', 'NumParticles', num_particles, 'MaxIterations', num_iterations, 'C1', c1, 'C2', c2, 'VelocityLimit', v_max); output_layer = fullyConnectedLayer(1); regression_layer = regressionLayer; layers = [sequenceInputLayer(num_features), pso_lstm_net, output_layer, regression_layer]; % Train PSO-LSTM network using stochastic gradient descent opts = trainingOptions('sgdm', 'MaxEpochs', 100, 'MiniBatchSize', 32, 'LearnRateSchedule', 'piecewise', 'LearnRateDropFactor', 0.1, 'LearnRateDropPeriod', 50); net = trainNetwork(train_data(:,1:end-1), train_data(:,end), layers, opts); % Use PSO-LSTM network to make predictions on testing data pso_lstm_predictions = predict(net, test_data(:,1:end-1)); % Plot results figure; plot(test_data(:,end)); hold on; plot(lstm_predictions); plot(pso_lstm_predictions); legend('True', 'LSTM', 'PSO-LSTM'); ``` 请注意,这只是一个简单的示例,可以根据您的需求进行修改。此代码需要一个名为"data.mat"的数据文件,其中包含训练和测试数据。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值