📘
5章:配列を色で描く
― 重みを描く ―
この章では、
AIの中にありそうなものを、はっきりと目で見る
という体験をします。
いよいよ出てきます。
重み(weight)
まだ難しいことはしません。
学習もしません。
でも、この章を終えたとき、
「あ、AIってこんな感じの中身なんだ」
という感覚が、きっと残ります。
この章でやること
- 配列(たくさんの数)を用意する
- 数を「色」に変換する
- 画面に並べて描く
ゴールはこれです。
数の集まりが、意味のある“構造”に見える
配列って何?
配列は、とても単純なものです。
- 数が
- たくさん
- 並んでいる
それだけ。
でもAIの中では、
重みは、ほぼ全部「配列」
で表現されています。
-
MYON(ミョン)
「重みって、もっと特別なものじゃないの?」 -
エディ(EDiE)
「正体は、ただの数の集まりです。」
まずは配列を作ってみよう
Processingに、次のコードをコピペしてください。
float[] weights = new float[100];
void setup() {
size(500, 100);
for (int i = 0; i < weights.length; i++) {
weights[i] = random(-1, 1);
}
}
void draw() {
background(240);
for (int i = 0; i < weights.length; i++) {
float w = weights[i];
if (w > 0) {
fill(255, 100, 100);
} else {
fill(100, 100, 255);
}
float h = abs(w) * height;
rect(i * 5, height - h, 5, h);
}
}
成功条件
- 横に棒が並んで表示される
- 赤っぽい棒と、青っぽい棒が混ざっている
- 高さがバラバラ
それで成功です。
-
MYON(ミョン)
「……急にAIっぽくなった」 -
エディ(EDiE)
「はい。
でも、まだ“絵”です。」
何を描いているのか
今、画面に描かれているものは、
- 100個の数
- 正と負
- 大きさの違い
それだけです。
でも、これをこう呼びたくなります。
重みの分布
AIの中では、
- 入力に掛け算され
- 足し合わされ
- 出力に影響する
そんな役割を持つ数たちです。
少しだけ動かしてみる
次に、重みを少しずつ変えてみましょう。
void draw() {
background(240);
for (int i = 0; i < weights.length; i++) {
weights[i] += random(-0.01, 0.01);
weights[i] = constrain(weights[i], -1, 1);
float w = weights[i];
if (w > 0) {
fill(255, 100, 100);
} else {
fill(100, 100, 255);
}
float h = abs(w) * height;
rect(i * 5, height - h, 5, h);
}
}
成功条件(その2)
- 棒の高さや色が
- ゆっくり変化していく
しばらく眺めてみてください。
-
MYON(ミョン)
「生きてる…?」 -
エディ(EDiE)
「いいえ。
ただ変化しているだけです。」
でも、人はこう感じる
- 変わっている
- 保たれている
- 全体としてまとまっている
これだけで、人はこう思います。
「内部状態がある」
AIが“中身を持っている”ように見える理由の一つが、
ここにあります。
コラム:なぜ「重み」は見せると分かるのか
数値の一覧を見ても、
多くの人はピンと来ません。
でも、
- 色
- 高さ
- 並び
にすると、急に分かる。
構造は、視覚で理解される
この感覚を持っていると、
数式を見る目も変わります。
次の章へ
次の章では、
この「重み」を、
- 目的に向かって
- 少しずつ
- 変えてみます。
テーマは、
「値が変わる様子を描画する」
― 学習っぽいことをさせる ―
いよいよ、
“学んでいるように見える”世界へ。
Discussion