机器学习初识 梯度下降&概率分类模型&逻辑回归
基础概念
监督学习 :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
其中x是ferture,w是weight,b是bias
例:
y=b+wxcp
Setp2: Goodness of function
引入损失函数,输入一个函数,输出这个函数有多坏
L(f)=L(w,b)=n=1∑10(y^n−(b+w⋅xcpn))2
可以看到,这个式子中,n从1到10,代表10个例子,x和y是已知的,b和w可以看作未知的
接下来求最优的w和b,记作w∗和b∗ ,其所对应的f记作f∗
f∗=argminL(f)w∗,b∗=argminl(w,b)=argminn=1∑10(y^n−(b+w⋅xcpn))2
只要可微分,就可以用梯度下降来处理这个问题
Setp3:Gradient Descent
为什么用梯度下降法?因为暴力穷举法过于低效
① 随机取一个初始值w0
② 计算k=dwdL∣w=w0
如果k<0 就是negative的,左大右小的Loss 因此需要增加w
如果k>0 就是pastive的,左小右大的Loss 因此需要减小w
w1是下一个点,则从w0过渡到w1的式子可以写作:
w1=w0−ηdwdL∣w=w0
在线性回归上无需担心局部最优问题,即此时的梯度下降不会出现局部最优的情况。损失函数的图像一定是凹的
上面写的是一元的情况,那么如果有两个参数该怎么办,即回到最初的问题,我们要求w∗,b∗
① 随机取一个初始值w0,b0
② 计算∂w∂L∣w=w0,b=b0,∂b∂L∣w=w0,b=b0
得到位移
w1=w0−η∂w∂L∣w=w0,b=b0
b1=b0−η∂b∂L∣w=w0,b=b0
不断迭代,直到找到最优为止。
最后我们得到L(f)的结果,我们并不关心得到的这个结果的值,因为它是在已知数据上训练出啦的,我们需要关心的是它在new data上的应用情况
Selecting another model
为了使结果更加精确,可以引入二次型,三次型,甚至更高
但这里会出现一个问题,引入过高次,traning data肯定越来越精准,但testing data却越来越离谱,这种现象叫做[过度拟合 Over fitting]
Back to step1
还有可能因为没有考虑到一些隐藏因素,从而导致结果不准确或者错误。如果把寻找w∗和b∗的过程比作大海捞针,那么因为没有考虑到隐藏因素这一情况就可以比作“海没有选对”,因此根本不可能捞到针。这时候就需要重新定义Model了
Back to step2:Regularization
我们更新Loss函数
已知 y=b+∑wixi
则Loss函数为:L(f)=L(w,b)=∑n(y^n−(b+∑wixi))2+λ∑(wi)2
在后面加了一项,称之为正则化
可以看出,如果λ越大,为了使L更小,就会越多的考虑wi,wi越接近0,ƒ就越平滑。 wixi⇒ wi(xi+Δxi)
误差从哪儿来?
误差包括bias和variance
model越复杂、方差越大、bias越小
model越简单、方差越小、bias越大
因为越简单的model,可能压根就没有包含ƒ,所以不管怎么求f∗,或者求f=E[f∗]都=ƒ,而且差距还挺大,因为没有包含我们要找的目标。所以要让model复杂起来,高维是包含低维的。
但仍然要综合两个因素,寻找一个临界点得到最优解。
若error是因为bias过大,则是Underfitting 欠拟合;
若error是因为variance过大,则是overfitting 过拟合。
解决办法
若bias过大,则去重新设计model,即redesign
若variance过大,可以有两种办法
①引入更多的data 每次找f∗时让训练数据规模大一点
②正则化,即上面的方法,让Loss函数再加一项使获得的曲线更平滑但是因为调整了function,可能会导致bias增加 。造成这样的原因是:要找的ƒ可能本身不是平滑的,加了一项以后把真正的目标解给排除掉了
训练集和验证集
上面一直提到的训练集,其实可以更进一步划分为两部分,即训练数据和验证数据。其中Training Set用来训练Model,这个功能是不变的;但是validation 用来选model。
梯度下降 Gradient Descent
最容易实现的技巧:Adagrad
将每个参数的学习率除以其先前倒数的均方根
可以用泰勒级数更快的找到Loss
对于上式成立的充要条件:
泰勒级数成立 ⟺ 红色圈圈范围足够小 ⟹ η和红色圈圈大小成正比 ⟹ 进而得出学习率必须足够小,无穷小 ⟹ 学习率η足够小才能保证这里的Loss越来越小。
概率分类模型 Classification
分类可以用回归来完成吗?
比如我要分出接近1和接近-1两部分,但是数据集为{-1,-0.9,-1.1,1,1000,2333}
可以看出,1000和2333应该是归属于接近1这一部分的,但是用regression来做的话,这两个数据远大于1,偏离的太远了,是不正确的,导致最后训练的结果肯定是有问题的。
Ideal Alternative 理想的替代品
Function(Model):
x ⟹ {g(x)>0Output=class1elseOutput=class2
Loss function:
L(f)=n∑δ(f(xn)=y^n)
其中,不等号成立时,函数值为1,不成立时函数值为0
这样就没有微分了,所以可以用SVM、perceptron等其他方式来完成
逻辑回归Logistic regression
我的理解:我们通过在traning data上成立的公式,经过化简和定义,得到一个公式,把这个公式用于未知的数据上,用来推测出现的概率,这就是所谓的“逻辑”
比如:得到一个新的水属性的宝可梦的时候,它是杰尼龟的概率。
P(C1∣x)=P(x∣C2)P(C2)P(x∣C2)P(C2)P(x∣C1)P(C1)
上下同除以P(x∣C1)P(C1)并令z=P(x∣C1)P(C1)
得到P(C1∣x)=1+exp(−z)1
即z=lnP(x∣C2)P(C2)P(x∣C1)P(C1)=lnP(x∣C2)P(x∣C1)+lnP(C2)P(C1)=lnP(x∣C2)P(x∣C1)+N2N1
又
最后化简得
z=(μ1+μ2)TΣ−1x−21(μ1)T(Σ1)−1μ1+21(μ2)T(Σ2)−1μ2+lnN2N1
令wT=(μ1+μ2)TΣ−1b=−21(μ1)T(Σ1)−1μ1+21(μ2)T(Σ2)−1μ2+lnN2N1
得z=wTx+bP(C1∣x)=σ(w⋅x+b)
在生成模式中,我们假设N1,N2,μ1,μ2,Σ
Then we have w and b
回来分类模型来看,我们想要找到Pw,b(C1∣x)
如果其值大于等于0.5,output C1
Otherwise,output C2
Pw,b(C1∣x)=Σ(z)z=w⋅x+b=∑iwixi+b
Σ(z)是sigmoid函数,所以结果一定在0到1之间
//x属于C1的概率 如果算下来大于等于0.5,就说明属于C1
生成模型VS判别式模型
生成模型会进行“脑补”,他会有概率分布的假设,这样只需要较少的训练数据,同时更容易有自己的判断,对于noise来说更robust,可以从不同的来源估计先验和类相关概率。但也会导致:在训练数据中,明明在class1的一模一样的数据,让他进行判定的时候,可能会被归类于class2
逻辑回归拥有限制,比如无法对下面的情况进行分类:
如果还坚持要用逻辑回归的话,可以使用特征提取(feature transformation)
【注:softmax的作用:能让大的算下来更大,小的算下来更小,总和加起来等于1】
但是想找到一个好的特征变换 是很麻烦的