Note:要注意区别代价函数和损失函数的区别,代价函数 J ( w , b ) J\left( w,b \right) J(w,b)是对于整个训练样本来说的而损失函数 L ( y ^ , y ) L\left( \hat{y},y \right) L(y^,y)是对于单个的训练样本来说的
为什么需要代价函数:
一句话概括就是代价函数是衡量我们训练的模型的好坏程度
为了训练逻辑回归模型的参数
w
w
w和参数
b
b
b,我们需要一个代价函数,通过训练代价函数来得到参数
w
w
w和参数
b
b
b。 先看一下逻辑回归的输出函数:

为了让模型通过学习调整参数,你需要给予一个 m m m样本的训练集,这会让你在训练集上找到参数 w w w 和参数 b b b,来得到你的输出。
对训练集的预测值,我们将它写成 y ^ \hat{y} y^,我们更希望它会接近于训练集中的 y y y值,为了对上面的公式更详细的介绍,我们需要说明上面的定义是对一个训练样本来说的,这种形式也使用于每个训练样本,我们使用这些带有圆括号的上标来区分索引和样本,训练样本 i i i所对应的预测值是 y ( i ) {{y}^{(i)}} y(i),是用训练样本的 w T x ( i ) + b {{w}^{T}}{{x}^{(i)}}+b wTx(i)+b然后通过sigmoid函数来得到,也可以把 z z z定义为 z ( i ) = w T x ( i ) + b {{z}^{(i)}}={{w}^{T}}{{x}^{(i)}}+b z(i)=wTx(i)+b,我们将使用这个符号 ( i ) (i) (i)注解,上标 ( i ) (i) (i)来指明数据表示 x x x或者 y y y或者 z z z或者其他数据的第 i i i个训练样本,这就是上标 ( i ) (i) (i)的含义。
损失函数:
损失函数又叫做误差函数,用来衡量算法的运行情况,Loss function: L ( y ^ , y ) L\left( \hat{y},y \right) L(y^,y).
我们通过这个 L L L称为的损失函数,来衡量预测输出值和实际值有多接近。一般我们用预测值和实际值的平方差或者它们平方差的一半,但是通常在逻辑回归中我们不这么做,因为当我们在学习逻辑回归参数的时候,会发现我们的优化目标不是凸优化,只能找到多个局部最优值,梯度下降法很可能找不到全局最优值,虽然平方差是一个不错的损失函数,但是我们在逻辑回归模型中会定义另外一个损失函数。
我们在逻辑回归中用到的损失函数是:
L
(
y
^
,
y
)
=
−
y
log
(
y
^
)
−
(
1
−
y
)
log
(
1
−
y
^
)
L\left( \hat{y},y \right)=-y\log(\hat{y})-(1-y)\log (1-\hat{y})
L(y^,y)=−ylog(y^)−(1−y)log(1−y^)
为什么要用这个函数作为逻辑损失函数?当我们使用平方误差作为损失函数的时候,你会想要让这个误差尽可能地小,对于这个逻辑回归损失函数,我们也想让它尽可能地小,为了更好地理解这个损失函数怎么起作用,我们举两个例子:
当 y = 1 y=1 y=1时损失函数 L = − log ( y ^ ) L=-\log (\hat{y}) L=−log(y^),如果想要损失函数 L L L尽可能得小,那么 y ^ \hat{y} y^就要尽可能大,因为sigmoid函数取值 [ 0 , 1 ] [0,1] [0,1],所以 y ^ \hat{y} y^会无限接近于1。
当 y = 0 y=0 y=0时损失函数 L = − log ( 1 − y ^ ) L=-\log (1-\hat{y}) L=−log(1−y^),如果想要损失函数 L L L尽可能得小,那么 y ^ \hat{y} y^就要尽可能小,因为sigmoid函数取值 [ 0 , 1 ] [0,1] [0,1],所以 y ^ \hat{y} y^会无限接近于0。
损失函数是在单个训练样本中定义的,它衡量的是算法在单个训练样本中表现如何,为了衡量算法在全部训练样本上的表现如何,我们需要定义一个算法的代价函数,算法的代价函数是对
m
m
m个样本的损失函数求和然后除以
m
m
m:
J
(
w
,
b
)
=
1
m
∑
i
=
1
m
L
(
y
^
(
i
)
,
y
(
i
)
)
=
1
m
∑
i
=
1
m
(
−
y
(
i
)
log
y
^
(
i
)
−
(
1
−
y
(
i
)
)
log
(
1
−
y
^
(
i
)
)
)
J\left( w,b \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{L\left( {{{\hat{y}}}^{(i)}},{{y}^{(i)}} \right)}=\frac{1}{m}\sum\limits_{i=1}^{m}{\left( -{{y}^{(i)}}\log {{{\hat{y}}}^{(i)}}-(1-{{y}^{(i)}})\log (1-{{{\hat{y}}}^{(i)}}) \right)}
J(w,b)=m1i=1∑mL(y^(i),y(i))=m1i=1∑m(−y(i)logy^(i)−(1−y(i))log(1−y^(i)))
损失函数只适用于像这样的单个训练样本,而代价函数是参数的总代价,所以在训练逻辑回归模型时候,我们需要找到合适的
w
w
w和
b
b
b,来让代价函数
J
J
J 的总代价降到最低。
根据我们对逻辑回归算法的推导及对单个样本的损失函数的推导和针对算法所选用参数的总代价函数的推导,结果表明逻辑回归可以看做是一个非常小的神经网络。
logistic 损失函数的解释(Explanation of logistic regression cost function)
损失函数:
L
(
y
^
,
y
)
=
−
y
log
(
y
^
)
−
(
1
−
y
)
log
(
1
−
y
^
)
L\left( \hat{y},y \right)=-y\log(\hat{y})-(1-y)\log (1-\hat{y})
L(y^,y)=−ylog(y^)−(1−y)log(1−y^)
在逻辑回归中,需要预测的结果 y ^ \hat{y} y^,可以表示为 y ^ = σ ( w T x + b ) \hat{y}=\sigma(w^{T}x+b) y^=σ(wTx+b), σ \sigma σ是我们熟悉的 S S S型函数 σ ( z ) = σ ( w T x + b ) = 1 1 + e − z \sigma(z)=\sigma(w^{T}x+b)=\frac{1}{1+e^{-z}} σ(z)=σ(wTx+b)=1+e−z1 。由于logistic回归讨论的是概率问题其返回的结果应该是预测某事物的概率,因此我们约定 y ^ = p ( y = 1 ∣ x ) \hat{y}=p(y=1|x) y^=p(y=1∣x) ,即算法的输出 y ^ \hat{y} y^ 是给定训练样本 x x x 条件下 y y y 等于1的概率。换句话说,如果 y = 1 y=1 y=1,在给定训练样本 x x x 条件下 y = y ^ y=\hat{y} y=y^;反过来说,如果 y = 0 y=0 y=0,在给定训练样本 x x x条件下 y y y 等于1减去 y ^ ( y = 1 − y ^ ) \hat{y}(y=1-\hat{y}) y^(y=1−y^),因此,如果 y ^ \hat{y} y^ 代表 y = 1 y=1 y=1 的概率,那么 1 − y ^ 1-\hat{y} 1−y^就是 y = 0 y=0 y=0的概率。 接下来,我们就来分析这两个条件概率公式。

这两个条件概率公式定义形式为 p ( y ∣ x ) p(y|x) p(y∣x)并且代表了 y = 0 y=0 y=0 或者 y = 1 y=1 y=1 这两种情况,我们可以将这两个公式合并成一个公式。需要指出的是我们讨论的是二分类问题的损失函数,因此, y y y的取值只能是0或者1。上述的两个条件概率公式可以合并成如下公式:
p ( y ∣ x ) = y ^ y ( 1 − y ^ ) ( 1 − y ) p(y|x)={\hat{y}}^{y}{(1-\hat{y})}^{(1-y)} p(y∣x)=y^y(1−y^)(1−y)
接下来我会解释为什么可以合并成这种形式的表达式: ( 1 − y ^ ) (1-\hat{y}) (1−y^)的 ( 1 − y ) (1-y) (1−y)次方这行表达式包含了上面的两个条件概率公式,我来解释一下为什么。

-
第一种情况,假设 y = 1 y=1 y=1,由于 y = 1 y=1 y=1,那么 ( y ^ ) y = y ^ {(\hat{y})}^{y}=\hat{y} (y^)y=y^,因为
y ^ \hat{y} y^的1次方等于 y ^ \hat{y} y^, 1 − ( 1 − y ^ ) ( 1 − y ) 1-{(1-\hat{y})}^{(1-y)} 1−(1−y^)(1−y)的指数项 ( 1 − y ) (1-y) (1−y)等于0,由于任何数的0次方都是1, y ^ \hat{y} y^乘以1等于 y ^ \hat{y} y^。因此当 y = 1 y=1 y=1时
p ( y ∣ x ) = y ^ p(y|x)=\hat{y} p(y∣x)=y^(图中绿色部分)。 -
第二种情况,当 y = 0 y=0 y=0 时 p ( y ∣ x ) p(y|x) p(y∣x) 等于多少呢? 假设 y = 0 y=0 y=0, y ^ \hat{y} y^的 y y y次方就是 y ^ \hat{y} y^的0次方,任何数的0次方都等于1,因此 p ( y ∣ x ) = 1 × ( 1 − y ^ ) 1 − y p(y|x)=1×{(1-\hat{y})}^{1-y} p(y∣x)=1×(1−y^)1−y ,前面假设 y = 0 y=0 y=0 因此 ( 1 − y ) (1-y) (1−y)就等于1,因此 p ( y ∣ x ) = 1 × ( 1 − y ^ ) p(y|x)=1×(1-\hat{y}) p(y∣x)=1×(1−y^)。因此在这里当 y = 0 y=0 y=0时, p ( y ∣ x ) = 1 − y ^ p(y|x)=1-\hat{y} p(y∣x)=1−y^。这就是这个公式(第二个公式,图中紫色字体部分)的结果。
因此,刚才的推导表明 p ( y ∣ x ) = y ^ ( y ) ( 1 − y ^ ) ( 1 − y ) p(y|x)={\hat{y}}^{(y)}{(1-\hat{y})}^{(1-y)} p(y∣x)=y^(y)(1−y^)(1−y),就是 p ( y ∣ x ) p(y|x) p(y∣x) 的完整定义。 由于 log 函数是严格单调递增的函数,最大化 l o g ( p ( y ∣ x ) ) log(p(y|x)) log(p(y∣x)) 等价于最大化 p ( y ∣ x ) p(y|x) p(y∣x) 并且计算 p ( y ∣ x ) p(y|x) p(y∣x) 的 log对数,就是计算 l o g ( y ^ ( y ) ( 1 − y ^ ) ( 1 − y ) ) log({\hat{y}}^{(y)}{(1-\hat{y})}^{(1-y)}) log(y^(y)(1−y^)(1−y)) (其实就是将 p ( y ∣ x ) p(y|x) p(y∣x) 代入),通过对数函数化简为:
y l o g y ^ + ( 1 − y ) l o g ( 1 − y ^ ) ylog\hat{y}+(1-y)log(1-\hat{y}) ylogy^+(1−y)log(1−y^)
而这就是我们前面提到的损失函数的负数 ( − L ( y ^ , y ) ) (-L(\hat{y},y)) (−L(y^,y)) ,前面有一个负号的原因是当你训练学习算法时需要算法输出值的概率是最大的(以最大的概率预测这个值),然而在逻辑回归中我们需要最小化损失函数,因此最小化损失函数与最大化条件概率的对数 l o g ( p ( y ∣ x ) ) log(p(y|x)) log(p(y∣x)) 关联起来了,因此这就是单个训练样本的损失函数表达式。
在
m
m
m个训练样本的整个训练集中又该如何表示呢,让我们一起来探讨一下。
让我们一起来探讨一下,整个训练集中标签的概率,更正式地来写一下。假设所有的训练样本服从同一分布且相互独立,也即独立同分布的,所有这些样本的联合概率就是每个样本概率的乘积:
P ( labels in training set ) = ∏ i = 1 m P ( y ( i ) ∣ x ( i ) ) P\left(\text{labels in training set} \right) = \prod_{i =1}^{m}{P(y^{(i)}|x^{(i)})} P(labels in training set)=i=1∏mP(y(i)∣x(i))
如果你想做最大似然估计,需要寻找一组参数,使得给定样本的观测值概率最大,但令这个概率最大化等价于令其对数最大化,在等式两边取对数:
l o g p ( labels in training set ) = l o g ∏ i = 1 m P ( y ( i ) ∣ x ( i ) ) = ∑ i = 1 m l o g P ( y ( i ) ∣ x ( i ) ) = ∑ i = 1 m − L ( y ^ ( i ) , y ( i ) ) logp\left( \text{labels in training set} \right) = log\prod_{i =1}^{m}{P(y^{(i)}|x^{(i)})} = \sum_{i = 1}^{m}{logP(y^{(i)}|x^{(i)})} = \sum_{i =1}^{m}{- L(\hat y^{(i)},y^{(i)})} logp(labels in training set)=logi=1∏mP(y(i)∣x(i))=i=1∑mlogP(y(i)∣x(i))=i=1∑m−L(y^(i),y(i))
在统计学里面,有一个方法叫做最大似然估计,即求出一组参数,使这个式子取最大值,也就是说,使得这个式子取最大值,
∑
i
=
1
m
−
L
(
y
^
(
i
)
,
y
(
i
)
)
\sum_{i= 1}^{m}{- L(\hat y^{(i)},y^{(i)})}
∑i=1m−L(y^(i),y(i)),可以将负号移到求和符号的外面,
−
∑
i
=
1
m
L
(
y
^
(
i
)
,
y
(
i
)
)
- \sum_{i =1}^{m}{L(\hat y^{(i)},y^{(i)})}
−∑i=1mL(y^(i),y(i)),这样我们就推导出了前面给出的logistic回归的成本函数:
J
(
w
,
b
)
=
∑
i
=
1
m
L
(
y
^
(
i
)
,
y
(
^
i
)
)
J(w,b)= \sum_{i = 1}^{m}{L(\hat y^{(i)},y^{\hat( i)})}
J(w,b)=i=1∑mL(y^(i),y(^i))
由于训练模型时,目标是让成本函数最小化,所以我们不是直接用最大似然概率,要去掉这里的负号,最后为了方便,可以对成本函数进行适当的缩放,我们就在前面加一个额外的常数因子 1 m \frac{1}{m} m1,即: J ( w , b ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) J(w,b)= \frac{1}{m}\sum_{i = 1}^{m}{L(\hat y^{(i)},y^{(i)})} J(w,b)=m1i=1∑mL(y^(i),y(i))
总结一下,为了最小化成本函数 J ( w , b ) J(w,b) J(w,b),我们从logistic回归模型的最大似然估计的角度出发,假设训练集中的样本都是独立同分布的条件下进行计算的。