深入理解吴恩达深度学习(01神经网络和深度学习 第二周)
1引言
大家好,我是博主斌斌,一个27岁的java攻城狮,最近想转行人工智能,最近我发现了斯坦福大学吴恩达老师的深度学习微专业讲的特别好,不过可能还会有不少难以理解的地方。本人才疏学浅,想尽量将课程中的重要知识点用自己能够理解的方式记录下来,希望能够在帮助自己的同时也能够帮助别人。
废话不多说了,这里给出免费的课程地址:
内容 | 链接 |
---|---|
吴恩达深度学习 | 课程地址 |
深度学习上课内容 | 内容地址 |
深度学习课后作业 | 课后作业地址 |
2.1 二分类(Binary Classification)
课程通过识别图片中是不是具有猫的例子,给我们讲解了一个二分类问题的例子。
那么计算机如何处理这个图片呢?
例如对于一个64*64的图片,计算机将图片分解为红, 绿,蓝三个64*64的矩阵,很明显这是一个维度为(64,64,3)的三维矩阵。为了计算机能够更加方便的处理,我们将矩阵转化为一个一维向量作为输入,怎么转换呢?如下所示:
(矩阵表示)
x
=
[
[
红
第
1
行
]
T
:
[
红
64
行
]
T
[
绿
第
1
行
]
T
:
[
绿
64
行
]
T
[
蓝
第
1
行
]
T
:
[
蓝
64
行
]
T
]
x= \left[ \begin{matrix} [红第1行 ]^T\\ :\\ [红64行]^T\\ [绿第1行]^T\\ :\\ [绿64行]^T\\ [蓝第1行]^T \\ :\\ [蓝64行]^T\\ \end{matrix} \right] \tag{矩阵表示}
x=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡[红第1行]T:[红64行]T[绿第1行]T:[绿64行]T[蓝第1行]T:[蓝64行]T⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤(矩阵表示)
因此我们不难得出转换结果
(矩阵表示)
x
=
[
红
253
231
:
202
绿
255
134
:
94
蓝
255
134
:
142
]
x= \left[ \begin{matrix} 红253 \\ 231 \\ :\\ 202\\ 绿255 \\ 134 \\ :\\ 94\\ 蓝255 \\ 134 \\ :\\ 142\\ \end{matrix} \right] \tag{矩阵表示}
x=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡红253231:202绿255134:94蓝255134:142⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤(矩阵表示)
好了,现在我们已经把一张图片完美的转换成为一个一维向量
x
x
x,那么我的训练集有
m
m
m张图片怎么表示呢?
我们可以将这些图片都全部按照上述方法转换为一维向量
x
(
1
)
,
x
(
2
)
,
…
…
x
(
m
)
x^{(1)},x^{(2)},……x^{(m)}
x(1),x(2),……x(m),然后再将他们组成一个矩阵
X
=
[
x
(
1
)
,
x
(
2
)
,
.
.
.
,
x
(
m
)
]
X=[x^{(1)},x^{(2)},...,x^{(m)}]
X=[x(1),x(2),...,x(m)]。
同理,每张图片输入分类算法之后都有一个输出判断结果
y
y
y,当y=1时候说明图片有猫,y=0没有猫。那么输出我们也做一个一维向量呗,因此有
Y
=
[
y
(
1
)
,
y
(
2
)
,
.
.
.
,
y
(
m
)
]
Y=[y^{(1)},y^{(2)},...,y^{(m)}]
Y=[y(1),y(2),...,y(m)]
于是就有了下边的公式定义。
2.1.1 符号定义(视频给出的)
x
x
x:表示一个
n
x
n_x
nx维数据,为输入数据,维度为
(
n
x
,
1
)
(n_x,1)
(nx,1);
y
y
y:表示输出结果,取值为
(
0
,
1
)
(0,1)
(0,1);
( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i)):表示第 i i i组数据,可能是训练数据,也可能是测试数据,此处默认为训练数据;
X = [ x ( 1 ) , x ( 2 ) , . . . , x ( m ) ] X=[x^{(1)},x^{(2)},...,x^{(m)}] X=[x(1),x(2),...,x(m)]:表示所有的训练数据集的输入值,放在一个 n x × m n_x×m nx×m的矩阵中,其中 m m m表示样本数目;
Y = [ y ( 1 ) , y ( 2 ) , . . . , y ( m ) ] Y=[y^{(1)},y^{(2)},...,y^{(m)}] Y=[y(1),y(2),...,y(m)]:对应表示所有训练数据集的输出值,维度为 1 × m 1×m 1×m。
2.2 逻辑回归(Logistic Regression)
逻辑回归算法是一个线性算法,那么到底什么是逻辑回归呢?逻辑回归长这个样:
y
^
=
w
T
x
+
b
\hat{y}={{w}^{T}}x+b
y^=wTx+b
- y ^ \hat{y} y^表示输出估计值
- w T {{w}^{T}} wT表示特征权重
- x x x表示我们之前求得的图片的一维向量,也就是特征值
- b 表示偏差
哈哈,是不是吓到你了,举个栗子吧,我们初中的时候都求解过这样的问题:
已知两点(1,2) ,(2,6),求经过这两点的直线方程。
那么求解的过程应该如下:
假设直线方程为 y=ax+b
带入公式中可以得出:
a +b = 2
2a+b = 6
求解就可以得出 a = 4 , b=-2 因此方程为
y=2x-2
其实逻辑回归算法就是以上求解一元线性方程的推广,不过这里就不是给出两个点这么简单了,而是给出m个输入向量(图片),叫你设计一个模型,来估计输入的图片有没有猫。那么我可以假设这个模型的表达式为:
y
^
=
w
T
x
+
b
\hat{y}={{w}^{T}}x+b
y^=wTx+b
通过上述例子是不是好理解多了,好,继续,由于我们的输入数值是0-255之间,
w
T
{w}^{T}
wT是一个待求解的系数矩阵,输出的数值为0-1之间的一个概率(概率大于1或者小于0都是没有意义的)。那么我们有什么办法保证输出在0-1之间呢?对了,聪明的你肯定想到了映射。也就是下面说的sigmoid函数。
2.1.1 sigmoid函数
前边说到输出
y
i
y^i
yi的数值可能很大,因此我们需要将输出值映射到0-1的范围之内。在这里使用sigmoid函数进行映射,结果如下:
σ
(
z
)
=
1
1
+
e
−
z
\sigma \left( z \right)=\frac{1}{1+{{e}^{-z}}}
σ(z)=1+e−z1
该函数图片如下所示:
从图像可知该函数有如下性质:
- z趋向无穷大时,函数值趋向1。
- z=0时,函数值为0.5
- z趋向无穷大时,函数值趋向0。
- 该函数关于点(0,0.5)对称。
这就能够很好的将输出值映射到0-1之间了。
在上个视频中,我们讲了逻辑回归模型,这个视频里,我们讲逻辑回归的代价函数(也翻译作成本函数)。
2.3 逻辑回归的代价函数(Logistic Regression Cost Function)
现在我们来回顾下之前针对单个样本逻辑回归的过程:
- 将输入图像向量化得到输入 X X X矩阵。
- 将X矩阵放入假设的方程中 z = W T X + b z=W^TX+b z=WTX+b
- 将输出值z放入sigmoid函数 σ ( z ) = 1 1 + e − z \sigma \left( z \right)=\frac{1}{1+{{e}^{-z}}} σ(z)=1+e−z1
- 得出最终的 y ^ 。 \hat{y}。 y^。
好了,如果我们实现了上述的过程,那么我们怎么评价预测的输出值
y
^
\hat{y}
y^与实际的分类结果
y
y
y之间存在多少误差呢?视频中给出了损失函数(loss 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^)
损失函数具有以下性质:
1.当
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。
2.当 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求平均值就好了,这个函数称为逻辑回归的代价函数:
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)))
注意:代价函数描述的是模型对m个输入样本的预测值y^与实际输出值y之间的误差的平均值。
2.4 梯度下降法(Gradient Descent)
我们训练模型的目的,是要使得训练模型的输出值
y
^
\hat{y}
y^与实际标签
y
y
y尽可能的接近。翻译成数学语言就是我们要不断的训练模型找到最佳的
w
和
b
w和b
w和b,使得
J
(
w
,
b
)
J\left( w,b \right)
J(w,b)尽可能的小。
对于J函数而言,我们就是要找到J函数的最小值。
那么给你一个函数J如何找到它的最小值呢?下面就介绍梯度下降法:
J函数图像如图所示,刚开始时候我们计算的J在红点的位置,目标是到达底部。可以想象小明在一个山坡上,山谷底部有个美女在等小明哟,然后怎么小明找到最快的下山路径呢?
小明肯定会这样走
那么走每一步的时候,小明怎么知道沿着哪个方向走是最快路径呢???我们知道沿着曲线的切线方向是函数变化最快的方向。而切线的斜率等于当前点的导函数的数值。因此对于J(w,b),小明可以对w求J的偏导数,得出 w变化最快的方向。然后可以对b求J的偏导数,得出b变化最快的方向。两个方向确定了,下一步小明就知道怎么走了。因此有下边的公式:
1.
α
\alpha
α表示学习速率,也就是小明一步走多远。
2.整个公式的解释就是 :
下一个点
w
w
w的坐标 = 当前点w的坐标 - 步长
α
\alpha
α *
w
变
化
最
快
的
方
向
w变化最快的方向
w变化最快的方向
下一个点
b
b
b的坐标 = 当前点b的坐标 - 步长
α
\alpha
α *
b
变
化
最
快
的
方
向
b变化最快的方向
b变化最快的方向
到这里斌斌相信你已经知道什么是梯度下降法了。到这里我只说了一步怎么走呀,啊喂,小明是要知道怎么走到山底呀,摔。
骚年,一步你知道怎么走了,接下来就是重复做就好了是吧!于是小明为了见到美女,每一步都要对J求个导数,因此小明的慢慢长征路就成为了下边这个样子:
while(J>设定允许的最小误差){
- 将训练数据X输入模型求出预测值 y ^ = s i g m o i d ( w T X + b ) \hat{y}=sigmoid(w^TX+b) y^=sigmoid(wTX+b)。
- 求出代价函数 J ( w , b ) J(w,b) J(w,b)。
- J分别对w和b求偏导得出代价函数减小最快的方向。
- 求出下一步的w,b。
- 将w,和b更新到 y ^ = s i g m o i d ( w T X + b ) \hat{y}=sigmoid(w^TX+b) y^=sigmoid(wTX+b) 中。
}
下图很好的描述了上述过程:
好了,到这里,相信大家已经知道什么是梯度下降法,怎么使用梯度下降法了。
2.6 求各个子式的导数
2.6.1 sigmiod函数的导数
下面我们求sigmiod函数的导数:
σ
(
z
)
=
1
1
+
e
−
z
\sigma \left( z \right)=\frac{1}{1+{{e}^{-z}}}
σ(z)=1+e−z1
σ
(
z
)
d
z
=
d
(
1
1
+
e
−
z
)
/
d
z
\frac{\sigma \left( z \right)}{dz}=d(\frac{1}{1+{{e}^{-z}}})/dz
dzσ(z)=d(1+e−z1)/dz
σ
(
z
)
d
z
=
1
′
(
1
+
e
−
z
)
−
1
∗
(
1
+
e
−
z
)
′
(
1
+
e
−
z
)
2
\frac{\sigma \left( z \right)}{dz}=\frac{{1}^{'}(1+{{e}^{-z}})-1*(1+{{e}^{-z}})^{'}}{(1+{{e}^{-z}})^2}
dzσ(z)=(1+e−z)21′(1+e−z)−1∗(1+e−z)′
σ
(
z
)
d
z
=
−
1
∗
(
−
1
)
e
−
z
(
1
+
e
−
z
)
2
\frac{\sigma \left( z \right)}{dz}=\frac{-1*(-1){{e}^{-z}}}{(1+{{e}^{-z}})^2}
dzσ(z)=(1+e−z)2−1∗(−1)e−z
σ
(
z
)
d
z
=
e
−
z
(
1
+
e
−
z
)
2
\frac{\sigma \left( z \right)}{dz}=\frac{{{e}^{-z}}}{(1+{{e}^{-z}})^2}
dzσ(z)=(1+e−z)2e−z
σ
(
z
)
d
z
=
1
(
1
+
e
−
z
)
∗
(
1
+
e
−
z
)
−
1
(
1
+
e
−
z
)
\frac{\sigma \left( z \right)}{dz}=\frac{1}{(1+{{e}^{-z}})}*\frac{(1+e^{-z})-1}{(1+{{e}^{-z}})}
dzσ(z)=(1+e−z)1∗(1+e−z)(1+e−z)−1
σ
(
z
)
d
z
=
1
(
1
+
e
−
z
)
∗
(
1
−
1
(
1
+
e
−
z
)
)
\frac{\sigma \left( z \right)}{dz}=\frac{1}{(1+{{e}^{-z}})}*(1-\frac{1}{(1+{{e}^{-z}})})
dzσ(z)=(1+e−z)1∗(1−(1+e−z)1)
σ
(
z
)
d
z
=
σ
(
z
)
∗
(
1
−
σ
(
z
)
)
\frac{\sigma \left( z \right)}{dz}=\sigma(z)*(1-\sigma(z))
dzσ(z)=σ(z)∗(1−σ(z))
2.6.2 损失函数的导数
下面我们求损失函数的导数:
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^)
为了表示方便,我们使用
A
A
A来代替
y
^
\hat{y}
y^,公式重写如下:
L
(
A
,
y
)
=
−
y
log
(
A
)
−
(
1
−
y
)
log
(
1
−
A
)
L\left( A,y \right)=-y\log(A)-(1-y)\log (1-A)
L(A,y)=−ylog(A)−(1−y)log(1−A)
d
L
(
A
,
y
)
d
A
=
−
y
(
log
(
A
)
)
′
−
(
1
−
y
)
(
log
(
1
−
A
)
)
′
\frac{dL\left( A,y \right)}{dA}=-y(\log(A))^{'}-(1-y)(\log (1-A))^{'}
dAdL(A,y)=−y(log(A))′−(1−y)(log(1−A))′
d
L
(
A
,
y
)
d
A
=
−
y
∗
1
A
−
(
1
−
y
)
(
1
−
A
)
′
∗
1
1
−
A
\frac{dL\left( A,y \right)}{dA}=-y*\frac{1}{A}-(1-y)(1-A)^{'}*\frac{1}{1-A}
dAdL(A,y)=−y∗A1−(1−y)(1−A)′∗1−A1
d
L
(
A
,
y
)
d
A
=
−
y
A
+
1
−
y
1
−
A
\frac{dL\left( A,y \right)}{dA}=\frac{-y}{A}+\frac{1-y}{1-A}
dAdL(A,y)=A−y+1−A1−y
d
L
(
A
,
y
)
d
A
=
−
y
(
1
−
A
)
+
A
(
1
−
y
)
A
(
1
−
A
)
\frac{dL\left( A,y \right)}{dA}=\frac{-y(1-A)+A(1-y)}{A(1-A)}
dAdL(A,y)=A(1−A)−y(1−A)+A(1−y)
d
L
(
A
,
y
)
d
A
=
−
y
+
A
y
+
A
−
A
y
A
(
1
−
A
)
\frac{dL\left( A,y \right)}{dA}=\frac{-y+Ay+A-Ay}{A(1-A)}
dAdL(A,y)=A(1−A)−y+Ay+A−Ay
d
L
(
A
,
y
)
d
A
=
A
−
y
A
(
1
−
A
)
\frac{dL\left( A,y \right)}{dA}=\frac{A-y}{A(1-A)}
dAdL(A,y)=A(1−A)A−y
2.6.3 损失函数对输入的导数
回顾一下训练过程:
- 将输入图像向量化得到输入 X X X矩阵。
- 将X矩阵放入假设的方程中 z = W T X + b z=W^TX+b z=WTX+b
- 将输出值z放入sigmoid函数 σ ( z ) = 1 1 + e − z \sigma \left( z \right)=\frac{1}{1+{{e}^{-z}}} σ(z)=1+e−z1
- 得出最终的 y ^ 。 \hat{y}。 y^。
- 令 A= y ^ 。 \hat{y}。 y^。
- 求出损失函数 L ( A , y ) = − y log ( A ) − ( 1 − y ) log ( 1 − A ) L\left( A,y \right)=-y\log(A)-(1-y)\log (1-A) L(A,y)=−ylog(A)−(1−y)log(1−A)
将A=
σ
(
z
)
\sigma( z )
σ(z)带入不难写出方程:
L
(
A
,
y
)
=
−
y
log
(
A
)
−
(
1
−
y
)
log
(
1
−
A
)
L\left( A,y \right)=-y\log(A)-(1-y)\log (1-A)
L(A,y)=−ylog(A)−(1−y)log(1−A)
L
(
σ
(
z
)
,
y
)
=
−
y
log
(
σ
(
z
)
)
−
(
1
−
y
)
log
(
1
−
σ
(
z
)
)
L\left( \sigma( z ),y \right)=-y\log(\sigma( z ))-(1-y)\log (1-\sigma( z ))
L(σ(z),y)=−ylog(σ(z))−(1−y)log(1−σ(z))
根据链式求导法则有:
d
L
(
z
,
y
)
d
z
=
d
L
(
A
,
y
)
d
A
∗
d
A
d
z
\frac{dL\left( z,y \right)}{dz}=\frac{dL\left( A,y \right)}{dA}*\frac{dA}{dz}
dzdL(z,y)=dAdL(A,y)∗dzdA
之前我们已经求得了这两个式子的导数,注意这里
A
=
y
^
=
σ
(
z
)
A=\hat{y}=\sigma(z)
A=y^=σ(z)。
d
σ
(
z
)
=
σ
(
z
)
∗
(
1
−
σ
(
z
)
)
d\sigma \left( z \right)=\sigma(z)*(1-\sigma(z))
dσ(z)=σ(z)∗(1−σ(z))
d
L
(
A
,
y
)
d
A
=
A
−
y
A
(
1
−
A
)
\frac{dL\left( A,y \right)}{dA}=\frac{A-y}{A(1-A)}
dAdL(A,y)=A(1−A)A−y
开始求:
d
L
(
z
,
y
)
d
z
=
d
L
(
A
,
y
)
d
A
∗
d
A
d
z
=
A
−
y
A
(
1
−
A
)
∗
σ
(
z
)
∗
(
1
−
σ
(
z
)
)
\frac{dL\left( z,y \right)}{dz}=\frac{dL\left( A,y \right)}{dA}*\frac{dA}{dz}=\frac{A-y}{A(1-A)}*\sigma(z)*(1-\sigma(z))
dzdL(z,y)=dAdL(A,y)∗dzdA=A(1−A)A−y∗σ(z)∗(1−σ(z))
由于A=
y
^
=
σ
(
z
)
\hat{y}=\sigma(z)
y^=σ(z),令A=
σ
(
z
)
\sigma(z)
σ(z)
d
L
(
z
,
y
)
d
z
=
d
L
(
A
,
y
)
d
A
∗
d
A
d
z
=
σ
(
z
)
−
y
σ
(
z
)
∗
(
1
−
σ
(
z
)
)
∗
σ
(
z
)
∗
(
1
−
σ
(
z
)
)
\frac{dL\left( z,y \right)}{dz}=\frac{dL\left( A,y \right)}{dA}*\frac{dA}{dz}=\frac{\sigma(z)-y}{\sigma(z)*(1-\sigma(z))}*\sigma(z)*(1-\sigma(z))
dzdL(z,y)=dAdL(A,y)∗dzdA=σ(z)∗(1−σ(z))σ(z)−y∗σ(z)∗(1−σ(z))
d
L
(
z
,
y
)
d
z
=
σ
(
z
)
−
y
\frac{dL\left( z,y \right)}{dz}={\sigma(z)-y}
dzdL(z,y)=σ(z)−y
那么同理由
z
=
w
T
X
+
b
z = w^TX+b
z=wTX+b可知:
∂
z
∂
w
=
X
\frac{\partial z}{\partial w}=X
∂w∂z=X
∂
z
∂
b
=
1
\frac{\partial z}{\partial b}=1
∂b∂z=1
因此:
∂
L
∂
w
=
d
L
(
z
,
y
)
d
z
∗
∂
z
∂
w
=
X
(
σ
(
z
)
−
y
)
\frac{\partial L}{\partial w}=\frac{dL\left( z,y \right)}{dz}*\frac{\partial z}{\partial w}=X({\sigma(z)-y})
∂w∂L=dzdL(z,y)∗∂w∂z=X(σ(z)−y)
∂
L
∂
b
=
d
L
(
z
,
y
)
d
z
∗
∂
z
∂
b
=
σ
(
z
)
−
y
\frac{\partial L}{\partial b}=\frac{dL\left( z,y \right)}{dz}*\frac{\partial z}{\partial b}={\sigma(z)-y}
∂b∂L=dzdL(z,y)∗∂b∂z=σ(z)−y
2.6.4 代价函数对输入的偏导数
代价函数的定义为:
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)))
可见,代价函数只是损失函数的求和的平均值。因此有:
∂
J
∂
w
=
1
m
X
(
A
−
Y
)
T
\frac{\partial J}{\partial w} = \frac{1}{m}X(A-Y)^T
∂w∂J=m1X(A−Y)T
∂
J
∂
b
=
1
m
∑
i
=
1
m
(
a
(
i
)
−
y
(
i
)
)
\frac{\partial J}{\partial b} = \frac{1}{m} \sum_{i=1}^m (a^{(i)}-y^{(i)})
∂b∂J=m1i=1∑m(a(i)−y(i))
2.7 损失函数的推导
接下来我们要证明为什么损失函数长这个样子:
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 。
;我们约定
p
(
y
=
1
∣
x
)
=
y
^
p(y=1|x)=\hat{y}
p(y=1∣x)=y^
上式即算法的输出
y
^
\hat{y}
y^ 是给定训练样本
x
x
x 条件下
y
y
y 等于1的概率。
由于这是一个二分类问题,也就是说训练结果y只能等于0或者等于1,因此有:
p
(
y
=
0
∣
x
)
=
1
−
y
^
p(y=0|x)=1-\hat{y}
p(y=0∣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)
为什么呢,下边将y=1和y=0分别带入就知道了:
-
第一种情况,假设 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 ) = 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=1mP(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=1mL(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回归模型的最大似然估计的角度出发,假设训练集中的样本都是独立同分布的条件下。