@sambodhi
2017-11-20T16:14:11.000000Z
字数 4623
阅读 6734
作者|Kailash Ahirwar
编译|Sambodhi
编辑|Vincent
AI前线导语:理解什么是人工智能,以及机器学习和深度学习是如何影响人工智能的,这是一种荡气回肠的体验。最近,MateLabs联合创始人兼CTO Kailash Ahirwar在Mudium发布了一篇博文《关于神经网络你不能不知道的一切》[1](Everything you need to know about Neural Networks)。
本文涵盖了从神经元到训练轮数,介绍了神经网络的关键名词术语,AI前线也做了一些批注、解释,以飨读者进一步理解、掌握。
神经元(节点)(Neuron(Node)):是神经网络的基本单元,包含一定数量的输入和一个偏置值。当输入一个信号(值),它就乘以一个权重值。如果一个神经元有四个输入,那么它在训练中有四个可调节的权重值。
神经网络中一个神经元的运算
连接(Connections):用于连接两层之间或同层的两个神经元。每个连接总带有一个权重值。训练的目标是更新这个权重值来减少损失(误差)。
偏置(偏移)(Bias(offset)):是神经元的一个额外的输入,其值始终为1,有自己的连接权。这就确保即使所有的输入为0时神经元也会有一个激活函数。
AI前线:注意不要和预测偏差混淆。
激活函数(传递函数)(Activation Function(Transfer Function)):激活函数为神经网络引入非线性特征。它将值压缩到一个更小的范围。一个Sigmoid激活函数的值区间为[0,1]。在深度学习中有很多激活函数,如ReLU、SeLU、TanH等,都比Sigmoid激活函数更为常用。要了解更多激活函数,请参阅MateLabs的《概览深度学习中的激活函数》[2](Secret Sauce behind the beauty of Deep Learning:Beginners guide to Activation Functions)。
AI前线:即将前一层所有神经元激活值的加权和输入到一个非线性函数中,然后向下一层传递该函数的输出值(典型的非线性)。
各种激活函数
基本的神经网络设计
输入层(Input Layer):神经网络的第一层,用于接受输入信号(值)并传递到下一层,对其输入的信号(值)并不执行任何运算,没有自己的权重值和偏置值。在我们的网络中,有四个输入信号为x1、x2、x3、x4。
隐藏层(Hidden Layers):隐藏层的神经元(节点)通过不同的转换方式输入数据。一个隐藏层是一个垂直堆栈神经元集。在上图所示中,有五个隐藏层,第一个隐藏层有四个神经元(节点),第二个有五个神经元,第三个有六个神经元,第四个有四个神经元,第五个有三个神经元,最后一个隐藏层将值传递给输出层。隐藏层中所有的神经元彼此互联,下一层的神经元也是如此,因此我们就有了一个全连接的隐藏层。
AI前线:神经网络中位于输入层(即特征)和输出层(即预测)之间的合成层。一个神经网络包含一个或多个隐藏层。
输出层(Output Layer):是神经网络的最后一层,接收最后一个隐藏层的输入。通过这一层我们可以得到理想范围内的期望数目的值。如上图所示,这个神经网络中的输出层有三个神经元,分别输出为y1、y2、y3。
AI前线:这一层包含整个模型所寻求的答案。
输入形状(Input Shape):指传递给输入层的输入矩阵的形状。我们的神经网络的输入层有四个神经元,预计一个样本的四个值。如果我们一次馈送这个神经网络一个样本,那么它的理想输入形状应该是(1,4,1)。如果我们馈送一百个样本,那么输入形状将是(100,4,1)。不同的库预计有不同格式的形状。
权重(参数)(Weights(Parameters)):表示单元之间连接的强度。如果从节点1到节点2的权重幅度更大,则说明神经元1对神经元2的影响更大。权重降低了输入值的重要性。权重接近0意味着改变这个输入将不会改变输出。负权重意味着增加这个输入将会降低输出。权重决定输入对输出的影响程度。
AI前线:线性模型中的特征系数,或者深度网络中的边缘。线性模型的训练目标是为每个特征确定一个完美的权重。如果权重为0,则对应的特征对模型而言是无用的。
前向传播
前向传播(Forward Propagation):是指将输入值馈送到神经网络的过程,并获得一个我们称之为预测值的输出。前向传播有时亦称为推理。当我们将输入值馈送到神经网络的第一层时,不执行任何运算。第二层从第一层获取值,然后执行乘法、加法和激活运算,并将该值传递给下一层。后续的层重复同样的过程,最终,我们将在最后一层得到输出值。
反向转播
反向传播(Back-Propagation):我们在前向传播之后得到一个输出值,这就是预测值。为计算误差,我们将预测值与真实输出值进行比较。我们使用一个损失函数(下文将提到)来计算误差值。然后我们计算每个误差值的导数和神经网络的每个权重。反向传播应用微分学的链式法则。在链式法则中,首先计算最后一层中每个误差值的导数。我们调用这些导数、梯度,使用这些梯度值计算导数第二层的梯度,重复这一过程,直至获得梯度及神经网络中的每个权重。然后从权重值中减去这个梯度值来降低误差。这样,我们就能不断逼近局部最小值(即最小损失)。
AI前线:神经网络中完成梯度下降的重要算法。首先,在前向传播的过程中计算每个节点的输出值。然后,在反向传播的过程中计算与每个参数对应的误差的偏导数。
学习率(Learning rate):训练神经网络时,通常使用梯度下降优化权重。在每一次迭代中,使用反向传播计算损失函数对每一个权重的导数,并中当前权重减去导数和学习率的乘积。学习率决定了更新权重(参数)值的频率。学习率应该尽可能高,这样就不会耗费太久就可达到收敛,而且也应该尽可能低,从而找到局部最优。
AI前线:学习率是一个重要的超参数。它是通过梯度下降训练模型时使用的一个标量。每次迭代中,梯度下降算法使学习率乘以梯度,乘积叫作gradient step。
精度和召回率
准确率(Accuracy):指测量值对标准值或已知值的接近程度。
AI前线:可以理解为分类模型预测准确的比例。
在多类别分类中,准确率定义如下:
在二分类中,准确率定义如下:
精度(Precision):指两个测试值之间的接近程度,表示测量的可重复性或可再现性。
AI前线:分类模型的一种指标。准确率指模型预测正类时预测正确的频率。即:
召回(灵敏度)(Recall(Sensitivity)):指全部相关实例中被恢复的相关实例的比率。
Ai前线注:分类模型的一个指标,即:
混淆矩阵(Confusion Matrix):Wikipedia[3]解释如下:
机器学习领域和统计分类问题中,混淆矩阵(亦称误差矩阵(error matrix)),是一个算法性能的可视化表格,通常在监督学习中使用(在无监督学习中通常被称为匹配矩阵(matching matrix))。矩阵的每一行表示预测类,每一列表示一个真实类(反之亦然)。采用这个名字是因为易于解读,能很容易地看出系统对两个类别的混淆程度(即将一个类别错误标记为另一个)。
混淆矩阵
AI前线:总结分类模型的预测结果的表现水平(即,标签和模型分类的匹配程度)的NxN表格。混淆矩阵的一个轴列出模型预测的标签,另一个轴列出实际的标签。N表示类别的数量。
收敛(Convergence):指随着迭代的进行,输出越来越接近具体的值。
AI前线:训练过程达到的某种状态,其中训练损失和验证损失在经过了确定的迭代次数后,在每一次迭代中,改变很小或完全不变。换句话说就是,当对当前数据继续训练而无法再提升模型的表现水平的时候,就称模型已经收敛。在深度学习中,损失值下降之前,有时候经过多次迭代仍保持常量或者接近常量,会造成模型已经收敛的错觉。
正则化(Regularization):用于解决过拟合的问题。正则化过程中通过添加一个L1(LASSO)或L2(Ridge)规范到权重向量w(通过给定算法学习到的参数)上,来“惩罚”损失项:
L(损失函数)+λN(w):
此处λ为正则项,N(w)是L1或L2规范。
L(损失函数)+λN(w)-此处λ是正则项,N(w)是L1或L2规范。
归一化(Normalisation):指将一个或多个属性的值缩放到0~1的范围的过程。当尚未知晓数据分布或者分布不是高斯分布(呈钟形曲线)时,规范化就很有用,可加快学习进程。
AI前线:假设某个特征的自然区间是800~6000。通过减法和分割,你可以把那些值标准化到区间-1到+1。参见缩放。
全连接层(Fully Connected Layers):一个层所有节点的激活函数值传递到下一层的每个节点。当第L层所有的节点都与第L+1层所有节点连接时,那么这些层就是全连接层。
全连接层
损失函数/成本函数(Loss Function/Cost Function):损失函数计算单个训练样本的错误,成本函数是整个训练集的损失函数的平均。
-‘mse’:均方误差(Mean Squared Error)
-‘binary_crossentropy’:二分类对数损失(logloss)
-‘categorical_crossentropy’:多分类对数损失(logloss)
模型优化器(ModelOptimizers):优化器是一种搜索技术,用于更新模型的权重。
-SGD:随机梯度下降,支持动量算法。
-RMSprop:自适应学习率的优化法,Geoff Hinton提出。
-Adam:自适应矩估计(Adam)也使用自适应学习率。
性能指标(Performance Metrics):性能指标用于衡量神经网络的性能,包括准确率、损失、验证准确性、验证损失、平均绝对误差、精度、召回率和f1分数等。
批量大小(Batch Size):一次前向/反向传播中的训练样本数。批量越大,则占用的内存量也越大。
AI前线:一个批量中样本的数量。例如,SGD的批量大小为1,而mini-batch的批量大小通常在10-1000之间。批量大小通常在训练与推理的过程中确定,然而TensorFlow不允许动态批量大小。
训练轮数(Training Epochs):指模型在训练数据集上重复训练的次数。
一个轮数就是全部训练示例的一次前向传播和一次反向传播。