本文主要是介绍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λ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)
这篇关于Cross_entropy和softmax的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!