文章目录

  • 2. 神经网络
  • 2.1 概念
  • 2.1.1 概念
  • 2.1.2 应用-分类
  • 2.2 前期准备
  • 2.2.1 神经元
  • 2.2.2 激活函数
  • 1) sigmoid函数
  • 2) 双极性Sigmoid函数
  • 3) 阶跃函数

  • 4) ReLU
  • 2.2.3 层介绍
  • 1) 输入层
  • 2) 隐藏层
  • 3) 输出层
  • 4) Softmax-with-Loss 层
  • 5) Affine层
  • 2.3 损失函数
  • 2.3.1 均方误差
  • 2.3.2 交叉熵误差


2. 神经网络

参考资料

https://blog.csdn.net/as091313/article/details/79080583

2.1 概念

2.1.1 概念

人工神经网络(artificial neural network,ANN),简称神经网络(neural network,NN),是一种模仿生物神经网络的结构和功能的数学模型或计算模型。

神经网络是一种运算模型,由大量的节点(或称“神经元”)和之间相互的联接构成。

每个节点代表一种特定的输出函数,称为激励函数、激活函数(activation function)。

每两个节点间的联接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。

网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。

2.1.2 应用-分类

神经网络最重要的用途是分类,为了让大家对分类有个直观的认识,咱们先看几个例子:

  • 垃圾邮件识别:现在有一封电子邮件,把出现在里面的所有词汇提取出来,送进一个机器里,机器需要判断这封邮件是否是垃圾邮件。
  • 疾病判断:病人到医院去做了一大堆肝功、尿检测验,把测验结果送进一个机器里,机器需要判断这个病人是否得病,得的什么病。
  • 猫狗分类:有一大堆猫、狗照片,把每一张照片送进一个机器里,机器需要判断这幅照片里的东西是猫还是狗。

2.2 前期准备

2.2.1 神经元

神经网络中最基本的成分是神经元模型,即上述定义中的简单单元

2-MLP讲解_激活函数

2-MLP讲解_激活函数_02:输入

2-MLP讲解_深度学习_03:权值,权重

2-MLP讲解_神经网络_04:偏置,或者称为阈值

2-MLP讲解_激活函数_05:激活函数

这种“阈值加权和”的神经元模型称为M-P模型 ( McCulloch-Pitts Model ),也称为神经网络的一个处理单元( PE, Processing Element )。

2.2.2 激活函数

参考资料

https://zhuanlan.zhihu.com/p/25279356

激活函数是用来加入非线性因素的,解决线性模型所不能解决的问题。

简而言之,激活层是为矩阵运算的结果添加非线性的。

常用的激活函数有三种,分别是阶跃函数、Sigmoid和ReLU。不要被奇怪的函数名吓到,其实它们的形式都很简单,如下图(更正:sigmoid在负无穷是应趋近于0):

2-MLP讲解_深度学习_06

  • 阶跃函数:当输入小于等于0时,输出0;当输入大于0时,输出1。
  • Sigmoid:当输入趋近于正无穷/负无穷时,输出无限接近于1/0。
  • ReLU:当输入小于0时,输出0;当输入大于0时,输出等于输入。

1) sigmoid函数

sigmoid函数是一种常见的挤压函数,其将较大范围的输入挤压到2-MLP讲解_机器学习_07区间内,其函数的表达式与形状如下图所示:

2-MLP讲解_神经网络_08

该函数常被用于分类模型,因为其具有很好的一个特性2-MLP讲解_阶跃函数_09.这个函数也会被用于下面的神经网络模型中做激活函数。

2) 双极性Sigmoid函数

2-MLP讲解_深度学习_10

例子

2-MLP讲解_激活函数_11

2-MLP讲解_深度学习_12

3) 阶跃函数

阶跃函数是一种特殊的连续时间函数,是一个从0跳变到1的过程,属于奇异函数

2-MLP讲解_机器学习_13

4) ReLU

线性整流函数(Rectified Linear Unit, ReLU),又称**修正线性单元,**是一种人工神经网络中常用的激活函数(activation function)

2-MLP讲解_激活函数_14

2.2.3 层介绍

该模型与一个有向无环图相关联

2-MLP讲解_深度学习_15

2-MLP讲解_深度学习_16被称为网络的第一层,叫做输入层

2-MLP讲解_阶跃函数_17被称为网络的第二层,叫做隐藏层

2-MLP讲解_神经网络_18被称为网络的第三层,叫做输出层

2-MLP讲解_激活函数_19

1) 输入层

在我们的例子中,输入层是坐标值,例如2-MLP讲解_深度学习_20,这是一个包含两个元素的数组,也可以看作是一个2-MLP讲解_激活函数_21的矩阵。输入层的元素维度与输入量的特征息息相关,如果输入的是一张2-MLP讲解_激活函数_22像素的灰度图像,那么输入层的维度就是2-MLP讲解_激活函数_22

2) 隐藏层

连接输入层和隐藏层的是2-MLP讲解_机器学习_242-MLP讲解_激活函数_25。由X计算得到H十分简单,就是矩阵运算:
2-MLP讲解_激活函数_26
如果你学过线性代数,对这个式子一定不陌生。如上图中所示,在设定隐藏层为50维(也可以理解成50个神经元)之后,矩阵H的大小为2-MLP讲解_激活函数_27的矩阵。

连接隐藏层和输出层的是W2和b2。同样是通过矩阵运算进行的:
2-MLP讲解_机器学习_28
一系列线性方程的运算最终都可以用一个线性方程表示

也就是说,上述两个式子联立后可以用一个线性方程表达。对于两次神经网络是这样,就算网络深度加到100层,也依然是这样。这样的话神经网络就失去了意义。

所以这里要对网络注入灵魂:激活层

需要注意的是,每个隐藏层计算(矩阵线性运算)之后,都需要加一层激活层,要不然该层线性计算是没有意义的。

2-MLP讲解_神经网络_29

3) 输出层

输出Y的值可能会是(3,1,0.1,0.5)这样的矩阵,诚然我们可以找到里边的最大值“3”,从而找到对应的分类为I,但是这并不直观。我们想让最终的输出为概率,也就是说可以生成像(90%,5%,2%,3%)这样的结果,这样做不仅可以找到最大概率的分类,而且可以知道各个分类计算的概率值。

具体是怎么计算的呢?

计算公式如下:

2-MLP讲解_阶跃函数_30

简单来说分三步进行:

(1)以e为底对所有元素求指数幂;

(2)将所有指数幂求和;

(3)分别将这些指数幂与该和做商。

这样求出的结果中,所有元素的和一定为1,而每个元素可以代表概率值。

我们将使用这个计算公式做输出结果正规化处理的层叫做“Softmax”层。此时的神经网络将变成

2-MLP讲解_深度学习_31

4) Softmax-with-Loss 层

  • Softmax层:将输入值正规化(输入值和调整为1,反映概率)后输出。
  • Loss层:cross entropy error(交叉熵误差,一种损失函数)接收Softmax的输出(y1, y2, y3)和监督标签(t1, t2, t3), 输出损失L。

2-MLP讲解_激活函数_32

包含作为损失函数的交叉熵误差(cross entropy error),所以称为“Softmax-with-Loss层”。

Softmax-with-Loss层的计算图:

2-MLP讲解_神经网络_33

简易版Softmax-with-Loss层的计算图:

2-MLP讲解_神经网络_34

5) Affine层

神经网络在传播时,进行的矩阵乘积运算。

神经网络的正向传播中,为了计算加权信号的总和,使用了矩阵的乘积运算(NumPy中是 np.dot())

神经网络的正向传播中进行的矩阵的乘积运算在几何学领域被称为“仿射变换”

如图:

2-MLP讲解_神经网络_35

2.3 损失函数

2.3.1 均方误差

2-MLP讲解_机器学习_36

2-MLP讲解_阶跃函数_37表示神经网络输出,2-MLP讲解_阶跃函数_38表示监督数据,k表示数据的维度

2.3.2 交叉熵误差

2-MLP讲解_深度学习_39

2-MLP讲解_阶跃函数_37表示神经网络输出,2-MLP讲解_阶跃函数_38表示监督数据,2-MLP讲解_深度学习_42表示数据的维度

$ log$是以e为底数的自然对数