人工智能小白日记之6 ML学习篇之1

机器学习

https://developers.google.cn/machine-learning/crash-course/ml-intro

1 机器学习简介

wtf?中文的,看着一个外国人讲英语,然后用中文在这里播,还是很不适应的。我习惯给我来点中英文字幕,然后听英文原话。

而且这语音怎么听起来这么机械化。等等…我知道了,机械化,666。show啊,绝对在show。我猜测他们用了AI技术对视频进行了实时翻译,我是中国的,它就给我翻译成了中文,然后用语音库读出来。是不是666.

而且,左下角有两个好玩的工具。哦,右下角按钮可以调整语音。
在这里插入图片描述
视频中举了几个例子,说明什么是机器学习。都是需要提供大量的样本,让其学习,然后达到想要的目的。比如给它100本棋谱,他就会成为一个下棋高手,哈,alpha狗。不过alpha狗更高端,人家学完棋谱为了突破极限还能玩左右互搏术,自己和自己打。

也提到了机器学习是通过统计信息,而不是人脑这样的逻辑来判定的。

2 监督式机器学习

在监督式机器学习中, 我们将学习如何创建模型来结合输入信息, 对以前从未见过的数据做出有用的预测。

视频里,以分类垃圾邮件为例,提到几个关键概念:
标签(标注):指出是垃圾邮件还是非垃圾邮件
特征:可以从邮件中提取的各种信息
样本:一封邮件就是一个样本
模型:机器学习的过程就是创建并训练模型的过程,训练后得到的模型工具将被用作实际应用。例如,回归模型可预测连续值。分类模型可预测离散值。

后面有几道测试题目,大家可以自测一下。

3 线性回归

通过已知的样本,得到一条预测线(模型),
也就是y=wx+b。其中x对应特征,y对应标签,b为偏差,w为特征x的权重。当有多个特征的时候,可以更加精确的得到一个模型。

比如判断一个人的性别的模型:头发权重1,胸部权重5,喉结权重8,这样会有多个特征,综合判断性别。

损失:是一个数值,表示对于单个样本而言模型预测的准确程度。

均方误差 (MSE) 指的是每个样本的平均平方损失。

很明显,损失低的模型预测的准确度越高,所以才会去研究这个损失函数,MSE是其中一种。

4 降低损失

为啥有这个话题?我们采样的数据,不可能刚好就是最佳的数据。如果我们选择的训练数据,是整体数据的一部分,比如线性问题的偏上部分数据。由于忽略的下面部分的数据,得到的模型,偏差就大了。

这样的话就需要一种办法,来降低损失(Reducing Loss),得到最佳模型。

4-1 迭代方法

迭代方法,让我想到小时候玩过的猜数游戏。写上一个数字,比如2019,然后来猜:
我猜100,小了。
根据上轮结果,我猜500,还是小了。
根据上轮结果,我猜1000,还是小了。
根据上轮结果,我猜5000,大了。
诶,这时候,根据上轮结果,我探出一个范围1000-5000。
然后接着不断缩小这个范围,得到最终答案。

这也是迭代方法的原理
在这里插入图片描述
就y = wx+b 的模型来说,为了得到最佳的w,b。执行如下循环迭代:
》1.假设w=1,b=0, 这时候模型为y=x
》2.用新得到的y=x进行预测,输入特征x=1,得到标签y=1
》3.计算损失,x=1时的正确标签应该是y=2,根据MSE算出误差
》4.损失过大,重新假设w,b,回到第1步

在训练机器学习模型时,首先对权重和偏差进行初始猜测,然后反复调整这些猜测,直到获得损失可能最低的权重和偏差为止。

4-2 梯度下降法

回归问题的损失与参数的关系始终是凹形的(为啥教程里面会写成凸形的?,要凸形也得写个下凸形),通过整个数据集来查找效率很低。我们知道下凹形只有一个最低点,也就是斜率为0的部位,就是我们要找的最佳参数的位置。
在这里插入图片描述

因此,针对回归问题,有个热门的方法,叫梯度下降算法

随机选个起点w1,算出此点斜率,如果为负数,很明显,第2个点应该继续选择w1的右边。朝着这个方向走,直到斜率大于或等于0.

但是每次的选点应该偏离上一个点多少呢,太大容易越过低点,太小有可能爬的太慢。

4-3 学习速率

梯度下降法算法用梯度乘以一个称为学习速率(有时也称为步长)的标量,以确定下一个点的位置。

每个回归问题都存在一个金发姑娘学习速率。(好吧,真有聊)

4-4 随机梯度下降法

到目前为止,我们一直假定批量是指整个数据集。就 Google 的规模而言,数据集通常包含数十亿甚至数千亿个样本。如果是超大批量,则单次迭代就可能要花费很长时间进行计算。

随机梯度下降法 (SGD) 每次迭代只使用一个样本(批量大小为 1)。如果进行足够的迭代,SGD 也可以发挥作用,但过程会非常杂乱。

小批量随机梯度下降法(小批量 SGD)是介于全批量迭代与 SGD 之间的折衷方案。小批量通常包含 10-1000 个随机选择的样本。小批量 SGD 可以减少 SGD 中的杂乱样本数量,但仍然比全批量更高效。

5 TF用法

插入这个,主要是里面有线性回归的编程练习。

5-1 pandas 跳过,这个我们上节看过了

5-2 first_steps_with_tensor_flow

first_steps_with_tensor_flow.ipynb:此练习介绍了线性回归。
找到jupyter中的练习
在这里插入图片描述
本来想在这里继续写的。篇幅不够,完全单独可以写一篇了,叫线性回归实战,后面补充。

5-3 synthetic_features_and_outliers

在这里插入图片描述
这个是线性回归的续集,讲的是合成特征和离群值,提高模型的有效性,也单独发布。毕竟作为第一个实战demo,还是有很强的参考性的。

6 泛化

纯拟合的问题:如果我们现在来分类垃圾邮件和非垃圾邮件。根据已采样数据,我们可以想尽办法得到一个完美模型。
在这里插入图片描述
够扭曲,够霸气吧,完全正确。对于已出现的所有样本,确实可以准确分类。如果出现了一些新样本呢?我们希望它能划分,但实际上有可能出现偏差。
在这里插入图片描述
由于过于拟合了训练数据,等待生产数据来的时候已经没有办法适应了。

如何解决这个问题呢?
奥卡姆剃刀定律(Occam’s Razor, Ockham’s Razor)又称“奥康的剃刀”,它是由14世纪英格兰的逻辑学家、圣方济各会修士奥卡姆的威廉(William of Occam,约1285年至1349年)提出。这个原理称为“如无必要,勿增实体”,即“简单有效原理”。正如他在《箴言书注》2卷15题说“切勿浪费较多东西去做,用较少的东西,同样可以做好的事情

假设现实会给我不断产生新的样本,比如新的垃圾邮件。旧的垃圾邮件+新的垃圾邮件 = 新的总体样本。周而复始。

既然这样,那我在生产模型的时候,直接从总体样本上随机仅抽取一部分作为训练样本,这样总体样本中的其他就相当于新的样本,关键在于这些新样本我已经拿到手了。这时候用新样本进行测试,就知道模型是否能很好的适应新样本了,也就是模型可以很好的泛化到还未出现的新数据了。(这么抽象我居然看懂了,哈哈)

以上成立的关键假设
在这里插入图片描述
因此,我们必须知道这些假设,密切关注各项指标, 这样在违反了这些假设时就能立即知晓。

7 训练集和测试集

训练集 - 用于训练模型的子集。训练集规模越大,模型的学习效果就越好。
测试集 - 用于测试训练后模型的子集。测试集规模越大,我们对于评估指标的信心越充足, 置信区间就越窄。

我们可以将一个大型数据集分成两个小数据集: 一个用于训练,一个用于测试。这两个数据集相互独立,拆分前需要随机化。

如果我们有十亿样本, 我们可以使用其中的10-15%进行测试,置信区间依然会很窄。

如果数据集规模很小,我们可能需要 执行诸如交叉验证之类较为复杂的操作。

为了防止长期迭代对于测试集可能产生的过拟合问题,衍生出验证集,顶替原来测试集的位置。测试集则放到一边完全不用,最后拿来测试即可。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值