摘要:對于多分類問題,我們可以使用多項回歸,該方法也被稱之為函數。函數的交叉熵損失函數的推導損失函數對于的導數求解如下上式已經求解了當和的兩種情況。最終的結果為,這個求導結果和函數的交叉熵損失函數求導是一樣的,再次證明函數是函數的一個擴展板。
作者:chen_h
微信號 & QQ:862251340
微信公眾號:coderpai
簡書地址:https://www.jianshu.com/p/8eb...
這篇教程是翻譯Peter Roelants寫的神經網絡教程,作者已經授權翻譯,這是原文。
該教程將介紹如何入門神經網絡,一共包含五部分。你可以在以下鏈接找到完整內容。
(一)神經網絡入門之線性回歸
Logistic分類函數
(二)神經網絡入門之Logistic回歸(分類問題)
(三)神經網絡入門之隱藏層設計
Softmax分類函數
(四)神經網絡入門之矢量化
(五)神經網絡入門之構建多層網絡
softmax分類函數這部分教程將介紹兩部分:
softmax函數
交叉熵損失函數
在先前的教程中,我們已經使用學習了如何使用Logistic函數來實現二分類問題。對于多分類問題,我們可以使用多項Logistic回歸,該方法也被稱之為softmax函數。接下來,我們來解釋什么事softmax函數,以及怎么得到它。
我們先導入教程需要使用的軟件包。
import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import colorConverter, ListedColormap from mpl_toolkits.mplot3d import Axes3D from matplotlib import cmSoftmax函數
在之前的教程中,我們已經知道了Logistic函數只能被使用在二分類問題中,但是它的多項式回歸,即softmax函數,可以解決多分類問題。假設softmax函數?的輸入數據是C維度的向量z,那么softmax函數的數據也是一個C維度的向量y,里面的值是0到1之間。softmax函數其實就是一個歸一化的指數函數,定義如下:
式子中的分母充當了正則項的作用,可以使得
作為神經網絡的輸出層,softmax函數中的值可以用C個神經元來表示。
對于給定的輸入z,我們可以得到每個分類的概率t = c for c = 1 ... C可以表示為:
其中,P(t=c|z)表示,在給定輸入z時,該輸入數據是c分類的概率。
下圖展示了在一個二分類(t = 1, t = 2)中,輸入向量是z = [z1, z2],那么輸出概率P(t=1|z)如下圖所示。
# Define the softmax function def softmax(z): return np.exp(z) / np.sum(np.exp(z))
# Plot the softmax output for 2 dimensions for both classes # Plot the output in function of the weights # Define a vector of weights for which we want to plot the ooutput nb_of_zs = 200 zs = np.linspace(-10, 10, num=nb_of_zs) # input zs_1, zs_2 = np.meshgrid(zs, zs) # generate grid y = np.zeros((nb_of_zs, nb_of_zs, 2)) # initialize output # Fill the output matrix for each combination of input z"s for i in range(nb_of_zs): for j in range(nb_of_zs): y[i,j,:] = softmax(np.asarray([zs_1[i,j], zs_2[i,j]])) # Plot the cost function surfaces for both classes fig = plt.figure() # Plot the cost function surface for t=1 ax = fig.gca(projection="3d") surf = ax.plot_surface(zs_1, zs_2, y[:,:,0], linewidth=0, cmap=cm.coolwarm) ax.view_init(elev=30, azim=70) cbar = fig.colorbar(surf) ax.set_xlabel("$z_1$", fontsize=15) ax.set_ylabel("$z_2$", fontsize=15) ax.set_zlabel("$y_1$", fontsize=15) ax.set_title ("$P(t=1|mathbf{z})$") cbar.ax.set_ylabel("$P(t=1|mathbf{z})$", fontsize=15) plt.grid() plt.show()softmax函數的導數
在神經網絡中,使用softmax函數,我們需要知道softmax函數的導數。如果我們定義:
那么可以得到:
因此,softmax函數的輸出結果y對于它的輸入數據z的導數?yi/?zj可以定義為:
注意,當i = j時,softmax函數的倒數推導結果和Logistic函數一樣。
softmax函數的交叉熵損失函數在學習softmax函數的損失函數之前,我們先從學習它的最大似然函數開始。給定模型的參數組θ,利用這個參數組,我們可以得到輸入樣本的正確預測,正如在Logistic損失函數推導中,我們可以仿照寫出這個的最大似然估計:
根據聯合概率,我們可以將似然函數改寫成:P(t,z|θ),根據條件分布,我們最終可以得到如下公式:
因為我們不關心z的概率,所以公式又可以改寫為:L(θ|t,z)=P(t|z,θ)。而且,P(t|z, θ)可以被寫成P(t|z),如果θ會一個定值。因為,每一個ti都是依賴于整個z,而且只有其中一個t將會被激活,所以我們可以得到下式:
正如我們在Logistic函數中推導損失函數的導數一樣,最大化似然函數就是最小化它的負對數釋然函數:
其中,ξ表示交叉熵誤差函數。在二分類問題中,我們將t2定義為t2=1?t1。同理,在softmax函數中,我們也可以定義為:
在n個樣本的批處理中,交叉熵誤差函數可以這樣計算:
其中,當且僅當tic是1,那么樣本i是屬于類別c,yic是樣本i屬于類別c的概率。
softmax函數的交叉熵損失函數的推導損失函數對于zi的導數?ξ/?zi求解如下:
上式已經求解了當i=j和i≠j的兩種情況。
最終的結果為?ξ/?zi=yi?ti for all i ∈ C,這個求導結果和Logistic函數的交叉熵損失函數求導是一樣的,再次證明softmax函數是Logistic函數的一個擴展板。
完整代碼,點擊這里
作者:chen_h
微信號 & QQ:862251340
簡書地址:https://www.jianshu.com/p/8eb...
CoderPai 是一個專注于算法實戰的平臺,從基礎的算法到人工智能算法都有設計。如果你對算法實戰感興趣,請快快關注我們吧。加入AI實戰微信群,AI實戰QQ群,ACM算法微信群,ACM算法QQ群。長按或者掃描如下二維碼,關注 “CoderPai” 微信號(coderpai)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/41184.html
閱讀 1883·2021-09-28 09:36
閱讀 2435·2021-09-08 09:35
閱讀 3074·2019-08-30 15:53
閱讀 1561·2019-08-30 14:08
閱讀 673·2019-08-29 18:40
閱讀 2849·2019-08-29 13:57
閱讀 2711·2019-08-29 13:55
閱讀 690·2019-08-26 13:45