muooon commited on
Commit
95077fb
·
verified ·
1 Parent(s): add1541

Upload report-emoment.txt

Browse files
Files changed (1) hide show
  1. report-emoment.txt +60 -0
report-emoment.txt ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---emo系まとめ---
2
+ emonavi 最終進化の概要とまとめ
3
+ v3.0 は、(抽象化した)3つの高次momentを(まとめて)時間的適応する仕組みを導入し、
4
+ デフォルト shadow=False にしました、これにより emonavi はこれまでの最軽量級です、
5
+ なお3つの高次momentをそれぞれ1stepで適応するのは emosens 系です、
6
+ こちらは少し計算負荷がかかります… 代わりに airy/cats は特殊な進化を遂げています
7
+ 全emo系3つの高次momentの概念を抽象化し数学的計算負荷を大きく削減しつつ、
8
+ その効果を最大限発揮しています(まじめに統計計算するとVRAMは4倍以上になります)
9
+
10
+ これまでの経緯等をご存じない方のために改めて系譜を整理します、
11
+ emonavi (Adam参考):emosens(第2世代)
12
+ emofact (Adafactor参考):emozeal、emoairy(第2世代)
13
+ emolynx (Lion/Tiger参考):emoneco、emocats(第2世代)
14
+ emoclan (navi-fact-lynx 統合):(第2世代ナシ) ※ v3.0最強説あり
15
+ clan、zeal & neco は、過適合や崩壊領域での対応を"特殊変化"させる仕組みを有します
16
+ 上記3つは感情機構の柔軟性を証明するバリエーションです
17
+ airy/cats 特殊進化、Adafactorより軽量/Lionの符号に"重み"を加味
18
+ ※ 計算負荷少ない:emo系の第1世代(shadow=True) VRAM負荷高い
19
+ ※ VRAM軽量:emo系の第2世代(shadow=False) 計算負荷高い
20
+ 性能は速度かメモリかをトレードオフで選択することになります
21
+ v3.0 clan はどちらも満たす特別な存在かもしれません
22
+
23
+ ---統計的抽象化の理論的背景---
24
+ skewness = sum((s - mean)**3 for s in buf) / len(buf) / std**3
25
+ kurtosis = sum((s - mean)**4 for s in buf) / len(buf) / std**4
26
+ fifth-moment = sum((s - mean)**5 for s in buf) / len(buf) / std**5
27
+
28
+ 感情機構と高次momentの関係:
29
+ ◇感情EMA(Exponential Moving Average)
30
+ ・対象:loss の履歴
31
+ ・2つのEMA:短期と長期(short / long)
32
+ ・役割:感情の「短期」と「長期」の視点を持つ
33
+ ◇感情スカラー
34
+ ・定義:tanh(5 * diff)
35
+ ・意味:感情の「変化の勢い」を抽象化した値
36
+ ・tanhで圧縮:[-1, 1] に収めることで、安定性と非線形性を両立
37
+ ◇感情moment(高次moment)
38
+ ・対象:感情スカラーの履歴
39
+ ・役割:分布の形状(歪度・尖度・非対称性)を解析し、感情の「質感」を捉える
40
+ ・複数STEPを経ることで感情スカラーの履歴を保持せずに適用可能(これが重要)
41
+
42
+ ---感情moment活用---
43
+ 以下のコードだけで、どのoptimizerにも"感情moment"を適用できます
44
+
45
+ # 感情EMA更新(緊張と安静)
46
+ def _update_ema(self, state, loss_val):
47
+ ema = state.setdefault('ema', {})
48
+ ema['short'] = 0.3 * loss_val + 0.7 * ema.get('short', loss_val)
49
+ ema['long'] = 0.01 * loss_val + 0.99 * ema.get('long', loss_val)
50
+ return ema
51
+
52
+ # 感情スカラー値生成(EMA差分、滑らかな非線形スカラー、tanh 5 * diff で鋭敏さ強調)
53
+ def _compute_scalar(self, ema):
54
+ diff = ema['short'] - ema['long']
55
+ return math.tanh(5 * diff)
56
+
57
+ # 実際の勾配更新式を記述してください
58
+
59
+ # 感情moment適用 "* (1 - abs(scalar))" 更新式に合うものにしてください
60
+ p.addcdiv_(exp_avg, denom, value=-step_size * (1 - abs(scalar)))