投稿

embedding algorithm

 【 embeddingは行列の因数分解として解釈できる 】 mikalovらの「Word2Vec」の論文はいくつかのバージョンがあるのですが、その計算アルゴリズムは、2013年に、Skip−gramとnegative sampling の手法としてまとめられます。 ただ、2014年には、語の埋め込みのアルゴリズムの背後には、もっと深い構造があることが発見されます。それは、語の埋め込みは、ある行列の因数分解として解釈できるという発見です。 対象の言語の語彙Dを辞書式にアルファベット順に並べます。この並びでi番目の語をw_i とします。以前見たように、このi番目の語に、i番目のエントリーだけが1で残りのエントリーはすべて0の1−hotベクトルに対応付けることができます。 これは、Dから実数Rへの関数ですからR^Dのベクトル空間を考えたことになります。これもある意味、DからR^Dへの埋め込みですが、こうしたベクトル表示では、二つの語のベクトルの内積は0になり、言語の意味をうまく表現できないことは、前回見てきた通りです。 そこで、次のような|D|行 ×|D|列の行列Mを考えます(|D|は、Dの大きさです)。 Mの i行 j列の要素は、語w_iと語w_j に対応して、この二つの語がコーパス上で近くに出現する確率を表すものとします。Dが、例えば、3万語からなるとすれば、この行列Mは、3万行×3万列からなる巨大な行列です。 この行列Mが、|D|と比べるとはるかにちいさなdについて、|𝐷|×𝑑のサイズの行列𝜎′ と、𝑑×|𝐷| のサイズの行列𝜎の積の形で M=𝜎′𝜎 と因数分解できたとします。( 行列𝜎′𝜎のサイズが、|D|行 ×|D|列となることを確認ください。) この時、行列𝜎のi列は、語w_i のd次元のembedding を与えると考えることができます。(行列𝜎のサイズは、𝑑×|𝐷| ですので、どんな語w_i についても、i列目は存在します。また、i列目の列ベクトルの次元はdです。) Deep Learning の最適化の手順に則して語れば、Mが与えられた時、‖𝑀 − 𝜎′𝜎‖が最小となるような𝜎′と𝜎を見つける問題として、embedding のアルゴリズムを定式化できます。 -----------------------------

DNN と word embedding

【 embeddingの不思議 】 このセッションから Tai-Danaeらの論文の "Embeddings in Natural Language Processing" 「自然言語処理でのembedding」セクションの紹介に入ります。 ここ10年、計算言語学と自然言語処理(NLP)の研究者たちは、当初はアルファベット順に並べられた集合の構造しか持たなかった単語を、ベクトルに置き換えるというステップを踏んできました。 語をベクトルで置き換えるというステップは、人工知能分野における現在の進歩の主な原動力のひとつです。 もちろん、こうした変化を引き起こした最大の転換点は「Word2Vec」論文の発表なのですが、Tai−Danaeの論文が興味深いのは、この変化を引き起こした背景を分析していることです。  画像認識や音声認識で大きな成功を収めてきたDeep Learning 技術が、次のターゲットとして向かったのは自然言語処理の世界でした。 【 DNNの働きの定式化 】 当時、Deep Learning 技術の発祥の地とも言える、Deep Neural Network の理論的な定式化が進みます。( DNN = Deep Neural Network は、"feed forward network" とか "full connect network" とか、いろんな名前を持っているのですが、それらはみな同じものです。) それは、DNNは、ベクトル空間からベクトル空間への関数の連続した合成、しかもある同一の特徴で記述できる関数の連続した合成として記述できるという認識です。 この認識は、Deep Learning のシステムを構築を支援する様々なフレームワーク(TensorFlow, Keras 等々)登場の基礎として、実践的には非常に大きな意味を持ちました。 【 ある発見 】 そうしたなか、経験的なものですが、ある驚くべき発見がありました。Tai−Danaeの表現を引用します。 「ある言語タスク用に学習を済ましたモデルの第1層(先の図の𝑓_1)を、別の言語タスクを対象とした別のDNNの第1層として使用すると、この二つ目のタスクの性能が大幅に向上するのである。」 Word2Vecは、おそらく、こうした背景の中で生

enriched category

【 単純な例で enriched category を振り返る 】 このセッションでは、2つのオブジェクト間の射の集合𝐶(𝑦,𝑥)がもはや単なる集合でない場合の、カテゴリー論であるenriched category theoryについて考えます。 そこでは、射の集合𝐶(𝑦,𝑥)自身が、部分順序集合であったり、アーベル群であったり、位相空間であったり、他の何かであったりします。つまり、enrich化されたカテゴリーでは、先のCからSetへのfunctorであるpresheafの構成で、𝑆𝑒𝑡を別のカテゴリーに置き換えることになります。これはベクトル空間𝑘^𝑋との類比では、ベースの体𝑘を変えることに似ています。 新しいベースのカテゴリーが十分に良い構造を持っていれば、CをC上のpresheafで置き換えることについて述べたことは、ほとんど一語一語すべて通用します。 前回のセミナーは、言語のカテゴリーL上の copresheaf Set^L から、単位区間 [0,1] でenrich化された copresheaf [0,1]^L を構成したものです。これは結構複雑でした。 【 単純な例 -- 2-enriched presheaf 】 ここでは、もっと簡単な enriched category の例を考えます。 例えば、 𝖲𝑒𝗍 を、0と1という二つのオブジェクトを持ち、同一射以外の射は、0→1 一つだけである 2 というカテゴリーに置き換えると、それは、 2 -valued presheaves というカテゴリーになります。 この場合、𝐶が 𝑋 = 𝑋^𝑜𝑝なる離散カテゴリー𝑋だとすると、 2 ^𝑋のpresheaf は、{0,1}^X と表せて、正確に X上の {0,1}に値を取る関数(characteristic functionです)に等しくなり、それは、Xの部分集合に等しくなります。 2^𝑋の、それが2-enriched presheafであることによって与えられる構造は、以前に述べた部分集合上のBool 代数だということになります。( 0をfalse, 1をtrue と考えます) 前回のセミナーで見た、[0,1]^X は、単位区間[0,1]に値を取るpresheaf ですが、{ 0, 1 }^X は、0か1 かの値

presheaf

【 この部分は、この間のセミナーのまとめになっています 】 今回のセッションで紹介する部分は、この間のセミナーで扱ってきた問題の短かなまとめになっています。この間のセミナーで紹介してきた大規模言語モデルを舞台にして、Tai-Danae が利用した数学的手法を振り返るには、ちょうどいい素材かもしれません。ぜひ、以前の資料を参照ください。 短いセクションなのですが、ストーリーは二つの視点を軸に展開します。 一つは、前回のセッションで紹介した「オブジェクトからオブジェクト上の関数へ」という視点です。このセクションのタイトルは、「Objects Versus Functions on Objects」でした。 もう一つは、そうした展開を、最初のサンプルとして導入した「ベクトル空間」= 線形代数 との対比で位置付けることです。この論文のサブタイトルは、「Parallel Narratives in Linear Algebra and Category Theory 」でした。 この二つを意識してもらうと、いろいろな気づきがあると思います。 一つ注意してもらいたいことがあります。 以前のセミナー「大規模言語モデルの数学的構造」での主要な数学的ツールは、copresheaf でした。ただ、このセクションは、copresheaf のカテゴリー論的「双対」概念である presheaf について論じているということです。 どちらも、あるカテゴリーCから集合のカテゴリーSet へのfunctor です。「オブジェクトからオブジェクト上の関数へ」という視点で見ると、両者は同じようなものです。 ただ、両者の違いを少しまとめてみました。 C上のpresheaf は、𝐶^𝑜𝑝 → 𝑆𝑒𝑡 のcontravariant functorで、 C上のcopresheafは、𝐶 → 𝑆𝑒𝑡 のcovariant functorです。 二つのfunctorのvarianceの違いから、そのrepresentable functorは、次のようになります。 presheafのrepresentableは、ℎ^𝑥 ≔ 𝐶( −, 𝑥 ) で、 copresheafのrepresentableは、ℎ_𝑥 ≔ 𝐶( 𝑥 ,− ) です。 後者の𝐶( 𝑥 ,− )の形が、以前の

ベクトル空間

【 オブジェクトからオブジェクト上の関数へ 】 あまり情報が与えられない、あるいは不完全な構造を持つ数学的対象𝑋が与えられたとしましょう。 Xを直接調べようとしても、それはXの要素・オブジェクトをいろいろ調べることに帰着するのですが、Xについてよくわからないことが起こります。 そう言う時、構造がよくわかっている対象Yをとって、XからYへの関数 Fun(X)を考えます。Fun(X)はYに値をとりますので、XよりはFun(X)の方が構造がわかりやすいということを期待できると言うことです。 「オブジェクトからオブジェクト上の関数へ」と言うのは、 Xだけに注目するのではなくFun(X)にもっと注目しようと言う視点の転換を促すスローガンだと思っていいと思います。 論文の"Objects Versus Functions on Objects"というセクションでは、こうしたオブジェクト上の関数への注目によって構成された数学的対象の例を三つほど挙げています。  ⚫️ ベクトル空間  ⚫️ (co)presheaf  ⚫️ enriched category 【 ベクトル空間 】 このセッションでは、ベクトル空間の例を取り上げます。 ベクトル空間というのは、ある集合X上で定義された体k(例えば、実数 R とか複素数 C とか)に値を取る関数の集合として、k^X という形で定義されます。 ベクトルは、関数なんです。 古典bit {0,1} から 量子bit { |0>, |1> } への移行も、{0,1}を考えるのではなく{0,1}上で定義関数を考えることへの飛躍として理解できます。次のように。  f(0)=1, f(1)=0 ; g(0)=0, g(1)=1である関数 f, g を考えて、 f = |0>, g = |1> と考える。 一般に、関数であるケット|i>は (それはケット|i>はベクトルであるというのと同じ意味です)引数j に対して、|i> (j) = 1 ( i = jの時) あるいは |i> (j) = 0 (i =jでない場合) という値を返します。 この量子ビットの例は定義域が{0,1}の例でしたが、任意の集合Xについて値域が{0,1}となる関数の集合も興味深い性質を持っています。Xの要素の上

中なおり

【 中なおり 】 MacBookの調子がおかしくなったのは、今年に入ってからです。 突然、画面が切れたと思ったら、バッテリーが空になっていました。問題は、充電アダプターを繋げているのに、充電がされないこと。 SMCリセットなどいろいろやってみたのですが、回復せず、泣く泣く諦めました。 本当は諦め切れず、四つのキーの同時押しで手を引き攣らせながら、時々、想い出しては蘇生を試みました。でも、意識は戻りませんでした。 このマシンを惜しんだのには、理由があります。12インチの画面の小型で、重さ1kgを切る軽量のマシンは、僕の仕事のスタイルでは、必要だったからです。 というのも、僕は、この10年以上、ソファーやベッドの上で横になったままで、片手でPCをもったままで仕事をしています。もちろん、もう一方の手で、高速ブラインドタッチができます。というのは大嘘で、一本指でキーを叩いています。 このスタイルだと、寝たきり老人になっても仕事ができるはずなので、近い将来を見越した良いスタイルだと思います。 もう一台、現役のM2−MacBook Air があるのですが、こいつは14インチで大きく、片手で持つにはちょっと重いのです。このところ、何回かやってみたので、腕の筋肉は鍛えられたかもしれません。 しかし、不思議なこともあるもので、MacBookが死んでから二週間ほどたったある日、電源をいれてみたら、MacBookが生き返ったのです。  「これで、寝ながら仕事ができる。」 詳細な蘇生術は省略しますが、この一週間ほど、騙し騙し、MacBookで仕事ができました。 ところが、昨日の発作は強烈だったようで、いろいろ手を尽くしたのですが、意識は戻りません。この一週間は機械の「中なおり」だったのかもしれません。 この文章は、重いMBAをこたつに乗せ、正座して書いています。  (やれば、できるじゃないか。それが普通。)  (でも、寝ている方が、生産性は高いと思う。)  (馬鹿なこと言ってんじゃないよ。)  (じゃ、君も寝ながらで仕事してみろよ。) Apple Storeに連絡しました。 電源回路の故障だろうということですが、基板全体の交換になるそうです。見積もり費用は、7万8千円だそうです。 このマシン7年前のものです。スペックはCPU  i7, メモリー16G、SSD 512Gそんなに悪いものではあ

マルレク 「意味の分散表現とニューラルネットワークの数理」 へのお誘い

【 マルレク 「意味の分散表現とニューラルネットワークの数理」 へのお誘い 】 今度のマルレクのテーマは、「意味の分散表現とニューラルネットワークの数理」です。  前回のセミナーを簡単に振り返りながら、それとの関連を述べてみたいと思います。 【 前回のセミナーの振り返り 】 前回のマルレク「大規模言語モデルの数学的構造」は、大規模言語モデルという巨大な対象が、どのように意味の世界を内部に構築するのかという問題に、「copresheaf 意味論」というカテゴリー論的数学モデルを与えて答えようとしたものです。 そこでは、学習時に入力に与えられる表現の「継続」の確率分布をモデルが学ぶことを言語のカテゴリーの特徴づけに生かそうとします。 以前の言語のカテゴリー L は、表現の「継続」関係を忠実に表現する単なるpreorder のカテゴリーでした。そこでの射 𝑓 : 𝑥  → 𝑦 ∈ 𝐿(𝑥,𝑦) は、単に真か偽の値しか取らない関数でしたが、これを単位区間[0.1]に値を取る確率値を取るようにしたいと言うことです。 そこで用いられたのが、あるカテゴリーCの射を(Cのオブジェクトはそのままで、Cの射だけを)、他のカテゴリーVに置き換えるという手法です。これを、CのカテゴリーV上のenrich化といいます。 この手法によって、もとのpreorder カテゴリーとしての言語のカテゴリーは、[0,1]カテゴリーによってenrich化され、オブジェクト間の射は確率値を取るように拡張されたのです。それが、Syntax カテゴリーです。  【 言語のカテゴリーLと 意味のカテゴリー copresheaf 𝑆𝑒𝑡^𝐿 】 前回のセミナーの一番重要な主張は、言語のカテゴリーLが与えられた時、それに対応する意味のカテゴリーは、Lから集合のカテゴリーSetへのfunctor からなる、functor カテゴリー 𝑆𝑒𝑡^𝐿 とみなすことができるという主張です。𝑆𝑒𝑡^𝐿を、L上のcopresheaf と呼びます。 簡単に言うと、Lのオブジェクトx (それは、xが言語Lのある表現だと言うことです)が与えられた時、L(x,y)の形のすべての関数の集合を考えて(それは、xの継続でありうるすべてのyについてL(x,y)なる関数すべてを考えることです)、それを次のように