I’m not seeing how to delete this post - but I was actually able to figure out the mistake. Small bug - when calculating the loss, I was comparing the output to the current word, instead of the output to the future word.  So when feeding in <GO>, I was accumulating loss if the network didn’t predict <GO>, essentially teaching it to predict the word I feed it because that’s what minimizes the loss.