Datawhale X 李宏毅苹果书 AI夏令营 Task01

Part1 基本概念

        机器学习:通过从经验中学习,使计算机能够从数据中提取出规律、模式和知识,并利用这些知识来做出预测、做出决策或执行任务,而无需明确地编程规则。可以让机器具备找函数的能力,机器可以根据输入产生相应的输出

        深度学习:使用多层神经网络来模拟人脑处理数据的机器学习方法

        机器学习常见的分类:

  1. 回归:机器要得到的输出是一个数、一个标量
  2. 分类:给定若干个选择,给定输入,机器在给定的选择中选择结果输出
  3. 结构化学习:机器产生的输出不只是数,可能是图片、文章等

        另外的分类:

  1. 监督学习
  2. 无监督学习

Part2 机器学习找函数过程

        Step1 定义函数

                写出一个能预测输出的带未知数的函数,如y=b+wx,这种带未知数的函数被称为模型

                y是预测的结果,x是已知的量称为特征,b、w均为未知数,b称为偏置,w称为权重

                b、w两个未知数是根据相应的领域知识猜测而来的

        Step2 定义损失

                损失也是一个函数,它与b、w两个未知数有关L(b,w)

                损失的计算要从训练数据来,其中真实的值称为标签

                给定b、w后就可以根据已知的特征x算出预估值ŷ,从而得出预估的值跟真实的值y的差距e,差距e的计算不止一种方法,如平均绝对误差e=|y−ŷ|,均方误差e=(ŷ−y)2,交叉熵等

                最后,通过训练数据与差距得到损失函数(由自己定义),L越大,代表这一组参数越不好;L越小,代表这组参数越好

                由于b、w可以自由选择,所以损失可以看成关于b、w的二元函数,b、w的自由组合,由此就可以画出以下等高线图称为误差表面

                在这个等高线图上面,越偏红色系,代表计算出来的损失越大,就代表这一组 w 跟 b 越差。如果越偏蓝色系,就代表损失越小,就代表这一组 w 跟 b 越好,拿这一组 w 跟 b,放到函数里面,预测会越精准。

        Step3 解最优化问题

                找到一组b、w,使得带进去的特征使得L最小,这个可以让损失最小的 w 跟 b 称为 w∗ 跟 b∗ 代表它们是最好的一组 w 跟 b,可以让损失的值最小。

                最常使用的方法是梯度下降法

                为了要简化起见,先假设只有一个未知的参数 w,b 是已知的。w 代不同的数值的时候,就会得到不同的损失,这一条曲线就是误差表面,只是刚才在前一个例子里面,误差表面是 2 维的,这边只有一个参数,所以这个误差表面是 1 维的。

                算法步骤:首先要随机选取一个初始的点 w0。接下来计算 ∂L/∂w |w=w0,在 w 等于 w0 的时候,参数 w 对损失的微分。计算在这一个点,在 w0 这个位置的误差表面的切线斜率,也就是这一条蓝色的虚线,它的斜率,如果这一条虚线的斜率是负的,代表说左边比较高,右边比较低。在这个位置附近,左边比较高,右边比较低。如果左边比较高右边比较低的话,就把 w 的值变大,就可以让损失变小。如果算出来的斜率是正的,就代表左边比较低右边比较高。左边比较低右边比较高,如果左边比较低右边比较高的话,就代表把 w 变小了,w 往左边移,可以让损失的值变小。这个时候就应该把 w 的值变小。

                w左右移动的大小取决于两件事情:

  • 第一件事情是这个地方的斜率,斜率大步伐就跨大一点,斜率小步伐就跨小一点。
  • 学习率η 也会影响步伐大小。学习率是自己设定的,如果 η 设大一点,每次参数更新就会量大,学习可能就比较快。如果 η 设小一点,参数更新就很慢,每次只会改变一点点参数的数值。这种在做机器学习,需要自己设定,不是机器自己找出来的,称为超参数

                接下来反复进行刚才的操作,计算一下 w1 微分的结果,再决定现在要把 w1 移动多少,再移动到 w2,再继续反复做同样的操作,不断地移动 w 的位置,最后会停下来。往往有两种情况会停下来。

  • 第一种情况是一开始会设定说,在调整参数的时候,在计算微分的时候,最多计算几次。上限可能会设为 100 万次,参数更新 100 万次后,就不再更新了,更新次数也是一个超参数。
  • 还有另外一种理想上的,停下来的可能是,当不断调整参数,调整到一个地方,它的微分的值就是这一项,算出来正好是 0 的时候,如果这一项正好算出来是 0,0 乘上学习率 η 还是 0,所以参数就不会再移动位置。假设是这个理想的情况,把 w0 更新到 w1,再更新到 w2,最后更新到 wT 有点卡,wT 卡住了,也就是算出来这个微分的值是 0 了,参数的位置就不会再更新。

                但是,梯度下降有一个很大的问题,没有找到真正最好的解,没有找到可以让损失最小的 w。在图 1.4 所示的例子里面,把 w 设定在最右侧红点附近这个地方可以让损失最小。但如果在梯度下降中,w0 是随机初始的位置,也很有可能走到 wT 这里,训练就停住了,无法再移动 w 的位置。右侧红点这个位置是真的可以让损失最小的地方,称为全局最小值,而 wT 这个地方称为局部最小值,其左右两边都比这个地方的损失还要高一点,但是它不是整个误差表面上面的最低点。

                实际上,这是个假问题,在深度学习中真正的问题将会在以后讨论

                在一维的基础上推广到二维也是如此

                假设有两个参数,随机初始值为w0, b0。要计算w, b跟损失的微分,计算在w=w0的位置,b=b0 的位置,要计算w对L的微分,计算 b 对 L 的微分

                ∂L/∂b|w=w0,b=b0

                ∂L/∂w|w=w0,b=b0

                计算完后更新w、b,把 w0 减去学习率乘上微分的结果得到 w1,把 b0 减掉学习率乘上微分的结果得到 b1。

                w1 ← w0 − η * ∂L/∂w|w=w0,b=b0

                b1 ← b0 − η * ∂L/∂b|w=w0,b=b0

                在深度学习框架里面,比如PyTorch里面,算微分都是程序自动帮计算的。就是反复同样的步骤,就不断的更新w、b,期待最后,可以找到一个最好的w,w∗ 跟最好的 b∗。随便选一个初始的值,先计算一下 w 对 L 的微分,跟计算一下b对L的微分,接下来更新w跟b,更新的方向就是 ∂L/∂w,乘以η再乘以一个负号,∂L/∂b,算出这个微分的值,就可以决定更新的方向,可以决定要怎么更新。把w跟b更新的方向结合起来,就是一个向量,就是红色的箭头,再计算一次微分,w再决定要走什么样的方向,把这个微分的值乘上学习率,再乘上负号,我们就知道红色的箭头要指向那里,就知道如何移动w跟b的位置,一直移动,期待最后可以找出一组不错的 w, b。

                上面那些步骤是使用训练数据得到模型,以上步骤被称为训练过程

                在定义模型时,可以根据数据的周期性等特殊性质来选择模型,这样可以相对地减小L

  • 10
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值