校园网站建设年度工作计划,网站内容,企业网站制作报价表,通号建设集团有限公司在这篇文章中#xff0c;我们将探讨自我规则非单调激活函数——Mish在神经网络中的应用。了解Mish函数的工作原理#xff0c;将有助于您在使用C IDE构建C应用程序时更加得心应手。 目录
神经网络中的激活函数是什么#xff1f;能在C中创建激活函数吗#xff1f;自我规则非…在这篇文章中我们将探讨自我规则非单调激活函数——Mish在神经网络中的应用。了解Mish函数的工作原理将有助于您在使用C IDE构建C应用程序时更加得心应手。 目录
神经网络中的激活函数是什么能在C中创建激活函数吗自我规则非单调Mish激活函数是什么如何在C中编写Mish激活函数有没有一个简单的C ANN示例使用Mish激活函数
神经网络中的激活函数是什么
激活函数phi()也称为转移函数或阈值函数它根据净输入函数的给定值sum确定激活值a phi(sum)。在这里sum是它们权重中的信号之和激活函数是这个和的新值具有给定的函数或条件。换句话说激活函数是将所有加权信号的和转换为该信号的新激活值的方法。有不同类型的激活函数常用的包括线性恒等、双极性和逻辑sigmoid函数。
能在C中创建激活函数吗
在C中以及大多数编程语言您可以创建自己的激活函数。注意sum是净输入函数的结果它计算所有加权信号的和。这里人工神经元输出值的激活值可以通过激活函数如下所示 通过使用这个sum净输入函数值和phi()激活函数我们可以编写phi()函数。让我们看看C中的一些激活函数现在让我们看看如何使用Mish函数作为这个示例公式
自我规则非单调Mish激活函数是什么
自我规则非单调Mish激活函数是受Swish激活函数启发的平滑、连续、自我规则、非单调激活函数。这个函数由Diganta Misra在2019年发表的“Mish: A Self Regularized Non-Monotonic Activation Function”中提出。
https://i0.wp.com/learncplusplus.org/wp-content/uploads/2021/05/Mish-1024x633.png?resize750%2C464ssl1 图片来源Mish A Self Regularized Non Monotonic Activation Function by Diganta Misra 2019
根据这项研究“Mish利用自我门控属性其中非调制输入与输入的非线性函数的输出相乘。由于保留了少量的负信息Mish通过设计消除了Dying ReLU现象所需的先决条件。这一特性有助于更好的表达性和信息流动。Mish无界避免了饱和这通常会因为梯度接近零而导致训练速度大幅减慢。Mish在下方有界也是有利的因为它产生了强烈的规则效应。与ReLU不同Mish是连续可微的这是一个可取的特性因为它避免了奇异性因此在执行基于梯度的优化时避免了不希望的副作用。”
我们之前解释了softplus()激活函数。Mish激活函数可以使用softplus()定义如下 因此Mish激活函数可以数学定义如下 作者比较了Mish、ReLU、SoftPlus和Swish激活函数的输出还比较了Mish和Swish的第一和第二导数。
Mish函数可以在C中编写如下
double phi(double sum) {return(sum * std::tanh(std::ln(1 std::exp(sum)))); // Mish函数
}
一个简单的C ANN示例使用自我规则非单调Mish激活函数
我们可以简单地将这个mish函数应用到我们的通用简单ANN示例中如下所示
#include iostream
#define NN 2 // 神经元数量class Tneuron { // 神经元类
public:double a; // 每个神经元的活动值double w[NN1]; // 神经元之间连接的权重Tneuron() {a 0;for (int i 0; i NN; i) w[i] -1; // 如果权重是负数则表示没有连接}// 定义输出神经元的激活函数或阈值double activation_function(double sum) {return(sum * std::tanh(std::ln(1 std::exp(sum)))); // Mish函数}
};Tneuron ne[NN1]; // 神经元对象void fire(int nn) {double sum 0;for (int j 0; j NN; j) {if (ne[j].w[nn] 0) sum ne[j].a * ne[j].w[nn];}ne[nn].a ne[nn].activation_function(sum);
}int main() {// 定义两个输入神经元a0, a1和一个输出神经元a2的活动值ne[0].a 0.0;ne[1].a 1.0;ne[2].a 0;// 定义来自两个输入神经元到输出神经元0到2和1到2的信号权重ne[0].w[2] 0.6;ne[1].w[2] 0.4;// 激发我们的人工神经元活动输出将是fire(2);printf(%10.6f\n, ne[2].a);getchar();return 0;
}
这个示例展示了如何在C中使用Mish激活函数来模拟一个简单的人工神经网络。通过这种方式你可以构建更复杂的神经网络模型并在C应用中实现深度学习技术。