这门课什么也没学到。都是老生常谈。
1. 不同行业中机器学习方法应用#
简述不同行业中机器学习方法应用,包括:研究问题,机器学习方法如何应用(注:并非三个AI研究子领域)
我的天这题竟然考了两问,总计30分。乱答了一通。
2. 不同深度神经网络【没考】#
简述不同深度神经网络,包括:名称、主要结构特点
pass
3. 推导线性回归#
假设数据为 {(xi,yi)∈Ra×Rb}i=1n,线性回归模型为 y=WTx+b(输入和输出都是向量,之后省略向量箭头),损失函数为均方误差:
L(W,b)=n1i=1∑n∥yi−(WTxi+b)∥2
给 x 的第一维加上偏置项,定义 x~i=[1xi]∈Ra+1 和 W~=[bTW]∈R(a+1)×b,则损失函数可以重写为:
L(W~)=n1i=1∑n∥yi−W~Tx~i∥2=n1tr((W~TX~−Y)T(W~TX~−Y))=n1∥W~TX~−Y∥F2每项平方的和
求导过程在《图象分析与理解复习》 中已经写过,这里是对系数矩阵求导。目标是凑成
dL=tr((∂W~∂L)TdW~)
如果 f 是行向量,则凑 df=[(∂x∂L)Tdx]T
如果 f 是标量,则凑 df=(∂x∂L)Tdx
首先求微分
dL=n1tr(d(ATA))=n1tr(dATA+ATdA)
因为 tr(dATA)=tr(ATdA),所以
dL=n2tr(ATdA)
而
dA=dW~T⋅X~
代入
dL=n2tr(AT⋅dW~TX~)=n2tr(X~ATdW~T)循环移位=n2tr((X~AT)TdW~)迹的性质
得到导数
∂W~∂L=n2X~AT=n2X~(W~TX~−Y)T:=0⇒W~=(X~X~T)−1X~YT
如果是非线性呢?可以加上高次项,比如标量自变量 x 变为向量 [x,x2,x3...]T。
老师的 PPT 上是这样:
X=11⋮1x1(1)x1(2)⋮x1(m)x2(1)x2(2)⋮x2(m)……⋱…xn(1)xn(2)⋮xn(m),y=y(1)y(2)⋮y(m),θ=θ0θ1θ2⋮θnJ(θ)=∥Xθ−y∥22=(Xθ−y)T(Xθ−y)
这里就都是向量了,不需要套trace,可以直接用运算律:
∂θ∂J:⇒θ=XT(Xθ−y)+(Xθ−y)TX=2(Xθ−y)TX都是标量,直接转置相加=0=(XTX)−1XTy
3.5. 逻辑回归#
也就是做分类,yi∈{0,1}。用 sigmoid 函数将线性输出转为概率(此处的 x 和 θ 已经包含了偏置,懒得打波浪号了):
p(y=1∣x;θ)=σ(θTx)=1+e−θTx1p(y=0∣x;θ)=1−p(y=1∣x;θ)
目标是最大化似然函数:
θ=θargmaxi=1∏np(yi∣xi;θ)=θargmaxi=1∑nlogp(yi∣xi;θ)=θargmaxi=1∑n[yilogσ(θTxi)+(1−yi)log(1−σ(θTxi))]
最后一步利用了 y 的二值特性,最后就是交叉熵损失函数了。下面求导:
∂θ∂L=i=1∑n[yiσ(θTxi)1σ′(θTxi)xi+(1−yi)1−σ(θTxi)1(−σ′(θTxi))xi]=i=1∑n[yi(1−σ(θTxi))xi−(1−yi)σ(θTxi)xi]=i=1∑n(yi−σ(θTxi))xi
逻辑回归没有解析解,只能用数值方法求解,比如梯度下降;不过这里要最大化似然函数,所以是梯度上升:
θ:=θ+αXT(Y−σ(Xθ))
4. 贝叶斯网络计算#
上学期复习“人工智能导论”时总结过贝叶斯网络:条件随机场CRF 通俗速通 直观理解;下面给一些重点。
条件概率链式法则:
P(X1,X2,...,Xn)=P(Xn∣X1,X2,...,Xn−1)P(X1,X2,...,Xn−1)
条件贝叶斯公式,即贝叶斯公式全部加一个条件:
后验P(Y∣X,e)=边际(在e下)P(X∣e)P(X∣Y,e)似然(在e下)⋅P(Y∣e)先验(在e下)
没啥好说的,最笨的方法就是直接算。如果联合概率不包括所有节点,就加上并积掉。这个过程最麻烦的是算分母的归一化因子,因为还得把 Y 积掉。
5. 决策树计算特征选取【没考】#
大二下的《模式识别》课学过。首先重温一下算法原理——信息增益。
假设二分类,训练过程中,某个分支下,有a个正例,b个反例,一共 S=a+b 个,此时信息熵为
H0=−c=0∑2pc⋅log(pc)=−Salog(Sa)−Sblog(Sb)
这里是一坨数据中正例和反例混在一起的熵。下面进行一次分类,选中某个分类指标,假设是布尔量(直接硬分类),则将 S 个数据分为两垛:T垛有c个正例和d个反例,F垛有e个正例和f个反例。显然,
c+e=ad+f=bc+e+d+f=S
这两垛的信息熵分别为:
HTHF=−c+dclogc+dc−c+ddlogc+dd=−e+feloge+fe−e+ffloge+ff
然后,书上定义此时整个节点的信息熵为两垛期望值,而信息增益就是求差:
H1ΔH=E[Hsub]=Sc+dHT+Se+fHF=−Sclogc+dc−Sdlogc+dd−Seloge+fe−Sfloge+ff=H0−H1
困惑!H1 的计算和熵的定义完全不一样的:熵为子分支熵的期望?展开后也不是"plogp"的样子,为什么可以叫做熵?如何理解?(作为一个本科信息工程的学生表示非常不舒服!H1 根本不是熵!)
其实这里应该从“信息增益的期望”开始,而不是先求“熵的期望”再算信息增益。考虑如下情况:
假设我们就用这个属性为分类指标。在某一次推理中,样本的这个指标为真,所以我们进入了T分支,此时我们面对的信息复杂度就是 HT,相比进入分支前,减少了这么多信息熵:
ΔHT=H0−HT
而我们进入这个分支的概率是 Sc+d (理想情况下训练集很大,根据大数定律,训练集的分布足以代表实际数据的分布,所以可以用训练集的频率代替概率)。如果进入的是F分支,也同理。
此时算信息增益的期望就合理多了——衡量信息增益的平均水平:
ΔH=E[ΔHsub]=Sc+d(H0−HT)+Se+f(H0−HF)=H0−(Sc+dHT+Se+fHF)=H0−E[Hsub]
舒坦!
注意,信息增益选择属性只是一种启发式算法,并不意味着得到的是最优的决策树;直接遍历所有可能的决策树、以错误率选择才是最优的。对于层数较少的情况,可以用这个方式;但对于层数较多的情况,直接遍历所有可能的决策树是 NP-hard 的,所以只能用启发式算法来选择属性了。
6. Adaboost 算法#
根据数据和数据的权重,训练一个弱分类器,根据其“错误率”计算分类器权重,更新样本权重(被正确分类的样本权重降低,被错误分类的样本权重提高),重复上述过程;最终的强分类器是弱分类器的加权组合。
0. 初始化样本权重#
每个样本的权重初始化为 n1(一视同仁),其中 n 是样本总数。
1. 训练弱分类器#
一般用一层的决策树(决策树桩)作为弱分类器。由于只有一层,遍历所有可能的属性、选择误差最小的。训练时考虑样本权重,即在计算误差时加权。
2. 计算分类器权重#
错误率 ϵ 是被分错类别的样本的权重之和,分类器权重为 α=21ln(ϵ1−ϵ)
观察此函数:
- 在 (0,1) 内递减,从 +∞ 递减到 −∞;
- 在 ϵ=0.5 时,α=0
如果 ϵ>0.5,可以把预测结果反过来,错误率变为 1−ϵ,使得 α>0。
为什么是这个公式呢?
原始目标是对每个分类器最小化下述损失函数:
L=i=1∑nwie−yiαh(xi)=eαi=1∑nwie−yih(xi)
其中 wi 是样本权重,yi 是样本的真实标签(±1),h(xi) 是弱分类器的预测结果(±1)。
可以将损失函数重写为:
L=e−αi=1∑nwiI(h(xi)=yi)+eαi=1∑nwiI(h(xi)=yi)
为了最小化损失函数,对 α 求导并设置为0:
∂α∂L⇒e2α⇒α=−e−αi=1∑nwiI(h(xi)=yi)+eαi=1∑nwiI(h(xi)=yi)=0=∑i=1nwiI(h(xi)=yi)∑i=1nwiI(h(xi)=yi)=1−ϵϵ=21ln(ϵ1−ϵ)
加权错误率 ϵ=∑i=1nwi∑i=1nwiI(h(xi)=yi)=∑i=1nwiI(h(xi)=yi),利用了权重的归一化性质。
3. 更新样本权重#
正确分类的样本权重乘以 e−α,错误分类的样本权重乘以 eα,然后归一化(权重求和为1)。
重复上述过程,直到达到预设的弱分类器数量或错误率满足要求。
4. 最终强分类器#
最终的强分类器是弱分类器的加权组合:
H(x)=sign(t=1∑Tαtht(x))
由于是分类问题,因此分类器权重不需要归一化。
7. 基本线性代数、矩阵、概率计算方法#
求特征值:
对非零向量 x 和标量 λ:
Ax=λx⇒(A−λI)x=0
由于 x 非零,因此 A−λI 的行列式为0:
det(A−λI)=0
解这个方程就可以得到特征值 λ,再代入就可以求出对应的特征向量 x。
求行列式:代数余子式展开 或 特征值乘积。后者用变换法可以避免求出每个特征值、直接得到乘积。
行变换相当于左乘,一般会改变特征值,行列式有规律:
- 交换两行:特征值乘以 −1;
- 将一行乘以 k:特征值乘以 k;
- 将一行加到另一行:特征值不变。
行变换后得到一个上三角矩阵,此时矩阵的特征值就是对角线,虽然和之前不一样,但是乘积不变。