赞
踩
最近要找工作,个人比较心仪的岗位当然是DL&CV,大概是因为硕士期间对这些研究的比较多。有时接触的东西多了,但是很多看了一次就忘记了,就算是看过多次的也留不下多少记忆。原因当然是没有系统地进行总结过,没有把知识点串联起来。
第一次接触到机器学习(同时也是第一次听说机器学习),还是在大四那年寒假左右,大概是2016年初。当时好像是在别人的百度云盘分享里面看到了一本叫做《机器学习实战》的书。那时候只是觉得那玩意很厉害,为什么自己现在才发现?而且里面推荐使用的语言是Python,正好那时也接触了Python这门语言,也算是入门了。可是当时并没有过多地去研究机器学习。不过当时的本科毕业设计做的是与图像相关的,图像视觉安全质量评估。那时候也是刚刚接触图像。之前没有接触过。那个时候我是用的OpenCV和C++做的毕业设计。而其中用到的核心函数大概就是OpenCV自带的Canny函数了。当时其实可以选择用Matlab实现的,但考虑到总总原因,还是选择了C++,因为自己当时对Matlab不感冒(现在也是,摊手笑哭)。毕竟C佳佳要显得高大上些。这个毕业设计是跟着一个博士师兄做的。实现他发表的一篇论文里面的算法。大概就是提取图像的边缘特征以及纹理特征,然后算出图像的视觉安全得分。好了,闲话大概就到这个地方吧。
后面再次接触机器学习还是研一上学期,那时候实验室开了一门讨论班,讲的就是机器学习,那时用的教材是CMU的Mitchell写的黑皮《机器学习》。自己也参与讲了几节。研一寒假(2017年初),在别人的推荐下,入手了李航博士的那本《统计学习基础》,当时还把书带回了家,希望寒假能够读完,遗憾的是第一页都没有翻开过(今年寒假也带回家了,一样的没有读完)。后来研一下学期,学习了那门课,用的是西瓜书。研二上学期学习了花书《深度学习》(17年暑假刚刚出版),也讲了机器学习那个部分,以及深度学习的卷积神经网络(CNN)。同时研二上学期也开始写小论文,涉及到的就是深度学习和计算机视觉。具体是使用卷积神经网络对图像进行质量评估(没错,整个研究生期间,入的就是这个坑)。所以对于机器学习和深度学习、计算机视觉还是有很多要总结的。
监督学习的假设是:样本数据独立同分布
统计学习三要素:模型+策略+算法
风险函数(期望风险)(期望损失)
经验风险(经验损失)
当样本容量无穷大时,可以用经验风险估计期望风险。
极大似然估计就是经验风险最小化的一个例子。当模型是条件概率分布时,损失函数是对数损失函数时,经验风险最小化等价于极大似然估计;贝叶斯估计中的最大后验概率估计就是结构风险最小化的一个例子。(使用正则化)
测试误差、训练误差
误差率,准确率 :当损失函数为0-1损失函数时,测试误差变成了误差率
学习方法对未知数据的预测能力称为泛化能力
过拟合、
模型选择方法:
1.正则化(结构风险最小化策略的实现,经验风险上加一个正则化项或罚项)
从贝叶斯估计的角度来看,正则化项对应于模型的先验概率
2.交叉验证
当样本数据充足时(训练集、验证集和测试集)
样本数据不充足时:
1。简单交叉验证
2。S折交叉验证(数据切成S份,S-1作为训练集)
3。留一交叉验证(S=N的特殊情况)
泛化能力
泛化误差就是所学习到的模型的期望风险
假设空间包括有限个函数情况下的泛化误差上界:训练误差小的模型,其泛化误差也会小
监督学习方法:
1。生成方法,生成模型
由数据学习联合概率分布,然后求出条件概率分布
朴素贝叶斯法,隐马尔科夫模型
2。判别方法,判别模型
直接学习决策函数或条件概率分布
k近邻法、感知机、决策树、逻辑斯蒂回归模型、最大熵模型、支持向量机、提升方法和条件随机场
生成方法和判别方法的异同
分类问题
分子总是TP----正类预测为正类
精确率:分母为预测为正类的总数
召回率:分母为样本为正类的总数
标注问题
回归问题:
回归问题的学习等价于函数拟合
回归学习最常用到的损失函数是平方损失函数,在此情况下,可以通过最小二乘法求解
感知机
为神经网络和支持向量机的基础
线性分类模型,判别模型
数据集的线性可分性
模型为:书中的公式
策略:损失函数定义的是误分类点到超平面S的总距离。
算法:随机梯度下降法
感知机学习算法的原始形式:一次随机选择一个误分类点使其梯度下降
可以证明,当数据线性可分,算法收敛。有限次可以完全正确划分
对偶形式的基本思想:看书
k近邻法
不具有显式的学习过程
算法:见书
模型:k近邻模型
由:距离度量、k值的选择和分类决策规则组成
k值越小,越容易导致过拟合,模型变得复杂
k值越大,模型变得简单
多数表决规则等价于经验风险最小化
利用kd树,可以减少搜索的计算量。其原理是一棵二叉树
朴素贝叶斯法
生成模型,首先得到联合概率分布。
学习先验概率分布和条件概率分布,然后利用贝叶斯定理求得后验概率。(假设特征条件独立分布)
最终分到后验概率最大的类中,这等价于期望风险最小化(推导看书,基于假设选择0-1损失函数)
极大似然估计和贝叶斯估计
决策树
可以看成if-then的规则集合,也可以看成是定义在特征空间和类空间上的条件概率分布
与训练集不相矛盾的决策树可能有多个,也可能一个也没有
决策树学习的损失函数通常是正则化的极大似然函数。策略是:以损失函数为目标函数的最小化
决策树学习包括3个步骤:递归法
1。特征选择(信息增益)
2。决策树的生成(局部选择)
3。决策树的修剪(全局选择)
信息增益:
信息增益表示得知特征X的信息而使得类Y的信息的不确定性减少的程度
算信息增益的时候,条件熵:先按特征取值划分,再按类的取值划分。
信息增益比
ID3算法相当于用极大似然法进行概率模型的选择,ID3算法中只有树的生成,所以该算法容易造成过拟合
C4.5生成算法是对ID3算法的改进,其中用信息增益比替代信息增益
决策树的剪枝算法:
剪枝往往通过极小化决策树整体的损失函数或代价函数来实现。
需要用动态规划算法实现
CART算法没有看
LR(逻辑斯蒂回归)
逻辑斯蒂回归模型:其分布
属于对数线性模型
模型参数估计的推导:看书
关于支持向量机,我发现总是隔段时间就会忘记,我觉得是因为站的高度不够吧。
首先要明确它是干什么的?
SVM是用来分类的,当然也可以用来回归。我们暂且先考虑分类的问题。
好的,提到分类,我们首先要考虑它是二元分类还是多元分类?因为往往产生记忆模糊或是概念混淆或是看到同样的道理说法写法不一样的时候觉得自己可能看了假的svm,就是因为这些很根本的问题没有弄清楚。(其它的知识点也是这样的)。
其实SVM主要是进行二分类的,当然它也可以进行多分类。只不过二分类就只有一个分类超平面(或是超曲面),而多分类就是多个这样的面。
到了这里,我们还要问自己,它是针对线性的,还是非线性,抑或是对数线性(比如logistic回归,注意,它是分类而不是回归)。
那么它可以分成三类情况讨论:
线性可分支持向量机
线性支持向量机
非线性支持向量机
第一种即是说,样本数据是线性可分的,即存在一个超平面(对应二维,就是一条线;对应三维,其实就是一个平面…)将它完全正确划分。
第二种是说,样本可以被线性划分,但是不是完全,即存在一些分类错误的样本。
而第三类是说,样本不可以被线性划分,准确说是,用非线性模型才能很好地进行分类的问题。
到了这个地方,我们还要问自己,SVM对应的模型,策略和算法是什么?首先是模型,其实在回答上面的问题时,就大概提及了。就是找到一个超面进行划分,从而达到分类的效果。它的基本模型就是:定义在特征空间里面的间隔最大的线性分类器。
这个超平面就是
w
x
+
b
=
0
wx+b=0
wx+b=0。而策略呢?策略就是:间隔最大化(正则化的合页损失函数的最小化问题)
说到间隔最大化就要理解一下间隔这个概念。这个也就是它的
SVM的推导
1。首先要写出函数间隔,几何间隔,
2。取函数间隔为1,等价转换最优化问题(变成了凸二次规划问题)
3。利用拉格朗日乘子法
线性可分支持向量机和硬间隔最大化
线性支持向量机与软间隔最大化:合页损失函数等价
非线性支持向量机与核函数
重点
SVM和LR的异同点
对于SVM我们用到的是:最大间隔化,或是带有正则化的合页损失函数的最小化。这两者是等价的。(到现在才明白过来)
我们来看一下公式:
L
i
=
C
max
(
0
,
1
−
y
i
w
T
x
i
)
+
R
(
W
)
L_i = C \max(0, 1 - y_i w^Tx_i) + R(W)
Li=Cmax(0,1−yiwTxi)+R(W),这个是带正则化的合页损失函数,我们的目的是将它最小化。
而再看看这个公式:
1
2
∥
w
∥
2
+
C
∑
i
=
1
N
ξ
i
\frac{1}{2} \left \| w \right \|^2+C\sum _{i=1}^{N}\xi _{i}
21∥w∥2+Ci=1∑Nξi
以下为限制条件:
y
i
(
w
⋅
x
i
+
b
)
⩾
1
−
ξ
i
,
i
=
1
,
2
,
.
.
.
,
N
y_{i}(w\cdot x_{i}+b)\geqslant 1-\xi _{i}, i=1,2,...,N
yi(w⋅xi+b)⩾1−ξi,i=1,2,...,N
ξ
i
⩾
0
,
i
=
1
,
2
,
.
.
.
,
N
\xi _{i} \geqslant 0, i=1,2,...,N
ξi⩾0,i=1,2,...,N
现在说说LR
SVM是最常用的两个分类器之一,而另一个就是Softmax分类器,它的损失函数与SVM的损失函数不同。Softmax分类器就可以理解为逻辑回归分类器面对多个分类的一般化归纳。SVM将输出
f
(
x
i
,
W
)
f(x_i,W)
f(xi,W)作为每个分类的评分(因为无定标,所以难以直接释)。与SVM不同,Softmax的输出(归一化的分类概率)更加直观,并且从概率上可以解释,在Softmax分类器中,函数映射
f
(
x
i
;
W
)
=
W
x
i
f(x_i;W)=Wx_i
f(xi;W)=Wxi保持不变,但将这些评分值视为每个分类的未归一化的对数概率,并且将折叶损失(hinge loss)替换为交叉熵损失(cross-entropy loss)。公式如下:
L
i
=
−
l
o
g
(
e
f
y
i
∑
j
e
f
j
)
Li=-log(\frac{e^{f_{y_i}}}{\sum_je^{f_j}})
Li=−log(∑jefjefyi) 或等价的
L
i
=
−
f
y
i
+
l
o
g
(
∑
j
e
f
j
)
L_i=-f_{y_i}+log(\sum_je^{f_j})
Li=−fyi+log(j∑efj)
还记得逻辑回归分类器吗?它可以看作是Softmax分类器的特例。
L
i
=
−
l
o
g
(
e
f
y
i
1
+
e
f
y
i
)
Li=-log(\frac{e^{f_{y_i}}}{1+e^{f_{y_{i}}}})
Li=−log(1+efyiefyi)
提到这个,不得不从概率论和信息论中来慢慢解释。首先看看熵这个概念:
想要考察信息量的损失,就要先确定一个描述信息量的量纲。 在信息论这门学科中,一个很重要的目标就是量化描述数据中含有多少信息。 为此,提出了熵的概念,记作
H
H
H,一个概率分布所对应的熵表达如下:
H
=
−
∑
i
=
1
N
p
(
x
i
)
⋅
log
p
(
x
i
)
H=-\sum_{i=1}^Np(x_i)\cdot\log{p(x_i)}
H=−i=1∑Np(xi)⋅logp(xi)
在“真实”分布
p
p
p和估计分布
q
q
q之间的交叉熵定义如下:
H
(
p
,
q
)
=
−
∑
x
p
(
x
)
log
q
(
x
)
H(p,q) = - \sum_x p(x) \log q(x)
H(p,q)=−x∑p(x)logq(x)
在统计应用中,我们经常需要用一个简单的,近似的概率分布
f
∗
f^*
f∗来描述观察数据
D
D
D或者另一个复杂的概率分布
f
f
f。这个时候,我们需要一个量来衡量我们选择的近似分布
f
∗
f^∗
f∗ 相比原分布
f
f
f究竟损失了多少信息量,这就是KL散度起作用的地方。
D
K
L
(
p
∣
∣
q
)
=
∑
i
=
1
N
p
(
x
i
)
⋅
(
log
p
(
x
i
)
−
log
q
(
x
i
)
)
D_KL(p||q)=\sum_{i=1}^Np(x_i)\cdot(\log{p(x_i)}-\log{q(x_i)})
DKL(p∣∣q)=i=1∑Np(xi)⋅(logp(xi)−logq(xi))
或者写成:
D
K
L
(
p
∣
∣
q
)
=
∑
i
=
1
N
p
(
x
i
)
⋅
log
p
(
x
i
)
q
(
x
i
)
D_KL(p||q)=\sum_{i=1}^Np(x_i)\cdot\log{\frac{p(x_i)}{q(x_i)}}
DKL(p∣∣q)=i=1∑Np(xi)⋅logq(xi)p(xi)
因此,Softmax分类器所做的就是最小化在估计分类概率(就是上面的 e f y i / ∑ j e f j e^{f_{y_i}}/\sum_je^{f_j} efyi/∑jefj)和“真实”分布之间的交叉熵,在这个解释中,“真实”分布就是所有概率密度都分布在正确的类别上(比如: p = [ 0 , . . . 1 , . . . , 0 ] p=[0,...1,...,0] p=[0,...1,...,0]中在 y i y_i yi的位置就有一个单独的1)。还有,既然交叉熵可以写成熵和相对熵(Kullback-Leibler divergence) H ( p , q ) = H ( p ) + D K L ( p ∣ ∣ q ) H(p,q)=H(p)+D_{KL}(p||q) H(p,q)=H(p)+DKL(p∣∣q),并且 H H H函数 p p p的熵是0,那么就能等价的看做是对两个分布之间的相对熵做最小化操作。换句话说,交叉熵损失函数“想要”预测分布的所有概率密度都在正确分类上。
精确地说,SVM分类器使用的是折叶损失(hinge loss),有时候又被称为最大边界损失(max-margin loss)。Softmax分类器使用的是交叉熵损失(corss-entropy loss)。Softmax分类器的命名是从softmax函数那里得来的,softmax函数将原始分类评分变成正的归一化数值,所有数值和为1,这样处理后交叉熵损失才能应用。注意从技术上说“softmax损失(softmax loss)”是没有意义的,因为softmax只是一个压缩数值的函数。但是在这个说法常常被用来做简称。
关于机器学习,其实它和统计学是息息相关的。机器学习的一些方法都可以归纳为:模型+策略+算法。机器学习分为监督学习、非监督学习和半监督学习。而任务可以分为:分类和回归。模型类别可以分为:生成模型和判别模型。这些都是最基本的概念。
分类或是回归,无非是通过计算 f ( x ) f(x) f(x)或是 p ( y ∣ x ) p(y|x) p(y∣x)进行预测的。其中, x x x为样本, f ( x ) f(x) f(x)为具体的分类或回归预测结果,而 p ( y ∣ x ) p(y|x) p(y∣x)给出的是一个概率,它其实更多地是用来分类的。
从最简单的感知机模型说起(它属于二类分类线性分类模型)。它的模型其实很简单,就是一个线性模型: f ( x , w ) = w T x + b f(x,w) = w^{T}x+b f(x,w)=wTx+b,其中 w w w为权重,而 b b b为偏置。如果仔细观察的话。你会发现,后面的很多模型都是基于此。比如逻辑回归模型,支持向量机(SVM),神经网络(NN)。
机器学习的任务就是进行学习,所以它需要数据。而且数据量越大越好。数据集分为训练集和测试集,当然也有细分出验证集的。对于训练集,假设我们有N个样本。我们把第 i i i个样本记作 x ( i ) x^{(i)} x(i),而对于每一个样本,它都有很多个属性组成。再假设每一个样本有n个属性,记一个样本的第 i i i个属性为 x i x_{i} xi。
那么刚刚的线性模型其实就是:$f(x,w) = w_{1}x_{1} + w_{2}x_{2} + … + w_{n}x_{n} + b , 我 们 可 以 让 ,我们可以让 ,我们可以让f(x,w) 的 取 值 为 的取值为 的取值为{-1,1} , 当 右 边 计 算 结 果 为 负 , 取 − 1 ; 当 结 果 为 正 , 取 + 1 。 分 别 代 表 正 类 和 负 类 。 其 实 它 可 以 简 化 写 成 : ,当右边计算结果为负,取-1;当结果为正,取+1。分别代表正类和负类。其实它可以简化写成: ,当右边计算结果为负,取−1;当结果为正,取+1。分别代表正类和负类。其实它可以简化写成:f(x,w) = sign(w^{T}x+b)$。好的,有了模型,下面我们来看策略,所谓策略指的是,我们怎么来评判这个模型的好坏,那么我们自然会想到,看它预测的准确性了。所以就有了损失函数。用它来衡量模型的好坏。
机器学习中常见的损失函数有以下几种,注意的是:在设计损失函数的时候,一定要遵循越是不准确,其损失函数的值越大,我们在后面用算法进行优化的过程其实就是找到最优解(或次优解),使得损失函数最小。
0-1损失函数:
L
(
y
,
f
(
x
)
)
=
{
0
,
f
(
x
)
=
y
1
,
f
(
x
)
≠
y
L(y,f(x)) = \left\{
绝对损失函数: L ( y , f ( x ) ) = ∣ y − f ( x ) ∣ L(y,f(x)) = |y-f(x)| L(y,f(x))=∣y−f(x)∣
平方损失函数: L ( y , f ( x ) ) = ( y − f ( x ) ) 2 L(y,f(x)) = (y-f(x))^2 L(y,f(x))=(y−f(x))2
负对数(对数似然)损失函数:
L
(
y
,
p
(
y
∣
x
)
)
=
−
l
o
g
p
(
y
∣
x
)
L(y,p(y|x)) = -logp(y|x)
L(y,p(y∣x))=−logp(y∣x),这个地方我们稍微考虑一下,为什么要加负号?
因为它给出的是一个概率。概率越大,说明准确率越高,也就是损失值应该越小。见下图:
对于感知机而言。我们可以定义误分类点到分离平面的距离作为损失函数值。
L
=
∑
1
N
y
i
(
w
T
x
i
+
b
)
L=\sum_{1}^{N}y_{i}(w^Tx_{i}+b)
L=∑1Nyi(wTxi+b)。
2.决策树
这是一个判别模型,树型模型。
3.logistic模型
这是一个对数线性模型,函数定义为:
f
(
x
∣
w
,
b
)
=
1
1
+
e
−
w
T
x
+
b
f(x|w,b) = \frac{1}{1+e^{-w^Tx+b}}
f(x∣w,b)=1+e−wTx+b1。这是一个sigmoid函数。它具有一个很好的性质
f
′
(
x
)
=
f
(
x
)
(
1
−
f
(
x
)
)
f'(x) = f(x)(1-f(x))
f′(x)=f(x)(1−f(x)),在后面的深度学习中,它不再被用作激活函数了,原因就是因为它会导致梯度消失。
其中红线和蓝线分别为
y
y
y取0和1的情况。而黑线为对数几率。可以看到它其实是线性的。
那么接下来,我们讨论该模型用什么损失函数。谈到这里。不得不提一下大名鼎鼎的交叉熵函数。其实这个我们不用去死记硬背,慢慢推导。从最原始的开始来。首先我们会计算
w
T
x
+
b
w^Tx+b
wTx+b这个线性公式。接着把它带入到sigmoid函数中去。那么有:
P
(
y
=
1
∣
x
)
=
e
w
T
x
+
b
1
+
e
w
T
x
+
b
=
h
(
x
∣
w
)
P(y=1|x) = \frac{e^{w^Tx+b}}{1+e^{w^Tx+b}} = h(x|w)
P(y=1∣x)=1+ewTx+bewTx+b=h(x∣w)
P
(
y
=
0
∣
x
)
=
1
1
+
e
w
T
x
+
b
=
1
−
h
(
x
∣
w
)
P(y=0|x) = \frac{1}{1+e^{w^Tx+b}} = 1-h(x|w)
P(y=0∣x)=1+ewTx+b1=1−h(x∣w)
现在我们来计算它的损失函数,即真实值
y
y
y与预测值的偏离程度。对于单个样本,当
y
(
i
)
=
1
y^{(i)}=1
y(i)=1时,
h
(
x
(
i
)
∣
w
)
h(x^{(i)}|w)
h(x(i)∣w)越大,说明越准确,所以取个负对数为
−
y
(
i
)
log
(
h
(
x
(
i
)
∣
w
)
)
-y^{(i)}\log(h(x^{(i)}|w))
−y(i)log(h(x(i)∣w));当
y
=
0
y=0
y=0时,
1
−
h
(
x
∣
w
)
1-h(x|w)
1−h(x∣w)越大,说明越准确,所以取个负对数为
−
(
1
−
y
(
i
)
)
log
(
1
−
h
(
x
(
i
)
∣
w
)
)
-(1-y^{(i)})\log(1-h(x^{(i)}|w))
−(1−y(i))log(1−h(x(i)∣w))。再把它们相加,为什么可以相加,因为
y
y
y与
1
−
y
1-y
1−y非0即1,所以不会影响到损失函数。
综合有: L ( y , h ( x ( i ) ∣ w ) ) = − y ( i ) log ( h ( x ( i ) ∣ w ) ) − ( 1 − y ( i ) ) log ( 1 − h ( x ( i ) ∣ w ) ) L(y, h(x^{(i)}|w)) = -y^{(i)}\log(h(x^{(i)}|w))-(1-y^{(i)})\log(1-h(x^{(i)}|w)) L(y,h(x(i)∣w))=−y(i)log(h(x(i)∣w))−(1−y(i))log(1−h(x(i)∣w))
而对于所有的N个样本,只需要求和再平均即可: L = 1 N ∑ i = 1 N − y ( i ) log ( h ( x ( i ) ∣ w ) ) − ( 1 − y ( i ) ) log ( 1 − h ( x ( i ) ∣ w ) ) L =\frac{1}{N} \sum ^N_{i=1}-y^{(i)}\log(h(x^{(i)}|w))-(1-y^{(i)})\log(1-h(x^{(i)}|w)) L=N1∑i=1N−y(i)log(h(x(i)∣w))−(1−y(i))log(1−h(x(i)∣w))
现在回过头来,发现很容易把机器学习和深度学习中的一些东西混淆起来,比如
1。reLU函数是干嘛的,它在机器学习里面有涉及到吗?貌似在机器学习里面只有LR中涉及到Sigmoid这个激活函数。
2。关于正则化,它会不会出现在神经网络中的任意一层,还是说只是在最后的输出层。
3。损失函数呢?机器学习中的损失函数和神经网络中损失函数,分别用在什么时候?
4。batch normalization,这个东西的提出是在2015年,那么最新的keras、caffe等框架有对应的实现吗?还有它为什么是放在激活层前面,而不是后面。正常思路,应该是在进入下一层之前,而如果放在激活层前面的话,已经统一化了,不是又被激活函数搞乱了吗?
还是让我们回到原始点。机器学习是一块比较大范围的领域。事实上,深度学习属于机器学习的一部分,对于神经网络,如果层比较深的话,就把它叫做深度学习了。深度学习也叫作特征学习。
有了这一宏观认识后,再来看看机器学习里面到底有什么。首先机器学习的任务是进行学习,然后给出预测。而常见的预测无非就是回归与分类。分类,顾名思义就是给出一个样本,预测它属于哪一类。而回归,就是给出一个样本,预测它的估计值,这是一个连续的值。而分类则是离散的。事实上,在某些情况下,回归也可以转换成分类。例如,如果对一个产品的星级进行预测,使用5个独立的分类器来对1-5星进行打分的效果一般比使用一个回归损失要好很多。好了,这个是题外话。对于机器学习,分为监督学习、半监督学习和无监督学习。目前最常见的还是监督学习。即给出样本的标签值,即它的
y
y
y值。在机器学习中,有很多种模型可以用来学习预测。拿分类来说,常见的有:
1。感知机分类(它和svm在线性可分的情况下极其相似)
2。逻辑回归(别被它的名称误导,它其实是用于分类的。而且属于对数线性二元分类器)
这个时候,有必要扩充一下:在深度学习中经常用到的softmax分类器是它的一般情况。也就是说softmax分类用于多分类,而逻辑回归为二分类。它们都是基于sigmoid函数的,而它们的损失函数,都是基于交叉熵损失函数(负对数似然函数)。
3。SVM(支持向量机)
它既可以做分类,也可以做回归。它基于最大间隔化。其实也可以理解为带正则化的合页损失函数的最小化。
4。决策树
5。朴素贝叶斯分类
6。K-近邻分类
主要就是以上几种。其实它们是相互联系的。都是基于统计理论。模型和策略联系紧密。后面有机会再谈谈它们与统计的关系。
其实我在上面故意避开了神经网络。之所以避开,就是因为把它放在深度学习中来讲。神经网络同样地,也可以做分类和回归。它定义了很多层,每一层由若干个神经元组成。这样就形成了一个网络。而对于一个简单的神经元。它有输入,有输出。权重和输入进行内积,再加上一个偏置,就计算出了一个结果,后面再加上一个激活函数(非线性的,为什么不用线性的?因为用线性的就和一般的线性方法没有区别了。使用非线性为的是多样化。理论上可以模拟出任意的函数)。
重点来了。激活函数只出现在神经网络(深度学习)中,在一般的机器学习(除了神经网络)中,是不会出现这个概念的。而激活函数又会有很多种。常见的有sigmoid函数,tanh函数,softplus函数,ReLu函数,maxout函数等等。稍加联系,我们就会发现:逻辑回归,其实就是一个单层(只有一个隐藏层)的以sigmoid函数作为激活函数的神经网络。
在神经网络中,我们不会使用线性的激活函数,而是使用非线性的,而sigmoid就是过去经常使用到的一个,但是由于它会导致梯度消失以及它的非零对称性质,导致不再使用它。tanh都要比它好一些。更多地是使用Relu函数等其它改进的函数作为激活函数。
那么还有一个问题,激活函数是不是要用在神经网络中的任意一层上。理论上是这样的,但是在深度学习的某些网络中,这不是必须的。也就是说,在某一层中,你可以不使用激活函数。甚至可以不使用偏置。这些在keras的实现中可以发现。
关于前向传播、后向传播与梯度下降,也经常混淆。其实前向传播和后向传播只是神经网络所特有的概念。相信在机器学习中(这里我说的机器学习默认不包含神经网络,因为我现在的目的就是区分它们中容易混淆的地方)并未出现到。再看看梯度下降。是不是很熟悉。其实它是机器学习中的概念。当然深度学习中也会用到。那么区别在哪儿呢?我们说机器学习有了模型和策略之后,剩下的就是如何求出最优的参数,使得模型效果最好(泛化能力强)。梯度下降法就是优化方法中的一种。它在更新参数的时候,始终沿着梯度下降最快的方向走。而前向传播与后向传播,可以理解为神经网络中的数据流走向。前向传播,顾名思义,就是从输入层开始一层一层地往前走,计算数值。最后输出。而后向传播呢?它是为了计算梯度的。从输出开始一层一层地计算导数(梯度),它是反方向传播的。而这些梯度的计算就是为了配合梯度下降法。那么具体是什么呢?这里就不得不提到损失函数。最优化是针对损失函数来优化的。而不是优化模型输出的值。也就是说,梯度是以损失函数的值来计算的。损失函数衡量的就是预测值与真实值的不接近程度。如果预测值与真实值相差很大,说明模型预测的效果不好,于是需要求得损失函数的最小值。于是用到了梯度下降法。
在机器学习中常见的损失函数包括:0-1损失函数(在kNN中用到过),绝对值损失函数(L1损失,mean_absolute_error或MAE,通常用在回归任务中),平方差损失函数(L2损失,mean_squared_error或mse,通常用在回归任务中),负对数似然损失函数(binary_crossentropy,交叉熵损失函数,用在逻辑回归,而categorical_crossentropy:亦称作多类的对数损失,用在softmax回归中),合页损失函数(hinge,主要用在SVM二分类中):
m
a
x
(
0
,
−
)
max(0,-)
max(0,−)或
m
a
x
(
0
,
−
)
2
max(0,-)^2
max(0,−)2
L
i
=
C
max
(
0
,
1
−
y
i
w
T
x
i
)
L_i = C \max(0, 1 - y_i w^Tx_i)
Li=Cmax(0,1−yiwTxi)
多分类合页损失函数(categorical_hinge,主要用在SVM多分类中,
Δ
\Delta
Δ为超参数)
L
i
=
∑
j
≠
y
i
max
(
0
,
w
j
T
x
i
−
w
y
i
T
x
i
+
Δ
)
L_i = \sum_{j\neq y_i} \max(0, w_j^T x_i - w_{y_i}^T x_i + \Delta)
Li=j̸=yi∑max(0,wjTxi−wyiTxi+Δ)
所以看到了吧。要优化的是这些损失函数计算出来的值。真实的优化目标函数是在各个数据点得到的损失函数值之和的均值。
现在再回到深度学习的神经网络中去。当到了最后的输出层,是什么样子的?在输出层,我们会得出最后的结果,如果是分类,那么最后一层就会有多个节点;而如果是回归,就只有一个节点。后面的事情,就交给损失函数和优化器了。
这个时候,重点来了,为什么神经网络可以使用那么多的损失函数,而这些损失函数都来自于某些机器学习模型的。所以,我们要记住,损失函数是独立于模型的,就像优化算法也是独立于模型的一样。也就是说,那些损失函数不是某个模型特有的。比如,交叉熵损失既可以用于逻辑回归,softmax回归,也可以用于神经网络。而合页损失函数既可以用于SVM,当然也可以用于神经网络。
到了这里,相信大家对模型+策略+算法有了更加深入的理解了。从而就不会再把机器学习和深度学习中的某些东西弄混淆了。其实,只需要多思考一些为什么,我们往往自己也就能得出原因了。当然以上的内容其实并不全面。深度学习中除了一般的深度神经网络,还有CNN、RNN等。但是把最基本的东西弄清楚了,其它的也就可以理解了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。