| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> 从零实现深度学习框架——逻辑回归简介 -> 正文阅读 |
|
[Python知识库]从零实现深度学习框架——逻辑回归简介 |
引言
本文对逻辑回归的原理进行简单的介绍,包含公式推导。逻辑回归是可以作为分类任务的基准,也是神经网络的基石。一个神经网络可以看成是一系列的逻辑回归组成。所以掌握逻辑回归就相当重要。 回归与分类我们前面学习的线性回归属于回归问题,今天介绍的逻辑回归属于分类问题。 回归:预测一个连续值; 分类:预测一个离散值; 逻辑回归虽然名字中包含回归,实际上处理的是分类问题,为啥名字这么奇怪呢,有历史原因,这里就不深究了。 逻辑回归用于处理二分类问题,所谓二分类问题,就是分类的类别只有两个的问题。比如判断邮件是否为垃圾、情绪分析中的情绪是正向的还是负向的等。 那么逻辑回归是如何处理二分类问题的呢?答案就是通过Sigmoid函数。 机器学习分类器的核心组件逻辑回归是一种基于监督学习的分类器。机器学习分类器需要一个训练集,包含 m m m个输入/输出对 ( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i))。一个分类机器学习系统有四个组件:
Sigmoid函数我们先来看下输入的表示,通常我们有很多个输入样本。对于第 i i i个样本 x ( i ) x^{(i)} x(i),可以表示为特征向量 [ x 1 ( i ) , x 2 ( i ) , ? ? , x n ( i ) ] [x_1^{(i)},x_2^{(i)},\cdots,x_n^{(i)}] [x1(i)?,x2(i)?,?,xn(i)?],这里假设有 n n n?个特征。 考虑一个输入样本 x x x,表示为特征向量 [ x 1 , x 2 , ? ? , x n ] [x_1,x_2,\cdots,x_n] [x1?,x2?,?,xn?],输出 y y y可能是 1 1 1或 0 0 0,其中 1 1 1表示属于某个类别的话,那么 0 0 0就表示不属于那个类别。 逻辑回归从一个训练集中学习权重向量和一个偏置。每个权重 w i w_i wi?与输入样本中的一个特征 x i x_i xi?绑定,最后加上偏置项 b b b。权重和偏置项都是实数。 为了判断类别,首先让每个特征乘上对应的权重,然后加上
b
b
b,得到一个实数
z
z
z,表示属于该类别的依据。 这个函数就是Sigmoid函数,记为 σ \sigma σ,也称为逻辑函数。 它的公式如下: 它的函数图像如下: Sigmoid函数的优点是:它可以将任意实数压缩到 [ 0 , 1 ] [0,1] [0,1]之间,这刚好符合概率的定义。同时它是可导的。 为了让Sigmoid函数的输出刚好是一个概率,我们要确保
P
(
y
=
1
)
+
P
(
y
=
0
)
=
1
P(y=1)+P(y=0)=1
P(y=1)+P(y=0)=1。我们来看是否具有这种性质: 决策边界给定输入 x x x,我们已经知道了如何取计算属于类别 y y y的概率 P ( y = 1 ∣ x ) P(y=1|x) P(y=1∣x)。 但我们如何判断
x
x
x是否属于类别
y
y
y呢?直观地,如果概率
P
(
y
=
1
∣
x
)
>
0.5
P(y=1|x) > 0.5
P(y=1∣x)>0.5,我们就说它属于该类别,否则不属于该类别。那么
0.5
0.5
0.5就是决策边界。 逻辑回归中的损失函数我们知道每个样本 x x x对应的正确标签 y y y。根据公式 ( 4 ) (4) (4)计算的是对真实 y y y的估计 y ^ \hat y y^?,我们想让估计 y ^ \hat y y^?和真实 y y y越接近越好。这里的“接近”衡量的是距离,我们称这种距离为损失(loss)或者代价(cost)。计算损失或代价的函数为损失函数或代价函数。 给定样本
x
x
x,我们需要一个损失函数来衡量类器的输出(
y
^
=
σ
(
w
?
x
+
b
)
\hat y= \sigma(w \cdot x + b)
y^?=σ(w?x+b))与真实输出
y
(
0
或
1
)
y(0或1)
y(0或1)有多近。可以记为: 对于单个样本
x
x
x,我们希望学到权重能最大化正确类别概率
p
(
y
∣
x
)
p(y|x)
p(y∣x)。由于只有两个离散的输出(0或1),这是一个伯努利分布,我们可以将分类器为一个样本产生的概率
p
(
y
∣
x
)
p(y|x)
p(y∣x)表示为如下: 我们把等式两端取对数,取对数并不会改变单调性: y ^ \hat y y^?的负对数(真实 y = 1 y=1 y=1)或 1 ? y ^ 1 - \hat y 1?y^?的负对数(真实 y = 0 y=0 y=0?)是一个方便的损失指标,因为它可以是从0( ? log ? 1 = 0 -\log 1 =0 ?log1=0,代表没有损失)到无穷大( ? log ? 0 = ∞ - \log 0 = \infty ?log0=∞?)。该损失函数也确保正确答案的概率最大化,错误答案的概率最小化;由于它们之和等于1,正确答案概率的任何增加都是以减少错误答案为代价的。 梯度下降使用梯度下降的目的是找到最优的权重:最小化损失函数。在下面的公式中,我们看到损失函数
L
L
L由权重参数化的,我们将在机器学习中将其称为
θ
\theta
θ(在逻辑回归中
θ
=
w
,
b
\theta = w,b
θ=w,b)。所以目标是找到权重集能最小化损失函数,平均所有的样本就是: 对于逻辑回归,损失函数是一个凸函数,即只有一个最小值,所以梯度下降能保证从任意点都能达到最小值。而多层神经网络的损失函数时非凸的,可能受困于局部极小值。 在一个真实的逻辑回归中,参数向量 w w w的元素个数可能很多,即每个特征 x i x_i xi?都有对应的权重 w i w_i wi?。对于 w w w中的每个维度/变量 w i w_i wi?(加上偏置 b b b),梯度将告诉我们该变量的斜率的部分。在每个维度 w i w_i wi?,我们描述斜率为损失函数的偏导 ? ? w \frac{\partial}{\partial w} ?w??。本质上我们想知道:在变量 w i w_i wi?上的一个小改变会影响总损失函数 L L L多少? 因此,在形式上,多变量函数 f f f的梯度是一个向量,其中每个元素都表示 f f f相对于对应变量的偏导。我们将使用 ? \nabla ?来指梯度,并将 y ^ \hat y y^?表示为 f ( x ; θ ) f(x;\theta) f(x;θ):
?
L
(
f
(
x
;
θ
)
,
y
)
=
[
?
?
w
1
L
(
f
(
x
;
θ
)
,
y
)
?
?
w
2
L
(
f
(
x
;
θ
)
,
y
)
?
?
?
w
n
L
(
f
(
x
;
θ
)
,
y
)
?
?
b
L
(
f
(
x
;
θ
)
,
y
)
]
(13)
\nabla L(f(x;\theta),y) = \begin{bmatrix} \frac{\partial}{\partial w_1}L(f(x;\theta),y) \\ \frac{\partial}{\partial w_2}L(f(x;\theta),y) \\ \vdots\\ \frac{\partial}{\partial w_n}L(f(x;\theta),y) \\ \frac{\partial}{\partial b}L(f(x;\theta),y) \end{bmatrix} \tag{13}
?L(f(x;θ),y)=?????????w1???L(f(x;θ),y)?w2???L(f(x;θ),y)??wn???L(f(x;θ),y)?b??L(f(x;θ),y)?????????(13) 逻辑回归的梯度为了更新参数
θ
\theta
θ,我们需要梯度
?
L
(
f
(
x
;
θ
)
,
y
)
\nabla L(f(x;\theta),y)
?L(f(x;θ),y)?的定义,我们知道逻辑回归的交叉熵损失函数为: 要求上式对某个参数的导数,我们回顾一下: 我们知道, σ ( z ) = 1 1 + e ? z \sigma(z) = \frac{1}{1+ e^{-z}} σ(z)=1+e?z1?。我们先计算 ? σ ( z ) ? z \frac{\partial \sigma(z)}{\partial z} ?z?σ(z)?,令 u = 1 , v = 1 + e ? z u=1,v=1+e^{-z} u=1,v=1+e?z: ? σ ( z ) ? z = ( 1 1 + e ? z ) ′ = 0 × ( 1 + e ? z ) ? 1 × ( 1 + e ? z ) ′ ( 1 + e ? z ) 2 = ? ( ? e ? z ) ( 1 + e ? z ) 2 = 1 + e ? z ? 1 ( 1 + e ? z ) 2 = 1 1 + e ? z ? 1 ( 1 + e ? z ) 2 = 1 1 + e ? z ( 1 ? 1 1 + e ? z ) = σ ( z ) ( 1 ? σ ( z ) ) \begin{aligned} \frac{\partial \sigma(z)}{\partial z} &= (\frac{1}{1 + e^{-z}})^\prime \\ &= \frac{0 \times (1+e^{-z}) - 1\times (1+e^{-z})^\prime}{(1 + e^{-z})^2} \\ &= \frac{- (-e^{-z})}{(1+e^{-z})^2} \\ &= \frac{1 + e^{-z} - 1}{(1+e^{-z})^2} \\ &= \frac{1}{1 + e^{-z}} - \frac{1}{(1 + e^{-z})^2} \\ &= \frac{1}{1 + e^{-z}} \left( 1 - \frac{1}{1 + e^{-z}} \right) \\ &= \sigma(z)(1 - \sigma(z)) \end{aligned} ?z?σ(z)??=(1+e?z1?)′=(1+e?z)20×(1+e?z)?1×(1+e?z)′?=(1+e?z)2?(?e?z)?=(1+e?z)21+e?z?1?=1+e?z1??(1+e?z)21?=1+e?z1?(1?1+e?z1?)=σ(z)(1?σ(z))? 我们计算损失函数对某个权重 w j w_j wj?的梯度:
?
L
C
E
?
w
j
=
?
?
w
j
?
[
y
log
?
σ
(
w
?
x
+
b
)
+
(
1
?
y
)
log
?
(
1
?
σ
(
w
?
x
+
b
)
)
]
=
?
[
?
?
w
j
y
log
?
σ
(
w
?
x
+
b
)
+
?
?
w
j
(
1
?
y
)
log
?
(
1
?
σ
(
w
?
x
+
b
)
)
]
=
?
y
σ
(
w
?
x
+
b
)
?
w
j
σ
(
w
?
x
+
b
)
?
1
?
y
1
?
σ
(
w
?
x
+
b
)
?
w
j
(
1
?
σ
(
w
?
x
+
b
)
)
=
?
y
σ
(
w
?
x
+
b
)
?
w
j
σ
(
w
?
x
+
b
)
?
1
?
y
1
?
σ
(
w
?
x
+
b
)
?
w
j
?
σ
(
w
?
x
+
b
)
=
[
1
?
y
1
?
σ
(
w
?
x
+
b
)
?
y
σ
(
w
?
x
+
b
)
]
?
w
j
σ
(
w
?
x
+
b
)
=
[
σ
(
w
?
x
+
b
)
(
1
?
y
)
?
y
[
1
?
σ
(
w
?
x
+
b
)
]
σ
(
w
?
x
+
b
)
[
1
?
σ
(
w
?
x
+
b
)
]
]
?
w
j
σ
(
w
?
x
+
b
)
=
[
σ
(
w
?
x
+
b
)
?
y
σ
(
w
?
x
+
b
)
[
1
?
σ
(
w
?
x
+
b
)
]
]
?
w
j
σ
(
w
?
x
+
b
)
=
[
σ
(
w
?
x
+
b
)
?
y
σ
(
w
?
x
+
b
)
[
1
?
σ
(
w
?
x
+
b
)
]
]
σ
(
w
?
x
+
b
)
[
1
?
σ
(
w
?
x
+
b
)
]
?
(
w
?
x
+
b
)
?
w
j
=
[
σ
(
w
?
x
+
b
)
?
y
σ
(
w
?
x
+
b
)
[
1
?
σ
(
w
?
x
+
b
)
]
]
σ
(
w
?
x
+
b
)
[
1
?
σ
(
w
?
x
+
b
)
]
x
j
=
[
σ
(
w
?
x
+
b
)
?
y
]
x
j
=
(
y
^
?
y
)
x
j
(15)
\begin{aligned} \frac{\partial L_{CE}}{\partial w_j} &=\frac{\partial }{\partial w_j} - [y\log \sigma(w \cdot x + b) + (1-y)\log (1 - \sigma(w \cdot x + b))] \\ &= -\left [ \frac{\partial }{\partial w_j}y\log \sigma(w \cdot x + b) + \frac{\partial }{\partial w_j} (1-y)\log (1 - \sigma(w \cdot x + b)) \right] \\ &= - \frac{y}{\sigma(w \cdot x + b) }\frac{\partial}{w_j}\sigma(w \cdot x + b) - \frac{1-y}{1 - \sigma(w \cdot x + b) }\frac{\partial}{w_j}(1 - \sigma(w \cdot x + b) ) \\ &= - \frac{y}{\sigma(w \cdot x + b) }\frac{\partial}{w_j}\sigma(w \cdot x + b) - \frac{1-y}{1 - \sigma(w \cdot x + b) }\frac{\partial}{w_j}-\sigma(w \cdot x + b) \\ &= \left[ \frac{1-y}{1 - \sigma(w \cdot x + b) } - \frac{y}{\sigma(w \cdot x + b) }\right]\frac{\partial}{w_j}\sigma(w \cdot x + b) \\ &= \left[\frac{\sigma(w \cdot x + b)(1-y) - y[1 - \sigma(w \cdot x + b) ]}{\sigma(w \cdot x + b)[1 - \sigma(w \cdot x + b)]} \right]\frac{\partial}{w_j}\sigma(w \cdot x + b) \\ &= \left[\frac{\sigma(w \cdot x + b) - y}{\sigma(w \cdot x + b)[1 - \sigma(w \cdot x + b)]} \right]\frac{\partial}{w_j}\sigma(w \cdot x + b) \\ &= \left[\frac{\sigma(w \cdot x + b) - y}{\sigma(w \cdot x + b)[1 - \sigma(w \cdot x + b)]} \right]\sigma(w \cdot x + b)[1-\sigma(w \cdot x + b)]\frac{\partial (w\cdot x + b)}{\partial w_j}\\ &= \left[\frac{\sigma(w \cdot x + b) - y}{\sigma(w \cdot x + b)[1 - \sigma(w \cdot x + b)]} \right]\sigma(w \cdot x + b)[1-\sigma(w \cdot x + b)]x_j \\ &= [\sigma(w \cdot x + b) - y]x_j \\ &= (\hat y - y)x_j \end{aligned} \tag{15}
?wj??LCE???=?wj????[ylogσ(w?x+b)+(1?y)log(1?σ(w?x+b))]=?[?wj???ylogσ(w?x+b)+?wj???(1?y)log(1?σ(w?x+b))]=?σ(w?x+b)y?wj???σ(w?x+b)?1?σ(w?x+b)1?y?wj???(1?σ(w?x+b))=?σ(w?x+b)y?wj???σ(w?x+b)?1?σ(w?x+b)1?y?wj????σ(w?x+b)=[1?σ(w?x+b)1?y??σ(w?x+b)y?]wj???σ(w?x+b)=[σ(w?x+b)[1?σ(w?x+b)]σ(w?x+b)(1?y)?y[1?σ(w?x+b)]?]wj???σ(w?x+b)=[σ(w?x+b)[1?σ(w?x+b)]σ(w?x+b)?y?]wj???σ(w?x+b)=[σ(w?x+b)[1?σ(w?x+b)]σ(w?x+b)?y?]σ(w?x+b)[1?σ(w?x+b)]?wj??(w?x+b)?=[σ(w?x+b)[1?σ(w?x+b)]σ(w?x+b)?y?]σ(w?x+b)[1?σ(w?x+b)]xj?=[σ(w?x+b)?y]xj?=(y^??y)xj??(15) 总结本文我们了解了逻辑回归的原理,下篇文章就来实现它。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 4:30:58- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |