高级人工智能系列(二)—— 神经网络

高级人工智能系列(二)—— 神经网络

介绍

1943年,心理学家W·Mcculloch和数学家W·Pitts在分析和总结“神经元”的基础上,提出了神经元的数学模型。并且证明了,只要有足够多的简单神经元,并且让它们相互连接、同步运行,任何计算模型都可以被模拟。

image

下面,将介绍1.神经网络的激活函数(Activation Function)&损失函数(Loss Function)、2.前向传播(Forward Propagation)&反向传播(Back Propagation)和3.神经网络优化等四个部分。

而上述的“神经元”的概念,与我们的大脑中的神经元概念没有差异。数学模型化的神经元,可以理解为:一个神经元可以接收一个或多个输入,并且每个输入都有不同的权值;经过神经元处理后,可以给出一个或多个输出。

一、激活函数和损失函数

1.激活函数

考虑下面的一个神经元:

graph LR; x1,w1 --> n x2,w2 --> n wb --> n n --> output

神经元n有两个输入,输入x1的权值为w1,输入x2的权值为w2。在这种情况下,神经元的输出output就是输入的线性函数

\(output= w_1x_1 + w_2x_2\)

这其实就是:\(y = kx\)形式。

此外,如果对该式加上偏执函数\(w_b\)

\(output= w_1x_1 + w_2x_2 + w_b\)

这其实就是:\(y = kx + b\)形式。

这样,无论怎样变换,神经元的输出始终是输入的线性函数。线性函数对于线性空间的处理是没有问题的:

image

但是对于非线性空间,却无法处理:

image

因为无法通过线性函数构建上述空间。

这时,可以通过激活函数来解决这个问题。即,激活函数的作用,就是为神经元加入非线性因素,使其可以模拟非线性模型


激活函数的类型

1.Sigmoid函数

Sigmoid函数定义为:

\(f(x) = {1 \over 1 + e^{-x}}\)

容易看出,\(0<f(x)<1\)。Sigmoid函数可以将x的范围压缩到(0,1)之间,其函数图像如下:
image


2.Softmax函数

Softmax函数定义为:

\(f(z_j) = {e^{z_j} \over ∑^n_{i=1} e^{z_i}}\)

Softmax函数多用于输出层。容易看出,它的值域也是[0,1],并且它的意义是:某项的占比。这样,Softmax函数多用于多分类问题,\(f(z_j)\)表示一个分类概率。


3.双曲正切 tanH

tanH函数定义为:

\(g(z) = {e^z - e^{-z} \over {e^z + e^{-z}}}\)

tanH的取值范围是[-1,1]。

image


4.规整线性单元 ReLU

ReLU的定义为:

\(ReLU = max(0, x)\)

即,将\(x<0\)的点都设为0。之所以这样处理,是因为在某些情况下(如计算机视觉),负值是没有意义的,无需考虑。

image

此外,ReLU还有一些变形,如LeakReLU等,具体见下图:

image


2.损失函数

当然,单个样本的预测值和模型的真实值是可能有误差的,预测值和真实值之间的误差就叫做损失。损失越小,模型就越好。如果预测值等于真实值,那么就没有损失。

用于计算损失的函数就称为损失函数。模型的的每个预测质量由损失函数测定。


损失函数的类型

1. 0-1损失函数

image

0-1损失函数在真实值不等于预测值时,其值取1;真实值等于预测值时,其值取0。0-1损失函数非常粗暴,并不考虑偏差大小,只要有偏差值就为1。

2.平方误差损失函数

image

平方误差损失函数计算的是预测值和真实值差的平方。

3.绝对误差损失函数

image

绝对误差损失函数计算的是预测值和真实值差的绝对值。

4.指数型损失函数

image

如果有 m 个独立事件,则损失函数公式如下,使用似然估计的思想:

image

5.交叉熵损失函数

image

其中 \(t\)\(y\) 表示神经网络的目标标签和输出,\(y_j\) 表示 softmax 损失函数:

image

6.均方误差损失函数

image

这种损失函数很常见,\(t\)表示预测值,\(y\)表示真实值输出。


二、前向传播(Forward Propagation)&反向传播(Back Propagation)

前向传播

所谓前向传播,就是从输入层开始,连续计算每一层的\(z\)\(a\),直到输出\(y\)的过程。

其中,\(z\)是通过各项输入计算的结果,即\(z = ∑x_iw_i + b\)\(a\)是通过激活函数调整后的结果,比如使用Sigmoid激活函数,\(a = {1 \over 1 + e^{-z}}\)

image

在前向传播的最后,通过输出层的激活函数可以得到输出结果\(y_i\),此时我们可以根据这个实际输出和期望输出通过损失函数来计算损失。容易理解的是,损失函数一定是越小越好的,所以我们期望得到损失函数的最小值,而得到损失函数最小值最快的方法,就是沿着梯度下降的方向寻找,即梯度下降法


梯度下降法

梯度:对于可微的数量场\(f(x,y,z)\),以\(({{∂f}\over{∂x}}\),\({∂f}\over{∂y}\),\({{∂f}\over{∂z}})\)为分量的向量场称为f的梯度或斜量。

对于一维函数\(f(x)\)来说,\(∇f(x)\) = \(f'(x)\)

梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。
梯度下降法是一个最优化算法,常用于机器学习和人工智能当中用来递归性地逼近最小偏差模型。

梯度下降法的公式为:

\(x_{i+1} = x_i - η∇f(x_i)\)

其中\(∇f(x_i)\)表示\(x_i\)处的梯度;\(η\)是每次下降的“步”,它可以控制每次下降的距离是多少。


链式法则

即求导的链式法则,两个例子如下图:

image

这样,使用梯度下降处理每个权值\(w_i\),比如:

\(w_1 = w_1 - η {{∂L}\over{∂{w_1}}}\)

其中L表示Loss函数


反向传播

我们需要根据实际值和预测值的结果,来调整权值\(w_i\)

image

上图中的E(即L),通常用 \({1\over2} (实际输出a-期望输出a)^2\)来计算。

例子:
image

image

image


神经网络优化

任务1:找到一个好的学习率η。
任务2:初始的权值w怎么设置

参考资料

1.东北大学 高级人工智能 2022秋
2.https://baike.baidu.com/item/激活函数/2520792
3.https://baike.baidu.com/item/梯度下降/4864937

posted @ 2022-12-19 12:41  KindBrave  阅读(147)  评论(0)    收藏  举报