神经网络结构:
它是神经网络的基本单位。它获得一定数量的输入和一个偏置值。当信号(值)到达时会乘以一个权值。如果神经元有4个输入,那么就有4个权值,权重可以在训练时调整。
将一个神经元连接到另一层或同一层的另一个神经元。连接伴随着与之相关联的权值。训练的目标是更新此权值以减少损失(即错误)。
它是神经元的额外输入,它始终为1,并具有自己的连接权重。这确保即使所有的输入都为空(全部为0),神经元也会激活。
激活函数用于将非线性引入神经网络。它会将值缩小到较小的范围内。Sigmoid激活函数的压缩范围为0到1之间。在深度学习中有许多激活函数可用,ReLU,SeLU和TanH均优于Sigmoid激活函数。小亮这里还想多说几句:关于激活函数为什么要引入激活函数呢?其实,上面的z已经是一个计算结果了,但是呢它不是我们最终想要的结果!!!上面的z有可能是0到1的一个数字,也可以是任意一个可能大于0或者小于0的整数,但是呢我们一般用神经网络是想解决分类问题,大多数时候,我们需要输出一个0或者1,代表是或者否,那么如何处理呢?如果大于0,我们就把它作为1,如果小于0,我们就把它输出为0,这是最简单的传递函数的一种用法,我们可以把它看作格式化输出结果,将结果变成我们可以使用的一种符号或者数字。
神经网络中的第一层。它需要输入信号(值)并将它们传递到下一层。它不对输入信号(值)做任何操作,并且没有关联的权重和偏置值。在我们的网络中,我们有4个输入信号x1,x2,x3,x4。
Input Shape :它是我们传递给输入层的输入矩阵形状。我们网络的输入层有4个神经元,它期望1个样本的4个值。如果我们一次只提供一个样本,我们网络的期望输入形状是(1,4,1)。如果我们提供100个样品,则输入形状将为(100,4,1)。不同的库期望形状的格式是不同的。
隐藏层具有对输入数据应用不同变换的神经元(节点)。一个隐藏层是垂直排列的神经元的集合(Representation)。在我们给出的图像中有5个隐藏层。在我们的网络中,第一隐层有4个神经元(节点),第2层有5个神经元,第3层有6个神经元,第4层有4个,第5层有3个神经元。最后一个隐藏层将值传递给输出层。隐藏层中的每个神经元都与下一层的每一个神经元有连接,因此我们有一个完全连接的隐藏层。
这是网络的最后一层,它接收来自最后一个隐藏层的输入。通过这个层,我们可以知道期望的值和期望的范围。在这个网络中,输出层有3个神经元,输出y1,y2,y3。
权重表示单元之间连接的强度。如果从节点1到节点2的权重比较大,意味着神经元1对神经元2的影响比较大。权重降低了输入值的重要性。当权重接近零时意味着更改此输入将不会更改输出。负权重意味着增加此输入会降低输出。权重决定了输入对输出的影响程度。
前向传播的过程是向神经网络馈送输入值并得到我们称为预测值的输出。当我们将输入值提供给神经网络的第一层时,它没有进行任何操作。第二层从第一层获取值并进行乘法,加法和激活操作,然后将得到的值传递给下一层。在后面的层中执行相同的操作,最后我们在最后一层得到一个输出值。
前向传播后,我们得到一个被称为预测值的输出值。为了计算误差,我们将预测值与实际输出值进行比较。我们使用损失函数(下面会提到)来计算误差值。然后我们计算神经网络中每一个误差值的导数和每一个权重。反向传播使用微分学的链式法则。在链条法则中,首先我们计算对应最后一层权值的误差值的导数。我们称这些导数为:梯度,然后使用这些梯度值来计算倒数第二层的梯度。重复此过程,直到我们得到神经网络中每个权重的梯度。然后从权值中减去该梯度值,以减少误差值。这样,我们就更接近(下降)局部最小值(也就是说最小的损失)。
当我们训练神经网络时,我们通常使用梯度下降法来优化权重。在每次迭代中,我们都使用反向传播来计算每个权重的损失函数的导数,并从这个权重中减去它。学习率决定了你想要更新权重(参数)值的速度。学习率不能太低导致收敛的速度缓慢,也不能太高导致找不到局部最小值。
准确率:准确率是指测量值与标准值或已知值的接近程度。
精确率:精确率是指两个或更多测量值的接近程度。它代表测量的重复性或再现性。
召回率:召回率是指在相关实例总数中已经检索到的相关实例的占比。
在机器学习领域特别是关于统计分类的问题,一个混淆矩阵(也称为误差矩阵),是一种特定的表格布局,它让你可以将算法的性能可视化(通常在监督学习中使用,在无监督学习它通常称为匹配矩阵)。矩阵的每一行表示预测类中的实例,而每一列表示实际类中的实例(反之亦然)。这个名字源于这样一个事实:它很容易看出系统是否混淆了两个类(通常是错误地标记成另一个)。
收敛是指迭代进行时输出越来越接近特定值。
于克服过拟合问题。在正则化中,我们通过在权重向量w(它是给定算法中的学习参数的向量)中添加L1(LASSO)或L2(Ridge)范数来惩罚我们的损失项。
L(损失函数)+ λN(w) – 这里λ是你的正则项,N(w)是L1或L2范数
数据归一化是将一个或多个属性重新调整到0到1的范围的过程。当你不知道数据的分布或者当你知道分布不是高斯函数(钟形曲线)时,归一化是一种很好的解决方法。它有助于加速学习过程。
当一层中的所有节点的激活进入下一层中的每个节点时。当第L层中的所有节点连接到第(L + 1)层中的所有节点时,我们将这些层称为完全连接的层。
损失函数计算单个训练示例的误差。代价函数是整个训练集的损失函数的平均值。
mse:均方误差。
binary_crossentropy:用于二进制对数损失(logloss)。
categorical_crossentropy:用于多类的对数损失(logloss)。
优化器是一种用于更新模型中权重的搜索技术。
SGD:随机梯度下降,支持动量。
RMSprop:由Geoff Hinton提出的自适应学习率优化方法。
Adam: Adaptive Moment Estimation (Adam自适应时刻估计方法),能计算每个参数的自适应学习率。
性能指标用于测量神经网络的性能。准确率,损失,验证精度,验证损失,平均绝对误差,精确率,召回率和f1分数都是一些性能指标。
通过前向或反向训练的示例数。批量尺寸越大,你需要的内存空间就越大。
模型接触训练数据集的次数。每一次等于一次通过前向或反向的所有训练实例。
batchsize:中文翻译为批大小(批尺寸)。简单点说,批量大小将决定我们一次训练的样本数目。batch size将决定我们一次训练的样本数目。注意:batch size 和 number of batches是不同的。在不能将数据一次性通过神经网络的时候,就需要将数据集分成几个batch。
batch_size将影响到模型的优化程度和速度。
适当的增加Batch_Size的优点:
1.通过并行化提高内存利用率。
2.单次epoch的迭代次数减少,提高运行速度。(单次epoch=(全部训练样本/batchsize)/iteration=1)
3.适当的增加Batch_Size,梯度下降方向准确度增加,训练震动的幅度减小。(看上图便可知晓)
经验总结:
相对于正常数据集,如果Batch_Size过小,训练数据就会非常难收敛,从而导致underfitting。
增大Batch_Size,相对处理速度加快。
增大Batch_Size,所需内存容量增加(epoch的次数需要增加以达到最好的结果)
这里我们发现上面两个矛盾的问题,因为当epoch增加以后同样也会导致耗时增加从而速度下降。因此我们需要寻找最好的Batch_Size。
为什么需要有Batch_Size:batchsize的正确选择是为了在内存效率和内存容量之间寻找最佳平衡。
iteration:中文翻译为迭代。迭代是重复反馈的动作,神经网络中我们希望通过迭代进行多次的训练以达到所需的目标或结果。每一次迭代得到的结果都会被作为下一次迭代的初始值。一个迭代=一个正向通过+一个反向通过。Iteration是batch需要完成一个epoch的次数。
epoch:中文翻译为时期。一个时期=所有训练样本的一个正向传递和一个反向传递。
深度学习中经常看到epoch、iteration和batchsize,下面按照自己的理解说说这三个区别:
(1)batchsize:批大小。在深度学习中,一般采用SGD训练,即每次训练在训练集中取batchsize个样本训练;
(2)iteration:1个iteration等于使用batchsize个样本训练一次;
(3)epoch:1个epoch等于使用训练集中的全部样本训练一次;
举个例子,训练集有1000个样本,batchsize=10,那么:
训练完整个样本集需要:100次iteration,1次epoch。
神经网络训练中,Epoch、Batch Size、和迭代傻傻的分不清?
为了理解这些术语有什么不同,我们需要了解一些关于机器学习的术语,比如梯度下降,帮助我们理解。
这里简单的总结梯度下降的含义:梯度下降是一个在机器学习中用于寻找较佳结果(曲线的最小值)的迭代优化算法。
梯度的含义是斜率或者斜坡的倾斜度。
下降的含义是代价函数的下降。
算法是迭代的,意思是需要多次使用算法获取结果,以得到最优化结果。梯度下降的迭代性质能使欠拟合演变成获得对数据的较佳拟合
梯度下降中有一个称为学习率的参量。如上图左所示,刚开始学习率较大,因此下降步长更大。随着点的下降,学习率变得越来越小,从而下降步长也变小。同时,代价函数也在减小,或者说代价在减小,有时候也称为损失函数或者损失,两者是一样的。(损失/代价的减小是一个概念)。
只有在数据很庞大的时候(在机器学习中,数据一般情况下都会很大),我们才需要使用epochs,batch size,iteration这些术语,在这种情况下,一次性将数据输入计算机是不可能的。因此,为了解决这个问题,我们需要把数据分成小块,一块一块的传递给计算机,在每一步的末端更新神经网络的权重,拟合给定的数据。
epoch
当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一次epoch。然而,当一个epoch对于计算机而言太庞大的时候,就需要把它分成多个小块。
为什么要使用多于一个epoch?
在神经网络中传递完整的数据集一次是不够的,而且我们需要将完整的数据集在同样的神经网络中传递多次。但请记住,我们使用的是有限的数据集,并且我们使用一个迭代过程即梯度下降来优化学习过程。如下图所示。因此仅仅更新一次或者说使用一个epoch是不够的。
随着epoch数量增加,神经网络中的权重的更新次数也在增加,曲线从欠拟合变得过拟合。
那么,问题来了,几个epoch才是合适的呢?
不幸的是,这个问题并没有正确的答案。对于不同的数据集,答案是不一样的。但是数据的多样性会影响合适的epoch的数量。比如,只有黑色的猫的数据集,以及有各种颜色的猫的数据集。
原文地址:https://blog.csdn.net/jinyuan7708/article/details/82466653