一、机器学习定义与基础名词
机器学习(Machine Learning,ML)是通过数据和算法模拟人类学习能力的技术,具体是让机器具备找一个函数的能力。我们需要找到需要的函数,定义输入和输出,使得函数的输出能够输出数据或者执行决策等。
随着要找的函数不同,机器学习有不同的类别。
- 回归:假设要找的函数的输出是一个数值,一个标量(scalar),这种机器学习的任务称为回归。可以用于预测PM2.5浓度、播放量等。
- 分类:分类任务要让机器做选择题。人类先准备好一些选项,这些选项称为类别(class),现在要找的函数的输出就是从设定好的选项里面选择一个当作输出,该任务称为分类。
- 结构化学习:机器不只是要做选择题或输出一个数字,而是产生一个有结构的物体,比如让机器画一张图,写一篇文章。
二、寻找函数的步骤
1.写出带有未知参数的函数f
比如将函数写成:1,y是目标预测值,x1是提供的预测数据,b 跟 w 是未知的参数,它是准备要通过数据去找出来的,w 跟 b 是未知的,只是隐约地猜测。猜测往往来自于对这个问题本质上的了解,即领域知识(domain knowledge)。
预测函数相关的名词解释:
- 模型:带有未知的参数(parameter)的函数
- 特征:x1,提供的数值
- 权重(weignt):w 偏置(bias):b
2.定义损失
损失也是一个函数。这个函数的输入是模型里面的参数,模型是 y = b + w ∗ x1,而 b 跟 w 是未知的,损失是函数 L(b, w),其输入是模型参数 b 跟w。损失函数输出的值代表,现在如果把这一组未知的参数,设定某一个数值的时候,这笔数值好还是不好,损失函数的输出用于评价参数的准确性。
首先假设w和b,得到预测函数之后,根据提供的数值,得到目标预测值的结果,与真实的值(称为标签)计算差距,然后利用不同的方法如平均绝对误差(MAE)、均方误差(MSE)等方法得到损失L,L 越大,代表现在这一组参数越不好,L 越小,代表现在这一组参数越好。
可以调整不同的 w 和不同的 b,求取各种w 和各种 b,组合起来以后,我们可以为不同的 w 跟 b 的组合,都去计算它的损失,就可以画出图所示的等高线图。在这个等高线图上面,越偏红色系,代表计算出来的损失越大,就代表这一组 w 跟 b 越差。如果越偏蓝色系,就代表损失越小,就代表这一组 w 跟 b 越好,拿这一组 w 跟 b,放到函数里面,预测会越精准。
3.解最优化问题
找一个 w 跟 b,把未知的参数找一个数值出来,看代哪一个数值进去可以让损失 L 的值最小。
梯度下降(gradient descent)是经常会使用优化的方法。
首先要随机选取一个初始的点 w0。接下来计算 ∂L/∂w |w=w0,在 w 等于 w0 的时候,参数 w 对损失的微分。计算在这一个点,在 w0 这个位置的误差表面的切线斜率,如果这一条虚线的斜率是负的,则在这个位置附近,左边比较高,右边比较低,就把 w 的值变大,就可以让损失变小。如果算出来的斜率是正的,就代表左边比较低右边比较高。左边比较低右边比较高,就代表把 w 变小了,w 往左边移,可以让损失的值变小。这个时候就应该把 w 的值变小。
这一步的步伐的大小取决于两件事情:
• 第一件事情是这个地方的斜率,斜率大步伐就跨大一点,斜率小步伐就跨小一点。
• 另外,学习率(learning rate)η 也会影响步伐大小。学习率是自己设定的,如果 η 设大一点,每次参数更新就会量大,学习可能就比较快。如果 η 设小一点,参数更新就很慢,每次只会改变一点点参数的数值。这种在做机器学习,需要自己设定,不是机器自己找出来的,称为超参数(hyperparameter)。
w逐步移动,最终有两种方式可以停止移动。
第一种情况是一开始会设定说,在调整参数的时候,在计算微分的时候,最多计算几次。
还有另外一种理想上的,停下来的可能是:当不断调整参数,调整到一个地方,它的微分的值就是这一项,算出来正好是 0 的时候。
局部最小值和全局最小值:
w可能会停留在局部最小值,而目标是要取到全局最小值。
在高维空间(如神经网络的损失函数)中,真正的局部最小值其实很少。大部分所谓的“局部最小值”往往是平坦区域或鞍点(saddle points),而不是严格意义上的局部最小值。
现代优化算法(如动量方法、Adam等)在一定程度上能够避免陷入局部最小值或鞍点,并且能够有效地继续优化,靠近更好的解。
在许多实际问题中,找到一个接近最优的解已经足够好。即使梯度下降不能找到全局最小值,只要它能找到一个性能较好的局部解,往往就能满足应用需求。可以将所有局部最小值的点的坐标带入函数得值后比较出最小的数值,此时最小的数值所对应的点的位置即为全局最小值。真正的难题是鞍点和梯度消失,以及模型的过拟合。