1. Keras学习记录的参考书是:《Python深度学习》;
2. 本篇记录的是第一部分(3-4章)的知识点汇总,详情见书;
给定一组带标注的样本,模型可以学会将输入数据映射到标注上。
**监督学习可分为:分类和回归;**具体主要包括:序列生成 (sequence generation)、语法树预测 (syntax tree prediction)、目标检测 (object detection) 和 图像分割 (image segmentation)。
在没有标注的情况下,模型根据输入数据,从中寻找出规律;其目的在于数据可视化、数据压缩、数据去燥或者更好地理解数据中的相关性。
无监督学习可以分为:降维 (dimensionality reduction) 和 聚类 (clustering)。
自监督学习 是没有人工标注的标签的监督学习(本质还是监督学习,只是没有人为参与。标签依然存在,但是由模型自己从输入数据中学到的)。
比如:给定视频中的过去帧来预测下一帧,或者给定文本中前面的词来预测下一个词。
在强化学习中,智能体 (agent) 接收与其相关的环境信息,并学会选择使用某种奖励最大化的行动。
将数据集划分为 训练集、验证集和测试集。由于模型由多个超参数(比如 层数、每层大小、训练次数、学习率等)需要确定,所以需要利用模型在验证集上的性能作为反馈信号,以此调节模型超参数,得到最优的超参数组合。
测试集是绝对不可以用到模型训练中的。
从训练集中留出一定比例的数据作为测试集,剩余数据作为训练集训练模型,然后在测试集上评估模型。
优点:操作简单;缺点:如果数据较少,那么验证集和测试集的数据就很少,不具有统计学上的意义。
将数据集分为大小相同的 K 份,对每一份而言,每次选一份作为验证集,剩下的 K-1 份作为训练集。最终得到 K 个评估分数,取均值作为最终得分。
如果数据相对较少,但又要尽可能精确地评估模型,那么可以选择该方法。
具体做法就是多次使用 K 折验证,每次将数据集划分为 K 份之前,先将顺序打乱。最终分数是每次可这验证分数的平均值。
这个方法一共要训练和评估 P x K 个模型 (P为训练次数),计算代价很大。
**1. 数据代表性:**尽可能确保训练 (验证集) 和测试集中样本标签包含全部标签种类,所以在划分训练集和测试集之前,通常需要将数据随机打乱。
**2. 时间箭头:**如果想用过去的数据预测未来,那么不能直接将数据进行随机打乱,而是要确保测试集中所有数据的时间都晚于测试集数据。
**3. 数据冗余:**一定要保证训练集和测试集之间没有交集。
神经网络的所有输入和目标必须都是浮点数张量。无论是声音、图像还是文本,都需要转化成浮点数张量的形式。
不同来源的数据或者不同的特征,有不同的取值范围,这种情况下需要对特征值进行标准化处理。
输入数据应该具有:取值较小(大部分值在0-1之间)和同质性(所有特征取值都应该在大致相同的范围内)。
通常用的标准化处理方法是:将每个特征分别标准化,都变成均值为0,标准差为1的数值分布。
如果数据中存在缺失值,那么一般来说将缺失值设置为 0 是可以的(只要 0 不是一个有意义的值)。
将数据输入模型之前,利用先验知识对数据进行 硬编码 的变换(不是模型自己学到的),以改善模型的效果。
特征工程对于传统的统计机器学习比较重要,而对于现代深度学习而言,大部分情况下是不需要特征工程的,但是良好的特征仍有助于提升模型性能。
过拟合存在于所有的机器学习模型中,因此如何处理过拟合对于掌握机器学习至关重要。
**机器学习的根本问题是:优化和泛化之间的对立。
优化 (optimization) 指调节模型以在训练集上得到最佳性能 (即 学习的过程)。
泛化 (generalization) 指的是训练好的模型在前所未见的数据上的性能好坏。
训练开始时,优化和泛化是相关的:训练数据上的损失越小,测试数据上的损失也越小,这时模型是欠拟合的,模型仍有改进空间。
随着训练次数增加,泛化不在提高,验证指标先不变,然后开始变差,模型开始过拟合。
为降低模型过拟合,需要用到一些正则化方法 (regularization),如下所述:
- 减小网络大小 (减小模型的层数、隐藏单元个数等);
- 添加权重正则化 (强制让模型权重只能去较小的值,从而限制模型的复杂度。比如 L1 正则化、L2正则化);
- 添加 dropout 正则化 (对某一层使用dropout,就是在训练过程中随机将该层的一些输出特征舍弃 (设置为0)。dropout比率 指的是被设置为0的特征所占的比例,通常刚在0.2-0.5之间)
问题类型 | 最后一层激活 | 损失函数 |
---|---|---|
二分类问题 | sigmoid |
binary_crossentropy |
多分类、单标签问题 | softmax |
categorical_crossentropy |
多分类、多标签问题 | sigmoid |
binary_crossentropy |
回归到任意值 | 无 | mse |
回归到0-1之间的值 | sigmoid |
mse 或者 binary_crossentropy |
神经网络的基本数据结构是层。
层是一个数据处理的模块。
有些层是无状态的,但大多数层是有状态的(即 层的权重)。
不同的张量格式与不同的数据处理类型需要用不同的层:
2D (samples, features)张量数据(比如简单的向量数据),用全连接层 fully connected layer(也称为 密集层 dense layer);
3D (samples, timesteps, features)张量数据(比如 序列数据),用循环层 recurrent layer(比如 LSTM);
4D (samples, height, width, channels)张量数据(比如图像数据),用二维卷积层 convolution layer(比如 Conv2D);
最常见的模型是层的线性堆叠,但是也有一些其他的网络拓扑结构(比如 双分支 two-branch 网络、多头 multihead 网络、Inception 模块)。
损失函数(目标函数)——训练过程中需要将其最小化,衡量当前任务是否成功完成。
优化器——如何基于损失函数对网络进行更新。
关于损失函数的选择:
二分类问题 – 二元交叉熵 (binary crossentropy) 损失函数;
多分类问题 – 分类交叉熵 (categorical crossentropy) 损失函数;
回归问题 – 均方误差 (mean-squared error) 损失函数;
序列学习问题 – 联结主义时序分类 (CTC, connectionist temporal classification) 损失函数;
Keras中定义模型的方法有两种:使用Sequential
类(仅适用于 层的线性堆叠);使用 函数式 API
(funational API,用于 层组成的有向无环图,可以构建任意形式的架构)。
以电影评论分类为例,将影评的文字内容划分为正面或负面。
详见:http://t.csdn.cn/Y8mIm
以路透社新闻为例,将其划分为46个互斥的主题。
详见:http://t.csdn.cn/5aieG
以波士顿房价预测为例。
详见:http://t.csdn.cn/M3YBm