1. 什么是机器学习
机器学习算法是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法。
2. 机器学习要素
2.1 数据
在构建训练集的时候,不仅要注意数据的质量,也要保证数据的数量
2.2 模型
模型是机器学习的结果,描述从输入到输出的映射关系。
模型本质上是算法+参数的组合。
2.3 学习准则
机器学习通过损失函数来量化模型预测值与标签真实值之间的差异。
2.4 优化算法
找到一组参数,使样本 x 到映射值 y^ 之间的偏差最小。
3. 机器学习类型
3.1 监督学习
构建从输入 x 到输出 y 之间的映射关系。
3.2 半监督学习
用少量带有标签的训练数据和大量没有标签的训练数据来获取映射函数。
3.3 无监督学习
希望机器可以在无标签的情况下,自己挖掘出数据的内在结构。
3.4 强化学习
开发一个智能体,通过环境的反馈来提高决策的正确性。
4. 数据集划分
4.1 训练集
参与模型训练
4.2 验证集
从一些超参数中找到最优的超参数组合
4.3 测试集
不能参与训练,只对最终模型进行评估
对于一般规模的数据集来说,常规的划分方式是让训练集、验证集和测试集分别占总数据量的 60%、20% 和 20%,或占 80%、10% 和 10%;但当数据集的数量比较庞大,以上方法不可取,验证集和测试集各取 10,000 即可。
5. 交叉验证
调节超参数的具体过程如下:
- 超参数值作为横坐标,模型评估值作为纵坐标
- 模型评估值随着超参数值的变化而变化,进而得到一条曲线
- 曲线上评估值最高的点对应的超参数值就是要找的最优超参数
“交叉”是指训练集和验证集之间的数据相互转换,测试集保持不动。
K 折交叉验证:
- 把训练集随机分成 k 份,每次取其中 1 份做验证集,剩下的 k-1 份还是训练集
- 之后再取第 2 份做验证集,剩下的 k-1 份也还是训练集
- 经过 k 次之后,所有的数据都参与了训练,也都参与了验证,得到了 k 条超参数-评估值曲线
- 把 k 条曲线取均值,得到一条均值曲线
- 在均值曲线上,评估值最高的点对应的超参数值就是要找的最优超参数
留一交叉验证:
6. 标量、向量、矩阵
6.1 标量
0 维的数组叫做标量。
6.2 向量
1 维的数组叫做向量,也叫矢量。
-
向量的长度,也叫向量的模长,一般采用二范数计算方法(向量中所有元素平方和的开方就是模长):
∣∣a∣∣2=2a12+a22...an2
-
向量的点乘,也叫向量的内积。即对应元素相乘,然后求和,结果为标量;也可以用如下公式
a⋅b=∣a∣∣b∣cosθ
6.3 矩阵
矩阵由行和列组成。
7. 概率论基础
机器学习与深度学习的根本就是发现特定事件的统计规律。
- 联合概率表示事件 A 和事件 B 同时发生的概率。
- 高斯分布
- 条件概率是指一个事件在另一个事件发生的条件下发生的概率。
P(A∣B)=P(B)P(A,B)(A表示事件,B表示条件)
8. 线性回归
通用训练流程:
- 将训练数据输入模型;
- 经过计算得到输出;
- 将模型的输出值和数据的标签值进行对比,计算损失;
- 通过损失,优化模型参数;
- 更新模型参数,继续上述过程。经过数次迭代后,最终得到最优的模型参数作为训练结果。
线性回归模型是构建深度学习的基础,神经网络的每一层都包含了一个线性模型。
线性方程:
y=wTx+b(y是输出,w是权重向量,x是特征向量,b是偏置)
- w 默认为列向量,为了能和同是列向量的 x 进行计算,因此将 w 进行转置
平方损失函数是线性回归中最常见的损失函数:
L(w)=21(y^−y)2
均方差损失:
L(w)=2n1i=1∑n(y^(i)−wTx(i))2(其中w为增广权重向量,形如w1w2⋅⋅⋅wnb;x为增广特征向量,形如x1x2⋅⋅⋅xn1)
基本求导知识:
损失函数求导:
∂w∂L(w)=∂w∂2n1∣∣Y−XTw∣∣22=2⋅2n1⋅X⋅(Y−XTw)=n1⋅X⋅(Y−XTw)
令导数为 0,求参数 w 的值:
n1⋅X⋅(Y−XTw)=0X⋅Y−X⋅XT⋅w=0w=(X⋅XT)−1⋅X⋅Y(此时w为最优模型参数)
9. 欠拟合 多项式回归 过拟合 正则化
9.1 欠拟合
由于模型表达能力弱,而无法学习到数据集中的一般性规律,导致拟合结果不佳。
9.2 多项式回归
解决欠拟合问题
回归方程:
y=wTφ(x)(w是参数向量,形如w0w1w2⋅⋅⋅wm;x是特征向量,形如1x1x2⋅⋅⋅xm,其中m是多项式的次数)
多项式回归的损失函数:
L(w)=2n1i=1∑n(y^(i)−wTφ(x(i)))2
9.3 过拟合
对于训练样本来说,模型能够精准地预测到每一点的值,但在面对新数据时,预测结果不佳,模型还是没有正确地学习到一般性规律。
- 可以通过降低模型复杂度解决过拟合问题
- 增加样本数量可以解决过拟合问题
9.4 正则化
解决过拟合问题
具体做法:在损失函数中加入正则化项,如下:
L(w)=2n1i=1∑n(y^(i)−wTφ(x(i)))2+2λwTw(正则化系数λ是一个超参数)
10 梯度下降法
10.1 梯度
- 梯度是一个向量
- 梯度的方向是函数变化最快的方向
- 梯度的反方向即函数下降最快的方向
10.2 梯度下降法
迭代过程:
θt+1=θt−λ⋅dθtdf(θt)(参数λ叫做学习率,用来控制每次更新参数的幅度)
- 学习率 λ 过小容易导致时间开销大;过大容易导致模型的损失不断震荡,无法收敛到最低点
- λ 在整个训练过程中并不是一成不变的,需要根据任务的情况进行调整,往往随着训练的进行不断减小。
10.3 梯度下降法变种
随机梯度下降法:
小批量梯度下降法:
- 每次训练时,选取 n 个样本构成一个小批量,参与参数更新
11. 线性分类 二分类
不同特征之间的数量级差异非常大,可以通过归一化进行处理。
通过阈值函数对线性结果进行分类。
12. 线性分类 多分类
“一对多”方法:
- 将多分类问题转化为多个二分类问题
- 具体做法:
- 遍历每一种类别,找到能将当前类别和其他类别区分开的最优决策函数
- 在这些决策函数的共同作用下,将样本空间划分成不同区域,从而实现类别划分
- ”一对多“方法会产生孤立区域和模糊地带的问题
argmax 方法:
- 解决孤立区域和模糊地带的问题
- 核心思想是对样本在每个类别上进行打分,得分最高的类别作为该样本的类别
-
fi(x;wi)=wiTx+bii∈{1,⋅⋅⋅,n}(fi代表第i个判别函数;x代表样本)y=i=1argmaxnfi(x;wi)(y代表预测类别)
13. 感知机
13.1 感知机
激活函数是将连续回归值转变成离散值,从而实现类别划分。
感知机中使用的激活函数是 sign() 符号函数:
y={−11(w1⋅x1+w2⋅x2+b)≤0(w1⋅x1+w2⋅x2+b)>0
13.2 损失函数
为了得到连续可导的损失函数,感知机选择用误分类样本到决策函数的距离来衡量模型的偏差。
∣∣w∣∣1∣w⋅x0+b∣→∣∣w∣∣1(−y0⋅(w⋅x0+b))
−∥w∥1xi∈M∑yi⋅(w⋅xi+b)(M为误分类样本集)
感知机并不关心误分类样本点到决策函数距离的大小,因此感知机的损失函数如下:
L(w,b)=−xi∈M∑yi⋅(w⋅xi+b)(M为误分类样本集)
14. logistic 回归
14.1 logistic 回归
一个随机事件所包含的信息量。
对于一个随机变量 X 来说,当 X=x 时的自信息 I(x) 定义为:
I(x)=−logp(x)
14.3 熵
在信息论中,熵被用来衡量信息量的大小,或者说衡量随机事件的不确定性。
Entropy=−i=1∑Np(i)⋅log2p(i)
14.4 交叉熵
logistic 回归使用交叉熵作为损失函数。
Entropy(p,q)=−i=1∑Np(i)⋅log2q(i)
(p(i) 代表真实概率分布,q(i) 代表估计概率分布)
交叉熵可以用来估计两个分布的相似性:两个分布越相似,交叉熵就越逼近于熵,交叉熵也就越小。
14.5 KL 散度(Kullback-Leibler Divergence)
KL 散度是用概率分布 q 来近似 p 时所造成的信息损失量。
KL(p,q)=H(p,q)−H(p)=x∑p(x)logq(x)p(x)
其中,H(p,q) 表示交叉熵,H(p) 表示熵
14.6 交叉熵损失函数
交叉熵损失函数通过衡量两分布间的差异来优化模型,逐渐趋近数据的真实分布。
L=−i=1∑Np(i)⋅log2q(i)
(其中 p(i) 表示样本的真实标签,q(i) 表示模型的预测结果)
特别的,二分类任务的交叉熵损失函数如下:
L=−i=1∑Np(i)⋅log2q(i)=−p⋅log2q−(1−p)⋅log2(1−q)
15. softmax 回归
15.1 ”一对多“方法
多分类问题可以被看作是多个二分类问题。
15.2 softmax 回归
softmax 回归是 logistic 回归在多分类问题上的推广,也是一种线性分类模型。
- logistic 回归的输出只有一个值,表示样本属于正类的概率
- softmax 回归的输出是多个值,表示样本属于对应类别的概率
softmax 函数:
softmax(xn)=∑i=1Nexiexn
softmax 回归:
15.3 one-hot 编码
对于分类任务来说,各类别都应该是相互独立的,因此要将不同的标签表示为相互独立的数字,标签之间的距离相等。
one−hot 编码用二进制向量来表征离散的分类标签。
15.4 多分类交叉熵损失函数
单样本损失函数:
l=−i=1∑Nyi⋅log2y^i(其中yi表示样本属于第i类的真实概率,y^i表示样本属于第i类的模型预测概率)
多样本损失函数:
L=−T1j=1∑T(i=1∑Nyi(j)⋅log2y^i(j))(其中T为参与损失运算的样本个数)
16. 什么是神经网络
感知机异或门(XOR)问题
解决异或门这类非线性问题有两种思路:
多个神经元连接在一起,呈现出网状,就构成了神经网络。
- 每个神经元都包含了加权运算和激活运算
- 箭头表示神经元之间数据的传输方向
- 每个连接线都对应一个权重
输入的数据按照箭头走向,从输入层开始,经过每个神经元的运算得到输出,上一层神经元的输出再作为下一层神经元的输入,传输下去,直到输出层。
激活函数使得神经网络非线性化,并使其具备了分段表达能力。
17. 前向传播 反向传播
17.1 神经网络的种类
神经网络分为:
- 前馈神经网络:信号从输入层向输出层单向传输的网络
- 循环神经网络(记忆网络):信号除了向后续节点传输之外还会回传给自身的网络
- 图神经网络
17.2 前馈神经网络
在前馈神经网络中,信号的传输分为两种:
- 前向传播:将信号传入模型,经过一层层运算,得到输出
- 反向传播:从输出层往回传,用于训练过程中传输误差,从而优化模型参数
17.3 前向传播
输入值送入模型,经过层层计算得到输出。
17.4 反向传播
全称为误差反向传播。
反向传播将损失的梯度从输出层往输入层的方向,一层层回传,从而更新每层权重参数。其本质上是采用链式法则,计算损失函数对所有参数的梯度。
链式法则求梯度。
18. 激活函数
设计神经网络,需要考虑以下两个关键点:
18.1 网络结构
网络结构包括网络层数以及每层神经元的个数。
- 网络层数又叫网络深度
- 每层神经元的个数称为网络宽度
随着网络深度的增加,模型能够拟合更复杂的函数,完成更复杂的任务。但同时也面临着运算量暴增、梯度消失和梯度爆炸等诸多问题。
激活函数的作用主要体现在前向激活和反向梯度回传两个方面。
18.2 sigmoid 激活函数
sigmoid 函数曲线和导数曲线:
sigmoid 函数将输出值限制在 [0,1] 之间。
梯度饱和:在反向传播过程中,激活函数的输出趋于平坦,导致梯度接近零或变得极大,从而引起训练问题。
梯度消失:在深度神经网络中,由于反向传播算法的限制,导致网络的梯度在传递过程中逐渐变小,最终趋近于零。
二者联系:梯度消失是在训练过程中出现的现象,梯度饱和是针对函数来说的。因为损失函数值落入了函数梯度饱和的区间,导致训练出现了梯度消失现象。
由于 sigmoid 函数的输出恒大于0,在训练时,关于权重 wi 的更新公式如下:
wit+1=wit−λ⋅xi⋅∂f∂L
对于 w0,w1,w2 来说,∂f∂L 的值是一样的,而 xi 是前一层神经元经过 sigmoid 激活函数输出,xi 都为正,最终使得λ⋅xi⋅∂f∂L 的正负是一致的,也就是 wi 的更新方向是一致的,从而导致模型的收敛速度减慢。
18.3 tanh 激活函数
tanh 函数又叫双曲正切函数,函数公式如下:
tanh(x)=ex+e−xex−e−x
tanh 函数曲线和导数曲线:
- tanh 函数的输出值分布在 0 的两侧,可以有效解决 sigmoid 函数恒大于 0 带来的收敛慢的问题;
- tanh 函数依旧存在梯度饱和,还会出现梯度消失;
- tanh 函数和 sigmoid 函数均含有幂运算,存在运算效率的问题
18.4 ReLU 激活函数
ReLU 函数又叫线性整流函数,函数公式如下:
ReLU(x)=max(0,x)
ReLU 函数曲线和导数曲线:
ReLU 函数解决了梯度消失和运算效率的问题。
根据权重更新公式:
wt+1=wt−λΔwt(Δwt表示w的梯度)
当学习率过大时,λΔwt 有可能会大于 wt,wt+1 就会变成负值。此时输入网络的正值会与权重相乘后也变为负值,负值经过 ReLU 输出 0,对应的 ReLU 导数也为 0,导致 λΔwt 为 0,w 得不到更新,一直为负,从而导致其神经元一直输出 0,永久失活。这种情况称为 Dead ReLU 问题。
ReLU 函数和 sigmoid 函数一样,输出值均为非负,从而造成在梯度更新缓慢。
18.5 Leaky \ ReLU 激活函数
Leaky ReLu 函数针对解决 Dead ReLU 问题,函数公式如下:
LeakyReLU(x)={x,αx,x>0x≤0(α通常设为0.01)
Leaky ReLU 函数曲线和导数曲线:
- 当输入值小于 0 时,函数值为一个很小的负值
- 同时梯度不为 0 而是 α
针对 α 的取值方法:
- 随机 Leaky ReLU:对 α 随机取值,α 的分布需满足均值为 0、标准差为 1 的正态分布。
- 在一定程度上可以帮助参数跳出局部最优点,优化模型落入局部最优
- Parametric ReLU(PReLU):将 α 作为需要学习的参数,在模型训练时一起优化,从而得到最优值。
18.6 ELU 激活函数
一个好的激活函数,从理论上应该满足两个条件:
- 单侧饱和
- 输出值分布在 0 的两侧
Leaky ReLU 和 PReLU 满足第 2 个条件,不满足第 1 个条件;ReLU 满足第 1 个条件,不满足第 2 个条件。
ELU 激活函数同时满足以上两个条件。
ELU 函数公式如下:
ELU(x)={x,α(ex−1),x>0x≤0
ELU 函数曲线和导数曲线:
18.7 Swish 激活函数
Swish 函数公式如下:
Swish(x)=x⋅σ(β⋅x)(σ表示sigmoid函数,β是一个可调节的参数)
Swish 函数曲线和导数曲线:
- 在正值区间内,随着输入信号值的增大,sigmoid 函数的取值逐渐趋近于 1, Swish 函数的输出值接近于输入值
- 在负值区间内,随着输入信号值的减小,sigmoid 函数的取值逐渐趋近于 0, Swish 函数的输出值接近于 0
- 在信号大于 0 时 Swish 被激活,小于 0 时失活
19. 全连接神经网络的不足
在前馈神经网络中,每个神经元都分别分别和上一层的所有神经元彼此连接,这样的网络层叫做全连接层;由全连接层构成的网络叫全连接神经网络,又叫多层感知机。
不足之处:
- 参数量过大
- 只能获取全局信息,没有感知局部信息的能力
CNN 的出现有效解决了参数量过大和缺乏局部感知能力两大难题。
20. 卷积 二维卷积
20.1 卷积
无记忆系统:系统的输出只和当前输入有关,与历史输入无关。可表示为:
yt=f(xt)(其中xt表示t时刻的输入信号,yt表示t时刻的输出信号)
记忆系统:系统的输出受到当前输入与历史输入的影响。
系统输出需要满足两个条件:
- 线性:指输入和输出是线性的,成比例关系
- 时不变:指不同时刻相同的输入得到的输出也应该相同
在记忆系统中,当前时刻的输出不只是由当前输入来决定,而是截止到当前为止的所有输入信号的响应总和。
离散卷积:
y(t)=f(t)∗g(t)=i=−∞∑+∞f(i)⋅g(t−i)(其中∗表示卷积运算)
连续卷积:
y(t)=∫−∞+∞f(i)⋅g(t−i)di
20.2 二维卷积
二维离散卷积:
y(i,j)=f(i,j)∗g(i,j)=m∑n∑f(m,n)⋅g(i−m,j−n)
互相关操作(省略翻转操作):
y(i,j)=m∑n∑f(m,n)⋅g(i+m,j+n)
由卷积核构成的神经网络就是卷积神经网络。
21. 卷积运算过程(单通道 多通道 多卷积核)
21.1 单通道数据的二维卷积
卷积运算过程:卷积核从左上角开始,不断向右滑动,直到一行滑动结束,再下移,从新一行起始位置开始,继续滑动,直到滑动到最后一行的最后一列,最终得到一个二维的输出矩阵。
- 输出为 feature map
- 卷积核中的参数叫做权重
- 卷积核每次移动的单位长度叫做步长
- 在卷积神经网络中,步长(stride)作为一个超参数,需要在设计卷积层时手动设定
- 步长的大小直接影响卷积的结果和输出的尺寸,从而影响特征提取的效果和运算量
卷积操作后输出的 map 尺寸要小于输入尺寸,在连续进行几次卷积后,当输出变为 1 × 1 时,就无法继续进行卷积运算,从而难以构建足够深的神经网络;此外,卷积运算没有充分利用边缘信息。填充操作 padding可以解决这些问题。
卷积输出尺寸的计算公式:
wout=floor(stridewin+2×padding−F)+1(wout表示输出尺寸,win表示输入尺寸,padding表示填充个数,F表示卷积核大小,stride表示步长,floor表示下取整)
21.2 多通道数据的卷积运算
多通道的卷积操作与单通道的类似,只是在构造卷积核时需要注意:卷积核的通道个数要和输入数据的通道个数相同,此时二者才能进行互相关运算。卷积的结果为所有通道对应位置的卷积和,最终的输出仍是一个二维的特征图。
21.3 多卷积核的卷积运算
在实际的卷积网络中,每一层都有多个卷积核参与运算,每个卷积核分别与输入卷积,得到一个单通道的输出,最后多个单通道的输出拼在一起就变成了多通道的输出。
- 卷积核又叫 filter 滤波器。
- 多个卷积核叠加,就构成了卷积层。
- 卷积层的参数包括卷积核的大小,数量以及步长等。
- 卷积核的权重参数可以通过训练进行优化,让卷积层更好地提取输入数据中的特征。
- 卷积层、池化层、全连接层等网络层,多层叠加,构成卷积神经网络。