前面介绍了几篇使用进化算法优化神经网络结构和初始化参数的问题,今天给大家简单介绍一篇使用进化算法不仅优化网络参数还优化了激活函数的问题,对的,没有看错,是激活函数。
Cui P , Shabash B , Wiese K C . EvoDNN - An Evolutionary Deep Neural Network with Heterogeneous Activation Functions[C]// 2019 IEEE Congress on Evolutionary Computation (CEC). IEEE, 2019.
文章的出发点是这样的,现在的大多数网络中每个神经元的激活函数是一样的,但是激活函数也会对预测效果产生一定的影响,但是很少有这样的工作。因此作者即优化了网络的参数也优化了激活函数。
上图表示一个网络结构,可以看出,隐藏层的神经元中使用了不同的激活函数。
用Evolutionary Algorithm优化Deep Learning的问题,无非两个关键点:个体编码和适应度评价。
个体编码:文中作者对个体的编码包含了3个部分权重(
W
W
W)、偏置(
b
b
b)和每个神经元上的激活函数。权重和偏置就是一堆实数,激活函数部分使用函数的名字表示,作者选取了如下几种激活函数。在交叉操作中,权重和偏置使用SBX,激活函数部分使用单点交叉。变异操作中,激活函数部分随机选取。值得注意的是作者只是优化了参数,并没有优化网络结构,因此个体的编码长度是一样的。
函数评价:不同参数的网络在数据集上进行训练,使用损失函数的值评价不同的个体。
实验结果:
从实验结果看,文中所优化的网络EvoDNN的效果在多数情况下要好于基于梯度优化的网络。
但是这种优势是由参数引起的还是由不同的激活函数引起的文中并没有分析。另外,激活函数对网络分类效果的影响有多大文章也没分析。
总结来看,优化激活函数还是比较鸡肋的操作。