赞
踩
版权声明:本文为CSDN博主「Dominic221」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_38206214/article/details/81137911
一、前言
多层感知器(Multi-Layer Perceptron,MLP)也叫人工神经网络(Artificial Neural Network,ANN),除了输入输出层,它中间可以有多个隐层。最简单的MLP需要有一层隐层,即输入层、隐层和输出层才能称为一个简单的神经网络。习惯原因我之后会称为神经网络。通俗而言,神经网络是仿生物神经网络而来的一种技术,通过连接多个特征值,经过线性和非线性的组合,最终达到一个目标,这个目标可以是识别这个图片是不是一只猫,是不是一条狗或者属于哪个分布。
有输入输出层,它中间可以有多个隐层,通过线性和非线性组合来识别一个目标
首先我们先对图中的参数做一个解释:
其中,第0层(输入层),我们将X1,X2和X3向量化为X;
0层和1层(隐层)之间,存在权重W1(X1到各个隐层),W2…W4,向量化为W[1],其中[1]表示第1层的权重,偏置B同理;
对于第1层,计算公式为
Z[1] = W[1]X + B[1]
A[1] = SIGMOID(Z[1])
Z[2] = W[2]A[1] + B[2]
A[2] = SIGMOID(Z[2])
YHAT = A[2]
其中YHAT即为本次神经网络的输出值。
其中Z为输入值的线性组合,A为Z通过激活函数SIGMOID的值,对于第1层的输入值为X,输出值为A,也是下一层的输入值;
1层和2层(输出层)之间,与0层和1层之间类似,其计算公式如下:
Z[2] = W[2]A[1] + B[2]
A[2] = SIGMOID(Z[2])
YHAT = A[2]
其中YHAT即为本次神经网络的输出值
**
为什么要使用激活函数:根据输出的计算可以发现,其实隐层的每个神经元是由输入特征x的线性组合构成。然而如果仅仅是线性组合,那么不管这个神经网络有多少层,结果都将与特征线性相关。于是我们在每个神经元结果z之后,添加一个激活函数(Activation Function),改变线性规则,
:**在Sigmoid函数中,a的值在[0,1]之间,我们可以将其理解为一个阀。就像是人的神经元一样,当我们一个神经元受到的刺激时,我们并不是立刻感觉到,而是当这个刺激值超过了阀值,才会让神经元向上级神经元发出信号。
在选择激活函数的时候,如果不知道该选什么的时候就选择ReLU,当然具体训练中,需要我们去探索哪种函数更适
在神经网络的训练中,我们通过损失函数(Loss Function)来衡量这个神经网络的训练是否到位了,看所描述的线是否与特征值吻合。
一般情况下,使用平方差来衡量:
事实上,我们一般不使用平方差来作为二分类问题的损失函数,因为平方差损失函数一般是非凸函数,我们可能会得到局部最优解,而不是全局最优解。因此我们选择如下函数:
交叉函数一般应用于二分类问题
其实,y为样本真实值,yhat为样本预测值;
当y=1时,yhat越接近1,L(yhat,y)越接近0,表示预测效果越好;
当y=0时,yhat越接近0,L(yhat,y)越接近0,预测效果越好。
那么我们的目标即为使损失函数到达最小值,其中损失函数针对单个样本。
代价函数(Cost Function)
全部训练数据集的损失函数的平均值,即为训练集的代价函数:
根据上述公式,可以发现代价函数其实是w和b的函数,实际上我们的目标是迭代来计算出最佳的w和b的值(矩阵),使代价函数最小化(接近0),也就是最好的训练结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。