One Network: JAX and Virtual Eyes
Loading...
The app: one network in Python and JAX

単一のネットワーク

絵画とスレッド全体を担う単一のネットワーク

ここで構築され、ここで学習された本物のネットワーク。絵画のパッチ、絵具が示唆する奥行き、そしてこの会話のすべての文字が、一つの共有空間に存在しています。事前学習は一切行われていません。

絵画をパッチごとに

ネットワークは絵画を小さなパッチに分けて、それぞれの明るさ、色、位置を確認し、それらの単語を学習します。同じ重みがスレッドの文字を読み取ります

PythonとJAXで記述されたアプリ全体

このページと以下のプログラムは一つのネットワークです。このプログラムは、GTK4ウィンドウ、JAX勾配、絵画、スレッド、予測される深度、および共有空間を含むアプリケーション全体です。コピーまたは保存して、ご自身のマシンで実行してください。

絵具のパッチ
—
学習する単語
—
読み取る文字
—
まとめて保持するファイル
net_gtk.py
net_gtk.py

ウィンドウの機能

  • 300または2,000ステップトレーニングするか、途中で停止してください。学習はスレッドで実行されるため、ウィンドウは動作し続けます。
  • 絵の任意のパッチをクリックすると、そのパッチに対応する単語が表示されます。
  • 「暖かい金色」や「濃い青」などの言葉で問いかけると、その質問に該当するパッチが点灯します。
  • いくつかの文字を入力すると、次に期待される文字をパーセンテージと共にリストアップします。
  • 自分の文章を貼り付けて「代わりにこれを学習」を押してください。新しい文字は同じテーブルに新しい行として追加され、既知の情報が失われることはありません。
  • 絵の下に2つの図が表示されます。予測された深度と、点は絵、四角は単語を表す1つの空間です。
  • 重みをnet_weights.jsonに保存し、次回に再度ロードしてください。

実行方法

1つのフォルダに1つのファイルと、もしあれば painting.jpg という名前の絵画を用意してください。Linuxの場合、そのフォルダで以下を実行します:

  1. Pythonパッケージをインストールする python3 -m pip install jax numpy pillow
  2. GTK4とそのPythonバインディングをインストールする sudo apt install python3-gi gir1.2-gtk-4.0
  3. ウィンドウを開く 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つのバックエンドを生成します。

トークン
—
ツリー内のノード
—
関数
—
JAX用Python
JavaScript(ここで実行)

計算内容

    このチェックでは、これらの数値を、同じシードの重みでnumpyおよびJAXで実行した同一プログラムの結果と比較しています。これはこのカードが存在する前に測定されたものであり、推測ではありません。

    言語の仕様

    • インデントされた本体を持つ def name(a, b):、name = ...、および return ...
    • 数値、名前、括弧、単項マイナス、および行列積のための + - * / @
    • 転置のための .T、および tanh, sqrt, exp, log, sum, mean, maximum の呼び出し
    • それ以外のものは、推測するのではなく、行と列を示してコンパイラを停止させます。

    これは小規模な言語のための本物のコンパイラであり、Python ランタイムではありません。ループ、クラス、インポートは使用できません。ネットワークのフォワードパスはこの範囲に収まるため、同じテキストがあなたのマシンでは JAX になり、このタブでは JavaScript になることができます。

    仮想の目:ピクセルしか見えません

    モニターに向けられた目:画像だけを受け取り、それ以外(ページ、データ、ネットワークなど)は一切知りません。そのピクセルのみからエッジやコーナー、目が横に移動した際に各点がどのようにスライドするかを検出し、それに基づいて空間内のすべての配置を再構築します。

    目に見えているもの 青色がコーナー、オレンジ色がモーションを示します。
    エッジ Sobel勾配
    モーション Lucas-Kanade法によるオプティカルフロー
    再構築された部屋 ドラッグして回転
    検出フレーム数
    0
    コーナー
    0
    追跡済み
    0
    中央値モーション
    —
    深度検出済み
    —
    空間内の点
    0
    1フレーム
    —

    深度は実際のジオメトリですが、目の移動距離の範囲内であり、かつ画像にテクスチャがある場合に限られます。単色の平面からは何も得られません。壁の位置が見えることは、それが壁であると知ることではなく、ここで世界を創造しているわけではありません。上の部屋は、測定されたピクセルなのです。

    あなたのアイデアと、それでもまだ必要なもの

    • モニターを見る目は真のインターフェースです。人間と同じように画面を読み取るモデルであれば、プログラムごとのプラグインは不要です。見えるものはすべて入力になります。
    • 動く目の2つのフレームからジオメトリが得られます。これは世界モデルが一致させるべきものであり、このカードが実際に実現している部分です。
    • リアルタイムで生成される世界には、誰も見ていない部分を想像し、視点を変えても一貫性を保ち、ミリ秒単位で動作するモデルが必要です。それはこのタブには含まれておらず、ページ上でトレーニングすることもできません。
    • 正直な限界:この目は「どこに何があるか」を復元しますが、「それが何を意味するか」までは分かりません。見る速度は理解することではなく、前者は後者よりもはるかに簡単です。

    画像:レオナルド・ダ・ヴィンチ「最後の晩餐」のパブリックドメイン・スキャン、Wikimedia Commons。