[机器学习]机器学习入门 Chapter 2:模型建立

chapter 2:模型建立

上一节我们了解了那么多关于机器学习种类的内容,话说回来,再复杂的模型,也要从一个函数开始啊,我们不能看到纷繁的世界就忘掉自己的初心,我们的初心就是函数.What should we do?先找函数吧!函数,启动!在这里插入图片描述

我们借一个b站播放量的问题来讲

1.Function with Unknown Parameters(含未知参量的函数)

​ 好好好,既然说到函数了,我们抛去那个所谓"一一对应"的严格数学定义,只看我们目前所讲的"函数",高低要有 未知量(Unknown Parameters) 吧,没有未知量不就是一个普通的计算式了吗,是绝对称不上一个函数的,因此我们的函数是一个

Function with Unknown Parameters(有未知量的函数)

​ 统一确定了这个思想,我们再看函数.有那么多的函式,指数函数、幂函数、对数函数…我们怎么选择呢?对于现在的我们,这个事情并没有一个严格的选择方法,我们要根据对情景的了解来判断,也就是基于情景知识(domain knowledge).在这里插入图片描述

我的up主老土豆的故事:

​ 咱们的情景是b站的播放量,up主们每天都能收到自己的视频今天有多少播放量.吾有一友old potato老土豆同学,他在b站是一个不小的up主了,他在这个账号上投入和不少的时间和精力,但是老土豆也有自己学习生活,投入过多导致他的成绩下降,睡眠也变差了,但他又不想放弃苦心经营的账号和爱他的粉丝,于是他向佛祈祷:“我要是能知道明天的播放量有多少该多好啊!这样的话,播放量多我就好好经营账号,少的话我就摆烂!”在这里插入图片描述

​ 佛说:“为什么不问问神奇海螺呢?”;海螺说:“为什么不问问神通广大的网友呢?”;网友说:“我不到啊!”;哼哼,作为两年连续获得年度好舍友的我怎么忍心看他被如此戏耍呢,“sir,this way.为什么不尝试一下机器学习呢?”

模型函数的创建

​ 太好啦,总算是有点门路了,可是我不懂b站的奇妙推送和播放量要素啊,说到这个老土豆可不困了,"这个简单,不用管那些奇妙推送算法,在我视频质量和风格不产生巨变的前提下,我们可以简单将这个过程理解为:

‘明天的播放量 = 推送指数 * 今天的播放量 + 基础推送数量’

这样就直白多了!"好嘛,他这不是知道怎么算吗,还得是专业人士啊,domain knowledge就是丰富.根据老土豆同学的描述,我们就可以把这个情景简化为一个函数:
y = w x + b y=wx + b y=wx+b
其中y是我们想要的结果,也就是明天的播放量; w(weight) 是一个权重, b(bias) 是一个修正量;函数式中只有x今日播放量是我们已知或者可以获得的,而w和b是两个未知量(Unknown Parameters),这样就满足了我们机器学习函数的第一个要求了.

2.Define Loss from Training Data(利用数据集定义Loss)

既然有了未知量(Unknown Parameters),我们自然给未知量要找到一个合理的解,这样才能让函数的结果最准,老土豆同学才能更有理有据的摆烂,不是吗(笑)

衡量函数优劣的手段:Loss

那么我们该怎么衡量未知量的解是否合理呢?当然是将解带入后算出来的结果和真实情况差距越小越合理啦!要是差距过大,老土豆就会做出错误的判断,被晃得假发都飞了,群众里有坏人啊!至此,我们就能顺理成章的引入一个船新的概念:Loss(how good a set of values is).

简单来说,loss就是未知量的一个函数(loss is a function of parameters),形如:
L ( b , w ) L(b,w) L(b,w)
wow,好高端啊.but没有计算方式的话对于咱们也没有任何意义,因此接下来我们来探究一下Loss函数如何计算.

Loss的计算方法

在我们的情境中,我们可以让机器去计算过去的某次播放量,对比真实情况下那一天的播放量就能看出差距多少了.老土豆恍然大悟,"还真是!我可以导出过去几年每一天的播放量做对比!"哇,大大的数据集不就送上门了吗!

2017.1.14.8k
2017.1.24.9k
2017.1.37.5k
2022.12.319.8k

来啦,多达六年2000多天的数据!

我们就能利用这两千多条数据,让机器从17年1月1号开始运算到22年12月31号,每一天的数据"预测"下一天的播放量,从而输出了下表:

日期真实播放量 y*预测播放量 y = f(x)差值e = |y - y*|
2017.1.14.8k5.3k0.5k
2017.1.24.9k5.7k0.8k
2017.1.37.5k6.4k1.1k
2022.12.319.8k10.3k0.5k

(数据均为假设,与前面的函数式无关)

模型输出的两千多个结果和对应的真实情况又产生了两千多个差值,这么多差值共同体现了模型和真实之间的差距,也就是我们要的Loss,在数据分析层面上来讲,用一个数据集反应一个整体其实需要经过很多次运算,信度分析聚类分析交叉表什么的,但是出于简化思想,我们目前只给两个Loss计算方式,形如:
L o s s = 1 n ∑ i = 1 n e i Loss =\frac{1}{n}\sum_{i=1}^{n}e_i Loss=n1i=1nei
其中e有两种计算方式:
e i = ∣ y − y ∗ ∣ 或 e i = ( y − y ∗ ) 2 e_{i} = \left| y-y* \right| 或 e_{i} = (y-y*)^2 ei=yyei=(yy)2
如果需要结果更精准可以使用平方(Mean square error,MSE),平时只用绝对值(Mean absolute error,MAE)就还可以了(赞)

用老土豆神奇的domain knowledge寻找到一个合理范围后,将范围内每个(w,b)都交给机器运算后,得出这样一个等高线图,组成了一个误差平面(error surface),越靠冷色调loss越小.其实就是解*L(w,b)*这个二元函数.
error surface等高线图

3.Optimization(最佳化问题)

找最小,找最小,这不就是解最佳化问题(Optimization)吗?!好啊好啊,不过大家不知道最佳化是什么也没有关系,说白了不就是求函数最值嘛,对应咱们的情景就是解二元函数*L(w,b)*的最小值,也就是:
w ∗ , b ∗ = a r g m i n w , b L w*,b*=arg min_{w,b}L w,b=argminw,bL

最佳化思路引入

可是解二元函数最值求偏导对于我们太过复杂哩.这让我想起我们那一年的高考数学的导数题(北京2022年高考数学19题),那一题就是一个形如二元函数的函数求导,高中的我们还没学过偏导(学了也不让用,超纲方法不给分的),难道就解不了吗?
当然不,高考永不超纲(棒读),解这道题的方法和我们今天解最佳化的方法师出同源,名为 “定一移一” .解不了两个,一个我还解不了吗?我直接给一个自变量固定,三维问题立刻被降维,轻松拿捏.在这里插入图片描述

Gradient Descent(梯度下降)

回到老土豆的问题,利用***“定一移一”*思想,我让w或b固定(给定一个值),原函数L(w,b)变为L(w)L(b),这下终于看懂了!至此,我们唯一使用的最佳化方法终于露出了ta的庐山真面目:Gradient Descent(梯度下降)

连续问题离散化

思路方法都明了了,这下要启动了!..But wait!我们忽略了一个重要的问题,求导求最值是建立在数轴连续的基础上的,但是有一点计算机基础的同学都知道,计算机由于自身二进制的离散运算方式,是无法处理连续问题的!我们只能把这个求导分割成离散的问题.没有汽车跑,我们就一步一步走.

  1. (Randomly)pick an initial value W0(随机的找一个起点)
  2. compute the following formula(求导):

∂ L ∂ w ∣ w = w 0 \frac{\partial L}{\partial w} |_{w=w_0} wLw=w0
每一步的大小我们用:
η ∂ L ∂ w ∣ w = w 0 η \frac{\partial L}{\partial w} |_{w=w_0} ηwLw=w0
来表示,其中的 η 叫做 “Learning rate(学习步长)” ;因此每一步大小取决与点斜率和你自己设定的η,想要机器算的快点,大步迈进,就把η设大一点,自然精度就会小一点,反之亦然.

示例函数图像

在机器学习中,类似刚才 η 这样,需要你自己设定,纯看设计者自身需求的参量,我们统一称其为 “hyperparameter” ,它往往决定了一个模型的精度,运算时间等重要的性质,因此在设定的时候一定要慎重考虑.

Local minima和global minima问题

解决了连续问题离散化,最终还是回到了大家都学过的求极值求最值问题上.计算机不可能无限的运行下去.

要不我先受不了,手动停止运算(或者达到了我设置的最大运算次数),而且还没找到最佳解,我只能在运算过的解里面找相对最好的;或者机器十分给力,在我破防之前就正好找到了极小值,切线斜率为0,根据上面那个公式我们的步长就为0了,机器迈不出步子自己就返回了.

第一种情况没啥好说的,矬子里面挑将军;第二种情况可就有的说了,我们会遇到一个天大的问题:极值不一定是最值.

且不说只判断导数为0还有极大值,就说我们能让机器知道是极小值才结束,那第一个找到的极小值(local minima) 也不一定是 最小值(global minima) 啊.那该如何解决呢?哼哼,如果你真的做过深度学习相关的实验,自己跑过Gradient Descent,你就知道真正的问题不在local minima了(我不知道为啥,老师说的).

最后,直接交给计算机求二元函数偏导然后跑Gradient Descent就安啦.在先前的error surface图上,寻找的路径和结果大概就如下图所示了

在error surface上的查找路径

到现在,我们才终于完成了机器学习的第一也是最基本最重要的大步:模型建立(可喜可贺可喜可贺!),之后我们就可以根据模型运算结果,来决定是否要优化模型,一天的播放量差距可能说明不了什么,我可能会改成一周一周的比较,甚至一个月一个月的比较,这都取决于最后的运算精度如何了.因此下一节的内容,就是:模型优化.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值