文章目录
- 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 神经元
神经网络中最基本的成分是神经元模型,即上述定义中的简单单元
:输入
:权值,权重
:偏置,或者称为阈值
:激活函数
这种“阈值加权和”的神经元模型称为M-P模型 ( McCulloch-Pitts Model ),也称为神经网络的一个处理单元( PE, Processing Element )。
2.2.2 激活函数
参考资料
https://zhuanlan.zhihu.com/p/25279356
激活函数是用来加入非线性因素的,解决线性模型所不能解决的问题。
简而言之,激活层是为矩阵运算的结果添加非线性的。
常用的激活函数有三种,分别是阶跃函数、Sigmoid和ReLU。不要被奇怪的函数名吓到,其实它们的形式都很简单,如下图(更正:sigmoid在负无穷是应趋近于0):
- 阶跃函数:当输入小于等于0时,输出0;当输入大于0时,输出1。
- Sigmoid:当输入趋近于正无穷/负无穷时,输出无限接近于1/0。
- ReLU:当输入小于0时,输出0;当输入大于0时,输出等于输入。
1) sigmoid函数
sigmoid函数是一种常见的挤压函数,其将较大范围的输入挤压到区间内,其函数的表达式与形状如下图所示:
该函数常被用于分类模型,因为其具有很好的一个特性.这个函数也会被用于下面的神经网络模型中做激活函数。
2) 双极性Sigmoid函数
例子
3) 阶跃函数
阶跃函数是一种特殊的连续时间函数,是一个从0跳变到1的过程,属于奇异函数
4) ReLU
线性整流函数(Rectified Linear Unit, ReLU),又称**修正线性单元,**是一种人工神经网络中常用的激活函数(activation function)
2.2.3 层介绍
该模型与一个有向无环图相关联
被称为网络的第一层,叫做输入层
被称为网络的第二层,叫做隐藏层
被称为网络的第三层,叫做输出层
1) 输入层
在我们的例子中,输入层是坐标值,例如,这是一个包含两个元素的数组,也可以看作是一个的矩阵。输入层的元素维度与输入量的特征息息相关,如果输入的是一张像素的灰度图像,那么输入层的维度就是。
2) 隐藏层
连接输入层和隐藏层的是和。由X计算得到H十分简单,就是矩阵运算:
如果你学过线性代数,对这个式子一定不陌生。如上图中所示,在设定隐藏层为50维(也可以理解成50个神经元)之后,矩阵H的大小为的矩阵。
连接隐藏层和输出层的是W2和b2。同样是通过矩阵运算进行的:
一系列线性方程的运算最终都可以用一个线性方程表示
也就是说,上述两个式子联立后可以用一个线性方程表达。对于两次神经网络是这样,就算网络深度加到100层,也依然是这样。这样的话神经网络就失去了意义。
所以这里要对网络注入灵魂:激活层。
需要注意的是,每个隐藏层计算(矩阵线性运算)之后,都需要加一层激活层,要不然该层线性计算是没有意义的。
3) 输出层
输出Y的值可能会是(3,1,0.1,0.5)这样的矩阵,诚然我们可以找到里边的最大值“3”,从而找到对应的分类为I,但是这并不直观。我们想让最终的输出为概率,也就是说可以生成像(90%,5%,2%,3%)这样的结果,这样做不仅可以找到最大概率的分类,而且可以知道各个分类计算的概率值。
具体是怎么计算的呢?
计算公式如下:
简单来说分三步进行:
(1)以e为底对所有元素求指数幂;
(2)将所有指数幂求和;
(3)分别将这些指数幂与该和做商。
这样求出的结果中,所有元素的和一定为1,而每个元素可以代表概率值。
我们将使用这个计算公式做输出结果正规化处理的层叫做“Softmax”层。此时的神经网络将变成
4) Softmax-with-Loss 层
- Softmax层:将输入值正规化(输入值和调整为1,反映概率)后输出。
- Loss层:cross entropy error(交叉熵误差,一种损失函数)接收Softmax的输出(y1, y2, y3)和监督标签(t1, t2, t3), 输出损失L。
包含作为损失函数的交叉熵误差(cross entropy error),所以称为“Softmax-with-Loss层”。
Softmax-with-Loss层的计算图:
简易版Softmax-with-Loss层的计算图:
5) Affine层
神经网络在传播时,进行的矩阵乘积运算。
神经网络的正向传播中,为了计算加权信号的总和,使用了矩阵的乘积运算(NumPy中是 np.dot())
神经网络的正向传播中进行的矩阵的乘积运算在几何学领域被称为“仿射变换”
如图:
2.3 损失函数
2.3.1 均方误差
表示神经网络输出,表示监督数据,k表示数据的维度
2.3.2 交叉熵误差
表示神经网络输出,表示监督数据,表示数据的维度
$ log$是以e为底数的自然对数