使用强化学习修剪过滤器时,如何多次采样输出分布?

人工智能 强化学习 卷积神经网络 政策梯度 加强
2021-11-17 00:30:36

我正在阅读论文Learning to Prune Filters in Convolutional Neural Networks,这是关于使用强化学习(策略梯度)修剪 CNN 过滤器的。论文说剪枝代理(代理是卷积神经网络)的输入是一个形状为 的二维(N_l, M_l)数组,其中N_l是过滤器的数量,M_l = m x h x w过滤器维度),输出是一个动作数组(每个元素都是0(不必要的过滤器)或1(必要的))并表示为了近似梯度,我们必须对输出时间进行采样(使用 REINFORCE 算法)。mlhM

由于我有一个输入,我如何多次采样输出分布(不更新 CNN 参数)?

如果我遗漏了什么,请告诉我我错在哪里

1个回答

我不确定一个输入是什么意思。剪枝代理的输入总是相同的,它是卷积层W维度的m×h×w. 该层取自预训练的基线模型。输入不会改变它总是一样的。修剪代理的输出是修剪特定过滤器的概率数组。例如,如果您有3过滤层,剪枝代理的输出将是数组3元素。让我们说它

y=[0.1,0.6,0.7]
这些元素中的每一个都代表修剪过滤器的概率i在层W. 所以0.1将是修剪过滤器的概率1,0.6修剪过滤器20.7修剪过滤器3. 假设您对该分布进行采样2次,你得到:[0,1,1],[0,0,1]. 这意味着您将从原始基线模型制作 2 个不同的模型。第一个模型将在层中修剪第二个和第三个过滤器W,第二个模型将修剪第三个过滤器。你在你的训练集和验证集上运行这两个新模型,计算目标函数R. 然后你更新参数θ您的修剪代理基于R. 层的原始权重W保持不变。然后你对剪枝模型进行另一个推断π带有更新的参数θ(输入仍然是原始的W)。你会得到另一个概率数组,你会不断重复我之前描述的步骤,直到参数θ收敛。当它们收敛时,您将进行最后的修剪。