研究生周报(第十周)
学习目标
- YOLO1简单理解
- 线性因子模型
- F1、ROC、AUC
- 决策树和GBDT
- XGBoost简单理解
学习时间
7.10 ~ 7.16
学习产出
- Python代码
- github记录
Pytorch的一些注意事项
- model.train()启用Batch Normalization和Dropout,如果模型中有BN层和Dropout,需要在训练时添加mode.train()。model.train()是保证BN层能够用到每一批数据的均值和方差。
- model.eval()不启用Batch Normalization和Dropout,在测试时使用。在eval模式下,dropout会让所有的激活单元通过,而BN层会停止计算和更新meav和var,直接使用在训练阶段已经学出的mean和var值。
- with torch.no_grad()主要用于停止autograd模块的工作,以起到加速和节省内存的作用。它的作用是将该with语句包裹起来的部分停止梯度的更新,从而节省了GPU算力和显存。
- 不执行optimizer.zero_grad(),则每次梯度的值都要加上之前的梯度
YOLO1
-
概述
- YOLO的全称是you only look once,指只需要浏览一次就可以识别出途中物体的类别和位置
- 因为只要看一次,YOLO被称为Region-free方法,相比于Region-based方法,YOLO不需要提前找到可能存在目标的Region
- 一点典型的Region-base方法流程为:先通过计算机图形学的方法,对图片进行分析,找出可能存在物体的区域,将这些区域剪裁下来,放入一个图片分类器,由分类器分类
-
整体流程
- 图形划分:将一副图片划分成SxS个网格,如果某个对象的中心点落在这个网格,则这个网格就负责预测这个对象
- Bounding Boxes预测
- bounding boxes + confidence。YOLO为每一个网格给出了两个预测框,每个预测框基于网格中心点,大小自定义,每个bounding boxer有四个坐标和一个置信度,所以最终的预测结果是SxSx(B*5+C)个向量
- class probablity map,负责将网格类别的分数放到一个7x7x30的张量中
- 使用S=7,B=2,PASCAL VOL有20个标签类=>7x7x(5*2+20)=7x7x30
- confidence是YOLO系列论文独有的一个参数,confidence有两种情况,分别是0和1,当网格中确实存在目标时,Pr(Object)就为1,如果网格中没有目标落在里面,那么Pr(Object)为0
- 最终预测时,对每个目标的最终概率是将conditional class probabilities乘上confidence,对于每个grid cell而言,我们会预测C个类别分数,那么这里的类别分数就是对应的conditional class probabilities,也就是Pr(Class|Object)
-
网格结构分析
-
损失函数详解
-
缺陷
- 对群体性的小目标检测效果很差
- 目标出现新的尺寸或者配置的时候,预测效果也差
- 主要误差是由于定位不准
-
详解
- DPM(Deformable Parts Model)基础HOG而来,传统的HOG只采用一个模板表示某种物体,而DPM把物体的模板划分为根模型和部分模型;在坚持中使用根模型进行定位,部分模型进行进一步的确认。
- HOG(Histogram of Oriented Gradient)特征的计算主要分为计算梯度、统计梯度只方图和归一化并截断三个步骤。
- DPM完成目标检测需要两次:一是寻找物件的位置,二是识别该物件。
- LeakyReLU:y=max(0,1)+leak*min(0,x)
线性因子模型
-
线性因子模型
- 线性因子模型通过随机线性解码器函数来定义,该函数通过对h的线性变换以及添加噪声来生成x
- 首先从u偶和因子分布p(h)中抽取解释性因子h:h~p(h),然后在给定因子的情况下,对实值的可观察变量进行采样:
x = W h + b + n o i s e x=Wh+b+noise x=Wh+b+noise
其中噪声往往是对角化的且服从高斯分布
-
概率PCA和因子分析
- 因子分析:潜变量的先验是一个方差为单位矩阵的高斯分布:h~N(h;0,I)
二噪声是从对角协方差矩阵的高斯分布中抽出来的,协方差矩阵为: ψ = d i a g ( σ 2 ) \psi=diag(\sigma^2) ψ=diag(σ2),其中 σ 2 = [ σ 1 2 , ⋯ , σ n 2 ] T \sigma^2=[\sigma_1^2,\cdots,\sigma_n^2]^T σ2=[σ12,⋯,σn2]T
可以看出生成的x服从多维正态分布,并满足: x ∼ N ( x ; b , W W T + ψ ) x\sim N(x;b,WW^T+\psi) x∼N(x;b,WWT+ψ) - 概率PCA:如果因子分析模型中的条件方差 σ i 2 \sigma_i^2 σi2等于同一个值时,线性因子模型变为概率PCA,x服从的多维正太分布变为: x = W h + b + σ z x=Wh+b+\sigma z x=Wh+b+σz
- 因子分析:潜变量的先验是一个方差为单位矩阵的高斯分布:h~N(h;0,I)
-
独立成分分析
- 它是一种建模线性因子的方法,旨在将观察到的信号分离成许多潜在信号,这些潜在信号通过縮放和叠加可以恢复成观察数据。
- 许多不同的具体方法被称为ICA,它们均要求p(h)是非高斯的,这样的选择在0附近具有比正态分布更高的峰值,因此ICA常用于学习稀疏特征。
-
慢特征分析
- 慢特征分析(SFA)是使用来自时间的信息学习不变特征的线性因子模型,其想法源于慢性原则。
- SFA需要满足三个约束条件:
- 学习到的特征要具有零均值,这样优化问题才会有唯一解
- 学习到的特征要具有单位方差,以防止所以的特征趋近于0
- 学习道的特征必须彼此线性去相关
-
稀疏编码
- 稀疏编码模型通常假设线性因子有一个各向同性精度为
β
\beta
β的高斯噪声:
p ( x ∣ h ) = ν ( x ; W h + b , 1 β I ) p(x|h)=\nu (x;Wh+b,\frac{1}{\beta}I) p(x∣h)=ν(x;Wh+b,β1I) - 分布p(h)通常选取为一个峰值很尖锐且接近0的分布,常见的选择包括可分解的Laplace、Hauchy或者可分解的Student-t分布。
- 稀疏编码模型通常假设线性因子有一个各向同性精度为
β
\beta
β的高斯噪声:
F1、ROC、AUC的原理、公式推导
- AUC基础
-
正类、负类:正类结果是我们要预测、识别的对象
-
混淆矩阵,是一种 N × N N\times N N×N表格,用于总结分类模型的预测效果。其中N表示类别个数,横轴表示实际的标签,纵轴表示模型预测的标签。
-
精确率、召回率、F1
- 精确率:模型正确预测正类的频率
P r e c i s e = T P T P + F P Precise=\frac{TP}{TP+FP} Precise=TP+FPTP - 召回率:在所以实际的正类标签中,模型正确地识别出了多少个
R e c a l l = T P T P + F N Recall=\frac{TP}{TP+FN} Recall=TP+FNTP
==> 通常,精确率和召回率是矛盾的 - F1评估(综合度量精确率和召回率)
F 1 = 2 1 R + 1 P = 2 T P 2 T P + F P + F N F1=\frac{2}{\frac{1}{R}+\frac{1}{P}}=\frac{2TP}{2TP+FP+FN} F1=R1+P12=2TP+FP+FN2TP
==> 通常,精确率、召回率、F1会一起使用,综合反应算法性能 - 局限
- 二分类时,只能评估正类的分类性能
- 多分类时,只能评估某一类的分类性能
- 准确率(正确率): A c c u r a c y = 预测正确的样本树 样本总数 = T P + T N T P + F P + F N + T N Accuracy=\frac{预测正确的样本树}{样本总数}=\frac{TP+TN}{TP+FP+FN+TN} Accuracy=样本总数预测正确的样本树=TP+FP+FN+TNTP+TN
- 错误率: E r r o r = 预测错误的样本数 样本总数 = F P + F N T P + F P + F N + T N Error=\frac{预测错误的样本数}{样本总数}=\frac{FP+FN}{TP+FP+FN+TN} Error=样本总数预测错误的样本数=TP+FP+FN+TNFP+FN
- 精确率:模型正确预测正类的频率
-
- AUC原理
- TPR、FPR
- 真正类率: T P R = T P T P + F N = 召回率 TPR=\frac{TP}{TP+FN}=召回率 TPR=TP+FNTP=召回率
- 假正类率: F P R = F P F N + T N FPR=\frac{FP}{FN+TN} FPR=FN+TNFP
- ROC(Receiver Operating Characteristic) Curve,受试者工作特征曲线
-
不同分类阙值下的正类率(TPR)和假正类率(FPR)构成的曲线。其中TPR是纵轴,FPR是横轴
-
优点:
1.有助于选择最佳分类阙值:ROC曲线越靠近左上角,模型的准确性就越高
2.方便对比不同模型的性能:各个分类模型ROC绘制在一个坐标系鉴别优劣 -
缺点:两个ROC曲线交叉导致难以判断优劣
-
- AUC(Area Under the ROC Curve),ROC曲线下的面积:ROC曲线下面积越大,则分类模型效果越优
- TPR、FPR
- 总结
- AUC优势
- 体现相对的排序(适用与排序问题)
- 适用样本不平衡情况(不关注局部特征,对样本不敏感)
- AUC缺点
- 无法反应Top-N的效果
- 无法反应模型的局部特征
- AUC优势
二分类、多分类、多标签的基础、原理、算法和工具
-
分类基础
- 机器学习分类
- 通过训练集 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x n , y n ) {(x_1,y_1),(x_2,y_2),\cdots,(x_n,y_n)} (x1,y1),(x2,y2),⋯,(xn,yn)进行学习,建立一个从输入空间X到输出空间Y的映射f:X->Y
- 二分类、多分类、多标签分类
- 机器学习分类简史
- 机器学习分类
-
二分类
传统二分类算法 思想 LR逻辑回归模型 概率划分 SVM支持向量机 空间划分 k近邻算法 距离划分 决策树 信息量划分 朴素贝叶斯 条件概率公式 FM因子分解机 概率划分 -
多分类原理
- 朴素贝叶斯多分类原理:返回概率最大的分类结果
- Softmax多分类结果:多用于深度学习、Attention学习
传统二分类算法 思想 k近邻算法 距离划分 朴素贝叶斯 条件概率公式 决策树、RF随机森林、GBDT梯度提升树、XGBppst 信息量划分 -
多标签分类
- 原理
- 一阶策略:假设标签是相互独立的
- 二阶策略:假设标签是两两相关的
- 高阶策略:假设多标签是相关的
- 分类算法
- 原理
决策树(ID3、C4.5、CART)的原理、推到与应用
-
决策树(Decision Tree, DT)是树模型系列的根基模型,后续的随机森林(RF)、提升树(Boosting Tree)、梯度提升树(GBDT)、XGBoost都是在其基础上演化而来。决策树极其演化模型在数据挖掘、数据科学、数据分析、数据运营、金融风控、智能营销等领域得到广泛应用,是机器学习基础模型。
-
基础
- 最优码
- Kraft不等式为前缀码约束条件。在前缀码中,显然不能使用所有的最短的码字,这样的话前缀码的条件就无法满足。就用二叉树来编码(二进制编码)的时候,如果一个节点被作为码字,则它的子树结点都无法作为码字。
- Kraft不等式定理:对于D元字母表上的即时码,码字长度
l
1
,
l
2
,
⋯
,
l
m
l_1,l_2,\cdots,l_m
l1,l2,⋯,lm比满足不等式
∑ i D − l i ≤ 1 \sum_iD^{-l_i}\leq 1 i∑D−li≤1 - 在信息论中,最优码长取 l i ∗ = − log 2 p i l_i^*=-\log_2p_i li∗=−log2pi
- 信息熵:对样本集S中的随机成员进行最优的编码时所需要的比特位数。则S的熵为:
E ( S ) = − ∑ i = 0 n p i log 2 p i E(S)=-\sum_{i=0}^np_i\log_2p_i E(S)=−i=0∑npilog2pi - 信息增益:代表了在一个条件下,信息复杂度减少的程度,为父节点信息熵-子节点加权熵,信息增益越大,划分结构越好
- 基尼系数:表示随机抽样的两个样本不一致的概率(基尼系数越小,分类效果越好;基尼系数解决了信息增益和信息增益比的缺点,实际应用较广)
- 最优码
-
决策树原理
- 决策树的本质:分支语句
- 决策树的种类
时间 模型 任务 树 特征选择 1984 CART 分类 二叉树 基尼系数(Gini) 回归 平方误差(MSE) 1986 ID3 分类 多叉树 信息增益(Information Gain) 1993 C4.5 分类 多叉树 信息增益比(Information Gain Ratio) - ID3决策树原理
- ID3决策树的特征选择标准是信息增益,但偏向与取值较多的特征
特征A对训练集D的信息增益G(D,A),定义为集合D的信息熵H(D)与特征A给定条件下D的条件熵H(D|A)之差,即
G ( D , A ) = H ( D ) − H ( D ∣ A ) G(D,A)=H(D)-H(D|A) G(D,A)=H(D)−H(D∣A)
- ID3决策树的特征选择标准是信息增益,但偏向与取值较多的特征
- C4.5决策树原理
- C4.5决策树的特征选择标准是信息增益比,但偏向于取值较少的特征
特征A对于训练数据集D的信息增益比 G R ( D , A ) G_R(D,A) GR(D,A)定义为其信息增益G(D,A)与训练数据集D关于特征A的值的熵 H A ( D ) H_A(D) HA(D)之比,即
G R ( D , A ) = G ( D , A ) H A ( D ) G_R(D,A)=\frac{G(D,A)}{H_A(D)} GR(D,A)=HA(D)G(D,A)
- C4.5决策树的特征选择标准是信息增益比,但偏向于取值较少的特征
- CART回归树算法流程
输入:训练数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x n , y n ) } D=\{(x_1,y_1),(x_2,y_2),\cdots,(x_n,y_n)\} D={(x1,y1),(x2,y2),⋯,(xn,yn)},其中Y是连续变量
输出:提升树f(x)
在训练数据集所在的输入空间,递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树- 选择最优切分变量j与切分点s,求解
min j , s [ min c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \min_{j,s}{[\min_{c_1}\sum_{x_i\in R_1(j,s)}(y_i-c_1)^2+\min_{c_2}\sum_{x_i\in R_2(j,s)}(y_i-c_2)^2]} j,smin[c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈R2(j,s)∑(yi−c2)2]
遍历变量j,对固定的切分变量j扫描切分点s,选择使达到最小值的对(j,s) - 用选定对(j,s)划分区域并决定相应的输出值:
R 1 ( j , s ) = { x ∣ x j ≤ s } , R 2 ( j , s ) = { x ∣ x j > s } R_1(j,s)=\{x|x^j\leq s\},R_2(j,s)=\{x|x^j\gt s\} R1(j,s)={x∣xj≤s},R2(j,s)={x∣xj>s}
c m 为选定区域的平均值: c m ^ = 1 N m ∑ x i ∈ R m ( j , s ) y i , x ∈ R m , m = 1 , 2 c_m为选定区域的平均值:\hat{c_m}=\frac{1}{N_m}\sum_{x_i\in R_m(j,s)}y_i,x\in R_m,m=1,2 cm为选定区域的平均值:cm^=Nm1xi∈Rm(j,s)∑yi,x∈Rm,m=1,2 - 继续对两个子区域调用步骤1和2,直至满足停止条件
- 将输入空间划分为M个子区域
R
1
,
R
2
,
⋯
,
R
m
R_1,R_2,\cdots,R_m
R1,R2,⋯,Rm,生成决策树
f ( x ) = ∑ m = 1 M ( ^ c m ) I ( x ∈ R m ) f(x)=\sum_{m=1}^M\hat(c_m)I(x\in R_m) f(x)=m=1∑M(^cm)I(x∈Rm)
- 选择最优切分变量j与切分点s,求解
GBDT的原理、推导和应用
- 概述
- 梯度提升决策树是一种基于boosting集成学习思想的加法模型,训练时采用前向分布算法进行贪婪的学习,每次迭代都学习一棵CART树来拟合之前t-1棵树的预测结果与训练样本真实值的残差。
- GBDT模型可解释性强,应用效果好,在数据挖掘、计算广告、推荐系统等领域得到来广泛应用。
- 基础
- 集成学习(Ensemble Learning)
- Bagging:个体学习器间不存在强依赖关系、可同时生成的并行化方法
代表方法:RF随机森林 - Boosting:个体学习器之间存在强依赖关系、必须串行化生成的序列化方法
代表方法:AdaBoost、GBDT、XGBoost
- Bagging:个体学习器间不存在强依赖关系、可同时生成的并行化方法
- 集成学习(Ensemble Learning)
- GBDT原理
- 提升树算法(回归问题)
输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x n , y n ) } , x i ∈ X ∈ R n , y i ∈ Y ∈ R T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_n,y_n)\},x_i\in X \in R^n,y_i\in Y\in R T={(x1,y1),(x2,y2),⋯,(xn,yn)},xi∈X∈Rn,yi∈Y∈R
输出:提升树 f M ( x ) f_M(x) fM(x)- 初始化 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0
- 对m=1,2,…,M
a. 计算残差: r m i = y i − f m − 1 ( x i ) , i = 1 , 2 , ⋯ , N r_{mi}=y_i-f_{m-1}(x_i),i=1,2,\cdots,N rmi=yi−fm−1(xi),i=1,2,⋯,N
b. 拟合残差 r m i r_{mi} rmi学习一个回归树,得到 T m ( x ) T_m(x) Tm(x)
c. 更新 f m ( x ) = f m − 1 ( x ) + T m ( x ) f_m(x)=f_{m-1}(x)+T_m(x) fm(x)=fm−1(x)+Tm(x) - 得到回归问题提升树
f M ( x ) = ∑ m = 1 M T m ( x ) f_M(x)=\sum_{m=1}^MT_m(x) fM(x)=m=1∑MTm(x)
- 梯度提升树算法(GBDT)
- 初始化弱学习器
f 0 ( x ) = arg min c ∑ i = 1 N L ( y i , c ) f_0(x)=\arg \min_c\sum_{i=1}^NL(y_i,c) f0(x)=argcmini=1∑NL(yi,c)
假设去损失函数为平方损失,平方损失函数是一个凸函数,推得初始化时,c取值为所有训练样本标签值的均值。此时得到初始学习器
f 0 ( x ) = c f_0(x)=c f0(x)=c - 迭代训练m=1,2,…,M棵树
a. 对每个样本i=1,2,…,N,计算负梯度,即残差:
r m i = − [ ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{mi}=-[\frac{\partial{L(y_i,f(x_i))}}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)} rmi=−[∂f(xi)∂L(yi,f(xi))]f(x)=fm−1(x)
b. 将a得到的残差作为样本新的真实值,并将数据 ( x i , r i m ) (x_i,r_{im}) (xi,rim),i=1,2,…,N作为下棵树的训练数据,得到一颗新的回归树
c. 对j=1,2,…,J各叶子节点,计算最佳拟合值:
c m j = arg min c ∑ x i ∈ R m j L ( y i , f m − 1 ( x i ) + c ) c_{mj}=\arg \min_c\sum_{x_i\in R_{mj}}L(y_i,f_{m-1}(x_i)+c) cmj=argcminxi∈Rmj∑L(yi,fm−1(xi)+c)
d. 更新强学习器:
f m ( x ) = f m − 1 ( x ) = ∑ j = 1 J c m j I ( x ∈ R m j ) f_m(x)=f_{m-1}(x)=\sum_{j=1}^Jc_{mj}I(x\in R_{mj}) fm(x)=fm−1(x)=j=1∑JcmjI(x∈Rmj) - 最终得到最终学习器GBDT:
f ( x ) ^ = f M ( x ) = f 0 ( x ) + ∑ m = 1 M ∑ j = 1 J c m j I ( x ∈ R m j ) \hat{f(x)}=f_M(x)=f_0(x)+\sum_{m=1}^M\sum_{j=1}^Jc_{mj}I(x\in R_{mj}) f(x)^=fM(x)=f0(x)+m=1∑Mj=1∑JcmjI(x∈Rmj)
- 初始化弱学习器
- 提升树算法(回归问题)
XGBoost的原理、推导、实现和应用
-
XGBoost原理
基本思想和GBDT相同,但XGBoost进行许多优化- 利用二阶泰勒公式展开:优化损失函数,提高计算精确度
- 利用正则项:简化模型,避免过拟合
- 采用Blocks存储结构:可以并行计算等
-
XGBoost目标函数推导:损失函数+正则化项
- 已知训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
⋯
,
(
x
n
,
y
n
)
}
T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_n,y_n)\}
T={(x1,y1),(x2,y2),⋯,(xn,yn)},损失函数
l
(
y
i
,
y
i
^
)
l(y_i,\hat{y_i})
l(yi,yi^),正则化项
Ω
(
f
k
)
\Omega(f_k)
Ω(fk)
则整体目标函数可记为: ζ ( ϕ ) = ∑ i l ( y i , y i ^ ) + ∑ k Ω ( f k ) \zeta(\phi)=\sum_il(y_i,\hat{y_i})+\sum_k\Omega(f_k) ζ(ϕ)=∑il(yi,yi^)+∑kΩ(fk)
预测值 y i ^ \hat{y_i} yi^为: y i ^ = ∑ k = 1 K f k ( x i ) \hat{y_i}=\sum_{k=1}^Kf_k(x_i) yi^=∑k=1Kfk(xi)
第一步:二阶泰勒展开,去除常数项
第二步:正则化项展开,去除常数项
第三步:合并一次项系数、二次项系数
- 已知训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
⋯
,
(
x
n
,
y
n
)
}
T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_n,y_n)\}
T={(x1,y1),(x2,y2),⋯,(xn,yn)},损失函数
l
(
y
i
,
y
i
^
)
l(y_i,\hat{y_i})
l(yi,yi^),正则化项
Ω
(
f
k
)
\Omega(f_k)
Ω(fk)
-
XGBoost和GBDT的比较
相同点 都是基于Boosting思想的集成学习方法 不同点 XBDT采用一阶导优化 XGBoost的目标函数加入正则,而GBDT没有 XGBoost自动处理缺省值,而GBDT不允许缺省值
总结
- 本周深度学习花书的内容只看了线性因子模型以及理解YOLO v1版本;其它时间用于练习sklearn这一机器学习包和回顾决策树和GBDT相关知识用于理解XGBoost,不过对于XGBoost的具体实现等一些细节不够深入了解,应该会再找一些资料查看。
- 下一周继续学习深度学习花书内容和练习sklearn相关代码。