第一章 什么是深度学习
人工智能
1 符号主义人工智能
2 专家系统
3 机器学习
- 输入数据点
- 预期输出的示例
- 衡量算法好坏的方法
衡量结果是一种反馈信号,用于调节算法的工作方式。这个调节步骤就是我们所说的学习(learning)。学习指的是寻找更好数据表示(representation)的自动搜索过程。
机器学习和深度学习的核心问题在于有意义地变换数据。在于学习输入数据的有用表示,这种表示可以让数据更接近预期输出。
机器学习:在预先定义好的可能性空间(假设空间)中,利用反馈信号的指引来寻找输入数据的有用表示。
深度学习是机器学习的一个分支领域。深度学习中的深度(depth)指的一系列连续的表示层(layer)。现代深度学习通常包含数十个或者数百个连续的层,其他机器学习方法的重点往往是仅仅学习一两层的数据表示。
深度学习:数据表示的多级方法。
深度学习将特征工程完全自动化。
机器学习简史
- 概率建模(probabilistic modeling)
朴素贝叶斯算法
logistic 回归(logistic regression,简称 logreg) - 早期神经网络(neural network)
反向传播(backpropagation)算法
卷积神经网络(Convolutional Neural Networks, CNN) - 核方法(kernel method)
支持向量机(Support Vector Machine,SVM) - 决策树、随机森林与梯度提升机
- 深度神经网络
长短期算法(Long Short-Term Memory,LSTM)
深度卷积神经网络
处理结构化数据问题-梯度提升机[XGBoost库]
图像分类等感知问题-深度学习[Keras库]
第二章 神经网络的数学基础
张量(tensor)【Numpy数组(arrays)】
矩阵是二维张量,张量是矩阵向任意维度的推广。张量的维度(dimension)通常叫作轴(axis)。张量轴的个数叫作阶(rank)。
- 标量(0D 张量)
- 向量(1D 张量)
- 矩阵(2D 张量)
- 3D 张量与更高维张量
关键属性:
- 阶ndim
- 形状shape(一个整数元组)
- 数据类型dtype
张量切片(tensor slicing)
现实世界中的数据张量
第一个轴(0轴):
样本轴(sample axis )或样本维度
批量轴(batch axis)或批量维度
- 向量数据:2D张量,形状为 (samples, features) 。
- 时间序列数据或序列数据:3D张量,形状为 (samples, timesteps, features) 。
- 图像:4D张量,形状为 (samples, height,wdith, channels) 或 (samples, channels,height,wdith) 。
颜色通道channels/color_depth:灰度图像1,彩色图像3[R,G,B] - 视频:5D张量,形状为 (samples, frames, height,wdith, channels) 或 (samples, frames, channels,height,wdith) 。
张量运算(tensor operation)
逐元素(element-wise)运算
relu运算:max(x, 0)
加法运算广播(broadcast)
两个形状不一样的张量相加,较小的张量会被广播:
(1) 向较小的张量添加轴(广播轴),使其ndim与较大的张量相同
(2) 将较小的张量沿着新轴重复,使其形状与较大的张量相同张量点积tensor product
向量和向量 标量
矩阵和向量 向量
矩阵和矩阵 矩阵张量变形tensor reshaping
改变张量的行和列,以得到想要的形状。
转置transposition
向量运算的几何解释
几何操作:仿射变换、旋转、缩放
深度学习的几何解释
高维空间中非常复杂的几何变换
目的:优化权重或可训练参数。
编译compile
损失函数loss function 或 目标函数objective function
优化器optimizer 或 优化方法optimization method
指标metric
训练(训练循环)
随机初始化
1数据批量
2计算预期值[前向传播forward pass]
3计算损失
4更新权重
导数derivative-->梯度gradient
随机梯度下降
真SGD
小批量SGD[小批量随机梯度下降]
1数据批量
2计算预期值
3计算损失
4计算损失函数相对于权重的梯度[反向传播backward pass];
4将权重沿着梯度的反方向移动一点。
批量SGD
变体:带动量的SGD、Adagard、RMSProp
动量momentum解决了SGD的两个问题:收敛速度和局部极小点。
学习率learinnig rate
链式求导:反向传播算法
将链式法则chain rule应用到神经网络梯度值的计算,得到的算法叫作反向传播backpropagation(有时也叫反式微分reverse-mode differentiation)
权重张量是层的属性,里面保存了网络所学到的知识knowledge。
在所有训练数据上迭代一次叫作一个轮次epoch。
第三章 神经网络入门
三个问题:
- 二分类问题[将电影评论划分为正面或负面]
- 多分类问题[将新闻按主题分类(单标签、多分类)|(多标签、多分类)]
- 标量回归问题[根据房地产数据估算房屋的价格]
层:深度学习的基础组件
有些层是无状态的,但大多数层是有状态的,即层的权重。
不同的张量格式与不同的数据处理类型需要用到不同的层:
- 简单的向量数据保存在2D张量中,通常用密集连接层densely connected layer[ 也叫全连接层fully connected layer 或密集层dense layer,对应Keras 中的Dense类 ]来处理。
- 序列数据保存在3D张量中,通常用循环层recurrent layer[ 比如Keras中的LSTM层 ]来处理。
- 图像数据保存在4D张量中,通常用二维卷积层[ Keras 中的Conv2D ]来处理。
层兼容性layer compatibility:每一层只能接受特定形状的输入张量,并返回特定形状的输出张量。
模型:层构成的网络
深度学习模型是由层构成的有向无环图。
网络拓扑结构:
- 双分支(two-branch)网络
- 多头(multihead)网络
- Inception 模块
损失函数与优化器:配置学习过程的关键
损失函数(目标函数)——在训练过程中需要将其最小化。它能衡量当前任务是否已经成功完成。
[二分类问题:二元交叉熵(binary crossentropy)损失函数
多分类问题:分类交叉熵(categorical crossentropy)损失函数
回归问题:均方误差(mean-aquared error)损失函数
序列学习问题:联结主义时序分类(CTC,connectionist temporal classification)损失函数
... ...
]
优化器(优化方法)——决定如何基于损失函数对网络进行更新,它执行的是随机梯度下降SGD的某个变体。
Keras:高层次的构建模块,模型级(model-level)的库。
低层次的运算由张量库,keras的后端引擎(backend engine)完成。Keras没有选择单一的张量库并将Keras实现与这个库的绑定,而是以模块化的方式处理这个问题,目前Keras有三个后端实现:TensorFlow 后端、Theano 后端和微软认知工具包CNTK。
TensorFlow
CPU:低层次的张量运算库Eigen
GPU:高度优化的深度学习运算库,叫作 NVIDA CUDA神经网络网络库(cuDNN)
加载数据集
准备数据
数据向量化
1列表转换成张量[1.填充列表2.one-hot编码]
2输入数据的每个特征都有不同的取值范围[对每个特征做标准化]
标签向量化
1整数张量
2one-hot编码
构建网络
- 模型
激活函数[relu整流线性单元,hanh,sigmoid,softmax]
隐藏单元hidden unit, 信息瓶颈 - 损失函数和优化器
优化器optinizer
损失函数loss
[binary_crossentropy,
categorical_crossentropy(sparse_categorical_crossentropy),
mse]
指标metrics
[accuracy,
mae]
训练——验证你的方法
- 留出验证集[监控]
训练模型
绘制训练损失和验证损失
绘制训练精度和验证精度
从头开始重新训练一个模型 - [K折交叉验证:数据点很少]
K折验证
保存每折的验证结果
计算所有轮次中的K折验证分数平均值
绘制验证分数
绘制验证分数(删除前几个数据点)
训练最终模型
测试——使用训练好的网络在新数据上生成预测结果
第四章 机器学习基础
机器学习的四个分支
- 监督学习
标注annotation - 无监督学习
降维dimensionallity reduction
聚类clustering - 自监督学习
- 强化学习
智能体agent
评估机器学习模型
过拟合overfit
泛化generalize
训练集、验证集和测试集
在训练数据上训练模型,在验证数据上评估模型,在测试数据上测试模型。
权重:参数。[深度学习中,模型可学习的参数的个数通常称为模型的容量capacity]
模型的层数或每层大小:超参数。
信息泄露information leak:如果基于模型在验证集上的性能来调节模型配置,会很快导致模型在验证集上过拟合,即使你并没有在验证集上直接训练模型也会如此。
三种经典的评估方法:
- 简单的留出验证hold-out validation
- K折验证K-fold validation
- 带有打乱数据的重复K折验证iterated K-fold vaildation with shuffling
评估模型的注意事项
- 数据代表性data represrntativeness[随机打乱]
- 时间箭头the arrow of time [时间泄露time leak]
- 数据冗余redundancy in your data
数据预处理、特征工程和特征学习
神经网络的数据预处理
数据预处理的目的是使原始数据更适于用神经网络处理,包括向量化、标准化、处理缺失值和特征提取。
- 向量化
- 值标准化[取值较小;同质性
将每个特征分别标准化,使其平均值为 0;
将每个特征分别标准化,使其标准差为 1] - 处理缺失值
特征工程feature engineering
过拟合与欠拟合
最优解决方法:获取更多的训练数据。
次优解决方法:正则化regularization
- 减小网络大小
- 添加权重正则化
奥卡姆剃刀(Occam's razor)原理:如果一件事有两种解释,那么最可能正确的就是最简单的那个,即假设更少的那个。
这里的简单模型simple model 是指参数值分布的熵更少的模型(或参数较少的模型)
一种常见的降低过拟合的方法就是强制让模型权重只能取较小的值,实现方法是向网络损失函数中添加与较大权重值相关的成本cost[常见的成本:L1正则化;L2正则化] - 添加 dropout 正则化
对某一层使用 dropout, 就是在训练过程中随机将该层的一些输出特征舍弃(设置为0)
dropout 比率(dropout rate) 是设为0的特征所占的比例,通常在 0.2~0.5 范围内。
机器学习的通用工作流程
- 定义问题,收集数据集
非平稳过程 - 选择衡量成功的指标
- 确定评估方法
- 准备数据
- 开发比基准更好的模型
统计功效statistical power
纯随机的基准dumb baseline
三个关键参数:
- 最后一层的激活
- 损失函数
- 优化配置
扩大模型规模:开发过拟合的模型
(1)添加更多的层
(2)让每一层变得更大
(3)训练更多的轮次模型正则化与调节超参数
- 添加 dropout
- 尝试不同的构架:增加或减少层数
- 添加L1 和/或 L2 正则化
- 尝试不同的超参数(比如每层的单元个数或优化器的学习率), 以找到最佳配置
- (可选)反复做特征工程:添加新特征或删除没有信息量的特征