机器学习找到一个函数,使得该函数能输出我们想要的结果:
常见的函数类型有两种:回归(例如预测第二天的PM2.5浓度)、分类(判断邮件是否是垃圾邮件)
对于围棋而言,同样可以划分到分类问题,只不过分类结果能达到 19*19种:
当然,除开回归、分类外,还有个更牛逼的机器学习类型:Structured Learning(牛逼到跟下文没啥关系,并且老师老二次元了)
机器学习的框架:
找到函数形式->定义损失函数->最优化参数(机器学习本质上是最优化问题?)
开始举例:关于youtube上的订阅人数(预测问题Regression)
目的:希望找到一个函数,使得能够预测2/26号的观看人数(订阅人数)
第一步:找到函数形式?
给出模型:,w跟b是未知参数,w称为weight ,b称为bias,是机器自己找到的参数
定义一个损失函数 L(b,w),用来衡量b跟w这两个参数到底多好
上述模型包含的信息是,第二天的视频观看量仅跟前一天的视频观看量相关
把模型输出的结果设为 ,如此就可以定义损失损失函数L,介绍了两种方法,一是MAE,二是MSE
,如此可以定义出Loss的表达式(接下来皆采用MAE):
。
直观的可以画出一个类似等高线的损失函数的图:
可以看出,颜色越偏红色,误差越大,越偏蓝色,误差越小。
如何选择最优的w跟b? --梯度下降:
对于w而言,假设b是常数,首先随机选择一个,然后计算L关于W的偏导,若偏导小于0,则增大w,反之减小w。
η称之为学习率。是一个主观的参数,由自己设定。后文会讲,梯度下降方法不好的原因不是因为下降不到全局最小点?
明显由图看出,上述模型效果不太OK,考虑到一周周五周六几乎没人学习:
考虑到以一周为单位,修正模型:,能够看出,损失函数的值变小了。
但线性模型太简单了,想换个牛逼的模型,所有的模型都可以近似为好几个常数项加上好几个折线:,哪怕连续的光滑曲线也能通过取点抽样同样转成折线近似拟合。但折线的方程式不好表示,这边改用sigmoid function进行拟合。
所以此时线性回归可以变成更牛逼的样子: ---->>
所以此时做出变化,由单纯的线性变成折线:
如何表示这些参数:
注意图片,竖着的表示向量,如r b x ,方形的表示矩阵,如W ,倒着的表示做转置,如ct
->
这样就完成了向量化的处理(有一说一这PPT做得真好,不需要文字我应该也能回忆起来在讲啥)
ok,接下来把所有的未知参数通通塞到θ这个向量里(包括上面的W,b,ct,b)(还有,前后两个b不一样)
第二步:定义损失函数
,L就是θ的函数了。
第三步:最优化
目的,求出θ,使得L的值最小。同上,采用梯度下降法。瞎吉儿找个θ0,然后一直更新就行。
但在实际操作中,如果数据很多,一般的操作是,将全部N个数据分成随机分成n个batch,每个batch有B个数据,然后遵循如下规则进行更新:(why?跟数理统计有关吗?)
即对第一个batch更新后的值作为第二个batch的初始值再进行更新,keep updating。全做完一次称为 1 epoch。(我这边的理解是不是有点问题?)
*********************
然后就是sigmoid --> ReLU(ReLU更好,为啥?)
深度学习的概念:
,即一层的sigmoid输出作为下一层的输入
层数越多,训练集训练效果越好,但测试集不一定(过拟合?)