動作AI・5-3・緊急ミッション

エンコーダ・デコーダ — 動作を畳んで広げる

5-2の宿題は「つまみ(潜在変数)[注]はどこから来るのか」だった。今回はデータだけを見てつまみを見つける。棒人間の場面600個を使い、1,196個の数値をk個に畳むエンコーダと、k個を再び1,196個に広げるデコーダを作る。16個の数値に畳んで広げても、動作の99.8%が戻ってくる。そしてその畳んだ数値で揺れを消し、隠れたひじを埋め、5-1の投棄検出を少ないデータでより正確にし、5-2の生成をつまみなしでやってのける。

1,196 → 16エンコーダが畳むサイズ(74.8倍)
99.8%16個の数値がとらえた動き(説明した分散)
0.030 → 0.009揺れ σ = 0.03 を畳んで広げた後の誤差(コード1)
2.1倍隠れたひじを埋める精度の向上(コード1)
99.7%種類ごとに25個だけで学習した投棄検出の精度(k = 16、コード2)
2つColabですぐ動かせるコード
1ミッション

3つ目の指令 — 「つまみをデータから見つけ出せ」

5-2の生成器Dは、3つのつまみ(速さ・位置・大きさ)をあらかじめ知っていたから勝った。実際のデータにはつまみが付いてこない。今回のミッションは、場面600個だけを見てつまみを自力で見つけることである。

[SYSTEM] 04:55 · 5-2完了報告を受理。次の指令:動作の圧縮。添付:6種類の場面600個、じょうごの設計図1枚。
博士
博士1,196個の数値が本当に全部ばらばらに動くと思う?違うよ。ひじが動けば手首もついていくし、このフレームは前のフレームとほとんど同じだよね。だから、ずっと少ない数値に畳めるんだ。
助手
助手畳む側がエンコーダ、広げる側がデコーダ!畳んで広げて元の動作が出てくるなら、真ん中の数値に動作が全部入っているってことですよね?
ショウジョウバエ研究員
ショウジョウバエ研究員その真ん中の数値こそ、5-2で探していたつまみなんだ。それにおまけもあるよ。揺れも消えるし、隠れたひじも埋まるし、投棄検出も良くなる。
研究室ロボットじょうごのサイズを1個から16個まで用意しました。コード1が計算した16個の方向をこのページに載せてあります。
上の画面では4人の棒人間が小さなカプセル1つに集まり、歩く棒人間の3列の隊列に広がる。下ではぼやけた棒人間がくっきりして、棒グラフが伸びていく。助手がこぶしを握って喜び、ロボットが上昇グラフの札を掲げている
畳んで広げる。ぼやけた入力がくっきりした出力になる場面を、セクション4で実際に作ってみる。
2じょうご

じょうご — 1,196個をk個に畳んで再び広げる

左の元データをエンコーダがk個の数値(中央の紫の棒)に畳み、デコーダが再び1,196個に広げる(右)。ボトルネックのサイズkを減らしながら、どこまで畳めるかを見てみよう。

ボトルネック k
場面

コード1の結果 — テスト場面300個を畳んで広げた誤差

ボトルネック k圧縮率説明した分散復元誤差(RMSE)骨の長さの誤差
11,196倍85.72%0.10216.16%
2598倍95.07%0.05987.65%
3398.7倍97.84%0.03952.78%
5239.2倍99.02%0.02661.95%
8149.5倍99.46%0.01951.86%
1674.8倍99.80%0.01231.50%
3237.4倍99.90%0.00881.43%

テスト場面には姿勢推定の揺れ(σ = 0.008)が混ざっている。k = 32 の誤差0.0088は、その揺れの大きさとほぼ同じである。それより下では、動作ではなく揺れを覚えることになる。

初心者のための解説 — このじょうごはどう作ったのか

場面600個を集め、「動作が最も大きく変わる方向」を順に見つけた(主成分分析、PCA)。エンコーダは場面から平均場面を引き、このk個の方向に映してk個の数値を得る。デコーダは平均場面にk個の方向をその数値の分だけ足す。足し算と掛け算だけの、最も単純なオートエンコーダである。ニューラルネットで作ったオートエンコーダは、層と活性化関数を使って曲がった関係までとらえる(3-7)。このページの16個の方向は、コード1が計算した値をそのまま載せた。

3潜在マップ

潜在マップとつまみ — データが自分で見つけたつまみ

場面600個をつまみ1・2で打った地図である。点を押して場面を選び、下の4つのつまみを回してみよう。つまみには名前がない。何が変わるかを見て、自分で名前を付けてみよう。

同じ種類の場面は地図上で近くに集まる。誰も「これは投げ」と教えていないのに、畳んだだけでそうなる。つまみの値は学習場面の標準偏差(σ)単位である。±2σの外は学習データにほとんどなかった領域なので、広げた形がぎこちなくなる。

つまみ最も大きく動くところ観察して付けたあだ名場面別の平均(コード1)
1(動きの85.7%)全関節のx、場面の後半「終わったときにどこにいるか」 — ゴミ箱の前に残るか、右へ歩いて出ていくか入れる −15.3 · 投げる +8.3 · 通り過ぎる +6.4 · 落とす +6.7
2 (9.4%)右手首・ひじと足首のx、場面の前半「最初にどこで、右腕をどちら側に置いて始めるか」通り過ぎる −4.4 · 手を振る +4.1
3 (2.8%)右手首・ひじ・頭のy「腕を上げるか、腰をかがめるか」手を振る +2.6 · 拾う −2.1
4 (1.2%)右手首と足首のx、場面の中盤「真ん中の時間帯の腕・脚の左右の揺れ」拾う +1.3 · 投げる −0.9

5-2のつまみと何が違うのか

5-2のつまみ(速さ・位置・大きさ)は、人が場面を作るときに決めたものだった。ここでのつまみは、データが最も大きく変わる方向を順に取り出したものである。だから名前がなく、1つのつまみに複数の意味が混ざっている(つまみ1は位置でもあり、「歩いて出ていったか」でもある)。その代わり、人が何も教えなくても見つけられる。これが潜在空間である。

4揺れ・隠れ

性能向上 ① — 揺れを消し、隠れたひじを埋める

実際の姿勢推定では関節の点が揺れ、腕が体に隠れると点を見失う。じょうごは「人の動作らしいもの」だけを通すので、畳んで広げると揺れはこし取られ、空欄はもっともらしく埋められる。

揺れ σ
場面

揺れの除去(コード1、場面120個)

揺れ σ = 0.01 なら誤差 0.0100 → 0.0082、σ = 0.03 なら 0.0300 → 0.0090、σ = 0.05 なら 0.0501 → 0.0104。揺れが大きいほど効果が大きい。揺れは方向がでたらめなので、じょうごの16個の方向にほとんど引っかからないからである。

隠れたひじの穴埋め(コード1、場面120個)

見えている欄だけで16個の潜在数値を最小二乗法で合わせてからデコーダで広げると、空欄まで埋まる。位置の誤差は「肩と手首の中点で埋める」0.0230 対「デコーダで埋める」0.0108で、約2.1倍正確である。5-1で述べた「腕が体に隠れると関節を見つけられない」を、こうして補う。

5投棄検出

性能向上 ② — 畳んだ数値で投棄を捕まえると

5-1で「座標をそのまま学習するとデータがずっと多く必要になる」と述べた。今回は関節と缶の座標(1,288個)をまずエンコーダで畳み、畳んだk個の数値で最も単純なロジスティック回帰を学習する。

学習場面(種類ごと)1,288個そのまま + MLPk = 8に畳んで + ロジスティック回帰k = 16に畳んで + ロジスティック回帰
25(全体150)96.7%95.0%99.7%
50(全体300)97.0%95.3%100.0%
100(全体600)98.0%98.0%100.0%

k = 16 + ロジスティック回帰:種類ごとに25個(全体150個)だけで、テスト300個のうち299個を当てた。16個の数値の中に「缶が最後にどこにあるか」と「人がどこへ行ったか」がいっしょに畳み込まれているので、直線1本でも分けられるようになったのである。

k = 8では足りない:缶の最後の位置のような小さな動きは9番目以降の方向に入っているので、8個に畳むと一部が抜け落ちる。とにかく小さく畳めばよいというものではない。

5-1の92.3%と違う理由:5-1では「物体なし」を座標 −9 で表し、ここでは (0, 0) で表した。入力の表し方を変えるだけで、MLPは98%まで上がる。この表の3つの列はすべて同じ入力で比較した。

なぜ畳むと良くなるのか

エンコーダは名札なしで場面だけを見て作った(600個をすべて使ったが、投棄・正常の正解は見ていない)。そうして得た「動作の要約」は雑音がこし取られ、数値も少ないので、正解の付いた場面が少なくても分類器が迷わない。名札のないデータで先に表現を学び、少ない正解で仕上げるやり方は、今日の大規模モデル学習の基本的な流れと同じである。ただし、この数値は合成データでの結果である。実際の映像ではこれより低くなる。

6生成

性能向上 ③ — つまみなしで動作を作る(生成器E)

5-2の審査官がまたやって来た。今回の生成器Eは、人が決めたつまみを知らない。潜在マップで投げが集まった場所(平均と標準偏差)を見て、16個の新しい点を抜き出し、デコーダで広げる。

5-2の4つの生成器と並べてみると(コード2・5-2のコード2、各20個生成)

生成器つまみをあらかじめ知っているか骨の長さの誤差揺れ手首の最大速度多様性新しさ
A 平均ひとつ—1.7%0.00451.360.0000.033
B 座標ごとにサイコロ—44.2%0.265910.000.1490.109
C 1つ選んでコピー—4.7%0.03002.750.1250.000
D つまみ3個から抽出知っている(人が決めた)0.0%0.01252.710.1230.022
E 潜在16個から抜き出す知らない(データが見つけた)3.7%0.01221.760.1140.047

Eができたこと:つまみを知らなくても、Bのように壊れない(骨の誤差 44.2% → 3.7%、揺れ 0.27 → 0.012)。多様で(0.114)、丸写しもしていない(0.047)。

Eができなかったこと:手首の最大速度が1.76で、投げる力が抜けてしまった。潜在空間で平均の近くを抜き出し、直線的な方向を足し合わせるだけなので、素早く振る短い瞬間がつぶれてしまう。骨の長さも本物(0%)ほど正確ではない。

より良いデコーダ

線形デコーダは方向を割合に応じて足すだけなので、「腕が円を描いて回る」ような曲がった関係をとらえられない。そこで実際の動作生成の研究では、層を重ねた非線形のエンコーダ・デコーダを使い[R2]、潜在空間が正規分布の形になるようにいっしょに学習して、「抜き出せばもっともらしく広がる」空間を作る(VAE [R1])。時間軸もいっしょに扱う動作用のVAEもある[R4]。

7限界

畳むことの限界、そして次のミッション

エンコーダ・デコーダは検出と生成の両方を押し上げた。それでも残ったものがある。

この回でわかったこと
  • 1,196個は16個に畳める:動きの99.8%が残る。動作データは見かけよりずっと単純である。
  • 畳むとこし取られる:揺れは消え(0.030 → 0.009)、空欄は埋まる(2.1倍正確)。
  • 畳むと少ない正解で学べる:種類ごとに25個で99.7%。
  • 畳んだ場所から抜き出せば作れる:人が決めたつまみがなくても生成ができる。
残った問題
  • 線形の限界:力強い投げがつぶれる。非線形デコーダとVAEが必要である。
  • 見たことのない動作:じょうごは学習した6種類の形しか知らない。初めて見る動作(例:転ぶ)は、畳んで広げると知っている動作のほうへ引き寄せられる。逆に、この「復元誤差が大きい場面」を異常動作の警報に使える。
  • 望む動作の選び方:今は「投げが集まった場所」を私たちが選んであげた。人が「手を振る」と言葉で選ぶことはできないだろうか?言葉も同じ地図の上に置けばよい。
左のハート・星・音符・感嘆符・月のアイコンカードと右の棒人間の動作カードが光る線でつながり、助手がいちばん上のカードを押し、博士があごに手を当てて見守っている場面
次のミッション予告・言葉と動作を同じ地図の上でペア合わせする
博士
博士動作を地図上の点にしたよね。じゃあ「手を振る」という言葉も同じ地図上の点にしたら?言葉を入れれば、その近くの動作が出てくるはずだ!
助手
助手言葉もエンコーダで畳むんですね!言葉じょうごと動作じょうごを同じ地図に合わせれば…
ショウジョウバエ研究員
ショウジョウバエ研究員それが5-4だよ。絡まった線が学習しながら自分のペアを見つけていくところを見ることになるよ。

Colabコード — このページを自分で実行してみる

どちらのコードも、Colabに標準でインストールされているライブラリだけを使う。「ノートブック(.ipynb)をダウンロード」したあと、Colabでファイル → ノートブックをアップロードから開くか、コピーして新しいノートブックのセルに貼り付ける。

コード1・動作をk個の数値に畳んで広げる(線形オートエンコーダ)セクション2〜4と連動・numpy, matplotlib・CPU 約3秒

場面600個でencode・decodeを作り、kごとの復元誤差、揺れの除去、隠れたひじの穴埋め(fill)を測る。このページの16個の方向はここから生まれた。自分のデータに置き換えるには Sの位置に(場面数, 数値の数)の形の自分のデータを入れる。センサーやログのデータも同じ方法で畳める。

実行結果(2026-10-05実行、numpy 2.4・matplotlib 3.10・CPU)。シードを固定しているので、いつ実行しても同じになる。グラフ2枚(kごとの説明した分散、潜在マップ)もいっしょに出力される。
コード2・畳んだ数値で投棄検出と動作生成を高めるセクション5・6と連動・numpy, scikit-learn・CPU 約40秒

5-1の投棄検出を「そのままMLP」対「畳んでロジスティック回帰」で、学習場面の数を変えながら比較し、5-2の審査官の採点で生成器Eを測る。セクション5・6の表はこの出力からそのまま作られる。

実行結果(2026-10-05実行、numpy 2.4・scikit-learn 1.8・CPU)。データのシードは固定したが、ライブラリのバージョンによってMLPの数値は少し変わることがある。

AI応用プロンプト — このコードを出発点にする

ChatGPT、Qwen、ClaudeのようなAIアシスタントに貼り付けるプロンプトである。「コピー」を押すと、プロンプトの後ろに選んだコードが一緒に付く。〔 〕の中を自分の状況に書き換えて使えばよい。

一緒に付けるコード

AIの答えは出発点にすぎない。提案された論文・数値・ライブラリ関数は、必ず原文と公式ドキュメントで確認する。実際の人の動作データを使うときは、撮影の同意とデータセットの利用条件を先に確認する。

用語集

本文の黄色い点線下線と同じ辞書である。セクション名を押すと、最初に出てきた場所へ移動する。

たとえ集 — そして、たとえが外れるところ

たとえは理解の第一歩だが、誤解の種にもなる。人の知覚と比べたたとえには強さを示した。直接 実際に同じ働きをするという根拠がある · 部分 一部の性質だけが似ている · なし 対応するものが知られていない

概念日常のたとえ人の知覚のたとえたとえが外れるところ
エンコーダ・デコーダ旅行かばんに服を畳んで入れ、宿で広げる部分的 長いダンスを「左足、拍手、回転」のように数語で覚えておき、また踊る服は畳んでもそのままだが、じょうごは小さなしわ(揺れ)を捨てる。捨てたものは広げ直しても戻ってこない
ボトルネックのサイズ k要約文の文字数制限なし要約では人が大事なものを選ぶが、このじょうごは「大きく変わるもの」を選ぶ。小さくても大事な違い(缶の最後の位置)を見落とすことがある
潜在空間飲食店を「価格・辛さ」の2つの軸の地図に打つなし飲食店の地図の軸は人が決めるが、潜在空間の軸はデータが決め、名前がない
隠れの復元消えた文字を前後の文脈から推測して読む部分的 隠れた腕も体全体の姿勢から推測する人の知覚推測が当たるのは学習した動作の範囲内だけである。初めて見る姿勢だと、知っている姿勢のほうへ間違って埋めてしまう
潜在空間から抜き出す地図で「この辺りの近く」を指して行ってみるなし地図の空き地(学習データがなかった場所)を指すと、おかしな場所にたどり着く

著者紹介と参考文献

E-1 著者紹介 · E-2 学術参考文献 · E-3 図と数字の出典

E-1 著者紹介

アン・サンソン(株式会社M-Robo代表)

韓国電気安全公社、毎日経済新聞を経て、現在は毎日経済の社外ベンチャーである株式会社M-Roboを創業し、代表を務めている。株式会社M-Roboは報道機関の社内ベンチャーとして始まったメディアベンチャーで、国民日報にロボット記者(ストックボット)を提供し、韓国インターネット振興院、韓国言論振興財団、韓国放送通信電波振興院などで多数のプロジェクトを手がけた。その後、自社のAIニュース新聞であるMoney-Roboを提供している。代表在任中にアジアオープンデータハッカソンで優勝し、データ創業分野の功労により行政安全部長官賞を2回受賞した。人工知能およびブロックチェーン分野で5件の特許の発明者・登録者である。著書に『AI犯罪と自己防衛』があり、フィンテック、統計学、人工知能の分野について、韓国技術教育大学校オンライン生涯教育院のeラーニングコンテンツを開発した。最終学位は経済学博士(東国大学校、ミクロ数理経済学)である。国民大学校、湖西大学校など複数の大学で、データおよび人工知能に関する科目を教えている。詳しいプロフィール

講義

  • アン・サンソン(2025)。『ビジネスのためのデータサイエンス』講義案。韓国オープンサイバー大学校 人工知能融合学科。
  • アン・サンソン(2025)。[K-デジタル] 人工知能 自然言語処理。STEP(スマート職業訓練プラットフォーム)、韓国技術教育大学校オンライン生涯教育院。
  • アン・サンソン(2024)。[K-デジタル] フィンテック データ分析の基礎。STEP(スマート職業訓練プラットフォーム)、韓国技術教育大学校オンライン生涯教育院。

STEP講義へのリンク:link.step.or.kr/1qyVoJ · link.step.or.kr/M9na9N · link.step.or.kr/brqEyc
サイトのリニューアルによりアクセスしにくい場合は、www.step.or.krからアクセスしてほしい。

論文と発表

  • アン・サンソン(2025)。国民老後保障パネルデータを活用した世帯支出予測モデルの研究:人工知能モデルに基づくアプローチ。『未来社会』、16(2)。原文
  • アン・サンソン(2025)。国民老後保障パネルデータを活用した世帯支出予測モデルの研究:人工知能アプローチ。国民老後保障パネル学術大会 発表資料(2025.05.13)、国民年金公団 国民年金研究院。発表資料
  • アン・サンソン(2025)。SNSテキストに基づく麻薬疑い取引の検出アルゴリズムに関する研究:パターンおよび文脈分析を中心に。『未来社会』、16(1)。原文
  • アン・サンソン(2024)。金融分野の異常検知モデルのセキュリティのための統計に基づく敵対的データへの対応策:実証分析とシミュレーション結果。『未来社会』、15(3)。原文
  • アン・サンソン(2024)。人工知能を活用した仮想キャラクターの特性に基づくSNS投稿検出ソリューション。2024 Summer Newmedia Party ポスター発表(2024.06.19)、ソウルメディア大学院大学校。
  • アン・サンソン(2024)。産業災害パネルデータを活用した機械学習モデル。第10回労災保険パネル学術大会 ポスター発表(2024.05.17)、勤労福祉公団 勤労福祉研究院。
  • アン・サンソン(2024)。暗号資産の時系列データの分析と予測:時系列モデルおよび人工知能モデルの比較と改善点の提示。『未来社会』、15(1)。原文

E-2 学術参考文献

  1. [R1] Kingma, D. P., & Welling, M. (2014). Auto-encoding variational Bayes. ICLR 2014. arXiv:1312.6114 — セクション6・7
  2. [R2] Holden, D., Saito, J., & Komura, T. (2016). A deep learning framework for character motion synthesis and editing. ACM Transactions on Graphics, 35(4), Article 138. doi:10.1145/2897824.2925975 — セクション6(動作用オートエンコーダ)
  3. [R3] Hinton, G. E., & Salakhutdinov, R. R. (2006). Reducing the dimensionality of data with neural networks. Science, 313(5786), 504–507. doi:10.1126/science.1127647 — セクション2(ニューラルネットのオートエンコーダとPCAの比較)
  4. [R4] Petrovich, M., Black, M. J., & Varol, G. (2021). Action-conditioned 3D human motion synthesis with Transformer VAE. ICCV 2021. arXiv:2104.05670 — セクション6
  5. [R5] Pearson, K. (1901). On lines and planes of closest fit to systems of points in space. Philosophical Magazine, 2(11), 559–572. — セクション2(主成分分析の出発点)

E-3 図と数字の出典

  • 場面の絵(エンコードのじょうご、デコードと性能向上、テキスト–動作マッチング)は著者が自作したピクセルアートである
  • セクション2〜4・6のエンコーダ・デコーダには、コード1が計算した平均場面と16個の方向をそのまま載せた(32ビット浮動小数点数)
  • セクション2・4・5・6の下の表は、コード1・2を実際に実行した結果である。画面上の揺れと生成結果はブラウザで同じ方法で引き直したものなので、数値が少し異なる
  • セクション3のつまみのあだ名は、方向が大きく動く関節・時間を見て著者が付けたものである

E-4 注釈

  • [注] つまみ(潜在変数) — このシリーズで潜在変数(latent variable)をわかりやすく呼ぶためのたとえである。回すとデータ全体が一緒に変わる、少数の数という意味だ。英語圏の解説でも、潜在空間の各次元をたとえとして「knob(つまみ)」「dial(ダイヤル)」「slider(スライダー)」と呼ぶことがある。論文での正式な用語は潜在変数であり、5-3でデータが見つけるつまみの一つ一つは主成分(principal component)である。本物のつまみと違い、1つに複数の意味が混ざることがある。

教育者向けTIP

講師、実務OJT担当者、チューター向けの運営ガイドである。時間は目安なので、実際の授業に合わせて調整する。

対象5-1・5-2を終えた大学生・社会人。センサー・映像・ログのように大きくて雑音の多いデータを扱う実務者
前提知識5-2の「動作は表である」と生成器の採点、ベクトルの内積(同じ位置どうしを掛けて足す)
学習目標① エンコーダ・デコーダとボトルネックkの意味を、じょうごの図で説明する ② 畳んで広げることが揺れの除去・隠れの復元・少ないデータでの学習・生成にそれぞれどう使われるか、例を挙げる ③ 線形エンコーダの限界とVAEが必要な理由を述べる
目安時間読む35〜45分・アニメーションのデモ25分・Colab実習30分(コード1 10分、コード2 実行1分 + 解釈19分)

3つの運営案

講義型50分

概念中心

導入5分(セクション1、5-2の宿題)→ セクション2 じょうごのkを減らす12分 → セクション3 つまみを回す10分 → セクション4 揺れ・隠れ8分 → セクション5・6 表を読む10分 → 確認問題5分。

実務OJT 90分

データ圧縮の応用中心

セクション2 15分 → 自分たちのデータ(センサー、ログ)の「数値の数」と「実際に独立な数値の数」についての討論15分 → セクション4・5で雑音除去・少ない正解での学習の事例20分 → コード1に自分たちのデータを入れる30分 → セクション7 限界の整理10分。

1対1チュータリング

レベル別の進度

入門者はセクション2・4だけ。中級者にはコード1のencode・decodeを手でたどらせたあと、セクション3のつまみ1がなぜ「終わったときの位置」なのかを、Vt[0]を描いて確かめさせる。

セクションごとの運営ポイント

セクション立ち止まって問いかける質問操作のコツ
2 じょうご「数値がいくつあれば、投げが投げらしく見えるだろうか?」k = 1 → 3 → 8 と上げながら右の結果を見る
3 潜在マップ「誰も教えていないのに、なぜ同じ種類どうしが集まったのだろうか?」赤い点(投げ)を1つ選び、つまみ1を −2σ に回す
4 揺れ・隠れ「じょうごは揺れと動作をどう区別するのだろうか?」σ = 0.05 とひじ隠しを同時にオンにする
5 投棄検出「k = 8 はなぜ k = 16 に及ばないのだろうか?」表の「25」の行を先に読む
6 生成「EはDより何を知らず、何がうまくできないのだろうか?」「作り直す」を押して手首の最大速度の欄を見る

よくある誤解 Top 5

誤解正しい説明見せる場面
圧縮すると情報が減って性能が落ちる捨てるものが主に雑音なら、かえって良くなる。揺れの除去、少ないデータでの学習がその例であるセクション4、セクション5
kは大きいほど良いkが大きいと揺れまでとらえてしまう。小さいと大事な小さな動きを見落とす。目的に合わせて選ぶセクション2の表の k = 32、セクション5の k = 8
潜在数値の一つひとつに、人が理解できる意味がある方向はデータが決め、名前がない。あだ名は人が後から付けた解釈であるセクション3の表
オートエンコーダはニューラルネットでなければならない最も単純な線形オートエンコーダはPCAと同じことをする。ニューラルネットは曲がった関係までとらえるセクション2の下の解説
潜在空間のどの点を抜き出しても、もっともらしい動作が出てくるそうなるのは学習データがあった近くだけである。その空間を均等に整えるのがVAEの仕事であるセクション3の±2σの外、セクション6

確認問題(解説は押すと開く)

Q1. 1,196個の数値を k = 16 に畳むと圧縮率は?このときとらえた動きは?

1,196 ÷ 16 = 74.75、約74.8倍。コード1での説明した分散は99.80%である。

Q2. 2つの方向 v₁ = (1, 0, 0)、v₂ = (0, 1, 0)、平均0のとき、x = (3, −2, 0.4) を k = 2 で畳んで広げると?

エンコーダ:z = (x·v₁, x·v₂) = (3, −2)。デコーダ:3v₁ − 2v₂ = (3, −2, 0)。3番目の値0.4は2つの方向に引っかからないので消える。これが「揺れが消える」仕組みである。

Q3. 隠れたひじを「肩と手首の中点」で埋めるとなぜ間違うのか?デコーダは何をより多く知っているのか?

ひじは曲がっているので中点より外側にある。デコーダは場面600個から学んだ「この姿勢ならひじはたいていここ」という関係(16個の方向)を使い、見えているほかの関節といっしょに合わせる。コード1では誤差が0.0230 → 0.0108に減った。

Q4. エンコーダを作るときに投棄・正常の正解を見ていないのに、投棄検出が良くなった理由は?

エンコーダは動作の構造(何がいっしょに動くか)だけを学び、1,288個を16個の要約に変えた。要約は雑音が少なく数値も少ないので、正解の付いた場面が150個しかなくても、単純な分類器が迷わない。

Q5. 生成器Eの手首の最大速度が1.76で、学習データ(2.55)より低い理由は?

潜在空間で投げの平均の近くを抜き出し、デコーダが方向を直線的に足すだけだからである。タイミングが少しずつ違う素早い振りは、数個の直線的な方向では表せずにつぶれてしまう。非線形デコーダや時間軸を扱うモデルが必要である。

Colab課題

基本

コード1で隠す関節を右ひじから左ひざ(9番 → 10番の関節)に変え、隠す区間を21フレームから40フレームに延ばす。デコーダで埋めたときの誤差がどう変わるかを表にして報告する。

挑戦

学習にない動作「転ぶ」(pose関数でleanを1.4まで大きくした場面)を作り、6種類の場面より復元誤差がどれだけ大きいかを測る。復元誤差で「初めて見る動作」の警報を作れるかどうか、しきい値とともに提案する。

難易度の調整と発展学習

入門者セクション2のkボタンとセクション4の3つの図だけでも、「畳んで広げるとこし取られる」がつかめる
発展コード1の線形エンコーダをKerasのオートエンコーダ(1,196 → 64 → 16 → 64 → 1,196)に置き換え、復元誤差と生成器Eの手首の速度を比較させる
次回5-4 単語から動作へ — 言葉も同じ地図上の点にする

ミッション5-3完了!

「5-3 エンコーダ・デコーダ」編を最後まで読みました。研究室の仲間たちがひと言ずつまとめます。

棒人間のカードの束をじょうごに入れると、じょうごの下から光るカプセルが落ち、ほかの棒人間たちがカプセルを持ってはんこを押す6つの場面
博士
博士畳んで広げることで、3つのものを手に入れました。
  • 数値1,196個 → 16個、動きの99.8%
  • 揺れは消し、空欄は埋める
  • 少ない正解で検出、つまみなしで生成
助手
助手つまみ1が「どこへ歩いて出ていくか」だなんて、データが自分で見つけたのが不思議です!
ショウジョウバエ研究員
ショウジョウバエ研究員次は言葉だよ。「手を振る」という言葉を同じ地図に載せてみよう。