Machine Learning: from Theory to Practice

Author: TSINGHUA Computer Science & Finance Shiying Zhang 2021011056

 

Chapter0 Definition and Terms

 

 

寻找起点s到终点g的最短路(最短耗散值)

引入:宽度优先搜索(BFS)+ Dijkstra算法、深度优先搜索(DFS)

1.1 A* 算法

 f(n)=g(n)+ h(n)g(n): snh(n): ngf(n): sngf(n), g(n), h(n)f(n), g(n)h(n)Condition: h(n) h(n)

image-20230529161546097

1. 伪代码及算法描述

优先扩展f(n)值最小的节点,直到f()(在当前CLOSED表中)最小

Notation: mj:未被扩展的节点 mk:已被扩展的节点(OPEN表中) ml:已被扩展且子节点也被扩展的节点(CLOSED表中) mi:表示所有的子节点

image-20230529162412086

算法:

1OPEN:=(s), CLOSED:=( )2while OPEN  do:3n:=First(OPEN)4if n==goal then return n5Expand(n)mi, Calc f(n, mi)=g(n, mi)+h(mi)6Remove(n, OPEN), Add(n, CLOSED)7switch mi:8Add(mj, OPEN), mjn9if f(n,mk)<f(mk) then10f(mk)=f(n, mk),mkn11  if f(n,ml)<f(ml) then12f(ml)=f(n, ml),mln13Add(ml,OPEN)14   OPENf

举例:

image-20230407175828789

g(n)更新时,A算法的ml类节点要重新放回到OPEN表中,因此可能会多次重复扩展同一个节点,导致搜索效率下降

2. 算法分析

启发函数 h(·)评价方法平均分叉数b*b越小,说明 h(·) 越好 设共拓展了d层节点,搜索了N个节点,则有:N=b(d+1)1b1 实验表明b是一个比较稳定的常数,同一问题基本不随问题规模变化

 

1.2 改进版A*算法

启发函数h(·)的单调性:如果所有节点ninj(其中njni的子节点),满足:

h(ni)h(nj)c(ni,nj)h(g)=0

则称启发函数h(·)是单调的

1. 伪代码及算法描述

Notation: fm:到目前为止已扩展节点(即OPEN表中的节点)的最大f

image-20230407191030869

算法:

1OPEN:=(s), CLOSED:=( ), f(s)=g(s)+h(s), fm=02while OPEN  do:3NEST={ni|f(ni)<fm, niOPEN}4if NEST  ( ) then5n=NEST g6else n=First(OPEN), fm=f(n)7if n==goal then return n8Expand(n)mi, Calc f(n, mi)=g(n, mi)+h(mi)9Remove(n, OPEN), Add(n, CLOSED)10  switch mi:11Add(mj, OPEN), mjn12if f(n,mk)<f(mk) then13f(mk)=f(n, mk),mkn14if f(n,ml)<f(ml) then15f(ml)=f(n, ml),mln16Add(ml,OPEN)17OPENf

举例:(注意,下例不满足启发函数单调性条件)

image-20230407193400544

NEST的选取其实相当于 h(·):=0,此时 h(·) 满足单调性

2. 算法分析

 

1.3 viterbi 算法

如何通俗地讲解 viterbi 算法?

维特比算法(英语:Viterbi algorithm)是一种动态规划算法,它用于寻找最有可能产生观测事件序列的维特比路径——隐含状态序列

其中,动态转移方程如下:

Q(Wi,j)=mink(Q(Wi1,k)+D(Wi1,k,Wi,j))Q(Wi,j)Wi,jD(Wi1,k,Wi,j)Wi1,kWi,j

image-20230407194225663

算法:

1for i in range(0, n)2for j in range(0, k)3Q(Wi,j)=mink(Q(Wi1,k)+D(Wi1,k,Wi,j))3Record(path(Wi1,k)+Wi,j)4find Maxk(Q(Wn,k)+D(Wn,k,Wn+1))
1. 汉字识别后处理
Notations:SOwiiP(S|O)=P(S)P(O|S)P(O)P(S)=i=1nP(wi|w1..wi1)P(O)P(O|S)CFP(S)=i=1nP(wi|wi1)frequencywi1wiwi1P(S)=i=1nP(wi|wi1wi2)frequencywi2wi1wiwi1P(wi|wi1)0P(wi|wi1)λP(wi|wi1)+(1λ)P(wi)  i=1nP(wi|wi1)CF(wi)
2. 拼音输入法

在拼音输入法的例子里,上式有P(O|S)1,即识别信度CF为常数,因此问题转变为:

Max(i=1nP(wi|wi1)) min(i=1nlog(P(wi|wi1)))

 

Chapter2 神经网络

神经网络的理论推导 + PyTorch语法实践

 

2.1 全连接神经网络 MLP / FCN

结构:输入层(input layer)+ 若干隐含层(hidden layer)+ 输出层(output layer)

image-20230530123601813

 

2.2 卷积神经网络 CNN

结构:卷积层 + Relu层 + 池化层 + 全连接层等

举例:

  1. LeNet神经网络(数字识别)

    image-20230530174340120

  2. VGG-16神经网络(彩色图像)

    image-20230530174524409

神经网络遇到的两大问题:① 梯度消失问题,② 过拟合问题

TextCNN:自然语言处理 NLP

1. 词向量
2. 语言模型 & 词向量的训练

用神经网络(NNLM / Neural Network Language Model)实现语言模型

word2vec模型

一种简化的神经网络语言模型 两种实现方式:① 连续词袋模型(CBOW),② 跳词模型(Skip-Gram Model)

CBOW模型的特点: ① 词表的数字是连续的 ② 词袋中不考虑词语的顺序(xw是求和运算,无关乎顺序) ③ 霍夫曼树(Hierarchical Softmax)相当于NNLM中的隐含层 + 输出层

下面详细介绍CBOW模型: Word2vec如何得到词向量-CSDN博客 CBOW模型的训练输入是某一个特征词的上下文相关的词对应的词向量(one-hot),而输出是一棵哈夫曼树。

image-20230530185934252

 

 

2.3 循环神经网络 RNN

RNN采用反馈网络机制,擅长处理序列数据(数据先后有所联系)

结构:全连接神经网络CNN的基础上增加上一时刻隐藏层反馈算法

image-20230530193003354

image-20230530193230433

单向RNN存在的问题:序列前面的内容被后面的内容淹没

 

2.3.1 长短期记忆网络 LSTM

简单RNN存在的问题: ① 长期依赖问题(如:北京一个美丽的(城市)vs 北京一个美丽的(姑娘)) ② 重点选择问题(不同任务词的重要性不同)

image-20230530195517606

 

2.3.2 GRU

相比LSTM,使用GRU能够达到相当的效果,并且相比之下更容易进行训练,能够很大程度上提高训练效率

结构:LSTM的基础上,使用更少的门达到同样的处理效果

 

 

Chapter3 对抗搜索

博弈问题:双人 + 一人一步交替进行 + 双方信息完备 + 零和博弈 场景(极小-极大模型):A和B对抗博弈,一方A以评分(score)大为优,另一方B以评分小为优

3.1 α-β剪枝算法

极大节点[]的下界为α,极小节点()的上界为β

剪枝条件:(注意,这里的“祖先”不只包括“父节点”) 后辈节点的β值≤祖先节点的α值(极小≤极大)时,α剪枝 后辈节点的α值≥祖先节点的β值时(极大≥极小)时,β剪枝

image-20230530201348352

注意:一次剪枝过程只得到一次走步

方法问题:需要大量的专家知识

 

3.2 蒙特卡洛方法 MCM

蒙特卡洛方法(Monte Carlo methods)通过随机抽样、基于大数定律近似计算出问题的解或者评估问题的概率分布。即当样本量足够大时,样本的统计特征会趋近于总体的真实特征。

优势:应用于各种复杂的数值计算和概率统计问题,不需要事先对问题进行严格的数学推导,只需要进行大量的随机抽样和分析

劣势:计算效率通常较低,需要大量的计算资源和时间

接下来介绍蒙特卡洛树搜索 MCTS / Monte Carlo Tree Search

蒙特卡洛树搜索- 维基百科,自由的百科全书

一种简介的理解方式:

步骤:选择(Select) 扩展(Expand) 模拟(Stimulate) 回溯(BackPropagate) 决策(Decide)

function MCTS():while within computational budegt donode  select(root)expand(node)stimulate(node)fathers statistics  back_propagate(node)return decide()

之后介绍课本上的MCTS步骤

蒙特卡洛树搜索通常包括以下三个阶段:

function SEARCH():while within computational budget donextNode  treePolicy(root) reward  defaultPolicy(nextNode)backpropagation(nextNode)return defaultChild()
  1. 选择(Selection):从当前状态开始,根据一定的策略选择一个子节点进行扩展,即上述代码中的treePolicy(·)

    不停的遍历、扩展节点

    • 对于尚未完全被拓展的节点,随机选取未被扩展的子节点进行扩展(expand()
    • 对于完全被扩展的节点,选取最有希望的子节点(bestChild())重复上述步骤

    扩展(Expansion):对选定的子节点进行扩展,生成新的子节点

    function expand(v):choose a  untried actions from vs expandablesadd the new child v to vreturn v
  2. 模拟(Simulation):通过随机模拟的方式,在新生成的子节点上进行多次完整的随机模拟或者游戏对局,即上述代码中的defaultPolicy(·)

    回溯(Backpropagation):根据模拟的结果,更新从根节点到当前节点路径上的统计信息,如胜率、访问次数等即上述代码中的defaultPolicy(·)

    注意:更新的过程每一层都要“转换身份 / 正负号”!

    function defaultPolicy(v):while v is nonterminal dochoose next step v from v randomlyuntil there is a winnerreturn (reward for v)
  3. 决策(Decision):当到了一定的迭代次数或者时间之后结束,选择根节点下最好的子节点作为本次决策的结果,即上述代码中的defaultChild(·)

以上叙述中,“节点”表示某个需要决策的局面,或者当前状态(status)

AlphaGo原理

待补充

 

3.3 深度强化学习方法(围棋)

强化学习:学习“做什么才能使得收益最大化”的方法;学习者不会被告知如何做,必须自己通过尝试发现哪些动作会产生最大的收益 特征:试错和延迟收益(区别于监督学习)

深度强化学习:用深度学习(神经网络)实现的强化学习;关键在于损失函数的定义 三种实现方式:基于策略梯度的强化学习、基于价值评估的强化学习、基于演员-评价方法的强化学习

 

AlphaGo Zero 强化学习

待补充

 

 

Chapter4 统计机器学习

统计机器学习方法:学习算法A根据训练集D,从假设空间H中选择一个最好的gf

image-20230522153203459

三要素:模型、策略、算法 模型:学习什么样的模型(条件概率分布、决策函数) 策略:模型选择的准则(经验风险最小化、结构风险最小化) 算法:模型学习的算法(一般归结为一个最优化问题)

 

4.1 支撑向量机 SVM

SVM:Support Vector Machines,是一个二分类器——特征空间上的间隔最大化线性分类器,通过核技巧可以实现非线性分类

线 T={(x1,y1),...,(xN,yN)},xiX=Rn, yY={+1,1}, i=1,2,...,N, xii yixi+11wTx+ b=0f(x)=sign(wTx+b)线

最优分界面:即间隔最大的超平面,满足

maxw,b(γ^||w||)  s.t.  yi(wTxi+b)γ^, i=1,2,...,Nmaxw,bγ  s.t.  yi(wTxi||w||+b||w||)γ, i=1,2,...,N

image-20230522154959078

由于函数间隔是可缩放的,成比例变化不影响最优化问题,所以可取γ^=1

转化为如下的凸二次规划问题:

minw,b12||w||2 s.t.  yi(wTxi+b)1, i=1,2,...,N
1. SVM与对偶算法

原始问题:minw,b12||w||2s.t.yi(wTxi+b)1,i=1,2,...,N

定义拉格朗日函数:

L(w,b,α)=12||w||2+j=1Nαj[1yi(wTxi+b)]αj0,α=(α1,α2,...,αN)T

拉格朗日函数与原始优化问题的关系:

maxα(L(w,b,α))={12||w||2, ,  minw,b maxα(L(w,b,α))KKT maxαminw,b(L(w,b,α)) minw,bmaxα(L(w,b,α))  maxαminw,b(L(w,b,α))KKT1w,bL(w,b,α)=02αi[1yi(wTxi+b)]=03[1yi(wTxi+b)]04αi05i=1,2,...N

求解对偶问题:对w,b求偏导令其为0并代入(下式为二维的情况)

maxαminw,b: L(w,b,α)=12||w||2+i=1Nαi[1yi(wTxi+b)]maxα(12i=1Nj=1Nαiαjyiyj(xiTxj)+i=1Nαi)s.t. i=1Nαiyi=0α

利用KKT条件,得到:

w=i=1Nαiyixib=yji=1NαiyixiTxj (αj0)

其中,αi0对应的样本xi称为支持向量

例题:

image-20230612195649546

 

2. “线性不可分”支持向量机

某些点线性不可分,意味着这些点不满足函数间隔大于等于1的条件。为此引入松弛变量ξi,使得:

minw,b,ξ (12||w||2+Ci=1Nξi)s.t.yi(wTxi+b)1ξi, i=1,2,...,N, ξi0

称为软间隔最大化。其中C>0惩罚参数,代表目标函数惩罚项的权重。

此时,Lagrange对偶函数为:

maxαminw,b: L(w,b,ξ,α)=12||w||2+Ci=1Nξi+i=1Nαi[1ξiyi(wTxi+b)]i=1Nγiξi, γi0Lξi=Cαiγi=0  γi=Cαimaxα(12i=1Nj=1Nαiαjyiyj(xiTxj)+i=1Nαi)s.t. i=1Nαiyi=0, 0αiC

求解思路同前,但是b的计算从αj0变为0<αj<C:

w=i=1Nαiyixib=yji=1NαiyixiTxj (0<αj<C)

其中,αi>0对应的样本xi称为(软间隔的)支持向量

image-20230601115650717

image-20230601120254270

线性可分时,最大间隔是取函数间隔为1,软划分时,是1ξ

注意:即使是线性可分问题,如果C选取不合适,也有可能存在软支持向量

 

3. 非线性支持向量机

设变换:z=ϕ(x)=((x(1))2,(x(1))2)T,原空间的椭圆:w1(x(1))2+w2(x(1))2+b=0,可以变换为新空间中的直线:w1z(1)+w2z(2)+b=0。这样原空间的非线性可分问题,变为了新空间线性可分问题。

image-20230601121612257

核技巧:通过一个非线性变换将输入空间X(欧式空间或者离散集合)对应于一个特征空间H(希尔伯特空间),使得在输入空间X的超曲面模型对应于特征空间H中的超平面模型(支持向量机)。分类问题的学习就可以通过在H空间中求解线性支持向量机完成。

非线性支持向量机的对偶问题:

maxα(12i=1Nj=1Nαiαjyiyj(ϕ(xi)Tϕ(xj))+i=1Nαi)s.t. i=1Nαiyi=0, 0αiC

核函数:设X是输入空间,H特征空间。如果存在映射函数

ϕ(x): XH

使得对所有x,zX,函数K(x,z)满足:

K(x,z)=ϕ(x),ϕ(z) 

则称K(x,z)核函数ϕ(x)映射函数 注意:映射函数不唯一(甚至映射到的特征空间H的维度也不唯一)

因此,非线性支持向量机的对偶问题化简为:

maxα(12i=1Nj=1Nαiαjyiyj(ϕ(xi)Tϕ(xj))+i=1Nαi)s.t. i=1Nαiyi=0, 0αiC0<αj<CwTx=i=1NαiyiK(xi,x)b=yji=1NαiyiK(xi,xj) w·ϕ(x)+b=i=1Nαiyiϕ(xi)+b=0 wTx=i=1NαiyiK(xi,x) f(x)=sign(i=1Nαiyiϕ(xi)+b)

 

SVM用于求解多分类问题:

  1. 一对多:某类为正例,其余为负例;分类时将未知样本分类为具有最大分类函数值的那类(共构造N个分类器);问题:样本不平衡
  2. 一对一:任意两类构造一个SVM(共构造CN2个分类器),分类时采取投票法决定类别(效果最好,一般为默认情况)
  3. 层次法:所有类先分成两类

 

4.2 决策树

给定训练集:D={(x1,y1),(x2,y2),...(xN,yN)},其中xi=(xi(1),...,xi(n))为输入实例,n特征个数,yi{1,2,...K}为类标记,i=1,2,...NN为样本容量

决策树学习就是从训练集中归纳出一组分类规则,得到一个与训练集矛盾较小的决策树的过程——是一个NPC问题,所以一般采用启发式方法得到一个近似解(损失函数最小作为优化目标)

1. ID3算法

选择一个最大信息增益的特征,如果它足够好(信息增益比较大),那么就按这个特征先分一次类,然后递归建树即可

输入:训练集D,特征集A,阈值ϵ>0

输出:决策树T

  1. D中所有实例属于同一类Ck,则T为单节点树,将Ck作为该节点的类标记,返回T
  2. A为空,则T为单节点树,将D中实例数最大的类Ck作为作为该节点的类标记,返回T
  3. 否则计算A中各特征对D的信息增益,选择信息增益最大的特征Ag
  4. 如果Ag的信息增益小于阈值ϵ,则置T为单节点树,将D中实例数最大的类Ck作为该节点的类标记,返回T
  5. 否则,对Ag的每一可能值ai,依Ag=aiD分割为若干子集Di,作为D的子节点
  6. 对于D的每个子节点Di,若Di为空,则将D中实例最大的类作为标记,构建子节点(比如特征为头发长度,男女分类,没有中发,则该节点返回男女中较多的类别)
  7. 否则,以Di为训练集,以A{Ag}为特征集,递归地调用步1~步6,得到子树Ti,返回Ti

存在的问题:倾向于选择分支比较多的属性

image-20230617135906181

2. C4.5算法

信息增益比gR(D,A)=g(D,A)HA(D),其中HA(D)=k=1n|Dk||D|log|Dk||D|

C4.5增加了对连续值属性的处理,对于连续值属性A,找到一个属性值a0,将a0的划分到左子树,>a0的划分到右子树

存在的问题:倾向于选择分割不均匀的特征 解决办法:先选择n个信息增益大的特征,再从这n个特征中选择信息增益比最大的特征

后来发展到了C5.0

3. 决策树的剪枝

后剪枝(先生成树再剪枝):为了防止出现过拟合,从已经生成的树上裁掉一些子树或者叶节点,将其父节点作为新的叶节点,用其实例数最大的类别作为标记。

4. 随机森林

随机森林是由多个决策树组成的分类器;通过投票机制改善决策树 单个决策树的生成:有放回的数据采样,属性(特征)的采样 集外数据的使用:单个决策树的未用到的数据