←前一篇 後一篇→
咱了解倒退攄演算法, 其實就是利用計算圖來共一个點的計算分拆, 成做上基本的數學式, 現此時就是愛共這寡基本運算的倒退攄公式揣出來, 才閣共 in 合起來。前一篇是分析,這篇是欲討論佮做伙。
A-hainn棧 (Affine Layer) 的觀念
Affine (華語: 仿射, 台語暫時用音譯: A-hainn) 是幾何學的名詞,Affine transformation 就是共一組點, 線, 抑是平面,對一個空間, 轉換到另一個空間。
這兩個空間是有關係的。
簡單舉一个例: 日落山的時陣,日頭光共你的影炤甲長ló-ló。嘛共你身軀邊的愛人的影炤甲長長長。日頭就是彼个 A-hainn 函式,共你佮你的愛人, 活佇真實世界的人,成做 (transform) 平面的影。
簡單舉一个例: 日落山的時陣,日頭光共你的影炤甲長ló-ló。嘛共你身軀邊的愛人的影炤甲長長長。日頭就是彼个 A-hainn 函式,共你佮你的愛人, 活佇真實世界的人,成做 (transform) 平面的影。
影佮你是有關係, 你振動, 伊嘛振動。你兩个徛做伙,影嘛黏牢牢。
影佮你是無仝--ê。伊無面無喙,干焦深淺無仝的烏,佇平面活動。
普通 A-hainn 運算,是矩陣 (Matrix)運算。
普通 A-hainn 運算,是矩陣 (Matrix)運算。
對另一個角度來講,就是共一組數字,透過固定的方式 (function, 函式), 成做另一組數字。
所以,神經網路對輸入,一棧一棧, 向前行的演算法,做 dot 運算閣加法:
這款矩陣 Dot 運算, 也就是一種 A-hainn 運算。
透過計算圖來分拆:
這款矩陣 Dot 運算, 也就是一種 A-hainn 運算。
Dot 運算的計算圖
加法真簡單, 咱來看 X* W = Y 就好.透過計算圖來分拆:
伊的倒退攄是:
其中
愛注意: 佇 Dot 運算, 順序是要緊的. X ● W 袂使寫做 W ● X. 當然, 你欲做甲真幼, 來推算 Dot 的倒退攄嘛是會使。彼是滿滿的數學.
啥乜是斜倒反咧? 咱回想 2 維陣列 ê 運算是有維度个, 準講 2x3 的 Mé-tshuì, 伊的倒反就是:
沿伊的對角線共伊反--過來, 成做 3x2 的 Mé-tshuì。
你若閣有印象, 伊略略仔有成乘法的倒退攄: 就是對輸入 X 來講, 攄轉來的變化,是受著另一爿輸入 W 的影響(乘法時是乘以 W 倍, Dot 運算時是 dot)。仝理, W 嘛是受著 X 的影響。咱就無閣詳細分拆這過程。咱注心來看為啥物欲有這个 Transpose。
其實,這是 uì 陣列的 dot 運算,算倒轉來需要个: 咱回想 Dot 運算的這張圖:
咱若是欲算轉來, uì [ [50, 68], [122, 167]] 顛倒反算轉來 [[1, 2, 3], [4, 5, 6]] 欲按怎做呢? Mé-tshuì 無除法, 伊的逆運算是揣出一个 Mé-tshuì, 共結果 dot 這个 Mé-tshuì 會當得著原來的 Mé-tshuì,彼个型是:
- Δ 是 diff 的意思。因為數學符號僫拍, 有時用字母 d 代替.
- 細个 T 佇 W 抑是 X 的正手爿較懸, 是Matrix 的斜倒反(Transpose, 音譯: Tsuán-su-pho-su, 簡單寫做 Tsuán-su-pho)。有時為著簡單拍字, 嘛寫做 ^T.
愛注意: 佇 Dot 運算, 順序是要緊的. X ● W 袂使寫做 W ● X. 當然, 你欲做甲真幼, 來推算 Dot 的倒退攄嘛是會使。彼是滿滿的數學.
沿伊的對角線共伊反--過來, 成做 3x2 的 Mé-tshuì。
你若閣有印象, 伊略略仔有成乘法的倒退攄: 就是對輸入 X 來講, 攄轉來的變化,是受著另一爿輸入 W 的影響(乘法時是乘以 W 倍, Dot 運算時是 dot)。仝理, W 嘛是受著 X 的影響。咱就無閣詳細分拆這過程。咱注心來看為啥物欲有這个 Transpose。
其實,這是 uì 陣列的 dot 運算,算倒轉來需要个: 咱回想 Dot 運算的這張圖:
咱若是欲算轉來, uì [ [50, 68], [122, 167]] 顛倒反算轉來 [[1, 2, 3], [4, 5, 6]] 欲按怎做呢? Mé-tshuì 無除法, 伊的逆運算是揣出一个 Mé-tshuì, 共結果 dot 這个 Mé-tshuì 會當得著原來的 Mé-tshuì,彼个型是:
X 的維度是偌濟呢? 咱 uì Matrix ê Dot 運算知影:
- dot 倒手爿Mé-tshuì 幾逝 (row) , 等號 (=) 算出來的 Mé-tshuì 就幾逝
- dot 正手爿Mé-tshuì 幾欄(column), 等號 (=) 算出來的 Mé-tshuì 就幾欄
所致,咱會當推算出來 X 的型是 2x3:
拄好就是原在 3x2 的斜倒反。當然,a1~a3, b1~b3 和原來的數字無仝,這你會使一个一个去算。
重點是: 咱佇遮欲解說的是: 倒退攄uì顛倒頭算轉來,因為輸入佮輸出的維度攏愛維持,中方使用著的 Mé-tshuì 就愛共伊對角反過來,這我共伊號做 "斜倒反(tshiâ-tó-ping)".
伊的寫法, 就是佇 layers.py 內面的 class Affine。
Softmax 的倒退攄
這若是學過微積分 (Calculus), 就會曉知按怎共伊算出來. 咱佇遮共伊直接寫落來:
閣小可整理一个, 就成做:
當然, y, 就是佇遮寫過个 y = 1/(1+exp(-x))。為啥物欲做這款的變化? 因為按呢較簡單算。y 的值佇向前行 (forward propagation) 就算出來矣, 咱倒退攄時,干焦做乘法當然比平方(pîng-hong) 閣指數(kí-sòo) 加真簡單。參考 layers.py 的 class Sigmoid 的 backward() 函式, 是毋是真屧貼?
閣小可整理一个, 就成做:
當然, y, 就是佇遮寫過个 y = 1/(1+exp(-x))。為啥物欲做這款的變化? 因為按呢較簡單算。y 的值佇向前行 (forward propagation) 就算出來矣, 咱倒退攄時,干焦做乘法當然比平方(pîng-hong) 閣指數(kí-sòo) 加真簡單。參考 layers.py 的 class Sigmoid 的 backward() 函式, 是毋是真屧貼?