李宏毅深度学习笔记1-6Logistic Regression

逻辑回归的三步以及和线性回归的对比

1、函数集function set

寻找P(w,b)(C1x)P_{(w,b)}(C_1|x):当代入数据得P(w,b)(C1x)0.5P_{(w,b)}(C_1|x)\ge0.5,则输出C1C_1,否则输出C2C_2,其中:
P(w,b)(C1x)=σ(z)P_{(w,b)}(C_1|x)=\sigma(z)
σ(z)=11+exp(z)\sigma(z)=\frac{1}{1+exp(-z)}
z=wx+bz=w\centerdot x+b
对比函数集和输出:逻辑回归的输出在0到1之间,线性回归的输出可以是任何值

2、定义损失函数

信息量:通过事件发生的概率可以得出的事件中蕴含的有价值的信息量,计算的公式为
I(x0)=ln(P(x0))I(x_0)=-ln(P(x_0))
其中,P(x0))P(x_0))为事件发生的概率
:所有信息量的期望
H(x)=i=1nP(xi)ln(P(xi))H(x)=-\sum_{i=1}^n P(x_i)ln(P(x_i))
而对于0-1分布上式则简化为
H(x)=P(x)ln(P(x))(1P(x))ln(P(x))H(x)=-P(x)ln(P(x))-(1-P(x))ln(P(x))
相对熵(KL散度):相对熵又称KL散度,如果我们对于同一个随机变量 x 有两个单独的概率分布 P(x) 和 Q(x),我们可以使用 KL 散度(Kullback-Leibler (KL) divergence)来衡量这两个分布的差异。
相对熵DKL(P‖Q)的定义:如果用P来描述目标问题,而不是用Q来描述目标问题,得到的信息增量。
在机器学习中,P往往用来表示样本的真实分布,Q用来表示模型所预测的分布,显然Q的信息量与真实分布是有差异的,需要额外的一些“信息增量”才能达到和P一样完美的描述。因此如果Q通过反复训练,这种“信息增量”减小至0,Q和P就等价了。
DKL(PQ)=i=1nP(xi)ln(P(xi)Q(xi))DKL(P||Q)=\sum_{i=1}^n P(x_i)ln(\frac{P(x_i)}{Q(x_i)})
DKL的值越小,表示q分布和p分布越接近
交叉熵:将相对熵的公式化简可得
DKL(PQ)=H(P(x))[i=1nP(xi)ln(Q(xi)]DKL(P||Q)=-H(P(x))-[\sum_{i=1}^n P(x_i)ln(Q(x_i)]
其中-H(P(x))是不变的,因此可以用后面的部分衡量P和Q的差异,而后面部分的就叫做交叉熵
因此对于二分类的问题可以用以下的交叉熵作为Loss函数
李宏毅深度学习笔记1-6Logistic Regression
y^n=1\hat{y}^n=1代表是C1C_1:意思不是训练集中C1C_1的概率是1,而是当我们在C1C_1中拿到一个features为x的数据时,我的模型给出他是C1C_1的概率应该尽可能地接近1,反之从C2C_2拿出一个数据,结果应该接近0,这样我们才会认为这个模型是比较合适的
比较损失函数:线性回归通过差的平方作为Loss函数,逻辑回归使用交叉熵作为Loss函数

3、寻找最好的函数

逻辑回归的的梯度下降公式
李宏毅深度学习笔记1-6Logistic Regression
对比:逻辑回归和线性回归的梯度下降算法是一样的
李宏毅深度学习笔记1-6Logistic Regression
为什么分类问题的Loss不用square error:一个图就明白了
李宏毅深度学习笔记1-6Logistic Regression
例如,在图像分类的例子里,如果y(i)=3,那么我们只需要y3y_3比其他两个预测值y1y_1y2y_2大就行了。即使y3y_3值为0.6,不管其他两个预测值为多少,类别预测均正确。而平方损失则过于严格,虽然两者都有同样正确的分类预测结果。
学习的时候这里遇到的问题
1、为啥梯度下降算法一样,损失函数却不一样呢?
因为逻辑回归的预测值和真实值都是很小的,如果Loss一样的话,梯度下降就不一样了,就会像上图下面那个Loss一样,下降的非常慢
2、那为啥不直接用那个z函数咧,还得先用上sigmoid函数,再求交叉熵多麻烦呀?(这个 问题比较愚蠢)
因为训练数据的便签就是0或1啊,Z是可以输出很多很大的值了,但是训练数据的label你咋给呢,总不能人为的设一个,那设多大呢,Z的输出也是不确定的呀,这样就没法做了。逻辑回归就是根据概率生成模型推导出来的,因此这个模型是可行的,还是得从正面去思考

2、比较discriminative和Generative

discriminative是判别模型
Generative是生成模型
如果是逻辑回归,就可以直接用梯度下降法找出w和b;如果是概率生成模型,像上篇那样求出 μ1,μ2,Σ1μ^1,μ^2,\Sigma^{-1} (即协方差矩阵的逆),然后就能算出w和b。
用逻辑回归和概率生成模型找出来的w和b是不一样的,判别模型变现更好:原因是这样,生成模型对于多种因素不会合并考量,比如有两个因素在类别1中不会同时成立,但这时候生成模型会因为因素一类别1成立过,因素二在类别1成立过,而认为两者同时成立也是有可能的,而如果训练数据得类别1的数据比重很大,就会放大这种可能性。简单的讲生成模型可以脑补出一些不存在的情况。而这种不存在的情况可能真的是存在的只不过在训练数据中没有体现而已。
生成方法的优势
1)训练集数据量很小的时候:因为判别方法没有做任何假设,就是看着训练集来计算,训练集数量越来越大的时候,error会越小。而生成方法会自己脑补,受到数据量的影响比较小。
2)对于噪声数据有更好的鲁棒性(robust): 先验和类相关的概率可以从不同的来源估计。比如语音识别,可能直观会认为现在的语音识别大都使用神经网络来进行处理,是判别方法,但事实上整个语音识别是 Generative 的方法,DNN只是其中的一块而已;因为还是需要算一个先验概率,就是某句话被说出来的概率,而估计某句话被说出来的概率不需要声音数据,只需要爬很多的句子,就能计算某句话出现的几率

3、多类别分类Softmax

假设有3个类别,每个都有自己的weight和bias
z1,z2,z3z_1,z_2,z_3 放到一个叫做Softmax的方程中,Softmax做的事情就是它们进行exponential(指数化),将exponential 的结果相加,再分别用 exponential 的结果除以相加的结果。原本z1,z2,z3z1,z2,z3可以是任何值,但做完Softmax之后输出会被限制住,都介于0到1之间,并且和是1。
Softmax的作用就是对最大值进行强化
逻辑回归的限制
李宏毅深度学习笔记1-6Logistic Regression
对于上图的例子,我们无法找出一条直线将两个类别分开,而增加再多的data也无济于事
解决方法:特征转换,特征转换的方式很多,举例x1x_1转化为点到 (0,0) 点的距离,x2x_2转化为点到(1,1)点的距离。然后问题就转化下图,此时就可以处理了。但是实际中并不是总能轻易的找到好的特征转换的方法。
李宏毅深度学习笔记1-6Logistic Regression
级联逻辑回归模型
可以将很多的逻辑回归接到一起,就可以进行特征转换。比如上图就用两个逻辑回归 对z1,z2z_1,z_2来进行特征转换,然后对于 x1,x2x1^{'},x2^{'},再用一个逻辑回归来进行分类。
李宏毅深度学习笔记1-6Logistic Regression
一个逻辑回归的输入可以来源于其他逻辑回归的输出,这个逻辑回归的输出也可以是其他逻辑回归的输入。把每个逻辑回归称为一个 Neuron(神经元),把这些神经元连接起来的网络,就叫做 Neural Network(神经网络)