商务网站开发方式,做网站费用走什么科目,中卫设计师招聘,查天眼企业0前言机器学习的初学者很容易被各种模型搞得晕头转向。如果扎进各种模型的细节无法自拔的话#xff0c;可能很难发现一般化的框架。如果你觉得神经网络是非常不同的机器学习模型#xff0c;如果你觉得神经网络的各种新名词让你觉得这完全就是一片新天地#xff0c;那么可能你… 0前言机器学习的初学者很容易被各种模型搞得晕头转向。如果扎进各种模型的细节无法自拔的话可能很难发现一般化的框架。如果你觉得神经网络是非常不同的机器学习模型如果你觉得神经网络的各种新名词让你觉得这完全就是一片新天地那么可能你已经陷入到这些细节里啦。所以小夕希望通过本文将这些同学拔出来重新审视一下学过的东西。1一般化机器学习至此小夕已经或多或少的讲解了逻辑回归模型、朴素贝叶斯模型、神经网络虽然小夕通过一系列的文章将这三个模型之间互相关联但是小夕一直没有将其纳入更上层的框架之下。 下面小夕将依次献上机器学习模型的组成机器学习模型的训练机器学习模型的测试/使用 组成对于一个典型的机器学习模型M其一般重点由以下三部分组成模型的输入的格式即特征向量x。已知模型参数的情况下将特征向量x映射成其标签类别y的函数即用来直接输出类别或者间接输出类别的假设函数(有时也叫打分函数(scoring)、模型函数、预测函数等)。这也是机器学习模型M的核心有时甚至可以直接用假设函数代指一个模型。衡量当前参数下的模型与大自然真实模型之间误差的函数即损失函数(loss function, 也叫代价函数(cost function))。损失函数的计算以假设函数的计算为基础。一个模型的损失函数往往是固定的但是也完全有可能一个模型对应着好几个损失函数甚至模型太过灵活直接兼容各种损失函数此时损失函数的选择与数据集的结构和模型输入x的格式有关。训练对于一个典型的机器学习模型M的训练过程其一般由以下4步完成拿到原始数据将原始数据集通过预处理来生成m个样本n个维度的特征向量集X端到端的模型中特征向量恰好是“原始数据”。初始化模型M的参数(parameters)与超参数(hyperparameters)并确定一个用于寻找最优模型参数的最优化算法O。基于全部X或部分X利用优化算法O来最小化损失函数。这个过程要经历N次迭代每次迭代都会更新模型参数并且计算此时损失函数的值。记录下每次迭代后的损失函数的值以及对应的模型参数。从N次迭代中选出使得测试集准确率最高的那次迭代后的参数作为模型M最终的参数完成训练。对于步骤1需要明确x的形式比如x包含几部分每一部分有多少维度对于步骤2模型的参数的初始化很可能会大大影响模型最终的精度。如果你刚开始将模型的参数扔到了坑坑洼洼的地方那很可能迭代几次就陷入到一个很差劲的局部最优点极大的降低一个优秀模型的最终准确率。但是如果你刚开始将模型的参数扔到了距离马里亚纳海沟不远的地方那很可能收敛到全局最优点极大的提高模型的最终准确率。超参数包含但不限于batch的大小batch的大小即每次求解损失函数时使用的样本数量、优化算法的参数如步长等一系列需要在第3步进行前就要固定死的参数即如果不事前给超参数赋值那么无法进行第3步对于步骤3运行优化算法时优化算法的内部会计算损失函数在当前输入当前模型参数处的梯度/导数这个计算往往要用到全部的样本x然而当样本集过大时也可以只使用一部分x来近似计算梯度/导数当然这是优化算法内部的工作啦。另外需要迭代的次数N取决于系统设计者比如可以达到一个最大迭代步数后停止因此最大迭代步数当然是个超参数比如可以每次迭代后立刻用这次得到的参数在测试集上计算准确率当测试集上的准确率不再提高时结束迭代对于步骤4其实测试集准确率最高的那次迭代往往就是训练时损失函数值下降最快的那次迭代训练曲线最弯的地方如下图红色曲线的最高点对应着绿色曲线最弯的地方。因此既可以直接计算出红色曲线来得到真正的测试集准确度最高的迭代在测试代价太高时也可以用绿色曲线最弯的那次迭代来近似。 测试/使用 对于一个已经训练完成的典型的机器学习模型M的测试/使用步骤将需要测试/处理的数据处理成模型M的输入的格式即特征向量x。将特征向量x输入到(当然是已知参数的)假设函数中直接或间接的得到该样本的标签/类别。2神经网络好啦~大框架结束了。下面将神经网络往里面丢~小夕温馨提示紫色与绿色是成对出现的哦1、整个神经网络描述的是什么呢比如下面这个最传统的前馈神经网络是什么呢 不过就是假设函数的可视化图片而已啦╮(╯▽╰)╭其中K(*)就是传说中的激活函数如sigmoid函数、tanh函数、ReLu函数等不就是隐含层每个隐单元的输出嘛~所以当然是以输入层x为输入啦。只不过这个假设函数用数学表示起来比较麻烦所以大家往往看到上面那个三层网络会立刻想到前馈神经网络而看到这个假设函数就没有前馈神经网络的条件反射了。而大家将这个图片直接跟前馈神经网络挂钩也就说明假设函数基本就可以代表一个机器学习模型的直观印象了。 2、而神经网络中所谓的前向算法是什么呢前向算法做了什么呢不就是将一个特征向量丢进模型然后一层层往前推一直推到输出层出结果嘛~站在上层看这个过程的话是什么不就是将x映射成了y嘛~是的不过是计算了一下假设函数而已啦╮(╯▽╰)╭ 3、而神经网络中所谓的反向传播算法BP算法是什么呢首先还记不记得BP算法的最开头要在输出层计算一下误差这一步在干嘛呢当然就是在计算损失函数啦~这个误差就是损失函数的输出啦~ 然后还记不记得各种入门视频中千叮咛万嘱咐的一定要先实现和调试前向算法再完成BP算法呐~诶为什么这就是前面小夕讲的“损失函数是基于假设函数的结果来计算的”啦~损失函数的值是BP算法的开始那当然要在BP算法开始之前先保证可以计算前向算法假设函数啦。 再然后那么BP算法将这个误差往前传播边传播边根据某种规则更新各个边的权重传到了输入层就更新完了所有的边的权重。这是在干嘛呢边的权重不就是神经网络这个模型M的参数嘛~我们前面说基于全部或部分x利用“什么”可以更新模型参数来这里的“什么”就是优化算法啦~所以说BP算法只是一种优化算法而已~提前告诉你本质上是一种巧妙计算梯度的梯度下降法 怎么样看似自成一派的神经网络也是死死卡在一般化机器学习框架里的。像逻辑回归、SVM等就更不用说了只不过神经网络这个机器学习模型同时还卡上了生物模型生物中的神经网络因此其有各种有趣的名字和演变但是也不要忘记这依然是一种机器学习方法。 那么其他的各种神经网络比如CNN、RNN甚至LSTM呢深度神经网络呢难道100层的深度XXX网络也逃不出这个框架你试试不就知道啦(∇)