机器学习初识 梯度下降&概率分类模型&逻辑回归

机器学习初识 梯度下降&概率分类模型&逻辑回归

基础概念

监督学习 :Supervised Learning 数据具有标签 需要大量的训练集,输出即标签

半监督学习:Semi-supervised Learning 数据少量有标签,大量无标签

非监督学习:Unsupervised Learning 数据无标签

迁移学习:Transfer Learning

结构化学习:Structured Learning - Beyond Classification

加固学习:Reinforcement Learning 强化学习

回归

三步走思想

Step1. Model

Model即 A set of function

Linear Model可以表示为:
y=b+wixi y=b+\sum{w_ix_i}
其中x是ferture,w是weight,b是bias

例:
y=b+wxcp y=b+wx_{cp}

Setp2: Goodness of function

引入损失函数,输入一个函数,输出这个函数有多坏
L(f)=L(w,b)=n=110(y^n(b+wxcpn))2 L(f)=L(w,b)=\sum_{n=1}^{10}(\hat{y}^n-(b+w·x_{cp}^n))^2
可以看到,这个式子中,n从1到10,代表10个例子,x和y是已知的,b和w可以看作未知的

接下来求最优的w和b,记作ww^*bb^* ,其所对应的f记作ff^*
f=argminL(f)w,b=argminl(w,b)=argminn=110(y^n(b+wxcpn))2 f^*=argminL(f)\\ w^*,b^*=argminl(w,b)\\=argmin\sum_{n=1}^{10}(\hat{y}^n-(b+w·x_{cp}^n))^2
只要可微分,就可以用梯度下降来处理这个问题

Setp3:Gradient Descent

为什么用梯度下降法?因为暴力穷举法过于低效

① 随机取一个初始值w0w^0

② 计算k=dLdww=w0k=\frac{dL}{dw}|_{w=w^0}

如果k<0 就是negative的,左大右小的Loss 因此需要增加w

如果k>0 就是pastive的,左小右大的Loss 因此需要减小w

w1w^1是下一个点,则从w0w^0过渡到w1w^1的式子可以写作:
w1=w0ηdLdww=w0 w^1=w^0-\eta\frac{dL}{dw}|_{w=w^0}
在线性回归上无需担心局部最优问题,即此时的梯度下降不会出现局部最优的情况。损失函数的图像一定是凹的

上面写的是一元的情况,那么如果有两个参数该怎么办,即回到最初的问题,我们要求w,bw^*,b^*

① 随机取一个初始值w0,b0w^0,b^0

② 计算Lww=w0,b=b0,Lbw=w0,b=b0\frac{\partial{L}}{\partial{w}}|_{w=w^0,b=b^0},\frac{\partial{L}}{\partial{b}}|_{w=w^0,b=b^0}

得到位移

w1=w0ηLww=w0,b=b0w^1=w^0-\eta\frac{\partial{L}}{\partial{w}}|_{w=w^0,b=b^0}

b1=b0ηLbw=w0,b=b0b^1=b^0-\eta\frac{\partial{L}}{\partial{b}}|_{w=w^0,b=b^0}

不断迭代,直到找到最优为止。

最后我们得到L(f)的结果,我们并不关心得到的这个结果的值,因为它是在已知数据上训练出啦的,我们需要关心的是它在new data上的应用情况

Selecting another model

为了使结果更加精确,可以引入二次型,三次型,甚至更高

但这里会出现一个问题,引入过高次,traning data肯定越来越精准,但testing data却越来越离谱,这种现象叫做[过度拟合 Over fitting]

Back to step1

还有可能因为没有考虑到一些隐藏因素,从而导致结果不准确或者错误。如果把寻找ww^*bb^*的过程比作大海捞针,那么因为没有考虑到隐藏因素这一情况就可以比作“海没有选对”,因此根本不可能捞到针。这时候就需要重新定义Model了

Back to step2:Regularization

我们更新Loss函数

已知 y=b+wixiy=b+\sum{w_ix_i}

则Loss函数为:L(f)=L(w,b)=n(y^n(b+wixi))2+λ(wi)2L(f)=L(w,b)=\sum_{n}(\hat{y}^n-(b+\sum{w_ix_i}))^2+\lambda\sum(w_i)^2

在后面加了一项,称之为正则化

可以看出,如果λ\lambda越大,为了使L更小,就会越多的考虑wiw_i,wiw_i越接近0,ƒ就越平滑。 wixiw_ix_i\Rightarrow wi(xi+Δxi)w_i(x_i+\Delta x_i)

误差从哪儿来?

误差包括bias和variance

model越复杂、方差越大、bias越小

model越简单、方差越小、bias越大

因为越简单的model,可能压根就没有包含ƒ,所以不管怎么求ff^*,或者求f=E[f]\overline{f}=E[f^*]\neqƒ,而且差距还挺大,因为没有包含我们要找的目标。所以要让model复杂起来,高维是包含低维的。

但仍然要综合两个因素,寻找一个临界点得到最优解。

若error是因为bias过大,则是Underfitting 欠拟合;

若error是因为variance过大,则是overfitting 过拟合。

解决办法

若bias过大,则去重新设计model,即redesign

若variance过大,可以有两种办法

①引入更多的data 每次找ff^*时让训练数据规模大一点

②正则化,即上面的方法,让Loss函数再加一项使获得的曲线更平滑但是因为调整了function,可能会导致bias增加 。造成这样的原因是:要找的ƒ可能本身不是平滑的,加了一项以后把真正的目标解给排除掉了

训练集和验证集

上面一直提到的训练集,其实可以更进一步划分为两部分,即训练数据和验证数据。其中Training Set用来训练Model,这个功能是不变的;但是validation 用来选model。

梯度下降 Gradient Descent

最容易实现的技巧:Adagrad

将每个参数的学习率除以其先前倒数的均方根

可以用泰勒级数更快的找到Loss

对于上式成立的充要条件:

泰勒级数成立 \Longleftrightarrow 红色圈圈范围足够小 \Longrightarrow η\eta和红色圈圈大小成正比 \Longrightarrow 进而得出学习率必须足够小,无穷小 \Longrightarrow 学习率η\eta足够小才能保证这里的Loss越来越小。

概率分类模型 Classification

分类可以用回归来完成吗?

比如我要分出接近1和接近-1两部分,但是数据集为{-1,-0.9,-1.1,1,1000,2333}

可以看出,1000和2333应该是归属于接近1这一部分的,但是用regression来做的话,这两个数据远大于1,偏离的太远了,是不正确的,导致最后训练的结果肯定是有问题的。

Ideal Alternative 理想的替代品

Function(Model):

x \Longrightarrow {g(x)>0Output=class1elseOutput=class2\begin{cases}g(x)>0 Output = class1 \\ else Output = class2 \end{cases}

Loss function:

L(f)=nδ(f(xn)y^n)L(f)=\sum_{n}\delta(f(x^n)\neq\hat{y}^n)

其中,不等号成立时,函数值为1,不成立时函数值为0

这样就没有微分了,所以可以用SVM、perceptron等其他方式来完成

逻辑回归Logistic regression

我的理解:我们通过在traning data上成立的公式,经过化简和定义,得到一个公式,把这个公式用于未知的数据上,用来推测出现的概率,这就是所谓的“逻辑”

比如:得到一个新的水属性的宝可梦的时候,它是杰尼龟的概率。

P(C1x)=P(xC1)P(C1)P(xC2)P(C2)P(xC2)P(C2)P(C_1|x)=\frac{P(x|C_1)P(C_1)}{P(x|C_2)P(C_2)P(x|C_2)P(C_2)}

上下同除以P(xC1)P(C1)P(x|C_1)P(C_1)并令z=P(xC1)P(C1)P(x|C_1)P(C_1)

得到P(C1x)=11+exp(z)P(C_1|x)=\frac{1}{1+exp(-z)}

z=lnP(xC1)P(C1)P(xC2)P(C2)=lnP(xC1)P(xC2)+lnP(C1)P(C2)=lnP(xC1)P(xC2)+N1N2z=ln\frac{P(x|C_1)P(C_1)}{P(x|C_2)P(C_2)}=ln\frac{P(x|C_1)}{P(x|C_2)}+ln\frac{P(C_1)}{P(C_2)}=ln\frac{P(x|C_1)}{P(x|C_2)}+\frac{N_1}{N_2}

机器学习初识 梯度下降&概率分类模型&逻辑回归

最后化简得

z=(μ1+μ2)TΣ1x12(μ1)T(Σ1)1μ1+12(μ2)T(Σ2)1μ2+lnN1N2z=(\mu^1+\mu^2)^T\Sigma^{-1}x-\frac{1}{2}(\mu^1)^T(\Sigma^1)^{-1}\mu^1+\frac{1}{2}(\mu^2)^T(\Sigma^2)^{-1}\mu^2+ln\frac{N_1}{N_2}

wT=(μ1+μ2)TΣ1b=12(μ1)T(Σ1)1μ1+12(μ2)T(Σ2)1μ2+lnN1N2 w^T=(\mu^1+\mu^2)^T\Sigma^{-1}\\b=-\frac{1}{2}(\mu^1)^T(\Sigma^1)^{-1}\mu^1+\frac{1}{2}(\mu^2)^T(\Sigma^2)^{-1}\mu^2+ln\frac{N_1}{N_2}

z=wTx+bP(C1x)=σ(wx+b)z=w^Tx+b\\P(C_1|x)=\sigma(w·x+b)

在生成模式中,我们假设N1,N2,μ1,μ2,ΣN_1,N_2,\mu^1,\mu^2,\Sigma

Then we have w and b

回来分类模型来看,我们想要找到Pw,b(C1x)P_{w,b}(C_1|x)

如果其值大于等于0.5,output C1C_1

Otherwise,output C2C_2

Pw,b(C1x)=Σ(z)z=wx+b=iwixi+bP_{w,b}(C_1|x)=\Sigma(z)\\z=w·x+b=\sum_{i}w_ix_i+b

Σ(z)\Sigma(z)是sigmoid函数,所以结果一定在0到1之间

//x属于C1的概率 如果算下来大于等于0.5,就说明属于C1

生成模型VS判别式模型

生成模型会进行“脑补”,他会有概率分布的假设,这样只需要较少的训练数据,同时更容易有自己的判断,对于noise来说更robust,可以从不同的来源估计先验和类相关概率。但也会导致:在训练数据中,明明在class1的一模一样的数据,让他进行判定的时候,可能会被归类于class2

逻辑回归拥有限制,比如无法对下面的情况进行分类:

机器学习初识 梯度下降&概率分类模型&逻辑回归

如果还坚持要用逻辑回归的话,可以使用特征提取(feature transformation)

【注:softmax的作用:能让大的算下来更大,小的算下来更小,总和加起来等于1】

机器学习初识 梯度下降&概率分类模型&逻辑回归

但是想找到一个好的特征变换 是很麻烦的