単一のネットワーク
絵画とスレッド全体を担う単一のネットワーク
ここで構築され、ここで学習された本物のネットワーク。絵画のパッチ、絵具が示唆する奥行き、そしてこの会話のすべての文字が、一つの共有空間に存在しています。事前学習は一切行われていません。
絵画をパッチごとに
ネットワークは絵画を小さなパッチに分けて、それぞれの明るさ、色、位置を確認し、それらの単語を学習します。同じ重みがスレッドの文字を読み取ります
- 学習ステップ数
- 0
- 画像誤差
- —
- 文字エラー
- —
- 奥行き誤差
- —
- 単語が見つかったパッチ数
- —
- 絵画のパッチ数
- 0
- 空間内の単語数
- 0
- 学習済み文字数
- 0
- 既知の文字数
- 0
学習する単語は、絵画から教えられること(パッチの明るさ、色、位置など)に限られます。テキスト処理では文字の順序を学習し、意味は学習しません。ここでは何も事前学習されておらず、このタブ内で勾配が計算されます
トレーニング(ライブ)
ページを開くと自動的に開始され、このタブ内で学習します。100ステップごとに測定結果を記録します。
ネットワークの構築を待機中…
PythonとJAXで記述されたアプリ全体
このページと以下のプログラムは一つのネットワークです。このプログラムは、GTK4ウィンドウ、JAX勾配、絵画、スレッド、予測される深度、および共有空間を含むアプリケーション全体です。コピーまたは保存して、ご自身のマシンで実行してください。
- 絵具のパッチ
- —
- 学習する単語
- —
- 読み取る文字
- —
- まとめて保持するファイル
- net_gtk.py
ウィンドウの機能
- 300または2,000ステップトレーニングするか、途中で停止してください。学習はスレッドで実行されるため、ウィンドウは動作し続けます。
- 絵の任意のパッチをクリックすると、そのパッチに対応する単語が表示されます。
- 「暖かい金色」や「濃い青」などの言葉で問いかけると、その質問に該当するパッチが点灯します。
- いくつかの文字を入力すると、次に期待される文字をパーセンテージと共にリストアップします。
- 自分の文章を貼り付けて「代わりにこれを学習」を押してください。新しい文字は同じテーブルに新しい行として追加され、既知の情報が失われることはありません。
- 絵の下に2つの図が表示されます。予測された深度と、点は絵、四角は単語を表す1つの空間です。
- 重みをnet_weights.jsonに保存し、次回に再度ロードしてください。
実行方法
1つのフォルダに1つのファイルと、もしあれば painting.jpg という名前の絵画を用意してください。Linuxの場合、そのフォルダで以下を実行します:
-
Pythonパッケージをインストールする
python3 -m pip install jax numpy pillow -
GTK4とそのPythonバインディングをインストールする
sudo apt install python3-gi gir1.2-gtk-4.0 -
ウィンドウを開く
python3 net_gtk.py
Windowsの場合、簡単な方法はMSYS2です: pacman -S mingw-w64-x86_64-python-gobject mingw-w64-x86_64-gtk4 を実行し、次に python -m pip install jax numpy pillow を実行し、同じMSYS2ターミナルで python net_gtk.py を実行してください。
macOSの場合: brew install pygobject3 gtk4 を実行し、次に python3 -m pip install jax numpy pillow を実行し、最後に python3 net_gtk.py を実行してください。
ディスプレイがない場合: python3 net_gtk.py --selftest を実行すると、ターミナルで学習が行われ、同じ数値が出力されます。
JAXを使用してこのファイルをターミナルで実行し、この絵とこのスレッドで測定しました:400ステップ → 67%のパッチが自身の単語を発見(画像誤差 0.68)、2,000ステップ → 95% (0.53)、5,000ステップ → 97% (0.45)。深度誤差は0.0003で終了し、文字誤差は3.05から2.90に低下しました。
ブラウザではPythonを実行できないため、このタブではウィンドウではなくファイルを表示しています。同じネットワークが上記でライブ実行されています。学習する単語は、絵画が教えられるものだけです。この絵には青色が含まれていないため、青に関する質問は金色の部分に当たります。文字ヘッドは文字の順序を認識しており、意味を理解しているわけではありません。
上記の Python および JAX 用コンパイラ
ボックスにはネットワークのフォワードパスが含まれています。コンパイラはそれを読み取り、チェックし、2回書き出します。1つは JAX 用の Python、もう1つはこのタブで動作する JavaScript です。1つのツリーから2つのバックエンドを生成します。
- トークン
- —
- ツリー内のノード
- —
- 関数
- —
計算内容
このチェックでは、これらの数値を、同じシードの重みでnumpyおよびJAXで実行した同一プログラムの結果と比較しています。これはこのカードが存在する前に測定されたものであり、推測ではありません。
言語の仕様
- インデントされた本体を持つ def name(a, b):、name = ...、および return ...
- 数値、名前、括弧、単項マイナス、および行列積のための + - * / @
- 転置のための .T、および tanh, sqrt, exp, log, sum, mean, maximum の呼び出し
- それ以外のものは、推測するのではなく、行と列を示してコンパイラを停止させます。
これは小規模な言語のための本物のコンパイラであり、Python ランタイムではありません。ループ、クラス、インポートは使用できません。ネットワークのフォワードパスはこの範囲に収まるため、同じテキストがあなたのマシンでは JAX になり、このタブでは JavaScript になることができます。
仮想の目:ピクセルしか見えません
モニターに向けられた目:画像だけを受け取り、それ以外(ページ、データ、ネットワークなど)は一切知りません。そのピクセルのみからエッジやコーナー、目が横に移動した際に各点がどのようにスライドするかを検出し、それに基づいて空間内のすべての配置を再構築します。
- 検出フレーム数
- 0
- コーナー
- 0
- 追跡済み
- 0
- 中央値モーション
- —
- 深度検出済み
- —
- 空間内の点
- 0
- 1フレーム
- —
深度は実際のジオメトリですが、目の移動距離の範囲内であり、かつ画像にテクスチャがある場合に限られます。単色の平面からは何も得られません。壁の位置が見えることは、それが壁であると知ることではなく、ここで世界を創造しているわけではありません。上の部屋は、測定されたピクセルなのです。
あなたのアイデアと、それでもまだ必要なもの
- モニターを見る目は真のインターフェースです。人間と同じように画面を読み取るモデルであれば、プログラムごとのプラグインは不要です。見えるものはすべて入力になります。
- 動く目の2つのフレームからジオメトリが得られます。これは世界モデルが一致させるべきものであり、このカードが実際に実現している部分です。
- リアルタイムで生成される世界には、誰も見ていない部分を想像し、視点を変えても一貫性を保ち、ミリ秒単位で動作するモデルが必要です。それはこのタブには含まれておらず、ページ上でトレーニングすることもできません。
- 正直な限界:この目は「どこに何があるか」を復元しますが、「それが何を意味するか」までは分かりません。見る速度は理解することではなく、前者は後者よりもはるかに簡単です。
画像:レオナルド・ダ・ヴィンチ「最後の晩餐」のパブリックドメイン・スキャン、Wikimedia Commons。
