muooon commited on
Commit
05d62ba
·
verified ·
1 Parent(s): fd2f593

Upload 5 files

Browse files
2Gv38_AutoLR/emoairy.py CHANGED
@@ -3,13 +3,12 @@ from torch.optim import Optimizer
3
  import math
4
 
5
  """
6
- EmoAiry v3.8.1 (260202) shadow-system v3.1 -moment v3.1 emoPulse v3.8
7
- emoScorp、emoPulse、についてアグレッシブな更新にも耐えられるように調整し安全性を向上
8
- EmoAiry v3.7.6 (260109) shadow-system v3.1 -moment v3.1 emoPulse v3.7
9
- EmoFact v3.6 継承 emoDrive 機構を emoPulse へ統合し簡略化(循環器的機構)
10
  emoPulse 機構により完全自動化を目指す(ユーザーによる emoScope 調整可/改善度反映率)
11
- dNR係数により emoPulse に履歴を混ぜて安定させた(d / N 履歴 による信頼度の維持)
12
- Early scalar、Early Stop、効率化しつつ精度向上させ負荷も軽減する等の改修と微調整
13
  """
14
 
15
  class EmoAiry(Optimizer):
@@ -138,9 +137,15 @@ class EmoAiry(Optimizer):
138
  # 分散情報から勾配の近似行列を生成
139
  # AB行列として見立てたものを直接生成し更新項を計算する
140
  # A = sqrt(r_sq), B = sqrt(c_sq) AB行列近似を再現し履歴化で平滑化する
141
- state.setdefault('exp_avg_r', torch.zeros_like(r_sq)).mul_(beta2).add_(r_sq, alpha=1 - beta2)
142
- state.setdefault('exp_avg_c', torch.zeros_like(c_sq)).mul_(beta2).add_(c_sq, alpha=1 - beta2)
143
-
 
 
 
 
 
 
144
  # 再構築した近似勾配の平方根の積で正規化
145
  denom = torch.sqrt(state['exp_avg_r'] * state['exp_avg_c']).add_(group['eps'])
146
  # 最終的な更新項を計算
@@ -148,7 +153,9 @@ class EmoAiry(Optimizer):
148
 
149
  # 1次元(ベクトル)の勾配補正
150
  else:
151
- exp_avg_sq = state.setdefault('exp_avg_sq', torch.zeros_like(p))
 
 
152
  exp_avg_sq.mul_(beta2).addcmul_(grad, grad, value=1 - beta2)
153
  denom = exp_avg_sq.sqrt().add_(group['eps'])
154
  # 最終的な更新項を計算
@@ -168,8 +175,9 @@ class EmoAiry(Optimizer):
168
  # Early Stop:瞬間値と33step分の履歴の差分で True にするだけ
169
  # 誤判定防止をしないのは点灯頻度で停止準備(予兆)にするため
170
  if abs(scalar) <= 5e-6 and abs(Noise_base - d_base) <= 5e-7:
 
 
171
  self.should_stop = True # 💡 外部からこれを見て判断可
172
- self.emoScope = 1.0 # ユーザー意思を目的の収束へ整える
173
  else:
174
  self.should_stop = False # 💡 誤判定などの取り消し
175
 
 
3
  import math
4
 
5
  """
6
+ EmoAiry v3.8.3 (260215) Standard Edition
7
+ shadow-system v3.1 -moment v3.1 emoPulse v3.8
8
+ これまでの emo系 のすべて、emo系 v3.7 を継承し、早期停止関連の効率化やコード修正等を実施
9
+ EmoAiry v3.8.1 (260201) shadow-system v3.1 -moment v3.1 emoPulse v3.7
10
  emoPulse 機構により完全自動化を目指す(ユーザーによる emoScope 調整可/改善度反映率)
11
+ emoScorp、emoPulse、についてアグレッシブな更新にも耐えられるように調整し安全性を向上
 
12
  """
13
 
14
  class EmoAiry(Optimizer):
 
137
  # 分散情報から勾配の近似行列を生成
138
  # AB行列として見立てたものを直接生成し更新項を計算する
139
  # A = sqrt(r_sq), B = sqrt(c_sq) AB行列近似を再現し履歴化で平滑化する
140
+ if 'exp_avg_r' not in state:
141
+ exp_avg_r = state.setdefault('exp_avg_r', torch.zeros_like(r_sq))
142
+ exp_avg_c = state.setdefault('exp_avg_c', torch.zeros_like(c_sq))
143
+
144
+ exp_avg_r = state['exp_avg_r']
145
+ exp_avg_c = state['exp_avg_c']
146
+ # 指数移動平均の更新
147
+ exp_avg_r.mul_(beta2).add_(r_sq, alpha=1 - beta2)
148
+ exp_avg_c.mul_(beta2).add_(c_sq, alpha=1 - beta2)
149
  # 再構築した近似勾配の平方根の積で正規化
150
  denom = torch.sqrt(state['exp_avg_r'] * state['exp_avg_c']).add_(group['eps'])
151
  # 最終的な更新項を計算
 
153
 
154
  # 1次元(ベクトル)の勾配補正
155
  else:
156
+ if 'exp_avg' not in state:
157
+ exp_avg_sq = state.setdefault('exp_avg_sq', torch.zeros_like(p))
158
+ exp_avg_sq = state['exp_avg_sq']
159
  exp_avg_sq.mul_(beta2).addcmul_(grad, grad, value=1 - beta2)
160
  denom = exp_avg_sq.sqrt().add_(group['eps'])
161
  # 最終的な更新項を計算
 
175
  # Early Stop:瞬間値と33step分の履歴の差分で True にするだけ
176
  # 誤判定防止をしないのは点灯頻度で停止準備(予兆)にするため
177
  if abs(scalar) <= 5e-6 and abs(Noise_base - d_base) <= 5e-7:
178
+ if not self.should_stop:
179
+ self.emoScope = 1.0 # ユーザー意思を目的の収束へ整える
180
  self.should_stop = True # 💡 外部からこれを見て判断可
 
181
  else:
182
  self.should_stop = False # 💡 誤判定などの取り消し
183
 
2Gv38_AutoLR/emocats.py CHANGED
@@ -3,13 +3,12 @@ from torch.optim import Optimizer
3
  import math
4
 
5
  """
6
- EmoCats v3.8.1 (260202) shadow-system v3.1 -moment v3.1 emoPulse v3.8
7
- emoScorp、emoPulse、についてアグレッシブな更新にも耐えられるように調整し安全性を向上
8
- EmoCats v3.7.6 (260109) shadow-system v3.1 -moment v3.1 emoPulse v3.7
9
- EmoLynx v3.6 継承 emoDrive 機構を emoPulse へ統合し簡略化(循環器的機構)
10
  emoPulse 機構により完全自動化を目指す(ユーザーによる emoScope 調整可/改善度反映率)
11
- dNR係数により emoPulse に履歴を混ぜて安定させた(d / N 履歴 による信頼度の維持)
12
- Early scalar、Early Stop、効率化しつつ精度向上させ負荷も軽減する等の改修と微調整
13
  """
14
 
15
  class EmoCats(Optimizer):
@@ -151,8 +150,9 @@ class EmoCats(Optimizer):
151
  # Early Stop:瞬間値と33step分の履歴の差分で True にするだけ
152
  # 誤判定防止をしないのは点灯頻度で停止準備(予兆)にするため
153
  if abs(scalar) <= 5e-6 and abs(Noise_base - d_base) <= 5e-7:
 
 
154
  self.should_stop = True # 💡 外部からこれを見て判断可
155
- self.emoScope = 1.0 # ユーザー意思を目的の収束へ整える
156
  else:
157
  self.should_stop = False # 💡 誤判定などの取り消し
158
 
 
3
  import math
4
 
5
  """
6
+ EmoCats v3.8.3 (260215) Standard Edition
7
+ shadow-system v3.1 -moment v3.1 emoPulse v3.8
8
+ これまでの emo系 のすべて、emo系 v3.7 を継承し、早期停止関連の効率化やコード修正等を実施
9
+ EmoAiry v3.8.1 (260201) shadow-system v3.1 -moment v3.1 emoPulse v3.7
10
  emoPulse 機構により完全自動化を目指す(ユーザーによる emoScope 調整可/改善度反映率)
11
+ emoScorp、emoPulse、についてアグレッシブな更新にも耐えられるように調整し安全性を向上
 
12
  """
13
 
14
  class EmoCats(Optimizer):
 
150
  # Early Stop:瞬間値と33step分の履歴の差分で True にするだけ
151
  # 誤判定防止をしないのは点灯頻度で停止準備(予兆)にするため
152
  if abs(scalar) <= 5e-6 and abs(Noise_base - d_base) <= 5e-7:
153
+ if not self.should_stop:
154
+ self.emoScope = 1.0 # ユーザー意思を目的の収束へ整える
155
  self.should_stop = True # 💡 外部からこれを見て判断可
 
156
  else:
157
  self.should_stop = False # 💡 誤判定などの取り消し
158
 
2Gv38_AutoLR/emosens.py CHANGED
@@ -3,13 +3,12 @@ from torch.optim import Optimizer
3
  import math
4
 
5
  """
6
- EmoSens v3.8.1 (260202) shadow-system v3.1 -moment v3.1 emoPulse v3.8
7
- emoScorp、emoPulse、についてアグレッシブな更新にも耐えられるように調整し安全性を向上
8
- EmoSens v3.7.6 (260109) shadow-system v3.1 -moment v3.1 emoPulse v3.7
9
- EmoNavi v3.6 継承 emoDrive 機構を emoPulse へ統合し簡略化(循環器的機構)
10
  emoPulse 機構により完全自動化を目指す(ユーザーによる emoScope 調整可/改善度反映率)
11
- dNR係数により emoPulse に履歴を混ぜて安定させた(d / N 履歴 による信頼度の維持)
12
- Early scalar、Early Stop、効率化しつつ精度向上させ負荷も軽減する等の改修と微調整
13
  """
14
 
15
  class EmoSens(Optimizer):
@@ -130,8 +129,12 @@ class EmoSens(Optimizer):
130
 
131
  # --- Start Gradient Update Logic ---
132
  # 1次・2次モーメントを使った勾配補正(decoupled weight decay)
133
- exp_avg = state.setdefault('exp_avg', torch.zeros_like(p))
134
- exp_avg_sq = state.setdefault('exp_avg_sq', torch.zeros_like(p))
 
 
 
 
135
 
136
  exp_avg.mul_(beta1).add_(grad, alpha=1 - beta1)
137
  exp_avg_sq.mul_(beta2).addcmul_(grad, grad, value=1 - beta2)
@@ -151,8 +154,9 @@ class EmoSens(Optimizer):
151
  # Early Stop:瞬間値と33step分の履歴の差分で True にするだけ
152
  # 誤判定防止をしないのは点灯頻度で停止準備(予兆)にするため
153
  if abs(scalar) <= 5e-6 and abs(Noise_base - d_base) <= 5e-7:
 
 
154
  self.should_stop = True # 💡 外部からこれを見て判断可
155
- self.emoScope = 1.0 # ユーザー意思を目的の収束へ整える
156
  else:
157
  self.should_stop = False # 💡 誤判定などの取り消し
158
 
 
3
  import math
4
 
5
  """
6
+ EmoSens v3.8.3 (260215) Standard Edition
7
+ shadow-system v3.1 -moment v3.1 emoPulse v3.8
8
+ これまでの emo系 のすべて、emo系 v3.7 を継承し、早期停止関連の効率化やコード修正等を実施
9
+ EmoAiry v3.8.1 (260201) shadow-system v3.1 -moment v3.1 emoPulse v3.7
10
  emoPulse 機構により完全自動化を目指す(ユーザーによる emoScope 調整可/改善度反映率)
11
+ emoScorp、emoPulse、についてアグレッシブな更新にも耐えられるように調整し安全性を向上
 
12
  """
13
 
14
  class EmoSens(Optimizer):
 
129
 
130
  # --- Start Gradient Update Logic ---
131
  # 1次・2次モーメントを使った勾配補正(decoupled weight decay)
132
+ if 'exp_avg' not in state:
133
+ exp_avg = state.setdefault('exp_avg', torch.zeros_like(p))
134
+ exp_avg_sq = state.setdefault('exp_avg_sq', torch.zeros_like(p))
135
+
136
+ exp_avg = state['exp_avg']
137
+ exp_avg_sq = state['exp_avg_sq']
138
 
139
  exp_avg.mul_(beta1).add_(grad, alpha=1 - beta1)
140
  exp_avg_sq.mul_(beta2).addcmul_(grad, grad, value=1 - beta2)
 
154
  # Early Stop:瞬間値と33step分の履歴の差分で True にするだけ
155
  # 誤判定防止をしないのは点灯頻度で停止準備(予兆)にするため
156
  if abs(scalar) <= 5e-6 and abs(Noise_base - d_base) <= 5e-7:
157
+ if not self.should_stop:
158
+ self.emoScope = 1.0 # ユーザー意思を目的の収束へ整える
159
  self.should_stop = True # 💡 外部からこれを見て判断可
 
160
  else:
161
  self.should_stop = False # 💡 誤判定などの取り消し
162
 
2Gv38_AutoLR/emotion.py CHANGED
@@ -3,9 +3,9 @@ from torch.optim import Optimizer
3
  import math
4
 
5
  """
6
- EmoTion v3.8.1 (260204) Moment-Free Edition
7
  shadow-system v3.1 -moment v3.1 emoPulse v3.8
8
- これまでの emo系 のすべて、emo系 v3.7 を継承し独自更新式を持つ、完全オリジナル最適化器
9
  The “geometric relationship” between "W"eight and "G"radient Method
10
  これまでの統計手法をやめ、重みベクトルと勾配ベクトルの直交性(W-Ref Geometry)に基づいて、
11
  過去の慣性と現在の勾配を動的にブレンドする、1次モーメント単一保持型の幾何学的最適化アルゴリズム
@@ -130,37 +130,36 @@ class EmoTion(Optimizer):
130
 
131
  # --- Start Gradient Update Logic ---
132
  # --- EmoTion (Pure W-Ref Geometry) ---
133
- # 1. 1次モーメント(exp_avg)の初期化: O(N) のみ
134
  if 'exp_avg' not in state:
135
  state['exp_avg'] = torch.zeros_like(p)
136
  state['rho_ema'] = torch.zeros(1, device=p.device, dtype=p.dtype)
137
 
138
- # 2. W-Reference / Geometry (幾何学的直交性) 算出
 
 
 
139
  # 勾配が重み(実体)に対して「新鮮」(直交)か「冗長」(平行)かを判定
140
  # 高次元空間における集中現象を利用した「情報の選別」
141
- rho = torch.abs(torch.sum(p * grad)) / (p_norm * g_norm + 1e-8)
142
 
143
  # rhoの履歴更新 (スカラーのみ)
144
- state['rho_ema'].mul_(beta1).add_(rho, alpha=1 - beta1)
145
 
146
- # 3. 幾何学的適応型ブレンド
147
  # 従来の beta1 固定ではなく、直交しているほど今の勾配 g を強く取り込む
148
  # freshness が高い(rhoが小さい)ほど、慣性を無視して新しい方向へ舵を切る
149
- freshness = (1.0 - state['rho_ema'])
150
 
151
  # exp_avg = beta1 * exp_avg + (1 - beta1) * grad の「幾何学的拡張」
152
  # 慣性と現時点の勾配を、直交性に基づいて混ぜ合わせる
153
- state['exp_avg'].mul_(beta1).add_(grad, alpha=(1.0 - beta1) * freshness.item())
154
-
155
- # 4. 更新ベクトルの決定 (Lionライクな符号抽出、または生ベクトル)
156
- # ここでは「方向の純度」を優先し、更新の勢いを一定に保つ
157
- update_vec = torch.sign(state['exp_avg'])
158
 
159
- # 5. 重みの更新 (emoPulse = 絶対歩幅)
160
  if group['weight_decay'] != 0:
161
- p.mul_(1 - emoPulse * group['weight_decay'])
162
 
163
- p.add_(update_vec, alpha=-emoPulse)
164
  # --- End Gradient Update Logic ---
165
 
166
  # ユーザー指定初期LRを実効値(emoPulse)で可視化する(PyTorch標準)
@@ -171,8 +170,9 @@ class EmoTion(Optimizer):
171
  # Early Stop:瞬間値と33step分の履歴の差分で True にするだけ
172
  # 誤判定防止をしないのは点灯頻度で停止準備(予兆)にするため
173
  if abs(scalar) <= 5e-6 and abs(Noise_base - d_base) <= 5e-7:
 
 
174
  self.should_stop = True # 💡 外部からこれを見て判断可
175
- self.emoScope = 1.0 # ユーザー意思を目的の収束へ整える
176
  else:
177
  self.should_stop = False # 💡 誤判定などの取り消し
178
 
 
3
  import math
4
 
5
  """
6
+ EmoTion v3.8.3 (260215) Moment-Free Edition
7
  shadow-system v3.1 -moment v3.1 emoPulse v3.8
8
+ これまでの emo系 のすべてを継承し、独自更新式を持つ、完全オリジナル最適化器
9
  The “geometric relationship” between "W"eight and "G"radient Method
10
  これまでの統計手法をやめ、重みベクトルと勾配ベクトルの直交性(W-Ref Geometry)に基づいて、
11
  過去の慣性と現在の勾配を動的にブレンドする、1次モーメント単一保持型の幾何学的最適化アルゴリズム
 
130
 
131
  # --- Start Gradient Update Logic ---
132
  # --- EmoTion (Pure W-Ref Geometry) ---
133
+ # 1次モーメント(exp_avg)の初期化: O(N) のみ
134
  if 'exp_avg' not in state:
135
  state['exp_avg'] = torch.zeros_like(p)
136
  state['rho_ema'] = torch.zeros(1, device=p.device, dtype=p.dtype)
137
 
138
+ exp_avg = state['exp_avg']
139
+ rho_ema = state['rho_ema']
140
+
141
+ # W-Reference / Geometry (幾何学的直交性) 算出
142
  # 勾配が重み(実体)に対して「新鮮」(直交)か「冗長」(平行)かを判定
143
  # 高次元空間における集中現象を利用した「情報の選別」
144
+ rho = torch.abs(torch.dot(p.view(-1), grad.view(-1))) / (p_norm * g_norm + 1e-8)
145
 
146
  # rhoの履歴更新 (スカラーのみ)
147
+ rho_ema.mul_(beta1).add_(rho, alpha=1 - beta1)
148
 
149
+ # 幾何学的適応型ブレンド
150
  # 従来の beta1 固定ではなく、直交しているほど今の勾配 g を強く取り込む
151
  # freshness が高い(rhoが小さい)ほど、慣性を無視して新しい方向へ舵を切る
152
+ freshness = 1.0 - rho_ema.item()
153
 
154
  # exp_avg = beta1 * exp_avg + (1 - beta1) * grad の「幾何学的拡張」
155
  # 慣性と現時点の勾配を、直交性に基づいて混ぜ合わせる
156
+ exp_avg.mul_(beta1).add_(grad, alpha=(1.0 - beta1) * freshness)
 
 
 
 
157
 
158
+ # 重みの更新 (emoPulse = 絶対歩幅)
159
  if group['weight_decay'] != 0:
160
+ p.mul_(1.0 - group['weight_decay'] * emoPulse)
161
 
162
+ p.add_(exp_avg.sign(), alpha=-emoPulse)
163
  # --- End Gradient Update Logic ---
164
 
165
  # ユーザー指定初期LRを実効値(emoPulse)で可視化する(PyTorch標準)
 
170
  # Early Stop:瞬間値と33step分の履歴の差分で True にするだけ
171
  # 誤判定防止をしないのは点灯頻度で停止準備(予兆)にするため
172
  if abs(scalar) <= 5e-6 and abs(Noise_base - d_base) <= 5e-7:
173
+ if not self.should_stop:
174
+ self.emoScope = 1.0 # ユーザー意思を目的の収束へ整える
175
  self.should_stop = True # 💡 外部からこれを見て判断可
 
176
  else:
177
  self.should_stop = False # 💡 誤判定などの取り消し
178
 
2Gv38_AutoLR/emovoid.py CHANGED
@@ -3,12 +3,12 @@ from torch.optim import Optimizer
3
  import math
4
 
5
  """
6
- EmoVoid v3.8.1 (260204) Moment-Free Edition
7
  shadow-system v3.1 -moment v3.1 emoPulse v3.8
8
- これまでの emo系 のすべて、emo系 v3.7 を継承し独自更新式を持つ、完全オリジナル最適化器
9
  The “geometric relationship” between "W"eight and "G"radient Method
10
- これまでの統計手法を完全になくし、重みベクトルと勾配ベクトルの直交性(W-Ref Geometry)のみで、
11
- メモリコストを極限まで削ぎ落とした、1次2次モーメント廃止の幾何学的最適化アルゴリズム
12
  """
13
 
14
  class EmoVoid(Optimizer):
@@ -104,6 +104,29 @@ class EmoVoid(Optimizer):
104
  emoPulse = max(min(self.dNR_hist * (self.emoScope * 1e-4), 3e-3), 1e-6)
105
  # --- End emoPulse (完全自動LR生成) ---
106
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
  for group in self.param_groups:
108
  beta1, beta2 = group['betas']
109
  for p in (p for p in group['params'] if p.grad is not None):
@@ -111,9 +134,6 @@ class EmoVoid(Optimizer):
111
  grad = p.grad
112
  state = self.state[p]
113
 
114
- p_norm = p.norm()
115
- g_norm = grad.norm()
116
-
117
  # 動的学習率補正により shadow 形成を信頼度で調整(trustは正値化(負にならない))
118
  # shadow:必要時のみ(スパイクp部分に現在値を最大10%追従させる動的履歴更新)
119
  # 混合比率:スカラーが閾値を超える場合にのみ計算される(信頼できる感情信号かどうかの選別)
@@ -129,20 +149,9 @@ class EmoVoid(Optimizer):
129
  state['shadow'].lerp_(p, leap_ratio)
130
 
131
  # --- Start Gradient Update Logic ---
132
- # --- EmoVoid (Pure W-Ref Geometry) ---
133
- # メモリ消費を最小、計算負荷を極小、「直交方向への超感度」「膨張への自己抑制」を両立
134
- # rho の算出:定義済みのノルム変数を使用 1e-8 分母で破綻を防ぐ
135
- rho = torch.abs(torch.sum(p * grad)) / (p_norm * g_norm + 1e-8)
136
- # 鮮度(直交性スコア)
137
- freshness = (1.0 - rho) # EMAを通さない瞬間の鮮度
138
-
139
- # Weight Decay が不要な理由:
140
- # ノルムが増大する方向に進もうとすると rho 増加で自らブレーキを踏む
141
- # 慣性を使わず、現在の勾配の方向(sign)に、鮮度を乗算
142
- update_vec = torch.sign(grad) * freshness
143
-
144
- # 更新
145
- p.add_(update_vec, alpha=-emoPulse)
146
  # --- End Gradient Update Logic ---
147
 
148
  # ユーザー指定初期LRを実効値(emoPulse)で可視化する(PyTorch標準)
@@ -153,8 +162,10 @@ class EmoVoid(Optimizer):
153
  # Early Stop:瞬間値と33step分の履歴の差分で True にするだけ
154
  # 誤判定防止をしな���のは点灯頻度で停止準備(予兆)にするため
155
  if abs(scalar) <= 5e-6 and abs(Noise_base - d_base) <= 5e-7:
 
 
 
156
  self.should_stop = True # 💡 外部からこれを見て判断可
157
- self.emoScope = 1.0 # ユーザー意思を目的の収束へ整える
158
  else:
159
  self.should_stop = False # 💡 誤判定などの取り消し
160
 
 
3
  import math
4
 
5
  """
6
+ EmoVoid v3.8.3 (260215) Moment-Free Edition
7
  shadow-system v3.1 -moment v3.1 emoPulse v3.8
8
+ これまでの emo系 のすべてを継承し、独自更新式の特徴を受け継ぐ完全オリジナル最適化器
9
  The “geometric relationship” between "W"eight and "G"radient Method
10
+ 幾何学的最適化アルゴリズム Approx W-Ref Geometry 近似アシスト更新にし負荷低減
11
+ 完全1次2次モーメント廃止、さまざまなコストを極限まで低減、正確性と軽量性と快適性を向上
12
  """
13
 
14
  class EmoVoid(Optimizer):
 
104
  emoPulse = max(min(self.dNR_hist * (self.emoScope * 1e-4), 3e-3), 1e-6)
105
  # --- End emoPulse (完全自動LR生成) ---
106
 
107
+ # --- Start Approx W-Ref Geometry 近似アシスト ---
108
+ # Weight Reference Geometry ("W"eight and "G"radient Method)
109
+ # 中間テンソルによるVRAM負荷やcos類似度測定の計算負荷を実質0にする
110
+ with torch.no_grad():
111
+ # 現在の全パラメータのL1ノルムを一括計算(計算負荷: 低)
112
+ # foreach_norm は各層のノルムをリストで返す。sumで1つの数値に集約。
113
+ params = self.param_groups[0]['params']
114
+ point_gl1 = sum(torch._foreach_norm(params, 1))
115
+ prev = getattr(self, "prev_gl1", None)
116
+ curr_step = getattr(self, '_step_count', 0)
117
+ self._step_count = curr_step + 1
118
+ # ウォームアップ期間中のみ、前回のノルムと比較して「一括修正」
119
+ if prev is not None and curr_step < 55:
120
+ # 前回のエネルギーを維持するための比率(スライス的な全層一律係数)
121
+ ratio = (prev / (point_gl1 + 1e-8)).item()
122
+ # 全層の重みを一撃でスケーリング(中間テンソル作成なし、最速)
123
+ torch._foreach_mul_(params, ratio)
124
+ # 修正したので、現在のノルムも再計算(または近似)
125
+ point_gl1 *= ratio
126
+ # 今回のノルムを次回の比較用に保存
127
+ self.prev_gl1 = point_gl1
128
+ # --- End Approx W-Ref Geometry 近似アシスト ---
129
+
130
  for group in self.param_groups:
131
  beta1, beta2 = group['betas']
132
  for p in (p for p in group['params'] if p.grad is not None):
 
134
  grad = p.grad
135
  state = self.state[p]
136
 
 
 
 
137
  # 動的学習率補正により shadow 形成を信頼度で調整(trustは正値化(負にならない))
138
  # shadow:必要時のみ(スパイクp部分に現在値を最大10%追従させる動的履歴更新)
139
  # 混合比率:スカラーが閾値を超える場合にのみ計算される(信頼できる感情信号かどうかの選別)
 
149
  state['shadow'].lerp_(p, leap_ratio)
150
 
151
  # --- Start Gradient Update Logic ---
152
+ # --- EmoVoid (Approx W-Ref Geometry) ---
153
+ # 更新:emoPulse「時間軸」、W-Ref-Geo「空間軸」でODE近似へ導く
154
+ p.add_(grad.sign_(), alpha=-emoPulse)
 
 
 
 
 
 
 
 
 
 
 
155
  # --- End Gradient Update Logic ---
156
 
157
  # ユーザー指定初期LRを実効値(emoPulse)で可視化する(PyTorch標準)
 
162
  # Early Stop:瞬間値と33step分の履歴の差分で True にするだけ
163
  # 誤判定防止をしな���のは点灯頻度で停止準備(予兆)にするため
164
  if abs(scalar) <= 5e-6 and abs(Noise_base - d_base) <= 5e-7:
165
+ if not self.should_stop:
166
+ self.emoScope = 1.0 # ユーザー意思を目的の収束へ整える
167
+ self._step_count = 0 # 幾何学的再調整の再始動
168
  self.should_stop = True # 💡 外部からこれを見て判断可
 
169
  else:
170
  self.should_stop = False # 💡 誤判定などの取り消し
171