机器学习--01基础模型知识

目录

第一节 模型的出现

第二节 参数的优化

第三节 cnn 第四节 自注意力机制 第五节 transformer

所有文字都是重要的,文字和图片是配合理解的,全是口语化表达,很多地方标注不明显,有不明白的敬请谅解

第一节 模型的出现

机器学习\approx寻找一个函数,这个函数人是写不出现的,根据我们要找不同函数 ,可以分为:regression(输出是一个数值)、classification(人类提供选项,让机器来判断)、structured learning(让机器学会创造)

如何找到这个函数?==》找这个函数的过程分为3个步骤。第一步:首先要写出一个带有未知参数的函数,猜测这个未知函数的输入和输出有什么关系,假设为y=b+wx₁,x₁(feature)表示已知资讯,b(bias)和w(weight)是未知的参数是要通过资讯来得到的,而这个函数就叫model模型;第二步:定义一个loss函数,这个函数的输入是b和w,输出的结果是判断输入b和w作用在y上面的好坏,那有如何来计算这个loss函数?这个就要从训练资料里面来进行计算,而训练资料是什么呢?训练资料就是以往的数据,通过把过往第一天的数据用这个loss函数进行计算得到的结果和第二天实际得到的结果进行比较就能判断这个b和w到底好不好,真正好的结果叫做label第三步:解决最佳化的问题,找到w和b使得loss最小--->使用到的技术为gradient descent,做法就是控制变量,先只求w,b不管来求得loss,w⁰为随机,η是自己设定的(learning rate这就是参数),如果发现微分的值是0的时候那么w就停下来了(这是局部最优解,但是在实际情况下,这不一定是全局最优解),对于求参数b就和求参数w差不多,随机初始值以及求导并且不断更新得到最终的值。完成以上步骤就得到了函数也就是模型,这三个步骤也叫做训练(因为数据都是以往的),那么现在就要拿这个模型进行预测新的数据,看模型是否正确!

如果模型不是很好,那么要如何修改这个模型呢?具体情况具体分析

y=b+wx₁像这样的函数模型叫做linear models:其实这个函数就是一条直线,这个模型是太简单了,这样的模型其实会限制到真正的预测,这个限制就叫做model bias(这个和bais没有关系)。这个时候就要写出一个更加好的更加复杂的模型,这个模型的出现是由很多个linear models组合成的,就是说很多直线函数组合成一个分段函数就变复杂了,这个函数叫做piecewise linear curves,这样的直线越多就越逼近成任何的曲线,而这些直线函数又要如何写出现来呢?通过y=c\frac{1}{1+e^-{b+wx_{1}}}来决定,而这个sigmoid函数(写做c·sigmoid(b+wx₁))如果x₁过大或者过小那么e的作用就会消失,这样通过b和w和c就能生成各种直线函数,改变w就会发生斜率的变,改变b就会左右移动,改变c就会变高度。

如果输入的x不只有x₁的话,而是多个变量,则表示,图片上形成的a也能作为下次输入的x接着进行训练,不过此时的w和b要变为其他的参数了。

当输入的未知参数很多的时候我们统一用θ表示,计算损失函数、找到w和b等未知参数和上面都是一样的。neuron也叫layer,如果由很多的neuron就叫做deep learing,也有其他名字fully-connected

通过以上的所有步骤就找到了这个函数也就是模型

relu函数来实现sigmoid,通过sigmoid和relu都能形成复杂的函数图像

第二节 参数的优化

训练模型分为三步:①function with unknown未知函数y=f_{\Theta }(x),所有未知参数用θ表示,输入为x;②define loss from training data定义一个损失函数L(\Theta ),输入是一组参数,输出是这些参数的好坏;③optimization从一组参数中找到最好的θ

但是出现了我们不想要的结果,先在训练数据上进行查看,判断这是模型出现了问题,还是说optimization找到的参数不对?,然后再到预测数据上进行判断。如果在训练数据上层数大的模型比层数小的模型loss还要大的话那么一定的optimization出现了问题,因为层数大的可以在层数小的基础上不变,也就不会变大,但是它变大也就只能是参数问题了。overfitting的意思就是在训练资料上loss很低,但是到了预测资料上的时候反而变的更大了,解决方法一就是增加训练资料、方法二数据增强。

如何找到这个最好的模型也就是训练loss和预测loss都是在合适的位置上的模型,可能出现一个函数在训练数据上很好,但是在预测数据上不行(就比如这个模型是如果输入的在训练的数据就输出相应的y,但是如果不是输入的x就随机生成y,这样对于没见过的预测输入数据,这样的y全是随机的,但是对于训练的loss却是最低的,但是可能运气好出现了一个模型,他的随机数刚好对于预测集合生成的loss很小,但是对于其他的预测集合就不一定了,所以要把预测集合和训练集合分为两部分),预测集合分为public预测集合和private预测集合,训练集合分为training训练集合和validation训练集合,这样得到的模型更加趋于正确。而要如何把整个集合划分为两个集合呢?这个时候可以使用N-fold cross validation来实现,先把集合分为N分,一份为train,其他全为val(每一个换一个地方的为train,一共出现n次),然后让模型在train上进行训练再平均下来,这样得到最好的模型,然后再把模型放到预测集合进行实验。

optimization为什么会失败===》就是说在更新参数的时候为什么loss不能降下来(可能是出现了saddle point和local minima两种情况,也1就是微分为0)。

训练技巧batch和momentum:第一batch是把训练集合随机分为多个batch,然后拿取batch去做loss函数,那为什么需要用batch?如果没有batch的话,每次要把训练资料全部学习完之后才能计算loss,但是对于有batch的话,一个batch我们就能更新一次loss了,使用batch对于计算loss时间长度受到batch size大小的影响,通常情况下是有batch的训练集合好,并且batch大小小一点的好,是因为小的batch更加的趋于稳定,当预测数据的函数出现偏差的时候那么出现的误差也不会很大。

第二momentum是让gradient descent(找到微分为0的点就不会更新参数了)和momentum进行结合,momentum是在更新参数的时候不再是和gradient descent一样往参数相反的方向更新,而是经过计算往其他方向调整参数,这样可能在原来的情况下不能再更新参数,但是加入了momentum就能继续更新参数了。

微分为0的位置(也就是loss不再下降的时候)不一定是我们在训练过程中最大的问题,此时出现loss不再下降可能并不是gradient已经降到很小(微分为0),多数情况下是在还没有走到minimum(微分为0)的时候loss就已经不再下降了,那为什么会出现这样的情况呢?如何把gradient descend做的更好?就是要改变learning rate,不能让learning rate一直不变;root mean square方法i表示的是哪个参数,上标的t表示对这个参数进行更新的次数,η是自己设定的固定值,通过修改gradient这样能实现坡度比较小的时候learning rate变大,这样就能让微分走的更远。还要比这个方法好一点的就是rmsprop方法,所以现在进行optimiaztion就是通过rmsprop+momentum结合。

总结:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值