ML/DL大全(有图版)-LMLPHP

PS:是我所了解的大全


目录
ML相关:
KNN、朴素贝叶斯、决策树、集成算法、SVM、kmeans、DBSCAN、协同过滤算法、Apriori算法、FP-growth算法、PCA、SVD

DL相关:
线性回归、逻辑回归、正则化、dropout、norm、BN、激活函数、梯度下降法、optimizer
CNN、YOLO、siamese
自编码、迁移学习、神经风格迁移、Gan
RNN、GRU、LSTM、BRNN
seq2seq模型、beam search、attention模型、BP、Word2Vec模型、skip-gram模型

流程和模块

了解和其他



ML相关

KNN k近邻算法

目标点到其他点的距离取最近的k个投票表决

例子:打斗片和爱情片根据xy镜头数取最近k个.他们属于什么片来判断

KNN和kmeans差不多,都是利用近邻信息来标注类别,kNN是监督学习的分类算法,k-means是非监督学习的分类算法

朴素贝叶斯

P(A|B)=P(B|A)P(A)/P(B)

朴素的意思就是AB事件独立,他的典型应用就是垃圾邮件过滤的问题

给出待分类项,求解此项各个类别的概率,哪个最大就预测是哪个,但必须属于同一分布
ML/DL大全(有图版)-LMLPHP

决策树

理解起来简单,就是if-then结构,然后构建时一层层递归构建,先计算信息熵(sum(plogp)分配到对应类别的概率)和信息增益(当前熵和群组平均熵的差值),然后通过信息增益来选择拆分

首先求出整个群组的熵,然后对群组拆分,并求出两个新群组的熵
为了确定什么属性最适合用来拆分,算法会计算相应的信息增益

信息增益,就是指当前熵与两个新群组加权平均熵之间的差值

加权平均;(w1x1+w2x2+…+wnxn)/(w1+w2+…+wn)

缺点就是过度匹配,每个都要归类
ML/DL大全(有图版)-LMLPHP

集成算法:

组合bagging(并行化):随机森林RF(投票)
提升boosting(序列化):AdaBoost算法(多个弱分类器串行,错误加权,可以达到整体分类最佳)、梯度提升决策树GBDT(通过负梯度来识别问题,通过计算负梯度来改进模型)、xgboost(采用了二阶泰勒展开使算法可以更快的收敛到全局最优)

·

SVM支持向量机

——————————————————————————————

思想:

SVM的主要思想可以概括为两点:
1、它是针对线性可分情况进行分析,对于线性不可分的情况,通过使用非线性映射算法将低维输入空间线性不可分的样本转化为高维特征空间使其线性可分,从而使得高维特征空间采用线性算法对样本的非线性特征进行线性分析成为可能。
2、它基于结构风险最小化理论之上在特征空间中构建最优超平面,使得学习器得到全局最优化,并且在整个样本空间的期望以某个概率满足一定上界。
ML/DL大全(有图版)-LMLPHP
SVM学习问题可以表示为凸优化问题,因此可以利用已知的有效算法发现目标函数的全局最小值。
SVM通过最大化决策边界的边缘来控制模型的能力。尽管如此,用户必须提供其他参数,如使用核函数类型和引入松弛变量等。
SVM一般只能用在二类问题,对于多类问题效果不好
优点是泛化能力强

SVM是常见的一种判别方法。在机器学习领域,是一个有监督的学习模型,通常用来进行模式识别、分类以及回归分析

SVM应用:SVM有助于文本和超文本分类,因为它们的应用程序可以显著减少对标准感应和转换设置中标记的训练实例的需求。
使用SVM也可以识别手写字符,做图像分类,还广泛应用于生物科学和其他科学领域,比如蛋白质分类等

内容:

(表示太高深,我学的还是挺浅)

SVM的学习策略是最大间隔法,就是二次规划问题,求目标函数的最优解
再通过二次规划对偶问题求极值(最优值)
在线性可分的情况下求超平面:用SMO算法,不断的将原二次规划问题分解为只有两个变量的二次规划子问题,并对子问题解析求解,直到找到最优解
对于非线性问题,可以通过非线性变换转换为高维特征空间的线性分类问题,再用SMO算法求解,只是在对偶问题中,用映射核函数K(x,z)来替代內积

拉格朗日乘子法和KKT:

在机器学习中,模型的优化目标通常是最小化损失函数的值,即loss最小。从数学角度看,这类优化问题又可以分为以下三种情况:

无约束优化问题:min L(x)
求取f(x)的导数,然后令其为零,就能得到最优解

等式约束优化问题:min L(x);s.t. h_i(x) = 0,i =1,…,n
用拉格朗日乘子法,即把等式约束h_i(x)用一个系数与f(x)写为一个式子,称为拉格朗日函数,而系数称为拉格朗日乘子。通过拉格朗日函数对各个变量求导,令其为零,可以求得候选值集合,然后验证求得最优值。

不等式约束优化问题:min L(x);s.t. g_i(x) <= 0,h_i(x) = 0,i =1,…,n

·

带等式约束,就要用拉格朗日乘子法(L=目标+系数*对0的约束)

比如 min f=2x1+3x2+7x3
s.t. 2x1+x2=1,2x2+3x3=2
乘子法转化为min f=2x1+3x2+7x3+a1(2x1+x2-1)+a2(2x2+3x3-2)
对x1,x2,x3求偏导,得到方程组,解出a1,a2,然后得到x1,x2,x3,就得到最优解

带不等式约束,除了用乘子法还要用KKT条件
先乘子法条件L=f(x)+a * g(x) + b * h(x)
KKT三个条件:L(a,b,x)对x一阶导数为0,等式约束h(x)=0,不等式约束a*g(x)=0,求取这三个等式之后就能得到候选最优值
其中第三个式子,因为g(x)<=0(约束例子),如果要满足这个等式,必须a=0或者g(x)=0. 这是SVM的很多重要性质的来源,如支持向量的概念。

L对x的一阶导数为0 = = > L对x1,x2偏导为0
h(x) = 0
α·g(x) = 0,α ≥0 = = > a1 * g1(x)=0 a2 * g2(x)=0
然后得出可能结果,代入约束不等式查看,选出答案
(一个不等式有两种情况,a或g(x)=0,两个不等式四种情况:α1.α2=0,α1.g2=0,α2.g1=0,g1.g2=0)

`

返回SVM:

一般分类问题为y=wx+b,SVM也可以用 y=wx+b 表示
但更为合理准确的划分法应该是分割线恰好介于两类最近样本的正中间,这样划分的模型泛化能力最好
如上图,粉线与红线和蓝线与红线之间的垂直间隔距离相等,即为最优划分。而处于两条边界线上“支撑”这个最优划分的样本,就是上文所说的“支持向量”

点到直线的距离公式d=(Ax0+By0+C)/sqrt(A+B)
在SVM中,可以写成r=wTx+b/||w||
一般情况下SVM中的正负样本标签我们置为1和-1。要最大化上图这个距离,相当于最小化权重向量w的L2范数
间隔依赖于分离超平面的法向量w,为2/||w||
ML/DL大全(有图版)-LMLPHP
得到问题:min ||w||/2
s.t. yi(wTxi+b)>=1 , i=1…n

SVM模型公式:min wTw/2 , s.t. yi(wTxi+b)>=1 , i=1,n
拉格朗日一下L(w,b,a)=wTw/2-a1[y1(wx1+b)-1]-a2[y2(wx2+b)-1]-…an[yn(wxn+b)-1]=wTw/2-sum(aiyi(wxi+b))+sum(ai)

拉格朗日公式对于w.b的梯度为0可得:w=sum(aiyixi),sum(aiyi)=0
w.b代入回式子得:W(a)=L(w,b,a)=(sum(aiyixi)sum(ajyjxj))/2-sum(aiyiajyjxixj)+sum(ai)=-sum(aiyiajyjxixj)/2+sum(ai)

根据拉格朗日对偶问题的定义,到了这一步就应该求W关于α的最大值问题了。这个问题可以这样直观理解,因为KKT条件中h(x)是非正函数,而α ≥ 0,如果W要求的这个极值是最小值,那么无穷大的α会使W的值变得无穷小
max W(a) , s.t. ai>=0 , sum(aiyi)=0

对偶问题:

而KKT条件是满足强对偶条件的优化问题的必要条件,可以这样理解:我们要求min f(x), L(a, b, x) = f(x) + a * g(x) + b * h(x),a>=0,我们可以把f(x)写为:max_{a,b} L(a,b,x),为什么呢?因为h(x)=0, g(x)<=0,现在是取L(a,b,x)的最大值,a * g(x)是<=0,所以L(a,b,x)只有在a * g(x) = 0的情况下才能取得最大值,否则,就不满足约束条件,因此max_{a,b} L(a,b,x)在满足约束条件的情况下就是f(x),因此我们的目标函数可以写为 min_x max_{a,b} L(a,b,x)。如果用对偶表达式: max_{a,b} min_x L(a,b,x),由于我们的优化是满足强对偶的(强对偶就是说对偶式子的最优值是等于原问题的最优值的),所以在取得最优值x0的条件下,它满足 f(x0) = max_{a,b} min_x L(a,b,x) = min_x max_{a,b} L(a,b,x) =f(x0),我们来看看中间两个式子发生了什么事情:

f(x0) = max_{a,b} min_x L(a,b,x) = max_{a,b} min_x f(x) + a * g(x) + b * h(x) = max_{a,b} f(x0)+a * g(x0)+b * h(x0) = f(x0)

可以看到上述加黑的地方本质上是说 min_x f(x) + a * g(x) + b * h(x) 在x0取得了最小值,用fermat定理,即是说对于函数 f(x) + a * g(x) + b * h(x),求取导数要等于零,即

f(x)的梯度+a * g(x)的梯度+ b * h(x)的梯度 = 0

这就是kkt条件中第一个条件:L(a, b, x)对x求导为零。

而之前说明过,a * g(x) = 0,这时kkt条件的第3个条件,当然已知的条件h(x)=0必须被满足,所有上述说明,满足强对偶条件的优化问题的最优值都必须满足KKT条件,即上述说明的三个条件。可以把KKT条件视为是拉格朗日乘子法的泛化。

SMO算法:

SMO算法是SVM学习的一种快速算法,不断的将原二次规划问题分解为只有两个变量的二次规划子问题,并对子问题进行解析求解,直到所有变量满足KKT条件为止
这样通过启发式的方法得到的原二次规划问题的最优解,因为子问题有解析解,所以每次计算子问题都很快,虽然计算子问题次数很多,但在总体上还是高效的

核方法:

核方法是通过一个非线性映射K,把样本空间映射到一个高维乃至无穷维的特征空间中(Hilbert空间),使得在原来的样本空间中非线性可分的问题转化为在特征空间中的线性可分的问题
这样,分类问题就简化为寻找一个将空间一分为二的超平面,或是能够将数据点很好的划分到不同空间(类别)的多个超平面
ML/DL大全(有图版)-LMLPHP
ML/DL大全(有图版)-LMLPHP
一般的升维都会带来计算的复杂化,核方法巧妙地解决了这个难题:应用核函数的展开定理,就不需要知道非线性映射的显式表达式;由于是在高维特征空间中建立线性学习机,所以与线性模型相比,不但几乎不增加计算的复杂性,而且在某种程度上避免了“维数灾难”.这一切要归功于核函数的展开和计算理论.
选择不同的核函数,可以生成不同的SVM,常用核函数有以下几种:
⑴线性核函数K(x,y)=x y+c;
⑵多项式核函数K(x,y)=[ax y+c];
⑶高斯核函数.径向基函数K(x,y)=exp(-||x-y||/2 σ)

SVM是目前学过的最难的算法,我写的不全,可以参考很多其他的讲解
乘子法、KKT、对偶性
核函数
软间隔
SMO算法
SVM公式推导
SVM讲解

——————————————————————————————

·

非监督算法:

kmeans聚类(自己指定聚类数k个)

随机选定k个中心位置,然后将各个数据点分配给最临近的中心点,分配完成后,聚类中心就移到所有节点的平均位置,然后重新分配直到不再产生变化
ML/DL大全(有图版)-LMLPHP

DBSCAN基于密度的聚类

eps领域包括minpts个点,以此为依据来分类,随机选点出来分类簇,如果密度不够(点少于minpts)就换个点找,知道所有点都被归类

他比kmeans好用,kmeans是自己用随机给的中心点更新分类,这个是从现有的点去汇聚,但如果数据集密度不均匀的话就搞不成

推荐算法:协同过滤算法

思想:人以类聚,物以群分

找用户的朋友,根据他的喜好做推荐

有两种推荐方式:基于用户、基于商品

几种距离计算:欧氏距离(直接距离)、皮尔逊相关度(相关性)、余弦距离(两个向量夹角余弦,关注点是否同样喜好.只是程度(长度)不同)、杰卡德距离(交并比,相似度)

Apriori算法

属于数据挖掘关联性分析算法

寻找物品间的关系,通过频繁项集、支持度、可信度来评估,不断地剪枝不频繁项,求最终项集,缺点就是对大数据处理慢

频繁项集:经常出现的一组数据
支持度:数据集中包含一个项集所占总体的比例
可信度:用支持度做计算,Ka_b=Zab/Za

一个项集是频繁的,它的子集也是频繁的,反之亦然

例子:几个朋友一起去吃饭、顾客去超市买东西的搭配

FP-growth算法

Apriori算法的优化版,通过构建FP树计算,效率提升

主成分分析PCA(特征值分解)

属于数据降维算法
通过计算特征值和特征向量,构建特征矩阵,求协方差,取协方差大的(占比大的)那些特征向量重新构建矩阵
ML/DL大全(有图版)-LMLPHP

SVD奇异值分解

mn=mk * kk * kn
可以降维.减少参数,第一个为酋矩阵(它和共轭矩阵相乘为单位矩阵),第二个为对角矩阵
特征值分解和奇异值分解的目的都是提取出一个矩阵最重要的特征,用来降维

`


DL相关

线性回归

最小二乘法,y=ax+b,两个系数,多个未知数y=a1x1+a2x2+b

损失函数L=sum((y^ -y))/2
ML/DL大全(有图版)-LMLPHP

逻辑回归LR(logistic regression)

它通过正反传播计算参数,然后梯度下降求最优解
ML/DL大全(有图版)-LMLPHP
正向传播:z=wx+b,a=simg(z),下一层z2=wa+b,a2=sigm(z2)…
反向传播:dz=A-Y,dw=X * dz/m,db=dz/m
(dz=dL/dz=(dL/da) * (da/dz)=(dL/da) * (a(1-a))=A-Y)
每执行一次梯度下降更新一次wb,然后重新计算costJ
梯度下降更新wb:w -=学习率 * dw,b-=学习率 * db
L=-(ylogy^ +(1-y)log(1-y^))
cost=-sum(L)/m

一般可以把所有wbx矩阵化合为一个WBX,可以减少一次for循环

容易发生:梯度消失和爆炸、过拟合和欠拟合
需要各种调优(归一、正则、优化算法等)
ML/DL大全(有图版)-LMLPHP
防止过拟合(减少方差)的方法:正则化、dropout、early-stopping减小模型复杂度、数据扩充
一般使用L2或dropout

激活函数:

sigmoid(1/1+e,一般用在简单二分类输出层)
tanh(e-e/e+e,一般用在隐藏单元,tanh的输出为(-1,1),因此它将数据集中在一起,使得下一层的学习变得更加简单,一般用在RNN)
relu(x>0:x,常用在模型训练层)
带泄露leaky ReLU(x<0:0.01x)
softmax(z/sum(z),一般用于CNN输出层)

如果用sigmoid就是二分分类问题,如果用softmax就是多分类,如果用tanh的话常常是RNN,CNN常用relu(非负时梯度恒为1,收敛维持稳定,如果用leaky带泄露的,就是负数时梯度不为0,可以防止梯度消失)

正则化

L0(L0范数:非零参数的个数,可以实现稀疏,但不好求一般用L1)
L1(也称lasso回归,L1范数:绝对值的sum。L1得到稀疏解,比L2得到的解更加稀疏。它的效果就是使网络中的权重尽可能趋向于0,去掉一部分特征也就相当于减小了网络复杂度,防止过拟合)
L2(也称Ridge岭回归,权重衰减,实际上就是把反向传播的dw乘以了(1-aλ/m)倍的权重,会平衡过拟合欠拟合问题,L2范数:平方相加再开方。也是减小w)

dropout随机失活

随机舍弃神经元,用来防止过拟合,在训练时常用。用a除以keepprob,不改变z的期望值在z式中再乘一个keepprob

norm规范化(归一化)

将数据按比例缩放,使之落入一个小的特定区间,更易优化,梯度下降更易找到最低点。减平均值除标准差,图片的归一化就是/255
ML/DL大全(有图版)-LMLPHP

BN批标准化

使分布稳定有利于网络的训练,均值都为0,方差为1,有一定正则作用,可以代替正则项使用,可以优化梯度消失和爆炸
ML/DL大全(有图版)-LMLPHP

——————————————————————

BGD梯度下降

feed所有样本,计算整个训练集的梯度,一次成形,无法优化

SGD随机梯度下降

feed一个随机样本,更新频率快,可以跳出局部最优,但很动荡

MSGD小批量梯度下降

分为mini-batch组,每次feed一组,epoch批次for循环训练,比较稳定,常用

···

很多年以前,摄影离大众非常遥远。
十年前,傻瓜相机开始风靡,几乎人手一个。
智能手机出现以后,摄影更是走进千家万户,手机随手一拍就是一张靓照。
但是专业摄影师还是喜欢用单反,孜孜不倦地调光圈、快门、ISO、白平衡……一堆自拍党从不care的名词。
技术的进步,使得傻瓜式操作就可以得到不错的效果,但是在特定的场景下,要拍出最好的效果,依然需要深入地理解光线、理解结构、理解器材。
优化算法大抵也如此

优化算法optimizer

指数加权平均

比如取β=0.9(指数加权平均数)的上个结果+0.1的今天的结果所得到的非线性图像,一般β=0.98,然后结果/(1-β)做偏差修正,可以修正误差,变得稳定。

t时刻的下降方向,不仅由当前点的梯度方向决定,而且由此前累积的下降方向决定,就比如转弯,急转弯是要出事的。SGDM 动量的SGD使用此算法

momentum动量梯度下降

Vdw=βVdw+(1-β)dw,一般不看(1-β),就等同于Vdw=dw/(1-β),一般β=0.9,在更新w.b时减去Vdw*学习率,使梯度下降就像碗中球一样越滚越快(我们希望学习时横向速度变快)

可以使得梯度方向不变的维度上速度变快,梯度方向有所改变的维度上的更新速度变慢,这样就可以加快收敛并减小震荡。
ML/DL大全(有图版)-LMLPHP

RMSprop均方根误差

S=βS+(1-β)dw,一般不看(1-β),S=S/(1-β),更新时w-=a*dw/((根号S)+ε))

原理是纵轴上b的斜率大,求得的S就大,致使b更新的摆动变小,而w则相反,更新速度变快

使用的是指数加权平均,旨在消除梯度下降中的摆动,与Momentum的效果一样

为了防止S在某时值很小,对w.b的更新影响太大,我们会在分母上加一个挺小的数ε来适当防止数值不稳定,ε常常为10^-8

RMSProp是一种有效且实用的深度神经网络优化算法,目前它是神经网络经常采用的优化方法之一
ML/DL大全(有图版)-LMLPHP

Adam

momentum+RMSprop,更加稳定

最有效的算法之一,快速收敛,一阶动量+二阶RMSprop,两个参数β1和β2,更新时w-=a * V/((根号S)+ε),他的缺点在于可能错过全局最优解
ML/DL大全(有图版)-LMLPHP

——————————————————————

网络

CNN

包括三层
conv(维度控制out=(in+2*pad-filter)/step+1)
pool(平均池化和最大池化,会减少输入的宽高,减少参数计算量并且也使特征检测器对其在输入中的位置更加稳定)
fc全连接层,输出层是softmax
特点是参数共享和稀疏连接,好处就是参数少.适用于整个样本输入的计算(还能转置filter.垂直检测变水平),稀疏连接.各个像素间不影响(只依赖于filter对应的输入单元)

LeNet、ALexNet、VggNet、GoogleNet、ResNet

这些是CNN的发展史,lenet不用说,表现突出的是alexnet,虽然特征量大,但他引入了dropout方法.还有imagenet大数据和GPU的支持,然后就让CNN火起来了,然后在其基础上进行改进,google是强化了网络,改进了卷及方法,vgg是深化了网络,可以达到准确率的瓶颈,resnet残差网络呢,就是更深,因为更深梯度消失现象越明显所以引入了一个远程跳接这个概念,这可以防止梯度消失,但感觉这变成了假的网络加深,实际上网络很浅
计算残差(ResNet)块的公式:
a[l+2]=g(z[l+2]+a[l])=g(w[l+2] * a[l+1]+b[l+2]+a[l])=…
a[l+1]=g(w[l+1]*a[l]+b[l+1])
ML/DL大全(有图版)-LMLPHP

检测算法

YOLO目标检测

用多个锚框anchor-box检测对象,再用交并比loU做阈值控制,非极大值抑制,一个对象只取其中最大loU值的那个anchor-box输出,一般YOLO卷积输出的目标向量维度为n * n(网格) * (anchorbox对象检测数)*(向量维度=目标对象数+对象id+边界框参数)
ML/DL大全(有图版)-LMLPHP
ML/DL大全(有图版)-LMLPHP
结果y=(Pc,bx,by,bh,bw,c)分别为概率.(x,y)坐标.height.weight.目标,有n个anchor-box结果y的维度就乘以n
ML/DL大全(有图版)-LMLPHP

siamese孪生卷积网络

人脸识别二分类网络。解决了一次学习(one-shot)的问题,它提供了一个similarity函数d=两张图片的差值,如果差异值大于某个阈值,就预测不是同一个人,当发现是新人的话,加入数据库,也不会对原来的数据.操作产生影响。
ML/DL大全(有图版)-LMLPHP
ML/DL大全(有图版)-LMLPHP
通过计算两个编码和阈值之间的误差,可以确定这两幅图是否代表同一个人,所以训练集采用三元组APN,损失函数L=max(||AP||-||AN||+α,0)
它会试图将同一个人的两个图像(AP)的编码拉近,同时将两个不同的人的图像(AN)进一步分离
ML/DL大全(有图版)-LMLPHP

·————————

自编码网络

无监督,数据无标记,压缩和解压,一般用于去噪。和主成分分析PCA有些类似,要找到可以代表源数据的主要成分。如果激活函数不使用sigmoid等非线性函数,而使用线性函数,就是PCA模型
ML/DL大全(有图版)-LMLPHP

迁移学习

在做同一种类的网络时,可以用一种样本进行预训练(网络的权重),然后在目标上训练.微调

神经风格迁移

Ctyle+Sontent=Generated-img,流程和一般网络是一样的,就是构建了三个损失函数
代价函数J(G)=aJ(C,G)+bJ(S,G)(内容和风格代价函数),使用梯度下降求最优
内容代价:通过aC和aG的激活值求差平方
风格代价:一个风格S矩阵一个G矩阵求差平方归一后得到风格代价函数
ML/DL大全(有图版)-LMLPHP
ML/DL大全(有图版)-LMLPHP

Gan生成对抗式网络

通过生成网络G和判别网络D不断博弈,道高一尺魔高一丈,使生成越来越逼真,一般用于文学艺术领域:图片.音乐生成等
ML/DL大全(有图版)-LMLPHP
ML/DL大全(有图版)-LMLPHP
ML/DL大全(有图版)-LMLPHP
ML/DL大全(有图版)-LMLPHP
ML/DL大全(有图版)-LMLPHP
ML/DL大全(有图版)-LMLPHP

————————

RNN

循环神经网络,分为一对一(图像分类)一对多(音符-音乐、图片描述)多对一(情感分析.电影评价)多对多(机器翻译MT、视频分类)四种,RNN需要显式for循环(遍历时间步T_x)
ML/DL大全(有图版)-LMLPHP
循环网络的激活函数一般用tanh
forward:
a=g(Wa[a,x]+ba)
y^=g(Wy * a+by)
编程框架大多都会自动处理反向传播
L使用交叉熵损失函数L ( y^ , y ) = - y log y - ( 1-y ) log ( 1-y )
L(y^ ,y)=∑L

RNN的一个大问题就是梯度消失的问题,梯度爆炸可以用梯度修剪来解决,但梯度消失难搞,所以我们用到GRU,然后到LSTM
ML/DL大全(有图版)-LMLPHP
ML/DL大全(有图版)-LMLPHP
ML/DL大全(有图版)-LMLPHP

GRU门控单元

重置门r和更新门z,LSTM的前身,门用来决定留下多少以前的记忆。如果把重置门都设为1,更新门都设为0,就得到一个普通的RNN
ML/DL大全(有图版)-LMLPHP
GRU里有一个参数C代表记忆细胞,C=a
通过一个更新门函数将上个ct-1和xt代入sigmoid中计算,再合并c~t、ct-1、更新门做一个函数得出ct

优点是:通过门实现,代表后面的更不更新,通过sigmoid计算使其趋近与0或1,避免了梯度消失,是个二分问题:更新或不更新
ML/DL大全(有图版)-LMLPHP

LSTM长短期记忆

它有三个门:更新门u.遗忘门f(选择性遗忘).输出门o,和一个更新单元c
可以根据前面单词的预测后面的
ML/DL大全(有图版)-LMLPHP
LSTM相较于GRU不同的地方在于:
计算门时使用sigmoid( W(at-1,xt)+b )
计算下一个ct时,他使用了独立的更新门和遗忘门参数作为c~t、ct-1的乘子
然后at=输出门 * ct
共三个门
门的使用使记忆得以持久

假设我们正在阅读文本中的单词,并希望使用LSTM来跟踪语法结构,比如主语是单数还是复数。如果主语从单数变为复数,我们需要找到一种方法来摆脱我们先前存储的单复数状态的记忆值,这就用到了遗忘门Γt_f=σ(W_f [ a,x ] + b_f )
一旦我们“忘记”所讨论的过去的主题是单数,我们需要找到一种方法来更新它,以反映新的主题现在是复数,用到了更新门Γt_u=σ(W_u[a,x]+b_u)
然后经过一个更新单元:
c`=tanh(W_c[a,x]+b_c),c=Γt_f*c+Γt_u * c~
最后是决定输出的输出门:
Γt_o=σ(W_o[a,x]+b_o),a=Γt_o * tanh(c)
ML/DL大全(有图版)-LMLPHP

BRNN双向神经网络

当前的输出不仅与前面的序列有关,而且与后面的序列有关
在LSTM的基础上,同时计算一个反向a值,反向计算,保证句子的连贯性,前后都考虑周全
ML/DL大全(有图版)-LMLPHP

NLP模型.算法

seq2seq模型

编码解码模型,encoder-decoder.RNN-RNN
前面层都是输入,后面都是输出,它在训练阶段可能对输出不处理,直接用target的序列作为下时刻的输入,应用于机器翻译MT
ML/DL大全(有图版)-LMLPHP
一对一语言模型架构:
a(0)和x(1)为0向量作为初始激活,得到y(1)(第一个词是词库中每个单词的概率,softmax输出)作为x(2)输入下一层,得到y(2)(前两个词的概率)…
(y实际上等于(本单词|之前单词)的概率)
每一步都会考虑前面所有的单词
ML/DL大全(有图版)-LMLPHP

集束搜索beam search

一般用在机器翻译、语音识别等
P(y1,y2|x)=P(y1|x)*P(y2|x,y1),P(y1y2…yn|x)=P(y1|x)P(y2|x,y1)…P(yn|x,y1y2…yn-1))

集束宽n,取n个最可能的词语,第一个单词=>第二个,每一步总是取最可能的3组结果,不断剪枝,可以大大提高效率
如果集束宽为1的话,实际上就变成了贪心搜索方法
集束宽越大正确率越精准,但效率越低,反之亦然,所以需要好好选择集束宽,一般至少用10(保证正确率),特定应用用100或1000
ML/DL大全(有图版)-LMLPHP
可以做一些改进
由于p总小于1,会造成数值下溢,浮点数不能好好保存,然后算概率时包一层log函数,严格单调递增,更稳定的算法
如果句子长的话,概率相乘会越来越低,答案倾向于短句,然后我们使用归一化,优化目标函数==∑P除上一个句子长度^a,(a超参数,控制归一化阈值)

attention注意力模型

MT翻译的一个缺点就是短句不好评估,长句更难决策,所以我们有了注意力模型
这个模型实际上就是在正常RNN模型准备输出每个y时加入了一个注意力单元处理机制(注意周围的词)(注意参数s)
ML/DL大全(有图版)-LMLPHP

BP误差反向传播

RNN基础,反向传播时,不仅依赖当前层的网络,还依赖前面若干层的网络
并且可以加入长短评估机制,对MT得到的句子长度太长或太短做惩罚
ML/DL大全(有图版)-LMLPHP

Word2Vec模型

用来产生词向量的模型,词表示方法one-hot,依赖于skip-gram和词袋CBOW模型
CBOW模型是用上下文来预测当前词,而Skip-gram模型则是当前词来预测上下文

skip-gram模型

词嵌入模型,利用了嵌入向量e=E*o(onehot),预测一个输入的左右词的概率
缺点在于softmax计算成本非常大(onehot向量维度为词典维度)


流程和模块

神经网络流程

数据集加载和处理-初始化wb-定义正反传播和cost-通过optimizer求cost最优-用测试集来评估-做预测

机器学习流程

加载数据集-预处理.矩阵化-选择分类器模型(用sklearn等模块)或自己定义实现-训练fit-评估

模块:

matploylib数据可视化、pandas数据分析、numpy矩阵、scipy科学计算
sklearn机器学习

sklearn实现的机器学习算法:KNN、logistic、贝叶斯(高斯.伯努利.多项式)、AdaBoost、随机森林、决策树、SVM、KMeans、DBSCAN、PCA、SVD等,直接创建分类器就可以直接构建模型.项目

TensorFlow

tf代码流程:数据加载.分训练和测试-定义xy占位符-定义初始化wb方法-定义CNN.RNN.Gan.自编码模型、用交叉熵方法定义cost|或自己实现正反传播和cost方法-调用一个优化器optimizer方法.最小化cost-建立会话,初始化wb,运行optimizer把训练集feed,用测试集预测并评估-(拿新数据做预测或保存模型)
ML/DL大全(有图版)-LMLPHP

keras

构建网络时直接定义模型-add网络层-comile编译-定义cost.optimizer-fit训练-评估evaluate

tflearn

构建网络直接使用方法迭代就行

opencv计算机视觉

也实现了很多ML方法,在cv2.ml_里
图像检测的流程:加载图片-副本灰度图-用算子做图片边缘检测-图片处理.去噪.二值化.填充.形态学腐蚀与膨胀等-寻找轮廓-bounding box-(裁剪)

NLTK自然语言处理

可做分词分句预测等,只是用过,还没有做过什么练习项目


了解和其他

了解:

PageRank——Google的网页排名算法

网页重要性评价值,是依据指向该网页的所有其他网页的重要性,以及这些网页中包含的链接数求得的
由于每次计算时都需要关联其他网页,所以开始时会给每个网页一个任意的初始值
迭代多次,每个网页的PageRank值将会越来越接近真实值

单文本词频+逆文本频率指数TF-IDF——用于信息检索
度量指标
对单词加权重(分停用词、常用词、专业词等)

EM最大期望算法

步骤是初始化分布,计算每个样本大概是属于什么分布(极大似然估计),通过分为一类的人来重新估计它的分布,更新分布
重复计算.更新直到参数不发生变化为止
缺点:对初始值敏感,初始值的选择会直接影响整体效率
kmeans就是EM算法思想的体现

网络中的交叉熵

熵考察的是单个的信息(分布)的期望:H§=-sum(plogp)
交叉熵考察的是两个的信息(分布)的期望:H(p,q)=-sum(plogq)
为了解决参数更新效率下降这一问题,我们使用交叉熵代价函数替换传统的平方误差函数。

CART分类回归决策树

在CRAT算法中,基尼不纯度指数表示一个随机选中的样本在子集中被分错的可能性。基尼不纯度为这个样本被选中的概率乘以被分错的概率。
当一个节点的所有样本都是一个类时,基尼不纯度为0。
基尼指数 = 样本被选中的概率*样本被分错的概率
总体内包含的类别越杂乱,GINI指数就越大

因而对于一个具有多个取值(超过2个)的特征,需要计算以每一个取值作为划分点,对样本D划分之后子集的纯度Gini(D,Ai),(其中Ai 表示特征A的可能取值)
然后从所有的可能划分的Gini(D,Ai)中找出Gini指数最小的划分,这个划分的划分点,便是使用特征A对样本集合D进行划分的最佳划分点。

见过:

HMM隐马尔可夫模型
级联性回归CSR,DeepID网络人脸检测
Inception网络、ImageNet大型数据库
RBM受限玻尔兹曼机
RBF径向基函数
遗传算法(自然选择)
牛顿法
Alpha-Beta剪枝
标签传播算法 LPA
独立成分分析 ICA
线性判别分析 LDA
感知器算法
CRF条件随机场
RCNN滑动窗口

·

English:

ML 机器学习
DL 深度学习
RL 强化学习
ANN 人工智能网络
DNN 深度神经网络

n_x 输入层
n_h 隐藏层
n_y 输出层

训练 fit
评估 evaluate
分数 score
预测 predict
反向传播 Back prop
正向传播 Forward prop

label 标记
bias 偏置
extract 取出.提取
optimizer 优化器
accuracy 精确度
regression 回归
compile 编译
kernel 内核,核心
validation 确认(确定的测试集test)
normal 正态分布
cross_entropy 交叉熵
interactive 交互式
stddev 标准差
autoencoder 自编码器
ensemble 集成
mean 平均值
cache 隐藏
recognition 识别
sign 手势
parameters 参数
arithmetic 算法
convolution 卷积

参考

《统计学习方法》
《集体智慧编程》
《python数据分析》
《deeplearning》
《数学之美》
《TensorFlow技术解析与实战》
吴恩达deeplearning.ai课程,网易云课堂
还有一些网站、博客、公众号文章等

让我学到了很多知识
感激不尽

10-06 15:35