Cross_entropy和softmax

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λkKwij2
权重和偏置的迭代方程为:
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)Jaj(l+1)(1aj(l+1))bi(l)Jaj(l+1)(1aj(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)+(1y)ln(1hW,b(x))]+2KλkKwij2
此时的偏导数为:
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)} wjihW,b(x)=aj(l+1)(1aj(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)} yaj(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=1neziezj
其中:
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=1mwji(L1)ai(L1)+bj(L)
其实就是每一类占总体的比率,因此
∑ j = 1 n s o f t m a x ( z j ) = 1 \sum_{j=1}^nsoftmax(z_j)=1 j=1nsoftmax(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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值