@吴恩达神经网络学习DAY2
一、向量化
向量化的目的主要是减少for循环,在此项应用中,可以通过python/numpy中的np.not进行向量之间的点乘、np.sum进行矩阵之间相加等等。。。
向量化的运算速度比for 循环快百倍有余。
二、logistic回归成本函数证明
为什么要用这样一个函数作为成本函数呢?
首先我们定义了样本结果:
y
^
=
σ
(
w
T
+
b
)
\hat y=\sigma(w^T+b)
y^=σ(wT+b),
where
σ
(
z
)
=
1
1
+
e
−
z
\sigma(z)=\frac{1}{1+e^{-z}}
σ(z)=1+e−z1
其中,
y
^
=
p
(
y
=
1
∣
x
)
\hat y=p(y=1|x)
y^=p(y=1∣x)
如果,
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
)
=
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)
由于log函数是严格的单调递增函数
因此:
l
o
g
p
(
y
∣
x
)
=
l
o
g
(
y
^
y
(
1
−
y
^
)
(
1
−
y
)
)
logp(y|x)=log(\hat y^y(1-\hat y)^{(1-y)})
logp(y∣x)=log(y^y(1−y^)(1−y))
=
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)…(损失函数的负值)
对损失函数添加负号的原因在于:希望log函数趋于最大时,损失函数趋于最小。
以上是只包含一个样本的情况下,若包含m个样本。
l
o
g
(
p
(
m
个
样
本
)
)
=
l
o
g
∏
i
=
1
m
p
(
y
(
i
)
∣
x
(
i
)
)
log(p(m个样本))=log\prod_{i=1}^mp(y^{(i)}|x^{(i)})
log(p(m个样本))=log∏i=1mp(y(i)∣x(i))
假设每个样本之间相互独立
=
∑
(
i
=
1
)
m
l
o
g
(
p
(
y
(
i
)
)
∣
x
(
i
)
)
=\sum_{(i=1)}^mlog(p(y^{(i)})|x^{(i)})
=∑(i=1)mlog(p(y(i))∣x(i))
=
∑
(
i
=
1
)
m
−
L
(
y
^
(
i
)
,
y
(
i
)
)
=\sum_{(i=1)}^m-L(\hat y^{(i)},y^{(i)})
=∑(i=1)m−L(y^(i),y(i))
=
−
∑
(
i
=
1
)
m
L
(
y
^
(
i
)
,
y
(
i
)
)
=-\sum_{(i=1)}^mL(\hat y^{(i)},y^{(i)})
=−∑(i=1)mL(y^(i),y(i))
由于训练模型时,目标是让成本函数最小化,则需去掉上式中的负号:
成本函数
J
(
w
,
b
)
=
∑
(
i
=
1
)
m
L
(
y
^
(
i
)
,
y
(
i
)
)
J(w,b)=\sum_{(i=1)}^mL(\hat y^{(i)},y^{(i)})
J(w,b)=∑(i=1)mL(y^(i),y(i))