首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

Theano 學習筆記(四):自動求導與雅可比/海森矩陣計算

     編輯:C++ 入門

Theano 學習筆記(四):自動求導與雅可比/海森矩陣計算

Theano 通過 T.grad 實現符號微分,支援標量、向量、矩陣的高階導數計算。

基本求導

x = T.dscalar('x')
y = x ** 2
gy = T.grad(y, x)  # 符號導數 2*x
f = function([x], gy)
f(4)  # 8.0

pp() 可打印優化前後的符號表達式。

向量函數求導(雅可比矩陣)

x = T.dvector('x')
y = x ** 2
J, updates = theano.scan(lambda i, y, x: T.grad(y[i], x),
                         sequences=T.arange(y.shape[0]),
                         non_sequences=[y, x])
f = function([x], J, updates=updates)
f([4, 4])  # [[8, 0], [0, 8]]

海森矩陣(二階導數)

x = T.dvector('x')
cost = (x ** 2).sum()
gy = T.grad(cost, x)
H, updates = theano.scan(lambda i, gy, x: T.grad(gy[i], x),
                         sequences=T.arange(gy.shape[0]),
                         non_sequences=[gy, x])

矩陣-向量積(Rop / Lop)

  • 雅可比右乘 J * v:T.Rop(y, W, V)
  • 雅可比左乘 v^T * J:T.Lop(y, W, v)
  • 海森向量積 H * v:T.Rop(gy, x, v)

這些操作避免了顯式構造大矩陣,對優化算法(如牛頓法、共軛梯度)至關重要。

注意事項

  • T.grad 第一參數必須是標量,向量需先 T.sum()。
  • scan 比 Python 循環構建符號圖效率高得多。
  • 符號圖優化器會自動簡化表達式(如 2*x)。

掌握 Theano 自動微分機制,能高效實現複雜梯度下降與二階優化算法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved