李宏毅ML笔记5: 对率回归

Logistic Regression

目录

回顾

找到函式集

评价函式好坏

找到最好的函式

对率回归与线性回归对比

对率回归用Square Error作损失函数

判别v.s. 生成

函数集相同参数结果不同

toy例子

多元分类

softmax

多元分类的过程

对率回归的限制

特征变换


回顾

找到函式集

在classification这一章节,知道了要找到东西其实是几率P(C1|x):

$$ P\left( C_{1} \middle| x \right) = \frac{P\left( x \middle| C_{1} \right)P\left( C_{1} \right)}{P\left( x \middle| C_{1} \right)P\left( C_{1} \right) + P\left( x \middle| C_{2} \right)P\left( C_{2} \right)} \\ If \ P(C_1 |x)>0.5, output: class 1\\ Otherwise, output: class 2 $$

如果用的概率分布是高斯分布, 则P可以代入σ, 为S型函数:

$$ P\left( C_{1} \middle| x \right) = \sigma\left( z \right) \\  \sigma\left( z \right)= \frac{1}{1 + exp\left( {- z} \right)} \\ z=  {w \cdot x + b}=\sum_i w_ix_i+b $$

注意: 西瓜书上看到的都是w^T*x,这里的w不加转置, 因为西瓜书是矩阵乘法, 这里是向量点乘. 向量点乘只需要两个向量元素个数一致

相关知识: 矩阵乘法与向量点乘的区别

https://blog.csdn.net/weixin_45643814/article/details/104514157

https://www.bilibili.com/video/BV1ci4y187rn

不同的参数w, b得到不同的函数, 函数集function set包含了不同的w, b.

参数分为2组:w和b. 输入为x1~xI. 把每个x_i*w_i+b就可得到z, 输出为P(C_1 |x)

整个这件事叫做Logistic Regression对率回归.

评价函式好坏

训练集有N笔数据,每一个x标注其对应class.

设Training data由posterior Probability P(C1|x)产生的(后置概率,某种意义上就是概率密度函数),而w和b就决定了这个posterior Probability.

计算一组w和b产生这N笔Training data的概率,利用极大似然估计.

似然函数只需要将每一个点产生的概率相乘即可,注意,这里假定是二元分类,P_2=1-P_1:

$$ L\left( {w,b} \right) = f_{w,b}\left( x^{1} \right)f_{w,b}\left( x^{2} \right)\left( {1 - f_{w,b}\left( x^{3} \right)} \right)\cdots f_{w,b}\left( x^{N} \right) $$

最好的w和b就是最有可能产生训练集数据的:

$$ w^{*},b^{*} = arg{\max\limits_{w,b}{L\left( {w,b} \right)}} = arg{\min\limits_{w,b}{- lnL\left( {w,b} \right)}} $$

代入似然函数L, 根据ln性质相乘变相加:

$$ - lnL\left( {w,b} \right) = - lnf_{w,b}\left( x^{1} \right) - lnf_{w,b}\left( x^{2} \right) - ln\left( {1 - f_{w,b}\left( x^{3} \right)} \right)\ldots $$

用0-1变量y hat表示类别标记, y hat=1, 属于类别1, y hat=0, 属于类别2, (类似于选择开关)可将两种情况写成一个式子:

$$ - \left\lbrack {{\hat{y}}^{1}lnf\left( x^{1} \right) + \left(1 - {\hat{y}}^{1} \right)ln\left({1 - f\left( x^{1} \right)} \right)} \right\rbrack - \left\lbrack {{\hat{y}}^{2}lnf\left( x^{2} \right)+ \left( {1 - {\hat{y}}^{2}} \right) ln\left({1 - f\left(x^{2} \right)} \right)} \right\rbrack\ldots $$

也就是对以下两个分布(假设均为Bernouli两点分布)做交叉熵. Distribution p:

$$ p\left( {x = 1} \right) = {\hat{y}}^{n}\\ p\left( {x = 0} \right) = {1 - \hat{y}}^{n} $$

Distribution q:

$$ q\left( {x = 1} \right) = f\left( x^{n} \right)\\ q\left( {x = 0} \right) = 1 - f\left( x^{n} \right) $$

交叉熵可衡量两个分布接近程度:

$$ H\left( {p,q} \right) = - {\sum_{x}{p\left( x \right)ln\left( {q\left( x \right)} \right)}} $$

代入似然函数可表示为:

$$ - lnL\left( {w,b} \right) = {\sum_{n}{- \left\lbrack {{\hat{y}}^{n}lnf_{w,b}\left( x^{n} \right) + \left( {1 - {\hat{y}}^{n}} \right) ln\left( {1 - f_{w,b}\left( x^{n} \right)} \right)} \right\rbrack}} $$

找到最好的函式

对损失函数做最小化minimize->梯度下降

lnL对w_i偏微分, 其中y^n为常数:

$$ \frac{\partial lnL\left( {w,b} \right)}{\partial w_{i}} = {\sum_{n}{- \left\lbrack {{\hat{y}}^{n}\frac{lnf_{w,b}\left( x^{n} \right)}{\partial w_{i}} + \left( {1 - {\hat{y}}^{n}} \right)\frac{ln\left( {1 - f_{w,b}\left( x^{n} \right)} \right)}{\partial w_{i}}} \right\rbrack}} $$

其中, 由于f(x)为σ关于z的函数, z为x的函数, 根据链式求导, 第一个偏微分项:

$$ \frac{\partial lnf_{w,b}\left( x \right)}{\partial w_{i}} = \frac{\partial lnf_{w,b}\left( x \right)}{\partial z}\frac{\partial z}{\partial w_{i}} $$

而其中z对w_i的偏微分:

$$ \frac{\partial z}{\partial w_{i}} = \frac{\partial{\sum_{i}{w_{i}x_{i} + b}}}{\partial w_{i}}{= x}_{i} $$其中lnf对z微分, 也就是lnσ对z微分.

$$ \frac{\partial ln\sigma\left( z \right)}{\partial z} = \frac{1}{\sigma\left( z \right)}\frac{\partial\sigma\left( z \right)}{\partial z} = \frac{1}{\sigma\left( z \right)}\sigma\left( z \right)\left( {1 - \sigma\left( z \right)} \right) \\ = \left( {1 - \sigma\left( z \right)} \right) $$

相关知识: sigmoid function的微分公式

$$ \frac{\partial\sigma\left( z \right)}{\partial z} = \sigma\left( z \right)\left( {1 - \sigma\left( z \right)} \right) $$

类似地, 第二个偏微分项也可拆成链式求导:

$$ \frac{\partial ln\left( {1 - f_{w,b}\left( x \right)} \right)}{\partial w_{i}} = \frac{\partial ln\left( {1 - f_{w,b}\left( x \right)} \right)}{\partial z}\frac{\partial z}{\partial w_{i}} $$

分别对两个因式求导:

$$ \frac{\partial z}{\partial w_{i}} = x_{i}\\ \frac{\partial ln\left( {1 - \sigma\left( z \right)} \right)}{\partial z} = - \frac{1}{1 - \sigma\left( z \right)}\frac{\partial\sigma\left( z \right)}{\partial z} = - \frac{1}{1 - \sigma\left( z \right)}\sigma\left( z \right)\left( {1 - \sigma\left( z \right)} \right) \\ = - \sigma\left( z \right) $$

将这两项代入lnL对w_i偏微分:

$$ \frac{\partial lnL\left( {w,b} \right)}{\partial w_{i}} = {\sum_{n}{- \left\lbrack {{\hat{y}}^{n}\left( {1 - f_{w,b}\left( x^{n} \right)} \right) x_{i}^{n} + \left( {1 - {\hat{y}}^{n}} \right)\left( - f_{w,b}\left( x^{n} \right) x_{i}^{n} \right)} \right\rbrack}} $$

将括号展开得:

$$ \frac{\partial lnL\left( {w,b} \right)}{\partial w_{i}} = {\sum_{n}{- \left\lbrack {{\hat{y}}^{n} - {\hat{y}}^{n}f_{w,b}\left( x^{n} \right) - f_{w,b}\left( x^{n} \right) + {\hat{y}}^{n}f_{w,b}\left( x^{n} \right)} \right\rbrack}}x_{i}^{n} \\ = {\sum_{n}{- \left( {{\hat{y}}^{n} - f_{w,b}\left( x^{n} \right)} \right)x_{i}^{n}}} $$

梯度下降的更新公式

$$ w_{i}\leftarrow w_{i} - \eta{\sum_{n}{- \left( {{\hat{y}}^{n} - f_{w,b}\left( x^{n} \right)} \right)x_{i}^{n}}} $$

更新步长决定于: 1. 学习率(调整参数) 2. x_i来自于data 3.y hat-f意义为真实值与f输出值距离(离目标越远, 步长越大)

对率回归与线性回归对比

对率回归通过Sigmoid Function, 输出一定介于0~1之间.

线性回归的输出可以是任何值

 

对率回归

线性回归

step1

找到函式集

 

$$ f_{w,b}\left( x \right) = \sigma\left( {{\sum_{i}{w_{i}x_{i}}} + b} \right) $$

通过Sigmoid Function, 输出一定介于0~1之间.

$$ f_{w,b}\left( x \right) = {\sum_{i}{w_{i}x_{i}}} + b $$

输出可以是任何值

step2

评价函式好坏

对于训练集(𝑥^𝑛,𝑦 hat^𝑛 )

𝑦 hat^𝑛: 1-class 1, 0-class 2

$$ L\left( f \right) = {\sum_{n}{l\left( {f\left( x^{n} \right),{\hat{y}}^{n}} \right)}} \\=\sum_{n} - \left\lbrack {{\hat{y}}^{n}lnf\left( x^{n} \right) + \left( {1 - {\hat{y}}^{n}} \right) ln\left( {1 - f\left( x^{n} \right)} \right)} \right\rbrack $$

损失函数为所有样本点的output(即f)和实际target(y hat)在Bernoulli distribution(两点分布)下的交叉熵总和

对于训练集(𝑥^𝑛,𝑦 hat^𝑛 )

𝑦 hat^𝑛任意实数

$$ L\left( f \right) = \frac{1}{2}{\sum_{n}\left( {f\left( x^{n} \right) - {\hat{y}}^{n}} \right)^{2}} $$

损失函数为f输出值与真实值的方差

step3

找到最好函式

update方式一模一样

$$ \left. w_{i}\leftarrow w_{i} - \eta{\sum_{n}{- \left( {{\hat{y}}^{n} - f_{w,b}\left( x^{n} \right)} \right)x_{i}^{n}}} \right. $$

$$ \left. w_{i}\leftarrow w_{i} - \eta{\sum_{n}{- \left( {{\hat{y}}^{n} - f_{w,b}\left( x^{n} \right)} \right)x_{i}^{n}}} \right. $$

对率回归用Square Error作损失函数

为什么对率回归不能用Square Error方差作为损失函数, 尝试该方法重做机器学习三步骤.

步骤1:

$$ f_{w,b}\left( x \right) = \sigma\left( {{\sum_{i}{w_{i}x_{i}}} + b} \right) $$

步骤2:

$$ L\left( f \right) = \frac{1}{2}{\sum_{n}\left( {f_{w,b}\left( x^{n} \right) - {\hat{y}}^{n}} \right)^{2}} $$

步骤3:

找最优解, 对w_i偏微分:

$$ \frac{\partial~\left( f_{w,b}\text{(}\text{x}\text{)}\text{-}\hat{y} \right)^{2}~}{\partial w_{i}} = 2\left( {f_{w,b}\left( x \right) - \hat{y}} \right)\frac{\partial f_{w,b}\left( x \right)}{\partial z}\frac{\partial z}{\partial w_{i}} \\ = 2\left( {f_{w,b}\left( x \right) - \hat{y}} \right)\cdot f_{w,b}\left( x \right)\left( {1 - f_{w,b}\left( x \right)} \right)\cdot x_{i} $$

可以用梯度下降更新参数, 根据该式, 当f输出(为0或1)与真实值距离极近, 与距离极远时, 更新步长都接近0.

当真实值𝑦 hat^𝑛=1:

$$ If~f_{w,b}\left( x^{n} \right) = 1\left( close~to~target \right),{{\partial L}/{\partial w_{i}}} = 0\\ If~f_{w,b}\left( x^{n} \right) = 0\left( far~from~target \right),{{\partial L}/{\partial w_{i}}} = 0 $$

当真实值𝑦 hat^𝑛=0:

$$ If~f_{w,b}\left( x^{n} \right) = 1\left( far~from~target \right),{{\partial L}/{\partial w_{i}}} = 0\\ If~f_{w,b}\left( x^{n} \right) = 0\left( close~to~target \right),{{\partial L}/{\partial w_{i}}} = 0 $$

交叉熵与Square Error损失对比:

利用交叉熵时, 差距越大, 更新增量越大. 用Square Error时很卡, 距离目标很远时移动的速度非常慢.

判别v.s. 生成

函数集相同参数结果不同

Logistic Regression称为discriminative判别模型的方法;Gaussian描述后验概率称为Generative生成式模型的方法.

两者model(function set)一样(当共用协方差矩阵), model为:

$$ P\left( C_{1} \middle| x \right) = \sigma\left( {w \cdot x + b} \right) $$

如果用对率回归,梯度下降直接找出b和w;如果用生成式模型,先算𝜇^1, 𝜇^2, Σ^(−1),然后代入b和w(类似于用公式算出解析解):

$$ w^{T} = \left( {\mu^{1} - \mu^{2}} \right)^{T}\Sigma^{- 1},\\ b = - \frac{1}{2}\left( \mu^{1} \right)^{T}\left( \Sigma^{1} \right)^{- 1}\mu^{1} + \frac{1}{2}\left( \mu^{2} \right)^{T}\left( \Sigma^{2} \right)^{- 1}\mu^{2} + ln\frac{N_{1}}{N_{2}} $$

这两种方法function set同,得到b和w不同,是由于做了不同的假设,通过训练集找出的参数不同.

对率回归没有对概率分布做任何实质性的假设(推导过程中的假设只是便于理解和计算,对实际结果没有影响). 生成式模型假设高斯分布, 朴素贝叶斯假设在相互独立.

Discriminative的方法常常比Generative的方法表现得更好

toy例子

共两个类别,训练集中:每一笔data有两个feature,总共有1+4+4+4=13笔data.

其中有一个样本中, 两个feature都是1,其标记为类别1.

测试集中, 两个feature都是1, 用naive bayes的方法(朴素贝叶斯假设所有的feature相互独立)计算分类, 联立以下两式:

$$ P\left( x \middle| C_{i} \right) = P\left( x_{1} \middle| C_{i} \right)P\left( x_{2} \middle| C_{i} \right)\\ P\left( C_{1} \middle| x \right) = \frac{P\left( x \middle| C_{1} \right)P\left( C_{1} \right)}{P\left( x \middle| C_{1} \right)P\left( C_{1} \right) + P\left( x \middle| C_{2} \right)P\left( C_{2} \right)} $$

代入各因子值:

$$ P\left( C_{1} \right) = \frac{1}{13},P\left( C_{2} \right) = \frac{12}{13}\\ P\left( x_{1} = 1 \middle| C_{1} \right) = 1,P\left( x_{2} = 1 \middle| C_{1} \right) = 1\\ P\left( x_{1} = 1 \middle| C_{2} \right) = \frac{1}{3},P\left( x_{2} = 1 \middle| C_{2} \right) = \frac{1}{3} $$

得𝑃(𝐶_1 |𝑥)<0.5, 原因:

1. 正负样本不均匀, 导致先验概率P(C1)太小, 影响了最终结果.

2. 但是对朴素贝叶斯来说,不考虑不同维度之间的correlation,在dimension相互独立的前提下,认为class 2没有抽出都是1的样本,是因为抽样数量不够多,如果够多,认为class 2观察到都是1的data的可能性会比class 1要大. ( 有脑补, 做了naive bayes的假设 )

Generative model和discriminative model的差别: 生成式模型假设你的data来自于某个概率模型;判别模型完全不作任何假设.

通常认为判别模型更好. 脑补不是一件好事,强加了一些它没有的属性.

生成式模型优势:

1.有概率分布的假设. 需要数据量更少, 噪声影响小.

data很少时,脑补也是有用的,判别模型十分依赖于数据,当data数量不足或是data本身的label就有一些问题(噪声),那Generative model做一些脑补和假设,反而可以把data的不足或是有问题部分的影响降到最低.

2. Priors(先验)和class-dependent probabilities(类条件概率)这两项可以来自不同来源

判别模型是直接假设一个概率分布(model), 然后找参数. 生成式模型是拆成Priors和class-dependent probabilities这两项. 则这两项可以来自不同来源.

语音辨识为例(神经网络), 用discriminative的方法,但整个辨识系统是Generative的system.先验概率是某一句话被说出来的几率,而想要estimate某一句话被说出来的几率并不需要有声音的data,从互联网上爬取大量文字,就可以计算出某一段文字出现的几率. class-dependent的部分才需要声音和文字的配合.

多元分类

Multi-class Classification

多元分类问题原理的推导过程与二元分类基本一致, 接下来只讲过程, 不讲原理(原理可参照Bishop的教科书, 简称prml).

以三个类别C1, C2, C3为例:每一个类别都有自己的weight和bias,这里w1, w2, w3分别代表三个vector,b1, b2, b3分别代表三个const,输入的向量x是要分类的对象. 输出z1, z2, z3(可以为任意值).

$$ C1:~w^{1},b_{1}~z_{1} = w^{1} \cdot x + b_{1}\\ C2:~w^{2},b_{2}~z_{2} = w^{2} \cdot x + b_{2}\\ C3:~w^{3},b_{3}~z_{3} = w^{3} \cdot x + b_{3} $$

softmax

softmax使最大值辨识度更高, 可用来估计后验概率. 取exponential会使大的值和小的值之间的差距被拉得更开,也就是强化大的值.

把z1, z2, z3放入一个softmax的function.

1. 取exponential,得到e^(z1), e^(z2), e^(z3)

2. 以上三个值求和,得到total sum

3. 这三项分别除以total sum (归一化normalization),得到z1, z2, z3

输出值y的范围较z发生变化:

1. y_i>0, 因为指数e^z>0.

2. y_i<1且各类y_i之和为1, 这是归一化的效果.

也即:

$$ 1 > y_{i} > 0\\ {\sum_{i}{y_{i} = 1}} $$

所以softmax的输出可以估计后验概率(posterior probability):

$$ 𝑦_𝑖=𝑃(𝐶_𝑖 |𝑥) $$

(这个softmax的function可以通过共用协方差的高斯分布/或信息论/或Maximum entropy推导可得)

多元分类的过程

input x经过三个式子分别生成z1, z2, z3,经过softmax得输出y1, y2, y3,它们可作为这三个类别的后验概率. 由于其累加和为1,可以合起来当做一个概率分布y.训练时需要有target: y hat,因为是三个类别,之前输出y是三维的,对应的target y hat也是三维的y1 hat, y2 hat, y3 hat.

要做最小化的对象是y的概率分布, 计算y与y hat的交叉熵:

$$ - {\sum_{i = 1}^{3}{{\hat{y}}_{i}lny_{i}}} $$

要计算交叉熵,target 也必须是概率分布. 离散值(类别1, 2, 3)无序, 所以不能之间使用1,2,3作为class的区分(会导致默认1与2比较接近),使用one-hot编码的方式:

$$ If~x~ \in ~class~1,\hat{y} = \begin{bmatrix} 1 \\ 0 \\ 0 \\ \end{bmatrix}\\ If~x~ \in ~class~2,\hat{y} =  \begin{bmatrix} 0 \\ 1 \\ 0 \\ \end{bmatrix};If~x~ \in ~class~3,\hat{y} =  \begin{bmatrix} 0 \\ 0 \\ 1 \\ \end{bmatrix}  $$

同二元分类一样,多元分类问题也是通过极大似然估计法得到output target 之间的交叉熵表达式的.

对率回归的限制

下例的训练集无法用对率回归进行分类:

Input Feature

Label

x1

x2

0

0

Class 2

0

1

Class 1

1

0

Class 1

1

1

Class 2

即:

因为对率回归在两个class之间的boundary就是一条直线,但是在该平面上无论怎么画直线都不可能把图中的两个class分隔开来.

特征变换

Feature Transformation类似坐标变换, 核函数, 非线性层的多层感知机(联系西瓜书习题3.6)

如果坚持用对率回归,可尝试Feature Transformation,转化特征找一个比较好的feature space,让对率回归能够处理.

如何做特征变换是heristic and ad hoc(启发式和临时性)的.

令x1'为到原点的距离,x2'为到(1, 1)之间的距离,重新映射之后(红色两个点重合)对率回归可划分开:

但合适的特征变换可能很难找到(花太多力气就不是机器学习, 变成人脑学习了).

用机器自己产生Transformation, 让很多对率回归 cascade(连接)起来.

输入两个特征x1, x2. 第一个对率回归, x1*weight输出z1, z1通过sigmoid function得到x1'看作第一维的变换. 第二个对率回归, x1*weight输出z2, z2通过sigmoid function得到x2'看作第二维的变换.

在这个新的feature space上,利用x1', x2', 类别1, 2可用一条直线分开. 最后接另外一个对率回归模型:

因为对率回归两个类的分界线是直线, 可以把特征值转化成该点到某直线的距离.

从这个例子可以找到, 某个对率回归的输出, 可以是另一个对率回归的输入.

把每个对率回归叫做一个neuron(神经元),串起来所形成的network,就叫做Neural Network,就是类神经网络, Deep Learning. 换了一个名字整个就潮起来了.

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值