卖网站模板,建立名词,wordpress实现翻页效果,局域网中怎么访问自己做的网站paper#xff1a;Searching for Activation Functions
背景
深度网络中激活函数的选择对训练和任务表现有显著的影响。目前#xff0c;最成功和最广泛使用的激活函数是校正线性单元#xff08;ReLU#xff09;。虽然各种手工设计的ReLU替代方案被提出#xff0c;但由于在…paperSearching for Activation Functions
背景
深度网络中激活函数的选择对训练和任务表现有显著的影响。目前最成功和最广泛使用的激活函数是校正线性单元ReLU。虽然各种手工设计的ReLU替代方案被提出但由于在不同的模型以及数据集上提升不一致的问题没有一个目前可以完全替代它从业者们还是更倾向于简单、可靠的ReLU。
本文的创新点
本文提出用自动搜索技术来寻找新的激活函数。结合穷举和基于强化学习的搜索作者发现了许多新的激活函数。作者还通过对找到的最优激活函数的经验评估来验证搜索的有效性。实验表明找到的最优激活函数 \(f(x)x\cdot siogmoid(\beta x)\)作者称之为 \(Swish\)在许多具有挑战性的数据集上效果都优于ReLU。
方法介绍
为了利用搜索技术必须设计一个包含合适的候选激活函数的搜索空间。设计搜索空间的一个重要挑战是平衡搜索空间的大小和表达性。一个过度约束的搜索空间不会包含新的激活函数而一个太大的搜索空间很难进行有效的搜索。为了平衡这两个标准我们设计了一个简单的搜索空间该空间包含了一元函数和二元函数来构建激活函数。 如图1所示激活函数是通过重复组合core unit来构成的core unit定义为 \(b(u_1(x_1),u_2(x_2))\) 它接受两个标量输入每个输入独立的通过一个一元函数然后通过一个二元函数来组合两个一元函数的输出得到最终的一个标量输出。因为我们的目标是找到一个标量激活函数将单个标量输入转换为单个标量输出因此一元函数的输入限制为层preactivation \(x\) 和二元函数的输出。
给定搜索空间搜索算法的目标是为一元函数和二元函数找到有效的选择。搜索算法的选择取决于搜索空间的大小。如果搜索空间很小例如在使用单个核心单元时就可以详尽地穷举整个搜索空间。如果核心单元重复多次搜索空间将非常大即\(10^{12}\)数量级种可能使得穷举搜索不可行。
对于较大的搜索空间我们使用一个RNN controller如图2所示。在每个timestep控制器预测激活函数的单个组成部分。预测在下一个timestep反馈给控制器并重复这个过程直到激活函数的每个组成部分都被预测出来。然后使用预测的字符串来构造激活函数。 一旦搜索算法生成候选激活函数就在一些任务上训练使用候选激活函数的“子网络”如CIFAR-10上的图像分类。训练结束后记录并使用子网络的验证精度来更新搜索算法。使用穷举搜索时维护一个列表其中保存了按验证精度排序的激活函数。使用RNN控制器时控制器通过强化学习进行训练以最大限度地提高验证精度其中验证精度作为reward。这种训练推动控制器生成具有较高验证精度的激活函数。
搜索发现
所有的搜索选择ResNet-20作为child network结构并在CIFAR-10上训练10K steps。这种受限的环境可能会扭曲结果使得性能最好的激活函数可能只在小型网络上表现良好。但我们在实验部分展示了许多被发现的函数可以很好地泛化到更大的模型。穷举搜索用于较小的搜索空间RNN控制器用于较大的搜索空间。RNN控制器使用策略近端优化Policy Proximal Optimization进行训练使用rewards的指数移动平均作为baseline来减少方差。使用到的一元和二元函数的完整列表如下 其中 \(\beta\) 是一个per-channel的可训练参数\(\sigma(x)(1exp(-x))^{-1}\) 是sigmoid函数。通过改变使用的核心单元的数量和不同的一元、二元函数来构建不同的搜索空间。 图3绘制了在搜索中发现的性能最好的激活函数。我们发现了几个值得注意的趋势
复杂的激活函数始终比简单的激活函数表现的差可能是因为优化难度的增加。性能最好的激活函数可以用1个或2个核心单元表示。 表现最好的几个激活函数都有一个共同的结构就是原始的preactivation \(x\) 作为最终二元函数的输入\(b(x,g(x))\)。ReLU也遵循这种结构其中 \(b(x_1,x_2)max(x_1,x_2),g(x)0\) 搜索找到了用周期periodic函数的激活函数例如sin和cos。周期函数最常见的用法是对原始preactivation \(x\) 的加或减或线性缩放。周期函数在激活函数中的应用只在之前的工作中进行了简要的探索因此这些发现的函数为进一步研究提供了有效的途径。 使用除法的函数往往表现不佳因为当分母接近0时输出会爆炸。只有当分母中的函数与0有界时例如cosh(x)或者当分子也接近0时除法才会成功得到输出1。
由于激活函数是使用一个相对较小的子网络发现的当应用于较大的模型时它们的性能可能无法泛化。为了测试性能最好的激活函数对不同架构的鲁棒性我们使用preactivation ResNet-164RN、Wide ResNet 28-10WRN和DenseNet 100-12DN模型进行了额外的实验。我们在Tensorflow中实现3个模型并用搜索发现的表现最好的几个激活函数替换ReLU我们使用原始的超参例如使用SGD with momentum进行优化并遵循之前的工作给出5次不同运行的median。 结果如表1,2所示。尽管模型结构不同8个激活函数中有6个泛化性能很好。这6个激活函数中所有都在ResNet-164上取得了匹配或超越ReLU的表现。此外发现的激活函数中有两个 \(x\cdot \sigma(\beta x)\) 和 \(max(x,\sigma(x))\) 在三个模型上一致的匹配或超越ReLU的性能。
虽然结果看起来很好但目前尚不清楚所找到的激活函数是否能在具有挑战性的真实世界数据集上成功地取代ReLU。为了验证搜索的有效性接下来我们重点关注评估激活函数 \(f(x)x\cdot \sigma(\beta x)\)我们称之为 \(Swish\)。我们选择重点评估Swish而不是 \(max(x,\sigma(x))\) 因为实验中表明Swish的泛化性更好。接下来我们将分析Swish的特性然后对Swish、ReLU和其他候选baseline激活函数在不同的任务和不同的模型上进行全面的经验评估。
Swish
回顾一下Swish定义为 \(x\cdot \sigma(\beta x)\)其中 \(\sigma(z)(1exp(-z))^{-1}\) 是sigmoid函数\(\beta\) 是一个常量或可训练的参数。图4绘制了不同 \(\beta\) 值的Swish函数。当 \(\beta 1\) 时Swish等价于针对强化学习提出的Sigmoid-weighted Linear UnitSiL。当 \(\beta0\) 时Swish变成了线性缩放函数 \(f(x)\frac{x}{2}\)。当 \(\beta\to \infty \) 时sigmoid部分接近于一个0-1函数Swish变得像ReLU。这表明Swish可以宽松地看作一个smooth function它在线性函数和ReLU函数之间进行非线性插值。如果 \(\beta\) 是可训练的模型就可以控制插值的程度。 和ReLU一样Swish上下都是无界的。和ReLU不一样的是Swish是光滑非单调的。事实上Swish的非单调性有别于大多数常见的激活函数。Swish的导数为 不同 \(\beta\) 值的Swish的一阶导数如图5所示。\(\beta\) 的大小控制了一阶导数渐近线到0和1的速度。当 \(\beta1\) 时对于小于1.25左右的输入导数的幅度小于1。因此\(\beta1\) 的Swish的成功意味着ReLU的梯度保持特性即在x0时导数为1在现代架构中可能不再是一个明显的优势。
Swish和ReLU最显著的区别在于当x0时Swish的非单调bump。如图6所示很大比例的preactivation落在bump \((-5 \le x \le 0)\) 区域内这表明非单调凸起是Swish的一个重要特性。凸起的形状可以通过 \(\beta\) 值控制。尽管固定 \(\beta1\) 是有效的 实验表明训练 \(\beta\) 值可以进一步提高一些模型的性能。图7绘制了Mobile NASNet-A模型中训练的 \(\beta\) 值的分布训练后的 \(\beta\) 值分布在0到1.5之间并在 \(\beta\approx 1\) 达到峰值表明模型利用到了可训练的 \(\beta\) 额外的灵活性。 需要注意的是如果使用了BN则应该设置比例参数。由于ReLU是分段线性的一些高级库默认关闭了比例参数但对于Swish确是错误的。对于训练Swish网络我们发现略微降低用于训练ReLU的学习率有帮助。
实验结果
作者在不同的数据集和模型上与其它最常见激活函数进行了对比如下 CIFAR-10和CIFAR-100的结果如下 可以看出Swish在不同模型下与其它激活函数相比都取得可匹配或更好的结果。
Inception-v3和v4在ImageNet数据上的结果如下可以看出Softplus的效果比Swish稍好。 但当模型为轻量模型如Mobile NasNet-A或MobileNet时Softplus的效果不如Swish