Logistic Regression 虽然被称为回归,但其实际上是分类模型,并常用于二分类。Logistic Regression 因其简单、可并行化、可解释强深受工业界喜爱。
Logistic 回归的本质是:假设数据服从这个分布,然后使用极大似然估计做参数的估计。
Logistic 分布是一种连续型的概率分布,其分布函数和密度函数分别为:
Logistic 分布是由其位置和尺度参数定义的连续分布。Logistic 分布的形状与正态分布的形状相似,但是 Logistic 分布的尾部更长,所以我们可以使用 Logistic 分布来建模比正态分布具有更长尾部和更高波峰的数据分布。在深度学习中常用到的 Sigmoid 函数就是 Logistic 的分布函数在
的特殊形式。
我们知道,线性回归的模型是求出输出特征向量Y和输入样本矩阵X之间的线性关系系数θθ,满足Y=Xθ。此时我们的Y是连续的,所以是回归模型。如果我们想要Y是离散的话,怎么办呢?一个可以想到的办法是,我们对于这个Y再做一次函数转换,变为g(Y)。如果我们令g(Y)的值在某个实数区间的时候是类别A,在另一个实数区间的时候是类别B,以此类推,就得到了一个分类模型。如果结果的类别只有两种,那么就是一个二元分类模型了。逻辑回归的出发点就是从这来的。
对线性回归的结果做一个在函数g上的转换,可以变化为逻辑回归。这个函数g在逻辑回归中我们一般取为sigmoid函数,形式如下:
它有一个非常好的性质,即当z趋于正无穷时,g(z)趋于1,而当z趋于负无穷时,g(z)趋于0,这非常适合于我们的分类概率模型。导数如下:
如果我们令g(z)g(z)中的z为:z=xθ,这样就得到了二元逻辑回归模型的一般形式:
其中x为样本输入,hθ(x)为模型输出,可以理解为某一分类的概率大小。而θ为分类模型的要求出的模型参数。对于模型输出hθ(x),我们让它和我们的二元样本输出y(假设为0和1)有这样的对应关系,如果hθ(x)>0.5 ,即xθ>0, 则y为1。如果hθ(x)<0.5,即xθ<0, 则y为0。y=0.5是临界情况,此时xθ=0为, 从逻辑回归模型本身无法确定分类。hθ(x)的值越小,而分类为0的的概率越高,反之,值越大的话分类为1的的概率越高。如果靠近临界点,则分类准确率会下降。
我们也可以将模型写成矩阵模式:
其中hθ(X)为模型输出,为 mx1的维度。X为样本特征矩阵,为mxn的维度。θ为分类的模型系数,为nx1的向量。
回顾下线性回归的损失函数,由于线性回归是连续的,所以可以使用模型误差的的平方和来定义损失函数。但是逻辑回归不是连续的,自然线性回归损失函数定义的经验就用不上了。不过我们可以用最大似然法来推导出我们的损失函数。
似然函数的代数表达式为(m为样本的个数):
对似然函数对数化取反的表达式,即损失函数表达式为:
矩阵表示为(E为全1向量):
对于二元逻辑回归的损失函数极小化,有比较多的方法,最常见的有梯度下降法,坐标轴下降法,等牛顿法等。
从而在梯度下降法中每一步向量θ的迭代公式如下(α为梯度下降法的步长):
逻辑回归也会面临过拟合问题,所以我们也要考虑正则化。常见的有L1正则化和L2正则化.
逻辑回归的L1正则化的损失函数表达式如下,相比普通的逻辑回归损失函数,增加了L1的范数做作为惩罚,超参数α作为惩罚系数,调节惩罚项的大小。
Li正则化损失函数表达式如下(其中||θ||1为θ的L1范数):
逻辑回归的L1正则化损失函数的优化方法常用的有坐标轴下降法和最小角回归法。
二元逻辑回归的L2正则化损失函数表达式如下(其中||θ||2为θ的L2范数):
逻辑回归的L2正则化损失函数的优化方法和普通的逻辑回归类似。
一种多元逻辑回归模型中认为某种类型为正值,其余为0值,这种方法为最常用的one-vs-rest,简称OvR.
另一种多元逻辑回归的方法是Many-vs-Many(MvM),它会选择一部分类别的样本和另一部分类别的样本来做逻辑回归二分类。最常用的是One-Vs-One(OvO)。OvO是MvM的特例。每次我们选择两类样本来做二元逻辑回归。
把z1,z2,z3 放到一个叫做Softmax的方程中,Softmax做的事情就是它们进行exponential(指数化),将exponential 的结果相加,再分别用 exponential 的结果除以相加的结果。原本z1,z2,z3可以是任何值,但做完Softmax之后输出会被限制住,都介于0到1之间,并且和是1。Softmax做事情就是对最大值进行强化。
输入x,属于类别1的几率是0.88,属于类别2的几率是0.12,属于类别3的几率是0。
Softmax的输出就是用来估计后验概率(Posterior Probability)
我们假设是K元分类模型,即样本输出y的取值为1,2,。。。,K,K元逻辑回归的概率分布如下:
一个逻辑回归的输入可以来源于其他逻辑回归的输出,这个逻辑回归的输出也可以是其他逻辑回归的输入。把每个逻辑回归称为一个 Neuron(神经元),把这些神经元连接起来的网络,就叫做 Neural Network(神经网络)。
我们都知道机器学习有三个step,对于deep learning其实也是3个步骤:
神经网络(Neural network)里面的节点,类似我们的神经元。
神经网络也可以有很多不同的连接方式,这样就会产生不同的结构(structure)在这个神经网络里面,我们有很多逻辑回归函数,其中每个逻辑回归都有自己的权重和自己的偏差,这些权重和偏差就是参数。 那这些神经元都是通过什么方式连接的呢?其实连接方式都是你手动去设计的。
概念:前馈(feedforward)也可以称为前向,从信号流向来理解就是输入信号进入网络后,信号流动是单向的,即信号从前一层流向后一层,一直到输出层,其中任意两层之间的连接并没有反馈(feedback),亦即信号没有从后一层又返回到前一层。
Deep = Many hidden layer
把隐藏层通过特征提取来替代原来的特征工程,这样在最后一个隐藏层输出的就是一组新的特征(相当于黑箱操作)而对于输出层,其实是把前面的隐藏层的输出当做输入(经过特征提取得到的一组最好的特征)然后通过一个多分类器(可以是softmax函数)得到最后的输出y。
对于模型的评估,我们一般采用损失函数来反应模型的好差,所以对于神经网络来说,我们采用交叉熵(cross entropy)函数来对y和y^的损失进行计算,接下来我们就是调整参数,让交叉熵越小越好。对于损失,我们不单单要计算一笔数据的,而是要计算整体所有训练数据的损失,然后把所有的训练数据的损失都加起来,得到一个总体损失L。接下来就是在function set里面找到一组函数能最小化这个总体损失L,或者是找一组神经网络的参数θ,来最小化总体损失L。
梯度下降来寻找最优函数与参数
Gradient Descent具体流程:θ是一组包含权重和偏差的参数集合,随机找一个初试值,接下来计算一下每个参数对应偏微分,得到的一个偏微分的集合∇L就是梯度,有了这些偏微分,我们就可以不断更新梯度得到新的参数,这样不断反复进行,就能得到一组最好的参数使得损失函数的值最小。
梯度下降法的基本思想可以类比为一个下山的过程。假设这样一个场景:一个人被困在山上,需要从山上下来(找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低。因此,下山的路径就无法确定,他必须利用自己周围的信息去找到下山的路径。这个时候,他就可以利用梯度下降算法来帮助自己下山。具体来说就是,以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着山的高度下降的地方走,同理,如果我们的目标是上山,也就是爬到山顶,那么此时应该是朝着最陡峭的方向往上走。然后每走一段距离,都反复采用同一个方法,最后就能成功的抵达山谷。如图所示:
可以看到,梯度下降是一个循环或递归的过程,每走一段距离都要执行相同的算法,每次走的距离在梯度下降法称之为学习率(learning rate),如果学习率过大,那么可能会错过最低点;相反,如果学习率过小,那么到达最低点的时间会很长,即函数收敛时间较慢。梯度下降算法的核心公式如下:
反向传播是为了减小误差,使得误差最小的权重矩阵的值便是神经网络最终的权重矩阵。对于误差的描述可以采用代价(误差)函数来描述,比如高中学的:
,其中y(x)是神经网络的预测值,label(x)是x对应的真实值,可以看出loss是关于权重矩阵的多元函数,当loss最小时W的取值,便是神经网络权重矩阵最终值。反向传播的核心算法是梯度下降算法,既然反向传播是为了使loss最小,使得loss收敛的最快。根据场论的知识,梯度的方向是函数值增长最快的方向,那么梯度的反方向便是函数值减少最快的方向。基于这一理论,便有了梯度下降法。
1.计算总误差