Google机器学习速成课程 - 视频笔记整理 - 基础篇核心部分

课程网址:
https://developers.google.com/machine-learning/crash-course/ml-intro
(需翻墙)

全部课程核心部分, 基本概念并没有过多记录,持续整理中。。。

机器学习算法一般过程

过程可理解为用于训练模型的迭代试错:

过程分析:

  • “计算损失”:损失函数:例如常用的平方损失函数。

  • “计算参数更新”:检测损失函数的值,并为参数如bias、weight生成新值,以降低损失为最小,例如:梯度下降法,因为通过计算整个数据集中w每个可能值的损失函数来找到收敛点这种方法效率太低。所以通过梯度能找到损失更小的方向,并迭代。

  • 学习速率,梯度下降法,用梯度乘以一个成为学习速率(也叫步长)的标量,以确定下一个点的位置。这是超参数,用来调整AI算法速率

例如,如果梯度大小为2.5,学习速率为0.01,则梯度下降法算法会选择0.025的步长来从当前位置找到下一个位置。

  • 随机梯度下降法SGD:解决数据过大,既一个Batch过大问题,每次迭代只是用一个样本(Batch为1),随机表示各个batch的一个样本都是随机选择。
  • 批量Batch:用于在单次迭代中计算梯度的样本总数。

梯度是一个矢量,因此具有以下两个特征:方向,大小。梯度始终指向损失函数中增长最为迅猛的方向,因此梯度下降法会沿着负梯度的方向走,以便尽快降低损失

scikit-learn:Python热门ML开源库,包括各类算法Python实现。
https://scikit-learn.org/stable/
可使用 Colaboratory 平台直接在浏览器中运行ML进行编程练习(无需设置!)
https://colab.research.google.com/notebooks/welcome.ipynb

相关工具介绍

Tensorflow API结构


常用超参数:

• Steps:训练迭代的总次数,一个Step计算一批样本产生的损失,然后使用该值修改一次模型的权重
• Batch Size:单步的样本数量(随机选择),例如SGD的BS为1

Pandas

Data Frame和Series数据结构,
pandas 中的主要数据结构被实现为以下两类:
• DataFrame,您可以将它想象成一个关系型数据表格,其中包含多个行和已命名的列。
• Series,它是单一列。DataFrame 中包含一个或多个 Series,每个 Series 均有一个名称。

Pd.read_csv直接读取csv数据,并转换为一个DataFrame:

california_housing_dataframe = pd.read_csv("https://download.mlcc.google.cn/mledu-datasets/california_housing_train.csv", sep=",")

显示数据结构表格数据信息:.describe 显示统计信息,或者.head显示前几个记录
绘制图表:DataFrame.hist
访问数据:可以使用Python dict/list指令访问DataFrame数据

预处理之对原始数据随机化处理,确保不会出现异常排序结果:

california_housing_dataframe = california_housing_dataframe.reindex(
np.random.permutation(california_housing_dataframe.index))

梯度裁剪:clip_gradients_by_norm,可确保梯度大小在训练期间不会变的过大,梯度过大会导致梯度下降法失败。

表示法Representation:特征工程:

特征工程就是将输入原始数据,提取特征矢量,组成数据样本的数据集

  • 映射分类值: 将分类特征的字符串转为以数值代表

Why? 为什么要映射:由于字符串不能与学习到的权重相乘,需要转为数字
将所有可能的分类值(如词汇表),映射为数字,如1代表猫,2代表狗

  • 热编码

为模型的每个分类特征 设置为一个BOOL值(二元向量):
• 对于适用于样本的值,BOOL值为1
• 将其他所有元素设为0

  • 独热编码 (one-hot encoding):二元向量中只有一个值为1,
  • 多热编码:存在多个值为1

该方法能够有效地为每个特征值(例如,街道名称)创建布尔变量
例如HousePrice预测,采用这种方法时,如果房屋位于 Shorebird Way 街道上,则只有 Shorebird Way 的二元值为 1。因此,该模型仅使用 Shorebird Way 的权重。

同样,如果房屋位于两条街道的拐角处,则将两个二元值设为 1,并且模型将使用它们各自的权重。

优点:模型将更新并使用每一个分类特征各自的权重

  • 稀疏表示法:仅存储非零值,减少存储空间/计算时间损耗
  • 特征选择:特征值在数据集中出现较多,具有明确的含义

数据清理:

Why:一颗老鼠屎也会破坏掉一整个大规模数据集

清理方法:

  1. 缩放特征值:变换范围,如将浮点特征值(如100-900)转换为0-1,如果特征级包含多个特征,缩放就有优势:帮助梯度下降更快收敛、帮助确定合适权重等。
  2. 处理极端离群值:对每个值取对数(对数缩放),限制最大/最小值
  3. 分箱(分桶):将特征值浮点数,分为几个范围,如32.3 32.5 为32-33范围,相应值为1

这样就能获得不同的布尔值特征(LatitudeBin1、LatitudeBin2、…LatitudeBin11),而不是浮点特征(在这里浮点特征无意义),解决特定范围内,特征数据之间有很强的关联性问题。

这样,我们可以将纬度 37.4 表示为:[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]

  1. 清查:遗漏值、重复样本、不良标签等

特征组合Feature Crosses


特征组合:指通过将多个输入特征相乘(向量积)来对特征空间的非线性规律进行编码的合成特征

例如,一条线无法分开两类数据,是非线性问题:

通过将x1与x2组合来创建一个名为x3的特征组合 ,这样蓝点相乘为负,黄点相乘为正,将x1x2看做一个特征,就可以实现一条线分类

特征组合的种类:


在使用扩展的线性模型时,附加特征组合数据,是常用的训练大规模数据集有效方法。
组合独热编码,得到有逻辑连接的特征组合:
例如:根据两个特征来预测狗主人对狗狗的满意程度:
• 行为类型(叫、跑等)
• 时段

根据这两个特征,构建一个特征组合[ Behavior Type AND Time]

最终获得的预测能力将远远超过任一单独特征单独的预测能力。例如,Behavior同样是叫喊,如果狗主人下午5点下班回来时叫喊,可能表示主人满意度是正面结果;而如果在凌晨3点叫喊时,满意度为负面结果

组合两个(或更多个)特征是使用线性模型来学习非线性关系的一种聪明做法。

正则化:

Why?:不要过于信赖样本

正则化有不同的策略:早停法(但实际操作起来困难)、添加模型复杂度惩罚项

简化正则化(Regularization for Simplicity):L2正则化

正则化思想:降低模型复杂度,(根据奥卡姆剃刀定律)
正则化目标:最小化 损失+复杂度 为目标(结构风险最小化)

现在训练优化算法有2项内容组成:损失项 + 正则化项
• 损失项:用于衡量算法模型与数据的拟合度
• 正则化项:衡量算法模型的复杂度
L2正则化公式 来量化模型复杂度:L2 = 所有特征权重的平方和

在L2正则中,接近于0的权重对复杂度几乎没有影响,而离群值权重会产生巨大影响。
为避免离群值这种影响,引入Lambda(又称正则化率)来调制正则化项的整体影响

Lambda值需要在模型简单化和训练数据拟合之间达到适当的平衡
• Lambda高,模型简单,数据欠拟合
• Lambda低,模型复杂,数据过拟合
学习速率和Lambda之间强相关
加入正则化结果:测试Lost明显减少,训练损失有所上升,特征权重的绝对值降低(模型复杂度降低)

稀疏正则化:L1正则化,将噪点相关权重系数设为0

Why:特征组合可能会包含许多维度,模型太庞大占用大量RAM,因此,对权重降为0,既可以节省空间,也可以减少模型中的噪点
核心思想:将无意义的特征维度降为0
L2对比:
• L2只能将权重变小,但是不能将他们降为0
• 采用不同方式降低权重w:L2会降低w的平方,L1是减w的绝对值,因此L2与L1具有不同的导数

扩展比较:
L1/L2是对Loss Function添加Penalty
L1 and L2 regularization
One of the most powerful and well-known technique of regularization is to add a penalty to the loss function. The most common are called L1 and L2:

  1. The L1 penalty aims to minimize the absolute value of the weights
  2. The L2 penalty aims to minimize the squared magnitude of the weights

逻辑回归(Logistics Regression)

LR输出一个0 - 1之间的概率值,而不是准确预测结果为0还是1,如LR生成0.973,代表模型判断整个事件/是垃圾邮件发生的概率为97.2%
LR模型如何确保输出值始终落在0和1之间  使用sigmod函数:

曲线图,可以看出y值始终落在0-1,y既LR模型针对特定样本的输出概率


其中z是LR层上一层(模型线性层)的输出,而LR通过Sigmod函数生成0-1的概率。
Z = b+w1x1 +w2x2 + … wnxn,其中w是权重,x是特定样本的特征值,b是偏差

LR模型训练

  • LR的损失函数

线性回归的损失函数是平方损失,逻辑回归的损失函数是对数损失

  • LR中的正则化

大多数LR模型都会使用:L2正则化、早停法来降低模型复杂度。

lR非常容易过拟合,因为LR会尝试让所有样本的Lost减少到0,但始终达不到,所以每个LR指示器特征的权重就会不断增大到正无穷或负无穷

对LR的概率指定阈值,实现分类
正类别与负类别,预测为真或假

神经网络 Neural Network

  • 为什么引入激活函数:

因为NN层之间是线性层,线性层叠加还是线性,所以要加入非线性层(激活函数)来解决非线性问题

  • 非线性问题:

“决策面”不是直线,
之前对非线性问题进行建模的一种可行方法:特征组合,但数据更复杂,就不能用组合方式了,如:

借助神经网络,不用特征组合,就可以学习非线性模型。

线性模型

先理解,一个普通的线性模型:

每个蓝色圆圈均表示一个输入特征,绿色圆圈表示各个输入的加权和,

隐藏层

隐藏层表示中间值,每个黄色点都是蓝色输入点值的加权和,输出是黄色节点的加权和

目前此模型还是线性的,因为其输出扔是输入的线性组合,无论添加多少隐藏层都是这样,因为将输出表示为输入的函数并进行简化时,只是获得输入的另一个加权和而已

激活函数

要对非线性问题进行建模,所以要引入一个非线性函数,并且要作用于每一个隐藏层之后,这就是激活函数


通过在非线性上堆叠非线性,就能够对输入和预测输出之间复杂的关系进行建模。

  • 常见激活函数

Sigmod:将加权和转换为0 – 1之间的值,在LR逻辑回归中也有应用
Relu:小于0则全为0 ,易于计算,效果好

  • 神经网络标准组件:

• 一组节点,类似于神经元,位于层中
• 一组权重,表示每层NN与其下方层之间的关系,
• 一组偏差,每个节点一个偏差
• 一个激活函数,对层中的每个节点的输出进行转换。不同的层可能拥有不同的激活函数

训练神经网络

问题:

  • 梯度消失

较低层(接近输入层)的梯度变小,逐渐消失到0,
原因:计算梯度时,可能涉及许多小项的乘积
结果:导致这些层的训练速度非常缓慢,甚至不在训练
解决:Relu激活函数会有帮助

  • 梯度爆炸

原因;如果网络中权重过大,较低层梯度会涉及许多大项乘积
结果:梯度过大导致难以收敛
解决:Batch Normalization批标准化可降低学习速率,因而有助于防止爆炸

  • ReLu单元消失

一旦送入ReLu的 加权和小于0,ReLu就会一直为0,既中断了该单元的数据传播(梯度的来源被切断)
结果:梯度在反向传播算法期间无法再从该ReLu单元中流过
解决:降低学习速率

  • 丢弃正则化(Dropout)

另一种形式的正则,可用于神经网络
原理:在梯度下降法的每一步中,随机丢弃一些网络单元,丢弃的越多,正则化效果越强
0 = 无丢弃正则化
1 = 丢弃所有内容,模型学不到任何规律

提高神经网络性能:

1、输入标准化
一般来说,当输入特征大致位于相同范围时,神经网络的训练效果最好。

2、选用正确的优化器Optimizer,如AdaGrad、Adam

多类别神经网络

二分类用设有阈值的逻辑回归LR,但多个类别呢?

  • 一对多

通过一对多实现多类别分类

一对多方案中,模型会根据最终输出类别数,训练多个单独的二元分类器,每个分类器只回答单独的分类问题,例如是狗吗?是或者不是

将模型中的一个逻辑回归输出节点用于每个可能的类别
当类别总数较少时,可以使用这种方法,但类别多了效率就会很低

  • Softmax

输出类别概率总和为1,
Softmax本质是LR的泛化,只不过泛化成了多个类别
在多类别问题中,Softmax会为每个类别分配一个小数表示的概率(原理同LR),这些小数表示的概率相加为1,因此,概率最大的表示分类结果,如下图:

在单一标签的多类别分类问题时,就使用Softmax

Softmax层在神经网络层的输出层之前,并且Softmax层必须和输出层有一样的节点数

其他分类法

多类别多标签:如一张照片里有三种不同种类的狗,这时候不能用Softmax

嵌入Embedding:

用来定义数据之间的相似度
**协同过滤:**预测用户兴趣相关的任务,推荐系统
**推荐影片:**需要确定哪些影片是相似的 - > 使用嵌套,将影片嵌套到低维空间

例如电影推荐
一维嵌套:按照适宜观赏的年龄段

二维嵌套:按照年龄段 + 属于大片还是艺术片

我们所做的是将这些影片映射到一个嵌套空间,其中的每个字词都由一组二维坐标来表示。
正常情况下,在学习 d 维嵌套时,每部影片都由 d 个实值数字表示,其中每个数字都分别表示在一个维度中的坐标。

  • Embedding: 分类输入数据:

分类数据是指用于表示一组有限选项中的一个或多个离散项的输入特征
高效表示:稀疏张量
例如,如果要构建一个影片推荐模型,可以为每部可能的影片分别分配一个唯一的 ID,然后通过用户已观看影片的稀疏张量来表示每位用户

嵌套,也就是将大型稀疏矢量映射到一个保留语义关系的低维空间。
解决case:矢量之间缺乏有意义的联系,网络规模较大,

  • Embedding:转换到低维空间

解决稀疏输入数据的核心问题:将高维数据映射到低维空间

  • Embeddnig实现

标准降维技术:如PCA,例如字词矢量包,PCA会尝试查找高度相关且可以合并的维度

Word2Vec: 基于分布假设,将语义上相似的字词映射到几何图形上邻近的Embedding矢量
和任何 DNN 中一样,最终层将是要进行优化的损失函数。

工程应用:静态训练与动态训练 (Static vs. Dynamic Training)

从广义上讲,训练模型的方式有两种:
静态模型采用离线训练方式。也就是说,我们只训练模型一次,然后使用训练后的模型一段时间。
动态模型采用在线训练方式。也就是说,数据会不断进入系统,我们通过不断地更新系统将这些数据整合到模型中。

从广义上讲,静态训练和动态训练的选择由以下几点决定:
• 静态模型更易于构建和测试
• 动态模型可以适应不断变化的数据。世界瞬息万变。基于去年的数据作出的销售预测很可能无法成功预测下一年的情况。

静态推理与动态推理 /预测 (Static vs. Dynamic Inference)

• 离线推理,指的是使用 MapReduce 或类似方法批量进行所有可能的预测。然后,将预测记录到 SSTable 或 Bigtable 中,并将它们提供给一个缓存/查询表。
• 在线推理,指的是使用服务器根据需要进行预测。

以下是离线推理的优缺点:
• 优点:不需要过多担心推理成本。
• 优点:可以使用批量方法或某些巨型 MapReduce 方法。
• 优点:可以在推送之前对预测执行后期验证。
• 缺点:只能对我们知晓的数据进行预测,不适用于存在长尾的情况。
• 缺点:更新可能延迟数小时或数天。
以下是在线推理的优缺点:
• 优点:可在新项目加入时对其进行预测,非常适合存在长尾的情况。
• 缺点:计算量非常大,对延迟较为敏感,可能会限制模型的复杂度。
• 缺点:监控需求更多。

**标签泄漏问题:**一些训练标签泄漏到特征中,使模型带有欺骗性。

机器学习准则:

下面简要说明了有效的机器学习准则:
• 确保第一个模型简单易用。
• 着重确保数据管道的正确性。
• 使用简单且可观察的指标进行训练和评估。
• 拥有并监控您的输入特征。
• 将您的模型配置视为代码:进行审核并记录在案。
• 记下所有实验的结果,尤其是“失败”的结果。

后续学习:
https://developers.google.com/machine-learning/crash-course/next-steps

Google机器学习速成课程 - 视频笔记整理汇总 - 基础篇核心部分相关推荐

  1. 台湾大学林轩田机器学习基石课程学习 笔记资料汇总

    笔记: 红色石头的专栏(写得非常好) 课后练习: 機器學習基石(Machine Learning Foundations) 机器学习基石 课后习题链接汇总 https://download.csdn. ...

  2. google机器学习速成教程学习笔记

    Machine Learning notes 监督式机器学习 线性回归.训练和损失 迭代方式降低损失 降低损失 (Reducing Loss):梯度下降法 使用TensorFlow 泛化 训练集和测试 ...

  3. EPLAN学习笔记整理:基础篇(二)

    1. 元器件命名规则 设置-项目-设备-编号(在线) 点击编号格式,可以根据自己的项目要求,进行设备编号.默认 标示字母+计数器 点击配置,可以选择其他系统配置好的格式.也可以点击后面的小太阳图标,新 ...

  4. EPLAN学习笔记整理:基础篇(一)

    基本操作 1.EPLAN 的安装 安装过程请参见百度经验 http://jingyan.baidu.com/article/e3c78d644882f13c4d85f555.html 2 EPLAN中 ...

  5. 李宏毅2021春季机器学习课程视频笔记1:Introduction, Colab PyTorch Tutorials, HW1

    诸神缄默不语-个人CSDN博文目录 李宏毅2021春季机器学习课程视频笔记集合 VX号"PolarisRisingWar"可直接搜索添加作者好友讨论. 更新日志: 2021.11. ...

  6. 机器学习速成课程 | 练习 | Google Development——编程练习:提高神经网络的性能

    提高神经网络性能 学习目标:通过将特征标准化并应用各种优化算法来提高神经网络的性能 注意:本练习中介绍的优化方法并非专门针对神经网络:这些方法可有效改进大多数类型的模型. 设置 首先,我们将加载数据. ...

  7. 机器学习速成课程 | 练习 | Google Development——编程练习:稀疏数据和嵌套简介

    稀疏数据和嵌入简介 学习目标: 将影评字符串数据转换为稀疏特征矢量 使用稀疏特征矢量实现情感分析线性模型 通过将数据投射到二维空间的嵌入来实现情感分析 DNN 模型 将嵌入可视化,以便查看模型学到的词 ...

  8. 机器学习速成课程 | 练习 | Google Development——编程练习:使用神经网络对手写数字进行分类

    使用神经网络对手写数字进行分类 学习目标: 训练线性模型和神经网络,以对传统 MNIST 数据集中的手写数字进行分类 比较线性分类模型和神经网络分类模型的效果 可视化神经网络隐藏层的权重 我们的目标是 ...

  9. 机器学习速成课程 | 练习 | Google Development——编程练习:神经网络简介

    神经网络简介 学习目标: 使用 TensorFlow DNNRegressor 类定义神经网络 (NN) 及其隐藏层 训练神经网络学习数据集中的非线性规律,并实现比线性回归模型更好的效果 在之前的练习 ...

最新文章

  1. 深度丨霍金的去世让我想起了微软提出的人工智能十大原则
  2. 使用 ExecuteMultiple 提高批量数据加载的性能
  3. 工业机器人控制问题---来自睿慕课
  4. Javascript面向对象特性
  5. ExpandRegion for Sublime Text:快速选择文本
  6. 《CATIA V5 从入门到精通(第二版)》——2.3 操作草图(Operation)
  7. Android studio 设置默认打开项目,默认打开项目方式
  8. HCIA—冲突域与广播域(详解 + 区别)
  9. 联想rd650怎么装系统win7_联想启天M4650台式机win10怎么改win7
  10. OkHttp3源码详解(四)缓存策略,万分膜拜
  11. 非常全面的前端协作规范
  12. 2018春招总结(Java后端),干货满满
  13. picpick尺子像素大小精度不够准确_如何使用像素标尺在PicPick
  14. 网络、浏览器专题重点知识(含原理)
  15. CentOS7 通过 cups 与 Windows 共享 HP 1020PLUS 打印机无响应故障处理
  16. 采用软件定义数据中心 (SDDC) 和超融合基础架构 (HCI) 解决方案的 InterSystems 客户需要重点关注的事项...
  17. 智能家居系统 Home Assistant 系列 --介绍篇
  18. 文本/图像截图工具hypersnap
  19. 为什么win7 flash player安装不了怎么办
  20. 作为脱发一族,你是哪种脱发?

热门文章

  1. C++代码:求1—n的平方倒数和
  2. php cs fixer 怎么用,php代码格式化工具 php-cs-fixer的使用
  3. 图文并茂的PCA教程(Principal Component Analysis,即主成分分析)
  4. 低功耗技术在智能硬件上的应用
  5. 安徽省阜阳市谷歌卫星地图下载(百度网盘离线包下载)
  6. 网络相关的常识、基本概念
  7. 网线水晶头的接法标准
  8. 【Spring】Spring复习之基础和IOC
  9. 6、阿里云OSS对象存储手把手学习及企业使用方案
  10. 地质灾害防治可视化智慧管理系统平台