文章目录
- 前言
- Task01 通过案例了解机器学习
- 1.1机器学习的浅显介绍
- 1.2机器学习模型的构建
- 1.3一些感悟
- 第一章
前言
本文依托datawhale夏令营撰写的学习笔记,教程链接
期待大家的交流指正
Task01 通过案例了解机器学习
1.1机器学习的浅显介绍
机器学习就是让机器具备找一个函数的能力,函数(处理单元,自动化流程)就可以解决一些实际的问题。图像识别函数,语音识别函数,围棋函数(alphago)等。
根据函数的不同,机器学习有不同的类别,大致分为回归、分类、结构化学习三种。回归问题就是找一个标量的结果,例如温度,湿度,浓度等标量;分类问题就是让机器做出选择判断,判断物体的种类,邮件的种类,下一步落子的位置等;结构化学习听起来比较厉害,例如让机器画一张图,写一篇文章。
1.2机器学习模型的构建
首先需要创建一个带有未知参数的函数,这个函数一般包含权重和偏执等参数。其次需要定义损失Loss,也就是常说的损失函数,损失函数也包含权重和偏置参数。最后需要根据实际数据的调参,找一个最优的结果让损失L的值最小。
- 创建函数
这个函数就是机器寻找的函数的大致样子,只是有许多参数和细小的结构需要调整。
y = b + wx1
其中,y 是准备要预测的东西,x1是输入量,b 跟 w 是未知的参数,需要通过大量实际的数据来寻找确定。带有未知的参数(parameter)的函数称为模型(model)。w 称为权重(weight),b 称为偏置(bias)。 - 定义损失loss
损失函数就是评估测量所创建的函数是否达到预期效果,这个函数的输入是模型里面的参数,模型是 y = b + w ∗ x 1 ,而 b 跟 w 是未知的,损失是函数 L(b,w),其输入是模型参数 b 跟w。
其中损失函数的误差评估有许多不同的计算方法,因为是在大量的数据进行训练,所以也会得到大量的结果。那么如何判断损失函数的大小,如何评估这些数据呢,就需要统计的方法来对这大量的结果进行处理了。
例如平均绝对误差MAE,均方误差MSE,交叉熵CE等计算方法。 - 求最优化,调整参数
梯度下降法是经典常用的方法,梯度是一个向量,高维函数在空间内沿着梯度方向以最快的速度收敛,数学理论推导可以得到正确的梯度,但是在离散的计算机里需要进行数值计算的方法一步一步的(非光滑)的沿着梯度线进行下降。类似于凹凸不平的坑洼地,玻璃球落到坑底的轨迹。
学习率会影响每次下降的步伐大小,理解为计算精度,大些计算快但精度低,小些计算慢但精度高。这种在做机器学习,需要自己设定,不是机器自己找出来的,称为超参数(hyperparameter)
梯度下降有一个很大的问题,没有找到真正最好的解,没有找到可以让损失最小的 w。在图 1.4 所示的例子里面,把 w 设定在最右侧红点附近这个地方可以让损失最小。但如果在梯度下降中,w 0 是随机初始的位置,也很有可能走到 w T 这里,训练就停住了,无法再移动 w 的位置。右侧红点这个位置是真的可以让损失最小的地方,称为全局最小值(global minima),而 w T 这个地方称为局部最小值(local minima),其左右两边都比这个地方的损失还要高一点,但是它不是整个误差表面上面的最低点。
事实上局部最小值是一个假问题,在做梯度下降的时候,真正面对
的难题不是局部最小值。我记得有门课程叫做凸优化,损失函数可以进行处理变为凸函数,这样就可以找出真正的”最小值“即是全局最小值。
1.3一些感悟
这里推荐3b1b的机器学习视频,非常形象的说明了梯度下降。
其实机器学习模型构建和经典控制论的思想挺像的,输入输出的传递函数反馈控制模型,比较节点传递的误差就是损失函数的值。调整模型参数使得模型在外部输入或者干扰下的性能达到快速性,稳定性,准确性,超调可控等指标。
更高一点,就是控制论,信息论,系统论三论的思想。
按照章节顺序写读书笔记(感想)了
第一章
- 关于线性模型
线性模型即为一次函数式的加减嵌套,直观来说就是图像广义上是线性的。
用一堆线性函数相加逼近一个非线性函数有傅里叶变换的思想在里边。傅里叶好像是数值计算友好的。
hard s函数就是直线的,s函数是曲线的。
那么这里做了几件事:
- 第一件是把线性函数变为多函数叠加,解决难以拟合真实函数的问题
- 第二件是构造S函数,使得每个线性函数经过S函数复合后各自有自己的作用区间
- 第三件是用高维线性空间,线性代数知识来描述叠加的S函数
- 第四件是求扩展后的S函数的梯度,再更新参数,进行迭代计算
- 第五件是由于一次计算过于高维的向量数据太庞大,所以进行分批计算。由于线性函数,线性空间的线性叠加性质,所以可以这样计算。(这里想到了线性空间和显卡的微电子设计长的很像呢)
接下来介绍了RELU函数,并引申出激活函数的概念。
RELU收敛速度比S函数快些
接着引出了神经元的概念,神经元和激活函数好像也不太一样,是两个概念吧。
训练集和测试集
过拟合和模型偏差问题