Pytorchのhookとは何だろう?
Pytorchのhookとは何だろう?
記事中のretain_gradがよく分からなかったが,他の記事に当たると分かった
素直に公式のdoc見にいけよ,という感じではある
つまりは偏微分しているということ
code: grad.py
import torch
x=torch.tensor(4.0,requires_grad=True)
y=torch.tensor(2.0,requires_grad=True)
sum=x*x+2*y
sum.retain_grad()
double=x.register_hook(lambda grad:grad*2)
sum.backward()
この例では
$ x^2 + 2yを微分して$ x=4,y=2を代入する
ただし変数$ xにはhookが設定されているので,その分の処理が挟まる
$ 2x^2 + 2yとなる
偏微分の書き方がよく分からないが,$ z = x^2 + 2yとしていいのだろうか?
ひとまずそうすると
$ xは$ \frac{\partial_z}{\partial_x} = 4x,$ yは$ 2
代入して 16,42
yは係数しか残っていないので代入も何もない
一通り見たが,hookは学習済みのモデルに使用して勾配などを取り出す用途みたい?
モデルを渡したらそこまで計算して特徴量を拾ってくれる,という訳ではないのかな
そのやり方めちゃくちゃ非効率では?
仮にいちいち計算するやり方で,あくまでも検証用の道具であるなら,特徴量の結合に使うわけにはいかない
無駄な計算が増えて面倒なため