PyTorch-Course icon indicating copy to clipboard operation
PyTorch-Course copied to clipboard

关于init_hidden(self, bsz, requires_grad=True) 的问题

Open SuMarsss opened this issue 5 years ago • 3 comments

你好,褚博士 为什么hidden需要grad,下一个seq只需要hidden中的值,不需要hidden的梯度啊

SuMarsss avatar Dec 18 '19 10:12 SuMarsss

这个在训练的时候主要是为了防止sequence太长,back prop距离太远,内存会不够用。如果在hidden位置截断gradient就不会一路back prop回去了。

ZeweiChu avatar Dec 28 '19 04:12 ZeweiChu

我的意思是detach就可以截断grad反向传播到上个序列,即使hidden的requires_grad=False。这里为什么要指定requires_grad=True?

SuMarsss avatar Dec 28 '19 09:12 SuMarsss

我认为这里的参数requires_grad=True是多余的,hidden不需要grad。

  1. requires_grad=True 不能起到阻止back prop的作用,detach才能起到阻止back prop的作用。训练时,将hidden的requires_grad设置为False,代码依然可以正确运行。
  2. 从整段代码上来看,hidden不是权重,应该不需要grad,torch里应该只有权重tensor才需要设置requires_grad=True。
  3. 如果需要back prop追踪到第一个seq的初始hidden,也只需要loss.backward(retain_graph=True),并不需要设置hidden的requires_grad=True

SuMarsss avatar Dec 30 '19 12:12 SuMarsss