Сомнения в "обратном распространении LSTM" и его экспоненциально долгом обучении
Вот реализация обратного распространения LSTM с нуля, я не уверен с dfhs (производной от состояния hs), я делаю это правильно? Пожалуйста, исправьте меня, где я ошибаюсь в своем коде, который я пробовал так много раз, но предсказание LSTM ужасно, неужели обучение LSTM занимает больше времени?? Любые предложения по обратному распространению очень важны, так как я не могу понять, что идет не так - заранее спасибо
Я попытался увеличить итерации до 10000 с 5000, что было изначально, и попытался уменьшить скорость обучения и увеличить размер пакета
def backward(xint,hprev,pcs,vy,nw):
xs , ys , cs , hs , fg , ig , cg , og = {},{},{},{},{},{},{},{}
hs[-1] = hprev
cs[-1] = pcs
intx = xint
#Forward propagation to store all the state necessary for back prop
for i in range(nw):
xp = np.zeros(xl)
xp[intx] = 1
x = np.hstack((hs[i-1],xp))
xs[i] = x
fg[i] = sigmoid(np.dot(x,wf))
ig[i] = sigmoid(np.dot(x,wi))
cg[i] = tangent(np.dot(x,wc))
csc = (cs[i-1] * sigmoid(np.dot(x,wf))) + (sigmoid(np.dot(x,wi)) * sigmoid(np.dot(x,wc)))
cs[i] = (cs[i-1] * sigmoid(np.dot(x,wf))) + (sigmoid(np.dot(x,wi)) * sigmoid(np.dot(x,wc)))
og[i] = sigmoid(np.dot(x,wo))
hs[i] = sigmoid(np.dot(x,wo)) * tangent(csc)
hsc = sigmoid(np.dot(x,wo)) * tangent(csc)
ys[i] = sigmoid(np.dot(hsc,wy))
intx = np.argmax(vy[i-1])
dwy = np.zeros((yl,d))
dwf = np.zeros((xl+yl,yl))
dwi = np.zeros((xl+yl,yl))
dwc = np.zeros((xl+yl,yl))
dwo = np.zeros((xl+yl,yl))
dfhs = np.zeros(yl)
dfcs = np.zeros(yl)
totalError = 0
#Back Propagation
for i in reversed(range(nw)):
merror = ys[i] - vy[i]
dwy += np.dot(np.atleast_2d(hs[i]).T,np.atleast_2d((merror*dsigmoid(ys[i]))))
error = np.dot(merror,wy.T)
totalError += np.sum(error)
e = np.clip(error+dfhs,-6,6)
dho = tangent(cs[i]) * e
dho = dsigmoid(og[i]) * dho
dwo += np.dot(np.atleast_2d(xs[i]).T,np.atleast_2d(dho))
dc = og[i] * e * dtangent(cs[i])
dc = np.clip(dc + dfcs,-6,6)
dhf = cs[i-1] * dc
dhf = dsigmoid(fg[i]) * dhf
dwf += np.dot(np.atleast_2d(xs[i]).T,np.atleast_2d(dhf))
dhi = cg[i] * dc
dhi = dsigmoid(ig[i]) * dhi
dwi += np.dot(np.atleast_2d(xs[i]).T,np.atleast_2d(dhi))
dhc = ig[i] * dc
dhc = dsigmoid(cg[i]) * dhi
dwc += np.dot(np.atleast_2d(xs[i]).T,np.atleast_2d(dhc))
dfhs = np.dot(dho,wo.T)[:yl]+np.dot(dhc,wc.T)[:yl]+np.dot(dhi,wi.T)[:yl]+np.dot(dhf,wf.T)[:yl]
dfcs = fg[i] * dc
return totalError , hs[nw-1] , cs[nw-1] , dwf , dwi , dwc , dwo , dwy
Ожидаемый Да:
[59, 28, 60, 4, 16, 41, 59, 23, 59, 49, 61, 60, 17, 1, 28, 59, 60, 66, 41, 28, 49, 16, 41, 60, 26, 22, 4, 12, 22, 60, 17, 16, 18, 28, 60, 9, 41, 16, 4, 60, 63, 41, 16, 34, 51, 79, 28, 65, 60, 65, 41, 28, 22, 4, 12, 61, 60, 1, 28, 60, 9, 16, 34, 59, 65, 60, 1, 23, 4, 12, 28, 79, 9, 60, 63, 41, 22, 59, 12, 9, 16, 41, 4, 28, 65, 60, 23, 59, 60, 1, 23, 12, 60, 51, 28, 65, 60, 23, 59, 63, 16, 60, 22, 60, 1, 16, 41, 41, 23, 51, 79, 28, 60, 46, 28, 41, 4, 23, 59, 47, 60, 45, 28, 60, 79, 22, 5, 60, 16, 59, 60, 1, 23, 12, 60, 22, 41, 4, 16, 34, 41, 14, 79, 23, 18, 28, 60, 51, 22, 52, 18, 61, 60, 22, 59, 65, 60, 23, 9, 60, 1, 28, 60, 79, 23, 9, 63, 28, 65, 60, 1, 23, 12, 60, 1, 28, 22, 65, 60, 22, 60, 79, 23, 63, 63, 79, 28, 60, 1, 28, 60, 52, 16, 34, 79, 65, 60, 12, 28, 28, 60, 1, 23, 12, 60, 51, 41, 16, 17, 59, 60, 51, 28, 79, 79, 5, 61, 60, 12, 79, 23,........]
Утром, когда Грегор Самса проснулся от смутных снов, он обнаружил, что превратился в своей постели в ужасных паразитов. Он лежал на спине, похожей на доспехи, и, немного приподняв голову, он мог видеть его коричневый живот, слегка выпуклый и разделенный арками на жесткие участки. Постельные принадлежности едва могли прикрыть его и, казалось, были готовы соскользнуть в любой момент. Его многочисленные ноги, ничтожно худые по сравнению с остальной частью его тела, беспомощно махали, когда он смотрел.
"Что случилось со мной?" он подумал. Это был не сон. Его комната, настоящая человеческая комната, хотя и слишком маленькая, мирно лежала между четырьмя знакомыми стенами. На столе лежала коллекция образцов текстиля - Самса была коммивояжером, а над ней висела картина, которую он недавно вырезал из иллюстрированного журнала и поместил в красивую позолоченную рамку. На нем была изображена дама в меховой шапке и меховом боа, которая сидела в вертикальном положении, поднимая тяжелую меховую муфту, которая закрывала всю ее предплечье в направлении зрителя.
Затем Грегор повернулся, чтобы посмотреть в окно на пасмурную погоду. Капли дождя.......
Actual Output:
[79, 66, 41, 16, 67, 49, 66, 73, 5, 9, 18, 76, 35, 22, 69, 75, 28, 55, 60, 6, 28, 6, 75, 62, 44, 62, 6, 62, 23, 23, 20, 35, 20, 20, 23, 55, 35, 35, 6, 53, 35, 63, 63, 63, 63, 63, 53, 63, 27, 53, 53, 23, 6, 26, 55, 35, 16, 23, 55, 38, 23, 38, 53, 53, 53, 74, 79, 79, 70, 61,........]
/*lGro"gG2yfk9;aq8e: ReR8xMxRxii1;11i:;;R);ttttt)t*))iRS:;oi:ziz)))0llB,b0oo)4***0ooooooooooooooooooooo00:oOzoo0:oooczzzznoooo9oomWaBob,1oFm"5ferr499hAd1""rrfBII..AAAAhkCWk...%%;qzz7/V@@PLx:P@o0PIPPJJk%M96*b@,BoTi ,/mU)UM*0YBa;oOjouu':ahhBBhQçdVgfPtP-L0JFuuJOwwsY6E/5XdzzgBB9z05LuVxx7xy;LLU6@eee..B5QuL@'ilPg66:@@@4@e@,4,k.../v?