<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      一種偏主觀的矩陣乘法梯度推導(dǎo)方法

      很早在紙上推導(dǎo)過梯度的計算方法,但每次都忘記推導(dǎo)過程反復(fù)推導(dǎo)。于此想總結(jié)新的記憶方法。

      梯度下降推導(dǎo)過程難以記憶來自于矩陣微積分,矩陣微積分中涉及標量、向量、矩陣之間兩兩求導(dǎo)操作,其定義如下圖,√ 表示存在定義,x 表示不存在定義[1]

      函數(shù) \ 自變量 scalar vector matrix
      scalar √(Nabla)
      vector √(Jacobi) ×
      matrix × ×
      • 矩陣和矩陣之間、向量和矩陣之間不存在導(dǎo)數(shù)
      • 導(dǎo)數(shù)的維度是函數(shù)、自變量維度之和,反應(yīng)定義導(dǎo)數(shù)時函數(shù)和自變量之間的維度是正交關(guān)系,導(dǎo)數(shù)中每個元素都是標量求導(dǎo)

      矩陣之間、矩陣向量之間不存在導(dǎo)數(shù)的原因是我們將定義范圍限制在最高二維矩陣中,所以維度不能超過2,此類導(dǎo)數(shù)定義不存在。對于矩陣乘法 \(\mathbf{Y}_{B , O} = \mathbf{X}_{B , I} \mathbf{W}_{O , I}^T\) ,我們當然希望能夠以矩陣形式優(yōu)雅地推導(dǎo)整體公式,但矩陣-矩陣之間并不存在導(dǎo)數(shù)的定義,需要頻繁在標量-向量-矩陣之間切換,或者引入許多額外 Nabla 在矩陣作用的關(guān)系,導(dǎo)致推理過程別扭不美觀。

      因此引入張量,允許變量維度超過 2 維,便可定義任意兩個張量之間的導(dǎo)數(shù)。注意知道 \(\mathbf{Y}\) 的維度 B 來自 \(\mathbf{X}\),維度 O 來自 \(\mathbf{W}\),但從函數(shù)角度來看,只是定義了一個 \(R^{B\times I} , R^{O \times I} \rightarrow R^{B \times O}\) 的函數(shù),應(yīng)將這些維度用不同的符號區(qū)分。

      定義矩陣乘法和維度:

      \[\mathbf{Y}_{B' , O'} = \mathbf{X}_{B , I'} \mathbf{W}_{O , I}^T \]

      已知損失函數(shù) F 相對輸出張量梯度:

      \[\frac{\partial F}{\partial \mathbf{Y}} \in R^{B'\times O'} \]

      則有

      \[\begin{align*} \frac{\partial F}{\partial \mathbf{W}}&=\frac{\partial F}{\partial \mathbf{Y}} \frac{\partial \mathbf{Y}}{\partial \mathbf{W}} \in R^{O\times I}\\ \frac{\partial \mathbf{Y}}{\partial \mathbf{W}} &\in R^{B'\times O' \times O \times I} \end{align*} \]

      這個過程中假設(shè)張量也滿足鏈式法則,且鏈式法則傳遞關(guān)系通過張量乘法也就是 Einsum 規(guī)約相同符號維度,是否嚴格成立需要補充證明。

      接下來需要求解具體 \(\frac{\partial \mathbf{Y}}{\partial \mathbf{W}}\) ,不幸的是仍然需要拆分到標量求導(dǎo)。這種定義方法只包含兩個層次,多維度的張量表示,以及具體計算的標量表示。

      \[\begin{align*} y_{b',o'} &= \sum_{i \in I} w_{o,i} x_{b,i'}\\ s.t.\quad b' &= b\\ s.t. \quad o' &= o\\ s.t. \quad i' &= i \end{align*} \]

      可得:

      \[\begin{cases} \frac{\partial y_{b',o'}}{\partial w_{o,i}} = x_{b',i},& o'=o\\ \frac{\partial y_{b',o'}}{\partial w_{o,i}} = 0,& o' \neq o \end{cases} \]

      換句話說,\(\frac{\partial \mathbf{Y}}{\partial \mathbf{W}}\) 選取任意坐標 \((B=b', I=i)\) 做切片,切出來的 \(R^{O'\times O}\) 的矩陣是單位陣的倍數(shù)。

      附帶驗證程序:

      import torch
      import einops
      
      B = 8
      O = 32
      I = 256
      
      B_ = B
      O_ = O
      I_ = I
      
      x = torch.randn(B, I_).to("cuda")
      w = torch.randn(O, I).to("cuda").requires_grad_(True)  
      y = torch.einsum('bi,oi->bo', x, w)
      
      df_dy = torch.randn(B_, O_).to("cuda")
      
      with torch.no_grad():
          dy_dw = torch.zeros(B_, O_, O, I).to("cuda")
          for b_ in range(B_):
              print(f'batch {b_}')
              for o_ in range(O_):
                  for o in range(O):
                      for i in range(I):
                          if o_ == o:
                              dy_dw[b_, o_, o, i] = x[b_, i]
      
          df_dw = torch.einsum('BO,BOoi->oi', df_dy, dy_dw)
      
      if w.grad is not None:
          w.grad.zero_()
      
      y.backward(df_dy)  
      
      auto_dy_dw = w.grad
      
      if auto_dy_dw is None:
          print("Error: w.grad is None. Gradient was not properly calculated.")
      else:
          diff = torch.abs(auto_dy_dw - df_dw)
          print(f'Max diff: {diff.max()}')
      

      這邊建模好處是用統(tǒng)一張量求導(dǎo)運算替代混亂的各種 矩陣-向量-標量 求導(dǎo)公式,但該求導(dǎo)方法普適和矩陣乘法無關(guān),需要額外理解和建模維度之間的約束關(guān)系。到底哪種方便見仁見智了。

      或者可以利用這種推導(dǎo)理解為什么直接用維度湊 einsum 表達式就可以直接表示梯度。

      import torch
      import einops
      
      B = 8
      O = 32
      I = 256
      
      x = torch.randn(B, I_).to("cuda")
      w = torch.randn(O, I).to("cuda")
      y = torch.einsum('bi,oi->bo', x, w)
      
      df_dy = torch.randn(B, O).to("cuda")
      df_dw = torch.einsum('bo,bi->oi', df_dy, x)
      

      1. https://en.wikipedia.org/wiki/Matrix_calculus ??

      posted @ 2025-07-04 16:20  DevilXXL  閱讀(52)  評論(3)    收藏  舉報
      主站蜘蛛池模板: 国产高清国产精品国产专区| 亚洲欧美高清在线精品一区二区 | 精品人妻av区乱码| 久久精品亚洲中文字幕无码网站| 国产精品成人免费视频网站京东| 国产成人精品白浆免费视频试看| 国产精品自在自线免费观看| 亚洲欧美国产日韩天堂区| 莱西市| 欧美人与动牲猛交A欧美精品| 国产综合视频一区二区三区| 少妇被粗大的猛烈进出 | 亚洲精品第一国产综合精品| 中文字幕日韩精品国产| 中文字幕久区久久中文字幕| 亚洲日韩国产成网在线观看| 国产成人欧美一区二区三区在线| 成人免费无遮挡无码黄漫视频| av老司机亚洲精品天堂| 又粗又紧又湿又爽的视频| 亚洲日产韩国一二三四区| 国产永久免费高清在线| 午夜DY888国产精品影院| 国产成人午夜一区二区三区| 精品一区二区三人妻视频| 久久精品国产亚洲av麻豆小说| 欧美人与动牲交A免费观看| 国产亚洲一区二区三区av| 久久综合干| 国产午夜伦伦午夜伦无码| 亚洲自拍偷拍中文字幕色| 亚洲综合日韩av在线| 亚洲成人av综合一区| 国产特色一区二区三区视频| 大桥未久亚洲无av码在线| 免费观看的av在线播放| 国产无套内射普通话对白| 又黄又爽又色的少妇毛片| 国产成人女人在线观看| 亚洲午夜伦费影视在线观看| 中文字幕不卡在线播放|