n次元空間における極座標
1. 2次元空間内における極座標
平面内の単位ベクトルは、必ず次のように描くことのできる実数を持つ。
但しは、軸から軸に向かっての角度であることを表現しているものであり、またこれにより定まる方向を仮想的な軸と宣言するものである。
2. 3次元空間内における極座標
なぜ1章で、わざわざなんてものを用意したのか。
それは3次元以上の空間における極座標を考えるとき、2次元平面内に持ち込んで考えることを可能にするためである。
立体内の単位ベクトルを考えよう。
まず平面内の角度をうまいこと考え、
点が平面に重なるようにする。
そして次に平面内の回転角度を考えればよいのだ。
平面についてのベクトルを考えるとき、
=
となるのだが、今回は空間についてのベクトルを考えなくてはいけないので、
をとでさらに表現しなおす必要がある。
つまり
ということだ。ここでとはの絶対値のことで、具体的にはである。
よって、空間についての単位ベクトルは
である。
3. 一般化してみよう。(n次元の場合)
2章で記述した、次に再掲する式を見てほしい。(但しは具体値を代入した。)
この式は、立体を、直線成分と平面成分の2成分からなるものと捉えることで、2次元極座標を3次元空間に持ち込んでいる様子を表現している。
同じ考え方は、4次元以降の空間にも適用可能である。
例えばによる次元空間上の単位ベクトルは、直線成分とによる次元空間成分の2成分からなるものと捉えれば、
とかける。
これは、次元を1つずつ減らしながら再帰している。
再帰代入を実行すると、次のようにかくことが出来る。
ただ、こういう書き方は正しくないので、ちゃんと書くと次の通り。
このベクトルの第成分は、
(1)のとき、
但し
(2)のとき、
但し
となる。
視円錐のベクトル方程式を求めてみる。
点 から点 を中心に視野角60度で眺めたときの視円錐のベクトル方程式を求めよ
→
まず視心のベクトル方程式を求める。
視心上の点は次の条件を満たすはずだ。
但しは正数。
次に、視心上で、から距離1である点を求めよう。
(なので、
)
よって、視心のベクトル方程式は次のように書き換えることもできる。
但しは正数。
数値を代入すると、
この式は、からの方向にだけ進んだ点の座標を示している。
視心上の各点が、視心と垂直な方向に、何らかの大きさを持つ円(自身を中心とする)を描いていると考えることで、視円錐は実現する。
この円上の点をベクトル方程式で表現してやればよいのだ。
円の半径は、と視野角(画角)によって決まる。
と垂直な向きに円があるので、どこでもよいから円の端をとすれば、
3点を頂点とする三角形は直角三角形であることが分かる。
この直角三角形の辺は、視円錐の母線であるから角は視野角の半分の角度を持つ。
よって、半径は、であることが分かる。
(例えば、今回の場合は、視野角が60度なので、
となる。)
点がこの円の内部にあるとするならば、
…①
のはずである(円のベクトル方程式)。
そして…②である。
今、を消してしまおう。
もしを活かしたまま回答を得ようものなら、答えるときにとは何なのかを言葉で説明しなくてはならないが、それはあくまでも最終手段。できることなら問題に与えられた点だけを使って答えたいのである。
図から明らかにである。
①は
②は
①へ②を代入すると
両辺は明らかに正。2乗すると、
となる。
但し、には正であるという条件が課されていたので、
とできる。
よって、具体的な数字を代入すると
では最後に、この方程式の正当性をmatlabで確認してみよう。
まずは次のようなファイル「view_cone.m」を書く。
function bool = view_cone(x, y, z) OP = [x, y, z]; OC = [1, 1, 1]; CT_ = [3, 4, 12]; CT = CT_./norm(CT_); CP = OP - OC; angle_of_view = pi/3; bool = (norm(CP) < (1/cos(angle_of_view/2))*dot(CP, CT));
このファイルを保存したら、次のコードを実行する。
hold on; %視円錐 for x=[0:0.25:10] for y =[0:0.25:10] for z=[0:0.25:10] if(view_cone(x,y,z)) scatter3(x,y,z); end end end end %視心 for k=[0:0.01:10] tmp = [1,1,1] + (k/13)*[3,4,12]; x = tmp(1); y = tmp(2); z = tmp(3); scatter3(x,y,z); end
結果、次の図のように得られた。右は、視心を正面にしたものである。
敵対的生成ネットワーク【GAN】とは何か
前回書いた高階客観性理論の記事 における「裁判官AI」を学部ゼミで発表したら、
先生に「このモデルはGANの拡張というより遺伝的アルゴリズムなんじゃないの?」というご指摘をいただいた。
この指摘の意味(何故、GANの拡張とは言えないのか)が捉えられなかったので、
GANの表面的なモデルだけでなく、その数学的な理論の裏付けも含めて勉強してみることにした。
1. 裁判官AIのモデル
裁判官AIとは、GANのモデルにおいて、識別器を2つに増やし、両者に対立概念を学習させることで、
生成器は「中立」を学習できるのではないかというものである。
2. GANの原典を読む
GANの原論文の式(1)を引用(※)する。
※表記方法を一部改変した。
生成器や識別器とは多層パーセプトロン(、つまりニューラルネットワークみたいなもの)で、(ここでは)人工知能の一種と考えてよい。
2-1. ミニマックス探索
式(1)の左辺は「を最大化させるがあって、さらにこのを最小化するがあるときの」ということである。
こういうのをミニマックス探索(minimax game)という。
wikipediaによれば「想定される最大の損害が最小になるように決断を行う戦略」のことで、囲碁などをコンピュータに思考させるアルゴリズムにも使われたりするようだ。
ではミニマックス探索が何故「GANの数式」となるのだろう。
識別器がを最大化し、生成器がを最小化することと、
GANが驚異的なまでに精巧な合成写真を生成できることの間にはいったいどのような関係があるのだろう。
この疑問を解く一つのカギとなるのが「ゼロサムゲーム」である。 [1]
ゼロサムゲームとは、二人でプレーするゲームで合って、相手のスコアと自分のスコアの和が常に0になるようなゲームのことだ。
自分のスコアが点だったとき、相手のスコアは確実に点なのである。
直感的に言い換えると、「自分がだけ得すること」と「相手がだけ損すること」は本質的に同じものであるというようなゲームのことである。
この考え方では、
の立場から見るととは「損」のことであり、
逆にの立場から見るととは「得」のことである。
図2-1-1. 識別器、生成器の選択、および価値関数
まず生成器の立場から見てみよう。
『識別器が損を最大化させてきたとき』、はその中でも最も損の小さい選択をする。
二重鍵括弧『』は、図2-1-2において赤枠で囲った部分に相当する。
図2-1-2. 識別器が価値関数を最大化するような選択をする様子
生成器は、赤枠の中から最小値を選ぶ。
つまり今回の場合は19となる。
このようにすることで、識別器と生成器は「フェアな勝負」を実現できる。
識別器は「個の数字からなるべく大きなものを1つ選ぶ」試行を回繰り返し、
この試行により得た個の数字を生成器に渡す。
そして生成器はその中からなるべく小さな数字を一つ選ぶ。
こうして個の数字の中から、大きすぎも小さすぎもしない数字を1個選ぶことができる。
これは僕の自己解釈も入っているが、とは識別器の「性能」を表している(※2)。
識別器の性能が高すぎれば生成器は学習機会を失い(「こんな感じだと騙せる」という経験が積めない)、精巧なフェイクは作れない。
しかし識別器の性能が低すぎても生成器は低レベルなフェイクで満足してしまう。やはり精巧なフェイクは作れない。
そこで「バランスの取れた」性能になってもらう必要があるのだが、単に識別器に手加減させるだけでは、フェイクの質はその手加減に依存してしまう。
だから手加減をさせるというよりは、「フェアな勝負」で両者本気で戦ってほしい。このような要請から、ミニマックス探索というアイデアが選ばれたのではないかと推測する。
※2: よく考えると、を性能と呼ぶより、「厳しさ」といった方が適切かもしれない。
『本物として扱うべきなのに、うっかりサンプルに含め忘れていた』ようなデータを確実に「フェイク」と言い切ってしまう識別器は、果たして本当に高性能なのだろうか。
言い換えれば、過学習の問題である。
2-2. ミニマックス探索の実装
式(1)の右辺について考えていこう。
まずというのは、がの分布に従う確率変数であるときの、式の期待値である。
したがって右辺第1項であるというのは「データの分布に従うベクトル」を識別器に入れたときの出力の期待値の対数である。
つまり、「本物のデータ」を識別器に入れたときの判定結果の期待値の対数である。
「本物」という判定を1で、「偽物」という判定を0で表す(※3)と、
である。
本物のデータに対して常に「本物」といえるようであれば減点なしだが、
逆に本物のデータを「偽物」とか言ってしまうような間違いが多ければ多いほど減点されていくというわけだ。
※3: このような「ラベル付け」はどうやら暗黙の了解のようで、論文では明示的に述べていはいなかった。
次に右辺第2項であるというのを考えよう。
まずはいったんはおいといてほしい。
生成器の出力したデータ、つまりフェイクデータを識別器に入れ、その判定結果を1から引き算したものに対して期待値を求め、その対数を求めている。
こうすると、識別器がフェイクに惑わされず「偽物」と判断したときより、減点は生じない。
逆に識別器がフェイクに騙され、「本物」と判断してしまったときはより、減点されてしまう。
ここでについて述べよう。
というのはノイズのことであり、生成器に入力するためのものである。
生成器は、ノイズの写像としてフェイクデータを生成するわけだ。
2-3. 潜在変数
では何故GANでは生成器にノイズを入力するのだろうか。
生成器は多層パーセプトロンなのだから、入力層の次元を0にし、専らバイアス成分を(最初の)隠れ層に渡せば入力一切無しでフェイクデータを作ることも可能なはずである。
この疑問に答えてくれる図が論文にあったので引用する。
黒の点線は本物データの分布、青の破線は識別器の境界線、緑の実線は生成器の作るフェイクデータの分布である。
識別器は、境界線と比較してデータと同じ側にあれば「本物」、違う側にあれば「偽物」と判定する。
また、からへの写像が図示されていて、の多く集まる部分ほどフェイクデータの分布が高くなる。
(同じことを表現しているので当然だ。)
(a)が初期状態とすると、(b)はが学習を行った時のものである。
図の場合、右側が部分的に正確に学習できている。
これに合わせて、が分布を再調整すると(c)のようになる。
これを繰り返すと、最終的に(d)のようになる。
「分布」という言葉からも分かる通り、本物データもフェイクデータも一つとは限らないのである。
本物データは複数あり、それらは何らかの意味での連続性をもってつながっているはずである。
その「つながり方をグラフで書くときに基準となる横軸」がやなのである。
そしての出力に「横軸的な広がり」を持たせる、つまり生成器に複数のフェイクデータを出力させるためには、何らかの入力が必要である。
そこで使われたのがノイズというわけである。
simplestone
simplest oneなのかsimple stoneなのか。
男性蔑視なテレビ番組が一人の女性の命を奪った
「誹謗中傷はやめよう」で誤魔化しきれると思うな。犯人はお前らだマスゴミと社会ガク者共。
女子プロレスラーの木村花選手が亡くなった事件。
この記事の執筆当時は事務所が原因調査中なのでまだ確定的なことは言えないけども、
SNSが炎上したことを受けた自殺であるというのが濃厚。
この事件を受け、ツイッターに「誹謗中傷」というトレンドが上がった。
その一方で、「#さよなら安倍総理」というタグが並んでいた。
「木村選手の事件で『誹謗中傷はやめよう』という雰囲気になっているときに#さよなら安倍総理 はないだろ」という真っ当な指摘をするツイートもちらほら見受けられた。
確かに「さよなら安倍総理」は「安部やめろ」とは明らかに異質の、悪意ある誹謗中傷と言わざるを得ないよ。左翼共は本当に何やってるんだ。二枚舌だなあ。
と思うのが普通だと思う。だが断言しよう。上の二つのトレンドは一つにつながっている。
実は木村選手、彼氏に対し、
《てめえがなんか言えよ》 《なんで黙って見てんの? 》《限界だよ 京都の時からさ》 《自分のことしか考えて行動してないじゃん》 《あんたのせいだよ》 《死ぬほど痛い思いして血流して骨折って頑張ってお金稼いでる人の気持ちなんてわかんないよね》 《一緒に住んでる人を笑顔にできないやつがさ、これから先さ、何百人何千人の前でさ、人のこと笑顔にできるわけないじゃん。ナメんのもいい加減にしろよ》
と、こんな誹謗中傷を浴びせていたのだ[1][2]。
正直、理由を聞けばそれも容易く頷けるのであるが、女性が加害者の時だけ理由を求め、「仕方ないよね」にもっていこうと工作するのはフェアではない。特に「誹謗中傷はどんな時でもダメ」ということを訴える今ならなおさらだ。
だからこの記事では敢えて彼氏の非についてはぼかしておく。(気になる方は参考ページのリンクから飛んでください)
これに対してネットは大炎上。
純粋な批判として理解できるものから、完全なる誹謗中傷、および批判と誹謗中傷を混ぜたような質の悪いものまでたくさん出た。ここに載せたのはほんの一部である。
こういったアンチからの攻撃や、執拗な批判を毎日毎日毎日毎日浴びせられ、木村選手は
と残し、この世を去ってしまったのである。
彼女の死が何をもたらしたか。
表面的にはベクトルが180度変わったが、本質的には何も変わらない。
真っ当な指摘から完全なる悪意に満ちた誹謗中傷まで、すべてをひとくくりにして、
「お前らアンチが殺したんだ。お前が死ねばよかった」と、アンチへのアンチが湧いた。ただそれだけである。
もちろんテレビ番組を非難する声もあがったが、あまりにも小さすぎる。
本当に残念なことに、「男性蔑視が男性をテロリストに育て上げ、若い女性の命を奪った」という指摘は1件も見つからなかった。
アンチのコメントを読んでみよう。怒りの絶対値でなく、怒りの単位ベクトルの方向を見たいため、敢えて誹謗中傷に当たる部分はカットor修正する。
「女子と住んでるんだから気を使え!って、男子だけに求めるの?」(女性崇拝の強要)
「どうしてカイくんが卒業しなければならなかったのか」(女尊男卑への疑問)
「好きだった男怒鳴り散らして追い出して」(男性軽視)
「彼氏作っても、その彼氏にDVしそうで怖い」(男性へのDVが表面化しない問題)
如何だろうか。
アンチたちは、選手や番組、そして社会の
「女性が偉くて男は目下の生き物」という態度に対し、悲鳴を上げている、と捉えたら、僕の被害妄想だろうか。
そもそも、何かと理由をつけて女性が男を一方的に殴る、言葉の暴力で叩きまくる、嘲笑の対象にするということが今のテレビではあまりにも多すぎる。
手先の器用な男性に対して、まるで芸達者な動物でも見ているかのように「男性なのにすごーい(笑)」と上から目線で褒める女性もいる。
女性にも十分加害性や男性蔑視な態度はあるというのに、それをとある簡単な方法で巧みに隠す。
その方法とは、「悪い男を探してきて、制裁を加える」というものである。
たったこれだけで、女性は「一方的に弱い男をいじめた加害者」から「悪を退治したスーパーヒーロー」に早変わりである。この手法を「男性蔑視の作法」とでも呼ぼうか。
「男性蔑視の作法」実例1
「男って不器用な下等生物よねw」と馬鹿にしたければ、家事に無関心な旦那のいる夫婦を探してきて、旦那を集団で叩く。
「旦那は要らない存在」なんて暴言が平気で飛び交う。
「男性蔑視の作法」実例2
「男って子供産めない劣等種よねw」と馬鹿にしたければ、出産を甘く見ている彼氏のいるカップルを探してきて、彼女が面白半分で彼氏に電流を流す。
酷い場合はこの「虐待」を受けた男性は、女性崇拝を強要されることもある。
木村選手炎上のきっかけとなった番組(テラスハウス38話)でも、「非のあるダメな男」と「女性による男性への一方的な暴言」を笑いものにしていた。「男性蔑視の作法」にそのまま当てはまる。
こういった卑怯な作法によって、男性へ女性に対する劣等感や罪悪感をとことん植えつけ、男性の精神を蝕み続けた女性の態度、それを煽るテレビの在り方に責任はないのか。
そして、繊細な男性ほど凶悪なテロリストへと変貌し、木村選手という女性に対して「逆襲」を仕掛け、殺してしまった。
当然、テロリストは確実に悪い。誹謗中傷は法的な処罰の対象となるべきだ。
とはいえ、娯楽の中に一方的に男性蔑視を混ぜ続けてきた数多くのテレビ番組、
女性蔑視には怒るくせに男性蔑視には何も言わない卑怯な社会ガク者たち。
こいつらが無罪放免で許されるべきでは断じてない。
どうせ、4時間後起きてニュース見たら、マスコミが偉そうな社会ガク者を呼んで「ネットの誹謗中傷ガー」とか電波に垂れ流しているのだろう。
いやいや、お前らも同罪だから。
お前らが男性蔑視を面白半分で生産し、黙認し続けた結果、一部の繊細な男性がテロリストと化して、一人の女性に「逆襲」し、苦しめて殺してしまったのだ。
お前らは偉そうに「人種間の貧富の差がテロを生む」と説く。
しかしそのお前らが男女対立、女性の優越感、男性の劣等感を煽り、「性別間の対立がテロを生む」のを手助けしてどうするんだ。
メディアと社会ガクは「殺人事件」の当事者だ。
男性蔑視が女性を殺したのだ。
参考ページ
単語ベクトルで形容詞を基底ベクトルとしてみることはできないだろうか
単語ベクトルで形容詞を基底ベクトルとしてみることはできないだろうか。
即ち、形容詞が線形独立になっているような学習済み単語ベクトルが欲しい。
そのような単語ベクトルに対し、形容詞がone-hotベクトルになるように座標変換すれば、
他の単語において、各成分の「意味」をとれるはずだ。
蟻コロニーに興味を持ちました
0.参考アプリ(!?)
apps.apple.com play.google.com1. 動機
0章に示した蟻コロニー育成ゲームで遊んでた。 基本は見て和むだけ。勝手に卵が増えるし、勝手にコロニーを掘り進めてくれる。 操作は「遠征」と「出陣」と「タップして卵を返す」くらい。 「遠征」は遠くに餌を探しに行かせ、 「出陣」は外敵を返り討ちにして餌にさせる。 どちらも「何匹出動させるか」を指定でき、それによって結果も変わってくる。 ゲームでは人間が遠征や出陣やコロニー拡張を指揮するが、自然界は誰がどうやって行動を決めるんだろうかと興味を持った。 調べてみると、いくつかの参考になるサイトを見つけた
二言でいえば、
- フェロモンによって自主的かつランダムに行動を決定する
- 個々の蟻の行動はコロニー全体の利益を最大化する傾向にある
であろうか。 働きアリの出産を妨害したりする行為については「ランダム」な行動の結果低確率でフェロモンに逆らう行動をとった働きアリが、その他大勢から高確率で妨害を受けることで、全体の利益を最大化しようとするものと説明ができるだろう。
この2つをアルゴリズムに組み込んで機械学習をやらせたら、蟻の社会のように複雑に分担作業を行えるになるのだろうか。 そんな興味を持って、考え始めたのが「蟻ゴリズム」である。
2. 仕様
蟻ゴリズムは次のような仕組みを持っている。
- 人工知能を持つ蟻を無数に設置し、その全体をコロニーと呼ぶ。
- 蟻の人工知能における入力はコロニーの「フェロモンベクトル」であり、これは各蟻の出力するフェロモンの(重み付き)総和である。
- 蟻の学習目的は「フェロモンベクトルの絶対値の最大化」である。
フェロモンベクトルを最大化する操作は、考えられる操作をランダムに試すことで発見される。 また、次回以降、(同様のフェロモンが入力された際に)今回選んだ操作が再び選ばれやすいよう、確率分布を調整する。 「同様の」は、内積/(絶対値積)で評価できると思う