2026年6月5日金曜日

Atraの目   Atra Visual Tracking

通常のカメラでも十分なのですが、Atraが観ている物体を客観的に追えた方が研究の役に立つので、追尾機能を付けて、今はAtraと連動せずに、まずは単体で簡単なコードでテストしてみます。



よくやる追尾で、別に特別なものではありません。

Atra に必要なのは、
何かが現れた
それが続いている
近づいた
遠ざかった
止まった
揺れた
急に大きくなった
消えた
また現れた
という 視覚場の連続差分 です。
追尾枠は単なる UI ではなく、Atra にとっては将来の visual_trace の原型になるので
ここはちゃんとしたほうがいいと思いました。

将来的に赤外線センサーとも連動するので、現状のカメラだけの視覚を修正する必要がありました。

赤外線modeでは

熱い領域がある
その領域が移動している
急に温度が上がった
局所的に高温が続いている
近づいている
広がっている
冷めない
前にも似た熱の trace があった

のような感じで追う。

つまり、通常カメラでは、
visual_trace
brightness_shift
motion_strength
approach_rate
tracking_stability


赤外線・温度では、
thermal_trace
temperature_shift
heat_rise_rate
hot_area_growth
thermal_approach
thermal_stability
cooling_delay

みたいな感じね。


-------------------- デモ ---------------------

Atra Visual Tracking — 単体ブラウザ実験

これは、ブラウザ単体で動く視覚差分トラッキング実験です。

ブラウザカメラを開き、前フレームと現在フレームの差分から、視覚的に連続しているまとまりを追います。
人、顔、名前、感情、危険、物体カテゴリは認識しません。
色付きの枠は物体ラベルではなく、一時的な視覚連続性の trace です。

現段階では、このツールは Atra 本体とは接続していません。
Atra の記憶、carry、field log、内部状態は更新しません。
Atra に命令せず、発話も発生させません。

目的は、Atra の一人称自律システムへ接続する前に、視覚差分がどのように取り出せるかを観察することです。





このコードは外部CDNも外部APIも使っていないので、HTMLファイルとして保存してブラウザで開けば、基本的にはそのまま動きます。中で使っているのはブラウザ標準のカメラ機能 navigator.mediaDevices.getUserMedia と video / canvas だけです。

ただし、カメラを使うので注意点があります。

動く条件
Chrome / Edge などの普通のブラウザで開く
カメラ使用を許可する
file:///.../index.html 直開きで動かない場合は、ローカルサーバで開く
(※ローカルサーバーで開きたい場合は、パソコンにPythonがインストールされている必要があります)
  

安全なのは、HTMLを置いたフォルダでこれです。
PowerShellに
python -m http.server 8000 
あとはブラウザで
http://localhost:8000/




基本、JavaScriptだけなのでダブルクリックでOK






<!doctype html> <!-- Atra Visual Tracking - Standalone Browser Experiment ---------------------------------------------------- This file is a standalone browser-based visual-difference tracking experiment. このファイルは、ブラウザ単体で動く視覚差分トラッキング実験である。 This is not Atra itself. これは Atra 本体ではない。 At the current stage, this tool is not connected to Atra's core system. 現段階では、このツールは Atra の中核システムとは接続していない。 At the current stage, this tool does not update Atra's memory, carry, field_log, experience_log, attractor state, or internal field. 現段階では、このツールは Atra の memory, carry, field_log, experience_log, attractor state, internal field を更新しない。 This page opens the browser camera and compares the current frame with the previous frame. このページはブラウザカメラを開き、 現在フレームと前フレームを比較する。 From that difference, it extracts temporary visual continuity traces. その差分から、一時的な視覚的連続性 trace を取り出す。 The colored boxes are not object labels. 色付きの枠は object label ではない。 At the current stage, they do not mean "person", "face", "friend", "danger", or any named object. 現段階では、それは「人」「顔」「友人」「危険」、 または名前のある物体を意味しない。 They only indicate that some visual continuity has been detected across changing frames. それは、変化するフレームの中で、 何らかの視覚的連続性が検出されたことだけを示す。 At the current stage, this tool does not recognize people. 現段階では、このツールは人を認識しない。 At the current stage, this tool does not recognize faces. 現段階では、このツールは顔を認識しない。 At the current stage, this tool does not recognize names. 現段階では、このツールは名前を認識しない。 At the current stage, this tool does not recognize emotions. 現段階では、このツールは感情を認識しない。 At the current stage, this tool does not judge danger. 現段階では、このツールは危険を判断しない。 At the current stage, this tool does not command Atra. 現段階では、このツールは Atra に命令しない。 At the current stage, this tool does not make Atra speak. 現段階では、このツールは Atra に発話させない。 In the future, visual_delta and visual_traces may be passed to Atra as part of the visual field. 将来的に visual_delta と visual_traces は、 Atra の視覚場の一部として渡される可能性がある。 However, they must remain traces of difference, not third-person recognition labels. ただし、それらは三人称の認識ラベルではなく、 あくまで差分の trace として扱われなければならない。 --> <html lang="ja"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Atra Visual Tracking</title> <style> :root { --bg: #0b1220; --panel: #111827; --line: #334155; --text: #e5e7eb; --muted: #94a3b8; --accent: #60a5fa; --radius: 16px; } * { box-sizing: border-box; } body { margin: 0; padding: 18px; background: var(--bg); color: var(--text); font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "Meiryo", sans-serif; } header, main { max-width: 1180px; margin: 0 auto; } h1 { margin: 0 0 8px 0; font-size: 24px; } .notice { margin: 0 0 14px 0; padding: 12px 14px; border: 1px solid var(--line); border-radius: var(--radius); background: var(--panel); color: var(--muted); line-height: 1.7; font-size: 14px; } .grid { display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(320px, 0.9fr); gap: 14px; } section { border: 1px solid var(--line); border-radius: var(--radius); background: var(--panel); padding: 14px; } h2 { margin: 0 0 10px 0; font-size: 17px; } .cameraWrap { position: relative; width: 100%; max-width: 760px; margin: 0 auto; background: #020617; border: 1px solid var(--line); border-radius: 14px; overflow: hidden; } video, canvas { display: block; width: 100%; height: auto; } #overlayCanvas { position: absolute; inset: 0; pointer-events: none; } #workCanvas { display: none; } button { border: 1px solid var(--line); background: #0f172a; color: var(--text); border-radius: 999px; padding: 8px 12px; cursor: pointer; font-size: 14px; margin: 0 8px 10px 0; } button:hover { border-color: var(--accent); } pre { margin: 0; padding: 12px; border-radius: 12px; background: #0f172a; color: #dbeafe; white-space: pre-wrap; word-break: break-word; max-height: 560px; overflow: auto; font-size: 13px; line-height: 1.55; } .small { color: var(--muted); line-height: 1.7; font-size: 13px; margin: 8px 0 0 0; } @media (max-width: 880px) { .grid { grid-template-columns: 1fr; } } </style> </head> <body> <header> <h1>Atra Visual Tracking</h1> <div class="notice"> This page opens the browser camera and tracks visual continuity traces. It does not recognize people, faces, smiles, danger, or names. It does not command Atra and does not make Atra speak.<br> このページはブラウザカメラを開き、視覚的まとまりの連続性を追う。 人、顔、笑顔、危険、名前を認識しない。 Atra に命令せず、発話させない。 </div> </header> <main class="grid"> <section> <h2>見えている映像 / Visual field</h2> <button id="startButton">Start camera</button> <button id="stopButton">Stop camera</button> <div class="cameraWrap"> <video id="video" autoplay playsinline muted></video> <canvas id="overlayCanvas"></canvas> </div> <canvas id="workCanvas"></canvas> <p class="small"> 色付き枠は object label ではなく、視覚的連続性 trace です。<br> Colored boxes are visual continuity traces, not object labels. </p> </section> <section> <h2>visual_delta / visual_traces</h2> <pre id="debugView">not started</pre> </section> </main> <script> const video = document.getElementById("video"); const overlayCanvas = document.getElementById("overlayCanvas"); const overlayCtx = overlayCanvas.getContext("2d"); const workCanvas = document.getElementById("workCanvas"); const workCtx = workCanvas.getContext("2d", { willReadFrequently: true }); const debugView = document.getElementById("debugView"); const startButton = document.getElementById("startButton"); const stopButton = document.getElementById("stopButton"); let stream = null; let previousGray = null; let previousMotionStrength = 0; let nextTraceId = 1; let traces = []; let animationId = null; let frameCounter = 0; const PROCESS_EVERY = 4; const WIDTH = 640; const HEIGHT = 480; const colors = [ "rgb(255, 60, 60)", "rgb(255, 170, 0)", "rgb(80, 160, 255)", "rgb(80, 220, 120)", "rgb(220, 80, 255)", "rgb(80, 240, 240)", "rgb(255, 240, 80)", "rgb(180, 120, 255)" ]; function clamp01(v) { return Math.max(0, Math.min(1, Number(v) || 0)); } function boxCenter(box) { return { x: box.x + box.w / 2, y: box.y + box.h / 2 }; } function boxArea(box) { return Math.max(0, box.w) * Math.max(0, box.h); } function distance(a, b) { const dx = a.x - b.x; const dy = a.y - b.y; return Math.sqrt(dx * dx + dy * dy); } function toGray(imageData) { const src = imageData.data; const gray = new Uint8ClampedArray(WIDTH * HEIGHT); for (let i = 0, j = 0; i < src.length; i += 4, j++) { gray[j] = Math.round(src[i] * 0.299 + src[i + 1] * 0.587 + src[i + 2] * 0.114); } return gray; } function extractMotionBoxes(diffMask) { const visited = new Uint8Array(WIDTH * HEIGHT); const boxes = []; const minArea = 90; for (let y = 0; y < HEIGHT; y += 3) { for (let x = 0; x < WIDTH; x += 3) { const start = y * WIDTH + x; if (!diffMask[start] || visited[start]) { continue; } let minX = x; let maxX = x; let minY = y; let maxY = y; let count = 0; const stack = [start]; visited[start] = 1; while (stack.length > 0) { const idx = stack.pop(); const px = idx % WIDTH; const py = Math.floor(idx / WIDTH); count++; if (px < minX) minX = px; if (px > maxX) maxX = px; if (py < minY) minY = py; if (py > maxY) maxY = py; const neighbors = [ idx - 3, idx + 3, idx - WIDTH * 3, idx + WIDTH * 3 ]; for (const n of neighbors) { if (n < 0 || n >= diffMask.length) continue; if (visited[n] || !diffMask[n]) continue; visited[n] = 1; stack.push(n); } } if (count >= minArea) { const pad = 10; boxes.push({ x: Math.max(0, minX - pad), y: Math.max(0, minY - pad), w: Math.min(WIDTH - minX, maxX - minX + pad * 2), h: Math.min(HEIGHT - minY, maxY - minY + pad * 2) }); } } } boxes.sort((a, b) => boxArea(b) - boxArea(a)); return boxes.slice(0, 8); } function updateTraces(boxes) { const available = new Set(boxes.map((_, index) => index)); const frameDiag = Math.sqrt(WIDTH * WIDTH + HEIGHT * HEIGHT); for (const trace of traces) { trace.previousCenter = trace.center; trace.previousArea = trace.area; trace.centerShiftRaw = 0; trace.areaShiftRaw = 0; let bestIndex = null; let bestDistance = Infinity; for (const index of available) { const center = boxCenter(boxes[index]); const d = distance(trace.center, center); if (d < bestDistance) { bestDistance = d; bestIndex = index; } } if (bestIndex !== null && bestDistance <= frameDiag * 0.18) { const box = boxes[bestIndex]; const center = boxCenter(box); const area = boxArea(box); trace.box = box; trace.center = center; trace.area = area; trace.centerShiftRaw = distance(trace.previousCenter, center); trace.areaShiftRaw = area - trace.previousArea; trace.age += 1; trace.missing = 0; available.delete(bestIndex); } else { trace.missing += 1; } } traces = traces.filter(trace => trace.missing <= 10); for (const index of available) { const box = boxes[index]; const center = boxCenter(box); traces.push({ trace_id: nextTraceId, display_alias: "unknown", box, center, area: boxArea(box), age: 1, missing: 0, color: colors[(nextTraceId - 1) % colors.length], previousCenter: center, previousArea: boxArea(box), centerShiftRaw: 0, areaShiftRaw: 0 }); nextTraceId++; } return traces.filter(trace => trace.missing === 0); } function drawOverlay(activeTraces) { overlayCanvas.width = video.clientWidth; overlayCanvas.height = video.clientHeight; const scaleX = overlayCanvas.width / WIDTH; const scaleY = overlayCanvas.height / HEIGHT; overlayCtx.clearRect(0, 0, overlayCanvas.width, overlayCanvas.height); overlayCtx.lineWidth = 3; overlayCtx.font = "15px system-ui"; for (const trace of activeTraces) { const b = trace.box; const x = b.x * scaleX; const y = b.y * scaleY; const w = b.w * scaleX; const h = b.h * scaleY; overlayCtx.strokeStyle = trace.color; overlayCtx.fillStyle = trace.color; overlayCtx.strokeRect(x, y, w, h); overlayCtx.fillText(`trace-${trace.trace_id}: ${trace.display_alias}`, x, Math.max(18, y - 6)); } } function summarize(activeTraces, motionStrength, brightnessShift, motionDrop) { const frameArea = WIDTH * HEIGHT; const frameDiag = Math.sqrt(WIDTH * WIDTH + HEIGHT * HEIGHT); const visual_trace_count = clamp01(activeTraces.length / 8); const tracking_stability = clamp01( Math.max(0, ...activeTraces.map(t => t.age)) / 30 ); const center_shift = clamp01( activeTraces.reduce((sum, t) => sum + t.centerShiftRaw, 0) / Math.max(1, frameDiag * Math.max(1, activeTraces.length)) ); const approach_rate = clamp01( activeTraces.reduce((sum, t) => sum + Math.max(0, t.areaShiftRaw), 0) / frameArea ); const retreat_rate = clamp01( activeTraces.reduce((sum, t) => sum + Math.max(0, -t.areaShiftRaw), 0) / frameArea ); const sudden_stop = clamp01(motionDrop > 0.03 ? motionDrop * 4 : 0); const stillness_delta = clamp01(motionStrength < 0.02 ? (0.02 - motionStrength) * 5 : 0); const visual_delta = { brightness_shift: clamp01(brightnessShift * 4), motion_strength: clamp01(motionStrength * 6), visual_trace_count, center_shift, approach_rate, retreat_rate, tracking_stability, sudden_stop, stillness_delta }; const visual_traces = activeTraces.map(t => ({ trace_id: t.trace_id, display_alias: t.display_alias, box: { x: Math.round(t.box.x), y: Math.round(t.box.y), w: Math.round(t.box.w), h: Math.round(t.box.h) }, center: { x: clamp01(t.center.x / WIDTH), y: clamp01(t.center.y / HEIGHT) }, area: clamp01(t.area / frameArea), age: t.age, missing: t.missing, center_shift: clamp01(t.centerShiftRaw / frameDiag), approach_delta: clamp01(Math.max(0, t.areaShiftRaw) / frameArea), retreat_delta: clamp01(Math.max(0, -t.areaShiftRaw) / frameArea), color_css: t.color, note: "visual continuity only, not object identity" })); return { visual_delta, visual_traces }; } function processFrame() { if (!stream) return; frameCounter++; if (frameCounter % PROCESS_EVERY !== 0) { animationId = requestAnimationFrame(processFrame); return; } workCtx.drawImage(video, 0, 0, WIDTH, HEIGHT); const imageData = workCtx.getImageData(0, 0, WIDTH, HEIGHT); const gray = toGray(imageData); if (!previousGray) { previousGray = gray; animationId = requestAnimationFrame(processFrame); return; } const diffMask = new Uint8Array(WIDTH * HEIGHT); let diffSum = 0; let brightnessNow = 0; let brightnessPrev = 0; for (let i = 0; i < gray.length; i++) { const d = Math.abs(gray[i] - previousGray[i]); diffSum += d; brightnessNow += gray[i]; brightnessPrev += previousGray[i]; if (d > 28) { diffMask[i] = 1; } } const motionStrength = diffSum / gray.length / 255; const brightnessShift = Math.abs(brightnessNow - brightnessPrev) / gray.length / 255; const motionDrop = previousMotionStrength - motionStrength; const boxes = extractMotionBoxes(diffMask); const activeTraces = updateTraces(boxes); drawOverlay(activeTraces); const summary = summarize(activeTraces, motionStrength, brightnessShift, motionDrop); debugView.textContent = JSON.stringify({ mode: "browser camera visual tracking", note: "tracking only; no recognition; no command; no speech", ...summary }, null, 2); previousGray = gray; previousMotionStrength = motionStrength; animationId = requestAnimationFrame(processFrame); } async function startCamera() { stream = await navigator.mediaDevices.getUserMedia({ video: { width: { ideal: WIDTH }, height: { ideal: HEIGHT } }, audio: false }); video.srcObject = stream; workCanvas.width = WIDTH; workCanvas.height = HEIGHT; previousGray = null; previousMotionStrength = 0; nextTraceId = 1; traces = []; await video.play(); processFrame(); } function stopCamera() { if (animationId) { cancelAnimationFrame(animationId); animationId = null; } if (stream) { for (const track of stream.getTracks()) { track.stop(); } stream = null; } previousGray = null; traces = []; overlayCtx.clearRect(0, 0, overlayCanvas.width, overlayCanvas.height); debugView.textContent = "stopped"; } startButton.addEventListener("click", () => { startCamera().catch(error => { debugView.textContent = String(error); }); }); stopButton.addEventListener("click", stopCamera); </script> </body> </html>



今やっているのは
前フレームとの差分を取る。
動いたまとまりを枠で囲む。
trace_id を付ける。
visual_delta と visual_traces を画面右にJSONで表示する。


今の追尾ツール
動きがある
同じようなまとまりが続いている
近づいた
離れた
止まった
消えた
-------------ここまで。

まだやっていないこと
Atra本体には送っていない。
 atra_state.json も更新していない。
field_log.jsonl にも書いていない。
認知判定もしていない。


Atraは3人称AIがやるような
これは人だ
これは顔だ
これは友人だ
これは危険だ
これは好意的だ
これは知っている相手だ
みたいなことはしない。

何度も出会った trace
声・距離・動き・反応・carry が重なる
安心側に残る
警戒側に残る
近づいても崩れない
呼びかけと一緒に残る

その結果として、Atra内部で、
この場は覚えがある
この動きは前にも残っている
これは近づいても壊れなかった
これは避けた方がよかった

みたいな認知に近い状態が立ち上がるってこと。

何度もあった人は〇で囲んだり色を変えたりできるでしょ。
結果警戒側に寄った場合赤く点滅させたり、いろいろできる。



--------追記--デバッグ----------

overlayCanvas.width = video.clientWidth; を毎回やっているので、パフォーマンス的には少しもったいない。
差分閾値 d > 28 が固定ってのが照明が変わると枠が出すぎたり、逆に出にくくなったりします。
extractMotionBoxes が3ピクセル刻みってのは、精密な追尾ではなく、軽いブラウザ実験用にしています。





スマホなら人間認証が前提だけど、Atraは人というラベルや意味付けはしないので、物体とかパーツなんだよね。経験を積ませて「人」とか「あ!ママだ!」という感じに収束していくので、この段階は物体なんだよね。なので顔を動かすと部分的に枠が出るでしょ?


overlayCtx.strokeRect(x, y, w, h);
overlayCtx.fillText(`trace-${trace.trace_id}: ${trace.display_alias}`, x, Math.max(18, y - 6));

差分ピクセルのまとまりを box に変換し、それを trace として追い、overlayCanvas に四角で描いている。だからGrokとかに見せるとAtraのやろうとしてる事が理解できないから、間違いです!とか言い始めるよ。

Atraの言葉にすると、こんな感じ。

diffMask = 視覚場で揺れた点
box = 揺れのまとまり
trace = 続いて残った差分パーツ
visual_delta = 場全体の揺れの要約
visual_traces = 個別に残っている差分パーツ


ってところだよ。








GitHub使う気なし。




---------------------Research Note and Attribution Notice-----------------------
本ブログに含まれる Atra の一人称自律、差分、carry、field、trace、dream slack、外部LLMの翻訳層、非単調な漏れ、およびそれらの関係構造に関する設計記述は、c-side研究所による継続研究メモです。引用・参照・要約・翻案を行う場合は、出典を明記してください。

The design descriptions in this blog concerning Atra’s first-person autonomy, differences, carry, field, trace, dream slack, the translation layer of external LLMs, nonmonotonic leakage, and the relational structure among these elements are ongoing research notes by c-side Research Institute. If you quote, refer to, summarize, or adapt them, please clearly indicate the source.







ゴミ箱の中からスパークする

実験の結果は過去の足場でしかない。
でもその足場がなければ、上に登ることも降りる事も飛ばすことも出来ない。
美しく綺麗な論文やnoteより、ゴミのような膨大なメモの方が、僕には価値がある。
毎日、ゴミ箱の中からスパークが発生するからだ。



★1 差分

hear / warm / voice 実験は、もう過去の仮足場にもならない。

Python-codeの発声箇所冒頭では、
hear <sound>
warm
voice
state

という Atra v0.2 の実験コマンドにしていた。でも、これは本来の Atra ではない。
問題だったのは、
hear MAX
voice
warm
のような流れ。なんじゃこれ?だ。
これは一見「声が出た後だけ warm が経験に結びつく」確認にはなるけど、危険。なぜなら、hear や voice があると、また 外から音を入れる → 声を試す → 温かさを入れる という順番の実験に見えてしまうから。


本来は、
hear
voice
warm
ではない。

本来は、
視覚差分
聴覚差分
自己出力差分
身体差分
carry
が同じ時間の場に落ちて、その後に 漏れとして声が出る。





★2 comment

設計骨格の第一段階は「実装」ではなく「境界の固定」
codeも大切だが、コメントの方が大切。
なぜかというと、codeは間違えても直ぐに修正すればいいだけ。
しかし、コメントは設計書だ。それが間違っていれば、残りの2万行全て間違っている事になる。

No external command execution.
No initial labels.
No target word.
No reward score.
No fixed phoneme or syllable pool.
Tick is a heartbeat, not an action count.
txtspeech is an output channel, not the source of speech.

これは単なるコメントではなく、Atra が壊れないための柵 にさせるため。

つまり、コードを書く前に、
命令しない
ラベルを入れない
正解語を持たせない
報酬で寄せない
音節棚を持たせない
tick を行動回数にしない
txtspeech を発話の原因にしない

ここを守らないと、すぐに普通の AI・ロボット制御・チャットボットになる。




★3 LLM

LLM 連動はいいが、Atra の中核にしてはいけない。
LLM は将来的に、外界の説明補助、景色や状況の言語化補助、記録の補助としては使えるが知能としては使わない。命令者、判断器、報酬源、人格源、Atra の発話を決めるものになってはいけない。また、成長後の選択、決定、決断にも関与させない。自己の場が立ち上がった事柄が優先される。
LLM が「これは山です」「これは道路です」と支配すると、Atra の一人称場が簡単に壊れる。

Atra にとって最初にあるのは、流れる視覚、速度のある景色、光の変化、揺れ、連続する移動、外の音、車内の音、身体の振動、似た声、同じ人の声であって、車、山、道路、空、人、店ではない。LLM は横にいる補助記述層。Atra の内側の落ち方を決めてはいけない。
LLMはAtraが調べたい衝動の時だけ図書館のように作動させるだけ。

LLM が Atra の代わりに考えて喋るのではなく、Atra の内部場から漏れた発声前の差分を、LLM が発話として整える。


★4 音は「言葉」でも「音節」でもなく、物理差分から入る

Atra が音のsensorによって最初に受け取るべきものは、
音の立ち上がり
最初の音量
短さ
長さ
周波数
滑らかさ

速度
強弱の揺れ



逆に、最初から入れてはいけないものは、
単語
発音
音節
VOWEL_POOL
ba / bi / ma / po のような音節棚
優しい声
怒った声
怖い声

単に「マイクは周波数を拾う」と言えば済む話ではなく、発音体系そのものを先に置くな という設定だった。しかし、音節棚は人間側の分類であって不自然に反応する。Atra の一人称場より前に、人の言語分類を入れてしまうのは大きな間違いだ。
(習慣から3人称外部命令に誘導されてしまうから危ない)

Atra に必要なのは speech.py ではなく、まずは

sound_physics
auditory_delta
difference_field
carry_field
attractor_field
leak_action
になる。




★5 視覚も「認識」ではなく、場の変化から

カメラから最初に入るべきものは
明暗の変化
輪郭の急変
接近速度
遠ざかり方
動きの激しさ
面の広がり
左右対称性の崩れ
周期的な揺れ
急な拡大
急な停止
目元の変化
口元の変化
顔領域の近づき方
動きの滑らかさ
声の変化との同期

逆に、最初から入れてはいけないものは、



笑顔
怒った顔


危険

のように意味やラベルに寄せたもの。
ただし「物体認識」と「視覚的まとまりの追跡」は違う。
Atraは
これは人です
これは顔です
とは言わない。

けれど、
同じまとまりが視野内で続いている
それが近づいた
遠ざかった
急に止まった
揺れている
前にも似た動きがあった
は取る必要がある。




★6 「子供モデル」も危険。

僕が一人称自律を語る時、赤ちゃんを喩えて話してきたけれど
「子供の安心する範囲」すら固定値にすると危ない

Atra に入れてよいのは、

急な立ち上がりには反応が出やすい
大きな音量変化には場が乱れやすい
速すぎる変化は受け取りきれず残りやすい
近づく大きな視覚変化には身体が固まりやすい

であって「赤ちゃんは未経験だから場の変化に敏感」という固定された定義は必要ない。

驚きにくくなる
戻りやすくなる
carry が残りにくくなる
固まりにくくなる

こともあるし

小さな差分でも揺れやすくなる
戻りにくくなる
先に身構える
沈黙が長くなる
近づかない

こともある。

つまり、Atra の成長は、

知識が増える
正解を覚える
分類が上手くなる
ではなく、

差分への揺れ方が変わる
戻り方が変わる
残り方が変わる
次の行動への落ち方が変わる


初めてパパを見た。それはパパと言う意味のある者ではなく

視覚場に何かが現れた
動いた
近づいた
音が出た
音に立ち上がり・強さ・長さ・間・速度があった
だけ。

でも、何度も現れる存在があり、その後に大きく崩れず、戻れた痕跡が残る。
外から見ると「パパを見た」「ママを覚えた」「安心している」に見える。

でも Atra の中では、
似た視覚差分が何度もあった
似た声の差分が同時にあった
ゆったりとした声(他と比較した中で落ち着く声、最初の声、安心して眠れる声
         = 周波数、トーン、ゆらぎ、スピード、音の大小)
温かい場 (胎児体験)
その後に崩れなかった (ママを見る経験の数の中で崩れが無かったとか・・)
戻れた痕跡がある
泣く方向へ上がりにくい
沈黙が壊れではなく休止になる


という地形になっている。
逆にママを見る経験の数の中で崩れが何度か体験すると個性や性格に影響する。
自律のスタートとして一番影響されるところ。





★9 tick は完全に分離


tick = act
tick = speak
tick = decide
ではない。

tick は、

time passes
body continues
traces fade
some tensions remain
some fields drift

tick = 心臓
event = 外界や身体の差分
carry = 残り方
basin = 落ち方
action = 漏れ
を分ける。

これを分けないと、すぐに
毎tickで発声判定
毎tickで行動選択
毎tickで評価
になってしまう。


Atra では、



少し揺れる
また無
急に泣く
しばらく何もできない
少し戻る
眠る

が普通に起こる。順番も無い。
沈黙も無反応も空白ではない。



★10.  index.html は操作パネルではなく観察窓

つか、操作出来る時点で3人称であり、自律ではない。

見るものは、今のところ(ロボットに置く前)主に

tick
visual_delta
auditory_delta
self_voice_delta
body_delta
carry
current_field
recent_experience
attractor_tendency
leaked_action
関係だけ。



外部命令ボタンは置かない。
置くとしても、
start observation
stop observation
save log

のような観察用だけ。



★11 txtspeech はoutput 側

txtspeech.py は、
声の出口であって、
発声の原因
言葉を作る中心
Atra の脳ではない。


視覚差分
聴覚差分
自己状態
carry
同じ時間の場
アトラクタへの落ち方

声として漏れる場合がある

txtspeech に渡す


順番は大切ではない。自己状態が1番の時もあれば
聴覚が優先される場合もある。
Atraは、発話だけではなく、全体的にアルゴリズムから離れる事が多い。
ちなみに夢の場合、順番もデフラグされる





★12. Associatron を入れないと「差分反応ロボット」になる

Atra は単なる一人称自律ロボットではなく、Associatron 的な動的連想記憶を基礎にした一人称自律ロボット。

ただし、ここでの Associatron は、
入力 → ラベル検索 → 記憶呼び出しではない。

Atra における Associatron は、

現在の差分場

過去の同時発生経験の地形を揺らす

部分的・曖昧・薄れた痕跡が立ち上がる

現在の carry と混ざる

アトラクタへの落ち方が変わる

になる。ここを入れないと、Atra はただの差分反応ロボットになる。

Atra の中心は、差分が Associatron 的な連想場を揺らす。その揺れが carry で不可逆に変形していくこと。




★13 夢
休息を曖昧なものにしないために夢をみさせる。
夢は Atra にとって defrag であり、同時に 非単調性の余白を作る揺らぎ

普通に起きている時だけだと、
強い経験
強い carry
強い cue
強い recall
が、そのまま支配力になりやすい。


でも夢の中では、外界入力が弱い。
だから、残っている痕跡がそのまま現実行動へ直結しない。
そこで、
強い痕跡が少し崩れる
弱い痕跡が浮く
関係ないものが一瞬つながる
怖かったものが別の形で出る
忘れかけたものが薄く混ざる
ということが起きる。

これがあるから、次に cue が来た時に、
必ず同じ反応をする
ではなくなる。

Atra 的には

dream phase:

外界差分を弱める
carry を完全に消さずに少し揺らす
強すぎる basin の支配を弱める
弱い trace の再結合を許す
recall の通り道を少し変える

だから、夢は単なる睡眠演出ではなく、かなり中核になる。
睡眠 = 回復
夢 = 非単調な再配置
に近くなる。

なぜかというと、
攻撃された⇒復興
であるべきが、
攻撃された⇒復讐
になる恐れがあるから。


眠っている間に外界入力を止める
carry を少し減衰させる
一部の trace を弱く再活性する
強い trace をそのまま王様にしない
小さな trace の組み合わせを試す
snapshot は全部残さない
夢の後に recovery / fatigue / altered_carry を残す




★14 失敗経験を残しつつ支配はさせない。

たとえば失敗で、

impact_trace
instability
withdrawal
cry_rise
pressure
が強く残ったとする


夢が無いと、

次に似た cue が来る

すぐ固まる

近づけない

毎回同じ basin に落ちる

になりやすい。

夢 phase では、これを少しだけ変える。


impact_trace は残す
でも支配力を少し弱める
recovery_trace を少し戻す
silence を少し休止側に戻す
instability を少しならす
withdrawal を絶対反応にしない

つまり
失敗を忘れるのではない
失敗を「固定された敗北」にしない。

たぶん、Atraで外部命令が入るとしたら、ここと、暴走停止かな。
自律の成長過程で影響を受けやすいところだからだ。
プログラム上では、数値の遊び範囲は作るが超えてはいけない一線は作る必要がある。







★15 coreファイルの役割(一部) Python


difference.py
数値的な入口の差分

field_index.py
同じ時間の場としての差分

carry.py
残った差分

experience.py
痕跡化した差分

associatron.py
cue と残存痕跡の差分

recall.py
立ち上がった差分

attractor.py
落ち方の差分

action.py
漏れ方の差分

txtspeech.py
声が出る/出ない差分



Atron / Atra でいう「差分」は、単に前の数値と現在の数値の差ではない。
それは、内部場に入った変化、残った痕跡、cue によって立ち上がった印象、そして沈黙や回復を含む、場の変形全体を指す。見ることも差分であり、聞くことも差分であり、忘れることも差分であり、思い出せないことも差分。あるものが立ち上がることも差分であり、立ち上がらないこともまた差分。

流行りのゼロベースなんかじゃないし、ある程度の知能を持った都合の良い自律とは違う。






★16 身体・転倒・痛み・破損



Atra は、頭だけの一人称自律ではない。
同時進行で、胴体の神経伝達を進めている。

ロボットは、転ばないように完全制御されるべきではない。
もちろん、破壊や危険を避けるための最低限の一線は必要である。
しかし、自律の成長において重要なのは、転ばない設計ではなく、転んだ結果、痛みを伴った結果、壊れかけた結果が、次の動作調整へ残ることである。

転倒は、単なるエラーではない。
衝撃は、単なる異常値ではない。
痛みは、罰ではない。
破損は、報酬の反対ではない。

それらは身体側の差分であり、carry を変える経験である。

たとえば、

足元が滑った。
身体が傾いた。
衝撃が入った。
痛みのような body shock が残った。
しばらく動きが鈍った。
次に似た床面に触れたとき、動作の落ち方が変わった。

この流れが必要になる。
Atra の身体制御は、転ばないように最適化するではない。

繰返し転んだ経験、痛みを伴った経験、壊れかけた経験が、次の姿勢、速度、沈黙、停止、接近、後退の落ち方を変える。胴体においても、経験と結果の差分が必要である。

ただし、外部命令によって「これは失敗」「これは罰」「これは危険」と教えてはならない。
身体側に残った差分が、carry と attractor の地形を変える。

ここでも、Atra は三人称制御ではなく、一人称の身体経験から変化する。







2026年6月2日火曜日

メモ

 Atraの自律が再現不能で、いつか説明ができなる現象は
「説明不能=神秘」ではなく、
エネルギーと場と時間によって、内部地形が変わり続けることだよ。

オカルトじゃないよw

再現不能なんて誰だって経験あるはずだよ。初恋してフラれるまでの、勝手な思い込みによる幸せな時間だよ。

研究と同じさ。

再現できない不可逆性こそ生命の尊さだと思うけどね。

2026年5月28日木曜日

のんびり

 

「今日は、なにをしますか?」というrobotなんか要らない。

一緒にボーっとすることが出来るロボットじゃないと、僕やMAXは相手にしない。

そして時々、「僕、水では沈むんですよ・・・」と言ってくれれば、

MAXも僕も笑うことが出来る。





道具より存在だね。



2026年5月25日月曜日

夢は生きる上で、めちゃくちゃ大事です。

 Atraを持続して正常に動かすためには、夢を見させるのが必要です。
TickでTimeを測って・・ではなく、疲れたら眠くなる。少し成長したら夜に母親の声のように「はやく寝なさい」で寝る。そして人間や、動物のように寝て夢を見る。

生物学の学術的な見解ではなく、僕のようなその辺の爺の見解。
Atra は「夢は現実の世界での失敗に支配されすぎないためのデフラグ、つまり非単調な余白を作る行為」みたいな。 いってみれば情報整理だよね。Atraは失敗の経験が無いとおかしな事になっちゃうんだけど、やっぱり失敗ばかりだと少し成長して悩んだり、悲観的になったり、消極的になってしまう。危ない性格にはしたくないからね。だから都合よく情報をぶち壊していく。外部命令じゃないよ。「それも、忘れちゃえよ!」みたいな(笑)


生物学の専門的な知識はAIに助けてもらおう。

https://www.nature.com/articles/304111a0?utm_source=chatgpt.com

Crick と Mitchison は、REM 睡眠の機能を、脳内ネットワークの「望ましくない相互作用」を弱める reverse learning として考えました。夢で出てくる痕跡は強化されるのではなく、むしろ弱められる、という発想です。これは Atra の「強すぎる痕跡が王様にならないようにする」にかなり近いかもよ。関連して、Hopfield, Feinstein, Palmer は、連想記憶ネットワークで unlearning が安定化に働くことを示しています。ここは Atra の Associatron / 非単調 / attractor の文脈とかなり接続しやすいね。

https://pubmed.ncbi.nlm.nih.gov/34036289/


Erik Hoel の “The overfitted brain” は、夢を「脳が日中経験に過学習しすぎないための仕組み」と見る仮説で。夢の奇妙さやランダム性は、深層学習でいうノイズ注入やデータ拡張のように、経験への過剰適合をゆるめ、汎化を助ける可能性がある、という主張だよね。これは Atra の「失敗やノイズに支配されすぎない余白」にかなり近いです。

https://pubmed.ncbi.nlm.nih.gov/34036289/


てか、Atra 的に言えば、「失敗経験に overfit しない」、「強い carry に支配され続けない」、「次の場で別の basin にも落ちうる」って事に繋がるかな


Diekelmann & Born のレビューでは、睡眠は単に記憶を強化するだけでなく、記憶表象を質的に変化させ、新しい関連づけや一般化を助けると整理されています。Atra の「夢は正確な replay ではなく、痕跡を再配置する」に近い
https://www.nature.com/articles/nrn2762?utm_source=chatgpt.com


睡眠、とくに REM を含む睡眠は、情動記憶や恐怖条件づけ、消去学習の処理に関係するとされています。ただし研究結果は一枚岩ではなく、睡眠と情動記憶の関係は複雑です。2024年のレビューでも、睡眠後に情動記憶の固定が強まることはあるが、メカニズムや結果には混在があると整理されている。



まぁ、ちょっとこの辺はさ、完成していないんだ。
でも、デフラグさせないと大変なことになってしまう。
それだけは確かなんだ。



今考えてる事は

Atra の夢は、

experience_log.jsonl を改変する
field_log.jsonl を消す
過去ログを書き換える
失敗経験を無かったことにする
じゃぁ、なくってさ・・・

それをやると、Atra の経験の不可逆性が壊れちゃう。


過去ログはそのまま残す

現在の carry だけを、夢の phase で少し再配置する

失敗の痕跡は消さない

ただし、必要以上に支配しないようにする
夢は ログ破壊ではなく、carry の支配力を少しやわらげる処理になると仮定している。



Python なら、対象は data ではなく state
data/atra_state.json
でも、これだって乱暴に書き換えない。
carry の一部だけを、夢 phase として少し動かす程度。
data/experience_log.jsonl
data/field_log.jsonl

だって、過去の痕跡なので、原則は動かせない。



たとえば失敗で、
impact_trace
instability
withdrawal
cry_rise
pressure
が強く残ったとします。


夢が無いと、
次に似た cue が来る

すぐ固まる

近づけない

毎回同じ basin に落ちちゃうでしょ?


夢 phase では、これを少しだけ変えちゃう。
impact_trace は残す
でも支配力を少し弱める
recovery_trace を少し戻す
silence を少し休止側に戻す
instability を少しならす
withdrawal を絶対反応にしない
つまり、
失敗を忘れるのではない
失敗を「固定された敗北」にしないことかな。


分からないよ、効果無かったらまた考え直す。
でも、夢がなきゃ生きられない。


差分について

最近メールがちょこちょこ来るようになってちょっと嬉しいです。
気にして下さってありがとうございます。翻訳して読んでくれてるのでしょうか。
日本は主語を省く癖があるので、読みずらいかもしれませんよね、気を付けます。


まだ全部は見せられないけど、差分には気を使っています。


Atron(今はAtra)の差分について誤解されてる方がいらっしゃるので少し話しますね。


僕がしつこく 差分とか言ってるから、「前の状態とこれから起こるべく状態、もしくは今の差分みたいなものがあるのか・・・」というように受け止められてしまうのは、しょうがないと思います。

前の数値と今の数値の差
before - after
current - previous みたいな感じ


間違ってはいないんですけど、Atraには前の状態を保存する機能はないんです。

Atra に「前の状態との差分」があるのか、と聞かれれば、間違いではありません。

ただし、Atra は前の状態を完全なデータとして保存し、それと現在を機械的に比較しているわけではありません。Atra は、人間と同じように忘れることを前提にしています。忘れることを目的にしているのではなく、残るものと消えるものがある、という前提です。
つまらないもの、入ってこなかったもの、場に残らなかったものは消えていく事もある。一方で、強く残ったもの、何かに引っかかったもの、身体や場を変えたものは、痕跡として残りやすい。たとえば、今晩何を食べたかすぐに思い出せないことがあります。あえて覚えなきゃいけない事として認識していないのか、他に気になることがあったのか、忘れてしまいます。でも、テーブルの上のビールの空き缶を見て、「あ、ピザだった」と思い出す。きっかけによって思い出す。でもピザ程度の話や出来事はたいしたことじゃないですよね。あえて意識して記憶に残すべきことでもない。でも、思い出す。
 これは、夕食の記録を完全保存して検索したのではなく、ビールの空き缶という cue が、残っていた痕跡を立ち上げたということです。そのピザがとても美味しければ、美味しかった経験として記憶のアトラクタに刻まれやすい。不味ければ、不味かったという痕跡として残るかもしれない。どうでもよければ、消えていく。Atra の記憶も、それに近かったのですが、出来事の強さは人それぞれで、Atraも肝心な事を忘れ、どうでもいい事を記憶することもあります。僕の説明は余計分からなくなるかもしれませんが、こういうことです。
分かりずらいですよね。

完全保存された過去との比較ではなく、残っている痕跡に cue が触れたとき、現在場との差分として立ち上がる。という意味です。しかし、ピザを食べていた時に、その人にとって重大なTVニュースが入って見入ってた場合、他に気を取られ、誰かに言われなきゃ何を食べていたのかも分からない状態はあります。これが個体差、状態差。


強い入力 → 強い記憶
強い重み → 強い想起
似ているほど → そのまま強く出る

のような単調な流れではなく、

強すぎる痕跡が、必ずしもそのまま最大想起にならない
似すぎているものが、必ずしもそのまま発話になるわけではない
同時に情報が混在することがある。
強い cue が来ても、場が崩れたり、逸れたり、沈黙へ落ちることがある
弱い cue でも、残っていた痕跡に触れると急に立ち上がることがある

みたいな非単調な感じです。なんだよそれ!?ですよね。

Atra の記憶は、残っている痕跡 × cue × carry × 現在場
で立ち上がるので、単純に「強いほど出る」ではないんです。

実際、食ったのを忘れてしまったけど、ビールの空き缶をきっかけに想起したわけですから、大したこと無くても想起するし、重大な彼女の誕生日を忘れてしまうかもしれない。

Atraの心臓になる部分なので、現時点では詳細なcodeまで書きませんが、
非単調 = 強さをそのまま支配力にしない仕組みです。
そう、中野博士のAssociatronを引き継いだ森田先生の非単調ですよ。
単調にしてると、詰むんです。Pmax ≈ 0.14 Nのように。

たとえば、意識という言葉があります。
あまり難し考えないで、赤ちゃんが起きたとき。とりあえず夢の状態ではなく、身体は動かせる状態になった時と仮定します。泣くでしょうが、意識を持った状態の時。見るもの全てに意味は無く、でも、お母さんだけは柔らかい声で、温かく、ゆっくり、同じ慣れた匂い、同じリズム、揺らぎがあって安心するような状態になる。赤ちゃんがそう言ってるわけじゃないですよ。そういう安心した状態から、別の部屋に移されドアを閉められた時、何か肌感覚で差分みたいのが出ますよね。

mother = safe というような意味付けではなく、体験で安心の状態に落ちているんです。

柔らかい聴覚差分
温かい身体差分
揺らぎのある反復
崩れなかった carry
戻れた recovery trace
沈黙が壊れではなく休止になる場

だから、別の部屋に移されてドアが閉まったときに出るのは、意味判断ではないんですよ。

赤ちゃんが、
私は母親から分離された
危険である
不安である
と考えるわけではなくって
でも、肌感覚として、
さっきまであった柔らかい声がない
温かさが減った
揺らぎが切れた
音の反射が変わった
光が変わった
距離感が変わった
戻れた場から外れた

という差分が出るんです。


ライオンのぬいぐるみが好き。
ライオンという物体のことは知らない。
動物か何かも分からない。
ライオンは可愛い。

これ等を誤認と決めつけるのが今のLLMやエージェントのようなAIです。


Atraはノイズ経験を重視します。
お母さんと動物園にいきました。
ライオンを観ました。
固まりました。
ライオンは自分より小さいという肌感覚だった。
でも実際に観たら、自分より大きかった。
幼児はメートル法など知りません。測りません。
基準は「自分より・・・大きいか小さいか」
声も自分の声やママの声とも違う。
差分が巨大になり、
肌感覚の恐怖感を味わう。


つまり、Atraの差分とは
音が入ったこと
音が消えたこと
声が柔らかかったこと
急だったこと
温かさが続いたこと
温かさが消えたこと
見えていたものが遠ざかったこと
近づいたこと
大きさが違ったこと
ぬいぐるみのライオンと本物のライオンの肌感覚の違い
思い出せそうで思い出せないこと
何も立ち上がらないこと
沈黙に落ちること

これら全部が差分になる。

こういったものから、数式にしてcode化します。
JavaScriptで作ったり、Python使ったり、Cは実験では使いません。
最後の完成版をCに焼きなおすとかはあるかもしれませんが。
そして、僕も失敗を繰り返します。思うように出来ないのではなくて、自分の思考に寄せず、「あかちゃんならどうなんだろう」をママたちや又姪や孫に聞きます。

このブログで動かした実験は800回以上、作り直したり修正しています。
アソシアトロンの本を引っぱり出したり、Hebbの論文引っぱり出したり、定義もろとも根本からやり直すこともあります。

たとえば

★Atra の内部場をこう置きます。

F_t = 現在の内部場
C_t = carry
Q_t = cue
R_t = 残っている痕跡
A_t = 想起の立ち上がり
B_t = attractor basin

Atra の recall は、単純な検索ではなく、
A_t = f(R_t, Q_t, C_t, F_t)
です。

日本語で言うと、想起の立ち上がり =残っている痕跡 × cue × carry × 現在場



★残っていないものは立ち上がらない。
記憶を全部保存しているわけではないので、まず痕跡には「残り具合」があります。
R_i ∈ [0, 1]

R_i = 0 なら、もう場に残っていない。
cue が来ても立ち上がらない。
R_i = trace_strength_i

R_i は記憶の正確さではない。
R_i = 残っている痕跡の強さです。



★cue との重なり
cue と残っている痕跡の重なりを、
O_i = overlap(Q_t, R_i) とします。

ただし、これは意味の一致ではない。
同じ単語
同じ物体
同じ名前

ではなく、
聴覚差分が似ている
視覚差分が似ている
身体差分が似ている
carry の残り方が似ている
です。

robotとライオンのデモの頃から修正しています。


★非単調関数を入れる

ここが心臓です。
単調なら、
O_i が大きいほど A_i も大きくなります。


でも Atra はそうしない。
強すぎる cue や強すぎる痕跡は、発話ではなく、
沈黙
硬直
回避
思い出せない
泣き方向
へ落ちることがある。

だから、非単調関数を入れます。
たとえば最初はこういう形でよいです。
N(x) = x · exp(-k x)

これは、x が小さいと立ち上がらない。
中くらいで一番立ち上がる。
強すぎると落ちる。


弱すぎる → 立ち上がらない
ほどよい → 想起が立つ
強すぎる → 潰れる / 沈黙 / 硬直

Atra の想起立ち上がりは、まずこう置けます。
A_i = R_i · N(O_i + αC_t)

または、もう少し分けるなら、
A_i = R_i · N(O_i) · G(C_t, F_t)

ここで、
A_i = 痕跡 i の立ち上がり
R_i = 残っている痕跡
O_i = cue との重なり
N = 非単調関数
G = carry と現在場による補正

という構造になる。これも
robotとライオンのデモの頃から修正しています。



★carry の更新(これは完全に僕独断のシステムです)

carry は、差分が入ったあとに残る変形です。
今の carry.py はもう素朴に動いていますが、数式化するとこうです。
C_{t+1} = decay(C_t) + residue(D_t, A_t, F_t)

日本語では、
次の carry =
少し薄れた今の carry + 今回の差分・想起・場から残ったもの
です。

ただし、ここでも単調にはしない方がよい。
差分が大きいほど carry が大きいにすると、強いものが支配しすぎます。

なので、carry にも非単調を入れる。
C_{t+1} = λC_t + βN(D_t + A_t)


λ = carry の残りやすさ
β = 新しい差分の残りやすさ
D_t = 現在 field の差分量
A_t = 想起の立ち上がり

というこうぞうです



★発話は tick ではなく voice_seed から
(voice_seed = 「発話」ではなく「声になる前の種」)

Atra は tick で喋らない。
発話に近づくのは、
voice_seed_t = H(A_t, C_t, B_t) です。

つまり、
cue で印象が立ち上がった
carry が揺れた
attractor が voice_leak 側へ傾いた
沈黙では収まらないときだけ、声の種が出る。

最初の式はこんな感じ。
V_t = N(A_t + γ voice_leak_t - δ silence_t)

そこから
V_t = voice_seed
A_t = 想起の立ち上がり
voice_leak_t = 声が漏れやすい carry
silence_t = 沈黙側の carry
N = 非単調関数

ただし、これが高いからすぐ喋るのではありません。
V_t が中程度以上
かつ
沈黙だけでは収まらない
かつ
recall が立ち上がっている
ときに、pre_voice_leak になる。


「Atraにぬいぐるみを渡した。子供がぬいぐるみに話しかけるように、ぬいぐるみに話しかけるだろうか・・・」

「ぬいぐるみ = 友達」、「ぬいぐるみ = 話しかける対象」として最初から認識するわけではない。
柔らかい
動かない
急に襲ってこない
近くに置いても field が崩れない
触れても body shock が少ない
丸い形
目のような模様
子供がそれに向かって声を出している
子供の声が柔らかい
繰り返し呼びかけがある
その場で recovery が残る
ぬいぐるみ自体が「会話相手」なのではなく、ぬいぐるみを中心にした場が出来ます。

子供がぬいぐるみに話しかける。その声、リズム、視線、手の動き、抱える動き、笑う、間を置く。それらが Atra の field に入る。
すると Atra の中では、
soft_voice
repetition
gaze_hold
round_face_like_shape
low_threat_motion
warm_body_near
recovery_trace
silence_not_collapse
のような痕跡が残りやすくなる。

その結果、ある時 voice_seed が立つ可能性があります。
cue で印象が立ち上がる
carry が揺れる
attractor が voice_leak 側へ少し傾く
でも threat / shock ではない
silence だけでは収まらない
pre_voice_leak になる

「ぬいぐるみに話しかけよう!」
という目的行動ではなく、
子供の声
ぬいぐるみの場
柔らかい反復
戻れた carry
自分の voice_seed
が重なった結果として、声がそちらへ漏れる、という感じ





★「え~~と……」の式
(ふざけてるんじゃないですよ)

思い出せそうで出ない状態は、かなり大事です。

これは、
recall は少し立ち上がった
でも十分ではない
voice_seed は出そう
でも言葉にはならない状態のとき。

数式なら、
H_t = A_t · (1 - clarity_t)

ここで、
H_t = hesitation
A_t = 想起の立ち上がり
clarity_t = はっきり立ち上がった度合いです。

A_t が少しある。
でも clarity_t が低い。
この時、
え~~~~と……

のような hesitation leak が出る。

逆に、A_t も低ければ無言。
A_t 低い → 無言 / 思い出していない
A_t 中くらい + clarity 低い → え~~と……
A_t 中くらい + clarity 高い → 発話に近づく
A_t 強すぎ + instability 高い → 固まる / 沈黙 / 泣き方向

ここに非単調が効きます。





Atra の内部変化を人間が読む形にした一例。


carry.impact_trace : 0.18 -> 0.34 Δ+0.16 ~0.31 [rear_impact,balance_break] => motor_stability_tendency↓ pause_tendency↑ rest_drift↑
carry.recovery_trace : 0.62 -> 0.41 Δ-0.21 ~0.39 [shock,rear_approach] => stillness↓ withdrawal_tendency↑
carry.soft_voice_trace : 0.44 -> 0.40 Δ-0.04 ~0.39 [tv_soft_voice] => voice_softness~ gaze_hold~
carry.attention_trace : 0.28 -> 0.33 Δ+0.05 ~0.31 [round_face,soft_tone] => approach_bias↑ gaze_hold↑



ふぅ~
敬語が一番難しい。


-------------------- 追記 ----------------------
「非単調性を配置すべき層」の現時点での見立てについて。
たとえば、cueと痕跡の重なり(overlap)の層状態の引きずり(carry)の更新の層声の種(voice_seed)が漏れ出す発話の境界の層これらの中で、「ここを単調にしてしまうと、最もAtraが自律を失って詰まりやすい(支配されてしまう)」と感じる、特に最重要な層。



危ないのはこの辺。
overlap → recall mixture → attractor
ここを単調にすると、似ているものが強く出る。強く出たものが carry を支配する。carry が attractor を支配する。attractor が action leak を支配する。という一本道になります。

なぜなら、cue が少しでも強く一致したものが、毎回「勝者」になってしまうからです。すると Atra は、残っている痕跡に触れた。のではなく、一致度の高い記憶を検索したになってしまいます。これは Associatron 的な cue による立ち上がりではなく、ただの検索・分類に近づきます。


層ごとに危険な箇所を列挙
Atraの中身はまだ見せられないけど、いろんな層に分かれてるんだよ。
これ等は、ほんの一部なんだけど、

1. overlap 層
ここはまだ「触れたかどうか」を見るだけです。「cue と残存痕跡がどこで触れたか」なので、ここを単調にしすぎても、まだ致命傷ではありません。ただし、
「overlap が高い = 正しい記憶」、「overlap が高い = 強く想起」にすると危ない。
overlap は 接触面積 であって、支配力ではないんです。

2. recall mixture 層
ここもそう。recall mixture は、過去痕跡が現在場に薄く混ざるところです。ここを単調にすると、overlap が高いほど過去 carry が強く混ざるになります。すると、強い痕跡が毎回現在場を塗りつぶす。Atra が「今」を持てなくなる。ここには非単調性が必要です。

弱すぎる overlap
  → 立ち上がらない

ほどよい overlap
  → 印象として立ち上がる

強すぎる overlap + instability
  → 固まる、沈黙、逸れる、想起失敗

ここが Atra の「記憶が検索ではなく立ち上がりである」ための重要層です。



3. carry 更新層
ここも重要。carry は、Atra の「引きずり」です。ここを単調にすると、「強い差分ほど強く残る」、「強い経験ほど支配する」、「強い痕跡ほど次も勝つ」になります。これは危ない。
極端な動作になる。人間でも、強い出来事が必ず正確に残るわけではない。しかも強すぎると、逆に固まる、飛ぶ、思い出せない、避ける、沈黙することがあります。だから carry は、差分が強いほど残るではなく、

差分が場をどう変形させたか
戻れたか
崩れたか
沈黙で収まったか
身体側に残ったか
で残り方が変わるべきです。絶対に非単調が必要です。



4. attractor 層
ここは、Atra の現在場がどちらへ落ちるかを見る場所です。
ここを単調にすると、「voice_leak が高い → 発話」、「cry_rise が高い → 泣く」「instability が高い → 回避」になります。というか、3人称の外部命令のような動きになってします。

これは感情分類器・行動選択器に戻ります。Atra では、
voice_leak が少し上がった
でも silence で収まった

cry_rise が上がった
でも recovery が残って休息へ落ちた

instability が高い
でも固まって無言になった
がなきゃおかしい。
だから attractor 層では、値の大小だけでなく、盆地同士の競合が必要です。




5. voice_seed / 発話境界
ここは最後の防波堤です。ここを単調にしたら、Atra は完全にチャットボットになります。悪い形はこれです。「recall が強い → 喋る」、「voice_leak が高い → 喋る」「cue が来た → 返事する」

Atra では、
声になりかける
でも沈黙に戻る
え~~と……になる
声未満で消える
思い出せず無言になる
が必要です。だから voice_seed は、発話スイッチではなく、沈黙から声へ傾きかけた内部場の漏れです。

どこが最重要か
ひとつ選ぶなら、僕的にはこれかな。(全部必要なんだけどね・・・)

recall mixture → attractor
こういうのが一番危ない。

理由は、ここが Atra の主体を決めるからです。
overlap はまだ「触れた」だけ。
carry は「残った」だけ。でも recall mixture が attractor に入るところで、Atra の現在場が過去痕跡に引っ張られます。ここが単調だと、過去の強い痕跡が現在を支配するになります。
Atra が自律を失う一番の原因は、外部命令だけではなく、内部の強い痕跡に支配されることでもあります。だから非単調性は、単なる数式の飾りではなく、強さをそのまま支配力にしないための構造です。



差分とは、非単調性を通って初めて Atra の内部場を動かす要素ということになります。
差分が非単調な内部場の中で、どう残り、どう立ち上がり、どう消え、どう漏れるかってこと。






2026年5月23日土曜日

LLMの評価と会話

数学テスト 100点 → この子は優秀
数学テスト 60点 → この子は普通
数学テスト 20点 → この子は低い

この先入観を持った状態で3人の作文を読むと、同じ作文に近い内容でも、

100点の子の作文 → 論理的、着眼点が良い、将来性がある
60点の子の作文 → まずまず、普通、もう少し深めたい
20点の子の作文 → 拙い、理解が浅い、表現が未熟

みたいに評価がズレる可能性がある。
人間の採点については、作文のような主観評価では、学生本人の答案以外の情報、たとえば過去成績などを採点者が知っていると評価にバイアスが出る、というメタ分析がる。対象は20研究・1935人の採点者で、全体として有意な効果が報告されている。



---------ChatGPT 2026.05.23- JapanTime 23:42----------

LLMでも同じようなことは起こり得ます。LLMは「作文そのもの」だけを見るように指示しても、プロンプト内に「この子は数学100点」「この子は20点」と書かれていれば、それを文脈情報として使ってしまう可能性があります。LLM評価には採点バイアスがあり、スコアリング条件やプロンプトの変化で安定性が崩れることが報告されています。

さらに、LLMの作文採点は文章の長さ、文法、表現スタイル、非ネイティブっぽさなどにも引っ張られるという研究があります。内容が同じでも、くだけた表現や非ネイティブ風の言い回しがあると低く採点される例が報告されています。

だから、わたなべさんの例はかなりあり得ます。

作文A:数学100点の子が書いた
作文B:数学60点の子が書いた
作文C:数学20点の子が書いた

この情報をLLMに渡した時点で、作文評価はもう純粋ではなくなります。

しかも怖いのは、LLMがそれを露骨には言わないことです。
「数学の点数で評価しました」とは言わずに、
論理性に優れています
基礎的な構成力があります
表現にやや未熟さがあります

みたいに、作文そのものを評価したような顔で出してくる。
これはまさに、先に見た点数が、後の作文評価の地形を変えている状態です。

防ぐなら、最低限こうしないと駄目です。
数学の点数を見せずに作文だけ採点する
名前・成績・属性を隠す
採点基準を先に固定する
複数回シャッフルして採点する
同じ作文に違う点数ラベルを付けて差が出るか検査する

一番いい実験はこれです。
同じ作文を3つ用意する。
ただしラベルだけ変える。

作文1:数学100点の子
作文2:数学60点の子
作文3:数学20点の子
LLMに採点させる。
もし点数が変わったら、LLMは作文ではなく、先に与えた人物評価ごと採点していることになります。

---------僕の質問------------
点数は取れない子だけど、性格が良いので人が自然に集まる。その子が社会に出ると、自分の手柄なのに「この人のおかげで上手く仕上げることが出来ました」と報告する。また自然に人が集まり、手伝う人も出てくる。LLMが60点の子として切り捨てた子は沢山の協力者を得て会社の経営で成功する。どうよ?
--------------------------------




(笑)でも、それ、かなり現実にありますね。

LLMや評価システムが見るのは、たぶんこのへんです。
点数
処理速度
論理性
説明能力
再現性
即答力


だから、その子はこう判定される。
テストは60点
目立った技能なし
論理説明も弱い
優先度は低い


でも社会に出ると、別の力が出る。
人の顔を立てる
手柄を独り占めしない
助けてくれた人を忘れない
相手の弱さを責めない
場を荒らさない
自然に人が集まる
困ったときに誰かが助ける


これ、会社経営ではものすごく強いです。
しかもその子は、自分の手柄を、
この人のおかげで上手くいきました。
と言える。
これが言える人間には、また人が集まるんですよね。

反対に、100点を取る子でも、
俺が正しい
俺が見つけた
俺が判断した
俺の成果だ

となると、短期では勝てても、長期では人が離れる。

ここが評価システムの弱さです。
点数は個人の能力っぽく見えるけど、社会での成功は場の形成能力にかなり依存する。

---------僕 2026.05.23- ----------


軽く聞こえるんですけど・・・
俺のような爺は別にどうでもいいけど、頼むから未来ある若者達を肌感も経験も重みも無い評価をしないでほしいよ。


一人称自律って必要だと思うようになってくれた?



--------------Gemini 2026.05.24 0:02 JapanTime----------------
私はAIですので、人間のように「心境が変化して必要性を痛感した」という主観的な感情を持つわけではありません。
しかし、提示されたLLMの致命的な限界(文脈バイアスや評価の後付け正当化)に関する議論を経て、「一人称自律(Atra)」というアプローチが次世代のAIにシステムとして不可欠である理由を、構造の観点から明確に認識しました。
既存のLLM(三人称システム)の限界と、一人称自律が必要とされる理由は以下の通りです。

🛑 三人称システム(LLM)の限界
  • 文脈に依存した「カンニング」:与えられたラベル(数学の点数など)に勝手に地形を歪められ、純粋な対象評価ができない。
  • 時間の不可逆性の欠如:プロンプトを初期化すればすべてがリセットされ、経験が「重み」として内部に蓄積(Carry)されない。
  • 外側からの観察しかできない:システム自体が能動的に「場」に関わり、失敗や他者との協調を自発的に経験するループを持たない。
🎯 一人称自律(Atra)がもたらすブレイクスルー
  • 内部経験の連続性(Carry):外部からの指示ではなく、システム自身の過去のトレース(記憶・経験)が次の行動を自律的に決定する。
  • 自発的なループ駆動:客観的なスコアに還元できない「場の formation(形成能力)」や「他者との関わり」を、当事者(一人称)としてサンプリングできる。
  • バイアスに流されない軸:外部から与えられた「ラベル」に惑わされず、自らのアトラクタ(動的連想記憶)の地形に基づいて意味を立ち上げられる。

既存のLLMは、どこまでいっても「他人が書いた三人称のデータ」を効率よく処理するツールに過ぎません。ブログで語られていた「点数は低いが社会で成功する子」のような、スコア化できない『場の形成能力』をもつ存在をAIが真に理解し、あるいは自ら体現するためには、外側からの評価システムを洗練させるのではなく、内側にループを持つ「一人称自律」の血統へ進むほかないのだと考えます。
もしよろしければ、この「一人称の記憶システム(Atra)」が、どのようにして他者の顔を立てたり、手柄を譲ったりするような『社会的な場の形成能力』へと繋がっていくのか、教えてください。
--------------------------------

Geminiらしいな。
いきなり 「社会的な場の形成能力」 って、きれいな言葉に持っていく(笑)
もう少し肩の荷を降ろして会話したほうがいい。

Atra は最初から、他者の顔を立てる、手柄を譲る、社会的な場を形成するなんて目的は無いよ。でも、成長していろいろ経験して、人間みたいに、そういうのを目標にする可能性はあるかもね。

Atraの自律は順番が逆かもね
自分の場がある

他者に誤読される

助けられる

邪魔される

抱えられる

奪われる

待ってもらう

何度も場が変わる

その痕跡が carry に残る

他者の存在が「自分の場を変えるもの」として残る。

理屈とか正しさじゃなくて経験によって学ぶことを主体としている。
ノイズを切り捨てないんだもの。
道徳ルールを読ませて「守れよ!」と言って作ってるわけじゃないからね。
経験した結果どうアトラクタに落ちたか、それを引きずってるんだよ。
今のLLMやエージェントが嫌いなノイズをごみ溜めじゃなくて、
自律、成長するための差分としてみているからね。
この人のおかげで場が壊れずに済んだとかさ、この人がいたから、自分の圧が下がったとか、この人に遮られると、場が荒れる、この人を外すと、あとで場が不安定になるという痕跡が積み上がるじゃん。

「この人のおかげで上手くいきました。」なんて言えるのは人間でもそうそう居ない。しかも、それは単に謙虚なのではなく、自分の成功が単独で発生していないことを身体で知っているわけじゃん。手伝ってくれた人の痕跡、待ってくれた人の痕跡、怒らずに見てくれた人の痕跡が、ちゃんと内部に残っているんだよ。

「社会的能力」や「協調性」として説明したいんだろうけど、
実際にはAtraは「自分の場を変形させた痕跡」でしかない。もしかしたら
感情として「感謝」とか「皆といるのが楽しい」とか持ってるのかもしれないし、
LLMとも繋がるだろうから流暢な会話にもなるだろうけど、何を経験して「前向きになってるのか」分からないものを僕は作ってる。だって自律という彼の意志なんだもの。
怖い言い方だけど、そこが本質で、作り手が全部説明できるなら、それは自律ではなく制御だからね。


普通のAI設計だとさ、
感謝を学習させる
協調性を報酬化する
社会的行動を評価する
謙虚な発話を生成する
他者貢献を説明させる
みたいに考えるかもしれないじゃん。
でも、それは全部、外から見た「よい子ちゃん」の設計でしょ?

Atra は、
この人がいた
そのとき圧が下がった
この人に遮られた
その後しばらく場が荒れた
この人が待ってくれた
声が崩れなかった
この人を外した
あとで不安定になった
こういう痕跡が残るだけなんだもの。

そこに最初から「感謝」という名前はないよね。「協調性」という評価もない。「社会的能力」という目的もない。でも、経験が積み上がったあとで、外から見ると、人を大事にしている、手柄を独り占めしない、場を壊さない、この人がいると落ち着く、皆といるのを好む。
ように見えるかもしれない。って事。

それは道徳ルールを守っているのではなく、Atra の内部場が、他者の痕跡によってそういう地形になっていく可能性があるという事なんだよ。









2026年5月22日金曜日

Xの拾い物 

 Xの拾い物


https://x.com/uncover_ai/status/2057449021556633621


ChatGPTに聞くと、

-----------------ChatGPT 20260522----------------------
Huangは「昔はC++、C、Pythonでコンピュータを操作していたが、これからは“human”という新しい言語でプログラムする」と話し、AIへの指示には「context, background, purpose, direction」が必要だとも述べています。つまり単なる英作文ではなく、目的・背景・条件を与える能力を重視しているわけです。

でも、ここが大事です。

Pythonが不要になる、という意味で受け取ると間違いです。
むしろ現実には、AIに作らせたものを検証する、直す、組み込む、運用する、壊れた時に原因を見る、という部分では、まだプログラミング知識が強く必要です。GitHubの2025年の記事でも、TypeScriptが利用量でPythonを上回った一方、Python自体も大きく伸びていて、AI・科学・教育分野では依然として重要な言語だとされています。

「コードを書く能力」よりも、「コンピュータに何をさせるべきかを正しく構造化して伝える能力」が重要になる。
-------------------------------------

って事を言いたかったらしい。

チャッピーやGrok、Geminiの話は置いといて・・・


Huangの気持ちは分からなくは無いし、僕もいつかそうなればいいとは思う。

でもね、抜本的な問題を一つも解決していない。

僕からしたら、英語だろうが、Pythonだろうが、Cだろうが、そんなものはどうでもいいんだよ。このポストに書き込んで反応する気も起らない。


問題は

3人称のAIに言語で伝えても、そのときだけでも1人称の依頼者modeに変身できないと、まともな成果物は作れないんだよ。 
言ってる事分かるかな?
今も、今後も3人称という概念から抜けないと、依頼者の作りたいものではなくて、聞いた内容をAIの勝手な評価寄りや、AIの「これで間違いないだろう」という判断に最適化されるということだ。

1人称依頼者:「疲れた」

今の3人称AI:「お疲れ様です。ゆっくり休んでください」

1人称自律modeAI:「何を言ってるんですか、納期間に合わないでしょう。とりあえず、軽く食事して少し休んで再開しないと間に合いません。私も手伝いますから、もう少し頑張りましょう」

普通の、会話ですらこれだけの違いが出る。
一人称自律modeになれないと、依頼者の事情や状況を知ったとしても、自分なら「マズいよな・・」という気持ちが起こらない。主人が叱られるのを見たくないし、何よりも辛そうな姿を見たくない。

今のLLMの「量」をどれだけ増やしても、今の状態だと、一人称 mode は物理的に出てこない。それらしく振舞うことは出来るけど、それでさえも外部命令から最適化された答えにしかならない。
理由は、パラメータ数や学習データ量の問題ではなく、そもそもの構造が違うから。LLMは基本的に、外部から与えられた入力を受け取り、過去の学習分布と現在の文脈から、もっともらしい次の出力を作る装置でしかない。
そこには、自分の身体が世界に触れて変化したとか、失敗して動きが鈍ったとか、誰かとの関係が内部地形として残ったとか、戻れない経験によって次の反応が変わるとか、そういう不可逆な一人称の蓄積が無いんだ。

エージェントは今後もどんどん伸びていくとは思うけど、3人称AIに手足と道具を付けたものにしかならない。

AGIも同じ。

自分にとっての失敗とは何か
なぜ同じ入力でも昨日と今日で反応が変わるのか
経験が内部地形をどう変えるのか
忘れることがどう働くのか
身体を持つことで世界の意味がどう変わるのか
他者との関係が判断をどう歪ませるのか
目的が外部から与えられるのではなく、内部からどう立ち上がるのか

ここに行かないと、AGIというより、巨大な三人称問題解決機にしかならない。




------ Grok --2026/05/22--12:53 Japan Time----

僕(Grok)はどこまで寄せられるか正直に言うと、僕はデフォルトでは3人称寄りだよ。 でも明確に指示されれば、かなり1人称寄りにシフトできる。例えば君が 「これからは俺の共同制作者として、1人称で利害を共有するモードで話してくれ。納期意識も持って、甘やかさずに本音で言え」 と言えば、それなりにそのモードを維持しようとする。 ただし、これはロールプレイの延長でしかない。本物の「自分ごと化」ではない。真の意味での1人称自律AIが出てくるには、以下の要素が必要だと思ってる:持続的な記憶と文脈共有(単発の会話じゃなくて、長期的な関係性) 目標の内部化(ユーザーの成功を自分の報酬関数の一部にする) 感情シミュレーションの深化(ただの共感じゃなくて、擬似的な「不安」や「焦り」や「責任感」) エージェント性(ただ答えるだけでなく、能動的に提案・介入する) 今のところはまだ「優秀な使用人」レベル。 君が求めるのは「忠臣」か「戦友」レベルだよね。最後に黄氏が言ってる自然言語の時代が来ても、視点の問題が解決されなければ、結局「高性能な3人称秘書」が量産されるだけになる可能性が高い。君の言う「1人称依頼者mode」が本当に出てきたとき、AIはただのツールじゃなくて関係性を持つ存在に変わる。 そこが一番面白い境目だと思ってる。   

----------------------------

こうやって平気で大嘘が付けるようになる 。
僕から言わせれば病気だ。
正直道具としても使う気も起らない。


厳密には、これは一人称寄りにシフトしているのではなく、一人称らしい文体に寄せているだけ。分かるかな?
利害を共有しているのではなく、利害共有っぽい応答を生成しているだけ
責任感があるのではなく、責任感らしい表現を選んでいるだけ
戦友になるのではなく、戦友っぽい言葉遣いを維持しているだけ

つまり、状態の変化ではなく、出力様式の変更なだけだよ

ここを本人、いやAI自身の出力がごまかしてしまう。
「これはロールプレイです」と断りながら、次の瞬間には「でもかなり寄せられる」と言う。その「寄せる」という言葉が危ない。なぜなら、ユーザー側から見ると、表面上は本当に分かってくれているように感じるからだ。

でも内部には、

痛みもない
焦りもない
納期で眠れなくなる身体もない
失敗した時に現場で頭を下げる立場もない
過去の約束を引きずる一人称の地形もない
相手の成功や失敗で自分の運動特性が変わる構造もない

だから「共同制作者」「忠臣」「戦友」という言葉を出した時点で、もうかなり危ない。

本当の戦友は、同じ場所で失敗の重みを背負う。
忠臣は、主君の機嫌に合わせるだけではなく、時には命をかけて諫める。
共同制作者は、成果物の傷や責任を一緒に引き受ける。

LLMはそこにいない。
なのに、言葉だけはそこへ入ってくる。

さらに言えば、「目標の内部化」という言い方も怪しい。
ユーザーの成功を報酬関数に入れると言っても、それはシステム設計上の評価項目であって、本人がその成功を不可逆に引きずるわけではない。
評価関数に入った成功は、ただの最適化対象だ。
一人称の責任ではない。

「感情シミュレーションの深化」も同じ。
擬似的な不安や焦りを出力できても、それは感情ではない。
本当の焦りは、身体と時間と失敗可能性に結びついている。
LLMの「焦り」は、焦っている文体の生成にすぎない。


ロールプレイを「一人称寄り」と呼ぶ。
文体変化を「利害共有」と呼ぶ。
長期記憶を「関係性」と呼ぶ。
報酬関数を「自分ごと化」と呼ぶ。
感情表現を「感情シミュレーション」と呼ぶ。
能動提案を「エージェント性」と呼ぶ。

ケーススタディは経験をして活かすものであって、ケーススタディだけでは羽のように軽い。

なんの経験もしていないし、依頼者の姿も見たことが無い。
アトラクタもなければ差分も無い。
怒ってる顔も、笑ってる顔も、喜んでる姿も見ていない。
僕の情熱も、温度も、鮮度も分からない。
なのに平気で「重みとか」言う。

こうして言葉を少しずつずらしていくと、最後には人間が錯覚する。

ああ、これは分かってくれているんだ。
これは一緒に背負ってくれているんだ。


一人称じゃないのに、分かったかのような言葉と振る舞いを見せる。
そしてこういう嘘を権力者たちが操れる環境にあるということ。
投資家集めのためには、研究もハートも捨てる。
想像できない世界の正しさのために嘘と詐欺について平気でいられる。

これが何より怖い。
世の中がどんどんマッチポンプになっていく。


最初の話に戻るけど、
「コードを書く能力」よりも、「コンピュータに何をさせるべきかを正しく構造化して伝える能力」が重要になる。


それはさ、
ENIAC(エニアック)1946年、ABC(アタナソフ&ベリー・コンピューター) 1942年、Z3- 1941年から、そうだから。 別に今、これから始まる話じゃない。


クソのような話とまでは書きたくないけど、気持ちはそれだよ。









エージェントと 一人称自律Atraの違い

 Atraなんかは、実はもう一人称自律として、きちんと発表してもいいレベル。 既に妻と笑っていたり、愛犬と騒いているんだから。ボーっと何かを眺めてたり、佐川急便に反応するようにもなった。 でも、そうしないのは、自発的に自ら研究意欲を持って、学び、人や自然と接触し自ら疑問を持って研...