!關(guān)于昨晚那么b1和b2求導(dǎo)后究恤,為什么要求和的簡單說明俭令。
關(guān)鍵思想:“后宮佳麗三千人,三千寵愛在一身”部宿。每列的score對d2有N個梯度唤蔗,但d2每列只有一個值,所以要求和窟赏。
疑問代碼段圖片:不能手動劃線,大致下圖中間區(qū)域哈
舉個栗子說明:N為輸入的維度即“每行是一個圖片”箱季,C為分類維度即“每列是一個類別”
score=N * C,也就是N=10行涯穷,C=7列,就像下面這個樣子:
scores=[
0.2? 0.3? 0.4? 0.5? 0.7? 0.1? 0.9
0.1? 0.2? 0.3? 0.5? 0.6? 0.9? 0.1
0.2? 0.3? 0.4? 0.5? 0.7? 0.1? 0.9
0.1? 0.2? 0.3? 0.5? 0.6? 0.9? 0.1
0.2? 0.3? 0.4? 0.5? 0.7? 0.1? 0.9
0.1? 0.2? 0.3? 0.5? 0.6? 0.9? 0.1
0.2? 0.3? 0.4? 0.5? 0.7? 0.1? 0.9
0.1? 0.2? 0.3? 0.5? 0.6? 0.9? 0.1
0.2? 0.3? 0.4? 0.5? 0.7? 0.1? 0.9
0.1? 0.2? 0.3? 0.5? 0.6? 0.9? 0.1
]
b2在本代碼中實際上是一個行向量藏雏,像下面這個樣子
b2=[
0.2? 0.3? 0.4? 0.5? 0.7? 0.1? 0.9
]
又因為scores=W2 * h? +b
所以實際加的時候b要在列上“復(fù)制”展開拷况,大概是這個樣子:
b2=[
0.2? 0.3? 0.4? 0.5? 0.7? 0.1? 0.9
0.2? 0.3? 0.4? 0.5? 0.7? 0.1? 0.9
0.2? 0.3? 0.4? 0.5? 0.7? 0.1? 0.9
0.2? 0.3? 0.4? 0.5? 0.7? 0.1? 0.9
0.2? 0.3? 0.4? 0.5? 0.7? 0.1? 0.9
0.2? 0.3? 0.4? 0.5? 0.7? 0.1? 0.9
0.2? 0.3? 0.4? 0.5? 0.7? 0.1? 0.9
0.2? 0.3? 0.4? 0.5? 0.7? 0.1? 0.9
0.2? 0.3? 0.4? 0.5? 0.7? 0.1? 0.9
0.2? 0.3? 0.4? 0.5? 0.7? 0.1? 0.9
]
所以,對于每一個score里面的元素掘殴,比如第一列赚瘦,每個里面都有0.2(b2的第一個元素)的加量成分
scores=[
0.2=wh+0.2? 0.3? 0.4? 0.5? 0.7? 0.1? 0.9
0.1=wh+0.2? 0.2? 0.3? 0.5? 0.6? 0.9? 0.1
0.2=wh+0.2? 0.3? 0.4? 0.5? 0.7? 0.1? 0.9
0.1=wh+0.2? 0.2? 0.3? 0.5? 0.6? 0.9? 0.1
0.2=wh+0.2? 0.3? 0.4? 0.5? 0.7? 0.1? 0.9
0.1=wh+0.2? 0.2? 0.3? 0.5? 0.6? 0.9? 0.1
0.2=wb+0.2? 0.3? 0.4? 0.5? 0.7? 0.1? 0.9
0.1=wh+0.2? 0.2? 0.3? 0.5? 0.6? 0.9? 0.1
0.2=wh+0.2? 0.3? 0.4? 0.5? 0.7? 0.1? 0.9
0.1=wh+0.2? 0.2? 0.3? 0.5? 0.6? 0.9? 0.1
]
所以,b2的第一列中每個元素的梯度計算如下:
db2[0,0]=1*dscore[0,0]
db2[0,1]=1*dscore[0,1]
db2[0,2]=1*dscore[0,2]
db2[0,3]=1*dscore[0,3]
db2[0,4]=1*dscore[0,4]
db2[0,5]=1*dscore[0,5]
db2[0,6]=1*dscore[0,6]
db2[0,7]=1*dscore[0,7]
db2[0,8]=1*dscore[0,8]
db2[0,9]=1*dscore[0,9]
所以奏寨,
每個的梯度如上所示起意,但最后這些梯度都要放在單個b[0]身上,所謂“三千寵愛在一身”病瞳,“所以梯度全歸一人”揽咕,于是像這樣相加:
db2[0] = db2[0,N] = 1 * {dscore[0,0]+1*dscore[0,1]+...+1*dscore[0,9]}
不直接相加的話也可以,但那樣b就不能設(shè)定成一維向量了套菜。
或者還可以加權(quán)求和亲善,所謂“三千寵愛,程度各不相同”逗柴,加權(quán)求和:
db2[0] = db2[0,N] = 1 * {dscore[0,0]*d0+1*dscore[0,1]*d1+...+1*dscore[0,9]*d9}
Numpy矩陣計算確實很強大蛹头,和matlab的點積、矩陣相乘有點區(qū)別戏溺,使用的時候要注意這一點渣蜗。