keras深度学习第四章(机器学习基础)

4.1 机器学习的四个分支

4.1.1 监督学习

监督学习是目前最常见的机器学习类型。给定一组样本(通常由人工标注),它可以学会将 输入数据映射到已知目标[也叫标注(annotation)]。
图像领域监督学习分为:
目标检测(object detection):
给定一张图像,在图中特定目标的周围画一个边界框。这 个问题也可以表示为分类问题(给定多个候选边界框,对每个框内的目标进行分类)或分类与回归联合问题(用向量回归来预测边界框的坐标)。
**图像分割(image segmentation):**给定一张图像,在特定物体上画一个像素级的掩模(mask)。
4.1.2 无监督学习
无监督学习是指在没有目标的情况下寻找输入数据的有趣变换,其目的在于数据可视化、 3 数据压缩、数据去噪或更好地理解数据中的相关性。降维(dimensionality reduction)和聚类(clustering)都是众所周知的无监督学习方法。
4.1.3 自监督学习
自监督学习是监督学习的一个特例,它与众不同,值得单独归为一类。自监督学习是没有 人工标注的标签的监督学习,你可以将它看作没有人类参与的监督学习。标签仍然存在(因为 总要有什么东西来监督学习过程),但它们是从输入数据中生成的,通常是使用启发式算法生成的。
举个例子,自编码器(autoencoder)是有名的自监督学习的例子,其生成的目标就是未经 修改的输入。
注意,监督学习、自监督学习和无监督学习之间的区别有时很模糊, 这三个类别更像是没有明确界限的连续体
4.1.4 强化学习
一些术语

分类和回归术语表 分类和回归都包含很多专业术语。前面你已经见过一些术语,在后续章节会遇到更多。 这些术语在机器学习领域都有确切的定义,你应该了解这些定义。
样本(sample)或输入(input):
进入模型的数据点。
预测(prediction)或输出(output):
从模型出来的结果。
**目标(target):**真实值。对于外部数据源,理想情况下,模型应该能够预测出目标。
预测误差(prediction error)或损失值(loss value):
模型预测与目标之间的距离。
类别(class):
分类问题中供选择的一组标签。例如,对猫狗图像进行分类时,“狗” 和“猫”就是两个类别。
标签(label):
分类问题中类别标注的具体例子。比如,如果 1234 号图像被标注为 包含类别“狗”,那么“狗”就是 1234 号图像的标签。
真值(ground-truth)或标注(annotation):
数据集的所有目标,通常由人工收集。
二分类(binary classification):
一种分类任务,每个输入样本都应被划分到两个互 斥的类别中。
多分类(multiclass classification):
一种分类任务,每个输入样本都应被划分到两个 以上的类别中,比如手写数字分类。
多标签分类(multilabel classification):
一种分类任务,每个输入样本都可以分配多 个标签。举个例子,如果一幅图像里可能既有猫又有狗,那么应该同时标注“猫” 标签和“狗”标签。每幅图像的标签个数通常是可变的。
标量回归(scalar regression):
目标是连续标量值的任务。预测房价就是一个很好的 例子,不同的目标价格形成一个连续的空间。
向量回归(vector regression):
目标是一组连续值(比如一个连续向量)的任务。如 果对多个值(比如图像边界框的坐标)进行回归,那就是向量回归。
小批量(mini-batch)或批量(batch):
模型同时处理的一小部分样本(样本数通常 为 8~128)。样本数通常取 2 的幂,这样便于 GPU 上的内存分配。训练时,小批量用来为模型权重计算一次梯度下降更新。

4.2 评估机器学习模型

过拟合的定义:着训练的进行,模型在训练数据上的性能始终在提高,但在前所未见的 数据上的性能则不再变化或者开始下降。
4.2.1 训练集、验证集和测试集
超参数的概念:
一般提前设置好的参数,并不随着训练改变而调正的参数。
通常可以将超参数分为三类:网络参数、优化参数、正则化参数。

​ 网络参数:可指网络层与层之间的交互方式(相加、相乘或者串接等)、卷积核数量和卷积核尺寸、网络层数(也称深度)和激活函数等。

​ 优化参数:一般指学习率(learning rate)、批样本数量(batch size)、不同优化器的参数以及部分损失函数的可调参数。

​ 正则化:权重衰减系数,丢弃法比率(dropout)
这些参数需要调正。提高资源利用率:超参数调整策略
这里什么要分成三部分 训练集、验证集和测试集,而不是两部分训练集,测试集。我是这样理解的,训练集训练,然后用验证集去验证,我们会根据验证集的参数,对网络进行调正(改变超参数),让验证集,训练集达到更好的效果,这样我们实际上造成了数据泄露,这个设置好的模型可能只适用与,你的训练集,验证集。所以分出一个全新的集合(测试集),拿测试集去测试。
本书提高了K折交叉验证,好像没用过。不做记录。
注意一点是,这个三个集合一定要没又交集。

4.3 数据预处理、特征工程和特征学习

向量化
神经网络的所有输入和目标都必须是浮点数张量(在特定情况下可以是整数张量)。无论 处理什么数据(声音、图像还是文本),都必须首先将其转换为张量,这一步叫作数据向量化
** 值标准化**
开始时图像数据被编码为 0~255 范围内的整数,表示灰度值。 将这一数据输入网络之前,你需要将其转换为 float32 格式并除以 255,这样就得到 0-1 范围。
一般来说,将取值相对较大的数据(比如多位整数,比网络权重的初始值大很多)或异质 数据(heterogeneous data,比如数据的一个特征在 0~1 范围内,另一个特征在 100~200 范围内) 输入到神经网络中是不安全的。这么做可能导致较大的梯度更新,进而导致网络无法收敛。为了让网络的学习变得更容易,输入数据应该具有以下特征
取值较小:
大部分值都应该在 0~1 范围内。
同质性(homogenous):
所有特征的取值都应该在大致相同的范围内。
此外,下面这种更严格的标准化方法也很常见,而且很有用,虽然不一定总是必需的(例如, 对于数字分类问题就不需要这么做)。
将每个特征分别标准化,使其平均值为 0。
将每个特征分别标准化,使其标准差为 1。

4.3.2 特征工程

如何量化的描述特征。大概是这个意思。

4.4 过拟合与欠拟合

机器学习的根本问题是优化和泛化之间的对立。优化(optimization)是指调节模型以在训 练数据上得到最佳性能(即机器学习中的学习),而泛化(generalization)是指训练好的模型在
前所未见的数据上的性能好坏。
训练数据上的损失越小,测试数据上的损失也越小。 这时的模型是欠拟合(underfit)的。即仍有改进的空间,网络还没有对训练数据中所有相关模 式建模。但在训练数据上迭代一定次数之后,泛化不再提高,验证指标先是不变,然后开始变差, 即模型开始过拟合。这时模型开始学习仅和训练数据有关的模式,但这种模式对新数据来说是错误的或无关紧要的。
这种降低过拟合的方法叫作正则化,有以下几种:

4.4.1 减小网络大小
防止过拟合的最简单的方法就是减小模型大小,即减少模型中可学习参数的个数(这由层 数和每层的单元个数决定)因此,为了让损失最小化, 网络必须学会对目标具有很强预测能力的压缩表示,这也正是我们感兴趣的数据表示。同时请 记住,你使用的模型应该具有足够多的参数,以防欠拟合,即模型应避免记忆资源不足。在容
量过大与容量不足之间要找到一个折中。

书中做了几个实验:
减少Dsense的 输出特征图的层数,更小的网络开始过拟合的时间要晚于原先的网络。
接下来书中采用了更大的网络,输出特征图的层数变成512,结论:
更大的网络只过了一轮就开始过拟合,过拟合也更严重。其验证损失的波动也更大。
4.4.2 添加权重正则化
你可能知道奥卡姆剃刀(Occam’s razor)原理:如果一件事情有两种解释,那么最可能正 确的解释就是最简单的那个,即假设更少的那个。这个原理也适用于神经网络学到的模型:给 定一些训练数据和一种网络架构,很多组权重值(即很多模型)都可以解释这些数据。简单模型比复杂模型更不容易过拟合。

这里的简单模型(simple model)是指参数值分布的熵更小的模型(或参数更少的模型,比 如上一节的例子)。一种常见的降低过拟合的方法就是强制让模型权重只能取较小的值, 从而限制模型的复杂度,这使得权重值的分布更加规则.
这种方法叫作权重正则化 (weight regularization)

L1 正则化(L1 regularization):
添加的成本与权重系数的绝对值[权重的 L1 范数(norm)] 成正比。
L2 正则化(L2 regularization):
添加的成本与权重系数的平方(权重的 L2 范数)成正比。 神经网络的 L2 正则化也叫权重衰减(weight decay)。不要被不同的名称搞混,权重衰减与 L2 正则化在数学上是完全相同的。添加的成本与权重系数的绝对值[权重的 L1 范数(norm)] 成正比。

from keras import regularizers model = models.Sequential()
model.add(layers.Dense(16, kernel_regularizer=regularizers.l2(0.001), activation='relu', input_shape=(10000,)))
model.add(layers.Dense(16, kernel_regularizer=regularizers.l2(0.001), activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))

l2(0.001) 的意思是该层权重矩阵的每个系数都会使网络总损失增加0.001 * weight_ coefficient_value。注意,由于这个惩罚项只在训练时添加,所以这个网络的训练损失会比测试损失大很多。
结论
在这里插入图片描述

from keras import regularizers 
regularizers.l1(0.001) L1 正则化
regularizers.l1_l2(l1=0.001, l2=0.001)同时L1,L2正则化

4.4.3 添加 dropout 正则化
dropout 是神经网络最有效也最常用的正则化方法之一,它是由多伦多大学的 Geoffrey Hinton 和他的学生开发的。对某一层使用dropout,就是在训练过程中随机将该层的一些输出特征舍弃(设置为 0)

model = models.Sequential() model.add(layers.Dense(16, activation='relu', input_shape=(10000,))) model.add(layers.Dropout(0.5))
model.add(layers.Dense(16, activation='relu')) model.add(layers.Dropout(0.5))
model.add(layers.Dense(1, activation='sigmoid'))

4.5 机器学习的通用工作流程

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ALZFterry/article/details/109811605