1. 传统的损失函数存在的问题
传统二次损失函数为:
J
(
W
,
b
)
=
1
2
(
h
W
,
b
(
x
)
−
y
)
2
+
λ
2
K
∑
k
∈
K
w
i
j
2
J(W,b)=\frac 12(h_{W,b}(x)-y)^2+\frac \lambda{2K}\sum_{k \in K}w_{ij}^2
J(W,b)=21(hW,b(x)−y)2+2Kλk∈K∑wij2
权重和偏置的迭代方程为:
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ w_{ji}&=w_{ji}…
从上式可以看出,在学习率
α
\alpha
α固定的情况下,权重和偏置的迭代快慢取决于损失对于权重
w
w
w和偏置
b
b
b的偏导,而损失函数对权重和偏置的偏导为:
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ \frac {\partia…
从输出层一步步往输入层迭代,可以看出,
δ
j
(
l
+
1
)
\delta_j^{(l+1)}
δj(l+1)是后面一层已经计算过的,无法改变,而
a
i
(
l
)
a_i^{(l)}
ai(l)是第
l
l
l层和第
l
+
1
l+1
l+1层的输入值,也无法改变。因此其实偏导的大小取决于第
l
l
l层和第
l
+
1
l+1
l+1层的输出值,即:
∂
J
∂
w
j
i
(
l
)
∼
a
j
(
l
+
1
)
(
1
−
a
j
(
l
+
1
)
)
∂
J
∂
b
i
(
l
)
∼
a
j
(
l
+
1
)
(
1
−
a
j
(
l
+
1
)
)
\frac {\partial J}{\partial w_{ji}^{(l)}} \sim a_j^{(l+1)}(1-a_j^{(l+1)})\\ \frac {\partial J}{\partial b_{i}^{(l)}} \sim a_j^{(l+1)}(1-a_j^{(l+1)})
∂wji(l)∂J∼aj(l+1)(1−aj(l+1))∂bi(l)∂J∼aj(l+1)(1−aj(l+1))
因此可以看出,当
a
j
(
l
+
1
)
a_j^{(l+1)}
aj(l+1)接近
1
2
\frac 12
21的时候偏导最大,学习速率最快,权重和骗到更新也最快,损失下降也最快。然而在刚开始和快要结束的时候,即
a
j
(
l
+
1
)
a_j^{(l+1)}
aj(l+1)接近1和0的时候,学习速率会非常慢,因此整体的学习速率曲线为:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sQU7Lbic-1603833300352)(./pics/42.png)]
这可能会造成在有限的迭代次数(
e
p
o
c
h
s
epochs
epochs)内无法将损失降到一个较低的值。
2. cross_entropy损失函数
为了解决这个问题,引入一个新的损失函数:
J
(
W
,
b
)
=
∑
(
x
(
m
)
,
y
(
m
)
)
[
y
ln
h
W
,
b
(
x
)
+
(
1
−
y
)
ln
(
1
−
h
W
,
b
(
x
)
)
]
+
λ
2
K
∑
k
∈
K
w
i
j
2
J(W,b)=\sum_{(x^{(m)}, y^{(m)})}[y\ln h_{W,b}(x) + (1-y)\ln(1-h_{W,b}(x))] +\frac \lambda{2K}\sum_{k \in K}w_{ij}^2
J(W,b)=(x(m),y(m))∑[ylnhW,b(x)+(1−y)ln(1−hW,b(x))]+2Kλk∈K∑wij2
此时的偏导数为:
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ \frac {\partia…
令
h
W
,
b
(
x
)
=
a
j
(
l
+
1
)
h_{W,b}(x)=a_j^{(l+1)}
hW,b(x)=aj(l+1),因此:
∂
h
W
,
b
(
x
)
∂
w
j
i
=
a
j
(
l
+
1
)
(
1
−
a
j
(
l
+
1
)
)
a
i
(
l
)
\frac {\partial h_{W,b}(x)}{\partial w_{ji}}=a_j^{(l+1)}(1-a_j^{(l+1)})a_i^{(l)}
∂wji∂hW,b(x)=aj(l+1)(1−aj(l+1))ai(l)
上式为:
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ \frac {\partia…
此时
a
i
(
l
)
a_i^{(l)}
ai(l)和
y
y
y的值都是确定的不可改,因此此时偏导数取决于
y
−
a
j
(
l
+
1
)
y-a_j^{(l+1)}
y−aj(l+1),即后面一层的输出值与
y
y
y的差值的大小,当与
y
y
y差距较大时,偏导大,学习快,损失下降也快,当差值较小时,偏导极小,学习较慢,损失下降也较小,比较符合实际要求。整体的学习速率曲线为:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NpIK3JH8-1603833300358)(./pics/43.png)]
因此采用
c
r
o
s
s
_
e
n
t
r
o
p
y
cross\_entropy
cross_entropy能够解决二次损失函数的学习速率问题,被广泛采用。
3. softmax激活函数
softmax与sigmod函数类似,一般用于输出层的激活函数:
s
o
f
t
m
a
x
(
z
j
)
=
e
−
z
j
∑
i
=
1
n
e
−
z
i
softmax(z_j)=\frac {e^{-z_j}}{\sum_{i=1}^ne^{-z_i}}
softmax(zj)=∑i=1ne−zie−zj
其中:
z
j
=
∑
i
=
1
m
w
j
i
(
L
−
1
)
a
i
(
L
−
1
)
+
b
j
(
L
)
z_j=\sum_{i=1}^mw_{ji}^{(L-1)}a_i^{(L-1)}+b_j^{(L)}
zj=i=1∑mwji(L−1)ai(L−1)+bj(L)
其实就是每一类占总体的比率,因此
∑
j
=
1
n
s
o
f
t
m
a
x
(
z
j
)
=
1
\sum_{j=1}^nsoftmax(z_j)=1
j=1∑nsoftmax(zj)=1
n
n
n为输出神经元的个数。
softmax的损失函数为:
J
=
−
ln
a
j
(
L
)
s
o
f
t
m
a
x
(
z
j
)
=
1
J=-\ln a_j^{(L)} softmax(z_j)=1
J=−lnaj(L)softmax(zj)=1
n
n
n为输出神经元的个数。
softmax的损失函数为:
J
=
−
ln
a
j
(
L
)
J=-\ln a_j^{(L)}
J=−lnaj(L)