在这篇文章中,我们将回答以下问题:
- 你想了解神经网络中最简单的激活函数是什么吗?
- 什么是恒等函数?
- 作为AI术语,我们需要了解激活函数和转移函数的哪些知识?
- 激活函数与净输入函数是一回事吗?
- 是否有可能将净输入函数用作激活函数?
- 通过更多了解神经网络中的恒等函数,将帮助你使用C++软件构建C++应用程序。
目录
- 我们所说的“人工智能”是什么意思?
- 机器学习(ML)与人工智能(AI)有何不同?
- 激活函数在最小人工神经元工作方式中扮演什么角色?
- 什么是恒等函数(y = x)?
- C++中使用恒等函数的示例?
- 我们所说的“人工智能”是什么意思?
1. 人工智能(AI)
人工智能,也称为AI,指的是在机器中模拟人类智能,这些机器被编程为像人类一样思考并模仿他们的行为。这个术语也可以应用于任何表现出与人类心智相关的特征的机器,如学习和解决问题。
除了AI这个术语,我们还应该添加这些术语。
2. 机器学习(ML)与人工智能(AI)有何不同?
机器学习(ML)是研究计算机算法自动通过经验改进的学科。虽然我们经常看到广告中说“智能”或“使用AI”,但实际上,还没有真正的、严格意义上的AI。我们将所有与AI相关的事物称为AI技术。AI,根据其字典定义,可能与人工通用智能(也称为强AI)有关。还有人工生物智能(ABI)这个术语,它试图模拟‘自然’智能。
3. 激活函数在最小人工神经元工作方式中扮演什么角色?
最小人工神经元有一个激活值(a)、一个激活函数(phi())和加权(w)的输入网络连接。因此,它有一个激活值、一个激活函数,以及一个或多个权重,这取决于它的输入网络数量。
激活函数(phi()),也称为转移函数或阈值函数,它根据净输入函数的给定值(sum)确定激活值(a = phi(sum))。在这里,sum是它们权重中的信号之和,激活函数是这个和的新值,具有给定的函数或条件。换句话说,激活函数是将所有加权信号的和转换为该信号的新激活值的方法。有不同类型的激活函数,通常使用的是线性(恒等)、双极性和逻辑(sigmoid)函数。激活函数及其类型在这里有详细解释。
在C++(以及大多数编程语言)中,你可以创建自己的激活函数。注意,sum是净输入函数的结果,它计算所有加权信号的和。我们将使用sum作为输入函数的结果。在这里,人工神经元(输出值)的激活值可以通过激活函数如下所示,
通过使用这个sum净输入函数值和phi()激活函数,让我们看看C++中的一些激活函数,
4. 什么是恒等函数(y = x)?
恒等函数,也称为恒等关系或恒等映射或恒等变换,是数学中的一个函数,它总是返回用作其参数的相同值。我们可以简单地说它是y=x函数或f(x)=x函数。这个函数也可以作为一些AI应用中的激活函数。
这是一个非常简单的激活函数,也是恒等函数,
float phi(float sum) {
return sum; // 恒等函数,线性转移函数 f(sum)=sum
}
这个函数的返回值应该是浮点数(float, double, long double),因为权重通常在0和1.0之间。
正如你在恒等函数中看到的,激活函数等同于恒等函数。因此,在这类网络中,激活值可以直接如下写出,而不需要使用phi(),
5. C++中使用恒等函数的示例?
这里是一个关于如何在C++中使用恒等函数的完整示例。
#include <iostream> #define NN 2 // number of neurons class Tneuron // neuron class { public: float a; // activity of each neurons float w[NN+1]; // weight of links between each neurons Tneuron() { a=0; for(int i=0; i<=NN; i++) w[i]=-1; // if weight is negative there is no link } // let's define an activation function (or threshold) for the output neuron float activation_function(float sum) { return sum ; // Identity function f(sum) = sum } }; Tneuron ne[NN+1]; // neuron objects void fire(int nn) { float 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() { //let's define activity of two input neurons (a0, a1) and one output neuron (a2) ne[0].a = 0.0; ne[1].a = 1.0; ne[2].a = 0; //let's define weights of signals comes from two input neurons to output neuron (0 to 2 and 1 to 2) ne[0].w[2] = 0.3; ne[1].w[2] = 0.2; // Let's fire our artificial neuron activity, output will be fire(2); printf("%10.6f\n", ne[2].a); getchar(); return 0; }