なめらかな社会とその敵。10年以上前の本が想像以上に面白かった。

なめらかな社会とその敵

なめらかな社会とその敵」という変わった本をおすすめしてもらったので読んだときに自分なりに大事だなと感じた部分をテキストにまとめてたので、アウトプットしておこうと思い公開します。

この本は10年以上前に書かれているけど、今読んでも納得するようなことがたくさん書かれています。

個人的にはシグモイド関数で多様性とフラットの違いを説明していた部分がわかりやすくて好きですねw

是非読んでみてください。 

第1章

  • 自由意志とは、行動の原因ではなく、行動を後付け的に合理化し、自らの一貫性を偽装するために仕掛けに過ぎない
  • オートポイエーシスは、生命とは何か私が生きる意味はなにか、主観性とは何かといった問いに答えている。
  • 人間は理由があって行動をするのではなく、行動をした後に理由を作っている。
  • 脳には複数の運動プロセスが独立に並行して動いており、実際に自分が行った運動を後付けで合理化するという特徴をもっている。

 

リベットの自由意志の実験
運動を開始するシグナルとなる準備電位は、その運動をしようとする意志のタイミングよりも300ミリ秒早く始まる。
つまり、意志より前に運動が始まっている。→リベットによると、意志というのは拒否権である。
自由意志というのは、複数の平行して開始される運動プロセスの中から適切でないプロセスを拒否する機能に過ぎない。
だから自由意志は運動の準備電位の前ではなく300ミリ後に起こることになる。

 

第2章

  • 権力者は周囲の人々にとっての「影響力のメディア」として機能する
  • 膜(内と外の区別)、核(小自由度による大自由度の制御)、網(複雑な反応ネットワーク)という3つの概念
  • 大局的な違いは、局所的な同質性の繰り返しから生じる。ステップのない社会状態を記述するのに「なめらか」は適している
  • 認知が離散化されると、適合する人工物や社会制度が離散化される。
  • なめらかな社会では、社会の境界が曖昧になるが、フラットではないのでそれぞれの概念そのものは変質しつつも、完全になくなるわけではない。
複雑さと向き合うために生命の進化は2つの解決策を生み出した
  1. システムの境界を同定して内と外を分ける膜によって複雑さを縮減し、核によってシステムの内部と外部を制御する技術
  2. 環境のほうに複雑さを押し付け、全体としての知性を増幅させる建設的手法→一部の認知リソースを解放し複雑なまま世界を認識させる認知的余力を生み出すことができる。

 

第3章

貨幣には2つの制約条件がある

  1. 欲望の二重の一致の困難を解決する
  2. 自己言及的に価値が維持される
PICSYのモデル>
静的モデルにおいては、N人の人がいて相互に評価する場合に、N×Nの行列をつくる。評価の高い人からの評価を重く、評価の低い人からの評価を低く重み付けしてそのコミュニティ全体でのその人の評価を決めることができて、これを貢献度ベクトルという。マルコフ過程の定常状態のときが静的モデル。

 

第4章

◾︎万能機械主義の時代

「人間さえもコンピュータの上でシミュレートされるプログラムの一つに過ぎない」と主張する時代。

◾︎ 身体環境主義の時代

  • 身体をもった人間と相互作用をする相手として捉えるような研究、HCIが生まれた。
  • ダグラス・エンゲルバート(1968年):「人間は計算機の上でシミュレーションされる対象ではなく、むしろ計算機は人間が生み出した人工物であり、人間と計算機は相互作用を通して共進化する。」この共進化を「ブートストラップ」と呼び”The Demo”で知れ渡った。
  • アラン・ケイ(1992):パソコンの父。オブジェクト指向言語を生み出した。パーソナルコンピュータを「個人が動的にメディアを作るメディア」すなわち、メタメディアと位置付けた。(マクルーハンの「グーテンベルクの銀河系」から影響を受けた。「メディアはマッサージである」)

コンピュータを教育の道具として使うのではなく、「メディアをつくる」教育をすることが重要だと訴えた。「コンピュータリテラシー

コンピュータは人間のつくりだした人工物の一つに過ぎない。だが、コンピュータはただの人工物ではない。メタメディアであり身体や環境自体をシミュレートできるという「特殊な人工物」である。

◾︎ ネットワーク主義の時代

  • コンピュータとは、「計算する機械」という意味から「世界のなんらかの自然現象をノードとして切り出してネットワークでつなぎ、入力に対する出力として人間にとってある種の意味作用を安定的に形成できるもの」へと変容している。
  • ユビキタス時代になるとコンピュータとは物理現象と認知世界の間に万能のミドルウェアを提供する存在である。
  • コンピュータをめぐる人間の知的関心は、人工知能(AI: Artificial Intelligence), と知能増幅(IA: Intelligence Amplifier)の2つの流れがある

◾︎ 社会知性:コンピュータとしての社会

  • 本人は遊んでいるつもりなのにコンピュータネットワークによってある種の作業に変換されてしまう。「エログリッドコンピューティング」と呼ばれる人間の欲望を駆動力にしたアイデアが元になっている。
  • CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart)の発明者フォン・アーンはSPAM業者のアイデアを利用し”ESP(Extra Sensory Perception) game”(ユーザに簡単なゲームをさせることで検索エンジンの精度をあげようという試み)を発表した。
  • 「計算可能な数について」by チューリング(1936) では数学者が頭と紙と鉛筆で計算していたプロセスをどのようにして機械に置き換え可能であるかという視点から計算機械が論じられている。

◯ ヒューマンコンピュータが軍隊のような階層的な組織を参考にして組織管理を行った。対して、
◯ ヒューマンコンピューテーションでは、人間素子の自発的な参加を促すインセンティブを与えるゲーム性を重視していることにある。

 

第9章

◾︎ メディアとは何か

  • 通信メディアは、受信者の情報量を増やすことによって、発信者が受信者を制御する『核』となる技術である。
  • 通信メディアにおいて大切な点は、同質のメディアを利用している者同士でしか通信ができず、同じメディアを受信可能な者同士で『膜』を形成することである。
  • メディアは、異なる身体性(欲望)を結びつける能力が高ければ高いほど、メディアとしての能力も高いことになる。
  • 貨幣は足し算して集積可能なもので、同一の価値基準をもっているように見えるにも関わらず、異なる解釈と身体認知プロセスで利用されているという点に、貨幣というネットワークメディアの肝がある。
  • 電子マネーはより多様に重層的に複雑に異なる身体性と欲望を結びつけることを可能にするために「電子マネーによって貨幣はより純粋になる」という命題は必ずしも成立しない。

◾︎ ゲームの労働化と労働のゲーム化

* 行為と意味の関係が間接化する


◯フォード生産システム→人間の機械化(位置依存)
クラウドソース化→人間の計算機化(ゲームによる動機付け)
ー 共通点は、人々が自分の行為がどのような影響を与えているのかわからなくなる。

 

* ゲームの労働化


◯ゲームの労働化 ー 意味世界との間接化を促進する(ex. reCAPTCHA) →現実逃避の現実化
◯労働のゲーム化 ー 意味世界との直接化をもたらす(ex. Kiva, eBay)→現実の現実逃避化
[意味世界≠現実世界で行為が当人にとって意味を持つかどうかが問題。対処がゲームの世界観であっても良い。]

「現実に」現実はゲーム化していて、人工物と人間の認知システムの共進化プロセスの一環である。

◾︎ 複数化する現実とパラレルワールドの誕生

  • 労働のゲーム化が意味世界との直接化だとしても、それによって必ずしも<現実>世界との関係を正しく認識することが出来るようになるわけではない。「AをBとしてみることができる」という命題は「AはBである」ことを含意しない。
  • Aという現状の複数解釈をあぶり出している。→世界のあらゆる現象は常に複数の解釈系のあてはめを許容している。
  • ゲームプレイワーキングがもたらす帰結は、「現実」の複数化の加速である。これはゲームの労働化による間接化と労働のゲーム化による直接化に共通で起こる現象である。
  • ARで「現実」の複数化はされに過激に進む。
  • 電脳メガネは<現実>世界に重層的に意味世界が重なっていく、いわばパラレルワールド(並行世界)を扱っている。

「複数の現実」がパラレルワールドとして出現するという議論は、すでに存在している

量子力学的な可能世界に代表されるような環境(物理)論に由来するぱらパラレルワールド
クオリア論や社会構成主義に代表される脳/身体論に由来するパラレルワールド
◯ 相互に関係した「インンターフェースに由来するパラレルワールド
20世紀は「正義」の時代だったが、21世紀は「ゲーム」の時代になる。「ゲーム」の時代では敵と味方の区別はあくまでも着脱可能である

  • パラレルであっても物理的には相互作用をしているので、物理世界におけるコンフリクトは起きてしまう。自然知性を用いてコンフリクトを減らすことができる程度にしか異なる欲望を結びつけることが出来ず世界の複雑さは万人にとって許容されずパラレルワールド化も進まなくなってしまうだろう。
  • パラレルワールド化によって人々がより異なる認知世界を生きるということは、複雑なまま生きることを可能にする。これによりコンフリクトの多様性、複雑性も爆発的に増大する
  • これはネットワーク主義の自然計算、自然知性の視点からは、情報技術は単に抽象的な世界のビットの操作ではなく物理世界に影響を与える万能のミドルウェアである。

 

メモレベルなので何言ってんのかわからないかもしれないですが、本の中で具体的な話を読んでいると面白くて引き込まれると思います。

また時間があるときに読み返したい本。

 

なめらかな社会とその敵

なめらかな社会とその敵

 

 

ARやMRで使われる、SLAMという技術の裏側を知りたい。

f:id:tnychor06:20190304180105j:plain 画像認識の応用先の1つとしてARやMRが挙げられると思いますが、正直あまり詳しくないので色々調べてます。 中でも面白そうな英語のブログを見つけたので、英語の練習もかねて翻訳してまとめたいと思います。

そのブログはこれ→ARCore and Arkit, What is under the hood: SLAM (Part 2)。 英語に自信あっても日本語の記事があると便利ですよね!

この記事のPart1では画像中の特徴点(キーポイント)の検出するアルゴリズムについて説明しています。 画像中から特徴点の検出を行うのは、周辺環境を認識する基本となります。

しかし、Mixed Realityにおいてはこれだけでは不十分です。 この2次元の画像から3次元上での位置を計算する必要があり、検出された数多くの特徴点間の空間的な距離を計算しないといけません。

この技術をSLAM(Simultaneous Localization and Mapping)と呼びます。 *1

この記事を読んでわかること:

  • どのようにARCoreとARKitがSLAM/Visual Inertial Odometryを行うのか。
  • SLAMの処理をより理解するために合理的な精度のSLAMを自作できるのか。

コンピュータ目線での空間センシング

まず始めにARアプリを起動したとき、行われることは「平面の検出」。 MRアプリをARKitやARCoreで起動した時には、システム自体は周辺環境についてまだ何も知りません。したがってカメラから画像を取得し、そのほかのセンサーとも接続を行います。

一度これらのデータが取得できると、

  1. 周辺の空間マップをポイントクラウドメッシュで構築する
  2. 認識した環境から相対的な位置を求める

処理を行います。ビーコンを設置して空間マップの構築を行う手法もあるが、ARのシステムにおいては不可能な状況が多い。

物体の位置関係

空間マップ、つまり物体間の関係から見ていきます。(参考文献: A stochastic map for uncertain spatial relationships - Semantic Scholar by Smith et al.)

実世界では、人間からするとそれぞれの物体の位置関係を正しく認識し情報を得ることは容易にできます。 しかしながらARの世界ではそれが難しくなります。

その難しさを理解するために空っぽの何もない部屋にいることを考えてみましょう。 ARアプリで、ある物体が確かに存在していることをAで検出し撮影者がBにいるとします。

f:id:tnychor06:20190304181238j:plain

実世界では、AとBの距離がわかっています。 もしBをCに動かしたいときにはどれくらい動かせば良いか推定できます。

f:id:tnychor06:20190304181858j:plain

残念ながらARやSLAM内の世界では、AとCの位置において完全に正確とは限らない情報しかありません。 その結果、不確かな物体の位置を正す必要があります。

f:id:tnychor06:20190304182310j:plain

それぞれの物体は相対的な位置関係を持つため、物体の存在確率で表すことができます。 その存在確率と位置の誤差を修正する手法はいくつかあります。 カルマンフィルター(Kalman Filter)、最大事後確率推定(Maximum Posteriori Estimation)、バンドル調整(Bundle Adjustment)です。

これらの推定手法は完全ではないので、新しいセンサーが出る度にその手法が更新されています。

認識した空間を整える

ARアプリで周辺の空間を確実に空間マップに構築するためには測定データを継続して更新する必要があります。 これは、どのセンサーから取得したデータにも誤差が含まれているだろう、という仮説のもと行われています。

この問題を理解するために、 Globally Consistent Range Scan Alignment for Environment Mapping | SpringerLink by Milios et al. を参考にします。

f:id:tnychor06:20190304183921j:plain

画像(a)の中でカメラが位置P1からPnまで動いてるのがわかります。このとき測定の誤差によって部屋の形がずれています。

しかし、画像(b)では精度が良くなっています。これは撮影時のフレームデータと位置関係を同時に追跡するアルゴリズムによるものです。

ここでの問題は、精度を保つためにどれほどのデータを保持し続けないといけないか、になります。計算量を減らすために保持するフレームを減らすという手法が使われています。

SLAMで空間マップを構築する

ARアプリを使いやすくするために、SLAMは以下の3つの課題に取り組む必要があります。

  1. 単眼カメラからの入力
  2. リアルタイムでの処理
  3. 時間経過による予測精度の低下

SLAMの骨組み

どのようにこれらの課題をARの中で扱えば良いのか? まずはCadena et al. が提案する(Past, Present, and Future of Simultaneous Localization and Mapping: Toward the Robust-Perception Age - IEEE Journals & Magazine)原理から考えていきましょう。 論文の中ではこのようなSLAMの基本構造について説明されています。

f:id:tnychor06:20190304223051j:plain

この図を分解していくと4つのモジュールに分けられます。

  1. センサー: モバイル端末では基本的にカメラがあり、加速度センサーやジャイロスコープ、デバイスによっては光センサーを利用しデータを取得する。
  2. フロントエンド: 特徴点の抽出と同じアンカーの特定を行う。
  3. バックエンド: 時間経過による精度の低下を補填するための誤差修正、カメラ位置や角度など姿勢の位置付けと幾何学的な空間全体の再構成を行う。
  4. SLAM推定: 検出した特徴と位置の最終的な結果を表す。

さらに理解するためにSLAMのオープンソースの実装を見てみましょう。

ORB-SLAMを覗き見してみよう

SLAMがどのように動くのかを理解するために、Montiel et al. によって最近実装されたアルゴリズムORB-SLAMを見てみましょう。

コードはORB-SLAM2を使っています。 アルゴリズムはGeneral Public Lisenceの元Githubで使用可能です。使い方の詳細はこちらのブログORB-Slam2: Implementation on my Ubuntu 16.04 with ROS Kinectに載っています。

彼のデモがこちらの動画になります。

youtu.be

ORB-SLAMはカメラからのデータのみを使っており、そのほかのジャイロスコープなどのセンサーは使っておりません。それでも精度が高いことがわかります。

  1. 特徴点の検出: ORB-SLAMは名前の通りORB(Oriented FAST and Rotated BRIEF: 詳しくはこちら)を使い特徴となるポイントを探し出し、バイナリ記述子(特徴量として記述された情報)を生成する。 ORB内部での処理はBRISKと同じ手法を元にしている。 ORB-SLAMは各フレームからキーフレームを取り出し保持しておき、後に空間マップの構築を行うときに過去データとして参照し精度を高めるのに使用する。
  2. 特徴点→3次元の目印: このアルゴリズムは新たなフレームを探し出すと特徴点の検出を行う。現フレーム内で検出された特徴点と前のフレームを比較し一致する点から空間的な距離を算出する。この手法は新しいフレームの中で同じ特徴点を再び見つけ出すという良いアイデアである。この手法では最初に推定されたカメラ姿勢が用意されている。
  3. カメラの姿勢を改良: このアルゴリズムは最初に推定されたカメラの姿勢を次のフレームでの特徴点の探索に使用する。この特徴点は前のフレームで検出された特徴点と同じ特徴点になる。これらの処理をStep2では繰り返す。もし確かに特徴点を見つけ出すことができれば、そのデータを使いカメラの姿勢を改良し空間的な測定誤差を修正する。
    f:id:tnychor06:20190304234652j:plain
    緑の枠が追跡されている特徴点。青の箱がキーフレーム。赤の箱がカメラの視点。赤の点が局所空間マップの点

ホーム位置に戻る、Loop Closing

ARアプリの1つのゴールとして、歩いて初期のホーム位置に戻ってきたときに「ホーム位置に戻ってきた」と認識することです。 カメラ固有の誤差や誘導誤差によってこの予測が難しいとされている。 これはSLAMにおいてはLoop Closingと呼ばれている。

ORB-SLAMはしきい値を決めることで対応している。あるフレームと次のフレームででの特徴点が一致し、さらに以前検出したフレーム中にそのフレームと一定のパーセンテージを超えて特徴点が一致するフレームが存在する場合に、ホーム位置に帰ってきたとする。 f:id:tnychor06:20190305000755j:plain

誤差を考慮するために、アルゴリズムでは更新されたループが閉じたという知識を全体のフレームに伝搬させて座標の修正を行います。 f:id:tnychor06:20190305001138j:plain

最後に

以上がブログの和訳になります。 SLAMに関してほとんど知識なかったため単語の意味がわからなくて意訳に近い部分があるかと思いますが、どんどんご指摘ください。

このブログを読んでSLAMのことが少しはわかったような気がしています。 リアルタイムで前のフレームと比較して特徴点のマッチングを行うとかできるんだ、と感心していました。 というのも研究ではバドミントンの選手の行動認識をしていましたが、リアルタイムでの処理とは程遠い手法だったからです。

視点が固定されていなくても特徴点のマッチングで空間を認識できるけど人物の行動を分類したりしようと思うと時系列の情報が必要となる。だからこそ、リアルタイムでの人物の行動認識は難しいのか、と改めた思った次第であります。

今後も興味のある分野を調べてはブログに書いていきたいと思いますー。

*1:ARKitはVisual Inertial Odometryという技術を使っており厳密にはSLAMとは異なるらしい。

コンピュータはなぜ動くのか。知っておきたかったハードとソフトの基本的な知識ばっかりだった。Part1

f:id:tnychor06:20190303142350j:plain

 

これまでPython, JavaScriptなどを学んでいてわからないことを調べていると、そもそもの前提知識として「Webサイトはどう動いているのか?」とか「配列はどのようにデータを保存しているのか?」など知らないから表面的な理解になっているなと感じることが多々ありました。

そしてその疑問を回収しようとググってみても「さっぱりわからない!」となって諦めることがめちゃくちゃありました。(もっと頑張れよ、と思うかもしれませんが本当にわからないんだもん...w)

たまたまTwitterで、コンピュータはなぜ動くのかという本が面白いというツイートを見つけたので買ってみました。

面白そうなのでゆっくりまとめながら書いてこうと思ってます。

 

 

前提として

筆者の意見としては、どんな難しい技術も基礎・原則がわかっていれば基礎・原則に当てはめて考えると理解できるみたいです。

これから学んでいく人はもちろん、そんなこと知ってるよという人も改めて読んでみると面白そうな本。

 

コンピュータの3大原則とは

3大原則なんてものがあるの?それは知りたい。

  1. コンピュータは、入力、演算、出力を行う装置である
  2. プログラムは、命令とデータの集合体である
  3. コンピュータの都合は、人間の感覚と異なる場合がある 

 当たり前のことだったりしますが、「つまりはどういうこと?」という問いにシンプルに答えるとこの3つになるとのこと。

 

コンピュータを作ってみよう

実際の回路図を使ってマイコン(自作コンピュータ)の擬似作成を行う。どことどこの配線を繋げれば良いのか丁寧に説明してくれる。

 例えば、CPU, メモリー, I/O(LEDやキーボードなど周辺装置と入出力するデータを一時的に記憶する)でのデータと命令のやりとりも、データをどこのアドレスに入出力するのかを明示する必要がある。

配線の数は多いけど部品の構造に合わせて配線を組むので意外とシンプルだったかもと思えてきました。

ここまでハードウェアの組み立てが完了したので、次章からマシン語とかアセンブリ言語などのソフトウェアの話になってきます。

 

Part1はとりあえずここまで。

時間が足りなかったので、以降の章も少しずつ更新して行きたいと思います。

つづく...

 

コンピュータはなぜ動くのか?知っておきたいハードウエア&ソフトウエアの基礎知識?

コンピュータはなぜ動くのか?知っておきたいハードウエア&ソフトウエアの基礎知識?

 

 

機械学習のエッセンスを読んだメモ。コード追いながら体系的に学べるからおすすめ。

f:id:tnychor06:20190302193218j:plain

essence-of-machine-learning


これから働き始める前に改めて数学的な基礎を定着させておきたいな、と思って機械学習のエッセンスを読んでみました。

ゆくゆくはディープラーニング協会のE資格に受かりたいという思いもあって、フレームワークに頼らないで実装できるようにしておきたいなと思ってもいる。

機械学習のエッセンス -実装しながら学ぶPython,数学,アルゴリズム- (Machine Learning)

 

 

第1章:学習を始める前に

事前に対象となる読者の定義をしてくれるのはありがたい。

これで前提知識によってフィルタリングしているので、わかりにくいと思う人はいないんじゃないだろうか。

 

第2章:Pythonの基本

ここでは、改めて復習という意味で振り返る感じでさらっと飛ばしました。

 リストの処理においてexpend, append, insertが破壊的な操作で、+は非破壊的な操作であること。は忘れてしまうのでメモしておく。

破壊的な操作でのリストへの変数の代入が参照の代入になるためにnew_array =  array[:]でコピーするなどして新しいリストを作るべき。というのは恥ずかしながら知らなかった。

(こういう部分は普段Jupyter 使っていると探索的に済ませてしまうので忘れがち。なので意識的に残しておかないとなー) 

 

第3章:機械学習に必要な数学 

集合(記号の定義など)、ベクトル、行列など基本的な知識をわかりやすく説明している。

理論的な話が得意じゃない自分でも理解がしやすかったし、改めて「そうだった」と思うようなこともあって良い復習になる。

抽象的な話だけでなく具体的な数字で計算の過程を説明してくれるので、思考の過程も追いやすいのがとても良いなと思った。 

正直理論は眠くなるところもあるけど、難しめの本に比べて行間が広いのが良かったのかもしれない。これ以上行間が狭ければ寝てしまうだろうw

 

第4章:Pythonによる数値計算

Pythonの基本的な使い方とNumPy, Matplotlibの使い方をコード写しながら覚えていける。

浮動小数点の扱いについて最初に説明されていて、後半「こういう時に使うのね」と伏線回収してくれるので納得感がありますね。

 

第5章:機械学習アルゴリズム

普段scikit learnとかでパパッと使っている手法をNumpyとSciPyで実装しているため、改めて復習するにも、新しく勉強を始める人にとっても理解が深まる内容だった。

Kerasを使っていたことがあるため、model.fit()の書き方には慣れていたけど学習後にmodel.predict()して予測を行う時の処理がどうなっているのかあんまり理解していなかった。クラスの書き方を見てると「こういうことか!」と納得した。

 

まとめ 

 復習としてはめちゃくちゃよかった。体系的にプログラミングも学んでいないし機械学習(僕にとっては画像処理)も学んでいないからこうやって改めて実装を追いながら勉強すると学びが多い!

あとはやっぱり行間が広くて読みやすい。これは本当に行間が与える読みにくさとかあるよね。それだけじゃなくわかりやすく言葉も選ばれていると思うからやはりおすすめです!